@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.
@@ -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 registry.
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 registry lookup base64-encodes.
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). `trust_c2pa_anchors` defaults to `true` when omitted.
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, optional fields) on wasm, a `uniffi::Record` on the native
103
- * `ffi` build, so there is no per-lane DTO copy. Off both lanes it is a plain struct.
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 registry to recover from. Omit for a verifier that only checks embedded manifests.
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
- registry?: RegistryOptions;
118
+ repositories: Repository[];
110
119
  /**
111
- * PEM trust anchors for the caller\'s own issuers.
120
+ * PEM trust anchors for the manifest signers the caller trusts.
112
121
  */
113
122
  trustAnchors: string[];
114
123
  /**
115
- * Also trust the bundled official C2PA anchors on top of `trust_anchors`.
116
- * Defaults to `true`; set `false` to trust only `trust_anchors`.
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?: boolean;
131
+ trustC2paAnchors: boolean;
119
132
  /**
120
133
  * Issuer DIDs whose CAWG identity (ICA) credentials count as validated, matched
121
- * exactly against the credential issuer. Omitted or empty trusts no issuer: every
122
- * identity assertion then reports `cawg.ica.untrusted_issuer` and withholds
123
- * `cawg.ica.credential_valid`, which leaves the manifest\'s own validity untouched.
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?: string[];
138
+ trustedIcaIssuers: string[];
126
139
  }
127
140
 
128
141
  /**
129
142
  * Construction options for [`StreamVerifier::new`] (and the `StreamVerifier.create`
130
- * JS binding). `trust_c2pa_anchors` defaults to `true` when omitted.
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, optional) and,
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\'s own issuers.
151
+ * PEM trust anchors for the manifest signers the caller trusts.
139
152
  */
140
153
  trustAnchors: string[];
141
154
  /**
142
- * Also trust the bundled official C2PA anchors on top of `trust_anchors`.
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
- trustC2paAnchors?: boolean;
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. Omitted or empty trusts no issuer: an
149
- * identity assertion on the init segment\'s manifest then reports
150
- * `cawg.ica.untrusted_issuer` and withholds `cawg.ica.credential_valid`.
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?: string[];
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. Defaults to [`DEFAULT_SEGMENT_SKEW_TOLERANCE_SECS`]. A deployment whose
156
- * encoder clock drifts further than that needs this rather than a fork.
172
+ * skewed, in seconds: the deployment\'s own encoder-clock allowance, stated rather than
173
+ * assumed.
157
174
  */
158
- segmentSkewToleranceSecs?: number;
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
- * One C2PA validation status entry (spec §15.3).
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 with the registry. Required whenever a registry is configured.
291
- *
292
- * One field per Soft Binding Resolution API operation, and an absent one is not called.
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 registry.
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 = { method: "byBinding"; class: ContentBindingClass; binding: SoftBinding; binderIndex: number; registryScore: number | undefined; endpoint: string | undefined } | { method: "byContent"; hint: SoftBinding | undefined; class: ContentBindingClass; algorithm: string; registryScore: number | undefined; endpoint: string | undefined } | { method: "byReference"; hint: SoftBinding | undefined; class: ContentBindingClass; algorithm: string; registryScore: number | undefined; endpoint: string | undefined };
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 registry (or binder) failure, or a validation
434
+ * Throws on a malformed `input`, a repository (or binder) failure, or a validation
434
435
  * failure.
435
436
  */
436
- verify(input: RangeSource, options: VerifyOptions): Promise<AssetVerification>;
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 registry serves for 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;