@e-sig/core 0.4.0 → 0.5.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.
@@ -39,7 +39,7 @@ export interface CertStore {
39
39
  * Standard action vocabulary. Implementations should allow these at minimum
40
40
  * but may extend the set (caller passes the action string through).
41
41
  */
42
- export type EsigAuditAction = "cert.created" | "cert.rotated" | "cert.deactivated" | "pdf.rendered" | "pdf.signed" | "pdf.verified" | "consent.recorded";
42
+ export type EsigAuditAction = "cert.created" | "cert.rotated" | "cert.deactivated" | "pdf.rendered" | "pdf.signed" | "pdf.verified" | "consent.recorded" | "envelope.created" | "envelope.signed" | "envelope.declined" | "envelope.voided" | "envelope.completed";
43
43
  export interface AuditLogEntry {
44
44
  tenantId: string;
45
45
  action: EsigAuditAction | string;
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,eAAe,EAAE,UAAU,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,aAAa,CAAC;QACzB,eAAe,EAAE,UAAU,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExB,sDAAsD;IACtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,mGAAmG;IACnG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACzD;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,YAAY,GACZ,cAAc,GACd,kBAAkB,CAAC;AAEvB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpD;AAID;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,eAAe,EAAE,UAAU,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,aAAa,CAAC;QACzB,eAAe,EAAE,UAAU,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExB,sDAAsD;IACtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,mGAAmG;IACnG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACzD;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,YAAY,GACZ,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpD;AAID;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9B"}
@@ -0,0 +1,135 @@
1
+ export type EnvelopeStatus = "sent" | "partially_signed" | "completed" | "voided" | "expired";
2
+ export type EnvelopeSignerStatus = "pending" | "signed" | "declined";
3
+ export interface EnvelopeSigner {
4
+ id: string;
5
+ name: string;
6
+ email: string;
7
+ /** Optional role shown above the signature block ("Witness", "CEO", ...). */
8
+ roleLabel?: string;
9
+ /** 1-based signing order; equal values sign in parallel. Default 1. */
10
+ order: number;
11
+ status: EnvelopeSignerStatus;
12
+ /** SHA-256 (hex) of the signing token. The raw token is never persisted. */
13
+ tokenHash: string;
14
+ signedAt?: Date;
15
+ /** Drawn signature (data:image/... URL), set when the signer signs. */
16
+ signatureImageDataUrl?: string;
17
+ declinedAt?: Date;
18
+ declineReason?: string;
19
+ }
20
+ export interface Envelope {
21
+ id: string;
22
+ tenantId: string;
23
+ title: string;
24
+ /** Base document HTML; signature blocks are appended at completion. */
25
+ html: string;
26
+ status: EnvelopeStatus;
27
+ signers: EnvelopeSigner[];
28
+ createdAt: Date;
29
+ expiresAt?: Date;
30
+ completedAt?: Date;
31
+ voidedAt?: Date;
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ export interface EnvelopeStore {
35
+ insert(envelope: Envelope): Promise<Envelope>;
36
+ /** Full-envelope replace by id. Apply optimistic concurrency here if needed. */
37
+ update(envelope: Envelope): Promise<Envelope>;
38
+ findById(tenantId: string, id: string): Promise<Envelope | null>;
39
+ /** Look up the envelope containing a signer with this token hash (unique). */
40
+ findByTokenHash(tokenHash: string): Promise<Envelope | null>;
41
+ }
42
+ export declare class EnvelopeError extends Error {
43
+ code: "invalid_input" | "invalid_token" | "not_your_turn" | "already_signed" | "not_signable" | "not_complete";
44
+ constructor(code: "invalid_input" | "invalid_token" | "not_your_turn" | "already_signed" | "not_signable" | "not_complete", message: string);
45
+ }
46
+ export interface CreateEnvelopeInput {
47
+ store: EnvelopeStore;
48
+ tenantId: string;
49
+ title: string;
50
+ html: string;
51
+ signers: Array<{
52
+ name: string;
53
+ email: string;
54
+ roleLabel?: string;
55
+ order?: number;
56
+ }>;
57
+ expiresAt?: Date;
58
+ metadata?: Record<string, unknown>;
59
+ }
60
+ export interface CreateEnvelopeResult {
61
+ envelope: Envelope;
62
+ /**
63
+ * The raw signing tokens, ONE PER SIGNER, returned only here. Deliver each
64
+ * to its signer out-of-band (email link etc.) — they cannot be recovered.
65
+ */
66
+ signingTokens: Array<{
67
+ signerId: string;
68
+ email: string;
69
+ token: string;
70
+ }>;
71
+ }
72
+ export declare function createEnvelope(input: CreateEnvelopeInput): Promise<CreateEnvelopeResult>;
73
+ export type TokenResolution = {
74
+ status: "ok";
75
+ envelope: Envelope;
76
+ signer: EnvelopeSigner;
77
+ } | {
78
+ status: "not_your_turn";
79
+ envelope: Envelope;
80
+ signer: EnvelopeSigner;
81
+ waitingOn: EnvelopeSigner[];
82
+ } | {
83
+ status: "already_signed";
84
+ envelope: Envelope;
85
+ signer: EnvelopeSigner;
86
+ } | {
87
+ status: "completed" | "voided" | "expired";
88
+ envelope: Envelope;
89
+ signer: EnvelopeSigner;
90
+ } | {
91
+ status: "invalid";
92
+ };
93
+ /**
94
+ * Resolve a raw signing token to its envelope + signer, applying every gate a
95
+ * signing surface needs: token validity, envelope liveness (expiry is applied
96
+ * lazily and persisted), single-use, and signing order.
97
+ */
98
+ export declare function resolveSigningToken(input: {
99
+ store: EnvelopeStore;
100
+ token: string;
101
+ }): Promise<TokenResolution>;
102
+ /**
103
+ * Record a signer's drawn signature. Enforces the same gates as
104
+ * `resolveSigningToken`; on the last signature the envelope flips to
105
+ * `completed` (compose + seal with `composeEnvelopeHtml` + `signDocument`).
106
+ */
107
+ export declare function recordSignature(input: {
108
+ store: EnvelopeStore;
109
+ token: string;
110
+ signatureImageDataUrl: string;
111
+ signedAt?: Date;
112
+ }): Promise<Envelope>;
113
+ /** Decline on behalf of the token's signer; the whole envelope becomes voided. */
114
+ export declare function declineEnvelope(input: {
115
+ store: EnvelopeStore;
116
+ token: string;
117
+ reason?: string;
118
+ }): Promise<Envelope>;
119
+ /** Sender-side cancellation (no token — tenant + id addressed). */
120
+ export declare function voidEnvelope(input: {
121
+ store: EnvelopeStore;
122
+ tenantId: string;
123
+ envelopeId: string;
124
+ }): Promise<Envelope>;
125
+ /**
126
+ * Compose the final signature-embedded HTML for a COMPLETED envelope: the base
127
+ * document plus one rendered block per signer (name, role, image, timestamp).
128
+ * Feed the result to `signDocument()` (or `renderHtmlToPdf` + `signPdf`) to
129
+ * apply the single cryptographic seal.
130
+ */
131
+ export declare function composeEnvelopeHtml(envelope: Envelope, opts?: {
132
+ platformLabel?: string;
133
+ platformUrl?: string;
134
+ }): string;
135
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ // envelope.ts
2
+ //
3
+ // Multi-signer envelopes + tokenized signing links, storage-agnostic.
4
+ //
5
+ // An Envelope tracks N signers over one HTML document. Each signer gets an
6
+ // opaque single-use signing token (32-byte CSPRNG, base64url) minted at
7
+ // creation and returned to the caller EXACTLY ONCE — only its SHA-256 hash is
8
+ // persisted, so a leaked store cannot forge signing links. Signing order is a
9
+ // 1-based integer; equal order signs in parallel, lower orders gate higher ones.
10
+ //
11
+ // Cryptographic model (deliberate, documented): signatures are collected as
12
+ // drawn images per signer; when the LAST signer completes, the caller composes
13
+ // the final document (`composeEnvelopeHtml`) — the base HTML plus every
14
+ // signer's block — and applies ONE cryptographic seal over the whole thing
15
+ // (e.g. via `signDocument()`). Sequential *PDF* re-signing is intentionally out
16
+ // of scope: the current signer/verifier pair handles a single /ByteRange, so a
17
+ // second incremental signature would be invisible to `verifyPdfSignature`.
18
+ //
19
+ // Persistence is bring-your-own via `EnvelopeStore` (same pattern as
20
+ // CertStore). Stores that expect concurrent signers should apply optimistic
21
+ // concurrency in `update()` (e.g. a version column) — core performs
22
+ // read-modify-write.
23
+ import crypto from "node:crypto";
24
+ import { assertImageDataUrl, renderSignatureBlocksHtml } from "./signature-block.js";
25
+ // ---------- Errors ----------
26
+ export class EnvelopeError extends Error {
27
+ code;
28
+ constructor(code, message) {
29
+ super(message);
30
+ this.code = code;
31
+ this.name = "EnvelopeError";
32
+ }
33
+ }
34
+ export async function createEnvelope(input) {
35
+ if (!input.tenantId)
36
+ throw new EnvelopeError("invalid_input", "tenantId is required");
37
+ if (!input.html?.trim())
38
+ throw new EnvelopeError("invalid_input", "html must be non-empty");
39
+ if (!input.signers?.length)
40
+ throw new EnvelopeError("invalid_input", "at least one signer is required");
41
+ if (input.expiresAt && input.expiresAt.getTime() <= Date.now()) {
42
+ throw new EnvelopeError("invalid_input", "expiresAt must be in the future");
43
+ }
44
+ const signingTokens = [];
45
+ const signers = input.signers.map((s) => {
46
+ if (!s.name?.trim())
47
+ throw new EnvelopeError("invalid_input", "signer name must be non-empty");
48
+ if (!s.email?.includes("@"))
49
+ throw new EnvelopeError("invalid_input", `signer email looks invalid: ${s.email}`);
50
+ const order = s.order ?? 1;
51
+ if (!Number.isInteger(order) || order < 1) {
52
+ throw new EnvelopeError("invalid_input", "signer order must be a positive integer");
53
+ }
54
+ const token = crypto.randomBytes(32).toString("base64url");
55
+ const signer = {
56
+ id: crypto.randomUUID(),
57
+ name: s.name,
58
+ email: s.email,
59
+ roleLabel: s.roleLabel,
60
+ order,
61
+ status: "pending",
62
+ tokenHash: hashToken(token),
63
+ };
64
+ signingTokens.push({ signerId: signer.id, email: signer.email, token });
65
+ return signer;
66
+ });
67
+ const envelope = {
68
+ id: crypto.randomUUID(),
69
+ tenantId: input.tenantId,
70
+ title: input.title,
71
+ html: input.html,
72
+ status: "sent",
73
+ signers,
74
+ createdAt: new Date(),
75
+ expiresAt: input.expiresAt,
76
+ metadata: input.metadata,
77
+ };
78
+ return { envelope: await input.store.insert(envelope), signingTokens };
79
+ }
80
+ /**
81
+ * Resolve a raw signing token to its envelope + signer, applying every gate a
82
+ * signing surface needs: token validity, envelope liveness (expiry is applied
83
+ * lazily and persisted), single-use, and signing order.
84
+ */
85
+ export async function resolveSigningToken(input) {
86
+ const envelope = await input.store.findByTokenHash(hashToken(input.token));
87
+ if (!envelope)
88
+ return { status: "invalid" };
89
+ const signer = envelope.signers.find((s) => s.tokenHash === hashToken(input.token));
90
+ if (!signer)
91
+ return { status: "invalid" };
92
+ if (envelope.status === "sent" || envelope.status === "partially_signed") {
93
+ if (envelope.expiresAt && envelope.expiresAt.getTime() <= Date.now()) {
94
+ envelope.status = "expired";
95
+ await input.store.update(envelope);
96
+ return { status: "expired", envelope, signer };
97
+ }
98
+ }
99
+ if (envelope.status === "completed")
100
+ return { status: "completed", envelope, signer };
101
+ if (envelope.status === "voided")
102
+ return { status: "voided", envelope, signer };
103
+ if (envelope.status === "expired")
104
+ return { status: "expired", envelope, signer };
105
+ if (signer.status === "signed")
106
+ return { status: "already_signed", envelope, signer };
107
+ const waitingOn = envelope.signers.filter((s) => s.order < signer.order && s.status !== "signed");
108
+ if (waitingOn.length > 0)
109
+ return { status: "not_your_turn", envelope, signer, waitingOn };
110
+ return { status: "ok", envelope, signer };
111
+ }
112
+ // ---------- Signing / declining / voiding ----------
113
+ /**
114
+ * Record a signer's drawn signature. Enforces the same gates as
115
+ * `resolveSigningToken`; on the last signature the envelope flips to
116
+ * `completed` (compose + seal with `composeEnvelopeHtml` + `signDocument`).
117
+ */
118
+ export async function recordSignature(input) {
119
+ const res = await resolveSigningToken({ store: input.store, token: input.token });
120
+ if (res.status === "invalid")
121
+ throw new EnvelopeError("invalid_token", "unknown signing token");
122
+ if (res.status === "not_your_turn") {
123
+ throw new EnvelopeError("not_your_turn", `waiting on ${res.waitingOn.length} earlier signer(s)`);
124
+ }
125
+ if (res.status === "already_signed")
126
+ throw new EnvelopeError("already_signed", "token already used");
127
+ if (res.status !== "ok")
128
+ throw new EnvelopeError("not_signable", `envelope is ${res.status}`);
129
+ // Same guard the block renderer applies at seal time, applied early so a bad
130
+ // image is rejected at signing time. Throws on anything but a base64 image
131
+ // data URL; returns the whitespace-compacted form we persist.
132
+ let imageDataUrl;
133
+ try {
134
+ imageDataUrl = assertImageDataUrl(input.signatureImageDataUrl);
135
+ }
136
+ catch {
137
+ throw new EnvelopeError("invalid_input", "signatureImageDataUrl must be a base64 image data URL (data:image/png;base64,…)");
138
+ }
139
+ const { envelope, signer } = res;
140
+ signer.status = "signed";
141
+ signer.signedAt = input.signedAt ?? new Date();
142
+ signer.signatureImageDataUrl = imageDataUrl;
143
+ const allSigned = envelope.signers.every((s) => s.status === "signed");
144
+ envelope.status = allSigned ? "completed" : "partially_signed";
145
+ if (allSigned)
146
+ envelope.completedAt = new Date();
147
+ return input.store.update(envelope);
148
+ }
149
+ /** Decline on behalf of the token's signer; the whole envelope becomes voided. */
150
+ export async function declineEnvelope(input) {
151
+ const res = await resolveSigningToken({ store: input.store, token: input.token });
152
+ if (res.status === "invalid")
153
+ throw new EnvelopeError("invalid_token", "unknown signing token");
154
+ if (res.status === "already_signed" || res.status === "completed") {
155
+ throw new EnvelopeError("not_signable", "cannot decline after signing");
156
+ }
157
+ if (res.status === "voided" || res.status === "expired") {
158
+ throw new EnvelopeError("not_signable", `envelope is ${res.status}`);
159
+ }
160
+ const { envelope, signer } = res;
161
+ signer.status = "declined";
162
+ signer.declinedAt = new Date();
163
+ signer.declineReason = input.reason;
164
+ envelope.status = "voided";
165
+ envelope.voidedAt = new Date();
166
+ return input.store.update(envelope);
167
+ }
168
+ /** Sender-side cancellation (no token — tenant + id addressed). */
169
+ export async function voidEnvelope(input) {
170
+ const envelope = await input.store.findById(input.tenantId, input.envelopeId);
171
+ if (!envelope)
172
+ throw new EnvelopeError("invalid_input", "envelope not found");
173
+ if (envelope.status === "completed") {
174
+ throw new EnvelopeError("not_signable", "cannot void a completed envelope");
175
+ }
176
+ envelope.status = "voided";
177
+ envelope.voidedAt = new Date();
178
+ return input.store.update(envelope);
179
+ }
180
+ // ---------- Completion ----------
181
+ /**
182
+ * Compose the final signature-embedded HTML for a COMPLETED envelope: the base
183
+ * document plus one rendered block per signer (name, role, image, timestamp).
184
+ * Feed the result to `signDocument()` (or `renderHtmlToPdf` + `signPdf`) to
185
+ * apply the single cryptographic seal.
186
+ */
187
+ export function composeEnvelopeHtml(envelope, opts = {}) {
188
+ if (envelope.status !== "completed") {
189
+ throw new EnvelopeError("not_complete", `envelope is ${envelope.status}, not completed`);
190
+ }
191
+ const blocks = renderSignatureBlocksHtml({
192
+ signers: envelope.signers.map((s) => ({
193
+ name: s.name,
194
+ email: s.email,
195
+ roleLabel: s.roleLabel,
196
+ signatureImageDataUrl: s.signatureImageDataUrl,
197
+ signedAt: s.signedAt,
198
+ })),
199
+ platformLabel: opts.platformLabel,
200
+ platformUrl: opts.platformUrl,
201
+ });
202
+ return `${envelope.html}\n${blocks}`;
203
+ }
204
+ // ---------- Internals ----------
205
+ function hashToken(token) {
206
+ return crypto.createHash("sha256").update(token, "utf8").digest("hex");
207
+ }
208
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { AuditLogEntry, AuditLogRow, AuditLogStore, CertStore, PdfStorageStore, StoredCert } from "./adapters.js";
2
+ import type { GeneratedCert } from "./cert-issuer.js";
3
+ import type { Envelope, EnvelopeStore } from "./envelope.js";
4
+ export declare class FsCertStore implements CertStore {
5
+ private file;
6
+ constructor(rootDir: string);
7
+ private rows;
8
+ private static revive;
9
+ findActive(tenantId: string): Promise<StoredCert | null>;
10
+ insert(input: {
11
+ tenantId: string;
12
+ generated: GeneratedCert;
13
+ keyPemEncrypted: Uint8Array;
14
+ rotatedFromId?: string | null;
15
+ }): Promise<StoredCert>;
16
+ deactivate(id: string): Promise<void>;
17
+ findExpiring(withinDays: number): Promise<StoredCert[]>;
18
+ }
19
+ export declare class FsAuditLogStore implements AuditLogStore {
20
+ private file;
21
+ constructor(rootDir: string);
22
+ insert(entry: AuditLogEntry): Promise<AuditLogRow>;
23
+ /** Read every persisted row (newest last). Not part of the core interface —
24
+ * a convenience for local inspection and tests. */
25
+ readAll(): Promise<Array<AuditLogEntry & AuditLogRow>>;
26
+ }
27
+ export declare class FsPdfStorageStore implements PdfStorageStore {
28
+ private blobRoot;
29
+ constructor(rootDir: string);
30
+ upload(input: {
31
+ path: string;
32
+ bytes: Uint8Array;
33
+ contentType: string;
34
+ }): Promise<{
35
+ url: string;
36
+ }>;
37
+ }
38
+ export declare class FsEnvelopeStore implements EnvelopeStore {
39
+ private file;
40
+ constructor(rootDir: string);
41
+ private rows;
42
+ private static toJson;
43
+ private static revive;
44
+ insert(envelope: Envelope): Promise<Envelope>;
45
+ update(envelope: Envelope): Promise<Envelope>;
46
+ findById(tenantId: string, id: string): Promise<Envelope | null>;
47
+ findByTokenHash(tokenHash: string): Promise<Envelope | null>;
48
+ }
49
+ //# sourceMappingURL=fs-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-adapters.d.ts","sourceRoot":"","sources":["../src/fs-adapters.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA4B7D,qBAAa,WAAY,YAAW,SAAS;IAC3C,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,MAAM;YAIb,IAAI;IAIlB,OAAO,CAAC,MAAM,CAAC,MAAM;IAUf,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKxD,MAAM,CAAC,KAAK,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,aAAa,CAAC;QACzB,eAAe,EAAE,UAAU,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBjB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAM9D;AAID,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,MAAM;IAIrB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAOxD;wDACoD;IAC9C,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;CAe7D;AAID,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM;IAIrB,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAUxG;AAiBD,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,MAAM;YAIb,IAAI;IAIlB,OAAO,CAAC,MAAM,CAAC,MAAM;IAerB,OAAO,CAAC,MAAM,CAAC,MAAM;IAef,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAO7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAS7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAKhE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAInE"}
@@ -0,0 +1,204 @@
1
+ // fs-adapters.ts
2
+ //
3
+ // Filesystem-backed reference implementations of every persistence interface
4
+ // (CertStore, AuditLogStore, PdfStorageStore, EnvelopeStore) — the full
5
+ // pipeline with zero external services: `import ... from "@e-sig/core/fs"`.
6
+ //
7
+ // Intended for development, demos, CLIs, and small single-node deployments.
8
+ // NOT multi-process safe: JSON state is read-modify-write with atomic replace
9
+ // (write temp + rename), which serializes within one process only. The audit
10
+ // log is a true append-only NDJSON file.
11
+ //
12
+ // Layout under the root directory:
13
+ // certs.json — StoredCert rows (keyPemEncrypted as base64)
14
+ // envelopes.json — Envelope rows
15
+ // audit-log.ndjson — one JSON audit row per line, append-only
16
+ // blobs/<path> — uploaded PDFs / signature images
17
+ import crypto from "node:crypto";
18
+ import { promises as fs } from "node:fs";
19
+ import path from "node:path";
20
+ /** Serialize-with-rename so a crash never leaves a half-written JSON file. */
21
+ async function writeJsonAtomic(file, value) {
22
+ await fs.mkdir(path.dirname(file), { recursive: true });
23
+ const tmp = `${file}.${crypto.randomBytes(6).toString("hex")}.tmp`;
24
+ await fs.writeFile(tmp, JSON.stringify(value, null, 2), "utf8");
25
+ await fs.rename(tmp, file);
26
+ }
27
+ async function readJson(file, fallback) {
28
+ try {
29
+ return JSON.parse(await fs.readFile(file, "utf8"));
30
+ }
31
+ catch (e) {
32
+ if (e.code === "ENOENT")
33
+ return fallback;
34
+ throw e;
35
+ }
36
+ }
37
+ export class FsCertStore {
38
+ file;
39
+ constructor(rootDir) {
40
+ this.file = path.join(rootDir, "certs.json");
41
+ }
42
+ async rows() {
43
+ return readJson(this.file, []);
44
+ }
45
+ static revive(r) {
46
+ return {
47
+ ...r,
48
+ keyPemEncrypted: new Uint8Array(Buffer.from(r.keyPemEncrypted, "base64")),
49
+ notBefore: new Date(r.notBefore),
50
+ notAfter: new Date(r.notAfter),
51
+ createdAt: new Date(r.createdAt),
52
+ };
53
+ }
54
+ async findActive(tenantId) {
55
+ const row = (await this.rows()).find((r) => r.tenantId === tenantId && r.active);
56
+ return row ? FsCertStore.revive(row) : null;
57
+ }
58
+ async insert(input) {
59
+ const rows = await this.rows();
60
+ // Single-active-per-tenant invariant (see CertStore contract).
61
+ for (const r of rows)
62
+ if (r.tenantId === input.tenantId)
63
+ r.active = false;
64
+ const row = {
65
+ id: crypto.randomUUID(),
66
+ tenantId: input.tenantId,
67
+ certPem: input.generated.certPem,
68
+ keyPemEncrypted: Buffer.from(input.keyPemEncrypted).toString("base64"),
69
+ certFingerprint: input.generated.fingerprint,
70
+ notBefore: input.generated.notBefore.toISOString(),
71
+ notAfter: input.generated.notAfter.toISOString(),
72
+ active: true,
73
+ rotatedFromId: input.rotatedFromId ?? null,
74
+ createdAt: new Date().toISOString(),
75
+ };
76
+ rows.push(row);
77
+ await writeJsonAtomic(this.file, rows);
78
+ return FsCertStore.revive(row);
79
+ }
80
+ async deactivate(id) {
81
+ const rows = await this.rows();
82
+ const row = rows.find((r) => r.id === id);
83
+ if (row) {
84
+ row.active = false;
85
+ await writeJsonAtomic(this.file, rows);
86
+ }
87
+ }
88
+ async findExpiring(withinDays) {
89
+ const horizon = Date.now() + withinDays * 24 * 60 * 60 * 1000;
90
+ return (await this.rows())
91
+ .filter((r) => r.active && new Date(r.notAfter).getTime() <= horizon)
92
+ .map(FsCertStore.revive);
93
+ }
94
+ }
95
+ // ---------- FsAuditLogStore ----------
96
+ export class FsAuditLogStore {
97
+ file;
98
+ constructor(rootDir) {
99
+ this.file = path.join(rootDir, "audit-log.ndjson");
100
+ }
101
+ async insert(entry) {
102
+ const row = { id: crypto.randomUUID(), createdAt: new Date().toISOString(), ...entry };
103
+ await fs.mkdir(path.dirname(this.file), { recursive: true });
104
+ await fs.appendFile(this.file, JSON.stringify(row) + "\n", "utf8");
105
+ return { id: row.id, createdAt: new Date(row.createdAt) };
106
+ }
107
+ /** Read every persisted row (newest last). Not part of the core interface —
108
+ * a convenience for local inspection and tests. */
109
+ async readAll() {
110
+ try {
111
+ const text = await fs.readFile(this.file, "utf8");
112
+ return text
113
+ .split("\n")
114
+ .filter(Boolean)
115
+ .map((l) => {
116
+ const r = JSON.parse(l);
117
+ return { ...r, createdAt: new Date(r.createdAt) };
118
+ });
119
+ }
120
+ catch (e) {
121
+ if (e.code === "ENOENT")
122
+ return [];
123
+ throw e;
124
+ }
125
+ }
126
+ }
127
+ // ---------- FsPdfStorageStore ----------
128
+ export class FsPdfStorageStore {
129
+ blobRoot;
130
+ constructor(rootDir) {
131
+ this.blobRoot = path.join(rootDir, "blobs");
132
+ }
133
+ async upload(input) {
134
+ // Resolve inside blobRoot and refuse traversal escapes.
135
+ const abs = path.resolve(this.blobRoot, input.path);
136
+ if (abs !== this.blobRoot && !abs.startsWith(this.blobRoot + path.sep)) {
137
+ throw new Error(`FsPdfStorageStore: path escapes storage root: ${input.path}`);
138
+ }
139
+ await fs.mkdir(path.dirname(abs), { recursive: true });
140
+ await fs.writeFile(abs, input.bytes);
141
+ return { url: abs };
142
+ }
143
+ }
144
+ export class FsEnvelopeStore {
145
+ file;
146
+ constructor(rootDir) {
147
+ this.file = path.join(rootDir, "envelopes.json");
148
+ }
149
+ async rows() {
150
+ return readJson(this.file, []);
151
+ }
152
+ static toJson(e) {
153
+ return {
154
+ ...e,
155
+ createdAt: e.createdAt.toISOString(),
156
+ expiresAt: e.expiresAt?.toISOString(),
157
+ completedAt: e.completedAt?.toISOString(),
158
+ voidedAt: e.voidedAt?.toISOString(),
159
+ signers: e.signers.map((s) => ({
160
+ ...s,
161
+ signedAt: s.signedAt?.toISOString(),
162
+ declinedAt: s.declinedAt?.toISOString(),
163
+ })),
164
+ };
165
+ }
166
+ static revive(r) {
167
+ return {
168
+ ...r,
169
+ createdAt: new Date(r.createdAt),
170
+ expiresAt: r.expiresAt ? new Date(r.expiresAt) : undefined,
171
+ completedAt: r.completedAt ? new Date(r.completedAt) : undefined,
172
+ voidedAt: r.voidedAt ? new Date(r.voidedAt) : undefined,
173
+ signers: r.signers.map((s) => ({
174
+ ...s,
175
+ signedAt: s.signedAt ? new Date(s.signedAt) : undefined,
176
+ declinedAt: s.declinedAt ? new Date(s.declinedAt) : undefined,
177
+ })),
178
+ };
179
+ }
180
+ async insert(envelope) {
181
+ const rows = await this.rows();
182
+ rows.push(FsEnvelopeStore.toJson(envelope));
183
+ await writeJsonAtomic(this.file, rows);
184
+ return envelope;
185
+ }
186
+ async update(envelope) {
187
+ const rows = await this.rows();
188
+ const i = rows.findIndex((r) => r.id === envelope.id);
189
+ if (i === -1)
190
+ throw new Error(`FsEnvelopeStore: envelope not found: ${envelope.id}`);
191
+ rows[i] = FsEnvelopeStore.toJson(envelope);
192
+ await writeJsonAtomic(this.file, rows);
193
+ return envelope;
194
+ }
195
+ async findById(tenantId, id) {
196
+ const row = (await this.rows()).find((r) => r.tenantId === tenantId && r.id === id);
197
+ return row ? FsEnvelopeStore.revive(row) : null;
198
+ }
199
+ async findByTokenHash(tokenHash) {
200
+ const row = (await this.rows()).find((r) => r.signers.some((s) => s.tokenHash === tokenHash));
201
+ return row ? FsEnvelopeStore.revive(row) : null;
202
+ }
203
+ }
204
+ //# sourceMappingURL=fs-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-adapters.js","sourceRoot":"","sources":["../src/fs-adapters.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,5 +7,6 @@ export { buildTimeStampReq, parseTimeStampResp, parseTstInfo, OID_TIMESTAMP_TOKE
7
7
  export type { Signer, SigningCertPem, SignedPdfMetadata, TsaTransport, } from "./types.js";
8
8
  export type { StoredCert, CertStore, AuditLogEntry, AuditLogRow, AuditLogStore, EsigAuditAction, PdfStorageStore, } from "./adapters.js";
9
9
  export { ensureActiveCert, type EnsureCertResult } from "./cert-lifecycle.js";
10
+ export { createEnvelope, resolveSigningToken, recordSignature, declineEnvelope, voidEnvelope, composeEnvelopeHtml, EnvelopeError, type Envelope, type EnvelopeSigner, type EnvelopeStatus, type EnvelopeSignerStatus, type EnvelopeStore, type CreateEnvelopeInput, type CreateEnvelopeResult, type TokenResolution, } from "./envelope.js";
10
11
  export { signDocument, type SignDocumentInput, type SignDocumentResult, } from "./sign-document.js";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -16,6 +16,8 @@ export { verifyPdfStructure, verifyPdfSignature } from "./verify-pdf.js";
16
16
  export { buildTimeStampReq, parseTimeStampResp, parseTstInfo, OID_TIMESTAMP_TOKEN, } from "./timestamp.js";
17
17
  // ---- Cert lifecycle (stack-agnostic; interface-only) ----
18
18
  export { ensureActiveCert } from "./cert-lifecycle.js";
19
+ // ---- Multi-signer envelopes + tokenized signing links ----
20
+ export { createEnvelope, resolveSigningToken, recordSignature, declineEnvelope, voidEnvelope, composeEnvelopeHtml, EnvelopeError, } from "./envelope.js";
19
21
  // ---- End-to-end orchestrator ----
20
22
  export { signDocument, } from "./sign-document.js";
21
23
  //# 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,cAAc;AACd,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,EAAE;AACF,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAEhF,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA+B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAyC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAmBxB,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAE9E,oCAAoC;AACpC,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,EAAE;AACF,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAEhF,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA+B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAyC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAmBxB,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAE9E,6DAA6D;AAC7D,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,aAAa,GASd,MAAM,eAAe,CAAC;AAEvB,oCAAoC;AACpC,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC"}
@@ -33,7 +33,7 @@ export function renderSignatureBlocksHtml(opts) {
33
33
  </style>
34
34
  ${rows}
35
35
  <p class="audit-footer">
36
- Cryptographically sealed via the Opendelphi ${platform}${url ? ` (${escapeHtml(url)})` : ""}.
36
+ Cryptographically sealed via the ${escapeHtml(platform)}${url ? ` (${escapeHtml(url)})` : ""}.
37
37
  Any post-signing modification invalidates the signature panel in Adobe Reader / Preview.
38
38
  </p>
39
39
  </div>`;
@@ -1 +1 @@
1
- {"version":3,"file":"signature-block.js","sourceRoot":"","sources":["../src/signature-block.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,qEAAqE;AAWrE;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAIzC;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,qCAAqC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;SACtB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;;MAEP,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;oDAC3B,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAChE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAChD;gBACY,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;0CAC1D,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE;SACzD,CACJ;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;;;;;IAUL,IAAI;;kDAE0C,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;;OAGxF,CAAC;AACR,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,cAAc,GAAG,gEAAgE,CAAC;AAExF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,mFAAmF;YACjF,2FAA2F,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"signature-block.js","sourceRoot":"","sources":["../src/signature-block.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,qEAAqE;AAWrE;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAIzC;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,qCAAqC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;SACtB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;;MAEP,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;oDAC3B,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAChE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAChD;gBACY,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;0CAC1D,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE;SACzD,CACJ;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;;;;;IAUL,IAAI;;uCAE+B,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;;OAGzF,CAAC;AACR,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,cAAc,GAAG,gEAAgE,CAAC;AAExF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,mFAAmF;YACjF,2FAA2F,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify-pdf.d.ts","sourceRoot":"","sources":["../src/verify-pdf.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA4E/D;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,2BAAqB,CAAC"}
1
+ {"version":3,"file":"verify-pdf.d.ts","sourceRoot":"","sources":["../src/verify-pdf.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAqF/D;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,2BAAqB,CAAC"}
@@ -54,8 +54,17 @@ export function verifyPdfStructure(signed) {
54
54
  result.pkcs7BudgetSize = hole - 2;
55
55
  const contentsRegion = signed.slice(a + b + 1, c - 1);
56
56
  const hexBlob = contentsRegion.toString("binary").replace(/[^0-9a-fA-F]/g, "");
57
- const trimmedHex = hexBlob.replace(/(00)+$/, "");
58
- const pkcs7Der = Buffer.from(trimmedHex, "hex").toString("binary");
57
+ // The /Contents hole is zero-padded past the end of the DER. Slice at the
58
+ // length declared in the DER's own TLV header — trimming trailing "00" pairs
59
+ // instead truncates any signature whose final byte is legitimately 0x00
60
+ // (~1/256 of signatures), falsely rejecting a valid document.
61
+ const contentsBytes = Buffer.from(hexBlob, "hex");
62
+ const derLen = derTotalLength(contentsBytes);
63
+ if (derLen === null || derLen > contentsBytes.length) {
64
+ failures.push("/Contents does not hold a well-formed DER structure");
65
+ return result;
66
+ }
67
+ const pkcs7Der = contentsBytes.subarray(0, derLen).toString("binary");
59
68
  result.pkcs7ActualSize = pkcs7Der.length;
60
69
  try {
61
70
  const root = forge.asn1.fromDer(pkcs7Der);
@@ -309,6 +318,25 @@ function inspectTimestamp(contentInfo) {
309
318
  }
310
319
  return { present: false, sigValueHex };
311
320
  }
321
+ /**
322
+ * Total encoded length (header + content) of the DER value starting at byte 0,
323
+ * or null if the bytes cannot start a DER SEQUENCE (wrong tag, indefinite/BER
324
+ * length, or a length-of-length that cannot be a real PKCS#7 blob).
325
+ */
326
+ function derTotalLength(buf) {
327
+ if (buf.length < 2 || buf[0] !== 0x30)
328
+ return null; // ContentInfo is a SEQUENCE
329
+ const l0 = buf[1];
330
+ if (l0 < 0x80)
331
+ return 2 + l0;
332
+ const n = l0 & 0x7f;
333
+ if (n === 0 || n > 4 || buf.length < 2 + n)
334
+ return null;
335
+ let v = 0;
336
+ for (let k = 0; k < n; k++)
337
+ v = v * 256 + buf[2 + k];
338
+ return 2 + n + v;
339
+ }
312
340
  function safeOid(der) {
313
341
  try {
314
342
  return asn1.derToOid(der);
@@ -1 +1 @@
1
- {"version":3,"file":"verify-pdf.js","sourceRoot":"","sources":["../src/verify-pdf.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,8EAA8E;AAC9E,qEAAqE;AACrE,EAAE;AACF,2EAA2E;AAC3E,yBAAyB;AACzB,uEAAuE;AACvE,uDAAuD;AACvD,gFAAgF;AAChF,iFAAiF;AACjF,wCAAwC;AACxC,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,gEAAgE;AAChE,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAC/E,2EAA2E;AAC3E,qCAAqC;AACrC,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,kFAAkF;AAElF,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAExB,sDAAsD;AACtD,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AA4BlD,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,MAAM,GAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAEzE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,OAAO,aAAa,IAAI,mBAAmB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC;IAElC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAA+B,CAAC;QAC3E,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAA2B,CAAC;QAC9E,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAA2B,CAAC;QAE/E,kEAAkE;QAClE,2EAA2E;QAC3E,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;SAC1B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnD,sEAAsE;QACtE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;YACxC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;YAExC,gEAAgE;YAChE,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;gBAC3C,IAAI,QAAQ,KAAK,EAAE,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxD,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,uBAAwB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB,CACzB,WAA4B,EAC5B,UAAiC,EACjC,cAAsB;IAEtB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;QACnD,CAAC;QAED,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,WAAwC,CAAC;QAC7C,IAAI,cAAkC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,KAA0B,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvE,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;YACD,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;gBACvC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW;gBACpC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAC/B,CAAC;gBACD,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;QACnD,CAAC;QAED,4EAA4E;QAC5E,MAAM,aAAa,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACrD,WAAW;gBACT,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;oBACpC,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CACX,wFAAwF,CACzF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAC1E,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClB,IAAI,CAAC;gBACH,cAAc,GAAI,UAAU,CAAC,SAAqC,CAAC,MAAM,CACvE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EACtB,cAAc,CACf,CAAC;gBACF,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,cAAc,GAAG,KAAK,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,iCAAkC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,qCAAsC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,kFAAkF;AAClF,SAAS,eAAe,CAAC,WAA4B;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,UAAuC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,KAA0B,EAAE,CAAC;QAC3D,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACtE,IAAI,WAAwC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,KAA0B,EAAE,CAAC;QAC1D,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;YACvC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;YAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1B,CAAC;YACD,WAAW,GAAG,KAAK,CAAC,CAAC,8DAA8D;QACrF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,WAA4B,EAC5B,GAAW;IAEX,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAA0B,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAe,CAAC,KAAK,GAAG;YAAE,SAAS;QACzF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1E,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QAC5C,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,WAA4B;IAOpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEjE,6CAA6C;IAC7C,IAAI,UAAuC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,KAA0B,EAAE,CAAC;QAC3D,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE/E,kEAAkE;IAClE,IAAI,WAAwC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,KAA0B,EAAE,CAAC;QAC1D,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;YACvC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;YAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1B,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,UAAU,CAAC,KAA0B,CAAC;IAEzD,6EAA6E;IAC7E,sEAAsE;IACtE,IAAI,WAA+B,CAAC;IACpC,IAAI,aAA0C,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;YACvC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW;YACpC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAC/B,CAAC;YACD,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvE,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACzC,CAAC;IAED,iEAAiE;IACjE,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAA0B,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAe,CAAC,KAAK,mBAAmB,EAAE,CAAC;YAC/F,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC;QAElD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW;YACX,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACpC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,CAAC,EAAW;IACvC,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC/E,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"verify-pdf.js","sourceRoot":"","sources":["../src/verify-pdf.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e-sig/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Self-contained PKCS#7 PDF signing — no SaaS, no metering, no per-doc fees. Render→sign→verify engine + pluggable persistence interfaces + end-to-end signDocument() orchestrator.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -22,6 +22,11 @@
22
22
  "types": "./dist/adapters.d.ts",
23
23
  "import": "./dist/adapters.js",
24
24
  "default": "./dist/adapters.js"
25
+ },
26
+ "./fs": {
27
+ "types": "./dist/fs-adapters.d.ts",
28
+ "import": "./dist/fs-adapters.js",
29
+ "default": "./dist/fs-adapters.js"
25
30
  }
26
31
  },
27
32
  "files": [