@fleetx_io/fleetx-mcp-server 1.1.7 → 2.0.0

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 (118) hide show
  1. package/CHANGELOG.md +44 -12
  2. package/README.md +56 -6
  3. package/dist/auth/fleetx/exchange.d.ts +13 -0
  4. package/dist/auth/fleetx/exchange.d.ts.map +1 -0
  5. package/dist/auth/fleetx/exchange.js +27 -0
  6. package/dist/auth/fleetx/exchange.js.map +1 -0
  7. package/dist/auth/google/callback.d.ts +3 -0
  8. package/dist/auth/google/callback.d.ts.map +1 -0
  9. package/dist/auth/google/callback.js +98 -0
  10. package/dist/auth/google/callback.js.map +1 -0
  11. package/dist/auth/google/client.d.ts +17 -0
  12. package/dist/auth/google/client.d.ts.map +1 -0
  13. package/dist/auth/google/client.js +50 -0
  14. package/dist/auth/google/client.js.map +1 -0
  15. package/dist/auth/oauth/authorize.d.ts +3 -0
  16. package/dist/auth/oauth/authorize.d.ts.map +1 -0
  17. package/dist/auth/oauth/authorize.js +74 -0
  18. package/dist/auth/oauth/authorize.js.map +1 -0
  19. package/dist/auth/oauth/cimd.d.ts +33 -0
  20. package/dist/auth/oauth/cimd.d.ts.map +1 -0
  21. package/dist/auth/oauth/cimd.js +63 -0
  22. package/dist/auth/oauth/cimd.js.map +1 -0
  23. package/dist/auth/oauth/pending-sessions.d.ts +5 -0
  24. package/dist/auth/oauth/pending-sessions.d.ts.map +1 -0
  25. package/dist/auth/oauth/pending-sessions.js +24 -0
  26. package/dist/auth/oauth/pending-sessions.js.map +1 -0
  27. package/dist/auth/oauth/pkce.d.ts +3 -0
  28. package/dist/auth/oauth/pkce.d.ts.map +1 -0
  29. package/dist/auth/oauth/pkce.js +7 -0
  30. package/dist/auth/oauth/pkce.js.map +1 -0
  31. package/dist/auth/oauth/register.d.ts +8 -0
  32. package/dist/auth/oauth/register.d.ts.map +1 -0
  33. package/dist/auth/oauth/register.js +37 -0
  34. package/dist/auth/oauth/register.js.map +1 -0
  35. package/dist/auth/oauth/token.d.ts +3 -0
  36. package/dist/auth/oauth/token.d.ts.map +1 -0
  37. package/dist/auth/oauth/token.js +111 -0
  38. package/dist/auth/oauth/token.js.map +1 -0
  39. package/dist/auth/oauth/types.d.ts +11 -0
  40. package/dist/auth/oauth/types.d.ts.map +1 -0
  41. package/dist/auth/oauth/types.js +2 -0
  42. package/dist/auth/oauth/types.js.map +1 -0
  43. package/dist/auth/oauth/userinfo.d.ts +3 -0
  44. package/dist/auth/oauth/userinfo.d.ts.map +1 -0
  45. package/dist/auth/oauth/userinfo.js +29 -0
  46. package/dist/auth/oauth/userinfo.js.map +1 -0
  47. package/dist/auth/storage/authorization-code.d.ts +19 -0
  48. package/dist/auth/storage/authorization-code.d.ts.map +1 -0
  49. package/dist/auth/storage/authorization-code.js +44 -0
  50. package/dist/auth/storage/authorization-code.js.map +1 -0
  51. package/dist/auth/storage/connected-account.d.ts +24 -0
  52. package/dist/auth/storage/connected-account.d.ts.map +1 -0
  53. package/dist/auth/storage/connected-account.js +60 -0
  54. package/dist/auth/storage/connected-account.js.map +1 -0
  55. package/dist/auth/storage/db.d.ts +3 -0
  56. package/dist/auth/storage/db.d.ts.map +1 -0
  57. package/dist/auth/storage/db.js +110 -0
  58. package/dist/auth/storage/db.js.map +1 -0
  59. package/dist/auth/storage/oauth-client.d.ts +12 -0
  60. package/dist/auth/storage/oauth-client.d.ts.map +1 -0
  61. package/dist/auth/storage/oauth-client.js +28 -0
  62. package/dist/auth/storage/oauth-client.js.map +1 -0
  63. package/dist/auth/storage/refresh-token.d.ts +17 -0
  64. package/dist/auth/storage/refresh-token.d.ts.map +1 -0
  65. package/dist/auth/storage/refresh-token.js +46 -0
  66. package/dist/auth/storage/refresh-token.js.map +1 -0
  67. package/dist/auth/tokens/encryption.d.ts +5 -0
  68. package/dist/auth/tokens/encryption.d.ts.map +1 -0
  69. package/dist/auth/tokens/encryption.js +27 -0
  70. package/dist/auth/tokens/encryption.js.map +1 -0
  71. package/dist/auth/tokens/jwt.d.ts +8 -0
  72. package/dist/auth/tokens/jwt.d.ts.map +1 -0
  73. package/dist/auth/tokens/jwt.js +34 -0
  74. package/dist/auth/tokens/jwt.js.map +1 -0
  75. package/dist/auth.d.ts +1 -1
  76. package/dist/auth.d.ts.map +1 -1
  77. package/dist/auth.js +2 -1
  78. package/dist/auth.js.map +1 -1
  79. package/dist/config/oauth.d.ts +21 -0
  80. package/dist/config/oauth.d.ts.map +1 -0
  81. package/dist/config/oauth.js +41 -0
  82. package/dist/config/oauth.js.map +1 -0
  83. package/dist/index.d.ts +1 -1
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +4 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/mcp/middleware/auth.d.ts +18 -0
  88. package/dist/mcp/middleware/auth.d.ts.map +1 -0
  89. package/dist/mcp/middleware/auth.js +35 -0
  90. package/dist/mcp/middleware/auth.js.map +1 -0
  91. package/dist/server/createMcpServer.d.ts +8 -3
  92. package/dist/server/createMcpServer.d.ts.map +1 -1
  93. package/dist/server/createMcpServer.js +28 -12
  94. package/dist/server/createMcpServer.js.map +1 -1
  95. package/dist/transports/fastify.d.ts +2 -0
  96. package/dist/transports/fastify.d.ts.map +1 -0
  97. package/dist/transports/fastify.js +223 -0
  98. package/dist/transports/fastify.js.map +1 -0
  99. package/dist/transports/sse.d.ts +1 -1
  100. package/dist/transports/sse.d.ts.map +1 -1
  101. package/dist/transports/sse.js +162 -67
  102. package/dist/transports/sse.js.map +1 -1
  103. package/dist/transports/stdio.d.ts.map +1 -1
  104. package/dist/transports/stdio.js +8 -1
  105. package/dist/transports/stdio.js.map +1 -1
  106. package/dist/utils-http.d.ts +8 -0
  107. package/dist/utils-http.d.ts.map +1 -0
  108. package/dist/utils-http.js +15 -0
  109. package/dist/utils-http.js.map +1 -0
  110. package/dist/utils.d.ts +1 -0
  111. package/dist/utils.d.ts.map +1 -1
  112. package/dist/utils.js +12 -2
  113. package/dist/utils.js.map +1 -1
  114. package/dist/well-known/discovery.d.ts +4 -0
  115. package/dist/well-known/discovery.d.ts.map +1 -0
  116. package/dist/well-known/discovery.js +25 -0
  117. package/dist/well-known/discovery.js.map +1 -0
  118. package/package.json +15 -7
