@framers/agentos-ext-anchor-providers 1.1.0 → 1.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.
- package/LICENSE +98 -0
- package/README.md +38 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/EthereumProvider.d.ts +48 -4
- package/dist/providers/EthereumProvider.d.ts.map +1 -1
- package/dist/providers/EthereumProvider.js +261 -27
- package/dist/providers/EthereumProvider.js.map +1 -1
- package/dist/providers/OpenTimestampsProvider.d.ts +26 -2
- package/dist/providers/OpenTimestampsProvider.d.ts.map +1 -1
- package/dist/providers/OpenTimestampsProvider.js +141 -26
- package/dist/providers/OpenTimestampsProvider.js.map +1 -1
- package/dist/providers/RekorProvider.d.ts +32 -3
- package/dist/providers/RekorProvider.d.ts.map +1 -1
- package/dist/providers/RekorProvider.js +212 -25
- package/dist/providers/RekorProvider.js.map +1 -1
- package/dist/providers/SolanaProvider.d.ts +58 -4
- package/dist/providers/SolanaProvider.d.ts.map +1 -1
- package/dist/providers/SolanaProvider.js +310 -25
- package/dist/providers/SolanaProvider.js.map +1 -1
- package/dist/providers/WormSnapshotProvider.d.ts +30 -2
- package/dist/providers/WormSnapshotProvider.d.ts.map +1 -1
- package/dist/providers/WormSnapshotProvider.js +176 -27
- package/dist/providers/WormSnapshotProvider.js.map +1 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +1 -0
- package/dist/register.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/http-client.d.ts.map +1 -1
- package/dist/utils/http-client.js +1 -0
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serialization.d.ts.map +1 -1
- package/dist/utils/serialization.js +1 -0
- package/dist/utils/serialization.js.map +1 -1
- package/manifest.json +5 -5
- package/package.json +26 -21
- package/CHANGELOG.md +0 -16
- package/src/index.ts +0 -59
- package/src/providers/EthereumProvider.ts +0 -87
- package/src/providers/OpenTimestampsProvider.ts +0 -86
- package/src/providers/RekorProvider.ts +0 -82
- package/src/providers/SolanaProvider.ts +0 -439
- package/src/providers/WormSnapshotProvider.ts +0 -84
- package/src/register.ts +0 -69
- package/src/types.ts +0 -27
- package/src/utils/http-client.ts +0 -75
- package/src/utils/index.ts +0 -3
- package/src/utils/serialization.ts +0 -33
- package/test/integration.spec.ts +0 -175
- package/test/providers.spec.ts +0 -163
- package/test/register.spec.ts +0 -69
- package/test/types.spec.ts +0 -55
- package/test/utils.spec.ts +0 -225
- package/tsconfig.json +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumProvider.js","sourceRoot":"","sources":["../../src/providers/EthereumProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"EthereumProvider.js","sourceRoot":"","sources":["../../src/providers/EthereumProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file OpenTimestampsProvider.ts
|
|
3
3
|
* @description Bitcoin-anchored timestamping via the OpenTimestamps protocol.
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* Submits a SHA-256 digest to one or more OpenTimestamps calendar servers
|
|
6
|
+
* via HTTP `POST /digest` and stores the calendars' binary attestations
|
|
7
|
+
* as base64. Each attestation eventually commits to a Bitcoin block via
|
|
8
|
+
* the calendar's own Merkle aggregation (typically 1–2 hours after
|
|
9
|
+
* submission); the verify path here is a non-Bitcoin "weak" verification
|
|
10
|
+
* that confirms a stored attestation was produced by a reachable calendar
|
|
11
|
+
* for the supplied hash.
|
|
12
|
+
*
|
|
13
|
+
* For full Bitcoin-anchor verification, parse the stored base64 with the
|
|
14
|
+
* `javascript-opentimestamps` library and call its `verify()` against a
|
|
15
|
+
* Bitcoin node or block explorer.
|
|
5
16
|
*
|
|
6
17
|
* Proof level: `publicly-timestamped`
|
|
7
|
-
* Required
|
|
18
|
+
* Required dependencies: none (uses global `fetch`).
|
|
8
19
|
*
|
|
9
20
|
* @module @framers/agentos-ext-anchor-providers
|
|
10
21
|
*/
|
|
@@ -13,6 +24,12 @@ import type { BaseProviderConfig } from '../types.js';
|
|
|
13
24
|
export interface OpenTimestampsProviderConfig extends BaseProviderConfig {
|
|
14
25
|
/** OTS calendar server URLs. Default: public OpenTimestamps calendars. */
|
|
15
26
|
calendarUrls?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Whether `publish()` requires every calendar in `calendarUrls` to succeed.
|
|
29
|
+
* Default `false`: any single calendar response is enough to consider the
|
|
30
|
+
* publish successful. Set `true` for higher independence guarantees.
|
|
31
|
+
*/
|
|
32
|
+
requireAllCalendars?: boolean;
|
|
16
33
|
}
|
|
17
34
|
export declare class OpenTimestampsProvider implements AnchorProvider {
|
|
18
35
|
readonly id = "opentimestamps";
|
|
@@ -22,6 +39,13 @@ export declare class OpenTimestampsProvider implements AnchorProvider {
|
|
|
22
39
|
private readonly baseConfig;
|
|
23
40
|
constructor(config?: OpenTimestampsProviderConfig);
|
|
24
41
|
publish(anchor: AnchorRecord): Promise<AnchorProviderResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Weak verification: re-derive the canonical anchor digest, decode the
|
|
44
|
+
* stored OTS payload, and confirm at least one stored attestation hash
|
|
45
|
+
* matches what the corresponding calendar serves today. This is NOT a
|
|
46
|
+
* full Bitcoin-block verification — for that, parse the base64 with
|
|
47
|
+
* `javascript-opentimestamps` and run its `verify()` against Bitcoin.
|
|
48
|
+
*/
|
|
25
49
|
verify(anchor: AnchorRecord): Promise<boolean>;
|
|
26
50
|
dispose(): Promise<void>;
|
|
27
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenTimestampsProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenTimestampsProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OpenTimestampsProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenTimestampsProvider.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;IACtE,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAgCD,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,QAAQ,CAAC,EAAE,oBAAoB;IAC/B,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAA0B;IAEzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;gBAE9C,MAAM,GAAE,4BAAiC;IAW/C,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA0FlE;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IA4C9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -1,20 +1,41 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
1
2
|
/**
|
|
2
3
|
* @file OpenTimestampsProvider.ts
|
|
3
4
|
* @description Bitcoin-anchored timestamping via the OpenTimestamps protocol.
|
|
4
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* Submits a SHA-256 digest to one or more OpenTimestamps calendar servers
|
|
7
|
+
* via HTTP `POST /digest` and stores the calendars' binary attestations
|
|
8
|
+
* as base64. Each attestation eventually commits to a Bitcoin block via
|
|
9
|
+
* the calendar's own Merkle aggregation (typically 1–2 hours after
|
|
10
|
+
* submission); the verify path here is a non-Bitcoin "weak" verification
|
|
11
|
+
* that confirms a stored attestation was produced by a reachable calendar
|
|
12
|
+
* for the supplied hash.
|
|
13
|
+
*
|
|
14
|
+
* For full Bitcoin-anchor verification, parse the stored base64 with the
|
|
15
|
+
* `javascript-opentimestamps` library and call its `verify()` against a
|
|
16
|
+
* Bitcoin node or block explorer.
|
|
5
17
|
*
|
|
6
18
|
* Proof level: `publicly-timestamped`
|
|
7
|
-
* Required
|
|
19
|
+
* Required dependencies: none (uses global `fetch`).
|
|
8
20
|
*
|
|
9
21
|
* @module @framers/agentos-ext-anchor-providers
|
|
10
22
|
*/
|
|
23
|
+
import { createHash } from 'node:crypto';
|
|
11
24
|
import { resolveBaseConfig } from '../types.js';
|
|
25
|
+
import { fetchWithRetry } from '../utils/http-client.js';
|
|
12
26
|
import { hashCanonicalAnchor } from '../utils/serialization.js';
|
|
13
27
|
const DEFAULT_CALENDAR_URLS = [
|
|
14
28
|
'https://a.pool.opentimestamps.org',
|
|
15
29
|
'https://b.pool.opentimestamps.org',
|
|
16
30
|
'https://a.pool.eternitywall.com',
|
|
17
31
|
];
|
|
32
|
+
/**
|
|
33
|
+
* Convert a hex string into a Buffer of raw bytes. Used to send the SHA-256
|
|
34
|
+
* digest binary in the calendar POST body.
|
|
35
|
+
*/
|
|
36
|
+
function hexToBuffer(hex) {
|
|
37
|
+
return Buffer.from(hex, 'hex');
|
|
38
|
+
}
|
|
18
39
|
export class OpenTimestampsProvider {
|
|
19
40
|
id = 'opentimestamps';
|
|
20
41
|
name = 'OpenTimestamps (Bitcoin)';
|
|
@@ -24,6 +45,7 @@ export class OpenTimestampsProvider {
|
|
|
24
45
|
constructor(config = {}) {
|
|
25
46
|
this.config = {
|
|
26
47
|
calendarUrls: config.calendarUrls ?? DEFAULT_CALENDAR_URLS,
|
|
48
|
+
requireAllCalendars: config.requireAllCalendars ?? false,
|
|
27
49
|
timeoutMs: config.timeoutMs ?? 30_000,
|
|
28
50
|
retries: config.retries ?? 3,
|
|
29
51
|
retryDelayMs: config.retryDelayMs ?? 1_000,
|
|
@@ -31,42 +53,135 @@ export class OpenTimestampsProvider {
|
|
|
31
53
|
this.baseConfig = resolveBaseConfig(config);
|
|
32
54
|
}
|
|
33
55
|
async publish(anchor) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
const digestHex = await hashCanonicalAnchor(anchor);
|
|
57
|
+
const digestBuf = hexToBuffer(digestHex);
|
|
58
|
+
const attestations = [];
|
|
59
|
+
const errors = [];
|
|
60
|
+
for (const calendarUrl of this.config.calendarUrls) {
|
|
61
|
+
const submitUrl = `${calendarUrl.replace(/\/$/, '')}/digest`;
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetchWithRetry(submitUrl, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
66
|
+
body: digestBuf,
|
|
67
|
+
}, {
|
|
68
|
+
timeoutMs: this.config.timeoutMs,
|
|
69
|
+
retries: this.config.retries,
|
|
70
|
+
retryDelayMs: this.config.retryDelayMs,
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
errors.push({
|
|
74
|
+
calendar: calendarUrl,
|
|
75
|
+
message: `HTTP ${response.status} ${response.statusText}`,
|
|
76
|
+
});
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
80
|
+
attestations.push({
|
|
81
|
+
calendarUrl,
|
|
82
|
+
attestationBase64: bytes.toString('base64'),
|
|
83
|
+
attestationHash: createHash('sha256').update(bytes).digest('hex'),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
errors.push({
|
|
88
|
+
calendar: calendarUrl,
|
|
89
|
+
message: e instanceof Error ? e.message : String(e),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
51
92
|
}
|
|
52
|
-
|
|
93
|
+
const total = this.config.calendarUrls.length;
|
|
94
|
+
const succeeded = attestations.length;
|
|
95
|
+
const meetsThreshold = this.config.requireAllCalendars
|
|
96
|
+
? succeeded === total
|
|
97
|
+
: succeeded > 0;
|
|
98
|
+
if (!meetsThreshold) {
|
|
53
99
|
return {
|
|
54
100
|
providerId: this.id,
|
|
55
101
|
success: false,
|
|
56
|
-
error:
|
|
102
|
+
error: `OpenTimestamps calendar submission failed (${succeeded}/${total} succeeded${errors.length ? `; first error: ${errors[0]?.message}` : ''})`,
|
|
103
|
+
metadata: {
|
|
104
|
+
digestHex,
|
|
105
|
+
attemptedCalendars: this.config.calendarUrls,
|
|
106
|
+
errors,
|
|
107
|
+
},
|
|
57
108
|
};
|
|
58
109
|
}
|
|
110
|
+
const externalPayload = {
|
|
111
|
+
digestSha256: digestHex,
|
|
112
|
+
attestations,
|
|
113
|
+
submittedAt: new Date().toISOString(),
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
providerId: this.id,
|
|
117
|
+
success: true,
|
|
118
|
+
// externalRef carries the entire OTS payload. Use the `ots:` prefix
|
|
119
|
+
// so it is unambiguously distinguishable from other provider refs
|
|
120
|
+
// (e.g. `eth:`, `s3://`, `solana:`) when stored on AnchorRecord.
|
|
121
|
+
externalRef: `ots:${Buffer.from(JSON.stringify(externalPayload), 'utf-8').toString('base64')}`,
|
|
122
|
+
publishedAt: externalPayload.submittedAt,
|
|
123
|
+
metadata: {
|
|
124
|
+
digestSha256: digestHex,
|
|
125
|
+
calendarsContacted: attestations.map((a) => a.calendarUrl),
|
|
126
|
+
calendarsFailed: errors.map((e) => e.calendar),
|
|
127
|
+
pendingBitcoinAttestation: true,
|
|
128
|
+
succeeded,
|
|
129
|
+
total,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
59
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Weak verification: re-derive the canonical anchor digest, decode the
|
|
135
|
+
* stored OTS payload, and confirm at least one stored attestation hash
|
|
136
|
+
* matches what the corresponding calendar serves today. This is NOT a
|
|
137
|
+
* full Bitcoin-block verification — for that, parse the base64 with
|
|
138
|
+
* `javascript-opentimestamps` and run its `verify()` against Bitcoin.
|
|
139
|
+
*/
|
|
60
140
|
async verify(anchor) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
141
|
+
if (!anchor.externalRef?.startsWith('ots:'))
|
|
142
|
+
return false;
|
|
143
|
+
let payload;
|
|
144
|
+
try {
|
|
145
|
+
const json = Buffer.from(anchor.externalRef.slice('ots:'.length), 'base64').toString('utf-8');
|
|
146
|
+
payload = JSON.parse(json);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
64
149
|
return false;
|
|
65
|
-
|
|
150
|
+
}
|
|
151
|
+
const digestHex = await hashCanonicalAnchor(anchor);
|
|
152
|
+
if (payload.digestSha256 !== digestHex)
|
|
153
|
+
return false;
|
|
154
|
+
// Re-submit to the first reachable calendar; if it returns the same
|
|
155
|
+
// attestation bytes the original submission still aligns with the
|
|
156
|
+
// calendar's commitment. This is "weak" because a calendar could
|
|
157
|
+
// re-serve a tampered timestamp; for strong proof use the OTS library.
|
|
158
|
+
const digestBuf = hexToBuffer(digestHex);
|
|
159
|
+
for (const attestation of payload.attestations) {
|
|
160
|
+
try {
|
|
161
|
+
const response = await fetchWithRetry(`${attestation.calendarUrl.replace(/\/$/, '')}/digest`, {
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
164
|
+
body: digestBuf,
|
|
165
|
+
}, {
|
|
166
|
+
timeoutMs: this.config.timeoutMs,
|
|
167
|
+
retries: this.config.retries,
|
|
168
|
+
retryDelayMs: this.config.retryDelayMs,
|
|
169
|
+
});
|
|
170
|
+
if (!response.ok)
|
|
171
|
+
continue;
|
|
172
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
173
|
+
const reHash = createHash('sha256').update(bytes).digest('hex');
|
|
174
|
+
if (reHash === attestation.attestationHash)
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Try the next calendar.
|
|
179
|
+
}
|
|
180
|
+
}
|
|
66
181
|
return false;
|
|
67
182
|
}
|
|
68
183
|
async dispose() {
|
|
69
|
-
// No persistent resources
|
|
184
|
+
// No persistent resources.
|
|
70
185
|
}
|
|
71
186
|
}
|
|
72
187
|
//# sourceMappingURL=OpenTimestampsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenTimestampsProvider.js","sourceRoot":"","sources":["../../src/providers/OpenTimestampsProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"OpenTimestampsProvider.js","sourceRoot":"","sources":["../../src/providers/OpenTimestampsProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file RekorProvider.ts
|
|
3
|
-
* @description Sigstore Rekor transparency
|
|
4
|
-
*
|
|
3
|
+
* @description Sigstore Rekor transparency-log anchor provider.
|
|
4
|
+
*
|
|
5
|
+
* Submits a `hashedrekord` entry to Rekor so each anchor is recorded
|
|
6
|
+
* in a public append-only log keyed by SHA-256 of the canonical
|
|
7
|
+
* anchor. Rekor cryptographically verifies the supplied signature
|
|
8
|
+
* against the supplied hash before accepting the entry, so the caller
|
|
9
|
+
* must provide an Ed25519 `signArtifact` function that signs over the
|
|
10
|
+
* raw hash bytes (Rekor's verification target) — **not** the
|
|
11
|
+
* AgentKeyManager's sign-over-merkleRoot-string output, which is the
|
|
12
|
+
* wrong byte sequence for Rekor's verifier.
|
|
5
13
|
*
|
|
6
14
|
* Proof level: `publicly-auditable`
|
|
7
|
-
* Required
|
|
15
|
+
* Required dependencies: none for `publish` (uses global `fetch`).
|
|
8
16
|
*
|
|
9
17
|
* @module @framers/agentos-ext-anchor-providers
|
|
10
18
|
*/
|
|
@@ -13,6 +21,20 @@ import type { BaseProviderConfig } from '../types.js';
|
|
|
13
21
|
export interface RekorProviderConfig extends BaseProviderConfig {
|
|
14
22
|
/** Rekor server URL. Default: 'https://rekor.sigstore.dev'. */
|
|
15
23
|
serverUrl?: string;
|
|
24
|
+
/**
|
|
25
|
+
* PEM-encoded Ed25519 public key matching the signer. Required for
|
|
26
|
+
* `publish()` because Rekor's hashedrekord verifier needs the
|
|
27
|
+
* public key to validate `signArtifact`'s signature against the
|
|
28
|
+
* artifact hash.
|
|
29
|
+
*/
|
|
30
|
+
publicKeyPem?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Sign the artifact's raw bytes (NOT the hex string) using the same
|
|
33
|
+
* Ed25519 keypair whose public key is in `publicKeyPem`. Required
|
|
34
|
+
* for `publish()`. Receives the canonical-anchor SHA-256 bytes and
|
|
35
|
+
* must return an Ed25519 signature.
|
|
36
|
+
*/
|
|
37
|
+
signArtifact?: (bytes: Uint8Array) => Promise<Uint8Array> | Uint8Array;
|
|
16
38
|
}
|
|
17
39
|
export declare class RekorProvider implements AnchorProvider {
|
|
18
40
|
readonly id = "rekor";
|
|
@@ -22,6 +44,13 @@ export declare class RekorProvider implements AnchorProvider {
|
|
|
22
44
|
private readonly baseConfig;
|
|
23
45
|
constructor(config?: RekorProviderConfig);
|
|
24
46
|
publish(anchor: AnchorRecord): Promise<AnchorProviderResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Confirm the anchor's Rekor entry exists and its body hash matches a
|
|
49
|
+
* fresh canonical anchor digest. Does NOT cryptographically verify
|
|
50
|
+
* the inclusion proof against the signed tree head — that needs the
|
|
51
|
+
* sigstore SDK; for compliance workflows wire up
|
|
52
|
+
* `sigstore.verify(bundle)` after this method returns true.
|
|
53
|
+
*/
|
|
25
54
|
verify(anchor: AnchorRecord): Promise<boolean>;
|
|
26
55
|
dispose(): Promise<void>;
|
|
27
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RekorProvider.d.ts","sourceRoot":"","sources":["../../src/providers/RekorProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RekorProvider.d.ts","sourceRoot":"","sources":["../../src/providers/RekorProvider.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;CACxE;AA0CD,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,qCAAqC;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAwB;IAEvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGrB;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;gBAE9C,MAAM,GAAE,mBAAwB;IAYtC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoIlE;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|