@arcblock/did-connect-service 4.1.41 → 4.1.42

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 (58) hide show
  1. package/dist/_generated/asset-bytes.js +1 -1
  2. package/dist/_generated/asset-manifest.js +2 -2
  3. package/dist/app-identity.d.ts +83 -11
  4. package/dist/app-identity.d.ts.map +1 -1
  5. package/dist/app-identity.js +108 -20
  6. package/dist/app-identity.js.map +1 -1
  7. package/dist/assets/{admin-extra.c7a0720f.js → admin-extra.da2c9785.js} +164 -10
  8. package/dist/assets/{admin.ab0009f2.css → admin.d99b416e.css} +23 -0
  9. package/dist/blocklet-service.d.ts +7 -0
  10. package/dist/blocklet-service.d.ts.map +1 -1
  11. package/dist/blocklet-service.js +17 -1
  12. package/dist/blocklet-service.js.map +1 -1
  13. package/dist/branding-sources.d.ts +60 -0
  14. package/dist/branding-sources.d.ts.map +1 -0
  15. package/dist/branding-sources.js +55 -0
  16. package/dist/branding-sources.js.map +1 -0
  17. package/dist/embedded.d.ts +11 -0
  18. package/dist/embedded.d.ts.map +1 -1
  19. package/dist/embedded.js +42 -32
  20. package/dist/embedded.js.map +1 -1
  21. package/dist/handlers/auth-handler.d.ts +18 -0
  22. package/dist/handlers/auth-handler.d.ts.map +1 -1
  23. package/dist/handlers/auth-handler.js +5 -0
  24. package/dist/handlers/auth-handler.js.map +1 -1
  25. package/dist/handlers/blocklet-js-handler.d.ts.map +1 -1
  26. package/dist/handlers/blocklet-js-handler.js +30 -18
  27. package/dist/handlers/blocklet-js-handler.js.map +1 -1
  28. package/dist/handlers/branding-handler.d.ts +67 -0
  29. package/dist/handlers/branding-handler.d.ts.map +1 -1
  30. package/dist/handlers/branding-handler.js +142 -57
  31. package/dist/handlers/branding-handler.js.map +1 -1
  32. package/dist/index.d.ts +4 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/logo-paths.d.ts +23 -0
  37. package/dist/logo-paths.d.ts.map +1 -1
  38. package/dist/logo-paths.js +57 -2
  39. package/dist/logo-paths.js.map +1 -1
  40. package/dist/package-branding.d.ts +95 -0
  41. package/dist/package-branding.d.ts.map +1 -1
  42. package/dist/package-branding.js +85 -4
  43. package/dist/package-branding.js.map +1 -1
  44. package/dist/pages/admin/i18n.d.ts.map +1 -1
  45. package/dist/pages/admin/i18n.js +32 -0
  46. package/dist/pages/admin/i18n.js.map +1 -1
  47. package/dist/pages/admin/styles.d.ts +1 -1
  48. package/dist/pages/admin/styles.d.ts.map +1 -1
  49. package/dist/pages/admin/styles.js +23 -0
  50. package/dist/pages/admin/styles.js.map +1 -1
  51. package/dist/pages/admin/tab-branding.d.ts.map +1 -1
  52. package/dist/pages/admin/tab-branding.js +180 -15
  53. package/dist/pages/admin/tab-branding.js.map +1 -1
  54. package/dist/theme-utils.d.ts +21 -0
  55. package/dist/theme-utils.d.ts.map +1 -1
  56. package/dist/theme-utils.js +62 -0
  57. package/dist/theme-utils.js.map +1 -1
  58. package/package.json +3 -3
@@ -2,6 +2,9 @@
2
2
  * The logo URL contract shared by BrandingHandler (which serves these paths)
3
3
  * and the admin console (which renders them).
4
4
  *
5
+ * It is also the home of {@link BRANDING_PUBLIC_PATHS}, the one list of public
6
+ * branding paths that both routing and host-side cache purges read.
7
+ *
5
8
  * Dependency-free on purpose: the admin page modules that import it are loaded
