Skip to main content
Glama
reflagcom

Bucket Feature Flags MCP Server

Official
by reflagcom
handlers.ts4.79 kB
import { DefaultBodyType, http, HttpResponse, StrictRequest } from "msw"; import { RawFlags } from "../../src/flag/flags"; export const testChannel = "testChannel"; export const flagResponse = { success: true, features: { flagA: { isEnabled: true, key: "flagA", targetingVersion: 1, config: undefined, ruleEvaluationResults: [false, true], missingContextFields: ["field1", "field2"], }, flagB: { isEnabled: true, targetingVersion: 11, key: "flagB", config: { version: 12, key: "gpt3", payload: { model: "gpt-something", temperature: 0.5 }, ruleEvaluationResults: [true, false, false], missingContextFields: ["field3"], }, }, }, }; export const flagsResult = Object.entries(flagResponse.features).reduce( (acc, [key, flag]) => { acc[key] = { ...flag!, config: flag.config, isEnabledOverride: null, }; return acc; }, {} as RawFlags, ); function checkRequest(request: StrictRequest<DefaultBodyType>) { const url = new URL(request.url); const hasKey = url.searchParams.get("publishableKey") || request.headers.get("Authorization"); const hasSdkVersion = url.searchParams.get("reflag-sdk-version") || request.headers.get("reflag-sdk-version"); const valid = hasKey && hasSdkVersion; if (!valid) { console.log( "missing token or sdk: " + request.url.toString() + " " + JSON.stringify(request.headers), ); } return valid; } const invalidReqResponse = new HttpResponse("missing token or sdk", { status: 400, }); export function getFlags({ request, }: { request: StrictRequest<DefaultBodyType>; }) { if (!checkRequest(request)) return invalidReqResponse; return HttpResponse.json(flagResponse); } export const handlers = [ http.post("https://front.reflag.com/user", async ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; const data = await request.json(); if ( typeof data !== "object" || !data || !data["userId"] || !data["attributes"] ) { return HttpResponse.error(); } return HttpResponse.json({ success: true, }); }), http.post("https://front.reflag.com/company", async ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; const data = await request.json(); if ( typeof data !== "object" || !data || !data["companyId"] || !data["attributes"] ) { return HttpResponse.error(); } return HttpResponse.json({ success: true, }); }), http.post("https://front.reflag.com/event", async ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; const data = await request.json(); if (typeof data !== "object" || !data || !data["userId"]) { return HttpResponse.error(); } return HttpResponse.json({ success: true, }); }), http.post("https://front.reflag.com/features/events", async ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; const data = await request.json(); if (typeof data !== "object" || !data || !data["userId"]) { return HttpResponse.error(); } return HttpResponse.json({ success: true, }); }), http.post("https://front.reflag.com/feedback", async ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; const data = await request.json(); if ( typeof data !== "object" || !data || !data["userId"] || typeof data["score"] !== "number" || (!data["featureId"] && !data["key"]) ) { return HttpResponse.error(); } return HttpResponse.json({ success: true, }); }), http.get("https://front.reflag.com/features/enabled", getFlags), http.get("https://front.reflag.com/features/evaluated", getFlags), http.post( "https://front.reflag.com/feedback/prompting-init", ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; return HttpResponse.json({ success: true, channel: testChannel }); }, ), http.get( "https://front.reflag.com/feedback/prompting-auth", ({ request }) => { if (!checkRequest(request)) return invalidReqResponse; return HttpResponse.json({ success: true, keyName: "keyName" }); }, ), http.post( "https://livemessaging.bucket.co/keys/keyName/requestToken", async ({ request }) => { const data = await request.json(); if (typeof data !== "object") { return HttpResponse.error(); } return HttpResponse.json({ success: true, token: "token", expires: 1234567890, }); }, ), ];

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/reflagcom/bucket-javascript-sdk'

If you have feedback or need assistance with the MCP directory API, please join our Discord server