@attestry/sdk 0.6.0 → 0.7.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.
Files changed (49) hide show
  1. package/README.md +3 -3
  2. package/dist/annex-iv-verify/data-integrity.d.ts +57 -0
  3. package/dist/annex-iv-verify/data-integrity.d.ts.map +1 -0
  4. package/dist/annex-iv-verify/data-integrity.js +172 -0
  5. package/dist/annex-iv-verify/data-integrity.js.map +1 -0
  6. package/dist/annex-iv-verify/ed25519.d.ts +21 -0
  7. package/dist/annex-iv-verify/ed25519.d.ts.map +1 -0
  8. package/dist/annex-iv-verify/ed25519.js +67 -0
  9. package/dist/annex-iv-verify/ed25519.js.map +1 -0
  10. package/dist/annex-iv-verify/index.d.ts +4 -0
  11. package/dist/annex-iv-verify/index.d.ts.map +1 -0
  12. package/dist/annex-iv-verify/index.js +11 -0
  13. package/dist/annex-iv-verify/index.js.map +1 -0
  14. package/dist/annex-iv-verify/jwk.d.ts +27 -0
  15. package/dist/annex-iv-verify/jwk.d.ts.map +1 -0
  16. package/dist/annex-iv-verify/jwk.js +57 -0
  17. package/dist/annex-iv-verify/jwk.js.map +1 -0
  18. package/dist/annex-iv-verify/multibase.d.ts +31 -0
  19. package/dist/annex-iv-verify/multibase.d.ts.map +1 -0
  20. package/dist/annex-iv-verify/multibase.js +131 -0
  21. package/dist/annex-iv-verify/multibase.js.map +1 -0
  22. package/dist/annex-iv-verify/resolver.d.ts +28 -0
  23. package/dist/annex-iv-verify/resolver.d.ts.map +1 -0
  24. package/dist/annex-iv-verify/resolver.js +58 -0
  25. package/dist/annex-iv-verify/resolver.js.map +1 -0
  26. package/dist/annex-iv-verify/status-list.d.ts +57 -0
  27. package/dist/annex-iv-verify/status-list.d.ts.map +1 -0
  28. package/dist/annex-iv-verify/status-list.js +185 -0
  29. package/dist/annex-iv-verify/status-list.js.map +1 -0
  30. package/dist/annex-iv-verify/verify.d.ts +164 -0
  31. package/dist/annex-iv-verify/verify.d.ts.map +1 -0
  32. package/dist/annex-iv-verify/verify.js +273 -0
  33. package/dist/annex-iv-verify/verify.js.map +1 -0
  34. package/dist/client.d.ts +2 -0
  35. package/dist/client.d.ts.map +1 -1
  36. package/dist/client.js +4 -0
  37. package/dist/client.js.map +1 -1
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +12 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/resources/annex-iv.d.ts +110 -0
  43. package/dist/resources/annex-iv.d.ts.map +1 -0
  44. package/dist/resources/annex-iv.js +146 -0
  45. package/dist/resources/annex-iv.js.map +1 -0
  46. package/dist/transport.js +1 -1
  47. package/dist/transport.js.map +1 -1
  48. package/dist/types.d.ts +1 -1
  49. package/package.json +7 -2
