@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.
- package/dist/_generated/asset-bytes.js +1 -1
- package/dist/_generated/asset-manifest.js +2 -2
- package/dist/app-identity.d.ts +83 -11
- package/dist/app-identity.d.ts.map +1 -1
- package/dist/app-identity.js +108 -20
- package/dist/app-identity.js.map +1 -1
- package/dist/assets/{admin-extra.c7a0720f.js → admin-extra.da2c9785.js} +164 -10
- package/dist/assets/{admin.ab0009f2.css → admin.d99b416e.css} +23 -0
- package/dist/blocklet-service.d.ts +7 -0
- package/dist/blocklet-service.d.ts.map +1 -1
- package/dist/blocklet-service.js +17 -1
- package/dist/blocklet-service.js.map +1 -1
- package/dist/branding-sources.d.ts +60 -0
- package/dist/branding-sources.d.ts.map +1 -0
- package/dist/branding-sources.js +55 -0
- package/dist/branding-sources.js.map +1 -0
- package/dist/embedded.d.ts +11 -0
- package/dist/embedded.d.ts.map +1 -1
- package/dist/embedded.js +42 -32
- package/dist/embedded.js.map +1 -1
- package/dist/handlers/auth-handler.d.ts +18 -0
- package/dist/handlers/auth-handler.d.ts.map +1 -1
- package/dist/handlers/auth-handler.js +5 -0
- package/dist/handlers/auth-handler.js.map +1 -1
- package/dist/handlers/blocklet-js-handler.d.ts.map +1 -1
- package/dist/handlers/blocklet-js-handler.js +30 -18
- package/dist/handlers/blocklet-js-handler.js.map +1 -1
- package/dist/handlers/branding-handler.d.ts +67 -0
- package/dist/handlers/branding-handler.d.ts.map +1 -1
- package/dist/handlers/branding-handler.js +142 -57
- package/dist/handlers/branding-handler.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/logo-paths.d.ts +23 -0
- package/dist/logo-paths.d.ts.map +1 -1
- package/dist/logo-paths.js +57 -2
- package/dist/logo-paths.js.map +1 -1
- package/dist/package-branding.d.ts +95 -0
- package/dist/package-branding.d.ts.map +1 -1
- package/dist/package-branding.js +85 -4
- package/dist/package-branding.js.map +1 -1
- package/dist/pages/admin/i18n.d.ts.map +1 -1
- package/dist/pages/admin/i18n.js +32 -0
- package/dist/pages/admin/i18n.js.map +1 -1
- package/dist/pages/admin/styles.d.ts +1 -1
- package/dist/pages/admin/styles.d.ts.map +1 -1
- package/dist/pages/admin/styles.js +23 -0
- package/dist/pages/admin/styles.js.map +1 -1
- package/dist/pages/admin/tab-branding.d.ts.map +1 -1
- package/dist/pages/admin/tab-branding.js +180 -15
- package/dist/pages/admin/tab-branding.js.map +1 -1
- package/dist/theme-utils.d.ts +21 -0
- package/dist/theme-utils.d.ts.map +1 -1
- package/dist/theme-utils.js +62 -0
- package/dist/theme-utils.js.map +1 -1
- package/package.json +3 -3
package/dist/logo-paths.d.ts
CHANGED
|
@@ -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. */
|
package/dist/logo-paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo-paths.d.ts","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/dist/logo-paths.js
CHANGED
|
@@ -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
|
|
34
|
-
*
|
|
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. */
|
package/dist/logo-paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo-paths.js","sourceRoot":"","sources":["../src/logo-paths.ts"],"names":[],"mappings":"AAAA
|
|
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":"
|
|
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"}
|
package/dist/package-branding.js
CHANGED
|
@@ -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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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":"
|
|
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;
|
|
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"}
|
package/dist/pages/admin/i18n.js
CHANGED
|
@@ -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: "外観",
|