@arcblock/did-connect-service 4.1.28 → 4.1.30

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 (43) hide show
  1. package/dist/blocklet-service.d.ts +3 -0
  2. package/dist/blocklet-service.d.ts.map +1 -1
  3. package/dist/blocklet-service.js +4 -0
  4. package/dist/blocklet-service.js.map +1 -1
  5. package/dist/env-config.d.ts +3 -0
  6. package/dist/env-config.d.ts.map +1 -1
  7. package/dist/env-config.js +1 -0
  8. package/dist/env-config.js.map +1 -1
  9. package/dist/handlers/auth-handler.d.ts +3 -0
  10. package/dist/handlers/auth-handler.d.ts.map +1 -1
  11. package/dist/handlers/auth-handler.js +1 -0
  12. package/dist/handlers/auth-handler.js.map +1 -1
  13. package/dist/handlers/branding-handler.d.ts +3 -0
  14. package/dist/handlers/branding-handler.d.ts.map +1 -1
  15. package/dist/handlers/branding-handler.js +23 -3
  16. package/dist/handlers/branding-handler.js.map +1 -1
  17. package/dist/og/generator.d.ts.map +1 -1
  18. package/dist/og/generator.js +43 -124
  19. package/dist/og/generator.js.map +1 -1
  20. package/dist/og/node-wasm-fallback.d.ts +8 -0
  21. package/dist/og/node-wasm-fallback.d.ts.map +1 -0
  22. package/dist/og/node-wasm-fallback.js +61 -0
  23. package/dist/og/node-wasm-fallback.js.map +1 -0
  24. package/dist/og/resvg-runtime.d.ts +4 -0
  25. package/dist/og/resvg-runtime.d.ts.map +1 -0
  26. package/dist/og/resvg-runtime.js +9 -0
  27. package/dist/og/resvg-runtime.js.map +1 -0
  28. package/dist/og/shared.d.ts +26 -0
  29. package/dist/og/shared.d.ts.map +1 -0
  30. package/dist/og/shared.js +87 -0
  31. package/dist/og/shared.js.map +1 -0
  32. package/dist/og/templates.d.ts +4 -0
  33. package/dist/og/templates.d.ts.map +1 -1
  34. package/dist/og/templates.js +313 -34
  35. package/dist/og/templates.js.map +1 -1
  36. package/dist/og/types.d.ts +11 -0
  37. package/dist/og/types.d.ts.map +1 -1
  38. package/dist/og/types.js.map +1 -1
  39. package/dist/og/worker.d.ts +45 -0
  40. package/dist/og/worker.d.ts.map +1 -0
  41. package/dist/og/worker.js +141 -0
  42. package/dist/og/worker.js.map +1 -0
  43. package/package.json +12 -8
@@ -1,23 +1,22 @@
1
- import { html } from "satori-html";
2
- import { __unsafeHTML } from "ultrahtml";
3
1
  import { getTextColor } from "./passport-svg.js";
4
- // HTML-escapes a plain interpolated string. Mirrors ultrahtml's own escape
5
- // map (`&`, `<`, `>` only — see `satori-html`'s `html` tag, which the
6
- // `png`/`svg` code paths route through) so that `format:"html"` output is
7
- // escaped identically to `format:"png"`/`format:"svg"`.
2
+ // ---------------------------------------------------------------------------
3
+ // format="html" rendering — plain string templating, escaped by hand. This
4
+ // path never touched satori-html/ultrahtml and is unaffected by #218; it is
5
+ // kept exactly as before.
6
+ // ---------------------------------------------------------------------------
7
+ // HTML-escapes a plain interpolated string (`&`, `<`, `>` only) so that
8
+ // `format:"html"` output is escaped identically to `format:"png"`/`"svg"`.
8
9
  const HTML_ESCAPE_MAP = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
9
10
  const escapeHtml = (value) => value.replace(/[&<>]/g, (ch) => HTML_ESCAPE_MAP[ch] ?? ch);