6
9
  * by `build-assets.mjs` in plain Node, so nothing here may drag in a handler,
7
10
  * a store, or a Workers-only binding.
@@ -34,6 +37,26 @@ export declare const LOGO_PREVIEW_BASE = "/.well-known/service/blocklet/logo-pre
34
37
  * is a 404, never a fall-through to some other type's bytes).
35
38
  */
36
39
  export declare function previewLogoType(pathname: string): string | null;
40
+ /**
41
+ * The public OG card. Branding-derived (name, description, logo, og-image
42
+ * background) and publicly cacheable, so it belongs to the purge set; served by
43
+ * the OG renderer rather than as a stored logo, hence not a logo route.
44
+ */
45
+ export declare const OG_PNG_PATH = "/.well-known/service/blocklet/og.png";
46
+ /**
47
+ * Every public, cacheable path whose bytes derive from an instance's branding —
48
+ * the single list a host purges after branding changes (a release, or an admin
49
+ * save via the `purgeBrandingPaths` hook) and the list `fetchPublic` routes.
50
+ *
51
+ * Deliberately excluded:
52
+ * - `logo-preview/*` ({@link LOGO_PREVIEW_BASE}) — `no-store`, cached by nothing,
53
+ * so there is nothing to purge; it is the admin console's cache-proof view.
54
+ * - `theme/styles.css`, `theme/init.js` — derived from `app:theme`, not branding,
55
+ * and served with a 60s max-age.
56
+ */
57
+ export declare const BRANDING_PUBLIC_PATHS: readonly string[];
58
+ /** The logo type a canonical public logo path serves, or null when it is not one. */
59
+ export declare function publicLogoType(pathname: string): string | null;
37
60
  /** Cache policy for the canonical logo paths — short, so branding changes reflect quickly. */
38
61
  export declare const LOGO_CACHE_CONTROL = "public, max-age=300";
39
62
  /** Cache policy for the preview alias — stored by nothing, anywhere. */
@@ -1 +1 @@
1
- {"version":3,"file":"logo-paths.d.ts","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,+CAA+C,CAAC;AA2B9E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,wBAAwB,CAAC"}
1
+ {"version":3,"file":"logo-paths.d.ts","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,+CAA+C,CAAC;AA2B9E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AA8BD;;;;GAIG;AACH,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAElE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGjD,CAAC;AAEH,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,wBAAwB,CAAC"}
@@ -2,6 +2,9 @@
2
2
  * The logo URL contract shared by BrandingHandler (which serves these paths)
3
3
  * and the admin console (which renders them).
4
4
  *
5
+ * It is also the home of {@link BRANDING_PUBLIC_PATHS}, the one list of public
6
+ * branding paths that both routing and host-side cache purges read.
7
+ *
5
8
  * Dependency-free on purpose: the admin page modules that import it are loaded
6
9
  * by `build-assets.mjs` in plain Node, so nothing here may drag in a handler,
7
10
  * a store, or a Workers-only binding.
@@ -30,8 +33,8 @@
30
33
  export const LOGO_PREVIEW_BASE = "/.well-known/service/blocklet/logo-preview";
31
34
  /**
32
35
  * Matched positionally rather than as a full prefix, so a prefixed mount still
33
- * resolves — the same tolerance the `endsWith` checks in
34
- * `BrandingHandler.resolveLogoType` already have.
36
+ * resolves the type. (`fetchPublic` itself only routes the full
37
+ * {@link LOGO_PREVIEW_BASE} prefix.)
35
38
  */
36
39
  const LOGO_PREVIEW_SEGMENT = "/logo-preview/";
