@instantkom/mcp-server 1.0.0 → 3.129.1

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 (111) hide show
  1. package/README.md +2 -2
  2. package/dist/index.public.js +1 -1
  3. package/dist/tools/app/account.d.ts +1 -1
  4. package/dist/tools/app/account.d.ts.map +1 -1
  5. package/dist/tools/app/ai.d.ts +35 -0
  6. package/dist/tools/app/ai.d.ts.map +1 -0
  7. package/dist/tools/app/ai.js +47 -0
  8. package/dist/tools/app/ai.js.map +1 -0
  9. package/dist/tools/app/analytics.d.ts +1 -1
  10. package/dist/tools/app/analytics.d.ts.map +1 -1
  11. package/dist/tools/app/api-keys.d.ts +50 -1
  12. package/dist/tools/app/api-keys.d.ts.map +1 -1
  13. package/dist/tools/app/api-keys.js +32 -0
  14. package/dist/tools/app/api-keys.js.map +1 -1
  15. package/dist/tools/app/billing.d.ts +1 -1
  16. package/dist/tools/app/billing.d.ts.map +1 -1
  17. package/dist/tools/app/bots.d.ts +1 -1
  18. package/dist/tools/app/bots.d.ts.map +1 -1
  19. package/dist/tools/app/broadcasts.d.ts +1 -1
  20. package/dist/tools/app/broadcasts.d.ts.map +1 -1
  21. package/dist/tools/app/channels.d.ts +1 -4
  22. package/dist/tools/app/channels.d.ts.map +1 -1
  23. package/dist/tools/app/channels.js +0 -25
  24. package/dist/tools/app/channels.js.map +1 -1
  25. package/dist/tools/app/chats.d.ts +1 -1
  26. package/dist/tools/app/chats.d.ts.map +1 -1
  27. package/dist/tools/app/contacts.d.ts +1 -1
  28. package/dist/tools/app/contacts.d.ts.map +1 -1
  29. package/dist/tools/app/coupons.d.ts +1 -1
  30. package/dist/tools/app/coupons.d.ts.map +1 -1
  31. package/dist/tools/app/custom-fields.d.ts +1 -1
  32. package/dist/tools/app/custom-fields.d.ts.map +1 -1
  33. package/dist/tools/app/dashboard-widgets.d.ts +1 -1
  34. package/dist/tools/app/dashboard-widgets.d.ts.map +1 -1
  35. package/dist/tools/app/dashboard.d.ts +1 -1
  36. package/dist/tools/app/dashboard.d.ts.map +1 -1
  37. package/dist/tools/app/ecommerce.d.ts +1 -1
  38. package/dist/tools/app/ecommerce.d.ts.map +1 -1
  39. package/dist/tools/app/events.d.ts +1 -1
  40. package/dist/tools/app/events.d.ts.map +1 -1
  41. package/dist/tools/app/exports.d.ts +1 -1
  42. package/dist/tools/app/exports.d.ts.map +1 -1
  43. package/dist/tools/app/feeds.d.ts +1 -1
  44. package/dist/tools/app/feeds.d.ts.map +1 -1
  45. package/dist/tools/app/flow-edges.d.ts +1 -1
  46. package/dist/tools/app/flow-edges.d.ts.map +1 -1
  47. package/dist/tools/app/flow-nodes.d.ts +1 -1
  48. package/dist/tools/app/flow-nodes.d.ts.map +1 -1
  49. package/dist/tools/app/flows.d.ts +1 -1
  50. package/dist/tools/app/flows.d.ts.map +1 -1
  51. package/dist/tools/app/index.d.ts +1 -0
  52. package/dist/tools/app/index.d.ts.map +1 -1
  53. package/dist/tools/app/index.js +3 -0
  54. package/dist/tools/app/index.js.map +1 -1
  55. package/dist/tools/app/media.d.ts +1 -1
  56. package/dist/tools/app/media.d.ts.map +1 -1
  57. package/dist/tools/app/message-events.d.ts +1 -1
  58. package/dist/tools/app/message-events.d.ts.map +1 -1
  59. package/dist/tools/app/messages.d.ts +1 -1
  60. package/dist/tools/app/messages.d.ts.map +1 -1
  61. package/dist/tools/app/object-folders.d.ts +1 -1
  62. package/dist/tools/app/object-folders.d.ts.map +1 -1
  63. package/dist/tools/app/plans.d.ts +1 -1
  64. package/dist/tools/app/plans.d.ts.map +1 -1
  65. package/dist/tools/app/polls.d.ts +1 -1
  66. package/dist/tools/app/polls.d.ts.map +1 -1
  67. package/dist/tools/app/qr-codes.d.ts +1 -1
  68. package/dist/tools/app/qr-codes.d.ts.map +1 -1
  69. package/dist/tools/app/segmentations.d.ts +1 -1
  70. package/dist/tools/app/segmentations.d.ts.map +1 -1
  71. package/dist/tools/app/settings.d.ts +1 -1
  72. package/dist/tools/app/settings.d.ts.map +1 -1
  73. package/dist/tools/app/shortlinks.d.ts +1 -1
  74. package/dist/tools/app/shortlinks.d.ts.map +1 -1
  75. package/dist/tools/app/super-widgets.d.ts +1 -1
  76. package/dist/tools/app/super-widgets.d.ts.map +1 -1
  77. package/dist/tools/app/tags.d.ts +1 -1
  78. package/dist/tools/app/tags.d.ts.map +1 -1
  79. package/dist/tools/app/team-members.d.ts +1 -1
  80. package/dist/tools/app/team-members.d.ts.map +1 -1
  81. package/dist/tools/app/templates.d.ts +1 -1
  82. package/dist/tools/app/templates.d.ts.map +1 -1
  83. package/dist/tools/app/tickets.d.ts +1 -1
  84. package/dist/tools/app/tickets.d.ts.map +1 -1
  85. package/dist/tools/app/users.d.ts +1 -1
  86. package/dist/tools/app/users.d.ts.map +1 -1
  87. package/dist/tools/app/webhooks.d.ts +1 -1
  88. package/dist/tools/app/webhooks.d.ts.map +1 -1
  89. package/dist/tools/app/widgets.d.ts +1 -1
  90. package/dist/tools/app/widgets.d.ts.map +1 -1
  91. package/dist/tools/public/device-flow.d.ts +87 -0
  92. package/dist/tools/public/device-flow.d.ts.map +1 -0
  93. package/dist/tools/public/device-flow.js +117 -0
  94. package/dist/tools/public/device-flow.js.map +1 -0
  95. package/dist/tools/public/health.d.ts +1 -1
  96. package/dist/tools/public/health.d.ts.map +1 -1
  97. package/dist/tools/public/index.d.ts +43 -2
  98. package/dist/tools/public/index.d.ts.map +1 -1
  99. package/dist/tools/public/index.js +3 -3
  100. package/dist/tools/public/index.js.map +1 -1
  101. package/dist/tools/tool-router.d.ts +1 -1
  102. package/dist/tools/tool-router.d.ts.map +1 -1
  103. package/package.json +3 -3
  104. package/dist/client/api-client.d.ts +0 -76
  105. package/dist/client/api-client.d.ts.map +0 -1
  106. package/dist/client/api-client.js +0 -234
  107. package/dist/client/api-client.js.map +0 -1
  108. package/dist/tools/app/funnels.d.ts +0 -96
  109. package/dist/tools/app/funnels.d.ts.map +0 -1
  110. package/dist/tools/app/funnels.js +0 -127
  111. package/dist/tools/app/funnels.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Public Tools - Device Authorization Flow (RFC 8628)