10
- // `gradientDecor()` returns either "" or an `__unsafeHTML(...)`-wrapped
11
- // object ({ value: string }, tagged non-enumerably by ultrahtml) for markup
12
- // that is fully static/internally-derived and must be emitted raw, matching
13
- // how satori-html's `html` tag treats the same wrapper.
14
- const isUnsafeHtml = (value) => typeof value === "object" &&
15
- value !== null &&
16
- "value" in value &&
17
- typeof value.value === "string";
18
- // Join the raw strings and values to reconstruct the original string. Values
19
- // are escaped the same way satori-html (via ultrahtml's `html` tag) escapes
20
- // them for the png/svg paths, so format:"html" carries no additional risk.
11
+ // Marks a string as pre-escaped / internally-derived markup that must be
12
+ // emitted raw by `join()` — used for gradientDecor's fully-static decorative
13
+ // markup (no user input reaches it).
14
+ const UNSAFE_HTML = Symbol("unsafeHtml");
15
+ const unsafeHtml = (value) => ({ [UNSAFE_HTML]: true, value });
16
+ const isUnsafeHtml = (value) => typeof value === "object" && value !== null && value[UNSAFE_HTML] === true;
17
+ // Join the raw strings and values to reconstruct the original HTML string.
18
+ // Values are escaped the same way the png/svg path escapes them (see
19
+ // `escapeText` below), so format:"html" carries no additional risk.
21
20
  const join = (strings, ...values) => {
22
21
  return strings.raw.reduce((result, str, i) => {
23
22
  const value = values[i];
@@ -93,11 +92,9 @@ const gradientDecor = (background, color) => {
93
92
  const stroke = foregroundColor(background, color);
94
93
  const mark = `<svg xmlns="http://www.w3.org/2000/svg" width="360" height="416" viewBox="0 0 45 52"><g fill="none" fill-rule="evenodd" stroke="${stroke}" stroke-width="0.6"><path d="M.5 13.077L22.15.577l21.651 12.5v25l-21.65 12.5L.5 38.077zM22.15.577v50M.5 13.077l43.301 25m-43.301 0l43.301-25"></path><path d="M22.15 38.077l10.826-6.25-10.825-18.75-10.825 18.75z"></path></g></svg>`;
95
94
  const markUri = `data:image/svg+xml;base64,${Buffer.from(mark).toString("base64")}`;
96
- // __unsafeHTML: satori-html's tagged template escapes interpolated strings
97
- // (anti-injection); this wrapper marks the decor markup as trusted. The
98
- // markup is fully static except for `stroke`/`markUri`, both derived from
99
- // internal color math — no user input reaches it.
100
- return __unsafeHTML(`<div style="position: absolute; top: -320px; right: -180px; width: 820px; height: 820px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.14) 0%, rgba(255,255,255,0) 68%); display: flex;"></div>
95
+ // unsafeHtml: the markup is fully static except for `stroke`/`markUri`,
96
+ // both derived from internal color math — no user input reaches it.
97
+ return unsafeHtml(`<div style="position: absolute; top: -320px; right: -180px; width: 820px; height: 820px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.14) 0%, rgba(255,255,255,0) 68%); display: flex;"></div>
101
98
  <div style="position: absolute; bottom: -280px; left: -160px; width: 640px; height: 640px; border-radius: 50%; background: radial-gradient(circle, rgba(0,0,0,0.10) 0%, rgba(0,0,0,0) 68%); display: flex;"></div>
102
99
  <img src="${markUri}" style="position: absolute; right: -36px; bottom: -64px; width: 360px; height: 416px; opacity: 0.14" />`);
103
100
  };
@@ -312,20 +309,302 @@ const getBannerTemplate = ({ width, height, logo, logoRounded, background, color
312
309
  </h2>
313
310
  </div>`;
314
311
  };
312
+ const node = (type, props = {}, children = []) => ({
313
+ type,
314
+ props: { ...props, children },
315
+ });
316
+ /** Style-object equivalent of `backgroundStyle()` above. */
317
+ const backgroundStyleProps = (background, color) => background
318
+ ? { backgroundImage: `url(${background})`, backgroundSize: "cover", backgroundPosition: "center" }
319
+ : { background: `linear-gradient(160deg, ${color.start} 0%, ${color.end} 100%)` };
320
+ /** VNode equivalent of `gradientDecor()` above — same markup, same paint order. */
321
+ const gradientDecorNodes = (background, color) => {
322
+ if (background)
323
+ return [];
324
+ const stroke = foregroundColor(background, color);
325
+ const mark = `<svg xmlns="http://www.w3.org/2000/svg" width="360" height="416" viewBox="0 0 45 52"><g fill="none" fill-rule="evenodd" stroke="${stroke}" stroke-width="0.6"><path d="M.5 13.077L22.15.577l21.651 12.5v25l-21.65 12.5L.5 38.077zM22.15.577v50M.5 13.077l43.301 25m-43.301 0l43.301-25"></path><path d="M22.15 38.077l10.826-6.25-10.825-18.75-10.825 18.75z"></path></g></svg>`;
326
+ const markUri = `data:image/svg+xml;base64,${Buffer.from(mark).toString("base64")}`;
327
+ return [
328
+ node("div", {
329
+ style: {
330
+ position: "absolute",
331
+ top: "-320px",
332
+ right: "-180px",
333
+ width: "820px",
334
+ height: "820px",
335
+ borderRadius: "50%",
336
+ background: "radial-gradient(circle, rgba(255,255,255,0.14) 0%, rgba(255,255,255,0) 68%)",
337
+ display: "flex",
338
+ },
339
+ }),
340
+ node("div", {
341
+ style: {
342
+ position: "absolute",
343
+ bottom: "-280px",
344
+ left: "-160px",
345
+ width: "640px",
346
+ height: "640px",
347
+ borderRadius: "50%",
348
+ background: "radial-gradient(circle, rgba(0,0,0,0.10) 0%, rgba(0,0,0,0) 68%)",
349
+ display: "flex",
350
+ },
351
+ }),
352
+ node("img", {
353
+ src: markUri,
354
+ style: { position: "absolute", right: "-36px", bottom: "-64px", width: "360px", height: "416px", opacity: 0.14 },
355
+ }),
356
+ ];
357
+ };
358
+ const buildDefaultNode = ({ width, height, logo, background, logoRounded, color, title, description, }) => {
359
+ const fg = foregroundColor(background, color);
360
+ return node("div", {
361
+ style: {
362
+ width: `${width}px`,
363
+ height: `${height}px`,
364
+ ...backgroundStyleProps(background, color),
365
+ display: "flex",
366
+ flexDirection: "column",
367
+ justifyContent: "center",
368
+ alignItems: "flex-start",
369
+ position: "relative",
370
+ overflow: "hidden",
371
+ },
372
+ }, [
373
+ ...gradientDecorNodes(background, color),
374
+ node("img", {
375
+ src: logo,
376
+ height: "90",
377
+ width: "90",
378
+ style: {
379
+ marginLeft: "96px",
380
+ height: "90px",
381
+ width: "90px",
382
+ ...(logoRounded ? { borderRadius: "50%" } : {}),
383
+ marginBottom: "64px",
384
+ },
385
+ }),
386
+ node("h2", {
387
+ style: {
388
+ fontSize: "48px",
389
+ letterSpacing: "-2px",
390
+ margin: "0 0 32px",
391
+ color: fg,
392
+ fontWeight: 500,
393
+ fontFamily: "Arial, sans-serif",
394
+ textAlign: "left",
395
+ padding: "0 96px",
396
+ },
397
+ }, title),
398
+ node("h3", {
399
+ style: {
400
+ fontSize: "2rem",
401
+ margin: "0",
402
+ color: fg,
403
+ opacity: 0.7,
404
+ fontWeight: 400,
405
+ fontFamily: "Arial, sans-serif",
406
+ textAlign: "left",
407
+ padding: "0 96px",
408
+ lineClamp: 3,
409
+ },
410
+ }, description),
411
+ ]);
412
+ };
413
+ const buildSectionNode = ({ width, height, logo, logoRounded, background, color, title, description, section, }) => {
414
+ const fg = foregroundColor(background, color);
415
+ const labelColor = background ? color.start : fg;
416
+ return node("div", {
417
+ style: {
418
+ width: `${width}px`,
419
+ height: `${height}px`,
420
+ ...backgroundStyleProps(background, color),
421
+ display: "flex",
422
+ flexDirection: "column",
423
+ justifyContent: "center",
424
+ alignItems: "flex-start",
425
+ position: "relative",
426
+ overflow: "hidden",
427
+ },
428
+ }, [
429
+ ...gradientDecorNodes(background, color),
430
+ node("img", {
431
+ src: logo,
432
+ height: "90",
433
+ width: "90",
434
+ style: {
435
+ marginLeft: "96px",
436
+ height: "90px",
437
+ width: "90px",
438
+ ...(logoRounded ? { borderRadius: "50%" } : {}),
439
+ marginBottom: "64px",
440
+ },
441
+ }),
442
+ node("p", {
443
+ style: {
444
+ fontSize: "1.5rem",
445
+ margin: "0",
446
+ color: labelColor,
447
+ fontWeight: 400,
448
+ fontFamily: "Arial, sans-serif",
449
+ textAlign: "left",
450
+ textTransform: "uppercase",
451
+ padding: "0 96px",
452
+ },
453
+ }, section),
454
+ node("h2", {
455
+ style: {
456
+ fontSize: "48px",
457
+ margin: "0 0 32px",
458
+ color: fg,
459
+ letterSpacing: "-2px",
460
+ fontWeight: 500,
461
+ fontFamily: "Arial, sans-serif",
462
+ textAlign: "left",
463
+ padding: "0 96px",
464
+ lineClamp: 2,
465
+ },
466
+ }, title),
467
+ node("h3", {
468
+ style: {
469
+ fontSize: "2rem",
470
+ margin: "0",
471
+ color: fg,
472
+ opacity: 0.7,
473
+ fontWeight: 400,
474
+ fontFamily: "Arial, sans-serif",
475
+ textAlign: "left",
476
+ padding: "0 96px",
477
+ lineClamp: 3,
478
+ },
479
+ }, description),
480
+ ]);
481
+ };
482
+ const buildCoverNode = ({ width, height, logo, logoRounded, color, title, description, cover, }) => {
483
+ const textColor = getTextColor(color.start);
484
+ // TODO: cover template hardcodes 630px panel height (carried from source); replace with ${height} when we generalize.
485
+ return node("div", { style: { width: `${width}px`, height: `${height}px`, display: "flex", background: color.start } }, [
486
+ node("div", { style: { display: "flex", height: `${height}px`, background: color.start, width: "45%" } }, [
487
+ node("div", {
488
+ style: {
489
+ marginLeft: "32px",
490
+ display: "flex",
491
+ flexDirection: "column",
492
+ alignItems: "flex-start",
493
+ justifyContent: "space-around",
494
+ },
495
+ }, [
496
+ node("h2", {
497
+ style: {
498
+ fontSize: "3rem",
499
+ color: textColor,
500
+ fontWeight: 400,
501
+ fontFamily: "Arial, sans-serif",
502
+ margin: "32px 32px 0 0",
503
+ textAlign: "left",
504
+ },
505
+ }, description),
506
+ node("div", { style: { display: "flex", justifyContent: "flex-start", alignItems: "center" } }, [
507
+ node("img", {
508
+ src: logo,
509
+ height: "60",
510
+ width: "60",
511
+ style: { height: "60px", width: "60px", ...(logoRounded ? { borderRadius: "50%" } : {}) },
512
+ }),
513
+ node("h3", {
514
+ style: {
515
+ fontSize: "2rem",
516
+ margin: "0 0 0 16px",
517
+ color: textColor,
518
+ fontWeight: 400,
519
+ fontFamily: "Arial, sans-serif",
520
+ textAlign: "left",
521
+ textTransform: "capitalize",
522
+ },
523
+ }, title),
524
+ ]),
525
+ ]),
526
+ ]),
527
+ node("div", { style: { display: "flex", height: "630px", width: "55%", backgroundColor: color.start } }, [
528
+ node("img", {
529
+ src: cover,
530
+ height: "630",
531
+ width: "100%",
532
+ style: { height: "630px", width: "100%", objectFit: "cover" },
533
+ }),
534
+ node("div", {
535
+ style: {
536
+ display: "flex",
537
+ background: color.start,
538
+ height: `${height * 2}px`,
539
+ width: "100px",
540
+ position: "absolute",
541
+ transform: "rotate(8deg)",
542
+ left: "-90px",
543
+ top: "-25px",
544
+ },
545
+ }),
546
+ ]),
547
+ ]);
548
+ };
549
+ const buildBannerNode = ({ width, height, logo, logoRounded, background, color, title, }) => {
550
+ const fg = foregroundColor(background, color);
551
+ return node("div", {
552
+ style: {
553
+ width: `${width}px`,
554
+ height: `${height}px`,
555
+ ...backgroundStyleProps(background, color),
556
+ display: "flex",
557
+ flexDirection: "row",
558
+ justifyContent: "center",
559
+ alignItems: "center",
560
+ position: "relative",
561
+ overflow: "hidden",
562
+ },
563
+ }, [
564
+ ...gradientDecorNodes(background, color),
565
+ node("img", {
566
+ src: logo,
567
+ height: "150",
568
+ width: "150",
569
+ style: {
570
+ height: "150px",
571
+ width: "150px",
572
+ ...(logoRounded ? { borderRadius: "50%" } : {}),
573
+ marginRight: "48px",
574
+ },
575
+ }),
576
+ node("h2", {
577
+ style: {
578
+ fontSize: "72px",
579
+ color: fg,
580
+ fontWeight: 500,
581
+ fontFamily: "Arial, sans-serif",
582
+ textAlign: "left",
583
+ lineClamp: 1,
584
+ },
585
+ }, title),
586
+ ]);
587
+ };
315
588
  export const getTemplate = async (params) => {
316
- const fn = params.format === "html" ? join : html;
317
- if (params.template === "default") {
318
- return getDefaultTemplate(params, fn);
319
- }
320
- if (params.template === "section") {
321
- return getSectionTemplate(params, fn);
322
- }
323
- if (params.template === "cover") {
324
- return getCoverTemplate(params, fn);
325
- }
326
- if (params.template === "banner") {
327
- return getBannerTemplate(params, fn);
589
+ if (params.format === "html") {
590
+ if (params.template === "default")
591
+ return getDefaultTemplate(params, join);
592
+ if (params.template === "section")
593
+ return getSectionTemplate(params, join);
594
+ if (params.template === "cover")
595
+ return getCoverTemplate(params, join);
596
+ if (params.template === "banner")
597
+ return getBannerTemplate(params, join);
598
+ throw new Error("Invalid open graph template");
328
599
  }
600
+ if (params.template === "default")
601
+ return buildDefaultNode(params);
602
+ if (params.template === "section")
603
+ return buildSectionNode(params);
604
+ if (params.template === "cover")
605
+ return buildCoverNode(params);
606
+ if (params.template === "banner")
607
+ return buildBannerNode(params);
329
608
  throw new Error("Invalid open graph template");
330
609
  };
331
610
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/og/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/og/templates.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,17 @@ export interface CreateOgGeneratorOptions {
69
69
  tmpDir?: string;
70
70
  /** Structured logger for font/image/emoji fallback diagnostics (defaults to consoleLogger). */
71
71
  logger?: Logger;
72
+ /**
73
+ * Rasterizer for the final SVG → PNG/JPEG step. Defaults to `undefined`
74
+ * ("auto"): try `sharp`, and if it cannot be loaded — e.g. a `bun --compile`
75
+ * single-file binary that doesn't carry sharp's platform-specific native
76
+ * addon (ArcBlock/arc#6410) — fall back to the same `@resvg/resvg-wasm`
77
+ * rasterizer the Cloudflare Worker renderer uses (see `og/worker.ts`).
78
+ * Pass `"wasm"` to always use the wasm path and skip attempting `sharp`
79
+ * (deterministic; always emits PNG — no JPEG re-encode for photographic
80
+ * backgrounds).
81
+ */
82
+ rasterizer?: "wasm";
72
83
  }
73
84
  export declare const OG_TEMPLATES: readonly OgTemplate[];
74
85
  export declare const MAX_TITLE_LENGTH = 128;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/og/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,QAAQ,CAAC;IACjB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;2DACuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACnE;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAA8C,CAAC;AAG7F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,UAAU,SAAO;gBACL,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/og/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,QAAQ,CAAC;IACjB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;2DACuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACnE;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAA8C,CAAC;AAG7F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,UAAU,SAAO;gBACL,OAAO,EAAE,MAAM;CAI5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/og/types.ts"],"names":[],"mappings":"AA+EA,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE7F,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,UAAU,GAAG,GAAG,CAAC;IACjB,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/og/types.ts"],"names":[],"mappings":"AA0FA,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE7F,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,UAAU,GAAG,GAAG,CAAC;IACjB,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { OgGenerateOptions } from "./types.js";
2
+ export declare const OG_WORKER_RENDERER_VERSION = "og-worker:v1";
3
+ export declare const OG_WORKER_FONT_KEYS: {
4
+ readonly en: "fonts/NotoSans-Regular.ttf";
5
+ readonly "zh-CN": "fonts/NotoSansSC-Regular.otf";
6
+ readonly "zh-TW": "fonts/NotoSansTC-Regular.otf";
7
+ readonly ja: "fonts/NotoSansJP-Regular.otf";
8
+ };
9
+ export type OgWorkerLocale = keyof typeof OG_WORKER_FONT_KEYS;
10
+ export type OgWorkerCacheStatus = "HIT" | "MISS" | "BYPASS";
11
+ export interface OgWorkerFontBucket {
12
+ get(key: string): Promise<{
13
+ arrayBuffer(): Promise<ArrayBuffer>;
14
+ } | null>;
15
+ }
16
+ export interface OgWorkerCache {
17
+ match(request: Request): Promise<Response | undefined>;
18
+ put(request: Request, response: Response): Promise<void>;
19
+ }
20
+ export interface OgWorkerRenderEvent {
21
+ locale: OgWorkerLocale;
22
+ cacheStatus: OgWorkerCacheStatus;
23
+ durationMs: number;
24
+ }
25
+ export interface OgWorkerRenderOptions extends Omit<OgGenerateOptions, "format" | "cacheDir" | "tmpDir"> {
26
+ locale: string;
27
+ instanceDid: string;
28
+ }
29
+ export interface OgWorkerRenderResult {
30
+ body: Uint8Array;
31
+ contentType: string;
32
+ }
33
+ export interface OgWorkerRenderer {
34
+ render(options: OgWorkerRenderOptions): Promise<OgWorkerRenderResult>;
35
+ }
36
+ export interface CreateOgWorkerRendererOptions {
37
+ fontBucket: OgWorkerFontBucket;
38
+ cache?: OgWorkerCache;
39
+ observer?: (event: OgWorkerRenderEvent) => void;
40
+ }
41
+ export declare function normalizeOgLocale(locale: string | undefined): OgWorkerLocale;
42
+ /** Test isolation for exercising retry after a rejected initialization promise. */
43
+ export declare function resetOgWorkerWasmForTesting(): void;
44
+ export declare function createOgWorkerRenderer(options: CreateOgWorkerRendererOptions): OgWorkerRenderer;
45
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/og/worker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,0BAA0B,iBAAiB,CAAC;AACzD,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACtG,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACjD;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAe5E;AAYD,mFAAmF;AACnF,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAiCD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,gBAAgB,CAuE/F"}
@@ -0,0 +1,141 @@
1
+ import stringify from "fast-json-stable-stringify";
2
+ import satori from "satori/standalone";
3
+ import { initializeRendererWasm, Resvg } from "./resvg-runtime.js";
4
+ import { prepareOgRender } from "./shared.js";
5
+ import { getTemplate } from "./templates.js";
6
+ export const OG_WORKER_RENDERER_VERSION = "og-worker:v1";
7
+ export const OG_WORKER_FONT_KEYS = {
8
+ en: "fonts/NotoSans-Regular.ttf",
9
+ "zh-CN": "fonts/NotoSansSC-Regular.otf",
10
+ "zh-TW": "fonts/NotoSansTC-Regular.otf",
11
+ ja: "fonts/NotoSansJP-Regular.otf",
12
+ };
13
+ const TRANSPARENT_PNG_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
14
+ const CACHE_ORIGIN = "https://og-cache.invalid";
15
+ let wasmInitialization;
16
+ const fontCaches = new WeakMap();
17
+ export function normalizeOgLocale(locale) {
18
+ const normalized = locale?.trim().toLowerCase() ?? "";
19
+ if (normalized === "ja" || normalized.startsWith("ja-"))
20
+ return "ja";
21
+ if (normalized === "zh-tw" ||
22
+ normalized.startsWith("zh-hant") ||
23
+ normalized === "zh-hk" ||
24
+ normalized.startsWith("zh-hk-")) {
25
+ return "zh-TW";
26
+ }
27
+ if (normalized === "zh" || normalized.startsWith("zh-cn") || normalized.startsWith("zh-hans")) {
28
+ return "zh-CN";
29
+ }
30
+ return "en";
31
+ }
32
+ function ensureWasm() {
33
+ if (!wasmInitialization) {
34
+ wasmInitialization = initializeRendererWasm().catch((error) => {
35
+ wasmInitialization = undefined;
36
+ throw error;
37
+ });
38
+ }
39
+ return wasmInitialization;
40
+ }
41
+ /** Test isolation for exercising retry after a rejected initialization promise. */
42
+ export function resetOgWorkerWasmForTesting() {
43
+ wasmInitialization = undefined;
44
+ }
45
+ function loadFont(bucket, key) {
46
+ let cache = fontCaches.get(bucket);
47
+ if (!cache) {
48
+ cache = new Map();
49
+ fontCaches.set(bucket, cache);
50
+ }
51
+ let promise = cache.get(key);
52
+ if (!promise) {
53
+ promise = bucket.get(key).then(async (object) => {
54
+ if (!object)
55
+ throw new Error(`OG font unavailable: ${key}`);
56
+ return new Uint8Array(await object.arrayBuffer());
57
+ });
58
+ promise.catch(() => cache?.delete(key));
59
+ cache.set(key, promise);
60
+ }
61
+ return promise;
62
+ }
63
+ async function sha256(value) {
64
+ const bytes = new TextEncoder().encode(value);
65
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
66
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
67
+ }
68
+ function defaultCache() {
69
+ const cacheStorage = globalThis.caches;
70
+ if (!cacheStorage?.default)
71
+ throw new Error("Cache API unavailable");
72
+ return cacheStorage.default;
73
+ }
74
+ export function createOgWorkerRenderer(options) {
75
+ const observer = options.observer ?? (() => undefined);
76
+ return {
77
+ async render(renderOptions) {
78
+ const startedAt = performance.now();
79
+ const locale = normalizeOgLocale(renderOptions.locale);
80
+ const fontKey = OG_WORKER_FONT_KEYS[locale];
81
+ const prepared = prepareOgRender({ ...renderOptions, format: "png" });
82
+ const params = {
83
+ ...prepared.params,
84
+ // Worker rendering performs no request-controlled remote media fetches.
85
+ logo: TRANSPARENT_PNG_DATA_URI,
86
+ cover: prepared.params.cover ? TRANSPARENT_PNG_DATA_URI : "",
87
+ background: "",
88
+ };
89
+ const instanceDidDigest = await sha256(renderOptions.instanceDid);
90
+ const cacheHash = await sha256(stringify({
91
+ rendererVersion: OG_WORKER_RENDERER_VERSION,
92
+ fontKey,
93
+ locale,
94
+ instanceDidDigest,
95
+ params,
96
+ }));
97
+ const cacheRequest = new Request(`${CACHE_ORIGIN}/${OG_WORKER_RENDERER_VERSION}/${cacheHash}`);
98
+ const cache = options.cache ?? defaultCache();
99
+ if (!prepared.nocache) {
100
+ const cached = await cache.match(cacheRequest);
101
+ if (cached) {
102
+ const body = new Uint8Array(await cached.arrayBuffer());
103
+ observer({ locale, cacheStatus: "HIT", durationMs: performance.now() - startedAt });
104
+ return { body, contentType: cached.headers.get("content-type") ?? "image/png" };
105
+ }
106
+ }
107
+ const [font] = await Promise.all([loadFont(options.fontBucket, fontKey), ensureWasm()]);
108
+ const tree = await getTemplate(params);
109
+ const fontBuffer = font.slice().buffer;
110
+ const svg = await satori(tree, {
111
+ width: params.width,
112
+ height: params.height,
113
+ fonts: [{ name: "Noto", data: fontBuffer, weight: 400, style: "normal" }],
114
+ });
115
+ const resvg = new Resvg(svg, {
116
+ fitTo: { mode: "original" },
117
+ font: { fontBuffers: [font], loadSystemFonts: false, defaultFontFamily: "Noto" },
118
+ });
119
+ const rendered = resvg.render();
120
+ const body = rendered.asPng();
121
+ rendered.free();
122
+ resvg.free();
123
+ const responseBody = body.slice().buffer;
124
+ const response = new Response(responseBody, {
125
+ headers: { "Content-Type": "image/png", "Cache-Control": "public, max-age=31536000, immutable" },
126
+ });
127
+ if (!prepared.nocache) {
128
+ try {
129
+ await cache.put(cacheRequest, response.clone());
130
+ }
131
+ catch {
132
+ // Cache writes are best-effort; a fresh render is still a valid response.
133
+ }
134
+ }
135
+ const cacheStatus = prepared.nocache ? "BYPASS" : "MISS";
136
+ observer({ locale, cacheStatus, durationMs: performance.now() - startedAt });
137
+ return { body, contentType: "image/png" };
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=worker.js.map