@arcblock/did-connect-service 4.1.58 → 4.1.59

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.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared security headers for server-rendered HTML responses (see issue #72).
3
+ *
4
+ * connect-service renders login/homepage/admin/invite/OAuth/error pages as raw
5
+ * HTML strings from several different handlers (there is no single Hono app /
6
+ * router that all of them funnel through — see the handlers listed at each
7
+ * `htmlResponse` call site). Without a common send point, every one of those
8
+ * handlers previously built its own `new Response(html, { headers: {...} })`
9
+ * and could silently drop hardening headers. `htmlResponse` is the one place
10
+ * that guarantees they don't: every HTML response gets `X-Frame-Options`,
11
+ * `X-Content-Type-Options`, and a CSP, even though the pages themselves stay
12
+ * wherever they are.
13
+ *
14
+ * This is defense-in-depth, not a substitute for fixing individual XSS sinks
15
+ * (see #62/#63/#64) — it limits what an attacker can do *if* one of those sinks
16
+ * is (or becomes) exploitable: no clickjacking (`frame-ancestors 'none'` +
17
+ * `X-Frame-Options: DENY`), no cross-origin script/style loads, no MIME-sniff
18
+ * smuggling (`nosniff`).
19
+ *
20
+ * CSP trade-off (intentional, see #72 discussion): connect-service's pages rely
21
+ * heavily on inline `<script>` blocks (see `packages/connect-service/CLAUDE.md` —
22
+ * Browser Asset Externalization) — the login/OAuth/admin/invite pages all inline
23
+ * small bootstrap scripts alongside externalized asset bundles. Migrating every
24
+ * inline script to a nonce- or hash-based CSP is a much larger, higher-regression-risk
25
+ * change than this issue calls for, so `script-src`/`style-src` keep `'unsafe-inline'`
26
+ * for now. The policy still meaningfully narrows the blast radius (no foreign script
27
+ * origins, no framing, no arbitrary form submission targets). Tightening to a
28
+ * nonce-based CSP is a good follow-up once the inline-script surface is consolidated.
29
+ */
30
+ export declare const HTML_SECURITY_HEADERS: Readonly<Record<string, string>>;
31
+ /**
32
+ * Build a `Response` for server-rendered HTML. Merges the shared security headers
33
+ * (always applied — they are not overridable via `init.headers`, see #72) with
34
+ * caller-supplied headers (`Content-Type` defaults to `text/html; charset=utf-8`
35
+ * unless the caller sets its own, `Cache-Control` etc. pass through untouched).
36
+ */
37
+ export declare function htmlResponse(html: string, init?: ResponseInit): Response;
38
+ //# sourceMappingURL=security-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-headers.d.ts","sourceRoot":"","sources":["../../src/http/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAmBH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjE,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CASxE"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Shared security headers for server-rendered HTML responses (see issue #72).
3
+ *
4
+ * connect-service renders login/homepage/admin/invite/OAuth/error pages as raw
5
+ * HTML strings from several different handlers (there is no single Hono app /
6
+ * router that all of them funnel through — see the handlers listed at each
7
+ * `htmlResponse` call site). Without a common send point, every one of those
8
+ * handlers previously built its own `new Response(html, { headers: {...} })`
9
+ * and could silently drop hardening headers. `htmlResponse` is the one place
10
+ * that guarantees they don't: every HTML response gets `X-Frame-Options`,
11
+ * `X-Content-Type-Options`, and a CSP, even though the pages themselves stay
12
+ * wherever they are.
13
+ *
14
+ * This is defense-in-depth, not a substitute for fixing individual XSS sinks
15
+ * (see #62/#63/#64) — it limits what an attacker can do *if* one of those sinks
16
+ * is (or becomes) exploitable: no clickjacking (`frame-ancestors 'none'` +
17
+ * `X-Frame-Options: DENY`), no cross-origin script/style loads, no MIME-sniff
18
+ * smuggling (`nosniff`).
19
+ *
20
+ * CSP trade-off (intentional, see #72 discussion): connect-service's pages rely
21
+ * heavily on inline `<script>` blocks (see `packages/connect-service/CLAUDE.md` —
22
+ * Browser Asset Externalization) — the login/OAuth/admin/invite pages all inline
23
+ * small bootstrap scripts alongside externalized asset bundles. Migrating every
24
+ * inline script to a nonce- or hash-based CSP is a much larger, higher-regression-risk
25
+ * change than this issue calls for, so `script-src`/`style-src` keep `'unsafe-inline'`
26
+ * for now. The policy still meaningfully narrows the blast radius (no foreign script
27
+ * origins, no framing, no arbitrary form submission targets). Tightening to a
28
+ * nonce-based CSP is a good follow-up once the inline-script surface is consolidated.
29
+ */
30
+ /** Directives shared by every HTML response. Keep in sync with the pages this
31
+ * protects: assets are same-origin (`assetUrl()` — see `asset-registry.ts`),
32
+ * avatars/branding logos may be arbitrary external `https:` URLs, and all forms /
33
+ * XHR calls target this same origin (OAuth provider redirects are top-level
34
+ * navigations, which CSP does not gate). */
35
+ const CONTENT_SECURITY_POLICY = [
36
+ "default-src 'self'",
37
+ "script-src 'self' 'unsafe-inline'",
38
+ "style-src 'self' 'unsafe-inline'",
39
+ "img-src 'self' data: https:",
40
+ "font-src 'self' data:",
41
+ "connect-src 'self'",
42
+ "frame-ancestors 'none'",
43
+ "base-uri 'self'",
44
+ "form-action 'self'",
45
+ ].join("; ");
46
+ export const HTML_SECURITY_HEADERS = Object.freeze({
47
+ "X-Frame-Options": "DENY",
48
+ "X-Content-Type-Options": "nosniff",
49
+ "Content-Security-Policy": CONTENT_SECURITY_POLICY,
50
+ });
51
+ /**
52
+ * Build a `Response` for server-rendered HTML. Merges the shared security headers
53
+ * (always applied — they are not overridable via `init.headers`, see #72) with
54
+ * caller-supplied headers (`Content-Type` defaults to `text/html; charset=utf-8`
55
+ * unless the caller sets its own, `Cache-Control` etc. pass through untouched).
56
+ */
57
+ export function htmlResponse(html, init) {
58
+ const headers = new Headers(init?.headers);
59
+ if (!headers.has("Content-Type")) {
60
+ headers.set("Content-Type", "text/html; charset=utf-8");
61
+ }
62
+ for (const [name, value] of Object.entries(HTML_SECURITY_HEADERS)) {
63
+ headers.set(name, value);
64
+ }
65
+ return new Response(html, { ...init, headers });
66
+ }
67
+ //# sourceMappingURL=security-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-headers.js","sourceRoot":"","sources":["../../src/http/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;4CAI4C;AAC5C,MAAM,uBAAuB,GAAG;IAC9B,oBAAoB;IACpB,mCAAmC;IACnC,kCAAkC;IAClC,6BAA6B;IAC7B,uBAAuB;IACvB,oBAAoB;IACpB,wBAAwB;IACxB,iBAAiB;IACjB,oBAAoB;CACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAAqC,MAAM,CAAC,MAAM,CAAC;IACnF,iBAAiB,EAAE,MAAM;IACzB,wBAAwB,EAAE,SAAS;IACnC,yBAAyB,EAAE,uBAAuB;CACnD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAmB;IAC5D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Per-locale subset fonts for the tree renderer (ArcBlock/arc#8800).
3
+ *
4
+ * Satori parses every font it is handed on every render, and the full CJK
5
+ * faces (Noto Sans SC/TC/JP, Regular + Bold ≈ 9–16 MB) cost ~50–60 ms of CPU
6
+ * per render to parse, plus a 16 MB R2 read on a cold isolate. Static subsets
7
+ * (common characters only, every OpenType layout feature kept — built by
8
+ * `scripts/build-og-subset-fonts.py`) parse ~8× faster and draw the SAME
9
+ * pixels for any text they cover.
10
+ *
11
+ * A renderer uses a subset only when EVERY character the render can draw is
12
+ * covered ({@link ogTreeCoveredBySubset}); otherwise it falls back to the full
13
+ * font (the pre-subset behavior). Coverage comes from the generated
14
+ * {@link OG_SUBSET_FONTS} table, and each subset object is checked against its
15
+ * sha256 before use, so a stale or foreign upload is treated as missing rather
16
+ * than drawing the wrong glyphs.
17
+ *
18
+ * Parsed subsets are NOT kept between renders: opentype.js caches every glyph
19
+ * it draws on the parsed font object, so a resident parse grows with each new
20
+ * character (measured: SC subset 12 MB after one card, 82 MB once every glyph
21
+ * was drawn; TC 122 MB) — unbounded for a 128 MB isolate. Only raw bytes stay.
22
+ */
23
+ import { OG_SUBSET_FONTS, type OgSubsetFontSet } from "./subset-fonts.generated.js";
24
+ export type { OgSubsetFontFile, OgSubsetFontSet } from "./subset-fonts.generated.js";
25
+ export { OG_SUBSET_FONTS, OG_SUBSET_PREFIX } from "./subset-fonts.generated.js";
26
+ /**
27
+ * How a render picked its fonts, reported on the `og-render` event:
28
+ * - `"hit"`: every character was covered and the subset fonts were used;
29
+ * - `"miss"`: some character is outside the subset, so the full fonts were used;
30
+ * - `"absent"`: the text was covered, but no usable subset was available (object
31
+ * missing, sha256 mismatch, no subset for this font) — full fonts were used.
32
+ */
33
+ export type OgFontSubsetStatus = "hit" | "miss" | "absent";
34
+ export type OgSubsetFontSetId = keyof typeof OG_SUBSET_FONTS;
35
+ /** The subset table in effect (the generated one unless a test replaced it). */
36
+ export declare function ogSubsetFontSets(): Readonly<Record<string, OgSubsetFontSet>>;
37
+ /** Test isolation: replace the subset table (`undefined` restores the generated one). */
38
+ export declare function setOgSubsetFontsForTesting(table: Readonly<Record<string, OgSubsetFontSet>> | undefined): void;
39
+ /** Bucket key of a subset object. */
40
+ export declare function ogSubsetFontKey(file: string): string;
41
+ /** Decodes the generated page encoding: `"<hex>"` = whole page, `"<hex>:<base64 bitmap>"` = some of it. */
42
+ export declare function decodeOgCodepointPages(encoded: string): Map<number, true | Uint8Array>;
43
+ /** Every codepoint in `codepoints` is drawn identically by the subset and the full font. */
44
+ export declare function ogSubsetCovers(set: OgSubsetFontSet, codepoints: Iterable<number>): boolean;
45
+ /**
46
+ * Every codepoint a satori + resvg render of `tree` may draw: text children
47
+ * (with case-mapped forms for `textTransform`), custom `lineClamp` ellipses,
48
+ * and the text of SVG data-URI images. A value the collector cannot read
49
+ * adds a sentinel that no subset covers, so the render uses the full font.
50
+ */
51
+ export declare function collectOgTreeCodepoints(tree: unknown): Set<number>;
52
+ /** True when the subset `set` draws every character of `tree` exactly like the full font. */
53
+ export declare function ogTreeCoveredBySubset(set: OgSubsetFontSet | undefined, tree: unknown): boolean;
54
+ /** Lowercase hex sha256 (WebCrypto: Workers and Node ≥ 19). */
55
+ export declare function ogFontSha256(bytes: Uint8Array): Promise<string>;
56
+ //# sourceMappingURL=font-subset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-subset.d.ts","sourceRoot":"","sources":["../../src/og/font-subset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAoB,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEtG,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,eAAe,CAAC;AAI7D,gFAAgF;AAChF,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAE5E;AAED,yFAAyF;AACzF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAG7G;AAED,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAeD,2GAA2G;AAC3G,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,UAAU,CAAC,CAetF;AAyBD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAM1F;AAiHD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAoClE;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAG9F;AAED,+DAA+D;AAC/D,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Per-locale subset fonts for the tree renderer (ArcBlock/arc#8800).
3
+ *
4
+ * Satori parses every font it is handed on every render, and the full CJK
5
+ * faces (Noto Sans SC/TC/JP, Regular + Bold ≈ 9–16 MB) cost ~50–60 ms of CPU
6
+ * per render to parse, plus a 16 MB R2 read on a cold isolate. Static subsets
7
+ * (common characters only, every OpenType layout feature kept — built by
8
+ * `scripts/build-og-subset-fonts.py`) parse ~8× faster and draw the SAME
9
+ * pixels for any text they cover.
10
+ *
11
+ * A renderer uses a subset only when EVERY character the render can draw is
12
+ * covered ({@link ogTreeCoveredBySubset}); otherwise it falls back to the full
13
+ * font (the pre-subset behavior). Coverage comes from the generated
14
+ * {@link OG_SUBSET_FONTS} table, and each subset object is checked against its
15
+ * sha256 before use, so a stale or foreign upload is treated as missing rather
16
+ * than drawing the wrong glyphs.
17
+ *
18
+ * Parsed subsets are NOT kept between renders: opentype.js caches every glyph
19
+ * it draws on the parsed font object, so a resident parse grows with each new
20
+ * character (measured: SC subset 12 MB after one card, 82 MB once every glyph
21
+ * was drawn; TC 122 MB) — unbounded for a 128 MB isolate. Only raw bytes stay.
22
+ */
23
+ import { OG_SUBSET_FONTS, OG_SUBSET_PREFIX } from "./subset-fonts.generated.js";
24
+ export { OG_SUBSET_FONTS, OG_SUBSET_PREFIX } from "./subset-fonts.generated.js";
25
+ let tableOverride;
26
+ /** The subset table in effect (the generated one unless a test replaced it). */
27
+ export function ogSubsetFontSets() {
28
+ return tableOverride ?? OG_SUBSET_FONTS;
29
+ }
30
+ /** Test isolation: replace the subset table (`undefined` restores the generated one). */
31
+ export function setOgSubsetFontsForTesting(table) {
32
+ tableOverride = table;
33
+ decoded.clear();
34
+ }
35
+ /** Bucket key of a subset object. */
36
+ export function ogSubsetFontKey(file) {
37
+ return `${OG_SUBSET_PREFIX}/${file}`;
38
+ }
39
+ const decoded = new Map();
40
+ /** Decodes the generated page encoding: `"<hex>"` = whole page, `"<hex>:<base64 bitmap>"` = some of it. */
41
+ export function decodeOgCodepointPages(encoded) {
42
+ const pages = new Map();
43
+ if (!encoded)
44
+ return pages;
45
+ for (const entry of encoded.split(",")) {
46
+ const colon = entry.indexOf(":");
47
+ if (colon < 0) {
48
+ pages.set(Number.parseInt(entry, 16), true);
49
+ continue;
50
+ }
51
+ const binary = atob(entry.slice(colon + 1));
52
+ const bitmap = new Uint8Array(32);
53
+ for (let i = 0; i < 32; i++)
54
+ bitmap[i] = binary.charCodeAt(i);
55
+ pages.set(Number.parseInt(entry.slice(0, colon), 16), bitmap);
56
+ }
57
+ return pages;
58
+ }
59
+ function coverageOf(set) {
60
+ let coverage = decoded.get(set);
61
+ if (!coverage) {
62
+ coverage = {
63
+ pages: decodeOgCodepointPages(set.subset),
64
+ fullPages: new Set(set.full ? set.full.split(",").map((page) => Number.parseInt(page, 16)) : []),
65
+ };
66
+ decoded.set(set, coverage);
67
+ }
68
+ return coverage;
69
+ }
70
+ /** True when the subset draws `codepoint` exactly like the full font. */
71
+ function covers(coverage, codepoint) {
72
+ if (codepoint < 0)
73
+ return false;
74
+ const page = codepoint >> 8;
75
+ const entry = coverage.pages.get(page);
76
+ if (entry === true)
77
+ return true;
78
+ if (entry && (entry[(codepoint & 0xff) >> 3] & (1 << (codepoint & 7))) !== 0)
79
+ return true;
80
+ // Not in the subset — fine only if the full font lacks it too (.notdef either way).
81
+ return !coverage.fullPages.has(page);
82
+ }
83
+ /** Every codepoint in `codepoints` is drawn identically by the subset and the full font. */
84
+ export function ogSubsetCovers(set, codepoints) {
85
+ const coverage = coverageOf(set);
86
+ for (const codepoint of codepoints) {
87
+ if (!covers(coverage, codepoint))
88
+ return false;
89
+ }
90
+ return true;
91
+ }
92
+ /** Forces a miss: text the collector could not read reliably. */
93
+ const UNREADABLE = -1;
94
+ function addText(out, text) {
95
+ for (const ch of text)
96
+ out.add(ch.codePointAt(0));
97
+ }
98
+ /** The text itself plus its case-mapped forms (satori's `textTransform`). */
99
+ function addLayoutText(out, text) {
100
+ addText(out, text);
101
+ const upper = text.toUpperCase();
102
+ if (upper !== text)
103
+ addText(out, upper);
104
+ const lower = text.toLowerCase();
105
+ if (lower !== text)
106
+ addText(out, lower);
107
+ }
108
+ const SVG_DATA_PREFIX = "data:image/svg+xml";
109
+ /**
110
+ * Characters resvg may draw from an SVG data URI: everything outside markup
111
+ * (a superset of `<text>` content), with numeric character references and
112
+ * CDATA unwrapped. Anything that could define text indirectly (entities) or
113
+ * cannot be decoded forces a miss.
114
+ */
115
+ function addSvgDataUriText(out, uri) {
116
+ const comma = uri.indexOf(",");
117
+ if (comma < 0) {
118
+ out.add(UNREADABLE);
119
+ return;
120
+ }
121
+ const header = uri.slice(0, comma);
122
+ const payload = uri.slice(comma + 1);
123
+ let svg;
124
+ try {
125
+ if (/;base64/i.test(header)) {
126
+ const binary = atob(payload.trim());
127
+ const bytes = new Uint8Array(binary.length);
128
+ for (let i = 0; i < binary.length; i++)
129
+ bytes[i] = binary.charCodeAt(i);
130
+ svg = new TextDecoder().decode(bytes);
131
+ }
132
+ else {
133
+ try {
134
+ svg = decodeURIComponent(payload);
135
+ }
136
+ catch {
137
+ svg = payload;
138
+ }
139
+ }
140
+ }
141
+ catch {
142
+ out.add(UNREADABLE);
143
+ return;
144
+ }
145
+ if (/<!ENTITY/i.test(svg)) {
146
+ out.add(UNREADABLE);
147
+ return;
148
+ }
149
+ const text = svg
150
+ .replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g, " $1 ")
151
+ .replace(/<[^>]*>/g, " ")
152
+ .replace(/&#x([0-9a-f]+);?/gi, (_, hex) => codepointText(Number.parseInt(hex, 16)))
153
+ .replace(/&#(\d+);?/g, (_, dec) => codepointText(Number.parseInt(dec, 10)));
154
+ addText(out, text);
155
+ }
156
+ function codepointText(codepoint) {
157
+ return codepoint >= 0 && codepoint <= 0x10ffff ? String.fromCodePoint(codepoint) : "�";
158
+ }
159
+ /** SVG data URIs inside a prop / style value (whole value, or inside `url(...)`). */
160
+ function addSvgUrisIn(out, value) {
161
+ if (!value.includes(SVG_DATA_PREFIX))
162
+ return;
163
+ if (value.startsWith(SVG_DATA_PREFIX)) {
164
+ addSvgDataUriText(out, value);
165
+ return;
166
+ }
167
+ let from = 0;
168
+ for (;;) {
169
+ const start = value.indexOf(SVG_DATA_PREFIX, from);
170
+ if (start < 0)
171
+ return;
172
+ const comma = value.indexOf(",", start);
173
+ // Only a base64 payload has a reliable end inside url(...): quotes and
174
+ // parentheses cannot occur in it. Anything else forces a miss.
175
+ if (comma < 0 || !/;base64/i.test(value.slice(start, comma))) {
176
+ out.add(UNREADABLE);
177
+ return;
178
+ }
179
+ const end = value.slice(comma + 1).search(/[^A-Za-z0-9+/=\s]/);
180
+ const stop = end < 0 ? value.length : comma + 1 + end;
181
+ addSvgDataUriText(out, value.slice(start, stop));
182
+ from = stop;
183
+ }
184
+ }
185
+ function collectProps(out, value, key, depth) {
186
+ if (depth > 64) {
187
+ out.add(UNREADABLE);
188
+ return;
189
+ }
190
+ if (typeof value === "string") {
191
+ addSvgUrisIn(out, value);
192
+ // `lineClamp: '2 "…more"'` draws its custom ellipsis string.
193
+ if (/lineclamp/i.test(key))
194
+ addLayoutText(out, value);
195
+ return;
196
+ }
197
+ if (Array.isArray(value)) {
198
+ for (const item of value)
199
+ collectProps(out, item, key, depth + 1);
200
+ return;
201
+ }
202
+ if (value && typeof value === "object") {
203
+ for (const [childKey, item] of Object.entries(value))
204
+ collectProps(out, item, childKey, depth + 1);
205
+ }
206
+ }
207
+ /**
208
+ * Every codepoint a satori + resvg render of `tree` may draw: text children
209
+ * (with case-mapped forms for `textTransform`), custom `lineClamp` ellipses,
210
+ * and the text of SVG data-URI images. A value the collector cannot read
211
+ * adds a sentinel that no subset covers, so the render uses the full font.
212
+ */
213
+ export function collectOgTreeCodepoints(tree) {
214
+ const out = new Set();
215
+ // "…" is drawn by textOverflow / lineClamp truncation.
216
+ out.add(0x2026);
217
+ const stack = [{ node: tree, depth: 0 }];
218
+ while (stack.length) {
219
+ const { node, depth } = stack.pop();
220
+ if (node === null || node === undefined || typeof node === "boolean")
221
+ continue;
222
+ if (typeof node === "string") {
223
+ addLayoutText(out, node);
224
+ continue;
225
+ }
226
+ if (typeof node === "number") {
227
+ addText(out, String(node));
228
+ continue;
229
+ }
230
+ if (depth > 256) {
231
+ out.add(UNREADABLE);
232
+ break;
233
+ }
234
+ if (Array.isArray(node)) {
235
+ for (const child of node)
236
+ stack.push({ node: child, depth: depth + 1 });
237
+ continue;
238
+ }
239
+ if (typeof node !== "object") {
240
+ out.add(UNREADABLE);
241
+ continue;
242
+ }
243
+ const props = node.props;
244
+ if (!props || typeof props !== "object")
245
+ continue;
246
+ for (const [key, value] of Object.entries(props)) {
247
+ if (key === "children")
248
+ stack.push({ node: value, depth: depth + 1 });
249
+ else
250
+ collectProps(out, value, key, 0);
251
+ }
252
+ }
253
+ return out;
254
+ }
255
+ /** True when the subset `set` draws every character of `tree` exactly like the full font. */
256
+ export function ogTreeCoveredBySubset(set, tree) {
257
+ if (!set)
258
+ return false;
259
+ return ogSubsetCovers(set, collectOgTreeCodepoints(tree));
260
+ }
261
+ /** Lowercase hex sha256 (WebCrypto: Workers and Node ≥ 19). */
262
+ export async function ogFontSha256(bytes) {
263
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
264
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
265
+ }
266
+ //# sourceMappingURL=font-subset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-subset.js","sourceRoot":"","sources":["../../src/og/font-subset.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { type Logger } from "../logger.js";
2
2
  import type { CreateOgGeneratorOptions, OgGenerator } from "./types.js";
3
+ /** The bundled Regular face (also the default for `og-node`'s `renderOgTree`). */
4
+ export declare const FONT_PATH: string;
3
5
  /** Deadline for downloading a remote font (Node). */
4
6
  export declare const FONT_FETCH_TIMEOUT_MS = 10000;
5
7
  export interface FontSource {
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAU1D,OAAO,KAAK,EAAE,wBAAwB,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAW3F,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5D;AAyOD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,WAAW,CAmErF"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAU1D,OAAO,KAAK,EAAE,wBAAwB,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAS3F,kFAAkF;AAClF,eAAO,MAAM,SAAS,QAAiE,CAAC;AAExF,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5D;AAyOD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,WAAW,CAmErF"}
@@ -19,7 +19,8 @@ import { MAX_IMAGE_DIMENSION, MAX_IMAGE_SIZE, OgValidationError } from "./types.
19
19
  // ---------------------------------------------------------------------------
20
20
  const __dirname = dirname(fileURLToPath(import.meta.url));
21
21
  // dist/og/generator.js → ../../assets/fonts/…
22
- const FONT_PATH = join(__dirname, "../../assets/fonts/noto-sans-sc-regular.otf");
22
+ /** The bundled Regular face (also the default for `og-node`'s `renderOgTree`). */
23
+ export const FONT_PATH = join(__dirname, "../../assets/fonts/noto-sans-sc-regular.otf");
23
24
  /** Deadline for downloading a remote font (Node). */
24
25
  export const FONT_FETCH_TIMEOUT_MS = 10_000;
25
26
  // Keyed by fontUrl (or "bundled") so multiple generator instances share one
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"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"}