@better-i18n/mcp 0.15.2 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/__tests__/base-tool.test.d.ts +2 -0
  2. package/dist/__tests__/base-tool.test.d.ts.map +1 -0
  3. package/dist/__tests__/base-tool.test.js +193 -0
  4. package/dist/__tests__/base-tool.test.js.map +1 -0
  5. package/dist/__tests__/contract.test.d.ts +24 -0
  6. package/dist/__tests__/contract.test.d.ts.map +1 -0
  7. package/dist/__tests__/contract.test.js +919 -0
  8. package/dist/__tests__/contract.test.js.map +1 -0
  9. package/dist/__tests__/fixtures/mock-client.d.ts +11 -0
  10. package/dist/__tests__/fixtures/mock-client.d.ts.map +1 -0
  11. package/dist/__tests__/fixtures/mock-client.js +33 -0
  12. package/dist/__tests__/fixtures/mock-client.js.map +1 -0
  13. package/dist/__tests__/helpers.d.ts +10 -0
  14. package/dist/__tests__/helpers.d.ts.map +1 -0
  15. package/dist/__tests__/helpers.js +27 -0
  16. package/dist/__tests__/helpers.js.map +1 -0
  17. package/dist/__tests__/schema-alignment.test.d.ts +15 -0
  18. package/dist/__tests__/schema-alignment.test.d.ts.map +1 -0
  19. package/dist/__tests__/schema-alignment.test.js +1011 -0
  20. package/dist/__tests__/schema-alignment.test.js.map +1 -0
  21. package/dist/__tests__/server-dispatch.test.d.ts +10 -0
  22. package/dist/__tests__/server-dispatch.test.d.ts.map +1 -0
  23. package/dist/__tests__/server-dispatch.test.js +202 -0
  24. package/dist/__tests__/server-dispatch.test.js.map +1 -0
  25. package/dist/tools/__tests__/createKeys.test.d.ts +2 -0
  26. package/dist/tools/__tests__/createKeys.test.d.ts.map +1 -0
  27. package/dist/tools/__tests__/createKeys.test.js +139 -0
  28. package/dist/tools/__tests__/createKeys.test.js.map +1 -0
  29. package/dist/tools/__tests__/deleteKeys.test.d.ts +2 -0
  30. package/dist/tools/__tests__/deleteKeys.test.d.ts.map +1 -0
  31. package/dist/tools/__tests__/deleteKeys.test.js +91 -0
  32. package/dist/tools/__tests__/deleteKeys.test.js.map +1 -0
  33. package/dist/tools/__tests__/getPendingChanges.test.d.ts +2 -0
  34. package/dist/tools/__tests__/getPendingChanges.test.d.ts.map +1 -0
  35. package/dist/tools/__tests__/getPendingChanges.test.js +50 -0
  36. package/dist/tools/__tests__/getPendingChanges.test.js.map +1 -0
  37. package/dist/tools/__tests__/getProject.test.d.ts +2 -0
  38. package/dist/tools/__tests__/getProject.test.d.ts.map +1 -0
  39. package/dist/tools/__tests__/getProject.test.js +55 -0
  40. package/dist/tools/__tests__/getProject.test.js.map +1 -0
  41. package/dist/tools/__tests__/getSync.test.d.ts +2 -0
  42. package/dist/tools/__tests__/getSync.test.d.ts.map +1 -0
  43. package/dist/tools/__tests__/getSync.test.js +42 -0
  44. package/dist/tools/__tests__/getSync.test.js.map +1 -0
  45. package/dist/tools/__tests__/getSyncs.test.d.ts +2 -0
  46. package/dist/tools/__tests__/getSyncs.test.d.ts.map +1 -0
  47. package/dist/tools/__tests__/getSyncs.test.js +66 -0
  48. package/dist/tools/__tests__/getSyncs.test.js.map +1 -0
  49. package/dist/tools/__tests__/getTranslations.test.d.ts +2 -0
  50. package/dist/tools/__tests__/getTranslations.test.d.ts.map +1 -0
  51. package/dist/tools/__tests__/getTranslations.test.js +114 -0
  52. package/dist/tools/__tests__/getTranslations.test.js.map +1 -0
  53. package/dist/tools/__tests__/listKeys.test.d.ts +2 -0
  54. package/dist/tools/__tests__/listKeys.test.d.ts.map +1 -0
  55. package/dist/tools/__tests__/listKeys.test.js +98 -0
  56. package/dist/tools/__tests__/listKeys.test.js.map +1 -0
  57. package/dist/tools/__tests__/listProjects.test.d.ts +2 -0
  58. package/dist/tools/__tests__/listProjects.test.d.ts.map +1 -0
  59. package/dist/tools/__tests__/listProjects.test.js +45 -0
  60. package/dist/tools/__tests__/listProjects.test.js.map +1 -0
  61. package/dist/tools/__tests__/proposeLanguageEdits.test.d.ts +2 -0
  62. package/dist/tools/__tests__/proposeLanguageEdits.test.d.ts.map +1 -0
  63. package/dist/tools/__tests__/proposeLanguageEdits.test.js +87 -0
  64. package/dist/tools/__tests__/proposeLanguageEdits.test.js.map +1 -0
  65. package/dist/tools/__tests__/proposeLanguages.test.d.ts +2 -0
  66. package/dist/tools/__tests__/proposeLanguages.test.d.ts.map +1 -0
  67. package/dist/tools/__tests__/proposeLanguages.test.js +109 -0
  68. package/dist/tools/__tests__/proposeLanguages.test.js.map +1 -0
  69. package/dist/tools/__tests__/publishTranslations.test.d.ts +2 -0
  70. package/dist/tools/__tests__/publishTranslations.test.d.ts.map +1 -0
  71. package/dist/tools/__tests__/publishTranslations.test.js +127 -0
  72. package/dist/tools/__tests__/publishTranslations.test.js.map +1 -0
  73. package/dist/tools/__tests__/updateKeys.test.d.ts +2 -0
  74. package/dist/tools/__tests__/updateKeys.test.d.ts.map +1 -0
  75. package/dist/tools/__tests__/updateKeys.test.js +122 -0
  76. package/dist/tools/__tests__/updateKeys.test.js.map +1 -0
  77. package/dist/tools/createKeys.d.ts.map +1 -1
  78. package/dist/tools/createKeys.js +11 -2
  79. package/dist/tools/createKeys.js.map +1 -1
  80. package/dist/tools/getTranslations.d.ts.map +1 -1
  81. package/dist/tools/getTranslations.js +5 -1
  82. package/dist/tools/getTranslations.js.map +1 -1
  83. package/dist/tools/listKeys.d.ts.map +1 -1
  84. package/dist/tools/listKeys.js +1 -0
  85. package/dist/tools/listKeys.js.map +1 -1
  86. package/dist/tools/updateKeys.d.ts.map +1 -1
  87. package/dist/tools/updateKeys.js +9 -3
  88. package/dist/tools/updateKeys.js.map +1 -1
  89. package/dist/worker.test.d.ts +16 -0
  90. package/dist/worker.test.d.ts.map +1 -0
  91. package/dist/worker.test.js +244 -0
  92. package/dist/worker.test.js.map +1 -0
  93. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"listKeys.js","sourceRoot":"","sources":["../../src/tools/listKeys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listKeys.js","sourceRoot":"","sources":["../../src/tools/listKeys.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateKeys.d.ts","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAc9C,eAAO,MAAM,UAAU,EAAE,IAiDxB,CAAC"}
1
+ {"version":3,"file":"updateKeys.d.ts","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAc9C,eAAO,MAAM,UAAU,EAAE,IAsDxB,CAAC"}
@@ -15,13 +15,19 @@ const inputSchema = projectSchema.extend({
15
15
  l: z.string().describe("Language code (e.g., 'tr', 'de')"),
16
16
  t: z.string().describe("Translation text"),
17
17
  s: z.boolean().optional().describe("true if updating source language text"),
18
- st: z.string().optional().describe("Translation status (e.g., 'approved')"),
18
+ st: z.string().optional().describe("Translation status (e.g., 'published')"),
19
19
  })).min(1),