37
40
  /**
@@ -62,6 +65,58 @@ export function previewLogoType(pathname) {
62
65
  return null;
63
66
  return PREVIEW_LOGO_TYPES.get(pathname.slice(at + LOGO_PREVIEW_SEGMENT.length)) ?? null;
64
67
  }
68
+ /**
69
+ * The canonical public logo routes, keyed by exact pathname → logo type.
70
+ *
71
+ * This table IS the router: `BrandingHandler.fetchPublic` matches a public logo
72
+ * request only by looking its pathname up here, and `resolveLogoType` reads the
73
+ * type from here. {@link BRANDING_PUBLIC_PATHS} is projected from the same table,
74
+ * so a logo type added here is served AND listed for purge in one edit — the two
75
+ * can never drift apart (EPIC arc#7073 red line 5; the hand-maintained-twice
76
+ * failure mode is the one `isMutableSiteArtifactPath` in arc records, where
77
+ * arc#3336's shard path was silently missed).
78
+ *
79
+ * Exact pathnames, never prefixes: a prefix would let the purge list and the
80
+ * router disagree about what "a logo path" is.
81
+ */
82
+ const PUBLIC_LOGO_ROUTES = new Map([
83
+ ["/favicon.ico", "favicon"],
84
+ ["/.well-known/service/blocklet/logo", "square"],
85
+ ["/.well-known/service/blocklet/logo-dark", "squareDark"],
86
+ ["/.well-known/service/blocklet/logo-rect", "rect"],
87
+ ["/.well-known/service/blocklet/logo-rect-dark", "rectDark"],
88
+ ["/.well-known/service/blocklet/logo-favicon", "favicon"],
89
+ // alias added for blocklet-server parity
90
+ ["/.well-known/service/blocklet/favicon", "favicon"],
91
+ ["/.well-known/service/blocklet/splash/portrait", "splashPortrait"],
92
+ ["/.well-known/service/blocklet/splash/landscape", "splashLandscape"],
93
+ ["/.well-known/service/blocklet/og-image", "ogImage"],
94
+ ]);
95
+ /**
96
+ * The public OG card. Branding-derived (name, description, logo, og-image
97
+ * background) and publicly cacheable, so it belongs to the purge set; served by
98
+ * the OG renderer rather than as a stored logo, hence not a logo route.
99
+ */
100
+ export const OG_PNG_PATH = "/.well-known/service/blocklet/og.png";
101
+ /**
102
+ * Every public, cacheable path whose bytes derive from an instance's branding —
103
+ * the single list a host purges after branding changes (a release, or an admin
104
+ * save via the `purgeBrandingPaths` hook) and the list `fetchPublic` routes.
105
+ *
106
+ * Deliberately excluded:
107
+ * - `logo-preview/*` ({@link LOGO_PREVIEW_BASE}) — `no-store`, cached by nothing,
108
+ * so there is nothing to purge; it is the admin console's cache-proof view.
109
+ * - `theme/styles.css`, `theme/init.js` — derived from `app:theme`, not branding,
110
+ * and served with a 60s max-age.
111
+ */
112
+ export const BRANDING_PUBLIC_PATHS = Object.freeze([
113
+ ...PUBLIC_LOGO_ROUTES.keys(),
114
+ OG_PNG_PATH,
115
+ ]);
116
+ /** The logo type a canonical public logo path serves, or null when it is not one. */
117
+ export function publicLogoType(pathname) {
118
+ return PUBLIC_LOGO_ROUTES.get(pathname) ?? null;
119
+ }
65
120
  /** Cache policy for the canonical logo paths — short, so branding changes reflect quickly. */
66
121
  export const LOGO_CACHE_CONTROL = "public, max-age=300";
67
122
  /** Cache policy for the preview alias — stored by nothing, anywhere. */
