burnledger 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -0
- package/dist/cjs/client.d.ts +84 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +275 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/crypto-browser.d.ts +7 -0
- package/dist/cjs/crypto-browser.d.ts.map +1 -0
- package/dist/cjs/crypto-browser.js +37 -0
- package/dist/cjs/crypto-browser.js.map +1 -0
- package/dist/cjs/crypto-node.d.ts +4 -0
- package/dist/cjs/crypto-node.d.ts.map +1 -0
- package/dist/cjs/crypto-node.js +30 -0
- package/dist/cjs/crypto-node.js.map +1 -0
- package/dist/cjs/crypto.d.ts +6 -0
- package/dist/cjs/crypto.d.ts.map +1 -0
- package/dist/cjs/crypto.js +4 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/errors.d.ts +76 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +119 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/http.d.ts +35 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +136 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.browser.d.ts +31 -0
- package/dist/cjs/index.browser.d.ts.map +1 -0
- package/dist/cjs/index.browser.js +54 -0
- package/dist/cjs/index.browser.js.map +1 -0
- package/dist/cjs/index.d.ts +26 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/models.d.ts +119 -0
- package/dist/cjs/models.d.ts.map +1 -0
- package/dist/cjs/models.js +144 -0
- package/dist/cjs/models.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/pagination.d.ts +21 -0
- package/dist/cjs/pagination.d.ts.map +1 -0
- package/dist/cjs/pagination.js +50 -0
- package/dist/cjs/pagination.js.map +1 -0
- package/dist/cjs/verify.d.ts +47 -0
- package/dist/cjs/verify.d.ts.map +1 -0
- package/dist/cjs/verify.js +471 -0
- package/dist/cjs/verify.js.map +1 -0
- package/dist/cjs/webhooks.d.ts +17 -0
- package/dist/cjs/webhooks.d.ts.map +1 -0
- package/dist/cjs/webhooks.js +39 -0
- package/dist/cjs/webhooks.js.map +1 -0
- package/dist/esm/client.d.ts +84 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +238 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/crypto-browser.d.ts +7 -0
- package/dist/esm/crypto-browser.d.ts.map +1 -0
- package/dist/esm/crypto-browser.js +34 -0
- package/dist/esm/crypto-browser.js.map +1 -0
- package/dist/esm/crypto-node.d.ts +4 -0
- package/dist/esm/crypto-node.d.ts.map +1 -0
- package/dist/esm/crypto-node.js +27 -0
- package/dist/esm/crypto-node.js.map +1 -0
- package/dist/esm/crypto.d.ts +6 -0
- package/dist/esm/crypto.d.ts.map +1 -0
- package/dist/esm/crypto.js +3 -0
- package/dist/esm/crypto.js.map +1 -0
- package/dist/esm/errors.d.ts +76 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +105 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/http.d.ts +35 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +132 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.browser.d.ts +31 -0
- package/dist/esm/index.browser.d.ts.map +1 -0
- package/dist/esm/index.browser.js +31 -0
- package/dist/esm/index.browser.js.map +1 -0
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/models.d.ts +119 -0
- package/dist/esm/models.d.ts.map +1 -0
- package/dist/esm/models.js +132 -0
- package/dist/esm/models.js.map +1 -0
- package/dist/esm/pagination.d.ts +21 -0
- package/dist/esm/pagination.d.ts.map +1 -0
- package/dist/esm/pagination.js +46 -0
- package/dist/esm/pagination.js.map +1 -0
- package/dist/esm/verify.d.ts +47 -0
- package/dist/esm/verify.d.ts.map +1 -0
- package/dist/esm/verify.js +462 -0
- package/dist/esm/verify.js.map +1 -0
- package/dist/esm/webhooks.d.ts +17 -0
- package/dist/esm/webhooks.d.ts.map +1 -0
- package/dist/esm/webhooks.js +36 -0
- package/dist/esm/webhooks.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# BurnLedger TypeScript SDK
|
|
2
|
+
|
|
3
|
+
TypeScript/JavaScript client for the [BurnLedger](https://github.com/fdfretes/deleteme) 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.com"
|
|
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
|
+
| `getAttestation(id)` | `Promise<Attestation>` |
|
|
108
|
+
| `waitFor(id, opts?)` | `Promise<Attestation>` |
|
|
109
|
+
| `verify(id, subject, opts?)` | `Promise<VerifyResult>` |
|
|
110
|
+
|
|
111
|
+
### Certificates
|
|
112
|
+
|
|
113
|
+
| Method | Returns |
|
|
114
|
+
|--------|---------|
|
|
115
|
+
| `getCertificate(id)` | `Promise<CertificateResponse>` |
|
|
116
|
+
| `listCertificates(opts?)` | `Paginator<CertificateResponse>` |
|
|
117
|
+
| `downloadPdf(id)` | `Promise<Uint8Array>` |
|
|
118
|
+
| `savePdf(id, path)` | `Promise<void>` |
|
|
119
|
+
| `getRevocationStatus(id)` | `Promise<RevocationStatus>` |
|
|
120
|
+
| `revokeCertificate(id, opts)` | `Promise<CertificateResponse>` |
|
|
121
|
+
|
|
122
|
+
### Webhooks
|
|
123
|
+
|
|
124
|
+
| Method | Returns |
|
|
125
|
+
|--------|---------|
|
|
126
|
+
| `registerWebhook(opts)` | `Promise<Webhook>` |
|
|
127
|
+
| `listWebhooks(opts?)` | `Paginator<Webhook>` |
|
|
128
|
+
| `deleteWebhook(id)` | `Promise<void>` |
|
|
129
|
+
|
|
130
|
+
### Transparency Log
|
|
131
|
+
|
|
132
|
+
These methods do not require authentication.
|
|
133
|
+
|
|
134
|
+
| Method | Returns |
|
|
135
|
+
|--------|---------|
|
|
136
|
+
| `getLogHead()` | `Promise<SignedTreeHead>` |
|
|
137
|
+
| `getLogEntry(index)` | `Promise<LogEntry>` |
|
|
138
|
+
| `getLogEntries(opts)` | `Promise<LogEntry[]>` |
|
|
139
|
+
| `getInclusionProof(opts)` | `Promise<InclusionProof>` |
|
|
140
|
+
| `getConsistencyProof(opts)` | `Promise<ConsistencyProof>` |
|
|
141
|
+
|
|
142
|
+
### Pagination
|
|
143
|
+
|
|
144
|
+
All `list*` methods return a `Paginator` that auto-fetches pages:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
for await (const cert of dp.listCertificates()) {
|
|
148
|
+
console.log(cert.id);
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Dual ESM/CJS
|
|
153
|
+
|
|
154
|
+
The package ships both ESM and CommonJS builds:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
// ESM
|
|
158
|
+
import { BurnLedger } from "burnledger";
|
|
159
|
+
|
|
160
|
+
// CommonJS
|
|
161
|
+
const { BurnLedger } = require("burnledger");
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
MIT
|
|
@@ -0,0 +1,84 @@
|
|
|
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 { Attestation, CertificateResponse, ConsistencyProof, InclusionProof, LogEntry, RevocationStatus, SignedTreeHead, System, VerifyResult, Webhook } 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
|
+
getCertificate(certificateId: string): Promise<CertificateResponse>;
|
|
53
|
+
listCertificates(opts?: {
|
|
54
|
+
limit?: number;
|
|
55
|
+
}): Paginator<CertificateResponse>;
|
|
56
|
+
downloadPdf(certificateId: string): Promise<Uint8Array>;
|
|
57
|
+
savePdf(certificateId: string, path: string): Promise<void>;
|
|
58
|
+
getRevocationStatus(certificateId: string): Promise<RevocationStatus>;
|
|
59
|
+
revokeCertificate(certificateId: string, opts: {
|
|
60
|
+
reason: string;
|
|
61
|
+
}): Promise<CertificateResponse>;
|
|
62
|
+
registerWebhook(opts: {
|
|
63
|
+
url: string;
|
|
64
|
+
}): Promise<Webhook>;
|
|
65
|
+
listWebhooks(opts?: {
|
|
66
|
+
limit?: number;
|
|
67
|
+
}): Paginator<Webhook>;
|
|
68
|
+
deleteWebhook(webhookId: string): Promise<void>;
|
|
69
|
+
getLogHead(): Promise<SignedTreeHead>;
|
|
70
|
+
getLogEntry(index: number): Promise<LogEntry>;
|
|
71
|
+
getLogEntries(opts: {
|
|
72
|
+
start: number;
|
|
73
|
+
end: number;
|
|
74
|
+
}): Promise<LogEntry[]>;
|
|
75
|
+
getInclusionProof(opts: {
|
|
76
|
+
index: number;
|
|
77
|
+
treeSize: number;
|
|
78
|
+
}): Promise<InclusionProof>;
|
|
79
|
+
getConsistencyProof(opts: {
|
|
80
|
+
oldSize: number;
|
|
81
|
+
newSize: number;
|
|
82
|
+
}): Promise<ConsistencyProof>;
|
|
83
|
+
}
|
|
84
|
+
//# 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,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Async BurnLedger API client.
|
|
3
|
+
*
|
|
4
|
+
* Single class — Node.js is all-async, no sync/async split needed.
|
|
5
|
+
* Pagination uses AsyncIterable<T> via Paginator.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.BurnLedger = void 0;
|
|
42
|
+
const errors_js_1 = require("./errors.js");
|
|
43
|
+
const http_js_1 = require("./http.js");
|
|
44
|
+
const models_js_1 = require("./models.js");
|
|
45
|
+
const pagination_js_1 = require("./pagination.js");
|
|
46
|
+
class BurnLedger {
|
|
47
|
+
transport;
|
|
48
|
+
constructor(opts) {
|
|
49
|
+
this.transport = new http_js_1.Transport({
|
|
50
|
+
baseUrl: opts.baseUrl ?? "https://api.burnledger.com",
|
|
51
|
+
apiKey: opts.apiKey,
|
|
52
|
+
timeout: opts.timeout ?? 30,
|
|
53
|
+
maxRetries: opts.maxRetries ?? 2,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
close() {
|
|
57
|
+
// Transport uses native fetch — no persistent connections to close.
|
|
58
|
+
// Method exists for API symmetry and future extensibility.
|
|
59
|
+
}
|
|
60
|
+
[Symbol.asyncDispose]() {
|
|
61
|
+
this.close();
|
|
62
|
+
return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
// --- Systems ---
|
|
65
|
+
async registerSystem(opts) {
|
|
66
|
+
const config = resolveConnectionConfig(opts.connectionConfig, opts.dsn, opts.uri);
|
|
67
|
+
const body = {
|
|
68
|
+
name: opts.name,
|
|
69
|
+
connector_type: opts.connectorType,
|
|
70
|
+
connection_config: config,
|
|
71
|
+
subject_query: opts.subjectQuery,
|
|
72
|
+
hash_scope: opts.hashScope ?? "existence",
|
|
73
|
+
max_records: opts.maxRecords ?? 1_000_000,
|
|
74
|
+
max_bytes: opts.maxBytes ?? 10 * 1024 * 1024 * 1024,
|
|
75
|
+
query_timeout: opts.queryTimeout ?? "30s",
|
|
76
|
+
};
|
|
77
|
+
const data = await this.transport.request("POST", "/v1/systems", {
|
|
78
|
+
json: body,
|
|
79
|
+
});
|
|
80
|
+
return (0, models_js_1.parseSystem)(data);
|
|
81
|
+
}
|
|
82
|
+
async getSystem(systemId) {
|
|
83
|
+
const data = await this.transport.request("GET", `/v1/systems/${systemId}`);
|
|
84
|
+
return (0, models_js_1.parseSystem)(data);
|
|
85
|
+
}
|
|
86
|
+
listSystems(opts) {
|
|
87
|
+
return new pagination_js_1.Paginator(this.transport, "/v1/systems", models_js_1.parseSystem, {
|
|
88
|
+
params: { limit: opts?.limit ?? 25 },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async deregisterSystem(systemId) {
|
|
92
|
+
await this.transport.request("DELETE", `/v1/systems/${systemId}`);
|
|
93
|
+
}
|
|
94
|
+
async healthCheck(systemId) {
|
|
95
|
+
const data = await this.transport.request("POST", `/v1/systems/${systemId}/health-check`);
|
|
96
|
+
return (0, models_js_1.parseSystem)(data);
|
|
97
|
+
}
|
|
98
|
+
// --- Attestations ---
|
|
99
|
+
async attest(subjectIdentifier, opts) {
|
|
100
|
+
const body = {
|
|
101
|
+
subject_identifier: subjectIdentifier,
|
|
102
|
+
proof_mode: opts?.proofMode ?? "count",
|
|
103
|
+
expires_in: opts?.expiresIn ?? "72h",
|
|
104
|
+
};
|
|
105
|
+
if (opts?.systemIds !== undefined)
|
|
106
|
+
body.system_ids = opts.systemIds;
|
|
107
|
+
if (opts?.webhookUrl !== undefined)
|
|
108
|
+
body.webhook_url = opts.webhookUrl;
|
|
109
|
+
const data = await this.transport.request("POST", "/v1/attestations", {
|
|
110
|
+
json: body,
|
|
111
|
+
});
|
|
112
|
+
return (0, models_js_1.parseAttestation)(data);
|
|
113
|
+
}
|
|
114
|
+
async getAttestation(attestationId) {
|
|
115
|
+
const data = await this.transport.request("GET", `/v1/attestations/${attestationId}`);
|
|
116
|
+
return (0, models_js_1.parseAttestation)(data);
|
|
117
|
+
}
|
|
118
|
+
async waitFor(attestationId, opts) {
|
|
119
|
+
return poll({
|
|
120
|
+
fetch: () => this.getAttestation(attestationId),
|
|
121
|
+
done: (att) => att.status !== "PENDING_VERIFICATION",
|
|
122
|
+
operation: `waitFor(${attestationId})`,
|
|
123
|
+
timeout: opts?.timeout ?? 60,
|
|
124
|
+
pollInterval: opts?.pollInterval ?? 2,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
async verify(attestationId, subjectIdentifier, opts) {
|
|
128
|
+
const body = { subject_identifier: subjectIdentifier };
|
|
129
|
+
const data = await this.transport.request("POST", `/v1/attestations/${attestationId}/verify`, { json: body });
|
|
130
|
+
const result = (0, models_js_1.parseVerifyResult)(data);
|
|
131
|
+
const timeout = opts?.timeout ?? 0;
|
|
132
|
+
if (timeout <= 0 || result.status === "CERTIFIED") {
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
return poll({
|
|
136
|
+
fetch: async () => {
|
|
137
|
+
const d = await this.transport.request("POST", `/v1/attestations/${attestationId}/verify`, { json: body });
|
|
138
|
+
return (0, models_js_1.parseVerifyResult)(d);
|
|
139
|
+
},
|
|
140
|
+
done: (r) => r.status === "CERTIFIED",
|
|
141
|
+
operation: `verify(${attestationId})`,
|
|
142
|
+
timeout,
|
|
143
|
+
pollInterval: opts?.pollInterval ?? 2,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// --- Certificates ---
|
|
147
|
+
async getCertificate(certificateId) {
|
|
148
|
+
const data = await this.transport.request("GET", `/v1/certificates/${certificateId}`);
|
|
149
|
+
return (0, models_js_1.parseCertificateResponse)(data);
|
|
150
|
+
}
|
|
151
|
+
listCertificates(opts) {
|
|
152
|
+
return new pagination_js_1.Paginator(this.transport, "/v1/certificates", models_js_1.parseCertificateResponse, { params: { limit: opts?.limit ?? 25 } });
|
|
153
|
+
}
|
|
154
|
+
async downloadPdf(certificateId) {
|
|
155
|
+
return this.transport.requestBytes("GET", `/v1/certificates/${certificateId}/pdf`);
|
|
156
|
+
}
|
|
157
|
+
async savePdf(certificateId, path) {
|
|
158
|
+
const pdf = await this.downloadPdf(certificateId);
|
|
159
|
+
const { writeFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
160
|
+
await writeFile(path, pdf);
|
|
161
|
+
}
|
|
162
|
+
async getRevocationStatus(certificateId) {
|
|
163
|
+
const data = await this.transport.request("GET", `/v1/certificates/${certificateId}/revocation-status`);
|
|
164
|
+
return (0, models_js_1.parseRevocationStatus)(data);
|
|
165
|
+
}
|
|
166
|
+
async revokeCertificate(certificateId, opts) {
|
|
167
|
+
const data = await this.transport.request("POST", `/v1/certificates/${certificateId}/revoke`, { json: { reason: opts.reason } });
|
|
168
|
+
return (0, models_js_1.parseCertificateResponse)(data);
|
|
169
|
+
}
|
|
170
|
+
// --- Webhooks ---
|
|
171
|
+
async registerWebhook(opts) {
|
|
172
|
+
const data = await this.transport.request("POST", "/v1/webhooks", {
|
|
173
|
+
json: { url: opts.url },
|
|
174
|
+
});
|
|
175
|
+
return (0, models_js_1.parseWebhook)(data);
|
|
176
|
+
}
|
|
177
|
+
listWebhooks(opts) {
|
|
178
|
+
return new pagination_js_1.Paginator(this.transport, "/v1/webhooks", models_js_1.parseWebhook, {
|
|
179
|
+
params: { limit: opts?.limit ?? 25 },
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
async deleteWebhook(webhookId) {
|
|
183
|
+
await this.transport.request("DELETE", `/v1/webhooks/${webhookId}`);
|
|
184
|
+
}
|
|
185
|
+
// --- Transparency log (public, no auth) ---
|
|
186
|
+
async getLogHead() {
|
|
187
|
+
const data = await this.transport.request("GET", "/v1/log/head", {
|
|
188
|
+
authenticated: false,
|
|
189
|
+
});
|
|
190
|
+
return (0, models_js_1.parseSignedTreeHead)(data);
|
|
191
|
+
}
|
|
192
|
+
async getLogEntry(index) {
|
|
193
|
+
const data = await this.transport.request("GET", `/v1/log/entry/${index}`, { authenticated: false });
|
|
194
|
+
return (0, models_js_1.parseLogEntry)(data);
|
|
195
|
+
}
|
|
196
|
+
async getLogEntries(opts) {
|
|
197
|
+
const data = await this.transport.request("GET", "/v1/log/entries", {
|
|
198
|
+
params: { start: opts.start, end: opts.end },
|
|
199
|
+
authenticated: false,
|
|
200
|
+
});
|
|
201
|
+
return data.map(models_js_1.parseLogEntry);
|
|
202
|
+
}
|
|
203
|
+
async getInclusionProof(opts) {
|
|
204
|
+
const data = await this.transport.request("GET", "/v1/log/proof/inclusion", {
|
|
205
|
+
params: { index: opts.index, tree_size: opts.treeSize },
|
|
206
|
+
authenticated: false,
|
|
207
|
+
});
|
|
208
|
+
return (0, models_js_1.parseInclusionProof)(data);
|
|
209
|
+
}
|
|
210
|
+
async getConsistencyProof(opts) {
|
|
211
|
+
const data = await this.transport.request("GET", "/v1/log/proof/consistency", {
|
|
212
|
+
params: { old_size: opts.oldSize, new_size: opts.newSize },
|
|
213
|
+
authenticated: false,
|
|
214
|
+
});
|
|
215
|
+
return (0, models_js_1.parseConsistencyProof)(data);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.BurnLedger = BurnLedger;
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// Connection config resolution
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
function resolveConnectionConfig(connectionConfig, dsn, uri) {
|
|
223
|
+
const convenience = (dsn !== undefined ? 1 : 0) + (uri !== undefined ? 1 : 0);
|
|
224
|
+
if (convenience > 0 && connectionConfig !== undefined) {
|
|
225
|
+
throw new Error("Cannot provide both connectionConfig and a convenience parameter (dsn/uri). Use one or the other.");
|
|
226
|
+
}
|
|
227
|
+
if (convenience > 1) {
|
|
228
|
+
throw new Error("Cannot provide both dsn and uri.");
|
|
229
|
+
}
|
|
230
|
+
if (dsn !== undefined)
|
|
231
|
+
return { dsn };
|
|
232
|
+
if (uri !== undefined)
|
|
233
|
+
return { uri };
|
|
234
|
+
if (connectionConfig !== undefined)
|
|
235
|
+
return connectionConfig;
|
|
236
|
+
return {};
|
|
237
|
+
}
|
|
238
|
+
// ---------------------------------------------------------------------------
|
|
239
|
+
// Polling helper
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
async function poll(opts) {
|
|
242
|
+
const deadline = Date.now() + opts.timeout * 1000;
|
|
243
|
+
let interval = opts.pollInterval * 1000;
|
|
244
|
+
while (true) {
|
|
245
|
+
const elapsed = (Date.now() - (deadline - opts.timeout * 1000)) / 1000;
|
|
246
|
+
if (Date.now() >= deadline) {
|
|
247
|
+
throw new errors_js_1.TimeoutError(opts.operation, elapsed);
|
|
248
|
+
}
|
|
249
|
+
let result;
|
|
250
|
+
try {
|
|
251
|
+
result = await opts.fetch();
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
if (err instanceof errors_js_1.RateLimitError && err.retryAfter !== undefined) {
|
|
255
|
+
await sleep(err.retryAfter * 1000);
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
throw err;
|
|
259
|
+
}
|
|
260
|
+
if (opts.done(result)) {
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
const remaining = deadline - Date.now();
|
|
264
|
+
const sleepTime = Math.min(interval, remaining);
|
|
265
|
+
if (sleepTime <= 0) {
|
|
266
|
+
throw new errors_js_1.TimeoutError(opts.operation, elapsed);
|
|
267
|
+
}
|
|
268
|
+
await sleep(sleepTime);
|
|
269
|
+
interval = Math.min(interval * 1.5, 30_000);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function sleep(ms) {
|
|
273
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
274
|
+
}
|
|
275
|
+
//# 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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Browser CryptoOps implementation using WebCrypto (crypto.subtle).
|
|
3
|
+
*
|
|
4
|
+
* Ed25519 support: Chrome 113+, Firefox 128+, Safari 17+.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.browserCrypto = void 0;
|
|
8
|
+
exports.browserCrypto = {
|
|
9
|
+
async sha256(data) {
|
|
10
|
+
const hash = await crypto.subtle.digest("SHA-256", toBuffer(data));
|
|
11
|
+
return new Uint8Array(hash);
|
|
12
|
+
},
|
|
13
|
+
async ed25519Verify(publicKey, data, signature) {
|
|
14
|
+
try {
|
|
15
|
+
const spki = concatBytes(ED25519_DER_PREFIX, publicKey);
|
|
16
|
+
const key = await crypto.subtle.importKey("spki", toBuffer(spki), { name: "Ed25519" }, false, ["verify"]);
|
|
17
|
+
return crypto.subtle.verify("Ed25519", key, toBuffer(signature), toBuffer(data));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const ED25519_DER_PREFIX = new Uint8Array([
|
|
25
|
+
0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,
|
|
26
|
+
]);
|
|
27
|
+
/** Ensure the Uint8Array is backed by a plain ArrayBuffer (not SharedArrayBuffer). */
|
|
28
|
+
function toBuffer(data) {
|
|
29
|
+
return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
30
|
+
}
|
|
31
|
+
function concatBytes(a, b) {
|
|
32
|
+
const out = new Uint8Array(a.length + b.length);
|
|
33
|
+
out.set(a, 0);
|
|
34
|
+
out.set(b, a.length);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=crypto-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-browser.js","sourceRoot":"","sources":["../../src/crypto-browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIU,QAAA,aAAa,GAAc;IACtC,KAAK,CAAC,MAAM,CAAC,IAAgB;QAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAqB,EACrB,IAAgB,EAChB,SAAqB;QAErB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,MAAM,EACN,QAAQ,CAAC,IAAI,CAAC,EACd,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,KAAK,EACL,CAAC,QAAQ,CAAC,CACX,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC;IACxC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACvE,CAAC,CAAC;AAEH,sFAAsF;AACtF,SAAS,QAAQ,CAAC,IAAgB;IAChC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAgB,CAAC;AAC9F,CAAC;AAED,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-node.d.ts","sourceRoot":"","sources":["../../src/crypto-node.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,eAAO,MAAM,UAAU,EAAE,SAuBxB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Node.js CryptoOps implementation wrapping node:crypto. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.nodeCrypto = void 0;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const ED25519_DER_PREFIX = new Uint8Array([
|
|
7
|
+
0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,
|
|
8
|
+
]);
|
|
9
|
+
exports.nodeCrypto = {
|
|
10
|
+
async sha256(data) {
|
|
11
|
+
const hash = (0, node_crypto_1.createHash)("sha256").update(data).digest();
|
|
12
|
+
return new Uint8Array(hash);
|
|
13
|
+
},
|
|
14
|
+
async ed25519Verify(publicKey, data, signature) {
|
|
15
|
+
try {
|
|
16
|
+
const spki = concatBytes(ED25519_DER_PREFIX, publicKey);
|
|
17
|
+
return (0, node_crypto_1.verify)(null, data, { key: Buffer.from(spki), format: "der", type: "spki" }, signature);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
function concatBytes(a, b) {
|
|
25
|
+
const out = new Uint8Array(a.length + b.length);
|
|
26
|
+
out.set(a, 0);
|
|
27
|
+
out.set(b, a.length);
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=crypto-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-node.js","sourceRoot":"","sources":["../../src/crypto-node.ts"],"names":[],"mappings":";AAAA,6DAA6D;;;AAE7D,6CAAiD;AAGjD,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC;IACxC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACvE,CAAC,CAAC;AAEU,QAAA,UAAU,GAAc;IACnC,KAAK,CAAC,MAAM,CAAC,IAAgB;QAC3B,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACxD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAqB,EACrB,IAAgB,EAChB,SAAqB;QAErB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YACxD,OAAO,IAAA,oBAAM,EACX,IAAI,EACJ,IAAI,EACJ,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EACvD,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Pluggable cryptographic operations for Node.js and browser environments. */
|
|
2
|
+
export interface CryptoOps {
|
|
3
|
+
sha256(data: Uint8Array): Promise<Uint8Array>;
|
|
4
|
+
ed25519Verify(publicKey: Uint8Array, data: Uint8Array, signature: Uint8Array): Promise<boolean>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,aAAa,CACX,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB"}
|