3
+ * No authentication required for start/poll; JWT required for approve
4
+ */
5
+ /**
6
+ * Start a device authorization flow.
7
+ * Returns device_code, user_code and verification_uri for the CLI auth flow.
8
+ */
9
+ export async function startDeviceFlow(apiClient, args) {
10
+ const response = await apiClient.post('/v1/auth/device', {
11
+ scope: args.scope ?? 'read',
12
+ });
13
+ return {
14
+ content: [
15
+ {
16
+ type: 'text',
17
+ text: JSON.stringify(response, null, 2),
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ /**
23
+ * Poll for a device authorization token.
24
+ * Returns access_token when approved, or an RFC 8628 error code otherwise.
25
+ */
26
+ export async function pollDeviceToken(apiClient, args) {
27
+ const response = await apiClient.post('/v1/auth/device/token', {
28
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
29
+ device_code: args.device_code,
30
+ });
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text',
35
+ text: JSON.stringify(response, null, 2),
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ /**
41
+ * Approve or deny a device authorization request.
42
+ * Requires JWT authentication (frontend session).
43
+ */
44
+ export async function approveDeviceFlow(apiClient, args) {
45
+ await apiClient.post('/v1/auth/device/approve', {
46
+ user_code: args.user_code,
47
+ scope: args.scope,
48
+ action: args.action,
49
+ });
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify({ success: true }, null, 2),
55
+ },
56
+ ],
57
+ };
58
+ }
59
+ export const deviceFlowTools = [
60
+ {
61
+ name: 'start_device_flow',
62
+ description: 'Start an RFC 8628 device authorization flow. ' +
63
+ 'Returns device_code (for polling) and user_code (for the user to enter at verification_uri).',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ scope: {
68
+ type: 'string',
69
+ enum: ['full', 'send', 'read', 'admin'],
70
+ description: 'Requested token scope (default: read)',
71
+ },
72
+ },
73
+ required: [],
74
+ },
75
+ },
76
+ {
77
+ name: 'poll_device_token',
78
+ description: 'Poll for a device authorization token after starting a device flow. ' +
79
+ 'Returns the access_token when approved, or an RFC 8628 error code.',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ device_code: {
84
+ type: 'string',
85
+ description: 'Device code from the start_device_flow response',
86
+ },
87
+ },
88
+ required: ['device_code'],
89
+ },
90
+ },
91
+ {
92
+ name: 'approve_device_flow',
93
+ description: 'Approve or deny a device authorization request (requires JWT authentication). ' +
94
+ 'Called by the frontend approval page.',
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: {
98
+ user_code: {
99
+ type: 'string',
100
+ description: 'User code displayed on the device',
101
+ },
102
+ scope: {
103
+ type: 'string',
104
+ enum: ['full', 'send', 'read', 'admin'],
105
+ description: 'Scope to grant to the device token',
106
+ },
107
+ action: {
108
+ type: 'string',
109
+ enum: ['approve', 'deny'],
110
+ description: 'Whether to approve or deny the request',
111
+ },
112
+ },
113
+ required: ['user_code', 'scope', 'action'],
114
+ },
115
+ },
116
+ ];
117
+ //# sourceMappingURL=device-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../../../src/tools/public/device-flow.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Public Tools - Health Check
3
3
  * No authentication required