@@ -0,0 +1,164 @@
1
+ import { type PublicKeyResolver } from "./data-integrity.js";
2
+ import { BITSTRING_STATUS_LIST_ENTRY, type CredentialStatusEntry, type RevocationCheck } from "./status-list.js";
3
+ import { type Ed25519PublicJwk } from "./resolver.js";
4
+ /** The domain-separation tag — verifier-ENFORCED (step 0). */
5
+ export declare const ANNEX_IV_BIND_TYPE = "ANNEX-IV-BIND-v1";
6
+ /** The JWS protected-header `typ` — a second, header-level domain tag. */
7
+ export declare const ANNEX_IV_BIND_JWS_TYP = "application/annex-iv-bind-v1+jws";
8
+ /** The JWS signature algorithm (Ed25519). */
9
+ export declare const ANNEX_IV_BIND_ALG = "EdDSA";
10
+ /** The honest temporal label for the JWS path (declared N/A by design). */
11
+ export declare const ANNEX_IV_BIND_SIGNING_TIME_LABEL = "issuer-asserted signing time, not independently timestamped";
12
+ /** The signed `ANNEX-IV-BIND-v1` payload — the full triple + binding fields. */
13
+ export interface AnnexIvBindPayload {
14
+ /** Domain-separation tag (literal {@link ANNEX_IV_BIND_TYPE}). */
15
+ type: typeof ANNEX_IV_BIND_TYPE;
16
+ /** The Attestry issuer id (the same value the status-list VC carries). */
17
+ issuer: string;
18
+ /** `"sha256:" + 64hex` of the EXACT emitted PDF Buffer. */
19
+ pdf_byte_sha256: string;
20
+ /** `attestations.certificateHash` for the file's current attestation cert. */
21
+ attestation_certificate_hash: string;
22
+ /** `evidencePacks.contentHash[]` (`sha256:<hex>`) — DEDUPED then sorted ascending. */
23
+ evidence_pack_content_hashes: string[];
24
+ /** The file's `signedAt`, ISO-8601 UTC second-precision (issuer-asserted signing time). */
25
+ issued_at: string;
26
+ /** The active signing-key id. */
27
+ kid: string;
28
+ /** The FULL `verificationMethod` URL: `<keysBaseUrl>#<kid>`. */
29
+ verificationMethod: string;
30
+ /** The published status-list VC URL. */
31
+ status_list_ref: string;
32
+ /** The per-file UNIQUE revocation index. */
33
+ status_list_index: number;
34
+ /** A `BitstringStatusListEntry`-shaped object driving offline revocation. */
35
+ credentialStatus: CredentialStatusEntry;
36
+ }
37
+ /** A parsed compact JWS (the three base64url segments + decoded header/payload). */
38
+ export interface ParsedAnnexIvBindJws {
39
+ protectedB64: string;
40
+ payloadB64: string;
41
+ signatureB64: string;
42
+ header: Record<string, unknown>;
43
+ payload: AnnexIvBindPayload;
44
+ }
45
+ /**
46
+ * Parse a compact `ANNEX-IV-BIND-v1` JWS into its segments + decoded
47
+ * header/payload. Fails closed on a malformed serialization, wrong segment
48
+ * count, or absent domain tags. Does NOT verify the signature.
49
+ */
50
+ export declare function parseAnnexIvBindJws(jws: string): ParsedAnnexIvBindJws;
51
+ /**
52
+ * The MINIMAL internal signature verify: `ed25519Verify` over the RECEIVED
53
+ * `protected_b64 ‖ "." ‖ payload_b64` octets (RFC-7515 §5.2 — NEVER
54
+ * re-canonicalize/re-encode at verify), against the resolver-supplied public
55
+ * key. Returns a boolean; never throws.
56
+ */
57
+ export declare function verifyAnnexIvBindReceivedOctets(parsed: ParsedAnnexIvBindJws, publicKey: Uint8Array | null | undefined): boolean;
58
+ /** The structured, fail-closed result of {@link verifyAnnexIvBindOffline}. */
59
+ export interface VerifyAnnexIvBindResult {
60
+ /** Overall verdict: tag ∧ fields ∧ signature ∧ byte-hash ∧ not-a-confirmed-revocation. */
61
+ valid: boolean;
62
+ /** The first failing step (0–4) or "revocation" — for diagnostics. */
63
+ reason?: string;
64
+ /** True once the protected-header + payload domain tags both matched (step 0). */
65
+ tagOk: boolean;
66
+ /** True once every bind field was present + well-typed (step 1). */
67
+ fieldsOk: boolean;
68
+ /** True once `ed25519Verify` over the RECEIVED octets passed (step 3). */
69
+ signatureOk: boolean;
70
+ /** True once `sha256(suppliedPdfBytes) === payload.pdf_byte_sha256` (step 4). */
71
+ byteBindingOk: boolean;
72
+ /**
73
+ * The two-check revocation result (step 6). `checked:false` is the honest
74
+ * "status not evaluated" label (no cached list / offline) — never a false
75
+ * "not revoked".
76
+ */
77
+ revocation: RevocationCheck;
78
+ /**
79
+ * Temporal is declared N/A for the JWS path: a 10-yr Art-18 artifact has no
80
+ * validity window — invalidation is revocation, and `issued_at` is the
81
+ * labelled issuer-asserted signing time, not a window.
82
+ */
83
+ temporal: {
84
+ applicable: false;
85
+ issuedAt: string | null;
86
+ /** {@link ANNEX_IV_BIND_SIGNING_TIME_LABEL}. */
87
+ label: string;
88
+ };
89
+ }
90
+ /**
91
+ * Inputs to {@link verifyAnnexIvBindOffline} — sidecar + PDF bytes + key
92
+ * material, NO DB, NO network.
93
+ *
94
+ * Key resolution precedence: `resolvePublicKey` (if given) → else a resolver
95
+ * built from `jwks` → else a typed `AttestryError` (missing key material).
96
+ */
97
+ export interface VerifyAnnexIvBindOfflineInput {
98
+ /** The compact RFC-7515 sidecar JWS (the `bind_artifact` / `sidecarJws`). */
99
+ sidecarJws: string;
100
+ /** The PDF bytes to byte-bind against `payload.pdf_byte_sha256` (step 4). */
101
+ pdfBytes: Uint8Array;
102
+ /**
103
+ * A cached/out-of-band status-list VC for the two-check revocation (step 6).
104
+ * Omitted ⇒ `revocation.checked = false` (honest "status not evaluated").
105
+ */
106
+ cachedStatusListCredential?: unknown;
107
+ /**
108
+ * How the envelope's FULL `verificationMethod` URL resolves to a raw public
109
+ * key (step 2). Takes precedence over `jwks`. A resolver that returns
110
+ * null/undefined ⇒ fail-closed `valid:false`. A resolver that THROWS
111
+ * PROPAGATES (verdict-identity with the kernel — it calls the resolver bare).
112
+ */
113
+ resolvePublicKey?: PublicKeyResolver;
114
+ /**
115
+ * A JWKS (an array of public JWKs, or a `{ keys }` object). When
116
+ * `resolvePublicKey` is absent, a fail-closed resolver is built from this via
117
+ * `makeJwksResolver` (kid-match → `null` on a bad/absent entry, never throws).
118
+ */
119
+ jwks?: Ed25519PublicJwk[] | {
120
+ keys: Ed25519PublicJwk[];
121
+ };
122
+ }
123
+ /**
124
+ * The OFFLINE Annex IV bind verifier: sidecar + PDF bytes + key material →
125
+ * valid/invalid, **NO DB, NO network**. The faithful SDK port of the kernel's
126
+ * `verifyAnnexIvBind` (same ordered, fail-closed steps; the kernel is the
127
+ * source of truth and the golden cross-vectors break first on divergence):
128
+ *
129
+ * 0. Domain-tag assert — the protected-header `typ` AND the payload `type`
130
+ * both match (parse fails closed otherwise). A validly-signed attestation /
131
+ * status-list VC fed here is rejected ON THE TAG, not the hash.
132
+ * 1. Every bind field present + well-typed — fail-closed on ANY absence.
133
+ * 2. Resolve the key OFFLINE from the envelope's FULL `verificationMethod` URL
134
+ * (precedence: `resolvePublicKey` → `jwks`→`makeJwksResolver` → typed throw).
135
+ * 3. `ed25519Verify` over the RECEIVED `protected_b64 ‖ "." ‖ payload_b64`
136
+ * octets — NEVER re-canonicalize/re-encode at verify (RFC-7515 §5.2).
137
+ * 4. Byte-binding (AFTER 0–3): `sha256(suppliedPdfBytes)` vs `pdf_byte_sha256`.
138
+ * 5. Temporal — declared N/A (10-yr artifact; invalidation = revocation).
139
+ * 6. Two-check revocation — `checkRevocationOffline(credentialStatus, cached,
140
+ * resolver, issuer)`; VALID requires signature-valid AND bit-not-revoked;
141
+ * no cached list ⇒ `checked:false`.
142
+ *
143
+ * THROW/NEVER-THROW CONTRACT (the single source of truth):
144
+ * - Throws ONLY the typed missing-key-material precondition (`AttestryError`)
145
+ * — a usage error, NOT a verification failure.
146
+ * - NEVER throws on a malformed/forged JSON ARTIFACT (sidecar / pdf /
147
+ * statusList → fail-closed `valid:false`; the per-guard hostile table pins
148
+ * the tampered-list cases). CAVEAT: a `cachedStatusListCredential` HAND-BUILT
149
+ * with a non-JSON-representable value (NaN / Infinity / BigInt / a circular
150
+ * ref) in a canonicalized field propagates the JCS `canonicalize` throw —
151
+ * verdict-IDENTICAL with the kernel oracle (a JSON-sourced cached VC, the
152
+ * documented path, cannot carry these); a loud catchable error, NEVER a
153
+ * false `valid:true`.
154
+ * - A caller-supplied `resolvePublicKey` that THROWS **propagates** (the
155
+ * kernel calls the resolver bare at both the signature leg and the
156
+ * revocation leg — the SDK re-throws to stay verdict-identical). This is
157
+ * DISTINCT from a resolver that RETURNS null (→ `valid:false` "public key
158
+ * did not resolve offline") and from `makeJwksResolver`'s deliberate
159
+ * fail-closed-to-null on a bad/absent jwks entry.
160
+ */
161
+ export declare function verifyAnnexIvBindOffline(input: VerifyAnnexIvBindOfflineInput): VerifyAnnexIvBindResult;
162
+ export { BITSTRING_STATUS_LIST_ENTRY };
163
+ export type { CredentialStatusEntry, RevocationCheck };
164
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/annex-iv-verify/verify.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAE3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIxE,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,qCAAqC,CAAC;AACxE,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC,gEACkB,CAAC;AAmBhE,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,IAAI,EAAE,OAAO,kBAAkB,CAAC;IAChC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,4BAA4B,EAAE,MAAM,CAAC;IACrC,sFAAsF;IACtF,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAwBrE;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAUT;AAID,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,0FAA0F;IAC1F,KAAK,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,UAAU,EAAE,eAAe,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,EAAE;QACR,UAAU,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,gDAAgD;QAChD,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,QAAQ,EAAE,UAAU,CAAC;IACrB;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG;QAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;CAC1D;AAkDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,uBAAuB,CA4FzB;AAID,OAAO,EAAE,2BAA2B,EAAE,CAAC;AACvC,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,273 @@
1
+ // VERIFY-only faithful port of the bind verify-core of
2
+ // `src/lib/annex-iv/cryptobind.ts` — the kernel `verifyAnnexIvBind` is the
3
+ // source of truth; the golden cross-vectors (`__tests__/golden-vectors.json`)
4
+ // break first on any divergence. Do NOT edit semantics independently.
5
+ //
6
+ // This is the ONE HAND-WRITTEN file in the port (the 5 crypto files are
7
+ // verbatim copies). It carries the verify-core ONLY — the sign-side
8
+ // (`signAnnexIvBind`, `buildAnnexIvBindPayload`, `cryptobindTechnicalFilePdf`,
9
+ // the renderer, the key-registry) is NOT ported; the SDK never mints. Imports
10
+ // are rewritten to explicit `.js` extensions (the SDK is `module:"Node16"`).
11
+ //
12
+ // Two intentional divergences from the kernel SOURCE TEXT that are NOT semantic
13
+ // divergences (verdict-identity is preserved — the probe proved it):
14
+ // 1. `AnnexIvBindError` is a LOCAL `class extends Error` (the kernel's extends
15
+ // the abstract `AnnexIvError` with `code`/`httpStatus`; the verify path
16
+ // reads ONLY `e.message` via the step-0 catch, never class identity / code /
17
+ // httpStatus). Every thrown MESSAGE string is preserved VERBATIM.
18
+ // 2. `verifyAnnexIvBindOffline` has NO env-registry default resolver — it
19
+ // requires caller-supplied key material (`resolvePublicKey` or `jwks`) per
20
+ // the SDK contract; the kernel's default `resolvePublicKeyByVerificationMethod`
21
+ // is server-only.
22
+ import { AttestryError } from "../errors.js";
23
+ import { base64urlToBytes } from "./jwk.js";
24
+ import { ed25519Verify, sha256 } from "./ed25519.js";
25
+ import { BITSTRING_STATUS_LIST_ENTRY, checkRevocationOffline, } from "./status-list.js";
26
+ import { makeJwksResolver } from "./resolver.js";
27
+ // ─── Constants (verbatim from cryptobind.ts) ───────────────────────────────--
28
+ /** The domain-separation tag — verifier-ENFORCED (step 0). */
29
+ export const ANNEX_IV_BIND_TYPE = "ANNEX-IV-BIND-v1";
30
+ /** The JWS protected-header `typ` — a second, header-level domain tag. */
31
+ export const ANNEX_IV_BIND_JWS_TYP = "application/annex-iv-bind-v1+jws";
32
+ /** The JWS signature algorithm (Ed25519). */
33
+ export const ANNEX_IV_BIND_ALG = "EdDSA";
34
+ /** The honest temporal label for the JWS path (declared N/A by design). */
35
+ export const ANNEX_IV_BIND_SIGNING_TIME_LABEL = "issuer-asserted signing time, not independently timestamped";
36
+ // ─── Local typed error (C-C-1) ──────────────────────────────────────────────-
37
+ //
38
+ // The kernel's `AnnexIvBindError extends AnnexIvError` (an abstract base with
39
+ // `code`/`httpStatus`, used by the route mapper). The verify path NEVER reads
40
+ // class identity / `code` / `httpStatus` — only `e.message` (via the step-0
41
+ // catch below) — so a minimal local `extends Error` is verdict-identical. The
42
+ // thrown message strings are preserved verbatim from `parseAnnexIvBindJws`.
43
+ class AnnexIvBindError extends Error {
44
+ constructor(message) {
45
+ super(message);
46
+ this.name = "AnnexIvBindError";
47
+ Object.setPrototypeOf(this, new.target.prototype);
48
+ }
49
+ }
50
+ // ─── Internals (verbatim) ──────────────────────────────────────────────────--
51
+ const SHA256_HEX_RE = /^sha256:[0-9a-f]{64}$/;
52
+ const BIND_HASH_RE = /^sha256:[0-9a-f]{64}$/;
53
+ const textEncoder = new TextEncoder();
54
+ /** Lowercase 64-hex SHA-256 of `bytes`, prefixed `sha256:` (the repo convention). */
55
+ function sha256Prefixed(bytes) {
56
+ const hashBytes = sha256(bytes);
57
+ let hex = "";
58
+ for (const b of hashBytes)
59
+ hex += b.toString(16).padStart(2, "0");
60
+ return `sha256:${hex}`;
61
+ }
62
+ /**
63
+ * Parse a compact `ANNEX-IV-BIND-v1` JWS into its segments + decoded
64
+ * header/payload. Fails closed on a malformed serialization, wrong segment
65
+ * count, or absent domain tags. Does NOT verify the signature.
66
+ */
67
+ export function parseAnnexIvBindJws(jws) {
68
+ if (typeof jws !== "string") {
69
+ throw new AnnexIvBindError("JWS must be a string");
70
+ }
71
+ const parts = jws.split(".");
72
+ if (parts.length !== 3) {
73
+ throw new AnnexIvBindError(`compact JWS must have 3 segments, got ${parts.length}`);
74
+ }
75
+ const [protectedB64, payloadB64, signatureB64] = parts;
76
+ let header;
77
+ let payload;
78
+ try {
79
+ header = JSON.parse(Buffer.from(base64urlToBytes(protectedB64)).toString("utf8"));
80
+ payload = JSON.parse(Buffer.from(base64urlToBytes(payloadB64)).toString("utf8"));
81
+ }
82
+ catch (e) {
83
+ throw new AnnexIvBindError(`malformed JWS segment: ${e instanceof Error ? e.message : String(e)}`);
84
+ }
85
+ if (header.typ !== ANNEX_IV_BIND_JWS_TYP) {
86
+ throw new AnnexIvBindError(`unexpected JWS typ: ${JSON.stringify(header.typ)}`);
87
+ }
88
+ if (payload?.type !== ANNEX_IV_BIND_TYPE) {
89
+ throw new AnnexIvBindError(`unexpected payload type: ${JSON.stringify(payload?.type)}`);
90
+ }
91
+ return { protectedB64, payloadB64, signatureB64, header, payload };
92
+ }
93
+ /**
94
+ * The MINIMAL internal signature verify: `ed25519Verify` over the RECEIVED
95
+ * `protected_b64 ‖ "." ‖ payload_b64` octets (RFC-7515 §5.2 — NEVER
96
+ * re-canonicalize/re-encode at verify), against the resolver-supplied public
97
+ * key. Returns a boolean; never throws.
98
+ */
99
+ export function verifyAnnexIvBindReceivedOctets(parsed, publicKey) {
100
+ if (!publicKey)
101
+ return false;
102
+ let signature;
103
+ try {
104
+ signature = base64urlToBytes(parsed.signatureB64);
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ const signingInput = textEncoder.encode(`${parsed.protectedB64}.${parsed.payloadB64}`);
110
+ return ed25519Verify(signature, signingInput, publicKey);
111
+ }
112
+ // ─── Fail-closed result helpers (verbatim) ──────────────────────────────────-
113
+ /** A fail-closed INVALID result carrying the failing step + the (partial) flags. */
114
+ function bindInvalid(reason, flags = {}) {
115
+ return {
116
+ valid: false,
117
+ reason,
118
+ tagOk: false,
119
+ fieldsOk: false,
120
+ signatureOk: false,
121
+ byteBindingOk: false,
122
+ revocation: { checked: false, revoked: false, reason: "not evaluated" },
123
+ temporal: { applicable: false, issuedAt: null, label: ANNEX_IV_BIND_SIGNING_TIME_LABEL },
124
+ ...flags,
125
+ };
126
+ }
127
+ /** True iff every bind field on the parsed payload is present + well-typed (step 1). */
128
+ function allBindFieldsWellTyped(p) {
129
+ return (typeof p.pdf_byte_sha256 === "string" &&
130
+ BIND_HASH_RE.test(p.pdf_byte_sha256) &&
131
+ typeof p.attestation_certificate_hash === "string" &&
132
+ p.attestation_certificate_hash.length > 0 &&
133
+ Array.isArray(p.evidence_pack_content_hashes) &&
134
+ p.evidence_pack_content_hashes.every((h) => typeof h === "string" && SHA256_HEX_RE.test(h)) &&
135
+ typeof p.issued_at === "string" &&
136
+ p.issued_at.length > 0 &&
137
+ typeof p.kid === "string" &&
138
+ p.kid.length > 0 &&
139
+ typeof p.verificationMethod === "string" &&
140
+ p.verificationMethod.length > 0 &&
141
+ typeof p.status_list_ref === "string" &&
142
+ p.status_list_ref.length > 0 &&
143
+ Number.isInteger(p.status_list_index) &&
144
+ p.status_list_index >= 0 &&
145
+ typeof p.issuer === "string" &&
146
+ p.issuer.length > 0 &&
147
+ p.credentialStatus != null &&
148
+ typeof p.credentialStatus === "object");
149
+ }
150
+ // ─── The OFFLINE verifier (verbatim logic; SDK key-resolution) ──────────────--
151
+ /**
152
+ * The OFFLINE Annex IV bind verifier: sidecar + PDF bytes + key material →
153
+ * valid/invalid, **NO DB, NO network**. The faithful SDK port of the kernel's
154
+ * `verifyAnnexIvBind` (same ordered, fail-closed steps; the kernel is the
155
+ * source of truth and the golden cross-vectors break first on divergence):
156
+ *
157
+ * 0. Domain-tag assert — the protected-header `typ` AND the payload `type`
158
+ * both match (parse fails closed otherwise). A validly-signed attestation /
159
+ * status-list VC fed here is rejected ON THE TAG, not the hash.
160
+ * 1. Every bind field present + well-typed — fail-closed on ANY absence.
161
+ * 2. Resolve the key OFFLINE from the envelope's FULL `verificationMethod` URL
162
+ * (precedence: `resolvePublicKey` → `jwks`→`makeJwksResolver` → typed throw).
163
+ * 3. `ed25519Verify` over the RECEIVED `protected_b64 ‖ "." ‖ payload_b64`
164
+ * octets — NEVER re-canonicalize/re-encode at verify (RFC-7515 §5.2).
165
+ * 4. Byte-binding (AFTER 0–3): `sha256(suppliedPdfBytes)` vs `pdf_byte_sha256`.
166
+ * 5. Temporal — declared N/A (10-yr artifact; invalidation = revocation).
167
+ * 6. Two-check revocation — `checkRevocationOffline(credentialStatus, cached,
168
+ * resolver, issuer)`; VALID requires signature-valid AND bit-not-revoked;
169
+ * no cached list ⇒ `checked:false`.
170
+ *
171
+ * THROW/NEVER-THROW CONTRACT (the single source of truth):
172
+ * - Throws ONLY the typed missing-key-material precondition (`AttestryError`)
173
+ * — a usage error, NOT a verification failure.
174
+ * - NEVER throws on a malformed/forged JSON ARTIFACT (sidecar / pdf /
175
+ * statusList → fail-closed `valid:false`; the per-guard hostile table pins
176
+ * the tampered-list cases). CAVEAT: a `cachedStatusListCredential` HAND-BUILT
177
+ * with a non-JSON-representable value (NaN / Infinity / BigInt / a circular
178
+ * ref) in a canonicalized field propagates the JCS `canonicalize` throw —
179
+ * verdict-IDENTICAL with the kernel oracle (a JSON-sourced cached VC, the
180
+ * documented path, cannot carry these); a loud catchable error, NEVER a
181
+ * false `valid:true`.
182
+ * - A caller-supplied `resolvePublicKey` that THROWS **propagates** (the
183
+ * kernel calls the resolver bare at both the signature leg and the
184
+ * revocation leg — the SDK re-throws to stay verdict-identical). This is
185
+ * DISTINCT from a resolver that RETURNS null (→ `valid:false` "public key
186
+ * did not resolve offline") and from `makeJwksResolver`'s deliberate
187
+ * fail-closed-to-null on a bad/absent jwks entry.
188
+ */
189
+ export function verifyAnnexIvBindOffline(input) {
190
+ // Key-resolution precedence (C-D2). A missing-key-material precondition is a
191
+ // loud, typed usage error — never a bare TypeError, never a verification fail.
192
+ let resolvePublicKey;
193
+ if (input.resolvePublicKey) {
194
+ resolvePublicKey = input.resolvePublicKey;
195
+ }
196
+ else if (input.jwks) {
197
+ resolvePublicKey = makeJwksResolver(input.jwks);
198
+ }
199
+ else {
200
+ throw new AttestryError("verifyAnnexIvBindOffline requires key material: pass `resolvePublicKey` or `jwks`");
201
+ }
202
+ // Step 0 — parse + domain-tag assert. `parseAnnexIvBindJws` fails closed on a
203
+ // wrong segment count, malformed JSON, or a mismatched/absent `typ`/`type` tag.
204
+ let parsed;
205
+ try {
206
+ parsed = parseAnnexIvBindJws(input.sidecarJws);
207
+ }
208
+ catch (e) {
209
+ return bindInvalid(`domain tag / parse: ${e instanceof Error ? e.message : String(e)}`);
210
+ }
211
+ const payload = parsed.payload;
212
+ // Step 1 — every bind field present + well-typed (fail-closed on ANY absence).
213
+ if (!allBindFieldsWellTyped(payload)) {
214
+ return bindInvalid("missing or ill-typed bind field", {
215
+ tagOk: true,
216
+ temporal: {
217
+ applicable: false,
218
+ issuedAt: typeof payload.issued_at === "string" ? payload.issued_at : null,
219
+ label: ANNEX_IV_BIND_SIGNING_TIME_LABEL,
220
+ },
221
+ });
222
+ }
223
+ const temporal = {
224
+ applicable: false,
225
+ issuedAt: payload.issued_at,
226
+ label: ANNEX_IV_BIND_SIGNING_TIME_LABEL,
227
+ };
228
+ // Step 2 — resolve the key OFFLINE from the FULL verificationMethod URL. A
229
+ // caller-supplied resolver that throws PROPAGATES (bare call — verdict-identity).
230
+ const publicKey = resolvePublicKey(payload.verificationMethod);
231
+ if (!publicKey) {
232
+ return bindInvalid("public key did not resolve offline", { tagOk: true, fieldsOk: true, temporal });
233
+ }
234
+ // Step 3 — verify over the RECEIVED octets (no re-canonicalization).
235
+ const signatureOk = verifyAnnexIvBindReceivedOctets(parsed, publicKey);
236
+ if (!signatureOk) {
237
+ return bindInvalid("signature invalid over the received octets", {
238
+ tagOk: true,
239
+ fieldsOk: true,
240
+ temporal,
241
+ });
242
+ }
243
+ // Step 4 — byte-binding (AFTER 0–3): sha256(supplied bytes) vs pdf_byte_sha256.
244
+ const byteBindingOk = sha256Prefixed(input.pdfBytes) === payload.pdf_byte_sha256;
245
+ if (!byteBindingOk) {
246
+ return bindInvalid("PDF byte-hash does not match the signed pdf_byte_sha256", {
247
+ tagOk: true,
248
+ fieldsOk: true,
249
+ signatureOk: true,
250
+ temporal,
251
+ });
252
+ }
253
+ // Step 6 — two-check revocation (4-arg, incl. the issuer-binding leg). The
254
+ // revocation leg also calls the resolver bare (a throw propagates). A confirmed
255
+ // revocation (checked AND revoked) is the only revocation FAIL; an unchecked
256
+ // status leaves the verdict standing, honestly labelled `checked:false`.
257
+ const revocation = checkRevocationOffline(payload.credentialStatus, input.cachedStatusListCredential, resolvePublicKey, payload.issuer);
258
+ const confirmedRevoked = revocation.checked && revocation.revoked;
259
+ return {
260
+ valid: !confirmedRevoked,
261
+ reason: confirmedRevoked ? "revoked" : undefined,
262
+ tagOk: true,
263
+ fieldsOk: true,
264
+ signatureOk: true,
265
+ byteBindingOk: true,
266
+ revocation,
267
+ temporal,
268
+ };
269
+ }
270
+ // Re-export the entry-shaped type + the revocation-check shape for consumers
271
+ // that want the full structured result types.
272
+ export { BITSTRING_STATUS_LIST_ENTRY };
273
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/annex-iv-verify/verify.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { AbacPoliciesResource } from "./resources/abac-policies.js";
2
+ import { AnnexIvResource } from "./resources/annex-iv.js";
2
3
  import { AuditLogResource } from "./resources/audit-log.js";
3
4
  import { BatchResource } from "./resources/batch.js";
4
5
  import { ChatResource } from "./resources/chat.js";
@@ -33,6 +34,7 @@ export declare class AttestryClient {
33
34
  readonly abacPolicies: AbacPoliciesResource;
34
35
  readonly evidencePack: EvidencePackResource;
35
36
  readonly vision: VisionResource;
37
+ readonly annexIv: AnnexIvResource;
36
38
  private readonly _config;
37
39
  constructor(options: AttestryClientOptions);
38
40
  /** Internal — resources call this to dispatch HTTP requests. */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAGhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAErD,OAAO,EAAE,qBAAqB;IAiB1C,gEAAgE;IAChE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD;;;;;;;;OAQG;IACH,cAAc,CAAC,IAAI,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,cAAc,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAGlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAErD,OAAO,EAAE,qBAAqB;IAkB1C,gEAAgE;IAChE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD;;;;;;;;OAQG;IACH,cAAc,CAAC,IAAI,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,cAAc,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGtB"}
package/dist/client.js CHANGED
@@ -8,6 +8,7 @@
8
8
  // it's not literally private because TypeScript class-private fields
9
9
  // would also hide it from the resource modules in this codebase.
10
10
  import { AbacPoliciesResource } from "./resources/abac-policies.js";
11
+ import { AnnexIvResource } from "./resources/annex-iv.js";
11
12
  import { AuditLogResource } from "./resources/audit-log.js";
12
13
  import { BatchResource } from "./resources/batch.js";
13
14
  import { ChatResource } from "./resources/chat.js";
@@ -36,6 +37,8 @@ export class AttestryClient {
36
37
  // 2.0 flagship resources (the ≥0.6.0 union — W1 deliverable 5)
37
38
  evidencePack;
38
39
  vision;
40
+ // Annex IV technical-file bind path (work-item C — the ≥0.7.0 surface).
41
+ annexIv;
39
42
  // Frozen at construction time; resources read this through `_request`.
40
43
  _config;
41
44
  constructor(options) {
@@ -53,6 +56,7 @@ export class AttestryClient {
53
56
  this.abacPolicies = new AbacPoliciesResource(this);
54
57
  this.evidencePack = new EvidencePackResource(this);
55
58
  this.vision = new VisionResource(this);
59
+ this.annexIv = new AnnexIvResource(this);
56
60
  }
57
61
  /** Internal — resources call this to dispatch HTTP requests. */
58
62
  _request(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,mEAAmE;AACnE,wEAAwE;AACxE,qEAAqE;AACrE,iEAAiE;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,mBAAmB,EACnB,aAAa,IAAI,sBAAsB,GACxC,MAAM,gBAAgB,CAAC;AAWxB,MAAM,OAAO,cAAc;IAChB,SAAS,CAAoB;IAC7B,SAAS,CAAoB;IAC7B,IAAI,CAAe;IACnB,QAAQ,CAAmB;IAC3B,iBAAiB,CAA4B;IAC7C,eAAe,CAA0B;IACzC,KAAK,CAAgB;IACrB,IAAI,CAAe;IACnB,KAAK,CAAgB;IACrB,QAAQ,CAAmB;IAC3B,YAAY,CAAuB;IAC5C,+DAA+D;IACtD,YAAY,CAAuB;IACnC,MAAM,CAAiB;IAChC,wEAAwE;IAC/D,OAAO,CAAkB;IAElC,uEAAuE;IACtD,OAAO,CAAyC;IAEjE,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,gEAAgE;IAChE,QAAQ,CAAI,IAAyB;QACnC,OAAO,gBAAgB,CAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,IAMd;QACC,OAAO,sBAAsB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -14,4 +14,8 @@ export { GateResource, type GateInput, type GateGap, type GateResponse, } from "
14
14
  export { BatchResource, BATCH_JOB_TYPES, BATCH_JOB_STATUSES, type BatchJobType, type BatchJobStatusValue, type BatchSystemResult, type BatchConfig, type BatchSubmitInput, type BatchSubmitResponse, type BatchJobStatus, } from "./resources/batch.js";
15
15
  export { ShipGateResource, type ShipGateInput, type ShipGateCheckResponse, type ShipGateReasonCode, type ShipGateState, } from "./resources/ship-gate.js";
16
16
  export { AbacPoliciesResource, ABAC_POLICY_RESOURCES, ABAC_POLICY_ACTIONS, ABAC_POLICY_EFFECTS, type AbacPolicy, type AbacPoliciesListResponse, type AbacPolicyCreateInput, type AbacPolicyUpdateInput, type AbacPolicyEffect, type AbacPolicyResource, type AbacPolicyAction, type AbacAttrRoot, type AbacAttrPath, type AbacAttrValue, type AbacLeafCondition, type AbacCompoundCondition, type AbacCondition, } from "./resources/abac-policies.js";
17
+ export { EvidencePackResource, PACK_TYPES, PACK_STATUSES, EXPORT_FORMATS, type PackType, type PackStatus, type ExportFormat, type CreateEvidencePackInput, type GetEvidencePackInput, type ListEvidencePacksInput, type AddBundleInput, type SignEvidencePackInput, type SupersedeEvidencePackNewPack, type SupersedeEvidencePackInput, type RevokeEvidencePackInput, type ExportEvidencePackInput, type EvidencePack, type ReperformanceBundle, type GetEvidencePackResponse, type ListEvidencePacksResponse, type HashCollision, type AddBundleResponse, type SupersedeEvidencePackResponse, type EvidencePackExportResult, } from "./resources/evidence-pack.js";
18
+ export { VisionResource, SUPPORTED_MEDIA_TYPES, SUPPORTED_DOCUMENT_TYPES, VISION_MODELS, PACK_INTEGRATION_STATUSES, type VisionSupportedMediaType, type VisionSupportedDocumentType, type VisionModelTier, type VisionPackIntegrationStatus, type VisionExtractInput, type VisionBatchDocument, type VisionBatchExtractInput, type VisionSchemaCompatibility, type VisionPackIntegrationHashCollision, type VisionPackIntegrationResult, type VisionTokensUsed, type VisionExtractResponse, type VisionBatchExtractResponse, type VisionJobStatus, } from "./resources/vision.js";
19
+ export { AnnexIvResource, type AnnexIvGenerateResult, type AnnexIvBindResult, type AnnexIvDownloadPdfResult, type GenerateAnnexIvInput, type GetAnnexIvBindInput, type DownloadAnnexIvPdfInput, } from "./resources/annex-iv.js";
20
+ export { verifyAnnexIvBindOffline, makeJwksResolver, type VerifyAnnexIvBindOfflineInput, type VerifyAnnexIvBindResult, type PublicKeyResolver, type Ed25519PublicJwk, type AnnexIvBindPayload, } from "./annex-iv-verify/index.js";
17
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,4 +17,16 @@ export { GateResource, } from "./resources/gate.js";
17
17
  export { BatchResource, BATCH_JOB_TYPES, BATCH_JOB_STATUSES, } from "./resources/batch.js";
18
18
  export { ShipGateResource, } from "./resources/ship-gate.js";
19
19
  export { AbacPoliciesResource, ABAC_POLICY_RESOURCES, ABAC_POLICY_ACTIONS, ABAC_POLICY_EFFECTS, } from "./resources/abac-policies.js";
20
+ // ─── Evidence packs (W1 deliverable 5 — the 24-symbol surface, C-D6/RD-C6) ──
21
+ // 4 runtime-valued (EvidencePackResource + PACK_TYPES/PACK_STATUSES/EXPORT_FORMATS)
22
+ // + 20 type-erased (17 interfaces + 3 types) = 24. (Pinned in public-api.test.ts.)
23
+ export { EvidencePackResource, PACK_TYPES, PACK_STATUSES, EXPORT_FORMATS, } from "./resources/evidence-pack.js";
24
+ // ─── Vision (W1 — the 19-symbol surface, C-D6) ──────────────────────────────
25
+ // 5 runtime-valued + 14 type-erased = 19.
26
+ export { VisionResource, SUPPORTED_MEDIA_TYPES, SUPPORTED_DOCUMENT_TYPES, VISION_MODELS, PACK_INTEGRATION_STATUSES, } from "./resources/vision.js";
27
+ // ─── Annex IV technical-file bind path (work-item C — the ≥0.7.0 surface) ───
28
+ export { AnnexIvResource, } from "./resources/annex-iv.js";
29
+ // The bundled PURE offline verifier — a TOP-LEVEL export (no apiKey/transport/
30
+ // network), NOT a client method (C-D5).
31
+ export { verifyAnnexIvBindOffline, makeJwksResolver, } from "./annex-iv-verify/index.js";
20
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,uCAAuC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,UAAU,EACV,eAAe,GAIhB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,qBAAqB,GAEtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,GAUlB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAsB5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,YAAY,EACZ,kBAAkB,GAQnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAKzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,GAK3B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,uBAAuB,GAKxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,aAAa,GAGd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,YAAY,GAIb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,GAQnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,GAKjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GAcpB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,uCAAuC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,UAAU,EACV,eAAe,GAIhB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,qBAAqB,GAEtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,GAUlB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAsB5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,YAAY,EACZ,kBAAkB,GAQnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAKzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,GAK3B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,uBAAuB,GAKxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,aAAa,GAGd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,YAAY,GAIb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,GAQnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,GAKjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GAcpB,MAAM,8BAA8B,CAAC;AAEtC,+EAA+E;AAC/E,oFAAoF;AACpF,mFAAmF;AACnF,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,cAAc,GAqBf,MAAM,8BAA8B,CAAC;AAEtC,+EAA+E;AAC/E,0CAA0C;AAC1C,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,yBAAyB,GAe1B,MAAM,uBAAuB,CAAC;AAE/B,+EAA+E;AAC/E,OAAO,EACL,eAAe,GAOhB,MAAM,yBAAyB,CAAC;AAEjC,+EAA+E;AAC/E,wCAAwC;AACxC,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GAMjB,MAAM,4BAA4B,CAAC"}