@honkio/mcp 1.4.0 → 1.6.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.
- package/README.md +193 -65
- package/dist/auth.d.ts +40 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +98 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +43 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +97 -22
- package/dist/client.js.map +1 -1
- package/dist/http.d.ts +51 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +248 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -46
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +10 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +10 -0
- package/dist/log.js.map +1 -0
- package/dist/prompts.d.ts +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +23 -23
- package/dist/prompts.js.map +1 -1
- package/dist/rateLimit.d.ts +50 -0
- package/dist/rateLimit.d.ts.map +1 -0
- package/dist/rateLimit.js +85 -0
- package/dist/rateLimit.js.map +1 -0
- package/dist/resources.d.ts +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +4 -4
- package/dist/resources.js.map +1 -1
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/toolMeta.d.ts +20 -0
- package/dist/toolMeta.d.ts.map +1 -0
- package/dist/toolMeta.js +81 -0
- package/dist/toolMeta.js.map +1 -0
- package/dist/tools.d.ts +10 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +344 -209
- package/dist/tools.js.map +1 -1
- package/package.json +16 -7
package/dist/client.d.ts
CHANGED
|
@@ -4,16 +4,31 @@
|
|
|
4
4
|
export interface HonkioClientOptions {
|
|
5
5
|
apiKey: string;
|
|
6
6
|
baseUrl?: string;
|
|
7
|
+
/** Account id already known for this key, so the first account-scoped call does not look it up. */
|
|
8
|
+
accountId?: string;
|
|
9
|
+
/** Sent as X-MCP-Service-Key. Required when the credential is an OAuth access token: the API honours those only from this service. */
|
|
10
|
+
serviceKey?: string;
|
|
7
11
|
}
|
|
8
12
|
export declare class HonkioError extends Error {
|
|
9
13
|
readonly status: number;
|
|
10
14
|
readonly code: string;
|
|
11
|
-
|
|
15
|
+
readonly details?: unknown | undefined;
|
|
16
|
+
readonly body?: Record<string, unknown> | undefined;
|
|
17
|
+
constructor(status: number, code: string, message: string, details?: unknown | undefined, body?: Record<string, unknown> | undefined);
|
|
12
18
|
}
|
|
13
19
|
export declare class HonkioClient {
|
|
14
20
|
private readonly apiKey;
|
|
15
21
|
private readonly baseUrl;
|
|
22
|
+
private accountId;
|
|
23
|
+
private readonly serviceKey;
|
|
16
24
|
constructor(options: HonkioClientOptions);
|
|
25
|
+
/**
|
|
26
|
+
* The account this key belongs to, looked up once per client instance. A
|
|
27
|
+
* stdio process has one key for its whole life; an HTTP request builds a
|
|
28
|
+
* fresh client per call, seeded from the verifier's cache, so neither ever
|
|
29
|
+
* asks the API twice.
|
|
30
|
+
*/
|
|
31
|
+
currentAccountId(): Promise<string>;
|
|
17
32
|
private request;
|
|
18
33
|
sendMessage(params: {
|
|
19
34
|
from: string;
|
|
@@ -39,15 +54,25 @@ export declare class HonkioClient {
|
|
|
39
54
|
}>;
|
|
40
55
|
getMessage(id: string): Promise<Record<string, unknown>>;
|
|
41
56
|
searchPhoneNumbers(query?: {
|
|
42
|
-
|
|
57
|
+
area_codes?: string;
|
|
43
58
|
limit?: number;
|
|
44
59
|
}): Promise<unknown[]>;
|
|
60
|
+
listAreaCodes(): Promise<{
|
|
61
|
+
data: unknown[];
|
|
62
|
+
}>;
|
|
45
63
|
provisionPhoneNumber(phoneNumber: string): Promise<Record<string, unknown>>;
|
|
46
64
|
listPhoneNumbers(): Promise<{
|
|
47
65
|
data: unknown[];
|
|
48
66
|
}>;
|
|
49
67
|
getPhoneNumber(id: string): Promise<Record<string, unknown>>;
|
|
50
68
|
releasePhoneNumber(id: string): Promise<void>;
|
|
69
|
+
requestNumberAllowance(params: {
|
|
70
|
+
requested_limit: number;
|
|
71
|
+
reason: string;
|
|
72
|
+
}): Promise<Record<string, unknown>>;
|
|
73
|
+
listNumberAllowanceRequests(): Promise<{
|
|
74
|
+
data: unknown[];
|
|
75
|
+
}>;
|
|
51
76
|
recordConsent(params: {
|
|
52
77
|
phone_number: string;
|
|
53
78
|
consent_type: 'express' | 'implied';
|
|
@@ -99,12 +124,14 @@ export declare class HonkioClient {
|
|
|
99
124
|
checkVerification(verificationId: string, code: string): Promise<Record<string, unknown>>;
|
|
100
125
|
getVerification(verificationId: string): Promise<Record<string, unknown>>;
|
|
101
126
|
listVerifications(query?: {
|
|
102
|
-
phone_number?: string;
|
|
103
|
-
status?: string;
|
|
104
|
-
page?: number;
|
|
105
127
|
limit?: number;
|
|
128
|
+
offset?: number;
|
|
129
|
+
status?: string;
|
|
106
130
|
}): Promise<{
|
|
107
131
|
data: unknown[];
|
|
132
|
+
total: number;
|
|
133
|
+
limit: number;
|
|
134
|
+
offset: number;
|
|
108
135
|
}>;
|
|
109
136
|
createWebhook(params: {
|
|
110
137
|
url: string;
|
|
@@ -154,15 +181,26 @@ export declare class HonkioClient {
|
|
|
154
181
|
from?: string;
|
|
155
182
|
to?: string;
|
|
156
183
|
}): Promise<Record<string, unknown>>;
|
|
184
|
+
listTransactions(id: string, query?: {
|
|
185
|
+
limit?: number;
|
|
186
|
+
before?: string;
|
|
187
|
+
}): Promise<{
|
|
188
|
+
transactions: unknown[];
|
|
189
|
+
has_more: boolean;
|
|
190
|
+
}>;
|
|
157
191
|
getSendLimit(): Promise<Record<string, unknown>>;
|
|
158
192
|
requestSendLimit(params: {
|
|
159
193
|
requested_limit?: number;
|
|
160
194
|
reason: string;
|
|
161
195
|
}): Promise<Record<string, unknown>>;
|
|
196
|
+
listSendLimitRequests(): Promise<{
|
|
197
|
+
data: unknown[];
|
|
198
|
+
}>;
|
|
162
199
|
getTopupAllowance(accountId: string): Promise<Record<string, unknown>>;
|
|
163
200
|
createApiKey(accountId: string, params?: {
|
|
164
201
|
mode?: 'live' | 'test';
|
|
165
202
|
label?: string;
|
|
203
|
+
permissions?: Record<string, string>;
|
|
166
204
|
}): Promise<Record<string, unknown>>;
|
|
167
205
|
revokeApiKey(accountId: string, keyId: string): Promise<void>;
|
|
168
206
|
rotateApiKey(accountId: string, keyId: string): Promise<{
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -7,21 +7,76 @@ const REQUEST_TIMEOUT_MS = 15_000;
|
|
|
7
7
|
export class HonkioError extends Error {
|
|
8
8
|
status;
|
|
9
9
|
code;
|
|
10
|
-
|
|
10
|
+
details;
|
|
11
|
+
body;
|
|
12
|
+
constructor(status, code, message,
|
|
13
|
+
// The response body's `details` (an AJV validation array, or an ad hoc
|
|
14
|
+
// object like `{reason: 'account_suspended'}`), when present. Optional
|
|
15
|
+
// and appended last so every existing call site — none of which passes
|
|
16
|
+
// it — keeps compiling and behaving exactly as before.
|
|
17
|
+
details,
|
|
18
|
+
// The full parsed response body, when it was a JSON object. Some error
|
|
19
|
+
// bodies carry extra top-level fields beyond the standard error shape
|
|
20
|
+
// (e.g. `attempts_remaining` on a verify-check 422) — keeping the whole
|
|
21
|
+
// body lets formatError surface any of those without every call site
|
|
22
|
+
// needing to know which field names to look for.
|
|
23
|
+
body) {
|
|
11
24
|
super(message);
|
|
12
25
|
this.status = status;
|
|
13
26
|
this.code = code;
|
|
27
|
+
this.details = details;
|
|
28
|
+
this.body = body;
|
|
14
29
|
this.name = 'HonkioError';
|
|
15
30
|
}
|
|
16
31
|
}
|
|
17
32
|
export class HonkioClient {
|
|
18
33
|
apiKey;
|
|
19
34
|
baseUrl;
|
|
35
|
+
accountId;
|
|
36
|
+
serviceKey;
|
|
20
37
|
constructor(options) {
|
|
21
38
|
this.apiKey = options.apiKey;
|
|
22
39
|
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
|
|
40
|
+
this.accountId = options.accountId;
|
|
41
|
+
this.serviceKey = options.serviceKey;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The account this key belongs to, looked up once per client instance. A
|
|
45
|
+
* stdio process has one key for its whole life; an HTTP request builds a
|
|
46
|
+
* fresh client per call, seeded from the verifier's cache, so neither ever
|
|
47
|
+
* asks the API twice.
|
|
48
|
+
*/
|
|
49
|
+
async currentAccountId() {
|
|
50
|
+
if (this.accountId)
|
|
51
|
+
return this.accountId;
|
|
52
|
+
const me = await this.getCurrentAccount();
|
|
53
|
+
this.accountId = me.account.id;
|
|
54
|
+
return this.accountId;
|
|
23
55
|
}
|
|
24
56
|
async request(method, path, body, query, extraHeaders) {
|
|
57
|
+
// Every id in a path comes from a tool argument, i.e. from the model. Call
|
|
58
|
+
// sites encode each segment, which turns a crafted id into one harmless
|
|
59
|
+
// segment; this catches any call site that ever forgets, so the request
|
|
60
|
+
// fails here instead of quietly resolving somewhere else. Segments are
|
|
61
|
+
// decoded (once — the same number of times the URL itself will be) before
|
|
62
|
+
// the check, so an encoded dot segment ("..%2Fx", one raw segment) is
|
|
63
|
+
// compared as "../x" and passes, while a bare ".." — or a segment that
|
|
64
|
+
// decodes to it, or fails to decode at all — is refused.
|
|
65
|
+
for (const segment of path.replace(/^\//, '').split('/')) {
|
|
66
|
+
if (segment === '') {
|
|
67
|
+
throw new HonkioError(400, 'INVALID_ID', 'An identifier contained path characters and was refused.');
|
|
68
|
+
}
|
|
69
|
+
let decoded;
|
|
70
|
+
try {
|
|
71
|
+
decoded = decodeURIComponent(segment);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new HonkioError(400, 'INVALID_ID', 'An identifier contained path characters and was refused.');
|
|
75
|
+
}
|
|
76
|
+
if (decoded === '.' || decoded === '..') {
|
|
77
|
+
throw new HonkioError(400, 'INVALID_ID', 'An identifier contained path characters and was refused.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
25
80
|
let url = `${this.baseUrl}${path}`;
|
|
26
81
|
if (query) {
|
|
27
82
|
const params = new URLSearchParams();
|
|
@@ -39,6 +94,7 @@ export class HonkioClient {
|
|
|
39
94
|
'Authorization': `Bearer ${this.apiKey}`,
|
|
40
95
|
'Content-Type': 'application/json',
|
|
41
96
|
'Accept': 'application/json',
|
|
97
|
+
...(this.serviceKey ? { 'X-MCP-Service-Key': this.serviceKey } : {}),
|
|
42
98
|
...extraHeaders,
|
|
43
99
|
},
|
|
44
100
|
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
@@ -55,7 +111,11 @@ export class HonkioClient {
|
|
|
55
111
|
if (!res.ok) {
|
|
56
112
|
const code = data?.code ?? 'UNKNOWN_ERROR';
|
|
57
113
|
const message = data?.message ?? text ?? `HTTP ${res.status}`;
|
|
58
|
-
|
|
114
|
+
const details = data?.details;
|
|
115
|
+
const body = data !== null && typeof data === 'object' && !Array.isArray(data)
|
|
116
|
+
? data
|
|
117
|
+
: undefined;
|
|
118
|
+
throw new HonkioError(res.status, code, message, details, body);
|
|
59
119
|
}
|
|
60
120
|
return data;
|
|
61
121
|
}
|
|
@@ -68,12 +128,15 @@ export class HonkioClient {
|
|
|
68
128
|
return this.request('GET', '/v1/messages', undefined, query);
|
|
69
129
|
}
|
|
70
130
|
getMessage(id) {
|
|
71
|
-
return this.request('GET', `/v1/messages/${id}`);
|
|
131
|
+
return this.request('GET', `/v1/messages/${encodeURIComponent(id)}`);
|
|
72
132
|
}
|
|
73
133
|
// ── Phone Numbers ─────────────────────────────────────────
|
|
74
134
|
searchPhoneNumbers(query) {
|
|
75
135
|
return this.request('GET', '/v1/phone-numbers/search', undefined, query);
|
|
76
136
|
}
|
|
137
|
+
listAreaCodes() {
|
|
138
|
+
return this.request('GET', '/v1/phone-numbers/area-codes');
|
|
139
|
+
}
|
|
77
140
|
provisionPhoneNumber(phoneNumber) {
|
|
78
141
|
return this.request('POST', '/v1/phone-numbers', { phone_number: phoneNumber });
|
|
79
142
|
}
|
|
@@ -81,10 +144,16 @@ export class HonkioClient {
|
|
|
81
144
|
return this.request('GET', '/v1/phone-numbers');
|
|
82
145
|
}
|
|
83
146
|
getPhoneNumber(id) {
|
|
84
|
-
return this.request('GET', `/v1/phone-numbers/${id}`);
|
|
147
|
+
return this.request('GET', `/v1/phone-numbers/${encodeURIComponent(id)}`);
|
|
85
148
|
}
|
|
86
149
|
releasePhoneNumber(id) {
|
|
87
|
-
return this.request('DELETE', `/v1/phone-numbers/${id}`);
|
|
150
|
+
return this.request('DELETE', `/v1/phone-numbers/${encodeURIComponent(id)}`);
|
|
151
|
+
}
|
|
152
|
+
requestNumberAllowance(params) {
|
|
153
|
+
return this.request('POST', '/v1/phone-numbers/allowance-requests', params);
|
|
154
|
+
}
|
|
155
|
+
listNumberAllowanceRequests() {
|
|
156
|
+
return this.request('GET', '/v1/phone-numbers/allowance-requests');
|
|
88
157
|
}
|
|
89
158
|
// ── Compliance: Consents ──────────────────────────────────
|
|
90
159
|
recordConsent(params) {
|
|
@@ -126,10 +195,10 @@ export class HonkioClient {
|
|
|
126
195
|
return this.request('POST', '/v1/verify', params);
|
|
127
196
|
}
|
|
128
197
|
checkVerification(verificationId, code) {
|
|
129
|
-
return this.request('POST', `/v1/verify/${verificationId}/check`, { code });
|
|
198
|
+
return this.request('POST', `/v1/verify/${encodeURIComponent(verificationId)}/check`, { code });
|
|
130
199
|
}
|
|
131
200
|
getVerification(verificationId) {
|
|
132
|
-
return this.request('GET', `/v1/verify/${verificationId}`);
|
|
201
|
+
return this.request('GET', `/v1/verify/${encodeURIComponent(verificationId)}`);
|
|
133
202
|
}
|
|
134
203
|
listVerifications(query) {
|
|
135
204
|
return this.request('GET', '/v1/verify', undefined, query);
|
|
@@ -142,28 +211,28 @@ export class HonkioClient {
|
|
|
142
211
|
return this.request('GET', '/v1/webhooks');
|
|
143
212
|
}
|
|
144
213
|
getWebhook(id) {
|
|
145
|
-
return this.request('GET', `/v1/webhooks/${id}`);
|
|
214
|
+
return this.request('GET', `/v1/webhooks/${encodeURIComponent(id)}`);
|
|
146
215
|
}
|
|
147
216
|
updateWebhook(id, params) {
|
|
148
|
-
return this.request('PATCH', `/v1/webhooks/${id}`, params);
|
|
217
|
+
return this.request('PATCH', `/v1/webhooks/${encodeURIComponent(id)}`, params);
|
|
149
218
|
}
|
|
150
219
|
deleteWebhook(id) {
|
|
151
|
-
return this.request('DELETE', `/v1/webhooks/${id}`);
|
|
220
|
+
return this.request('DELETE', `/v1/webhooks/${encodeURIComponent(id)}`);
|
|
152
221
|
}
|
|
153
222
|
listWebhookDeliveries(webhookId, query) {
|
|
154
|
-
return this.request('GET', `/v1/webhooks/${webhookId}/deliveries`, undefined, query);
|
|
223
|
+
return this.request('GET', `/v1/webhooks/${encodeURIComponent(webhookId)}/deliveries`, undefined, query);
|
|
155
224
|
}
|
|
156
225
|
reactivateWebhook(webhookId) {
|
|
157
|
-
return this.request('POST', `/v1/webhooks/${webhookId}/reactivate`);
|
|
226
|
+
return this.request('POST', `/v1/webhooks/${encodeURIComponent(webhookId)}/reactivate`);
|
|
158
227
|
}
|
|
159
228
|
listWebhookDeadLetters(webhookId, query) {
|
|
160
|
-
return this.request('GET', `/v1/webhooks/${webhookId}/dead-letters`, undefined, query);
|
|
229
|
+
return this.request('GET', `/v1/webhooks/${encodeURIComponent(webhookId)}/dead-letters`, undefined, query);
|
|
161
230
|
}
|
|
162
231
|
replayWebhookDeadLetter(deadLetterId) {
|
|
163
|
-
return this.request('POST', `/v1/webhooks/dead-letters/${deadLetterId}/replay`);
|
|
232
|
+
return this.request('POST', `/v1/webhooks/dead-letters/${encodeURIComponent(deadLetterId)}/replay`);
|
|
164
233
|
}
|
|
165
234
|
discardWebhookDeadLetter(deadLetterId) {
|
|
166
|
-
return this.request('DELETE', `/v1/webhooks/dead-letters/${deadLetterId}`);
|
|
235
|
+
return this.request('DELETE', `/v1/webhooks/dead-letters/${encodeURIComponent(deadLetterId)}`);
|
|
167
236
|
}
|
|
168
237
|
// ── Account ───────────────────────────────────────────────
|
|
169
238
|
/**
|
|
@@ -177,13 +246,16 @@ export class HonkioClient {
|
|
|
177
246
|
return this.request('GET', '/v1/accounts/me');
|
|
178
247
|
}
|
|
179
248
|
getAccount(id) {
|
|
180
|
-
return this.request('GET', `/v1/accounts/${id}`);
|
|
249
|
+
return this.request('GET', `/v1/accounts/${encodeURIComponent(id)}`);
|
|
181
250
|
}
|
|
182
251
|
updateAccount(id, params) {
|
|
183
|
-
return this.request('PATCH', `/v1/accounts/${id}`, params);
|
|
252
|
+
return this.request('PATCH', `/v1/accounts/${encodeURIComponent(id)}`, params);
|
|
184
253
|
}
|
|
185
254
|
getUsage(id, query) {
|
|
186
|
-
return this.request('GET', `/v1/accounts/${id}/usage`, undefined, query);
|
|
255
|
+
return this.request('GET', `/v1/accounts/${encodeURIComponent(id)}/usage`, undefined, query);
|
|
256
|
+
}
|
|
257
|
+
listTransactions(id, query) {
|
|
258
|
+
return this.request('GET', `/v1/accounts/${encodeURIComponent(id)}/transactions`, undefined, query);
|
|
187
259
|
}
|
|
188
260
|
// ── Sending limits ────────────────────────────────────────────
|
|
189
261
|
getSendLimit() {
|
|
@@ -192,17 +264,20 @@ export class HonkioClient {
|
|
|
192
264
|
requestSendLimit(params) {
|
|
193
265
|
return this.request('POST', '/v1/send-limit/requests', params);
|
|
194
266
|
}
|
|
267
|
+
listSendLimitRequests() {
|
|
268
|
+
return this.request('GET', '/v1/send-limit/requests');
|
|
269
|
+
}
|
|
195
270
|
getTopupAllowance(accountId) {
|
|
196
|
-
return this.request('GET', `/v1/accounts/${accountId}/topup-allowance`);
|
|
271
|
+
return this.request('GET', `/v1/accounts/${encodeURIComponent(accountId)}/topup-allowance`);
|
|
197
272
|
}
|
|
198
273
|
createApiKey(accountId, params) {
|
|
199
|
-
return this.request('POST', `/v1/accounts/${accountId}/api-keys`, params ?? {});
|
|
274
|
+
return this.request('POST', `/v1/accounts/${encodeURIComponent(accountId)}/api-keys`, params ?? {});
|
|
200
275
|
}
|
|
201
276
|
revokeApiKey(accountId, keyId) {
|
|
202
|
-
return this.request('DELETE', `/v1/accounts/${accountId}/api-keys/${keyId}`);
|
|
277
|
+
return this.request('DELETE', `/v1/accounts/${encodeURIComponent(accountId)}/api-keys/${encodeURIComponent(keyId)}`);
|
|
203
278
|
}
|
|
204
279
|
rotateApiKey(accountId, keyId) {
|
|
205
|
-
return this.request('POST', `/v1/accounts/${accountId}/api-keys/${keyId}/rotate`);
|
|
280
|
+
return this.request('POST', `/v1/accounts/${encodeURIComponent(accountId)}/api-keys/${encodeURIComponent(keyId)}/rotate`);
|
|
206
281
|
}
|
|
207
282
|
}
|
|
208
283
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,sEAAsE;AACtE,MAAM,kBAAkB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* HonkIO MCP server, hosted Streamable HTTP transport: what mcp.honkio.ca runs.
|
|
4
|
+
*
|
|
5
|
+
* POST /mcp the MCP endpoint (Origin check, then API-key gate, then MCP)
|
|
6
|
+
* GET /healthz liveness for Railway
|
|
7
|
+
*
|
|
8
|
+
* Every request builds a fresh McpServer around a HonkioClient carrying the
|
|
9
|
+
* caller's key, so nothing is shared between callers and the process holds no
|
|
10
|
+
* session state. The verifier cache is the only thing that outlives a request.
|
|
11
|
+
*/
|
|
12
|
+
import { type Server } from 'node:http';
|
|
13
|
+
import { KeyVerifier } from './auth.js';
|
|
14
|
+
import { type Logger } from './log.js';
|
|
15
|
+
export declare const DEFAULT_REQUESTS_PER_MINUTE = 300;
|
|
16
|
+
export declare const DEFAULT_FAILURES_PER_MINUTE = 10;
|
|
17
|
+
export interface HttpServerOptions {
|
|
18
|
+
apiBaseUrl: string;
|
|
19
|
+
/** Origins allowed to call the endpoint from a browser. Any other Origin header is refused. */
|
|
20
|
+
allowedOrigins?: string[];
|
|
21
|
+
logger?: Logger;
|
|
22
|
+
verifier?: KeyVerifier;
|
|
23
|
+
/** Per-address caps, fixed one-minute windows. Defaults 300 requests and 10 failed requests. */
|
|
24
|
+
rateLimit?: {
|
|
25
|
+
requestsPerMinute?: number;
|
|
26
|
+
failuresPerMinute?: number;
|
|
27
|
+
};
|
|
28
|
+
/** Proxy hops that append to X-Forwarded-For in front of this process. Railway's edge is one. Default 1. */
|
|
29
|
+
trustedProxies?: number;
|
|
30
|
+
/** The URL access tokens are bound to (RFC 8707 resource). Default https://mcp.honkio.ca/mcp. */
|
|
31
|
+
publicUrl?: string;
|
|
32
|
+
/** This service's key at the API (MCP_SERVICE_KEY); enables OAuth access tokens. Unset means API keys only. */
|
|
33
|
+
serviceKey?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Keep in step with api/src/services/oauth/scopes.ts. */
|
|
36
|
+
export declare const SCOPES: readonly ["messages:read", "messages:send", "numbers:read", "numbers:manage", "compliance:read", "compliance:write", "verify", "webhooks:read", "webhooks:manage", "account:read", "account:manage"];
|
|
37
|
+
export declare const DEFAULT_PUBLIC_URL = "https://mcp.honkio.ca/mcp";
|
|
38
|
+
export interface HttpServerHandle {
|
|
39
|
+
server: Server;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export declare function createHttpServer(opts: HttpServerOptions): HttpServerHandle;
|
|
43
|
+
export declare function startHttpServer(opts: HttpServerOptions & {
|
|
44
|
+
port: number;
|
|
45
|
+
host?: string;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
url: string;
|
|
48
|
+
port: number;
|
|
49
|
+
close(): Promise<void>;
|
|
50
|
+
}>;
|
|
51
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AACH,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAOjG,OAAO,EAAiB,WAAW,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAIrD,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,gGAAgG;IAChG,SAAS,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,4GAA4G;IAC5G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0DAA0D;AAC1D,eAAO,MAAM,MAAM,sMAGT,CAAC;AAEX,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAqCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,CAyL1E;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAOhE"}
|