@spacefast/common 0.0.11 → 0.0.13
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 +4 -4
- package/dist/agents/connect-targets.js +3 -3
- package/dist/agents/private-key-oauth.d.ts +37 -0
- package/dist/agents/private-key-oauth.js +158 -0
- package/dist/config/domains.js +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +1 -0
- package/dist/config/postgres-budget.d.ts +126 -0
- package/dist/config/postgres-budget.js +135 -0
- package/dist/config/postgres-budget.json +50 -0
- package/dist/contracts/access.d.ts +386 -1183
- package/dist/contracts/access.js +240 -1018
- package/dist/contracts/activity.d.ts +1 -1
- package/dist/contracts/activity.js +11 -19
- package/dist/contracts/api-keys.d.ts +69 -45
- package/dist/contracts/api-keys.js +3 -0
- package/dist/contracts/archives.d.ts +9 -10
- package/dist/contracts/archives.js +4 -6
- package/dist/contracts/builds.d.ts +8 -8
- package/dist/contracts/builds.js +28 -48
- package/dist/contracts/channels.js +1 -2
- package/dist/contracts/comments.d.ts +102 -93
- package/dist/contracts/comments.js +121 -63
- package/dist/contracts/common.d.ts +4 -3
- package/dist/contracts/common.js +2 -0
- package/dist/contracts/countries.js +2 -7
- package/dist/contracts/data-source-routes.d.ts +20 -0
- package/dist/contracts/data-source-routes.js +15 -0
- package/dist/contracts/deployments.d.ts +3 -3
- package/dist/contracts/device-auth.d.ts +21 -15
- package/dist/contracts/docs.d.ts +5 -5
- package/dist/contracts/domains.d.ts +261 -1330
- package/dist/contracts/domains.js +39 -301
- package/dist/contracts/email-preferences.d.ts +50 -0
- package/dist/contracts/email-preferences.js +44 -0
- package/dist/contracts/enums.d.ts +3 -5
- package/dist/contracts/enums.js +3 -8
- package/dist/contracts/error-code-meta.d.ts +99 -33
- package/dist/contracts/error-code-meta.js +36 -9
- package/dist/contracts/error-codes.d.ts +1 -1
- package/dist/contracts/error-codes.js +28 -11
- package/dist/contracts/execution.d.ts +212 -0
- package/dist/contracts/execution.js +288 -0
- package/dist/contracts/feature-lifecycle.d.ts +498 -2
- package/dist/contracts/feature-lifecycle.js +539 -2
- package/dist/contracts/features.d.ts +184 -74
- package/dist/contracts/features.js +4 -303
- package/dist/contracts/functions.d.ts +729 -0
- package/dist/contracts/functions.js +485 -0
- package/dist/contracts/git.d.ts +1 -1
- package/dist/contracts/grants.d.ts +1158 -0
- package/dist/contracts/grants.js +696 -0
- package/dist/contracts/ids.d.ts +6 -5
- package/dist/contracts/ids.js +6 -5
- package/dist/contracts/internal.d.ts +3 -3
- package/dist/contracts/mcp.d.ts +12 -12
- package/dist/contracts/me.js +1 -1
- package/dist/contracts/mounts.d.ts +142 -0
- package/dist/contracts/mounts.js +56 -0
- package/dist/contracts/oauth-resources.d.ts +5 -5
- package/dist/contracts/oauth-resources.js +2 -0
- package/dist/contracts/operations.d.ts +4 -4
- package/dist/contracts/pages.d.ts +6 -14
- package/dist/contracts/pages.js +11 -23
- package/dist/contracts/plan-policy.d.ts +2 -9
- package/dist/contracts/plan-policy.js +1 -4
- package/dist/contracts/platform.d.ts +80 -32
- package/dist/contracts/platform.js +59 -12
- package/dist/contracts/push-new.d.ts +26 -2
- package/dist/contracts/push-new.js +8 -0
- package/dist/contracts/quotas.d.ts +0 -1
- package/dist/contracts/quotas.js +0 -5
- package/dist/contracts/repository-connections.d.ts +1 -1
- package/dist/contracts/resources.d.ts +21 -85
- package/dist/contracts/resources.js +17 -47
- package/dist/contracts/runtime-api.d.ts +799 -192
- package/dist/contracts/runtime-api.js +231 -100
- package/dist/contracts/runtime-app.d.ts +138 -0
- package/dist/contracts/runtime-app.js +21 -0
- package/dist/contracts/sf-config-v1.d.ts +5 -0
- package/dist/contracts/sf-config-v1.js +1 -1
- package/dist/contracts/sites.d.ts +17 -12
- package/dist/contracts/sites.js +30 -12
- package/dist/contracts/space-config.d.ts +46 -117
- package/dist/contracts/space-config.js +323 -25
- package/dist/contracts/spaces.d.ts +392 -256
- package/dist/contracts/spaces.js +163 -83
- package/dist/contracts/superadmin-emails.d.ts +27 -3
- package/dist/contracts/superadmin-emails.js +10 -15
- package/dist/contracts/superadmin-runtime.d.ts +2 -2
- package/dist/contracts/superadmin-spaces.d.ts +19 -142
- package/dist/contracts/superadmin-spaces.js +7 -0
- package/dist/contracts/tags.d.ts +66 -36
- package/dist/contracts/tags.js +195 -11
- package/dist/contracts/teams.d.ts +9 -9
- package/dist/contracts/transfers.d.ts +1 -2
- package/dist/contracts/variables.d.ts +4 -4
- package/dist/contracts/variables.js +4 -3
- package/dist/contracts/webhooks.d.ts +2 -2
- package/dist/contracts/zero.d.ts +437 -193
- package/dist/contracts/zero.js +149 -158
- package/dist/dashboard-paths/index.d.ts +3 -3
- package/dist/dashboard-paths/index.js +1 -0
- package/dist/docs/agent-prose.js +10 -8
- package/dist/docs/agent-setup.d.ts +6 -4
- package/dist/docs/agent-setup.js +26 -16
- package/dist/docs/agent-solutions.js +1 -1
- package/dist/docs/catalog.d.ts +35 -37
- package/dist/docs/catalog.js +36 -38
- package/dist/docs/error-docs.js +108 -44
- package/dist/utils/asset-fingerprint.d.ts +11 -0
- package/dist/utils/asset-fingerprint.js +46 -0
- package/dist/utils/auth-redirect.d.ts +1 -3
- package/dist/utils/auth-redirect.js +1 -21
- package/dist/utils/build-settings.d.ts +2 -0
- package/dist/utils/build-settings.js +61 -9
- package/dist/utils/credential-policy.d.ts +1 -1
- package/dist/utils/credential-policy.js +4 -0
- package/dist/utils/dns-instructions.d.ts +29 -0
- package/dist/utils/dns-instructions.js +78 -0
- package/dist/utils/domain-diagnostics.d.ts +29 -0
- package/dist/utils/domain-diagnostics.js +63 -0
- package/dist/utils/egress-policy.fixtures.json +51 -0
- package/dist/utils/grants.d.ts +53 -0
- package/dist/utils/grants.js +160 -0
- package/dist/utils/id-hints.d.ts +1 -0
- package/dist/utils/id-hints.js +55 -13
- package/dist/utils/local-space-state.js +1 -0
- package/dist/utils/page-colors.d.ts +50 -0
- package/dist/utils/page-colors.js +167 -0
- package/dist/utils/page-fonts.d.ts +2 -0
- package/dist/utils/page-fonts.js +4 -0
- package/dist/utils/pages.d.ts +19 -6
- package/dist/utils/pages.js +122 -49
- package/dist/utils/production-runtime.d.ts +18 -0
- package/dist/utils/production-runtime.js +28 -0
- package/dist/utils/publish-policy.d.ts +34 -4
- package/dist/utils/publish-policy.js +132 -61
- package/dist/utils/query-keys.d.ts +7 -13
- package/dist/utils/query-keys.js +12 -18
- package/dist/utils/source-archive-policy.d.ts +2 -0
- package/dist/utils/source-archive-policy.js +2 -0
- package/dist/utils/space-config.d.ts +5 -1
- package/dist/utils/space-config.js +35 -0
- package/dist/utils/static-runtime-policy.d.ts +5 -0
- package/dist/utils/static-runtime-policy.fixtures.json +57 -0
- package/dist/utils/static-runtime-policy.js +54 -10
- package/dist/utils/upload-session.d.ts +3 -0
- package/dist/utils/upload-session.js +31 -0
- package/package.json +6 -4
- package/dist/contracts/annotations.d.ts +0 -327
- package/dist/contracts/annotations.js +0 -235
- package/dist/contracts/generated-feature-launch-entries.d.ts +0 -2
- package/dist/contracts/generated-feature-launch-entries.js +0 -518
- package/dist/contracts/publishes.d.ts +0 -135
- package/dist/contracts/publishes.js +0 -162
- package/dist/utils/access-match.d.ts +0 -39
- package/dist/utils/access-match.js +0 -296
- package/dist/utils/sf-config-v1.d.ts +0 -2
- package/dist/utils/sf-config-v1.js +0 -542
|
@@ -1,42 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { FEATURE_RUNTIME_DEFINITIONS, FEATURE_RUNTIME_KEYS, } from "./feature-lifecycle.js";
|
|
2
3
|
// Spec plan vocabulary (internal-docs/platform.md "Plans And Limits").
|
|
3
4
|
// `enterprise` and `internal` are named plans without self-serve pricing.
|
|
4
5
|
export const PLAN_CODES = ["free", "personal", "work", "enterprise", "internal"];
|
|
5
6
|
export const planCodeSchema = z.enum(PLAN_CODES).describe("Plan code.");
|
|
6
7
|
export const DEFAULT_PLAN_CODE = "free";
|
|
7
|
-
export const FEATURE_KEYS =
|
|
8
|
-
"plans.paid.available",
|
|
9
|
-
"anonymous.publishing",
|
|
10
|
-
"beta.enrollment_gate",
|
|
11
|
-
"domains.search",
|
|
12
|
-
"domains.registration",
|
|
13
|
-
"domains.dns_management",
|
|
14
|
-
"domains.wpcom_dns",
|
|
15
|
-
"domains.domain_connect",
|
|
16
|
-
"domains.proxy_bindings",
|
|
17
|
-
"collab.preview_loader",
|
|
18
|
-
"collab.comments",
|
|
19
|
-
"collab.anonymous_commenters",
|
|
20
|
-
"collab.cli",
|
|
21
|
-
"collab.notices",
|
|
22
|
-
"collab.published_comments",
|
|
23
|
-
"collab.drawing",
|
|
24
|
-
"sites.dedicated_runtime",
|
|
25
|
-
"shelf",
|
|
26
|
-
"tags",
|
|
27
|
-
"zero",
|
|
28
|
-
// Access product phases (access-plan §7, X-42): every phase ships behind its
|
|
29
|
-
// own dot-namespaced key, born internal-only. The lifecycle registry
|
|
30
|
-
// (stage/docsSlug per internal-docs/feature-lifecycle-plan.html) is not
|
|
31
|
-
// implemented yet — these use the existing FeatureDefinition shape with
|
|
32
|
-
// internal-only defaults until it lands.
|
|
33
|
-
"access.share_links",
|
|
34
|
-
"access.invites",
|
|
35
|
-
"access.firewall_card",
|
|
36
|
-
"access.sso_connections",
|
|
37
|
-
"access.byo_issuers",
|
|
38
|
-
"access.views_panel",
|
|
39
|
-
];
|
|
8
|
+
export const FEATURE_KEYS = FEATURE_RUNTIME_KEYS;
|
|
40
9
|
export const featureKeySchema = z.enum(FEATURE_KEYS).describe("Feature flag key.");
|
|
41
10
|
// Feature override states (env `SPACEFAST_FLAG_*` and the feature_overrides
|
|
42
11
|
// table). `kill_switch` short-circuits every other resolution layer.
|
|
@@ -54,7 +23,6 @@ export const planLimitsSchema = z
|
|
|
54
23
|
teamMembers: planLimitValueSchema,
|
|
55
24
|
subTeams: planLimitValueSchema,
|
|
56
25
|
externalDomainGroups: planLimitValueSchema,
|
|
57
|
-
publicImmutableVersionWindowDays: planLimitValueSchema,
|
|
58
26
|
// Version retention (charter arbitration A3, internal plan data — never on
|
|
59
27
|
// the PlanPolicyResponse wire shape): `versionRetentionDays` is the included
|
|
60
28
|
// full-retention window; after it versions stay stored but gated until
|
|
@@ -79,12 +47,7 @@ export const planLimitsSchema = z
|
|
|
79
47
|
// Queryable analytics history window. Storage retains rollups for everyone
|
|
80
48
|
// (env-bounded); this only clamps how far back the analytics API serves.
|
|
81
49
|
analyticsRetentionDays: planLimitValueSchema,
|
|
82
|
-
// Access-surface abuse ceilings
|
|
83
|
-
// default, enterprise unlimited — never upsell levers. Per-plan tightening
|
|
84
|
-
// (if ever) happens here, never as constants in route code.
|
|
85
|
-
// Cloud-lane rules per space (incl. TTL'd blocks; managed blocks excluded
|
|
86
|
-
// from the count).
|
|
87
|
-
cloudRulesPerSpace: planLimitValueSchema,
|
|
50
|
+
// Access-surface abuse ceilings: generous by default, enterprise unlimited.
|
|
88
51
|
// Active (non-revoked, non-expired) share links per space.
|
|
89
52
|
shareLinksPerSpace: planLimitValueSchema,
|
|
90
53
|
// Active invites per space (§5.3 — enforced when invites land).
|
|
@@ -94,12 +57,6 @@ export const planLimitsSchema = z
|
|
|
94
57
|
inviteEmailsPerAccountDaily: planLimitValueSchema,
|
|
95
58
|
// Pending access requests per space (§5.4).
|
|
96
59
|
pendingAccessRequestsPerSpace: planLimitValueSchema,
|
|
97
|
-
// Service tokens per team (§5.5).
|
|
98
|
-
serviceTokensPerTeam: planLimitValueSchema,
|
|
99
|
-
// OIDC + external issuer connections per team (§6).
|
|
100
|
-
connectionsPerTeam: planLimitValueSchema,
|
|
101
|
-
// Team-default rules (X-24).
|
|
102
|
-
teamDefaultRules: planLimitValueSchema,
|
|
103
60
|
})
|
|
104
61
|
.describe("Named plan limit table.");
|
|
105
62
|
// Resolved team entitlements: plan limits after add-on grants plus the
|
|
@@ -109,9 +66,6 @@ export const teamEntitlementsSchema = z
|
|
|
109
66
|
.object({
|
|
110
67
|
planCode: planCodeSchema,
|
|
111
68
|
limits: planLimitsSchema,
|
|
112
|
-
headersBasicAuth: z
|
|
113
|
-
.boolean()
|
|
114
|
-
.describe("Whether `_headers` Basic-Auth rules compile on this plan."),
|
|
115
69
|
externalProxy: z.boolean().describe("Whether external proxy upstreams compile on this plan."),
|
|
116
70
|
dedicatedRuntime: z.boolean().describe("Whether the team can use dedicated runtime sites."),
|
|
117
71
|
pagesTemplates: z
|
|
@@ -150,7 +104,6 @@ const UNLIMITED_LIMITS = {
|
|
|
150
104
|
teamMembers: "unlimited",
|
|
151
105
|
subTeams: "unlimited",
|
|
152
106
|
externalDomainGroups: "unlimited",
|
|
153
|
-
publicImmutableVersionWindowDays: "unlimited",
|
|
154
107
|
versionRetentionDays: "unlimited",
|
|
155
108
|
versionGatedKeepDays: "unlimited",
|
|
156
109
|
egressBytesPerDay: "unlimited",
|
|
@@ -161,29 +114,21 @@ const UNLIMITED_LIMITS = {
|
|
|
161
114
|
buildAccessLogRetentionHours: "unlimited",
|
|
162
115
|
buildsDeploysMonthly: "unlimited",
|
|
163
116
|
analyticsRetentionDays: "unlimited",
|
|
164
|
-
cloudRulesPerSpace: "unlimited",
|
|
165
117
|
shareLinksPerSpace: "unlimited",
|
|
166
118
|
invitesPerSpace: "unlimited",
|
|
167
119
|
inviteEmailsPerSpaceDaily: "unlimited",
|
|
168
120
|
inviteEmailsPerAccountDaily: "unlimited",
|
|
169
121
|
pendingAccessRequestsPerSpace: "unlimited",
|
|
170
|
-
serviceTokensPerTeam: "unlimited",
|
|
171
|
-
connectionsPerTeam: "unlimited",
|
|
172
|
-
teamDefaultRules: "unlimited",
|
|
173
122
|
};
|
|
174
123
|
// The §5.1 access abuse-ceiling table (X-40): applied verbatim to every
|
|
175
124
|
// self-serve plan; enterprise/internal stay unlimited. These sit far above
|
|
176
125
|
// honest use — they are abuse ceilings, not upsell levers.
|
|
177
126
|
const ACCESS_QUOTA_DEFAULTS = {
|
|
178
|
-
cloudRulesPerSpace: 200,
|
|
179
127
|
shareLinksPerSpace: 100,
|
|
180
128
|
invitesPerSpace: 500,
|
|
181
129
|
inviteEmailsPerSpaceDaily: 200,
|
|
182
130
|
inviteEmailsPerAccountDaily: 500,
|
|
183
131
|
pendingAccessRequestsPerSpace: 100,
|
|
184
|
-
serviceTokensPerTeam: 50,
|
|
185
|
-
connectionsPerTeam: 10,
|
|
186
|
-
teamDefaultRules: 50,
|
|
187
132
|
};
|
|
188
133
|
export const PLAN_DEFINITIONS = {
|
|
189
134
|
free: {
|
|
@@ -195,7 +140,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
195
140
|
teamMembers: 3,
|
|
196
141
|
subTeams: 0,
|
|
197
142
|
externalDomainGroups: 3,
|
|
198
|
-
publicImmutableVersionWindowDays: 7,
|
|
199
143
|
versionRetentionDays: 30, // included full-retention window (charter A3)
|
|
200
144
|
versionGatedKeepDays: 183, // kept gated ~6 months from readyAt, then deleted
|
|
201
145
|
egressBytesPerDay: 100 * GB, // = worst-case ceiling; tunable per plan
|
|
@@ -208,7 +152,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
208
152
|
analyticsRetentionDays: 30,
|
|
209
153
|
...ACCESS_QUOTA_DEFAULTS,
|
|
210
154
|
},
|
|
211
|
-
headersBasicAuth: false,
|
|
212
155
|
externalProxy: false,
|
|
213
156
|
dedicatedRuntime: false,
|
|
214
157
|
pagesTemplates: false,
|
|
@@ -234,7 +177,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
234
177
|
analyticsRetentionDays: 365,
|
|
235
178
|
...ACCESS_QUOTA_DEFAULTS,
|
|
236
179
|
},
|
|
237
|
-
headersBasicAuth: true,
|
|
238
180
|
externalProxy: true,
|
|
239
181
|
dedicatedRuntime: false,
|
|
240
182
|
pagesTemplates: true,
|
|
@@ -256,7 +198,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
256
198
|
subTeams: 0,
|
|
257
199
|
...ACCESS_QUOTA_DEFAULTS,
|
|
258
200
|
},
|
|
259
|
-
headersBasicAuth: true,
|
|
260
201
|
externalProxy: true,
|
|
261
202
|
dedicatedRuntime: false,
|
|
262
203
|
pagesTemplates: true,
|
|
@@ -270,7 +211,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
270
211
|
name: "Enterprise",
|
|
271
212
|
monthlyPriceUsd: null,
|
|
272
213
|
limits: { ...UNLIMITED_LIMITS },
|
|
273
|
-
headersBasicAuth: true,
|
|
274
214
|
externalProxy: true,
|
|
275
215
|
dedicatedRuntime: true,
|
|
276
216
|
pagesTemplates: true,
|
|
@@ -283,7 +223,6 @@ export const PLAN_DEFINITIONS = {
|
|
|
283
223
|
name: "Internal",
|
|
284
224
|
monthlyPriceUsd: null,
|
|
285
225
|
limits: { ...UNLIMITED_LIMITS },
|
|
286
|
-
headersBasicAuth: true,
|
|
287
226
|
externalProxy: true,
|
|
288
227
|
dedicatedRuntime: true,
|
|
289
228
|
pagesTemplates: true,
|
|
@@ -292,245 +231,7 @@ export const PLAN_DEFINITIONS = {
|
|
|
292
231
|
analyticsHourlyGranularity: true,
|
|
293
232
|
},
|
|
294
233
|
};
|
|
295
|
-
export const FEATURE_DEFINITIONS =
|
|
296
|
-
"plans.paid.available": {
|
|
297
|
-
key: "plans.paid.available",
|
|
298
|
-
name: "Paid plans available",
|
|
299
|
-
description: "Controls whether paid plan upgrade and management surfaces are available.",
|
|
300
|
-
defaultEnabled: false,
|
|
301
|
-
enabledForA8c: true,
|
|
302
|
-
planDefaults: {},
|
|
303
|
-
},
|
|
304
|
-
"anonymous.publishing": {
|
|
305
|
-
key: "anonymous.publishing",
|
|
306
|
-
name: "Anonymous publishing",
|
|
307
|
-
description: "Allows unauthenticated space creation and publishing.",
|
|
308
|
-
defaultEnabled: true,
|
|
309
|
-
enabledForA8c: true,
|
|
310
|
-
planDefaults: {},
|
|
311
|
-
},
|
|
312
|
-
// Flipped in prod via env (`SPACEFAST_FLAG_BETA_ENROLLMENT_GATE`), so launch
|
|
313
|
-
// day is an env flip, not a deploy — exact precedent of anonymous.publishing.
|
|
314
|
-
"beta.enrollment_gate": {
|
|
315
|
-
key: "beta.enrollment_gate",
|
|
316
|
-
name: "Beta enrollment gate",
|
|
317
|
-
description: "Gates the whole API behind private-beta enrollment; non-enrolled credentials get 403 not_enrolled.",
|
|
318
|
-
defaultEnabled: false,
|
|
319
|
-
enabledForA8c: true,
|
|
320
|
-
planDefaults: {},
|
|
321
|
-
},
|
|
322
|
-
"domains.search": {
|
|
323
|
-
key: "domains.search",
|
|
324
|
-
name: "Domain search",
|
|
325
|
-
description: "Allows domain availability search and suggestion surfaces.",
|
|
326
|
-
defaultEnabled: false,
|
|
327
|
-
enabledInDevelopment: true,
|
|
328
|
-
enabledForA8c: true,
|
|
329
|
-
planDefaults: {},
|
|
330
|
-
},
|
|
331
|
-
"domains.registration": {
|
|
332
|
-
key: "domains.registration",
|
|
333
|
-
name: "Domain registration",
|
|
334
|
-
description: "Allows domain registration, purchase, and transfer-in surfaces.",
|
|
335
|
-
defaultEnabled: false,
|
|
336
|
-
enabledInDevelopment: true,
|
|
337
|
-
enabledForA8c: true,
|
|
338
|
-
planDefaults: {},
|
|
339
|
-
},
|
|
340
|
-
"domains.dns_management": {
|
|
341
|
-
key: "domains.dns_management",
|
|
342
|
-
name: "DNS management",
|
|
343
|
-
description: "Allows customer DNS zone, nameserver, and record-management surfaces.",
|
|
344
|
-
defaultEnabled: false,
|
|
345
|
-
enabledInDevelopment: true,
|
|
346
|
-
enabledForA8c: true,
|
|
347
|
-
planDefaults: {},
|
|
348
|
-
},
|
|
349
|
-
"domains.wpcom_dns": {
|
|
350
|
-
key: "domains.wpcom_dns",
|
|
351
|
-
name: "WordPress.com DNS automation",
|
|
352
|
-
description: "Manage a domain's DNS through the owner's WordPress.com account.",
|
|
353
|
-
defaultEnabled: false,
|
|
354
|
-
enabledForA8c: true,
|
|
355
|
-
planDefaults: {},
|
|
356
|
-
},
|
|
357
|
-
"domains.domain_connect": {
|
|
358
|
-
key: "domains.domain_connect",
|
|
359
|
-
name: "Domain Connect",
|
|
360
|
-
description: "One-click DNS setup at providers that implement Domain Connect.",
|
|
361
|
-
defaultEnabled: false,
|
|
362
|
-
enabledForA8c: true,
|
|
363
|
-
planDefaults: {},
|
|
364
|
-
},
|
|
365
|
-
"domains.proxy_bindings": {
|
|
366
|
-
key: "domains.proxy_bindings",
|
|
367
|
-
name: "Domain proxy bindings",
|
|
368
|
-
description: "Allow a team to proxy custom-domain traffic to an external HTTP upstream.",
|
|
369
|
-
defaultEnabled: false,
|
|
370
|
-
enabledForA8c: true,
|
|
371
|
-
planDefaults: {
|
|
372
|
-
internal: true,
|
|
373
|
-
},
|
|
374
|
-
},
|
|
375
|
-
"collab.preview_loader": {
|
|
376
|
-
key: "collab.preview_loader",
|
|
377
|
-
name: "Collab preview loader",
|
|
378
|
-
description: "Allows immutable version URLs to receive a no-secret preview overlay configuration.",
|
|
379
|
-
defaultEnabled: false,
|
|
380
|
-
enabledInDevelopment: true,
|
|
381
|
-
enabledForA8c: true,
|
|
382
|
-
planDefaults: {},
|
|
383
|
-
},
|
|
384
|
-
"collab.comments": {
|
|
385
|
-
key: "collab.comments",
|
|
386
|
-
name: "Comments",
|
|
387
|
-
description: "Enables Cast-backed comments on eligible immutable version URLs.",
|
|
388
|
-
defaultEnabled: false,
|
|
389
|
-
enabledInDevelopment: true,
|
|
390
|
-
enabledForA8c: true,
|
|
391
|
-
planDefaults: {},
|
|
392
|
-
},
|
|
393
|
-
"collab.anonymous_commenters": {
|
|
394
|
-
key: "collab.anonymous_commenters",
|
|
395
|
-
name: "Anonymous commenters",
|
|
396
|
-
description: "Allows anyone with the link to comment when space policy allows it.",
|
|
397
|
-
defaultEnabled: false,
|
|
398
|
-
enabledForA8c: true,
|
|
399
|
-
planDefaults: {},
|
|
400
|
-
},
|
|
401
|
-
"collab.cli": {
|
|
402
|
-
key: "collab.cli",
|
|
403
|
-
name: "Comments CLI access",
|
|
404
|
-
description: "Enables scriptable comment read, export, reply, and archive operations.",
|
|
405
|
-
defaultEnabled: false,
|
|
406
|
-
enabledInDevelopment: true,
|
|
407
|
-
enabledForA8c: true,
|
|
408
|
-
planDefaults: {},
|
|
409
|
-
},
|
|
410
|
-
"collab.notices": {
|
|
411
|
-
key: "collab.notices",
|
|
412
|
-
name: "Realtime notices",
|
|
413
|
-
description: "Reserved kill-switch for future realtime preview notices.",
|
|
414
|
-
defaultEnabled: false,
|
|
415
|
-
enabledForA8c: true,
|
|
416
|
-
planDefaults: {},
|
|
417
|
-
},
|
|
418
|
-
"collab.published_comments": {
|
|
419
|
-
key: "collab.published_comments",
|
|
420
|
-
name: "Published host comments",
|
|
421
|
-
description: "Allows the Collab overlay to mount comments on a space's live/published host, not just immutable preview URLs.",
|
|
422
|
-
defaultEnabled: false,
|
|
423
|
-
// ON in local dev so the Spacefast-native published path is exercised end-to-end
|
|
424
|
-
// alongside collab.comments (which already defaults on in dev).
|
|
425
|
-
// Production stays gated behind the per-space toggle.
|
|
426
|
-
enabledInDevelopment: true,
|
|
427
|
-
enabledForA8c: true,
|
|
428
|
-
planDefaults: {},
|
|
429
|
-
},
|
|
430
|
-
"collab.drawing": {
|
|
431
|
-
key: "collab.drawing",
|
|
432
|
-
name: "Collab drawing",
|
|
433
|
-
description: "Enables drawing feedback in the Collab overlay.",
|
|
434
|
-
defaultEnabled: true,
|
|
435
|
-
enabledInDevelopment: true,
|
|
436
|
-
enabledForA8c: true,
|
|
437
|
-
planDefaults: {},
|
|
438
|
-
},
|
|
439
|
-
"sites.dedicated_runtime": {
|
|
440
|
-
key: "sites.dedicated_runtime",
|
|
441
|
-
name: "Dedicated runtime sites",
|
|
442
|
-
description: "Allows teams to create dedicated WP.Cloud sites and place team spaces on them.",
|
|
443
|
-
defaultEnabled: false,
|
|
444
|
-
enabledInDevelopment: true,
|
|
445
|
-
enabledForA8c: true,
|
|
446
|
-
planDefaults: {},
|
|
447
|
-
},
|
|
448
|
-
shelf: {
|
|
449
|
-
key: "shelf",
|
|
450
|
-
name: "Shelf",
|
|
451
|
-
description: "Exposes the per-user artifact shelf: dashboard curation and public /shelf/{handle} pages.",
|
|
452
|
-
defaultEnabled: false,
|
|
453
|
-
enabledInDevelopment: true,
|
|
454
|
-
enabledForA8c: true,
|
|
455
|
-
planDefaults: {},
|
|
456
|
-
},
|
|
457
|
-
tags: {
|
|
458
|
-
key: "tags",
|
|
459
|
-
name: "Spacefast Tag Manager",
|
|
460
|
-
description: "Enables Spacefast Tag Manager command surfaces, SDK configuration, and governed tag workflows.",
|
|
461
|
-
defaultEnabled: false,
|
|
462
|
-
enabledInDevelopment: true,
|
|
463
|
-
enabledForA8c: true,
|
|
464
|
-
planDefaults: {},
|
|
465
|
-
},
|
|
466
|
-
zero: {
|
|
467
|
-
key: "zero",
|
|
468
|
-
name: "Spacefast Zero",
|
|
469
|
-
description: "Enables Spacefast Zero command surfaces and hosted Zero app workflows.",
|
|
470
|
-
defaultEnabled: false,
|
|
471
|
-
enabledForA8c: true,
|
|
472
|
-
planDefaults: {},
|
|
473
|
-
},
|
|
474
|
-
// Access product phases (access-plan §7, X-42). Shipped surfaces default on;
|
|
475
|
-
// later-stage identity-provider pieces stay override-gated until they are
|
|
476
|
-
// ready for the main product path. When the lifecycle registry (stage +
|
|
477
|
-
// docsSlug, internal-docs/feature-lifecycle-plan.html) lands, these migrate
|
|
478
|
-
// onto it.
|
|
479
|
-
"access.share_links": {
|
|
480
|
-
key: "access.share_links",
|
|
481
|
-
name: "Share links",
|
|
482
|
-
description: "Enables the Share modal's sharing projection, the general-access selector, and share-link create/copy/revoke (access-plan §5.1/§5.2).",
|
|
483
|
-
defaultEnabled: true,
|
|
484
|
-
enabledInDevelopment: true,
|
|
485
|
-
enabledForA8c: true,
|
|
486
|
-
planDefaults: {},
|
|
487
|
-
},
|
|
488
|
-
"access.invites": {
|
|
489
|
-
key: "access.invites",
|
|
490
|
-
name: "Space invites",
|
|
491
|
-
description: "Enables account-less viewer invites with magic-link accept and the request-access loop (access-plan §5.3/§5.4).",
|
|
492
|
-
defaultEnabled: false,
|
|
493
|
-
enabledInDevelopment: true,
|
|
494
|
-
enabledForA8c: true,
|
|
495
|
-
planDefaults: {},
|
|
496
|
-
},
|
|
497
|
-
"access.firewall_card": {
|
|
498
|
-
key: "access.firewall_card",
|
|
499
|
-
name: "Firewall card",
|
|
500
|
-
description: "Enables the managed firewall block card (country/IP/bot rules) in space access settings (access-plan §5.6).",
|
|
501
|
-
defaultEnabled: true,
|
|
502
|
-
enabledInDevelopment: true,
|
|
503
|
-
enabledForA8c: true,
|
|
504
|
-
planDefaults: {},
|
|
505
|
-
},
|
|
506
|
-
"access.sso_connections": {
|
|
507
|
-
key: "access.sso_connections",
|
|
508
|
-
name: "Company SSO connections",
|
|
509
|
-
description: "Enables team-level OIDC connections minted at the authorize endpoint (access-plan §6.2, X-18).",
|
|
510
|
-
defaultEnabled: false,
|
|
511
|
-
enabledInDevelopment: true,
|
|
512
|
-
enabledForA8c: true,
|
|
513
|
-
planDefaults: {},
|
|
514
|
-
},
|
|
515
|
-
"access.byo_issuers": {
|
|
516
|
-
key: "access.byo_issuers",
|
|
517
|
-
name: "Bring-your-own issuers",
|
|
518
|
-
description: "Enables owner-held external token issuers with ext:-namespace binding (access-plan §6.3, X-19).",
|
|
519
|
-
defaultEnabled: false,
|
|
520
|
-
enabledInDevelopment: true,
|
|
521
|
-
enabledForA8c: true,
|
|
522
|
-
planDefaults: {},
|
|
523
|
-
},
|
|
524
|
-
"access.views_panel": {
|
|
525
|
-
key: "access.views_panel",
|
|
526
|
-
name: "Views panel",
|
|
527
|
-
description: "Enables the identified who-viewed-what panel riding the analytics tiers (access-plan §5.6b, X-28).",
|
|
528
|
-
defaultEnabled: true,
|
|
529
|
-
enabledInDevelopment: true,
|
|
530
|
-
enabledForA8c: true,
|
|
531
|
-
planDefaults: {},
|
|
532
|
-
},
|
|
533
|
-
};
|
|
234
|
+
export const FEATURE_DEFINITIONS = FEATURE_RUNTIME_DEFINITIONS;
|
|
534
235
|
export const featureStateSourceSchema = z
|
|
535
236
|
.enum(["kill_switch", "env", "override", "default"])
|
|
536
237
|
.describe("Layer that decided the flag: kill_switch (emergency off), env (SPACEFAST_FLAG_* variable), " +
|