@e-sig/core 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 (85) hide show
  1. package/LICENSE +1 -1
  2. package/dist/index.d.ts +3 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/pem-signer.d.ts +26 -5
  7. package/dist/pem-signer.d.ts.map +1 -1
  8. package/dist/pem-signer.js +84 -13
  9. package/dist/pem-signer.js.map +1 -1
  10. package/dist/pq-seal.d.ts +53 -3
  11. package/dist/pq-seal.d.ts.map +1 -1
  12. package/dist/pq-seal.js +92 -8
  13. package/dist/pq-seal.js.map +1 -1
  14. package/dist/pq-verify.d.ts +22 -0
  15. package/dist/pq-verify.d.ts.map +1 -1
  16. package/dist/pq-verify.js +16 -0
  17. package/dist/pq-verify.js.map +1 -1
  18. package/dist/render-pdf.d.ts +5 -5
  19. package/dist/render-pdf.d.ts.map +1 -1
  20. package/dist/render-pdf.js +51 -17
  21. package/dist/render-pdf.js.map +1 -1
  22. package/dist/sign-pdf.d.ts +45 -4
  23. package/dist/sign-pdf.d.ts.map +1 -1
  24. package/dist/sign-pdf.js +24 -1
  25. package/dist/sign-pdf.js.map +1 -1
  26. package/dist/types.d.ts +36 -0
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/vendor/placeholder-plain/LICENSE-signpdf.md +47 -0
  29. package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts +6 -0
  30. package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts.map +1 -0
  31. package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js +38 -0
  32. package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js.map +1 -0
  33. package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts +6 -0
  34. package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts.map +1 -0
  35. package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js +15 -0
  36. package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js.map +1 -0
  37. package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts +4 -0
  38. package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts.map +1 -0
  39. package/dist/vendor/placeholder-plain/createBufferTrailer.js +26 -0
  40. package/dist/vendor/placeholder-plain/createBufferTrailer.js.map +1 -0
  41. package/dist/vendor/placeholder-plain/findObject.d.ts +4 -0
  42. package/dist/vendor/placeholder-plain/findObject.d.ts.map +1 -0
  43. package/dist/vendor/placeholder-plain/findObject.js +18 -0
  44. package/dist/vendor/placeholder-plain/findObject.js.map +1 -0
  45. package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts +4 -0
  46. package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts.map +1 -0
  47. package/dist/vendor/placeholder-plain/getIndexFromRef.js +13 -0
  48. package/dist/vendor/placeholder-plain/getIndexFromRef.js.map +1 -0
  49. package/dist/vendor/placeholder-plain/getPageRef.d.ts +6 -0
  50. package/dist/vendor/placeholder-plain/getPageRef.d.ts.map +1 -0
  51. package/dist/vendor/placeholder-plain/getPageRef.js +18 -0
  52. package/dist/vendor/placeholder-plain/getPageRef.js.map +1 -0
  53. package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts +3 -0
  54. package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts.map +1 -0
  55. package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js +12 -0
  56. package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js.map +1 -0
  57. package/dist/vendor/placeholder-plain/index.d.ts +2 -0
  58. package/dist/vendor/placeholder-plain/index.d.ts.map +1 -0
  59. package/dist/vendor/placeholder-plain/index.js +4 -0
  60. package/dist/vendor/placeholder-plain/index.js.map +1 -0
  61. package/dist/vendor/placeholder-plain/pdfObject.d.ts +13 -0
  62. package/dist/vendor/placeholder-plain/pdfObject.d.ts.map +1 -0
  63. package/dist/vendor/placeholder-plain/pdfObject.js +142 -0
  64. package/dist/vendor/placeholder-plain/pdfObject.js.map +1 -0
  65. package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts +49 -0
  66. package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts.map +1 -0
  67. package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js +115 -0
  68. package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js.map +1 -0
  69. package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts +41 -0
  70. package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts.map +1 -0
  71. package/dist/vendor/placeholder-plain/plainAddPlaceholder.js +95 -0
  72. package/dist/vendor/placeholder-plain/plainAddPlaceholder.js.map +1 -0
  73. package/dist/vendor/placeholder-plain/readPdf.d.ts +20 -0
  74. package/dist/vendor/placeholder-plain/readPdf.d.ts.map +1 -0
  75. package/dist/vendor/placeholder-plain/readPdf.js +47 -0
  76. package/dist/vendor/placeholder-plain/readPdf.js.map +1 -0
  77. package/dist/vendor/placeholder-plain/readRefTable.d.ts +17 -0
  78. package/dist/vendor/placeholder-plain/readRefTable.d.ts.map +1 -0
  79. package/dist/vendor/placeholder-plain/readRefTable.js +84 -0
  80. package/dist/vendor/placeholder-plain/readRefTable.js.map +1 -0
  81. package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts +3 -0
  82. package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts.map +1 -0
  83. package/dist/vendor/placeholder-plain/xrefToRefMap.js +38 -0
  84. package/dist/vendor/placeholder-plain/xrefToRefMap.js.map +1 -0
  85. package/package.json +4 -5