@@ -1 +1 @@
1
- {"version":3,"file":"logo-paths.js","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAE9E;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAiB;IACjD,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,aAAa,EAAE,YAAY,CAAC;IAC7B,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,UAAU,EAAE,SAAS,CAAC;IACvB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IACrC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;CACxC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC"}
1
+ {"version":3,"file":"logo-paths.js","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAE9E;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAiB;IACjD,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,aAAa,EAAE,YAAY,CAAC;IAC7B,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,UAAU,EAAE,SAAS,CAAC;IACvB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IACrC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;CACxC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,kBAAkB,GAAgC,IAAI,GAAG,CAAiB;IAC9E,CAAC,cAAc,EAAE,SAAS,CAAC;IAC3B,CAAC,oCAAoC,EAAE,QAAQ,CAAC;IAChD,CAAC,yCAAyC,EAAE,YAAY,CAAC;IACzD,CAAC,yCAAyC,EAAE,MAAM,CAAC;IACnD,CAAC,8CAA8C,EAAE,UAAU,CAAC;IAC5D,CAAC,4CAA4C,EAAE,SAAS,CAAC;IACzD,yCAAyC;IACzC,CAAC,uCAAuC,EAAE,SAAS,CAAC;IACpD,CAAC,+CAA+C,EAAE,gBAAgB,CAAC;IACnE,CAAC,gDAAgD,EAAE,iBAAiB,CAAC;IACrE,CAAC,wCAAwC,EAAE,SAAS,CAAC;CACtD,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,sCAAsC,CAAC;AAElE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACpE,GAAG,kBAAkB,CAAC,IAAI,EAAE;IAC5B,WAAW;CACZ,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC"}
@@ -1,12 +1,107 @@
1
+ /**
2
+ * A partial MUI palette for one mode, as projected by the host from the package's
3
+ * palette preset (arc#7078). Every field is optional; whatever is absent is completed
4
+ * from the built-in defaults by `formatThemeForOutput`'s deep merge.
5
+ */
6
+ export interface PackagePalette {
7
+ primary?: {
8
+ main?: string;
9
+ contrastText?: string;
10
+ };
11
+ background?: {
12
+ default?: string;
13
+ paper?: string;
14
+ };
15
+ text?: {
16
+ primary?: string;
17
+ secondary?: string;
18
+ };
19
+ divider?: string;
20
+ success?: {
21
+ main?: string;
22
+ };
23
+ error?: {
24
+ main?: string;
25
+ };
26
+ warning?: {
27
+ main?: string;
28
+ };
29
+ }
30
+ export interface PackageTheme {
31
+ light?: PackagePalette;
32
+ dark?: PackagePalette;
33
+ }
34
+ /**
35
+ * Host-supplied package identity — the `x-arc-pkg-branding` header on Workers
36
+ * (base64url, no padding, of UTF-8 JSON), or the same object in-process on the
37
+ * embedded (Node) host. connect-service never reads the package itself
38
+ * (ArcBlock/arc#7073 red line 1); the host projects it into exactly this shape.
39
+ *
40
+ * Wire shape (pinned by test/package-branding-wire.test.ts — arc encodes to it):
41
+ *
42
+ * ```jsonc
43
+ * {
44
+ * "name": "Market Pulse", // ≤ 256 UTF-8 bytes
45
+ * "description": "Real-time dashboard.", // ≤ 2048 UTF-8 bytes
46
+ * "logo": { "v": "3f9a0c1d2e4b5a67" }, // exactly 16 chars [A-Za-z0-9_-]: the first 16
47
+ * // chars of a content hash of the logo bytes
48
+ * // (red line 4). No path, no slot list.
49
+ * "theme": {
50
+ * "light": { // partial MUI palette; each key optional
51
+ * "primary": { "main": "#8a6208", "contrastText": "#fef7e5" },
52
+ * "background": { "default": "#f5f3ef", "paper": "#fefdfb" },
53
+ * "text": { "primary": "#2c2418", "secondary": "#736756" },
54
+ * "divider": "#e0dcd4",
55
+ * "success": { "main": "#4d8a30" },
56
+ * "error": { "main": "#c53030" },
57
+ * "warning": { "main": "#a16207" }
58
+ * },
59
+ * "dark": { ...same keys... }
60
+ * },
61
+ * "passportColor": "#8a6208" // #rrggbb only (the OG gradient parses 6-hex)
62
+ * }
63
+ * ```
64
+ *
65
+ * Colors: `#rgb`/`#rgba`/`#rrggbb`/`#rrggbbaa`, or `rgb()`/`rgba()`/`hsl()`/`hsla()` with
66
+ * 3–4 comma-separated numeric arguments (`12`, `12.5`, `.5`, optional `%`; literal ASCII
67
+ * spaces only) — what MUI's `decomposeColor` accepts, and a subset of the character
68
+ * whitelist `serveThemeStyles` applies — at most 64 UTF-8 bytes. In every group whose
69
+ * `main` the package sets (primary / success / error / warning), the default
70
+ * `light` / `dark` / `contrastText` are dropped so MUI derives them from that `main`
71
+ * (`contrastText` is kept when the package sends one).
72
+ *
73
+ * Trust boundary: this is an INTERNAL header. connect-service trusts it as the package's
74
+ * own declaration, so it must only be set by a host that first deletes any
75
+ * client-supplied `x-arc-pkg-branding` from the incoming request (arc-worker does:
76
+ * `handle-fetch.ts` deletes then re-injects it). A host that forwards client headers
77
+ * unfiltered must not use `parsePackageBrandingHeader` — a client could otherwise set
78
+ * any app's name, palette and passportColor on its own responses and on shared caches.
79
+ *
80
+ * Degradation: `name` / `description` keep their all-or-nothing rule (a wrong type or an
81
+ * over-limit value, or a dangerous / accessor top-level key, discards the whole object).
82
+ * The newer parts degrade individually: an invalid `logo` or `passportColor` is dropped on
83
+ * its own, and inside `theme` each invalid color is dropped on its own (a group or mode
84
+ * left empty disappears); unknown keys are ignored. None of them ever takes `name` /
85
+ * `description` down.
86
+ */
1
87
  export interface PackageBranding {
2
88
  name?: string;
3
89
  description?: string;
90
+ logo?: {
91
+ v: string;
92
+ };
93
+ theme?: PackageTheme;
94
+ passportColor?: string;
4
95
  }
