ooxml-core 0.2.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 (586) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +3 -0
  3. package/README.md +125 -0
  4. package/THIRD-PARTY-LICENSES +26 -0
  5. package/dist/collab/assets.d.ts +42 -0
  6. package/dist/collab/assets.d.ts.map +1 -0
  7. package/dist/collab/awareness.d.ts +65 -0
  8. package/dist/collab/awareness.d.ts.map +1 -0
  9. package/dist/collab/binding.d.ts +36 -0
  10. package/dist/collab/binding.d.ts.map +1 -0
  11. package/dist/collab/codec.d.ts +37 -0
  12. package/dist/collab/codec.d.ts.map +1 -0
  13. package/dist/collab/emitter.d.ts +11 -0
  14. package/dist/collab/emitter.d.ts.map +1 -0
  15. package/dist/collab/external-provider.d.ts +50 -0
  16. package/dist/collab/external-provider.d.ts.map +1 -0
  17. package/dist/collab/identity.d.ts +48 -0
  18. package/dist/collab/identity.d.ts.map +1 -0
  19. package/dist/collab/index.cjs +1328 -0
  20. package/dist/collab/index.d.ts +18 -0
  21. package/dist/collab/index.d.ts.map +1 -0
  22. package/dist/collab/index.mjs +1225 -0
  23. package/dist/collab/lifecycle.d.ts +62 -0
  24. package/dist/collab/lifecycle.d.ts.map +1 -0
  25. package/dist/collab/memory-transport.d.ts +19 -0
  26. package/dist/collab/memory-transport.d.ts.map +1 -0
  27. package/dist/collab/ordering.d.ts +53 -0
  28. package/dist/collab/ordering.d.ts.map +1 -0
  29. package/dist/collab/policy.d.ts +39 -0
  30. package/dist/collab/policy.d.ts.map +1 -0
  31. package/dist/collab/presence.d.ts +61 -0
  32. package/dist/collab/presence.d.ts.map +1 -0
  33. package/dist/collab/provider.d.ts +55 -0
  34. package/dist/collab/provider.d.ts.map +1 -0
  35. package/dist/collab/session.d.ts +70 -0
  36. package/dist/collab/session.d.ts.map +1 -0
  37. package/dist/collab/transport-provider.d.ts +13 -0
  38. package/dist/collab/transport-provider.d.ts.map +1 -0
  39. package/dist/collab/validation.d.ts +38 -0
  40. package/dist/collab/validation.d.ts.map +1 -0
  41. package/dist/collab/websocket-transport.d.ts +33 -0
  42. package/dist/collab/websocket-transport.d.ts.map +1 -0
  43. package/dist/color/color-linear.d.ts +5 -0
  44. package/dist/color/color-linear.d.ts.map +1 -0
  45. package/dist/color/color-primitives.d.ts +183 -0
  46. package/dist/color/color-primitives.d.ts.map +1 -0
  47. package/dist/color/index.cjs +177 -0
  48. package/dist/color/index.d.ts +3 -0
  49. package/dist/color/index.d.ts.map +1 -0
  50. package/dist/color/index.mjs +161 -0
  51. package/dist/diagram/attributes.d.ts +12 -0
  52. package/dist/diagram/attributes.d.ts.map +1 -0
  53. package/dist/diagram/data-model.d.ts +18 -0
  54. package/dist/diagram/data-model.d.ts.map +1 -0
  55. package/dist/diagram/definitions.d.ts +14 -0
  56. package/dist/diagram/definitions.d.ts.map +1 -0
  57. package/dist/diagram/dom.d.ts +15 -0
  58. package/dist/diagram/dom.d.ts.map +1 -0
  59. package/dist/diagram/drawing-color.d.ts +28 -0
  60. package/dist/diagram/drawing-color.d.ts.map +1 -0
  61. package/dist/diagram/drawing-fill.d.ts +9 -0
  62. package/dist/diagram/drawing-fill.d.ts.map +1 -0
  63. package/dist/diagram/drawing-geometry.d.ts +23 -0
  64. package/dist/diagram/drawing-geometry.d.ts.map +1 -0
  65. package/dist/diagram/drawing-text.d.ts +5 -0
  66. package/dist/diagram/drawing-text.d.ts.map +1 -0
  67. package/dist/diagram/drawing.d.ts +7 -0
  68. package/dist/diagram/drawing.d.ts.map +1 -0
  69. package/dist/diagram/index.cjs +1193 -0
  70. package/dist/diagram/index.d.ts +14 -0
  71. package/dist/diagram/index.d.ts.map +1 -0
  72. package/dist/diagram/index.mjs +1161 -0
  73. package/dist/diagram/layout-category.d.ts +8 -0
  74. package/dist/diagram/layout-category.d.ts.map +1 -0
  75. package/dist/diagram/load.d.ts +36 -0
  76. package/dist/diagram/load.d.ts.map +1 -0
  77. package/dist/diagram/relationships.d.ts +35 -0
  78. package/dist/diagram/relationships.d.ts.map +1 -0
  79. package/dist/diagram/types.d.ts +306 -0
  80. package/dist/diagram/types.d.ts.map +1 -0
  81. package/dist/docx/block-parser.d.ts +13 -0
  82. package/dist/docx/block-parser.d.ts.map +1 -0
  83. package/dist/docx/bookmarks.d.ts +18 -0
  84. package/dist/docx/bookmarks.d.ts.map +1 -0
  85. package/dist/docx/breaks.d.ts +11 -0
  86. package/dist/docx/breaks.d.ts.map +1 -0
  87. package/dist/docx/character-styles.d.ts +4 -0
  88. package/dist/docx/character-styles.d.ts.map +1 -0
  89. package/dist/docx/comment-spans.d.ts +19 -0
  90. package/dist/docx/comment-spans.d.ts.map +1 -0
  91. package/dist/docx/comments.d.ts +4 -0
  92. package/dist/docx/comments.d.ts.map +1 -0
  93. package/dist/docx/core-properties.d.ts +18 -0
  94. package/dist/docx/core-properties.d.ts.map +1 -0
  95. package/dist/docx/default-styles.d.ts +8 -0
  96. package/dist/docx/default-styles.d.ts.map +1 -0
  97. package/dist/docx/defined-props.d.ts +9 -0
  98. package/dist/docx/defined-props.d.ts.map +1 -0
  99. package/dist/docx/diagram-document.d.ts +9 -0
  100. package/dist/docx/diagram-document.d.ts.map +1 -0
  101. package/dist/docx/diagram-theme.d.ts +8 -0
  102. package/dist/docx/diagram-theme.d.ts.map +1 -0
  103. package/dist/docx/diagram.d.ts +89 -0
  104. package/dist/docx/diagram.d.ts.map +1 -0
  105. package/dist/docx/docpr-ids.d.ts +14 -0
  106. package/dist/docx/docpr-ids.d.ts.map +1 -0
  107. package/dist/docx/document-parts.d.ts +18 -0
  108. package/dist/docx/document-parts.d.ts.map +1 -0
  109. package/dist/docx/drawing.d.ts +13 -0
  110. package/dist/docx/drawing.d.ts.map +1 -0
  111. package/dist/docx/element-order.d.ts +13 -0
  112. package/dist/docx/element-order.d.ts.map +1 -0
  113. package/dist/docx/embedded.cjs +7646 -0
  114. package/dist/docx/embedded.d.ts +5 -0
  115. package/dist/docx/embedded.d.ts.map +1 -0
  116. package/dist/docx/embedded.mjs +7639 -0
  117. package/dist/docx/expect-defined.d.ts +3 -0
  118. package/dist/docx/expect-defined.d.ts.map +1 -0
  119. package/dist/docx/field-date.d.ts +10 -0
  120. package/dist/docx/field-date.d.ts.map +1 -0
  121. package/dist/docx/field-runs.d.ts +10 -0
  122. package/dist/docx/field-runs.d.ts.map +1 -0
  123. package/dist/docx/generated/wml-simple-types.d.ts +298 -0
  124. package/dist/docx/generated/wml-simple-types.d.ts.map +1 -0
  125. package/dist/docx/heading-list-kinds.d.ts +10 -0
  126. package/dist/docx/heading-list-kinds.d.ts.map +1 -0
  127. package/dist/docx/highlight.d.ts +5 -0
  128. package/dist/docx/highlight.d.ts.map +1 -0
  129. package/dist/docx/hyperlink.d.ts +8 -0
  130. package/dist/docx/hyperlink.d.ts.map +1 -0
  131. package/dist/docx/index.cjs +9784 -0
  132. package/dist/docx/index.d.ts +40 -0
  133. package/dist/docx/index.d.ts.map +1 -0
  134. package/dist/docx/index.mjs +9456 -0
  135. package/dist/docx/inline-model.d.ts +68 -0
  136. package/dist/docx/inline-model.d.ts.map +1 -0
  137. package/dist/docx/language.d.ts +3 -0
  138. package/dist/docx/language.d.ts.map +1 -0
  139. package/dist/docx/layout/adapt-drop-cap.d.ts +10 -0
  140. package/dist/docx/layout/adapt-drop-cap.d.ts.map +1 -0
  141. package/dist/docx/layout/adapt-floats.d.ts +8 -0
  142. package/dist/docx/layout/adapt-floats.d.ts.map +1 -0
  143. package/dist/docx/layout/adapt-notes.d.ts +13 -0
  144. package/dist/docx/layout/adapt-notes.d.ts.map +1 -0
  145. package/dist/docx/layout/adapt-paragraph-box.d.ts +12 -0
  146. package/dist/docx/layout/adapt-paragraph-box.d.ts.map +1 -0
  147. package/dist/docx/layout/adapt-table.d.ts +12 -0
  148. package/dist/docx/layout/adapt-table.d.ts.map +1 -0
  149. package/dist/docx/layout/adapter.d.ts +5 -0
  150. package/dist/docx/layout/adapter.d.ts.map +1 -0
  151. package/dist/docx/layout/floats.d.ts +20 -0
  152. package/dist/docx/layout/floats.d.ts.map +1 -0
  153. package/dist/docx/layout/flow-paragraph.d.ts +26 -0
  154. package/dist/docx/layout/flow-paragraph.d.ts.map +1 -0
  155. package/dist/docx/layout/flow-table.d.ts +12 -0
  156. package/dist/docx/layout/flow-table.d.ts.map +1 -0
  157. package/dist/docx/layout/fonts.d.ts +3 -0
  158. package/dist/docx/layout/fonts.d.ts.map +1 -0
  159. package/dist/docx/layout/index.cjs +2537 -0
  160. package/dist/docx/layout/index.d.ts +20 -0
  161. package/dist/docx/layout/index.d.ts.map +1 -0
  162. package/dist/docx/layout/index.mjs +2503 -0
  163. package/dist/docx/layout/input.d.ts +206 -0
  164. package/dist/docx/layout/input.d.ts.map +1 -0
  165. package/dist/docx/layout/keep-rules.d.ts +24 -0
  166. package/dist/docx/layout/keep-rules.d.ts.map +1 -0
  167. package/dist/docx/layout/layout.d.ts +9 -0
  168. package/dist/docx/layout/layout.d.ts.map +1 -0
  169. package/dist/docx/layout/ligatures.d.ts +4 -0
  170. package/dist/docx/layout/ligatures.d.ts.map +1 -0
  171. package/dist/docx/layout/line-metrics.d.ts +21 -0
  172. package/dist/docx/layout/line-metrics.d.ts.map +1 -0
  173. package/dist/docx/layout/measure.d.ts +34 -0
  174. package/dist/docx/layout/measure.d.ts.map +1 -0
  175. package/dist/docx/layout/page-cursor.d.ts +45 -0
  176. package/dist/docx/layout/page-cursor.d.ts.map +1 -0
  177. package/dist/docx/layout/page-flow.d.ts +7 -0
  178. package/dist/docx/layout/page-flow.d.ts.map +1 -0
  179. package/dist/docx/layout/paragraph-fragments.d.ts +6 -0
  180. package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -0
  181. package/dist/docx/layout/paragraph-layout.d.ts +37 -0
  182. package/dist/docx/layout/paragraph-layout.d.ts.map +1 -0
  183. package/dist/docx/layout/paragraph-tokens.d.ts +27 -0
  184. package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -0
  185. package/dist/docx/layout/result.d.ts +139 -0
  186. package/dist/docx/layout/result.d.ts.map +1 -0
  187. package/dist/docx/layout/tab-stops.d.ts +14 -0
  188. package/dist/docx/layout/tab-stops.d.ts.map +1 -0
  189. package/dist/docx/layout/table-layout.d.ts +30 -0
  190. package/dist/docx/layout/table-layout.d.ts.map +1 -0
  191. package/dist/docx/layout/test-helpers.d.ts +3 -0
  192. package/dist/docx/layout/test-helpers.d.ts.map +1 -0
  193. package/dist/docx/layout/text-breaks.d.ts +56 -0
  194. package/dist/docx/layout/text-breaks.d.ts.map +1 -0
  195. package/dist/docx/layout/units.d.ts +17 -0
  196. package/dist/docx/layout/units.d.ts.map +1 -0
  197. package/dist/docx/layout/wrap.d.ts +22 -0
  198. package/dist/docx/layout/wrap.d.ts.map +1 -0
  199. package/dist/docx/ligatures.d.ts +9 -0
  200. package/dist/docx/ligatures.d.ts.map +1 -0
  201. package/dist/docx/load/detect.d.ts +6 -0
  202. package/dist/docx/load/detect.d.ts.map +1 -0
  203. package/dist/docx/load/index.cjs +8869 -0
  204. package/dist/docx/load/index.d.ts +3 -0
  205. package/dist/docx/load/index.d.ts.map +1 -0
  206. package/dist/docx/load/index.mjs +8860 -0
  207. package/dist/docx/load/legacy-doc.d.ts +7 -0
  208. package/dist/docx/load/legacy-doc.d.ts.map +1 -0
  209. package/dist/docx/model-paragraph.d.ts +100 -0
  210. package/dist/docx/model-paragraph.d.ts.map +1 -0
  211. package/dist/docx/model-run.d.ts +110 -0
  212. package/dist/docx/model-run.d.ts.map +1 -0
  213. package/dist/docx/model.d.ts +114 -0
  214. package/dist/docx/model.d.ts.map +1 -0
  215. package/dist/docx/notes.d.ts +9 -0
  216. package/dist/docx/notes.d.ts.map +1 -0
  217. package/dist/docx/numbering-editing.d.ts +30 -0
  218. package/dist/docx/numbering-editing.d.ts.map +1 -0
  219. package/dist/docx/numbering-format.d.ts +17 -0
  220. package/dist/docx/numbering-format.d.ts.map +1 -0
  221. package/dist/docx/numbering-model.d.ts +73 -0
  222. package/dist/docx/numbering-model.d.ts.map +1 -0
  223. package/dist/docx/numbering-package.d.ts +12 -0
  224. package/dist/docx/numbering-package.d.ts.map +1 -0
  225. package/dist/docx/numbering-parse.d.ts +8 -0
  226. package/dist/docx/numbering-parse.d.ts.map +1 -0
  227. package/dist/docx/numbering-parts.d.ts +4 -0
  228. package/dist/docx/numbering-parts.d.ts.map +1 -0
  229. package/dist/docx/numbering-text.d.ts +20 -0
  230. package/dist/docx/numbering-text.d.ts.map +1 -0
  231. package/dist/docx/numbering-write.d.ts +5 -0
  232. package/dist/docx/numbering-write.d.ts.map +1 -0
  233. package/dist/docx/package-parts.d.ts +4 -0
  234. package/dist/docx/package-parts.d.ts.map +1 -0
  235. package/dist/docx/page-background.d.ts +9 -0
  236. package/dist/docx/page-background.d.ts.map +1 -0
  237. package/dist/docx/page-borders.d.ts +9 -0
  238. package/dist/docx/page-borders.d.ts.map +1 -0
  239. package/dist/docx/paragraph-alignment.d.ts +21 -0
  240. package/dist/docx/paragraph-alignment.d.ts.map +1 -0
  241. package/dist/docx/paragraph-styles.d.ts +15 -0
  242. package/dist/docx/paragraph-styles.d.ts.map +1 -0
  243. package/dist/docx/parse-diagnostics.d.ts +10 -0
  244. package/dist/docx/parse-diagnostics.d.ts.map +1 -0
  245. package/dist/docx/parse-revisions.d.ts +36 -0
  246. package/dist/docx/parse-revisions.d.ts.map +1 -0
  247. package/dist/docx/parse-table.d.ts +5 -0
  248. package/dist/docx/parse-table.d.ts.map +1 -0
  249. package/dist/docx/parse-warnings.d.ts +9 -0
  250. package/dist/docx/parse-warnings.d.ts.map +1 -0
  251. package/dist/docx/parse.d.ts +13 -0
  252. package/dist/docx/parse.d.ts.map +1 -0
  253. package/dist/docx/part-relationships.d.ts +12 -0
  254. package/dist/docx/part-relationships.d.ts.map +1 -0
  255. package/dist/docx/relationship-allocator.d.ts +32 -0
  256. package/dist/docx/relationship-allocator.d.ts.map +1 -0
  257. package/dist/docx/relationships.d.ts +3 -0
  258. package/dist/docx/relationships.d.ts.map +1 -0
  259. package/dist/docx/resolve-table.d.ts +8 -0
  260. package/dist/docx/resolve-table.d.ts.map +1 -0
  261. package/dist/docx/revision-commands.d.ts +27 -0
  262. package/dist/docx/revision-commands.d.ts.map +1 -0
  263. package/dist/docx/revision-ids.d.ts +10 -0
  264. package/dist/docx/revision-ids.d.ts.map +1 -0
  265. package/dist/docx/run-formatting.d.ts +16 -0
  266. package/dist/docx/run-formatting.d.ts.map +1 -0
  267. package/dist/docx/run-properties.d.ts +5 -0
  268. package/dist/docx/run-properties.d.ts.map +1 -0
  269. package/dist/docx/run-style-model.d.ts +21 -0
  270. package/dist/docx/run-style-model.d.ts.map +1 -0
  271. package/dist/docx/save.d.ts +5 -0
  272. package/dist/docx/save.d.ts.map +1 -0
  273. package/dist/docx/section-model.d.ts +97 -0
  274. package/dist/docx/section-model.d.ts.map +1 -0
  275. package/dist/docx/sections.d.ts +18 -0
  276. package/dist/docx/sections.d.ts.map +1 -0
  277. package/dist/docx/settings.d.ts +11 -0
  278. package/dist/docx/settings.d.ts.map +1 -0
  279. package/dist/docx/simple-types.d.ts +37 -0
  280. package/dist/docx/simple-types.d.ts.map +1 -0
  281. package/dist/docx/style-numbering-package.d.ts +11 -0
  282. package/dist/docx/style-numbering-package.d.ts.map +1 -0
  283. package/dist/docx/tab-stops.d.ts +8 -0
  284. package/dist/docx/tab-stops.d.ts.map +1 -0
  285. package/dist/docx/table-borders.d.ts +15 -0
  286. package/dist/docx/table-borders.d.ts.map +1 -0
  287. package/dist/docx/table-cell-write.d.ts +12 -0
  288. package/dist/docx/table-cell-write.d.ts.map +1 -0
  289. package/dist/docx/table-defaults.d.ts +20 -0
  290. package/dist/docx/table-defaults.d.ts.map +1 -0
  291. package/dist/docx/table-model.d.ts +101 -0
  292. package/dist/docx/table-model.d.ts.map +1 -0
  293. package/dist/docx/table-of-contents.d.ts +67 -0
  294. package/dist/docx/table-of-contents.d.ts.map +1 -0
  295. package/dist/docx/table-of-figures.d.ts +10 -0
  296. package/dist/docx/table-of-figures.d.ts.map +1 -0
  297. package/dist/docx/table-styles.d.ts +4 -0
  298. package/dist/docx/table-styles.d.ts.map +1 -0
  299. package/dist/docx/table-visuals.d.ts +22 -0
  300. package/dist/docx/table-visuals.d.ts.map +1 -0
  301. package/dist/docx/test-support/access.d.ts +14 -0
  302. package/dist/docx/test-support/access.d.ts.map +1 -0
  303. package/dist/docx/test-support/heading-numbering-fixture.d.ts +5 -0
  304. package/dist/docx/test-support/heading-numbering-fixture.d.ts.map +1 -0
  305. package/dist/docx/test-support/restart-fixture.d.ts +17 -0
  306. package/dist/docx/test-support/restart-fixture.d.ts.map +1 -0
  307. package/dist/docx/test-support/schema-validation.d.ts +24 -0
  308. package/dist/docx/test-support/schema-validation.d.ts.map +1 -0
  309. package/dist/docx/theme-color.d.ts +16 -0
  310. package/dist/docx/theme-color.d.ts.map +1 -0
  311. package/dist/docx/theme-model.d.ts +31 -0
  312. package/dist/docx/theme-model.d.ts.map +1 -0
  313. package/dist/docx/theme.d.ts +6 -0
  314. package/dist/docx/theme.d.ts.map +1 -0
  315. package/dist/docx/underline.d.ts +5 -0
  316. package/dist/docx/underline.d.ts.map +1 -0
  317. package/dist/docx/units.d.ts +2 -0
  318. package/dist/docx/units.d.ts.map +1 -0
  319. package/dist/docx/validate-issues.d.ts +40 -0
  320. package/dist/docx/validate-issues.d.ts.map +1 -0
  321. package/dist/docx/validate-model.d.ts +8 -0
  322. package/dist/docx/validate-model.d.ts.map +1 -0
  323. package/dist/docx/validate-paragraph.d.ts +10 -0
  324. package/dist/docx/validate-paragraph.d.ts.map +1 -0
  325. package/dist/docx/validate-structure.d.ts +10 -0
  326. package/dist/docx/validate-structure.d.ts.map +1 -0
  327. package/dist/docx/watermark.d.ts +14 -0
  328. package/dist/docx/watermark.d.ts.map +1 -0
  329. package/dist/docx/write-comments.d.ts +12 -0
  330. package/dist/docx/write-comments.d.ts.map +1 -0
  331. package/dist/docx/write-drawing.d.ts +12 -0
  332. package/dist/docx/write-drawing.d.ts.map +1 -0
  333. package/dist/docx/write-header-footer.d.ts +21 -0
  334. package/dist/docx/write-header-footer.d.ts.map +1 -0
  335. package/dist/docx/write-inline.d.ts +23 -0
  336. package/dist/docx/write-inline.d.ts.map +1 -0
  337. package/dist/docx/write-notes.d.ts +5 -0
  338. package/dist/docx/write-notes.d.ts.map +1 -0
  339. package/dist/docx/write-paragraph-decoration.d.ts +5 -0
  340. package/dist/docx/write-paragraph-decoration.d.ts.map +1 -0
  341. package/dist/docx/write-paragraph-properties.d.ts +4 -0
  342. package/dist/docx/write-paragraph-properties.d.ts.map +1 -0
  343. package/dist/docx/write-paragraph.d.ts +8 -0
  344. package/dist/docx/write-paragraph.d.ts.map +1 -0
  345. package/dist/docx/write-ranges.d.ts +42 -0
  346. package/dist/docx/write-ranges.d.ts.map +1 -0
  347. package/dist/docx/write-revisions.d.ts +10 -0
  348. package/dist/docx/write-revisions.d.ts.map +1 -0
  349. package/dist/docx/write-run-extra.d.ts +5 -0
  350. package/dist/docx/write-run-extra.d.ts.map +1 -0
  351. package/dist/docx/write-run-validation.d.ts +4 -0
  352. package/dist/docx/write-run-validation.d.ts.map +1 -0
  353. package/dist/docx/write-run.d.ts +7 -0
  354. package/dist/docx/write-run.d.ts.map +1 -0
  355. package/dist/docx/write-sections.d.ts +10 -0
  356. package/dist/docx/write-sections.d.ts.map +1 -0
  357. package/dist/docx/write-table-properties.d.ts +13 -0
  358. package/dist/docx/write-table-properties.d.ts.map +1 -0
  359. package/dist/docx/write-table.d.ts +9 -0
  360. package/dist/docx/write-table.d.ts.map +1 -0
  361. package/dist/docx/write-text-box.d.ts +15 -0
  362. package/dist/docx/write-text-box.d.ts.map +1 -0
  363. package/dist/docx/write.d.ts +25 -0
  364. package/dist/docx/write.d.ts.map +1 -0
  365. package/dist/docx/xml.d.ts +14 -0
  366. package/dist/docx/xml.d.ts.map +1 -0
  367. package/dist/docx/zip-parts.d.ts +5 -0
  368. package/dist/docx/zip-parts.d.ts.map +1 -0
  369. package/dist/geometry/adjustment-aware-shapes.d.ts +63 -0
  370. package/dist/geometry/adjustment-aware-shapes.d.ts.map +1 -0
  371. package/dist/geometry/callout-geometry.d.ts +65 -0
  372. package/dist/geometry/callout-geometry.d.ts.map +1 -0
  373. package/dist/geometry/cloud-bezier-paths.d.ts +55 -0
  374. package/dist/geometry/cloud-bezier-paths.d.ts.map +1 -0
  375. package/dist/geometry/com-avlst-ground-truth.d.ts +48 -0
  376. package/dist/geometry/com-avlst-ground-truth.d.ts.map +1 -0
  377. package/dist/geometry/connector-elbow-geometry.d.ts +41 -0
  378. package/dist/geometry/connector-elbow-geometry.d.ts.map +1 -0
  379. package/dist/geometry/guide-formula-api.d.ts +55 -0
  380. package/dist/geometry/guide-formula-api.d.ts.map +1 -0
  381. package/dist/geometry/guide-formula-eval.d.ts +85 -0
  382. package/dist/geometry/guide-formula-eval.d.ts.map +1 -0
  383. package/dist/geometry/index.cjs +15031 -0
  384. package/dist/geometry/index.d.ts +80 -0
  385. package/dist/geometry/index.d.ts.map +1 -0
  386. package/dist/geometry/index.mjs +14897 -0
  387. package/dist/geometry/indexed.d.ts +6 -0
  388. package/dist/geometry/indexed.d.ts.map +1 -0
  389. package/dist/geometry/preset-clip-paths-core.d.ts +20 -0
  390. package/dist/geometry/preset-clip-paths-core.d.ts.map +1 -0
  391. package/dist/geometry/preset-clip-paths-extended.d.ts +19 -0
  392. package/dist/geometry/preset-clip-paths-extended.d.ts.map +1 -0
  393. package/dist/geometry/preset-connection-sites-action-buttons.d.ts +14 -0
  394. package/dist/geometry/preset-connection-sites-action-buttons.d.ts.map +1 -0
  395. package/dist/geometry/preset-connection-sites-arrows-curved.d.ts +12 -0
  396. package/dist/geometry/preset-connection-sites-arrows-curved.d.ts.map +1 -0
  397. package/dist/geometry/preset-connection-sites-arrows-misc.d.ts +13 -0
  398. package/dist/geometry/preset-connection-sites-arrows-misc.d.ts.map +1 -0
  399. package/dist/geometry/preset-connection-sites-arrows.d.ts +13 -0
  400. package/dist/geometry/preset-connection-sites-arrows.d.ts.map +1 -0
  401. package/dist/geometry/preset-connection-sites-basic-a.d.ts +12 -0
  402. package/dist/geometry/preset-connection-sites-basic-a.d.ts.map +1 -0
  403. package/dist/geometry/preset-connection-sites-basic-b.d.ts +12 -0
  404. package/dist/geometry/preset-connection-sites-basic-b.d.ts.map +1 -0
  405. package/dist/geometry/preset-connection-sites-braces.d.ts +12 -0
  406. package/dist/geometry/preset-connection-sites-braces.d.ts.map +1 -0
  407. package/dist/geometry/preset-connection-sites-callouts-arrow.d.ts +14 -0
  408. package/dist/geometry/preset-connection-sites-callouts-arrow.d.ts.map +1 -0
  409. package/dist/geometry/preset-connection-sites-callouts-basic.d.ts +12 -0
  410. package/dist/geometry/preset-connection-sites-callouts-basic.d.ts.map +1 -0
  411. package/dist/geometry/preset-connection-sites-circular-arrow.d.ts +14 -0
  412. package/dist/geometry/preset-connection-sites-circular-arrow.d.ts.map +1 -0
  413. package/dist/geometry/preset-connection-sites-flowchart.d.ts +19 -0
  414. package/dist/geometry/preset-connection-sites-flowchart.d.ts.map +1 -0
  415. package/dist/geometry/preset-connection-sites-gear9.d.ts +12 -0
  416. package/dist/geometry/preset-connection-sites-gear9.d.ts.map +1 -0
  417. package/dist/geometry/preset-connection-sites-left-circular-arrow.d.ts +12 -0
  418. package/dist/geometry/preset-connection-sites-left-circular-arrow.d.ts.map +1 -0
  419. package/dist/geometry/preset-connection-sites-left-right-circular-arrow.d.ts +13 -0
  420. package/dist/geometry/preset-connection-sites-left-right-circular-arrow.d.ts.map +1 -0
  421. package/dist/geometry/preset-connection-sites-math.d.ts +12 -0
  422. package/dist/geometry/preset-connection-sites-math.d.ts.map +1 -0
  423. package/dist/geometry/preset-connection-sites-misc.d.ts +14 -0
  424. package/dist/geometry/preset-connection-sites-misc.d.ts.map +1 -0
  425. package/dist/geometry/preset-connection-sites-polygons.d.ts +12 -0
  426. package/dist/geometry/preset-connection-sites-polygons.d.ts.map +1 -0
  427. package/dist/geometry/preset-connection-sites-quads.d.ts +14 -0
  428. package/dist/geometry/preset-connection-sites-quads.d.ts.map +1 -0
  429. package/dist/geometry/preset-connection-sites-rects.d.ts +14 -0
  430. package/dist/geometry/preset-connection-sites-rects.d.ts.map +1 -0
  431. package/dist/geometry/preset-connection-sites-ribbons.d.ts +12 -0
  432. package/dist/geometry/preset-connection-sites-ribbons.d.ts.map +1 -0
  433. package/dist/geometry/preset-connection-sites-stars.d.ts +13 -0
  434. package/dist/geometry/preset-connection-sites-stars.d.ts.map +1 -0
  435. package/dist/geometry/preset-connection-sites-table.d.ts +23 -0
  436. package/dist/geometry/preset-connection-sites-table.d.ts.map +1 -0
  437. package/dist/geometry/preset-connection-sites-tabs.d.ts +11 -0
  438. package/dist/geometry/preset-connection-sites-tabs.d.ts.map +1 -0
  439. package/dist/geometry/preset-connection-sites-types.d.ts +52 -0
  440. package/dist/geometry/preset-connection-sites-types.d.ts.map +1 -0
  441. package/dist/geometry/preset-geometry-names.d.ts +53 -0
  442. package/dist/geometry/preset-geometry-names.d.ts.map +1 -0
  443. package/dist/geometry/preset-shape-clip-paths.d.ts +13 -0
  444. package/dist/geometry/preset-shape-clip-paths.d.ts.map +1 -0
  445. package/dist/geometry/preset-shape-definitions-action-buttons.d.ts +45 -0
  446. package/dist/geometry/preset-shape-definitions-action-buttons.d.ts.map +1 -0
  447. package/dist/geometry/preset-shape-definitions-arrow-callouts.d.ts +55 -0
  448. package/dist/geometry/preset-shape-definitions-arrow-callouts.d.ts.map +1 -0
  449. package/dist/geometry/preset-shape-definitions-arrows-refined.d.ts +45 -0
  450. package/dist/geometry/preset-shape-definitions-arrows-refined.d.ts.map +1 -0
  451. package/dist/geometry/preset-shape-definitions-arrows.d.ts +52 -0
  452. package/dist/geometry/preset-shape-definitions-arrows.d.ts.map +1 -0
  453. package/dist/geometry/preset-shape-definitions-chart-marks.d.ts +23 -0
  454. package/dist/geometry/preset-shape-definitions-chart-marks.d.ts.map +1 -0
  455. package/dist/geometry/preset-shape-definitions-cloud-callout.d.ts +28 -0
  456. package/dist/geometry/preset-shape-definitions-cloud-callout.d.ts.map +1 -0
  457. package/dist/geometry/preset-shape-definitions-connectors-brackets.d.ts +37 -0
  458. package/dist/geometry/preset-shape-definitions-connectors-brackets.d.ts.map +1 -0
  459. package/dist/geometry/preset-shape-definitions-curved-arrows-connectors.d.ts +43 -0
  460. package/dist/geometry/preset-shape-definitions-curved-arrows-connectors.d.ts.map +1 -0
  461. package/dist/geometry/preset-shape-definitions-curved-arrows-exact.d.ts +30 -0
  462. package/dist/geometry/preset-shape-definitions-curved-arrows-exact.d.ts.map +1 -0
  463. package/dist/geometry/preset-shape-definitions-flowchart.d.ts +29 -0
  464. package/dist/geometry/preset-shape-definitions-flowchart.d.ts.map +1 -0
  465. package/dist/geometry/preset-shape-definitions-gear6.d.ts +38 -0
  466. package/dist/geometry/preset-shape-definitions-gear6.d.ts.map +1 -0
  467. package/dist/geometry/preset-shape-definitions-gear9.d.ts +24 -0
  468. package/dist/geometry/preset-shape-definitions-gear9.d.ts.map +1 -0
  469. package/dist/geometry/preset-shape-definitions-misc.d.ts +38 -0
  470. package/dist/geometry/preset-shape-definitions-misc.d.ts.map +1 -0
  471. package/dist/geometry/preset-shape-definitions-rects-snips.d.ts +28 -0
  472. package/dist/geometry/preset-shape-definitions-rects-snips.d.ts.map +1 -0
  473. package/dist/geometry/preset-shape-definitions-scrolls-accent-callouts.d.ts +45 -0
  474. package/dist/geometry/preset-shape-definitions-scrolls-accent-callouts.d.ts.map +1 -0
  475. package/dist/geometry/preset-shape-definitions-table.d.ts +121 -0
  476. package/dist/geometry/preset-shape-definitions-table.d.ts.map +1 -0
  477. package/dist/geometry/preset-shape-definitions-tabs-decorations.d.ts +48 -0
  478. package/dist/geometry/preset-shape-definitions-tabs-decorations.d.ts.map +1 -0
  479. package/dist/geometry/preset-shape-definitions.d.ts +28 -0
  480. package/dist/geometry/preset-shape-definitions.d.ts.map +1 -0
  481. package/dist/geometry/preset-shape-paths.d.ts +13 -0
  482. package/dist/geometry/preset-shape-paths.d.ts.map +1 -0
  483. package/dist/geometry/preset-shape-types.d.ts +33 -0
  484. package/dist/geometry/preset-shape-types.d.ts.map +1 -0
  485. package/dist/geometry/preset-text-rect-action-buttons.d.ts +13 -0
  486. package/dist/geometry/preset-text-rect-action-buttons.d.ts.map +1 -0
  487. package/dist/geometry/preset-text-rect-arrows.d.ts +3 -0
  488. package/dist/geometry/preset-text-rect-arrows.d.ts.map +1 -0
  489. package/dist/geometry/preset-text-rect-braces.d.ts +3 -0
  490. package/dist/geometry/preset-text-rect-braces.d.ts.map +1 -0
  491. package/dist/geometry/preset-text-rect-callouts.d.ts +3 -0
  492. package/dist/geometry/preset-text-rect-callouts.d.ts.map +1 -0
  493. package/dist/geometry/preset-text-rect-circular-arrows.d.ts +3 -0
  494. package/dist/geometry/preset-text-rect-circular-arrows.d.ts.map +1 -0
  495. package/dist/geometry/preset-text-rect-flowchart.d.ts +3 -0
  496. package/dist/geometry/preset-text-rect-flowchart.d.ts.map +1 -0
  497. package/dist/geometry/preset-text-rect-misc-a.d.ts +3 -0
  498. package/dist/geometry/preset-text-rect-misc-a.d.ts.map +1 -0
  499. package/dist/geometry/preset-text-rect-misc-b.d.ts +3 -0
  500. package/dist/geometry/preset-text-rect-misc-b.d.ts.map +1 -0
  501. package/dist/geometry/preset-text-rect-polygons.d.ts +3 -0
  502. package/dist/geometry/preset-text-rect-polygons.d.ts.map +1 -0
  503. package/dist/geometry/preset-text-rect-quads.d.ts +3 -0
  504. package/dist/geometry/preset-text-rect-quads.d.ts.map +1 -0
  505. package/dist/geometry/preset-text-rect-ribbons.d.ts +3 -0
  506. package/dist/geometry/preset-text-rect-ribbons.d.ts.map +1 -0
  507. package/dist/geometry/preset-text-rect-stars.d.ts +3 -0
  508. package/dist/geometry/preset-text-rect-stars.d.ts.map +1 -0
  509. package/dist/geometry/preset-text-rect-table.d.ts +20 -0
  510. package/dist/geometry/preset-text-rect-table.d.ts.map +1 -0
  511. package/dist/geometry/preset-text-rect-tabs.d.ts +3 -0
  512. package/dist/geometry/preset-text-rect-tabs.d.ts.map +1 -0
  513. package/dist/geometry/preset-text-rect-types.d.ts +46 -0
  514. package/dist/geometry/preset-text-rect-types.d.ts.map +1 -0
  515. package/dist/geometry/shape-boolean-clipping.d.ts +70 -0
  516. package/dist/geometry/shape-boolean-clipping.d.ts.map +1 -0
  517. package/dist/geometry/shape-boolean-ops.d.ts +142 -0
  518. package/dist/geometry/shape-boolean-ops.d.ts.map +1 -0
  519. package/dist/geometry/shape-boolean-svg.d.ts +31 -0
  520. package/dist/geometry/shape-boolean-svg.d.ts.map +1 -0
  521. package/dist/geometry/shape-boolean-types.d.ts +91 -0
  522. package/dist/geometry/shape-boolean-types.d.ts.map +1 -0
  523. package/dist/geometry/shape-boolean-union.d.ts +79 -0
  524. package/dist/geometry/shape-boolean-union.d.ts.map +1 -0
  525. package/dist/geometry/shape-boolean.d.ts +22 -0
  526. package/dist/geometry/shape-boolean.d.ts.map +1 -0
  527. package/dist/geometry/shape-definitions-extended.d.ts +18 -0
  528. package/dist/geometry/shape-definitions-extended.d.ts.map +1 -0
  529. package/dist/geometry/shape-definitions-primary.d.ts +19 -0
  530. package/dist/geometry/shape-definitions-primary.d.ts.map +1 -0
  531. package/dist/index.cjs +16618 -0
  532. package/dist/index.d.ts +7 -0
  533. package/dist/index.d.ts.map +1 -0
  534. package/dist/index.mjs +16611 -0
  535. package/dist/opc/content-types.d.ts +14 -0
  536. package/dist/opc/content-types.d.ts.map +1 -0
  537. package/dist/opc/index.cjs +228 -0
  538. package/dist/opc/index.d.ts +6 -0
  539. package/dist/opc/index.d.ts.map +1 -0
  540. package/dist/opc/index.mjs +212 -0
  541. package/dist/opc/package.d.ts +14 -0
  542. package/dist/opc/package.d.ts.map +1 -0
  543. package/dist/opc/relationship-types.d.ts +34 -0
  544. package/dist/opc/relationship-types.d.ts.map +1 -0
  545. package/dist/opc/relationships.d.ts +29 -0
  546. package/dist/opc/relationships.d.ts.map +1 -0
  547. package/dist/opc/safe-href.d.ts +3 -0
  548. package/dist/opc/safe-href.d.ts.map +1 -0
  549. package/dist/pptx/chunks/index-CojJtI77.d.ts +9627 -0
  550. package/dist/pptx/chunks/index-CojJtI77.d.ts.map +1 -0
  551. package/dist/pptx/chunks/signature-inspection-status-Bh2oap7B.d.ts +220 -0
  552. package/dist/pptx/chunks/signature-inspection-status-Bh2oap7B.d.ts.map +1 -0
  553. package/dist/pptx/chunks/text-operations-IlJiffp7.d.ts +11122 -0
  554. package/dist/pptx/chunks/text-operations-IlJiffp7.d.ts.map +1 -0
  555. package/dist/pptx/cli/index.cjs +138457 -0
  556. package/dist/pptx/cli/index.d.ts +139 -0
  557. package/dist/pptx/cli/index.d.ts.map +1 -0
  558. package/dist/pptx/cli/index.mjs +138424 -0
  559. package/dist/pptx/converter/index.cjs +32084 -0
  560. package/dist/pptx/converter/index.d.ts +2 -0
  561. package/dist/pptx/converter/index.mjs +32060 -0
  562. package/dist/pptx/index.cjs +172307 -0
  563. package/dist/pptx/index.d.ts +9692 -0
  564. package/dist/pptx/index.d.ts.map +1 -0
  565. package/dist/pptx/index.mjs +171623 -0
  566. package/dist/pptx/signature-node/index.cjs +1299 -0
  567. package/dist/pptx/signature-node/index.d.ts +172 -0
  568. package/dist/pptx/signature-node/index.d.ts.map +1 -0
  569. package/dist/pptx/signature-node/index.mjs +1236 -0
  570. package/dist/units/constants.d.ts +13 -0
  571. package/dist/units/constants.d.ts.map +1 -0
  572. package/dist/units/index.cjs +76 -0
  573. package/dist/units/index.d.ts +3 -0
  574. package/dist/units/index.d.ts.map +1 -0
  575. package/dist/units/index.mjs +45 -0
  576. package/dist/units/units.d.ts +52 -0
  577. package/dist/units/units.d.ts.map +1 -0
  578. package/dist/xml/index.cjs +98 -0
  579. package/dist/xml/index.d.ts +3 -0
  580. package/dist/xml/index.d.ts.map +1 -0
  581. package/dist/xml/index.mjs +85 -0
  582. package/dist/xml/namespaces.d.ts +47 -0
  583. package/dist/xml/namespaces.d.ts.map +1 -0
  584. package/dist/xml/xml.d.ts +31 -0
  585. package/dist/xml/xml.d.ts.map +1 -0
  586. package/package.json +192 -0
