pdfnova 1.0.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 (76) hide show
  1. package/README.md +336 -0
  2. package/dist/AnnotationReader-ADHPZ3V5.mjs +3 -0
  3. package/dist/AnnotationReader-ADHPZ3V5.mjs.map +1 -0
  4. package/dist/AnnotationReader-C5XLXGWS.cjs +12 -0
  5. package/dist/AnnotationReader-C5XLXGWS.cjs.map +1 -0
  6. package/dist/AnnotationWriter-N3Y4KTPI.cjs +12 -0
  7. package/dist/AnnotationWriter-N3Y4KTPI.cjs.map +1 -0
  8. package/dist/AnnotationWriter-XWY5N6AZ.mjs +3 -0
  9. package/dist/AnnotationWriter-XWY5N6AZ.mjs.map +1 -0
  10. package/dist/FormFiller-2O4MOQYV.cjs +12 -0
  11. package/dist/FormFiller-2O4MOQYV.cjs.map +1 -0
  12. package/dist/FormFiller-6DLWMRN5.mjs +3 -0
  13. package/dist/FormFiller-6DLWMRN5.mjs.map +1 -0
  14. package/dist/FormFlattener-5MWLLH7W.cjs +12 -0
  15. package/dist/FormFlattener-5MWLLH7W.cjs.map +1 -0
  16. package/dist/FormFlattener-YQRQ3QOY.mjs +3 -0
  17. package/dist/FormFlattener-YQRQ3QOY.mjs.map +1 -0
  18. package/dist/FormReader-QAEDFD77.cjs +13 -0
  19. package/dist/FormReader-QAEDFD77.cjs.map +1 -0
  20. package/dist/FormReader-XEF3T5LD.mjs +4 -0
  21. package/dist/FormReader-XEF3T5LD.mjs.map +1 -0
  22. package/dist/SignatureVerifier-2IR7UQGU.mjs +3 -0
  23. package/dist/SignatureVerifier-2IR7UQGU.mjs.map +1 -0
  24. package/dist/SignatureVerifier-4KWQA7X6.cjs +12 -0
  25. package/dist/SignatureVerifier-4KWQA7X6.cjs.map +1 -0
  26. package/dist/WasmMock-2I3GVRQF.mjs +397 -0
  27. package/dist/WasmMock-2I3GVRQF.mjs.map +1 -0
  28. package/dist/WasmMock-OYPV4J6B.cjs +399 -0
  29. package/dist/WasmMock-OYPV4J6B.cjs.map +1 -0
  30. package/dist/chunk-2OWW5BYD.mjs +1847 -0
  31. package/dist/chunk-2OWW5BYD.mjs.map +1 -0
  32. package/dist/chunk-2YFCKMVK.cjs +72 -0
  33. package/dist/chunk-2YFCKMVK.cjs.map +1 -0
  34. package/dist/chunk-7FGOUG4Z.cjs +51 -0
  35. package/dist/chunk-7FGOUG4Z.cjs.map +1 -0
  36. package/dist/chunk-CPMUWWNS.cjs +44 -0
  37. package/dist/chunk-CPMUWWNS.cjs.map +1 -0
  38. package/dist/chunk-DVMAQ62T.cjs +109 -0
  39. package/dist/chunk-DVMAQ62T.cjs.map +1 -0
  40. package/dist/chunk-ETSUOY4U.cjs +104 -0
  41. package/dist/chunk-ETSUOY4U.cjs.map +1 -0
  42. package/dist/chunk-FD5RTJ5W.mjs +60 -0
  43. package/dist/chunk-FD5RTJ5W.mjs.map +1 -0
  44. package/dist/chunk-FO3DQLVB.mjs +42 -0
  45. package/dist/chunk-FO3DQLVB.mjs.map +1 -0
  46. package/dist/chunk-G2FA6VKV.cjs +62 -0
  47. package/dist/chunk-G2FA6VKV.cjs.map +1 -0
  48. package/dist/chunk-G7575D5X.mjs +67 -0
  49. package/dist/chunk-G7575D5X.mjs.map +1 -0
  50. package/dist/chunk-I7OBHZLB.mjs +75 -0
  51. package/dist/chunk-I7OBHZLB.mjs.map +1 -0
  52. package/dist/chunk-INA3KRJK.cjs +1863 -0
  53. package/dist/chunk-INA3KRJK.cjs.map +1 -0
  54. package/dist/chunk-RZFKZ2CA.cjs +77 -0
  55. package/dist/chunk-RZFKZ2CA.cjs.map +1 -0
  56. package/dist/chunk-VRJQZOCH.mjs +107 -0
  57. package/dist/chunk-VRJQZOCH.mjs.map +1 -0
  58. package/dist/chunk-X53667JS.mjs +102 -0
  59. package/dist/chunk-X53667JS.mjs.map +1 -0
  60. package/dist/chunk-XEHKVFPJ.mjs +49 -0
  61. package/dist/chunk-XEHKVFPJ.mjs.map +1 -0
  62. package/dist/index.cjs +112 -0
  63. package/dist/index.cjs.map +1 -0
  64. package/dist/index.d.cts +103 -0
  65. package/dist/index.d.ts +103 -0
  66. package/dist/index.mjs +14 -0
  67. package/dist/index.mjs.map +1 -0
  68. package/dist/lite-CMz-Yosm.d.cts +662 -0
  69. package/dist/lite-CMz-Yosm.d.ts +662 -0
  70. package/dist/lite.cjs +70 -0
  71. package/dist/lite.cjs.map +1 -0
  72. package/dist/lite.d.cts +1 -0
  73. package/dist/lite.d.ts +1 -0
  74. package/dist/lite.mjs +8 -0
  75. package/dist/lite.mjs.map +1 -0
  76. package/package.json +68 -0
