@vibesdotdev/infra-core 0.0.2 → 1.0.0-rc.4
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/LICENSE +18 -0
- package/README.md +27 -1
- package/dist/bootstrap/seed.descriptor.d.ts +1 -1
- package/dist/bootstrap/seed.descriptor.d.ts.map +1 -1
- package/dist/bootstrap/seed.descriptor.js +1 -1
- package/dist/bootstrap/seed.descriptor.js.map +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.d.ts +1 -3
- package/dist/bootstrap/seed.kind.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.js +17 -4
- package/dist/bootstrap/seed.kind.js.map +1 -1
- package/dist/bootstrap/seed.runner.d.ts +9 -2
- package/dist/bootstrap/seed.runner.d.ts.map +1 -1
- package/dist/bootstrap/seed.runner.js +37 -18
- package/dist/bootstrap/seed.runner.js.map +1 -1
- package/dist/capped-id.d.ts +19 -0
- package/dist/capped-id.d.ts.map +1 -0
- package/dist/capped-id.js +64 -0
- package/dist/capped-id.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts +23 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js +33 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts +24 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js +73 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/context.d.ts +17 -0
- package/dist/cli/generate/context.d.ts.map +1 -0
- package/dist/cli/generate/context.js +24 -0
- package/dist/cli/generate/context.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts +30 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js +25 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts +25 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js +64 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/generate-core.d.ts +51 -0
- package/dist/cli/generate/generate-core.d.ts.map +1 -0
- package/dist/cli/generate/generate-core.js +172 -0
- package/dist/cli/generate/generate-core.js.map +1 -0
- package/dist/cli/generate/index.d.ts +5 -0
- package/dist/cli/generate/index.d.ts.map +1 -0
- package/dist/cli/generate/index.js +5 -0
- package/dist/cli/generate/index.js.map +1 -0
- package/dist/credentials/resolve.d.ts +82 -22
- package/dist/credentials/resolve.d.ts.map +1 -1
- package/dist/credentials/resolve.js +251 -77
- package/dist/credentials/resolve.js.map +1 -1
- package/dist/deployment-environment.d.ts +30 -0
- package/dist/deployment-environment.d.ts.map +1 -0
- package/dist/deployment-environment.js +53 -0
- package/dist/deployment-environment.js.map +1 -0
- package/dist/deployment.d.ts +8 -4
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +30 -0
- package/dist/deployment.js.map +1 -1
- package/dist/doks/cloud/base.d.ts +49 -0
- package/dist/doks/cloud/base.d.ts.map +1 -0
- package/dist/doks/cloud/base.js +138 -0
- package/dist/doks/cloud/base.js.map +1 -0
- package/dist/doks/cloud/factory.d.ts +18 -0
- package/dist/doks/cloud/factory.d.ts.map +1 -0
- package/dist/doks/cloud/factory.js +22 -0
- package/dist/doks/cloud/factory.js.map +1 -0
- package/dist/doks/cloud/index.d.ts +5 -0
- package/dist/doks/cloud/index.d.ts.map +1 -0
- package/dist/doks/cloud/index.js +4 -0
- package/dist/doks/cloud/index.js.map +1 -0
- package/dist/doks/types.d.ts +95 -0
- package/dist/doks/types.d.ts.map +1 -0
- package/dist/doks/types.js +14 -0
- package/dist/doks/types.js.map +1 -0
- package/dist/generate/index.d.ts +29 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +28 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/infra-generate.plugin.d.ts +3 -0
- package/dist/generate/infra-generate.plugin.d.ts.map +1 -0
- package/dist/generate/infra-generate.plugin.js +23 -0
- package/dist/generate/infra-generate.plugin.js.map +1 -0
- package/dist/generate/plugin.d.ts +2 -0
- package/dist/generate/plugin.d.ts.map +1 -0
- package/dist/generate/plugin.js +2 -0
- package/dist/generate/plugin.js.map +1 -0
- package/dist/heartbeat/cron-heartbeat.d.ts +97 -0
- package/dist/heartbeat/cron-heartbeat.d.ts.map +1 -0
- package/dist/heartbeat/cron-heartbeat.js +200 -0
- package/dist/heartbeat/cron-heartbeat.js.map +1 -0
- package/dist/index.d.ts +34 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -14
- package/dist/index.js.map +1 -1
- package/dist/infra.plugin.d.ts +1 -1
- package/dist/infra.plugin.d.ts.map +1 -1
- package/dist/infra.plugin.js +62 -12
- package/dist/infra.plugin.js.map +1 -1
- package/dist/kinds/alerts.kind.d.ts +64 -25
- package/dist/kinds/alerts.kind.d.ts.map +1 -1
- package/dist/kinds/alerts.kind.js +43 -16
- package/dist/kinds/alerts.kind.js.map +1 -1
- package/dist/kinds/artifact.kind.d.ts +58 -10
- package/dist/kinds/artifact.kind.d.ts.map +1 -1
- package/dist/kinds/artifact.kind.js +26 -9
- package/dist/kinds/artifact.kind.js.map +1 -1
- package/dist/kinds/billing.kind.d.ts +88 -0
- package/dist/kinds/billing.kind.d.ts.map +1 -0
- package/dist/kinds/billing.kind.js +48 -0
- package/dist/kinds/billing.kind.js.map +1 -0
- package/dist/kinds/build-job.kind.d.ts +381 -0
- package/dist/kinds/build-job.kind.d.ts.map +1 -0
- package/dist/kinds/build-job.kind.js +216 -0
- package/dist/kinds/build-job.kind.js.map +1 -0
- package/dist/kinds/cache.kind.d.ts +39 -92
- package/dist/kinds/cache.kind.d.ts.map +1 -1
- package/dist/kinds/cache.kind.js +26 -51
- package/dist/kinds/cache.kind.js.map +1 -1
- package/dist/kinds/cluster.kind.d.ts +154 -0
- package/dist/kinds/cluster.kind.d.ts.map +1 -0
- package/dist/kinds/cluster.kind.js +99 -0
- package/dist/kinds/cluster.kind.js.map +1 -0
- package/dist/kinds/compute-source.kind.d.ts +138 -0
- package/dist/kinds/compute-source.kind.d.ts.map +1 -0
- package/dist/kinds/compute-source.kind.js +145 -0
- package/dist/kinds/compute-source.kind.js.map +1 -0
- package/dist/kinds/compute-sources.descriptors.d.ts +45 -0
- package/dist/kinds/compute-sources.descriptors.d.ts.map +1 -0
- package/dist/kinds/compute-sources.descriptors.js +93 -0
- package/dist/kinds/compute-sources.descriptors.js.map +1 -0
- package/dist/kinds/container-registry.kind.d.ts +62 -0
- package/dist/kinds/container-registry.kind.d.ts.map +1 -0
- package/dist/kinds/container-registry.kind.js +47 -0
- package/dist/kinds/container-registry.kind.js.map +1 -0
- package/dist/kinds/database-migrator.kind.d.ts +6 -0
- package/dist/kinds/database-migrator.kind.d.ts.map +1 -0
- package/dist/kinds/database-migrator.kind.js +28 -0
- package/dist/kinds/database-migrator.kind.js.map +1 -0
- package/dist/kinds/database.kind.d.ts +114 -93
- package/dist/kinds/database.kind.d.ts.map +1 -1
- package/dist/kinds/database.kind.js +93 -54
- package/dist/kinds/database.kind.js.map +1 -1
- package/dist/kinds/deployment-provider.kind.d.ts +5 -0
- package/dist/kinds/deployment-provider.kind.d.ts.map +1 -0
- package/dist/kinds/deployment-provider.kind.js +11 -0
- package/dist/kinds/deployment-provider.kind.js.map +1 -0
- package/dist/kinds/discovery.d.ts +5 -12
- package/dist/kinds/discovery.d.ts.map +1 -1
- package/dist/kinds/discovery.js +5 -17
- package/dist/kinds/discovery.js.map +1 -1
- package/dist/kinds/dns.kind.d.ts +162 -0
- package/dist/kinds/dns.kind.d.ts.map +1 -0
- package/dist/kinds/dns.kind.js +54 -0
- package/dist/kinds/dns.kind.js.map +1 -0
- package/dist/kinds/drift.kind.d.ts +115 -0
- package/dist/kinds/drift.kind.d.ts.map +1 -0
- package/dist/kinds/drift.kind.js +60 -0
- package/dist/kinds/drift.kind.js.map +1 -0
- package/dist/kinds/edge-tls.kind.d.ts +194 -0
- package/dist/kinds/edge-tls.kind.d.ts.map +1 -0
- package/dist/kinds/edge-tls.kind.js +58 -0
- package/dist/kinds/edge-tls.kind.js.map +1 -0
- package/dist/kinds/firewall.kind.d.ts +92 -0
- package/dist/kinds/firewall.kind.d.ts.map +1 -0
- package/dist/kinds/firewall.kind.js +59 -0
- package/dist/kinds/firewall.kind.js.map +1 -0
- package/dist/kinds/git-hosting.kind.d.ts +36 -38
- package/dist/kinds/git-hosting.kind.d.ts.map +1 -1
- package/dist/kinds/git-hosting.kind.js +21 -32
- package/dist/kinds/git-hosting.kind.js.map +1 -1
- package/dist/kinds/index.d.ts +40 -15
- package/dist/kinds/index.d.ts.map +1 -1
- package/dist/kinds/index.js +39 -14
- package/dist/kinds/index.js.map +1 -1
- package/dist/kinds/inventory.kind.d.ts +326 -0
- package/dist/kinds/inventory.kind.d.ts.map +1 -0
- package/dist/kinds/inventory.kind.js +188 -0
- package/dist/kinds/inventory.kind.js.map +1 -0
- package/dist/kinds/load-balancer.kind.d.ts +135 -0
- package/dist/kinds/load-balancer.kind.d.ts.map +1 -0
- package/dist/kinds/load-balancer.kind.js +71 -0
- package/dist/kinds/load-balancer.kind.js.map +1 -0
- package/dist/kinds/logs.kind.d.ts +74 -3
- package/dist/kinds/logs.kind.d.ts.map +1 -1
- package/dist/kinds/logs.kind.js +26 -17
- package/dist/kinds/logs.kind.js.map +1 -1
- package/dist/kinds/nfs.kind.d.ts +67 -0
- package/dist/kinds/nfs.kind.d.ts.map +1 -0
- package/dist/kinds/nfs.kind.js +45 -0
- package/dist/kinds/nfs.kind.js.map +1 -0
- package/dist/kinds/node-pool.kind.d.ts +134 -0
- package/dist/kinds/node-pool.kind.d.ts.map +1 -0
- package/dist/kinds/node-pool.kind.js +88 -0
- package/dist/kinds/node-pool.kind.js.map +1 -0
- package/dist/kinds/object-storage.kind.d.ts +50 -24
- package/dist/kinds/object-storage.kind.d.ts.map +1 -1
- package/dist/kinds/object-storage.kind.js +40 -23
- package/dist/kinds/object-storage.kind.js.map +1 -1
- package/dist/kinds/observability.kind.d.ts +104 -6
- package/dist/kinds/observability.kind.d.ts.map +1 -1
- package/dist/kinds/observability.kind.js +67 -9
- package/dist/kinds/observability.kind.js.map +1 -1
- package/dist/kinds/package-registry.kind.d.ts +25 -29
- package/dist/kinds/package-registry.kind.d.ts.map +1 -1
- package/dist/kinds/package-registry.kind.js +12 -25
- package/dist/kinds/package-registry.kind.js.map +1 -1
- package/dist/kinds/queue.kind.d.ts +67 -63
- package/dist/kinds/queue.kind.d.ts.map +1 -1
- package/dist/kinds/queue.kind.js +55 -33
- package/dist/kinds/queue.kind.js.map +1 -1
- package/dist/kinds/read-descriptor.d.ts +15 -0
- package/dist/kinds/read-descriptor.d.ts.map +1 -0
- package/dist/kinds/read-descriptor.js +11 -0
- package/dist/kinds/read-descriptor.js.map +1 -0
- package/dist/kinds/rum.kind.d.ts +36 -6
- package/dist/kinds/rum.kind.d.ts.map +1 -1
- package/dist/kinds/rum.kind.js +6 -7
- package/dist/kinds/rum.kind.js.map +1 -1
- package/dist/kinds/sandbox.kind.d.ts +136 -36
- package/dist/kinds/sandbox.kind.d.ts.map +1 -1
- package/dist/kinds/sandbox.kind.js +80 -34
- package/dist/kinds/sandbox.kind.js.map +1 -1
- package/dist/kinds/select-compute-source.d.ts +72 -0
- package/dist/kinds/select-compute-source.d.ts.map +1 -0
- package/dist/kinds/select-compute-source.js +170 -0
- package/dist/kinds/select-compute-source.js.map +1 -0
- package/dist/kinds/service-release.kind.d.ts +771 -0
- package/dist/kinds/service-release.kind.d.ts.map +1 -0
- package/dist/kinds/service-release.kind.js +676 -0
- package/dist/kinds/service-release.kind.js.map +1 -0
- package/dist/kinds/spend-guard.kind.d.ts +40 -0
- package/dist/kinds/spend-guard.kind.d.ts.map +1 -0
- package/dist/kinds/spend-guard.kind.js +133 -0
- package/dist/kinds/spend-guard.kind.js.map +1 -0
- package/dist/kinds/utilization.kind.d.ts +88 -0
- package/dist/kinds/utilization.kind.d.ts.map +1 -0
- package/dist/kinds/utilization.kind.js +62 -0
- package/dist/kinds/utilization.kind.js.map +1 -0
- package/dist/kinds/volume.kind.d.ts +54 -0
- package/dist/kinds/volume.kind.d.ts.map +1 -0
- package/dist/kinds/volume.kind.js +39 -0
- package/dist/kinds/volume.kind.js.map +1 -0
- package/dist/kinds/vpc.kind.d.ts +61 -0
- package/dist/kinds/vpc.kind.d.ts.map +1 -0
- package/dist/kinds/vpc.kind.js +51 -0
- package/dist/kinds/vpc.kind.js.map +1 -0
- package/dist/kinds/web-app.kind.d.ts +115 -45
- package/dist/kinds/web-app.kind.d.ts.map +1 -1
- package/dist/kinds/web-app.kind.js +69 -42
- package/dist/kinds/web-app.kind.js.map +1 -1
- package/dist/kinds/worker.kind.d.ts +291 -188
- package/dist/kinds/worker.kind.d.ts.map +1 -1
- package/dist/kinds/worker.kind.js +45 -123
- package/dist/kinds/worker.kind.js.map +1 -1
- package/dist/schemas/database-migration.d.ts +173 -0
- package/dist/schemas/database-migration.d.ts.map +1 -0
- package/dist/schemas/database-migration.js +88 -0
- package/dist/schemas/database-migration.js.map +1 -0
- package/dist/schemas/deployment-environment.d.ts +11 -0
- package/dist/schemas/deployment-environment.d.ts.map +1 -0
- package/dist/schemas/deployment-environment.js +9 -0
- package/dist/schemas/deployment-environment.js.map +1 -0
- package/dist/schemas/deployment-provider.d.ts +336 -0
- package/dist/schemas/deployment-provider.d.ts.map +1 -0
- package/dist/schemas/deployment-provider.js +198 -0
- package/dist/schemas/deployment-provider.js.map +1 -0
- package/dist/schemas/log-stream.d.ts +27 -0
- package/dist/schemas/log-stream.d.ts.map +1 -0
- package/dist/schemas/log-stream.js +31 -0
- package/dist/schemas/log-stream.js.map +1 -0
- package/dist/schemas/spend-guard.d.ts +155 -0
- package/dist/schemas/spend-guard.d.ts.map +1 -0
- package/dist/schemas/spend-guard.js +61 -0
- package/dist/schemas/spend-guard.js.map +1 -0
- package/dist/schemas.d.ts +190 -20
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +137 -31
- package/dist/schemas.js.map +1 -1
- package/dist/service.d.ts +87 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +199 -0
- package/dist/service.js.map +1 -0
- package/dist/settle-work.d.ts +20 -0
- package/dist/settle-work.d.ts.map +1 -0
- package/dist/settle-work.js +22 -0
- package/dist/settle-work.js.map +1 -0
- package/dist/web-app-projection.d.ts +132 -0
- package/dist/web-app-projection.d.ts.map +1 -0
- package/dist/web-app-projection.js +93 -0
- package/dist/web-app-projection.js.map +1 -0
- package/package.json +87 -36
- package/src/bootstrap/index.ts +0 -15
- package/src/bootstrap/seed.descriptor.ts +0 -24
- package/src/bootstrap/seed.impl-shape.ts +0 -5
- package/src/bootstrap/seed.kind.ts +0 -26
- package/src/bootstrap/seed.runner.ts +0 -87
- package/src/credentials/resolve.ts +0 -205
- package/src/deployment.ts +0 -57
- package/src/index.ts +0 -149
- package/src/infra.plugin.ts +0 -54
- package/src/kinds/alerts.kind.ts +0 -164
- package/src/kinds/artifact.kind.ts +0 -96
- package/src/kinds/cache.kind.ts +0 -104
- package/src/kinds/database.kind.ts +0 -120
- package/src/kinds/discovery.ts +0 -26
- package/src/kinds/git-hosting.kind.ts +0 -100
- package/src/kinds/index.ts +0 -139
- package/src/kinds/logs.kind.ts +0 -104
- package/src/kinds/object-storage.kind.ts +0 -101
- package/src/kinds/observability.kind.ts +0 -178
- package/src/kinds/package-registry.kind.ts +0 -95
- package/src/kinds/queue.kind.ts +0 -102
- package/src/kinds/rum.kind.ts +0 -135
- package/src/kinds/sandbox.kind.ts +0 -115
- package/src/kinds/web-app.kind.ts +0 -103
- package/src/kinds/worker.kind.ts +0 -203
- package/src/schemas.ts +0 -127
package/dist/schemas.js
CHANGED
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
import * as z from 'zod/v4';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* - digitalocean-app: via infra-doks
|
|
7
|
-
*/
|
|
8
|
-
export const deploymentProviderSchema = z.enum([
|
|
9
|
-
'cloudflare-workers',
|
|
10
|
-
'digitalocean-app'
|
|
11
|
-
]);
|
|
12
|
-
/**
|
|
13
|
-
* Map of valid provider × runtime combinations.
|
|
14
|
-
* Used for cross-validation in appDeploymentSchema refinement.
|
|
15
|
-
*/
|
|
16
|
-
const VALID_PROVIDER_RUNTIME_MATRIX = {
|
|
17
|
-
'cloudflare-workers': ['edge', 'worker'],
|
|
18
|
-
'digitalocean-app': ['node', 'worker']
|
|
19
|
-
};
|
|
2
|
+
import { deploymentOriginKindSchema } from '@vibesdotdev/infra-contracts';
|
|
3
|
+
export { deploymentOriginKindSchema } from '@vibesdotdev/infra-contracts';
|
|
4
|
+
/** Provider IDs are open; the handed runtime admits registered capabilities. */
|
|
5
|
+
export const deploymentProviderSchema = z.string().min(1);
|
|
20
6
|
export const appRuntimeSchema = z.enum(['edge', 'node', 'worker', 'browser']);
|
|
7
|
+
/** The environment variables an upstream's origin is published as (`NAME` → origin). */
|
|
8
|
+
export const deploymentOriginEnvSchema = z.record(z.string().regex(/^[_A-Z0-9]+$/), z.string());
|
|
21
9
|
export const deploymentOriginSchema = z.object({
|
|
22
10
|
hostname: z.string().min(1),
|
|
23
11
|
origin: z.string().url(),
|
|
24
|
-
kind:
|
|
12
|
+
kind: deploymentOriginKindSchema.default('primary'),
|
|
25
13
|
description: z.string().optional()
|
|
26
14
|
});
|
|
27
15
|
export const deploymentBuildSchema = z.object({
|
|
@@ -43,11 +31,20 @@ export const deploymentEnvRequirementSchema = z.object({
|
|
|
43
31
|
* Only meaningful when `secret: true` and the deployment targets a shared
|
|
44
32
|
* Secrets Store binding (e.g. `secrets_store_secrets[].secret_name`).
|
|
45
33
|
*/
|
|
46
|
-
storeKey: z.string().min(1).optional()
|
|
34
|
+
storeKey: z.string().min(1).optional(),
|
|
35
|
+
/**
|
|
36
|
+
* When `false`, this secret never emits a `secrets_store_secrets[]` binding —
|
|
37
|
+
* it is read via runtime env only (e.g. `$env/dynamic/private` in local dev).
|
|
38
|
+
* Wrangler hard-rejects a deploy whose binding references a store secret that
|
|
39
|
+
* does not exist, so local-only secrets must opt out of store binding.
|
|
40
|
+
* Defaults to `true` (bound) for `secret: true` entries.
|
|
41
|
+
*/
|
|
42
|
+
storeBinding: z.boolean().optional()
|
|
47
43
|
});
|
|
48
44
|
export const deploymentDependencySchema = z.object({
|
|
49
45
|
appId: z.string().min(1),
|
|
50
|
-
reason: z.string().min(1)
|
|
46
|
+
reason: z.string().min(1),
|
|
47
|
+
required: z.boolean().default(true)
|
|
51
48
|
});
|
|
52
49
|
export const deploymentUpstreamSchema = z.object({
|
|
53
50
|
name: z.string().min(1),
|
|
@@ -58,11 +55,30 @@ export const deploymentUpstreamSchema = z.object({
|
|
|
58
55
|
.regex(/^[_A-Z0-9]+$/)
|
|
59
56
|
.optional()
|
|
60
57
|
});
|
|
58
|
+
/** Execution requirements validated against the registered provider at admission. */
|
|
59
|
+
export const deploymentExecutionSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
/** App needs an interactive PTY session. */
|
|
62
|
+
pty: z.boolean().optional(),
|
|
63
|
+
/** App runs commands through a shell. */
|
|
64
|
+
shell: z.boolean().optional(),
|
|
65
|
+
/** Maximum concurrent live PTY sessions this host advertises. */
|
|
66
|
+
maxSessions: z.number().int().positive().optional()
|
|
67
|
+
})
|
|
68
|
+
.optional();
|
|
61
69
|
export const appDeploymentSchema = z
|
|
62
70
|
.object({
|
|
63
71
|
appId: z.string().min(1),
|
|
64
72
|
appName: z.string().min(1),
|
|
65
73
|
provider: deploymentProviderSchema,
|
|
74
|
+
/**
|
|
75
|
+
* The plugin specifier that registers `provider` as an
|
|
76
|
+
* `infra/deployment-provider`, declared by the provider package's own
|
|
77
|
+
* deployment factory. A deploy whose runtime has not composed `provider`
|
|
78
|
+
* composes this plugin first, so a checkout CLI deploys with the
|
|
79
|
+
* provider its deployment names and no host lists it.
|
|
80
|
+
*/
|
|
81
|
+
providerPlugin: z.string().trim().min(1).optional(),
|
|
66
82
|
runtime: appRuntimeSchema,
|
|
67
83
|
build: deploymentBuildSchema,
|
|
68
84
|
origins: z.array(deploymentOriginSchema).min(1),
|
|
@@ -87,16 +103,106 @@ export const appDeploymentSchema = z
|
|
|
87
103
|
command: z.string().min(1),
|
|
88
104
|
description: z.string().optional()
|
|
89
105
|
}))
|
|
90
|
-
.default([])
|
|
106
|
+
.default([]),
|
|
107
|
+
execution: deploymentExecutionSchema,
|
|
108
|
+
/**
|
|
109
|
+
* Schema migrations of the databases this app declares. A failed local
|
|
110
|
+
* migration pass of an app that sets `requiredForLocalDev` stops the dev
|
|
111
|
+
* stack; any other app's failure is reported and the stack starts.
|
|
112
|
+
*/
|
|
113
|
+
migrations: z
|
|
114
|
+
.object({
|
|
115
|
+
requiredForLocalDev: z.boolean().default(false)
|
|
116
|
+
})
|
|
117
|
+
.optional()
|
|
118
|
+
});
|
|
119
|
+
/** Default preview TTL in hours. Redeploys refresh `expiresAt` from this. */
|
|
120
|
+
export const DEFAULT_PREVIEW_TTL_HOURS = 72;
|
|
121
|
+
export const PreviewRecordStatusSchema = z.enum(['building', 'live', 'failed', 'destroyed']);
|
|
122
|
+
export const PreviewRepoOfRecordSchema = z.enum(['forge', 'github']);
|
|
123
|
+
export const PreviewSecretsModeSchema = z.enum(['namespace', 'script-pushed']);
|
|
124
|
+
/** Provider-reported availability for one declared preview capability. */
|
|
125
|
+
export const PreviewCapabilityStatusSchema = z.enum([
|
|
126
|
+
'available',
|
|
127
|
+
'degraded',
|
|
128
|
+
'unavailable',
|
|
129
|
+
'not-declared'
|
|
130
|
+
]);
|
|
131
|
+
/** Resource isolation achieved by a rendered preview binding. */
|
|
132
|
+
export const PreviewCapabilityIsolationSchema = z.enum([
|
|
133
|
+
'preview-tier',
|
|
134
|
+
'shared-external',
|
|
135
|
+
'none',
|
|
136
|
+
'not-applicable'
|
|
137
|
+
]);
|
|
138
|
+
/** Machine-readable proof of what one preview capability actually renders. */
|
|
139
|
+
export const PreviewCapabilitySchema = z.object({
|
|
140
|
+
status: PreviewCapabilityStatusSchema,
|
|
141
|
+
isolation: PreviewCapabilityIsolationSchema,
|
|
142
|
+
critical: z.boolean(),
|
|
143
|
+
declared: z.array(z.string()),
|
|
144
|
+
rendered: z.array(z.string()),
|
|
145
|
+
reason: z.string().min(1)
|
|
146
|
+
});
|
|
147
|
+
export const PreviewFidelityLevelSchema = z.enum(['full', 'degraded']);
|
|
148
|
+
/**
|
|
149
|
+
* Provider-neutral preview fidelity envelope. Providers own the capability
|
|
150
|
+
* facts; orchestration surfaces expose this exact shape and may require
|
|
151
|
+
* `level: 'full'` before any build or upload begins.
|
|
152
|
+
*/
|
|
153
|
+
export const PreviewFidelitySchema = z
|
|
154
|
+
.object({
|
|
155
|
+
level: PreviewFidelityLevelSchema,
|
|
156
|
+
fullFidelity: z.boolean(),
|
|
157
|
+
criticalMissing: z.array(z.string()),
|
|
158
|
+
capabilities: z.record(z.string(), PreviewCapabilitySchema)
|
|
91
159
|
})
|
|
92
|
-
.
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
160
|
+
.superRefine((fidelity, ctx) => {
|
|
161
|
+
const actualMissing = Object.entries(fidelity.capabilities)
|
|
162
|
+
.filter(([, capability]) => capability.critical && capability.status !== 'available')
|
|
163
|
+
.map(([name]) => name)
|
|
164
|
+
.sort();
|
|
165
|
+
const claimedMissing = [...new Set(fidelity.criticalMissing)].sort();
|
|
166
|
+
const expectedFull = actualMissing.length === 0;
|
|
167
|
+
if (fidelity.fullFidelity !== expectedFull ||
|
|
168
|
+
fidelity.level !== (expectedFull ? 'full' : 'degraded')) {
|
|
169
|
+
ctx.addIssue({
|
|
170
|
+
code: 'custom',
|
|
171
|
+
path: ['level'],
|
|
172
|
+
message: 'Preview fidelity level/fullFidelity must match critical capability availability.'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (JSON.stringify(claimedMissing) !== JSON.stringify(actualMissing)) {
|
|
176
|
+
ctx.addIssue({
|
|
177
|
+
code: 'custom',
|
|
178
|
+
path: ['criticalMissing'],
|
|
179
|
+
message: 'criticalMissing must name every unavailable critical capability exactly once.'
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
/**
|
|
184
|
+
* Current-state record for one preview deployment (one per previewId).
|
|
185
|
+
* Persisted as the `infra-deploy.previews` storage manifest (infra-deploy);
|
|
186
|
+
* `runId` references the matching `deployment_runs` history row.
|
|
187
|
+
*/
|
|
188
|
+
export const PreviewRecordSchema = z.object({
|
|
189
|
+
previewId: z.string().min(1),
|
|
190
|
+
appId: z.string().min(1),
|
|
191
|
+
branch: z.string().min(1),
|
|
192
|
+
worktreePath: z.string().min(1).optional(),
|
|
193
|
+
/** Build-input ref, e.g. `refs/previews/<previewId>`. */
|
|
194
|
+
previewRef: z.string().min(1).optional(),
|
|
195
|
+
sha: z.string().min(1),
|
|
196
|
+
repoOfRecord: PreviewRepoOfRecordSchema.default('forge'),
|
|
197
|
+
buildJobId: z.string().min(1).optional(),
|
|
198
|
+
status: PreviewRecordStatusSchema,
|
|
199
|
+
url: z.string().url(),
|
|
200
|
+
dispatchScript: z.string().min(1),
|
|
201
|
+
secretsMode: PreviewSecretsModeSchema.default('script-pushed'),
|
|
202
|
+
fidelity: PreviewFidelitySchema.optional(),
|
|
203
|
+
ttlHours: z.number().int().positive().default(DEFAULT_PREVIEW_TTL_HOURS),
|
|
204
|
+
expiresAt: z.string().datetime(),
|
|
205
|
+
createdBy: z.string().min(1),
|
|
206
|
+
runId: z.string().min(1)
|
|
101
207
|
});
|
|
102
208
|
//# sourceMappingURL=schemas.js.map
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
3
|
+
import type { KindContext } from '@vibesdotdev/kernel/schemas/kind';
|
|
4
|
+
import type { RuntimeDescriptor } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
5
|
+
import { canonicalOrigin } from '@vibesdotdev/config/environment/canonical-origin';
|
|
6
|
+
import type { ConfigManifestDescriptor } from '@vibesdotdev/config/schemas/config-manifest-descriptor';
|
|
7
|
+
import { type ServiceDescriptor, type ServiceEnvironment, type ServicePort, type ServiceTarget, type ServiceTargetKind } from '@vibesdotdev/infra-contracts';
|
|
8
|
+
export { ServiceOriginSchema, ServiceDescriptorSchema } from '@vibesdotdev/infra-contracts';
|
|
9
|
+
export type { ServiceDescriptor, ServiceEnvironment } from '@vibesdotdev/infra-contracts';
|
|
10
|
+
export declare class ServiceImplementation implements ServicePort {
|
|
11
|
+
readonly descriptor: ServiceDescriptor;
|
|
12
|
+
private readonly runtime;
|
|
13
|
+
constructor(descriptor: RuntimeDescriptor, context: KindContext);
|
|
14
|
+
/**
|
|
15
|
+
* This service's origin in the constructing runtime's configured service
|
|
16
|
+
* environment. Consumers resolve it through the `infra/service` kind, so
|
|
17
|
+
* reading an origin needs no import of this package.
|
|
18
|
+
*/
|
|
19
|
+
target(kind?: ServiceTargetKind): Promise<ServiceTarget>;
|
|
20
|
+
/** Compatibility door: the service owner selects the same target once. */
|
|
21
|
+
origin(kind?: ServiceTargetKind): Promise<string>;
|
|
22
|
+
}
|
|
23
|
+
export declare const serviceKind: import("@vibesdotdev/kernel").RuntimeKindDescriptorRecord<ServiceImplementation>;
|
|
24
|
+
export declare const InfraServicesConfigSchema: z.ZodObject<{
|
|
25
|
+
environment: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
|
|
26
|
+
local: "local";
|
|
27
|
+
dev: "dev";
|
|
28
|
+
staging: "staging";
|
|
29
|
+
production: "production";
|
|
30
|
+
}>, z.ZodLiteral<"host">]>>;
|
|
31
|
+
origins: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
32
|
+
primary: z.ZodOptional<z.ZodURL>;
|
|
33
|
+
internal: z.ZodOptional<z.ZodURL>;
|
|
34
|
+
}, z.core.$strict>>>;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
export type InfraServicesConfig = z.infer<typeof InfraServicesConfigSchema>;
|
|
37
|
+
export declare const infraServicesConfigManifest: ConfigManifestDescriptor;
|
|
38
|
+
export declare const infraServicesPlugin: import("@vibesdotdev/kernel").RuntimePlugin;
|
|
39
|
+
/** Pure selection from one runtime-resolved declaration; no hostname guesses. */
|
|
40
|
+
export declare function originOf(service: ServiceDescriptor | ServiceImplementation | null | undefined, environment: ServiceEnvironment, kind?: 'primary' | 'internal'): string;
|
|
41
|
+
/** The `infra/service` reader lives with the contract, so consumers need no import of this package. */
|
|
42
|
+
export { serviceOrigin } from '@vibesdotdev/infra-contracts/service';
|
|
43
|
+
/**
|
|
44
|
+
* The service's local dev port: the explicit port of its declared `local`
|
|
45
|
+
* `internal` origin (the loopback transport its dev server binds). A service
|
|
46
|
+
* declaring none refuses `dev-port-undeclared`; nothing is guessed.
|
|
47
|
+
*/
|
|
48
|
+
export declare function localDevPort(service: ServiceDescriptor | ServiceImplementation | null | undefined): number;
|
|
49
|
+
/** The runtime port the declared-service readers below need: the kind query, nothing else. */
|
|
50
|
+
export type ServiceCatalogRuntime = Pick<RuntimeRef, 'hasKind' | 'query'>;
|
|
51
|
+
/**
|
|
52
|
+
* Where the readers below find service declarations: a runtime's registered
|
|
53
|
+
* `infra/service` descriptors, or a host's own declarations read statically
|
|
54
|
+
* (for a test harness or PM descriptor that has no runtime to query).
|
|
55
|
+
*/
|
|
56
|
+
export type ServiceCatalog = ServiceCatalogRuntime | readonly ServiceDescriptor[];
|
|
57
|
+
/** `value`'s origin in canonical form for host comparison (config owns the one implementation). */
|
|
58
|
+
export { canonicalOrigin };
|
|
59
|
+
/**
|
|
60
|
+
* The origin a server uses to reach the declared service that serves `origin`:
|
|
61
|
+
* the `internal` origin that service declares for the same environment as the
|
|
62
|
+
* matched origin, otherwise `origin` unchanged. An origin no registered
|
|
63
|
+
* service declares refuses `service-undeclared`; an unparseable one refuses
|
|
64
|
+
* `origin-invalid`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function serviceTransportOrigin(catalog: ServiceCatalog, origin: string): Promise<string>;
|
|
67
|
+
/** {@link serviceTransportOrigin} for a full URL; its path, query and hash are kept. */
|
|
68
|
+
export declare function serviceTransportUrl(catalog: ServiceCatalog, url: string): Promise<string>;
|
|
69
|
+
/** Every origin a registered service declares for the `local` environment, sorted and unique. */
|
|
70
|
+
export declare function localServiceOrigins(catalog: ServiceCatalog): string[];
|
|
71
|
+
/** True when `url` is on an origin a registered service declares for the `local` environment. */
|
|
72
|
+
export declare function isLocalServiceUrl(catalog: ServiceCatalog, url: string | URL): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The declared `local` origins the local proxy serves: every one whose host is
|
|
75
|
+
* not loopback (loopback origins are the services' direct dev transports).
|
|
76
|
+
*/
|
|
77
|
+
export declare function localProxyOrigins(catalog: ServiceCatalog): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Chromium host-resolver arguments mapping every hostname a registered
|
|
80
|
+
* service declares for the `local` environment onto loopback, where the local
|
|
81
|
+
* proxy serves it. Loopback origins need no mapping; none declared, none.
|
|
82
|
+
*/
|
|
83
|
+
export declare function localHostResolverArgs(catalog: ServiceCatalog): string[];
|
|
84
|
+
/** The deployment a host calls is config, distinct from the host's own tier. */
|
|
85
|
+
export declare function serviceEnvironment(runtime: RuntimeRef): Promise<ServiceEnvironment>;
|
|
86
|
+
export default infraServicesPlugin;
|
|
87
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { CapabilityError, EnvironmentTierSchema, createRuntimeKind, createRuntimePlugin } from '@vibesdotdev/kernel';
|
|
3
|
+
import { ConfigManifest } from '@vibesdotdev/config/manifest/config-manifest';
|
|
4
|
+
import { canonicalOrigin } from '@vibesdotdev/config/environment/canonical-origin';
|
|
5
|
+
import { readKindDescriptor } from "./kinds/read-descriptor.js";
|
|
6
|
+
import { ServiceDescriptorSchema, ServiceTargetKindSchema, ServiceTargetSchema } from '@vibesdotdev/infra-contracts';
|
|
7
|
+
export { ServiceOriginSchema, ServiceDescriptorSchema } from '@vibesdotdev/infra-contracts';
|
|
8
|
+
export class ServiceImplementation {
|
|
9
|
+
descriptor;
|
|
10
|
+
runtime;
|
|
11
|
+
constructor(descriptor, context) {
|
|
12
|
+
this.descriptor = readKindDescriptor(ServiceDescriptorSchema, descriptor);
|
|
13
|
+
this.runtime = context.runtime;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* This service's origin in the constructing runtime's configured service
|
|
17
|
+
* environment. Consumers resolve it through the `infra/service` kind, so
|
|
18
|
+
* reading an origin needs no import of this package.
|
|
19
|
+
*/
|
|
20
|
+
async target(kind = 'primary') {
|
|
21
|
+
const requested = ServiceTargetKindSchema.safeParse(kind);
|
|
22
|
+
if (!requested.success)
|
|
23
|
+
throw new CapabilityError('Service target kind is invalid.', 'INVALID_INPUT', {
|
|
24
|
+
reason: 'service-target-kind-invalid', cause: requested.error
|
|
25
|
+
});
|
|
26
|
+
const config = await ConfigManifest.forRuntime(this.runtime, 'infra.services').load();
|
|
27
|
+
const environment = configuredServiceEnvironment(this.runtime, config);
|
|
28
|
+
const override = config.origins[this.descriptor.id];
|
|
29
|
+
const primary = override?.primary?.replace(/\/$/, '') ?? originOf(this.descriptor, environment);
|
|
30
|
+
const origin = requested.data === 'primary' ? primary :
|
|
31
|
+
override?.internal?.replace(/\/$/, '') ?? this.descriptor.origins.find((entry) => entry.environment === environment && entry.kind === 'internal')?.origin ?? primary;
|
|
32
|
+
return ServiceTargetSchema.parse({ origin, environment });
|
|
33
|
+
}
|
|
34
|
+
/** Compatibility door: the service owner selects the same target once. */
|
|
35
|
+
async origin(kind = 'primary') {
|
|
36
|
+
return (await this.target(kind)).origin;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const serviceKind = createRuntimeKind({
|
|
40
|
+
id: 'infra/service', descriptorSchema: ServiceDescriptorSchema,
|
|
41
|
+
defaultImplementation: ServiceImplementation,
|
|
42
|
+
discoveryPatterns: ['*.infra.service.ts', 'infra/services/*.infra.service.ts']
|
|
43
|
+
});
|
|
44
|
+
export const InfraServicesConfigSchema = z.strictObject({
|
|
45
|
+
// The CLI has always addressed the production Vibes services unless a host
|
|
46
|
+
// declared otherwise; a workspace that declares no service environment
|
|
47
|
+
// keeps that behaviour instead of failing as "invalid at environment".
|
|
48
|
+
environment: z.union([EnvironmentTierSchema, z.literal('host')]).default('production'),
|
|
49
|
+
// Host composition may override declared services for its selected target
|
|
50
|
+
// environment. Internal transport stays independent of a public override.
|
|
51
|
+
origins: z.record(z.string().min(1), z.strictObject({
|
|
52
|
+
primary: z.url().optional(),
|
|
53
|
+
internal: z.url().optional()
|
|
54
|
+
})).default({})
|
|
55
|
+
});
|
|
56
|
+
export const infraServicesConfigManifest = {
|
|
57
|
+
kind: 'config/manifest', id: 'infra.services', name: 'Service environment',
|
|
58
|
+
namespace: 'infra.services', schema: InfraServicesConfigSchema,
|
|
59
|
+
// Never cloud-api: resolving that adapter's endpoint would recurse here.
|
|
60
|
+
allowedAdapters: ['storage.json', 'storage.localdb'],
|
|
61
|
+
scope: 'global', customTables: false, version: 1, internal: false, tier: 'user', fields: { environment: { ui: { label: 'Service environment', component: 'select' } } }
|
|
62
|
+
};
|
|
63
|
+
export const infraServicesPlugin = createRuntimePlugin({
|
|
64
|
+
id: 'infra.services', name: 'Infrastructure services', dependencies: ['config'],
|
|
65
|
+
kinds: [serviceKind], descriptors: [infraServicesConfigManifest]
|
|
66
|
+
});
|
|
67
|
+
/** Pure selection from one runtime-resolved declaration; no hostname guesses. */
|
|
68
|
+
export function originOf(service, environment, kind = 'primary') {
|
|
69
|
+
const descriptor = service && ('descriptor' in service ? service.descriptor : service);
|
|
70
|
+
const primary = descriptor?.origins.find((entry) => entry.environment === environment && entry.kind === 'primary');
|
|
71
|
+
if (!primary)
|
|
72
|
+
throw new CapabilityError('Service has no declared primary origin in this environment.', 'NOT_FOUND', {
|
|
73
|
+
reason: 'service-undeclared', details: { serviceId: descriptor?.id, environment }
|
|
74
|
+
});
|
|
75
|
+
return (kind === 'internal' ? descriptor?.origins.find((entry) => entry.environment === environment && entry.kind === 'internal') : primary)?.origin ?? primary.origin;
|
|
76
|
+
}
|
|
77
|
+
/** The `infra/service` reader lives with the contract, so consumers need no import of this package. */
|
|
78
|
+
export { serviceOrigin } from '@vibesdotdev/infra-contracts/service';
|
|
79
|
+
/**
|
|
80
|
+
* The service's local dev port: the explicit port of its declared `local`
|
|
81
|
+
* `internal` origin (the loopback transport its dev server binds). A service
|
|
82
|
+
* declaring none refuses `dev-port-undeclared`; nothing is guessed.
|
|
83
|
+
*/
|
|
84
|
+
export function localDevPort(service) {
|
|
85
|
+
const descriptor = service && ('descriptor' in service ? service.descriptor : service);
|
|
86
|
+
const internal = descriptor?.origins.find((entry) => entry.environment === 'local' && entry.kind === 'internal');
|
|
87
|
+
const port = internal ? Number(new URL(internal.origin).port) : Number.NaN;
|
|
88
|
+
if (!Number.isInteger(port) || port <= 0)
|
|
89
|
+
throw new CapabilityError('Service declares no local dev port.', 'NOT_FOUND', {
|
|
90
|
+
reason: 'dev-port-undeclared', details: { serviceId: descriptor?.id }
|
|
91
|
+
});
|
|
92
|
+
return port;
|
|
93
|
+
}
|
|
94
|
+
function isDeclarationList(catalog) {
|
|
95
|
+
return Array.isArray(catalog);
|
|
96
|
+
}
|
|
97
|
+
function declaredServices(catalog) {
|
|
98
|
+
if (isDeclarationList(catalog))
|
|
99
|
+
return catalog;
|
|
100
|
+
return catalog.hasKind('infra/service')
|
|
101
|
+
? catalog.query('infra/service').descriptors()
|
|
102
|
+
: [];
|
|
103
|
+
}
|
|
104
|
+
/** `value`'s origin in canonical form for host comparison (config owns the one implementation). */
|
|
105
|
+
export { canonicalOrigin };
|
|
106
|
+
function parsedOrigin(value) {
|
|
107
|
+
return canonicalOrigin(value);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The origin a server uses to reach the declared service that serves `origin`:
|
|
111
|
+
* the `internal` origin that service declares for the same environment as the
|
|
112
|
+
* matched origin, otherwise `origin` unchanged. An origin no registered
|
|
113
|
+
* service declares refuses `service-undeclared`; an unparseable one refuses
|
|
114
|
+
* `origin-invalid`.
|
|
115
|
+
*/
|
|
116
|
+
export async function serviceTransportOrigin(catalog, origin) {
|
|
117
|
+
const target = parsedOrigin(origin);
|
|
118
|
+
// The refusal names the field, never its value: the input may hold a credential.
|
|
119
|
+
if (target === undefined)
|
|
120
|
+
throw new CapabilityError('Service origin is not a URL.', 'INVALID_INPUT', {
|
|
121
|
+
reason: 'origin-invalid', details: { paths: ['origin'] }
|
|
122
|
+
});
|
|
123
|
+
for (const service of declaredServices(catalog)) {
|
|
124
|
+
const matched = service.origins.find((entry) => parsedOrigin(entry.origin) === target);
|
|
125
|
+
if (!matched)
|
|
126
|
+
continue;
|
|
127
|
+
const internal = service.origins.find((entry) => entry.environment === matched.environment && entry.kind === 'internal');
|
|
128
|
+
return internal?.origin ?? origin;
|
|
129
|
+
}
|
|
130
|
+
throw new CapabilityError('No declared service serves this origin.', 'NOT_FOUND', {
|
|
131
|
+
reason: 'service-undeclared', details: { origin: target }
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/** {@link serviceTransportOrigin} for a full URL; its path, query and hash are kept. */
|
|
135
|
+
export async function serviceTransportUrl(catalog, url) {
|
|
136
|
+
if (!URL.canParse(url))
|
|
137
|
+
throw new CapabilityError('Service URL is not a URL.', 'INVALID_INPUT', {
|
|
138
|
+
reason: 'origin-invalid', details: { paths: ['url'] }
|
|
139
|
+
});
|
|
140
|
+
const parsed = new URL(url);
|
|
141
|
+
const transport = await serviceTransportOrigin(catalog, parsed.origin);
|
|
142
|
+
if (transport === parsed.origin)
|
|
143
|
+
return url;
|
|
144
|
+
return new URL(`${parsed.pathname}${parsed.search}${parsed.hash}`, `${transport}/`).toString();
|
|
145
|
+
}
|
|
146
|
+
/** Every origin a registered service declares for the `local` environment, sorted and unique. */
|
|
147
|
+
export function localServiceOrigins(catalog) {
|
|
148
|
+
const origins = new Set();
|
|
149
|
+
for (const service of declaredServices(catalog)) {
|
|
150
|
+
for (const entry of service.origins) {
|
|
151
|
+
const origin = entry.environment === 'local' ? parsedOrigin(entry.origin) : undefined;
|
|
152
|
+
if (origin !== undefined)
|
|
153
|
+
origins.add(origin);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return [...origins].sort();
|
|
157
|
+
}
|
|
158
|
+
/** True when `url` is on an origin a registered service declares for the `local` environment. */
|
|
159
|
+
export function isLocalServiceUrl(catalog, url) {
|
|
160
|
+
const origin = parsedOrigin(url);
|
|
161
|
+
return origin !== undefined && localServiceOrigins(catalog).includes(origin);
|
|
162
|
+
}
|
|
163
|
+
const LOOPBACK_HOSTNAMES = new Set(['127.0.0.1', 'localhost', '[::1]']);
|
|
164
|
+
/**
|
|
165
|
+
* The declared `local` origins the local proxy serves: every one whose host is
|
|
166
|
+
* not loopback (loopback origins are the services' direct dev transports).
|
|
167
|
+
*/
|
|
168
|
+
export function localProxyOrigins(catalog) {
|
|
169
|
+
return localServiceOrigins(catalog).filter((origin) => !LOOPBACK_HOSTNAMES.has(new URL(origin).hostname));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Chromium host-resolver arguments mapping every hostname a registered
|
|
173
|
+
* service declares for the `local` environment onto loopback, where the local
|
|
174
|
+
* proxy serves it. Loopback origins need no mapping; none declared, none.
|
|
175
|
+
*/
|
|
176
|
+
export function localHostResolverArgs(catalog) {
|
|
177
|
+
const hostnames = new Set(localProxyOrigins(catalog).map((origin) => new URL(origin).hostname));
|
|
178
|
+
if (hostnames.size === 0)
|
|
179
|
+
return [];
|
|
180
|
+
return [`--host-resolver-rules=${[...hostnames].sort().map((hostname) => `MAP ${hostname} 127.0.0.1`).join(',')}`];
|
|
181
|
+
}
|
|
182
|
+
/** The deployment a host calls is config, distinct from the host's own tier. */
|
|
183
|
+
export async function serviceEnvironment(runtime) {
|
|
184
|
+
const config = await ConfigManifest.forRuntime(runtime, 'infra.services').load();
|
|
185
|
+
return configuredServiceEnvironment(runtime, config);
|
|
186
|
+
}
|
|
187
|
+
function configuredServiceEnvironment(runtime, config) {
|
|
188
|
+
if (config.environment !== 'host')
|
|
189
|
+
return config.environment;
|
|
190
|
+
const tier = runtime.scope.qualifiers?.environmentTier;
|
|
191
|
+
if (tier === undefined)
|
|
192
|
+
throw new CapabilityError('Host service environment requires a declared tier.', 'INTERNAL', { reason: 'tier-undeclared' });
|
|
193
|
+
const parsed = EnvironmentTierSchema.safeParse(tier);
|
|
194
|
+
if (!parsed.success)
|
|
195
|
+
throw new CapabilityError('Host environment tier is invalid.', 'INVALID_INPUT', { reason: 'scope-invalid' });
|
|
196
|
+
return parsed.data;
|
|
197
|
+
}
|
|
198
|
+
export default infraServicesPlugin;
|
|
199
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One unit of work settled into its outcome: the value, or the value-free
|
|
3
|
+
* facts of what it threw (`valueFreeFailure`: class name, and code and reason
|
|
4
|
+
* when typed; never the message, stack or cause). A batch that must report
|
|
5
|
+
* each failure and continue (a backend walk, a seed run, a generator loop)
|
|
6
|
+
* reads every failure through here, so what a provider threw is never
|
|
7
|
+
* repeated in a result, a log or a refusal.
|
|
8
|
+
*/
|
|
9
|
+
import { type ValueFreeFailure } from '@vibesdotdev/kernel';
|
|
10
|
+
export type WorkOutcome<Value> = {
|
|
11
|
+
readonly ok: true;
|
|
12
|
+
readonly value: Value;
|
|
13
|
+
} | {
|
|
14
|
+
readonly ok: false;
|
|
15
|
+
readonly failure: ValueFreeFailure;
|
|
16
|
+
};
|
|
17
|
+
export declare function settleWork<Value>(work: () => Promise<Value>): Promise<WorkOutcome<Value>>;
|
|
18
|
+
/** The facts as one line: `Name [CODE reason]`. */
|
|
19
|
+
export declare function failureText(failure: ValueFreeFailure): string;
|
|
20
|
+
//# sourceMappingURL=settle-work.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-work.d.ts","sourceRoot":"","sources":["../src/settle-work.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEnG,MAAM,MAAM,WAAW,CAAC,KAAK,IAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE9D,wBAAsB,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAM/F;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One unit of work settled into its outcome: the value, or the value-free
|
|
3
|
+
* facts of what it threw (`valueFreeFailure`: class name, and code and reason
|
|
4
|
+
* when typed; never the message, stack or cause). A batch that must report
|
|
5
|
+
* each failure and continue (a backend walk, a seed run, a generator loop)
|
|
6
|
+
* reads every failure through here, so what a provider threw is never
|
|
7
|
+
* repeated in a result, a log or a refusal.
|
|
8
|
+
*/
|
|
9
|
+
import { CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
10
|
+
export async function settleWork(work) {
|
|
11
|
+
try {
|
|
12
|
+
return { ok: true, value: await work() };
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return { ok: false, failure: valueFreeFailure(CaughtFailureSchema.parse(error)) };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** The facts as one line: `Name [CODE reason]`. */
|
|
19
|
+
export function failureText(failure) {
|
|
20
|
+
return [failure.name, failure.code, failure.reason].filter(Boolean).join(' ');
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=settle-work.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-work.js","sourceRoot":"","sources":["../src/settle-work.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAMnG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAQ,IAA0B;IACjE,IAAI,CAAC;QACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IACnF,CAAC;AACF,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,OAAyB;IACpD,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC"}
|