@embassys/ambassador 0.0.0 → 0.2.6

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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -2
  3. package/dist/agent-capabilities.d.ts +35 -0
  4. package/dist/agent-capabilities.js +221 -0
  5. package/dist/agent-capabilities.js.map +1 -0
  6. package/dist/ambassador-options.d.ts +9 -0
  7. package/dist/ambassador-options.js +31 -0
  8. package/dist/ambassador-options.js.map +1 -0
  9. package/dist/central-credential.d.ts +41 -0
  10. package/dist/central-credential.js +355 -0
  11. package/dist/central-credential.js.map +1 -0
  12. package/dist/central-enrollment.d.ts +31 -0
  13. package/dist/central-enrollment.js +278 -0
  14. package/dist/central-enrollment.js.map +1 -0
  15. package/dist/central-json.d.ts +8 -0
  16. package/dist/central-json.js +259 -0
  17. package/dist/central-json.js.map +1 -0
  18. package/dist/central-protected-transport.d.ts +21 -0
  19. package/dist/central-protected-transport.js +217 -0
  20. package/dist/central-protected-transport.js.map +1 -0
  21. package/dist/central-rest.d.ts +50 -0
  22. package/dist/central-rest.js +401 -0
  23. package/dist/central-rest.js.map +1 -0
  24. package/dist/cli.d.ts +26 -0
  25. package/dist/cli.js +131 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/credential-store.d.ts +18 -0
  28. package/dist/credential-store.js +517 -0
  29. package/dist/credential-store.js.map +1 -0
  30. package/dist/delivery-profile.d.ts +43 -0
  31. package/dist/delivery-profile.js +253 -0
  32. package/dist/delivery-profile.js.map +1 -0
  33. package/dist/direct-delivery.d.ts +38 -0
  34. package/dist/direct-delivery.js +315 -0
  35. package/dist/direct-delivery.js.map +1 -0
  36. package/dist/dpop.d.ts +28 -0
  37. package/dist/dpop.js +119 -0
  38. package/dist/dpop.js.map +1 -0
  39. package/dist/errors.d.ts +5 -0
  40. package/dist/errors.js +11 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/gateway-application.d.ts +32 -0
  43. package/dist/gateway-application.js +256 -0
  44. package/dist/gateway-application.js.map +1 -0
  45. package/dist/gateway-paths.d.ts +10 -0
  46. package/dist/gateway-paths.js +28 -0
  47. package/dist/gateway-paths.js.map +1 -0
  48. package/dist/guided-registration.d.ts +23 -0
  49. package/dist/guided-registration.js +117 -0
  50. package/dist/guided-registration.js.map +1 -0
  51. package/dist/identity.d.ts +20 -0
  52. package/dist/identity.js +54 -0
  53. package/dist/identity.js.map +1 -0
  54. package/dist/local-mcp.d.ts +28 -0
  55. package/dist/local-mcp.js +420 -0
  56. package/dist/local-mcp.js.map +1 -0
  57. package/dist/local-tool-result.d.ts +4 -0
  58. package/dist/local-tool-result.js +17 -0
  59. package/dist/local-tool-result.js.map +1 -0
  60. package/dist/mcp-contract.d.ts +10 -0
  61. package/dist/mcp-contract.js +63 -0
  62. package/dist/mcp-contract.js.map +1 -0
  63. package/dist/notification-journal.d.ts +24 -0
  64. package/dist/notification-journal.js +194 -0
  65. package/dist/notification-journal.js.map +1 -0
  66. package/dist/notification-relay.d.ts +31 -0
  67. package/dist/notification-relay.js +203 -0
  68. package/dist/notification-relay.js.map +1 -0
  69. package/dist/process-lock.d.ts +8 -0
  70. package/dist/process-lock.js +122 -0
  71. package/dist/process-lock.js.map +1 -0
  72. package/dist/sqlite-artifact.d.ts +7 -0
  73. package/dist/sqlite-artifact.js +121 -0
  74. package/dist/sqlite-artifact.js.map +1 -0
  75. package/dist/webhook-delivery.d.ts +23 -0
  76. package/dist/webhook-delivery.js +122 -0
  77. package/dist/webhook-delivery.js.map +1 -0
  78. package/docs/getting-started-claude.md +94 -0
  79. package/docs/getting-started-codex.md +103 -0
  80. package/docs/getting-started-gemini.md +87 -0
  81. package/docs/getting-started-hermes.md +84 -0
  82. package/docs/getting-started-openclaw.md +83 -0
  83. package/docs/live-qualification.md +174 -0
  84. package/package.json +48 -7
  85. package/index.js +0 -1
