burnledger 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +182 -0
  2. package/dist/cjs/cli.d.ts +16 -0
  3. package/dist/cjs/cli.d.ts.map +1 -0
  4. package/dist/cjs/cli.js +168 -0
  5. package/dist/cjs/cli.js.map +1 -0
  6. package/dist/cjs/client.d.ts +116 -0
  7. package/dist/cjs/client.d.ts.map +1 -0
  8. package/dist/cjs/client.js +353 -0
  9. package/dist/cjs/client.js.map +1 -0
  10. package/dist/cjs/crypto-browser.d.ts +7 -0
  11. package/dist/cjs/crypto-browser.d.ts.map +1 -0
  12. package/dist/cjs/crypto-browser.js +37 -0
  13. package/dist/cjs/crypto-browser.js.map +1 -0
  14. package/dist/cjs/crypto-node.d.ts +4 -0
  15. package/dist/cjs/crypto-node.d.ts.map +1 -0
  16. package/dist/cjs/crypto-node.js +30 -0
  17. package/dist/cjs/crypto-node.js.map +1 -0
  18. package/dist/cjs/crypto.d.ts +6 -0
  19. package/dist/cjs/crypto.d.ts.map +1 -0
  20. package/dist/cjs/crypto.js +4 -0
  21. package/dist/cjs/crypto.js.map +1 -0
  22. package/dist/cjs/errors.d.ts +76 -0
  23. package/dist/cjs/errors.d.ts.map +1 -0
  24. package/dist/cjs/errors.js +119 -0
  25. package/dist/cjs/errors.js.map +1 -0
  26. package/dist/cjs/http.d.ts +35 -0
  27. package/dist/cjs/http.d.ts.map +1 -0
  28. package/dist/cjs/http.js +160 -0
  29. package/dist/cjs/http.js.map +1 -0
  30. package/dist/cjs/index.browser.d.ts +31 -0
  31. package/dist/cjs/index.browser.d.ts.map +1 -0
  32. package/dist/cjs/index.browser.js +54 -0
  33. package/dist/cjs/index.browser.js.map +1 -0
  34. package/dist/cjs/index.d.ts +26 -0
  35. package/dist/cjs/index.d.ts.map +1 -0
  36. package/dist/cjs/index.js +50 -0
  37. package/dist/cjs/index.js.map +1 -0
  38. package/dist/cjs/keys.d.ts +12 -0
  39. package/dist/cjs/keys.d.ts.map +1 -0
  40. package/dist/cjs/keys.js +17 -0
  41. package/dist/cjs/keys.js.map +1 -0
  42. package/dist/cjs/models.d.ts +197 -0
  43. package/dist/cjs/models.d.ts.map +1 -0
  44. package/dist/cjs/models.js +246 -0
  45. package/dist/cjs/models.js.map +1 -0
  46. package/dist/cjs/package.json +1 -0
  47. package/dist/cjs/pagination.d.ts +21 -0
  48. package/dist/cjs/pagination.d.ts.map +1 -0
  49. package/dist/cjs/pagination.js +50 -0
  50. package/dist/cjs/pagination.js.map +1 -0
  51. package/dist/cjs/verify.d.ts +50 -0
  52. package/dist/cjs/verify.d.ts.map +1 -0
  53. package/dist/cjs/verify.js +500 -0
  54. package/dist/cjs/verify.js.map +1 -0
  55. package/dist/cjs/webhooks.d.ts +36 -0
  56. package/dist/cjs/webhooks.d.ts.map +1 -0
  57. package/dist/cjs/webhooks.js +71 -0
  58. package/dist/cjs/webhooks.js.map +1 -0
  59. package/dist/esm/cli.d.ts +16 -0
  60. package/dist/esm/cli.d.ts.map +1 -0
  61. package/dist/esm/cli.js +164 -0
  62. package/dist/esm/cli.js.map +1 -0
  63. package/dist/esm/client.d.ts +116 -0
  64. package/dist/esm/client.d.ts.map +1 -0
  65. package/dist/esm/client.js +316 -0
  66. package/dist/esm/client.js.map +1 -0
  67. package/dist/esm/crypto-browser.d.ts +7 -0
  68. package/dist/esm/crypto-browser.d.ts.map +1 -0
  69. package/dist/esm/crypto-browser.js +34 -0
  70. package/dist/esm/crypto-browser.js.map +1 -0
  71. package/dist/esm/crypto-node.d.ts +4 -0
  72. package/dist/esm/crypto-node.d.ts.map +1 -0
  73. package/dist/esm/crypto-node.js +27 -0
  74. package/dist/esm/crypto-node.js.map +1 -0
  75. package/dist/esm/crypto.d.ts +6 -0
  76. package/dist/esm/crypto.d.ts.map +1 -0
  77. package/dist/esm/crypto.js +3 -0
  78. package/dist/esm/crypto.js.map +1 -0
  79. package/dist/esm/errors.d.ts +76 -0
  80. package/dist/esm/errors.d.ts.map +1 -0
  81. package/dist/esm/errors.js +105 -0
  82. package/dist/esm/errors.js.map +1 -0
  83. package/dist/esm/http.d.ts +35 -0
  84. package/dist/esm/http.d.ts.map +1 -0
  85. package/dist/esm/http.js +156 -0
  86. package/dist/esm/http.js.map +1 -0
  87. package/dist/esm/index.browser.d.ts +31 -0
  88. package/dist/esm/index.browser.d.ts.map +1 -0
  89. package/dist/esm/index.browser.js +31 -0
  90. package/dist/esm/index.browser.js.map +1 -0
  91. package/dist/esm/index.d.ts +26 -0
  92. package/dist/esm/index.d.ts.map +1 -0
  93. package/dist/esm/index.js +26 -0
  94. package/dist/esm/index.js.map +1 -0
  95. package/dist/esm/keys.d.ts +12 -0
  96. package/dist/esm/keys.d.ts.map +1 -0
  97. package/dist/esm/keys.js +14 -0
  98. package/dist/esm/keys.js.map +1 -0
  99. package/dist/esm/models.d.ts +197 -0
  100. package/dist/esm/models.d.ts.map +1 -0
  101. package/dist/esm/models.js +226 -0
  102. package/dist/esm/models.js.map +1 -0
  103. package/dist/esm/pagination.d.ts +21 -0
  104. package/dist/esm/pagination.d.ts.map +1 -0
  105. package/dist/esm/pagination.js +46 -0
  106. package/dist/esm/pagination.js.map +1 -0
  107. package/dist/esm/verify.d.ts +50 -0
  108. package/dist/esm/verify.d.ts.map +1 -0
  109. package/dist/esm/verify.js +491 -0
  110. package/dist/esm/verify.js.map +1 -0
  111. package/dist/esm/webhooks.d.ts +36 -0
  112. package/dist/esm/webhooks.d.ts.map +1 -0
  113. package/dist/esm/webhooks.js +67 -0
  114. package/dist/esm/webhooks.js.map +1 -0
  115. package/package.json +65 -0
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /** Exception hierarchy for the BurnLedger SDK.
3
+ *
4
+ * Maps HTTP status codes to typed errors. Every error includes
5
+ * enough context for log correlation.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.VerificationError = exports.TimeoutError = exports.ServerError = exports.RateLimitError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.AuthenticationError = exports.ApiError = exports.BurnLedgerError = void 0;
9
+ exports.raiseForError = raiseForError;
10
+ class BurnLedgerError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = "BurnLedgerError";
14
+ }
15
+ }
16
+ exports.BurnLedgerError = BurnLedgerError;
17
+ class ApiError extends BurnLedgerError {
18
+ code;
19
+ statusCode;
20
+ requestId;
21
+ constructor(opts) {
22
+ super(`[${opts.statusCode}] ${opts.code}: ${opts.message} (request_id=${opts.requestId})`);
23
+ this.name = "ApiError";
24
+ this.code = opts.code;
25
+ this.statusCode = opts.statusCode;
26
+ this.requestId = opts.requestId;
27
+ }
28
+ }
29
+ exports.ApiError = ApiError;
30
+ class AuthenticationError extends ApiError {
31
+ constructor(opts) {
32
+ super({ ...opts, statusCode: 401 });
33
+ this.name = "AuthenticationError";
34
+ }
35
+ }
36
+ exports.AuthenticationError = AuthenticationError;
37
+ class NotFoundError extends ApiError {
38
+ constructor(opts) {
39
+ super({ ...opts, statusCode: 404 });
40
+ this.name = "NotFoundError";
41
+ }
42
+ }
43
+ exports.NotFoundError = NotFoundError;
44
+ class ConflictError extends ApiError {
45
+ constructor(opts) {
46
+ super({ ...opts, statusCode: 409 });
47
+ this.name = "ConflictError";
48
+ }
49
+ }
50
+ exports.ConflictError = ConflictError;
51
+ class ValidationError extends ApiError {
52
+ constructor(opts) {
53
+ super({ ...opts, statusCode: 422 });
54
+ this.name = "ValidationError";
55
+ }
56
+ }
57
+ exports.ValidationError = ValidationError;
58
+ class RateLimitError extends ApiError {
59
+ retryAfter;
60
+ constructor(opts) {
61
+ super({ ...opts, statusCode: 429 });
62
+ this.name = "RateLimitError";
63
+ this.retryAfter = opts.retryAfter;
64
+ }
65
+ }
66
+ exports.RateLimitError = RateLimitError;
67
+ class ServerError extends ApiError {
68
+ constructor(opts) {
69
+ super(opts);
70
+ this.name = "ServerError";
71
+ }
72
+ }
73
+ exports.ServerError = ServerError;
74
+ class TimeoutError extends BurnLedgerError {
75
+ operation;
76
+ elapsed;
77
+ constructor(operation, elapsed) {
78
+ super(`${operation}: timed out after ${elapsed.toFixed(1)}s`);
79
+ this.name = "TimeoutError";
80
+ this.operation = operation;
81
+ this.elapsed = elapsed;
82
+ }
83
+ }
84
+ exports.TimeoutError = TimeoutError;
85
+ class VerificationError extends BurnLedgerError {
86
+ reason;
87
+ constructor(reason) {
88
+ super(reason);
89
+ this.name = "VerificationError";
90
+ this.reason = reason;
91
+ }
92
+ }
93
+ exports.VerificationError = VerificationError;
94
+ const STATUS_TO_CLASS = {
95
+ 401: AuthenticationError,
96
+ 404: NotFoundError,
97
+ 409: ConflictError,
98
+ 422: ValidationError,
99
+ 429: RateLimitError,
100
+ };
101
+ /** Parse an API error envelope and throw the appropriate exception. */
102
+ function raiseForError(statusCode, body, retryAfter) {
103
+ const err = (body.error ?? {});
104
+ const code = err.code ?? "UNKNOWN";
105
+ const message = err.message ?? "";
106
+ const requestId = err.request_id ?? "";
107
+ const Cls = STATUS_TO_CLASS[statusCode];
108
+ if (Cls === RateLimitError) {
109
+ throw new RateLimitError({ code, message, requestId, retryAfter });
110
+ }
111
+ if (Cls) {
112
+ throw new Cls({ code, message, requestId });
113
+ }
114
+ if (statusCode >= 500) {
115
+ throw new ServerError({ code, message, requestId, statusCode });
116
+ }
117
+ throw new ApiError({ code, message, requestId, statusCode });
118
+ }
119
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** HTTP transport layer wrapping native fetch.
2
+ *
3
+ * Handles: Bearer auth, response envelope unwrapping, retry on 5xx/transport
4
+ * errors, Retry-After respect on 429, and raw byte streaming for PDFs.
5
+ */
6
+ export interface TransportOptions {
7
+ baseUrl: string;
8
+ apiKey: string;
9
+ timeout: number;
10
+ maxRetries: number;
11
+ }
12
+ export declare class Transport {
13
+ private readonly baseUrl;
14
+ private readonly apiKey;
15
+ private readonly timeout;
16
+ private readonly maxRetries;
17
+ constructor(opts: TransportOptions);
18
+ /** Make a request and return the unwrapped `data` field. */
19
+ request(method: string, path: string, opts?: {
20
+ json?: unknown;
21
+ params?: Record<string, string | number>;
22
+ authenticated?: boolean;
23
+ }): Promise<unknown>;
24
+ /** Make a request and return the full response envelope (for pagination). */
25
+ requestRaw(method: string, path: string, opts?: {
26
+ json?: unknown;
27
+ params?: Record<string, string | number>;
28
+ authenticated?: boolean;
29
+ }): Promise<Record<string, unknown>>;
30
+ /** Make a request and return raw bytes (for PDF downloads). */
31
+ requestBytes(method: string, path: string, opts?: {
32
+ authenticated?: boolean;
33
+ }): Promise<Uint8Array>;
34
+ }
35
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,EAAE,gBAAgB;IAOlC,4DAA4D;IACtD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACzC,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GACA,OAAO,CAAC,OAAO,CAAC;IAKnB,6EAA6E;IACvE,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACzC,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GACA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA2FnC,+DAA+D;IACzD,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,OAAO,CAAC,UAAU,CAAC;CAyBvB"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /** HTTP transport layer wrapping native fetch.
3
+ *
4
+ * Handles: Bearer auth, response envelope unwrapping, retry on 5xx/transport
5
+ * errors, Retry-After respect on 429, and raw byte streaming for PDFs.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.Transport = void 0;
9
+ const errors_js_1 = require("./errors.js");
10
+ class Transport {
11
+ baseUrl;
12
+ apiKey;
13
+ timeout;
14
+ maxRetries;
15
+ constructor(opts) {
16
+ this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
17
+ this.apiKey = opts.apiKey;
18
+ this.timeout = opts.timeout;
19
+ this.maxRetries = opts.maxRetries;
20
+ }
21
+ /** Make a request and return the unwrapped `data` field. */
22
+ async request(method, path, opts) {
23
+ const envelope = await this.requestRaw(method, path, opts);
24
+ return envelope.data;
25
+ }
26
+ /** Make a request and return the full response envelope (for pagination). */
27
+ async requestRaw(method, path, opts) {
28
+ const authenticated = opts?.authenticated ?? true;
29
+ const headers = {
30
+ Accept: "application/json",
31
+ };
32
+ if (authenticated) {
33
+ headers["Authorization"] = `Bearer ${this.apiKey}`;
34
+ }
35
+ let url = `${this.baseUrl}${path}`;
36
+ if (opts?.params) {
37
+ const qs = new URLSearchParams();
38
+ for (const [k, v] of Object.entries(opts.params)) {
39
+ qs.set(k, String(v));
40
+ }
41
+ url += `?${qs.toString()}`;
42
+ }
43
+ const body = opts?.json !== undefined ? JSON.stringify(opts.json) : undefined;
44
+ if (body !== undefined) {
45
+ headers["Content-Type"] = "application/json";
46
+ }
47
+ if (method.toUpperCase() === "POST") {
48
+ // One key per logical call, reused across all retries of this call, so a
49
+ // 5xx/transport retry is deduplicated by the server instead of issuing a
50
+ // second certificate.
51
+ headers["Idempotency-Key"] = randomIdempotencyKey();
52
+ }
53
+ let lastError;
54
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
55
+ if (attempt > 0) {
56
+ // Backoff with ±25% jitter so coordinated 5xx events don't produce
57
+ // a synchronized retry storm from every client at the same instant.
58
+ const base = 500 * 2 ** (attempt - 1);
59
+ const jitter = base * 0.25 * (Math.random() * 2 - 1);
60
+ await sleep(base + jitter);
61
+ }
62
+ const controller = new AbortController();
63
+ const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
64
+ let resp;
65
+ try {
66
+ resp = await fetch(url, {
67
+ method,
68
+ headers,
69
+ body,
70
+ signal: controller.signal,
71
+ });
72
+ }
73
+ catch (err) {
74
+ clearTimeout(timer);
75
+ lastError = err instanceof Error ? err : new Error(String(err));
76
+ continue;
77
+ }
78
+ finally {
79
+ clearTimeout(timer);
80
+ }
81
+ if (resp.status === 204) {
82
+ return {};
83
+ }
84
+ if (resp.status === 429) {
85
+ const retryAfter = parseRetryAfter(resp);
86
+ const errorBody = await safeJson(resp);
87
+ (0, errors_js_1.raiseForError)(resp.status, errorBody, retryAfter);
88
+ }
89
+ if (resp.status >= 500 && attempt < this.maxRetries) {
90
+ lastError = new Error(`Server error ${resp.status}`);
91
+ continue;
92
+ }
93
+ if (resp.status >= 400) {
94
+ const errorBody = await safeJson(resp);
95
+ (0, errors_js_1.raiseForError)(resp.status, errorBody);
96
+ }
97
+ return (await resp.json());
98
+ }
99
+ throw new Error(`Request failed after ${this.maxRetries + 1} attempts: ${lastError?.message}`);
100
+ }
101
+ /** Make a request and return raw bytes (for PDF downloads). */
102
+ async requestBytes(method, path, opts) {
103
+ const authenticated = opts?.authenticated ?? true;
104
+ const headers = {};
105
+ if (authenticated) {
106
+ headers["Authorization"] = `Bearer ${this.apiKey}`;
107
+ }
108
+ const url = `${this.baseUrl}${path}`;
109
+ const controller = new AbortController();
110
+ const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
111
+ let resp;
112
+ try {
113
+ resp = await fetch(url, { method, headers, signal: controller.signal });
114
+ }
115
+ finally {
116
+ clearTimeout(timer);
117
+ }
118
+ if (resp.status >= 400) {
119
+ const errorBody = await safeJson(resp);
120
+ (0, errors_js_1.raiseForError)(resp.status, errorBody);
121
+ }
122
+ return new Uint8Array(await resp.arrayBuffer());
123
+ }
124
+ }
125
+ exports.Transport = Transport;
126
+ function parseRetryAfter(resp) {
127
+ const raw = resp.headers.get("Retry-After");
128
+ if (raw == null)
129
+ return undefined;
130
+ const n = Number(raw);
131
+ return Number.isFinite(n) ? n : undefined;
132
+ }
133
+ async function safeJson(resp) {
134
+ // Read once. resp.json() consumes the stream on failure too — calling
135
+ // resp.text() afterward would throw "body already used" and the real
136
+ // status code would be lost.
137
+ const text = await resp.text();
138
+ try {
139
+ return JSON.parse(text);
140
+ }
141
+ catch {
142
+ return {
143
+ error: { code: "UNKNOWN", message: text, request_id: "" },
144
+ };
145
+ }
146
+ }
147
+ function sleep(ms) {
148
+ return new Promise((resolve) => setTimeout(resolve, ms));
149
+ }
150
+ // randomIdempotencyKey returns a RFC 4122 v4 UUID using the Web Crypto API,
151
+ // available in both browsers and Node 18+ (wherever fetch is present).
152
+ function randomIdempotencyKey() {
153
+ const b = new Uint8Array(16);
154
+ globalThis.crypto.getRandomValues(b);
155
+ b[6] = (b[6] & 0x0f) | 0x40; // version 4
156
+ b[8] = (b[8] & 0x3f) | 0x80; // variant 10
157
+ const h = Array.from(b, (x) => x.toString(16).padStart(2, "0")).join("");
158
+ return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
159
+ }
160
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /** BurnLedger TypeScript SDK — browser entry point.
2
+ *
3
+ * Uses WebCrypto (crypto.subtle) for Ed25519 and SHA-256.
4
+ * Requires Chrome 113+, Firefox 128+, or Safari 17+.
5
+ *
6
+ * Does NOT export verifyWebhookSignature (server-side only, uses node:crypto).
7
+ */
8
+ export { BurnLedger } from "./client.js";
9
+ export type { BurnLedgerOptions } from "./client.js";
10
+ export { BurnLedgerError, ApiError, AuthenticationError, NotFoundError, ConflictError, ValidationError, RateLimitError, ServerError, TimeoutError, VerificationError, } from "./errors.js";
11
+ export { Transport } from "./http.js";
12
+ export type { TransportOptions } from "./http.js";
13
+ export type { ProofMode, AttestationStatus, CertificateStatus, TransparencyStatus, HealthStatus, ConnectorType, HashScope, LogEntryType, VerificationResult, TransparencyResult, System, SystemAttestation, Attestation, VerificationSystem, VerifyResult, CertificateResponse, RevocationStatus, Webhook, SignedTreeHead, LogEntry, InclusionProof, ConsistencyProof, } from "./models.js";
14
+ export { Paginator } from "./pagination.js";
15
+ export type { CryptoOps } from "./crypto.js";
16
+ export type { PublicKeyInfo } from "./verify.js";
17
+ export { issuanceBytes, hexToBytes, bytesToHex } from "./verify.js";
18
+ import type { PublicKeyInfo } from "./verify.js";
19
+ import type { VerificationResult, TransparencyResult } from "./models.js";
20
+ type Cert = Record<string, unknown>;
21
+ /** Verify all signatures on a deletion certificate offline. */
22
+ export declare function verifyCertificate(certificate: Cert, publicKeys: Map<string, PublicKeyInfo>): Promise<VerificationResult>;
23
+ /** Verify the transparency proof embedded in a certificate. */
24
+ export declare function verifyTransparency(certificate: Cert, publicKeys: Map<string, PublicKeyInfo>): Promise<TransparencyResult>;
25
+ /** Construct a PublicKeyInfo from a hex-encoded Ed25519 public key. */
26
+ export declare function publicKeyFromHex(hexKey: string, opts?: {
27
+ revoked?: boolean;
28
+ }): Promise<PublicKeyInfo>;
29
+ /** Verify a Merkle consistency proof between two tree states (RFC 6962). */
30
+ export declare function verifyConsistency(oldSize: number, newSize: number, oldRoot: Uint8Array, newRoot: Uint8Array, proof: Uint8Array[]): Promise<boolean>;
31
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,EACN,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE1E,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /** BurnLedger TypeScript SDK — browser entry point.
3
+ *
4
+ * Uses WebCrypto (crypto.subtle) for Ed25519 and SHA-256.
5
+ * Requires Chrome 113+, Firefox 128+, or Safari 17+.
6
+ *
7
+ * Does NOT export verifyWebhookSignature (server-side only, uses node:crypto).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.bytesToHex = exports.hexToBytes = exports.issuanceBytes = exports.Paginator = exports.Transport = exports.VerificationError = exports.TimeoutError = exports.ServerError = exports.RateLimitError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.AuthenticationError = exports.ApiError = exports.BurnLedgerError = exports.BurnLedger = void 0;
11
+ exports.verifyCertificate = verifyCertificate;
12
+ exports.verifyTransparency = verifyTransparency;
13
+ exports.publicKeyFromHex = publicKeyFromHex;
14
+ exports.verifyConsistency = verifyConsistency;
15
+ var client_js_1 = require("./client.js");
16
+ Object.defineProperty(exports, "BurnLedger", { enumerable: true, get: function () { return client_js_1.BurnLedger; } });
17
+ var errors_js_1 = require("./errors.js");
18
+ Object.defineProperty(exports, "BurnLedgerError", { enumerable: true, get: function () { return errors_js_1.BurnLedgerError; } });
19
+ Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return errors_js_1.ApiError; } });
20
+ Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return errors_js_1.AuthenticationError; } });
21
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_js_1.NotFoundError; } });
22
+ Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return errors_js_1.ConflictError; } });
23
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
24
+ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_js_1.RateLimitError; } });
25
+ Object.defineProperty(exports, "ServerError", { enumerable: true, get: function () { return errors_js_1.ServerError; } });
26
+ Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return errors_js_1.TimeoutError; } });
27
+ Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return errors_js_1.VerificationError; } });
28
+ var http_js_1 = require("./http.js");
29
+ Object.defineProperty(exports, "Transport", { enumerable: true, get: function () { return http_js_1.Transport; } });
30
+ var pagination_js_1 = require("./pagination.js");
31
+ Object.defineProperty(exports, "Paginator", { enumerable: true, get: function () { return pagination_js_1.Paginator; } });
32
+ var verify_js_1 = require("./verify.js");
33
+ Object.defineProperty(exports, "issuanceBytes", { enumerable: true, get: function () { return verify_js_1.issuanceBytes; } });
34
+ Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return verify_js_1.hexToBytes; } });
35
+ Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return verify_js_1.bytesToHex; } });
36
+ const crypto_browser_js_1 = require("./crypto-browser.js");
37
+ const verify_js_2 = require("./verify.js");
38
+ /** Verify all signatures on a deletion certificate offline. */
39
+ function verifyCertificate(certificate, publicKeys) {
40
+ return (0, verify_js_2.verifyCertificate)(crypto_browser_js_1.browserCrypto, certificate, publicKeys);
41
+ }
42
+ /** Verify the transparency proof embedded in a certificate. */
43
+ function verifyTransparency(certificate, publicKeys) {
44
+ return (0, verify_js_2.verifyTransparency)(crypto_browser_js_1.browserCrypto, certificate, publicKeys);
45
+ }
46
+ /** Construct a PublicKeyInfo from a hex-encoded Ed25519 public key. */
47
+ function publicKeyFromHex(hexKey, opts) {
48
+ return (0, verify_js_2.publicKeyFromHex)(crypto_browser_js_1.browserCrypto, hexKey, opts);
49
+ }
50
+ /** Verify a Merkle consistency proof between two tree states (RFC 6962). */
51
+ function verifyConsistency(oldSize, newSize, oldRoot, newRoot, proof) {
52
+ return (0, verify_js_2.verifyConsistency)(crypto_browser_js_1.browserCrypto, oldSize, newSize, oldRoot, newRoot, proof);
53
+ }
54
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../src/index.browser.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAiEH,8CAKC;AAGD,gDAKC;AAGD,4CAKC;AAGD,8CAQC;AA/FD,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AAGnB,yCAWqB;AAVnB,4GAAA,eAAe,OAAA;AACf,qGAAA,QAAQ,OAAA;AACR,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,wGAAA,WAAW,OAAA;AACX,yGAAA,YAAY,OAAA;AACZ,8GAAA,iBAAiB,OAAA;AAGnB,qCAAsC;AAA7B,oGAAA,SAAS,OAAA;AA4BlB,iDAA4C;AAAnC,0GAAA,SAAS,OAAA;AAIlB,yCAAoE;AAA3D,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,uGAAA,UAAU,OAAA;AAE9C,2DAAoD;AACpD,2CAKqB;AAMrB,+DAA+D;AAC/D,SAAgB,iBAAiB,CAC/B,WAAiB,EACjB,UAAsC;IAEtC,OAAO,IAAA,6BAAkB,EAAC,iCAAa,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACpE,CAAC;AAED,+DAA+D;AAC/D,SAAgB,kBAAkB,CAChC,WAAiB,EACjB,UAAsC;IAEtC,OAAO,IAAA,8BAAmB,EAAC,iCAAa,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACrE,CAAC;AAED,uEAAuE;AACvE,SAAgB,gBAAgB,CAC9B,MAAc,EACd,IAA4B;IAE5B,OAAO,IAAA,4BAAiB,EAAC,iCAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,4EAA4E;AAC5E,SAAgB,iBAAiB,CAC/B,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,OAAmB,EACnB,KAAmB;IAEnB,OAAO,IAAA,6BAAkB,EAAC,iCAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,26 @@
1
+ /** BurnLedger TypeScript SDK — public API (Node.js entry point). */
2
+ export { BurnLedger } from "./client.js";
3
+ export type { BurnLedgerOptions } from "./client.js";
4
+ export { BurnLedgerError, ApiError, AuthenticationError, NotFoundError, ConflictError, ValidationError, RateLimitError, ServerError, TimeoutError, VerificationError, } from "./errors.js";
5
+ export { Transport } from "./http.js";
6
+ export type { TransportOptions } from "./http.js";
7
+ export type { ProofMode, AttestationStatus, CertificateStatus, TransparencyStatus, HealthStatus, ConnectorType, HashScope, LogEntryType, VerificationResult, TransparencyResult, ApiKeyRole, System, SystemAttestation, Attestation, VerificationSystem, VerifyResult, CertificateResponse, RevocationStatus, Webhook, SignedTreeHead, LogEntry, InclusionProof, ConsistencyProof, BatchAttestationResponse, BatchAttestationError, MonthlyCount, CertificateStats, WebhookRotateResponse, WebhookDelivery, ApiKeyListItem, ApiKeyResponse, PlanUsage, Profile, SystemHealth, } from "./models.js";
8
+ export { Paginator } from "./pagination.js";
9
+ export type { CryptoOps } from "./crypto.js";
10
+ export type { PublicKeyInfo } from "./verify.js";
11
+ export { issuanceBytes, hexToBytes, bytesToHex } from "./verify.js";
12
+ import type { PublicKeyInfo } from "./verify.js";
13
+ import type { VerificationResult, TransparencyResult } from "./models.js";
14
+ type Cert = Record<string, unknown>;
15
+ /** Verify all signatures on a deletion certificate offline. */
16
+ export declare function verifyCertificate(certificate: Cert, publicKeys: Map<string, PublicKeyInfo>): Promise<VerificationResult>;
17
+ /** Verify the transparency proof embedded in a certificate. */
18
+ export declare function verifyTransparency(certificate: Cert, publicKeys: Map<string, PublicKeyInfo>): Promise<TransparencyResult>;
19
+ /** Construct a PublicKeyInfo from a hex-encoded Ed25519 public key. */
20
+ export declare function publicKeyFromHex(hexKey: string, opts?: {
21
+ revoked?: boolean;
22
+ }): Promise<PublicKeyInfo>;
23
+ /** Verify a Merkle consistency proof between two tree states (RFC 6962). */
24
+ export declare function verifyConsistency(oldSize: number, newSize: number, oldRoot: Uint8Array, newRoot: Uint8Array, proof: Uint8Array[]): Promise<boolean>;
25
+ export { verifyWebhookSignature } from "./webhooks.js";
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,OAAO,EACP,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE1E,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /** BurnLedger TypeScript SDK — public API (Node.js entry point). */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.verifyWebhookSignature = exports.bytesToHex = exports.hexToBytes = exports.issuanceBytes = exports.Paginator = exports.Transport = exports.VerificationError = exports.TimeoutError = exports.ServerError = exports.RateLimitError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.AuthenticationError = exports.ApiError = exports.BurnLedgerError = exports.BurnLedger = void 0;
5
+ exports.verifyCertificate = verifyCertificate;
6
+ exports.verifyTransparency = verifyTransparency;
7
+ exports.publicKeyFromHex = publicKeyFromHex;
8
+ exports.verifyConsistency = verifyConsistency;
9
+ var client_js_1 = require("./client.js");
10
+ Object.defineProperty(exports, "BurnLedger", { enumerable: true, get: function () { return client_js_1.BurnLedger; } });
11
+ var errors_js_1 = require("./errors.js");
12
+ Object.defineProperty(exports, "BurnLedgerError", { enumerable: true, get: function () { return errors_js_1.BurnLedgerError; } });
13
+ Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return errors_js_1.ApiError; } });
14
+ Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return errors_js_1.AuthenticationError; } });
15
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_js_1.NotFoundError; } });
16
+ Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return errors_js_1.ConflictError; } });
17
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
18
+ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_js_1.RateLimitError; } });
19
+ Object.defineProperty(exports, "ServerError", { enumerable: true, get: function () { return errors_js_1.ServerError; } });
20
+ Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return errors_js_1.TimeoutError; } });
21
+ Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return errors_js_1.VerificationError; } });
22
+ var http_js_1 = require("./http.js");
23
+ Object.defineProperty(exports, "Transport", { enumerable: true, get: function () { return http_js_1.Transport; } });
24
+ var pagination_js_1 = require("./pagination.js");
25
+ Object.defineProperty(exports, "Paginator", { enumerable: true, get: function () { return pagination_js_1.Paginator; } });
26
+ var verify_js_1 = require("./verify.js");
27
+ Object.defineProperty(exports, "issuanceBytes", { enumerable: true, get: function () { return verify_js_1.issuanceBytes; } });
28
+ Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return verify_js_1.hexToBytes; } });
29
+ Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return verify_js_1.bytesToHex; } });
30
+ const crypto_node_js_1 = require("./crypto-node.js");
31
+ const verify_js_2 = require("./verify.js");
32
+ /** Verify all signatures on a deletion certificate offline. */
33
+ function verifyCertificate(certificate, publicKeys) {
34
+ return (0, verify_js_2.verifyCertificate)(crypto_node_js_1.nodeCrypto, certificate, publicKeys);
35
+ }
36
+ /** Verify the transparency proof embedded in a certificate. */
37
+ function verifyTransparency(certificate, publicKeys) {
38
+ return (0, verify_js_2.verifyTransparency)(crypto_node_js_1.nodeCrypto, certificate, publicKeys);
39
+ }
40
+ /** Construct a PublicKeyInfo from a hex-encoded Ed25519 public key. */
41
+ function publicKeyFromHex(hexKey, opts) {
42
+ return (0, verify_js_2.publicKeyFromHex)(crypto_node_js_1.nodeCrypto, hexKey, opts);
43
+ }
44
+ /** Verify a Merkle consistency proof between two tree states (RFC 6962). */
45
+ function verifyConsistency(oldSize, newSize, oldRoot, newRoot, proof) {
46
+ return (0, verify_js_2.verifyConsistency)(crypto_node_js_1.nodeCrypto, oldSize, newSize, oldRoot, newRoot, proof);
47
+ }
48
+ var webhooks_js_1 = require("./webhooks.js");
49
+ Object.defineProperty(exports, "verifyWebhookSignature", { enumerable: true, get: function () { return webhooks_js_1.verifyWebhookSignature; } });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;AA6EpE,8CAKC;AAGD,gDAKC;AAGD,4CAKC;AAGD,8CAQC;AA3GD,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AAGnB,yCAWqB;AAVnB,4GAAA,eAAe,OAAA;AACf,qGAAA,QAAQ,OAAA;AACR,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,wGAAA,WAAW,OAAA;AACX,yGAAA,YAAY,OAAA;AACZ,8GAAA,iBAAiB,OAAA;AAGnB,qCAAsC;AAA7B,oGAAA,SAAS,OAAA;AAwClB,iDAA4C;AAAnC,0GAAA,SAAS,OAAA;AAIlB,yCAAoE;AAA3D,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,uGAAA,UAAU,OAAA;AAE9C,qDAA8C;AAC9C,2CAKqB;AAMrB,+DAA+D;AAC/D,SAAgB,iBAAiB,CAC/B,WAAiB,EACjB,UAAsC;IAEtC,OAAO,IAAA,6BAAkB,EAAC,2BAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACjE,CAAC;AAED,+DAA+D;AAC/D,SAAgB,kBAAkB,CAChC,WAAiB,EACjB,UAAsC;IAEtC,OAAO,IAAA,8BAAmB,EAAC,2BAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC;AAED,uEAAuE;AACvE,SAAgB,gBAAgB,CAC9B,MAAc,EACd,IAA4B;IAE5B,OAAO,IAAA,4BAAiB,EAAC,2BAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,SAAgB,iBAAiB,CAC/B,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,OAAmB,EACnB,KAAmB;IAEnB,OAAO,IAAA,6BAAkB,EAAC,2BAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,6CAAuD;AAA9C,qHAAA,sBAAsB,OAAA"}
@@ -0,0 +1,12 @@
1
+ export type KeyEntry = {
2
+ key_id: string;
3
+ public_key: string;
4
+ key_status: string;
5
+ };
6
+ /**
7
+ * Normalize a parsed keys file to an array of key entries. Accepts either a bare
8
+ * JSON array (the generated keys.json shape) or a { "keys": [...] } envelope
9
+ * (what the /.well-known endpoint publishes). Throws on any other shape.
10
+ */
11
+ export declare function parseKeyEntries(parsed: unknown): KeyEntry[];
12
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE,CAM3D"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ // Public-key file parsing shared by the CLI (and unit-testable in isolation).
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.parseKeyEntries = parseKeyEntries;
5
+ /**
6
+ * Normalize a parsed keys file to an array of key entries. Accepts either a bare
7
+ * JSON array (the generated keys.json shape) or a { "keys": [...] } envelope
8
+ * (what the /.well-known endpoint publishes). Throws on any other shape.
9
+ */
10
+ function parseKeyEntries(parsed) {
11
+ const entries = Array.isArray(parsed) ? parsed : parsed?.keys;
12
+ if (!Array.isArray(entries)) {
13
+ throw new Error('--keys file must be a JSON array of keys or a {"keys": [...]} object');
14
+ }
15
+ return entries;
16
+ }
17
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":";AAAA,8EAA8E;;AAS9E,0CAMC;AAXD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAe;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAA6B,EAAE,IAAI,CAAC;IACtF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,OAAqB,CAAC;AAC/B,CAAC"}