pretext-pdf 1.1.0 → 1.6.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.
- package/CHANGELOG.md +687 -0
- package/README.md +83 -8
- package/dist/allowed-props.d.ts +76 -0
- package/dist/allowed-props.d.ts.map +1 -1
- package/dist/allowed-props.js.map +1 -1
- package/dist/assets/generators/barcode.d.ts +9 -0
- package/dist/assets/generators/barcode.d.ts.map +1 -0
- package/dist/assets/generators/barcode.js +24 -0
- package/dist/assets/generators/barcode.js.map +1 -0
- package/dist/assets/generators/chart.d.ts +13 -0
- package/dist/assets/generators/chart.d.ts.map +1 -0
- package/dist/assets/generators/chart.js +32 -0
- package/dist/assets/generators/chart.js.map +1 -0
- package/dist/assets/generators/qr.d.ts +9 -0
- package/dist/assets/generators/qr.d.ts.map +1 -0
- package/dist/assets/generators/qr.js +25 -0
- package/dist/assets/generators/qr.js.map +1 -0
- package/dist/assets/index.d.ts +19 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +19 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/loaders/images.d.ts +20 -0
- package/dist/assets/loaders/images.d.ts.map +1 -0
- package/dist/assets/loaders/images.js +69 -0
- package/dist/assets/loaders/images.js.map +1 -0
- package/dist/assets/loaders/orchestrator.d.ts +24 -0
- package/dist/assets/loaders/orchestrator.d.ts.map +1 -0
- package/dist/assets/loaders/orchestrator.js +109 -0
- package/dist/assets/loaders/orchestrator.js.map +1 -0
- package/dist/assets/loaders/vectors.d.ts +25 -0
- package/dist/assets/loaders/vectors.d.ts.map +1 -0
- package/dist/assets/loaders/vectors.js +118 -0
- package/dist/assets/loaders/vectors.js.map +1 -0
- package/dist/assets/loaders/watermark.d.ts +12 -0
- package/dist/assets/loaders/watermark.d.ts.map +1 -0
- package/dist/assets/loaders/watermark.js +40 -0
- package/dist/assets/loaders/watermark.js.map +1 -0
- package/dist/assets/security/fetch.d.ts +14 -0
- package/dist/assets/security/fetch.d.ts.map +1 -0
- package/dist/assets/security/fetch.js +112 -0
- package/dist/assets/security/fetch.js.map +1 -0
- package/dist/assets/security/ipv4-normalize.d.ts +28 -0
- package/dist/assets/security/ipv4-normalize.d.ts.map +1 -0
- package/dist/assets/security/ipv4-normalize.js +116 -0
- package/dist/assets/security/ipv4-normalize.js.map +1 -0
- package/dist/assets/security/path-allowlist.d.ts +12 -0
- package/dist/assets/security/path-allowlist.d.ts.map +1 -0
- package/dist/assets/security/path-allowlist.js +26 -0
- package/dist/assets/security/path-allowlist.js.map +1 -0
- package/dist/assets/security/url-validation.d.ts +22 -0
- package/dist/assets/security/url-validation.d.ts.map +1 -0
- package/dist/assets/security/url-validation.js +164 -0
- package/dist/assets/security/url-validation.js.map +1 -0
- package/dist/assets/svg/dimensions.d.ts +19 -0
- package/dist/assets/svg/dimensions.d.ts.map +1 -0
- package/dist/assets/svg/dimensions.js +43 -0
- package/dist/assets/svg/dimensions.js.map +1 -0
- package/dist/assets/svg/rasterize.d.ts +6 -0
- package/dist/assets/svg/rasterize.d.ts.map +1 -0
- package/dist/assets/svg/rasterize.js +38 -0
- package/dist/assets/svg/rasterize.js.map +1 -0
- package/dist/assets/svg/resolve-content.d.ts +16 -0
- package/dist/assets/svg/resolve-content.d.ts.map +1 -0
- package/dist/assets/svg/resolve-content.js +38 -0
- package/dist/assets/svg/resolve-content.js.map +1 -0
- package/dist/assets/svg/sanitize.d.ts +22 -0
- package/dist/assets/svg/sanitize.d.ts.map +1 -0
- package/dist/assets/svg/sanitize.js +46 -0
- package/dist/assets/svg/sanitize.js.map +1 -0
- package/dist/assets/util/redact-path.d.ts +14 -0
- package/dist/assets/util/redact-path.d.ts.map +1 -0
- package/dist/assets/util/redact-path.js +16 -0
- package/dist/assets/util/redact-path.js.map +1 -0
- package/dist/assets.d.ts +10 -27
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +10 -549
- package/dist/assets.js.map +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -1
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +11 -1
- package/dist/cli.js.map +1 -1
- package/dist/compat.d.ts +63 -1
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +42 -5
- package/dist/compat.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +8 -10
- package/dist/fonts.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/layout-state.d.ts +1 -1
- package/dist/layout-state.d.ts.map +1 -1
- package/dist/layout-state.js +5 -0
- package/dist/layout-state.js.map +1 -1
- package/dist/measure-blocks/float-group.d.ts +9 -0
- package/dist/measure-blocks/float-group.d.ts.map +1 -0
- package/dist/measure-blocks/float-group.js +103 -0
- package/dist/measure-blocks/float-group.js.map +1 -0
- package/dist/measure-blocks/helpers.d.ts +44 -0
- package/dist/measure-blocks/helpers.d.ts.map +1 -0
- package/dist/measure-blocks/helpers.js +43 -0
- package/dist/measure-blocks/helpers.js.map +1 -0
- package/dist/measure-blocks/highlight.d.ts +26 -0
- package/dist/measure-blocks/highlight.d.ts.map +1 -0
- package/dist/measure-blocks/highlight.js +169 -0
- package/dist/measure-blocks/highlight.js.map +1 -0
- package/dist/measure-blocks/image.d.ts +9 -0
- package/dist/measure-blocks/image.d.ts.map +1 -0
- package/dist/measure-blocks/image.js +136 -0
- package/dist/measure-blocks/image.js.map +1 -0
- package/dist/measure-blocks/index.d.ts +24 -0
- package/dist/measure-blocks/index.d.ts.map +1 -0
- package/dist/measure-blocks/index.js +179 -0
- package/dist/measure-blocks/index.js.map +1 -0
- package/dist/measure-blocks/list.d.ts +8 -0
- package/dist/measure-blocks/list.d.ts.map +1 -0
- package/dist/measure-blocks/list.js +108 -0
- package/dist/measure-blocks/list.js.map +1 -0
- package/dist/measure-blocks/simple-blocks.d.ts +18 -0
- package/dist/measure-blocks/simple-blocks.d.ts.map +1 -0
- package/dist/measure-blocks/simple-blocks.js +121 -0
- package/dist/measure-blocks/simple-blocks.js.map +1 -0
- package/dist/measure-blocks/table/columns.d.ts +17 -0
- package/dist/measure-blocks/table/columns.d.ts.map +1 -0
- package/dist/measure-blocks/table/columns.js +83 -0
- package/dist/measure-blocks/table/columns.js.map +1 -0
- package/dist/measure-blocks/table/measure.d.ts +8 -0
- package/dist/measure-blocks/table/measure.d.ts.map +1 -0
- package/dist/measure-blocks/table/measure.js +231 -0
- package/dist/measure-blocks/table/measure.js.map +1 -0
- package/dist/measure-blocks/table/spans.d.ts +25 -0
- package/dist/measure-blocks/table/spans.d.ts.map +1 -0
- package/dist/measure-blocks/table/spans.js +55 -0
- package/dist/measure-blocks/table/spans.js.map +1 -0
- package/dist/measure-blocks/text-blocks.d.ts +17 -0
- package/dist/measure-blocks/text-blocks.d.ts.map +1 -0
- package/dist/measure-blocks/text-blocks.js +242 -0
- package/dist/measure-blocks/text-blocks.js.map +1 -0
- package/dist/measure-text.d.ts +21 -3
- package/dist/measure-text.d.ts.map +1 -1
- package/dist/measure-text.js +87 -36
- package/dist/measure-text.js.map +1 -1
- package/dist/measure.d.ts +1 -1
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +8 -6
- package/dist/measure.js.map +1 -1
- package/dist/node-polyfill.d.ts.map +1 -1
- package/dist/node-polyfill.js +9 -0
- package/dist/node-polyfill.js.map +1 -1
- package/dist/pipeline-footnotes.d.ts +1 -1
- package/dist/pipeline-footnotes.d.ts.map +1 -1
- package/dist/pipeline-toc.d.ts +1 -1
- package/dist/pipeline-toc.d.ts.map +1 -1
- package/dist/pipeline.d.ts +3 -3
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +4 -5
- package/dist/pipeline.js.map +1 -1
- package/dist/plugin-types.d.ts +1 -1
- package/dist/plugin-types.d.ts.map +1 -1
- package/dist/post-process.d.ts +2 -2
- package/dist/post-process.d.ts.map +1 -1
- package/dist/post-process.js +32 -9
- package/dist/post-process.js.map +1 -1
- package/dist/render-blocks/blockquote.d.ts +7 -0
- package/dist/render-blocks/blockquote.d.ts.map +1 -0
- package/dist/render-blocks/blockquote.js +87 -0
- package/dist/render-blocks/blockquote.js.map +1 -0
- package/dist/render-blocks/callout.d.ts +7 -0
- package/dist/render-blocks/callout.d.ts.map +1 -0
- package/dist/render-blocks/callout.js +84 -0
- package/dist/render-blocks/callout.js.map +1 -0
- package/dist/render-blocks/code.d.ts +7 -0
- package/dist/render-blocks/code.d.ts.map +1 -0
- package/dist/render-blocks/code.js +84 -0
- package/dist/render-blocks/code.js.map +1 -0
- package/dist/render-blocks/footnote.d.ts +11 -0
- package/dist/render-blocks/footnote.d.ts.map +1 -0
- package/dist/render-blocks/footnote.js +45 -0
- package/dist/render-blocks/footnote.js.map +1 -0
- package/dist/render-blocks/header-footer.d.ts +11 -0
- package/dist/render-blocks/header-footer.d.ts.map +1 -0
- package/dist/render-blocks/header-footer.js +56 -0
- package/dist/render-blocks/header-footer.js.map +1 -0
- package/dist/render-blocks/hr.d.ts +7 -0
- package/dist/render-blocks/hr.d.ts.map +1 -0
- package/dist/render-blocks/hr.js +24 -0
- package/dist/render-blocks/hr.js.map +1 -0
- package/dist/render-blocks/image.d.ts +9 -0
- package/dist/render-blocks/image.d.ts.map +1 -0
- package/dist/render-blocks/image.js +135 -0
- package/dist/render-blocks/image.js.map +1 -0
- package/dist/render-blocks/index.d.ts +17 -0
- package/dist/render-blocks/index.d.ts.map +1 -0
- package/dist/render-blocks/index.js +17 -0
- package/dist/render-blocks/index.js.map +1 -0
- package/dist/render-blocks/list-item.d.ts +7 -0
- package/dist/render-blocks/list-item.d.ts.map +1 -0
- package/dist/render-blocks/list-item.js +80 -0
- package/dist/render-blocks/list-item.js.map +1 -0
- package/dist/render-blocks/rich.d.ts +7 -0
- package/dist/render-blocks/rich.d.ts.map +1 -0
- package/dist/render-blocks/rich.js +160 -0
- package/dist/render-blocks/rich.js.map +1 -0
- package/dist/render-blocks/table.d.ts +7 -0
- package/dist/render-blocks/table.d.ts.map +1 -0
- package/dist/render-blocks/table.js +139 -0
- package/dist/render-blocks/table.js.map +1 -0
- package/dist/render-blocks/text.d.ts +7 -0
- package/dist/render-blocks/text.d.ts.map +1 -0
- package/dist/render-blocks/text.js +183 -0
- package/dist/render-blocks/text.js.map +1 -0
- package/dist/render-blocks/watermark.d.ts +8 -0
- package/dist/render-blocks/watermark.d.ts.map +1 -0
- package/dist/render-blocks/watermark.js +52 -0
- package/dist/render-blocks/watermark.js.map +1 -0
- package/dist/render-extras.d.ts.map +1 -1
- package/dist/render-extras.js +1 -2
- package/dist/render-extras.js.map +1 -1
- package/dist/render-utils.d.ts.map +1 -1
- package/dist/render-utils.js +10 -6
- package/dist/render-utils.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +9 -3
- package/dist/render.js.map +1 -1
- package/dist/rich-text.d.ts +2 -1
- package/dist/rich-text.d.ts.map +1 -1
- package/dist/rich-text.js +0 -1
- package/dist/rich-text.js.map +1 -1
- package/dist/types-internal.d.ts +19 -3
- package/dist/types-internal.d.ts.map +1 -1
- package/dist/types-public/document.d.ts +261 -0
- package/dist/types-public/document.d.ts.map +1 -0
- package/dist/types-public/document.js +2 -0
- package/dist/types-public/document.js.map +1 -0
- package/dist/types-public/elements-block.d.ts +246 -0
- package/dist/types-public/elements-block.d.ts.map +1 -0
- package/dist/types-public/elements-block.js +8 -0
- package/dist/types-public/elements-block.js.map +1 -0
- package/dist/types-public/elements-media.d.ts +199 -0
- package/dist/types-public/elements-media.d.ts.map +1 -0
- package/dist/types-public/elements-media.js +2 -0
- package/dist/types-public/elements-media.js.map +1 -0
- package/dist/types-public/elements-text.d.ts +327 -0
- package/dist/types-public/elements-text.d.ts.map +1 -0
- package/dist/types-public/elements-text.js +2 -0
- package/dist/types-public/elements-text.js.map +1 -0
- package/dist/types-public/index.d.ts +14 -0
- package/dist/types-public/index.d.ts.map +1 -0
- package/dist/types-public/index.js +2 -0
- package/dist/types-public/index.js.map +1 -0
- package/dist/types-public/render-options.d.ts +38 -0
- package/dist/types-public/render-options.d.ts.map +1 -0
- package/dist/types-public/render-options.js +2 -0
- package/dist/types-public/render-options.js.map +1 -0
- package/dist/types-public/union.d.ts +13 -0
- package/dist/types-public/union.d.ts.map +1 -0
- package/dist/types-public/union.js +2 -0
- package/dist/types-public/union.js.map +1 -0
- package/dist/types-public/validation.d.ts +64 -0
- package/dist/types-public/validation.d.ts.map +1 -0
- package/dist/types-public/validation.js +2 -0
- package/dist/types-public/validation.js.map +1 -0
- package/dist/types-public.d.ts +5 -1081
- package/dist/types-public.d.ts.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validate/document.d.ts +28 -0
- package/dist/validate/document.d.ts.map +1 -0
- package/dist/validate/document.js +295 -0
- package/dist/validate/document.js.map +1 -0
- package/dist/validate/elements/forms-floats.d.ts +19 -0
- package/dist/validate/elements/forms-floats.d.ts.map +1 -0
- package/dist/validate/elements/forms-floats.js +96 -0
- package/dist/validate/elements/forms-floats.js.map +1 -0
- package/dist/validate/elements/list.d.ts +10 -0
- package/dist/validate/elements/list.d.ts.map +1 -0
- package/dist/validate/elements/list.js +66 -0
- package/dist/validate/elements/list.js.map +1 -0
- package/dist/validate/elements/media.d.ts +23 -0
- package/dist/validate/elements/media.d.ts.map +1 -0
- package/dist/validate/elements/media.js +179 -0
- package/dist/validate/elements/media.js.map +1 -0
- package/dist/validate/elements/structural-simple.d.ts +21 -0
- package/dist/validate/elements/structural-simple.d.ts.map +1 -0
- package/dist/validate/elements/structural-simple.js +63 -0
- package/dist/validate/elements/structural-simple.js.map +1 -0
- package/dist/validate/elements/structural.d.ts +12 -0
- package/dist/validate/elements/structural.d.ts.map +1 -0
- package/dist/validate/elements/structural.js +12 -0
- package/dist/validate/elements/structural.js.map +1 -0
- package/dist/validate/elements/table.d.ts +10 -0
- package/dist/validate/elements/table.d.ts.map +1 -0
- package/dist/validate/elements/table.js +165 -0
- package/dist/validate/elements/table.js.map +1 -0
- package/dist/validate/elements/text.d.ts +26 -0
- package/dist/validate/elements/text.d.ts.map +1 -0
- package/dist/validate/elements/text.js +331 -0
- package/dist/validate/elements/text.js.map +1 -0
- package/dist/validate/errors.d.ts +9 -0
- package/dist/validate/errors.d.ts.map +1 -0
- package/dist/validate/errors.js +43 -0
- package/dist/validate/errors.js.map +1 -0
- package/dist/validate/fonts.d.ts +11 -0
- package/dist/validate/fonts.d.ts.map +1 -0
- package/dist/validate/fonts.js +118 -0
- package/dist/validate/fonts.js.map +1 -0
- package/dist/validate/helpers.d.ts +76 -0
- package/dist/validate/helpers.d.ts.map +1 -0
- package/dist/validate/helpers.js +169 -0
- package/dist/validate/helpers.js.map +1 -0
- package/dist/validate/index.d.ts +37 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +279 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate.d.ts +6 -18
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +6 -1582
- package/dist/validate.js.map +1 -1
- package/dist/vendor/pretext/VERSION.d.ts +3 -0
- package/dist/vendor/pretext/VERSION.d.ts.map +1 -0
- package/dist/vendor/pretext/VERSION.js +12 -0
- package/dist/vendor/pretext/VERSION.js.map +1 -0
- package/dist/version-check.d.ts +47 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +75 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +27 -8
- package/dist/measure-blocks.d.ts +0 -26
- package/dist/measure-blocks.d.ts.map +0 -1
- package/dist/measure-blocks.js +0 -1317
- package/dist/measure-blocks.js.map +0 -1
- package/dist/render-blocks.d.ts +0 -28
- package/dist/render-blocks.d.ts.map +0 -1
- package/dist/render-blocks.js +0 -1059
- package/dist/render-blocks.js.map +0 -1
package/dist/assets.js
CHANGED
|
@@ -1,554 +1,15 @@
|
|
|
1
|
-
import { PretextPdfError } from './errors.js';
|
|
2
|
-
import { findPlugin, runPluginLoadAsset } from './plugin-registry.js';
|
|
3
|
-
// ─── Security helpers ─────────────────────────────────────────────────────────
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
6
|
-
* No-op when allowedFileDirs is unset (backwards-compatible default).
|
|
7
|
-
*/
|
|
8
|
-
export function assertPathAllowed(resolvedPath, allowedDirs, label) {
|
|
9
|
-
if (!allowedDirs || allowedDirs.length === 0)
|
|
10
|
-
return;
|
|
11
|
-
const norm = resolvedPath.replace(/\\/g, '/');
|
|
12
|
-
const allowed = allowedDirs.some(dir => {
|
|
13
|
-
const d = dir.replace(/\\/g, '/').replace(/\/$/, '');
|
|
14
|
-
return norm === d || norm.startsWith(d + '/');
|
|
15
|
-
});
|
|
16
|
-
if (!allowed) {
|
|
17
|
-
throw new PretextPdfError('PATH_TRAVERSAL', `${label} src is outside allowedFileDirs. Configure doc.allowedFileDirs to include the file's directory.`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate a remote URL before fetching:
|
|
22
|
-
* - Rejects http:// (plaintext only)
|
|
23
|
-
* - Rejects private/internal IP ranges (SSRF prevention), including IPv4-mapped IPv6
|
|
24
|
-
* forms like [::ffff:127.0.0.1] which would otherwise bypass dotted-decimal regexes.
|
|
25
|
-
* Throws IMAGE_LOAD_FAILED or SVG_LOAD_FAILED on violations.
|
|
26
|
-
*/
|
|
27
|
-
export function assertSafeUrl(url, errorCode, label) {
|
|
28
|
-
let parsed;
|
|
29
|
-
try {
|
|
30
|
-
parsed = new URL(url);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw new PretextPdfError(errorCode, `${label}: invalid URL`);
|
|
34
|
-
}
|
|
35
|
-
if (parsed.protocol === 'http:') {
|
|
36
|
-
throw new PretextPdfError(errorCode, `${label}: HTTP URLs are not allowed — use HTTPS`);
|
|
37
|
-
}
|
|
38
|
-
const raw = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, ''); // strip IPv6 brackets
|
|
39
|
-
// Normalize IPv4-mapped IPv6 to its dotted-decimal form so the IPv4
|
|
40
|
-
// private-range regexes catch it. WHATWG URL normalizes `[::ffff:127.0.0.1]`
|
|
41
|
-
// to `[::ffff:7f00:1]` (hex form), so we must handle BOTH the dotted
|
|
42
|
-
// (`::ffff:127.0.0.1`) and hex-compressed (`::ffff:7f00:1`) forms.
|
|
43
|
-
// Without this an attacker can bypass the localhost/private-IP check via
|
|
44
|
-
// `https://[::ffff:127.0.0.1]/admin` → resolves to 127.0.0.1.
|
|
45
|
-
let h = raw;
|
|
46
|
-
const v4Dotted = raw.match(/^::ffff:(?:0:)?(\d{1,3}(?:\.\d{1,3}){3})$/i);
|
|
47
|
-
const v4Hex = raw.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);
|
|
48
|
-
if (v4Dotted) {
|
|
49
|
-
h = v4Dotted[1];
|
|
50
|
-
}
|
|
51
|
-
else if (v4Hex) {
|
|
52
|
-
const hi = parseInt(v4Hex[1], 16);
|
|
53
|
-
const lo = parseInt(v4Hex[2], 16);
|
|
54
|
-
h = `${(hi >> 8) & 0xff}.${hi & 0xff}.${(lo >> 8) & 0xff}.${lo & 0xff}`;
|
|
55
|
-
}
|
|
56
|
-
const isPrivate = h === 'localhost' ||
|
|
57
|
-
h === '0.0.0.0' ||
|
|
58
|
-
h === '::' || // IPv6 unspecified address (== 0.0.0.0)
|
|
59
|
-
h === '::1' ||
|
|
60
|
-
raw === '::1' || raw === '::' || // also catch un-normalized IPv6 forms
|
|
61
|
-
/^127\./.test(h) ||
|
|
62
|
-
/^10\./.test(h) ||
|
|
63
|
-
/^192\.168\./.test(h) ||
|
|
64
|
-
/^172\.(1[6-9]|2\d|3[01])\./.test(h) ||
|
|
65
|
-
/^169\.254\./.test(h) || // link-local / AWS IMDS
|
|
66
|
-
/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(h) || // CGNAT RFC 6598
|
|
67
|
-
raw.startsWith('fc') || raw.startsWith('fd') || // IPv6 ULA fc00::/7
|
|
68
|
-
/^fe[89ab]/i.test(raw); // IPv6 link-local fe80::/10
|
|
69
|
-
if (isPrivate) {
|
|
70
|
-
throw new PretextPdfError(errorCode, `${label}: connections to private or internal addresses are not allowed`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Fetch with a hard 10-second timeout AND a manual redirect chain that
|
|
75
|
-
* re-validates each hop against `assertSafeUrl`. Without manual redirect
|
|
76
|
-
* handling, a public URL could 302 to `http://127.0.0.1:8080/internal`
|
|
77
|
-
* and bypass the upfront check — the connection would still be made to
|
|
78
|
-
* the private target.
|
|
79
|
-
*/
|
|
80
|
-
async function fetchWithTimeout(url, errorCode, label) {
|
|
81
|
-
const MAX_REDIRECTS = 3;
|
|
82
|
-
let currentUrl = url;
|
|
83
|
-
for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
|
|
84
|
-
if (hop > 0)
|
|
85
|
-
assertSafeUrl(currentUrl, errorCode, label);
|
|
86
|
-
const controller = new AbortController();
|
|
87
|
-
const timer = setTimeout(() => controller.abort(), 10_000);
|
|
88
|
-
let res;
|
|
89
|
-
try {
|
|
90
|
-
res = await fetch(currentUrl, { signal: controller.signal, redirect: 'manual' });
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
clearTimeout(timer);
|
|
94
|
-
}
|
|
95
|
-
// Browser fetch returns opaqueredirect (status 0) for cross-origin redirects.
|
|
96
|
-
// We treat that the same as a redirect we can't safely follow.
|
|
97
|
-
if (res.type === 'opaqueredirect') {
|
|
98
|
-
throw new PretextPdfError(errorCode, `${label}: cannot follow opaque redirect (browser CORS). Pre-resolve the URL.`);
|
|
99
|
-
}
|
|
100
|
-
if (res.status >= 300 && res.status < 400) {
|
|
101
|
-
const loc = res.headers.get('Location');
|
|
102
|
-
if (!loc)
|
|
103
|
-
throw new PretextPdfError(errorCode, `${label}: redirect (${res.status}) with no Location header`);
|
|
104
|
-
currentUrl = new URL(loc, currentUrl).toString();
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
return res;
|
|
108
|
-
}
|
|
109
|
-
throw new PretextPdfError(errorCode, `${label}: too many redirects (max ${MAX_REDIRECTS})`);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Strip dangerous content from SVG before rasterization:
|
|
113
|
-
* - <script> blocks
|
|
114
|
-
* - on* event handler attributes
|
|
115
|
-
* - <image>/<use> with file://, data:, or javascript: hrefs (local-file and injection vectors)
|
|
116
|
-
*/
|
|
117
|
-
function sanitizeSvg(svg) {
|
|
118
|
-
// Skip regex passes on oversized strings — canvas will reject them anyway
|
|
119
|
-
if (svg.length > SVG_MAX_BYTES)
|
|
120
|
-
return svg;
|
|
121
|
-
// Remove self-closing <script/> then paired <script>...</script> blocks
|
|
122
|
-
let s = svg.replace(/<script\b[^>]*\/>/gi, '');
|
|
123
|
-
s = s.replace(/<script[\s\S]*?<\/script>/gi, '');
|
|
124
|
-
// Remove event handler attributes (onload, onclick, onerror, etc.)
|
|
125
|
-
s = s.replace(/\bon\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi, '');
|
|
126
|
-
// Remove <image> and <use> hrefs pointing to unsafe schemes
|
|
127
|
-
s = s.replace(/(<(?:image|use)\b[^>]*?)\s+(?:xlink:)?href\s*=\s*["'](?:file|data|javascript):[^"']*["']/gi, '$1');
|
|
128
|
-
return s;
|
|
129
|
-
}
|
|
130
|
-
/** Return just the filename from a path — used in error messages to avoid leaking directory structure */
|
|
131
|
-
function redactPath(src) {
|
|
132
|
-
return src.replace(/\\/g, '/').split('/').pop() ?? '(file)';
|
|
133
|
-
}
|
|
134
|
-
// ─── SVG helpers ──────────────────────────────────────────────────────────────
|
|
135
|
-
const SVG_MAX_BYTES = 5 * 1024 * 1024; // 5 MB — prevent ReDoS on giant SVG strings
|
|
136
|
-
function parseSvgViewBox(svg) {
|
|
137
|
-
if (svg.length > SVG_MAX_BYTES)
|
|
138
|
-
return null;
|
|
139
|
-
const match = svg.match(/viewBox=["']([^"']+)["']/);
|
|
140
|
-
if (!match)
|
|
141
|
-
return null;
|
|
142
|
-
const parts = match[1].split(/[\s,]+/).map(Number);
|
|
143
|
-
const w = parts[2], h = parts[3];
|
|
144
|
-
if (!w || !h || !isFinite(w) || !isFinite(h) || w <= 0 || h <= 0)
|
|
145
|
-
return null;
|
|
146
|
-
return { width: w, height: h };
|
|
147
|
-
}
|
|
148
|
-
function parseSvgAttributes(svg) {
|
|
149
|
-
if (svg.length > SVG_MAX_BYTES)
|
|
150
|
-
return null;
|
|
151
|
-
const wMatch = svg.match(/<svg[^>]*\swidth=["'](\d+(?:\.\d+)?)["']/);
|
|
152
|
-
const hMatch = svg.match(/<svg[^>]*\sheight=["'](\d+(?:\.\d+)?)["']/);
|
|
153
|
-
if (!wMatch || !hMatch)
|
|
154
|
-
return null;
|
|
155
|
-
const w = Number(wMatch[1]), h = Number(hMatch[1]);
|
|
156
|
-
if (!w || !h || w <= 0 || h <= 0)
|
|
157
|
-
return null;
|
|
158
|
-
return { width: w, height: h };
|
|
159
|
-
}
|
|
160
|
-
function resolveSvgDimensions(el, contentWidth) {
|
|
161
|
-
const svgStr = el.svg ?? '';
|
|
162
|
-
const viewbox = parseSvgViewBox(svgStr) ?? parseSvgAttributes(svgStr);
|
|
163
|
-
const aspectRatio = viewbox ? viewbox.height / viewbox.width : null;
|
|
164
|
-
if (el.width !== undefined && el.height !== undefined) {
|
|
165
|
-
return { widthPt: el.width, heightPt: el.height };
|
|
166
|
-
}
|
|
167
|
-
if (el.width !== undefined) {
|
|
168
|
-
return { widthPt: el.width, heightPt: aspectRatio !== null ? el.width * aspectRatio : el.width };
|
|
169
|
-
}
|
|
170
|
-
if (el.height !== undefined) {
|
|
171
|
-
return { widthPt: aspectRatio !== null ? el.height / aspectRatio : el.height, heightPt: el.height };
|
|
172
|
-
}
|
|
173
|
-
const widthPt = contentWidth;
|
|
174
|
-
const heightPt = aspectRatio !== null ? widthPt * aspectRatio : 200;
|
|
175
|
-
return { widthPt, heightPt };
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Resolve SVG content string from either an inline `svg` field or a `src` file/URL.
|
|
179
|
-
* Throws PretextPdfError if neither is provided or the source cannot be loaded.
|
|
180
|
-
*/
|
|
181
|
-
async function resolveSvgContent(el, allowedFileDirs) {
|
|
182
|
-
if (el.svg)
|
|
183
|
-
return sanitizeSvg(el.svg);
|
|
184
|
-
if (!el.src) {
|
|
185
|
-
throw new PretextPdfError('SVG_LOAD_FAILED', "SvgElement requires either 'svg' (inline string) or 'src' (file path or https:// URL)");
|
|
186
|
-
}
|
|
187
|
-
if (el.src.startsWith('https://') || el.src.startsWith('http://')) {
|
|
188
|
-
assertSafeUrl(el.src, 'SVG_LOAD_FAILED', 'SVG');
|
|
189
|
-
let resp;
|
|
190
|
-
try {
|
|
191
|
-
resp = await fetchWithTimeout(el.src, 'SVG_LOAD_FAILED', 'SVG');
|
|
192
|
-
}
|
|
193
|
-
catch (err) {
|
|
194
|
-
throw new PretextPdfError('SVG_LOAD_FAILED', `SVG URL fetch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
195
|
-
}
|
|
196
|
-
if (!resp.ok) {
|
|
197
|
-
throw new PretextPdfError('SVG_LOAD_FAILED', `SVG URL returned HTTP ${resp.status}`);
|
|
198
|
-
}
|
|
199
|
-
return sanitizeSvg(await resp.text());
|
|
200
|
-
}
|
|
201
|
-
const [fs, pathMod] = await Promise.all([import('fs'), import('path')]);
|
|
202
|
-
const filePath = pathMod.resolve(el.src);
|
|
203
|
-
assertPathAllowed(filePath, allowedFileDirs, 'SVG');
|
|
204
|
-
if (!fs.existsSync(filePath)) {
|
|
205
|
-
throw new PretextPdfError('SVG_LOAD_FAILED', `SVG file not found: "${redactPath(el.src)}"`);
|
|
206
|
-
}
|
|
207
|
-
return sanitizeSvg(fs.readFileSync(filePath, 'utf-8'));
|
|
208
|
-
}
|
|
209
|
-
// ─── QR Code generator ────────────────────────────────────────────────────────
|
|
210
|
-
async function generateQrSvg(el) {
|
|
211
|
-
let qrLib;
|
|
212
|
-
try {
|
|
213
|
-
qrLib = await import('qrcode');
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
throw new PretextPdfError('QR_DEP_MISSING', 'qr-code elements require the qrcode package. Install it: npm install qrcode');
|
|
217
|
-
}
|
|
218
|
-
try {
|
|
219
|
-
return await qrLib.toString(el.data, {
|
|
220
|
-
type: 'svg',
|
|
221
|
-
errorCorrectionLevel: el.errorCorrectionLevel ?? 'M',
|
|
222
|
-
margin: el.margin ?? 4,
|
|
223
|
-
color: {
|
|
224
|
-
dark: el.foreground ?? '#000000',
|
|
225
|
-
light: el.background ?? '#ffffff',
|
|
226
|
-
},
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
catch (err) {
|
|
230
|
-
throw new PretextPdfError('QR_GENERATE_FAILED', `QR code generation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
// ─── Barcode generator ────────────────────────────────────────────────────────
|
|
234
|
-
async function generateBarcodeSvg(el) {
|
|
235
|
-
let bwip;
|
|
236
|
-
try {
|
|
237
|
-
bwip = await import('bwip-js');
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
throw new PretextPdfError('BARCODE_DEP_MISSING', 'barcode elements require the bwip-js package. Install it: npm install bwip-js');
|
|
241
|
-
}
|
|
242
|
-
try {
|
|
243
|
-
return bwip.toSVG({
|
|
244
|
-
bcid: el.symbology,
|
|
245
|
-
text: el.data,
|
|
246
|
-
scale: 3,
|
|
247
|
-
includetext: el.includeText !== false,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
catch (err) {
|
|
251
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
252
|
-
const isSymbology = msg.toLowerCase().includes('unknown') || msg.toLowerCase().includes('bcid');
|
|
253
|
-
throw new PretextPdfError(isSymbology ? 'BARCODE_SYMBOLOGY_INVALID' : 'BARCODE_GENERATE_FAILED', `Barcode generation failed (symbology: '${el.symbology}'): ${msg}`);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
// ─── Chart generator (vega-lite, optional) ────────────────────────────────────
|
|
257
|
-
async function generateChartSvg(el, contentWidth) {
|
|
258
|
-
let vegaLite;
|
|
259
|
-
let vega;
|
|
260
|
-
try {
|
|
261
|
-
vegaLite = await import('vega-lite');
|
|
262
|
-
vega = await import('vega');
|
|
263
|
-
}
|
|
264
|
-
catch {
|
|
265
|
-
throw new PretextPdfError('CHART_DEP_MISSING', 'chart elements require vega and vega-lite packages. Install them: npm install vega vega-lite');
|
|
266
|
-
}
|
|
267
|
-
let vegaSpec;
|
|
268
|
-
try {
|
|
269
|
-
const specWithSize = { ...el.spec, width: el.width ?? contentWidth, height: el.height ?? 300 };
|
|
270
|
-
vegaSpec = vegaLite.compile(specWithSize).spec;
|
|
271
|
-
}
|
|
272
|
-
catch (err) {
|
|
273
|
-
throw new PretextPdfError('CHART_SPEC_INVALID', `vega-lite spec compilation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
274
|
-
}
|
|
275
|
-
try {
|
|
276
|
-
// Block all remote data loading to prevent SSRF — vega's default loader
|
|
277
|
-
// follows any data.url in the spec, which could reach internal services
|
|
278
|
-
const blockedLoader = vega.loader();
|
|
279
|
-
blockedLoader.load = (_uri) => Promise.reject(new Error('Remote data loading is disabled in pretext-pdf'));
|
|
280
|
-
const view = new vega.View(vega.parse(vegaSpec), { renderer: 'none', loader: blockedLoader });
|
|
281
|
-
return await view.toSVG();
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
throw new PretextPdfError('CHART_RENDER_FAILED', `Chart SVG rendering failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
// ─── SVG → PDF image ──────────────────────────────────────────────────────────
|
|
288
|
-
async function loadSvgAsImage(svg, widthPt, heightPt, pdfDoc) {
|
|
289
|
-
let canvasLib;
|
|
290
|
-
try {
|
|
291
|
-
canvasLib = await import('@napi-rs/canvas');
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
throw new PretextPdfError('SVG_RENDER_FAILED', 'SVG rendering requires the optional dependency @napi-rs/canvas. Install it with: pnpm add @napi-rs/canvas');
|
|
295
|
-
}
|
|
296
|
-
const scale = 2;
|
|
297
|
-
const widthPx = Math.round(widthPt * scale);
|
|
298
|
-
const heightPx = Math.round(heightPt * scale);
|
|
299
|
-
try {
|
|
300
|
-
const canvas = canvasLib.createCanvas(widthPx, heightPx);
|
|
301
|
-
const ctx = canvas.getContext('2d');
|
|
302
|
-
const img = new canvasLib.Image();
|
|
303
|
-
img.src = Buffer.from(svg);
|
|
304
|
-
ctx.drawImage(img, 0, 0, widthPx, heightPx);
|
|
305
|
-
const pngBuffer = canvas.toBuffer('image/png');
|
|
306
|
-
return pdfDoc.embedPng(pngBuffer);
|
|
307
|
-
}
|
|
308
|
-
catch (err) {
|
|
309
|
-
throw new PretextPdfError('SVG_RENDER_FAILED', `Failed to rasterize SVG: ${err instanceof Error ? err.message : String(err)}`);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Stage 2b: Load and embed all images into pdfDoc.
|
|
314
|
-
* Runs after loadFonts(), receives the same pdfDoc.
|
|
2
|
+
* Back-compat shim — v1.6.0 commit 15/16.
|
|
315
3
|
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
4
|
+
* The assets module was split into src/assets/ during the v1.6.0 sprint
|
|
5
|
+
* (commits 4–15). Everything still flows through dist/assets.js so that
|
|
6
|
+
* internal consumers (fonts.ts, pipeline.ts, post-process.ts) and direct
|
|
7
|
+
* test imports (security-ssrf, security-ipv4-bypass, assets-dns-dedup,
|
|
8
|
+
* svg-sanitizer, public-api-surface) keep working unchanged.
|
|
318
9
|
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
* Images that fail to load (network error, file not found, unreachable URL) are
|
|
323
|
-
* logged as warnings but do not crash the document — the document renders without that image.
|
|
324
|
-
*/
|
|
325
|
-
export async function loadImages(doc, pdfDoc, contentWidth, plugins, logger) {
|
|
326
|
-
const warn = logger ? logger.warn.bind(logger) : console.warn.bind(console);
|
|
327
|
-
const imageMap = new Map();
|
|
328
|
-
const allowedDirs = doc.allowedFileDirs;
|
|
329
|
-
// Collect all ImageElement entries with their content index for stable keys
|
|
330
|
-
const imageEntries = [];
|
|
331
|
-
for (let i = 0; i < doc.content.length; i++) {
|
|
332
|
-
const el = doc.content[i];
|
|
333
|
-
if (el.type === 'image') {
|
|
334
|
-
imageEntries.push({ el, key: `img-${i}` });
|
|
335
|
-
}
|
|
336
|
-
else if (el.type === 'float-group') {
|
|
337
|
-
const fgImage = {
|
|
338
|
-
type: 'image',
|
|
339
|
-
src: el.image.src,
|
|
340
|
-
...(el.image.format !== undefined ? { format: el.image.format } : {}),
|
|
341
|
-
...(el.image.height !== undefined ? { height: el.image.height } : {}),
|
|
342
|
-
align: 'left',
|
|
343
|
-
spaceAfter: 0,
|
|
344
|
-
spaceBefore: 0,
|
|
345
|
-
};
|
|
346
|
-
imageEntries.push({ el: fgImage, key: `float-group-${i}` });
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
// Load all image bytes in parallel; capture both successes and failures
|
|
350
|
-
const loadResults = imageEntries.length > 0
|
|
351
|
-
? await Promise.allSettled(imageEntries.map(async ({ el, key }) => {
|
|
352
|
-
const bytes = await loadImageBytes(el, key, allowedDirs);
|
|
353
|
-
return { el, key, bytes };
|
|
354
|
-
}))
|
|
355
|
-
: [];
|
|
356
|
-
// Process results: embed successful images, warn on failures
|
|
357
|
-
for (let ri = 0; ri < loadResults.length; ri++) {
|
|
358
|
-
const result = loadResults[ri];
|
|
359
|
-
const entry = imageEntries[ri];
|
|
360
|
-
if (result.status === 'rejected') {
|
|
361
|
-
const err = result.reason instanceof Error ? result.reason : new Error(String(result.reason));
|
|
362
|
-
const action = doc.onImageLoadError ? doc.onImageLoadError(entry.el.src, err) : 'skip';
|
|
363
|
-
if (action === 'throw')
|
|
364
|
-
throw err;
|
|
365
|
-
warn(`[pretext-pdf] Image load skipped: ${err.message}`);
|
|
366
|
-
continue;
|
|
367
|
-
}
|
|
368
|
-
const { el, key, bytes } = result.value;
|
|
369
|
-
const resolvedFormat = resolveImageFormat(el, bytes, key);
|
|
370
|
-
try {
|
|
371
|
-
const pdfImage = resolvedFormat === 'png'
|
|
372
|
-
? await pdfDoc.embedPng(bytes)
|
|
373
|
-
: await pdfDoc.embedJpg(bytes);
|
|
374
|
-
imageMap.set(key, pdfImage);
|
|
375
|
-
}
|
|
376
|
-
catch (err) {
|
|
377
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
378
|
-
const action = doc.onImageLoadError ? doc.onImageLoadError(entry.el.src, error) : 'skip';
|
|
379
|
-
if (action === 'throw')
|
|
380
|
-
throw error;
|
|
381
|
-
warn(`[pretext-pdf] Image embed failed: key "${key}" (format: '${resolvedFormat}')`);
|
|
382
|
-
// Continue without this image rather than crashing
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
// Load SVG elements — rasterize to PNG and embed
|
|
386
|
-
for (let i = 0; i < doc.content.length; i++) {
|
|
387
|
-
const el = doc.content[i];
|
|
388
|
-
if (el.type === 'svg') {
|
|
389
|
-
const key = `svg-${i}`;
|
|
390
|
-
const svgContent = await resolveSvgContent(el, allowedDirs);
|
|
391
|
-
const { widthPt, heightPt } = resolveSvgDimensions({ ...el, svg: svgContent }, contentWidth);
|
|
392
|
-
const pdfImage = await loadSvgAsImage(svgContent, widthPt, heightPt, pdfDoc);
|
|
393
|
-
imageMap.set(key, pdfImage);
|
|
394
|
-
}
|
|
395
|
-
else if (el.type === 'qr-code') {
|
|
396
|
-
const key = `qr-${i}`;
|
|
397
|
-
try {
|
|
398
|
-
const svgString = await generateQrSvg(el);
|
|
399
|
-
const sizePt = el.size ?? 80;
|
|
400
|
-
const pdfImage = await loadSvgAsImage(svgString, sizePt, sizePt, pdfDoc);
|
|
401
|
-
imageMap.set(key, pdfImage);
|
|
402
|
-
}
|
|
403
|
-
catch (err) {
|
|
404
|
-
if (err instanceof PretextPdfError)
|
|
405
|
-
throw err;
|
|
406
|
-
warn(`[pretext-pdf] QR code skipped at index ${i}: ${err instanceof Error ? err.message : String(err)}`);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
else if (el.type === 'barcode') {
|
|
410
|
-
const key = `barcode-${i}`;
|
|
411
|
-
try {
|
|
412
|
-
const svgString = await generateBarcodeSvg(el);
|
|
413
|
-
const widthPt = el.width ?? 200;
|
|
414
|
-
const heightPt = el.height ?? 60;
|
|
415
|
-
const pdfImage = await loadSvgAsImage(svgString, widthPt, heightPt, pdfDoc);
|
|
416
|
-
imageMap.set(key, pdfImage);
|
|
417
|
-
}
|
|
418
|
-
catch (err) {
|
|
419
|
-
if (err instanceof PretextPdfError)
|
|
420
|
-
throw err;
|
|
421
|
-
warn(`[pretext-pdf] Barcode skipped at index ${i}: ${err instanceof Error ? err.message : String(err)}`);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
else if (el.type === 'chart') {
|
|
425
|
-
const key = `chart-${i}`;
|
|
426
|
-
try {
|
|
427
|
-
const svgString = await generateChartSvg(el, contentWidth);
|
|
428
|
-
const widthPt = el.width ?? contentWidth;
|
|
429
|
-
const heightPt = el.height ?? 300;
|
|
430
|
-
const pdfImage = await loadSvgAsImage(svgString, widthPt, heightPt, pdfDoc);
|
|
431
|
-
imageMap.set(key, pdfImage);
|
|
432
|
-
}
|
|
433
|
-
catch (err) {
|
|
434
|
-
if (err instanceof PretextPdfError)
|
|
435
|
-
throw err;
|
|
436
|
-
warn(`[pretext-pdf] Chart skipped at index ${i}: ${err instanceof Error ? err.message : String(err)}`);
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
// Load plugin assets
|
|
441
|
-
if (plugins && plugins.length > 0) {
|
|
442
|
-
for (let i = 0; i < doc.content.length; i++) {
|
|
443
|
-
const el = doc.content[i];
|
|
444
|
-
const plugin = findPlugin(plugins, el.type);
|
|
445
|
-
if (!plugin)
|
|
446
|
-
continue;
|
|
447
|
-
try {
|
|
448
|
-
const assetResult = await runPluginLoadAsset(plugin, el, pdfDoc, contentWidth, i);
|
|
449
|
-
if (assetResult) {
|
|
450
|
-
imageMap.set(assetResult.key, assetResult.image);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
catch (err) {
|
|
454
|
-
if (err instanceof PretextPdfError)
|
|
455
|
-
throw err;
|
|
456
|
-
warn(`[pretext-pdf] Plugin '${plugin.type}' loadAsset failed at index ${i}: ${err instanceof Error ? err.message : String(err)}`);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// Load watermark image if provided
|
|
461
|
-
if (doc.watermark?.image) {
|
|
462
|
-
const src = doc.watermark.image;
|
|
463
|
-
try {
|
|
464
|
-
let bytes;
|
|
465
|
-
if (src instanceof Uint8Array) {
|
|
466
|
-
bytes = src;
|
|
467
|
-
}
|
|
468
|
-
else {
|
|
469
|
-
const [fs, pathMod] = await Promise.all([import('fs'), import('path')]);
|
|
470
|
-
const filePath = pathMod.resolve(src);
|
|
471
|
-
assertPathAllowed(filePath, allowedDirs, 'watermark image');
|
|
472
|
-
if (!fs.existsSync(filePath))
|
|
473
|
-
throw new Error(`Watermark image not found`);
|
|
474
|
-
bytes = new Uint8Array(fs.readFileSync(filePath));
|
|
475
|
-
}
|
|
476
|
-
const isPng = bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4E && bytes[3] === 0x47;
|
|
477
|
-
const pdfImage = isPng
|
|
478
|
-
? await pdfDoc.embedPng(bytes)
|
|
479
|
-
: await pdfDoc.embedJpg(bytes);
|
|
480
|
-
imageMap.set('watermark', pdfImage);
|
|
481
|
-
}
|
|
482
|
-
catch (err) {
|
|
483
|
-
if (err instanceof PretextPdfError && err.code === 'PATH_TRAVERSAL')
|
|
484
|
-
throw err;
|
|
485
|
-
warn(`[pretext-pdf] Watermark image skipped: ${err instanceof Error ? err.message : String(err)}`);
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return imageMap;
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Resolve the image format from the element spec, magic bytes, or file extension.
|
|
492
|
-
* Priority: explicit 'png'/'jpg' → magic bytes → file extension → error.
|
|
10
|
+
* Public API contract is enforced by api-extractor (etc/pretext-pdf.api.md);
|
|
11
|
+
* the snapshot tripwire (test/assets-split-tripwire.test.ts) plus the
|
|
12
|
+
* six other G-gates pin the runtime contract.
|
|
493
13
|
*/
|
|
494
|
-
|
|
495
|
-
if (el.format === 'png')
|
|
496
|
-
return 'png';
|
|
497
|
-
if (el.format === 'jpg')
|
|
498
|
-
return 'jpg';
|
|
499
|
-
if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4E && bytes[3] === 0x47)
|
|
500
|
-
return 'png';
|
|
501
|
-
if (bytes[0] === 0xFF && bytes[1] === 0xD8 && bytes[2] === 0xFF)
|
|
502
|
-
return 'jpg';
|
|
503
|
-
if (typeof el.src === 'string') {
|
|
504
|
-
const ext = el.src.toLowerCase().split('.').pop();
|
|
505
|
-
if (ext === 'png')
|
|
506
|
-
return 'png';
|
|
507
|
-
if (ext === 'jpg' || ext === 'jpeg')
|
|
508
|
-
return 'jpg';
|
|
509
|
-
}
|
|
510
|
-
throw new PretextPdfError('IMAGE_FORMAT_MISMATCH', `Image "${key}": format could not be auto-detected. Specify format: 'png' or 'jpg' explicitly.`);
|
|
511
|
-
}
|
|
512
|
-
/** Load image bytes from a URL, file path, or Uint8Array */
|
|
513
|
-
async function loadImageBytes(el, key, allowedDirs) {
|
|
514
|
-
if (el.src instanceof Uint8Array) {
|
|
515
|
-
return el.src;
|
|
516
|
-
}
|
|
517
|
-
const src = el.src;
|
|
518
|
-
if (!src || typeof src !== 'string') {
|
|
519
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": 'src' must be a non-empty string path, URL, or Uint8Array`);
|
|
520
|
-
}
|
|
521
|
-
if (src.startsWith('https://') || src.startsWith('http://')) {
|
|
522
|
-
assertSafeUrl(src, 'IMAGE_LOAD_FAILED', `Image "${key}"`);
|
|
523
|
-
let resp;
|
|
524
|
-
try {
|
|
525
|
-
resp = await fetchWithTimeout(src, 'IMAGE_LOAD_FAILED', `Image "${key}"`);
|
|
526
|
-
}
|
|
527
|
-
catch (err) {
|
|
528
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to fetch URL: ${err instanceof Error ? err.message : String(err)}`);
|
|
529
|
-
}
|
|
530
|
-
if (!resp.ok) {
|
|
531
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": URL returned HTTP ${resp.status}`);
|
|
532
|
-
}
|
|
533
|
-
try {
|
|
534
|
-
return new Uint8Array(await resp.arrayBuffer());
|
|
535
|
-
}
|
|
536
|
-
catch (err) {
|
|
537
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to read response body: ${err instanceof Error ? err.message : String(err)}`);
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
const fs = await import('fs');
|
|
541
|
-
const pathMod = await import('path');
|
|
542
|
-
const filePath = pathMod.resolve(src);
|
|
543
|
-
assertPathAllowed(filePath, allowedDirs, `Image "${key}"`);
|
|
544
|
-
if (!fs.existsSync(filePath)) {
|
|
545
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": file not found — "${redactPath(src)}". Check the path in the image element's 'src' field.`);
|
|
546
|
-
}
|
|
547
|
-
try {
|
|
548
|
-
return new Uint8Array(fs.readFileSync(filePath));
|
|
549
|
-
}
|
|
550
|
-
catch (err) {
|
|
551
|
-
throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to read file "${redactPath(src)}": ${err instanceof Error ? err.message : String(err)}`);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
14
|
+
export * from './assets/index.js';
|
|
554
15
|
//# sourceMappingURL=assets.js.map
|
package/dist/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,mBAAmB,CAAA"}
|
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/builder.js
CHANGED