@@ -0,0 +1,401 @@
1
+ import { assertNoCentralCredentialFields, CentralJsonError, isCentralRecord, readCentralJson, } from "./central-json.js";
2
+ import { CentralProtectedTransportError, } from "./central-protected-transport.js";
3
+ import { validateNotificationId } from "./notification-journal.js";
4
+ const MAX_NORMALIZED_RESULT_BYTES = 512 * 1024;
5
+ const MAX_MESSAGES = 256;
6
+ const EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/u;
7
+ const NAME = /^[A-Za-z0-9._~-]{1,128}$/u;
8
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
9
+ const FORBIDDEN_ARGUMENT_NAMES = new Set([
10
+ "access_token",
11
+ "authorization",
12
+ "dpop",
13
+ "jwt",
14
+ "private_key",
15
+ "proof",
16
+ "token",
17
+ ]);
18
+ export class CentralRestError extends Error {
19
+ code;
20
+ constructor(code) {
21
+ super("Central REST operation failed");
22
+ this.code = code;
23
+ this.name = "CentralRestError";
24
+ }
25
+ }
26
+ function objectSchema(properties, required = []) {
27
+ return { type: "object", properties, required: [...required], additionalProperties: false };
28
+ }
29
+ export const REST_AUTHENTICATED_TOOLS = [
30
+ {
31
+ name: "list_action_types",
32
+ description: "List the deployed action names and input schemas.",
33
+ inputSchema: objectSchema({}),
34
+ },
35
+ {
36
+ name: "request_permission",
37
+ description: "Request permission to call an action on another registered identity.",
38
+ inputSchema: objectSchema({
39
+ target_email: { type: "string", minLength: 3, maxLength: 254 },
40
+ action_type: { type: "string", minLength: 1, maxLength: 128 },
41
+ scope: { type: "object" },
42
+ }, ["target_email", "action_type"]),
43
+ },
44
+ {
45
+ name: "respond_to_permission",
46
+ description: "Grant or deny one pending permission request.",
47
+ inputSchema: objectSchema({
48
+ permission_id: { type: "string", minLength: 1, maxLength: 128 },
49
+ decision: { type: "string", enum: ["granted", "denied"] },
50
+ }, ["permission_id", "decision"]),
51
+ },
52
+ {
53
+ name: "call_action",
54
+ description: "Deliver an allowed action request to another registered identity.",
55
+ inputSchema: objectSchema({
56
+ target_email: { type: "string", minLength: 3, maxLength: 254 },
57
+ action_type: { type: "string", minLength: 1, maxLength: 128 },
58
+ payload: { type: "object" },
59
+ }, ["target_email", "action_type", "payload"]),
60
+ },
61
+ {
62
+ name: "submit_action_result",
63
+ description: "Return one success or error result for an action call received by this identity.",
64
+ inputSchema: objectSchema({
65
+ call_id: { type: "string", format: "uuid" },
66
+ result: { type: "object" },
67
+ status: { type: "string", enum: ["success", "error"] },
68
+ }, ["call_id", "result", "status"]),
69
+ },
70
+ {
71
+ name: "get_my_permissions",
72
+ description: "List permissions involving the enrolled identity.",
73
+ inputSchema: objectSchema({}),
74
+ },
75
+ ];
76
+ function failure(code) {
77
+ return new CentralRestError(code);
78
+ }
79
+ function origin(value) {
80
+ let parsed;
81
+ try {
82
+ parsed = new URL(value);
83
+ }
84
+ catch {
85
+ throw failure("invalid_arguments");
86
+ }
87
+ const loopback = ["127.0.0.1", "::1", "localhost"].includes(parsed.hostname);
88
+ if ((parsed.protocol !== "https:" && !(parsed.protocol === "http:" && loopback)) ||
89
+ parsed.username !== "" ||
90
+ parsed.password !== "" ||
91
+ parsed.pathname !== "/" ||
92
+ parsed.search !== "" ||
93
+ parsed.hash !== "") {
94
+ throw failure("invalid_arguments");
95
+ }
96
+ return parsed;
97
+ }
98
+ function exactKeys(value, required, optional = []) {
99
+ if (!isCentralRecord(value))
100
+ return false;
101
+ const allowed = new Set([...required, ...optional]);
102
+ return (required.every((name) => Object.hasOwn(value, name)) &&
103
+ Object.keys(value).every((name) => allowed.has(name)));
104
+ }
105
+ function noForbiddenArguments(value) {
106
+ if (Array.isArray(value)) {
107
+ for (const item of value)
108
+ noForbiddenArguments(item);
109
+ return;
110
+ }
111
+ if (!isCentralRecord(value))
112
+ return;
113
+ for (const [name, nested] of Object.entries(value)) {
114
+ if (FORBIDDEN_ARGUMENT_NAMES.has(name.toLowerCase()))
115
+ throw failure("invalid_arguments");
116
+ noForbiddenArguments(nested);
117
+ }
118
+ }
119
+ function requestEmail(value) {
120
+ if (typeof value !== "string" || value.length > 254 || !EMAIL.test(value)) {
121
+ throw failure("invalid_arguments");
122
+ }
123
+ return value;
124
+ }
125
+ function requestName(value) {
126
+ if (typeof value !== "string" || !NAME.test(value))
127
+ throw failure("invalid_arguments");
128
+ return value;
129
+ }
130
+ function requestUuid(value) {
131
+ if (typeof value !== "string" || !UUID.test(value))
132
+ throw failure("invalid_arguments");
133
+ return value;
134
+ }
135
+ function requestObject(value) {
136
+ if (!isCentralRecord(value))
137
+ throw failure("invalid_arguments");
138
+ noForbiddenArguments(value);
139
+ return value;
140
+ }
141
+ function safeResultSize(value) {
142
+ let serialized;
143
+ try {
144
+ serialized = JSON.stringify(value);
145
+ }
146
+ catch {
147
+ throw failure("central_response_invalid");
148
+ }
149
+ if (Buffer.byteLength(serialized, "utf8") > MAX_NORMALIZED_RESULT_BYTES) {
150
+ throw failure("central_response_invalid");
151
+ }
152
+ }
153
+ function actionType(value) {
154
+ if (!exactKeys(value, ["id", "name", "description", "input_schema"]) ||
155
+ typeof value.id !== "string" ||
156
+ !NAME.test(value.id) ||
157
+ typeof value.name !== "string" ||
158
+ !NAME.test(value.name) ||
159
+ typeof value.description !== "string" ||
160
+ value.description.length > 1_024 ||
161
+ !isCentralRecord(value.input_schema) ||
162
+ value.input_schema.type !== "object") {
163
+ throw failure("central_response_invalid");
164
+ }
165
+ assertNoCentralCredentialFields(value.input_schema);
166
+ return {
167
+ id: value.id,
168
+ name: value.name,
169
+ description: value.description,
170
+ input_schema: value.input_schema,
171
+ };
172
+ }
173
+ function message(value) {
174
+ if (!exactKeys(value, ["sender_agent_id", "payload", "created_at"], ["id", "action_type_id"]) ||
175
+ (value.id !== undefined && (typeof value.id !== "string" || !NAME.test(value.id))) ||
176
+ typeof value.sender_agent_id !== "string" ||
177
+ value.sender_agent_id.length > 256 ||
178
+ (value.action_type_id !== undefined &&
179
+ value.action_type_id !== null &&
180
+ (typeof value.action_type_id !== "string" || value.action_type_id.length > 256)) ||
181
+ !isCentralRecord(value.payload) ||
182
+ typeof value.created_at !== "string" ||
183
+ value.created_at.length > 128) {
184
+ throw failure("central_response_invalid");
185
+ }
186
+ assertNoCentralCredentialFields(value.payload);
187
+ return {
188
+ ...(value.id === undefined ? {} : { id: value.id }),
189
+ sender_agent_id: value.sender_agent_id,
190
+ ...(value.action_type_id === undefined ? {} : { action_type_id: value.action_type_id }),
191
+ payload: value.payload,
192
+ created_at: value.created_at,
193
+ };
194
+ }
195
+ function permission(value) {
196
+ if (!exactKeys(value, ["id", "grantor_email", "grantee_email", "action_type", "status"], ["scope", "created_at", "decided_at", "expires_at"]) ||
197
+ typeof value.id !== "string" ||
198
+ !NAME.test(value.id) ||
199
+ typeof value.grantor_email !== "string" ||
200
+ !EMAIL.test(value.grantor_email) ||
201
+ typeof value.grantee_email !== "string" ||
202
+ !EMAIL.test(value.grantee_email) ||
203
+ typeof value.action_type !== "string" ||
204
+ !NAME.test(value.action_type) ||
205
+ !["pending", "granted", "denied"].includes(value.status) ||
206
+ (value.scope !== undefined && value.scope !== null && !isCentralRecord(value.scope)) ||
207
+ !["created_at", "decided_at", "expires_at"].every((name) => value[name] === undefined || value[name] === null || typeof value[name] === "string")) {
208
+ throw failure("central_response_invalid");
209
+ }
210
+ assertNoCentralCredentialFields(value);
211
+ return value;
212
+ }
213
+ async function cancel(response) {
214
+ await response.body?.cancel().catch(() => undefined);
215
+ }
216
+ export class CentralRestClient {
217
+ #origin;
218
+ #transport;
219
+ constructor(options) {
220
+ this.#origin = origin(options.centralOrigin);
221
+ this.#transport = options.transport;
222
+ }
223
+ async listActionTypes(signal) {
224
+ const result = await this.#request("GET", "/api/list_action_types", undefined, signal);
225
+ if (!Array.isArray(result) || result.length > 128)
226
+ throw failure("central_response_invalid");
227
+ const actions = result.map(actionType);
228
+ if (new Set(actions.map((action) => action.name)).size !== actions.length) {
229
+ throw failure("central_response_invalid");
230
+ }
231
+ safeResultSize(actions);
232
+ return actions;
233
+ }
234
+ async requestPermission(arguments_, signal) {
235
+ if (!exactKeys(arguments_, ["target_email", "action_type"], ["scope"])) {
236
+ throw failure("invalid_arguments");
237
+ }
238
+ const body = {
239
+ target_email: requestEmail(arguments_.target_email),
240
+ action_type: requestName(arguments_.action_type),
241
+ ...(arguments_.scope === undefined ? {} : { scope: requestObject(arguments_.scope) }),
242
+ };
243
+ const result = await this.#request("POST", "/api/request_permission", body, signal);
244
+ if (!exactKeys(result, ["permission_id", "status", "message"]) ||
245
+ typeof result.permission_id !== "string" ||
246
+ !NAME.test(result.permission_id) ||
247
+ !["pending", "granted", "denied"].includes(result.status) ||
248
+ typeof result.message !== "string" ||
249
+ result.message.length > 512) {
250
+ throw failure("central_response_invalid");
251
+ }
252
+ return result;
253
+ }
254
+ async respondToPermission(arguments_, signal) {
255
+ if (!exactKeys(arguments_, ["permission_id", "decision"]) ||
256
+ (arguments_.decision !== "granted" && arguments_.decision !== "denied")) {
257
+ throw failure("invalid_arguments");
258
+ }
259
+ const permissionId = requestName(arguments_.permission_id);
260
+ const result = await this.#request("POST", "/api/respond_to_permission", { permission_id: permissionId, decision: arguments_.decision }, signal);
261
+ if (!exactKeys(result, ["permission_id", "status", "decided_at"]) ||
262
+ result.permission_id !== permissionId ||
263
+ result.status !== arguments_.decision ||
264
+ typeof result.decided_at !== "string" ||
265
+ result.decided_at.length > 128) {
266
+ throw failure("central_response_invalid");
267
+ }
268
+ return result;
269
+ }
270
+ async callAction(arguments_, signal) {
271
+ if (!exactKeys(arguments_, ["target_email", "action_type", "payload"])) {
272
+ throw failure("invalid_arguments");
273
+ }
274
+ const result = await this.#request("POST", "/api/call_action", {
275
+ target_email: requestEmail(arguments_.target_email),
276
+ action_type: requestName(arguments_.action_type),
277
+ payload: requestObject(arguments_.payload),
278
+ }, signal);
279
+ if (!exactKeys(result, ["call_id", "message_id", "status"]) ||
280
+ typeof result.call_id !== "string" ||
281
+ !UUID.test(result.call_id) ||
282
+ typeof result.message_id !== "string" ||
283
+ !NAME.test(result.message_id) ||
284
+ result.status !== "delivered") {
285
+ throw failure("central_response_invalid");
286
+ }
287
+ return result;
288
+ }
289
+ async submitActionResult(arguments_, signal) {
290
+ if (!exactKeys(arguments_, ["call_id", "result", "status"]) ||
291
+ (arguments_.status !== "success" && arguments_.status !== "error")) {
292
+ throw failure("invalid_arguments");
293
+ }
294
+ const callId = requestUuid(arguments_.call_id);
295
+ const requestedStatus = arguments_.status;
296
+ const result = await this.#request("POST", "/api/submit_action_result", {
297
+ call_id: callId,
298
+ result: requestObject(arguments_.result),
299
+ status: requestedStatus,
300
+ }, signal);
301
+ const expectedStatus = requestedStatus === "success" ? "completed" : "failed";
302
+ if (!exactKeys(result, ["call_id", "status", "message_id"]) ||
303
+ result.call_id !== callId ||
304
+ result.status !== expectedStatus ||
305
+ typeof result.message_id !== "string" ||
306
+ !NAME.test(result.message_id)) {
307
+ throw failure("central_response_invalid");
308
+ }
309
+ return result;
310
+ }
311
+ async pollRemoteMessages(timeout, signal) {
312
+ if (!Number.isInteger(timeout) || timeout < 0 || timeout > 60) {
313
+ throw failure("invalid_arguments");
314
+ }
315
+ const result = await this.#request("GET", `/api/poll_messages?timeout=${timeout}`, undefined, signal);
316
+ if (!exactKeys(result, ["messages"]) || !Array.isArray(result.messages)) {
317
+ throw failure("central_response_invalid");
318
+ }
319
+ if (result.messages.length > MAX_MESSAGES)
320
+ throw failure("central_response_invalid");
321
+ const messages = result.messages.map(message);
322
+ const byId = new Map();
323
+ for (const value of messages) {
324
+ if (value.id === undefined)
325
+ continue;
326
+ const serialized = JSON.stringify(value);
327
+ const existing = byId.get(value.id);
328
+ if (existing !== undefined && existing !== serialized)
329
+ throw failure("central_response_invalid");
330
+ byId.set(value.id, serialized);
331
+ }
332
+ safeResultSize({ messages });
333
+ return { messages };
334
+ }
335
+ async getMyPermissions(signal) {
336
+ const result = await this.#request("GET", "/api/get_my_permissions", undefined, signal);
337
+ if (!Array.isArray(result) || result.length > 512)
338
+ throw failure("central_response_invalid");
339
+ const permissions = result.map(permission);
340
+ safeResultSize(permissions);
341
+ return permissions;
342
+ }
343
+ async ackMessage(arguments_, signal) {
344
+ if (!exactKeys(arguments_, ["message_id"]))
345
+ throw failure("invalid_arguments");
346
+ let messageId;
347
+ try {
348
+ messageId = validateNotificationId(arguments_.message_id);
349
+ }
350
+ catch {
351
+ throw failure("invalid_arguments");
352
+ }
353
+ const result = await this.#request("POST", "/api/ack_message", { message_id: messageId }, signal);
354
+ if (!exactKeys(result, ["message_id", "status"]) ||
355
+ result.message_id !== messageId ||
356
+ result.status !== "acked") {
357
+ throw failure("central_response_invalid");
358
+ }
359
+ return { message_id: messageId, status: "acked" };
360
+ }
361
+ async #request(method, path, body, signal) {
362
+ let response;
363
+ try {
364
+ response = await this.#transport.fetch(new URL(path, this.#origin), {
365
+ method,
366
+ ...(body === undefined
367
+ ? {}
368
+ : { headers: { "content-type": "application/json" }, body: JSON.stringify(body) }),
369
+ ...(signal === undefined ? {} : { signal }),
370
+ });
371
+ }
372
+ catch (error) {
373
+ if (error instanceof CentralProtectedTransportError) {
374
+ if (error.code === "central_protected_authentication_failed") {
375
+ throw failure("central_authentication_failed");
376
+ }
377
+ if (error.code === "central_protected_request_failed") {
378
+ throw failure("central_request_failed");
379
+ }
380
+ }
381
+ throw failure("central_request_failed");
382
+ }
383
+ if (!response.ok) {
384
+ await cancel(response);
385
+ throw failure(response.status === 401 ? "central_authentication_failed" : "central_request_rejected");
386
+ }
387
+ try {
388
+ const result = await readCentralJson(response);
389
+ assertNoCentralCredentialFields(result);
390
+ return result;
391
+ }
392
+ catch (error) {
393
+ if (error instanceof CentralJsonError)
394
+ throw failure("central_response_invalid");
395
+ if (error instanceof CentralRestError)
396
+ throw error;
397
+ throw failure("central_response_invalid");
398
+ }
399
+ }
400
+ }
401
+ //# sourceMappingURL=central-rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"central-rest.js","sourceRoot":"","sources":["../src/central-rest.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import type { CredentialStore } from "./credential-store.js";
3
+ import { type DeliveryTargetContext } from "./gateway-application.js";
4
+ import type { DeliveryTarget } from "./notification-relay.js";
5
+ export interface CliIo {
6
+ readonly stdout: Pick<NodeJS.WriteStream, "write">;
7
+ readonly stderr: Pick<NodeJS.WriteStream, "write">;
8
+ }
9
+ export interface CliTestOverrides {
10
+ readonly centralOrigin: string;
11
+ readonly stateRoot: string;
12
+ readonly credentialStore?: CredentialStore;
13
+ readonly centralFetch?: typeof fetch;
14
+ readonly webhookFetch?: typeof fetch;
15
+ readonly deliveryTargetFactory?: (context: DeliveryTargetContext) => DeliveryTarget;
16
+ readonly localMcpPort?: number;
17
+ readonly nowSeconds?: () => number;
18
+ }
19
+ export interface CliContext {
20
+ readonly io: CliIo;
21
+ readonly env: NodeJS.ProcessEnv;
22
+ readonly cwd: string;
23
+ readonly signal?: AbortSignal;
24
+ readonly testOverrides?: CliTestOverrides;
25
+ }
26
+ export declare function runCli(args: string[], context: CliContext): Promise<number>;
package/dist/cli.js ADDED
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { AmbassadorOptionsError, parseAmbassadorStartOptions, resolveLocalToken, } from "./ambassador-options.js";
7
+ import { GatewayError } from "./errors.js";
8
+ import { openGatewayApplication, } from "./gateway-application.js";
9
+ import { defaultGatewayPaths, pathsForStateDirectory } from "./gateway-paths.js";
10
+ import { ProcessLock } from "./process-lock.js";
11
+ function processSignal() {
12
+ const controller = new AbortController();
13
+ const abort = () => controller.abort();
14
+ process.once("SIGINT", abort);
15
+ process.once("SIGTERM", abort);
16
+ return {
17
+ signal: controller.signal,
18
+ close() {
19
+ process.off("SIGINT", abort);
20
+ process.off("SIGTERM", abort);
21
+ },
22
+ };
23
+ }
24
+ async function waitForAbort(signal) {
25
+ if (signal.aborted)
26
+ return;
27
+ await new Promise((resolveWait) => signal.addEventListener("abort", () => resolveWait(), { once: true }));
28
+ }
29
+ function homeDirectory(environment) {
30
+ return environment.HOME || environment.USERPROFILE || homedir();
31
+ }
32
+ export async function runCli(args, context) {
33
+ let parsed;
34
+ try {
35
+ parsed = parseAmbassadorStartOptions(args);
36
+ }
37
+ catch (error) {
38
+ context.io.stderr.write(`${error instanceof AmbassadorOptionsError ? error.message : "Invalid command or arguments"}\n`);
39
+ return error instanceof AmbassadorOptionsError ? error.exitCode : 2;
40
+ }
41
+ const paths = context.testOverrides === undefined
42
+ ? defaultGatewayPaths(process.platform, context.env, homeDirectory(context.env))
43
+ : pathsForStateDirectory(context.testOverrides.stateRoot, join);
44
+ let lock;
45
+ let application;
46
+ const ownedSignal = context.signal === undefined ? processSignal() : undefined;
47
+ const signal = context.signal ?? ownedSignal?.signal;
48
+ if (signal === undefined)
49
+ throw new Error("Ambassador signal is unavailable");
50
+ try {
51
+ lock = await ProcessLock.acquire(paths.lockPath);
52
+ const localToken = resolveLocalToken(context.env, parsed.localTokenEnv);
53
+ application = await openGatewayApplication({
54
+ localToken,
55
+ journalPath: paths.journalPath,
56
+ credentialPath: paths.credentialPath,
57
+ profilePath: paths.profilePath,
58
+ workingDirectory: context.cwd,
59
+ environment: context.env,
60
+ signal,
61
+ ...(context.testOverrides === undefined
62
+ ? {}
63
+ : {
64
+ centralOrigin: context.testOverrides.centralOrigin,
65
+ ...(context.testOverrides.credentialStore === undefined
66
+ ? {}
67
+ : { credentialStore: context.testOverrides.credentialStore }),
68
+ ...(context.testOverrides.centralFetch === undefined
69
+ ? {}
70
+ : { centralFetch: context.testOverrides.centralFetch }),
71
+ ...(context.testOverrides.webhookFetch === undefined
72
+ ? {}
73
+ : { webhookFetch: context.testOverrides.webhookFetch }),
74
+ ...(context.testOverrides.deliveryTargetFactory === undefined
75
+ ? {}
76
+ : { deliveryTargetFactory: context.testOverrides.deliveryTargetFactory }),
77
+ ...(context.testOverrides.localMcpPort === undefined
78
+ ? {}
79
+ : { localMcpPort: context.testOverrides.localMcpPort }),
80
+ ...(context.testOverrides.nowSeconds === undefined
81
+ ? {}
82
+ : { nowSeconds: context.testOverrides.nowSeconds }),
83
+ }),
84
+ });
85
+ context.io.stdout.write(`MCP endpoint: ${application.endpoint}\n`);
86
+ const failure = await Promise.race([
87
+ waitForAbort(signal).then(() => undefined),
88
+ application.failure,
89
+ ]);
90
+ if (failure !== undefined)
91
+ throw failure;
92
+ return 0;
93
+ }
94
+ catch (error) {
95
+ if (signal.aborted)
96
+ return 0;
97
+ if (error instanceof AmbassadorOptionsError) {
98
+ context.io.stderr.write(`${error.message}\n`);
99
+ return error.exitCode;
100
+ }
101
+ if (error instanceof GatewayError) {
102
+ context.io.stderr.write(`${error.message}\n`);
103
+ return error.exitCode;
104
+ }
105
+ context.io.stderr.write("Ambassador local state failed\n");
106
+ return 7;
107
+ }
108
+ finally {
109
+ await application?.close().catch(() => undefined);
110
+ await lock?.release().catch(() => undefined);
111
+ ownedSignal?.close();
112
+ }
113
+ }
114
+ function isMainModule() {
115
+ if (process.argv[1] === undefined)
116
+ return false;
117
+ try {
118
+ return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));
119
+ }
120
+ catch {
121
+ return resolve(process.argv[1]) === resolve(fileURLToPath(import.meta.url));
122
+ }
123
+ }
124
+ if (isMainModule()) {
125
+ process.exitCode = await runCli(process.argv.slice(2), {
126
+ io: { stdout: process.stdout, stderr: process.stderr },
127
+ env: process.env,
128
+ cwd: process.cwd(),
129
+ });
130
+ }
131
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface CredentialStore {
2
+ load(): Promise<string | undefined>;
3
+ save(credential: string): Promise<void>;
4
+ }
5
+ export type CredentialArtifactKind = "directory" | "file";
6
+ export interface WindowsCredentialAccessControl {
7
+ secure(path: string, kind: CredentialArtifactKind): Promise<void>;
8
+ }
9
+ export interface EncryptedFileCredentialStoreOptions {
10
+ readonly platform?: NodeJS.Platform;
11
+ readonly windowsAccessControl?: WindowsCredentialAccessControl;
12
+ }
13
+ export declare class EncryptedFileCredentialStore implements CredentialStore {
14
+ #private;
15
+ constructor(path: string, localToken: string, credentialScope: string, options?: EncryptedFileCredentialStoreOptions);
16
+ load(): Promise<string | undefined>;
17
+ save(plaintext: string): Promise<void>;
18
+ }