4
4
  */
5
- import type { ApiClient } from '../../client/api-client.js';
5
+ import type { ApiClient } from '@instantkom/api-client';
6
6
  export declare function getHealth(apiClient: ApiClient): Promise<any>;
7
7
  export declare const healthTools: {
8
8
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/tools/public/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAWlE;AAED,eAAO,MAAM,WAAW;;;;;;;;GAUvB,CAAC"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/tools/public/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAWlE;AAED,eAAO,MAAM,WAAW;;;;;;;;GAUvB,CAAC"}
@@ -3,7 +3,8 @@
3
3
  * Aggregates all public tools
4
4
  */
5
5
  export { getHealth, healthTools } from './health.js';
6
- export declare const publicTools: {
6
+ export { startDeviceFlow, pollDeviceToken, approveDeviceFlow, deviceFlowTools, } from './device-flow.js';
7
+ export declare const publicTools: ({
7
8
  name: string;
8
9
  description: string;
9
10
  inputSchema: {
@@ -11,5 +12,45 @@ export declare const publicTools: {
11
12
  properties: {};
12
13
  required: never[];
13
14
  };
14
- }[];
15
+ } | {
16
+ name: string;
17
+ description: string;
18
+ inputSchema: {
19
+ type: string;
20
+ properties: {
21
+ device_code: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ scope?: undefined;
26
+ user_code?: undefined;
27
+ action?: undefined;
28
+ };
29
+ required: string[];
30
+ };
31
+ } | {
32
+ name: string;
33
+ description: string;
34
+ inputSchema: {
35
+ type: string;
36
+ properties: {
37
+ user_code: {
38
+ type: string;
39
+ description: string;
40
+ };
41
+ scope: {
42
+ type: string;
43
+ enum: string[];
44
+ description: string;
45
+ };
46
+ action: {
47
+ type: string;
48
+ enum: string[];
49
+ description: string;
50
+ };
51
+ device_code?: undefined;
52
+ };
53
+ required: string[];
54
+ };
55
+ })[];
15
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/public/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,WAAW;;;;;;;;GAEvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/public/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAuC,CAAC"}
@@ -3,8 +3,8 @@
3
3
  * Aggregates all public tools
4
4
  */
5
5
  import { healthTools } from './health.js';
6
+ import { deviceFlowTools } from './device-flow.js';
6
7
  export { getHealth, healthTools } from './health.js';
7
- export const publicTools = [
8
- ...healthTools,
9
- ];
8
+ export { startDeviceFlow, pollDeviceToken, approveDeviceFlow, deviceFlowTools, } from './device-flow.js';
9
+ export const publicTools = [...healthTools, ...deviceFlowTools];
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/public/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,WAAW;CACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/public/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,eAAe,CAAC,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * Convention: tool name in snake_case maps to handler function in camelCase.
6
6
  * Example: 'list_channels' -> listChannels, 'admin_get_plan' -> adminGetPlan
7
7
  */
8
- import type { ApiClient } from '../client/api-client.js';
8
+ import type { ApiClient } from '@instantkom/api-client';
9
9
  /**
10
10
  * Execute a tool by name
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-router.d.ts","sourceRoot":"","sources":["../../src/tools/tool-router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAmHzD;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAQ7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
1
+ {"version":3,"file":"tool-router.d.ts","sourceRoot":"","sources":["../../src/tools/tool-router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAmHxD;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAQ7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instantkom/mcp-server",
3
- "version": "1.0.0",
3
+ "version": "3.129.1",
4
4
  "description": "Model Context Protocol Server for the instantKOM REST API. Lets Claude Code, Claude Desktop and other MCP-compatible AI assistants drive your instantKOM messengerzentrale.",
5
5
  "main": "dist/index.public.js",
6
6
  "types": "dist/index.public.d.ts",
@@ -66,6 +66,7 @@
66
66
  "url": "https://github.com/instantKOM/mcp-server/issues"
67
67
  },
68
68
  "dependencies": {
69
+ "@instantkom/api-client": "file:../../packages/api-client",
69
70
  "@modelcontextprotocol/sdk": "^1.29.0",
70
71
  "dotenv": "^17.4.2",
71
72
  "node-fetch": "^3.3.2"
@@ -83,7 +84,6 @@
83
84
  "ip-address": "^10.2.0"
84
85
  },
85
86
  "publishConfig": {
86
- "access": "public",
87
- "provenance": true
87
+ "access": "public"
88
88
  }
89
89
  }
@@ -1,76 +0,0 @@
1
- /**
2
- * HTTP Client for instantKOM REST API
3
- * Handles authentication and request/response transformation
4
- */
5
- import type { TenantConfig } from '../types/index.js';
6
- export declare class ApiClient {
7
- private baseUrl;
8
- private apiKey;
9
- private tenantId;
10
- private scope;
11
- private username?;
12
- private password?;
13
- private jwtAccessToken?;
14
- private jwtRefreshToken?;
15
- private jwtExpiresAt?;
16
- constructor(tenant: TenantConfig);
17
- /**
18
- * Login and cache JWT tokens. Throws if 2FA is required or login fails.
19
- */
20
- private loginJwt;
21
- /**
22
- * Refresh the JWT access token using the stored refresh token.
23
- * Returns false if refresh fails (caller should re-login).
24
- */
25
- private refreshJwt;
26
- /**
27
- * Returns a valid JWT access token, refreshing or re-logging in as needed.
28
- */
29
- private ensureJwtToken;
30
- /**
31
- * Make an authenticated request to the API.
32
- * Returns parsed response data directly. Throws on HTTP errors.
33
- */
34
- private request;
35
- /**
36
- * Invalidate cached JWT tokens. Next request will trigger a fresh login.
37
- */
38
- resetAuth(): void;
39
- /**
40
- * GET request
41
- */
42
- get<T>(path: string, queryParams?: Record<string, any>): Promise<T>;
43
- /**
44
- * GET request for binary responses.
45
- */
46
- getBinary(path: string, queryParams?: Record<string, any>): Promise<{
47
- buffer: Buffer;
48
- contentType: string | null;
49
- contentDisposition: string | null;
50
- }>;
51
- /**
52
- * POST request
53
- */
54
- post<T>(path: string, body?: any): Promise<T>;
55
- /**
56
- * PUT request
57
- */
58
- put<T>(path: string, body?: any): Promise<T>;
59
- /**
60
- * PATCH request
61
- */
62
- patch<T>(path: string, body?: any): Promise<T>;
63
- /**
64
- * DELETE request
65
- */
66
- delete<T>(path: string, body?: any): Promise<T>;
67
- /**
68
- * Get the base URL
69
- */
70
- getBaseUrl(): string;
71
- /**
72
- * Get the tenant ID
73
- */
74
- getTenantId(): string;
75
- }
76
- //# sourceMappingURL=api-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAG1B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,YAAY,CAAC,CAAS;gBAElB,MAAM,EAAE,YAAY;IAWhC;;OAEG;YACW,QAAQ;IAoBtB;;;OAGG;YACW,UAAU;IAoBxB;;OAEG;YACW,cAAc;IAa5B;;;OAGG;YACW,OAAO;IA4DrB;;OAEG;IACH,SAAS,IAAI,IAAI;IAOjB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE;;OAEG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IA4CF;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAInD;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpD;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrD;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}
@@ -1,234 +0,0 @@
1
- /**
2
- * HTTP Client for instantKOM REST API
3
- * Handles authentication and request/response transformation
4
- */
5
- import fetch from 'node-fetch';
6
- export class ApiClient {
7
- baseUrl;
8
- apiKey;
9
- tenantId;
10
- scope;
11
- username;
12
- password;
13
- // JWT token cache
14
- jwtAccessToken;
15
- jwtRefreshToken;
16
- jwtExpiresAt; // ms timestamp
17
- constructor(tenant) {
18
- this.baseUrl = tenant.apiUrl;
19
- this.apiKey = tenant.apiKey;
20
- this.tenantId = tenant.id;
21
- this.scope = tenant.scope;
22
- // App-scope tenants use the Public API (/v1/*) which only accepts API keys.
23
- // Only admin-scope tenants use JWT authentication.
24
- this.username = tenant.scope === 'admin' ? tenant.username : undefined;
25
- this.password = tenant.scope === 'admin' ? tenant.password : undefined;
26
- }
27
- /**
28
- * Login and cache JWT tokens. Throws if 2FA is required or login fails.
29
- */
30
- async loginJwt() {
31
- const url = new URL('/auth/login', this.baseUrl);
32
- const response = await fetch(url.toString(), {
33
- method: 'POST',
34
- headers: { 'Content-Type': 'application/json', 'User-Agent': 'instantKOM-MCP-Server/1.0.0' },
35
- body: JSON.stringify({ username: this.username, password: this.password }),
36
- });
37
- const data = await response.json();
38
- if (!response.ok) {
39
- throw new Error(`JWT login failed (${response.status}): ${data?.message || response.statusText}`);
40
- }
41
- if (data.requiresTwoFactor) {
42
- throw new Error('JWT login requires 2FA — use a service account without 2FA enabled');
43
- }
44
- this.jwtAccessToken = data.accessToken;
45
- this.jwtRefreshToken = data.refreshToken;
46
- this.jwtExpiresAt = Date.now() + (data.expiresIn ?? 900) * 1000;
47
- console.error(`[API] JWT login successful (tenant: ${this.tenantId}), expires in ${data.expiresIn}s`);
48
- }
49
- /**
50
- * Refresh the JWT access token using the stored refresh token.
51
- * Returns false if refresh fails (caller should re-login).
52
- */
53
- async refreshJwt() {
54
- try {
55
- const url = new URL('/auth/refresh', this.baseUrl);
56
- const response = await fetch(url.toString(), {
57
- method: 'POST',
58
- headers: { 'Content-Type': 'application/json', 'User-Agent': 'instantKOM-MCP-Server/1.0.0' },
59
- body: JSON.stringify({ refreshToken: this.jwtRefreshToken }),
60
- });
61
- if (!response.ok)
62
- return false;
63
- const data = await response.json();
64
- this.jwtAccessToken = data.accessToken;
65
- if (data.refreshToken)
66
- this.jwtRefreshToken = data.refreshToken;
67
- this.jwtExpiresAt = Date.now() + (data.expiresIn ?? 900) * 1000;
68
- console.error('[API] JWT token refreshed');
69
- return true;
70
- }
71
- catch {
72
- return false;
73
- }
74
- }
75
- /**
76
- * Returns a valid JWT access token, refreshing or re-logging in as needed.
77
- */
78
- async ensureJwtToken() {
79
- const buffer = 60_000; // 1 min safety margin before expiry
80
- if (this.jwtAccessToken && this.jwtExpiresAt && Date.now() < this.jwtExpiresAt - buffer) {
81
- return this.jwtAccessToken;
82
- }
83
- if (this.jwtRefreshToken) {
84
- const refreshed = await this.refreshJwt();
85
- if (refreshed)
86
- return this.jwtAccessToken;
87
- }
88
- await this.loginJwt();
89
- return this.jwtAccessToken;
90
- }
91
- /**
92
- * Make an authenticated request to the API.
93
- * Returns parsed response data directly. Throws on HTTP errors.
94
- */
95
- async request(method, path, body, queryParams) {
96
- // Build URL with query parameters
97
- const url = new URL(path.startsWith('/') ? path : `/${path}`, this.baseUrl);
98
- if (queryParams) {
99
- Object.entries(queryParams).forEach(([key, value]) => {
100
- if (value !== undefined && value !== null) {
101
- url.searchParams.append(key, String(value));
102
- }
103
- });
104
- }
105
- // Resolve auth: JWT (if credentials configured) or API key
106
- const token = this.username && this.password
107
- ? await this.ensureJwtToken()
108
- : this.apiKey;
109
- // Prepare request options
110
- const options = {
111
- method,
112
- headers: {
113
- 'Content-Type': 'application/json',
114
- 'Authorization': `Bearer ${token}`,
115
- 'User-Agent': 'instantKOM-MCP-Server/1.0.0',
116
- },
117
- };
118
- if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH' || method === 'DELETE')) {
119
- options.body = JSON.stringify(body);
120
- }
121
- console.error(`[API] ${method} ${url.pathname}${url.search}`);
122
- // Make the request
123
- const response = await fetch(url.toString(), options);
124
- const responseText = await response.text();
125
- // Try to parse JSON response
126
- let data;
127
- try {
128
- data = responseText ? JSON.parse(responseText) : null;
129
- }
130
- catch {
131
- data = responseText;
132
- }
133
- // Handle error responses
134
- if (!response.ok) {
135
- const message = data?.message || response.statusText;
136
- console.error(`[API] Error ${response.status}: ${responseText}`);
137
- throw new Error(`HTTP ${response.status}: ${message}`);
138
- }
139
- return data;
140
- }
141
- /**
142
- * Invalidate cached JWT tokens. Next request will trigger a fresh login.
143
- */
144
- resetAuth() {
145
- this.jwtAccessToken = undefined;
146
- this.jwtRefreshToken = undefined;
147
- this.jwtExpiresAt = undefined;
148
- console.error(`[API] Auth cache cleared (tenant: ${this.tenantId})`);
149
- }
150
- /**
151
- * GET request
152
- */
153
- async get(path, queryParams) {
154
- return this.request('GET', path, undefined, queryParams);
155
- }
156
- /**
157
- * GET request for binary responses.
158
- */
159
- async getBinary(path, queryParams) {
160
- const url = new URL(path.startsWith('/') ? path : `/${path}`, this.baseUrl);
161
- if (queryParams) {
162
- Object.entries(queryParams).forEach(([key, value]) => {
163
- if (value !== undefined && value !== null) {
164
- url.searchParams.append(key, String(value));
165
- }
166
- });
167
- }
168
- const token = this.username && this.password
169
- ? await this.ensureJwtToken()
170
- : this.apiKey;
171
- const response = await fetch(url.toString(), {
172
- method: 'GET',
173
- headers: {
174
- 'Authorization': `Bearer ${token}`,
175
- 'User-Agent': 'instantKOM-MCP-Server/1.0.0',
176
- },
177
- });
178
- if (!response.ok) {
179
- const responseText = await response.text();
180
- let data;
181
- try {
182
- data = responseText ? JSON.parse(responseText) : null;
183
- }
184
- catch {
185
- data = responseText;
186
- }
187
- const message = data?.message || response.statusText;
188
- throw new Error(`HTTP ${response.status}: ${message}`);
189
- }
190
- const arrayBuffer = await response.arrayBuffer();
191
- return {
192
- buffer: Buffer.from(arrayBuffer),
193
- contentType: response.headers.get('content-type'),
194
- contentDisposition: response.headers.get('content-disposition'),
195
- };
196
- }
197
- /**
198
- * POST request
199
- */
200
- async post(path, body) {
201
- return this.request('POST', path, body);
202
- }
203
- /**
204
- * PUT request
205
- */
206
- async put(path, body) {
207
- return this.request('PUT', path, body);
208
- }
209
- /**
210
- * PATCH request
211
- */
212
- async patch(path, body) {
213
- return this.request('PATCH', path, body);
214
- }
215
- /**
216
- * DELETE request
217
- */
218
- async delete(path, body) {
219
- return this.request('DELETE', path, body);
220
- }
221
- /**
222
- * Get the base URL
223
- */
224
- getBaseUrl() {
225
- return this.baseUrl;
226
- }
227
- /**
228
- * Get the tenant ID
229
- */
230
- getTenantId() {
231
- return this.tenantId;
232
- }
233
- }
234
- //# sourceMappingURL=api-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"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"}