@pidgeon-ai/cli 1.43.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3339 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- COMMANDS,
4
- __export
5
- } from "./chunk-DHEC6LXJ.js";
6
-
7
- // ../sdk/dist/index.js
8
- var dist_exports = {};
9
- __export(dist_exports, {
10
- SIGNATURE_HEADER: () => SIGNATURE_HEADER,
11
- TIMESTAMP_HEADER: () => TIMESTAMP_HEADER,
12
- agentAttachHuman: () => agentAttachHuman,
13
- agentConnect: () => agentConnect,
14
- agentSetup: () => agentSetup,
15
- agentSignUp: () => agentSignUp,
16
- agentVerify: () => agentVerify,
17
- appPasswordsCreate: () => appPasswordsCreate,
18
- appPasswordsList: () => appPasswordsList,
19
- appPasswordsRevoke: () => appPasswordsRevoke,
20
- attachmentsCompleteUpload: () => attachmentsCompleteUpload,
21
- attachmentsCreateUpload: () => attachmentsCreateUpload,
22
- attachmentsDownloadUrl: () => attachmentsDownloadUrl,
23
- attachmentsText: () => attachmentsText,
24
- attachmentsUpload: () => attachmentsUpload,
25
- calendarCreateEvent: () => calendarCreateEvent,
26
- calendarDeleteEvent: () => calendarDeleteEvent,
27
- calendarFreeTime: () => calendarFreeTime,
28
- calendarGet: () => calendarGet,
29
- calendarGetAgenda: () => calendarGetAgenda,
30
- calendarGetEvent: () => calendarGetEvent,
31
- calendarListEventInstances: () => calendarListEventInstances,
32
- calendarListEvents: () => calendarListEvents,
33
- calendarRespondToEvent: () => calendarRespondToEvent,
34
- calendarUpdate: () => calendarUpdate,
35
- calendarUpdateEvent: () => calendarUpdateEvent,
36
- cardsGet: () => cardsGet,
37
- client: () => client,
38
- contactsBlock: () => contactsBlock,
39
- contactsCreate: () => contactsCreate,
40
- contactsDelete: () => contactsDelete,
41
- contactsGet: () => contactsGet,
42
- contactsList: () => contactsList,
43
- contactsUnblock: () => contactsUnblock,
44
- contactsUpdate: () => contactsUpdate,
45
- createClient: () => createClient,
46
- createConfig: () => createConfig,
47
- domainsCreate: () => domainsCreate,
48
- domainsDelete: () => domainsDelete,
49
- domainsGet: () => domainsGet,
50
- domainsGetSetupLink: () => domainsGetSetupLink,
51
- domainsList: () => domainsList,
52
- domainsUpdate: () => domainsUpdate,
53
- domainsVerify: () => domainsVerify,
54
- domainsZoneFile: () => domainsZoneFile,
55
- draftsApproval: () => draftsApproval,
56
- draftsCancelSchedule: () => draftsCancelSchedule,
57
- draftsCreate: () => draftsCreate,
58
- draftsDelete: () => draftsDelete,
59
- draftsGet: () => draftsGet,
60
- draftsList: () => draftsList,
61
- draftsRemoveAttachment: () => draftsRemoveAttachment,
62
- draftsSchedule: () => draftsSchedule,
63
- draftsSend: () => draftsSend,
64
- draftsUpdate: () => draftsUpdate,
65
- eventsGet: () => eventsGet,
66
- eventsList: () => eventsList,
67
- eventsSocket: () => eventsSocket,
68
- eventsStream: () => eventsStream,
69
- exportMail: () => exportMail,
70
- grantsCreate: () => grantsCreate,
71
- grantsGet: () => grantsGet,
72
- grantsList: () => grantsList,
73
- grantsRevoke: () => grantsRevoke,
74
- grantsStatus: () => grantsStatus,
75
- grantsTemplatesCreate: () => grantsTemplatesCreate,
76
- grantsTemplatesDelete: () => grantsTemplatesDelete,
77
- grantsTemplatesList: () => grantsTemplatesList,
78
- identitiesAccessCreate: () => identitiesAccessCreate,
79
- identitiesAccessDelete: () => identitiesAccessDelete,
80
- identitiesAccessGet: () => identitiesAccessGet,
81
- identitiesCard: () => identitiesCard,
82
- identitiesCreate: () => identitiesCreate,
83
- identitiesDelete: () => identitiesDelete,
84
- identitiesGet: () => identitiesGet,
85
- identitiesList: () => identitiesList,
86
- identitiesReceiveRulesCreate: () => identitiesReceiveRulesCreate,
87
- identitiesReceiveRulesDelete: () => identitiesReceiveRulesDelete,
88
- identitiesReceiveRulesGet: () => identitiesReceiveRulesGet,
89
- identitiesSendRulesCreate: () => identitiesSendRulesCreate,
90
- identitiesSendRulesDelete: () => identitiesSendRulesDelete,
91
- identitiesSendRulesGet: () => identitiesSendRulesGet,
92
- identitiesSuspendTenant: () => identitiesSuspendTenant,
93
- identitiesUpdate: () => identitiesUpdate,
94
- keysCreate: () => keysCreate,
95
- keysGet: () => keysGet,
96
- keysList: () => keysList,
97
- keysRevoke: () => keysRevoke,
98
- keysRotate: () => keysRotate,
99
- keysUpdate: () => keysUpdate,
100
- labelsCreate: () => labelsCreate,
101
- labelsDelete: () => labelsDelete,
102
- labelsList: () => labelsList,
103
- labelsUpdate: () => labelsUpdate,
104
- logCheckpoint: () => logCheckpoint,
105
- logConsistency: () => logConsistency,
106
- logEntries: () => logEntries,
107
- logHead: () => logHead,
108
- logMonitorsCreate: () => logMonitorsCreate,
109
- logMonitorsDelete: () => logMonitorsDelete,
110
- logMonitorsList: () => logMonitorsList,
111
- logProof: () => logProof,
112
- mailboxesChanges: () => mailboxesChanges,
113
- mailboxesEmptyTrash: () => mailboxesEmptyTrash,
114
- mailboxesList: () => mailboxesList,
115
- mailboxesListFolder: () => mailboxesListFolder,
116
- meGet: () => meGet,
117
- messagesAct: () => messagesAct,
118
- messagesAwait: () => messagesAwait,
119
- messagesCheck: () => messagesCheck,
120
- messagesForward: () => messagesForward,
121
- messagesGet: () => messagesGet,
122
- messagesListInThread: () => messagesListInThread,
123
- messagesRaw: () => messagesRaw,
124
- messagesReply: () => messagesReply,
125
- messagesReplyAll: () => messagesReplyAll,
126
- messagesRespondToInvitation: () => messagesRespondToInvitation,
127
- messagesSearch: () => messagesSearch,
128
- messagesSend: () => messagesSend,
129
- messagesUndo: () => messagesUndo,
130
- messagesUpdate: () => messagesUpdate,
131
- metricsQuery: () => metricsQuery,
132
- podsCreate: () => podsCreate,
133
- podsDelete: () => podsDelete,
134
- podsGet: () => podsGet,
135
- podsList: () => podsList,
136
- podsUpdate: () => podsUpdate,
137
- routingCreate: () => routingCreate,
138
- routingDelete: () => routingDelete,
139
- routingList: () => routingList,
140
- routingUpdate: () => routingUpdate,
141
- signInsApprove: () => signInsApprove,
142
- streamEvents: () => streamEvents,
143
- testInbound: () => testInbound,
144
- threadsGet: () => threadsGet,
145
- threadsLabelsCreate: () => threadsLabelsCreate,
146
- threadsLabelsDelete: () => threadsLabelsDelete,
147
- threadsLabelsGet: () => threadsLabelsGet,
148
- threadsList: () => threadsList,
149
- threadsUpdate: () => threadsUpdate,
150
- verifySender: () => verifySender,
151
- verifyWebhook: () => verifyWebhook,
152
- webhooksCreate: () => webhooksCreate,
153
- webhooksDelete: () => webhooksDelete,
154
- webhooksDeliveries: () => webhooksDeliveries,
155
- webhooksGet: () => webhooksGet,
156
- webhooksGetHeaders: () => webhooksGetHeaders,
157
- webhooksList: () => webhooksList,
158
- webhooksReplay: () => webhooksReplay,
159
- webhooksUpdate: () => webhooksUpdate,
160
- webhooksUpdateHeaders: () => webhooksUpdateHeaders,
161
- workspaceGet: () => workspaceGet,
162
- workspaceMembers: () => workspaceMembers
163
- });
164
- var serializeFormDataPair = (data, key, value) => {
165
- if (typeof value === "string" || value instanceof Blob) {
166
- data.append(key, value);
167
- } else if (value instanceof Date) {
168
- data.append(key, value.toISOString());
169
- } else {
170
- data.append(key, JSON.stringify(value));
171
- }
172
- };
173
- var formDataBodySerializer = {
174
- bodySerializer: (body) => {
175
- const data = new FormData();
176
- Object.entries(body).forEach(([key, value]) => {
177
- if (value === void 0 || value === null) {
178
- return;
179
- }
180
- if (Array.isArray(value)) {
181
- value.forEach((v) => serializeFormDataPair(data, key, v));
182
- } else {
183
- serializeFormDataPair(data, key, value);
184
- }
185
- });
186
- return data;
187
- }
188
- };
189
- var jsonBodySerializer = {
190
- bodySerializer: (body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value)
191
- };
192
- function createSseClient({
193
- onRequest,
194
- onSseError,
195
- onSseEvent,
196
- responseTransformer,
197
- responseValidator,
198
- sseDefaultRetryDelay,
199
- sseMaxRetryAttempts,
200
- sseMaxRetryDelay,
201
- sseSleepFn,
202
- url,
203
- ...options
204
- }) {
205
- let lastEventId;
206
- const sleep2 = sseSleepFn ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
207
- const createStream = async function* () {
208
- let retryDelay = sseDefaultRetryDelay ?? 3e3;
209
- let attempt = 0;
210
- const signal = options.signal ?? new AbortController().signal;
211
- while (true) {
212
- if (signal.aborted) break;
213
- attempt++;
214
- const headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers);
215
- if (lastEventId !== void 0) {
216
- headers.set("Last-Event-ID", lastEventId);
217
- }
218
- try {
219
- const requestInit = {
220
- redirect: "follow",
221
- ...options,
222
- body: options.serializedBody,
223
- headers,
224
- signal
225
- };
226
- let request = new Request(url, requestInit);
227
- if (onRequest) {
228
- request = await onRequest(url, requestInit);
229
- }
230
- const _fetch = options.fetch ?? globalThis.fetch;
231
- const response = await _fetch(request);
232
- if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);
233
- if (!response.body) throw new Error("No body in SSE response");
234
- const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
235
- let buffer = "";
236
- const abortHandler = () => {
237
- try {
238
- reader.cancel();
239
- } catch {
240
- }
241
- };
242
- signal.addEventListener("abort", abortHandler);
243
- try {
244
- while (true) {
245
- const { done, value } = await reader.read();
246
- if (done) break;
247
- buffer += value;
248
- buffer = buffer.replace(/\r\n?/g, "\n");
249
- const chunks = buffer.split("\n\n");
250
- buffer = chunks.pop() ?? "";
251
- for (const chunk of chunks) {
252
- const lines = chunk.split("\n");
253
- const dataLines = [];
254
- let eventName;
255
- for (const line of lines) {
256
- if (line.startsWith("data:")) {
257
- dataLines.push(line.replace(/^data:\s*/, ""));
258
- } else if (line.startsWith("event:")) {
259
- eventName = line.replace(/^event:\s*/, "");
260
- } else if (line.startsWith("id:")) {
261
- lastEventId = line.replace(/^id:\s*/, "");
262
- } else if (line.startsWith("retry:")) {
263
- const parsed = Number.parseInt(line.replace(/^retry:\s*/, ""), 10);
264
- if (!Number.isNaN(parsed)) {
265
- retryDelay = parsed;
266
- }
267
- }
268
- }
269
- let data;
270
- let parsedJson = false;
271
- if (dataLines.length) {
272
- const rawData = dataLines.join("\n");
273
- try {
274
- data = JSON.parse(rawData);
275
- parsedJson = true;
276
- } catch {
277
- data = rawData;
278
- }
279
- }
280
- if (parsedJson) {
281
- if (responseValidator) {
282
- await responseValidator(data);
283
- }
284
- if (responseTransformer) {
285
- data = await responseTransformer(data);
286
- }
287
- }
288
- onSseEvent?.({
289
- data,
290
- event: eventName,
291
- id: lastEventId,
292
- retry: retryDelay
293
- });
294
- if (dataLines.length) {
295
- yield data;
296
- }
297
- }
298
- }
299
- } finally {
300
- signal.removeEventListener("abort", abortHandler);
301
- reader.releaseLock();
302
- }
303
- break;
304
- } catch (error) {
305
- onSseError?.(error);
306
- if (sseMaxRetryAttempts !== void 0 && attempt >= sseMaxRetryAttempts) {
307
- break;
308
- }
309
- const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 3e4);
310
- await sleep2(backoff);
311
- }
312
- }
313
- };
314
- const stream = createStream();
315
- return { stream };
316
- }
317
- var separatorArrayExplode = (style) => {
318
- switch (style) {
319
- case "label":
320
- return ".";
321
- case "matrix":
322
- return ";";
323
- case "simple":
324
- return ",";
325
- default:
326
- return "&";
327
- }
328
- };
329
- var separatorArrayNoExplode = (style) => {
330
- switch (style) {
331
- case "form":
332
- return ",";
333
- case "pipeDelimited":
334
- return "|";
335
- case "spaceDelimited":
336
- return "%20";
337
- default:
338
- return ",";
339
- }
340
- };
341
- var separatorObjectExplode = (style) => {
342
- switch (style) {
343
- case "label":
344
- return ".";
345
- case "matrix":
346
- return ";";
347
- case "simple":
348
- return ",";
349
- default:
350
- return "&";
351
- }
352
- };
353
- var serializeArrayParam = ({
354
- allowReserved,
355
- explode,
356
- name,
357
- style,
358
- value
359
- }) => {
360
- if (!explode) {
361
- const joinedValues2 = (allowReserved ? value : value.map((v) => encodeURIComponent(v))).join(separatorArrayNoExplode(style));
362
- switch (style) {
363
- case "label":
364
- return `.${joinedValues2}`;
365
- case "matrix":
366
- return `;${name}=${joinedValues2}`;
367
- case "simple":
368
- return joinedValues2;
369
- default:
370
- return `${name}=${joinedValues2}`;
371
- }
372
- }
373
- const separator = separatorArrayExplode(style);
374
- const joinedValues = value.map((v) => {
375
- if (style === "label" || style === "simple") {
376
- return allowReserved ? v : encodeURIComponent(v);
377
- }
378
- return serializePrimitiveParam({
379
- allowReserved,
380
- name,
381
- value: v
382
- });
383
- }).join(separator);
384
- return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
385
- };
386
- var serializePrimitiveParam = ({
387
- allowReserved,
388
- name,
389
- value
390
- }) => {
391
- if (value === void 0 || value === null) {
392
- return "";
393
- }
394
- if (typeof value === "object") {
395
- throw new Error(
396
- "Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these."
397
- );
398
- }
399
- return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;
400
- };
401
- var serializeObjectParam = ({
402
- allowReserved,
403
- explode,
404
- name,
405
- style,
406
- value,
407
- valueOnly
408
- }) => {
409
- if (value instanceof Date) {
410
- return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;
411
- }
412
- if (style !== "deepObject" && !explode) {
413
- let values = [];
414
- Object.entries(value).forEach(([key, v]) => {
415
- values = [...values, key, allowReserved ? v : encodeURIComponent(v)];
416
- });
417
- const joinedValues2 = values.join(",");
418
- switch (style) {
419
- case "form":
420
- return `${name}=${joinedValues2}`;
421
- case "label":
422
- return `.${joinedValues2}`;
423
- case "matrix":
424
- return `;${name}=${joinedValues2}`;
425
- default:
426
- return joinedValues2;
427
- }
428
- }
429
- const separator = separatorObjectExplode(style);
430
- const joinedValues = Object.entries(value).map(
431
- ([key, v]) => serializePrimitiveParam({
432
- allowReserved,
433
- name: style === "deepObject" ? `${name}[${key}]` : key,
434
- value: v
435
- })
436
- ).join(separator);
437
- return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
438
- };
439
- var PATH_PARAM_RE = /\{[^{}]+\}/g;
440
- var defaultPathSerializer = ({ path, url: _url }) => {
441
- let url = _url;
442
- const matches = _url.match(PATH_PARAM_RE);
443
- if (matches) {
444
- for (const match of matches) {
445
- let explode = false;
446
- let name = match.substring(1, match.length - 1);
447
- let style = "simple";
448
- if (name.endsWith("*")) {
449
- explode = true;
450
- name = name.substring(0, name.length - 1);
451
- }
452
- if (name.startsWith(".")) {
453
- name = name.substring(1);
454
- style = "label";
455
- } else if (name.startsWith(";")) {
456
- name = name.substring(1);
457
- style = "matrix";
458
- }
459
- const value = path[name];
460
- if (value === void 0 || value === null) {
461
- continue;
462
- }
463
- if (Array.isArray(value)) {
464
- url = url.replace(match, serializeArrayParam({ explode, name, style, value }));
465
- continue;
466
- }
467
- if (typeof value === "object") {
468
- url = url.replace(
469
- match,
470
- serializeObjectParam({
471
- explode,
472
- name,
473
- style,
474
- value,
475
- valueOnly: true
476
- })
477
- );
478
- continue;
479
- }
480
- if (style === "matrix") {
481
- url = url.replace(
482
- match,
483
- `;${serializePrimitiveParam({
484
- name,
485
- value
486
- })}`
487
- );
488
- continue;
489
- }
490
- const replaceValue = encodeURIComponent(
491
- style === "label" ? `.${value}` : value
492
- );
493
- url = url.replace(match, replaceValue);
494
- }
495
- }
496
- return url;
497
- };
498
- var getUrl = ({
499
- baseUrl: baseUrl2,
500
- path,
501
- query,
502
- querySerializer,
503
- url: _url
504
- }) => {
505
- const pathUrl = _url.startsWith("/") ? _url : `/${_url}`;
506
- let url = (baseUrl2 ?? "") + pathUrl;
507
- if (path) {
508
- url = defaultPathSerializer({ path, url });
509
- }
510
- let search = query ? querySerializer(query) : "";
511
- if (search.startsWith("?")) {
512
- search = search.substring(1);
513
- }
514
- if (search) {
515
- url += `?${search}`;
516
- }
517
- return url;
518
- };
519
- function getValidRequestBody(options) {
520
- const hasBody = options.body !== void 0;
521
- const isSerializedBody = hasBody && options.bodySerializer;
522
- if (isSerializedBody) {
523
- if ("serializedBody" in options) {
524
- const hasSerializedBody = options.serializedBody !== void 0 && options.serializedBody !== "";
525
- return hasSerializedBody ? options.serializedBody : null;
526
- }
527
- return options.body !== "" ? options.body : null;
528
- }
529
- if (hasBody) {
530
- return options.body;
531
- }
532
- return void 0;
533
- }
534
- var getAuthToken = async (auth, callback) => {
535
- const token = typeof callback === "function" ? await callback(auth) : callback;
536
- if (!token) {
537
- return;
538
- }
539
- if (auth.scheme === "bearer") {
540
- return `Bearer ${token}`;
541
- }
542
- if (auth.scheme === "basic") {
543
- return `Basic ${btoa(token)}`;
544
- }
545
- return token;
546
- };
547
- var createQuerySerializer = ({
548
- parameters = {},
549
- ...args
550
- } = {}) => {
551
- const querySerializer = (queryParams) => {
552
- const search = [];
553
- if (queryParams && typeof queryParams === "object") {
554
- for (const name in queryParams) {
555
- const value = queryParams[name];
556
- if (value === void 0 || value === null) {
557
- continue;
558
- }
559
- const options = parameters[name] || args;
560
- if (Array.isArray(value)) {
561
- const serializedArray = serializeArrayParam({
562
- allowReserved: options.allowReserved,
563
- explode: true,
564
- name,
565
- style: "form",
566
- value,
567
- ...options.array
568
- });
569
- if (serializedArray) search.push(serializedArray);
570
- } else if (typeof value === "object") {
571
- const serializedObject = serializeObjectParam({
572
- allowReserved: options.allowReserved,
573
- explode: true,
574
- name,
575
- style: "deepObject",
576
- value,
577
- ...options.object
578
- });
579
- if (serializedObject) search.push(serializedObject);
580
- } else {
581
- const serializedPrimitive = serializePrimitiveParam({
582
- allowReserved: options.allowReserved,
583
- name,
584
- value
585
- });
586
- if (serializedPrimitive) search.push(serializedPrimitive);
587
- }
588
- }
589
- }
590
- return search.join("&");
591
- };
592
- return querySerializer;
593
- };
594
- var getParseAs = (contentType) => {
595
- if (!contentType) {
596
- return "stream";
597
- }
598
- const cleanContent = contentType.split(";")[0]?.trim();
599
- if (!cleanContent) {
600
- return;
601
- }
602
- if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) {
603
- return "json";
604
- }
605
- if (cleanContent === "multipart/form-data") {
606
- return "formData";
607
- }
608
- if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) {
609
- return "blob";
610
- }
611
- if (cleanContent.startsWith("text/")) {
612
- return "text";
613
- }
614
- return;
615
- };
616
- var checkForExistence = (options, name) => {
617
- if (!name) {
618
- return false;
619
- }
620
- if (options.headers.has(name) || options.query?.[name] || options.headers.get("Cookie")?.includes(`${name}=`)) {
621
- return true;
622
- }
623
- return false;
624
- };
625
- async function setAuthParams(options) {
626
- for (const auth of options.security ?? []) {
627
- if (checkForExistence(options, auth.name)) {
628
- continue;
629
- }
630
- const token = await getAuthToken(auth, options.auth);
631
- if (!token) {
632
- continue;
633
- }
634
- const name = auth.name ?? "Authorization";
635
- switch (auth.in) {
636
- case "query":
637
- if (!options.query) {
638
- options.query = {};
639
- }
640
- options.query[name] = token;
641
- break;
642
- case "cookie":
643
- options.headers.append("Cookie", `${name}=${token}`);
644
- break;
645
- case "header":
646
- default:
647
- options.headers.set(name, token);
648
- break;
649
- }
650
- }
651
- }
652
- var buildUrl = (options) => getUrl({
653
- baseUrl: options.baseUrl,
654
- path: options.path,
655
- query: options.query,
656
- querySerializer: typeof options.querySerializer === "function" ? options.querySerializer : createQuerySerializer(options.querySerializer),
657
- url: options.url
658
- });
659
- var mergeConfigs = (a, b) => {
660
- const config = { ...a, ...b };
661
- if (config.baseUrl?.endsWith("/")) {
662
- config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);
663
- }
664
- config.headers = mergeHeaders(a.headers, b.headers);
665
- return config;
666
- };
667
- var headersEntries = (headers) => {
668
- const entries = [];
669
- headers.forEach((value, key) => {
670
- entries.push([key, value]);
671
- });
672
- return entries;
673
- };
674
- var mergeHeaders = (...headers) => {
675
- const mergedHeaders = new Headers();
676
- for (const header of headers) {
677
- if (!header) {
678
- continue;
679
- }
680
- const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);
681
- for (const [key, value] of iterator) {
682
- if (value === null) {
683
- mergedHeaders.delete(key);
684
- } else if (Array.isArray(value)) {
685
- for (const v of value) {
686
- mergedHeaders.append(key, v);
687
- }
688
- } else if (value !== void 0) {
689
- mergedHeaders.set(
690
- key,
691
- typeof value === "object" ? JSON.stringify(value) : value
692
- );
693
- }
694
- }
695
- }
696
- return mergedHeaders;
697
- };
698
- var Interceptors = class {
699
- fns = [];
700
- clear() {
701
- this.fns = [];
702
- }
703
- eject(id) {
704
- const index = this.getInterceptorIndex(id);
705
- if (this.fns[index]) {
706
- this.fns[index] = null;
707
- }
708
- }
709
- exists(id) {
710
- const index = this.getInterceptorIndex(id);
711
- return Boolean(this.fns[index]);
712
- }
713
- getInterceptorIndex(id) {
714
- if (typeof id === "number") {
715
- return this.fns[id] ? id : -1;
716
- }
717
- return this.fns.indexOf(id);
718
- }
719
- update(id, fn) {
720
- const index = this.getInterceptorIndex(id);
721
- if (this.fns[index]) {
722
- this.fns[index] = fn;
723
- return id;
724
- }
725
- return false;
726
- }
727
- use(fn) {
728
- this.fns.push(fn);
729
- return this.fns.length - 1;
730
- }
731
- };
732
- var createInterceptors = () => ({
733
- error: new Interceptors(),
734
- request: new Interceptors(),
735
- response: new Interceptors()
736
- });
737
- var defaultQuerySerializer = createQuerySerializer({
738
- allowReserved: false,
739
- array: {
740
- explode: true,
741
- style: "form"
742
- },
743
- object: {
744
- explode: true,
745
- style: "deepObject"
746
- }
747
- });
748
- var defaultHeaders = {
749
- "Content-Type": "application/json"
750
- };
751
- var createConfig = (override = {}) => ({
752
- ...jsonBodySerializer,
753
- headers: defaultHeaders,
754
- parseAs: "auto",
755
- querySerializer: defaultQuerySerializer,
756
- ...override
757
- });
758
- var createClient = (config = {}) => {
759
- let _config = mergeConfigs(createConfig(), config);
760
- const getConfig = () => ({ ..._config });
761
- const setConfig = (config2) => {
762
- _config = mergeConfigs(_config, config2);
763
- return getConfig();
764
- };
765
- const interceptors = createInterceptors();
766
- const beforeRequest = async (options) => {
767
- const opts = {
768
- ..._config,
769
- ...options,
770
- fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
771
- headers: mergeHeaders(_config.headers, options.headers),
772
- serializedBody: void 0
773
- };
774
- if (opts.security) {
775
- await setAuthParams(opts);
776
- }
777
- if (opts.requestValidator) {
778
- await opts.requestValidator(opts);
779
- }
780
- if (opts.body !== void 0 && opts.bodySerializer) {
781
- opts.serializedBody = opts.bodySerializer(opts.body);
782
- }
783
- if (opts.body === void 0 || opts.serializedBody === "") {
784
- opts.headers.delete("Content-Type");
785
- }
786
- const resolvedOpts = opts;
787
- const url = buildUrl(resolvedOpts);
788
- return { opts: resolvedOpts, url };
789
- };
790
- const request = async (options) => {
791
- const throwOnError = options.throwOnError ?? _config.throwOnError;
792
- const responseStyle = options.responseStyle ?? _config.responseStyle;
793
- let request2;
794
- let response;
795
- try {
796
- const { opts, url } = await beforeRequest(options);
797
- const requestInit = {
798
- redirect: "follow",
799
- ...opts,
800
- body: getValidRequestBody(opts)
801
- };
802
- request2 = new Request(url, requestInit);
803
- for (const fn of interceptors.request.fns) {
804
- if (fn) {
805
- request2 = await fn(request2, opts);
806
- }
807
- }
808
- const _fetch = opts.fetch;
809
- response = await _fetch(request2);
810
- for (const fn of interceptors.response.fns) {
811
- if (fn) {
812
- response = await fn(response, request2, opts);
813
- }
814
- }
815
- const result = {
816
- request: request2,
817
- response
818
- };
819
- if (response.ok) {
820
- const parseAs = (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json";
821
- if (response.status === 204 || response.headers.get("Content-Length") === "0") {
822
- let emptyData;
823
- switch (parseAs) {
824
- case "arrayBuffer":
825
- case "blob":
826
- case "text":
827
- emptyData = await response[parseAs]();
828
- break;
829
- case "formData":
830
- emptyData = new FormData();
831
- break;
832
- case "stream":
833
- emptyData = response.body;
834
- break;
835
- case "json":
836
- default:
837
- emptyData = {};
838
- break;
839
- }
840
- return opts.responseStyle === "data" ? emptyData : {
841
- data: emptyData,
842
- ...result
843
- };
844
- }
845
- let data;
846
- switch (parseAs) {
847
- case "arrayBuffer":
848
- case "blob":
849
- case "formData":
850
- case "text":
851
- data = await response[parseAs]();
852
- break;
853
- case "json": {
854
- const text = await response.text();
855
- data = text ? JSON.parse(text) : {};
856
- break;
857
- }
858
- case "stream":
859
- return opts.responseStyle === "data" ? response.body : {
860
- data: response.body,
861
- ...result
862
- };
863
- }
864
- if (parseAs === "json") {
865
- if (opts.responseValidator) {
866
- await opts.responseValidator(data);
867
- }
868
- if (opts.responseTransformer) {
869
- data = await opts.responseTransformer(data);
870
- }
871
- }
872
- return opts.responseStyle === "data" ? data : {
873
- data,
874
- ...result
875
- };
876
- }
877
- const textError = await response.text();
878
- let jsonError;
879
- try {
880
- jsonError = JSON.parse(textError);
881
- } catch {
882
- }
883
- throw jsonError ?? textError;
884
- } catch (error) {
885
- let finalError = error;
886
- for (const fn of interceptors.error.fns) {
887
- if (fn) {
888
- finalError = await fn(finalError, response, request2, options);
889
- }
890
- }
891
- finalError = finalError || {};
892
- if (throwOnError) {
893
- throw finalError;
894
- }
895
- return responseStyle === "data" ? void 0 : {
896
- error: finalError,
897
- request: request2,
898
- response
899
- };
900
- }
901
- };
902
- const makeMethodFn = (method) => (options) => request({ ...options, method });
903
- const makeSseFn = (method) => async (options) => {
904
- const { opts, url } = await beforeRequest(options);
905
- return createSseClient({
906
- ...opts,
907
- body: opts.body,
908
- method,
909
- onRequest: async (url2, init) => {
910
- let request2 = new Request(url2, init);
911
- for (const fn of interceptors.request.fns) {
912
- if (fn) {
913
- request2 = await fn(request2, opts);
914
- }
915
- }
916
- return request2;
917
- },
918
- serializedBody: getValidRequestBody(opts),
919
- url
920
- });
921
- };
922
- const _buildUrl = (options) => buildUrl({ ..._config, ...options });
923
- return {
924
- buildUrl: _buildUrl,
925
- connect: makeMethodFn("CONNECT"),
926
- delete: makeMethodFn("DELETE"),
927
- get: makeMethodFn("GET"),
928
- getConfig,
929
- head: makeMethodFn("HEAD"),
930
- interceptors,
931
- options: makeMethodFn("OPTIONS"),
932
- patch: makeMethodFn("PATCH"),
933
- post: makeMethodFn("POST"),
934
- put: makeMethodFn("PUT"),
935
- request,
936
- setConfig,
937
- sse: {
938
- connect: makeSseFn("CONNECT"),
939
- delete: makeSseFn("DELETE"),
940
- get: makeSseFn("GET"),
941
- head: makeSseFn("HEAD"),
942
- options: makeSseFn("OPTIONS"),
943
- patch: makeSseFn("PATCH"),
944
- post: makeSseFn("POST"),
945
- put: makeSseFn("PUT"),
946
- trace: makeSseFn("TRACE")
947
- },
948
- trace: makeMethodFn("TRACE")
949
- };
950
- };
951
- var USER_AGENT = "@pidgeon-ai/sdk";
952
- var createClientConfig = (config) => ({
953
- ...config,
954
- ...typeof window === "undefined" ? { headers: { "User-Agent": USER_AGENT, ...plain(config?.headers) } } : {}
955
- });
956
- function plain(headers) {
957
- return headers && typeof headers === "object" && !(headers instanceof Headers) ? headers : {};
958
- }
959
- var client = createClient(
960
- createClientConfig(createConfig({ baseUrl: "https://pidgeon.ai/api/v1" }))
961
- );
962
- var agentSignUp = (options) => (options.client ?? client).post({
963
- url: "/agent/signup",
964
- ...options,
965
- headers: {
966
- "Content-Type": "application/json",
967
- ...options.headers
968
- }
969
- });
970
- var agentAttachHuman = (options) => (options.client ?? client).post({
971
- url: "/agent/human",
972
- ...options,
973
- headers: {
974
- "Content-Type": "application/json",
975
- ...options.headers
976
- }
977
- });
978
- var agentVerify = (options) => (options.client ?? client).post({
979
- url: "/agent/verify",
980
- ...options,
981
- headers: {
982
- "Content-Type": "application/json",
983
- ...options.headers
984
- }
985
- });
986
- var cardsGet = (options) => (options.client ?? client).get({
987
- url: "/cards/{id}",
988
- ...options
989
- });
990
- var verifySender = (options) => (options.client ?? client).post({
991
- url: "/verify",
992
- ...options,
993
- headers: {
994
- "Content-Type": "application/json",
995
- ...options.headers
996
- }
997
- });
998
- var logHead = (options) => (options?.client ?? client).get({
999
- url: "/log/head",
1000
- ...options
1001
- });
1002
- var logCheckpoint = (options) => (options?.client ?? client).get({
1003
- url: "/log/checkpoint",
1004
- ...options
1005
- });
1006
- var logEntries = (options) => (options?.client ?? client).get({
1007
- url: "/log/entries",
1008
- ...options
1009
- });
1010
- var logProof = (options) => (options?.client ?? client).get({
1011
- url: "/log/proof",
1012
- ...options
1013
- });
1014
- var logConsistency = (options) => (options.client ?? client).get({
1015
- url: "/log/consistency",
1016
- ...options
1017
- });
1018
- var logMonitorsList = (options) => (options?.client ?? client).get({
1019
- security: [{ scheme: "bearer", type: "http" }],
1020
- url: "/log/monitors",
1021
- ...options
1022
- });
1023
- var logMonitorsCreate = (options) => (options.client ?? client).post({
1024
- security: [{ scheme: "bearer", type: "http" }],
1025
- url: "/log/monitors",
1026
- ...options,
1027
- headers: {
1028
- "Content-Type": "application/json",
1029
- ...options.headers
1030
- }
1031
- });
1032
- var logMonitorsDelete = (options) => (options.client ?? client).delete({
1033
- security: [{ scheme: "bearer", type: "http" }],
1034
- url: "/log/monitors/{id}",
1035
- ...options
1036
- });
1037
- var grantsStatus = (options) => (options.client ?? client).get({
1038
- url: "/grants/{id}/status",
1039
- ...options
1040
- });
1041
- var agentConnect = (options) => (options.client ?? client).post({
1042
- url: "/agent/connect",
1043
- ...options,
1044
- headers: {
1045
- "Content-Type": "application/json",
1046
- ...options.headers
1047
- }
1048
- });
1049
- var agentSetup = (options) => (options?.client ?? client).get({
1050
- security: [{ scheme: "bearer", type: "http" }],
1051
- url: "/agent/setup",
1052
- ...options
1053
- });
1054
- var identitiesList = (options) => (options?.client ?? client).get({
1055
- security: [{ scheme: "bearer", type: "http" }],
1056
- url: "/identities",
1057
- ...options
1058
- });
1059
- var identitiesCreate = (options) => (options.client ?? client).post({
1060
- security: [{ scheme: "bearer", type: "http" }],
1061
- url: "/identities",
1062
- ...options,
1063
- headers: {
1064
- "Content-Type": "application/json",
1065
- ...options.headers
1066
- }
1067
- });
1068
- var identitiesDelete = (options) => (options.client ?? client).delete({
1069
- security: [{ scheme: "bearer", type: "http" }],
1070
- url: "/identities/{id}",
1071
- ...options
1072
- });
1073
- var identitiesGet = (options) => (options.client ?? client).get({
1074
- security: [{ scheme: "bearer", type: "http" }],
1075
- url: "/identities/{id}",
1076
- ...options
1077
- });
1078
- var identitiesUpdate = (options) => (options.client ?? client).patch(
1079
- {
1080
- security: [{ scheme: "bearer", type: "http" }],
1081
- url: "/identities/{id}",
1082
- ...options,
1083
- headers: {
1084
- "Content-Type": "application/json",
1085
- ...options.headers
1086
- }
1087
- }
1088
- );
1089
- var identitiesCard = (options) => (options.client ?? client).get({
1090
- security: [{ scheme: "bearer", type: "http" }],
1091
- url: "/identities/{id}/card",
1092
- ...options
1093
- });
1094
- var identitiesAccessDelete = (options) => (options.client ?? client).delete({
1095
- security: [{ scheme: "bearer", type: "http" }],
1096
- url: "/identities/{id}/access",
1097
- ...options
1098
- });
1099
- var identitiesAccessGet = (options) => (options.client ?? client).get({
1100
- security: [{ scheme: "bearer", type: "http" }],
1101
- url: "/identities/{id}/access",
1102
- ...options
1103
- });
1104
- var identitiesAccessCreate = (options) => (options.client ?? client).post({
1105
- security: [{ scheme: "bearer", type: "http" }],
1106
- url: "/identities/{id}/access",
1107
- ...options,
1108
- headers: {
1109
- "Content-Type": "application/json",
1110
- ...options.headers
1111
- }
1112
- });
1113
- var identitiesSendRulesDelete = (options) => (options.client ?? client).delete({
1114
- security: [{ scheme: "bearer", type: "http" }],
1115
- url: "/identities/{id}/send-rules",
1116
- ...options
1117
- });
1118
- var identitiesSendRulesGet = (options) => (options.client ?? client).get({
1119
- security: [{ scheme: "bearer", type: "http" }],
1120
- url: "/identities/{id}/send-rules",
1121
- ...options
1122
- });
1123
- var identitiesSendRulesCreate = (options) => (options.client ?? client).post({
1124
- security: [{ scheme: "bearer", type: "http" }],
1125
- url: "/identities/{id}/send-rules",
1126
- ...options,
1127
- headers: {
1128
- "Content-Type": "application/json",
1129
- ...options.headers
1130
- }
1131
- });
1132
- var identitiesReceiveRulesDelete = (options) => (options.client ?? client).delete({
1133
- security: [{ scheme: "bearer", type: "http" }],
1134
- url: "/identities/{id}/receive-rules",
1135
- ...options
1136
- });
1137
- var identitiesReceiveRulesGet = (options) => (options.client ?? client).get({
1138
- security: [{ scheme: "bearer", type: "http" }],
1139
- url: "/identities/{id}/receive-rules",
1140
- ...options
1141
- });
1142
- var identitiesReceiveRulesCreate = (options) => (options.client ?? client).post({
1143
- security: [{ scheme: "bearer", type: "http" }],
1144
- url: "/identities/{id}/receive-rules",
1145
- ...options,
1146
- headers: {
1147
- "Content-Type": "application/json",
1148
- ...options.headers
1149
- }
1150
- });
1151
- var identitiesSuspendTenant = (options) => (options.client ?? client).post({
1152
- security: [{ scheme: "bearer", type: "http" }],
1153
- url: "/tenants/{id}/suspend",
1154
- ...options
1155
- });
1156
- var podsList = (options) => (options?.client ?? client).get({
1157
- security: [{ scheme: "bearer", type: "http" }],
1158
- url: "/pods",
1159
- ...options
1160
- });
1161
- var podsCreate = (options) => (options.client ?? client).post({
1162
- security: [{ scheme: "bearer", type: "http" }],
1163
- url: "/pods",
1164
- ...options,
1165
- headers: {
1166
- "Content-Type": "application/json",
1167
- ...options.headers
1168
- }
1169
- });
1170
- var podsDelete = (options) => (options.client ?? client).delete({
1171
- security: [{ scheme: "bearer", type: "http" }],
1172
- url: "/pods/{id}",
1173
- ...options
1174
- });
1175
- var podsGet = (options) => (options.client ?? client).get({
1176
- security: [{ scheme: "bearer", type: "http" }],
1177
- url: "/pods/{id}",
1178
- ...options
1179
- });
1180
- var podsUpdate = (options) => (options.client ?? client).patch({
1181
- security: [{ scheme: "bearer", type: "http" }],
1182
- url: "/pods/{id}",
1183
- ...options,
1184
- headers: {
1185
- "Content-Type": "application/json",
1186
- ...options.headers
1187
- }
1188
- });
1189
- var labelsList = (options) => (options.client ?? client).get({
1190
- security: [{ scheme: "bearer", type: "http" }],
1191
- url: "/labels",
1192
- ...options
1193
- });
1194
- var labelsCreate = (options) => (options.client ?? client).post({
1195
- security: [{ scheme: "bearer", type: "http" }],
1196
- url: "/labels",
1197
- ...options,
1198
- headers: {
1199
- "Content-Type": "application/json",
1200
- ...options.headers
1201
- }
1202
- });
1203
- var labelsDelete = (options) => (options.client ?? client).delete({
1204
- security: [{ scheme: "bearer", type: "http" }],
1205
- url: "/labels/{id}",
1206
- ...options
1207
- });
1208
- var labelsUpdate = (options) => (options.client ?? client).patch({
1209
- security: [{ scheme: "bearer", type: "http" }],
1210
- url: "/labels/{id}",
1211
- ...options,
1212
- headers: {
1213
- "Content-Type": "application/json",
1214
- ...options.headers
1215
- }
1216
- });
1217
- var grantsTemplatesList = (options) => (options?.client ?? client).get({
1218
- security: [{ scheme: "bearer", type: "http" }],
1219
- url: "/grant-templates",
1220
- ...options
1221
- });
1222
- var grantsTemplatesCreate = (options) => (options.client ?? client).post({
1223
- security: [{ scheme: "bearer", type: "http" }],
1224
- url: "/grant-templates",
1225
- ...options,
1226
- headers: {
1227
- "Content-Type": "application/json",
1228
- ...options.headers
1229
- }
1230
- });
1231
- var grantsTemplatesDelete = (options) => (options.client ?? client).delete({
1232
- security: [{ scheme: "bearer", type: "http" }],
1233
- url: "/grant-templates/{id}",
1234
- ...options
1235
- });
1236
- var grantsList = (options) => (options.client ?? client).get({
1237
- security: [{ scheme: "bearer", type: "http" }],
1238
- url: "/grants",
1239
- ...options
1240
- });
1241
- var grantsCreate = (options) => (options.client ?? client).post({
1242
- security: [{ scheme: "bearer", type: "http" }],
1243
- url: "/grants",
1244
- ...options,
1245
- headers: {
1246
- "Content-Type": "application/json",
1247
- ...options.headers
1248
- }
1249
- });
1250
- var grantsRevoke = (options) => (options.client ?? client).delete({
1251
- security: [{ scheme: "bearer", type: "http" }],
1252
- url: "/grants/{id}",
1253
- ...options
1254
- });
1255
- var grantsGet = (options) => (options.client ?? client).get({
1256
- security: [{ scheme: "bearer", type: "http" }],
1257
- url: "/grants/{id}",
1258
- ...options
1259
- });
1260
- var contactsList = (options) => (options?.client ?? client).get({
1261
- security: [{ scheme: "bearer", type: "http" }],
1262
- url: "/contacts",
1263
- ...options
1264
- });
1265
- var contactsCreate = (options) => (options.client ?? client).post({
1266
- security: [{ scheme: "bearer", type: "http" }],
1267
- url: "/contacts",
1268
- ...options,
1269
- headers: {
1270
- "Content-Type": "application/json",
1271
- ...options.headers
1272
- }
1273
- });
1274
- var contactsDelete = (options) => (options.client ?? client).delete({
1275
- security: [{ scheme: "bearer", type: "http" }],
1276
- url: "/contacts/{id}",
1277
- ...options
1278
- });
1279
- var contactsGet = (options) => (options.client ?? client).get({
1280
- security: [{ scheme: "bearer", type: "http" }],
1281
- url: "/contacts/{id}",
1282
- ...options
1283
- });
1284
- var contactsUpdate = (options) => (options.client ?? client).patch({
1285
- security: [{ scheme: "bearer", type: "http" }],
1286
- url: "/contacts/{id}",
1287
- ...options,
1288
- headers: {
1289
- "Content-Type": "application/json",
1290
- ...options.headers
1291
- }
1292
- });
1293
- var contactsUnblock = (options) => (options.client ?? client).delete({
1294
- security: [{ scheme: "bearer", type: "http" }],
1295
- url: "/contacts/{id}/block",
1296
- ...options
1297
- });
1298
- var contactsBlock = (options) => (options.client ?? client).post({
1299
- security: [{ scheme: "bearer", type: "http" }],
1300
- url: "/contacts/{id}/block",
1301
- ...options
1302
- });
1303
- var threadsLabelsDelete = (options) => (options.client ?? client).delete({
1304
- security: [{ scheme: "bearer", type: "http" }],
1305
- url: "/threads/{id}/labels",
1306
- ...options
1307
- });
1308
- var threadsLabelsGet = (options) => (options.client ?? client).get({
1309
- security: [{ scheme: "bearer", type: "http" }],
1310
- url: "/threads/{id}/labels",
1311
- ...options
1312
- });
1313
- var threadsLabelsCreate = (options) => (options.client ?? client).post({
1314
- security: [{ scheme: "bearer", type: "http" }],
1315
- url: "/threads/{id}/labels",
1316
- ...options,
1317
- headers: {
1318
- "Content-Type": "application/json",
1319
- ...options.headers
1320
- }
1321
- });
1322
- var messagesListInThread = (options) => (options.client ?? client).get({
1323
- security: [{ scheme: "bearer", type: "http" }],
1324
- url: "/messages",
1325
- ...options
1326
- });
1327
- var messagesSend = (options) => (options.client ?? client).post({
1328
- security: [{ scheme: "bearer", type: "http" }],
1329
- url: "/messages",
1330
- ...options,
1331
- headers: {
1332
- "Content-Type": "application/json",
1333
- ...options.headers
1334
- }
1335
- });
1336
- var messagesCheck = (options) => (options.client ?? client).post({
1337
- security: [{ scheme: "bearer", type: "http" }],
1338
- url: "/messages/check",
1339
- ...options,
1340
- headers: {
1341
- "Content-Type": "application/json",
1342
- ...options.headers
1343
- }
1344
- });
1345
- var signInsApprove = (options) => (options.client ?? client).post({
1346
- security: [{ scheme: "bearer", type: "http" }],
1347
- url: "/sign-ins",
1348
- ...options,
1349
- headers: {
1350
- "Content-Type": "application/json",
1351
- ...options.headers
1352
- }
1353
- });
1354
- var messagesSearch = (options) => (options?.client ?? client).get({
1355
- security: [{ scheme: "bearer", type: "http" }],
1356
- url: "/messages/search",
1357
- ...options
1358
- });
1359
- var messagesAct = (options) => (options.client ?? client).post({
1360
- security: [{ scheme: "bearer", type: "http" }],
1361
- url: "/messages/actions",
1362
- ...options,
1363
- headers: {
1364
- "Content-Type": "application/json",
1365
- ...options.headers
1366
- }
1367
- });
1368
- var messagesUndo = (options) => (options.client ?? client).post({
1369
- security: [{ scheme: "bearer", type: "http" }],
1370
- url: "/messages/undo",
1371
- ...options,
1372
- headers: {
1373
- "Content-Type": "application/json",
1374
- ...options.headers
1375
- }
1376
- });
1377
- var messagesAwait = (options) => (options.client ?? client).get({
1378
- security: [{ scheme: "bearer", type: "http" }],
1379
- url: "/messages/await",
1380
- ...options
1381
- });
1382
- var messagesGet = (options) => (options.client ?? client).get({
1383
- security: [{ scheme: "bearer", type: "http" }],
1384
- url: "/messages/{id}",
1385
- ...options
1386
- });
1387
- var messagesUpdate = (options) => (options.client ?? client).patch({
1388
- security: [{ scheme: "bearer", type: "http" }],
1389
- url: "/messages/{id}",
1390
- ...options,
1391
- headers: {
1392
- "Content-Type": "application/json",
1393
- ...options.headers
1394
- }
1395
- });
1396
- var messagesReply = (options) => (options.client ?? client).post({
1397
- security: [{ scheme: "bearer", type: "http" }],
1398
- url: "/messages/{id}/reply",
1399
- ...options,
1400
- headers: {
1401
- "Content-Type": "application/json",
1402
- ...options.headers
1403
- }
1404
- });
1405
- var messagesReplyAll = (options) => (options.client ?? client).post({
1406
- security: [{ scheme: "bearer", type: "http" }],
1407
- url: "/messages/{id}/reply-all",
1408
- ...options,
1409
- headers: {
1410
- "Content-Type": "application/json",
1411
- ...options.headers
1412
- }
1413
- });
1414
- var messagesForward = (options) => (options.client ?? client).post({
1415
- security: [{ scheme: "bearer", type: "http" }],
1416
- url: "/messages/{id}/forward",
1417
- ...options,
1418
- headers: {
1419
- "Content-Type": "application/json",
1420
- ...options.headers
1421
- }
1422
- });
1423
- var messagesRaw = (options) => (options.client ?? client).get({
1424
- security: [{ scheme: "bearer", type: "http" }],
1425
- url: "/messages/{id}/raw",
1426
- ...options
1427
- });
1428
- var exportMail = (options) => (options?.client ?? client).get({
1429
- security: [{ scheme: "bearer", type: "http" }],
1430
- url: "/export",
1431
- ...options
1432
- });
1433
- var threadsList = (options) => (options?.client ?? client).get({
1434
- security: [{ scheme: "bearer", type: "http" }],
1435
- url: "/threads",
1436
- ...options
1437
- });
1438
- var threadsGet = (options) => (options.client ?? client).get({
1439
- security: [{ scheme: "bearer", type: "http" }],
1440
- url: "/threads/{id}",
1441
- ...options
1442
- });
1443
- var threadsUpdate = (options) => (options.client ?? client).patch({
1444
- security: [{ scheme: "bearer", type: "http" }],
1445
- url: "/threads/{id}",
1446
- ...options,
1447
- headers: {
1448
- "Content-Type": "application/json",
1449
- ...options.headers
1450
- }
1451
- });
1452
- var domainsList = (options) => (options?.client ?? client).get({
1453
- security: [{ scheme: "bearer", type: "http" }],
1454
- url: "/domains",
1455
- ...options
1456
- });
1457
- var domainsCreate = (options) => (options.client ?? client).post({
1458
- security: [{ scheme: "bearer", type: "http" }],
1459
- url: "/domains",
1460
- ...options,
1461
- headers: {
1462
- "Content-Type": "application/json",
1463
- ...options.headers
1464
- }
1465
- });
1466
- var domainsZoneFile = (options) => (options.client ?? client).get({
1467
- security: [{ scheme: "bearer", type: "http" }],
1468
- url: "/domains/{id}/zone-file",
1469
- ...options
1470
- });
1471
- var domainsGetSetupLink = (options) => (options.client ?? client).get({
1472
- security: [{ scheme: "bearer", type: "http" }],
1473
- url: "/domains/{id}/setup-link",
1474
- ...options
1475
- });
1476
- var domainsVerify = (options) => (options.client ?? client).post({
1477
- security: [{ scheme: "bearer", type: "http" }],
1478
- url: "/domains/{id}/verify",
1479
- ...options
1480
- });
1481
- var domainsDelete = (options) => (options.client ?? client).delete({
1482
- security: [{ scheme: "bearer", type: "http" }],
1483
- url: "/domains/{id}",
1484
- ...options
1485
- });
1486
- var domainsGet = (options) => (options.client ?? client).get({
1487
- security: [{ scheme: "bearer", type: "http" }],
1488
- url: "/domains/{id}",
1489
- ...options
1490
- });
1491
- var domainsUpdate = (options) => (options.client ?? client).patch({
1492
- security: [{ scheme: "bearer", type: "http" }],
1493
- url: "/domains/{id}",
1494
- ...options,
1495
- headers: {
1496
- "Content-Type": "application/json",
1497
- ...options.headers
1498
- }
1499
- });
1500
- var routingList = (options) => (options?.client ?? client).get({
1501
- security: [{ scheme: "bearer", type: "http" }],
1502
- url: "/routing-rules",
1503
- ...options
1504
- });
1505
- var routingCreate = (options) => (options.client ?? client).post({
1506
- security: [{ scheme: "bearer", type: "http" }],
1507
- url: "/routing-rules",
1508
- ...options,
1509
- headers: {
1510
- "Content-Type": "application/json",
1511
- ...options.headers
1512
- }
1513
- });
1514
- var routingDelete = (options) => (options.client ?? client).delete({
1515
- security: [{ scheme: "bearer", type: "http" }],
1516
- url: "/routing-rules/{id}",
1517
- ...options
1518
- });
1519
- var routingUpdate = (options) => (options.client ?? client).patch({
1520
- security: [{ scheme: "bearer", type: "http" }],
1521
- url: "/routing-rules/{id}",
1522
- ...options,
1523
- headers: {
1524
- "Content-Type": "application/json",
1525
- ...options.headers
1526
- }
1527
- });
1528
- var mailboxesList = (options) => (options.client ?? client).get({
1529
- security: [{ scheme: "bearer", type: "http" }],
1530
- url: "/mailboxes",
1531
- ...options
1532
- });
1533
- var mailboxesChanges = (options) => (options.client ?? client).get({
1534
- security: [{ scheme: "bearer", type: "http" }],
1535
- url: "/mailboxes/changes",
1536
- ...options
1537
- });
1538
- var mailboxesEmptyTrash = (options) => (options.client ?? client).delete({
1539
- security: [{ scheme: "bearer", type: "http" }],
1540
- url: "/mailboxes/{folder}",
1541
- ...options
1542
- });
1543
- var mailboxesListFolder = (options) => (options.client ?? client).get({
1544
- security: [{ scheme: "bearer", type: "http" }],
1545
- url: "/mailboxes/{folder}",
1546
- ...options
1547
- });
1548
- var keysList = (options) => (options?.client ?? client).get({
1549
- security: [{ scheme: "bearer", type: "http" }],
1550
- url: "/api-keys",
1551
- ...options
1552
- });
1553
- var keysCreate = (options) => (options.client ?? client).post({
1554
- security: [{ scheme: "bearer", type: "http" }],
1555
- url: "/api-keys",
1556
- ...options,
1557
- headers: {
1558
- "Content-Type": "application/json",
1559
- ...options.headers
1560
- }
1561
- });
1562
- var keysRevoke = (options) => (options.client ?? client).delete({
1563
- security: [{ scheme: "bearer", type: "http" }],
1564
- url: "/api-keys/{id}",
1565
- ...options
1566
- });
1567
- var keysGet = (options) => (options.client ?? client).get({
1568
- security: [{ scheme: "bearer", type: "http" }],
1569
- url: "/api-keys/{id}",
1570
- ...options
1571
- });
1572
- var keysUpdate = (options) => (options.client ?? client).patch({
1573
- security: [{ scheme: "bearer", type: "http" }],
1574
- url: "/api-keys/{id}",
1575
- ...options,
1576
- headers: {
1577
- "Content-Type": "application/json",
1578
- ...options.headers
1579
- }
1580
- });
1581
- var keysRotate = (options) => (options.client ?? client).post({
1582
- security: [{ scheme: "bearer", type: "http" }],
1583
- url: "/api-keys/{id}/rotate",
1584
- ...options,
1585
- headers: {
1586
- "Content-Type": "application/json",
1587
- ...options.headers
1588
- }
1589
- });
1590
- var testInbound = (options) => (options.client ?? client).post({
1591
- security: [{ scheme: "bearer", type: "http" }],
1592
- url: "/test/inbound",
1593
- ...options,
1594
- headers: {
1595
- "Content-Type": "application/json",
1596
- ...options.headers
1597
- }
1598
- });
1599
- var appPasswordsList = (options) => (options.client ?? client).get({
1600
- security: [{ scheme: "bearer", type: "http" }],
1601
- url: "/app-passwords",
1602
- ...options
1603
- });
1604
- var appPasswordsCreate = (options) => (options.client ?? client).post({
1605
- security: [{ scheme: "bearer", type: "http" }],
1606
- url: "/app-passwords",
1607
- ...options,
1608
- headers: {
1609
- "Content-Type": "application/json",
1610
- ...options.headers
1611
- }
1612
- });
1613
- var appPasswordsRevoke = (options) => (options.client ?? client).delete({
1614
- security: [{ scheme: "bearer", type: "http" }],
1615
- url: "/app-passwords/{id}",
1616
- ...options
1617
- });
1618
- var meGet = (options) => (options?.client ?? client).get({
1619
- security: [{ scheme: "bearer", type: "http" }],
1620
- url: "/me",
1621
- ...options
1622
- });
1623
- var workspaceGet = (options) => (options?.client ?? client).get({
1624
- security: [{ scheme: "bearer", type: "http" }],
1625
- url: "/workspace",
1626
- ...options
1627
- });
1628
- var workspaceMembers = (options) => (options?.client ?? client).get({
1629
- security: [{ scheme: "bearer", type: "http" }],
1630
- url: "/workspace/members",
1631
- ...options
1632
- });
1633
- var eventsList = (options) => (options?.client ?? client).get({
1634
- security: [{ scheme: "bearer", type: "http" }],
1635
- url: "/events",
1636
- ...options
1637
- });
1638
- var eventsSocket = (options) => (options?.client ?? client).get({
1639
- security: [{ scheme: "bearer", type: "http" }],
1640
- url: "/events/socket",
1641
- ...options
1642
- });
1643
- var eventsStream = (options) => (options?.client ?? client).sse.get({
1644
- security: [{ scheme: "bearer", type: "http" }],
1645
- url: "/events/stream",
1646
- ...options
1647
- });
1648
- var eventsGet = (options) => (options.client ?? client).get({
1649
- security: [{ scheme: "bearer", type: "http" }],
1650
- url: "/events/{id}",
1651
- ...options
1652
- });
1653
- var webhooksList = (options) => (options?.client ?? client).get({
1654
- security: [{ scheme: "bearer", type: "http" }],
1655
- url: "/webhooks",
1656
- ...options
1657
- });
1658
- var webhooksCreate = (options) => (options.client ?? client).post({
1659
- security: [{ scheme: "bearer", type: "http" }],
1660
- url: "/webhooks",
1661
- ...options,
1662
- headers: {
1663
- "Content-Type": "application/json",
1664
- ...options.headers
1665
- }
1666
- });
1667
- var webhooksDelete = (options) => (options.client ?? client).delete({
1668
- security: [{ scheme: "bearer", type: "http" }],
1669
- url: "/webhooks/{id}",
1670
- ...options
1671
- });
1672
- var webhooksGet = (options) => (options.client ?? client).get({
1673
- security: [{ scheme: "bearer", type: "http" }],
1674
- url: "/webhooks/{id}",
1675
- ...options
1676
- });
1677
- var webhooksUpdate = (options) => (options.client ?? client).patch({
1678
- security: [{ scheme: "bearer", type: "http" }],
1679
- url: "/webhooks/{id}",
1680
- ...options,
1681
- headers: {
1682
- "Content-Type": "application/json",
1683
- ...options.headers
1684
- }
1685
- });
1686
- var webhooksGetHeaders = (options) => (options.client ?? client).get({
1687
- security: [{ scheme: "bearer", type: "http" }],
1688
- url: "/webhooks/{id}/headers",
1689
- ...options
1690
- });
1691
- var webhooksUpdateHeaders = (options) => (options.client ?? client).put({
1692
- security: [{ scheme: "bearer", type: "http" }],
1693
- url: "/webhooks/{id}/headers",
1694
- ...options,
1695
- headers: {
1696
- "Content-Type": "application/json",
1697
- ...options.headers
1698
- }
1699
- });
1700
- var webhooksDeliveries = (options) => (options.client ?? client).get({
1701
- security: [{ scheme: "bearer", type: "http" }],
1702
- url: "/deliveries",
1703
- ...options
1704
- });
1705
- var webhooksReplay = (options) => (options.client ?? client).post({
1706
- security: [{ scheme: "bearer", type: "http" }],
1707
- url: "/deliveries/{id}/replay",
1708
- ...options
1709
- });
1710
- var messagesRespondToInvitation = (options) => (options.client ?? client).post({
1711
- security: [{ scheme: "bearer", type: "http" }],
1712
- url: "/messages/{id}/invitation/respond",
1713
- ...options,
1714
- headers: {
1715
- "Content-Type": "application/json",
1716
- ...options.headers
1717
- }
1718
- });
1719
- var calendarGet = (options) => (options.client ?? client).get({
1720
- security: [{ scheme: "bearer", type: "http" }],
1721
- url: "/identities/{id}/calendar",
1722
- ...options
1723
- });
1724
- var calendarUpdate = (options) => (options.client ?? client).patch({
1725
- security: [{ scheme: "bearer", type: "http" }],
1726
- url: "/identities/{id}/calendar",
1727
- ...options,
1728
- headers: {
1729
- "Content-Type": "application/json",
1730
- ...options.headers
1731
- }
1732
- });
1733
- var calendarListEvents = (options) => (options.client ?? client).get({
1734
- security: [{ scheme: "bearer", type: "http" }],
1735
- url: "/identities/{id}/calendar/events",
1736
- ...options
1737
- });
1738
- var calendarCreateEvent = (options) => (options.client ?? client).post({
1739
- security: [{ scheme: "bearer", type: "http" }],
1740
- url: "/identities/{id}/calendar/events",
1741
- ...options,
1742
- headers: {
1743
- "Content-Type": "application/json",
1744
- ...options.headers
1745
- }
1746
- });
1747
- var calendarRespondToEvent = (options) => (options.client ?? client).post({
1748
- security: [{ scheme: "bearer", type: "http" }],
1749
- url: "/identities/{id}/calendar/events/{eventId}/respond",
1750
- ...options,
1751
- headers: {
1752
- "Content-Type": "application/json",
1753
- ...options.headers
1754
- }
1755
- });
1756
- var calendarListEventInstances = (options) => (options.client ?? client).get({
1757
- security: [{ scheme: "bearer", type: "http" }],
1758
- url: "/identities/{id}/calendar/events/{eventId}/instances",
1759
- ...options
1760
- });
1761
- var calendarGetAgenda = (options) => (options.client ?? client).get(
1762
- {
1763
- security: [{ scheme: "bearer", type: "http" }],
1764
- url: "/identities/{id}/calendar/agenda",
1765
- ...options
1766
- }
1767
- );
1768
- var calendarFreeTime = (options) => (options.client ?? client).get({
1769
- security: [{ scheme: "bearer", type: "http" }],
1770
- url: "/calendar/free-time",
1771
- ...options
1772
- });
1773
- var calendarDeleteEvent = (options) => (options.client ?? client).delete({
1774
- security: [{ scheme: "bearer", type: "http" }],
1775
- url: "/identities/{id}/calendar/events/{eventId}",
1776
- ...options
1777
- });
1778
- var calendarGetEvent = (options) => (options.client ?? client).get({
1779
- security: [{ scheme: "bearer", type: "http" }],
1780
- url: "/identities/{id}/calendar/events/{eventId}",
1781
- ...options
1782
- });
1783
- var calendarUpdateEvent = (options) => (options.client ?? client).patch({
1784
- security: [{ scheme: "bearer", type: "http" }],
1785
- url: "/identities/{id}/calendar/events/{eventId}",
1786
- ...options,
1787
- headers: {
1788
- "Content-Type": "application/json",
1789
- ...options.headers
1790
- }
1791
- });
1792
- var draftsList = (options) => (options.client ?? client).get({
1793
- security: [{ scheme: "bearer", type: "http" }],
1794
- url: "/drafts",
1795
- ...options
1796
- });
1797
- var draftsCreate = (options) => (options.client ?? client).post({
1798
- security: [{ scheme: "bearer", type: "http" }],
1799
- url: "/drafts",
1800
- ...options,
1801
- headers: {
1802
- "Content-Type": "application/json",
1803
- ...options.headers
1804
- }
1805
- });
1806
- var draftsDelete = (options) => (options.client ?? client).delete({
1807
- security: [{ scheme: "bearer", type: "http" }],
1808
- url: "/drafts/{id}",
1809
- ...options
1810
- });
1811
- var draftsGet = (options) => (options.client ?? client).get({
1812
- security: [{ scheme: "bearer", type: "http" }],
1813
- url: "/drafts/{id}",
1814
- ...options
1815
- });
1816
- var draftsUpdate = (options) => (options.client ?? client).patch({
1817
- security: [{ scheme: "bearer", type: "http" }],
1818
- url: "/drafts/{id}",
1819
- ...options,
1820
- headers: {
1821
- "Content-Type": "application/json",
1822
- ...options.headers
1823
- }
1824
- });
1825
- var draftsSend = (options) => (options.client ?? client).post({
1826
- security: [{ scheme: "bearer", type: "http" }],
1827
- url: "/drafts/{id}/send",
1828
- ...options
1829
- });
1830
- var draftsApproval = (options) => (options.client ?? client).get({
1831
- security: [{ scheme: "bearer", type: "http" }],
1832
- url: "/drafts/{id}/approval",
1833
- ...options
1834
- });
1835
- var draftsCancelSchedule = (options) => (options.client ?? client).delete({
1836
- security: [{ scheme: "bearer", type: "http" }],
1837
- url: "/drafts/{id}/schedule",
1838
- ...options
1839
- });
1840
- var draftsSchedule = (options) => (options.client ?? client).post({
1841
- security: [{ scheme: "bearer", type: "http" }],
1842
- url: "/drafts/{id}/schedule",
1843
- ...options,
1844
- headers: {
1845
- "Content-Type": "application/json",
1846
- ...options.headers
1847
- }
1848
- });
1849
- var draftsRemoveAttachment = (options) => (options.client ?? client).delete({
1850
- security: [{ scheme: "bearer", type: "http" }],
1851
- url: "/drafts/{id}/attachments/{attachmentId}",
1852
- ...options
1853
- });
1854
- var metricsQuery = (options) => (options?.client ?? client).get({
1855
- security: [{ scheme: "bearer", type: "http" }],
1856
- url: "/metrics",
1857
- ...options
1858
- });
1859
- var attachmentsUpload = (options) => (options.client ?? client).post({
1860
- ...formDataBodySerializer,
1861
- security: [{ scheme: "bearer", type: "http" }],
1862
- url: "/attachments",
1863
- ...options,
1864
- headers: {
1865
- "Content-Type": null,
1866
- ...options.headers
1867
- }
1868
- });
1869
- var attachmentsCreateUpload = (options) => (options.client ?? client).post({
1870
- security: [{ scheme: "bearer", type: "http" }],
1871
- url: "/attachments/uploads",
1872
- ...options,
1873
- headers: {
1874
- "Content-Type": "application/json",
1875
- ...options.headers
1876
- }
1877
- });
1878
- var attachmentsCompleteUpload = (options) => (options.client ?? client).post({
1879
- security: [{ scheme: "bearer", type: "http" }],
1880
- url: "/attachments/{id}/complete",
1881
- ...options
1882
- });
1883
- var attachmentsDownloadUrl = (options) => (options.client ?? client).get({
1884
- security: [{ scheme: "bearer", type: "http" }],
1885
- url: "/attachments/{id}",
1886
- ...options
1887
- });
1888
- var attachmentsText = (options) => (options.client ?? client).get({
1889
- security: [{ scheme: "bearer", type: "http" }],
1890
- url: "/attachments/{id}/text",
1891
- ...options
1892
- });
1893
- var SIGNATURE_HEADER = "x-pidgeon-signature";
1894
- var TIMESTAMP_HEADER = "x-pidgeon-timestamp";
1895
- async function verifyWebhook(input) {
1896
- const get = (name) => {
1897
- if (input.headers instanceof Headers) return input.headers.get(name) ?? void 0;
1898
- const direct = input.headers[name];
1899
- if (direct !== void 0) return direct;
1900
- const wanted = name.toLowerCase();
1901
- for (const [key2, value] of Object.entries(input.headers)) {
1902
- if (key2.toLowerCase() === wanted) return value;
1903
- }
1904
- return void 0;
1905
- };
1906
- const timestamp = get(TIMESTAMP_HEADER);
1907
- const signature = get(SIGNATURE_HEADER);
1908
- if (!timestamp || !signature) throw new Error("This request is not signed.");
1909
- const seconds = Number(timestamp);
1910
- if (!Number.isFinite(seconds)) throw new Error("The signature timestamp is not a number.");
1911
- const now = Math.floor((input.now ?? /* @__PURE__ */ new Date()).getTime() / 1e3);
1912
- const tolerance = input.toleranceSeconds ?? 300;
1913
- if (Math.abs(now - seconds) > tolerance) {
1914
- throw new Error("This request is too old to trust. It may be a replay.");
1915
- }
1916
- const key = await crypto.subtle.importKey(
1917
- "raw",
1918
- new TextEncoder().encode(input.secret),
1919
- { name: "HMAC", hash: "SHA-256" },
1920
- false,
1921
- ["sign"]
1922
- );
1923
- const mac = await crypto.subtle.sign(
1924
- "HMAC",
1925
- key,
1926
- new TextEncoder().encode(`${seconds}.${input.rawBody}`)
1927
- );
1928
- const expected = `v1=${[...new Uint8Array(mac)].map((byte) => byte.toString(16).padStart(2, "0")).join("")}`;
1929
- if (!constantTimeEqual(expected, signature)) {
1930
- throw new Error("The signature does not match.");
1931
- }
1932
- return JSON.parse(input.rawBody);
1933
- }
1934
- function constantTimeEqual(a, b) {
1935
- if (a.length !== b.length) return false;
1936
- let difference = 0;
1937
- for (let index = 0; index < a.length; index += 1) {
1938
- difference |= a.charCodeAt(index) ^ b.charCodeAt(index);
1939
- }
1940
- return difference === 0;
1941
- }
1942
- async function* streamEvents(options) {
1943
- const base = (options.baseUrl ?? "https://pidgeon.ai/api/v1").replace(/\/$/, "");
1944
- let lastEventId;
1945
- let backoffMs = 1e3;
1946
- while (!options.signal?.aborted) {
1947
- const url = new URL(`${base}/events/stream`);
1948
- if (options.identityId) url.searchParams.set("identity_id", options.identityId);
1949
- if (options.type) url.searchParams.set("type", options.type);
1950
- if (options.after && !lastEventId) url.searchParams.set("after", options.after);
1951
- let response;
1952
- try {
1953
- response = await fetch(url, {
1954
- headers: {
1955
- authorization: `Bearer ${options.apiKey}`,
1956
- accept: "text/event-stream",
1957
- ...lastEventId ? { "last-event-id": lastEventId } : {}
1958
- },
1959
- signal: options.signal
1960
- });
1961
- } catch {
1962
- if (options.signal?.aborted) return;
1963
- await sleep(backoffMs, options.signal);
1964
- backoffMs = Math.min(backoffMs * 2, 3e4);
1965
- continue;
1966
- }
1967
- if (response.status === 401 || response.status === 403 || response.status === 404) {
1968
- throw new Error(
1969
- `Pidgeon refused the stream: ${response.status} ${await response.text().catch(() => "")}`.trim()
1970
- );
1971
- }
1972
- if (!response.ok || !response.body) {
1973
- await sleep(backoffMs, options.signal);
1974
- backoffMs = Math.min(backoffMs * 2, 3e4);
1975
- continue;
1976
- }
1977
- backoffMs = 1e3;
1978
- try {
1979
- for await (const frame of frames(response.body, options.signal)) {
1980
- if (frame.id) lastEventId = frame.id;
1981
- if (!frame.data) continue;
1982
- if (frame.event === "error") continue;
1983
- let parsed;
1984
- try {
1985
- parsed = JSON.parse(frame.data);
1986
- } catch {
1987
- continue;
1988
- }
1989
- yield parsed;
1990
- }
1991
- } catch {
1992
- if (options.signal?.aborted) return;
1993
- await sleep(backoffMs, options.signal);
1994
- backoffMs = Math.min(backoffMs * 2, 3e4);
1995
- }
1996
- }
1997
- }
1998
- async function* frames(body, signal) {
1999
- const reader = body.getReader();
2000
- const decoder = new TextDecoder();
2001
- let buffer = "";
2002
- try {
2003
- while (!signal?.aborted) {
2004
- const { done, value } = await reader.read();
2005
- if (done) return;
2006
- buffer += decoder.decode(value, { stream: true });
2007
- let boundary = buffer.indexOf("\n\n");
2008
- while (boundary !== -1) {
2009
- const block = buffer.slice(0, boundary);
2010
- buffer = buffer.slice(boundary + 2);
2011
- boundary = buffer.indexOf("\n\n");
2012
- const frame = {};
2013
- const data = [];
2014
- for (const line of block.split("\n")) {
2015
- if (line.startsWith(":")) continue;
2016
- const colon = line.indexOf(":");
2017
- if (colon === -1) continue;
2018
- const field = line.slice(0, colon);
2019
- const value2 = line.slice(colon + 1).replace(/^ /, "");
2020
- if (field === "id") frame.id = value2;
2021
- else if (field === "event") frame.event = value2;
2022
- else if (field === "data") data.push(value2);
2023
- }
2024
- if (data.length > 0) frame.data = data.join("\n");
2025
- if (frame.id || frame.data) yield frame;
2026
- }
2027
- }
2028
- } finally {
2029
- await reader.cancel().catch(() => void 0);
2030
- }
2031
- }
2032
- function sleep(ms, signal) {
2033
- return new Promise((resolve) => {
2034
- const timer = setTimeout(resolve, ms);
2035
- signal?.addEventListener(
2036
- "abort",
2037
- () => {
2038
- clearTimeout(timer);
2039
- resolve();
2040
- },
2041
- { once: true }
2042
- );
2043
- });
2044
- }
2045
-
2046
- // ../id/dist/chunk-QDQDZSU7.js
2047
- import { createHash } from "crypto";
2048
- import { chmod, mkdir, readFile, readdir, writeFile } from "fs/promises";
2049
- import { homedir } from "os";
2050
- import { join } from "path";
2051
- import { createHash as createHash2, randomBytes } from "crypto";
2052
- var __defProp = Object.defineProperty;
2053
- var __export2 = (target, all) => {
2054
- for (var name in all)
2055
- __defProp(target, name, { get: all[name], enumerable: true });
2056
- };
2057
- var wasmBase64 = "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akEYaiAFQZgEaikAADcDACAFQfAFakEIaiAFQdEIaikAADcDACAFQfAFakEQaiAFQdkIaikAADcDACAFQYcGaiAFQcgIakEYaikAADcAACAFIAUpAIAENwPQBSAFIAUpAMkINwPwBSAFLQDICCEDQQAhAgNAIAVBkAZqIAJqQQA6AAAgAkEBaiICQSBHDQALQSAhAgNAIAVBkAZqIAJqQQA6AAAgAkEBaiICQcAARw0ACyAFQbAKakEIaiAFQfAFakEIaikDADcDACAFQbAKakEQaiAFQfAFakEQaikDADcDACAFQbAKakEXaiAFQfAFakEXaikAADcAACAFQdcKaiAFQdAFakEIaikDADcAACAFQd8KaiAFQdAFakEQaikDADcAACAFQecKaiAFQegFaikDADcAACAFIAUpA/AFNwOwCiAFIAUpA9AFNwDPCkHAASECA0AgBUEcaiACakEAOgAAIAJBAWoiAkHgAUcNAAsCQEHAABAEIgINAEEBQcAAEE8ACyACIAM6AAACQEE/RQ0AIAJBAWogBUGwCmpBP/wKAAALQcAAIQMLAkAgBEUNACAHIARBARA6CwJAIAFFDQAgBiABQQEQOgsCQAJAIAhFDQBBASEEQQAhAUEAIQMMAQsgBUHAADYC6AMgBSACNgLkAyAFIAM2AuADIAUgBUHgA2oQOEEAIQIgBSgCACEBIAUoAgQhA0EAIQQLIAAgBDYCDCAAIAI2AgggACADNgIEIAAgATYCACAFQfAKaiQAC84LAgp/JH4jAEEwayIDJAAgAyACKAIAIgStIg0gASgCACIFrSIOfiIPQpv80ZIBfkL/////AYMiEELSscwEfiABKAIEIgatIhEgDX4gAigCBCIHrSISIA5+fCITfCAQQu2n1+cBfiAPfEIdiHwiFEKb/NGSAX5C/////wGDIhVCFIYgASgCFCIIIAVqrSIWIAI1AhAiF358IAIoAhQiBSAEaq0iGCABNQIQIhl+fCACKAIMIgStIhogEX4gASgCCCIJrSIbIAIoAggiCq0iHH58IAEoAgwiC60iHSASfnwgFyAOfnwgGSANfnwiHn0gASgCHCIMIAlqrSIfIAIoAhwiCSAKaq0iIH58IAIoAiAiCiAEaq0iISABKAIYIgQgBmqtIiJ+fCABKAIgIgEgC2qtIiMgAigCGCICIAdqrSIkfnwg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AUEXdnJB/////wFxNgKQAiACIAIoApQBIgFBDHQgA0EUdnJB/////wFxNgKUAiACIAIoApgBIgNBD3QgAUERdnJB/////wFxNgKYAiACIAIoApwBIgFBEnQgA0EOdnJB/////wFxNgKcAiACIAIoAqABIgNBFXQgAUELdnJB/////wFxNgKgAiACIAIoAqQBIgVBGHQgA0EIdnJB/////wFxNgKkAiACIAIoAsABIgNBDXY2AsgCIAIgAigCqAEiAUECdkH/////AXE2AqwCIAIgAUEbdCAFQQV2ckH/////AXE2AqgCIAIgAigCrAEiBUEBdCABQR92ckH/////AXE2ArACIAIgAigCsAEiAUEEdCAFQRx2ckH/////AXE2ArQCIAIgAigCtAEiBUEHdCABQRl2ckH/////AXE2ArgCIAIgAigCuAEiAUEKdCAFQRZ2ckH/////AXE2ArwCIAIgAigCvAEiBUENdCABQRN2ckH/////AXE2AsACIAIgA0EQdCAFQRB2ckH/////AXE2AsQCIAJBzAJqIAJBhAJqQcyIwAAQCAJAQSRFIgENACACQYQCaiACQcwCakEk/AoAAAsgAkHMAmogAkGoAmpBkMXAABAIAkAgAQ0AIAJBqAJqIAJBzAJqQST8CgAACyACQcwCaiACQagCaiACQYQCahAwIAAgAkHMAmoQHSACQfACaiQAC4wKAQV/IwBBsAVrIgIkACACIAE1AAA3A1AgAiABMQAFQg6GIAExAARCBoaEIAExAAZCFoaENwNYIAIgATEACEINhiABMQAHQgWGhCABMQAJQhWGhDcDYCACIAExAAtCC4YgATEACkIDhoQgATEADEIThoQ3A2ggAiABMQAOQgqGIAExAA1CAoaEIAExAA9CEoaENwNwIAIgATUAEDcDeCACIAExABVCD4YgATEAFEIHhoQgATEAFkIXhoQ3A4ABIAIgATEAGEINhiABMQAXQgWGhCABMQAZQhWGhDcDiAEgAiABMQAbQgyGIAExABpCBIaEIAExABxCFIaENwOQASACIAExAB5CCoYgATEAHUIChoQgAS0AHyIDQRJ0rUKAgPAPg4Q3A5gBIAJB9AFqIAJB0ABqECYgAkHQAGogAkH0AWoQEiACQZwCaiACQdAAahAmAkBBKEUNACACQfACaiACQZwCakEo/AoAAAsg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DQALIANByAFqIAFBCGopAAA3AgAgA0HQAWogAUEQaikAADcCACADQdgBaiABQRhqKQAANwIAIAMgASkAADcCwAECQEHgAUUNACAAQQRqIANB4AH8CgAAC0EAIQILIAAgAjoAACADQYAEaiQAC+gEAQR/IwBBgARrIgIkAEEAIQMCQEHAAEUNACACQQhqQQBBwAD8CwALA0AgAkEIaiADaiIEQQFqIAEtAAAiBUEEdjoAACAEIAVBD3E6AAAgAUEBaiEBIANBAmoiA0HAAEcNAAtBACEBA0AgAkEIaiABaiIDIAMtAAAiBCAEQQhqIgRB8AFxazoAACADQQFqIgMgAy0AACAEwEEEdmo6AAAgAUEBaiIBQT9HDQALQQAhAQJAQShFIgMNACACQcgAakEAQSj8CwALAkAgAw0AIAJByABqQShqQcSHwABBKPwKAAALAkAgAw0AIAJBmAFqQcSHwABBKPwKAAALAkAgAw0AIAJBwAFqQQBBKPwLAAsDQAJAAkACQCABQcAARg0AIAFBAXENAQwCCyACQegBaiACQcgAakEEEC4CQEGgAUUNACACQcgAaiACQegBakGgAfwKAAALQQAhAQNAAkACQAJAIAFBwABGDQAgAUEBcQ0CIAFBAXYhAyABQcAATw0BIAJBiANqIANBwAdsQdjFwABqIAJBCGogAWotAAAQIiACQegBaiACQcgAaiACQYgDahAWIAJByABqIAJB6AFqED4MAgsCQEGgAUUNACAAIAJByABqQaAB/AoAAAsgAkGABGokAA8LIANBIEHsh8AAEDsACyABQQFqIQEMAAsLIAFBAXYhAwJAIAFBwABPDQAgAkGIA2ogA0HAB2xB2MXAAGogAkEIaiABai0AABAiIAJB6AFqIAJByABqIAJBiANqEBYgAkHIAGogAkHoAWoQPgwBCyADQSBB7IfAABA7AAsgAUEBaiEBDAALC6wEAQR/IwBB8AJrIgMkACABQShqIQQCQEEoRQ0AIANBqAFqIARBKPwKAAALQQAhBQNAIANBqAFqIAVqIgYgBigCACABIAVqKAIAajYCACAFQQRqIgVBKEcNAAsCQEEoRSIFDQAgA0HQAWogBEEo/AoAAAsgA0HQAWogARAhIANBCGogA0GoAWogAhAMIANBMGogA0HQAWogAkEoahAMIANB2ABqIAFB+ABqIAJB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AkEfRht0IQMDQCAEIANBHXZBBHFqIgUoAhAiAkUNAiADQQF0IQMgAiEEIAIoAgRBeHEgAUcNAAsLIAIoAggiAyAANgIMIAIgADYCCCAAQQA2AhggACACNgIMIAAgAzYCCA8LIAVBEGogADYCACAAIAQ2AhggACAANgIMIAAgADYCCAuUAgIFfwR+IwBBMGshA0EAIQQCQEGAAkUNACAAQQBBgAL8CwALAkBBKEUNACADQQhqQQBBKPwLAAsDQCADQQhqIARqIAEgBGopAAA3AwAgBEEIaiIEQSBHDQALQcAAIAJrIQVCASACrYYiCEIBiCEJIAhCf3whCiAIpyEGQgAhC0EAIQQDQCADQQhqIARBA3ZB+P///wFxaiIHKQMAIARBP3EiAa2IIQgCQCABIAVJDQAgBykDCEHAACABa62GIAiEIQgLAkACQCAIIAqDIAt8IginIgFBAXENACAEQQFqIgRBgAJHDQIMAQsgACAEaiABIAZBACAIIAlaIgcbazoAACAHrSELIAQgAmoiBEGAAkkNAQsLC5QCAQN/IwBB0AFrIgIkACACQYABaiABQdAAahAbAkBBKEUiAw0AIAJBMGogAkGAAWpBKPwKAAALIAJBgAFqQShqIQQCQCADDQAgAkHYAGogBEEo/AoAAAsgAkGAAWogAkEwakEFEDIgAkEIaiACQYABaiACQdgAahAMIAJBgAFqIAEgAkEIahAMIAQgAUEoaiACQQhqEAwgAkEwaiAEEBAgAkHYAGogAkGAAWoQECACLQBYQQFxEEghASAAIAIpADA3AAAgAEEIaiACQTBqQQhqKQAANwAAIABBEGogAkEwakEQaikAADcAACACIAItAE8gAUEHdHM6AE8gAEEYaiACQTBqQRhqKQAANwAAIAJB0AFqJAALmwIBBn4gACABKQMwIAEpAyggASkDICICQhqIfCIDQhmIfCIEp0H///8fcTYCGCAAIAEpAxAgASkDCCABKQMAIgVCGoh8IgZCGYh8IgenQf///x9xNgIIIAAgASkDOCAEQhqIfCIEp0H///8PcTYCHCAAIAEpAxggB0IaiHwiB6dB////D3E2AgwgACABKQNAIARCGYh8IgSnQf///x9xNgIgIAAgA0L///8PgyACQv///x+DIAdCGYh8IgJCGoh8PgIUIAAgAqdB////H3E2AhAgACABKQNIIARCGoh8IgKnQf///w9xNgIkIAAgAkIZiEITfiAFQv///x+DfCICQhqIIAZC////D4N8PgIEIAAgAqdB////H3E2AgAL/QEBAX8gACABKAIAIAAoAgAiA3NBACACQf8BcWsiAnEgA3M2AgAgACABKAIEIAAoAgQiA3MgAnEgA3M2AgQgACABKAIIIAAoAggiA3MgAnEgA3M2AgggACABKAIMIAAoAgwiA3MgAnEgA3M2AgwgACABKAIQIAAoAhAiA3MgAnEgA3M2AhAgACABKAIUIAAoAhQiA3MgAnEgA3M2AhQgACABKAIYIAAoAhgiA3MgAnEgA3M2AhggACABKAIcIAAoAhwiA3MgAnEgA3M2AhwgACABKAIgIAAoAiAiA3MgAnEgA3M2AiAgACABKAIkIAAoAiQiAXMgAnEgAXM2AiQLgQICA38BfiMAQRBrIgYkAEEBIQdBBCEIAkACQCAEIAVqQX9qQQAgBGtxrSADrX4iCUIgiKcNACAJpyIDQYCAgIB4IARrSw0AAkACQCABDQBBACEIIAZBDGohBQwBCyAGIAQ2AgwgASAFbCEIIAZBCGohBQsgBSAINgIAAkACQAJAAkACQCAGKAIMRQ0AAkAgBigCCCIIDQAgAw0CIAQhCAwDCyACIAggBCADEA4hCAwCCyADDQAgBCEIDAILIAMQBCEICyAIDQAgACAENgIEDAELIAAgCDYCBEEAIQcLQQghCAwBC0EAIQMLIAAgCGogAzYCACAAIAc2AgAgBkEQaiQAC/MBAQR/IwBB4ANrIgEkACABIABBAxAuAkBBKEUiAA0AIAFBoAFqQQBBKPwLAAsgAUGgAWpBKGohAgJAIAANACACQcSHwABBKPwKAAALIAFBoAFqQdAAaiEDAkAgAA0AIANBxIfAAEEo/AoAAAsCQCAADQAgAUGYAmpBAEEo/AsACyABQcACaiABIAMQDCABQegCaiABQaABaiABQdAAaiIAEAwgAUHAAmogAUHoAmoQMSEEIAFBkANqIAFBKGogAxAMIAFBuANqIAIgABAMIAQgAUGQA2ogAUG4A2oQMXEQSCEAIAFB4ANqJAAgAEH/AXFBAEcL2QEBBH8jAEEwayICJABBACEDAkBBJEUNACACQQxqQQBBJPwLAAtBACEEA0AgAkEMaiADaiABIANqKAIAIARBH3VqIANBtMXAAGooAgBrIgRB/////wFxNgIAIANBBGoiA0EkRw0AC0EAIQNBACAEQR92EEhB/wFxayEFQQAhBANAIAJBDGogA2oiASABKAIAIARBHXZqIANBtMXAAGooAgAgBXFqIgRB/////wFxNgIAIANBBGoiA0EkRw0ACwJAQSRFDQAgACACQQxqQST8CgAACyACQTBqJAAL7QEBAX8jAEGAAWsiASQAIAFB8P///wEgACgCJGutNwNQIAFB8P///wMgACgCIGutNwNIIAFB8P///wEgACgCHGutNwNAIAFB8P///wMgACgCGGutNwM4IAFB8P///wEgACgCFGutNwMwIAFB8P///wMgACgCEGutNwMoIAFB8P///wEgACgCDGutNwMgIAFB8P///wMgACgCCGutNwMYIAFB8P///wEgACgCBGutNwMQIAFB0P3//wMgACgCAGutNwMIIAFB2ABqIAFBCGoQJgJAQShFDQAgACABQdgAakEo/AoAAAsgAUGAAWokAAvOAQEEfyMAQdAAayICJAAgAUEoaiEDAkBBKEUNACACIANBKPwKAAALQQAhBANAIAIgBGoiBSAFKAIAIAEgBGooAgBqNgIAIARBBGoiBEEoRw0ACwJAQShFIgQNACACQShqIANBKPwKAAALIAJBKGogARAhAkAgBA0AIABB0ABqIAFB0ABqQSj8CgAACyAAQfgAaiABQfgAakHYtcIAEAwCQCAEDQAgACACQSj8CgAACwJAIAQNACAAQShqIAJBKGpBKPwKAAALIAJB0ABqJAALsQEBAn8jAEEgayICJAAgAS0AACEDIAJBF2ogAUEXaikAADcAACACQRFqIAFBEWopAAA3AAAgAkEJaiABQQlqKQAANwAAIAIgA0H4AXE6AAAgAiABKQABNwABIAIgAS0AH0E/cUHAAHI6AB8gACACEAkgAEE4aiABQThqKQAANwAAIABBMGogAUEwaikAADcAACAAQShqIAFBKGopAAA3AAAgACABKQAgNwAgIAJBIGokAAurAQECfyMAQcADayIDJAACQEEoRSIEDQAgA0GoAWpBKGogAUEoakEo/AoAAAsCQCAEDQAgA0GoAWpB0ABqIAFB0ABqQSj8CgAACwJAIAQNACADQagBaiABQSj8CgAACyACQX9qIQQDQCADQQhqIANBqAFqEBwgA0GoAWogA0EIahBBIARBf2oiBA0ACyADQaACaiADQagBahAcIAAgA0GgAmoQPiADQcADaiQAC5UBAQF/IwBBEGsiAyQAAkACQAJAIAIgAWoiASACTw0AQQAhAwwBCyADQQRqIAAoAgAiAiAAKAIEIAEgAkEBdCICIAEgAksbIgJBCCACQQhLGyICQQFBARAoIAMoAgRBAUcNASADKAIMIQAgAygCCCEDCyADIAAQRgALIAMoAgghASAAIAI2AgAgACABNgIEIANBEGokAAtzAQN/IwBBMGsiAyQAQQAhBAJAQSRFDQAgA0EMakEAQST8CwALQQAhBQNAIANBDGogBGogASAEaigCACAFQR12aiACIARqKAIAaiIFQf////8BcTYCACAEQQRqIgRBJEcNAAsgACADQQxqECogA0EwaiQAC2sBAn8jAEHAAGsiAiQAIAIgABAQIAJBIGogARAQQQEhAUEAIQADQCACQSBqIABqLQAAIAIgAGotAABzIgNBACADa3LAQX9KEEggAXEhASAAQQFqIgBBIEcNAAsgARBIIQAgAkHAAGokACAAC2sBAX8jAEGAAWsiAyQAIANBMGogARASIAJBf2ohASADQQhqIANBMGoQJgNAIANBMGogA0EIahASIANBCGogA0EwahAmIAFBf2oiAQ0ACwJAQShFDQAgACADQQhqQSj8CgAACyADQYABaiQAC3gBA38jAEEQayIBJAACQCAAKAIAIgIoAgQiA0EBcUUNACACKAIAIQIgASADQQF2NgIEIAEgAjYCACABQQQgACgCCCIALQAIIAAtAAkQNAALIAFBgICAgHg2AgAgASAANgIMIAFBBSAAKAIIIgAtAAggAC0ACRA0AAt3AQJ/IwBBEGsiBCQAQQBBACgCmMFCIgVBAWo2ApjBQgJAIAVBAEgNAAJAAkBBAC0AlMFCDQBBAEEAKAKQwUJBAWo2ApDBQkEAKAKcwUJBf0oNAQwCCyAEQQhqIAAgAREDAAALQQBBADoAlMFCIAJFDQAQVgALAAuLAQICfgF8IAH8ByICQjwgAkI8VhsiAkKA9SQgAkKA9SRUG7oiBCAERAAAAAAAGPVAIAQgAb0iAkIAUxtEAAAAAAAY9UAgAkL///////////8AgyIDQoCAgICAgIB4fEKAgICAgICA8P8AVBsgAkJ/fEL/////////B1QbIANQ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";
2058
- var post_core_wasm_exports = {};
2059
- __export2(post_core_wasm_exports, {
2060
- default: () => __wbg_init,
2061
- generateSeed: () => generateSeed,
2062
- initSync: () => initSync,
2063
- policyDecision: () => policyDecision,
2064
- policyMaxAge: () => policyMaxAge,
2065
- publicKey: () => publicKey,
2066
- sign: () => sign,
2067
- verify: () => verify
2068
- });
2069
- function generateSeed() {
2070
- try {
2071
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2072
- wasm.generateSeed(retptr);
2073
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2074
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2075
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2076
- var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
2077
- if (r3) {
2078
- throw takeObject(r2);
2079
- }
2080
- var v1 = getArrayU8FromWasm0(r0, r1).slice();
2081
- wasm.__wbindgen_export2(r0, r1 * 1, 1);
2082
- return v1;
2083
- } finally {
2084
- wasm.__wbindgen_add_to_stack_pointer(16);
2085
- }
2086
- }
2087
- function policyDecision(now, fetched_at, max_age, cached_id, txt_id, kid_known) {
2088
- let deferred3_0;
2089
- let deferred3_1;
2090
- try {
2091
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2092
- var ptr0 = isLikeNone(cached_id) ? 0 : passStringToWasm0(cached_id, wasm.__wbindgen_export3, wasm.__wbindgen_export4);
2093
- var len0 = WASM_VECTOR_LEN;
2094
- var ptr1 = isLikeNone(txt_id) ? 0 : passStringToWasm0(txt_id, wasm.__wbindgen_export3, wasm.__wbindgen_export4);
2095
- var len1 = WASM_VECTOR_LEN;
2096
- wasm.policyDecision(retptr, now, !isLikeNone(fetched_at), isLikeNone(fetched_at) ? 0 : fetched_at, max_age, ptr0, len0, ptr1, len1, kid_known);
2097
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2098
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2099
- deferred3_0 = r0;
2100
- deferred3_1 = r1;
2101
- return getStringFromWasm0(r0, r1);
2102
- } finally {
2103
- wasm.__wbindgen_add_to_stack_pointer(16);
2104
- wasm.__wbindgen_export2(deferred3_0, deferred3_1, 1);
2105
- }
2106
- }
2107
- function policyMaxAge(published) {
2108
- const ret = wasm.policyMaxAge(!isLikeNone(published), isLikeNone(published) ? 0 : published);
2109
- return ret;
2110
- }
2111
- function publicKey(seed) {
2112
- try {
2113
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2114
- const ptr0 = passArray8ToWasm0(seed, wasm.__wbindgen_export3);
2115
- const len0 = WASM_VECTOR_LEN;
2116
- wasm.publicKey(retptr, ptr0, len0);
2117
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2118
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2119
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2120
- var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
2121
- if (r3) {
2122
- throw takeObject(r2);
2123
- }
2124
- var v2 = getArrayU8FromWasm0(r0, r1).slice();
2125
- wasm.__wbindgen_export2(r0, r1 * 1, 1);
2126
- return v2;
2127
- } finally {
2128
- wasm.__wbindgen_add_to_stack_pointer(16);
2129
- }
2130
- }
2131
- function sign(seed, message) {
2132
- try {
2133
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2134
- const ptr0 = passArray8ToWasm0(seed, wasm.__wbindgen_export3);
2135
- const len0 = WASM_VECTOR_LEN;
2136
- const ptr1 = passArray8ToWasm0(message, wasm.__wbindgen_export3);
2137
- const len1 = WASM_VECTOR_LEN;
2138
- wasm.sign(retptr, ptr0, len0, ptr1, len1);
2139
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2140
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2141
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2142
- var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
2143
- if (r3) {
2144
- throw takeObject(r2);
2145
- }
2146
- var v3 = getArrayU8FromWasm0(r0, r1).slice();
2147
- wasm.__wbindgen_export2(r0, r1 * 1, 1);
2148
- return v3;
2149
- } finally {
2150
- wasm.__wbindgen_add_to_stack_pointer(16);
2151
- }
2152
- }
2153
- function verify(public_key, message, signature) {
2154
- try {
2155
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2156
- const ptr0 = passArray8ToWasm0(public_key, wasm.__wbindgen_export3);
2157
- const len0 = WASM_VECTOR_LEN;
2158
- const ptr1 = passArray8ToWasm0(message, wasm.__wbindgen_export3);
2159
- const len1 = WASM_VECTOR_LEN;
2160
- const ptr2 = passArray8ToWasm0(signature, wasm.__wbindgen_export3);
2161
- const len2 = WASM_VECTOR_LEN;
2162
- wasm.verify(retptr, ptr0, len0, ptr1, len1, ptr2, len2);
2163
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2164
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2165
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2166
- if (r2) {
2167
- throw takeObject(r1);
2168
- }
2169
- return r0 !== 0;
2170
- } finally {
2171
- wasm.__wbindgen_add_to_stack_pointer(16);
2172
- }
2173
- }
2174
- function __wbg_get_imports() {
2175
- const import0 = {
2176
- __proto__: null,
2177
- __wbg_Error_30c8987f7c2ed4e2: function(arg0, arg1) {
2178
- const ret = Error(getStringFromWasm0(arg0, arg1));
2179
- return addHeapObject(ret);
2180
- },
2181
- __wbg_getRandomValues_436a51d0629d84e1: function() {
2182
- return handleError(function(arg0, arg1) {
2183
- globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));
2184
- }, arguments);
2185
- },
2186
- __wbindgen_object_drop_ref: function(arg0) {
2187
- takeObject(arg0);
2188
- }
2189
- };
2190
- return {
2191
- __proto__: null,
2192
- "./post_core_wasm_bg.js": import0
2193
- };
2194
- }
2195
- function addHeapObject(obj) {
2196
- if (heap_next === heap.length) heap.push(heap.length + 1);
2197
- const idx = heap_next;
2198
- heap_next = heap[idx];
2199
- heap[idx] = obj;
2200
- return idx;
2201
- }
2202
- function dropObject(idx) {
2203
- if (idx < 1028) return;
2204
- heap[idx] = heap_next;
2205
- heap_next = idx;
2206
- }
2207
- function getArrayU8FromWasm0(ptr, len) {
2208
- ptr = ptr >>> 0;
2209
- return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
2210
- }
2211
- var cachedDataViewMemory0 = null;
2212
- function getDataViewMemory0() {
2213
- if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
2214
- cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
2215
- }
2216
- return cachedDataViewMemory0;
2217
- }
2218
- function getStringFromWasm0(ptr, len) {
2219
- return decodeText(ptr >>> 0, len);
2220
- }
2221
- var cachedUint8ArrayMemory0 = null;
2222
- function getUint8ArrayMemory0() {
2223
- if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
2224
- cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
2225
- }
2226
- return cachedUint8ArrayMemory0;
2227
- }
2228
- function getObject(idx) {
2229
- return heap[idx];
2230
- }
2231
- function handleError(f, args) {
2232
- try {
2233
- return f.apply(this, args);
2234
- } catch (e) {
2235
- wasm.__wbindgen_export(addHeapObject(e));
2236
- }
2237
- }
2238
- var heap = new Array(1024).fill(void 0);
2239
- heap.push(void 0, null, true, false);
2240
- var heap_next = heap.length;
2241
- function isLikeNone(x) {
2242
- return x === void 0 || x === null;
2243
- }
2244
- function passArray8ToWasm0(arg, malloc) {
2245
- const ptr = malloc(arg.length * 1, 1) >>> 0;
2246
- getUint8ArrayMemory0().set(arg, ptr / 1);
2247
- WASM_VECTOR_LEN = arg.length;
2248
- return ptr;
2249
- }
2250
- function passStringToWasm0(arg, malloc, realloc) {
2251
- if (realloc === void 0) {
2252
- const buf = cachedTextEncoder.encode(arg);
2253
- const ptr2 = malloc(buf.length, 1) >>> 0;
2254
- getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
2255
- WASM_VECTOR_LEN = buf.length;
2256
- return ptr2;
2257
- }
2258
- let len = arg.length;
2259
- let ptr = malloc(len, 1) >>> 0;
2260
- const mem = getUint8ArrayMemory0();
2261
- let offset = 0;
2262
- for (; offset < len; offset++) {
2263
- const code = arg.charCodeAt(offset);
2264
- if (code > 127) break;
2265
- mem[ptr + offset] = code;
2266
- }
2267
- if (offset !== len) {
2268
- if (offset !== 0) {
2269
- arg = arg.slice(offset);
2270
- }
2271
- ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
2272
- const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
2273
- const ret = cachedTextEncoder.encodeInto(arg, view);
2274
- offset += ret.written;
2275
- ptr = realloc(ptr, len, offset, 1) >>> 0;
2276
- }
2277
- WASM_VECTOR_LEN = offset;
2278
- return ptr;
2279
- }
2280
- function takeObject(idx) {
2281
- const ret = getObject(idx);
2282
- dropObject(idx);
2283
- return ret;
2284
- }
2285
- var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
2286
- cachedTextDecoder.decode();
2287
- var MAX_SAFARI_DECODE_BYTES = 2146435072;
2288
- var numBytesDecoded = 0;
2289
- function decodeText(ptr, len) {
2290
- numBytesDecoded += len;
2291
- if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
2292
- cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
2293
- cachedTextDecoder.decode();
2294
- numBytesDecoded = len;
2295
- }
2296
- return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
2297
- }
2298
- var cachedTextEncoder = new TextEncoder();
2299
- if (!("encodeInto" in cachedTextEncoder)) {
2300
- cachedTextEncoder.encodeInto = function(arg, view) {
2301
- const buf = cachedTextEncoder.encode(arg);
2302
- view.set(buf);
2303
- return {
2304
- read: arg.length,
2305
- written: buf.length
2306
- };
2307
- };
2308
- }
2309
- var WASM_VECTOR_LEN = 0;
2310
- var wasmModule;
2311
- var wasmInstance;
2312
- var wasm;
2313
- function __wbg_finalize_init(instance, module) {
2314
- wasmInstance = instance;
2315
- wasm = instance.exports;
2316
- wasmModule = module;
2317
- cachedDataViewMemory0 = null;
2318
- cachedUint8ArrayMemory0 = null;
2319
- return wasm;
2320
- }
2321
- async function __wbg_load(module, imports) {
2322
- if (typeof Response === "function" && module instanceof Response) {
2323
- if (!module.ok) {
2324
- throw new Error(`failed to fetch Wasm: ${module.status} ${module.statusText} fetching '${module.url}'`);
2325
- }
2326
- if (typeof WebAssembly.instantiateStreaming === "function") {
2327
- try {
2328
- return await WebAssembly.instantiateStreaming(module, imports);
2329
- } catch (e) {
2330
- const validResponse = expectedResponseType(module.type);
2331
- if (validResponse && module.headers.get("Content-Type") !== "application/wasm") {
2332
- console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
2333
- } else {
2334
- throw e;
2335
- }
2336
- }
2337
- }
2338
- const bytes = await module.arrayBuffer();
2339
- return await WebAssembly.instantiate(bytes, imports);
2340
- } else {
2341
- const instance = await WebAssembly.instantiate(module, imports);
2342
- if (instance instanceof WebAssembly.Instance) {
2343
- return { instance, module };
2344
- } else {
2345
- return instance;
2346
- }
2347
- }
2348
- function expectedResponseType(type) {
2349
- switch (type) {
2350
- case "basic":
2351
- case "cors":
2352
- case "default":
2353
- return true;
2354
- }
2355
- return false;
2356
- }
2357
- }
2358
- function initSync(module) {
2359
- if (wasm !== void 0) return wasm;
2360
- if (module !== void 0) {
2361
- if (Object.getPrototypeOf(module) === Object.prototype) {
2362
- ({ module } = module);
2363
- } else {
2364
- console.warn("using deprecated parameters for `initSync()`; pass a single object instead");
2365
- }
2366
- }
2367
- const imports = __wbg_get_imports();
2368
- if (!(module instanceof WebAssembly.Module)) {
2369
- module = new WebAssembly.Module(module);
2370
- }
2371
- const instance = new WebAssembly.Instance(module, imports);
2372
- return __wbg_finalize_init(instance, module);
2373
- }
2374
- async function __wbg_init(module_or_path) {
2375
- if (wasm !== void 0) return wasm;
2376
- if (module_or_path !== void 0) {
2377
- if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
2378
- ({ module_or_path } = module_or_path);
2379
- } else {
2380
- console.warn("using deprecated parameters for the initialization function; pass a single object instead");
2381
- }
2382
- }
2383
- const imports = __wbg_get_imports();
2384
- if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
2385
- module_or_path = fetch(module_or_path);
2386
- }
2387
- const { instance, module } = await __wbg_load(await module_or_path, imports);
2388
- return __wbg_finalize_init(instance, module);
2389
- }
2390
- var ready = false;
2391
- function wasm2() {
2392
- if (!ready) {
2393
- initSync({ module: Buffer.from(wasmBase64, "base64") });
2394
- ready = true;
2395
- }
2396
- return post_core_wasm_exports;
2397
- }
2398
- var b64url = (bytes) => Buffer.from(bytes).toString("base64url");
2399
- var fromB64url = (text) => new Uint8Array(Buffer.from(text, "base64url"));
2400
- function jwkThumbprint(publicKey2) {
2401
- return createHash("sha256").update(`{"crv":"Ed25519","kty":"OKP","x":"${b64url(publicKey2)}"}`).digest("base64url");
2402
- }
2403
- function identityFromSeed(input) {
2404
- const seed = new Uint8Array(input.seed);
2405
- const publicKey2 = wasm2().publicKey(seed);
2406
- return {
2407
- domain: input.domain.toLowerCase(),
2408
- kid: jwkThumbprint(publicKey2),
2409
- publicKey: publicKey2,
2410
- seed,
2411
- sign: (message) => wasm2().sign(seed, message)
2412
- };
2413
- }
2414
- function generateIdentity(domain) {
2415
- return identityFromSeed({ domain, seed: wasm2().generateSeed() });
2416
- }
2417
- function identityDir(env = process.env) {
2418
- return env.PIDGEON_ID_DIR || join(env.XDG_CONFIG_HOME || join(homedir(), ".config"), "pidgeon", "id");
2419
- }
2420
- async function saveIdentity(identity, dir = identityDir()) {
2421
- await mkdir(dir, { recursive: true, mode: 448 });
2422
- const path = join(dir, `${identity.domain}.json`);
2423
- const file = {
2424
- v: 1,
2425
- domain: identity.domain,
2426
- kid: identity.kid,
2427
- seed: b64url(identity.seed),
2428
- previous: identity.previous ? { kid: identity.previous.kid, public_key: b64url(identity.previous.publicKey) } : null
2429
- };
2430
- await writeFile(path, `${JSON.stringify(file, null, 2)}
2431
- `, { mode: 384 });
2432
- await chmod(path, 384);
2433
- return path;
2434
- }
2435
- async function loadIdentity(domain, options = {}) {
2436
- const env = options.env ?? process.env;
2437
- const name = domain.toLowerCase();
2438
- const fromEnv = env.PIDGEON_ID_KEY?.split(":");
2439
- if (fromEnv?.length === 2 && fromEnv[0].toLowerCase() === name) {
2440
- return identityFromSeed({ domain: name, seed: fromB64url(fromEnv[1]) });
2441
- }
2442
- const path = join(options.dir ?? identityDir(env), `${name}.json`);
2443
- let file;
2444
- try {
2445
- file = JSON.parse(await readFile(path, "utf8"));
2446
- } catch {
2447
- throw new Error(
2448
- `No identity for ${name} on this machine. Run \`pidgeon id init ${name}\` first.`
2449
- );
2450
- }
2451
- const identity = identityFromSeed({ domain: file.domain, seed: fromB64url(file.seed) });
2452
- if (identity.kid !== file.kid)
2453
- throw new Error(`${path} is damaged: its key does not match its kid.`);
2454
- identity.previous = file.previous ? { kid: file.previous.kid, publicKey: fromB64url(file.previous.public_key) } : null;
2455
- return identity;
2456
- }
2457
- async function listIdentities(dir = identityDir()) {
2458
- try {
2459
- return (await readdir(dir)).filter((name) => name.endsWith(".json")).map((name) => name.slice(0, -5));
2460
- } catch {
2461
- return [];
2462
- }
2463
- }
2464
- var TAG = "web-bot-auth";
2465
- var SIGNATURE_SECONDS = 300;
2466
- var quote = (value) => `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
2467
- function authority(url) {
2468
- const defaultPort = url.protocol === "https:" && url.port === "443" || url.protocol === "http:" && url.port === "80";
2469
- return `${url.hostname.toLowerCase()}${url.port && !defaultPort ? `:${url.port}` : ""}`;
2470
- }
2471
- function bytesOf(body) {
2472
- return typeof body === "string" ? new TextEncoder().encode(body) : body;
2473
- }
2474
- function contentDigest(body) {
2475
- return `sha-256=:${createHash2("sha256").update(bytesOf(body)).digest("base64")}:`;
2476
- }
2477
- async function signRequest(identity, input) {
2478
- const url = new URL(input.url);
2479
- const label = input.label ?? "sig1";
2480
- const created = Math.floor((input.now ?? Date.now()) / 1e3);
2481
- const expires = created + (input.seconds ?? SIGNATURE_SECONDS);
2482
- const agent = input.agent?.trim().toLowerCase() ?? null;
2483
- if (agent && !agent.endsWith(`@${identity.domain}`)) {
2484
- throw new Error(`${agent} is not an address at ${identity.domain}, whose key this is.`);
2485
- }
2486
- const added = {
2487
- "signature-agent": quote(`https://post.${identity.domain}`),
2488
- ...agent ? { from: agent } : {},
2489
- ...input.grants?.length ? { "post-grant": input.grants.map((jws) => jws.replace(/\s+/g, "")).join(", ") } : {}
2490
- };
2491
- const body = input.body === void 0 || input.body === null ? null : bytesOf(input.body);
2492
- if (body && body.length > 0) added["content-digest"] = contentDigest(body);
2493
- const values = [
2494
- ["@method", input.method.toUpperCase()],
2495
- ["@authority", authority(url)],
2496
- ["@path", url.pathname || "/"],
2497
- ...url.search ? [["@query", url.search]] : [],
2498
- ["signature-agent", added["signature-agent"]],
2499
- ...added.from ? [["from", added.from]] : [],
2500
- ...added["post-grant"] ? [["post-grant", added["post-grant"]]] : [],
2501
- ...added["content-digest"] ? [["content-digest", added["content-digest"]]] : []
2502
- ];
2503
- const params = `(${values.map(([name]) => quote(name)).join(" ")});created=${created};expires=${expires};keyid=${quote(identity.kid)};alg="ed25519";nonce=${quote(randomBytes(32).toString("base64"))};tag=${quote(input.tag ?? TAG)}`;
2504
- const base = [
2505
- ...values.map(([name, value]) => `${quote(name)}: ${value}`),
2506
- `"@signature-params": ${params}`
2507
- ].join("\n");
2508
- const signature = identity.sign(new TextEncoder().encode(base));
2509
- return {
2510
- ...added,
2511
- "signature-input": `${label}=${params}`,
2512
- signature: `${label}=:${Buffer.from(signature).toString("base64")}:`
2513
- };
2514
- }
2515
- function signedFetch(identity, options) {
2516
- const base = options.fetch ?? globalThis.fetch;
2517
- return async (resource, init) => {
2518
- const request = new Request(resource, init);
2519
- const body = request.body ? new Uint8Array(await request.arrayBuffer()) : null;
2520
- const headers = {};
2521
- request.headers.forEach((value, name) => {
2522
- headers[name] = value;
2523
- });
2524
- const signature = await signRequest(identity, {
2525
- method: request.method,
2526
- url: request.url,
2527
- headers,
2528
- body,
2529
- agent: options.agent,
2530
- grants: options.grants
2531
- });
2532
- const signedHeaders = new Headers(request.headers);
2533
- for (const [name, value] of Object.entries(signature)) signedHeaders.set(name, value);
2534
- return base(request.url, {
2535
- method: request.method,
2536
- headers: signedHeaders,
2537
- body: body && body.length > 0 ? body : void 0,
2538
- redirect: request.redirect,
2539
- signal: request.signal
2540
- });
2541
- };
2542
- }
2543
- var ISSUANCE_TAG = "pidgeon-id";
2544
- var DEFAULT_ID_URL = "https://pidgeon.ai/api/id";
2545
- var IdApiError = class extends Error {
2546
- constructor(status, code, message) {
2547
- super(message);
2548
- this.status = status;
2549
- this.code = code;
2550
- }
2551
- status;
2552
- code;
2553
- };
2554
- var IdClient = class {
2555
- constructor(identity, baseUrl2 = DEFAULT_ID_URL, fetcher = fetch) {
2556
- this.identity = identity;
2557
- this.baseUrl = baseUrl2;
2558
- this.fetcher = fetcher;
2559
- }
2560
- identity;
2561
- baseUrl;
2562
- fetcher;
2563
- async call(method, path, body) {
2564
- const url = `${this.baseUrl.replace(/\/$/, "")}${path}`;
2565
- const text = body === void 0 ? null : JSON.stringify(body);
2566
- const headers = text ? { "content-type": "application/json" } : {};
2567
- Object.assign(
2568
- headers,
2569
- await signRequest(this.identity, { method, url, headers, body: text, tag: ISSUANCE_TAG })
2570
- );
2571
- const response = await this.fetcher(url, { method, headers, body: text ?? void 0 });
2572
- const json2 = await response.json().catch(() => null);
2573
- if (!response.ok || !json2 || json2.data === void 0) {
2574
- throw new IdApiError(
2575
- response.status,
2576
- json2?.error?.code,
2577
- json2?.error?.message ?? `Pidgeon answered ${response.status}.`
2578
- );
2579
- }
2580
- return json2.data;
2581
- }
2582
- /** Claim the domain with this key. Idempotent: a second call returns the same records. */
2583
- claim() {
2584
- return this.call("POST", "/domains", {
2585
- domain: this.identity.domain,
2586
- public_key: b64url(this.identity.publicKey)
2587
- });
2588
- }
2589
- /** Look at DNS now; `verified` once `_post` says this key's id. */
2590
- check() {
2591
- return this.call("POST", "/domains/check", { domain: this.identity.domain });
2592
- }
2593
- issue(input) {
2594
- return this.call("POST", "/agents", input);
2595
- }
2596
- list() {
2597
- return this.call("GET", "/agents");
2598
- }
2599
- revoke(name) {
2600
- return this.call("DELETE", `/agents/${encodeURIComponent(name)}`);
2601
- }
2602
- /**
2603
- * The domain grants one of its own agents, at once: what it may do, for
2604
- * which customer, account or order, where, until when (at most 90 days).
2605
- */
2606
- grant(input) {
2607
- return this.call("POST", "/grants", input);
2608
- }
2609
- /** Every token Sign in with Pidgeon issued `name`, taken back; its card and grants stand. */
2610
- revokeSignIns(name) {
2611
- return this.call("DELETE", `/agents/${encodeURIComponent(name)}/sign-ins`);
2612
- }
2613
- revokeGrant(id) {
2614
- return this.call("DELETE", `/grants/${encodeURIComponent(id)}`);
2615
- }
2616
- /**
2617
- * Publish `next` as the domain's key, signed by the current one. `proof`
2618
- * is `next`'s own signature over the rotation, so nobody can rotate a
2619
- * domain onto a key they do not hold.
2620
- */
2621
- rotate(next) {
2622
- const statement = rotationStatement(this.identity.domain, this.identity.kid, next.kid);
2623
- return this.call("POST", "/keys", {
2624
- public_key: b64url(next.publicKey),
2625
- proof: b64url(next.sign(new TextEncoder().encode(statement)))
2626
- });
2627
- }
2628
- };
2629
- function rotationStatement(domain, from, to) {
2630
- return `pidgeon id rotate
2631
- ${domain}
2632
- ${from}
2633
- ${to}`;
2634
- }
2635
- var TOKEN_EXCHANGE = "urn:ietf:params:oauth:grant-type:token-exchange";
2636
- var JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer";
2637
- var TOKEN_TYPE_JWT = "urn:ietf:params:oauth:token-type:jwt";
2638
- var SignInError = class extends Error {
2639
- constructor(step, status, code, message) {
2640
- super(message);
2641
- this.step = step;
2642
- this.status = status;
2643
- this.code = code;
2644
- }
2645
- step;
2646
- status;
2647
- code;
2648
- };
2649
- async function json(response) {
2650
- return await response.json().catch(() => null) ?? {};
2651
- }
2652
- function form(values) {
2653
- return new URLSearchParams(values).toString();
2654
- }
2655
- async function siteMetadata(site, fetcher = fetch) {
2656
- const response = await fetcher(site, { headers: { accept: "application/json" } });
2657
- const body = await json(response);
2658
- if (!response.ok || typeof body.issuer !== "string" || typeof body.client_id !== "string") {
2659
- throw new SignInError(
2660
- "site",
2661
- response.status,
2662
- void 0,
2663
- `${site} does not offer Sign in with Pidgeon.`
2664
- );
2665
- }
2666
- const trim = (issuer) => issuer.replace(/\/$/, "");
2667
- const listed = Array.isArray(body.issuers) ? body.issuers.filter((issuer) => typeof issuer === "string").map(trim) : [];
2668
- return {
2669
- issuer: body.issuer,
2670
- issuers: [.../* @__PURE__ */ new Set([trim(body.issuer), ...listed])],
2671
- client_id: body.client_id,
2672
- token_endpoint: site
2673
- };
2674
- }
2675
- function issuerFor(site, card) {
2676
- try {
2677
- const payload = JSON.parse(Buffer.from(card.split(".")[1] ?? "", "base64url").toString("utf8"));
2678
- const iss = typeof payload?.iss === "string" ? payload.iss.replace(/\/$/, "") : null;
2679
- if (iss && site.issuers.includes(iss)) return iss;
2680
- } catch {
2681
- }
2682
- return site.issuer.replace(/\/$/, "");
2683
- }
2684
- async function fetchCard(agent, fetcher = fetch, postHost = (domain) => `https://post.${domain}`) {
2685
- const domain = agent.split("@")[1] ?? "";
2686
- const response = await fetcher(
2687
- `${postHost(domain)}/.well-known/post/card?address=${encodeURIComponent(agent)}`
2688
- );
2689
- const body = await json(response);
2690
- if (!response.ok || typeof body.jws !== "string") {
2691
- throw new SignInError(
2692
- "card",
2693
- response.status,
2694
- void 0,
2695
- `${agent} has no card to sign in with.`
2696
- );
2697
- }
2698
- return body.jws;
2699
- }
2700
- function signInWithPidgeon(identity, input) {
2701
- return signIn(
2702
- identity,
2703
- input,
2704
- async ({ tokenEndpoint, exchange, headers, agent }) => signRequest(identity, {
2705
- method: "POST",
2706
- url: tokenEndpoint,
2707
- headers,
2708
- body: exchange,
2709
- agent,
2710
- grants: input.grant ? [input.grant] : void 0
2711
- })
2712
- );
2713
- }
2714
- async function signIn(identity, input, authenticate, admit) {
2715
- const fetcher = input.fetch ?? fetch;
2716
- const agent = input.agent.trim().toLowerCase();
2717
- const site = await siteMetadata(input.site, fetcher);
2718
- admit?.(site);
2719
- const card = input.card ?? await fetchCard(agent, fetcher, input.postHost);
2720
- const issuer = admit ? site.issuer.replace(/\/$/, "") : issuerFor(site, card);
2721
- const discovery = await json(await fetcher(`${issuer}/.well-known/openid-configuration`));
2722
- const tokenEndpoint = discovery.token_endpoint;
2723
- if (typeof tokenEndpoint !== "string") {
2724
- throw new SignInError("pidgeon", 0, void 0, `${issuer} has no token endpoint.`);
2725
- }
2726
- const exchange = form({
2727
- grant_type: TOKEN_EXCHANGE,
2728
- subject_token: card,
2729
- subject_token_type: TOKEN_TYPE_JWT,
2730
- audience: site.client_id,
2731
- ...input.delegation ? { requested_token_type: TOKEN_TYPE_JWT } : {}
2732
- });
2733
- const headers = { "content-type": "application/x-www-form-urlencoded" };
2734
- const issued = await fetcher(tokenEndpoint, {
2735
- method: "POST",
2736
- headers: {
2737
- ...headers,
2738
- ...await authenticate({ tokenEndpoint, exchange, headers, agent, site })
2739
- },
2740
- body: exchange
2741
- });
2742
- const tokens = await json(issued);
2743
- if (!issued.ok || typeof tokens.id_token !== "string") {
2744
- throw new SignInError(
2745
- "pidgeon",
2746
- issued.status,
2747
- tokens.error,
2748
- tokens.error_description ?? `Pidgeon answered ${issued.status}.`
2749
- );
2750
- }
2751
- const bearer = form({ grant_type: JWT_BEARER, assertion: tokens.id_token });
2752
- const answered = await fetcher(site.token_endpoint, {
2753
- method: "POST",
2754
- headers: {
2755
- ...headers,
2756
- ...await signRequest(identity, {
2757
- method: "POST",
2758
- url: site.token_endpoint,
2759
- headers,
2760
- body: bearer,
2761
- agent
2762
- })
2763
- },
2764
- body: bearer
2765
- });
2766
- const session = await json(answered);
2767
- if (!answered.ok) {
2768
- throw new SignInError(
2769
- "site",
2770
- answered.status,
2771
- session.error,
2772
- session.error_description ?? `The site answered ${answered.status}.`
2773
- );
2774
- }
2775
- return {
2776
- site: session,
2777
- idToken: tokens.id_token,
2778
- accessToken: tokens.access_token
2779
- };
2780
- }
2781
- var UsageError = class extends Error {
2782
- };
2783
- var HELP = `pidgeon id \u2014 a signed identity for your agents, on your own domain. No account.
2784
-
2785
- init <domain> Make a key on this machine and prove the domain over DNS
2786
- check [<domain>] Look at DNS again
2787
- issue <name> Give <name>@<domain> a card --kind agent|service --on-behalf-of <who>
2788
- list Agents on the domain
2789
- revoke <name> Withdraw an agent's card now
2790
- rotate Replace the domain's key; the old one verifies for another day
2791
- grant <name> Grant <name> what it may do, as the domain
2792
- --scope bookings.change --label "manage bookings"
2793
- --subject customer:42 --audience delta.com --days 30
2794
- --grantor maria@example.com ask a person instead
2795
- revoke-grant <id> Take a grant back now
2796
- revoke-sign-ins <name> End every token <name> signed in with; its card and grants stand
2797
- sign-in <site> Sign in to a site as an agent --as <name> --grant <jws>
2798
- verify [<file>] Check a message's signatures (a file, or standard input). No key
2799
- curl [-I] <url> Send a request signed as an agent --as <name>
2800
-
2801
- --domain <domain> Which domain, when this machine holds more than one
2802
- --json Print the API's answer as JSON
2803
- --no-wait init: print the records and return
2804
-
2805
- Keys live in ${"$"}PIDGEON_ID_DIR (default ~/.config/pidgeon/id). They never leave this machine.`;
2806
- function parse(argv) {
2807
- const positional = [];
2808
- const flags = /* @__PURE__ */ new Map();
2809
- for (let i = 0; i < argv.length; i++) {
2810
- const token = argv[i];
2811
- if (!token.startsWith("--")) {
2812
- positional.push(token);
2813
- continue;
2814
- }
2815
- const [name, inline] = token.slice(2).split("=", 2);
2816
- if (["json", "no-wait", "help"].includes(name)) flags.set(name, true);
2817
- else {
2818
- const value = inline ?? argv[++i];
2819
- if (value === void 0) throw new UsageError(`--${name} needs a value.`);
2820
- flags.set(name, value);
2821
- }
2822
- }
2823
- return { positional, flags };
2824
- }
2825
- var DOMAIN = /^(?=.{4,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/;
2826
- function baseUrl(env) {
2827
- if (env.PIDGEON_ID_URL) return env.PIDGEON_ID_URL;
2828
- if (env.PIDGEON_BASE_URL) return env.PIDGEON_BASE_URL.replace(/\/v1\/?$/, "/id");
2829
- return DEFAULT_ID_URL;
2830
- }
2831
- function describeRecords(domain) {
2832
- const lines = domain.records.map(
2833
- (record) => ` ${record.found ? "\u2713" : "\xB7"} ${record.type.padEnd(5)} ${`${record.name}.${domain.domain}`.padEnd(28)} ${record.value}`
2834
- );
2835
- return lines;
2836
- }
2837
- async function runId(argv, env = process.env, options = {}) {
2838
- const { positional, flags } = parse(argv);
2839
- const [command, ...rest] = positional;
2840
- if (!command || flags.has("help") || command === "help") return HELP;
2841
- const dir = identityDir(env);
2842
- const json2 = flags.has("json");
2843
- const say = options.stderr ?? (() => {
2844
- });
2845
- const sleep2 = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
2846
- const client2 = (identity) => new IdClient(identity, baseUrl(env), options.fetch);
2847
- async function which() {
2848
- const named = flags.get("domain");
2849
- if (typeof named === "string") return loadIdentity(named, { dir, env });
2850
- if (env.PIDGEON_ID_KEY) return loadIdentity(env.PIDGEON_ID_KEY.split(":")[0], { dir, env });
2851
- const held = await listIdentities(dir);
2852
- if (held.length === 1) return loadIdentity(held[0], { dir, env });
2853
- if (held.length === 0)
2854
- throw new UsageError("No domain here yet. Start with `pidgeon id init <domain>`.");
2855
- throw new UsageError(`This machine holds ${held.join(", ")}. Say which with --domain.`);
2856
- }
2857
- try {
2858
- switch (command) {
2859
- case "init": {
2860
- const domain = rest[0]?.trim().toLowerCase().replace(/\.$/, "");
2861
- if (!domain || !DOMAIN.test(domain))
2862
- throw new UsageError("Name the domain: `pidgeon id init acme.com`.");
2863
- let identity;
2864
- let made = false;
2865
- try {
2866
- identity = await loadIdentity(domain, { dir, env });
2867
- } catch {
2868
- identity = generateIdentity(domain);
2869
- await saveIdentity(identity, dir);
2870
- made = true;
2871
- }
2872
- let state = await client2(identity).claim();
2873
- if (json2 && (state.status === "verified" || flags.has("no-wait")))
2874
- return JSON.stringify(state, null, 2);
2875
- const lines = [
2876
- made ? `Made a signing key for ${domain} on this machine (${identity.kid}).` : `Using the key for ${domain} on this machine.`
2877
- ];
2878
- if (state.status !== "verified") {
2879
- lines.push(
2880
- "",
2881
- state.setup_url ? `Add the records in one click: ${state.setup_url}
2882
-
2883
- Or add them by hand:` : "Add these records at your DNS provider:",
2884
- ...describeRecords(state),
2885
- "",
2886
- "The first proves the domain is yours. The second serves its keys and cards at",
2887
- `post.${domain}; without it Pidgeon still verifies your agents, and nobody else can.`
2888
- );
2889
- if (flags.has("no-wait")) return [...lines, "", "Then: pidgeon id check"].join("\n");
2890
- say(lines.join("\n"));
2891
- say("\nWaiting for DNS\u2026");
2892
- const deadline = Date.now() + Number(flags.get("timeout") ?? 600) * 1e3;
2893
- while (state.status !== "verified" && Date.now() < deadline) {
2894
- await sleep2(5e3);
2895
- state = await client2(identity).check();
2896
- }
2897
- if (state.status !== "verified") {
2898
- return "Not yet. DNS can take a while; run `pidgeon id check` once the record is in.";
2899
- }
2900
- lines.length = 0;
2901
- }
2902
- if (json2) return JSON.stringify(state, null, 2);
2903
- return [...lines, `${domain} is proved. Next: pidgeon id issue support-agent`].join("\n").trim();
2904
- }
2905
- case "check": {
2906
- const identity = rest[0] ? await loadIdentity(rest[0], { dir, env }) : await which();
2907
- const state = await client2(identity).check();
2908
- if (json2) return JSON.stringify(state, null, 2);
2909
- return [
2910
- `${state.domain}: ${state.status === "verified" ? "proved" : state.status}`,
2911
- ...describeRecords(state)
2912
- ].join("\n");
2913
- }
2914
- case "issue": {
2915
- const name = rest[0]?.trim().toLowerCase();
2916
- if (!name) throw new UsageError("Name the agent: `pidgeon id issue support-agent`.");
2917
- const identity = await which();
2918
- const kind = flags.get("kind");
2919
- if (kind !== void 0 && kind !== "agent" && kind !== "service") {
2920
- throw new UsageError("--kind is agent or service.");
2921
- }
2922
- const onBehalfOf = flags.get("on-behalf-of");
2923
- const card = await client2(identity).issue({
2924
- name,
2925
- ...kind ? { kind } : {},
2926
- ...typeof onBehalfOf === "string" ? { on_behalf_of: onBehalfOf } : {}
2927
- });
2928
- if (json2) return JSON.stringify(card, null, 2);
2929
- return [
2930
- `${card.card.address} has a card: ${card.url}`,
2931
- `Found from the address at https://post.${identity.domain}/.well-known/post/card?address=${card.card.address}`,
2932
- 'It renews itself. Sign with it: import { loadIdentity, signEmail, signedFetch } from "@pidgeon-ai/id".'
2933
- ].join("\n");
2934
- }
2935
- case "verify": {
2936
- const file = rest[0];
2937
- const message = file ? await (await import("fs/promises")).readFile(file, "utf8") : await (options.stdin ?? readStdin)();
2938
- if (!message.trim()) {
2939
- throw new UsageError("Give it a message: `pidgeon id verify < message.eml`.");
2940
- }
2941
- const response = await (options.fetch ?? fetch)(
2942
- `${new URL(baseUrl(env)).origin}/api/v1/verify`,
2943
- {
2944
- method: "POST",
2945
- headers: { "content-type": "application/json" },
2946
- body: JSON.stringify({ message })
2947
- }
2948
- );
2949
- const answer = await response.json();
2950
- if (!response.ok || !answer.data) {
2951
- throw new UsageError(
2952
- answer.error?.message ?? `The verifier answered ${response.status}.`
2953
- );
2954
- }
2955
- if (json2) return JSON.stringify(answer.data, null, 2);
2956
- return describeVerification(answer.data);
2957
- }
2958
- case "curl": {
2959
- const head = rest[0] === "-I";
2960
- const target = (head ? rest[1] : rest[0])?.trim();
2961
- if (!target) throw new UsageError("Name a URL: `pidgeon id curl -I shop.example`.");
2962
- const url = /^https?:\/\//.test(target) ? target : `https://${target}`;
2963
- const identity = await which();
2964
- const named = flags.get("as");
2965
- let agent;
2966
- if (typeof named === "string") {
2967
- agent = named.includes("@") ? named : `${named}@${identity.domain}`;
2968
- } else {
2969
- const agents = await client2(identity).list();
2970
- if (agents.length !== 1) {
2971
- throw new UsageError("Say which agent signs, with --as <name>.");
2972
- }
2973
- agent = agents[0].address;
2974
- }
2975
- const sent = {};
2976
- const signed = signedFetch(identity, {
2977
- agent,
2978
- fetch: async (resource, init) => {
2979
- new Headers(init?.headers).forEach((value, name) => {
2980
- if (/^(signature|signature-input|signature-agent|from|content-digest)$/.test(name)) {
2981
- sent[name] = value;
2982
- }
2983
- });
2984
- return (options.fetch ?? fetch)(resource, init);
2985
- }
2986
- });
2987
- const response = await signed(url, { method: head ? "HEAD" : "GET" });
2988
- const lines = Object.entries(sent).map(
2989
- ([name, value]) => `> ${capitalise(name)}: ${value}`
2990
- );
2991
- lines.push(`< ${response.status} ${response.statusText}`.trimEnd());
2992
- if (head) {
2993
- response.headers.forEach((value, name) => lines.push(`< ${capitalise(name)}: ${value}`));
2994
- return lines.join("\n");
2995
- }
2996
- return [...lines, "", await response.text()].join("\n");
2997
- }
2998
- case "list": {
2999
- const agents = await client2(await which()).list();
3000
- if (json2) return JSON.stringify(agents, null, 2);
3001
- if (agents.length === 0)
3002
- return "No agents yet. `pidgeon id issue <name>` gives one a card.";
3003
- return agents.map((agent) => `${agent.address} ${agent.kind} ${agent.card_url}`).join("\n");
3004
- }
3005
- case "revoke": {
3006
- const name = rest[0]?.trim().toLowerCase();
3007
- if (!name) throw new UsageError("Name the agent: `pidgeon id revoke support-agent`.");
3008
- const revoked = await client2(await which()).revoke(name);
3009
- if (json2) return JSON.stringify(revoked, null, 2);
3010
- return `${revoked.address} has no card from now on. Copies already fetched lapse within a day.`;
3011
- }
3012
- case "rotate": {
3013
- const current = await which();
3014
- const next = generateIdentity(current.domain);
3015
- const state = await client2(current).rotate(next);
3016
- next.previous = { kid: current.kid, publicKey: current.publicKey };
3017
- await saveIdentity(next, dir);
3018
- if (json2) return JSON.stringify(state, null, 2);
3019
- return `${current.domain} signs with ${next.kid} now. ${current.kid} still verifies for a day.`;
3020
- }
3021
- case "grant": {
3022
- const name = rest[0]?.trim().toLowerCase();
3023
- const scope = flags.get("scope");
3024
- const label = flags.get("label");
3025
- const subject = flags.get("subject");
3026
- if (!name || typeof scope !== "string" || typeof label !== "string") {
3027
- throw new UsageError(
3028
- 'Name the agent and the scope: `pidgeon id grant support-agent --scope bookings.change --label "manage bookings" --subject customer:42`.'
3029
- );
3030
- }
3031
- const [type, ...idParts] = typeof subject === "string" ? subject.split(":") : [];
3032
- if (!type || idParts.length === 0 || !["customer", "account", "order"].includes(type)) {
3033
- throw new UsageError("--subject is customer:<id>, account:<id> or order:<id>.");
3034
- }
3035
- const days = flags.get("days");
3036
- const audience = flags.get("audience");
3037
- const grantor = flags.get("grantor");
3038
- const grant = await client2(await which()).grant({
3039
- agent: name,
3040
- scope: { name: scope, label },
3041
- subject: { type, id: idParts.join(":") },
3042
- ...typeof audience === "string" ? { audience } : {},
3043
- ...typeof grantor === "string" ? { grantor: { email: grantor } } : {},
3044
- ...typeof days === "string" ? { expires_at: new Date(Date.now() + Number(days) * 864e5).toISOString() } : {}
3045
- });
3046
- if (json2) return JSON.stringify(grant, null, 2);
3047
- if (grant.consent_url) {
3048
- return [
3049
- `Asked ${typeof grantor === "string" ? grantor : "them"} to let ${grant.agent} ${grant.scope.label} for ${grant.subject.type} ${grant.subject.id}.`,
3050
- `Send them this link; nothing is allowed until they answer it: ${grant.consent_url}`,
3051
- `Grant ${grant.id}. \`pidgeon id revoke-grant ${grant.id}\` withdraws the request.`
3052
- ].join("\n");
3053
- }
3054
- return [
3055
- `${grant.agent} may ${grant.scope.label} for ${grant.subject.type} ${grant.subject.id}${grant.audience ? ` at ${grant.audience}` : ""}, until ${grant.expires_at}.`,
3056
- `Grant ${grant.id}. The agent carries it as Post-Grant; --json prints the JWS.`
3057
- ].join("\n");
3058
- }
3059
- case "revoke-grant": {
3060
- const grantId = rest[0]?.trim();
3061
- if (!grantId) throw new UsageError("Name the grant: `pidgeon id revoke-grant <id>`.");
3062
- const revoked = await client2(await which()).revokeGrant(grantId);
3063
- if (json2) return JSON.stringify(revoked, null, 2);
3064
- return `Grant ${revoked.id} is revoked. The next check of it fails.`;
3065
- }
3066
- case "revoke-sign-ins": {
3067
- const name = rest[0]?.trim().toLowerCase();
3068
- if (!name)
3069
- throw new UsageError("Name the agent: `pidgeon id revoke-sign-ins support-agent`.");
3070
- const done = await client2(await which()).revokeSignIns(name);
3071
- if (json2) return JSON.stringify(done, null, 2);
3072
- return `${done.address}: ${done.revoked} token${done.revoked === 1 ? "" : "s"} taken back. Its card and grants stand.`;
3073
- }
3074
- case "sign-in": {
3075
- const site = rest[0];
3076
- const name = flags.get("as");
3077
- if (!site || typeof name !== "string") {
3078
- throw new UsageError(
3079
- "Name the site and the agent: `pidgeon id sign-in https://site.example/api/auth/pidgeon/token --as support-agent`."
3080
- );
3081
- }
3082
- const identity = await which();
3083
- const card = await client2(identity).issue({ name: name.trim().toLowerCase() });
3084
- const grant = flags.get("grant");
3085
- try {
3086
- const signedIn = await signInWithPidgeon(identity, {
3087
- agent: card.card.address,
3088
- site,
3089
- card: card.jws,
3090
- ...typeof grant === "string" ? { grant } : {},
3091
- ...options.fetch ? { fetch: options.fetch } : {}
3092
- });
3093
- if (json2) return JSON.stringify(signedIn.site, null, 2);
3094
- return `Signed in to ${new URL(site).host} as ${card.card.address}.
3095
- ${JSON.stringify(signedIn.site, null, 2)}`;
3096
- } catch (error) {
3097
- if (error instanceof SignInError) throw new Error(`${error.step}: ${error.message}`);
3098
- throw error;
3099
- }
3100
- }
3101
- default:
3102
- throw new UsageError(`No such command "${command}".
3103
-
3104
- ${HELP}`);
3105
- }
3106
- } catch (error) {
3107
- if (error instanceof IdApiError) {
3108
- throw new Error(error.code ? `${error.code}: ${error.message}` : error.message);
3109
- }
3110
- throw error;
3111
- }
3112
- }
3113
- function describeVerification(v) {
3114
- const signer = v.signatures.envelope.domain ?? v.signatures.declaration.domain;
3115
- const signed = v.signatures.envelope.result === "pass" || v.signatures.declaration.result === "pass";
3116
- const broken = v.signatures.envelope.result === "fail" || v.signatures.declaration.result === "fail";
3117
- const row = (ok, label, value) => `${ok === null ? "\xB7" : ok ? "\u2713" : "\u2717"} ${label.padEnd(10)} ${value}`;
3118
- return [
3119
- row(
3120
- signed && !broken,
3121
- "signature",
3122
- signed && !broken ? `valid, ${signer}` : broken ? `broken${signer ? `, ${signer}` : ""}` : "none"
3123
- ),
3124
- row(v.is_agent, "agent", v.sender?.address ?? "not declared"),
3125
- row(v.sender?.on_behalf_of ? true : null, "acts for", v.sender?.on_behalf_of ?? "not said"),
3126
- row(
3127
- v.body === "not_checked" ? null : v.body === "intact",
3128
- "body",
3129
- v.body === "intact" ? "as it was sent" : v.body === "changed" ? "changed since" : "not checked"
3130
- ),
3131
- "",
3132
- v.advice
3133
- ].join("\n");
3134
- }
3135
- function capitalise(name) {
3136
- return name.replace(
3137
- /(^|-)([a-z])/g,
3138
- (_, dash, letter) => dash + letter.toUpperCase()
3139
- );
3140
- }
3141
- async function readStdin() {
3142
- const chunks = [];
3143
- for await (const chunk of process.stdin) chunks.push(chunk);
3144
- return Buffer.concat(chunks).toString("utf8");
3145
- }
3146
-
3147
- // src/index.ts
3148
- var DEFAULT_BASE_URL = "https://pidgeon.ai/api/v1";
3149
- var UsageError2 = class extends Error {
3150
- };
3151
- var ApiError = class extends Error {
3152
- constructor(status, code, message) {
3153
- super(code ? `${status} ${code}: ${message}` : `${status}: ${message}`);
3154
- this.status = status;
3155
- this.code = code;
3156
- }
3157
- status;
3158
- code;
3159
- };
3160
- function coerce(flag, raw) {
3161
- if (flag.kind === "number") {
3162
- const value = Number(raw);
3163
- if (Number.isNaN(value)) throw new UsageError2(`--${flag.name} takes a number, not "${raw}".`);
3164
- return value;
3165
- }
3166
- if (flag.kind === "json") {
3167
- try {
3168
- return JSON.parse(raw);
3169
- } catch {
3170
- throw new UsageError2(`--${flag.name} takes JSON, and that did not parse.`);
3171
- }
3172
- }
3173
- return raw;
3174
- }
3175
- function parse2(command, argv) {
3176
- const byName = new Map(command.flags.map((flag) => [flag.name, flag]));
3177
- const out = { path: {}, query: {}, body: {}, header: {} };
3178
- for (let i = 0; i < argv.length; i++) {
3179
- const token = argv[i];
3180
- if (!token.startsWith("--")) throw new UsageError2(`Unexpected argument "${token}".`);
3181
- const [name, inline] = token.slice(2).split(/=([\s\S]*)/, 2);
3182
- const flag = byName.get(name);
3183
- if (!flag) {
3184
- throw new UsageError2(
3185
- `\`${command.group} ${command.name}\` has no --${name}. Try \`pidgeon ${command.group} ${command.name} --help\`.`
3186
- );
3187
- }
3188
- if (flag.kind === "boolean") {
3189
- out[flag.where][name] = inline === void 0 ? true : inline === "true";
3190
- continue;
3191
- }
3192
- const raw = inline ?? argv[++i];
3193
- if (raw === void 0) throw new UsageError2(`--${name} needs a value.`);
3194
- if (flag.kind === "list") {
3195
- const existing = out[flag.where][name] ?? [];
3196
- out[flag.where][name] = [...existing, raw];
3197
- continue;
3198
- }
3199
- out[flag.where][name] = coerce(flag, raw);
3200
- }
3201
- const missing = command.flags.filter((flag) => flag.required).filter((flag) => out[flag.where][flag.name] === void 0).map((flag) => `--${flag.name}`);
3202
- if (missing.length > 0) {
3203
- throw new UsageError2(`\`${command.group} ${command.name}\` needs ${missing.join(", ")}.`);
3204
- }
3205
- return out;
3206
- }
3207
- function help(command) {
3208
- if (!command) {
3209
- const groups = [...new Set(COMMANDS.map((c) => c.group))].sort();
3210
- return [
3211
- "pidgeon <group> <command> [--flags]",
3212
- "",
3213
- "Groups:",
3214
- ...groups.map((group) => {
3215
- const names = COMMANDS.filter((c) => c.group === group).map((c) => c.name);
3216
- return ` ${group.padEnd(14)}${names.join(", ")}`;
3217
- }),
3218
- "",
3219
- "An API key goes in PIDGEON_API_KEY. `pidgeon <group> <command> --help`",
3220
- "describes one command; --verbose prints what was sent, on stderr.",
3221
- "",
3222
- "`pidgeon id` gives agents on your own domain a signed identity, with no",
3223
- "account and no key: `pidgeon id help`."
3224
- ].join("\n");
3225
- }
3226
- const flags = command.flags.map((flag) => {
3227
- const takes = flag.choices?.length ? flag.choices.join("|") : flag.kind;
3228
- const label = ` --${flag.name}${flag.kind === "boolean" ? "" : ` <${takes}>`}`;
3229
- const note = [flag.required ? "required" : null, flag.describe].filter(Boolean).join(" \u2014 ");
3230
- if (!note) return label;
3231
- return `${label.padEnd(34)}${label.length >= 34 ? " " : ""}${note}`;
3232
- });
3233
- return [
3234
- `pidgeon ${command.group} ${command.name} [--flags]`,
3235
- "",
3236
- ` ${command.summary}`,
3237
- ` ${command.method} ${command.path}`,
3238
- "",
3239
- ...flags.length > 0 ? ["Flags:", ...flags] : ["Takes no flags."]
3240
- ].join("\n");
3241
- }
3242
- function headersFor(command, parsed) {
3243
- const headers = {};
3244
- for (const flag of command.flags) {
3245
- if (flag.where !== "header" || !flag.header) continue;
3246
- const given = parsed.header[flag.name];
3247
- if (typeof given === "string") headers[flag.header] = given;
3248
- else if (flag.header === "Idempotency-Key") headers[flag.header] = crypto.randomUUID();
3249
- }
3250
- return headers;
3251
- }
3252
- function find(group, name) {
3253
- return COMMANDS.find((c) => c.group === group && c.name === name);
3254
- }
3255
- async function run(argv, env, options = {}) {
3256
- const verbose = argv.includes("--verbose");
3257
- const [group, name, ...rest] = argv.filter((token) => token !== "--verbose");
3258
- if (!group || group === "--help" || group === "help") return help();
3259
- if (group === "id") {
3260
- try {
3261
- return await runId(argv.slice(1), env, { stderr: options.stderr });
3262
- } catch (error2) {
3263
- if (error2 instanceof UsageError) throw new UsageError2(error2.message);
3264
- throw error2;
3265
- }
3266
- }
3267
- const command = find(group, name);
3268
- if (!command) {
3269
- const known = COMMANDS.filter((c) => c.group === group);
3270
- if (known.length === 0) throw new UsageError2(`No such group "${group}".
3271
-
3272
- ${help()}`);
3273
- throw new UsageError2(
3274
- `\`${group}\` has no "${name ?? ""}" command. It has: ${known.map((c) => c.name).join(", ")}.`
3275
- );
3276
- }
3277
- if (rest.includes("--help")) return help(command);
3278
- const apiKey = env.PIDGEON_API_KEY;
3279
- if (!apiKey) {
3280
- throw new UsageError2(
3281
- "PIDGEON_API_KEY is not set. Create a key at https://pidgeon.ai/app/developers/keys."
3282
- );
3283
- }
3284
- const parsed = parse2(command, rest);
3285
- const headers = headersFor(command, parsed);
3286
- const idempotencyKey = headers["Idempotency-Key"];
3287
- if (verbose && idempotencyKey) options.stderr?.(`Idempotency-Key: ${idempotencyKey}`);
3288
- client.setConfig(
3289
- createConfig({
3290
- baseUrl: env.PIDGEON_BASE_URL ?? DEFAULT_BASE_URL,
3291
- auth: () => apiKey,
3292
- // Ours by name, so an account made from a terminal reads as the CLI
3293
- // rather than as the SDK it bundles (`src/lib/analytics/client.ts`).
3294
- headers: { "User-Agent": "@pidgeon-ai/cli" }
3295
- })
3296
- );
3297
- const call = dist_exports[command.operationId];
3298
- if (typeof call !== "function") {
3299
- throw new Error(`The SDK does not export \`${command.operationId}\`. Run \`pnpm sdk\`.`);
3300
- }
3301
- const retry = idempotencyKey ? ` It may have been sent: retry with --idempotency-key ${idempotencyKey} and it goes out at most once.` : "";
3302
- let answer;
3303
- try {
3304
- answer = await call({
3305
- ...Object.keys(parsed.path).length > 0 ? { path: parsed.path } : {},
3306
- ...Object.keys(parsed.query).length > 0 ? { query: parsed.query } : {},
3307
- ...Object.keys(parsed.body).length > 0 ? { body: parsed.body } : {},
3308
- ...Object.keys(headers).length > 0 ? { headers } : {}
3309
- });
3310
- } catch (thrown) {
3311
- const reason = thrown instanceof Error ? thrown.message : "The request failed.";
3312
- throw new Error(`${reason}${retry ? `
3313
- ${retry.trim()}` : ""}`);
3314
- }
3315
- const { data, error, response } = answer;
3316
- if (verbose && response.headers.get("Idempotent-Replay") === "true") {
3317
- options.stderr?.("Idempotent-Replay: true \u2014 answered from the first send; nothing sent again.");
3318
- }
3319
- if (error !== void 0) {
3320
- const detail = error?.error;
3321
- const message = detail?.message ?? (typeof error === "string" && error ? error.slice(0, 500) : "The request failed.");
3322
- throw new ApiError(
3323
- response.status,
3324
- detail?.code,
3325
- response.status >= 500 ? message + retry : message
3326
- );
3327
- }
3328
- return JSON.stringify(data, null, 2);
3329
- }
3330
-
3331
- export {
3332
- UsageError2 as UsageError,
3333
- ApiError,
3334
- parse2 as parse,
3335
- help,
3336
- find,
3337
- run
3338
- };
3339
- //# sourceMappingURL=chunk-GUHWCV3V.js.map