@spacefast/common 0.0.26 → 0.2.1
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/agents/connect-targets.d.ts +6 -146
- package/dist/agents/connect-targets.js +63 -295
- package/dist/agents/private-key-oauth.d.ts +31 -1
- package/dist/agents/private-key-oauth.js +124 -33
- package/dist/agents/registry/core.d.ts +292 -0
- package/dist/agents/registry/core.js +1388 -0
- package/dist/agents/registry/deeplink-probes.d.ts +23 -0
- package/dist/agents/registry/deeplink-probes.js +18 -0
- package/dist/agents/registry/node.d.ts +56 -0
- package/dist/agents/registry/node.js +339 -0
- package/dist/brand-assets-build.js +1 -2
- package/dist/brand-assets.js +4 -7
- package/dist/brand.d.ts +17 -0
- package/dist/brand.js +24 -4
- package/dist/config/domains.d.ts +55 -28
- package/dist/config/domains.js +85 -41
- package/dist/config/index.js +1 -2
- package/dist/contracts/abuse.js +9 -24
- package/dist/contracts/access-profiles.d.ts +86 -0
- package/dist/contracts/access-profiles.js +89 -0
- package/dist/contracts/access.d.ts +21 -27
- package/dist/contracts/access.js +33 -64
- package/dist/contracts/activity.d.ts +18 -1
- package/dist/contracts/activity.js +70 -26
- package/dist/contracts/analytics.js +8 -10
- package/dist/contracts/api-keys.d.ts +77 -52
- package/dist/contracts/api-keys.js +44 -24
- package/dist/contracts/application-journal.d.ts +216 -0
- package/dist/contracts/application-journal.js +167 -0
- package/dist/contracts/auth.d.ts +90 -17
- package/dist/contracts/auth.js +86 -17
- package/dist/contracts/beta.d.ts +9 -4
- package/dist/contracts/beta.js +20 -16
- package/dist/contracts/billing.js +7 -11
- package/dist/contracts/bootstrap.d.ts +791 -0
- package/dist/contracts/bootstrap.js +51 -0
- package/dist/contracts/builds.d.ts +186 -7
- package/dist/contracts/builds.js +75 -21
- package/dist/contracts/channels.d.ts +43 -0
- package/dist/contracts/channels.js +25 -9
- package/dist/contracts/cli.d.ts +7 -0
- package/dist/contracts/cli.js +6 -0
- package/dist/contracts/collab-public.d.ts +1 -1
- package/dist/contracts/collab-public.js +5 -8
- package/dist/contracts/comments.d.ts +45 -35
- package/dist/contracts/comments.js +107 -77
- package/dist/contracts/commerce.d.ts +165 -0
- package/dist/contracts/commerce.js +146 -0
- package/dist/contracts/common.d.ts +3 -3
- package/dist/contracts/common.js +18 -29
- package/dist/contracts/content-contract-verification.d.ts +521 -0
- package/dist/contracts/content-contract-verification.js +320 -0
- package/dist/contracts/content-platform-fixture.d.ts +1278 -0
- package/dist/contracts/content-platform-fixture.js +44 -0
- package/dist/contracts/content-program.d.ts +994 -0
- package/dist/contracts/content-program.js +658 -0
- package/dist/contracts/content-sync.d.ts +290 -0
- package/dist/contracts/content-sync.js +167 -0
- package/dist/contracts/content.d.ts +432 -0
- package/dist/contracts/content.js +303 -0
- package/dist/contracts/continuation.d.ts +17 -1
- package/dist/contracts/continuation.js +23 -23
- package/dist/contracts/countries.js +3 -4
- package/dist/contracts/crons.d.ts +17 -0
- package/dist/contracts/crons.js +33 -15
- package/dist/contracts/dashboard-prefs.d.ts +56 -0
- package/dist/contracts/dashboard-prefs.js +51 -0
- package/dist/contracts/device-auth.d.ts +234 -37
- package/dist/contracts/device-auth.js +267 -53
- package/dist/contracts/docs.d.ts +6 -10
- package/dist/contracts/docs.js +5 -13
- package/dist/contracts/domains.d.ts +499 -102
- package/dist/contracts/domains.js +169 -58
- package/dist/contracts/email-preferences.d.ts +3 -3
- package/dist/contracts/email-preferences.js +6 -7
- package/dist/contracts/enums.d.ts +26 -26
- package/dist/contracts/enums.js +61 -54
- package/dist/contracts/error-code-meta.d.ts +269 -7
- package/dist/contracts/error-code-meta.js +80 -5
- package/dist/contracts/error-codes.d.ts +5 -5
- package/dist/contracts/error-codes.js +78 -16
- package/dist/contracts/events.d.ts +100 -20
- package/dist/contracts/events.js +107 -20
- package/dist/contracts/execution.d.ts +47 -66
- package/dist/contracts/execution.js +51 -64
- package/dist/contracts/feature-lifecycle.d.ts +70 -14
- package/dist/contracts/feature-lifecycle.js +86 -15
- package/dist/contracts/features.d.ts +100 -37
- package/dist/contracts/features.js +21 -27
- package/dist/contracts/fixtures/content-platform-v1.json +1108 -0
- package/dist/contracts/frame-session.d.ts +192 -0
- package/dist/contracts/frame-session.js +164 -0
- package/dist/contracts/functions.d.ts +218 -211
- package/dist/contracts/functions.js +273 -260
- package/dist/contracts/grant-copy.d.ts +43 -0
- package/dist/contracts/grant-copy.js +44 -0
- package/dist/contracts/grants.d.ts +64 -56
- package/dist/contracts/grants.js +124 -23
- package/dist/contracts/ids.d.ts +4 -1
- package/dist/contracts/ids.js +4 -1
- package/dist/contracts/internal.d.ts +5 -4
- package/dist/contracts/internal.js +12 -3
- package/dist/contracts/mcp.d.ts +17 -0
- package/dist/contracts/mcp.js +23 -0
- package/dist/contracts/me.d.ts +6 -1
- package/dist/contracts/me.js +12 -6
- package/dist/contracts/notifications.d.ts +27 -29
- package/dist/contracts/notifications.js +9 -4
- package/dist/contracts/oauth-resources.d.ts +112 -10
- package/dist/contracts/oauth-resources.js +116 -11
- package/dist/contracts/oauth-scope-actions.d.ts +90 -0
- package/dist/contracts/oauth-scope-actions.js +126 -0
- package/dist/contracts/operations.d.ts +27 -4
- package/dist/contracts/operations.js +11 -5
- package/dist/contracts/pages.d.ts +29 -5
- package/dist/contracts/pages.js +22 -5
- package/dist/contracts/partner-notifications.d.ts +3 -0
- package/dist/contracts/partner-notifications.js +65 -0
- package/dist/contracts/{platform.d.ts → partner.d.ts} +29 -42
- package/dist/contracts/{platform.js → partner.js} +27 -40
- package/dist/contracts/plan-policy.d.ts +1 -1
- package/dist/contracts/principal-assertion.d.ts +43 -0
- package/dist/contracts/principal-assertion.js +67 -0
- package/dist/contracts/principals.d.ts +73 -0
- package/dist/contracts/principals.js +59 -0
- package/dist/contracts/privacy.d.ts +11 -0
- package/dist/contracts/privacy.js +17 -0
- package/dist/contracts/problem-document.js +3 -4
- package/dist/contracts/publish-archive.d.ts +116 -18
- package/dist/contracts/publish-archive.js +6 -3
- package/dist/contracts/push-new.d.ts +4 -4
- package/dist/contracts/quotas.js +3 -3
- package/dist/contracts/realtime.d.ts +52 -0
- package/dist/contracts/realtime.js +54 -0
- package/dist/contracts/repository-connections.d.ts +1 -1
- package/dist/contracts/repository-connections.js +6 -2
- package/dist/contracts/resources.d.ts +105 -14
- package/dist/contracts/resources.js +145 -21
- package/dist/contracts/route-inventory.d.ts +358 -0
- package/dist/contracts/route-inventory.js +141 -0
- package/dist/contracts/runtime-api.d.ts +112 -35
- package/dist/contracts/runtime-api.js +86 -66
- package/dist/contracts/runtime-app.d.ts +11 -21
- package/dist/contracts/runtime-app.js +39 -24
- package/dist/contracts/runtime-components.d.ts +143 -0
- package/dist/contracts/runtime-components.js +199 -0
- package/dist/contracts/runtime-db.d.ts +45 -19
- package/dist/contracts/runtime-db.js +85 -20
- package/dist/contracts/runtime-purge.js +3 -5
- package/dist/contracts/runtime-services.d.ts +43 -75
- package/dist/contracts/runtime-services.js +29 -49
- package/dist/contracts/runtime-storage.d.ts +14 -14
- package/dist/contracts/runtime-storage.js +28 -13
- package/dist/contracts/sf-config-v1.d.ts +14 -18
- package/dist/contracts/slugs.js +13 -4
- package/dist/contracts/space-config.d.ts +235 -28
- package/dist/contracts/space-config.js +246 -91
- package/dist/contracts/spaces.d.ts +360 -255
- package/dist/contracts/spaces.js +190 -122
- package/dist/contracts/superadmin-activity.d.ts +3 -43
- package/dist/contracts/superadmin-activity.js +6 -30
- package/dist/contracts/superadmin-emails.d.ts +1 -0
- package/dist/contracts/superadmin-emails.js +17 -1
- package/dist/contracts/superadmin-runtime.d.ts +199 -0
- package/dist/contracts/superadmin-runtime.js +141 -0
- package/dist/contracts/superadmin-search.d.ts +22 -2
- package/dist/contracts/superadmin-search.js +14 -6
- package/dist/contracts/superadmin-spaces.d.ts +435 -186
- package/dist/contracts/superadmin-spaces.js +131 -25
- package/dist/contracts/superadmin-teams.d.ts +3 -0
- package/dist/contracts/superadmin-teams.js +1 -2
- package/dist/contracts/superadmin-tenants.d.ts +627 -6
- package/dist/contracts/superadmin-tenants.js +32 -7
- package/dist/contracts/superadmin.d.ts +98 -16
- package/dist/contracts/superadmin.js +63 -10
- package/dist/contracts/tags.d.ts +85 -58
- package/dist/contracts/tags.js +44 -34
- package/dist/contracts/teams.d.ts +72 -9
- package/dist/contracts/teams.js +84 -25
- package/dist/contracts/tenants.d.ts +135 -0
- package/dist/contracts/tenants.js +120 -0
- package/dist/contracts/test-triggers.d.ts +70 -0
- package/dist/contracts/test-triggers.js +116 -0
- package/dist/contracts/theme-json.js +3 -8
- package/dist/contracts/transfers.d.ts +1 -0
- package/dist/contracts/transfers.js +1 -0
- package/dist/contracts/usage.d.ts +209 -0
- package/dist/contracts/usage.js +124 -12
- package/dist/contracts/variables.d.ts +2 -2
- package/dist/contracts/variables.js +9 -13
- package/dist/contracts/webhooks.d.ts +13 -5
- package/dist/contracts/webhooks.js +3 -1
- package/dist/contracts/zero.d.ts +57 -64
- package/dist/contracts/zero.js +68 -66
- package/dist/dashboard-paths/index.d.ts +24 -21
- package/dist/dashboard-paths/index.js +35 -47
- package/dist/dashboard-paths/route-reservations.generated.d.ts +2 -0
- package/dist/dashboard-paths/route-reservations.generated.js +36 -0
- package/dist/docs/agent-arrival.d.ts +92 -0
- package/dist/docs/agent-arrival.js +227 -0
- package/dist/docs/agent-output-policy.d.ts +6 -0
- package/dist/docs/agent-output-policy.js +22 -0
- package/dist/docs/agent-prose.d.ts +11 -17
- package/dist/docs/agent-prose.js +62 -37
- package/dist/docs/agent-setup.d.ts +72 -41
- package/dist/docs/agent-setup.js +336 -436
- package/dist/docs/catalog.d.ts +147 -89
- package/dist/docs/catalog.js +157 -42
- package/dist/docs/error-docs.d.ts +2098 -1
- package/dist/docs/error-docs.js +281 -16
- package/dist/docs/index-build.d.ts +0 -1
- package/dist/docs/index-build.js +2 -3
- package/dist/docs/page-context-prompt.d.ts +77 -0
- package/dist/docs/page-context-prompt.js +131 -0
- package/dist/docs/reference-urls.d.ts +46 -0
- package/dist/docs/reference-urls.js +79 -0
- package/dist/docs/search.d.ts +6 -8
- package/dist/docs/search.js +10 -13
- package/dist/docs/skill-distribution.d.ts +4 -1
- package/dist/docs/skill-distribution.js +10 -5
- package/dist/docs/skills.d.ts +117 -117
- package/dist/docs/skills.js +120 -72
- package/dist/docs/start-prompts.d.ts +45 -0
- package/dist/docs/start-prompts.js +62 -0
- package/dist/domain-exploration.js +9 -13
- package/dist/og-template.d.ts +56 -0
- package/dist/og-template.js +56 -0
- package/dist/slug-policy/index.js +5 -11
- package/dist/utils/browser-credential.d.ts +13 -6
- package/dist/utils/browser-credential.js +14 -7
- package/dist/utils/build-settings.d.ts +16 -0
- package/dist/utils/build-settings.js +63 -17
- package/dist/utils/canonical-json.d.ts +3 -5
- package/dist/utils/canonical-json.js +3 -5
- package/dist/utils/cast-transport.d.ts +5 -17
- package/dist/utils/cast-transport.js +6 -19
- package/dist/utils/claim-token.js +1 -2
- package/dist/utils/comment-avatars.js +4 -6
- package/dist/utils/concurrency.js +2 -3
- package/dist/utils/content-type.d.ts +7 -6
- package/dist/utils/content-type.js +73 -51
- package/dist/utils/credential-policy.d.ts +50 -6
- package/dist/utils/credential-policy.js +123 -57
- package/dist/utils/egress-policy.fixtures.json +1 -1
- package/dist/utils/generate-space-name.d.ts +3 -8
- package/dist/utils/generate-space-name.js +3 -8
- package/dist/utils/grants.d.ts +0 -1
- package/dist/utils/grants.js +4 -7
- package/dist/utils/gravatar.d.ts +2 -4
- package/dist/utils/gravatar.js +6 -12
- package/dist/utils/id-hints.js +14 -23
- package/dist/utils/idempotency.d.ts +3 -3
- package/dist/utils/idempotency.js +6 -7
- package/dist/utils/local-space-state.d.ts +15 -15
- package/dist/utils/local-space-state.js +34 -23
- package/dist/utils/oauth-signed-query.d.ts +3 -5
- package/dist/utils/oauth-signed-query.js +6 -9
- package/dist/utils/one-shot-replay.d.ts +3 -5
- package/dist/utils/one-shot-replay.js +3 -5
- package/dist/utils/page-colors.d.ts +4 -10
- package/dist/utils/page-colors.js +11 -35
- package/dist/utils/page-fonts.js +6 -11
- package/dist/utils/page-preview.d.ts +0 -1
- package/dist/utils/page-preview.js +0 -1
- package/dist/utils/pages.d.ts +22 -11
- package/dist/utils/pages.js +70 -30
- package/dist/utils/privacy-regions.d.ts +19 -0
- package/dist/utils/privacy-regions.js +91 -0
- package/dist/utils/publish-form-data.d.ts +4 -5
- package/dist/utils/publish-form-data.js +2 -3
- package/dist/utils/publish-policy.d.ts +10 -23
- package/dist/utils/publish-policy.js +63 -116
- package/dist/utils/query-client.d.ts +2 -0
- package/dist/utils/query-client.js +10 -1
- package/dist/utils/runtime-paths.d.ts +4 -4
- package/dist/utils/runtime-paths.js +6 -8
- package/dist/utils/runtime-upload.d.ts +4 -0
- package/dist/utils/runtime-upload.js +5 -0
- package/dist/utils/secure-local-file.d.ts +3 -3
- package/dist/utils/secure-local-file.js +18 -24
- package/dist/utils/space-config.d.ts +11 -14
- package/dist/utils/space-config.js +10 -16
- package/dist/utils/static-runtime-policy.d.ts +5 -8
- package/dist/utils/static-runtime-policy.generated.d.ts +16 -0
- package/dist/utils/static-runtime-policy.generated.js +70 -0
- package/dist/utils/static-runtime-policy.js +17 -84
- package/dist/utils/storage-policy.js +1 -2
- package/dist/utils/upload-session.js +8 -14
- package/dist/utils/version-path.js +11 -19
- package/dist/utils/wpcom-auth-redirects.d.ts +5 -14
- package/dist/utils/wpcom-auth-redirects.js +1 -4
- package/dist/vocabulary.d.ts +7 -7
- package/dist/vocabulary.js +30 -16
- package/package.json +14 -2
- package/dist/agents/client-registry.d.ts +0 -22
- package/dist/agents/client-registry.js +0 -41
- package/dist/docs/agent-handoff-document.d.ts +0 -15
- package/dist/docs/agent-handoff-document.js +0 -180
- package/dist/docs/agent-solutions.d.ts +0 -110
- package/dist/docs/agent-solutions.js +0 -183
- package/dist/utils/query-keys.d.ts +0 -84
- package/dist/utils/query-keys.js +0 -108
package/dist/utils/pages.js
CHANGED
|
@@ -34,22 +34,16 @@ export function escapePageHtml(value) {
|
|
|
34
34
|
.replaceAll("'", "'");
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* The custom properties a theme paints with.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* the user's light background.
|
|
42
|
-
*
|
|
43
|
-
* Exported because the dashboard's live preview paints the same tokens from an
|
|
44
|
-
* unsaved draft: it passes the colors it has already derived, and gets exactly
|
|
45
|
-
* what the published page would carry.
|
|
37
|
+
* The custom properties a theme paints with. A custom background pins a
|
|
38
|
+
* complete scheme for both OS modes; `--sf-bg` alone would leave dark-mode
|
|
39
|
+
* visitors with the dark foreground on a light background. Exported so the
|
|
40
|
+
* dashboard preview paints the same tokens from an unsaved draft.
|
|
46
41
|
*/
|
|
47
42
|
export function pageThemeCss(theme, derived = derivePageColors(theme)) {
|
|
48
43
|
const root = [];
|
|
49
44
|
const dark = [];
|
|
50
45
|
if (theme.accent || theme.background) {
|
|
51
|
-
// `derived.accent` is
|
|
52
|
-
// an arbitrary string straight from the theme.
|
|
46
|
+
// `derived.accent` is parse-validated, never a raw string from the theme.
|
|
53
47
|
if (theme.accent)
|
|
54
48
|
root.push(`--sf-accent:${derived.accent}`);
|
|
55
49
|
root.push(`--sf-on-accent:${derived.onAccent}`, `--sf-link:${derived.link}`);
|
|
@@ -82,8 +76,8 @@ function renderFiles(files) {
|
|
|
82
76
|
function renderFile(file) {
|
|
83
77
|
if (!file)
|
|
84
78
|
return '<p class="sf-empty">File unavailable.</p>';
|
|
85
|
-
// This page is itself the `?spacefast_view=1` representation, so
|
|
86
|
-
//
|
|
79
|
+
// This page is itself the `?spacefast_view=1` representation, so every link
|
|
80
|
+
// points straight at the canonical path.
|
|
87
81
|
const href = escapePageHtml(file.href);
|
|
88
82
|
const name = escapePageHtml(file.name);
|
|
89
83
|
const media = file.mime?.startsWith("image/")
|
|
@@ -91,11 +85,13 @@ function renderFile(file) {
|
|
|
91
85
|
: `<iframe class="sf-preview" src="${href}" title="Preview of ${name}" loading="lazy" sandbox></iframe>`;
|
|
92
86
|
return `<div class="sf-preview-wrap">${media}</div><dl class="sf-file-meta"><div><dt>Name</dt><dd>${name}</dd></div>${file.size ? `<div><dt>Size</dt><dd>${escapePageHtml(file.size)}</dd></div>` : ""}${file.mime ? `<div><dt>Type</dt><dd>${escapePageHtml(file.mime)}</dd></div>` : ""}</dl><div class="sf-actions"><a class="sf-button" href="${href}" download>Download</a><a class="sf-ghost" href="${href}">View raw</a></div>`;
|
|
93
87
|
}
|
|
94
|
-
function renderSpacefastBranding(hidden) {
|
|
88
|
+
function renderSpacefastBranding(hidden, supportUrl, partnerBranding) {
|
|
95
89
|
const wordmark = hidden
|
|
96
90
|
? ""
|
|
97
91
|
: `<span class="sf-powered" tabindex="0"><svg class="sf-wordmark" viewBox="0 0 152 28.9062" role="img" aria-label="Spacefast"><path fill="currentColor" d="${SPACEFAST_WORDMARK_PATH}"></path></svg><span class="sf-powered-line"><a href="https://spacefast.com">Best way to share what your agent made</a></span></span>`;
|
|
98
|
-
|
|
92
|
+
const helpUrl = supportUrl ?? (partnerBranding ? null : "https://spacefast.com/help");
|
|
93
|
+
const help = helpUrl ? `<a class="sf-help" href="${escapePageHtml(helpUrl)}">Need help?</a>` : "";
|
|
94
|
+
return `<footer class="sf-colophon"><div class="sf-colophon-row">${wordmark}${help}</div></footer>`;
|
|
99
95
|
}
|
|
100
96
|
function renderElement(element, context) {
|
|
101
97
|
switch (element) {
|
|
@@ -120,7 +116,7 @@ function renderElement(element, context) {
|
|
|
120
116
|
return escapePageHtml(visible < count ? `${label} · showing first ${visible}` : label);
|
|
121
117
|
}
|
|
122
118
|
case "sf-spacefast-branding":
|
|
123
|
-
return renderSpacefastBranding(context.hideSpacefastBranding);
|
|
119
|
+
return renderSpacefastBranding(context.hideSpacefastBranding, context.supportUrl, context.partnerBranding);
|
|
124
120
|
case "sf-files":
|
|
125
121
|
return renderFiles(context.files ?? []);
|
|
126
122
|
case "sf-file":
|
|
@@ -142,12 +138,17 @@ export function expandPageHtml(source, context) {
|
|
|
142
138
|
return name && knownElements.has(name) ? renderElement(name, context) : _match;
|
|
143
139
|
});
|
|
144
140
|
if (output.includes("/*sf-default-fonts*/")) {
|
|
145
|
-
output = output.replaceAll("/*sf-default-fonts*/", PAGE_FONT_FACES);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
141
|
+
output = output.replaceAll("/*sf-default-fonts*/", context.useSystemDisplayFont ? "" : PAGE_FONT_FACES);
|
|
142
|
+
if (context.useSystemDisplayFont) {
|
|
143
|
+
output = output.replaceAll('--sf-display-font:"Recoleta",Georgia,serif', "--sf-display-font:var(--sf-font)");
|
|
144
|
+
}
|
|
145
|
+
// Preloading ahead of the inline stylesheet starts the cross-origin
|
|
146
|
+
// fetches with the parse.
|
|
147
|
+
output = context.useSystemDisplayFont
|
|
148
|
+
? output
|
|
149
|
+
: /<\s*style\b/i.test(output)
|
|
150
|
+
? output.replace(/<\s*style\b/i, (tag) => `${PAGE_FONT_PRELOAD_HTML}${tag}`)
|
|
151
|
+
: `${PAGE_FONT_PRELOAD_HTML}${output}`;
|
|
151
152
|
}
|
|
152
153
|
const tokens = themeStyle(context.theme ?? {});
|
|
153
154
|
if (tokens) {
|
|
@@ -198,8 +199,7 @@ export function validatePageSources(input) {
|
|
|
198
199
|
const path = sourcePath.includes("_pages/") ? sourcePath : `_pages/${sourcePath}`;
|
|
199
200
|
const filename = path.slice(path.lastIndexOf("_pages/") + 7);
|
|
200
201
|
const id = filename.replace(/\.html$/i, "");
|
|
201
|
-
//
|
|
202
|
-
// gate and listing pages it has no per-directory form.
|
|
202
|
+
// One review room per Space, so collab has no per-directory form.
|
|
203
203
|
if (!customPageIds.has(id) ||
|
|
204
204
|
filename !== `${id}.html` ||
|
|
205
205
|
(id === "collab" && path !== COLLAB_PAGE_SOURCE)) {
|
|
@@ -227,8 +227,7 @@ export function validatePageSources(input) {
|
|
|
227
227
|
path,
|
|
228
228
|
});
|
|
229
229
|
for (const element of foundElements(source)) {
|
|
230
|
-
// Collab elements
|
|
231
|
-
// review room, meaningless anywhere the SDK is not the point.
|
|
230
|
+
// Collab elements belong to the browser SDK, legal only in the review room.
|
|
232
231
|
if (id === "collab" && collabElements.has(element))
|
|
233
232
|
continue;
|
|
234
233
|
if (!knownElements.has(element))
|
|
@@ -266,8 +265,8 @@ export function validatePageSources(input) {
|
|
|
266
265
|
message: "The index page does not render <sf-files>.",
|
|
267
266
|
path,
|
|
268
267
|
});
|
|
269
|
-
// Without the lane slot the runtime
|
|
270
|
-
//
|
|
268
|
+
// Without the lane slot the runtime cannot inject the sign-in, password
|
|
269
|
+
// and request blocks, and the gate ships dead.
|
|
271
270
|
if (id === "access" && !/<\s*sf-access-lanes\b/i.test(source))
|
|
272
271
|
diagnostics.push({
|
|
273
272
|
severity: "error",
|
|
@@ -385,8 +384,7 @@ export function defaultPageBody(id) {
|
|
|
385
384
|
const source = DEFAULT_PAGE_TEMPLATES[id];
|
|
386
385
|
return source.match(/<body[^>]*>([\s\S]*?)<\/body>/i)?.[1] ?? source;
|
|
387
386
|
}
|
|
388
|
-
// The built-in palette runs through the same readability engine as pushed
|
|
389
|
-
// themes, so buttons and links remain readable for every accepted accent.
|
|
387
|
+
// The built-in palette runs through the same readability engine as pushed themes.
|
|
390
388
|
const defaultPageColors = derivePageColors({});
|
|
391
389
|
const sharedCss = `/*sf-default-fonts*/:root{color-scheme:light dark;--sf-accent:${PAGE_COLOR_DEFAULTS.accent};--sf-bg:${PAGE_COLOR_DEFAULTS.bg};--sf-fg:${PAGE_COLOR_DEFAULTS.fg};--sf-muted:${PAGE_COLOR_DEFAULTS.muted};--sf-card:${PAGE_COLOR_DEFAULTS.card};--sf-border:${PAGE_COLOR_DEFAULTS.border};--sf-link:${defaultPageColors.link};--sf-on-accent:${defaultPageColors.onAccent};--sf-error:#a82d1a;--sf-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI",system-ui,Roboto,"Helvetica Neue",Arial,sans-serif;--sf-display-font:"Recoleta",Georgia,serif;--sf-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box}html{min-width:320px;background:var(--sf-bg);-webkit-font-smoothing:antialiased}body{margin:0;min-height:100vh;background:var(--sf-bg);color:var(--sf-fg);font:14px/1.65 var(--sf-font)}a{color:inherit}.sf-page{min-height:100vh;display:flex;flex-direction:column;padding:clamp(22px,4vw,44px)}.sf-header{display:flex;align-items:center;min-height:32px}.sf-page-center .sf-header{justify-content:center}.sf-brand{display:inline-flex;min-width:0;align-items:center;gap:10px;color:var(--sf-fg);text-decoration:none}.sf-brand-mark{width:7px;height:7px;flex:none;background:var(--sf-accent)}.sf-logo{width:28px;height:28px;flex:none;object-fit:contain}.sf-brand strong{min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:600}.sf-main{flex:1;width:100%;padding:clamp(34px,9vh,84px) 0}.sf-page-plain .sf-main{max-width:680px}.sf-page-center .sf-main{max-width:620px;margin:auto;display:flex;flex-direction:column;align-items:center;text-align:center}.sf-eyebrow{margin:0 0 14px;color:var(--sf-muted);font:500 11px/1.5 var(--sf-mono);letter-spacing:.12em;text-transform:uppercase;overflow-wrap:anywhere}.sf-page-center .sf-eyebrow{margin-bottom:16px}h1{max-width:20ch;margin:0 0 12px;color:var(--sf-fg);font:400 clamp(1.9rem,5vw,2.8rem)/1.22 var(--sf-display-font);letter-spacing:-.012em;text-wrap:balance}.sf-copy,.sf-sub{max-width:52ch;margin:0;color:var(--sf-muted);text-wrap:pretty}.sf-inline-path{font-family:var(--sf-mono);font-size:.9em;color:var(--sf-fg);overflow-wrap:anywhere}.sf-actions{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:22px}.sf-page-center .sf-actions{justify-content:center}.sf-button{display:inline-flex;min-height:44px;align-items:center;justify-content:center;border:0;background:var(--sf-accent);color:var(--sf-on-accent);padding:10px 16px;font:600 13px/1.4 var(--sf-font);text-decoration:none;cursor:pointer}.sf-ghost{color:var(--sf-muted);text-underline-offset:3px}.sf-button:hover{filter:brightness(1.06)}a:focus-visible,button:focus-visible{outline:2px solid var(--sf-link);outline-offset:2px}.sf-copy+.sf-copy{margin-top:12px}.sf-files{width:100%;margin:24px 0 0;padding:0;list-style:none}.sf-files li{display:flex;min-width:0;align-items:baseline;gap:18px;border-bottom:1px solid var(--sf-border)}.sf-files a{min-width:0;flex:1;padding:10px 2px;color:var(--sf-fg);font-weight:500;text-decoration:none}.sf-files a:hover{color:var(--sf-link)}.sf-file-name{overflow-wrap:anywhere}.sf-file-size{flex:none;padding:10px 2px;color:var(--sf-muted);font:12px/1.5 var(--sf-mono);white-space:nowrap}.sf-empty{max-width:420px;margin:24px 0 0;border:1px dashed var(--sf-border);padding:18px 20px;color:var(--sf-muted)}.sf-preview-wrap{width:min(100%,560px);aspect-ratio:16/9;margin:10px 0 18px;overflow:hidden;background:#fff;outline:1px solid color-mix(in srgb,var(--sf-fg) 10%,transparent);outline-offset:-1px}.sf-preview{display:block;width:100%;height:100%;border:0;object-fit:contain}.sf-file-meta{width:min(100%,560px);margin:0}.sf-file-meta div{display:flex;min-width:0;justify-content:space-between;gap:20px;border-bottom:1px solid var(--sf-border);padding:9px 2px}.sf-file-meta dt{color:var(--sf-fg);font-weight:600}.sf-file-meta dd{min-width:0;margin:0;color:var(--sf-muted);font-family:var(--sf-mono);overflow-wrap:anywhere;text-align:right}.sf-colophon{display:flex;flex-direction:column;align-items:center;gap:10px;padding:44px 0 26px;margin-top:auto;color:var(--sf-muted)}.sf-page-plain .sf-colophon{align-items:flex-start}.sf-colophon-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.sf-powered{display:inline-flex;align-items:center;gap:10px;cursor:pointer;outline:none}.sf-powered-line{display:none;font-size:12px;color:var(--sf-muted)}.sf-powered:hover .sf-powered-line,.sf-powered:focus .sf-powered-line,.sf-powered:focus-within .sf-powered-line{display:inline}.sf-powered-line a{color:var(--sf-link);text-decoration:underline;text-underline-offset:3px}.sf-help{font-size:12px;color:var(--sf-muted);text-decoration:underline;text-underline-offset:3px}.sf-help:hover{color:var(--sf-fg)}.sf-wordmark{display:block;flex:none;width:auto;height:14px;color:var(--sf-fg)}@media(max-width:520px){.sf-page{padding:20px}.sf-button{min-height:48px}.sf-file-meta div{flex-direction:column;gap:2px}.sf-file-meta dd{text-align:left}.sf-colophon{padding-top:32px}}@media(prefers-color-scheme:dark){:root{--sf-bg:${PAGE_COLOR_DEFAULTS.darkBg};--sf-fg:${PAGE_COLOR_DEFAULTS.darkFg};--sf-muted:${PAGE_COLOR_DEFAULTS.darkMuted};--sf-card:${PAGE_COLOR_DEFAULTS.darkCard};--sf-border:${PAGE_COLOR_DEFAULTS.darkBorder};--sf-link:${defaultPageColors.linkDark};--sf-error:#ff8a7a}.sf-preview-wrap{outline-color:#ffffff1a}}@media(forced-colors:active){.sf-brand-mark{background:CanvasText}.sf-button{border:1px solid ButtonText}.sf-powered:focus{outline:1px solid CanvasText;outline-offset:3px}}`;
|
|
392
390
|
const accessCss = `.sf-page.access .sf-main{max-width:26rem;padding:clamp(42px,8vh,72px) 0}.sf-page.access h1{max-width:18ch;margin-bottom:14px;font:600 clamp(2rem,7vw,2.65rem)/1.12 var(--sf-font);letter-spacing:-.035em}.sf-page.access .sf-copy{font-size:15px;line-height:1.6}.sf-access-default{display:flex;width:100%;flex-direction:column;align-items:center}.sf-access-status{padding:10px 12px;border:1px solid color-mix(in srgb,var(--sf-fg) 10%,transparent);border-radius:8px;background:color-mix(in srgb,var(--sf-fg) 4%,transparent);color:var(--sf-fg)}.sf-access-lanes{display:flex;flex-direction:column;gap:16px;width:min(23rem,100%);margin-top:30px;text-align:left}.sf-access-lanes form{display:flex;flex-direction:column;gap:14px;margin:0}.sf-input{box-sizing:border-box;width:100%;min-height:46px;padding:11px 12px;border:1px solid color-mix(in srgb,var(--sf-fg) 18%,transparent);border-radius:8px;outline:2px solid transparent;outline-offset:-1px;background:color-mix(in srgb,var(--sf-bg) 92%,var(--sf-fg));color:var(--sf-fg);font:500 15px/1.45 var(--sf-font);appearance:none}.sf-input::placeholder{color:color-mix(in srgb,var(--sf-muted) 82%,transparent);font:inherit}.sf-input:hover{border-color:color-mix(in srgb,var(--sf-fg) 34%,transparent)}.sf-input:focus-visible{border-color:var(--sf-accent);outline-color:var(--sf-accent)}textarea.sf-input{min-height:92px;resize:vertical}.sf-label{color:var(--sf-fg);font:600 13px/1.4 var(--sf-font)}.sf-access-lanes .sf-button{width:100%;min-height:46px;border-radius:8px}.sf-access-or{display:flex;align-items:center;gap:12px;color:var(--sf-muted);font-size:13px}.sf-access-or:before,.sf-access-or:after{content:"";flex:1;border-top:1px solid color-mix(in srgb,var(--sf-fg) 12%,transparent)}.sf-error{margin:0;color:var(--sf-error);font-size:14px}.sf-access-password-row{display:flex;gap:8px}.sf-access-password-row .sf-input{min-width:0;flex:1}.sf-access-password-row .sf-button{width:auto;flex:none}.sf-access-request{padding-top:2px}.sf-access-request summary{padding:4px 0;cursor:pointer;color:var(--sf-muted);font:550 14px/1.5 var(--sf-font)}.sf-access-request summary:hover{color:var(--sf-fg)}.sf-access-request[open] summary{color:var(--sf-fg)}.sf-access-request form{margin-top:16px}@media(max-width:520px){.sf-page.access .sf-main{padding:38px 0}.sf-page.access h1{font-size:2rem}.sf-page.access .sf-copy{font-size:16px}.sf-input{min-height:48px;font-size:16px}.sf-access-lanes .sf-button{min-height:48px}.sf-access-password-row{flex-direction:column}.sf-access-password-row .sf-button{width:100%}}@media(prefers-color-scheme:dark){.sf-access-status{background:color-mix(in srgb,var(--sf-fg) 5%,transparent)}}`;
|
|
@@ -405,6 +403,48 @@ export const DEFAULT_PAGE_TEMPLATES = {
|
|
|
405
403
|
index: document("index", "<sf-page-title></sf-page-title>", '<p class="sf-eyebrow"><sf-page-path></sf-page-path></p><h1><sf-page-title></sf-page-title></h1><p class="sf-sub"><sf-page-summary></sf-page-summary></p><sf-files></sf-files>', "plain"),
|
|
406
404
|
preview: document("preview", "<sf-page-title></sf-page-title>", '<p class="sf-eyebrow"><sf-page-path></sf-page-path></p><h1><sf-page-title></sf-page-title></h1><sf-file></sf-file>', "plain"),
|
|
407
405
|
};
|
|
406
|
+
const PLATFORM_PAGE_COPY = {
|
|
407
|
+
login: [401, "This space is for members", "Sign in to continue — you’ll come right back here."],
|
|
408
|
+
undeployed: [503, "Waiting for launch", "This space hasn’t been published yet. Check back soon."],
|
|
409
|
+
suspended: [402, "This space is paused", "Serving is on hold until billing is sorted out."],
|
|
410
|
+
legal: [
|
|
411
|
+
451,
|
|
412
|
+
"Unavailable for legal reasons",
|
|
413
|
+
"This space is blocked in response to a legal demand.",
|
|
414
|
+
],
|
|
415
|
+
gone: [404, "Nothing here", "This space is no longer available."],
|
|
416
|
+
"runtime-error": [
|
|
417
|
+
500,
|
|
418
|
+
"Something broke on our side",
|
|
419
|
+
"The runtime hit an error serving this page. Try again in a moment.",
|
|
420
|
+
],
|
|
421
|
+
"rate-limited": [
|
|
422
|
+
429,
|
|
423
|
+
"Slow down a second",
|
|
424
|
+
"Too many requests hit this space at once. Give it a moment and try again.",
|
|
425
|
+
],
|
|
426
|
+
"tier-unavailable": [503, "Back in a bit", "This space is temporarily unavailable."],
|
|
427
|
+
"proxy-error": [502, "The upstream missed the connection", "Try again in a moment."],
|
|
428
|
+
"method-not-allowed": [405, "That method won’t work here", "Try the request another way."],
|
|
429
|
+
"content-too-large": [413, "That request is too large", "Send a smaller request and try again."],
|
|
430
|
+
};
|
|
431
|
+
function platformDocument(id) {
|
|
432
|
+
const [status, title, description] = PLATFORM_PAGE_COPY[id];
|
|
433
|
+
return `<!doctype html>\n<html lang="en">\n<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="robots" content="noindex"><title>${title}</title><style>${sharedCss}</style></head>\n<body><div class="sf-page sf-page-center">${pageHeader}<main class="sf-main"><p class="sf-eyebrow">${status}</p><h1>${title}</h1><p class="sf-copy">${description}</p></main>${pageFooter}</div></body>\n</html>\n`;
|
|
434
|
+
}
|
|
435
|
+
export const DEFAULT_PLATFORM_PAGE_TEMPLATES = {
|
|
436
|
+
login: platformDocument("login"),
|
|
437
|
+
undeployed: platformDocument("undeployed"),
|
|
438
|
+
suspended: platformDocument("suspended"),
|
|
439
|
+
legal: platformDocument("legal"),
|
|
440
|
+
gone: platformDocument("gone"),
|
|
441
|
+
"runtime-error": platformDocument("runtime-error"),
|
|
442
|
+
"rate-limited": platformDocument("rate-limited"),
|
|
443
|
+
"tier-unavailable": platformDocument("tier-unavailable"),
|
|
444
|
+
"proxy-error": platformDocument("proxy-error"),
|
|
445
|
+
"method-not-allowed": platformDocument("method-not-allowed"),
|
|
446
|
+
"content-too-large": platformDocument("content-too-large"),
|
|
447
|
+
};
|
|
408
448
|
export const DEFAULT_LAYOUT_TEMPLATE = `<!doctype html>\n<html lang="en">\n<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title><sf-page-title></sf-page-title></title><style>${sharedCss}</style></head>\n<body><sf-content></sf-content></body>\n</html>\n`;
|
|
409
449
|
export function defaultPageTemplate(id) {
|
|
410
450
|
return DEFAULT_PAGE_TEMPLATES[id];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** EU 27 + CH, IS, LI, NO, GB. */
|
|
2
|
+
export declare const GDPR_COUNTRY_CODES: Set<string>;
|
|
3
|
+
export declare const GEO_COUNTRY_UNKNOWN = "unknown";
|
|
4
|
+
/**
|
|
5
|
+
* GDPR applicability FAILS CLOSED: an unknown or missing country is treated as
|
|
6
|
+
* inside the GDPR zone (wpcom `isGdprCountry`). Country codes are ISO 3166-1
|
|
7
|
+
* alpha-2, case-insensitive.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isGdprCountry(countryCode: string | null | undefined): boolean;
|
|
10
|
+
/** US states with comprehensive privacy laws, lowercase full names (wpcom `CCPARegions`). */
|
|
11
|
+
export declare const CCPA_REGIONS: Set<string>;
|
|
12
|
+
/**
|
|
13
|
+
* CCPA applicability FAILS OPEN: an unknown or missing region is NOT assumed
|
|
14
|
+
* to be a CCPA region (wpcom `pertainsToCCPA`: "if we aren't sure what the
|
|
15
|
+
* region is we shouldn't assume it pertains to CCPA"). Matches on substring,
|
|
16
|
+
* like wpcom, so a region string such as "california" or "California, US"
|
|
17
|
+
* both qualify.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isCcpaRegion(countryCode: string | null | undefined, region: string | null | undefined): boolean;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Privacy-regulation region lists, ported from wpcom's a8c-analytics
|
|
2
|
+
// (`a8c-analytics-src/kit/constants.ts`, verified 2026-08-23) so Spacefast's
|
|
3
|
+
// consent behavior matches WordPress.com's. One home for both the server-side
|
|
4
|
+
// Tag SDK and the dashboard consent engine.
|
|
5
|
+
/** EU 27 + CH, IS, LI, NO, GB. */
|
|
6
|
+
export const GDPR_COUNTRY_CODES = new Set([
|
|
7
|
+
"AT",
|
|
8
|
+
"BE",
|
|
9
|
+
"BG",
|
|
10
|
+
"CY",
|
|
11
|
+
"CZ",
|
|
12
|
+
"DE",
|
|
13
|
+
"DK",
|
|
14
|
+
"EE",
|
|
15
|
+
"ES",
|
|
16
|
+
"FI",
|
|
17
|
+
"FR",
|
|
18
|
+
"GR",
|
|
19
|
+
"HR",
|
|
20
|
+
"HU",
|
|
21
|
+
"IE",
|
|
22
|
+
"IT",
|
|
23
|
+
"LT",
|
|
24
|
+
"LU",
|
|
25
|
+
"LV",
|
|
26
|
+
"MT",
|
|
27
|
+
"NL",
|
|
28
|
+
"PL",
|
|
29
|
+
"PT",
|
|
30
|
+
"RO",
|
|
31
|
+
"SE",
|
|
32
|
+
"SI",
|
|
33
|
+
"SK",
|
|
34
|
+
"CH",
|
|
35
|
+
"IS",
|
|
36
|
+
"LI",
|
|
37
|
+
"NO",
|
|
38
|
+
"GB",
|
|
39
|
+
]);
|
|
40
|
+
export const GEO_COUNTRY_UNKNOWN = "unknown";
|
|
41
|
+
/**
|
|
42
|
+
* GDPR applicability FAILS CLOSED: an unknown or missing country is treated as
|
|
43
|
+
* inside the GDPR zone (wpcom `isGdprCountry`). Country codes are ISO 3166-1
|
|
44
|
+
* alpha-2, case-insensitive.
|
|
45
|
+
*/
|
|
46
|
+
export function isGdprCountry(countryCode) {
|
|
47
|
+
if (!countryCode || countryCode.toLowerCase() === GEO_COUNTRY_UNKNOWN) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return GDPR_COUNTRY_CODES.has(countryCode.toUpperCase());
|
|
51
|
+
}
|
|
52
|
+
/** US states with comprehensive privacy laws, lowercase full names (wpcom `CCPARegions`). */
|
|
53
|
+
export const CCPA_REGIONS = new Set([
|
|
54
|
+
"california",
|
|
55
|
+
"colorado",
|
|
56
|
+
"connecticut",
|
|
57
|
+
"delaware",
|
|
58
|
+
"florida",
|
|
59
|
+
"indiana",
|
|
60
|
+
"iowa",
|
|
61
|
+
"kentucky",
|
|
62
|
+
"maryland",
|
|
63
|
+
"minnesota",
|
|
64
|
+
"montana",
|
|
65
|
+
"nebraska",
|
|
66
|
+
"new hampshire",
|
|
67
|
+
"new jersey",
|
|
68
|
+
"oregon",
|
|
69
|
+
"rhode island",
|
|
70
|
+
"tennessee",
|
|
71
|
+
"texas",
|
|
72
|
+
"utah",
|
|
73
|
+
"virginia",
|
|
74
|
+
]);
|
|
75
|
+
/**
|
|
76
|
+
* CCPA applicability FAILS OPEN: an unknown or missing region is NOT assumed
|
|
77
|
+
* to be a CCPA region (wpcom `pertainsToCCPA`: "if we aren't sure what the
|
|
78
|
+
* region is we shouldn't assume it pertains to CCPA"). Matches on substring,
|
|
79
|
+
* like wpcom, so a region string such as "california" or "California, US"
|
|
80
|
+
* both qualify.
|
|
81
|
+
*/
|
|
82
|
+
export function isCcpaRegion(countryCode, region) {
|
|
83
|
+
if (countryCode && countryCode.toUpperCase() !== "US") {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!region || region.toLowerCase() === GEO_COUNTRY_UNKNOWN) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
const normalized = region.toLowerCase();
|
|
90
|
+
return [...CCPA_REGIONS].some((candidate) => normalized.includes(candidate));
|
|
91
|
+
}
|
|
@@ -16,17 +16,16 @@ export declare function createPublishFormData(input: {
|
|
|
16
16
|
upload: DirectPublishUpload;
|
|
17
17
|
clientAttribution: string;
|
|
18
18
|
spaceId?: string | undefined;
|
|
19
|
+
teamId?: string | undefined;
|
|
19
20
|
slug?: string | undefined;
|
|
20
21
|
title?: string | undefined;
|
|
21
22
|
description?: string | undefined;
|
|
22
23
|
/** Live promotion intent for archive builds; null produces an unpromoted ready version. */
|
|
23
24
|
channel?: "live" | null | undefined;
|
|
24
25
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* declared-session path; the multipart intake reads it from the `metadata`
|
|
29
|
-
* JSON field and folds it into `publishRequestSchema.sourceMetadata`.
|
|
26
|
+
* Build provenance for the version's build/deploy read models. A compiled
|
|
27
|
+
* runtime declares its artifact under its own key (e.g. `statticZero`); the
|
|
28
|
+
* multipart intake folds it into `publishRequestSchema.sourceMetadata`.
|
|
30
29
|
*/
|
|
31
30
|
sourceMetadata?: Record<string, unknown> | undefined;
|
|
32
31
|
/** Bounded build transcript recorded on the version when a build ran. */
|
|
@@ -3,11 +3,10 @@ export function createPublishFormData(input) {
|
|
|
3
3
|
const form = new FormData();
|
|
4
4
|
if (input.spaceId)
|
|
5
5
|
form.append("spaceId", input.spaceId);
|
|
6
|
+
if (input.teamId)
|
|
7
|
+
form.append("teamId", input.teamId);
|
|
6
8
|
if (input.description)
|
|
7
9
|
form.append("description", input.description);
|
|
8
|
-
// The multipart intake merges this JSON field into the parsed publish body
|
|
9
|
-
// (it reads `payload`/`publish`/`metadata`), so build provenance rides the
|
|
10
|
-
// one-shot form exactly as it rides the CLI's declared-session JSON body.
|
|
11
10
|
if (input.sourceMetadata || input.buildLog || input.channel !== undefined) {
|
|
12
11
|
form.append("metadata", JSON.stringify({
|
|
13
12
|
...(input.sourceMetadata ? { sourceMetadata: input.sourceMetadata } : {}),
|
|
@@ -11,26 +11,15 @@ export declare const STATIC_RUNTIME_CONTROL_PATHS: string[];
|
|
|
11
11
|
export declare const STATIC_RUNTIME_CONTROL_PREFIXES: string[];
|
|
12
12
|
export declare function normalizePublishPath(relativePath: string): string;
|
|
13
13
|
/**
|
|
14
|
-
* The one subtree inside the runtime control prefix
|
|
14
|
+
* The one subtree inside the runtime control prefix a publish may write, so a
|
|
15
|
+
* compiled worker bundle travels the ordinary manifest and upload path while
|
|
16
|
+
* staying unservable as static content.
|
|
15
17
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* needing a parallel one. Keeping it under the control prefix is what makes it
|
|
19
|
-
* unservable as static content by default — the runtime answers it only behind a
|
|
20
|
-
* signature.
|
|
21
|
-
*
|
|
22
|
-
* Scoped to `bundles/` rather than the whole `__spacefast/functions/` directory
|
|
23
|
-
* on purpose: the sibling `config.json` holds the key those signatures are
|
|
24
|
-
* minted with, and a publish that could overwrite it would be a publish that
|
|
25
|
-
* could mint its own tokens.
|
|
18
|
+
* Scoped to `bundles/`, not the whole `__spacefast/functions/` directory: the
|
|
19
|
+
* sibling `config.json` holds the key its signatures are minted with.
|
|
26
20
|
*/
|
|
27
21
|
export declare const PUBLISHABLE_BUILD_ARTIFACT_PREFIX = "__spacefast/functions/bundles/";
|
|
28
|
-
/**
|
|
29
|
-
* The bundle carve-out's sibling for the Next-cache seed document: the same
|
|
30
|
-
* reasoning (travel through the ordinary manifest and upload path, stay
|
|
31
|
-
* unservable by default), the same deliberate narrowness (a prefix of its
|
|
32
|
-
* own, never the whole `functions/` directory — see the bundle comment).
|
|
33
|
-
*/
|
|
22
|
+
/** The same carve-out for the Next-cache seed document. */
|
|
34
23
|
export declare const PUBLISHABLE_SEED_ARTIFACT_PREFIX = "__spacefast/functions/seeds/";
|
|
35
24
|
export declare function publishPathIgnored(relativePath: string): boolean;
|
|
36
25
|
export declare function publishPathIsConvention(relativePath: string): boolean;
|
|
@@ -96,12 +85,10 @@ export type PublishRouteOwnership = {
|
|
|
96
85
|
*/
|
|
97
86
|
export declare function canonicalizePublishRequestedRoute(route: string): string;
|
|
98
87
|
/**
|
|
99
|
-
* Expands artifact paths into the request routes they can serve
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* expansion in canonical access-route form so authorization and diagnostics
|
|
104
|
-
* never have to infer a route from an artifact path.
|
|
88
|
+
* Expands artifact paths into the request routes they can serve: literal
|
|
89
|
+
* files, directory indexes and clean `.html` aliases. Two artifacts owning one
|
|
90
|
+
* route is rejected at publish rather than left to lookup order.
|
|
91
|
+
* `routeOwnership` restates the expansion in canonical access-route form.
|
|
105
92
|
*/
|
|
106
93
|
export declare function analyzePublishRoutes(paths: readonly string[], options?: {
|
|
107
94
|
index?: string | false;
|