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
package/README.md ADDED
@@ -0,0 +1,182 @@
1
+ # BurnLedger TypeScript SDK
2
+
3
+ TypeScript/JavaScript client for the [BurnLedger](https://github.com/fdfretes/burnledger) API — cryptographic deletion certificates for regulatory compliance.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install burnledger
9
+ ```
10
+
11
+ **Requirements:** Node.js 18+
12
+
13
+ ## Quick Start
14
+
15
+ ```typescript
16
+ import { BurnLedger } from "burnledger";
17
+
18
+ const dp = new BurnLedger({ apiKey: "dp_..." });
19
+
20
+ // 1. Attest — snapshot systems before deletion
21
+ const att = await dp.attest("user@example.com", {
22
+ systemIds: ["sys_abc", "sys_def"],
23
+ });
24
+
25
+ // 2. Delete data (your code, your tools)
26
+
27
+ // 3. Verify — confirm deletion and get certificate
28
+ const result = await dp.verify(att.id, "user@example.com", { timeout: 60 });
29
+
30
+ // 4. Download certificate PDF
31
+ await dp.savePdf(result.certificate!.id, "./deletion-cert.pdf");
32
+ ```
33
+
34
+ ## Browser Support
35
+
36
+ For browser environments (verification only, no API client):
37
+
38
+ ```typescript
39
+ import { verifyCertificate, publicKeyFromHex } from "burnledger/browser";
40
+ ```
41
+
42
+ Uses WebCrypto (`crypto.subtle`) instead of `node:crypto`. Requires Chrome 113+, Firefox 128+, or Safari 17+.
43
+
44
+ ## Offline Verification
45
+
46
+ Verify certificates without network access using Ed25519 signatures:
47
+
48
+ ```typescript
49
+ import {
50
+ verifyCertificate,
51
+ verifyTransparency,
52
+ publicKeyFromHex,
53
+ } from "burnledger";
54
+
55
+ const key = await publicKeyFromHex("abcdef...", { revoked: false });
56
+ const keys = new Map([[key.keyId, key]]);
57
+
58
+ const certResult = await verifyCertificate(certificate, keys);
59
+ // "VALID" | "INVALID"
60
+
61
+ const logResult = await verifyTransparency(certificate, keys);
62
+ // "INCLUDED" | "INVALID" | "NOT_AVAILABLE"
63
+ ```
64
+
65
+ ## Webhook Verification
66
+
67
+ Verify incoming webhook signatures (HMAC-SHA256):
68
+
69
+ ```typescript
70
+ import { verifyWebhookSignature } from "burnledger";
71
+
72
+ const valid = verifyWebhookSignature(
73
+ webhookSecret, // from dp.registerWebhook()
74
+ request.body, // raw request body
75
+ request.headers["x-burnledger-signature"],
76
+ );
77
+ ```
78
+
79
+ ## API Reference
80
+
81
+ ### Client
82
+
83
+ ```typescript
84
+ new BurnLedger({
85
+ apiKey: string,
86
+ baseUrl?: string, // default: "https://api.burnledger.io"
87
+ timeout?: number, // seconds, default: 30
88
+ maxRetries?: number, // default: 2
89
+ })
90
+ ```
91
+
92
+ ### Systems
93
+
94
+ | Method | Returns |
95
+ |--------|---------|
96
+ | `registerSystem(opts)` | `Promise<System>` |
97
+ | `getSystem(id)` | `Promise<System>` |
98
+ | `listSystems(opts?)` | `Paginator<System>` |
99
+ | `deregisterSystem(id)` | `Promise<void>` |
100
+ | `healthCheck(id)` | `Promise<System>` |
101
+
102
+ ### Attestations
103
+
104
+ | Method | Returns |
105
+ |--------|---------|
106
+ | `attest(subject, opts?)` | `Promise<Attestation>` |
107
+ | `batchAttest(subjects, opts?)` | `Promise<BatchAttestationResponse>` |
108
+ | `getAttestation(id)` | `Promise<Attestation>` |
109
+ | `waitFor(id, opts?)` | `Promise<Attestation>` |
110
+ | `verify(id, subject, opts?)` | `Promise<VerifyResult>` |
111
+
112
+ ### Certificates
113
+
114
+ | Method | Returns |
115
+ |--------|---------|
116
+ | `getCertificate(id)` | `Promise<CertificateResponse>` |
117
+ | `listCertificates(opts?)` | `Paginator<CertificateResponse>` |
118
+ | `getCertificateStats()` | `Promise<CertificateStats>` |
119
+ | `exportCertificates(opts?)` | `Promise<Uint8Array>` |
120
+ | `downloadPdf(id)` | `Promise<Uint8Array>` |
121
+ | `savePdf(id, path)` | `Promise<void>` |
122
+ | `getRevocationStatus(id)` | `Promise<RevocationStatus>` |
123
+ | `revokeCertificate(id, opts)` | `Promise<CertificateResponse>` |
124
+
125
+ ### Webhooks
126
+
127
+ | Method | Returns |
128
+ |--------|---------|
129
+ | `registerWebhook(opts)` | `Promise<Webhook>` |
130
+ | `listWebhooks(opts?)` | `Paginator<Webhook>` |
131
+ | `deleteWebhook(id)` | `Promise<void>` |
132
+ | `rotateWebhookSecret(id)` | `Promise<WebhookRotateResponse>` |
133
+ | `commitWebhookRotation(id)` | `Promise<void>` |
134
+ | `listFailedDeliveries(id)` | `Promise<WebhookDelivery[]>` |
135
+ | `retryDelivery(webhookId, deliveryId)` | `Promise<void>` |
136
+ | `resolveDelivery(webhookId, deliveryId)` | `Promise<void>` |
137
+
138
+ ### API Keys
139
+
140
+ | Method | Returns |
141
+ |--------|---------|
142
+ | `listApiKeys()` | `Promise<ApiKeyListItem[]>` |
143
+ | `createApiKey()` | `Promise<ApiKeyResponse>` |
144
+ | `revokeApiKey(id)` | `Promise<void>` |
145
+
146
+ ### Transparency Log
147
+
148
+ These methods do not require authentication.
149
+
150
+ | Method | Returns |
151
+ |--------|---------|
152
+ | `getLogHead()` | `Promise<SignedTreeHead>` |
153
+ | `getLogEntry(index)` | `Promise<LogEntry>` |
154
+ | `getLogEntries(opts)` | `Promise<LogEntry[]>` |
155
+ | `getInclusionProof(opts)` | `Promise<InclusionProof>` |
156
+ | `getConsistencyProof(opts)` | `Promise<ConsistencyProof>` |
157
+
158
+ ### Pagination
159
+
160
+ All `list*` methods return a `Paginator` that auto-fetches pages:
161
+
162
+ ```typescript
163
+ for await (const cert of dp.listCertificates()) {
164
+ console.log(cert.id);
165
+ }
166
+ ```
167
+
168
+ ## Dual ESM/CJS
169
+
170
+ The package ships both ESM and CommonJS builds:
171
+
172
+ ```javascript
173
+ // ESM
174
+ import { BurnLedger } from "burnledger";
175
+
176
+ // CommonJS
177
+ const { BurnLedger } = require("burnledger");
178
+ ```
179
+
180
+ ## License
181
+
182
+ MIT
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /** burnledger check — offline certificate verification.
3
+ * Exit codes: 0=valid, 1=invalid, 2=usage error */
4
+ type Cert = Record<string, unknown>;
5
+ /** The pass/fail decision behind the exit code. A signature failure, a
6
+ * transparency FAILURE (thrown, not NOT_AVAILABLE), or an online-confirmed
7
+ * revocation all make the certificate invalid. Exported for testing. */
8
+ export declare function certVerdict(sigResult: string, transparencyFailed: boolean, online: boolean, revocation: {
9
+ status: string;
10
+ } | undefined): boolean;
11
+ export declare function formatOutput(cert: Cert, sigResult: string, transparency: string, transparencyFailed: boolean, revocation: {
12
+ status: string;
13
+ reason?: string;
14
+ } | undefined, online: boolean): string;
15
+ export {};
16
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA;mDACmD;AAQnD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiEpC;;wEAEwE;AACxE,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,OAAO,EAC3B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACzC,OAAO,CAMT;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAChF,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,GAC3E,MAAM,CAmCR"}
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /** burnledger check — offline certificate verification.
4
+ * Exit codes: 0=valid, 1=invalid, 2=usage error */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.certVerdict = certVerdict;
7
+ exports.formatOutput = formatOutput;
8
+ const promises_1 = require("node:fs/promises");
9
+ const crypto_node_js_1 = require("./crypto-node.js");
10
+ const verify_js_1 = require("./verify.js");
11
+ const keys_js_1 = require("./keys.js");
12
+ const USAGE = "Usage: burnledger check --cert <file> --keys <file> [--online --api-url <url> --api-key <key>]\n";
13
+ function die(msg) { process.stderr.write(msg); process.exit(2); }
14
+ function parseArgs(argv) {
15
+ const args = argv.slice(2);
16
+ if (args[0] !== "check")
17
+ die(USAGE);
18
+ let certPath = "", keysPath = "", online = false, apiUrl = "", apiKey = "";
19
+ for (let i = 1; i < args.length; i++) {
20
+ const a = args[i];
21
+ if (a === "--cert") {
22
+ certPath = args[++i] ?? die("--cert requires a value\n");
23
+ }
24
+ else if (a === "--keys") {
25
+ keysPath = args[++i] ?? die("--keys requires a value\n");
26
+ }
27
+ else if (a === "--online") {
28
+ online = true;
29
+ }
30
+ else if (a === "--api-url") {
31
+ apiUrl = args[++i] ?? die("--api-url requires a value\n");
32
+ }
33
+ else if (a === "--api-key") {
34
+ apiKey = args[++i] ?? die("--api-key requires a value\n");
35
+ }
36
+ else
37
+ die(`Unknown argument: ${a}\n`);
38
+ }
39
+ if (!certPath || !keysPath)
40
+ die("Both --cert and --keys are required.\n");
41
+ if (online && (!apiUrl || !apiKey))
42
+ die("--online requires --api-url and --api-key.\n");
43
+ return { certPath, keysPath, online, apiUrl, apiKey };
44
+ }
45
+ async function loadKeys(path) {
46
+ let entries;
47
+ try {
48
+ entries = (0, keys_js_1.parseKeyEntries)(JSON.parse(await (0, promises_1.readFile)(path, "utf-8")));
49
+ }
50
+ catch (e) {
51
+ die(e.message + "\n");
52
+ }
53
+ const map = new Map();
54
+ for (const e of entries) {
55
+ // Fail closed: trust a key only if it explicitly declares active/retired.
56
+ const revoked = !(e.key_status === "active" || e.key_status === "retired");
57
+ let pki;
58
+ try {
59
+ pki = await (0, verify_js_1.publicKeyFromHex)(crypto_node_js_1.nodeCrypto, e.public_key, { revoked });
60
+ }
61
+ catch (err) {
62
+ die(`invalid public_key: ${err.message}\n`);
63
+ }
64
+ // Key-substitution defense: a declared key_id must match the id derived from
65
+ // the public key (dp_k_ + sha256(key)), and the map is keyed on the DERIVED
66
+ // id so a lying key_id cannot shadow a genuine one.
67
+ if (e.key_id !== undefined && e.key_id !== pki.keyId) {
68
+ die(`key_id ${e.key_id} does not match sha256(public_key) (${pki.keyId})\n`);
69
+ }
70
+ const existing = map.get(pki.keyId);
71
+ if (existing !== undefined && existing.revoked !== pki.revoked) {
72
+ die(`conflicting key_status for duplicate key ${pki.keyId}\n`);
73
+ }
74
+ map.set(pki.keyId, pki);
75
+ }
76
+ return map;
77
+ }
78
+ async function checkRevocation(apiUrl, apiKey, certId) {
79
+ const res = await fetch(`${apiUrl}/v1/certificates/${certId}/revocation-status`, {
80
+ headers: { Authorization: `Bearer ${apiKey}` },
81
+ });
82
+ if (!res.ok)
83
+ throw new Error(`Revocation check failed: HTTP ${res.status}`);
84
+ return (await res.json()).data;
85
+ }
86
+ /** The pass/fail decision behind the exit code. A signature failure, a
87
+ * transparency FAILURE (thrown, not NOT_AVAILABLE), or an online-confirmed
88
+ * revocation all make the certificate invalid. Exported for testing. */
89
+ function certVerdict(sigResult, transparencyFailed, online, revocation) {
90
+ return (sigResult === "VALID" &&
91
+ !transparencyFailed &&
92
+ !(online && revocation?.status === "REVOKED"));
93
+ }
94
+ function formatOutput(cert, sigResult, transparency, transparencyFailed, revocation, online) {
95
+ const id = cert.certificate_id.slice(0, 6);
96
+ const sub = cert.subject.identifier_hash;
97
+ const att = cert.attestation;
98
+ const ver = cert.verification;
99
+ const L = [];
100
+ if (sigResult !== "VALID")
101
+ return `Certificate dc_${id}: INVALID (${sigResult})\n`;
102
+ if (transparencyFailed)
103
+ return `Certificate dc_${id}: INVALID (transparency: ${transparency})\n`;
104
+ if (online && revocation?.status === "REVOKED") {
105
+ L.push(`Certificate dc_${id}: INVALID (REVOKED)`);
106
+ if (revocation.reason)
107
+ L.push(` Revocation reason: ${revocation.reason}`);
108
+ return L.join("\n") + "\n";
109
+ }
110
+ const tag = online ? "" : " (offline — revocation status not checked)";
111
+ L.push(`Certificate dc_${id}: VALID${tag}`);
112
+ L.push(` Subject: sha256:${sub.slice(0, 6)}...`);
113
+ L.push(` Canonical version: ${cert.certificate_format_version}`);
114
+ const sys = att.systems;
115
+ L.push(` Systems: ${sys.length} (${sys.map((s) => `${s.connector_type} [${s.hash_scope}]`).join(", ")})`);
116
+ L.push(` Records before: ${sys.reduce((n, s) => n + s.record_count, 0)}`);
117
+ L.push(` Records after: ${ver.systems.reduce((n, s) => n + s.record_count, 0)}`);
118
+ L.push(` Committed: ${att.attested_at}`);
119
+ L.push(` Verified: ${ver.verified_at}`);
120
+ if (transparency === "INCLUDED") {
121
+ const t = cert.transparency;
122
+ L.push(` Transparency log: entry #${t.entry_index}, inclusion proof VALID`);
123
+ }
124
+ else {
125
+ L.push(` Transparency log: ${transparency === "NOT_AVAILABLE" ? "not included" : transparency}`);
126
+ }
127
+ if (online && revocation)
128
+ L.push(` Revocation status: ${revocation.status}`);
129
+ return L.join("\n") + "\n";
130
+ }
131
+ async function main() {
132
+ const args = parseArgs(process.argv);
133
+ const cert = JSON.parse(await (0, promises_1.readFile)(args.certPath, "utf-8"));
134
+ const keys = await loadKeys(args.keysPath);
135
+ let sigResult = "VALID";
136
+ try {
137
+ await (0, verify_js_1.verifyCertificate)(crypto_node_js_1.nodeCrypto, cert, keys);
138
+ }
139
+ catch (e) {
140
+ sigResult = e instanceof Error ? e.message : "unknown error";
141
+ }
142
+ // NOT_AVAILABLE (no proof) is a legitimate result; only a thrown error is a
143
+ // transparency FAILURE and must fail the verdict + exit code.
144
+ let transparency = "NOT_AVAILABLE";
145
+ let transparencyFailed = false;
146
+ try {
147
+ transparency = await (0, verify_js_1.verifyTransparency)(crypto_node_js_1.nodeCrypto, cert, keys);
148
+ }
149
+ catch (e) {
150
+ transparency = e instanceof Error ? e.message : "unknown error";
151
+ transparencyFailed = true;
152
+ }
153
+ let revocation;
154
+ if (args.online)
155
+ revocation = await checkRevocation(args.apiUrl, args.apiKey, cert.certificate_id);
156
+ const valid = certVerdict(sigResult, transparencyFailed, args.online, revocation);
157
+ process.stdout.write(formatOutput(cert, sigResult, transparency, transparencyFailed, revocation, args.online));
158
+ process.exit(valid ? 0 : 1);
159
+ }
160
+ // Only run as a CLI entry point — importing this module (e.g. from tests) must
161
+ // not execute main(). argv[1] is the script path when invoked as the binary.
162
+ if (process.argv[1]?.endsWith("cli.js")) {
163
+ main().catch((e) => {
164
+ process.stderr.write(`Error: ${e instanceof Error ? e.message : String(e)}\n`);
165
+ process.exit(2);
166
+ });
167
+ }
168
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /** Async BurnLedger API client.
2
+ *
3
+ * Single class — Node.js is all-async, no sync/async split needed.
4
+ * Pagination uses AsyncIterable<T> via Paginator.
5
+ */
6
+ import type { ApiKeyListItem, ApiKeyResponse, Attestation, BatchAttestationResponse, CertificateResponse, CertificateStats, ConsistencyProof, InclusionProof, LogEntry, Profile, RevocationStatus, SignedTreeHead, System, SystemHealth, VerifyResult, Webhook, WebhookDelivery, WebhookRotateResponse } from "./models.js";
7
+ import { Paginator } from "./pagination.js";
8
+ export interface BurnLedgerOptions {
9
+ apiKey: string;
10
+ baseUrl?: string;
11
+ timeout?: number;
12
+ maxRetries?: number;
13
+ }
14
+ export declare class BurnLedger {
15
+ private readonly transport;
16
+ constructor(opts: BurnLedgerOptions);
17
+ close(): void;
18
+ [Symbol.asyncDispose](): Promise<void>;
19
+ registerSystem(opts: {
20
+ name: string;
21
+ connectorType: string;
22
+ connectionConfig?: Record<string, unknown>;
23
+ dsn?: string;
24
+ uri?: string;
25
+ subjectQuery: string;
26
+ hashScope?: string;
27
+ maxRecords?: number;
28
+ maxBytes?: number;
29
+ queryTimeout?: string;
30
+ }): Promise<System>;
31
+ getSystem(systemId: string): Promise<System>;
32
+ listSystems(opts?: {
33
+ limit?: number;
34
+ }): Paginator<System>;
35
+ deregisterSystem(systemId: string): Promise<void>;
36
+ healthCheck(systemId: string): Promise<System>;
37
+ attest(subjectIdentifier: string, opts?: {
38
+ systemIds?: string[];
39
+ proofMode?: string;
40
+ expiresIn?: string;
41
+ webhookUrl?: string;
42
+ }): Promise<Attestation>;
43
+ getAttestation(attestationId: string): Promise<Attestation>;
44
+ waitFor(attestationId: string, opts?: {
45
+ timeout?: number;
46
+ pollInterval?: number;
47
+ }): Promise<Attestation>;
48
+ verify(attestationId: string, subjectIdentifier: string, opts?: {
49
+ timeout?: number;
50
+ pollInterval?: number;
51
+ }): Promise<VerifyResult>;
52
+ batchAttest(opts: {
53
+ subjectIdentifiers: string[];
54
+ systemIds: string[];
55
+ proofMode?: string;
56
+ expiresIn?: string;
57
+ }): Promise<BatchAttestationResponse>;
58
+ getCertificate(certificateId: string): Promise<CertificateResponse>;
59
+ listCertificates(opts?: {
60
+ limit?: number;
61
+ }): Paginator<CertificateResponse>;
62
+ downloadPdf(certificateId: string): Promise<Uint8Array>;
63
+ savePdf(certificateId: string, path: string): Promise<void>;
64
+ getRevocationStatus(certificateId: string): Promise<RevocationStatus>;
65
+ revokeCertificate(certificateId: string, opts: {
66
+ reason: string;
67
+ }): Promise<CertificateResponse>;
68
+ getCertificateStats(): Promise<CertificateStats>;
69
+ exportCertificates(opts?: {
70
+ format?: "csv" | "jsonl";
71
+ status?: "ACTIVE" | "REVOKED";
72
+ issuedAfter?: string;
73
+ issuedBefore?: string;
74
+ }): Promise<Uint8Array>;
75
+ registerWebhook(opts: {
76
+ url: string;
77
+ }): Promise<Webhook>;
78
+ listWebhooks(opts?: {
79
+ limit?: number;
80
+ }): Paginator<Webhook>;
81
+ deleteWebhook(webhookId: string): Promise<void>;
82
+ rotateWebhookSecret(webhookId: string): Promise<WebhookRotateResponse>;
83
+ commitWebhookRotation(webhookId: string): Promise<void>;
84
+ listFailedDeliveries(opts?: {
85
+ limit?: number;
86
+ }): Paginator<WebhookDelivery>;
87
+ retryDelivery(deliveryId: string): Promise<void>;
88
+ resolveDelivery(deliveryId: string): Promise<void>;
89
+ listApiKeys(opts?: {
90
+ limit?: number;
91
+ }): Paginator<ApiKeyListItem>;
92
+ createApiKey(): Promise<ApiKeyResponse>;
93
+ revokeApiKey(keyId: string): Promise<void>;
94
+ getMe(): Promise<Profile>;
95
+ updateMe(params: {
96
+ name: string;
97
+ email: string;
98
+ }): Promise<Profile>;
99
+ deleteMe(): Promise<void>;
100
+ getSystemHealth(systemId: string): Promise<SystemHealth>;
101
+ getLogHead(): Promise<SignedTreeHead>;
102
+ getLogEntry(index: number): Promise<LogEntry>;
103
+ getLogEntries(opts: {
104
+ start: number;
105
+ end: number;
106
+ }): Promise<LogEntry[]>;
107
+ getInclusionProof(opts: {
108
+ index: number;
109
+ treeSize: number;
110
+ }): Promise<InclusionProof>;
111
+ getConsistencyProof(opts: {
112
+ oldSize: number;
113
+ newSize: number;
114
+ }): Promise<ConsistencyProof>;
115
+ }
116
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}