@pithy-sh/core 0.9.0 → 0.11.0
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/access/access.d.ts +172 -0
- package/dist/access/access.d.ts.map +1 -0
- package/dist/access/access.js +147 -0
- package/dist/access/acting.d.ts +49 -0
- package/dist/access/acting.d.ts.map +1 -0
- package/dist/access/acting.js +21 -0
- package/dist/access/policyCheck.d.ts +33 -0
- package/dist/access/policyCheck.d.ts.map +1 -0
- package/dist/access/policyCheck.js +48 -0
- package/dist/access/usage.d.ts +83 -0
- package/dist/access/usage.d.ts.map +1 -0
- package/dist/access/usage.js +104 -0
- package/dist/access/visibility.d.ts +66 -0
- package/dist/access/visibility.d.ts.map +1 -0
- package/dist/access/visibility.js +86 -0
- package/dist/asyncapi/document.d.ts +46 -0
- package/dist/asyncapi/document.d.ts.map +1 -0
- package/dist/asyncapi/document.js +115 -0
- package/dist/audit/auditEvent.d.ts +5 -0
- package/dist/audit/auditEvent.d.ts.map +1 -1
- package/dist/audit/auditEvent.js +2 -0
- package/dist/capability/bindings.d.ts +47 -2
- package/dist/capability/bindings.d.ts.map +1 -1
- package/dist/capability/bindings.js +117 -7
- package/dist/capability/capability.d.ts +105 -28
- package/dist/capability/capability.d.ts.map +1 -1
- package/dist/capability/composition.d.ts.map +1 -1
- package/dist/capability/composition.js +5 -1
- package/dist/capability/manifest.d.ts +2 -1
- package/dist/capability/manifest.d.ts.map +1 -1
- package/dist/capability/manifest.js +1 -1
- package/dist/capability/settings.d.ts +96 -4
- package/dist/capability/settings.d.ts.map +1 -1
- package/dist/capability/settings.js +85 -4
- package/dist/cli/command.d.ts +364 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +418 -0
- package/dist/cli/commandCatalog.generated.d.ts +2437 -0
- package/dist/cli/commandCatalog.generated.d.ts.map +1 -0
- package/dist/cli/commandCatalog.generated.js +2564 -0
- package/dist/cli/commandFacts.d.ts +164 -0
- package/dist/cli/commandFacts.d.ts.map +1 -0
- package/dist/cli/commandFacts.js +216 -0
- package/dist/controlPlane/capability.d.ts.map +1 -1
- package/dist/controlPlane/capability.js +12 -2
- package/dist/controlPlane/context.d.ts +5 -0
- package/dist/controlPlane/context.d.ts.map +1 -1
- package/dist/controlPlane/context.js +3 -1
- package/dist/controlPlane/data/connection.d.ts +47 -0
- package/dist/controlPlane/data/connection.d.ts.map +1 -1
- package/dist/controlPlane/data/connection.js +55 -1
- package/dist/controlPlane/error/errors.d.ts.map +1 -1
- package/dist/controlPlane/error/errors.js +4 -3
- package/dist/controlPlane/http/cors.d.ts +4 -4
- package/dist/controlPlane/http/cors.js +4 -4
- package/dist/controlPlane/http/guard.d.ts +11 -0
- package/dist/controlPlane/http/guard.d.ts.map +1 -1
- package/dist/controlPlane/http/guard.js +28 -2
- package/dist/controlPlane/http/handlers.d.ts +60 -0
- package/dist/controlPlane/http/handlers.d.ts.map +1 -1
- package/dist/controlPlane/http/handlers.js +31 -2
- package/dist/controlPlane/http/readiness.d.ts +33 -0
- package/dist/controlPlane/http/readiness.d.ts.map +1 -0
- package/dist/controlPlane/http/readiness.js +39 -0
- package/dist/controlPlane/http/responses.d.ts +147 -0
- package/dist/controlPlane/http/responses.d.ts.map +1 -1
- package/dist/controlPlane/http/responses.js +61 -4
- package/dist/controlPlane/http/routes.d.ts +2 -1
- package/dist/controlPlane/http/routes.d.ts.map +1 -1
- package/dist/controlPlane/http/routes.js +50 -9
- package/dist/controlPlane/http/verify.d.ts.map +1 -1
- package/dist/controlPlane/http/verify.js +2 -1
- package/dist/controlPlane/migrationState/migrationState.d.ts +102 -0
- package/dist/controlPlane/migrationState/migrationState.d.ts.map +1 -0
- package/dist/controlPlane/migrationState/migrationState.js +142 -0
- package/dist/controlPlane/migrations/0003_connection_principal.d.ts +21 -0
- package/dist/controlPlane/migrations/0003_connection_principal.d.ts.map +1 -0
- package/dist/controlPlane/migrations/0003_connection_principal.js +33 -0
- package/dist/controlPlane/scope/scope.d.ts +13 -2
- package/dist/controlPlane/scope/scope.d.ts.map +1 -1
- package/dist/controlPlane/scope/scope.js +14 -3
- package/dist/createBackend.d.ts +7 -0
- package/dist/createBackend.d.ts.map +1 -1
- package/dist/createBackend.js +41 -6
- package/dist/createEntrypoint.d.ts.map +1 -1
- package/dist/createEntrypoint.js +5 -3
- package/dist/entitlement/allowance.d.ts +25 -0
- package/dist/entitlement/allowance.d.ts.map +1 -0
- package/dist/entitlement/allowance.js +80 -0
- package/dist/entitlement/entitlement.d.ts +41 -0
- package/dist/entitlement/entitlement.d.ts.map +1 -1
- package/dist/entitlement/meter.d.ts +57 -0
- package/dist/entitlement/meter.d.ts.map +1 -0
- package/dist/entitlement/meter.js +13 -0
- package/dist/entitlement/require.js +1 -1
- package/dist/error/cause.d.ts +16 -116
- package/dist/error/cause.d.ts.map +1 -1
- package/dist/error/cause.js +19 -153
- package/dist/error/http.d.ts +184 -0
- package/dist/error/http.d.ts.map +1 -1
- package/dist/error/payload.d.ts +368 -0
- package/dist/error/payload.d.ts.map +1 -1
- package/dist/error/payload.js +126 -4
- package/dist/error/pithyError.d.ts +44 -0
- package/dist/error/pithyError.d.ts.map +1 -1
- package/dist/error/pithyError.js +56 -1
- package/dist/error/unresolved.d.ts +265 -0
- package/dist/error/unresolved.d.ts.map +1 -0
- package/dist/error/unresolved.js +599 -0
- package/dist/error/wire.d.ts +20 -0
- package/dist/error/wire.d.ts.map +1 -0
- package/dist/error/wire.js +19 -0
- package/dist/http/authContext.d.ts +7 -0
- package/dist/http/authContext.d.ts.map +1 -1
- package/dist/http/authContext.js +8 -1
- package/dist/http/oidcWebhook.d.ts +3 -3
- package/dist/http/oidcWebhook.js +3 -3
- package/dist/http/routeContract.js +1 -1
- package/dist/http/routeSpec.d.ts +66 -0
- package/dist/http/routeSpec.d.ts.map +1 -0
- package/dist/http/routeSpec.js +40 -0
- package/dist/http/sameOrigin.d.ts +1 -1
- package/dist/http/sameOrigin.js +1 -1
- package/dist/http/scopeGates.d.ts +20 -0
- package/dist/http/scopeGates.d.ts.map +1 -0
- package/dist/http/scopeGates.js +36 -0
- package/dist/http/signedWebhook.d.ts +3 -3
- package/dist/http/signedWebhook.js +3 -3
- package/dist/http/socket.d.ts +52 -0
- package/dist/http/socket.d.ts.map +1 -0
- package/dist/http/socket.js +2 -0
- package/dist/http/subprotocol.d.ts +29 -0
- package/dist/http/subprotocol.d.ts.map +1 -0
- package/dist/http/subprotocol.js +37 -0
- package/dist/http/validation.d.ts +40 -8
- package/dist/http/validation.d.ts.map +1 -1
- package/dist/http/validation.js +25 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/logger/record.d.ts +107 -0
- package/dist/logger/record.d.ts.map +1 -1
- package/dist/migrations/bookkeeping.d.ts +21 -0
- package/dist/migrations/bookkeeping.d.ts.map +1 -1
- package/dist/migrations/bookkeeping.js +32 -3
- package/dist/migrations/capabilitySets.d.ts +23 -0
- package/dist/migrations/capabilitySets.d.ts.map +1 -0
- package/dist/migrations/capabilitySets.js +74 -0
- package/dist/migrations/groups.d.ts +140 -0
- package/dist/migrations/groups.d.ts.map +1 -0
- package/dist/migrations/groups.js +191 -0
- package/dist/migrations/migrateStep.d.ts +13 -0
- package/dist/migrations/migrateStep.d.ts.map +1 -0
- package/dist/migrations/migrateStep.js +20 -0
- package/dist/migrations/owner.d.ts +7 -0
- package/dist/migrations/owner.d.ts.map +1 -1
- package/dist/migrations/owner.js +11 -7
- package/dist/migrations/registry.d.ts +26 -0
- package/dist/migrations/registry.d.ts.map +1 -1
- package/dist/migrations/registry.js +38 -7
- package/dist/migrations/retained.js +2 -2
- package/dist/migrations/runner.d.ts +76 -5
- package/dist/migrations/runner.d.ts.map +1 -1
- package/dist/migrations/runner.js +130 -19
- package/dist/migrations/state.d.ts +60 -0
- package/dist/migrations/state.d.ts.map +1 -0
- package/dist/migrations/state.js +46 -0
- package/dist/naming/domains.d.ts +17 -0
- package/dist/naming/domains.d.ts.map +1 -1
- package/dist/naming/domains.js +62 -4
- package/dist/naming/environment.d.ts.map +1 -1
- package/dist/naming/environment.js +2 -1
- package/dist/naming/feature.d.ts +27 -5
- package/dist/naming/feature.d.ts.map +1 -1
- package/dist/naming/feature.js +36 -6
- package/dist/naming/limits.d.ts +47 -3
- package/dist/naming/limits.d.ts.map +1 -1
- package/dist/naming/limits.js +47 -3
- package/dist/naming/packageName.d.ts +17 -0
- package/dist/naming/packageName.d.ts.map +1 -0
- package/dist/naming/packageName.js +22 -0
- package/dist/naming/provisionScope.d.ts +6 -0
- package/dist/naming/provisionScope.d.ts.map +1 -1
- package/dist/naming/provisionScope.js +10 -4
- package/dist/naming/resourceNames.d.ts +21 -2
- package/dist/naming/resourceNames.d.ts.map +1 -1
- package/dist/naming/resourceNames.js +21 -3
- package/dist/openapi/document.d.ts +106 -0
- package/dist/openapi/document.d.ts.map +1 -0
- package/dist/openapi/document.js +314 -0
- package/dist/openapi/routeGroups.d.ts +8 -0
- package/dist/openapi/routeGroups.d.ts.map +1 -0
- package/dist/openapi/routeGroups.js +23 -0
- package/dist/seed/writeD1.d.ts +7 -1
- package/dist/seed/writeD1.d.ts.map +1 -1
- package/dist/seed/writeD1.js +9 -3
- package/dist/seed/writeKv.d.ts +2 -0
- package/dist/seed/writeKv.d.ts.map +1 -1
- package/dist/seed/writeKv.js +6 -2
- package/dist/text/comments.js +66 -4
- package/dist/text/literals.d.ts +43 -0
- package/dist/text/literals.d.ts.map +1 -0
- package/dist/text/literals.js +293 -0
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.d.ts.map +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/worker/serviceLoopback.d.ts +36 -0
- package/dist/worker/serviceLoopback.d.ts.map +1 -0
- package/dist/worker/serviceLoopback.js +74 -0
- package/dist/workflow/dispatchRoute.d.ts.map +1 -1
- package/dist/workflow/dispatchRoute.js +12 -6
- package/dist/workflow/faults.d.ts +12 -1
- package/dist/workflow/faults.d.ts.map +1 -1
- package/dist/workflow/faults.js +24 -18
- package/dist/workflow/hostEnv.d.ts +1 -0
- package/dist/workflow/hostEnv.d.ts.map +1 -1
- package/dist/workflow/hostEnv.js +4 -2
- package/dist/workflow/loopback.d.ts.map +1 -1
- package/dist/workflow/loopback.js +2 -1
- package/package.json +4 -4
- package/src/access/access.ts +298 -0
- package/src/access/acting.ts +59 -0
- package/src/access/policyCheck.ts +77 -0
- package/src/access/usage.ts +141 -0
- package/src/access/visibility.ts +109 -0
- package/src/asyncapi/document.ts +164 -0
- package/src/audit/auditEvent.ts +4 -0
- package/src/capability/bindings.ts +159 -13
- package/src/capability/capability.ts +106 -29
- package/src/capability/composition.ts +2 -1
- package/src/capability/settings.ts +165 -4
- package/src/cli/command.ts +865 -0
- package/src/cli/commandCatalog.generated.ts +2723 -0
- package/src/cli/commandFacts.ts +220 -0
- package/src/controlPlane/capability.ts +25 -1
- package/src/controlPlane/context.ts +4 -0
- package/src/controlPlane/data/connection.ts +90 -0
- package/src/controlPlane/error/errors.ts +10 -3
- package/src/controlPlane/http/cors.ts +4 -4
- package/src/controlPlane/http/guard.ts +35 -2
- package/src/controlPlane/http/handlers.ts +41 -0
- package/src/controlPlane/http/readiness.ts +50 -0
- package/src/controlPlane/http/responses.ts +140 -2
- package/src/controlPlane/http/routes.ts +82 -10
- package/src/controlPlane/http/verify.ts +2 -0
- package/src/controlPlane/migrationState/migrationState.ts +200 -0
- package/src/controlPlane/migrations/0003_connection_principal.ts +37 -0
- package/src/controlPlane/scope/scope.ts +14 -2
- package/src/createBackend.ts +59 -8
- package/src/createEntrypoint.ts +9 -3
- package/src/entitlement/allowance.ts +85 -0
- package/src/entitlement/entitlement.ts +38 -0
- package/src/entitlement/meter.ts +69 -0
- package/src/entitlement/require.ts +1 -1
- package/src/error/cause.ts +18 -181
- package/src/error/payload.ts +270 -4
- package/src/error/pithyError.ts +76 -0
- package/src/error/unresolved.ts +853 -0
- package/src/error/wire.ts +40 -0
- package/src/http/authContext.ts +13 -1
- package/src/http/oidcWebhook.ts +3 -3
- package/src/http/routeContract.ts +1 -1
- package/src/http/routeSpec.ts +81 -0
- package/src/http/sameOrigin.ts +1 -1
- package/src/http/scopeGates.ts +34 -0
- package/src/http/signedWebhook.ts +3 -3
- package/src/http/socket.ts +55 -0
- package/src/http/subprotocol.ts +47 -0
- package/src/http/validation.ts +50 -8
- package/src/index.ts +1 -0
- package/src/migrations/bookkeeping.ts +39 -2
- package/src/migrations/capabilitySets.ts +87 -0
- package/src/migrations/groups.ts +295 -0
- package/src/migrations/migrateStep.ts +19 -0
- package/src/migrations/owner.ts +10 -6
- package/src/migrations/registry.ts +46 -2
- package/src/migrations/retained.ts +2 -2
- package/src/migrations/runner.ts +214 -22
- package/src/migrations/state.ts +94 -0
- package/src/naming/domains.ts +75 -16
- package/src/naming/environment.ts +2 -1
- package/src/naming/feature.ts +46 -7
- package/src/naming/limits.ts +35 -3
- package/src/naming/packageName.ts +20 -0
- package/src/naming/provisionScope.ts +21 -2
- package/src/naming/resourceNames.ts +52 -5
- package/src/openapi/document.ts +412 -0
- package/src/openapi/routeGroups.ts +25 -0
- package/src/seed/writeD1.ts +13 -4
- package/src/seed/writeKv.ts +6 -2
- package/src/text/comments.ts +56 -4
- package/src/text/literals.ts +294 -0
- package/src/version.generated.ts +1 -1
- package/src/worker/serviceLoopback.ts +105 -0
- package/src/workflow/dispatchRoute.ts +13 -6
- package/src/workflow/faults.ts +56 -27
- package/src/workflow/hostEnv.ts +9 -1
- package/src/workflow/loopback.ts +2 -1
|
@@ -16,9 +16,47 @@ const BindingType = z.union([
|
|
|
16
16
|
z.literal("secret").describe("Secret from the Secrets Store, encrypted at rest."),
|
|
17
17
|
z.literal("workflow").describe("Cloudflare Workflow — durable, multi-step execution."),
|
|
18
18
|
z.literal("service").describe("Service binding — direct RPC to another Worker."),
|
|
19
|
-
z.literal("durable_object").describe("Durable Object — a single-threaded, stateful actor with its own storage. Backed by an exported DO class; the CLI wires the namespace binding and the class migration tag.")
|
|
19
|
+
z.literal("durable_object").describe("Durable Object — a single-threaded, stateful actor with its own storage. Backed by an exported DO class; the CLI wires the namespace binding and the class migration tag."),
|
|
20
|
+
z.literal("hyperdrive").describe("Hyperdrive — a pooled, cached connection to an existing database. The adopter creates the config."),
|
|
21
|
+
z.literal("browser").describe("Browser Rendering — a headless browser the Worker drives."),
|
|
22
|
+
z.literal("images").describe("Cloudflare Images — transform and optimize images from the Worker."),
|
|
23
|
+
z.literal("analytics_engine_datasets").describe("Workers Analytics Engine — write data points to a dataset, query them with SQL."),
|
|
24
|
+
z.literal("pipelines").describe("Pipelines — send records into a stream that lands in R2. The adopter creates it."),
|
|
25
|
+
z.literal("mtls_certificates").describe("mTLS certificate — present a client certificate on outbound requests. The adopter uploads it."),
|
|
26
|
+
z.literal("dispatch_namespaces").describe("Workers for Platforms dispatch namespace — call Workers uploaded into it. The adopter creates it."),
|
|
27
|
+
z.literal("artifacts").describe("Artifacts — versioned storage that speaks Git, one namespace of repositories per environment. Cloudflare creates the namespace on its first repo.")
|
|
20
28
|
]).describe("Kind of Cloudflare resource a binding refers to.");
|
|
21
29
|
/**
|
|
30
|
+
* The policy per kind, as a total record — so a kind added to {@link BindingType} without one is a type error
|
|
31
|
+
* here, and `bindings.test.ts` fails on a member whose answer it does not state.
|
|
32
|
+
*/
|
|
33
|
+
const SEED_POLICY = {
|
|
34
|
+
ai: "carry",
|
|
35
|
+
ratelimit: "carry",
|
|
36
|
+
browser: "carry",
|
|
37
|
+
images: "carry",
|
|
38
|
+
hyperdrive: "branch",
|
|
39
|
+
analytics_engine_datasets: "carry",
|
|
40
|
+
mtls_certificates: "carry",
|
|
41
|
+
dispatch_namespaces: "carry",
|
|
42
|
+
pipelines: "branch",
|
|
43
|
+
d1: "provision",
|
|
44
|
+
kv: "provision",
|
|
45
|
+
r2: "provision",
|
|
46
|
+
vectorize: "provision",
|
|
47
|
+
queue: "provision",
|
|
48
|
+
durable_object: "provision",
|
|
49
|
+
workflow: "provision",
|
|
50
|
+
service: "provision",
|
|
51
|
+
secret: "provision",
|
|
52
|
+
email: "branch",
|
|
53
|
+
artifacts: "provision"
|
|
54
|
+
};
|
|
55
|
+
/** How a newly created stanza gets this kind's entries. See {@link SeedPolicy}. */
|
|
56
|
+
function seedPolicy(type) {
|
|
57
|
+
return SEED_POLICY[type];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
22
60
|
* Whether a provision command creates the **resource** behind this kind of binding, rather than the
|
|
23
61
|
* adopter standing it up themselves.
|
|
24
62
|
*
|
|
@@ -59,10 +97,66 @@ function isProvisionedBinding(type) {
|
|
|
59
97
|
*
|
|
60
98
|
* `service` is in neither, deliberately: `pithy feature` writes it out of the target Worker's env-scoped
|
|
61
99
|
* script name, and no shipped capability declares one.
|
|
100
|
+
*
|
|
101
|
+
* **The pure-wrangler-entry kinds are written and never provisioned (#662).** `hyperdrive`, `browser`, `images`,
|
|
102
|
+
* `analytics_engine_datasets`, `pipelines`, `mtls_certificates` and `dispatch_namespaces` each take a binding name
|
|
103
|
+
* and, where wrangler requires one, the account-level resource the spec states as `target`. Pithy writes the
|
|
104
|
+
* entry; the adopter stands the resource up. `queue` writes its `queues.producers` entry under the name
|
|
105
|
+
* `pithy provision` creates the queue with, and `email` writes `send_email` with nothing but its name.
|
|
106
|
+
*
|
|
107
|
+
* **`artifacts` is written and never provisioned (#673).** Its entry is `{ binding, namespace }`, and the namespace
|
|
108
|
+
* is `<project>-<env>`, derivable offline. There is no create call to make: Cloudflare creates a namespace the first
|
|
109
|
+
* time a repo is created in it. There is a teardown call, because repos cost storage, and `pithy feature destroy`
|
|
110
|
+
* makes it.
|
|
62
111
|
*/
|
|
63
112
|
function isWrittenBinding(type) {
|
|
64
|
-
return type
|
|
113
|
+
return WRITTEN.has(type);
|
|
65
114
|
}
|
|
115
|
+
const WRITTEN = /* @__PURE__ */ new Set([
|
|
116
|
+
"d1",
|
|
117
|
+
"kv",
|
|
118
|
+
"r2",
|
|
119
|
+
"ai",
|
|
120
|
+
"durable_object",
|
|
121
|
+
"ratelimit",
|
|
122
|
+
"workflow",
|
|
123
|
+
"queue",
|
|
124
|
+
"email",
|
|
125
|
+
"hyperdrive",
|
|
126
|
+
"browser",
|
|
127
|
+
"images",
|
|
128
|
+
"analytics_engine_datasets",
|
|
129
|
+
"pipelines",
|
|
130
|
+
"mtls_certificates",
|
|
131
|
+
"dispatch_namespaces",
|
|
132
|
+
"artifacts"
|
|
133
|
+
]);
|
|
134
|
+
/**
|
|
135
|
+
* The kinds whose wrangler entry names an account-level resource the adopter creates, and what wrangler calls
|
|
136
|
+
* that field — what `BindingSpec.target` is written as. `true` where wrangler refuses the entry without it.
|
|
137
|
+
*/
|
|
138
|
+
const TARGET_KINDS = {
|
|
139
|
+
hyperdrive: {
|
|
140
|
+
field: "id",
|
|
141
|
+
required: true
|
|
142
|
+
},
|
|
143
|
+
mtls_certificates: {
|
|
144
|
+
field: "certificate_id",
|
|
145
|
+
required: true
|
|
146
|
+
},
|
|
147
|
+
pipelines: {
|
|
148
|
+
field: "stream",
|
|
149
|
+
required: true
|
|
150
|
+
},
|
|
151
|
+
dispatch_namespaces: {
|
|
152
|
+
field: "namespace",
|
|
153
|
+
required: true
|
|
154
|
+
},
|
|
155
|
+
analytics_engine_datasets: {
|
|
156
|
+
field: "dataset",
|
|
157
|
+
required: false
|
|
158
|
+
}
|
|
159
|
+
};
|
|
66
160
|
/**
|
|
67
161
|
* A JavaScript class name — what `className` may be.
|
|
68
162
|
*
|
|
@@ -80,13 +174,15 @@ const CLASS_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
|
80
174
|
* landed on, which is `configImports.isInside`'s argument in a regex.
|
|
81
175
|
*/
|
|
82
176
|
const CLASS_MODULE = /^(@[a-z0-9~-][a-z0-9._~-]*\/)?[a-z0-9~-][a-z0-9._~-]*(\/[A-Za-z0-9_~-][A-Za-z0-9._~-]*)*$/;
|
|
177
|
+
/** What a `target` may be: a Cloudflare id or resource name, starting alphanumeric. */
|
|
178
|
+
const TARGET = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
83
179
|
/**
|
|
84
180
|
* The kinds whose resource Pithy names and creates — the only kinds `scope` and `resource` mean anything
|
|
85
181
|
* for.
|
|
86
182
|
*
|
|
87
183
|
* {@link FEATURE_RESOURCE_KINDS} rather than a fresh literal, because it is already the repo's answer to
|
|
88
184
|
* "which bindings does a provisioning run compose a `<project>-<scope>-<thing>` name for": it is the
|
|
89
|
-
* domain of `ProvisionScope.resource`, and the CLI's own `PROVISIONABLE` map is the same
|
|
185
|
+
* domain of `ProvisionScope.resource`, and the CLI's own `PROVISIONABLE` map is the same four. Every
|
|
90
186
|
* other kind's name is composed by a different rule with no `<thing>` slot to fill — a Workflow's from
|
|
91
187
|
* the capability and the job, a Worker script's by wrangler — and a `secret` already states its scope in
|
|
92
188
|
* `defineSecretRegistry`, where the value it names lives.
|
|
@@ -104,9 +200,10 @@ const BindingSpec = z.object({
|
|
|
104
200
|
classModule: z.string().min(1).regex(CLASS_MODULE, "A classModule is a bare module specifier: a package, optionally with a path into it.").optional().describe("The module the class is exported from (e.g. \"@pithy-sh/multiplayer/src/session/durableObject\") — what the CLI writes the Worker entry's `export { <className> } from \"<classModule>\";` against. Required for a `durable_object` binding, because wrangler resolves `class_name` against the entry `main` names and refuses the deploy when nothing there exports it. Its own module, never the package entry point, which `pithy.config.ts` loads in Node. Ignored for every other kind."),
|
|
105
201
|
job: z.string().min(1).regex(NAME_SEGMENT, "A job is one name segment: lowercase letters, digits, and single hyphens.").optional().describe("The job within the capability this Workflow runs (e.g. \"send\") — the `<job>` segment of the deployed `<project>-<env>-<capability>-<job>` name, and the second half of the `<capability>/<job>` dispatch key. Meaningful only for a `workflow` binding, where it is what lets `pithy add` name the Workflow offline instead of leaving the binding unwritten. Ignored for every other kind."),
|
|
106
202
|
service: z.string().min(1).optional().describe("The Worker this binding calls, named as it appears in `apps/<name>/` (e.g. \"api\"). Meaningful only for a `service` binding — the CLI resolves it to that Worker's environment-scoped script name when writing `services` into wrangler.jsonc, so worker-to-worker RPC targets the right deployment per environment. Ignored for every other kind."),
|
|
203
|
+
target: z.string().min(1).regex(TARGET, "A target is a resource id or name: letters, digits, `.`, `_` and `-`.").optional().describe("The account-level resource this binding addresses, which the adopter creates themselves: a Hyperdrive config id, an mTLS certificate id, a Pipelines stream, a dispatch namespace, or an Analytics Engine dataset. Written into the field wrangler names for it (`id`, `certificate_id`, `stream`, `namespace`, `dataset`), and carried whole into every environment, because the resource is the account's. Required for `hyperdrive`, `mtls_certificates`, `pipelines` and `dispatch_namespaces`; optional for `analytics_engine_datasets`. Refused on every other kind."),
|
|
107
204
|
remote: z.boolean().optional().describe("Reach the real Cloudflare resource during local development instead of a local emulation. Set it for a binding that has none — Vectorize and Workers AI both lack local simulation — so `wrangler dev` and any Workflow host, which always runs locally, still work. Left unset rather than defaulting to false, so a spec that does not care emits no flag at all. Ignored in a deployed Worker."),
|
|
108
|
-
scope: z.enum(["environment", "global"]).optional().describe("Whether the resource behind this binding is one per environment (absent, the default) or one for the whole project. A `global` resource takes the literal `global` where the environment segment goes — `<project>-global-<thing>` — so every environment's stanza names the identical resource and provisioning creates it once. Declare it where the data is not an environment-local fact: `@pithy-sh/email`'s suppression list is one per project, because an unsubscribe recorded through a staging Worker has to be honored by a production one, and three per-environment databases meant it was not (#513). Say nothing where it is: a session store, a cache, and `@pithy-sh/secrets`' own database are per environment, and one line apart in the same env there is no convention to tell them apart by — which is why this is declared rather than inferred. Meaningful only for a `d1`, `kv` or `
|
|
109
|
-
resource: z.string().min(1).regex(NAME_SEGMENT, "A resource is one name segment: lowercase letters, digits, and single hyphens.").optional().describe("The `<thing>` segment of this resource's name, when it is not the kebabbed binding name. Absent is the ordinary case and means the binding name is the segment (`EMAIL_SUPPRESSIONS` → `email-suppressions`). Declare it where the two must differ: `SUPPORT_BUCKET` backs `<project>-global-support`, because the binding keeps `_BUCKET` for whoever reads `env.SUPPORT_BUCKET` in a Worker while the resource drops it — `r2` is already the composed name's kind, so the suffix repeats it. Meaningful only for a `d1`, `kv` or `
|
|
205
|
+
scope: z.enum(["environment", "global"]).optional().describe("Whether the resource behind this binding is one per environment (absent, the default) or one for the whole project. A `global` resource takes the literal `global` where the environment segment goes — `<project>-global-<thing>` — so every environment's stanza names the identical resource and provisioning creates it once. Declare it where the data is not an environment-local fact: `@pithy-sh/email`'s suppression list is one per project, because an unsubscribe recorded through a staging Worker has to be honored by a production one, and three per-environment databases meant it was not (#513). Say nothing where it is: a session store, a cache, and `@pithy-sh/secrets`' own database are per environment, and one line apart in the same env there is no convention to tell them apart by — which is why this is declared rather than inferred. Meaningful only for a `d1`, `kv`, `r2` or `queue` binding."),
|
|
206
|
+
resource: z.string().min(1).regex(NAME_SEGMENT, "A resource is one name segment: lowercase letters, digits, and single hyphens.").optional().describe("The `<thing>` segment of this resource's name, when it is not the kebabbed binding name. Absent is the ordinary case and means the binding name is the segment (`EMAIL_SUPPRESSIONS` → `email-suppressions`). Declare it where the two must differ: `SUPPORT_BUCKET` backs `<project>-global-support`, because the binding keeps `_BUCKET` for whoever reads `env.SUPPORT_BUCKET` in a Worker while the resource drops it — `r2` is already the composed name's kind, so the suffix repeats it. Meaningful only for a `d1`, `kv`, `r2` or `queue` binding.")
|
|
110
207
|
}).describe("Declares a Cloudflare binding a capability requires in the Worker env.").check((ctx) => {
|
|
111
208
|
if (ctx.value.type === "durable_object" && ctx.value.className === void 0) ctx.issues.push({
|
|
112
209
|
code: "custom",
|
|
@@ -132,9 +229,22 @@ const BindingSpec = z.object({
|
|
|
132
229
|
code: "custom",
|
|
133
230
|
input: ctx.value,
|
|
134
231
|
path: [field],
|
|
135
|
-
message: `Binding "${ctx.value.name}" declares a ${field}, which only a d1, kv or
|
|
232
|
+
message: `Binding "${ctx.value.name}" declares a ${field}, which only a d1, kv, r2 or queue binding has — this one is a ${ctx.value.type}.`
|
|
136
233
|
});
|
|
137
234
|
}
|
|
235
|
+
const target = TARGET_KINDS[ctx.value.type];
|
|
236
|
+
if (target?.required && ctx.value.target === void 0) ctx.issues.push({
|
|
237
|
+
code: "custom",
|
|
238
|
+
input: ctx.value,
|
|
239
|
+
path: ["target"],
|
|
240
|
+
message: `Binding "${ctx.value.name}" needs a target — the ${ctx.value.type} resource it addresses, written as \`${target.field}\`.`
|
|
241
|
+
});
|
|
242
|
+
if (target === void 0 && ctx.value.target !== void 0) ctx.issues.push({
|
|
243
|
+
code: "custom",
|
|
244
|
+
input: ctx.value,
|
|
245
|
+
path: ["target"],
|
|
246
|
+
message: `Binding "${ctx.value.name}" declares a target, which a ${ctx.value.type} binding does not take.`
|
|
247
|
+
});
|
|
138
248
|
});
|
|
139
249
|
//#endregion
|
|
140
|
-
export { BindingSpec, BindingType, isProvisionedBinding, isWrittenBinding };
|
|
250
|
+
export { BindingSpec, BindingType, TARGET_KINDS, isProvisionedBinding, isWrittenBinding, seedPolicy };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 Pithy
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
import type { ExecutionContext, ForwardableEmailMessage } from "@cloudflare/workers-types";
|
|
4
|
-
import type { Hono } from "hono";
|
|
4
|
+
import type { Hono, MiddlewareHandler } from "hono";
|
|
5
5
|
import type { z } from "zod";
|
|
6
|
+
import type { ActingOrganizationResolver } from "../access/acting";
|
|
6
7
|
import type { AuditEmit } from "../audit/recorder";
|
|
7
8
|
import type { ControlPlaneContext } from "../controlPlane/context";
|
|
8
9
|
import type { AdminRoute } from "../controlPlane/discovery/adminRoute";
|
|
@@ -13,6 +14,7 @@ import type { DatabaseSpecMap } from "../data/databases";
|
|
|
13
14
|
import type { EntitlementResolver } from "../entitlement/entitlement";
|
|
14
15
|
import type { AuthContext } from "../http/authContext";
|
|
15
16
|
import type { SameOriginGate } from "../http/sameOrigin";
|
|
17
|
+
import type { SocketChannel } from "../http/socket";
|
|
16
18
|
import type { LocaleCatalogs } from "../i18n/catalog";
|
|
17
19
|
import type { LocaleContext } from "../i18n/locale";
|
|
18
20
|
import type { Translator } from "../i18n/translator";
|
|
@@ -27,6 +29,19 @@ import type { CapabilitySettings } from "./settings";
|
|
|
27
29
|
export interface PithyVars {
|
|
28
30
|
/** The authenticated identity, populated by `@pithy-sh/auth`; `null` until a strategy sets it. */
|
|
29
31
|
auth: AuthContext | null;
|
|
32
|
+
/**
|
|
33
|
+
* Which organization this request acts for, and what the caller's role there allows — a resolver,
|
|
34
|
+
* populated by `@pithy-sh/organization`'s middleware. With no organization capability composed it is
|
|
35
|
+
* {@link import("../access/acting").noActingOrganization}, which answers `null`: nothing is in force,
|
|
36
|
+
* every record a request writes carries a null organization, and every rule that admits by organization
|
|
37
|
+
* admits nobody.
|
|
38
|
+
*
|
|
39
|
+
* **A seam beside {@link auth}, never a field on it.** `auth` says who is signed in; this says what they
|
|
40
|
+
* may do *here*, and a capability that gates on it — media, storage — must not import the capability
|
|
41
|
+
* that computes it. Lazy, because resolving it is a D1 read most requests never need; read it with
|
|
42
|
+
* `await c.var.actingOrganization()`, or through `accessCaller` in `access/access.ts`.
|
|
43
|
+
*/
|
|
44
|
+
actingOrganization: ActingOrganizationResolver;
|
|
30
45
|
/**
|
|
31
46
|
* The resolved request locale, populated by `@pithy-sh/i18n`'s middleware; `null` in a Worker that
|
|
32
47
|
* does not compose it — which is what "nothing was negotiated" looks like, as distinct from "the
|
|
@@ -128,6 +143,11 @@ export type PithyHonoEnv = {
|
|
|
128
143
|
Variables: PithyVars;
|
|
129
144
|
};
|
|
130
145
|
export type PithyMiddleware = (app: Hono<PithyHonoEnv>) => void;
|
|
146
|
+
/**
|
|
147
|
+
* One readiness guard: a handler that refuses because **this Worker** is in a bad state. See
|
|
148
|
+
* {@link Capability.readiness} for where it runs and where it does not.
|
|
149
|
+
*/
|
|
150
|
+
export type PithyReadinessGuard = MiddlewareHandler<PithyHonoEnv>;
|
|
131
151
|
/**
|
|
132
152
|
* The structural seam for one capability's secret-registry slice — secret name → its declaration.
|
|
133
153
|
* Core carries it on the {@link Capability} contract so a capability can declare which secrets it
|
|
@@ -222,27 +242,17 @@ export type SecretBranchSeam = Record<string, readonly string[]>;
|
|
|
222
242
|
*/
|
|
223
243
|
export type InapplicableSecretSeam = Record<string, string>;
|
|
224
244
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
* `TokenProfile`, the permission catalog, `defineTokenProfile`, and the mint engine live in
|
|
230
|
-
* `@pithy-sh/cloudflare`/the CLI. `pithy token` aggregates every capability's slice into one registry.
|
|
245
|
+
* One route a capability gates on an `AuthContext` scope — see {@link Capability.scopeGates}.
|
|
246
|
+
*
|
|
247
|
+
* Descriptive, never behavioral: the gate itself is the capability's own middleware, and this is what a
|
|
248
|
+
* diagnostic reads to name it. `route` is the method and the mounted path, as the route table writes them.
|
|
231
249
|
*/
|
|
232
|
-
export interface
|
|
233
|
-
/** The
|
|
234
|
-
readonly
|
|
235
|
-
/** The
|
|
236
|
-
readonly
|
|
237
|
-
/** The secret-registry name the minted value is stored under — its backend decides the destination. */
|
|
238
|
-
readonly secret?: string;
|
|
239
|
-
/** A built-in destination override (`dev-vars` | `ephemeral` | `secrets-store`) for a tooling profile. */
|
|
240
|
-
readonly defaultStore?: string;
|
|
241
|
-
/** Why the profile exists / what consumes it — surfaced in `pithy token` help and docs. */
|
|
242
|
-
readonly description?: string;
|
|
250
|
+
export interface ScopeGate {
|
|
251
|
+
/** The scope the gate requires, as the resolved config names it — `leaderboard:submit`. */
|
|
252
|
+
readonly scope: string;
|
|
253
|
+
/** The method and mounted path it guards, `POST /leaderboard/:board`. */
|
|
254
|
+
readonly route: string;
|
|
243
255
|
}
|
|
244
|
-
/** A capability's token-profile slice: profile name → {@link TokenProfileSeam}. */
|
|
245
|
-
export type TokenProfileSeamMap = Record<string, TokenProfileSeam>;
|
|
246
256
|
/**
|
|
247
257
|
* One thing an **adopter** plugged into a capability — the capability's own name for something the kit
|
|
248
258
|
* did not ship and cannot enumerate. `@pithy-sh/auth` declares one per additional Better Auth plugin
|
|
@@ -357,13 +367,6 @@ export interface Capability<Databases extends DatabaseSpecMap = DatabaseSpecMap,
|
|
|
357
367
|
* whenever it is composed declares nothing, which is the ordinary case.
|
|
358
368
|
*/
|
|
359
369
|
inapplicableSecrets?: InapplicableSecretSeam;
|
|
360
|
-
/**
|
|
361
|
-
* The scoped CF API tokens this capability's code needs, as a token-profile slice (profile name →
|
|
362
|
-
* {@link TokenProfileSeam}). Additive and optional, and declared next to {@link Capability.secretRegistry}
|
|
363
|
-
* — the value of a minted token lands in the secret the profile names. `pithy token` aggregates every
|
|
364
|
-
* capability's slice with the built-in tooling profiles into one registry.
|
|
365
|
-
*/
|
|
366
|
-
tokenProfiles?: TokenProfileSeamMap;
|
|
367
370
|
/**
|
|
368
371
|
* Extra CF permissions this capability needs the **CI system token** to hold, as short catalog keys
|
|
369
372
|
* (e.g. `email:routing` for email provisioning, `kv:write` for a module that seeds KV in CI). They
|
|
@@ -371,6 +374,20 @@ export interface Capability<Databases extends DatabaseSpecMap = DatabaseSpecMap,
|
|
|
371
374
|
* extends what CI can do without the adopter hand-editing token scopes. Additive and optional.
|
|
372
375
|
*/
|
|
373
376
|
ciPermissions?: readonly string[];
|
|
377
|
+
/**
|
|
378
|
+
* The CF permissions this capability's **deployed Workers** call Cloudflare with, as short catalog keys
|
|
379
|
+
* (`secrets:write`, `images:write`, `analytics:read`). The runtime counterpart of {@link ciPermissions}.
|
|
380
|
+
*
|
|
381
|
+
* **A deployed application holds one Cloudflare API token, and this is the only way into it (#728).**
|
|
382
|
+
* Every composed capability's keys union into the project-level `runtime` profile, minted per
|
|
383
|
+
* environment into the Secrets Store and read by every Worker of that environment through one binding,
|
|
384
|
+
* the way every capability's `ciPermissions` union into the one `ci-system` token. A capability cannot
|
|
385
|
+
* declare a token of its own. A project whose composition declares none mints no runtime token.
|
|
386
|
+
*
|
|
387
|
+
* Build it from the resolved config, as `secretRegistry` is built: a capability configured to call
|
|
388
|
+
* nothing on Cloudflare declares nothing, and adds nothing to the token. Additive and optional.
|
|
389
|
+
*/
|
|
390
|
+
runtimePermissions?: readonly string[];
|
|
374
391
|
/**
|
|
375
392
|
* The admin routes this capability contributes behind the `control-plane` strategy, described well
|
|
376
393
|
* enough for a management client to call them — full mounted path, required scope, and a one-line
|
|
@@ -511,8 +528,36 @@ export interface Capability<Databases extends DatabaseSpecMap = DatabaseSpecMap,
|
|
|
511
528
|
boot?: (context: CapabilityComposeContext) => void;
|
|
512
529
|
/** Mounts a Hono sub-router. */
|
|
513
530
|
routes?: (app: Hono<PithyHonoEnv>) => void;
|
|
514
|
-
/**
|
|
531
|
+
/**
|
|
532
|
+
* The WebSockets this capability serves, described for the AsyncAPI contract (`../http/socket.ts`). Built
|
|
533
|
+
* from the resolved config, like `adminRoutes`: the paths it mounted, and the schemas its frames are
|
|
534
|
+
* parsed with. A capability with no socket leaves it unset.
|
|
535
|
+
*/
|
|
536
|
+
sockets?: readonly SocketChannel[];
|
|
537
|
+
/**
|
|
538
|
+
* Composable middleware (e.g. turnstile(), requireAuth()). Runs on every request, the control-plane
|
|
539
|
+
* surface included. A refusal that protects a route — a rate limit, authentication, a CSRF check —
|
|
540
|
+
* belongs here. A refusal because the Worker itself is broken belongs in {@link Capability.readiness}.
|
|
541
|
+
*/
|
|
515
542
|
middleware?: PithyMiddleware[];
|
|
543
|
+
/**
|
|
544
|
+
* Guards that refuse because **this Worker is misconfigured or unprovisioned** — `@pithy-sh/vector`'s
|
|
545
|
+
* `provisionGuard`, when the deployed index disagrees with config. Not for protecting a route: a rate
|
|
546
|
+
* limit, authentication and a CSRF check refuse a *caller*, and they belong in
|
|
547
|
+
* {@link Capability.middleware}.
|
|
548
|
+
*
|
|
549
|
+
* `createBackend` mounts every readiness guard after every capability's `middleware` and before any
|
|
550
|
+
* capability's routes, so the verifier, `emit` and every rate limit are already in place. It skips
|
|
551
|
+
* each guard on the admin surface — every composed capability's `adminRoutes`, the seam's own
|
|
552
|
+
* included, the set CORS is derived from. The control plane is the diagnostic surface, so it cannot
|
|
553
|
+
* sit behind the faults it diagnoses. Every other request meets the guard, `GET /health` aside, which
|
|
554
|
+
* is registered ahead of all of it.
|
|
555
|
+
*
|
|
556
|
+
* A handler rather than a registrar like `middleware`, because core decides where it mounts. A guard
|
|
557
|
+
* that wanted its own path would be deciding the exemption by path shape, which is the thing this
|
|
558
|
+
* exists to take away from it.
|
|
559
|
+
*/
|
|
560
|
+
readiness?: PithyReadinessGuard[];
|
|
516
561
|
/**
|
|
517
562
|
* Whether this capability fills the entitlement seam — replaces `c.var.entitlements` with a real
|
|
518
563
|
* resolver. `@pithy-sh/payments` declares it; nothing else does today.
|
|
@@ -524,6 +569,27 @@ export interface Capability<Databases extends DatabaseSpecMap = DatabaseSpecMap,
|
|
|
524
569
|
* flag and say so, which turns a fleet of production 403s into one line at startup.
|
|
525
570
|
*/
|
|
526
571
|
providesEntitlements?: boolean;
|
|
572
|
+
/**
|
|
573
|
+
* Whether this capability fills `AuthContext.scopes` — whether anything will ever put a string in the
|
|
574
|
+
* array the scope gates read. `@pithy-sh/auth` declares it when an adopter supplies `resolveScopes`, and
|
|
575
|
+
* not otherwise (#560).
|
|
576
|
+
*
|
|
577
|
+
* The same reason {@link providesEntitlements} exists, one seam over. Every scope gate fails closed, so a
|
|
578
|
+
* Worker composing `leaderboard` with no resolver is not broken: it refuses every caller on the gated
|
|
579
|
+
* routes, forever, and the runtime cannot tell that from a caller who simply is not trusted. `pithy doctor`
|
|
580
|
+
* compares this flag against {@link scopeGates} and says so.
|
|
581
|
+
*/
|
|
582
|
+
providesScopes?: boolean;
|
|
583
|
+
/**
|
|
584
|
+
* The routes this capability gates on an `AuthContext` scope, built from the resolved config — a gate the
|
|
585
|
+
* config has switched off is not declared. Omit it when nothing is gated, which is the ordinary case.
|
|
586
|
+
*
|
|
587
|
+
* **Declared so the CLI can name what will deny.** With no capability composed that
|
|
588
|
+
* {@link providesScopes}, every route listed here answers 403 to every caller, and `pithy doctor` names
|
|
589
|
+
* each one. Each capability's route-contract test holds this list to the `scopes` its `describeRoute`s
|
|
590
|
+
* carry, so the declaration cannot drift from the routes.
|
|
591
|
+
*/
|
|
592
|
+
scopeGates?: readonly ScopeGate[];
|
|
527
593
|
/**
|
|
528
594
|
* This capability's client-safe projection — the **only** values of its config that may reach a
|
|
529
595
|
* browser bundle. Resolved at build time against a {@link ClientProjectionContext} (the environment),
|
|
@@ -571,6 +637,17 @@ export interface Capability<Databases extends DatabaseSpecMap = DatabaseSpecMap,
|
|
|
571
637
|
* time, and read by `pithy doctor`.
|
|
572
638
|
*/
|
|
573
639
|
extensions?: readonly CapabilityExtension[];
|
|
640
|
+
/**
|
|
641
|
+
* The role powers this capability's own routes gate on, through the acting-organization seam —
|
|
642
|
+
* `media:manage`, `storage:manage`. Omit it when a capability asks no power, which is the normal case.
|
|
643
|
+
*
|
|
644
|
+
* **Declared so the catalog requirement can be conditional.** `@pithy-sh/organization` refuses a role
|
|
645
|
+
* catalog in which no role holds a power a composed capability gates on — a route nobody could ever use
|
|
646
|
+
* — and a project that composes no media must not be refused for not placing `media:manage`. The
|
|
647
|
+
* organization capability reads this list at compose, across every composed capability, rather than
|
|
648
|
+
* importing any of them.
|
|
649
|
+
*/
|
|
650
|
+
powers?: readonly string[];
|
|
574
651
|
/** Bindings this capability needs in the env (normalized — `optional` is always set). */
|
|
575
652
|
requiredBindings: BindingSpec[];
|
|
576
653
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/capability/capability.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/capability/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/capability/composition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/capability/composition.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyC/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAE3E;AAED,uGAAuG;AACvG,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,UAAU,EAAE,CAS5D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,GAAG,CAAC,CAajH"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 Pithy
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
import { InternalError } from "../error/pithyError.js";
|
|
4
|
+
import { pithyCommandOf } from "../cli/command.js";
|
|
4
5
|
//#region src/capability/composition.ts
|
|
5
6
|
/**
|
|
6
7
|
* The composed set, reachable from module scope — **so a Workflow can find it** (pithy-sh/pithy#356).
|
|
@@ -77,7 +78,10 @@ function composedCapability(name, is) {
|
|
|
77
78
|
const found = composedCapabilities().find((capability) => capability.name === name && is(capability));
|
|
78
79
|
if (!found) throw new InternalError({
|
|
79
80
|
message: `The "${name}" capability is not composed, so this job could not run.`,
|
|
80
|
-
action: `Add ${name}(...) to createBackend's capabilities (run
|
|
81
|
+
action: `Add ${name}(...) to createBackend's capabilities (run \`${pithyCommandOf("add", {
|
|
82
|
+
args: [name],
|
|
83
|
+
flags: { "--with-prerequisites": true }
|
|
84
|
+
}, { runtime: true })}\`).`,
|
|
81
85
|
detail: `no composed capability named "${name}" carrying its seams was found.`
|
|
82
86
|
});
|
|
83
87
|
return found;
|
|
@@ -295,13 +295,14 @@ export declare const CapabilityManifest: z.ZodObject<{
|
|
|
295
295
|
name: z.ZodString;
|
|
296
296
|
package: z.ZodString;
|
|
297
297
|
requiredBindings: z.ZodArray<z.ZodObject<{
|
|
298
|
-
type: z.ZodUnion<readonly [z.ZodLiteral<"d1">, z.ZodLiteral<"kv">, z.ZodLiteral<"r2">, z.ZodLiteral<"ai">, z.ZodLiteral<"vectorize">, z.ZodLiteral<"queue">, z.ZodLiteral<"ratelimit">, z.ZodLiteral<"email">, z.ZodLiteral<"secret">, z.ZodLiteral<"workflow">, z.ZodLiteral<"service">, z.ZodLiteral<"durable_object">]>;
|
|
298
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"d1">, z.ZodLiteral<"kv">, z.ZodLiteral<"r2">, z.ZodLiteral<"ai">, z.ZodLiteral<"vectorize">, z.ZodLiteral<"queue">, z.ZodLiteral<"ratelimit">, z.ZodLiteral<"email">, z.ZodLiteral<"secret">, z.ZodLiteral<"workflow">, z.ZodLiteral<"service">, z.ZodLiteral<"durable_object">, z.ZodLiteral<"hyperdrive">, z.ZodLiteral<"browser">, z.ZodLiteral<"images">, z.ZodLiteral<"analytics_engine_datasets">, z.ZodLiteral<"pipelines">, z.ZodLiteral<"mtls_certificates">, z.ZodLiteral<"dispatch_namespaces">, z.ZodLiteral<"artifacts">]>;
|
|
299
299
|
name: z.ZodString;
|
|
300
300
|
optional: z.ZodDefault<z.ZodBoolean>;
|
|
301
301
|
className: z.ZodOptional<z.ZodString>;
|
|
302
302
|
classModule: z.ZodOptional<z.ZodString>;
|
|
303
303
|
job: z.ZodOptional<z.ZodString>;
|
|
304
304
|
service: z.ZodOptional<z.ZodString>;
|
|
305
|
+
target: z.ZodOptional<z.ZodString>;
|
|
305
306
|
remote: z.ZodOptional<z.ZodBoolean>;
|
|
306
307
|
scope: z.ZodOptional<z.ZodEnum<{
|
|
307
308
|
environment: "environment";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/capability/manifest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/capability/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
import { ValidationError } from "../error/pithyError.js";
|
|
4
4
|
import { BindingSpec } from "./bindings.js";
|
|
5
|
+
import { NAMESPACE_PATTERN } from "../migrations/registry.js";
|
|
5
6
|
import { manifestRecord } from "./vanishingKey.js";
|
|
6
7
|
import { DevSecret } from "./devSecret.js";
|
|
7
|
-
import { NAMESPACE_PATTERN } from "../migrations/registry.js";
|
|
8
8
|
import { DeclaredSecret } from "./secretOrigin.js";
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
//#region src/capability/manifest.ts
|