@@ -0,0 +1,102 @@
1
+ // src/signatures/SignatureVerifier.ts
2
+ var SignatureVerifier = class {
3
+ wasm;
4
+ bridge;
5
+ constructor(wasm, bridge) {
6
+ this.wasm = wasm;
7
+ this.bridge = bridge;
8
+ }
9
+ readSignatures(docPtr) {
10
+ if (!this.wasm._FPDF_GetSignatureCount) return [];
11
+ const count = this.wasm._FPDF_GetSignatureCount(docPtr);
12
+ if (count <= 0) return [];
13
+ const signatures = [];
14
+ for (let i = 0; i < count; i++) {
15
+ const sigPtr = this.wasm._FPDF_GetSignatureObject(docPtr, i);
16
+ if (sigPtr === 0) continue;
17
+ const sig = this._readSignature(sigPtr, i);
18
+ if (sig) signatures.push(sig);
19
+ }
20
+ return signatures;
21
+ }
22
+ /**
23
+ * Verify a signature's integrity.
24
+ * Performs basic byte-range validation and returns extracted metadata.
25
+ * For full PKI verification, use the raw `contents` with a crypto library.
26
+ */
27
+ async verify(docPtr, sigIndex, documentBytes) {
28
+ const signatures = this.readSignatures(docPtr);
29
+ const sig = signatures[sigIndex];
30
+ if (!sig) {
31
+ throw new Error(`Signature at index ${sigIndex} not found`);
32
+ }
33
+ const byteRangeValid = this._validateByteRange(sig.byteRange, documentBytes);
34
+ return {
35
+ valid: byteRangeValid && sig.contents.length > 0,
36
+ signer: sig.reason || "Unknown",
37
+ reason: sig.reason,
38
+ timestamp: sig.signingTime,
39
+ subFilter: sig.subFilter,
40
+ docMDPPermission: sig.docMDPPermission,
41
+ rawContents: sig.contents
42
+ };
43
+ }
44
+ _readSignature(sigPtr, index) {
45
+ const contents = this.bridge.getSignatureBinaryField(
46
+ sigPtr,
47
+ (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetContents(sig, buf, bufLen)
48
+ );
49
+ const byteRangeRaw = this.bridge.getSignatureBinaryField(
50
+ sigPtr,
51
+ (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetByteRange(sig, buf, bufLen)
52
+ );
53
+ const byteRange = this._parseByteRange(byteRangeRaw);
54
+ const subFilter = this.bridge.getSignatureStringField(
55
+ sigPtr,
56
+ (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetSubFilter(sig, buf, bufLen)
57
+ );
58
+ const reason = this.bridge.getSignatureStringField(
59
+ sigPtr,
60
+ (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetReason(sig, buf, bufLen)
61
+ );
62
+ const signingTime = this.bridge.getSignatureStringField(
63
+ sigPtr,
64
+ (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetTime(sig, buf, bufLen)
65
+ );
66
+ const docMDPPermission = this.wasm._FPDFSignObj_GetDocMDPPermission(sigPtr);
67
+ return {
68
+ index,
69
+ contents,
70
+ byteRange,
71
+ subFilter,
72
+ reason,
73
+ signingTime,
74
+ docMDPPermission
75
+ };
76
+ }
77
+ _parseByteRange(raw) {
78
+ if (raw.length === 0) return [];
79
+ const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);
80
+ const ints = [];
81
+ for (let i = 0; i + 3 < raw.length; i += 4) {
82
+ ints.push(view.getInt32(i, true));
83
+ }
84
+ return ints;
85
+ }
86
+ /**
87
+ * Validates that the byte ranges cover the expected portions of the document
88
+ * (everything except the signature contents hex string).
89
+ */
90
+ _validateByteRange(byteRange, documentBytes) {
91
+ if (byteRange.length < 4 || byteRange.length % 2 !== 0) return false;
92
+ if (byteRange[0] !== 0) return false;
93
+ const lastOffset = byteRange[byteRange.length - 2];
94
+ const lastLength = byteRange[byteRange.length - 1];
95
+ if (lastOffset + lastLength !== documentBytes.length) return false;
96
+ return true;
97
+ }
98
+ };
99
+
100
+ export { SignatureVerifier };
101
+ //# sourceMappingURL=chunk-X53667JS.mjs.map
102
+ //# sourceMappingURL=chunk-X53667JS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/signatures/SignatureVerifier.ts"],"names":[],"mappings":"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","file":"chunk-X53667JS.mjs","sourcesContent":["import type { WasmModule, SignatureData, SignatureVerificationResult } from '../types';\nimport { WasmBridge } from '../core/WasmBridge';\n\n/**\n * Reads and verifies digital signatures from a PDF document.\n * Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.\n *\n * Note: Full cryptographic verification (validating the PKCS#7 signature\n * against a certificate chain) requires additional crypto libraries.\n * This class extracts the raw signature data and metadata for verification\n * by external tools (e.g., node-forge, WebCrypto, or OpenSSL).\n */\nexport class SignatureVerifier {\n private wasm: WasmModule;\n private bridge: WasmBridge;\n\n constructor(wasm: WasmModule, bridge: WasmBridge) {\n this.wasm = wasm;\n this.bridge = bridge;\n }\n\n readSignatures(docPtr: number): SignatureData[] {\n if (!this.wasm._FPDF_GetSignatureCount) return [];\n\n const count = this.wasm._FPDF_GetSignatureCount(docPtr);\n if (count <= 0) return [];\n\n const signatures: SignatureData[] = [];\n\n for (let i = 0; i < count; i++) {\n const sigPtr = this.wasm._FPDF_GetSignatureObject!(docPtr, i);\n if (sigPtr === 0) continue;\n\n const sig = this._readSignature(sigPtr, i);\n if (sig) signatures.push(sig);\n }\n\n return signatures;\n }\n\n /**\n * Verify a signature's integrity.\n * Performs basic byte-range validation and returns extracted metadata.\n * For full PKI verification, use the raw `contents` with a crypto library.\n */\n async verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult> {\n const signatures = this.readSignatures(docPtr);\n const sig = signatures[sigIndex];\n\n if (!sig) {\n throw new Error(`Signature at index ${sigIndex} not found`);\n }\n\n // Basic byte-range integrity check\n const byteRangeValid = this._validateByteRange(sig.byteRange, documentBytes);\n\n return {\n valid: byteRangeValid && sig.contents.length > 0,\n signer: sig.reason || 'Unknown',\n reason: sig.reason,\n timestamp: sig.signingTime,\n subFilter: sig.subFilter,\n docMDPPermission: sig.docMDPPermission,\n rawContents: sig.contents,\n };\n }\n\n private _readSignature(sigPtr: number, index: number): SignatureData | null {\n const contents = this.bridge.getSignatureBinaryField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetContents!(sig, buf, bufLen),\n );\n\n const byteRangeRaw = this.bridge.getSignatureBinaryField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetByteRange!(sig, buf, bufLen),\n );\n const byteRange = this._parseByteRange(byteRangeRaw);\n\n const subFilter = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetSubFilter!(sig, buf, bufLen),\n );\n\n const reason = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetReason!(sig, buf, bufLen),\n );\n\n const signingTime = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetTime!(sig, buf, bufLen),\n );\n\n const docMDPPermission = this.wasm._FPDFSignObj_GetDocMDPPermission!(sigPtr);\n\n return {\n index,\n contents,\n byteRange,\n subFilter,\n reason,\n signingTime,\n docMDPPermission,\n };\n }\n\n private _parseByteRange(raw: Uint8Array): number[] {\n if (raw.length === 0) return [];\n\n // Byte range is stored as pairs of (offset, length) as 32-bit integers\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n const ints: number[] = [];\n for (let i = 0; i + 3 < raw.length; i += 4) {\n ints.push(view.getInt32(i, true));\n }\n return ints;\n }\n\n /**\n * Validates that the byte ranges cover the expected portions of the document\n * (everything except the signature contents hex string).\n */\n private _validateByteRange(byteRange: number[], documentBytes: Uint8Array): boolean {\n if (byteRange.length < 4 || byteRange.length % 2 !== 0) return false;\n\n // Byte range should start at 0\n if (byteRange[0] !== 0) return false;\n\n // Last range should end at document length\n const lastOffset = byteRange[byteRange.length - 2];\n const lastLength = byteRange[byteRange.length - 1];\n if (lastOffset + lastLength !== documentBytes.length) return false;\n\n return true;\n }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ // src/forms/FormFiller.ts
2
+ var FormFiller = class {
3
+ wasm;
4
+ bridge;
5
+ constructor(wasm, bridge) {
6
+ this.wasm = wasm;
7
+ this.bridge = bridge;
8
+ }
9
+ setFieldValue(docPtr, formHandle, pageCount, fieldName, value) {
10
+ for (let pageIdx = 0; pageIdx < pageCount; pageIdx++) {
11
+ const pagePtr = this.wasm._FPDF_LoadPage(docPtr, pageIdx);
12
+ if (pagePtr === 0) continue;
13
+ try {
14
+ const found = this._setFieldOnPage(pagePtr, formHandle, fieldName, value);
15
+ if (found) return true;
16
+ } finally {
17
+ this.wasm._FPDF_ClosePage(pagePtr);
18
+ }
19
+ }
20
+ throw new Error(`Form field "${fieldName}" not found`);
21
+ }
22
+ _setFieldOnPage(pagePtr, formHandle, fieldName, value) {
23
+ if (!this.wasm._FPDFPage_GetAnnotCount) return false;
24
+ const count = this.wasm._FPDFPage_GetAnnotCount(pagePtr);
25
+ for (let i = 0; i < count; i++) {
26
+ const annotPtr = this.wasm._FPDFPage_GetAnnot(pagePtr, i);
27
+ if (annotPtr === 0) continue;
28
+ try {
29
+ const subtype = this.wasm._FPDFAnnot_GetSubtype(annotPtr);
30
+ if (subtype !== 20) continue;
31
+ const name = this.bridge.getFormFieldName(formHandle, annotPtr);
32
+ if (name !== fieldName) continue;
33
+ if (this.wasm._FPDFAnnot_SetFormFieldValue) {
34
+ const valuePtr = this.bridge.allocateUTF16String(value);
35
+ this.wasm._FPDFAnnot_SetFormFieldValue(formHandle, annotPtr, valuePtr);
36
+ this.bridge.free(valuePtr);
37
+ }
38
+ return true;
39
+ } finally {
40
+ this.wasm._FPDFPage_CloseAnnot(annotPtr);
41
+ }
42
+ }
43
+ return false;
44
+ }
45
+ };
46
+
47
+ export { FormFiller };
48
+ //# sourceMappingURL=chunk-XEHKVFPJ.mjs.map
49
+ //# sourceMappingURL=chunk-XEHKVFPJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/forms/FormFiller.ts"],"names":[],"mappings":";AAOO,IAAM,aAAN,MAAiB;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,MAAkB,MAAA,EAAoB;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,aAAA,CACE,MAAA,EACA,UAAA,EACA,SAAA,EACA,WACA,KAAA,EACS;AACT,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,SAAA,EAAW,OAAA,EAAA,EAAW;AACpD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA;AACxD,MAAA,IAAI,YAAY,CAAA,EAAG;AAEnB,MAAA,IAAI;AACF,QAAA,MAAM,QAAQ,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,UAAA,EAAY,WAAW,KAAK,CAAA;AACxE,QAAA,IAAI,OAAO,OAAO,IAAA;AAAA,MACpB,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,MACnC;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,EACvD;AAAA,EAEQ,eAAA,CACN,OAAA,EACA,UAAA,EACA,SAAA,EACA,KAAA,EACS;AACT,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,uBAAA,EAAyB,OAAO,KAAA;AAE/C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB,OAAO,CAAA;AAEvD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAoB,SAAS,CAAC,CAAA;AACzD,MAAA,IAAI,aAAa,CAAA,EAAG;AAEpB,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,qBAAA,CAAuB,QAAQ,CAAA;AACzD,QAAA,IAAI,YAAY,EAAA,EAAI;AAEpB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,YAAY,QAAQ,CAAA;AAC9D,QAAA,IAAI,SAAS,SAAA,EAAW;AAExB,QAAA,IAAI,IAAA,CAAK,KAAK,4BAAA,EAA8B;AAC1C,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA;AACtD,UAAA,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA6B,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAA;AACrE,UAAA,IAAA,CAAK,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,QAC3B;AAEA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,qBAAsB,QAAQ,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-XEHKVFPJ.mjs","sourcesContent":["import type { WasmModule } from '../types';\nimport { WasmBridge } from '../core/WasmBridge';\n\n/**\n * Fills form field values programmatically.\n * Finds the matching field by name across all pages and sets its value.\n */\nexport class FormFiller {\n private wasm: WasmModule;\n private bridge: WasmBridge;\n\n constructor(wasm: WasmModule, bridge: WasmBridge) {\n this.wasm = wasm;\n this.bridge = bridge;\n }\n\n setFieldValue(\n docPtr: number,\n formHandle: number,\n pageCount: number,\n fieldName: string,\n value: string,\n ): boolean {\n for (let pageIdx = 0; pageIdx < pageCount; pageIdx++) {\n const pagePtr = this.wasm._FPDF_LoadPage(docPtr, pageIdx);\n if (pagePtr === 0) continue;\n\n try {\n const found = this._setFieldOnPage(pagePtr, formHandle, fieldName, value);\n if (found) return true;\n } finally {\n this.wasm._FPDF_ClosePage(pagePtr);\n }\n }\n\n throw new Error(`Form field \"${fieldName}\" not found`);\n }\n\n private _setFieldOnPage(\n pagePtr: number,\n formHandle: number,\n fieldName: string,\n value: string,\n ): boolean {\n if (!this.wasm._FPDFPage_GetAnnotCount) return false;\n\n const count = this.wasm._FPDFPage_GetAnnotCount(pagePtr);\n\n for (let i = 0; i < count; i++) {\n const annotPtr = this.wasm._FPDFPage_GetAnnot!(pagePtr, i);\n if (annotPtr === 0) continue;\n\n try {\n const subtype = this.wasm._FPDFAnnot_GetSubtype!(annotPtr);\n if (subtype !== 20) continue; // Not a widget\n\n const name = this.bridge.getFormFieldName(formHandle, annotPtr);\n if (name !== fieldName) continue;\n\n if (this.wasm._FPDFAnnot_SetFormFieldValue) {\n const valuePtr = this.bridge.allocateUTF16String(value);\n this.wasm._FPDFAnnot_SetFormFieldValue(formHandle, annotPtr, valuePtr);\n this.bridge.free(valuePtr);\n }\n\n return true;\n } finally {\n this.wasm._FPDFPage_CloseAnnot!(annotPtr);\n }\n }\n\n return false;\n }\n}\n"]}
package/dist/index.cjs ADDED
@@ -0,0 +1,112 @@
1
+ 'use strict';
2
+
3
+ var chunkETSUOY4U_cjs = require('./chunk-ETSUOY4U.cjs');
4
+ var chunkINA3KRJK_cjs = require('./chunk-INA3KRJK.cjs');
5
+ var chunkDVMAQ62T_cjs = require('./chunk-DVMAQ62T.cjs');
6
+ var chunkRZFKZ2CA_cjs = require('./chunk-RZFKZ2CA.cjs');
7
+ var chunkG2FA6VKV_cjs = require('./chunk-G2FA6VKV.cjs');
8
+ var chunk2YFCKMVK_cjs = require('./chunk-2YFCKMVK.cjs');
9
+ var chunk7FGOUG4Z_cjs = require('./chunk-7FGOUG4Z.cjs');
10
+ var chunkCPMUWWNS_cjs = require('./chunk-CPMUWWNS.cjs');
11
+
12
+ // src/index.ts
13
+ chunkINA3KRJK_cjs.setTier("full");
14
+
15
+ Object.defineProperty(exports, "SignatureVerifier", {
16
+ enumerable: true,
17
+ get: function () { return chunkETSUOY4U_cjs.SignatureVerifier; }
18
+ });
19
+ Object.defineProperty(exports, "LinkExtractor", {
20
+ enumerable: true,
21
+ get: function () { return chunkINA3KRJK_cjs.LinkExtractor; }
22
+ });
23
+ Object.defineProperty(exports, "OutlineExtractor", {
24
+ enumerable: true,
25
+ get: function () { return chunkINA3KRJK_cjs.OutlineExtractor; }
26
+ });
27
+ Object.defineProperty(exports, "PDFDocument", {
28
+ enumerable: true,
29
+ get: function () { return chunkINA3KRJK_cjs.PDFDocument; }
30
+ });
31
+ Object.defineProperty(exports, "PDFPage", {
32
+ enumerable: true,
33
+ get: function () { return chunkINA3KRJK_cjs.PDFPage; }
34
+ });
35
+ Object.defineProperty(exports, "PDFWorker", {
36
+ enumerable: true,
37
+ get: function () { return chunkINA3KRJK_cjs.PDFWorker; }
38
+ });
39
+ Object.defineProperty(exports, "PageRenderer", {
40
+ enumerable: true,
41
+ get: function () { return chunkINA3KRJK_cjs.PageRenderer; }
42
+ });
43
+ Object.defineProperty(exports, "SearchEngine", {
44
+ enumerable: true,
45
+ get: function () { return chunkINA3KRJK_cjs.SearchEngine; }
46
+ });
47
+ Object.defineProperty(exports, "TextExtractor", {
48
+ enumerable: true,
49
+ get: function () { return chunkINA3KRJK_cjs.TextExtractor; }
50
+ });
51
+ Object.defineProperty(exports, "TextLayerBuilder", {
52
+ enumerable: true,
53
+ get: function () { return chunkINA3KRJK_cjs.TextLayerBuilder; }
54
+ });
55
+ Object.defineProperty(exports, "VirtualRenderer", {
56
+ enumerable: true,
57
+ get: function () { return chunkINA3KRJK_cjs.VirtualRenderer; }
58
+ });
59
+ Object.defineProperty(exports, "WasmLoader", {
60
+ enumerable: true,
61
+ get: function () { return chunkINA3KRJK_cjs.WasmLoader; }
62
+ });
63
+ Object.defineProperty(exports, "WorkerPool", {
64
+ enumerable: true,
65
+ get: function () { return chunkINA3KRJK_cjs.WorkerPool; }
66
+ });
67
+ Object.defineProperty(exports, "getTier", {
68
+ enumerable: true,
69
+ get: function () { return chunkINA3KRJK_cjs.getTier; }
70
+ });
71
+ Object.defineProperty(exports, "isFullTier", {
72
+ enumerable: true,
73
+ get: function () { return chunkINA3KRJK_cjs.isFullTier; }
74
+ });
75
+ Object.defineProperty(exports, "AnnotationReader", {
76
+ enumerable: true,
77
+ get: function () { return chunkDVMAQ62T_cjs.AnnotationReader; }
78
+ });
79
+ Object.defineProperty(exports, "AnnotationWriter", {
80
+ enumerable: true,
81
+ get: function () { return chunkRZFKZ2CA_cjs.AnnotationWriter; }
82
+ });
83
+ Object.defineProperty(exports, "FormReader", {
84
+ enumerable: true,
85
+ get: function () { return chunkG2FA6VKV_cjs.FormReader; }
86
+ });
87
+ Object.defineProperty(exports, "AnnotationType", {
88
+ enumerable: true,
89
+ get: function () { return chunk2YFCKMVK_cjs.AnnotationType; }
90
+ });
91
+ Object.defineProperty(exports, "FLATTEN_USAGE", {
92
+ enumerable: true,
93
+ get: function () { return chunk2YFCKMVK_cjs.FLATTEN_USAGE; }
94
+ });
95
+ Object.defineProperty(exports, "FormFieldType", {
96
+ enumerable: true,
97
+ get: function () { return chunk2YFCKMVK_cjs.FormFieldType; }
98
+ });
99
+ Object.defineProperty(exports, "RENDER_FLAG", {
100
+ enumerable: true,
101
+ get: function () { return chunk2YFCKMVK_cjs.RENDER_FLAG; }
102
+ });
103
+ Object.defineProperty(exports, "FormFiller", {
104
+ enumerable: true,
105
+ get: function () { return chunk7FGOUG4Z_cjs.FormFiller; }
106
+ });
107
+ Object.defineProperty(exports, "FormFlattener", {
108
+ enumerable: true,
109
+ get: function () { return chunkCPMUWWNS_cjs.FormFlattener; }
110
+ });
111
+ //# sourceMappingURL=index.cjs.map
112
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":["setTier"],"mappings":";;;;;;;;;;;;AAgDAA,yBAAA,CAAQ,MAAM,CAAA","file":"index.cjs","sourcesContent":["export { PDFDocument } from './document/PDFDocument';\nexport { PDFPage } from './document/PDFPage';\nexport { PageRenderer } from './document/PageRenderer';\nexport { VirtualRenderer } from './document/VirtualRenderer';\nexport { TextExtractor } from './text/TextExtractor';\nexport { TextLayerBuilder } from './text/TextLayerBuilder';\nexport { SearchEngine } from './text/SearchEngine';\nexport { OutlineExtractor } from './navigation/OutlineExtractor';\nexport { LinkExtractor } from './navigation/LinkExtractor';\nexport { AnnotationReader } from './annotations/AnnotationReader';\nexport { AnnotationWriter } from './annotations/AnnotationWriter';\nexport { FormReader } from './forms/FormReader';\nexport { FormFiller } from './forms/FormFiller';\nexport { FormFlattener } from './forms/FormFlattener';\nexport { SignatureVerifier } from './signatures/SignatureVerifier';\nexport { PDFWorker } from './worker/PDFWorker';\nexport { WorkerPool } from './worker/WorkerPool';\nexport { WasmLoader } from './core/WasmLoader';\nexport { getTier, isFullTier } from './capabilities';\n\nexport type {\n PDFMetadata,\n PDFPermissions,\n RenderOptions,\n TextSpan,\n CharBox,\n SearchResult,\n SearchOptions,\n TextRect,\n OutlineItem,\n LinkInfo,\n OpenOptions,\n PDFNovaConfig,\n VirtualRendererOptions,\n WasmTier,\n AnnotationData,\n AnnotationColor,\n AnnotationRect,\n AttachmentPoint,\n CreateAnnotationOptions,\n FormFieldData,\n SignatureData,\n SignatureVerificationResult,\n} from './types';\n\nexport { RENDER_FLAG, AnnotationType, FormFieldType, FLATTEN_USAGE } from './types';\n\nimport { setTier } from './capabilities';\nsetTier('full');\n"]}
@@ -0,0 +1,103 @@
1
+ import { W as WasmModule, a as WasmBridge, A as AnnotationData, C as CreateAnnotationOptions, F as FormFieldData, S as SignatureData, b as SignatureVerificationResult } from './lite-CMz-Yosm.cjs';
2
+ export { c as AnnotationColor, d as AnnotationRect, e as AnnotationType, f as AttachmentPoint, g as CharBox, h as FLATTEN_USAGE, i as FormFieldType, L as LinkExtractor, j as LinkInfo, O as OpenOptions, k as OutlineExtractor, l as OutlineItem, P as PDFDocument, m as PDFMetadata, n as PDFNovaConfig, o as PDFPage, p as PDFPermissions, q as PDFWorker, r as PageRenderer, R as RENDER_FLAG, s as RenderOptions, t as SearchEngine, u as SearchOptions, v as SearchResult, T as TextExtractor, w as TextLayerBuilder, x as TextRect, y as TextSpan, V as VirtualRenderer, z as VirtualRendererOptions, B as WasmLoader, D as WasmTier, E as WorkerPool, G as getTier, H as isFullTier } from './lite-CMz-Yosm.cjs';
3
+
4
+ /**
5
+ * Reads annotations from a PDF page using PDFium's FPDFAnnot_* APIs.
6
+ */
7
+ declare class AnnotationReader {
8
+ private wasm;
9
+ private bridge;
10
+ constructor(wasm: WasmModule, bridge: WasmBridge);
11
+ readAnnotations(pagePtr: number): AnnotationData[];
12
+ private _readAnnotation;
13
+ private _getRect;
14
+ private _getColor;
15
+ private _getAttachmentPoints;
16
+ }
17
+
18
+ /**
19
+ * Creates and modifies annotations on PDF pages using PDFium's FPDFAnnot_* APIs.
20
+ */
21
+ declare class AnnotationWriter {
22
+ private wasm;
23
+ private bridge;
24
+ constructor(wasm: WasmModule, bridge: WasmBridge);
25
+ addAnnotation(pagePtr: number, options: CreateAnnotationOptions): void;
26
+ removeAnnotation(pagePtr: number, index: number): void;
27
+ private _setRect;
28
+ private _setColor;
29
+ }
30
+
31
+ /**
32
+ * Reads form fields from all pages of a PDF document.
33
+ * Iterates through annotations of type Widget to find form fields.
34
+ */
35
+ declare class FormReader {
36
+ private wasm;
37
+ private bridge;
38
+ constructor(wasm: WasmModule, bridge: WasmBridge);
39
+ readAllFields(docPtr: number, formHandle: number, pageCount: number): FormFieldData[];
40
+ private _readPageFields;
41
+ }
42
+
43
+ /**
44
+ * Fills form field values programmatically.
45
+ * Finds the matching field by name across all pages and sets its value.
46
+ */
47
+ declare class FormFiller {
48
+ private wasm;
49
+ private bridge;
50
+ constructor(wasm: WasmModule, bridge: WasmBridge);
51
+ setFieldValue(docPtr: number, formHandle: number, pageCount: number, fieldName: string, value: string): boolean;
52
+ private _setFieldOnPage;
53
+ }
54
+
55
+ /**
56
+ * Flattens form fields into static page content.
57
+ * After flattening, form fields become non-interactive rendered graphics.
58
+ */
59
+ declare class FormFlattener {
60
+ private wasm;
61
+ constructor(wasm: WasmModule);
62
+ /**
63
+ * Flatten all form fields across all pages.
64
+ * @param usage - 0 for normal display, 1 for print appearance
65
+ * @returns Number of pages successfully flattened
66
+ */
67
+ flattenAll(docPtr: number, pageCount: number, usage?: number): number;
68
+ /**
69
+ * Flatten form fields on a single page.
70
+ */
71
+ flattenPage(pagePtr: number, usage?: number): boolean;
72
+ }
73
+
74
+ /**
75
+ * Reads and verifies digital signatures from a PDF document.
76
+ * Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.
77
+ *
78
+ * Note: Full cryptographic verification (validating the PKCS#7 signature
79
+ * against a certificate chain) requires additional crypto libraries.
80
+ * This class extracts the raw signature data and metadata for verification
81
+ * by external tools (e.g., node-forge, WebCrypto, or OpenSSL).
82
+ */
83
+ declare class SignatureVerifier {
84
+ private wasm;
85
+ private bridge;
86
+ constructor(wasm: WasmModule, bridge: WasmBridge);
87
+ readSignatures(docPtr: number): SignatureData[];
88
+ /**
89
+ * Verify a signature's integrity.
90
+ * Performs basic byte-range validation and returns extracted metadata.
91
+ * For full PKI verification, use the raw `contents` with a crypto library.
92
+ */
93
+ verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult>;
94
+ private _readSignature;
95
+ private _parseByteRange;
96
+ /**
97
+ * Validates that the byte ranges cover the expected portions of the document
98
+ * (everything except the signature contents hex string).
99
+ */
100
+ private _validateByteRange;
101
+ }
102
+
103
+ export { AnnotationData, AnnotationReader, AnnotationWriter, CreateAnnotationOptions, FormFieldData, FormFiller, FormFlattener, FormReader, SignatureData, SignatureVerificationResult, SignatureVerifier };
@@ -0,0 +1,103 @@
1
+ import { W as WasmModule, a as WasmBridge, A as AnnotationData, C as CreateAnnotationOptions, F as FormFieldData, S as SignatureData, b as SignatureVerificationResult } from './lite-CMz-Yosm.js';
2
+ export { c as AnnotationColor, d as AnnotationRect, e as AnnotationType, f as AttachmentPoint, g as CharBox, h as FLATTEN_USAGE, i as FormFieldType, L as LinkExtractor, j as LinkInfo, O as OpenOptions, k as OutlineExtractor, l as OutlineItem, P as PDFDocument, m as PDFMetadata, n as PDFNovaConfig, o as PDFPage, p as PDFPermissions, q as PDFWorker, r as PageRenderer, R as RENDER_FLAG, s as RenderOptions, t as SearchEngine, u as SearchOptions, v as SearchResult, T as TextExtractor, w as TextLayerBuilder, x as TextRect, y as TextSpan, V as VirtualRenderer, z as VirtualRendererOptions, B as WasmLoader, D as WasmTier, E as WorkerPool, G as getTier, H as isFullTier } from './lite-CMz-Yosm.js';
3
+
4
+ /**
5
+ * Reads annotations from a PDF page using PDFium's FPDFAnnot_* APIs.
6
+ */
7
+ declare class AnnotationReader {
8
+ private wasm;
9
+ private bridge;
10
+ constructor(wasm: WasmModule, bridge: WasmBridge);
11
+ readAnnotations(pagePtr: number): AnnotationData[];
12
+ private _readAnnotation;
13
+ private _getRect;
14
+ private _getColor;
15
+ private _getAttachmentPoints;
16
+ }
17
+
18
+ /**
19
+ * Creates and modifies annotations on PDF pages using PDFium's FPDFAnnot_* APIs.
20
+ */
21
+ declare class AnnotationWriter {
22
+ private wasm;
23
+ private bridge;
24
+ constructor(wasm: WasmModule, bridge: WasmBridge);
25
+ addAnnotation(pagePtr: number, options: CreateAnnotationOptions): void;
26
+ removeAnnotation(pagePtr: number, index: number): void;
27
+ private _setRect;
28
+ private _setColor;
29
+ }
30
+
31
+ /**
32
+ * Reads form fields from all pages of a PDF document.
33
+ * Iterates through annotations of type Widget to find form fields.
34
+ */
35
+ declare class FormReader {
36
+ private wasm;
37
+ private bridge;
38
+ constructor(wasm: WasmModule, bridge: WasmBridge);
39
+ readAllFields(docPtr: number, formHandle: number, pageCount: number): FormFieldData[];
40
+ private _readPageFields;
41
+ }
42
+
43
+ /**
44
+ * Fills form field values programmatically.
45
+ * Finds the matching field by name across all pages and sets its value.
46
+ */
47
+ declare class FormFiller {
48
+ private wasm;
49
+ private bridge;
50
+ constructor(wasm: WasmModule, bridge: WasmBridge);
51
+ setFieldValue(docPtr: number, formHandle: number, pageCount: number, fieldName: string, value: string): boolean;
52
+ private _setFieldOnPage;
53
+ }
54
+
55
+ /**
56
+ * Flattens form fields into static page content.
57
+ * After flattening, form fields become non-interactive rendered graphics.
58
+ */
59
+ declare class FormFlattener {
60
+ private wasm;
61
+ constructor(wasm: WasmModule);
62
+ /**
63
+ * Flatten all form fields across all pages.
64
+ * @param usage - 0 for normal display, 1 for print appearance
65
+ * @returns Number of pages successfully flattened
66
+ */
67
+ flattenAll(docPtr: number, pageCount: number, usage?: number): number;
68
+ /**
69
+ * Flatten form fields on a single page.
70
+ */
71
+ flattenPage(pagePtr: number, usage?: number): boolean;
72
+ }
73
+
74
+ /**
75
+ * Reads and verifies digital signatures from a PDF document.
76
+ * Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.
77
+ *
78
+ * Note: Full cryptographic verification (validating the PKCS#7 signature
79
+ * against a certificate chain) requires additional crypto libraries.
80
+ * This class extracts the raw signature data and metadata for verification
81
+ * by external tools (e.g., node-forge, WebCrypto, or OpenSSL).
82
+ */
83
+ declare class SignatureVerifier {
84
+ private wasm;
85
+ private bridge;
86
+ constructor(wasm: WasmModule, bridge: WasmBridge);
87
+ readSignatures(docPtr: number): SignatureData[];
88
+ /**
89
+ * Verify a signature's integrity.
90
+ * Performs basic byte-range validation and returns extracted metadata.
91
+ * For full PKI verification, use the raw `contents` with a crypto library.
92
+ */
93
+ verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult>;
94
+ private _readSignature;
95
+ private _parseByteRange;
96
+ /**
97
+ * Validates that the byte ranges cover the expected portions of the document
98
+ * (everything except the signature contents hex string).
99
+ */
100
+ private _validateByteRange;
101
+ }
102
+
103
+ export { AnnotationData, AnnotationReader, AnnotationWriter, CreateAnnotationOptions, FormFieldData, FormFiller, FormFlattener, FormReader, SignatureData, SignatureVerificationResult, SignatureVerifier };
package/dist/index.mjs ADDED
@@ -0,0 +1,14 @@
1
+ export { SignatureVerifier } from './chunk-X53667JS.mjs';
2
+ import { setTier } from './chunk-2OWW5BYD.mjs';
3
+ export { LinkExtractor, OutlineExtractor, PDFDocument, PDFPage, PDFWorker, PageRenderer, SearchEngine, TextExtractor, TextLayerBuilder, VirtualRenderer, WasmLoader, WorkerPool, getTier, isFullTier } from './chunk-2OWW5BYD.mjs';
4
+ export { AnnotationReader } from './chunk-VRJQZOCH.mjs';
5
+ export { AnnotationWriter } from './chunk-I7OBHZLB.mjs';
6
+ export { FormReader } from './chunk-FD5RTJ5W.mjs';
7
+ export { AnnotationType, FLATTEN_USAGE, FormFieldType, RENDER_FLAG } from './chunk-G7575D5X.mjs';
8
+ export { FormFiller } from './chunk-XEHKVFPJ.mjs';
9
+ export { FormFlattener } from './chunk-FO3DQLVB.mjs';
10
+
11
+ // src/index.ts
12
+ setTier("full");
13
+ //# sourceMappingURL=index.mjs.map
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAgDA,OAAA,CAAQ,MAAM,CAAA","file":"index.mjs","sourcesContent":["export { PDFDocument } from './document/PDFDocument';\nexport { PDFPage } from './document/PDFPage';\nexport { PageRenderer } from './document/PageRenderer';\nexport { VirtualRenderer } from './document/VirtualRenderer';\nexport { TextExtractor } from './text/TextExtractor';\nexport { TextLayerBuilder } from './text/TextLayerBuilder';\nexport { SearchEngine } from './text/SearchEngine';\nexport { OutlineExtractor } from './navigation/OutlineExtractor';\nexport { LinkExtractor } from './navigation/LinkExtractor';\nexport { AnnotationReader } from './annotations/AnnotationReader';\nexport { AnnotationWriter } from './annotations/AnnotationWriter';\nexport { FormReader } from './forms/FormReader';\nexport { FormFiller } from './forms/FormFiller';\nexport { FormFlattener } from './forms/FormFlattener';\nexport { SignatureVerifier } from './signatures/SignatureVerifier';\nexport { PDFWorker } from './worker/PDFWorker';\nexport { WorkerPool } from './worker/WorkerPool';\nexport { WasmLoader } from './core/WasmLoader';\nexport { getTier, isFullTier } from './capabilities';\n\nexport type {\n PDFMetadata,\n PDFPermissions,\n RenderOptions,\n TextSpan,\n CharBox,\n SearchResult,\n SearchOptions,\n TextRect,\n OutlineItem,\n LinkInfo,\n OpenOptions,\n PDFNovaConfig,\n VirtualRendererOptions,\n WasmTier,\n AnnotationData,\n AnnotationColor,\n AnnotationRect,\n AttachmentPoint,\n CreateAnnotationOptions,\n FormFieldData,\n SignatureData,\n SignatureVerificationResult,\n} from './types';\n\nexport { RENDER_FLAG, AnnotationType, FormFieldType, FLATTEN_USAGE } from './types';\n\nimport { setTier } from './capabilities';\nsetTier('full');\n"]}