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,164 @@
1
+ #!/usr/bin/env node
2
+ /** burnledger check — offline certificate verification.
3
+ * Exit codes: 0=valid, 1=invalid, 2=usage error */
4
+ import { readFile } from "node:fs/promises";
5
+ import { nodeCrypto } from "./crypto-node.js";
6
+ import { verifyCertificate, verifyTransparency, publicKeyFromHex } from "./verify.js";
7
+ import { parseKeyEntries } from "./keys.js";
8
+ const USAGE = "Usage: burnledger check --cert <file> --keys <file> [--online --api-url <url> --api-key <key>]\n";
9
+ function die(msg) { process.stderr.write(msg); process.exit(2); }
10
+ function parseArgs(argv) {
11
+ const args = argv.slice(2);
12
+ if (args[0] !== "check")
13
+ die(USAGE);
14
+ let certPath = "", keysPath = "", online = false, apiUrl = "", apiKey = "";
15
+ for (let i = 1; i < args.length; i++) {
16
+ const a = args[i];
17
+ if (a === "--cert") {
18
+ certPath = args[++i] ?? die("--cert requires a value\n");
19
+ }
20
+ else if (a === "--keys") {
21
+ keysPath = args[++i] ?? die("--keys requires a value\n");
22
+ }
23
+ else if (a === "--online") {
24
+ online = true;
25
+ }
26
+ else if (a === "--api-url") {
27
+ apiUrl = args[++i] ?? die("--api-url requires a value\n");
28
+ }
29
+ else if (a === "--api-key") {
30
+ apiKey = args[++i] ?? die("--api-key requires a value\n");
31
+ }
32
+ else
33
+ die(`Unknown argument: ${a}\n`);
34
+ }
35
+ if (!certPath || !keysPath)
36
+ die("Both --cert and --keys are required.\n");
37
+ if (online && (!apiUrl || !apiKey))
38
+ die("--online requires --api-url and --api-key.\n");
39
+ return { certPath, keysPath, online, apiUrl, apiKey };
40
+ }
41
+ async function loadKeys(path) {
42
+ let entries;
43
+ try {
44
+ entries = parseKeyEntries(JSON.parse(await readFile(path, "utf-8")));
45
+ }
46
+ catch (e) {
47
+ die(e.message + "\n");
48
+ }
49
+ const map = new Map();
50
+ for (const e of entries) {
51
+ // Fail closed: trust a key only if it explicitly declares active/retired.
52
+ const revoked = !(e.key_status === "active" || e.key_status === "retired");
53
+ let pki;
54
+ try {
55
+ pki = await publicKeyFromHex(nodeCrypto, e.public_key, { revoked });
56
+ }
57
+ catch (err) {
58
+ die(`invalid public_key: ${err.message}\n`);
59
+ }
60
+ // Key-substitution defense: a declared key_id must match the id derived from
61
+ // the public key (dp_k_ + sha256(key)), and the map is keyed on the DERIVED
62
+ // id so a lying key_id cannot shadow a genuine one.
63
+ if (e.key_id !== undefined && e.key_id !== pki.keyId) {
64
+ die(`key_id ${e.key_id} does not match sha256(public_key) (${pki.keyId})\n`);
65
+ }
66
+ const existing = map.get(pki.keyId);
67
+ if (existing !== undefined && existing.revoked !== pki.revoked) {
68
+ die(`conflicting key_status for duplicate key ${pki.keyId}\n`);
69
+ }
70
+ map.set(pki.keyId, pki);
71
+ }
72
+ return map;
73
+ }
74
+ async function checkRevocation(apiUrl, apiKey, certId) {
75
+ const res = await fetch(`${apiUrl}/v1/certificates/${certId}/revocation-status`, {
76
+ headers: { Authorization: `Bearer ${apiKey}` },
77
+ });
78
+ if (!res.ok)
79
+ throw new Error(`Revocation check failed: HTTP ${res.status}`);
80
+ return (await res.json()).data;
81
+ }
82
+ /** The pass/fail decision behind the exit code. A signature failure, a
83
+ * transparency FAILURE (thrown, not NOT_AVAILABLE), or an online-confirmed
84
+ * revocation all make the certificate invalid. Exported for testing. */
85
+ export function certVerdict(sigResult, transparencyFailed, online, revocation) {
86
+ return (sigResult === "VALID" &&
87
+ !transparencyFailed &&
88
+ !(online && revocation?.status === "REVOKED"));
89
+ }
90
+ export function formatOutput(cert, sigResult, transparency, transparencyFailed, revocation, online) {
91
+ const id = cert.certificate_id.slice(0, 6);
92
+ const sub = cert.subject.identifier_hash;
93
+ const att = cert.attestation;
94
+ const ver = cert.verification;
95
+ const L = [];
96
+ if (sigResult !== "VALID")
97
+ return `Certificate dc_${id}: INVALID (${sigResult})\n`;
98
+ if (transparencyFailed)
99
+ return `Certificate dc_${id}: INVALID (transparency: ${transparency})\n`;
100
+ if (online && revocation?.status === "REVOKED") {
101
+ L.push(`Certificate dc_${id}: INVALID (REVOKED)`);
102
+ if (revocation.reason)
103
+ L.push(` Revocation reason: ${revocation.reason}`);
104
+ return L.join("\n") + "\n";
105
+ }
106
+ const tag = online ? "" : " (offline — revocation status not checked)";
107
+ L.push(`Certificate dc_${id}: VALID${tag}`);
108
+ L.push(` Subject: sha256:${sub.slice(0, 6)}...`);
109
+ L.push(` Canonical version: ${cert.certificate_format_version}`);
110
+ const sys = att.systems;
111
+ L.push(` Systems: ${sys.length} (${sys.map((s) => `${s.connector_type} [${s.hash_scope}]`).join(", ")})`);
112
+ L.push(` Records before: ${sys.reduce((n, s) => n + s.record_count, 0)}`);
113
+ L.push(` Records after: ${ver.systems.reduce((n, s) => n + s.record_count, 0)}`);
114
+ L.push(` Committed: ${att.attested_at}`);
115
+ L.push(` Verified: ${ver.verified_at}`);
116
+ if (transparency === "INCLUDED") {
117
+ const t = cert.transparency;
118
+ L.push(` Transparency log: entry #${t.entry_index}, inclusion proof VALID`);
119
+ }
120
+ else {
121
+ L.push(` Transparency log: ${transparency === "NOT_AVAILABLE" ? "not included" : transparency}`);
122
+ }
123
+ if (online && revocation)
124
+ L.push(` Revocation status: ${revocation.status}`);
125
+ return L.join("\n") + "\n";
126
+ }
127
+ async function main() {
128
+ const args = parseArgs(process.argv);
129
+ const cert = JSON.parse(await readFile(args.certPath, "utf-8"));
130
+ const keys = await loadKeys(args.keysPath);
131
+ let sigResult = "VALID";
132
+ try {
133
+ await verifyCertificate(nodeCrypto, cert, keys);
134
+ }
135
+ catch (e) {
136
+ sigResult = e instanceof Error ? e.message : "unknown error";
137
+ }
138
+ // NOT_AVAILABLE (no proof) is a legitimate result; only a thrown error is a
139
+ // transparency FAILURE and must fail the verdict + exit code.
140
+ let transparency = "NOT_AVAILABLE";
141
+ let transparencyFailed = false;
142
+ try {
143
+ transparency = await verifyTransparency(nodeCrypto, cert, keys);
144
+ }
145
+ catch (e) {
146
+ transparency = e instanceof Error ? e.message : "unknown error";
147
+ transparencyFailed = true;
148
+ }
149
+ let revocation;
150
+ if (args.online)
151
+ revocation = await checkRevocation(args.apiUrl, args.apiKey, cert.certificate_id);
152
+ const valid = certVerdict(sigResult, transparencyFailed, args.online, revocation);
153
+ process.stdout.write(formatOutput(cert, sigResult, transparency, transparencyFailed, revocation, args.online));
154
+ process.exit(valid ? 0 : 1);
155
+ }
156
+ // Only run as a CLI entry point — importing this module (e.g. from tests) must
157
+ // not execute main(). argv[1] is the script path when invoked as the binary.
158
+ if (process.argv[1]?.endsWith("cli.js")) {
159
+ main().catch((e) => {
160
+ process.stderr.write(`Error: ${e instanceof Error ? e.message : String(e)}\n`);
161
+ process.exit(2);
162
+ });
163
+ }
164
+ //# 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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"}
@@ -0,0 +1,316 @@
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 { RateLimitError, TimeoutError } from "./errors.js";
7
+ import { Transport } from "./http.js";
8
+ import { parseApiKeyListItem, parseApiKeyResponse, parseAttestation, parseBatchAttestationResponse, parseCertificateResponse, parseCertificateStats, parseConsistencyProof, parseInclusionProof, parseLogEntry, parseProfile, parseRevocationStatus, parseSignedTreeHead, parseSystem, parseSystemHealth, parseVerifyResult, parseWebhook, parseWebhookDelivery, parseWebhookRotateResponse, } from "./models.js";
9
+ import { Paginator } from "./pagination.js";
10
+ export class BurnLedger {
11
+ transport;
12
+ constructor(opts) {
13
+ this.transport = new Transport({
14
+ baseUrl: opts.baseUrl ?? "https://api.burnledger.io",
15
+ apiKey: opts.apiKey,
16
+ timeout: opts.timeout ?? 30,
17
+ maxRetries: opts.maxRetries ?? 2,
18
+ });
19
+ }
20
+ close() {
21
+ // Transport uses native fetch — no persistent connections to close.
22
+ // Method exists for API symmetry and future extensibility.
23
+ }
24
+ [Symbol.asyncDispose]() {
25
+ this.close();
26
+ return Promise.resolve();
27
+ }
28
+ // --- Systems ---
29
+ async registerSystem(opts) {
30
+ const config = resolveConnectionConfig(opts.connectionConfig, opts.dsn, opts.uri);
31
+ const body = {
32
+ name: opts.name,
33
+ connector_type: opts.connectorType,
34
+ connection_config: config,
35
+ subject_query: opts.subjectQuery,
36
+ hash_scope: opts.hashScope ?? "existence",
37
+ max_records: opts.maxRecords ?? 1_000_000,
38
+ max_bytes: opts.maxBytes ?? 10 * 1024 * 1024 * 1024,
39
+ query_timeout: opts.queryTimeout ?? "30s",
40
+ };
41
+ const data = await this.transport.request("POST", "/v1/systems", {
42
+ json: body,
43
+ });
44
+ return parseSystem(data);
45
+ }
46
+ async getSystem(systemId) {
47
+ const data = await this.transport.request("GET", `/v1/systems/${systemId}`);
48
+ return parseSystem(data);
49
+ }
50
+ listSystems(opts) {
51
+ return new Paginator(this.transport, "/v1/systems", parseSystem, {
52
+ params: { limit: opts?.limit ?? 25 },
53
+ });
54
+ }
55
+ async deregisterSystem(systemId) {
56
+ await this.transport.request("DELETE", `/v1/systems/${systemId}`);
57
+ }
58
+ async healthCheck(systemId) {
59
+ const data = await this.transport.request("POST", `/v1/systems/${systemId}/health-check`);
60
+ return parseSystem(data);
61
+ }
62
+ // --- Attestations ---
63
+ async attest(subjectIdentifier, opts) {
64
+ const body = {
65
+ subject_identifier: subjectIdentifier,
66
+ proof_mode: opts?.proofMode ?? "count",
67
+ expires_in: opts?.expiresIn ?? "72h",
68
+ };
69
+ if (opts?.systemIds !== undefined)
70
+ body.system_ids = opts.systemIds;
71
+ if (opts?.webhookUrl !== undefined)
72
+ body.webhook_url = opts.webhookUrl;
73
+ const data = await this.transport.request("POST", "/v1/attestations", {
74
+ json: body,
75
+ });
76
+ return parseAttestation(data);
77
+ }
78
+ async getAttestation(attestationId) {
79
+ const data = await this.transport.request("GET", `/v1/attestations/${attestationId}`);
80
+ return parseAttestation(data);
81
+ }
82
+ async waitFor(attestationId, opts) {
83
+ return poll({
84
+ fetch: () => this.getAttestation(attestationId),
85
+ done: (att) => att.status !== "PENDING_VERIFICATION",
86
+ operation: `waitFor(${attestationId})`,
87
+ timeout: opts?.timeout ?? 60,
88
+ pollInterval: opts?.pollInterval ?? 2,
89
+ });
90
+ }
91
+ async verify(attestationId, subjectIdentifier, opts) {
92
+ const body = { subject_identifier: subjectIdentifier };
93
+ const data = await this.transport.request("POST", `/v1/attestations/${attestationId}/verify`, { json: body });
94
+ const result = parseVerifyResult(data);
95
+ const timeout = opts?.timeout ?? 0;
96
+ if (timeout <= 0 || result.status === "CERTIFIED") {
97
+ return result;
98
+ }
99
+ return poll({
100
+ fetch: async () => {
101
+ const d = await this.transport.request("POST", `/v1/attestations/${attestationId}/verify`, { json: body });
102
+ return parseVerifyResult(d);
103
+ },
104
+ done: (r) => r.status === "CERTIFIED",
105
+ operation: `verify(${attestationId})`,
106
+ timeout,
107
+ pollInterval: opts?.pollInterval ?? 2,
108
+ });
109
+ }
110
+ async batchAttest(opts) {
111
+ const body = {
112
+ subject_identifiers: opts.subjectIdentifiers,
113
+ system_ids: opts.systemIds,
114
+ proof_mode: opts.proofMode ?? "count",
115
+ expires_in: opts.expiresIn ?? "72h",
116
+ };
117
+ const data = await this.transport.request("POST", "/v1/attestations/batch", {
118
+ json: body,
119
+ });
120
+ return parseBatchAttestationResponse(data);
121
+ }
122
+ // --- Certificates ---
123
+ async getCertificate(certificateId) {
124
+ const data = await this.transport.request("GET", `/v1/certificates/${certificateId}`);
125
+ return parseCertificateResponse(data);
126
+ }
127
+ listCertificates(opts) {
128
+ return new Paginator(this.transport, "/v1/certificates", parseCertificateResponse, { params: { limit: opts?.limit ?? 25 } });
129
+ }
130
+ async downloadPdf(certificateId) {
131
+ return this.transport.requestBytes("GET", `/v1/certificates/${certificateId}/pdf`);
132
+ }
133
+ async savePdf(certificateId, path) {
134
+ const pdf = await this.downloadPdf(certificateId);
135
+ const { writeFile } = await import("node:fs/promises");
136
+ await writeFile(path, pdf);
137
+ }
138
+ async getRevocationStatus(certificateId) {
139
+ const data = await this.transport.request("GET", `/v1/certificates/${certificateId}/revocation-status`);
140
+ return parseRevocationStatus(data);
141
+ }
142
+ async revokeCertificate(certificateId, opts) {
143
+ const data = await this.transport.request("POST", `/v1/certificates/${certificateId}/revoke`, { json: { reason: opts.reason } });
144
+ return parseCertificateResponse(data);
145
+ }
146
+ async getCertificateStats() {
147
+ const data = await this.transport.request("GET", "/v1/certificates/stats");
148
+ return parseCertificateStats(data);
149
+ }
150
+ async exportCertificates(opts) {
151
+ const params = {};
152
+ if (opts?.format !== undefined)
153
+ params.format = opts.format;
154
+ if (opts?.status !== undefined)
155
+ params.status = opts.status;
156
+ if (opts?.issuedAfter !== undefined)
157
+ params.issued_after = opts.issuedAfter;
158
+ if (opts?.issuedBefore !== undefined)
159
+ params.issued_before = opts.issuedBefore;
160
+ const qs = new URLSearchParams(params).toString();
161
+ const path = qs ? `/v1/certificates/export?${qs}` : "/v1/certificates/export";
162
+ return this.transport.requestBytes("GET", path);
163
+ }
164
+ // --- Webhooks ---
165
+ async registerWebhook(opts) {
166
+ const data = await this.transport.request("POST", "/v1/webhooks", {
167
+ json: { url: opts.url },
168
+ });
169
+ return parseWebhook(data);
170
+ }
171
+ listWebhooks(opts) {
172
+ return new Paginator(this.transport, "/v1/webhooks", parseWebhook, {
173
+ params: { limit: opts?.limit ?? 25 },
174
+ });
175
+ }
176
+ async deleteWebhook(webhookId) {
177
+ await this.transport.request("DELETE", `/v1/webhooks/${webhookId}`);
178
+ }
179
+ async rotateWebhookSecret(webhookId) {
180
+ const data = await this.transport.request("POST", `/v1/webhooks/${webhookId}/rotate-secret`);
181
+ return parseWebhookRotateResponse(data);
182
+ }
183
+ async commitWebhookRotation(webhookId) {
184
+ await this.transport.request("POST", `/v1/webhooks/${webhookId}/commit-rotation`);
185
+ }
186
+ listFailedDeliveries(opts) {
187
+ return new Paginator(this.transport, "/v1/webhooks/deliveries/failed", parseWebhookDelivery, { params: { limit: opts?.limit ?? 25 } });
188
+ }
189
+ async retryDelivery(deliveryId) {
190
+ await this.transport.request("POST", `/v1/webhooks/deliveries/${deliveryId}/retry`);
191
+ }
192
+ async resolveDelivery(deliveryId) {
193
+ await this.transport.request("DELETE", `/v1/webhooks/deliveries/${deliveryId}`);
194
+ }
195
+ // --- API Keys ---
196
+ listApiKeys(opts) {
197
+ return new Paginator(this.transport, "/v1/api-keys", parseApiKeyListItem, { params: { limit: opts?.limit ?? 25 } });
198
+ }
199
+ async createApiKey() {
200
+ const data = await this.transport.request("POST", "/v1/api-keys", {
201
+ json: {},
202
+ });
203
+ return parseApiKeyResponse(data);
204
+ }
205
+ async revokeApiKey(keyId) {
206
+ await this.transport.request("DELETE", `/v1/api-keys/${keyId}`);
207
+ }
208
+ // --- Profile ---
209
+ async getMe() {
210
+ const data = await this.transport.request("GET", "/v1/me");
211
+ return parseProfile(data);
212
+ }
213
+ async updateMe(params) {
214
+ const data = await this.transport.request("PATCH", "/v1/me", {
215
+ json: { name: params.name, email: params.email },
216
+ });
217
+ return parseProfile(data);
218
+ }
219
+ async deleteMe() {
220
+ await this.transport.request("DELETE", "/v1/me");
221
+ }
222
+ // --- System Health ---
223
+ async getSystemHealth(systemId) {
224
+ const data = await this.transport.request("GET", `/v1/systems/${systemId}/health`);
225
+ return parseSystemHealth(data);
226
+ }
227
+ // --- Transparency log (public, no auth) ---
228
+ async getLogHead() {
229
+ const data = await this.transport.request("GET", "/v1/log/head", {
230
+ authenticated: false,
231
+ });
232
+ return parseSignedTreeHead(data);
233
+ }
234
+ async getLogEntry(index) {
235
+ const data = await this.transport.request("GET", `/v1/log/entry/${index}`, { authenticated: false });
236
+ return parseLogEntry(data);
237
+ }
238
+ async getLogEntries(opts) {
239
+ const data = await this.transport.request("GET", "/v1/log/entries", {
240
+ params: { start: opts.start, end: opts.end },
241
+ authenticated: false,
242
+ });
243
+ return data.map(parseLogEntry);
244
+ }
245
+ async getInclusionProof(opts) {
246
+ const data = await this.transport.request("GET", "/v1/log/proof/inclusion", {
247
+ params: { index: opts.index, tree_size: opts.treeSize },
248
+ authenticated: false,
249
+ });
250
+ return parseInclusionProof(data);
251
+ }
252
+ async getConsistencyProof(opts) {
253
+ const data = await this.transport.request("GET", "/v1/log/proof/consistency", {
254
+ params: { old_size: opts.oldSize, new_size: opts.newSize },
255
+ authenticated: false,
256
+ });
257
+ return parseConsistencyProof(data);
258
+ }
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Connection config resolution
262
+ // ---------------------------------------------------------------------------
263
+ function resolveConnectionConfig(connectionConfig, dsn, uri) {
264
+ const convenience = (dsn !== undefined ? 1 : 0) + (uri !== undefined ? 1 : 0);
265
+ if (convenience > 0 && connectionConfig !== undefined) {
266
+ throw new Error("Cannot provide both connectionConfig and a convenience parameter (dsn/uri). Use one or the other.");
267
+ }
268
+ if (convenience > 1) {
269
+ throw new Error("Cannot provide both dsn and uri.");
270
+ }
271
+ if (dsn !== undefined)
272
+ return { dsn };
273
+ if (uri !== undefined)
274
+ return { uri };
275
+ if (connectionConfig !== undefined)
276
+ return connectionConfig;
277
+ return {};
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Polling helper
281
+ // ---------------------------------------------------------------------------
282
+ async function poll(opts) {
283
+ const deadline = Date.now() + opts.timeout * 1000;
284
+ let interval = opts.pollInterval * 1000;
285
+ while (true) {
286
+ const elapsed = (Date.now() - (deadline - opts.timeout * 1000)) / 1000;
287
+ if (Date.now() >= deadline) {
288
+ throw new TimeoutError(opts.operation, elapsed);
289
+ }
290
+ let result;
291
+ try {
292
+ result = await opts.fetch();
293
+ }
294
+ catch (err) {
295
+ if (err instanceof RateLimitError && err.retryAfter !== undefined) {
296
+ await sleep(err.retryAfter * 1000);
297
+ continue;
298
+ }
299
+ throw err;
300
+ }
301
+ if (opts.done(result)) {
302
+ return result;
303
+ }
304
+ const remaining = deadline - Date.now();
305
+ const sleepTime = Math.min(interval, remaining);
306
+ if (sleepTime <= 0) {
307
+ throw new TimeoutError(opts.operation, elapsed);
308
+ }
309
+ await sleep(sleepTime);
310
+ interval = Math.min(interval * 1.5, 30_000);
311
+ }
312
+ }
313
+ function sleep(ms) {
314
+ return new Promise((resolve) => setTimeout(resolve, ms));
315
+ }
316
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Browser CryptoOps implementation using WebCrypto (crypto.subtle).
2
+ *
3
+ * Ed25519 support: Chrome 113+, Firefox 128+, Safari 17+.
4
+ */
5
+ import type { CryptoOps } from "./crypto.js";
6
+ export declare const browserCrypto: CryptoOps;
7
+ //# sourceMappingURL=crypto-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-browser.d.ts","sourceRoot":"","sources":["../../src/crypto-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,SAyB3B,CAAC"}