@@ -0,0 +1,17 @@
1
+ export interface RefreshToken {
2
+ id: string;
3
+ token: string;
4
+ userId: string;
5
+ clientId: string;
6
+ expiresAt: number;
7
+ revokedAt: number | null;
8
+ }
9
+ export declare function createRefreshToken(params: {
10
+ userId: string;
11
+ clientId: string;
12
+ }): RefreshToken;
13
+ export declare function findRefreshToken(token: string): RefreshToken | null;
14
+ /** Revokes the old token and issues a new one (rotation). Returns null if invalid/expired. */
15
+ export declare function rotateRefreshToken(oldToken: string): RefreshToken | null;
16
+ export declare function revokeRefreshToken(token: string): void;
17
+ //# sourceMappingURL=refresh-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.d.ts","sourceRoot":"","sources":["../../../src/auth/storage/refresh-token.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAsBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAY7F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMnE;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWxE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtD"}
@@ -0,0 +1,46 @@
1
+ import { randomBytes, randomUUID } from "node:crypto";
2
+ import { getDb } from "./db.js";
3
+ import { REFRESH_TOKEN_TTL_DAYS } from "../../config/oauth.js";
4
+ function rowToToken(row) {
5
+ return {
6
+ id: row.id,
7
+ token: row.token,
8
+ userId: row.user_id,
9
+ clientId: row.client_id,
10
+ expiresAt: row.expires_at,
11
+ revokedAt: row.revoked_at,
12
+ };
13
+ }
14
+ export function createRefreshToken(params) {
15
+ const db = getDb();
16
+ const id = randomUUID();
17
+ const token = randomBytes(32).toString("base64url");
18
+ const expiresAt = Date.now() + REFRESH_TOKEN_TTL_DAYS * 24 * 60 * 60 * 1000;
19
+ db.prepare(`
20
+ INSERT INTO refresh_tokens (id, token, user_id, client_id, expires_at, revoked_at)
21
+ VALUES (?, ?, ?, ?, ?, NULL)
22
+ `).run(id, token, params.userId, params.clientId, expiresAt);
23
+ return { id, token, userId: params.userId, clientId: params.clientId, expiresAt, revokedAt: null };
24
+ }
25
+ export function findRefreshToken(token) {
26
+ const db = getDb();
27
+ const row = db
28
+ .prepare("SELECT * FROM refresh_tokens WHERE token = ?")
29
+ .get(token);
30
+ return row ? rowToToken(row) : null;
31
+ }
32
+ /** Revokes the old token and issues a new one (rotation). Returns null if invalid/expired. */
33
+ export function rotateRefreshToken(oldToken) {
34
+ const db = getDb();
35
+ const existing = findRefreshToken(oldToken);
36
+ if (!existing || existing.revokedAt !== null || existing.expiresAt < Date.now()) {
37
+ return null;
38
+ }
39
+ db.prepare("UPDATE refresh_tokens SET revoked_at = ? WHERE id = ?").run(Date.now(), existing.id);
40
+ return createRefreshToken({ userId: existing.userId, clientId: existing.clientId });
41
+ }
42
+ export function revokeRefreshToken(token) {
43
+ const db = getDb();
44
+ db.prepare("UPDATE refresh_tokens SET revoked_at = ? WHERE token = ?").run(Date.now(), token);
45
+ }
46
+ //# sourceMappingURL=refresh-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.js","sourceRoot":"","sources":["../../../src/auth/storage/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAoB/D,SAAS,UAAU,CAAC,GAAU;IAC5B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA4C;IAC7E,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE5E,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAkB,8CAA8C,CAAC;SACxE,GAAG,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjG,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Encrypts plaintext with AES-256-GCM. Returns "iv:authTag:ciphertext" (all hex). */
2
+ export declare function encryptToken(plaintext: string, keyHex: string): string;
3
+ /** Decrypts a value produced by {@link encryptToken}. */
4
+ export declare function decryptToken(ciphertext: string, keyHex: string): string;
5
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/auth/tokens/encryption.ts"],"names":[],"mappings":"AAKA,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAStE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcvE"}
@@ -0,0 +1,27 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
2
+ const ALGORITHM = "aes-256-gcm";
3
+ const IV_LENGTH = 12;
4
+ /** Encrypts plaintext with AES-256-GCM. Returns "iv:authTag:ciphertext" (all hex). */
5
+ export function encryptToken(plaintext, keyHex) {
6
+ const key = Buffer.from(keyHex, "hex");
7
+ const iv = randomBytes(IV_LENGTH);
8
+ const cipher = createCipheriv(ALGORITHM, key, iv);
9
+ const encrypted = Buffer.concat([cipher.update(plaintext, "utf8"), cipher.final()]);
10
+ const authTag = cipher.getAuthTag();
11
+ return [iv.toString("hex"), authTag.toString("hex"), encrypted.toString("hex")].join(":");
12
+ }
13
+ /** Decrypts a value produced by {@link encryptToken}. */
14
+ export function decryptToken(ciphertext, keyHex) {
15
+ const key = Buffer.from(keyHex, "hex");
16
+ const parts = ciphertext.split(":");
17
+ if (parts.length !== 3)
18
+ throw new Error("Invalid ciphertext format");
19
+ const [ivHex, authTagHex, encryptedHex] = parts;
20
+ const iv = Buffer.from(ivHex, "hex");
21
+ const authTag = Buffer.from(authTagHex, "hex");
22
+ const encrypted = Buffer.from(encryptedHex, "hex");
23
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
24
+ decipher.setAuthTag(authTag);
25
+ return Buffer.concat([decipher.update(encrypted), decipher.final()]).toString("utf8");
26
+ }
27
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../src/auth/tokens/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,MAAc;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,MAAc;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAErE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC;IAChD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface McpTokenPayload {
2
+ sub: string;
3
+ email: string;
4
+ name: string;
5
+ }
6
+ export declare function signMcpAccessToken(payload: McpTokenPayload): Promise<string>;
7
+ export declare function verifyMcpAccessToken(token: string): Promise<McpTokenPayload | null>;
8
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/auth/tokens/jwt.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAuBzF"}
@@ -0,0 +1,34 @@
1
+ import { SignJWT, jwtVerify } from "jose";
2
+ import { getOAuthConfig, ACCESS_TOKEN_TTL_SECONDS } from "../../config/oauth.js";
3
+ export async function signMcpAccessToken(payload) {
4
+ const { JWT_SECRET, MCP_BASE_URL } = getOAuthConfig();
5
+ const secret = new TextEncoder().encode(JWT_SECRET);
6
+ return new SignJWT({ email: payload.email, name: payload.name })
7
+ .setProtectedHeader({ alg: "HS256" })
8
+ .setSubject(payload.sub)
9
+ .setIssuedAt()
10
+ .setExpirationTime(`${ACCESS_TOKEN_TTL_SECONDS}s`)
11
+ .setIssuer(MCP_BASE_URL)
12
+ .sign(secret);
13
+ }
14
+ export async function verifyMcpAccessToken(token) {
15
+ try {
16
+ const { JWT_SECRET, MCP_BASE_URL } = getOAuthConfig();
17
+ const secret = new TextEncoder().encode(JWT_SECRET);
18
+ const { payload } = await jwtVerify(token, secret, { issuer: MCP_BASE_URL });
19
+ if (typeof payload.sub !== "string" ||
20
+ typeof payload["email"] !== "string" ||
21
+ typeof payload["name"] !== "string") {
22
+ return null;
23
+ }
24
+ return {
25
+ sub: payload.sub,
26
+ email: payload["email"],
27
+ name: payload["name"],
28
+ };
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../src/auth/tokens/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAQjF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAwB;IAC/D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;SAC7D,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACpC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,WAAW,EAAE;SACb,iBAAiB,CAAC,GAAG,wBAAwB,GAAG,CAAC;SACjD,SAAS,CAAC,YAAY,CAAC;SACvB,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAa;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAE7E,IACE,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;YAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;YACpC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAW;YACjC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAW;SAChC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/auth.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TokenStore } from "./types.js";
2
- export declare function createTokenStore(): TokenStore;
2
+ export declare function createTokenStore(onClear?: () => void): TokenStore;
3
3
  export declare function login(loginUrl: string, username: string, password: string, tokenStore: TokenStore): Promise<{
4
4
  success: boolean;
5
5
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,wBAAgB,gBAAgB,IAAI,UAAU,CAoB7C;AAED,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyChD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,UAAU,CAqBjE;AAED,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyChD"}
package/dist/auth.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import axios from "axios";
2
2
  import { log } from "./utils.js";
3
- export function createTokenStore() {
3
+ export function createTokenStore(onClear) {
4
4
  let accessToken = null;
5
5
  return {
6
6
  get accessToken() {
@@ -14,6 +14,7 @@ export function createTokenStore() {
14
14
  },
15
15
  clearToken() {
16
16
  accessToken = null;
17
+ onClear?.();
17
18
  },
18
19
  isAuthenticated() {
19
20
  return accessToken !== null;
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,OAAO;QACL,IAAI,WAAW;YACb,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,QAAQ,CAAC,KAAa;YACpB,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,QAAQ;YACN,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,UAAU;YACR,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,eAAe;YACb,OAAO,WAAW,KAAK,IAAI,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,UAAsB;IAEtB,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE;YAC/D,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,QAAQ,EAAE,iBAAiB;aAC5B;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;QAGzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wDAAwD;aAClE,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,GAAiB,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QACrC,MAAM,MAAM,GACV,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI;YAC5D,CAAC,CAAE,IAA4B,CAAC,OAAO;YACvC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,sBAAsB,MAAM,MAAM,MAAM,EAAE;SACpD,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,OAAO;QACL,IAAI,WAAW;YACb,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,QAAQ,CAAC,KAAa;YACpB,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,QAAQ;YACN,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,UAAU;YACR,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,eAAe;YACb,OAAO,WAAW,KAAK,IAAI,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,UAAsB;IAEtB,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE;YAC/D,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,QAAQ,EAAE,iBAAiB;aAC5B;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;QAGzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wDAAwD;aAClE,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,GAAiB,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QACrC,MAAM,MAAM,GACV,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI;YAC5D,CAAC,CAAE,IAA4B,CAAC,OAAO;YACvC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,sBAAsB,MAAM,MAAM,MAAM,EAAE;SACpD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ declare const configSchema: z.ZodObject<{
3
+ MCP_BASE_URL: z.ZodDefault<z.ZodString>;
4
+ GOOGLE_CLIENT_ID: z.ZodString;
5
+ GOOGLE_CLIENT_SECRET: z.ZodString;
6
+ JWT_SECRET: z.ZodString;
7
+ TOKEN_ENCRYPTION_KEY: z.ZodString;
8
+ DATABASE_PATH: z.ZodDefault<z.ZodString>;
9
+ SESSION_SECRET: z.ZodDefault<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ export type OAuthConfig = z.infer<typeof configSchema>;
12
+ export declare function getOAuthConfig(): OAuthConfig;
13
+ export declare function isOAuthConfigured(): boolean;
14
+ export declare const CLAUDE_CLIENT_ID = "claude-production";
15
+ export declare const CLAUDE_REDIRECT_URI = "https://claude.ai/api/mcp/auth_callback";
16
+ export declare const AUTH_CODE_TTL_SECONDS = 300;
17
+ export declare const ACCESS_TOKEN_TTL_SECONDS: number;
18
+ export declare const REFRESH_TOKEN_TTL_DAYS = 30;
19
+ export declare const PENDING_SESSION_TTL_MS: number;
20
+ export {};
21
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/config/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,YAAY;;;;;;;;iBAQhB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAKvD,wBAAgB,cAAc,IAAI,WAAW,CAc5C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,mBAAmB,4CAA4C,CAAC;AAC7E,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,wBAAwB,QAAoB,CAAC;AAC1D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,sBAAsB,QAAiB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ const configSchema = z.object({
3
+ MCP_BASE_URL: z.string().url().default("https://mcp.fleetx.io"),
4
+ GOOGLE_CLIENT_ID: z.string().min(1),
5
+ GOOGLE_CLIENT_SECRET: z.string().min(1),
6
+ JWT_SECRET: z.string().min(32),
7
+ TOKEN_ENCRYPTION_KEY: z.string().length(64), // 32-byte AES key as hex
8
+ DATABASE_PATH: z.string().default("./data/mcp.db"),
9
+ SESSION_SECRET: z.string().min(32).default("change-me-in-production-32-chars!!"),
10
+ });
11
+ let _config = null;
12
+ let _configLoadAttempted = false;
13
+ export function getOAuthConfig() {
14
+ if (_config)
15
+ return _config;
16
+ if (_configLoadAttempted)
17
+ throw new Error("OAuth config not available");
18
+ _configLoadAttempted = true;
19
+ const result = configSchema.safeParse(process.env);
20
+ if (!result.success) {
21
+ const missing = result.error.issues
22
+ .map((i) => `${i.path.join(".")}: ${i.message}`)
23
+ .join("; ");
24
+ throw new Error(`OAuth config invalid: ${missing}`);
25
+ }
26
+ _config = result.data;
27
+ return _config;
28
+ }
29
+ export function isOAuthConfigured() {
30
+ return !!(process.env.GOOGLE_CLIENT_ID &&
31
+ process.env.GOOGLE_CLIENT_SECRET &&
32
+ process.env.JWT_SECRET &&
33
+ process.env.TOKEN_ENCRYPTION_KEY);
34
+ }
35
+ export const CLAUDE_CLIENT_ID = "claude-production";
36
+ export const CLAUDE_REDIRECT_URI = "https://claude.ai/api/mcp/auth_callback";
37
+ export const AUTH_CODE_TTL_SECONDS = 300; // 5 minutes
38
+ export const ACCESS_TOKEN_TTL_SECONDS = 15 * 24 * 60 * 60; // 15 days
39
+ export const REFRESH_TOKEN_TTL_DAYS = 30;
40
+ export const PENDING_SESSION_TTL_MS = 10 * 60 * 1000; // 10 minutes
41
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/config/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAC/D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,yBAAyB;IACtE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAClD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC;CACjF,CAAC,CAAC;AAIH,IAAI,OAAO,GAAuB,IAAI,CAAC;AACvC,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,oBAAoB;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAExE,oBAAoB,GAAG,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,yCAAyC,CAAC;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC,CAAC,YAAY;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import "dotenv/config";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  #!/usr/bin/env node
2
+ // Load .env before anything else. No-op if file is absent (production envs inject vars directly).
3
+ import "dotenv/config";
2
4
  import { log } from "./utils.js";
3
5
  const transport = (process.env.MCP_TRANSPORT ?? "stdio").toLowerCase();
4
6
  async function main() {
5
7
  log(`Starting FleetX MCP Server in ${transport} mode`);
6
8
  if (transport === "http") {
7
- const { startHTTP } = await import("./transports/sse.js");
8
- await startHTTP();
9
+ const { startSSE } = await import("./transports/sse.js");
10
+ await startSSE();
9
11
  }
10
12
  else {
11
13
  const { startStdio } = await import("./transports/stdio.js");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAEvE,KAAK,UAAU,IAAI;IACjB,GAAG,CAAC,iCAAiC,SAAS,OAAO,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7D,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,kGAAkG;AAClG,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAEvE,KAAK,UAAU,IAAI;IACjB,GAAG,CAAC,iCAAiC,SAAS,OAAO,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7D,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { FastifyRequest, FastifyReply } from "fastify";
2
+ declare module "fastify" {
3
+ interface FastifyRequest {
4
+ mcpUser?: {
5
+ userId: string;
6
+ email: string;
7
+ name: string;
8
+ fleetxAccessToken: string;
9
+ };
10
+ }
11
+ }
12
+ /**
13
+ * Prehandler that validates MCP Bearer tokens issued by this server.
14
+ * Attaches request.mcpUser on success; returns 401 on failure.
15
+ * If the FleetX token has expired the user must re-authenticate via OAuth.
16
+ */
17
+ export declare function requireMcpAuth(request: FastifyRequest, reply: FastifyReply): Promise<void>;
18
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/mcp/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5D,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,OAAO,CAAC,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,iBAAiB,EAAE,MAAM,CAAC;SAC3B,CAAC;KACH;CACF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhG"}
@@ -0,0 +1,35 @@
1
+ import { verifyMcpAccessToken } from "../../auth/tokens/jwt.js";
2
+ import { findConnectedAccountByUserId } from "../../auth/storage/connected-account.js";
3
+ /**
4
+ * Prehandler that validates MCP Bearer tokens issued by this server.
5
+ * Attaches request.mcpUser on success; returns 401 on failure.
6
+ * If the FleetX token has expired the user must re-authenticate via OAuth.
7
+ */
8
+ export async function requireMcpAuth(request, reply) {
9
+ const header = request.headers.authorization;
10
+ if (!header?.startsWith("Bearer ")) {
11
+ return reply
12
+ .status(401)
13
+ .header("WWW-Authenticate", "Bearer")
14
+ .send({ error: "unauthorized", error_description: "Bearer token required" });
15
+ }
16
+ const token = header.slice(7).trim();
17
+ const payload = await verifyMcpAccessToken(token);
18
+ if (!payload) {
19
+ return reply
20
+ .status(401)
21
+ .header("WWW-Authenticate", 'Bearer error="invalid_token"')
22
+ .send({ error: "invalid_token" });
23
+ }
24
+ const account = findConnectedAccountByUserId(payload.sub);
25
+ if (!account) {
26
+ return reply.status(401).send({ error: "user_not_found" });
27
+ }
28
+ request.mcpUser = {
29
+ userId: account.userId,
30
+ email: account.email,
31
+ name: account.name,
32
+ fleetxAccessToken: account.fleetxAccessToken,
33
+ };
34
+ }
35
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/mcp/middleware/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAavF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB,EAAE,KAAmB;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK;aACT,MAAM,CAAC,GAAG,CAAC;aACX,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;aACpC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK;aACT,MAAM,CAAC,GAAG,CAAC;aACX,MAAM,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;aAC1D,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,OAAO,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;AACJ,CAAC"}
@@ -1,12 +1,17 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { TokenStore } from "../types.js";
3
- export interface Credentials {
3
+ /** How to authenticate when creating the MCP server (HTTP headers, env, or caller-provided). */
4
+ export type Credentials = {
5
+ type: "basic";
4
6
  username: string;
5
7
  password: string;
6
- }
8
+ } | {
9
+ type: "bearer";
10
+ token: string;
11
+ };
7
12
  /**
8
13
  * Creates and configures the McpServer instance with login + dynamic tools.
9
- * Credentials must be passed explicitly by the caller (from env vars, HTTP headers, etc.).
14
+ * Pass `credentials` from env vars, HTTP headers, etc.: `basic` runs password login; `bearer` stores the token and registers tools without login.
10
15
  */
11
16
  export declare function createMcpServer(tokenStore: TokenStore, credentials?: Credentials): Promise<McpServer>;
12
17
  //# sourceMappingURL=createMcpServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAOxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,SAAS,CAAC,CAqCpB"}
1
+ {"version":3,"file":"createMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAOxD,gGAAgG;AAChG,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBtC;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,SAAS,CAAC,CAyCpB"}
@@ -5,19 +5,41 @@ import { fetchApiDefinitions } from "../apiDiscovery.js";
5
5
  import { generateTools } from "../toolGenerator.js";
6
6
  import { log, getLoginURL, getAPIDefinitionURL } from "../utils.js";
7
7
  import { registerPrompt } from "../prompts/index.js";
8
+ async function bootstrapDynamicTools(mcp, tokenStore, logLabel) {
9
+ const discoveryResult = await fetchApiDefinitions(getAPIDefinitionURL(), tokenStore);
10
+ if (!discoveryResult.success) {
11
+ log(`${logLabel}: API discovery failed:`, discoveryResult.message);
12
+ return;
13
+ }
14
+ const toolNames = registerDynamicTools(mcp, discoveryResult.definitions, tokenStore);
15
+ log(`${logLabel}: auto-registered ${toolNames.length} tool(s) at startup`);
16
+ }
8
17
  /**
9
18
  * Creates and configures the McpServer instance with login + dynamic tools.
10
- * Credentials must be passed explicitly by the caller (from env vars, HTTP headers, etc.).
19
+ * Pass `credentials` from env vars, HTTP headers, etc.: `basic` runs password login; `bearer` stores the token and registers tools without login.
11
20
  */
12
21
  export async function createMcpServer(tokenStore, credentials) {
13
22
  const mcp = new McpServer({ name: "fleetx-mcp-server", version: "1.1.0" }, { capabilities: { tools: { listChanged: true } } });
14
23
  registerLoginTool(mcp, tokenStore);
15
24
  registerResources(mcp, tokenStore);
16
25
  registerPrompt(mcp);
17
- const username = credentials?.username;
18
- const password = credentials?.password;
19
- if (username && password) {
20
- log("Auto-login: credentials provided");
26
+ if (credentials?.type === "bearer") {
27
+ const token = credentials.token.trim();
28
+ if (token) {
29
+ log("Pre-authenticated: bearer token provided");
30
+ tokenStore.setToken(token);
31
+ try {
32
+ await bootstrapDynamicTools(mcp, tokenStore, "Bearer");
33
+ }
34
+ catch (err) {
35
+ log("Bearer bootstrap error:", err);
36
+ }
37
+ }
38
+ return mcp;
39
+ }
40
+ if (credentials?.type === "basic") {
41
+ const { username, password } = credentials;
42
+ log("Auto-login: basic credentials provided");
21
43
  try {
22
44
  const loginResult = await login(getLoginURL(), username, password, tokenStore);
23
45
  if (!loginResult.success) {
@@ -25,13 +47,7 @@ export async function createMcpServer(tokenStore, credentials) {
25
47
  return mcp;
26
48
  }
27
49
  log("Auto-login succeeded");
28
- const discoveryResult = await fetchApiDefinitions(getAPIDefinitionURL(), tokenStore);
29
- if (!discoveryResult.success) {
30
- log("Auto-discovery failed:", discoveryResult.message);
31
- return mcp;
32
- }
33
- const toolNames = registerDynamicTools(mcp, discoveryResult.definitions, tokenStore);
34
- log(`Auto-registered ${toolNames.length} tool(s) at startup`);
50
+ await bootstrapDynamicTools(mcp, tokenStore, "Auto-login");
35
51
  }
36
52
  catch (err) {
37
53
  log("Auto-login error:", err);
@@ -1 +1 @@
1
- {"version":3,"file":"createMcpServer.js","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAOrD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,WAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,SAAS,CACvB,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC/C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CACnD,CAAC;IAEF,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,CAAC;IAEvC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACzB,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC/E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,GAAG,CAAC;YACb,CAAC;YACD,GAAG,CAAC,sBAAsB,CAAC,CAAC;YAE5B,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,CAAC;YACrF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,GAAG,CAAC,wBAAwB,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO,GAAG,CAAC;YACb,CAAC;YAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACrF,GAAG,CAAC,mBAAmB,SAAS,CAAC,MAAM,qBAAqB,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,kBAAkB,GAAG,sDAAsD,CAAC;AAClF,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAElE,SAAS,iBAAiB,CAAC,OAAe,EAAE,KAAoB;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,OAAO,GAAG,eAAe,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5G,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,UAAsB;IAC/D,GAAG,CAAC,QAAQ,CACV,sBAAsB,EACtB,sDAAsD,EACtD;QACE,WAAW,EAAE,qKAAqK;QAClL,QAAQ,EAAE,WAAW;KACtB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sDAAsD;oBAC3D,IAAI,EAAE,yBAAyB,GAAG,qJAAqJ;oBACvL,QAAQ,EAAE,YAAY;iBACvB;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,UAAsB;IAC/D,GAAG,CAAC,IAAI,CACN,OAAO,EACP,yEAAyE,EACzE;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAChD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE1E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,CAAC;QAErF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wDAAwD,eAAe,CAAC,OAAO,EAAE;qBACxF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAErF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,MAAM,CAAC,OAAO;wBACd,eAAe,CAAC,OAAO;wBACvB,cAAc,SAAS,CAAC,MAAM,aAAa,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAA8C,CAAC;AAE5F,SAAS,oBAAoB,CAC3B,GAAc,EACd,WAA4B,EAC5B,UAAsB;IAEtB,MAAM,aAAa,GAAG,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/D,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IACD,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAoB,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5E,MAAM,KAAK,GAAiC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,KAAK,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,UAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CACzB,QAAQ,EACR,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,KAAK,EAAE,IAAI,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC,CACF,CAAC;YACF,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,cAAc,eAAe,CAAC,MAAM,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,QAAiB;IAC9D,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,MAAoB,CAAC;IAEzB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,QAAQ,CAAC;QACd;YACE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"createMcpServer.js","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAOrD,KAAK,UAAU,qBAAqB,CAClC,GAAc,EACd,UAAsB,EACtB,QAAgB;IAEhB,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,CAAC;IACrF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,QAAQ,yBAAyB,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACrF,GAAG,CAAC,GAAG,QAAQ,qBAAqB,SAAS,CAAC,MAAM,qBAAqB,CAAC,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,WAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,SAAS,CACvB,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC/C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CACnD,CAAC;IAEF,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,IAAI,WAAW,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAChD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,WAAW,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;QAC3C,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC/E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,GAAG,CAAC;YACb,CAAC;YACD,GAAG,CAAC,sBAAsB,CAAC,CAAC;YAC5B,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,kBAAkB,GAAG,sDAAsD,CAAC;AAClF,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAElE,SAAS,iBAAiB,CAAC,OAAe,EAAE,KAAoB;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,OAAO,GAAG,eAAe,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5G,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,UAAsB;IAC/D,GAAG,CAAC,QAAQ,CACV,sBAAsB,EACtB,sDAAsD,EACtD;QACE,WAAW,EAAE,qKAAqK;QAClL,QAAQ,EAAE,WAAW;KACtB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sDAAsD;oBAC3D,IAAI,EAAE,yBAAyB,GAAG,qJAAqJ;oBACvL,QAAQ,EAAE,YAAY;iBACvB;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,UAAsB;IAC/D,GAAG,CAAC,IAAI,CACN,OAAO,EACP,yEAAyE,EACzE;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAChD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE1E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,CAAC;QAErF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wDAAwD,eAAe,CAAC,OAAO,EAAE;qBACxF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAErF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,MAAM,CAAC,OAAO;wBACd,eAAe,CAAC,OAAO;wBACvB,cAAc,SAAS,CAAC,MAAM,aAAa,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAA8C,CAAC;AAE5F,SAAS,oBAAoB,CAC3B,GAAc,EACd,WAA4B,EAC5B,UAAsB;IAEtB,MAAM,aAAa,GAAG,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/D,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IACD,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAoB,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5E,MAAM,KAAK,GAAiC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,KAAK,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,UAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CACzB,QAAQ,EACR,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,KAAK,EAAE,IAAI,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC,CACF,CAAC;YACF,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,cAAc,eAAe,CAAC,MAAM,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,QAAiB;IAC9D,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,MAAoB,CAAC;IAEzB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,QAAQ,CAAC;QACd;YACE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function startFastify(): Promise<void>;
2
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/transports/fastify.ts"],"names":[],"mappings":"AA8KA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAwFlD"}