5
96
  export interface AppInfo extends PackageBranding {
6
97
  name: string;
7
98
  icon?: string;
8
99
  }
9
100
  export declare function sanitizePackageBranding(value: unknown): PackageBranding | undefined;
101
+ /**
102
+ * Decode `x-arc-pkg-branding`. Call ONLY with a value the host itself injected after
103
+ * deleting any client-supplied copy — see the trust boundary on {@link PackageBranding}.
104
+ */
10
105
  export declare function parsePackageBrandingHeader(value: string | null | undefined): PackageBranding | undefined;
11
106
  export declare function packageBrandingCacheToken(value: unknown): string;
12
107
  //# sourceMappingURL=package-branding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-branding.d.ts","sourceRoot":"","sources":["../src/package-branding.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAQ,SAAQ,eAAe;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAoBnF;AAgBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAUxG;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQhE"}
1
+ {"version":3,"file":"package-branding.d.ts","sourceRoot":"","sources":["../src/package-branding.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAQ,SAAQ,eAAe;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CA2BnF;AAmFD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAUxG;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWhE"}
@@ -1,3 +1,4 @@
1
+ import { isPackageThemeColor } from "./theme-utils.js";
1
2
  const HEADER_MAX_BYTES = 4096;
2
3
  const JSON_MAX_BYTES = 3072;
3
4
  const NAME_MAX_BYTES = 256;
@@ -22,12 +23,85 @@ export function sanitizePackageBranding(value) {
22
23
  return undefined;
23
24
  result[key] = descriptor.value;
24
25
  }
26
+ const logo = sanitizeLogo(dataValue(descriptors.logo));
27
+ if (logo)
28
+ result.logo = logo;
29
+ const theme = sanitizeTheme(dataValue(descriptors.theme));
30
+ if (theme)
31
+ result.theme = theme;
32
+ const passportColor = dataValue(descriptors.passportColor);
33
+ if (typeof passportColor === "string" && PASSPORT_COLOR.test(passportColor))
34
+ result.passportColor = passportColor;
25
35
  return result;
26
36
  }
27
37
  catch {
28
38
  return undefined;
29
39
  }
30
40
  }
