@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.
- package/README.md +2 -2
- package/dist/index.public.js +1 -1
- package/dist/tools/app/account.d.ts +1 -1
- package/dist/tools/app/account.d.ts.map +1 -1
- package/dist/tools/app/ai.d.ts +35 -0
- package/dist/tools/app/ai.d.ts.map +1 -0
- package/dist/tools/app/ai.js +47 -0
- package/dist/tools/app/ai.js.map +1 -0
- package/dist/tools/app/analytics.d.ts +1 -1
- package/dist/tools/app/analytics.d.ts.map +1 -1
- package/dist/tools/app/api-keys.d.ts +50 -1
- package/dist/tools/app/api-keys.d.ts.map +1 -1
- package/dist/tools/app/api-keys.js +32 -0
- package/dist/tools/app/api-keys.js.map +1 -1
- package/dist/tools/app/billing.d.ts +1 -1
- package/dist/tools/app/billing.d.ts.map +1 -1
- package/dist/tools/app/bots.d.ts +1 -1
- package/dist/tools/app/bots.d.ts.map +1 -1
- package/dist/tools/app/broadcasts.d.ts +1 -1
- package/dist/tools/app/broadcasts.d.ts.map +1 -1
- package/dist/tools/app/channels.d.ts +1 -4
- package/dist/tools/app/channels.d.ts.map +1 -1
- package/dist/tools/app/channels.js +0 -25
- package/dist/tools/app/channels.js.map +1 -1
- package/dist/tools/app/chats.d.ts +1 -1
- package/dist/tools/app/chats.d.ts.map +1 -1
- package/dist/tools/app/contacts.d.ts +1 -1
- package/dist/tools/app/contacts.d.ts.map +1 -1
- package/dist/tools/app/coupons.d.ts +1 -1
- package/dist/tools/app/coupons.d.ts.map +1 -1
- package/dist/tools/app/custom-fields.d.ts +1 -1
- package/dist/tools/app/custom-fields.d.ts.map +1 -1
- package/dist/tools/app/dashboard-widgets.d.ts +1 -1
- package/dist/tools/app/dashboard-widgets.d.ts.map +1 -1
- package/dist/tools/app/dashboard.d.ts +1 -1
- package/dist/tools/app/dashboard.d.ts.map +1 -1
- package/dist/tools/app/ecommerce.d.ts +1 -1
- package/dist/tools/app/ecommerce.d.ts.map +1 -1
- package/dist/tools/app/events.d.ts +1 -1
- package/dist/tools/app/events.d.ts.map +1 -1
- package/dist/tools/app/exports.d.ts +1 -1
- package/dist/tools/app/exports.d.ts.map +1 -1
- package/dist/tools/app/feeds.d.ts +1 -1
- package/dist/tools/app/feeds.d.ts.map +1 -1
- package/dist/tools/app/flow-edges.d.ts +1 -1
- package/dist/tools/app/flow-edges.d.ts.map +1 -1
- package/dist/tools/app/flow-nodes.d.ts +1 -1
- package/dist/tools/app/flow-nodes.d.ts.map +1 -1
- package/dist/tools/app/flows.d.ts +1 -1
- package/dist/tools/app/flows.d.ts.map +1 -1
- package/dist/tools/app/index.d.ts +1 -0
- package/dist/tools/app/index.d.ts.map +1 -1
- package/dist/tools/app/index.js +3 -0
- package/dist/tools/app/index.js.map +1 -1
- package/dist/tools/app/media.d.ts +1 -1
- package/dist/tools/app/media.d.ts.map +1 -1
- package/dist/tools/app/message-events.d.ts +1 -1
- package/dist/tools/app/message-events.d.ts.map +1 -1
- package/dist/tools/app/messages.d.ts +1 -1
- package/dist/tools/app/messages.d.ts.map +1 -1
- package/dist/tools/app/object-folders.d.ts +1 -1
- package/dist/tools/app/object-folders.d.ts.map +1 -1
- package/dist/tools/app/plans.d.ts +1 -1
- package/dist/tools/app/plans.d.ts.map +1 -1
- package/dist/tools/app/polls.d.ts +1 -1
- package/dist/tools/app/polls.d.ts.map +1 -1
- package/dist/tools/app/qr-codes.d.ts +1 -1
- package/dist/tools/app/qr-codes.d.ts.map +1 -1
- package/dist/tools/app/segmentations.d.ts +1 -1
- package/dist/tools/app/segmentations.d.ts.map +1 -1
- package/dist/tools/app/settings.d.ts +1 -1
- package/dist/tools/app/settings.d.ts.map +1 -1
- package/dist/tools/app/shortlinks.d.ts +1 -1
- package/dist/tools/app/shortlinks.d.ts.map +1 -1
- package/dist/tools/app/super-widgets.d.ts +1 -1
- package/dist/tools/app/super-widgets.d.ts.map +1 -1
- package/dist/tools/app/tags.d.ts +1 -1
- package/dist/tools/app/tags.d.ts.map +1 -1
- package/dist/tools/app/team-members.d.ts +1 -1
- package/dist/tools/app/team-members.d.ts.map +1 -1
- package/dist/tools/app/templates.d.ts +1 -1
- package/dist/tools/app/templates.d.ts.map +1 -1
- package/dist/tools/app/tickets.d.ts +1 -1
- package/dist/tools/app/tickets.d.ts.map +1 -1
- package/dist/tools/app/users.d.ts +1 -1
- package/dist/tools/app/users.d.ts.map +1 -1
- package/dist/tools/app/webhooks.d.ts +1 -1
- package/dist/tools/app/webhooks.d.ts.map +1 -1
- package/dist/tools/app/widgets.d.ts +1 -1
- package/dist/tools/app/widgets.d.ts.map +1 -1
- package/dist/tools/public/device-flow.d.ts +87 -0
- package/dist/tools/public/device-flow.d.ts.map +1 -0
- package/dist/tools/public/device-flow.js +117 -0
- package/dist/tools/public/device-flow.js.map +1 -0
- package/dist/tools/public/health.d.ts +1 -1
- package/dist/tools/public/health.d.ts.map +1 -1
- package/dist/tools/public/index.d.ts +43 -2
- package/dist/tools/public/index.d.ts.map +1 -1
- package/dist/tools/public/index.js +3 -3
- package/dist/tools/public/index.js.map +1 -1
- package/dist/tools/tool-router.d.ts +1 -1
- package/dist/tools/tool-router.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/client/api-client.d.ts +0 -76
- package/dist/client/api-client.d.ts.map +0 -1
- package/dist/client/api-client.js +0 -234
- package/dist/client/api-client.js.map +0 -1
- package/dist/tools/app/funnels.d.ts +0 -96
- package/dist/tools/app/funnels.d.ts.map +0 -1
- package/dist/tools/app/funnels.js +0 -127
- 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 '
|
|
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,
|
|
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
|
|
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;
|
|
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
|
|
8
|
-
|
|
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;
|
|
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 '
|
|
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,
|
|
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": "
|
|
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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"}
|