20
20
  });
21
21
  export const updateKeys = {
22
22
  definition: {
23
23
  name: "updateKeys",
24
- description: "Update translations for existing keys. REQUIRED: Get key UUIDs first via getAllTranslations or listKeys (id field). Each entry updates ONE language for ONE key. Set s=true to update the source text.",
24
+ description: `Update translations for existing keys. UUID required do NOT use createKeys for existing keys.
25
+
26
+ WORKFLOW to add missing translations:
27
+ 1. listKeys({ missingLanguage: 'hr', fields: ['id'] }) → get UUIDs
28
+ 2. updateKeys({ t: [{ id: '<uuid>', l: 'hr', t: '<translation>' }] })
29
+
30
+ Each entry updates ONE language for ONE key. Set s=true to update the source text.`,
25
31
  inputSchema: {
26
32
  type: "object",
27
33
  properties: {
@@ -36,7 +42,7 @@ export const updateKeys = {
36
42
  l: { type: "string", description: "Language code (e.g., 'tr', 'de')" },
37
43
  t: { type: "string", description: "Translation text" },
38
44
  s: { type: "boolean", description: "true if updating source language text" },
39
- st: { type: "string", description: "Translation status (e.g., 'approved')" },
45
+ st: { type: "string", description: "Translation status (e.g., 'published')" },
40
46
  },
41
47
  required: ["id", "l", "t"],
42
48
  },
@@ -1 +1 @@
1
- {"version":3,"file":"updateKeys.js","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,CAAC,EAAE,CAAC,CAAC,KAAK,CACR,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;QAC7G,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC1D,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1C,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC3E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAC5E,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,CAAC;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,wMAAwM;QAC1M,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,CAAC,EAAE;oBACD,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,4EAA4E;oBACzF,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oFAAoF,EAAE;4BACzH,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;4BACtE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;4BACtD,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;4BAC5E,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;yBAC7E;wBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;qBAC3B;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;SAC3B;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC5C,wCAAwC;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,GAAG,IAAI;YACP,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;SACxB,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CACF;CACJ,CAAC"}
1
+ {"version":3,"file":"updateKeys.js","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,CAAC,EAAE,CAAC,CAAC,KAAK,CACR,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;QAC7G,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC1D,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1C,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC3E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC7E,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,CAAC;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;;;;;;mFAMkE;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,CAAC,EAAE;oBACD,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,4EAA4E;oBACzF,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oFAAoF,EAAE;4BACzH,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;4BACtE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;4BACtD,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;4BAC5E,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;yBAC9E;wBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;qBAC3B;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;SAC3B;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC5C,wCAAwC;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,GAAG,IAAI;YACP,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;SACxB,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CACF;CACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * worker.test.ts
3
+ *
4
+ * Tests for the Cloudflare Worker fetch handler exported from worker.ts.
5
+ *
6
+ * Strategy:
7
+ * - CORS, health, OAuth discovery, and auth-gate paths are pure HTTP
8
+ * logic and can be tested without any external services.
9
+ * - POST /mcp requests that pass auth will attempt to create a real
10
+ * tRPC client and MCP transport. Those calls will fail at the network
11
+ * layer (no live API), so we assert they do NOT return 401 (auth passed)
12
+ * and accept either a 4xx/5xx from the transport error path or a
13
+ * structured error response.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=worker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.test.d.ts","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * worker.test.ts
3
+ *
4
+ * Tests for the Cloudflare Worker fetch handler exported from worker.ts.
5
+ *
6
+ * Strategy:
7
+ * - CORS, health, OAuth discovery, and auth-gate paths are pure HTTP
8
+ * logic and can be tested without any external services.
9
+ * - POST /mcp requests that pass auth will attempt to create a real
10
+ * tRPC client and MCP transport. Those calls will fail at the network
11
+ * layer (no live API), so we assert they do NOT return 401 (auth passed)
12
+ * and accept either a 4xx/5xx from the transport error path or a
13
+ * structured error response.
14
+ */
15
+ import { describe, it, expect } from "vitest";
16
+ import worker from "./worker.js";
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+ const BASE_URL = "https://mcp.test";
21
+ function makeRequest(path, method = "GET", headers = {}, body) {
22
+ return new Request(`${BASE_URL}${path}`, {
23
+ method,
24
+ headers,
25
+ body,
26
+ });
27
+ }
28
+ /** Minimal Env with no service bindings */
29
+ const emptyEnv = {};
30
+ /** Env with a fake AUTH_API service binding (for OAuth error path tests) */
31
+ const envWithFakeAuthApi = {
32
+ AUTH_API: {
33
+ fetch: async () => new Response(JSON.stringify({ error: "unauthorized" }), { status: 401 }),
34
+ },
35
+ MCP_SERVICE_SECRET: "test-secret",
36
+ };
37
+ // ---------------------------------------------------------------------------
38
+ // CORS
39
+ // ---------------------------------------------------------------------------
40
+ describe("Worker — CORS preflight", () => {
41
+ it("OPTIONS returns 204 with CORS headers", async () => {
42
+ const req = makeRequest("/mcp", "OPTIONS");
43
+ const res = await worker.fetch(req, emptyEnv);
44
+ expect(res.status).toBe(204);
45
+ expect(res.headers.get("Access-Control-Allow-Origin")).toBe("*");
46
+ expect(res.headers.get("Access-Control-Allow-Methods")).toContain("POST");
47
+ expect(res.headers.get("Access-Control-Allow-Headers")).toContain("Authorization");
48
+ });
49
+ it("OPTIONS on any path returns 204", async () => {
50
+ const req = makeRequest("/health", "OPTIONS");
51
+ const res = await worker.fetch(req, emptyEnv);
52
+ expect(res.status).toBe(204);
53
+ });
54
+ });
55
+ // ---------------------------------------------------------------------------
56
+ // Health check
57
+ // ---------------------------------------------------------------------------
58
+ describe("Worker — health endpoint", () => {
59
+ it("GET /health returns 200 with status ok", async () => {
60
+ const req = makeRequest("/health");
61
+ const res = await worker.fetch(req, emptyEnv);
62
+ expect(res.status).toBe(200);
63
+ const body = (await res.json());
64
+ expect(body.status).toBe("ok");
65
+ expect(body.runtime).toBe("cloudflare-workers");
66
+ });
67
+ it("GET /health response has Content-Type application/json", async () => {
68
+ const req = makeRequest("/health");
69
+ const res = await worker.fetch(req, emptyEnv);
70
+ expect(res.headers.get("Content-Type")).toContain("application/json");
71
+ });
72
+ });
73
+ // ---------------------------------------------------------------------------
74
+ // OAuth discovery — Protected Resource Metadata (RFC 9728)
75
+ // ---------------------------------------------------------------------------
76
+ describe("Worker — OAuth discovery", () => {
77
+ it("GET /.well-known/oauth-protected-resource returns 200 with required fields", async () => {
78
+ const req = makeRequest("/.well-known/oauth-protected-resource");
79
+ const res = await worker.fetch(req, emptyEnv);
80
+ expect(res.status).toBe(200);
81
+ const body = (await res.json());
82
+ expect(body).toHaveProperty("resource");
83
+ expect(body).toHaveProperty("authorization_servers");
84
+ expect(body).toHaveProperty("bearer_methods_supported");
85
+ expect(body.bearer_methods_supported).toContain("header");
86
+ });
87
+ it("GET /.well-known/oauth-protected-resource resource points to request host", async () => {
88
+ const req = makeRequest("/.well-known/oauth-protected-resource");
89
+ const res = await worker.fetch(req, emptyEnv);
90
+ const body = (await res.json());
91
+ expect(body.resource).toBe("https://mcp.test");
92
+ });
93
+ it("GET /.well-known/oauth-authorization-server returns 200 with required fields", async () => {
94
+ const req = makeRequest("/.well-known/oauth-authorization-server");
95
+ const res = await worker.fetch(req, emptyEnv);
96
+ expect(res.status).toBe(200);
97
+ const body = (await res.json());
98
+ expect(body).toHaveProperty("issuer");
99
+ expect(body).toHaveProperty("authorization_endpoint");
100
+ expect(body).toHaveProperty("token_endpoint");
101
+ expect(body).toHaveProperty("code_challenge_methods_supported");
102
+ });
103
+ it("GET /.well-known/oauth-authorization-server supports S256 PKCE", async () => {
104
+ const req = makeRequest("/.well-known/oauth-authorization-server");
105
+ const res = await worker.fetch(req, emptyEnv);
106
+ const body = (await res.json());
107
+ expect(body.code_challenge_methods_supported).toContain("S256");
108
+ });
109
+ });
110
+ // ---------------------------------------------------------------------------
111
+ // MCP endpoint — authentication gate
112
+ // ---------------------------------------------------------------------------
113
+ describe("Worker — /mcp auth gate", () => {
114
+ it("POST /mcp without Authorization header returns 401", async () => {
115
+ const req = makeRequest("/mcp", "POST", {}, "{}");
116
+ const res = await worker.fetch(req, emptyEnv);
117
+ expect(res.status).toBe(401);
118
+ });
119
+ it("POST /mcp without Authorization header has WWW-Authenticate header", async () => {
120
+ const req = makeRequest("/mcp", "POST", {}, "{}");
121
+ const res = await worker.fetch(req, emptyEnv);
122
+ expect(res.headers.get("WWW-Authenticate")).toBeTruthy();
123
+ expect(res.headers.get("WWW-Authenticate")).toContain("Bearer");
124
+ });
125
+ it("POST /mcp with empty Authorization header returns 401", async () => {
126
+ const req = makeRequest("/mcp", "POST", { Authorization: "" }, "{}");
127
+ const res = await worker.fetch(req, emptyEnv);
128
+ expect(res.status).toBe(401);
129
+ });
130
+ it("POST /mcp with malformed Authorization (no Bearer prefix) returns 401", async () => {
131
+ const req = makeRequest("/mcp", "POST", { Authorization: "Basic abc123" }, "{}");
132
+ const res = await worker.fetch(req, emptyEnv);
133
+ expect(res.status).toBe(401);
134
+ });
135
+ it("GET /mcp without token returns 401", async () => {
136
+ const req = makeRequest("/mcp", "GET");
137
+ const res = await worker.fetch(req, emptyEnv);
138
+ expect(res.status).toBe(401);
139
+ });
140
+ });
141
+ // ---------------------------------------------------------------------------
142
+ // MCP endpoint — API key auth path (bi- prefix)
143
+ // ---------------------------------------------------------------------------
144
+ describe("Worker — /mcp API key auth (bi- prefix)", () => {
145
+ it("GET /mcp with bi- prefix token returns 200 SSE stream", async () => {
146
+ const req = makeRequest("/mcp", "GET", {
147
+ Authorization: "Bearer bi-test-api-key",
148
+ });
149
+ const res = await worker.fetch(req, emptyEnv);
150
+ // Auth passed — worker returns an SSE stream
151
+ expect(res.status).toBe(200);
152
+ expect(res.headers.get("Content-Type")).toContain("text/event-stream");
153
+ });
154
+ it("GET /mcp SSE response has CORS headers when authenticated", async () => {
155
+ const req = makeRequest("/mcp", "GET", {
156
+ Authorization: "Bearer bi-abc",
157
+ });
158
+ const res = await worker.fetch(req, emptyEnv);
159
+ expect(res.headers.get("Access-Control-Allow-Origin")).toBe("*");
160
+ });
161
+ it("POST /mcp with bi- prefix token does not return 401 (auth passed)", async () => {
162
+ const req = makeRequest("/mcp", "POST", {
163
+ Authorization: "Bearer bi-test-api-key",
164
+ "Content-Type": "application/json",
165
+ }, JSON.stringify({
166
+ jsonrpc: "2.0",
167
+ id: 1,
168
+ method: "tools/list",
169
+ params: {},
170
+ }));
171
+ // The handler will attempt a real tRPC call and likely error at the
172
+ // network layer, but it MUST NOT return 401 — the auth gate was passed.
173
+ const res = await worker.fetch(req, emptyEnv);
174
+ expect(res.status).not.toBe(401);
175
+ });
176
+ });
177
+ // ---------------------------------------------------------------------------
178
+ // MCP endpoint — OAuth token path (no AUTH_API binding)
179
+ // ---------------------------------------------------------------------------
180
+ describe("Worker — /mcp OAuth token path", () => {
181
+ it("POST /mcp with OAuth token but no AUTH_API returns 500", async () => {
182
+ const req = makeRequest("/mcp", "POST", {
183
+ Authorization: "Bearer oauth-token-without-bi-prefix",
184
+ "Content-Type": "application/json",
185
+ }, "{}");
186
+ // No AUTH_API service binding → explicit 500 error
187
+ const res = await worker.fetch(req, emptyEnv);
188
+ expect(res.status).toBe(500);
189
+ const body = (await res.json());
190
+ expect(typeof body.error).toBe("string");
191
+ expect(body.error.toLowerCase()).toContain("oauth");
192
+ });
193
+ it("POST /mcp with OAuth token but only AUTH_API (no MCP_SERVICE_SECRET) returns 500", async () => {
194
+ const envWithOnlyAuthApi = {
195
+ AUTH_API: {
196
+ fetch: async () => new Response(JSON.stringify({}), { status: 200 }),
197
+ },
198
+ // MCP_SERVICE_SECRET intentionally omitted
199
+ };
200
+ const req = makeRequest("/mcp", "POST", {
201
+ Authorization: "Bearer some-oauth-token",
202
+ "Content-Type": "application/json",
203
+ }, "{}");
204
+ const res = await worker.fetch(req, envWithOnlyAuthApi);
205
+ expect(res.status).toBe(500);
206
+ });
207
+ it("POST /mcp with invalid OAuth token (AUTH_API returns 401) returns 401", async () => {
208
+ const req = makeRequest("/mcp", "POST", {
209
+ Authorization: "Bearer expired-oauth-token",
210
+ "Content-Type": "application/json",
211
+ }, "{}");
212
+ const res = await worker.fetch(req, envWithFakeAuthApi);
213
+ expect(res.status).toBe(401);
214
+ });
215
+ });
216
+ // ---------------------------------------------------------------------------
217
+ // Unknown paths
218
+ // ---------------------------------------------------------------------------
219
+ describe("Worker — unknown routes", () => {
220
+ it("GET /unknown returns 404", async () => {
221
+ const req = makeRequest("/unknown-path");
222
+ const res = await worker.fetch(req, emptyEnv);
223
+ expect(res.status).toBe(404);
224
+ const body = (await res.json());
225
+ expect(body.error).toBeTruthy();
226
+ });
227
+ it("GET / returns 404", async () => {
228
+ const req = makeRequest("/");
229
+ const res = await worker.fetch(req, emptyEnv);
230
+ expect(res.status).toBe(404);
231
+ });
232
+ it("POST /webhook returns 404", async () => {
233
+ const req = makeRequest("/webhook", "POST", {}, "{}");
234
+ const res = await worker.fetch(req, emptyEnv);
235
+ expect(res.status).toBe(404);
236
+ });
237
+ it("404 response has CORS headers", async () => {
238
+ const req = makeRequest("/not-a-real-endpoint");
239
+ const res = await worker.fetch(req, emptyEnv);
240
+ expect(res.status).toBe(404);
241
+ expect(res.headers.get("Access-Control-Allow-Origin")).toBe("*");
242
+ });
243
+ });
244
+ //# sourceMappingURL=worker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.test.js","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-i18n/mcp",
3
- "version": "0.15.2",
3
+ "version": "0.15.4",
4
4
  "description": "MCP server for Better i18n translation management - AI-powered translation workflow for Cursor, Claude, and other AI assistants",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  "prepublishOnly": "npm run clean && npm run build && chmod +x ./dist/index.js ./dist/http.js"
51
51
  },
52
52
  "dependencies": {
53
- "@better-i18n/mcp-types": "^0.11.0",
53
+ "@better-i18n/mcp-types": "^0.15.4",
54
54
  "@modelcontextprotocol/sdk": "^1.25.3",
55
55
  "@trpc/client": "^11.0.0",
56
56
  "zod": "^3.25.1"