41
+ // ─── The newer parts: each degrades on its own ────────────────────────────
42
+ const LOGO_VERSION = /^[A-Za-z0-9_-]{16}$/;
43
+ const PASSPORT_COLOR = /^#[0-9a-fA-F]{6}$/;
44
+ /** The palette keys the wire carries, in canonical order. `null` = a bare color. */
45
+ const PALETTE_SCHEMA = [
46
+ ["primary", ["main", "contrastText"]],
47
+ ["background", ["default", "paper"]],
48
+ ["text", ["primary", "secondary"]],
49
+ ["divider", null],
50
+ ["success", ["main"]],
51
+ ["error", ["main"]],
52
+ ["warning", ["main"]],
53
+ ];
54
+ function isPlainObject(value) {
55
+ return typeof value === "object" && value !== null && !Array.isArray(value);
56
+ }
57
+ /** A descriptor's value only when it is a data property (never runs a getter). */
58
+ function dataValue(descriptor) {
59
+ return descriptor && "value" in descriptor ? descriptor.value : undefined;
60
+ }
61
+ /** An own data property of a plain object; anything else (accessor, throw) → undefined. */
62
+ function ownData(object, key) {
63
+ if (!isPlainObject(object))
64
+ return undefined;
65
+ try {
66
+ return dataValue(Object.getOwnPropertyDescriptor(object, key));
67
+ }
68
+ catch {
69
+ return undefined;
70
+ }
71
+ }
72
+ function sanitizeLogo(value) {
73
+ const v = ownData(value, "v");
74
+ return typeof v === "string" && LOGO_VERSION.test(v) ? { v } : undefined;
75
+ }
76
+ function sanitizePalette(value) {
77
+ const palette = {};
78
+ for (const [group, keys] of PALETTE_SCHEMA) {
79
+ const raw = ownData(value, group);
80
+ if (keys === null) {
81
+ if (isPackageThemeColor(raw))
82
+ palette[group] = raw;
83
+ continue;
84
+ }
85
+ const colors = {};
86
+ for (const key of keys) {
87
+ const color = ownData(raw, key);
88
+ if (isPackageThemeColor(color))
89
+ colors[key] = color;
90
+ }
91
+ if (Object.keys(colors).length > 0)
92
+ palette[group] = colors;
93
+ }
94
+ return Object.keys(palette).length > 0 ? palette : undefined;
95
+ }
96
+ function sanitizeTheme(value) {
97
+ const theme = {};
98
+ for (const mode of ["light", "dark"]) {
99
+ const palette = sanitizePalette(ownData(value, mode));
100
+ if (palette)
101
+ theme[mode] = palette;
102
+ }
103
+ return theme.light || theme.dark ? theme : undefined;
104
+ }
31
105
  function decodeBase64Url(value) {
32
106
  if (!value || value.length > HEADER_MAX_BYTES || !/^[A-Za-z0-9_-]+$/.test(value))
33
107
  return undefined;
@@ -44,6 +118,10 @@ function decodeBase64Url(value) {
44
118
  return undefined;
45
119
  }
46
120
  }
