@trylimbo/sdk-verifier-wasm 0.2.12-canary.26 → 0.2.12-canary.28
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/gen/wasm/trylimbo_sdk_verifier.d.ts +162 -154
- package/gen/wasm/trylimbo_sdk_verifier.js +102 -133
- package/gen/wasm/trylimbo_sdk_verifier_bg.wasm +0 -0
- package/gen/wasm/trylimbo_sdk_verifier_bg.wasm.d.ts +9 -9
- package/gen/wasm/worker-thread.js +103 -127
- package/gen/wasm/worker.d.ts +138 -167
- package/package.json +4 -1
|
@@ -20,7 +20,7 @@ export interface RangeSource {
|
|
|
20
20
|
* list, e.g. `io.iscc.v0`) plus its algorithm-specific value (the `ISCC:…` code,
|
|
21
21
|
* a watermark token, …). The signer embeds it as a `c2pa.soft-binding` assertion
|
|
22
22
|
* and indexes it, so a transcoded copy whose exact content hash no longer
|
|
23
|
-
* matches still recovers the manifest from the
|
|
23
|
+
* matches still recovers the manifest from the repository.
|
|
24
24
|
*/
|
|
25
25
|
export interface SoftBinding {
|
|
26
26
|
/**
|
|
@@ -30,11 +30,17 @@ export interface SoftBinding {
|
|
|
30
30
|
/**
|
|
31
31
|
* Algorithm-specific binding value: the canonical string the algorithm
|
|
32
32
|
* produces (an `ISCC:…` code, a watermark token). Its UTF-8 bytes are what
|
|
33
|
-
* the
|
|
33
|
+
* the repository lookup base64-encodes.
|
|
34
34
|
*/
|
|
35
35
|
value: string;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* A binder spelled as data, so it crosses into a worker as well as the direct import: the
|
|
40
|
+
* SDK\'s own two. A browser has no host binder: a detector runs repository-side.
|
|
41
|
+
*/
|
|
42
|
+
export type BinderSpec = { kind: "iscc" } | { kind: "held"; binding: SoftBinding };
|
|
43
|
+
|
|
38
44
|
/**
|
|
39
45
|
* A canonical gRPC/Connect status code: the coarse, closed failure class.
|
|
40
46
|
*
|
|
@@ -96,70 +102,101 @@ export type ValidationState = "Invalid" | "Valid" | "Trusted";
|
|
|
96
102
|
|
|
97
103
|
/**
|
|
98
104
|
* Construction options for [`AssetVerifier::new`] (and the `AssetVerifier.create` JS
|
|
99
|
-
* binding).
|
|
105
|
+
* binding). Every field is stated: nothing here is chosen on the caller\'s behalf.
|
|
100
106
|
*
|
|
101
107
|
* One definition, all lanes: `#[binding]` derives the shapes directly here:
|
|
102
|
-
* tsify (camelCase
|
|
103
|
-
*
|
|
108
|
+
* tsify (camelCase) on wasm, a `uniffi::Record` on the native `ffi` build, so there is no
|
|
109
|
+
* per-lane DTO copy. Off both lanes it is a plain struct.
|
|
104
110
|
*/
|
|
105
111
|
export interface AssetVerifierOptions {
|
|
106
112
|
/**
|
|
107
|
-
* The
|
|
113
|
+
* The C2PA manifest repositories recovery asks, each a Soft Binding Resolution API declared
|
|
114
|
+
* for exactly the algorithms it may be asked for. Results merge by manifest, and a match\'s
|
|
115
|
+
* `endpoint` is fetched from only when it names one of these. Empty: no recovery can be
|
|
116
|
+
* asked of this verifier.
|
|
108
117
|
*/
|
|
109
|
-
|
|
118
|
+
repositories: Repository[];
|
|
110
119
|
/**
|
|
111
|
-
* PEM trust anchors for the caller
|
|
120
|
+
* PEM trust anchors for the manifest signers the caller trusts.
|
|
112
121
|
*/
|
|
113
122
|
trustAnchors: string[];
|
|
114
123
|
/**
|
|
115
|
-
*
|
|
116
|
-
|
|
124
|
+
* PEM trust anchors for the time-stamping authorities the caller trusts.
|
|
125
|
+
*/
|
|
126
|
+
tsaTrustAnchors: string[];
|
|
127
|
+
/**
|
|
128
|
+
* Also trust the bundled official C2PA anchors, manifest and TSA lists, beside the
|
|
129
|
+
* caller\'s. `false` trusts the caller\'s lists alone.
|
|
117
130
|
*/
|
|
118
|
-
trustC2paAnchors
|
|
131
|
+
trustC2paAnchors: boolean;
|
|
119
132
|
/**
|
|
120
133
|
* Issuer DIDs whose CAWG identity (ICA) credentials count as validated, matched
|
|
121
|
-
* exactly against the credential issuer.
|
|
122
|
-
*
|
|
123
|
-
*
|
|
134
|
+
* exactly against the credential issuer. Empty trusts no issuer: every identity assertion
|
|
135
|
+
* then reports `cawg.ica.untrusted_issuer` and withholds `cawg.ica.credential_valid`,
|
|
136
|
+
* which leaves the manifest\'s own validity untouched.
|
|
124
137
|
*/
|
|
125
|
-
trustedIcaIssuers
|
|
138
|
+
trustedIcaIssuers: string[];
|
|
126
139
|
}
|
|
127
140
|
|
|
128
141
|
/**
|
|
129
142
|
* Construction options for [`StreamVerifier::new`] (and the `StreamVerifier.create`
|
|
130
|
-
* JS binding).
|
|
143
|
+
* JS binding). Every field is stated: nothing here is chosen on the caller\'s behalf.
|
|
131
144
|
*
|
|
132
|
-
* `#[binding]` derives the wasm shape (`trustC2paAnchors` camelCase
|
|
145
|
+
* `#[binding]` derives the wasm shape (`trustC2paAnchors` camelCase) and,
|
|
133
146
|
* with `ffi`, a `uniffi::Record` for the native `StreamVerifier.create` binding, so there
|
|
134
147
|
* is no per-lane DTO copy. Off both lanes it is a plain struct.
|
|
135
148
|
*/
|
|
136
149
|
export interface StreamVerifierOptions {
|
|
137
150
|
/**
|
|
138
|
-
* PEM trust anchors for the caller
|
|
151
|
+
* PEM trust anchors for the manifest signers the caller trusts.
|
|
139
152
|
*/
|
|
140
153
|
trustAnchors: string[];
|
|
141
154
|
/**
|
|
142
|
-
*
|
|
143
|
-
* Defaults to `true`; set `false` to trust only `trust_anchors`.
|
|
155
|
+
* PEM trust anchors for the time-stamping authorities the caller trusts.
|
|
144
156
|
*/
|
|
145
|
-
|
|
157
|
+
tsaTrustAnchors: string[];
|
|
158
|
+
/**
|
|
159
|
+
* Also trust the bundled official C2PA anchors, manifest and TSA lists, beside the
|
|
160
|
+
* caller\'s. `false` trusts the caller\'s lists alone.
|
|
161
|
+
*/
|
|
162
|
+
trustC2paAnchors: boolean;
|
|
146
163
|
/**
|
|
147
164
|
* Issuer DIDs whose CAWG identity (ICA) credentials count as validated, matched
|
|
148
|
-
* exactly against the credential issuer.
|
|
149
|
-
*
|
|
150
|
-
* `cawg.ica.
|
|
165
|
+
* exactly against the credential issuer. Empty trusts no issuer: an identity assertion
|
|
166
|
+
* on the init segment\'s manifest then reports `cawg.ica.untrusted_issuer` and withholds
|
|
167
|
+
* `cawg.ica.credential_valid`.
|
|
151
168
|
*/
|
|
152
|
-
trustedIcaIssuers
|
|
169
|
+
trustedIcaIssuers: string[];
|
|
153
170
|
/**
|
|
154
171
|
* How far a segment\'s timestamp may sit from wall-clock before it is rejected as
|
|
155
|
-
* skewed
|
|
156
|
-
*
|
|
172
|
+
* skewed, in seconds: the deployment\'s own encoder-clock allowance, stated rather than
|
|
173
|
+
* assumed.
|
|
157
174
|
*/
|
|
158
|
-
segmentSkewToleranceSecs
|
|
175
|
+
segmentSkewToleranceSecs: number;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Everything one `derive` needs beyond the asset: how its format is known. The same record
|
|
180
|
+
* the native lane\'s `DeriveOptions` is, spelled as data.
|
|
181
|
+
*/
|
|
182
|
+
export interface DeriveOptions {
|
|
183
|
+
format: AssetFormat;
|
|
159
184
|
}
|
|
160
185
|
|
|
161
186
|
/**
|
|
162
|
-
*
|
|
187
|
+
* How a call knows the asset\'s format: stated by the caller, or read from the leading bytes.
|
|
188
|
+
* Stated, never defaulted: sniffing is a choice made by name.
|
|
189
|
+
*/
|
|
190
|
+
export type AssetFormat = { kind: "sniff" } | { kind: "declared"; mediaType: string };
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* One C2PA manifest repository, as the Soft Binding Resolution API spec lets a client find it.
|
|
194
|
+
*/
|
|
195
|
+
export type Repository = { kind: "named"; url: string; algorithms: string[] } | { kind: "listed"; algorithm: string };
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* One C2PA validation status entry (spec §15.3): the registered code, its kind, and the
|
|
199
|
+
* spec\'s own free-text `explanation`, which is where anything finer than the code lives.
|
|
163
200
|
*/
|
|
164
201
|
export interface ValidationCode {
|
|
165
202
|
/**
|
|
@@ -167,6 +204,11 @@ export interface ValidationCode {
|
|
|
167
204
|
*/
|
|
168
205
|
code: string;
|
|
169
206
|
kind: ValidationCodeKind;
|
|
207
|
+
/**
|
|
208
|
+
* Prose for a reader, never a value to branch on: a stream failure names which of the
|
|
209
|
+
* registered code\'s listed causes it hit here.
|
|
210
|
+
*/
|
|
211
|
+
explanation?: string;
|
|
170
212
|
}
|
|
171
213
|
|
|
172
214
|
/**
|
|
@@ -178,32 +220,6 @@ export interface FieldViolation {
|
|
|
178
220
|
reason: string;
|
|
179
221
|
}
|
|
180
222
|
|
|
181
|
-
/**
|
|
182
|
-
* One `matches/byContent` upload per selected detector.
|
|
183
|
-
*/
|
|
184
|
-
export interface ByContent {
|
|
185
|
-
after: ContentTrigger;
|
|
186
|
-
detectors: Detectors;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* One `matches/byReference` query per selected detector. The registry downloads the asset
|
|
191
|
-
* from `url`, so the client reads no bytes for it.
|
|
192
|
-
*/
|
|
193
|
-
export interface ByReference {
|
|
194
|
-
after: ContentTrigger;
|
|
195
|
-
detectors: Detectors;
|
|
196
|
-
/**
|
|
197
|
-
* A short-lived https URL without credentials.
|
|
198
|
-
*/
|
|
199
|
-
url: string;
|
|
200
|
-
/**
|
|
201
|
-
* The asset\'s size in bytes, which caps the registry\'s download.
|
|
202
|
-
*/
|
|
203
|
-
length: number;
|
|
204
|
-
mediaType?: string;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
223
|
/**
|
|
208
224
|
* One `verify` credential: the c2pa `ManifestStore`, where it came from, whether the asset\'s
|
|
209
225
|
* own fingerprint backs it up, and whether its hard binding holds over the bytes read.
|
|
@@ -220,10 +236,6 @@ export interface FoundCredential {
|
|
|
220
236
|
*/
|
|
221
237
|
origin: CredentialOrigin;
|
|
222
238
|
manifest: import('@contentauth/c2pa-types').ManifestStore;
|
|
223
|
-
/**
|
|
224
|
-
* Whether the asset\'s own fingerprint backs up a mark that led here (C2PA 2.4 1.2.2.3).
|
|
225
|
-
*/
|
|
226
|
-
fingerprintCheck: FingerprintCheck;
|
|
227
239
|
/**
|
|
228
240
|
* Whether the manifest\'s hard binding holds over the bytes this verify read.
|
|
229
241
|
*/
|
|
@@ -287,52 +299,22 @@ export interface SegmentTiming {
|
|
|
287
299
|
}
|
|
288
300
|
|
|
289
301
|
/**
|
|
290
|
-
* What one verify may do
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
* `matches/byBinding` is decided by the binders handed to the verify: each is derived and looked
|
|
294
|
-
* up, all together, and every result is kept. The content forms run after that, each for the
|
|
295
|
-
* detectors it names, hinted with the first fingerprint the binders derived. Results merge by
|
|
296
|
-
* manifest; nothing is ranked or dropped.
|
|
302
|
+
* What one verify may do to recover a manifest, as data: the binders this client derives for
|
|
303
|
+
* itself, decided into `matches/byBinding`, and one field per content operation, absent when
|
|
304
|
+
* not to be called. It needs a configured repository and at least one query.
|
|
297
305
|
*/
|
|
298
306
|
export interface Recovery {
|
|
299
|
-
/**
|
|
300
|
-
* When the registry is consulted at all.
|
|
301
|
-
*/
|
|
302
307
|
when: RecoveryPolicy;
|
|
303
|
-
|
|
304
|
-
* `matches/byContent`: the bounded asset bytes travel in the request.
|
|
305
|
-
*/
|
|
308
|
+
binders: BinderSpec[];
|
|
306
309
|
byContent?: ByContent;
|
|
307
|
-
/**
|
|
308
|
-
* `matches/byReference`: the registry fetches the asset from the caller\'s URL instead, for
|
|
309
|
-
* an asset above the upload cap.
|
|
310
|
-
*/
|
|
311
310
|
byReference?: ByReference;
|
|
312
311
|
}
|
|
313
312
|
|
|
314
313
|
/**
|
|
315
|
-
* When [`AssetVerifier::verify_asset`] queries the
|
|
314
|
+
* When [`AssetVerifier::verify_asset`] queries the repository.
|
|
316
315
|
*/
|
|
317
316
|
export type RecoveryPolicy = "whenMissing" | "always";
|
|
318
317
|
|
|
319
|
-
/**
|
|
320
|
-
* Where the registry is. What a verify may do with it is per call, in [`Recovery`].
|
|
321
|
-
*/
|
|
322
|
-
export interface RegistryOptions {
|
|
323
|
-
/**
|
|
324
|
-
* Soft Binding Resolution API base URL (`https://registry.trylimbo.com`).
|
|
325
|
-
*/
|
|
326
|
-
url: string;
|
|
327
|
-
/**
|
|
328
|
-
* Federated resolution APIs a match may name as holding its manifest, beside the ones the
|
|
329
|
-
* C2PA algorithm list publishes, which are always allowed. C2PA 2.4 lets a match carry an
|
|
330
|
-
* `endpoint`; one allowed is fetched from, any other is reported as refused. Checked like
|
|
331
|
-
* `url`: https, or http on loopback only.
|
|
332
|
-
*/
|
|
333
|
-
endpoints?: string[];
|
|
334
|
-
}
|
|
335
|
-
|
|
336
318
|
/**
|
|
337
319
|
* Whether a code is a success, an informational note, or a failure.
|
|
338
320
|
*/
|
|
@@ -343,18 +325,12 @@ export type ValidationCodeKind = "success" | "informational" | "failure";
|
|
|
343
325
|
*/
|
|
344
326
|
export type ContentTrigger = "byBindingMisses" | "always";
|
|
345
327
|
|
|
346
|
-
/**
|
|
347
|
-
* Which advertised server-side detectors a content form runs. Every selected detector runs,
|
|
348
|
-
* including one a local binder already queried by binding.
|
|
349
|
-
*/
|
|
350
|
-
export type Detectors = { kind: "fingerprint" } | { kind: "watermark" } | { kind: "all" } | { kind: "named"; algorithms: string[] };
|
|
351
|
-
|
|
352
328
|
/**
|
|
353
329
|
* [`crate::asset::CredentialOrigin`] as JS sees it: a tagged union, since each way of finding a
|
|
354
330
|
* credential carries different evidence. Lane-local for the same reason [`FingerprintCheck`] is: a
|
|
355
331
|
* tag layout is what `#[binding(wasm)]` declines to express.
|
|
356
332
|
*/
|
|
357
|
-
export type CredentialOrigin = { kind: "embedded" } | { kind: "recovered"; discoveries: RecoveryDiscovery[] };
|
|
333
|
+
export type CredentialOrigin = { kind: "embedded" } | { kind: "recovered"; discoveries: RecoveryDiscovery[]; fingerprintCheck: FingerprintCheck };
|
|
358
334
|
|
|
359
335
|
/**
|
|
360
336
|
* [`crate::asset::FingerprintCheck`] as JS sees it: a tagged union, since `compared` carries a
|
|
@@ -379,7 +355,7 @@ export interface Lineage {
|
|
|
379
355
|
/**
|
|
380
356
|
* [`crate::asset::RecoveryIssue`] as JS sees it: a tagged union, each kind with its own data.
|
|
381
357
|
*/
|
|
382
|
-
export type RecoveryIssue = { kind: "binder"; binderIndex: number; message: string } | { kind: "deprecatedAlgorithm"; algorithm: string } | { kind: "bindingQuery"; binderIndex: number; algorithm: string; message: string } | { kind: "queryRefused"; algorithm: string; message: string } | { kind: "contentForm"; message: string } | { kind: "contentQuery"; algorithm: string; message: string } | { kind: "capabilities"; message: string } | { kind: "contentTooLarge"; capBytes: number } | { kind: "candidateFetch"; manifestId: string; message: string } | { kind: "candidateValidation"; manifestId: string; reason: string } | { kind: "endpointRefused"; manifestId: string; endpoint: string } | { kind: "resourceLimit"; message: string };
|
|
358
|
+
export type RecoveryIssue = { kind: "binder"; binderIndex: number; message: string } | { kind: "deprecatedAlgorithm"; algorithm: string } | { kind: "bindingUndeclared"; binderIndex: number; algorithm: string } | { kind: "bindingQuery"; repository: string; binderIndex: number; algorithm: string; message: string } | { kind: "queryRefused"; repository: string; algorithm: string; message: string } | { kind: "contentForm"; repository: string; message: string } | { kind: "contentQuery"; repository: string; algorithm: string; message: string } | { kind: "capabilities"; repository: string; message: string } | { kind: "contentTooLarge"; capBytes: number } | { kind: "candidateFetch"; repository: string; manifestId: string; message: string } | { kind: "candidateValidation"; manifestId: string; reason: string } | { kind: "endpointRefused"; repository: string; manifestId: string; endpoint: string } | { kind: "resourceLimit"; message: string };
|
|
383
359
|
|
|
384
360
|
/**
|
|
385
361
|
* [`crate::asset::VerdictRule`] as JS sees it.
|
|
@@ -391,6 +367,31 @@ export type VerdictRule = "onlyCandidate" | "notSuperseded" | "hardBinding";
|
|
|
391
367
|
*/
|
|
392
368
|
export type Verdict = { kind: "unsigned" } | { kind: "inconclusive" } | { kind: "embedded" } | { kind: "recovered"; index: number; decidedBy: VerdictRule } | { kind: "recoveredDerivative"; index: number; decidedBy: VerdictRule } | { kind: "ambiguous"; candidates: number[] };
|
|
393
369
|
|
|
370
|
+
/**
|
|
371
|
+
* `matches/byContent`: the asset is uploaded to each repository, one request per algorithm that
|
|
372
|
+
* repository is declared for.
|
|
373
|
+
*/
|
|
374
|
+
export interface ByContent {
|
|
375
|
+
after: ContentTrigger;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* `matches/byReference`: each repository downloads the asset from `url`, one request per
|
|
380
|
+
* algorithm it is declared for, so the client reads no bytes for it.
|
|
381
|
+
*/
|
|
382
|
+
export interface ByReference {
|
|
383
|
+
after: ContentTrigger;
|
|
384
|
+
/**
|
|
385
|
+
* A short-lived https URL without credentials.
|
|
386
|
+
*/
|
|
387
|
+
url: string;
|
|
388
|
+
/**
|
|
389
|
+
* The asset\'s size in bytes, which caps the repository\'s download.
|
|
390
|
+
*/
|
|
391
|
+
length: number;
|
|
392
|
+
mediaType?: string;
|
|
393
|
+
}
|
|
394
|
+
|
|
394
395
|
export interface AssetVerification {
|
|
395
396
|
credentials: FoundCredential[];
|
|
396
397
|
recovery: RecoverySummary;
|
|
@@ -407,7 +408,7 @@ export type ContentBindingClass = "fingerprint" | "watermark";
|
|
|
407
408
|
|
|
408
409
|
export type GoldenComparison = { kind: "notRequested" } | { kind: "noEmbeddedManifest" } | { kind: "noRecoveredManifest" } | { kind: "recoveryIncomplete" } | { kind: "matches"; recoveredIndex: number } | { kind: "differs"; recoveredIndex: number } | { kind: "noneMatches"; candidates: number[] } | { kind: "unreadable"; recoveredIndex: number };
|
|
409
410
|
|
|
410
|
-
export type RecoveryDiscovery = {
|
|
411
|
+
export type RecoveryDiscovery = { kind: "byBinding"; class: ContentBindingClass; binding: SoftBinding; binderIndex: number; repositoryScore: number | undefined; repository: string; fetchedFrom: string } | { kind: "byContent"; hint: SoftBinding | undefined; class: ContentBindingClass; algorithm: string; repositoryScore: number | undefined; repository: string; fetchedFrom: string } | { kind: "byReference"; hint: SoftBinding | undefined; class: ContentBindingClass; algorithm: string; repositoryScore: number | undefined; repository: string; fetchedFrom: string };
|
|
411
412
|
|
|
412
413
|
export type RecoveryStatus = "notRequested" | "notFound" | "recovered" | "incomplete";
|
|
413
414
|
|
|
@@ -430,40 +431,10 @@ export class AssetVerifier {
|
|
|
430
431
|
*
|
|
431
432
|
* # Errors
|
|
432
433
|
*
|
|
433
|
-
* Throws on a malformed `input`, a
|
|
434
|
+
* Throws on a malformed `input`, a repository (or binder) failure, or a validation
|
|
434
435
|
* failure.
|
|
435
436
|
*/
|
|
436
|
-
verify(input: RangeSource,
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* A soft-binding binder a client runs itself. Build with `Binder.iscc()` or
|
|
441
|
-
* `Binder.held(binding)`, and pass a list to `verify`.
|
|
442
|
-
*
|
|
443
|
-
* Vendor watermark detection is registry-side in this SDK: configured detectors participate in
|
|
444
|
-
* `verify` through `byContent`, while `Binder.held` covers values already available to the caller.
|
|
445
|
-
*/
|
|
446
|
-
export class Binder {
|
|
447
|
-
private constructor();
|
|
448
|
-
free(): void;
|
|
449
|
-
[Symbol.dispose](): void;
|
|
450
|
-
/**
|
|
451
|
-
* Derive this binder's binding standalone; `undefined` when it finds none.
|
|
452
|
-
* Input is a `RangeSource` (format inferred from content when omitted).
|
|
453
|
-
*
|
|
454
|
-
* # Errors
|
|
455
|
-
*
|
|
456
|
-
* Throws on malformed or unreadable input.
|
|
457
|
-
*/
|
|
458
|
-
derive(content: RangeSource, format?: string | null): Promise<SoftBinding | undefined>;
|
|
459
|
-
/**
|
|
460
|
-
* A binder contributing a binding you already hold (e.g. an out-of-band video ISCC).
|
|
461
|
-
*/
|
|
462
|
-
static held(binding: SoftBinding): Binder;
|
|
463
|
-
/**
|
|
464
|
-
* Local ISCC Image-Code for supported image formats.
|
|
465
|
-
*/
|
|
466
|
-
static iscc(): Binder;
|
|
437
|
+
verify(input: RangeSource, recovery?: Recovery | null): Promise<AssetVerification>;
|
|
467
438
|
}
|
|
468
439
|
|
|
469
440
|
/**
|
|
@@ -527,6 +498,30 @@ export function C2PA_TSA_TRUST_LIST(): string;
|
|
|
527
498
|
|
|
528
499
|
export function DEV_CA(): string;
|
|
529
500
|
|
|
501
|
+
/**
|
|
502
|
+
* A binder contributing a binding you already hold (e.g. an out-of-band video ISCC):
|
|
503
|
+
* `new HeldBinder(binding)`, the spelling the native lane uses. A verify takes it as data,
|
|
504
|
+
* `{ kind: "held", binding }`, in `recovery.binders`.
|
|
505
|
+
*/
|
|
506
|
+
export class HeldBinder {
|
|
507
|
+
free(): void;
|
|
508
|
+
[Symbol.dispose](): void;
|
|
509
|
+
/**
|
|
510
|
+
* Hand back the held binding; reads nothing.
|
|
511
|
+
*
|
|
512
|
+
* # Errors
|
|
513
|
+
*
|
|
514
|
+
* Throws when the source cannot be opened.
|
|
515
|
+
*/
|
|
516
|
+
derive(content: RangeSource, options: DeriveOptions): Promise<SoftBinding | undefined>;
|
|
517
|
+
/**
|
|
518
|
+
* # Errors
|
|
519
|
+
*
|
|
520
|
+
* Throws `SdkError.invalid` on a binding with an empty algorithm or value.
|
|
521
|
+
*/
|
|
522
|
+
constructor(binding: SoftBinding);
|
|
523
|
+
}
|
|
524
|
+
|
|
530
525
|
export class IntoUnderlyingByteSource {
|
|
531
526
|
private constructor();
|
|
532
527
|
free(): void;
|
|
@@ -555,6 +550,28 @@ export class IntoUnderlyingSource {
|
|
|
555
550
|
pull(controller: ReadableStreamDefaultController): Promise<any>;
|
|
556
551
|
}
|
|
557
552
|
|
|
553
|
+
/**
|
|
554
|
+
* The SDK's local ISCC Image-Code binder, for a standalone `derive`: `new IsccBinder()`, the
|
|
555
|
+
* spelling the native lane uses. A verify takes it as data, `{ kind: "iscc" }`, in
|
|
556
|
+
* `recovery.binders`, because a class cannot cross into a worker.
|
|
557
|
+
*
|
|
558
|
+
* Vendor watermark detection is repository-side in this SDK: configured detectors participate in
|
|
559
|
+
* `verify` through `byContent`, while a held binder covers values already available to the caller.
|
|
560
|
+
*/
|
|
561
|
+
export class IsccBinder {
|
|
562
|
+
free(): void;
|
|
563
|
+
[Symbol.dispose](): void;
|
|
564
|
+
/**
|
|
565
|
+
* Derive the asset's ISCC standalone; `undefined` when the format yields none.
|
|
566
|
+
*
|
|
567
|
+
* # Errors
|
|
568
|
+
*
|
|
569
|
+
* Throws on malformed or unreadable input.
|
|
570
|
+
*/
|
|
571
|
+
derive(content: RangeSource, options: DeriveOptions): Promise<SoftBinding | undefined>;
|
|
572
|
+
constructor();
|
|
573
|
+
}
|
|
574
|
+
|
|
558
575
|
/**
|
|
559
576
|
* An in-memory [`RangeSource`](crate::wasm::RangeInput), for a caller that already holds the whole
|
|
560
577
|
* asset as bytes.
|
|
@@ -641,19 +658,10 @@ export class StreamVerifier {
|
|
|
641
658
|
resume(stream_id: string, state: Uint8Array): StreamValidation;
|
|
642
659
|
}
|
|
643
660
|
|
|
644
|
-
/**
|
|
645
|
-
* Per-call soft-binding inputs. `recovery` is required when the verifier has a registry.
|
|
646
|
-
*/
|
|
647
|
-
export class VerifyOptions {
|
|
648
|
-
free(): void;
|
|
649
|
-
[Symbol.dispose](): void;
|
|
650
|
-
constructor(binders: Binder[], recovery?: Recovery | null);
|
|
651
|
-
}
|
|
652
|
-
|
|
653
661
|
export function init_panic_hook(): void;
|
|
654
662
|
|
|
655
663
|
/**
|
|
656
|
-
* Parse a detached C2PA manifest store: a `.c2pa` sidecar, or the bytes a
|
|
664
|
+
* Parse a detached C2PA manifest store: a `.c2pa` sidecar, or the bytes a repository serves for a
|
|
657
665
|
* manifest id.
|
|
658
666
|
*
|
|
659
667
|
* Contents, not a verdict. A hard binding is a hash of the asset, so a store read without one
|
|
@@ -705,8 +713,9 @@ export interface InitOutput {
|
|
|
705
713
|
readonly __wbg_assetverifier_free: (a: number, b: number) => void;
|
|
706
714
|
readonly __wbg_blobsource_free: (a: number, b: number) => void;
|
|
707
715
|
readonly __wbg_bytessource_free: (a: number, b: number) => void;
|
|
716
|
+
readonly __wbg_heldbinder_free: (a: number, b: number) => void;
|
|
717
|
+
readonly __wbg_isccbinder_free: (a: number, b: number) => void;
|
|
708
718
|
readonly __wbg_memorysource_free: (a: number, b: number) => void;
|
|
709
|
-
readonly __wbg_verifyoptions_free: (a: number, b: number) => void;
|
|
710
719
|
readonly assetverifier_create: (a: any) => [number, number, number];
|
|
711
720
|
readonly assetverifier_verify: (a: number, b: any, c: number) => any;
|
|
712
721
|
readonly blobsource_length: (a: number) => number;
|
|
@@ -715,28 +724,27 @@ export interface InitOutput {
|
|
|
715
724
|
readonly bytessource_length: (a: number) => number;
|
|
716
725
|
readonly bytessource_new: (a: any) => number;
|
|
717
726
|
readonly bytessource_readAt: (a: number, b: number, c: number) => any;
|
|
727
|
+
readonly heldbinder_derive: (a: number, b: any, c: any) => any;
|
|
728
|
+
readonly heldbinder_new: (a: any) => [number, number, number];
|
|
729
|
+
readonly isccbinder_derive: (a: number, b: any, c: any) => any;
|
|
730
|
+
readonly isccbinder_new: () => number;
|
|
718
731
|
readonly memorysource_length: (a: number) => number;
|
|
719
732
|
readonly memorysource_new: (a: number, b: number) => number;
|
|
720
733
|
readonly memorysource_readAt: (a: number, b: number, c: number) => any;
|
|
721
|
-
readonly parse: (a: number, b: number) => [number, number, number];
|
|
722
|
-
readonly resource: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
|
723
|
-
readonly thumbnails: (a: number, b: number) => [number, number, number];
|
|
724
|
-
readonly verifyoptions_new: (a: number, b: number, c: number) => number;
|
|
725
|
-
readonly __wbg_binder_free: (a: number, b: number) => void;
|
|
726
|
-
readonly binder_derive: (a: number, b: any, c: number, d: number) => any;
|
|
727
|
-
readonly binder_held: (a: any) => [number, number, number];
|
|
728
|
-
readonly binder_iscc: () => number;
|
|
729
734
|
readonly C2PA_TRUST_LIST: () => [number, number];
|
|
730
735
|
readonly C2PA_TSA_TRUST_LIST: () => [number, number];
|
|
731
736
|
readonly DEV_CA: () => [number, number];
|
|
732
737
|
readonly init_panic_hook: () => void;
|
|
733
738
|
readonly __wbg_streamvalidation_free: (a: number, b: number) => void;
|
|
734
739
|
readonly __wbg_streamverifier_free: (a: number, b: number) => void;
|
|
740
|
+
readonly parse: (a: number, b: number) => [number, number, number];
|
|
741
|
+
readonly resource: (a: number, b: number, c: number, d: number) => [number, number, number, number];
|
|
735
742
|
readonly streamvalidation_export: (a: number) => [number, number, number, number];
|
|
736
743
|
readonly streamvalidation_validate: (a: number, b: any) => any;
|
|
737
744
|
readonly streamverifier_create: (a: any) => [number, number, number];
|
|
738
745
|
readonly streamverifier_open: (a: number, b: number, c: number) => number;
|
|
739
746
|
readonly streamverifier_resume: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
|
|
747
|
+
readonly thumbnails: (a: number, b: number) => [number, number, number];
|
|
740
748
|
readonly __wbg_intounderlyingbytesource_free: (a: number, b: number) => void;
|
|
741
749
|
readonly intounderlyingbytesource_autoAllocateChunkSize: (a: number) => number;
|
|
742
750
|
readonly intounderlyingbytesource_cancel: (a: number) => void;
|