@@ -0,0 +1,15 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ import getIndexFromRef from "./getIndexFromRef.js";
4
+ const createBufferRootWithAcroform = (pdf, info, form) => {
5
+ const rootIndex = getIndexFromRef(info.xref, info.rootRef);
6
+ return Buffer.concat([
7
+ Buffer.from(`${rootIndex} 0 obj\n`),
8
+ Buffer.from("<<\n"),
9
+ Buffer.from(`${info.root}\n`),
10
+ Buffer.from(`/AcroForm ${form}`),
11
+ Buffer.from("\n>>\nendobj\n"),
12
+ ]);
13
+ };
14
+ export default createBufferRootWithAcroform;
15
+ //# sourceMappingURL=createBufferRootWithAcroform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBufferRootWithAcroform.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferRootWithAcroform.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAGnD,MAAM,4BAA4B,GAAG,CACnC,GAAW,EACX,IAAuB,EACvB,IAA4B,EACpB,EAAE;IACV,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,UAAU,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ReadPdfReturnType } from "./readPdf.js";
2
+ declare const createBufferTrailer: (pdf: Buffer, info: ReadPdfReturnType, addedReferences: Map<number, number>) => Buffer;
3
+ export default createBufferTrailer;
4
+ //# sourceMappingURL=createBufferTrailer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBufferTrailer.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferTrailer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,QAAA,MAAM,mBAAmB,GACvB,KAAK,MAAM,EACX,MAAM,iBAAiB,EACvB,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAwBF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,26 @@
1
+ const createBufferTrailer = (pdf, info, addedReferences) => {
2
+ const sparseRows = [];
3
+ sparseRows[0] = "0000000000 65535 f "; // info.xref.tableRows[0];
4
+ addedReferences.forEach((offset, index) => {
5
+ const paddedOffset = `0000000000${offset}`.slice(-10);
6
+ sparseRows[index + 1] = `${index} 1\n${paddedOffset} 00000 n `;
7
+ });
8
+ const rows = sparseRows.filter((row) => row !== undefined);
9
+ return Buffer.concat([
10
+ Buffer.from("xref\n"),
11
+ Buffer.from(`${info.xref.startingIndex} 1\n`),
12
+ Buffer.from(rows.join("\n")),
13
+ Buffer.from("\ntrailer\n"),
14
+ Buffer.from("<<\n"),
15
+ Buffer.from(`/Size ${info.xref.maxIndex + 1}\n`),
16
+ Buffer.from(`/Root ${info.rootRef}\n`),
17
+ Buffer.from(info.infoRef ? `/Info ${info.infoRef}\n` : ""),
18
+ Buffer.from(`/Prev ${info.xRefPosition}\n`),
19
+ Buffer.from(">>\n"),
20
+ Buffer.from("startxref\n"),
21
+ Buffer.from(`${pdf.length}\n`),
22
+ Buffer.from("%%EOF"),
23
+ ]);
24
+ };
25
+ export default createBufferTrailer;
26
+ //# sourceMappingURL=createBufferTrailer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBufferTrailer.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/createBufferTrailer.ts"],"names":[],"mappings":"AAMA,MAAM,mBAAmB,GAAG,CAC1B,GAAW,EACX,IAAuB,EACvB,eAAoC,EAC5B,EAAE;IACV,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,UAAU,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,0BAA0B;IAEjE,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,aAAa,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,YAAY,WAAW,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ReadRefTableReturnType } from "./readRefTable.js";
2
+ declare const findObject: (pdf: Buffer, refTable: ReadRefTableReturnType, ref: string) => Buffer;
3
+ export default findObject;
4
+ //# sourceMappingURL=findObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findObject.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/findObject.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,QAAA,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,UAAU,sBAAsB,EAAE,KAAK,MAAM,KAAG,MAUhF,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ // (Upstream passed 'utf8' as the second argument to indexOf/lastIndexOf; Node
4
+ // treats a string byteOffset as the encoding, i.e. identical to the defaults
5
+ // used here.)
6
+ import getIndexFromRef from "./getIndexFromRef.js";
7
+ const findObject = (pdf, refTable, ref) => {
8
+ const index = getIndexFromRef(refTable, ref);
9
+ const offset = refTable.offsets.get(index);
10
+ let slice = pdf.slice(offset);
11
+ slice = slice.slice(0, slice.indexOf("endobj"));
12
+ // FIXME: What if it is a stream?
13
+ slice = slice.slice(slice.indexOf("<<") + 2);
14
+ slice = slice.slice(0, slice.lastIndexOf(">>"));
15
+ return slice;
16
+ };
17
+ export default findObject;
18
+ //# sourceMappingURL=findObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findObject.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/findObject.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,cAAc;AACd,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAGnD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAgC,EAAE,GAAW,EAAU,EAAE;IACxF,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;IACrD,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhD,iCAAiC;IACjC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ReadRefTableReturnType } from "./readRefTable.js";
2
+ declare const getIndexFromRef: (refTable: ReadRefTableReturnType, ref: string) => number;
3
+ export default getIndexFromRef;
4
+ //# sourceMappingURL=getIndexFromRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIndexFromRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getIndexFromRef.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,QAAA,MAAM,eAAe,GAAI,UAAU,sBAAsB,EAAE,KAAK,MAAM,KAAG,MAOxE,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ import { SignPdfError } from "@signpdf/utils";
4
+ const getIndexFromRef = (refTable, ref) => {
5
+ const [indexString] = ref.split(" ");
6
+ const index = parseInt(indexString);
7
+ if (!refTable.offsets.has(index)) {
8
+ throw new SignPdfError(`Failed to locate object "${ref}".`, SignPdfError.TYPE_PARSE);
9
+ }
10
+ return index;
11
+ };
12
+ export default getIndexFromRef;
13
+ //# sourceMappingURL=getIndexFromRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIndexFromRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getIndexFromRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,eAAe,GAAG,CAAC,QAAgC,EAAE,GAAW,EAAU,EAAE;IAChF,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ReadPdfReturnType } from "./readPdf.js";
2
+ /**
3
+ * Finds the reference to a page.
4
+ */
5
+ export default function getPageRef(pdfBuffer: Buffer, info: ReadPdfReturnType): string;
6
+ //# sourceMappingURL=getPageRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPageRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPageRef.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASrF"}
@@ -0,0 +1,18 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ import getPagesDictionaryRef from "./getPagesDictionaryRef.js";
4
+ import findObject from "./findObject.js";
5
+ /**
6
+ * Finds the reference to a page.
7
+ */
8
+ export default function getPageRef(pdfBuffer, info) {
9
+ const pagesRef = getPagesDictionaryRef(info);
10
+ const pagesDictionary = findObject(pdfBuffer, info.xref, pagesRef);
11
+ const kidsPosition = pagesDictionary.indexOf("/Kids");
12
+ const kidsStart = pagesDictionary.indexOf("[", kidsPosition) + 1;
13
+ const kidsEnd = pagesDictionary.indexOf("]", kidsPosition);
14
+ const pages = pagesDictionary.slice(kidsStart, kidsEnd).toString();
15
+ const split = pages.trim().split(" ", 3);
16
+ return `${split[0]} ${split[1]} ${split[2]}`;
17
+ }
18
+ //# sourceMappingURL=getPageRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPageRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPageRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAiB,EAAE,IAAuB;IAC3E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ReadPdfReturnType } from "./readPdf.js";
2
+ export default function getPagesDictionaryRef(info: ReadPdfReturnType): string;
3
+ //# sourceMappingURL=getPagesDictionaryRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPagesDictionaryRef.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPagesDictionaryRef.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAU7E"}
@@ -0,0 +1,12 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ import { SignPdfError } from "@signpdf/utils";
4
+ export default function getPagesDictionaryRef(info) {
5
+ const pagesRefRegex = /\/Pages\s+(\d+\s+\d+\s+R)/g;
6
+ const match = pagesRefRegex.exec(info.root);
7
+ if (match === null) {
8
+ throw new SignPdfError("Failed to find the pages descriptor. This is probably a problem in node-signpdf.", SignPdfError.TYPE_PARSE);
9
+ }
10
+ return match[1];
11
+ }
12
+ //# sourceMappingURL=getPagesDictionaryRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPagesDictionaryRef.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/getPagesDictionaryRef.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,IAAuB;IACnE,MAAM,aAAa,GAAG,4BAA4B,CAAC;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACpB,kFAAkF,EAClF,YAAY,CAAC,UAAU,CACxB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { plainAddPlaceholder, type PlainAddPlaceholderInput } from "./plainAddPlaceholder.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Vendored from @signpdf/placeholder-plain@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Public surface mirrors the upstream package entry point.
3
+ export { plainAddPlaceholder } from "./plainAddPlaceholder.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2DAA2D;AAC3D,OAAO,EAAE,mBAAmB,EAAiC,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Escape a PDF name body per ISO 32000-1 §7.3.5: every byte outside the
3
+ * regular-character range (0x21..0x7E minus the delimiters) is written as
4
+ * `#` followed by two uppercase hex digits. Regular names pass through
5
+ * unchanged, so this is a no-op for well-formed input.
6
+ */
7
+ export declare const escapePdfName: (name: string) => string;
8
+ /** Converts JavaScript types into their corresponding PDF types. */
9
+ export declare const convert: (object: unknown) => string;
10
+ export declare const PDFObject: {
11
+ convert: (object: unknown) => string;
12
+ };
13
+ //# sourceMappingURL=pdfObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfObject.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfObject.ts"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAU5C,CAAC;AAKF,oEAAoE;AACpE,eAAO,MAAM,OAAO,GAAI,QAAQ,OAAO,KAAG,MA2EzC,CAAC;AAEF,eAAO,MAAM,SAAS;sBA7EU,OAAO,KAAG,MAAM;CA6EZ,CAAC"}
@@ -0,0 +1,142 @@
1
+ // Hardened replacement for `PDFObject.convert` from @signpdf/utils@3.x
2
+ // (itself derived from pdfkit's PDFObject by Devon Govett, MIT — see
3
+ // LICENSE-signpdf.md). This is the ONE file in this directory that
4
+ // DELIBERATELY DIVERGES from upstream. Two changes, both security fixes:
5
+ //
6
+ // 1. Upstream's dictionary branch does:
7
+ // if (val.toString().indexOf('<<') !== -1) checkedValue = val;
8
+ // i.e. any value whose string form contains "<<" is spliced into the
9
+ // dictionary RAW — no conversion, no escaping, not even PDF-string
10
+ // parens. A caller-supplied `reason` / `name` / `location` /
11
+ // `contactInfo` containing "<<" therefore injects arbitrary keys into
12
+ // the signature dictionary. That branch exists upstream only so pdfkit
13
+ // can pass pre-rendered dictionary strings; nothing this package emits
14
+ // relies on it (Prop_Build is a real object and recurses correctly), so
15
+ // it is removed outright.
16
+ //
17
+ // 2. Upstream renders a JS string as a PDF name with `/${object}` and no
18
+ // escaping, so a name value can carry delimiters and whitespace and end
19
+ // the token early — the /SubFilter injection vector. Names are now
20
+ // escaped per ISO 32000-1 §7.3.5 (#xx for every non-regular byte).
21
+ //
22
+ // Both changes are byte-identical for every legitimate input this package
23
+ // produces: the names it emits (Sig, Adobe.PPKLite, ETSI.CAdES.detached,
24
+ // Widget, Annot, the "**********" ByteRange placeholder, and every
25
+ // dictionary key) consist solely of regular characters, and no legitimate
26
+ // value's string form contains "<<". Covered by test/sig-dict-injection.test.ts
27
+ // ::"is byte-identical to upstream for legitimate input".
28
+ //
29
+ // Reported by Uuaid-Lead 2026-08-11 (found while adversarially testing an
30
+ // independent verifier against the published @e-sig/core signPdf).
31
+ import { PDFAbstractReference } from "@signpdf/utils";
32
+ const pad = (str, length) => (Array(length + 1).join("0") + str).slice(-length);
33
+ const escapableRe = /[\n\r\t\b\f()\\]/g;
34
+ const escapable = {
35
+ "\n": "\\n",
36
+ "\r": "\\r",
37
+ "\t": "\\t",
38
+ "\b": "\\b",
39
+ "\f": "\\f",
40
+ "\\": "\\\\",
41
+ "(": "\\(",
42
+ ")": "\\)",
43
+ };
44
+ /**
45
+ * PDF name delimiters (ISO 32000-1 §7.2.2) plus '#', which introduces an
46
+ * escape and so must itself be escaped.
47
+ */
48
+ const NAME_DELIMITERS = new Set("()<>[]{}/%#".split("").map((c) => c.charCodeAt(0)));
49
+ /**
50
+ * Escape a PDF name body per ISO 32000-1 §7.3.5: every byte outside the
51
+ * regular-character range (0x21..0x7E minus the delimiters) is written as
52
+ * `#` followed by two uppercase hex digits. Regular names pass through
53
+ * unchanged, so this is a no-op for well-formed input.
54
+ */
55
+ export const escapePdfName = (name) => {
56
+ let out = "";
57
+ for (const byte of Buffer.from(name, "utf8")) {
58
+ if (byte >= 0x21 && byte <= 0x7e && !NAME_DELIMITERS.has(byte)) {
59
+ out += String.fromCharCode(byte);
60
+ }
61
+ else {
62
+ out += `#${byte.toString(16).padStart(2, "0").toUpperCase()}`;
63
+ }
64
+ }
65
+ return out;
66
+ };
67
+ // Convert little endian UTF-16 to big endian
68
+ const swapBytes = (buff) => buff.swap16();
69
+ /** Converts JavaScript types into their corresponding PDF types. */
70
+ export const convert = (object) => {
71
+ // String literals are converted to the PDF name type
72
+ if (typeof object === "string") {
73
+ return `/${escapePdfName(object)}`;
74
+ }
75
+ // String objects are converted to PDF strings (UTF-16)
76
+ if (object instanceof String) {
77
+ let string = String(object);
78
+ // Detect if this is a unicode string
79
+ let isUnicode = false;
80
+ for (let i = 0, end = string.length; i < end; i += 1) {
81
+ if (string.charCodeAt(i) > 0x7f) {
82
+ isUnicode = true;
83
+ break;
84
+ }
85
+ }
86
+ // If so, encode it as big endian UTF-16
87
+ const stringBuffer = isUnicode
88
+ ? swapBytes(Buffer.from(`\ufeff${string}`, "utf16le"))
89
+ : Buffer.from(string, "ascii");
90
+ string = stringBuffer.toString("binary");
91
+ // Escape characters as required by the spec
92
+ string = string.replace(escapableRe, (c) => escapable[c]);
93
+ return `(${string})`;
94
+ }
95
+ // Buffers are converted to PDF hex strings
96
+ if (Buffer.isBuffer(object)) {
97
+ return `<${object.toString("hex")}>`;
98
+ }
99
+ if (object instanceof PDFAbstractReference) {
100
+ // String(): @signpdf/utils types the abstract base's toString() as void
101
+ // (it throws); the concrete PDFKitReferenceMock returns "<index> 0 R".
102
+ return String(object);
103
+ }
104
+ if (object instanceof Date) {
105
+ const string = `D:${pad(object.getUTCFullYear(), 4)}${pad(object.getUTCMonth() + 1, 2)}` +
106
+ `${pad(object.getUTCDate(), 2)}${pad(object.getUTCHours(), 2)}` +
107
+ `${pad(object.getUTCMinutes(), 2)}${pad(object.getUTCSeconds(), 2)}Z`;
108
+ return `(${string})`;
109
+ }
110
+ if (Array.isArray(object)) {
111
+ const items = object.map((e) => convert(e)).join(" ");
112
+ return `[${items}]`;
113
+ }
114
+ if ({}.toString.call(object) === "[object Object]") {
115
+ const out = ["<<"];
116
+ let streamData;
117
+ Object.entries(object).forEach(([key, val]) => {
118
+ if (key === "stream") {
119
+ streamData = `${key}\n${val}\nendstream`;
120
+ }
121
+ else {
122
+ // NOTE: no raw-splice branch here — see the header. Every value is
123
+ // converted, and every key is escaped as a name.
124
+ out.push(`/${escapePdfName(key)} ${convert(val)}`);
125
+ }
126
+ });
127
+ out.push(">>");
128
+ if (streamData) {
129
+ out.push(streamData);
130
+ }
131
+ return out.join("\n");
132
+ }
133
+ if (typeof object === "number") {
134
+ if (object > -1e21 && object < 1e21) {
135
+ return String(Math.round(object * 1e6) / 1e6);
136
+ }
137
+ throw new Error(`unsupported number: ${object}`);
138
+ }
139
+ return `${object}`;
140
+ };
141
+ export const PDFObject = { convert };
142
+ //# sourceMappingURL=pdfObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfObject.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfObject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { PDFKitReferenceMock } from "@signpdf/utils";
2
+ /**
3
+ * The minimal PDFDocument-shaped surface that plainAddPlaceholder feeds in.
4
+ * (Upstream typed this as `object PDFDocument`.)
5
+ */
6
+ export interface PdfKitMock {
7
+ ref(input: Record<string, unknown>, knownIndex?: number): PDFKitReferenceMock;
8
+ page: {
9
+ dictionary: PDFKitReferenceMock & {
10
+ data: {
11
+ Annots: unknown[];
12
+ };
13
+ };
14
+ };
15
+ _root: {
16
+ data: {
17
+ AcroForm?: unknown;
18
+ };
19
+ };
20
+ }
21
+ export interface PdfkitAddPlaceholderInput {
22
+ pdf: PdfKitMock;
23
+ pdfBuffer: Buffer;
24
+ reason: string;
25
+ contactInfo: string;
26
+ name: string;
27
+ location: string;
28
+ signingTime?: Date;
29
+ signatureLength?: number;
30
+ byteRangePlaceholder?: string;
31
+ /** One of SUBFILTER_* from @signpdf/utils */
32
+ subFilter?: string;
33
+ /** [x1, y1, x2, y2] widget rectangle */
34
+ widgetRect?: number[];
35
+ /** Name of the application generating the signature */
36
+ appName?: string;
37
+ }
38
+ export interface PdfkitAddPlaceholderReturnType {
39
+ signature: PDFKitReferenceMock;
40
+ form: PDFKitReferenceMock;
41
+ widget: PDFKitReferenceMock;
42
+ }
43
+ /**
44
+ * Adds the objects that are needed for Adobe.PPKLite to read the signature.
45
+ * Also includes a placeholder for the actual signature.
46
+ * Returns an Object with all the added PDFReferences.
47
+ */
48
+ export declare const pdfkitAddPlaceholder: ({ pdf, pdfBuffer, reason, contactInfo, name, location, signingTime, signatureLength, byteRangePlaceholder, subFilter, widgetRect, appName, }: PdfkitAddPlaceholderInput) => PdfkitAddPlaceholderReturnType;
49
+ //# sourceMappingURL=pdfkitAddPlaceholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfkitAddPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfkitAddPlaceholder.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9E,IAAI,EAAE;QACJ,UAAU,EAAE,mBAAmB,GAAG;YAAE,IAAI,EAAE;gBAAE,MAAM,EAAE,OAAO,EAAE,CAAA;aAAE,CAAA;SAAE,CAAC;KACnE,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,UAAU,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,mBAAmB,CAAC;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,8IAalC,yBAAyB,KAAG,8BA4G9B,CAAC"}
@@ -0,0 +1,115 @@
1
+ // Vendored from @signpdf/placeholder-pdfkit010@3.3.0 (MIT). See LICENSE-signpdf.md.
2
+ // Faithful TypeScript port — logic and byte-emitting paths are unchanged.
3
+ // This is the only module @signpdf/placeholder-plain used from
4
+ // @signpdf/placeholder-pdfkit010; vendoring it severs the
5
+ // pdfkit@0.10.0 (peer) -> crypto-js@3.3.0 dependency chain.
6
+ import { DEFAULT_BYTE_RANGE_PLACEHOLDER, DEFAULT_SIGNATURE_LENGTH, SUBFILTER_ADOBE_PKCS7_DETACHED, ANNOTATION_FLAGS, SIG_FLAGS, PDFKitReferenceMock, } from "@signpdf/utils";
7
+ /**
8
+ * Adds the objects that are needed for Adobe.PPKLite to read the signature.
9
+ * Also includes a placeholder for the actual signature.
10
+ * Returns an Object with all the added PDFReferences.
11
+ */
12
+ export const pdfkitAddPlaceholder = ({ pdf, pdfBuffer, reason, contactInfo, name, location, signingTime = undefined, signatureLength = DEFAULT_SIGNATURE_LENGTH, byteRangePlaceholder = DEFAULT_BYTE_RANGE_PLACEHOLDER, subFilter = SUBFILTER_ADOBE_PKCS7_DETACHED, widgetRect = [0, 0, 0, 0], appName = undefined, }) => {
13
+ /* eslint-disable no-underscore-dangle,no-param-reassign */
14
+ // Generate the signature placeholder
15
+ const signature = pdf.ref({
16
+ Type: "Sig",
17
+ Filter: "Adobe.PPKLite",
18
+ SubFilter: subFilter,
19
+ ByteRange: [0, byteRangePlaceholder, byteRangePlaceholder, byteRangePlaceholder],
20
+ Contents: Buffer.from(String.fromCharCode(0).repeat(signatureLength)),
21
+ Reason: new String(reason), // eslint-disable-line no-new-wrappers
22
+ M: signingTime ?? new Date(),
23
+ ContactInfo: new String(contactInfo), // eslint-disable-line no-new-wrappers
24
+ Name: new String(name), // eslint-disable-line no-new-wrappers
25
+ Location: new String(location), // eslint-disable-line no-new-wrappers
26
+ Prop_Build: {
27
+ Filter: {
28
+ Name: "Adobe.PPKLite",
29
+ },
30
+ ...(appName
31
+ ? {
32
+ App: {
33
+ Name: appName,
34
+ },
35
+ }
36
+ : {}),
37
+ },
38
+ });
39
+ // Check if pdf already contains acroform field
40
+ const isAcroFormExists = typeof pdf._root.data.AcroForm !== "undefined";
41
+ let fieldIds = [];
42
+ let acroFormId;
43
+ if (isAcroFormExists) {
44
+ /* FIXME: We're working with a PDFDocument.
45
+ * Needing to work with strings here doesn't make sense.
46
+ * It only exists to support plainAddPlaceholder the reference to /AcroForm
47
+ * would be external to PDFKit at this point.
48
+ */
49
+ const acroFormPosition = pdfBuffer.lastIndexOf("/Type /AcroForm");
50
+ let acroFormStart = acroFormPosition;
51
+ // 10 is the distance between "/Type /AcroForm" and AcroFrom ID
52
+ const charsUntilIdEnd = 10;
53
+ const acroFormIdEnd = acroFormPosition - charsUntilIdEnd;
54
+ // Let's find AcroForm ID by trying to find the "\n" before the ID
55
+ // 12 is a enough space to find the "\n"
56
+ // (generally it's 2 or 3, but I'm giving a big space though)
57
+ const maxAcroFormIdLength = 12;
58
+ let index = charsUntilIdEnd + 1;
59
+ for (index; index < charsUntilIdEnd + maxAcroFormIdLength; index += 1) {
60
+ const acroFormIdString = pdfBuffer.slice(acroFormPosition - index, acroFormIdEnd).toString();
61
+ if (acroFormIdString[0] === "\n") {
62
+ break;
63
+ }
64
+ acroFormStart = acroFormPosition - index;
65
+ }
66
+ const pdfSlice = pdfBuffer.slice(acroFormStart);
67
+ const acroForm = pdfSlice.slice(0, pdfSlice.indexOf("endobj")).toString();
68
+ acroFormId = parseInt(pdf._root.data.AcroForm.toString());
69
+ const acroFormFields = acroForm.slice(acroForm.indexOf("/Fields [") + 9, acroForm.indexOf("]"));
70
+ fieldIds = acroFormFields
71
+ .split(" ")
72
+ .filter(Boolean)
73
+ .filter((element, i) => i % 3 === 0)
74
+ .map((fieldId) => new PDFKitReferenceMock(fieldId));
75
+ }
76
+ const signatureName = "Signature";
77
+ // Generate signature annotation widget
78
+ const widget = pdf.ref({
79
+ Type: "Annot",
80
+ Subtype: "Widget",
81
+ FT: "Sig",
82
+ Rect: widgetRect,
83
+ V: signature,
84
+ T: new String(signatureName + (fieldIds.length + 1)), // eslint-disable-line no-new-wrappers
85
+ F: ANNOTATION_FLAGS.PRINT,
86
+ P: pdf.page.dictionary, // eslint-disable-line no-underscore-dangle
87
+ });
88
+ pdf.page.dictionary.data.Annots = [widget];
89
+ // Include the widget in a page
90
+ let form;
91
+ if (!isAcroFormExists) {
92
+ // Create a form (with the widget) and link in the _root
93
+ form = pdf.ref({
94
+ Type: "AcroForm",
95
+ SigFlags: SIG_FLAGS.SIGNATURES_EXIST | SIG_FLAGS.APPEND_ONLY,
96
+ Fields: [...fieldIds, widget],
97
+ });
98
+ }
99
+ else {
100
+ // Use existing acroform and extend the fields with newly created widgets
101
+ form = pdf.ref({
102
+ Type: "AcroForm",
103
+ SigFlags: SIG_FLAGS.SIGNATURES_EXIST | SIG_FLAGS.APPEND_ONLY,
104
+ Fields: [...fieldIds, widget],
105
+ }, acroFormId);
106
+ }
107
+ pdf._root.data.AcroForm = form;
108
+ return {
109
+ signature,
110
+ form,
111
+ widget,
112
+ };
113
+ /* eslint-enable no-underscore-dangle,no-param-reassign */
114
+ };
115
+ //# sourceMappingURL=pdfkitAddPlaceholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfkitAddPlaceholder.js","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/pdfkitAddPlaceholder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface PlainAddPlaceholderInput {
2
+ pdfBuffer: Buffer;
3
+ reason: string;
4
+ contactInfo: string;
5
+ name: string;
6
+ location: string;
7
+ signingTime?: Date;
8
+ signatureLength?: number;
9
+ /** One of SUBFILTER_* from @signpdf/utils */
10
+ subFilter?: string;
11
+ /**
12
+ * [x1, y1, x2, y2] widget rectangle.
13
+ *
14
+ * ATTRIBUTION INTEROP: the UUAID provenance verifier's PDF attribution-scope
15
+ * whitelist (IAASO-0004) requires the invisible `[0 0 0 0]` /Rect and denies
16
+ * any other value. `signPdf` never passes this, so today every document we
17
+ * emit is in scope — but a visible-signature feature would drop attribution
18
+ * on day one. Coordinate with the UUAID lane before wiring it up.
19
+ */
20
+ widgetRect?: number[];
21
+ /**
22
+ * Name of the application generating the signature (emitted as
23
+ * `/Prop_Build /App <</Name ...>>`).
24
+ *
25
+ * ATTRIBUTION INTEROP: `App` is not in that verifier's allowed nested
26
+ * Prop_Build key set, so setting this denies attribution. Same rule as
27
+ * `widgetRect` — `signPdf` never passes it; coordinate before it does.
28
+ */
29
+ appName?: string;
30
+ }
31
+ /**
32
+ * Adds a signature placeholder to a PDF Buffer.
33
+ *
34
+ * This contrasts with the default pdfkit-based implementation.
35
+ * Parsing is done using simple string operations.
36
+ * Adding is done with `Buffer.concat`.
37
+ * This allows node-signpdf to be used on any PDF and
38
+ * not only on a freshly created through PDFKit one.
39
+ */
40
+ export declare const plainAddPlaceholder: ({ pdfBuffer, reason, contactInfo, name, location, signingTime, signatureLength, subFilter, widgetRect, appName, }: PlainAddPlaceholderInput) => Buffer;
41
+ //# sourceMappingURL=plainAddPlaceholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plainAddPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/vendor/placeholder-plain/plainAddPlaceholder.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAAI,mHAWjC,wBAAwB,KAAG,MA8D7B,CAAC"}