@@ -0,0 +1,1299 @@
1
+ 'use strict';
2
+
3
+ var xmldom = require('@xmldom/xmldom');
4
+ var xmlCrypto = require('xml-crypto');
5
+ var crypto2 = require('crypto');
6
+ var path = require('path');
7
+ var tls = require('tls');
8
+ var forge3 = require('node-forge');
9
+ var http = require('http');
10
+ var https = require('https');
11
+ var fs = require('fs/promises');
12
+ var JSZip = require('jszip');
13
+
14
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
+
16
+ var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
17
+ var path__default = /*#__PURE__*/_interopDefault(path);
18
+ var tls__default = /*#__PURE__*/_interopDefault(tls);
19
+ var forge3__default = /*#__PURE__*/_interopDefault(forge3);
20
+ var http__default = /*#__PURE__*/_interopDefault(http);
21
+ var https__default = /*#__PURE__*/_interopDefault(https);
22
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
23
+ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
24
+
25
+ // src/pptx/core/utils/signature-constants.ts
26
+ var DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin";
27
+ var DIGITAL_SIGNATURE_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature";
28
+ var PPTX_VIEWER_MANIFEST_NS = "urn:pptx-viewer:ooxml-signature:v1";
29
+ var XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
30
+ var OPC_RELATIONSHIP_TRANSFORM = "http://schemas.openxmlformats.org/package/2006/RelationshipTransform";
31
+ var XML_TRANSFORM_ENVELOPED_SIGNATURE = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
32
+ var SUPPORTED_XML_CANON_TRANSFORMS = /* @__PURE__ */ new Set([
33
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
34
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
35
+ "http://www.w3.org/2001/10/xml-exc-c14n#",
36
+ "http://www.w3.org/2001/10/xml-exc-c14n#WithComments",
37
+ XML_TRANSFORM_ENVELOPED_SIGNATURE
38
+ ]);
39
+ var ENTERPRISE_TRUST_ROOTS_FILE_ENV = "PPTX_VIEWER_TRUST_ROOTS_FILE";
40
+ var ENTERPRISE_TRUST_ROOTS_PEM_ENV = "PPTX_VIEWER_TRUST_ROOTS_PEM";
41
+ var ENTERPRISE_REQUIRE_REVOCATION_ENV = "PPTX_VIEWER_REQUIRE_REVOCATION_CHECK";
42
+ var ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV = "PPTX_VIEWER_FAIL_ON_REVOCATION_UNKNOWN";
43
+ var ENTERPRISE_REQUIRE_TIMESTAMP_ENV = "PPTX_VIEWER_REQUIRE_TIMESTAMP";
44
+ var DIGEST_ALGORITHM_TO_HASH = {
45
+ "http://www.w3.org/2000/09/xmldsig#sha1": "sha1",
46
+ "http://www.w3.org/2001/04/xmlenc#sha256": "sha256",
47
+ "http://www.w3.org/2001/04/xmlenc#sha384": "sha384",
48
+ "http://www.w3.org/2001/04/xmlenc#sha512": "sha512"
49
+ };
50
+ var DIGEST_ALGORITHM_TO_WEB_CRYPTO = {
51
+ "http://www.w3.org/2000/09/xmldsig#sha1": "SHA-1",
52
+ "http://www.w3.org/2001/04/xmlenc#sha256": "SHA-256",
53
+ "http://www.w3.org/2001/04/xmlenc#sha384": "SHA-384",
54
+ "http://www.w3.org/2001/04/xmlenc#sha512": "SHA-512"
55
+ };
56
+
57
+ // src/pptx/core/utils/signature-xml-utils.ts
58
+ function escapeXmlAttr(value) {
59
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
60
+ }
61
+ function escapeXmlText(value) {
62
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
63
+ }
64
+ function isValidBase64(value) {
65
+ return typeof value === "string" && value.length > 0 && /^[A-Za-z0-9+/=\s]+$/.test(value);
66
+ }
67
+ function extractTagAttribute(xml, tagName, attributeName) {
68
+ const pattern = new RegExp(
69
+ `<${tagName}\\b[^>]*\\b${attributeName}="(?<attributeValue>[^"]+)"`,
70
+ "i"
71
+ );
72
+ const match = xml.match(pattern);
73
+ return match?.groups?.["attributeValue"]?.trim();
74
+ }
75
+ function extractFirstTagText(xml, localName) {
76
+ const pattern = new RegExp(
77
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
78
+ "i"
79
+ );
80
+ const match = xml.match(pattern);
81
+ return match?.[2]?.replace(/\s+/g, "").trim() || void 0;
82
+ }
83
+ function extractAllTagText(xml, localName) {
84
+ const result = [];
85
+ const regex = new RegExp(
86
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
87
+ "gi"
88
+ );
89
+ let match = regex.exec(xml);
90
+ while (match) {
91
+ const value = match[2]?.replace(/\s+/g, "").trim();
92
+ if (value) {
93
+ result.push(value);
94
+ }
95
+ match = regex.exec(xml);
96
+ }
97
+ return result;
98
+ }
99
+
100
+ // src/pptx/core/utils/signature-reference-utils.ts
101
+ function normalizePartPath(partPath) {
102
+ return partPath.replace(/\\/g, "/").replace(/^\/+/, "");
103
+ }
104
+ function resolveReferenceUriToPart(uri) {
105
+ const trimmed = uri.trim();
106
+ if (trimmed.length === 0 || trimmed.startsWith("#")) {
107
+ return void 0;
108
+ }
109
+ const decoded = decodeURIComponent(trimmed);
110
+ return normalizePartPath(decoded.startsWith("/") ? decoded.slice(1) : decoded);
111
+ }
112
+
113
+ // src/pptx/core/utils/signature-digest.ts
114
+ async function computeDigestBase64(content, digestAlgorithmUri) {
115
+ const webCryptoAlgo = DIGEST_ALGORITHM_TO_WEB_CRYPTO[digestAlgorithmUri];
116
+ if (!webCryptoAlgo) {
117
+ return void 0;
118
+ }
119
+ if (typeof globalThis.crypto?.subtle === "undefined") {
120
+ return void 0;
121
+ }
122
+ const buf = new ArrayBuffer(content.byteLength);
123
+ new Uint8Array(buf).set(content);
124
+ const digest = await globalThis.crypto.subtle.digest(webCryptoAlgo, buf);
125
+ return uint8ArrayToBase64(new Uint8Array(digest));
126
+ }
127
+ function uint8ArrayToBase64(bytes) {
128
+ let binary = "";
129
+ for (let i = 0; i < bytes.byteLength; i++) {
130
+ binary += String.fromCharCode(bytes[i]);
131
+ }
132
+ return btoa(binary);
133
+ }
134
+
135
+ // src/pptx/core/utils/signature-inspection-status.ts
136
+ function computeDetailStatus(detail, policy) {
137
+ const hasDigestMismatch = detail.referenceChecks.some(
138
+ (check) => check.digestStatus === "mismatch"
139
+ );
140
+ const hasMissingPart = detail.missingPartReferences.length > 0;
141
+ const hasVerifiedDigest = detail.referenceChecks.some(
142
+ (check) => check.digestStatus === "verified"
143
+ );
144
+ const revocationUnknown = detail.certificateRevocationStatus === "unknown" || detail.certificateRevocationStatus === "not-checked" || detail.certificateRevocationStatus === "error";
145
+ const timestampMissingOrUntrusted = detail.timestampAuthorityStatus === "not-present" || detail.timestampAuthorityStatus === "not-checked" || detail.timestampAuthorityStatus === "error" || detail.timestampAuthorityStatus === "untrusted";
146
+ if (detail.signatureValueStatus === "invalid") {
147
+ return "signature-invalid";
148
+ }
149
+ if (hasMissingPart) {
150
+ return "reference-missing";
151
+ }
152
+ if (hasDigestMismatch) {
153
+ return "digest-mismatch";
154
+ }
155
+ if (detail.certificateRevocationStatus === "revoked") {
156
+ return "certificate-revoked";
157
+ }
158
+ if (policy.requireRevocationCheck && (policy.failOnRevocationUnknown ? revocationUnknown : detail.certificateRevocationStatus !== "good")) {
159
+ return "certificate-untrusted";
160
+ }
161
+ if (detail.timestampAuthorityStatus === "invalid") {
162
+ return "timestamp-invalid";
163
+ }
164
+ if (policy.requireTimestamp && timestampMissingOrUntrusted) {
165
+ return "timestamp-untrusted";
166
+ }
167
+ if (detail.timestampAuthorityStatus === "untrusted") {
168
+ return "timestamp-untrusted";
169
+ }
170
+ if (detail.certificateTrustStatus === "untrusted" && detail.signatureValueStatus === "verified") {
171
+ return "certificate-untrusted";
172
+ }
173
+ if (hasVerifiedDigest && detail.signatureValueStatus === "verified") {
174
+ return "verified";
175
+ }
176
+ return "structural-only";
177
+ }
178
+ function computeVerificationStatus(details) {
179
+ const hasInvalidSignature = details.some((detail) => detail.status === "signature-invalid");
180
+ const hasMissing = details.some((detail) => detail.status === "reference-missing");
181
+ const hasMismatch = details.some((detail) => detail.status === "digest-mismatch");
182
+ const hasUntrusted = details.some((detail) => detail.status === "certificate-untrusted");
183
+ const hasRevoked = details.some((detail) => detail.status === "certificate-revoked");
184
+ const hasTimestampInvalid = details.some((detail) => detail.status === "timestamp-invalid");
185
+ const hasTimestampUntrusted = details.some((detail) => detail.status === "timestamp-untrusted");
186
+ const allVerified = details.every((detail) => detail.status === "verified");
187
+ return hasInvalidSignature ? "signature-invalid" : hasRevoked ? "certificate-revoked" : hasTimestampInvalid ? "timestamp-invalid" : hasTimestampUntrusted ? "timestamp-untrusted" : hasMissing ? "reference-missing" : hasMismatch ? "digest-mismatch" : allVerified ? "verified-trusted" : hasUntrusted ? "verified-untrusted" : "present-not-verified";
188
+ }
189
+ function getNodeLocalName(node) {
190
+ if (node.localName) {
191
+ return node.localName;
192
+ }
193
+ const nodeName = node.nodeName || "";
194
+ const sep = nodeName.indexOf(":");
195
+ return sep >= 0 ? nodeName.slice(sep + 1) : nodeName;
196
+ }
197
+ function getFirstDescendantElementByLocalName(parent, localName) {
198
+ const elements = parent.getElementsByTagName("*");
199
+ for (let index = 0; index < elements.length; index += 1) {
200
+ const element = elements.item(index);
201
+ if (!element) {
202
+ continue;
203
+ }
204
+ if (getNodeLocalName(element) === localName) {
205
+ return element;
206
+ }
207
+ }
208
+ return void 0;
209
+ }
210
+ function canonicalizeNode(node, algorithm) {
211
+ const canonicalizer = new xmlCrypto.SignedXml();
212
+ return canonicalizer.getCanonXml([algorithm], node);
213
+ }
214
+ function canonicalizeSignedInfoXml(signedInfoXml) {
215
+ const parser = new xmldom.DOMParser();
216
+ const signedInfoDoc = parser.parseFromString(signedInfoXml, "text/xml");
217
+ if (!signedInfoDoc.documentElement) {
218
+ throw new Error("Unable to canonicalize SignedInfo: invalid XML.");
219
+ }
220
+ return canonicalizeNode(signedInfoDoc.documentElement, "http://www.w3.org/2001/10/xml-exc-c14n#");
221
+ }
222
+
223
+ // src/pptx/signature-node/pem-utils.ts
224
+ function firstPemBlockForLabel(text, label) {
225
+ const begin = `-----BEGIN ${label}-----`;
226
+ const end = `-----END ${label}-----`;
227
+ const beginIndex = text.indexOf(begin);
228
+ if (beginIndex === -1) {
229
+ return void 0;
230
+ }
231
+ const endIndex = text.indexOf(end, beginIndex + begin.length);
232
+ if (endIndex === -1) {
233
+ return void 0;
234
+ }
235
+ return { index: beginIndex, block: text.slice(beginIndex, endIndex + end.length) };
236
+ }
237
+ function extractPemBlocks(text, label) {
238
+ const begin = `-----BEGIN ${label}-----`;
239
+ const end = `-----END ${label}-----`;
240
+ const blocks = [];
241
+ let searchFrom = 0;
242
+ for (; ; ) {
243
+ const beginIndex = text.indexOf(begin, searchFrom);
244
+ if (beginIndex === -1) {
245
+ break;
246
+ }
247
+ const contentStart = beginIndex + begin.length;
248
+ const endIndex = text.indexOf(end, contentStart);
249
+ if (endIndex === -1) {
250
+ break;
251
+ }
252
+ blocks.push(text.slice(beginIndex, endIndex + end.length));
253
+ searchFrom = endIndex + end.length;
254
+ }
255
+ return blocks;
256
+ }
257
+ function extractFirstPemBlock(text, labels) {
258
+ let best;
259
+ for (const label of labels) {
260
+ const found = firstPemBlockForLabel(text, label);
261
+ if (found && (!best || found.index < best.index)) {
262
+ best = found;
263
+ }
264
+ }
265
+ return best?.block;
266
+ }
267
+
268
+ // src/pptx/signature-node/timestamp-tag-scanner.ts
269
+ var MAX_TAG_WINDOW = 256;
270
+ var OPEN_TAG_PATTERN = /^<(?:[\w.-]+:)?(?:EncapsulatedTimeStamp|SignatureTimeStamp)\b[^>]*>/i;
271
+ var CLOSE_TAG_PATTERN = /^<\/(?:[\w.-]+:)?(?:EncapsulatedTimeStamp|SignatureTimeStamp)>/i;
272
+ function findCloseTagIndex(xml, fromIndex) {
273
+ let searchFrom = fromIndex;
274
+ for (; ; ) {
275
+ const ltIndex = xml.indexOf("<", searchFrom);
276
+ if (ltIndex === -1) {
277
+ return void 0;
278
+ }
279
+ const window = xml.slice(ltIndex, ltIndex + MAX_TAG_WINDOW);
280
+ if (CLOSE_TAG_PATTERN.test(window)) {
281
+ return ltIndex;
282
+ }
283
+ searchFrom = ltIndex + 1;
284
+ }
285
+ }
286
+ function findTimestampTagContent(xml) {
287
+ let searchFrom = 0;
288
+ for (; ; ) {
289
+ const ltIndex = xml.indexOf("<", searchFrom);
290
+ if (ltIndex === -1) {
291
+ return void 0;
292
+ }
293
+ const window = xml.slice(ltIndex, ltIndex + MAX_TAG_WINDOW);
294
+ const openMatch = OPEN_TAG_PATTERN.exec(window);
295
+ if (openMatch) {
296
+ const contentStart = ltIndex + openMatch[0].length;
297
+ const closeIndex = findCloseTagIndex(xml, contentStart);
298
+ return closeIndex === void 0 ? void 0 : xml.slice(contentStart, closeIndex);
299
+ }
300
+ searchFrom = ltIndex + 1;
301
+ }
302
+ }
303
+
304
+ // src/pptx/signature-node/pki-validation.ts
305
+ function certPemFromBase64(certBase64) {
306
+ try {
307
+ const der = Buffer.from(certBase64, "base64");
308
+ if (der.length === 0) {
309
+ return void 0;
310
+ }
311
+ const b64 = der.toString("base64");
312
+ const lines = b64.match(/.{1,64}/g);
313
+ if (!lines) {
314
+ return void 0;
315
+ }
316
+ return `-----BEGIN CERTIFICATE-----
317
+ ${lines.join("\n")}
318
+ -----END CERTIFICATE-----`;
319
+ } catch {
320
+ return void 0;
321
+ }
322
+ }
323
+ function certFingerprintSha256(certPem) {
324
+ try {
325
+ const cert = new crypto2__default.default.X509Certificate(certPem);
326
+ return cert.fingerprint256.replace(/:/g, "").toLowerCase();
327
+ } catch {
328
+ return void 0;
329
+ }
330
+ }
331
+ function asn1Child(node, index) {
332
+ return Array.isArray(node.value) ? node.value[index] : void 0;
333
+ }
334
+ async function evaluateTimestampAuthority(signatureXml) {
335
+ try {
336
+ const content = findTimestampTagContent(signatureXml);
337
+ if (!content?.trim()) {
338
+ return { status: "not-present" };
339
+ }
340
+ const tokenBase64 = content.replace(/\s+/g, "");
341
+ const tokenDer = Buffer.from(tokenBase64, "base64");
342
+ if (tokenDer.length === 0) {
343
+ return { status: "invalid", error: "Empty timestamp token." };
344
+ }
345
+ const asn1 = forge3__default.default.asn1.fromDer(forge3__default.default.util.createBuffer(tokenDer.toString("binary")));
346
+ const contentType = asn1Child(asn1, 0);
347
+ if (!contentType) {
348
+ return {
349
+ status: "invalid",
350
+ error: "Malformed timestamp token structure."
351
+ };
352
+ }
353
+ return { status: "valid" };
354
+ } catch (err) {
355
+ return {
356
+ status: "error",
357
+ error: `Timestamp evaluation failed: ${String(err)}`
358
+ };
359
+ }
360
+ }
361
+
362
+ // src/pptx/signature-node/certificate-utils.ts
363
+ var PRIVATE_KEY_PEM_LABELS = [
364
+ "RSA PRIVATE KEY",
365
+ "EC PRIVATE KEY",
366
+ "ENCRYPTED PRIVATE KEY",
367
+ "PRIVATE KEY"
368
+ ];
369
+ function certificateInfoFromBase64(certBase64) {
370
+ try {
371
+ const certificate = new crypto2__default.default.X509Certificate(Buffer.from(certBase64, "base64"));
372
+ return {
373
+ subject: certificate.subject || void 0,
374
+ issuer: certificate.issuer || void 0,
375
+ serialNumber: certificate.serialNumber || void 0,
376
+ validFrom: certificate.validFrom || void 0,
377
+ validTo: certificate.validTo || void 0
378
+ };
379
+ } catch {
380
+ return void 0;
381
+ }
382
+ }
383
+ function validateCertificateChain(certBase64List, additionalRootsPem) {
384
+ if (certBase64List.length === 0) {
385
+ return { status: "not-checked" };
386
+ }
387
+ try {
388
+ const chain = certBase64List.map((value) => {
389
+ const der = forge3__default.default.util.decode64(value);
390
+ return forge3__default.default.pki.certificateFromAsn1(forge3__default.default.asn1.fromDer(der));
391
+ });
392
+ const rootPem = [...tls__default.default.rootCertificates, ...additionalRootsPem];
393
+ const caStore = forge3__default.default.pki.createCaStore(rootPem);
394
+ const verified = forge3__default.default.pki.verifyCertificateChain(caStore, chain);
395
+ return verified ? { status: "trusted" } : {
396
+ status: "untrusted",
397
+ error: "Certificate chain is not trusted."
398
+ };
399
+ } catch (error) {
400
+ return {
401
+ status: "untrusted",
402
+ error: `Certificate trust validation failed: ${String(error)}`
403
+ };
404
+ }
405
+ }
406
+ function signatureAlgorithmToVerifyAlgorithm(signatureMethod) {
407
+ switch (signatureMethod) {
408
+ case "http://www.w3.org/2000/09/xmldsig#rsa-sha1":
409
+ return "RSA-SHA1";
410
+ case "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256":
411
+ return "RSA-SHA256";
412
+ case "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384":
413
+ return "RSA-SHA384";
414
+ case "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512":
415
+ return "RSA-SHA512";
416
+ default:
417
+ return void 0;
418
+ }
419
+ }
420
+ function verifySignatureValue(signatureXml, certBase64List) {
421
+ try {
422
+ const parser = new xmldom.DOMParser();
423
+ const doc = parser.parseFromString(signatureXml, "text/xml");
424
+ const signatureNode = doc.getElementsByTagNameNS(XMLDSIG_NS, "Signature")[0];
425
+ if (!signatureNode) {
426
+ return "not-checked";
427
+ }
428
+ const certPem = certBase64List.length > 0 ? certPemFromBase64(certBase64List[0]) : void 0;
429
+ if (!certPem) {
430
+ return "not-checked";
431
+ }
432
+ const signedInfoNode = doc.getElementsByTagNameNS(XMLDSIG_NS, "SignedInfo")[0];
433
+ const signatureValueNode = doc.getElementsByTagNameNS(XMLDSIG_NS, "SignatureValue")[0];
434
+ if (!signedInfoNode || !signatureValueNode) {
435
+ return "invalid";
436
+ }
437
+ const canonicalizationMethod = doc.getElementsByTagNameNS(XMLDSIG_NS, "CanonicalizationMethod").item(0)?.getAttribute("Algorithm") ?? "http://www.w3.org/2001/10/xml-exc-c14n#";
438
+ const signatureMethod = doc.getElementsByTagNameNS(XMLDSIG_NS, "SignatureMethod").item(0)?.getAttribute("Algorithm");
439
+ const verifyAlgorithm = signatureAlgorithmToVerifyAlgorithm(signatureMethod ?? void 0);
440
+ if (!verifyAlgorithm) {
441
+ return "invalid";
442
+ }
443
+ const canonicalSignedInfo = canonicalizeNode(signedInfoNode, canonicalizationMethod);
444
+ const signatureValueBase64 = signatureValueNode.textContent?.replace(/\s+/g, "").trim() ?? "";
445
+ if (signatureValueBase64.length === 0) {
446
+ return "invalid";
447
+ }
448
+ const verifier = crypto2__default.default.createVerify(verifyAlgorithm);
449
+ verifier.update(Buffer.from(canonicalSignedInfo, "utf8"));
450
+ verifier.end();
451
+ const isValid = verifier.verify(certPem, Buffer.from(signatureValueBase64, "base64"));
452
+ return isValid ? "verified" : "invalid";
453
+ } catch {
454
+ return "invalid";
455
+ }
456
+ }
457
+ function loadSigningMaterialFromBuffer(certificateBuffer, certificatePath, certificatePassword) {
458
+ const extension = path__default.default.extname(certificatePath).toLowerCase();
459
+ if (extension === ".pfx" || extension === ".p12") {
460
+ const p12Der = forge3__default.default.util.createBuffer(Buffer.from(certificateBuffer).toString("binary"));
461
+ const p12Asn1 = forge3__default.default.asn1.fromDer(p12Der);
462
+ const p12 = forge3__default.default.pkcs12.pkcs12FromAsn1(p12Asn1, certificatePassword || "");
463
+ const keyBag = p12.getBags({
464
+ bagType: forge3__default.default.pki.oids.pkcs8ShroudedKeyBag
465
+ })[forge3__default.default.pki.oids.pkcs8ShroudedKeyBag];
466
+ const certBag = p12.getBags({ bagType: forge3__default.default.pki.oids.certBag })[forge3__default.default.pki.oids.certBag];
467
+ if (!keyBag || keyBag.length === 0 || !keyBag[0]?.key) {
468
+ throw new Error("No private key found in PKCS#12 certificate.");
469
+ }
470
+ if (!certBag || certBag.length === 0 || !certBag[0]?.cert) {
471
+ throw new Error("No certificate found in PKCS#12 certificate.");
472
+ }
473
+ return {
474
+ privateKeyPem: forge3__default.default.pki.privateKeyToPem(keyBag[0].key),
475
+ certificatePem: forge3__default.default.pki.certificateToPem(certBag[0].cert)
476
+ };
477
+ }
478
+ const pem = Buffer.from(certificateBuffer).toString("utf8");
479
+ const privateKeyPem = extractFirstPemBlock(pem, PRIVATE_KEY_PEM_LABELS);
480
+ const certificatePem = extractFirstPemBlock(pem, ["CERTIFICATE"]);
481
+ if (!privateKeyPem || !certificatePem) {
482
+ throw new Error("PEM certificate must contain both private key and certificate.");
483
+ }
484
+ return {
485
+ privateKeyPem,
486
+ certificatePem
487
+ };
488
+ }
489
+ function pemCertificateToBase64(pem) {
490
+ return pem.replace(/-----BEGIN CERTIFICATE-----/g, "").replace(/-----END CERTIFICATE-----/g, "").replace(/\s+/g, "").trim();
491
+ }
492
+ function asn1Child2(node, index) {
493
+ return Array.isArray(node.value) ? node.value[index] : void 0;
494
+ }
495
+ function asn1Bytes(node) {
496
+ return typeof node.value === "string" ? node.value : "";
497
+ }
498
+ function extractOcspUrls(certPem) {
499
+ try {
500
+ const cert = new crypto2__default.default.X509Certificate(certPem);
501
+ const infoAccess = cert.infoAccess;
502
+ if (!infoAccess) {
503
+ return [];
504
+ }
505
+ const urls = [];
506
+ for (const line of infoAccess.split("\n")) {
507
+ const match = /OCSP\s*-\s*URI:(https?:\/\/\S+)/i.exec(line.trim());
508
+ if (match?.[1]) {
509
+ urls.push(match[1]);
510
+ }
511
+ }
512
+ return urls;
513
+ } catch {
514
+ return [];
515
+ }
516
+ }
517
+ var HTTP_TIMEOUT_MS = 1e4;
518
+ function httpPost(url, body, contentType) {
519
+ return new Promise((resolve, reject) => {
520
+ let parsed;
521
+ try {
522
+ parsed = new URL(url);
523
+ } catch {
524
+ reject(new Error("Invalid URL"));
525
+ return;
526
+ }
527
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
528
+ reject(new Error("Unsupported protocol"));
529
+ return;
530
+ }
531
+ const transport = parsed.protocol === "https:" ? https__default.default : http__default.default;
532
+ const req = transport.request(
533
+ {
534
+ hostname: parsed.hostname,
535
+ port: parsed.port || void 0,
536
+ path: parsed.pathname + parsed.search,
537
+ method: "POST",
538
+ headers: {
539
+ "Content-Type": contentType,
540
+ "Content-Length": body.length
541
+ },
542
+ timeout: HTTP_TIMEOUT_MS
543
+ },
544
+ (res) => {
545
+ const chunks = [];
546
+ res.on("data", (chunk) => chunks.push(chunk));
547
+ res.on("end", () => resolve(Buffer.concat(chunks)));
548
+ res.on("error", reject);
549
+ }
550
+ );
551
+ req.on("error", reject);
552
+ req.on("timeout", () => {
553
+ req.destroy();
554
+ reject(new Error("Timeout"));
555
+ });
556
+ req.write(body);
557
+ req.end();
558
+ });
559
+ }
560
+ var SHA1_OID = "1.3.14.3.2.26";
561
+ function buildOcspRequestDer(leafPem, issuerPem) {
562
+ try {
563
+ const leaf = forge3__default.default.pki.certificateFromPem(leafPem);
564
+ const issuer = forge3__default.default.pki.certificateFromPem(issuerPem);
565
+ const issuerNameDer = forge3__default.default.asn1.toDer(forge3__default.default.pki.distinguishedNameToAsn1(issuer.subject)).getBytes();
566
+ const issuerNameHash = forge3__default.default.md.sha1.create().update(issuerNameDer).digest().getBytes();
567
+ const pubKeyDer = forge3__default.default.asn1.toDer(forge3__default.default.pki.publicKeyToAsn1(issuer.publicKey)).getBytes();
568
+ const pubKeyAsn1 = forge3__default.default.asn1.fromDer(pubKeyDer);
569
+ const bitString = asn1Child2(pubKeyAsn1, 1);
570
+ const rawKey = bitString ? asn1Bytes(bitString).substring(1) : "";
571
+ const issuerKeyHash = forge3__default.default.md.sha1.create().update(rawKey).digest().getBytes();
572
+ const serialBytes = forge3__default.default.util.hexToBytes(leaf.serialNumber);
573
+ const request = forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
574
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
575
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
576
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
577
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
578
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.SEQUENCE, true, [
579
+ forge3__default.default.asn1.create(
580
+ forge3__default.default.asn1.Class.UNIVERSAL,
581
+ forge3__default.default.asn1.Type.OID,
582
+ false,
583
+ forge3__default.default.asn1.oidToDer(SHA1_OID).getBytes()
584
+ ),
585
+ forge3__default.default.asn1.create(forge3__default.default.asn1.Class.UNIVERSAL, forge3__default.default.asn1.Type.NULL, false, "")
586
+ ]),
587
+ forge3__default.default.asn1.create(
588
+ forge3__default.default.asn1.Class.UNIVERSAL,
589
+ forge3__default.default.asn1.Type.OCTETSTRING,
590
+ false,
591
+ issuerNameHash
592
+ ),
593
+ forge3__default.default.asn1.create(
594
+ forge3__default.default.asn1.Class.UNIVERSAL,
595
+ forge3__default.default.asn1.Type.OCTETSTRING,
596
+ false,
597
+ issuerKeyHash
598
+ ),
599
+ forge3__default.default.asn1.create(
600
+ forge3__default.default.asn1.Class.UNIVERSAL,
601
+ forge3__default.default.asn1.Type.INTEGER,
602
+ false,
603
+ serialBytes
604
+ )
605
+ ])
606
+ ])
607
+ ])
608
+ ])
609
+ ]);
610
+ return Buffer.from(forge3__default.default.asn1.toDer(request).getBytes(), "binary");
611
+ } catch {
612
+ return void 0;
613
+ }
614
+ }
615
+ function parseOcspResponseStatus(data) {
616
+ try {
617
+ const asn1 = forge3__default.default.asn1.fromDer(forge3__default.default.util.createBuffer(data.toString("binary")));
618
+ const statusNode = asn1Child2(asn1, 0);
619
+ if (!statusNode || asn1Bytes(statusNode) !== "\0") {
620
+ return "error";
621
+ }
622
+ const respBytesWrapper = asn1Child2(asn1, 1);
623
+ if (!respBytesWrapper) {
624
+ return "unknown";
625
+ }
626
+ const respBytesSeq = asn1Child2(respBytesWrapper, 0);
627
+ if (!respBytesSeq) {
628
+ return "unknown";
629
+ }
630
+ const respOctet = asn1Child2(respBytesSeq, 1);
631
+ if (!respOctet) {
632
+ return "unknown";
633
+ }
634
+ const basicResp = forge3__default.default.asn1.fromDer(forge3__default.default.util.createBuffer(asn1Bytes(respOctet)));
635
+ const tbsData = asn1Child2(basicResp, 0);
636
+ if (!tbsData) {
637
+ return "unknown";
638
+ }
639
+ const first = asn1Child2(tbsData, 0);
640
+ const responsesIdx = first?.tagClass === forge3__default.default.asn1.Class.CONTEXT_SPECIFIC && first.type === 0 ? 3 : 2;
641
+ const responses = asn1Child2(tbsData, responsesIdx);
642
+ if (!responses) {
643
+ return "unknown";
644
+ }
645
+ const single = asn1Child2(responses, 0);
646
+ if (!single) {
647
+ return "unknown";
648
+ }
649
+ const certStatus = asn1Child2(single, 1);
650
+ if (!certStatus) {
651
+ return "unknown";
652
+ }
653
+ if (certStatus.tagClass === forge3__default.default.asn1.Class.CONTEXT_SPECIFIC) {
654
+ if (certStatus.type === 0) {
655
+ return "good";
656
+ }
657
+ if (certStatus.type === 1) {
658
+ return "revoked";
659
+ }
660
+ }
661
+ return "unknown";
662
+ } catch {
663
+ return "error";
664
+ }
665
+ }
666
+ async function evaluateCertificateRevocation(leafCertPem, issuerCertPem) {
667
+ const ocspUrls = extractOcspUrls(leafCertPem);
668
+ const checkedOcspUrls = [];
669
+ const checkedCrlUrls = [];
670
+ if (issuerCertPem && ocspUrls.length > 0) {
671
+ const reqDer = buildOcspRequestDer(leafCertPem, issuerCertPem);
672
+ if (reqDer) {
673
+ for (const url of ocspUrls) {
674
+ checkedOcspUrls.push(url);
675
+ try {
676
+ const resp = await httpPost(url, reqDer, "application/ocsp-request");
677
+ const status = parseOcspResponseStatus(resp);
678
+ if (status === "good" || status === "revoked") {
679
+ return { status, checkedOcspUrls, checkedCrlUrls };
680
+ }
681
+ } catch {
682
+ }
683
+ }
684
+ }
685
+ }
686
+ if (checkedOcspUrls.length === 0) {
687
+ return { status: "not-checked", checkedOcspUrls, checkedCrlUrls };
688
+ }
689
+ return {
690
+ status: "unknown",
691
+ error: "Could not determine revocation status from available responders.",
692
+ checkedOcspUrls,
693
+ checkedCrlUrls
694
+ };
695
+ }
696
+ function extractPemCertificatesFromText(text) {
697
+ return extractPemBlocks(text, "CERTIFICATE").map((value) => value.trim()).filter((value) => value.length > 0);
698
+ }
699
+ function parseBooleanEnv(envValue) {
700
+ if (!envValue) {
701
+ return false;
702
+ }
703
+ const normalized = envValue.trim().toLowerCase();
704
+ return normalized === "1" || normalized === "true" || normalized === "yes";
705
+ }
706
+ function parseListEnv(envValue) {
707
+ if (!envValue) {
708
+ return [];
709
+ }
710
+ return envValue.split(/[;,]/).map((value) => value.trim()).filter((value) => value.length > 0);
711
+ }
712
+ async function loadEnterpriseTrustRoots() {
713
+ const roots = [];
714
+ const inlinePem = process.env[ENTERPRISE_TRUST_ROOTS_PEM_ENV];
715
+ if (inlinePem) {
716
+ roots.push(...extractPemCertificatesFromText(inlinePem));
717
+ }
718
+ const trustRootPaths = parseListEnv(process.env[ENTERPRISE_TRUST_ROOTS_FILE_ENV]);
719
+ for (const trustRootPath of trustRootPaths) {
720
+ try {
721
+ const pemText = await fs__default.default.readFile(trustRootPath, "utf8");
722
+ roots.push(...extractPemCertificatesFromText(pemText));
723
+ } catch {
724
+ }
725
+ }
726
+ return roots;
727
+ }
728
+ function getSignatureValidationPolicy() {
729
+ return {
730
+ requireRevocationCheck: parseBooleanEnv(process.env[ENTERPRISE_REQUIRE_REVOCATION_ENV]),
731
+ failOnRevocationUnknown: parseBooleanEnv(
732
+ process.env[ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV]
733
+ ),
734
+ requireTimestamp: parseBooleanEnv(process.env[ENTERPRISE_REQUIRE_TIMESTAMP_ENV])
735
+ };
736
+ }
737
+ function extractReferenceTransforms(referenceNode) {
738
+ const transforms = [];
739
+ const transformNodes = referenceNode.getElementsByTagNameNS(XMLDSIG_NS, "Transform");
740
+ for (let index = 0; index < transformNodes.length; index += 1) {
741
+ const transformNode = transformNodes.item(index);
742
+ if (!transformNode) {
743
+ continue;
744
+ }
745
+ const algorithm = transformNode.getAttribute("Algorithm")?.trim();
746
+ if (!algorithm) {
747
+ continue;
748
+ }
749
+ const relationshipReferenceIds = [];
750
+ const childNodes = transformNode.getElementsByTagName("*");
751
+ for (let childIndex = 0; childIndex < childNodes.length; childIndex += 1) {
752
+ const childNode = childNodes.item(childIndex);
753
+ if (!childNode) {
754
+ continue;
755
+ }
756
+ if (getNodeLocalName(childNode) !== "RelationshipReference") {
757
+ continue;
758
+ }
759
+ const sourceId = childNode.getAttribute("SourceId")?.trim();
760
+ if (sourceId && sourceId.length > 0) {
761
+ relationshipReferenceIds.push(sourceId);
762
+ }
763
+ }
764
+ transforms.push({ algorithm, relationshipReferenceIds });
765
+ }
766
+ return transforms;
767
+ }
768
+ function applyRelationshipTransform(xmlText, relationshipIds) {
769
+ try {
770
+ const parser = new xmldom.DOMParser();
771
+ const serializer = new xmldom.XMLSerializer();
772
+ const doc = parser.parseFromString(xmlText, "text/xml");
773
+ const relationshipsRoot = getFirstDescendantElementByLocalName(doc, "Relationships");
774
+ if (!relationshipsRoot) {
775
+ return void 0;
776
+ }
777
+ if (relationshipIds.length === 0) {
778
+ return serializer.serializeToString(doc);
779
+ }
780
+ const idSet = new Set(relationshipIds);
781
+ const relationshipNodes = Array.from(relationshipsRoot.getElementsByTagName("*")).filter(
782
+ (node) => getNodeLocalName(node) === "Relationship"
783
+ );
784
+ for (const relationshipNode of relationshipNodes) {
785
+ const relId = relationshipNode.getAttribute("Id")?.trim();
786
+ if (!relId || !idSet.has(relId)) {
787
+ relationshipNode.parentNode?.removeChild(relationshipNode);
788
+ }
789
+ }
790
+ return serializer.serializeToString(doc);
791
+ } catch {
792
+ return void 0;
793
+ }
794
+ }
795
+ function applyReferenceTransforms(partBytes, transforms) {
796
+ let transformedBytes = partBytes;
797
+ const unsupportedAlgorithms = [];
798
+ for (const transform of transforms) {
799
+ if (transform.algorithm === OPC_RELATIONSHIP_TRANSFORM) {
800
+ const nextXml = applyRelationshipTransform(
801
+ Buffer.from(transformedBytes).toString("utf8"),
802
+ transform.relationshipReferenceIds
803
+ );
804
+ if (!nextXml) {
805
+ unsupportedAlgorithms.push(transform.algorithm);
806
+ continue;
807
+ }
808
+ transformedBytes = new Uint8Array(Buffer.from(nextXml, "utf8"));
809
+ continue;
810
+ }
811
+ if (!SUPPORTED_XML_CANON_TRANSFORMS.has(transform.algorithm)) {
812
+ unsupportedAlgorithms.push(transform.algorithm);
813
+ continue;
814
+ }
815
+ try {
816
+ const parser = new xmldom.DOMParser();
817
+ const doc = parser.parseFromString(
818
+ Buffer.from(transformedBytes).toString("utf8"),
819
+ "text/xml"
820
+ );
821
+ if (!doc.documentElement) {
822
+ unsupportedAlgorithms.push(transform.algorithm);
823
+ continue;
824
+ }
825
+ const canonical = canonicalizeNode(doc.documentElement, transform.algorithm);
826
+ transformedBytes = new Uint8Array(Buffer.from(canonical, "utf8"));
827
+ } catch {
828
+ unsupportedAlgorithms.push(transform.algorithm);
829
+ }
830
+ }
831
+ return { data: transformedBytes, unsupportedAlgorithms };
832
+ }
833
+ function computeDigestBase642(content, digestAlgorithmUri) {
834
+ const hashName = DIGEST_ALGORITHM_TO_HASH[digestAlgorithmUri];
835
+ if (!hashName) {
836
+ return void 0;
837
+ }
838
+ return crypto2__default.default.createHash(hashName).update(Buffer.from(content)).digest("base64");
839
+ }
840
+ async function buildReferenceChecksFromSignatureXml(zip, signatureXml) {
841
+ const parser = new xmldom.DOMParser();
842
+ const doc = parser.parseFromString(signatureXml, "text/xml");
843
+ const referenceNodes = doc.getElementsByTagNameNS(XMLDSIG_NS, "Reference");
844
+ const checks = [];
845
+ for (let index = 0; index < referenceNodes.length; index += 1) {
846
+ const referenceNode = referenceNodes.item(index);
847
+ if (!referenceNode) {
848
+ continue;
849
+ }
850
+ const uri = referenceNode.getAttribute("URI")?.trim() ?? "";
851
+ const digestMethodNode = getFirstDescendantElementByLocalName(referenceNode, "DigestMethod");
852
+ const digestValueNode = getFirstDescendantElementByLocalName(referenceNode, "DigestValue");
853
+ const digestAlgorithm = digestMethodNode?.getAttribute("Algorithm")?.trim();
854
+ const digestExpectedBase64 = digestValueNode?.textContent?.replace(/\s+/g, "").trim();
855
+ const transforms = extractReferenceTransforms(referenceNode);
856
+ const transformAlgorithms = transforms.map((transform) => transform.algorithm);
857
+ const resolvedPartPath = resolveReferenceUriToPart(uri);
858
+ if (!resolvedPartPath) {
859
+ checks.push({
860
+ uri,
861
+ existsInPackage: true,
862
+ digestAlgorithm,
863
+ digestExpectedBase64,
864
+ digestStatus: "insufficient-data",
865
+ transformAlgorithms
866
+ });
867
+ continue;
868
+ }
869
+ const part = zip.file(resolvedPartPath);
870
+ if (!part) {
871
+ checks.push({
872
+ uri,
873
+ resolvedPartPath,
874
+ existsInPackage: false,
875
+ digestAlgorithm,
876
+ digestExpectedBase64,
877
+ digestStatus: "missing-part",
878
+ transformAlgorithms
879
+ });
880
+ continue;
881
+ }
882
+ if (!digestAlgorithm || !digestExpectedBase64) {
883
+ checks.push({
884
+ uri,
885
+ resolvedPartPath,
886
+ existsInPackage: true,
887
+ digestAlgorithm,
888
+ digestExpectedBase64,
889
+ digestStatus: "insufficient-data",
890
+ transformAlgorithms
891
+ });
892
+ continue;
893
+ }
894
+ const rawContent = await part.async("uint8array");
895
+ const transformed = applyReferenceTransforms(rawContent, transforms);
896
+ if (transformed.unsupportedAlgorithms.length > 0) {
897
+ checks.push({
898
+ uri,
899
+ resolvedPartPath,
900
+ existsInPackage: true,
901
+ digestAlgorithm,
902
+ digestExpectedBase64,
903
+ digestStatus: "unsupported-transform",
904
+ transformAlgorithms
905
+ });
906
+ continue;
907
+ }
908
+ const digestActualBase64 = computeDigestBase642(transformed.data, digestAlgorithm);
909
+ if (!digestActualBase64) {
910
+ checks.push({
911
+ uri,
912
+ resolvedPartPath,
913
+ existsInPackage: true,
914
+ digestAlgorithm,
915
+ digestExpectedBase64,
916
+ digestStatus: "unsupported-algorithm",
917
+ transformAlgorithms
918
+ });
919
+ continue;
920
+ }
921
+ checks.push({
922
+ uri,
923
+ resolvedPartPath,
924
+ existsInPackage: true,
925
+ digestAlgorithm,
926
+ digestExpectedBase64,
927
+ digestActualBase64,
928
+ digestStatus: digestActualBase64 === digestExpectedBase64 ? "verified" : "mismatch",
929
+ transformAlgorithms
930
+ });
931
+ }
932
+ return checks;
933
+ }
934
+ async function buildReferenceChecksFromPptxViewerManifest(zip, signatureXml) {
935
+ const parser = new xmldom.DOMParser();
936
+ const doc = parser.parseFromString(signatureXml, "text/xml");
937
+ const partNodes = Array.from(doc.getElementsByTagNameNS(PPTX_VIEWER_MANIFEST_NS, "Part"));
938
+ const checks = [];
939
+ for (const partNode of partNodes) {
940
+ const rawName = partNode.getAttribute("Name") || "";
941
+ const digestAlgorithm = partNode.getAttribute("DigestMethod") || void 0;
942
+ const digestExpectedBase64 = partNode.getAttribute("DigestValue") || void 0;
943
+ const resolvedPartPath = resolveReferenceUriToPart(rawName);
944
+ if (!resolvedPartPath) {
945
+ checks.push({
946
+ uri: rawName,
947
+ existsInPackage: true,
948
+ digestAlgorithm,
949
+ digestExpectedBase64,
950
+ digestStatus: "insufficient-data",
951
+ transformAlgorithms: []
952
+ });
953
+ continue;
954
+ }
955
+ const partFile = zip.file(resolvedPartPath);
956
+ if (!partFile) {
957
+ checks.push({
958
+ uri: rawName,
959
+ resolvedPartPath,
960
+ existsInPackage: false,
961
+ digestAlgorithm,
962
+ digestExpectedBase64,
963
+ digestStatus: "missing-part",
964
+ transformAlgorithms: []
965
+ });
966
+ continue;
967
+ }
968
+ if (!digestAlgorithm || !digestExpectedBase64) {
969
+ checks.push({
970
+ uri: rawName,
971
+ resolvedPartPath,
972
+ existsInPackage: true,
973
+ digestAlgorithm,
974
+ digestExpectedBase64,
975
+ digestStatus: "insufficient-data",
976
+ transformAlgorithms: []
977
+ });
978
+ continue;
979
+ }
980
+ const partBytes = await partFile.async("uint8array");
981
+ const actualDigest = computeDigestBase642(partBytes, digestAlgorithm);
982
+ if (!actualDigest) {
983
+ checks.push({
984
+ uri: rawName,
985
+ resolvedPartPath,
986
+ existsInPackage: true,
987
+ digestAlgorithm,
988
+ digestExpectedBase64,
989
+ digestStatus: "unsupported-algorithm",
990
+ transformAlgorithms: []
991
+ });
992
+ continue;
993
+ }
994
+ checks.push({
995
+ uri: rawName,
996
+ resolvedPartPath,
997
+ existsInPackage: true,
998
+ digestAlgorithm,
999
+ digestExpectedBase64,
1000
+ digestActualBase64: actualDigest,
1001
+ digestStatus: actualDigest === digestExpectedBase64 ? "verified" : "mismatch",
1002
+ transformAlgorithms: []
1003
+ });
1004
+ }
1005
+ return checks;
1006
+ }
1007
+ async function inspectPptxDigitalSignatures(data) {
1008
+ try {
1009
+ const zip = await JSZip__default.default.loadAsync(Buffer.from(data));
1010
+ const signaturePaths = Object.keys(zip.files).filter(
1011
+ (entryPath) => entryPath.startsWith("_xmlsignatures/") && entryPath.endsWith(".xml")
1012
+ );
1013
+ const rootRelsXml = await zip.file("_rels/.rels")?.async("string");
1014
+ const hasOriginRelationship = Boolean(rootRelsXml?.includes(DIGITAL_SIGNATURE_ORIGIN_REL_TYPE));
1015
+ if (signaturePaths.length === 0) {
1016
+ return {
1017
+ supported: true,
1018
+ hasSignature: false,
1019
+ signatureCount: 0,
1020
+ signaturePaths: [],
1021
+ verificationStatus: "unsigned",
1022
+ hasOriginRelationship
1023
+ };
1024
+ }
1025
+ const additionalRootsPem = await loadEnterpriseTrustRoots();
1026
+ const policy = getSignatureValidationPolicy();
1027
+ const details = [];
1028
+ for (const signaturePath of signaturePaths) {
1029
+ const signatureXml = await zip.file(signaturePath)?.async("string") ?? "";
1030
+ const manifestChecks = await buildReferenceChecksFromPptxViewerManifest(zip, signatureXml);
1031
+ const referenceChecks = manifestChecks.length > 0 ? manifestChecks : await buildReferenceChecksFromSignatureXml(zip, signatureXml);
1032
+ const missingPartReferences = referenceChecks.filter((check) => check.digestStatus === "missing-part").map((check) => check.uri);
1033
+ const unsupportedTransforms = referenceChecks.flatMap(
1034
+ (check) => check.digestStatus === "unsupported-transform" ? check.transformAlgorithms : []
1035
+ ).filter((value, index, all) => all.indexOf(value) === index);
1036
+ const certs = extractAllTagText(signatureXml, "X509Certificate");
1037
+ const trust = validateCertificateChain(certs, additionalRootsPem);
1038
+ const signatureValueStatus = verifySignatureValue(signatureXml, certs);
1039
+ const leafCertPem = certs.length > 0 ? certPemFromBase64(certs[0]) : void 0;
1040
+ const issuerCertPem = certs.length > 1 ? certPemFromBase64(certs[1]) : leafCertPem;
1041
+ const revocation = leafCertPem ? await evaluateCertificateRevocation(leafCertPem, issuerCertPem) : {
1042
+ status: "not-checked",
1043
+ checkedOcspUrls: [],
1044
+ checkedCrlUrls: []
1045
+ };
1046
+ const timestamp = await evaluateTimestampAuthority(signatureXml);
1047
+ const detailBase = {
1048
+ path: signaturePath,
1049
+ signatureMethod: extractTagAttribute(
1050
+ signatureXml,
1051
+ "([\\w.-]+:)?SignatureMethod",
1052
+ "Algorithm"
1053
+ ),
1054
+ canonicalizationMethod: extractTagAttribute(
1055
+ signatureXml,
1056
+ "([\\w.-]+:)?CanonicalizationMethod",
1057
+ "Algorithm"
1058
+ ),
1059
+ signingTime: extractFirstTagText(signatureXml, "SigningTime"),
1060
+ referenceCount: referenceChecks.length,
1061
+ missingPartReferences,
1062
+ unsupportedTransforms,
1063
+ referenceChecks,
1064
+ certificate: certs.length > 0 ? certificateInfoFromBase64(certs[0]) : void 0,
1065
+ signatureValueStatus,
1066
+ certificateTrustStatus: trust.status,
1067
+ certificateTrustError: trust.error,
1068
+ certificateRevocationStatus: revocation.status,
1069
+ certificateRevocationError: revocation.error,
1070
+ timestampAuthorityStatus: timestamp.status,
1071
+ timestampAuthorityError: timestamp.error,
1072
+ certificateFingerprintSha256: leafCertPem ? certFingerprintSha256(leafCertPem) : void 0
1073
+ };
1074
+ details.push({
1075
+ ...detailBase,
1076
+ status: computeDetailStatus(detailBase, policy)
1077
+ });
1078
+ }
1079
+ return {
1080
+ supported: true,
1081
+ hasSignature: true,
1082
+ signatureCount: signaturePaths.length,
1083
+ signaturePaths,
1084
+ verificationStatus: computeVerificationStatus(details),
1085
+ details,
1086
+ hasOriginRelationship
1087
+ };
1088
+ } catch (error) {
1089
+ return {
1090
+ supported: true,
1091
+ hasSignature: false,
1092
+ signatureCount: 0,
1093
+ signaturePaths: [],
1094
+ verificationStatus: "invalid-package",
1095
+ error: `Unable to inspect digital signature parts: ${String(error)}`
1096
+ };
1097
+ }
1098
+ }
1099
+
1100
+ // src/pptx/signature-node/signing.ts
1101
+ async function upsertRootOriginRelationship(zip) {
1102
+ const parser = new xmldom.DOMParser();
1103
+ const serializer = new xmldom.XMLSerializer();
1104
+ const relsPath = "_rels/.rels";
1105
+ const xml = await zip.file(relsPath)?.async("string") || '<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"></Relationships>';
1106
+ const doc = parser.parseFromString(xml, "text/xml");
1107
+ const relationships = doc.documentElement;
1108
+ if (!relationships) {
1109
+ throw new Error("Unable to sign package: invalid _rels/.rels XML.");
1110
+ }
1111
+ const existing = Array.from(relationships.getElementsByTagName("Relationship")).find(
1112
+ (node) => node.getAttribute("Type") === DIGITAL_SIGNATURE_ORIGIN_REL_TYPE
1113
+ );
1114
+ if (!existing) {
1115
+ const rel = doc.createElement("Relationship");
1116
+ rel.setAttribute("Id", "rIdDigitalSignatureOrigin");
1117
+ rel.setAttribute("Type", DIGITAL_SIGNATURE_ORIGIN_REL_TYPE);
1118
+ rel.setAttribute("Target", "_xmlsignatures/origin.sigs");
1119
+ relationships.appendChild(rel);
1120
+ }
1121
+ zip.file(relsPath, serializer.serializeToString(doc));
1122
+ }
1123
+ async function upsertContentTypesForSignature(zip, signaturePath) {
1124
+ const parser = new xmldom.DOMParser();
1125
+ const serializer = new xmldom.XMLSerializer();
1126
+ const pathInContentTypes = "[Content_Types].xml";
1127
+ const xml = await zip.file(pathInContentTypes)?.async("string") || "";
1128
+ if (!xml) {
1129
+ return;
1130
+ }
1131
+ const doc = parser.parseFromString(xml, "text/xml");
1132
+ const types = doc.documentElement;
1133
+ if (!types) {
1134
+ return;
1135
+ }
1136
+ const ensureOverride = (partName, contentType) => {
1137
+ const existing = Array.from(types.getElementsByTagName("Override")).find(
1138
+ (node) => node.getAttribute("PartName") === partName
1139
+ );
1140
+ if (existing) {
1141
+ existing.setAttribute("ContentType", contentType);
1142
+ return;
1143
+ }
1144
+ const override = doc.createElement("Override");
1145
+ override.setAttribute("PartName", partName);
1146
+ override.setAttribute("ContentType", contentType);
1147
+ types.appendChild(override);
1148
+ };
1149
+ ensureOverride(
1150
+ "/_xmlsignatures/origin.sigs",
1151
+ "application/vnd.openxmlformats-package.digital-signature-origin"
1152
+ );
1153
+ ensureOverride(
1154
+ `/${signaturePath}`,
1155
+ "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml"
1156
+ );
1157
+ zip.file(pathInContentTypes, serializer.serializeToString(doc));
1158
+ }
1159
+ async function buildOfficeReferenceList(zip) {
1160
+ const references = [];
1161
+ const digestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";
1162
+ for (const entryPath of Object.keys(zip.files)) {
1163
+ const entry = zip.file(entryPath);
1164
+ if (!entry || entry.dir) {
1165
+ continue;
1166
+ }
1167
+ if (entryPath.startsWith("_xmlsignatures/")) {
1168
+ continue;
1169
+ }
1170
+ const entryBytes = await entry.async("uint8array");
1171
+ const digestValue = crypto2__default.default.createHash("sha256").update(Buffer.from(entryBytes)).digest("base64");
1172
+ references.push({
1173
+ uri: `/${normalizePartPath(entryPath)}`,
1174
+ digestMethod,
1175
+ digestValue
1176
+ });
1177
+ }
1178
+ references.sort((left, right) => left.uri.localeCompare(right.uri));
1179
+ return references;
1180
+ }
1181
+ function buildOfficeSignatureXml(references, privateKeyPem, certificatePem) {
1182
+ const signedInfoReferencesXml = references.map(
1183
+ (reference) => `<Reference URI="${escapeXmlAttr(reference.uri)}"><DigestMethod Algorithm="${escapeXmlAttr(reference.digestMethod)}"/><DigestValue>${escapeXmlText(reference.digestValue)}</DigestValue></Reference>`
1184
+ ).join("");
1185
+ const signedInfoXml = `<SignedInfo xmlns="${XMLDSIG_NS}"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>${signedInfoReferencesXml}</SignedInfo>`;
1186
+ const canonicalSignedInfo = canonicalizeSignedInfoXml(signedInfoXml);
1187
+ const signer = crypto2__default.default.createSign("RSA-SHA256");
1188
+ signer.update(Buffer.from(canonicalSignedInfo, "utf8"));
1189
+ signer.end();
1190
+ const signatureValueBase64 = signer.sign(privateKeyPem).toString("base64");
1191
+ const certificateBase64 = pemCertificateToBase64(certificatePem);
1192
+ if (!isValidBase64(signatureValueBase64)) {
1193
+ throw new Error("Generated SignatureValue is not valid base64");
1194
+ }
1195
+ if (!isValidBase64(certificateBase64)) {
1196
+ throw new Error("X.509 certificate is not valid base64");
1197
+ }
1198
+ const signingTime = (/* @__PURE__ */ new Date()).toISOString();
1199
+ return `<Signature xmlns="${XMLDSIG_NS}">${signedInfoXml}<SignatureValue>${escapeXmlText(signatureValueBase64)}</SignatureValue><KeyInfo><X509Data><X509Certificate>${escapeXmlText(certificateBase64)}</X509Certificate></X509Data></KeyInfo><Object><SignatureProperties><SignatureProperty><SigningTime>${escapeXmlText(signingTime)}</SigningTime></SignatureProperty></SignatureProperties></Object></Signature>`;
1200
+ }
1201
+ async function signPptxWithCertificate(data, certificateBuffer, options) {
1202
+ try {
1203
+ const signing = loadSigningMaterialFromBuffer(
1204
+ certificateBuffer,
1205
+ options.certificatePath,
1206
+ options.certificatePassword
1207
+ );
1208
+ const zip = await JSZip__default.default.loadAsync(Buffer.from(data));
1209
+ for (const entryPath of Object.keys(zip.files)) {
1210
+ if (entryPath.startsWith("_xmlsignatures/")) {
1211
+ zip.remove(entryPath);
1212
+ }
1213
+ }
1214
+ const signaturePath = "_xmlsignatures/sig1.xml";
1215
+ await upsertRootOriginRelationship(zip);
1216
+ await upsertContentTypesForSignature(zip, signaturePath);
1217
+ const references = await buildOfficeReferenceList(zip);
1218
+ const signatureXml = buildOfficeSignatureXml(
1219
+ references,
1220
+ signing.privateKeyPem,
1221
+ signing.certificatePem
1222
+ );
1223
+ zip.file(signaturePath, signatureXml);
1224
+ zip.file("_xmlsignatures/origin.sigs", "<SignatureOrigin/>");
1225
+ zip.file(
1226
+ "_xmlsignatures/_rels/origin.sigs.rels",
1227
+ `<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rIdSig1" Type="${DIGITAL_SIGNATURE_REL_TYPE}" Target="sig1.xml"/></Relationships>`
1228
+ );
1229
+ const signedData = await zip.generateAsync({ type: "uint8array" });
1230
+ const report = await inspectPptxDigitalSignatures(signedData);
1231
+ return { success: true, signedData, report };
1232
+ } catch (error) {
1233
+ const errorReport = {
1234
+ supported: true,
1235
+ hasSignature: false,
1236
+ signatureCount: 0,
1237
+ signaturePaths: [],
1238
+ verificationStatus: "error",
1239
+ error: `Failed to sign PPTX: ${String(error)}`
1240
+ };
1241
+ return {
1242
+ success: false,
1243
+ report: errorReport,
1244
+ error: `Failed to sign PPTX: ${String(error)}`
1245
+ };
1246
+ }
1247
+ }
1248
+
1249
+ exports.DIGEST_ALGORITHM_TO_HASH = DIGEST_ALGORITHM_TO_HASH;
1250
+ exports.DIGEST_ALGORITHM_TO_WEB_CRYPTO = DIGEST_ALGORITHM_TO_WEB_CRYPTO;
1251
+ exports.DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = DIGITAL_SIGNATURE_ORIGIN_REL_TYPE;
1252
+ exports.DIGITAL_SIGNATURE_REL_TYPE = DIGITAL_SIGNATURE_REL_TYPE;
1253
+ exports.ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV = ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV;
1254
+ exports.ENTERPRISE_REQUIRE_REVOCATION_ENV = ENTERPRISE_REQUIRE_REVOCATION_ENV;
1255
+ exports.ENTERPRISE_REQUIRE_TIMESTAMP_ENV = ENTERPRISE_REQUIRE_TIMESTAMP_ENV;
1256
+ exports.ENTERPRISE_TRUST_ROOTS_FILE_ENV = ENTERPRISE_TRUST_ROOTS_FILE_ENV;
1257
+ exports.ENTERPRISE_TRUST_ROOTS_PEM_ENV = ENTERPRISE_TRUST_ROOTS_PEM_ENV;
1258
+ exports.OPC_RELATIONSHIP_TRANSFORM = OPC_RELATIONSHIP_TRANSFORM;
1259
+ exports.PPTX_VIEWER_MANIFEST_NS = PPTX_VIEWER_MANIFEST_NS;
1260
+ exports.SUPPORTED_XML_CANON_TRANSFORMS = SUPPORTED_XML_CANON_TRANSFORMS;
1261
+ exports.XMLDSIG_NS = XMLDSIG_NS;
1262
+ exports.XML_TRANSFORM_ENVELOPED_SIGNATURE = XML_TRANSFORM_ENVELOPED_SIGNATURE;
1263
+ exports.applyReferenceTransforms = applyReferenceTransforms;
1264
+ exports.buildOcspRequestDer = buildOcspRequestDer;
1265
+ exports.buildReferenceChecksFromPptxViewerManifest = buildReferenceChecksFromPptxViewerManifest;
1266
+ exports.buildReferenceChecksFromSignatureXml = buildReferenceChecksFromSignatureXml;
1267
+ exports.canonicalizeNode = canonicalizeNode;
1268
+ exports.canonicalizeSignedInfoXml = canonicalizeSignedInfoXml;
1269
+ exports.certFingerprintSha256 = certFingerprintSha256;
1270
+ exports.certPemFromBase64 = certPemFromBase64;
1271
+ exports.certificateInfoFromBase64 = certificateInfoFromBase64;
1272
+ exports.computeDetailStatus = computeDetailStatus;
1273
+ exports.computeDigestBase64 = computeDigestBase642;
1274
+ exports.computeDigestBase64WebCrypto = computeDigestBase64;
1275
+ exports.computeVerificationStatus = computeVerificationStatus;
1276
+ exports.escapeXmlAttr = escapeXmlAttr;
1277
+ exports.escapeXmlText = escapeXmlText;
1278
+ exports.evaluateCertificateRevocation = evaluateCertificateRevocation;
1279
+ exports.evaluateTimestampAuthority = evaluateTimestampAuthority;
1280
+ exports.extractAllTagText = extractAllTagText;
1281
+ exports.extractFirstTagText = extractFirstTagText;
1282
+ exports.extractOcspUrls = extractOcspUrls;
1283
+ exports.extractPemCertificatesFromText = extractPemCertificatesFromText;
1284
+ exports.extractReferenceTransforms = extractReferenceTransforms;
1285
+ exports.extractTagAttribute = extractTagAttribute;
1286
+ exports.getFirstDescendantElementByLocalName = getFirstDescendantElementByLocalName;
1287
+ exports.getNodeLocalName = getNodeLocalName;
1288
+ exports.getSignatureValidationPolicy = getSignatureValidationPolicy;
1289
+ exports.inspectPptxDigitalSignatures = inspectPptxDigitalSignatures;
1290
+ exports.isValidBase64 = isValidBase64;
1291
+ exports.loadEnterpriseTrustRoots = loadEnterpriseTrustRoots;
1292
+ exports.loadSigningMaterialFromBuffer = loadSigningMaterialFromBuffer;
1293
+ exports.normalizePartPath = normalizePartPath;
1294
+ exports.parseOcspResponseStatus = parseOcspResponseStatus;
1295
+ exports.pemCertificateToBase64 = pemCertificateToBase64;
1296
+ exports.resolveReferenceUriToPart = resolveReferenceUriToPart;
1297
+ exports.signPptxWithCertificate = signPptxWithCertificate;
1298
+ exports.validateCertificateChain = validateCertificateChain;
1299
+ exports.verifySignatureValue = verifySignatureValue;