121
+ /**
122
+ * Decode `x-arc-pkg-branding`. Call ONLY with a value the host itself injected after
123
+ * deleting any client-supplied copy — see the trust boundary on {@link PackageBranding}.
124
+ */
47
125
  export function parsePackageBrandingHeader(value) {
48
126
  if (value == null)
49
127
  return undefined;
@@ -62,10 +140,13 @@ export function packageBrandingCacheToken(value) {
62
140
  const branding = sanitizePackageBranding(value);
63
141
  if (!branding)
64
142
  return "-1:";
65
- const canonical = JSON.stringify({
66
- ...(Object.hasOwn(branding, "name") ? { name: branding.name } : {}),
67
- ...(Object.hasOwn(branding, "description") ? { description: branding.description } : {}),
68
- });
143
+ // `sanitizePackageBranding` rebuilds every part in a fixed key order, so its JSON is
144
+ // canonical. It covers name/description AND logo.v / theme / passportColor: this
145
+ // token keys the CF `getOrBuildHandler` cache, the embedded `brandedHandlers` map
146
+ // and (through those handlers) `BrandingHandler._themeCache` — a part missing here
147
+ // would let two tenants share a handler and serve each other's logo or palette.
148
+ // Branding with only name/description yields the same bytes as before S5.
149
+ const canonical = JSON.stringify(branding);
69
150
  return `${encoder.encode(canonical).byteLength}:${canonical}`;
70
151
  }
71
152
  // `resolveAppInfo` moved to app-identity.ts (did#247) — it is now a view over
@@ -1 +1 @@
1
- {"version":3,"file":"package-branding.js","sourceRoot":"","sources":["../src/package-branding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-branding.js","sourceRoot":"","sources":["../src/package-branding.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAkwFzF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,EACb,MAAM,SAAK,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAcD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1D"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAkyFzF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,EACb,MAAM,SAAK,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAcD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1D"}
@@ -674,6 +674,14 @@ const en = {
674
674
  subPortrait: "ArcSphere Portrait",
675
675
  subLandscape: "ArcSphere Landscape",
676
676
  subSocial: "Social Preview",
677
+ sourceOverridden: "Overridden",
678
+ sourcePackage: "Inherited from app package",
679
+ sourceDeployment: "Deployment setting",
680
+ sourceDefault: "Built-in default",
681
+ sourceFollows: "Uses {slot}",
682
+ sourceNodeOnly: "Node deployments only",
683
+ restorePackage: "Restore package default",
684
+ restoreDefault: "Restore default",
677
685
  },
678
686
  appearance: {
679
687
  title: "Appearance",
@@ -1375,6 +1383,14 @@ const zh = {
1375
1383
  subPortrait: "ArcSphere \u7AD6\u5C4F",
1376
1384
  subLandscape: "ArcSphere \u6A2A\u5C4F",
1377
1385
  subSocial: "\u793E\u4EA4\u9884\u89C8",
1386
+ sourceOverridden: "已覆盖",
1387
+ sourcePackage: "继承自应用包",
1388
+ sourceDeployment: "部署设置",
1389
+ sourceDefault: "内置默认",
1390
+ sourceFollows: "沿用{slot}",
1391
+ sourceNodeOnly: "仅 Node 部署生效",
1392
+ restorePackage: "恢复为包默认",
1393
+ restoreDefault: "恢复默认",
1378
1394
  },
1379
1395
  appearance: {
1380
1396
  title: "\u5916\u89C2",
@@ -2079,6 +2095,14 @@ const zhTW = {
2079
2095
  subPortrait: "ArcSphere 豎屏",
2080
2096
  subLandscape: "ArcSphere 橫屏",
2081
2097
  subSocial: "社交預覽",
2098
+ sourceOverridden: "已覆寫",
2099
+ sourcePackage: "繼承自應用包",
2100
+ sourceDeployment: "部署設定",
2101
+ sourceDefault: "內建預設",
2102
+ sourceFollows: "沿用{slot}",
2103
+ sourceNodeOnly: "僅 Node 部署生效",
2104
+ restorePackage: "恢復為包預設",
2105
+ restoreDefault: "恢復預設",
2082
2106
  },
2083
2107
  appearance: {
2084
2108
  title: "外觀",
@@ -2780,6 +2804,14 @@ const ja = {
2780
2804
  subPortrait: "ArcSphere 縦向き",
2781
2805
  subLandscape: "ArcSphere 横向き",
2782
2806
  subSocial: "ソーシャルプレビュー",
2807
+ sourceOverridden: "上書き済み",
2808
+ sourcePackage: "アプリパッケージから継承",
2809
+ sourceDeployment: "デプロイ設定",
2810
+ sourceDefault: "組み込みの既定値",
2811
+ sourceFollows: "{slot} を使用",
2812
+ sourceNodeOnly: "Node デプロイのみ有効",
2813
+ restorePackage: "パッケージの既定値に戻す",
2814
+ restoreDefault: "既定値に戻す",
2783
2815
  },
2784
2816
  appearance: {
2785
2817
  title: "外観",