@astrale-domains/services 0.2.2 → 0.2.3

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.
@@ -1,7 +1,5 @@
1
1
  export { CloudflareWorker } from './cloudflare-worker-class.js';
2
- export { hosted_by_service } from './hosted-by-service-edge-class.js';
3
2
  export { deleteService, deleteServiceSecret, deployCloudflareWorker, listServiceLogs, listServiceSchedules, listServiceSecretNames, replaceServiceSchedules, setServiceSecret, } from './methods/index.js';
4
- export { ObserveService, TraverseHostedDomain, TraverseHostedFunction, TraverseOwnedService, } from './policies.js';
3
+ export { ObserveService, TraverseOwnedService } from './policies.js';
5
4
  export { Service, serviceLifecycle } from './service-class.js';
6
- export { service_hosts_domain } from './service-hosts-domain-edge-class.js';
7
5
  export { service_owned_by } from './service-owned-by-edge-class.js';
@@ -1,7 +1,5 @@
1
1
  export { CloudflareWorker } from './cloudflare-worker-class.js';
2
- export { hosted_by_service } from './hosted-by-service-edge-class.js';
3
2
  export { deleteService, deleteServiceSecret, deployCloudflareWorker, listServiceLogs, listServiceSchedules, listServiceSecretNames, replaceServiceSchedules, setServiceSecret, } from './methods/index.js';
4
- export { ObserveService, TraverseHostedDomain, TraverseHostedFunction, TraverseOwnedService, } from './policies.js';
3
+ export { ObserveService, TraverseOwnedService } from './policies.js';
5
4
  export { Service, serviceLifecycle } from './service-class.js';
6
- export { service_hosts_domain } from './service-hosts-domain-edge-class.js';
7
5
  export { service_owned_by } from './service-owned-by-edge-class.js';
@@ -1,7 +1,7 @@
1
1
  import { method } from '@astrale-os/sdk/schema';
2
2
  import { z } from 'zod';
3
3
  export const deleteService = method({
4
- description: 'Convergently delete the hosted Domain, provider placement, and Service record.',
4
+ description: 'Convergently delete provider resources and the Service record without uninstalling consumers.',
5
5
  auth: 'authenticated',
6
6
  input: z.strictObject({}),
7
7
  output: z.discriminatedUnion('kind', [
@@ -63,17 +63,16 @@ export declare const deployCloudflareWorker: import("@astrale-os/sdk/schema").Me
63
63
  revision?: string | undefined;
64
64
  state: "deleting" | "deploying" | "failed" | "ready" | "reconciling";
65
65
  error?: string | null | undefined;
66
- domain?: {
66
+ application?: {
67
67
  issuer: string;
68
68
  origin: string;
69
69
  revision: string;
70
70
  publicationEtag: string;
71
+ functions: {
72
+ path: string;
73
+ ref: string;
74
+ }[];
71
75
  } | undefined;
72
- functions: {
73
- id: string;
74
- path: string;
75
- ref: string;
76
- }[];
77
76
  } | {
78
77
  kind: "rejected";
79
78
  reason: "artifact-mode-conflict" | "invalid-deployment" | "service-unavailable";
@@ -1,7 +1,7 @@
1
1
  import { method } from '@astrale-os/sdk/schema';
2
2
  import { deployServiceInput, deployServiceOutput } from '../../deployment/index.js';
3
3
  export const deployCloudflareWorker = method({
4
- description: 'Create or converge one Cloudflare Worker Service and its hosted Domain.',
4
+ description: 'Create or converge one Cloudflare Worker Service and admit its optional Publication.',
5
5
  auth: 'authenticated',
6
6
  static: true,
7
7
  input: deployServiceInput,
@@ -2,6 +2,3 @@
2
2
  export declare const ObserveService: import("@astrale-os/sdk/schema").Policy;
3
3
  /** Ownership edges disclose only the subject's own Service relationship. */
4
4
  export declare const TraverseOwnedService: import("@astrale-os/sdk/schema").Policy;
5
- /** Hosted relationships disclose only resources attached to a caller-owned Service endpoint. */
6
- export declare const TraverseHostedDomain: import("@astrale-os/sdk/schema").Policy;
7
- export declare const TraverseHostedFunction: import("@astrale-os/sdk/schema").Policy;
@@ -1,6 +1,4 @@
1
1
  import { policy } from '@astrale-os/sdk/schema';
2
- import { hosted_by_service } from './hosted-by-service-edge-class.js';
3
- import { service_hosts_domain } from './service-hosts-domain-edge-class.js';
4
2
  import { service_owned_by } from './service-owned-by-edge-class.js';
5
3
  /** A Service is visible only to the Identity that owns its provider effects. */
6
4
  export const ObserveService = policy({
@@ -12,12 +10,3 @@ export const TraverseOwnedService = policy({
12
10
  description: 'The subject owns the Service at the target of this relationship.',
13
11
  match: ({ allOf, edge, source, subject, target }) => allOf(edge({ source: subject, class: () => service_owned_by, target }), edge({ source, class: () => service_owned_by, target })),
14
12
  });
15
- /** Hosted relationships disclose only resources attached to a caller-owned Service endpoint. */
16
- export const TraverseHostedDomain = policy({
17
- description: 'The subject owns the Service that hosts this Domain.',
18
- match: ({ allOf, edge, source, subject, target }) => allOf(edge({ source, class: () => service_hosts_domain, target }), edge({ source: subject, class: () => service_owned_by, target: source })),
19
- });
20
- export const TraverseHostedFunction = policy({
21
- description: 'The subject owns the Service that hosts this Function.',
22
- match: ({ allOf, edge, source, subject, target }) => allOf(edge({ source, class: () => hosted_by_service, target }), edge({ source: subject, class: () => service_owned_by, target })),
23
- });
@@ -69,9 +69,17 @@ export declare const Service: import("@astrale-os/sdk/schema").NodeClass<{
69
69
  readonly revision: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "revision", "self">;
70
70
  readonly deploymentReceipt: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "deploymentReceipt", "self">;
71
71
  readonly operationExpiresAt: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<import("@astrale-os/sdk/schema").Value, import("@astrale-os/sdk/schema").Value, false, "operationExpiresAt", "self">;
72
+ readonly hostedIssuer: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedIssuer", "self">;
72
73
  readonly hostedOrigin: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedOrigin", "self">;
73
74
  readonly hostedRevision: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedRevision", "self">;
74
75
  readonly hostedPublicationEtag: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedPublicationEtag", "self">;
76
+ readonly hostedFunctions: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<{
77
+ ref: string;
78
+ path: string;
79
+ }[], {
80
+ ref: string;
81
+ path: string;
82
+ }[], false, "hostedFunctions", "self">;
75
83
  readonly error: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "error", "self">;
76
84
  };
77
85
  readonly methods: {
@@ -81,10 +89,10 @@ export declare const Service: import("@astrale-os/sdk/schema").NodeClass<{
81
89
  }, {
82
90
  readonly mode: 'value';
83
91
  readonly value: {
84
- name: string;
85
- } | {
86
92
  kind: "rejected";
87
93
  reason: "binding-unavailable" | "invalid-secret-name" | "service-unavailable";
94
+ } | {
95
+ name: string;
88
96
  };
89
97
  }, "authenticated", false, "default">>;
90
98
  readonly deleteSecret: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
@@ -139,15 +147,21 @@ export declare const Service: import("@astrale-os/sdk/schema").NodeClass<{
139
147
  };
140
148
  }, "authenticated", false, "default">>;
141
149
  };
142
- readonly effectiveProperties: (import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "deploymentReceipt", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "digest", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "error", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedOrigin", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedPublicationEtag", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedRevision", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<import("@astrale-os/sdk/schema").Value, import("@astrale-os/sdk/schema").Value, false, "operationExpiresAt", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "providerKey", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "providerName", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "revision", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "serviceKey", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<"deleting" | "deploying" | "failed" | "ready" | "reconciling", "deleting" | "deploying" | "failed" | "ready" | "reconciling", true, "state", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "url", "self">) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, false> & {
150
+ readonly effectiveProperties: (import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "deploymentReceipt", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "digest", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "error", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<{
151
+ ref: string;
152
+ path: string;
153
+ }[], {
154
+ ref: string;
155
+ path: string;
156
+ }[], false, "hostedFunctions", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedIssuer", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedOrigin", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedPublicationEtag", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "hostedRevision", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<import("@astrale-os/sdk/schema").Value, import("@astrale-os/sdk/schema").Value, false, "operationExpiresAt", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "providerKey", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "providerName", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "revision", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "serviceKey", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<"deleting" | "deploying" | "failed" | "ready" | "reconciling", "deleting" | "deploying" | "failed" | "ready" | "reconciling", true, "state", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, false, "url", "self">) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, false> & {
143
157
  readonly name: "description";
144
158
  readonly key: "kernel.astrale.ai:class.Descriptable.property.description";
145
- }) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
146
- readonly name: "name";
147
- readonly key: "kernel.astrale.ai:class.Named.property.name";
148
159
  }) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
149
160
  readonly name: "createdAt";
150
161
  readonly key: "kernel.astrale.ai:class.Timestamped.property.createdAt";
162
+ }) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
163
+ readonly name: "name";
164
+ readonly key: "kernel.astrale.ai:class.Named.property.name";
151
165
  }) | (import("@astrale-os/sdk/schema").ResolvedProperty<import("@astrale-os/sdk/schema").Value, true> & {
152
166
  readonly name: "updatedAt";
153
167
  readonly key: "kernel.astrale.ai:class.Timestamped.property.updatedAt";
@@ -167,15 +181,26 @@ export declare const Service: import("@astrale-os/sdk/schema").NodeClass<{
167
181
  retryAfterMs: number;
168
182
  };
169
183
  }, "authenticated", false, "default">>, "delete", "self"> | import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
184
+ tail?: number | undefined;
185
+ since?: number | undefined;
186
+ }, {
187
+ readonly mode: 'value';
188
+ readonly value: {
189
+ id: string;
190
+ ts: number;
191
+ level: string;
192
+ line: string;
193
+ }[];
194
+ }, "authenticated", false, "default">>, "logs", "self"> | import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
170
195
  name: string;
171
196
  value: string;
172
197
  }, {
173
198
  readonly mode: 'value';
174
199
  readonly value: {
175
- name: string;
176
- } | {
177
200
  kind: "rejected";
178
201
  reason: "binding-unavailable" | "invalid-secret-name" | "service-unavailable";
202
+ } | {
203
+ name: string;
179
204
  };
180
205
  }, "authenticated", false, "default">>, "setSecret", "self"> | import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
181
206
  name: string;
@@ -197,17 +222,6 @@ export declare const Service: import("@astrale-os/sdk/schema").NodeClass<{
197
222
  kind: "rejected";
198
223
  reason: "invalid-schedule" | "service-unavailable";
199
224
  };
200
- }, "authenticated", false, "default">>, "setSchedule", "self"> | import("@astrale-os/sdk/schema").AuthoredMethodProjection<import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
201
- tail?: number | undefined;
202
- since?: number | undefined;
203
- }, {
204
- readonly mode: 'value';
205
- readonly value: {
206
- id: string;
207
- ts: number;
208
- level: string;
209
- line: string;
210
- }[];
211
- }, "authenticated", false, "default">>, "logs", "self">;
225
+ }, "authenticated", false, "default">>, "setSchedule", "self">;
212
226
  readonly effectiveStaticMethods: never;
213
- }>;
227
+ }> & import("@astrale-os/sdk/schema").StateClass<Readonly<Omit<Readonly<Record<never, never>>, never> & {}>>;
@@ -7,6 +7,10 @@ const digest = z
7
7
  .string()
8
8
  .length(71)
9
9
  .regex(/sha256:[0-9a-f]{64}/);
10
+ const publishedFunction = z.strictObject({
11
+ ref: z.string().min(1).max(512),
12
+ path: z.string().min(1).max(2_048),
13
+ });
10
14
  /** Provider-neutral deployed resource. Provider implementation versions are deliberately external. */
11
15
  export const Service = nodeClass({
12
16
  abstract: true,
@@ -22,9 +26,11 @@ export const Service = nodeClass({
22
26
  revision: property(digest, { required: false }),
23
27
  deploymentReceipt: property(z.string().min(1).max(128), { required: false }),
24
28
  operationExpiresAt: property(valueSchema.values.instant, { required: false }),
29
+ hostedIssuer: property(z.string().min(1).max(2_048), { required: false }),
25
30
  hostedOrigin: property(z.string().min(1).max(512), { required: false }),
26
31
  hostedRevision: property(digest, { required: false }),
27
32
  hostedPublicationEtag: property(digest, { required: false }),
33
+ hostedFunctions: property(z.array(publishedFunction).max(1_024), { required: false }),
28
34
  error: property(z.string().max(5_000), { required: false }),
29
35
  },
30
36
  methods: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-domains/services",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/astrale-os/domains.git",
@@ -28,34 +28,34 @@
28
28
  "registry": "https://registry.npmjs.org/"
29
29
  },
30
30
  "dependencies": {
31
- "@astrale-os/sdk": "0.5.0-beta.65",
31
+ "@astrale-os/sdk": "0.5.0-beta.75",
32
32
  "zod": "^4.4.3"
33
33
  },
34
34
  "devDependencies": {
35
- "@astrale-os/adapter-cloudflare": "0.5.0-beta.68",
36
- "@astrale-os/ox": ">=0.1.3 <1.0.0",
37
- "@astrale-os/shell": "0.4.2-beta.7",
35
+ "@astrale-os/adapter-cloudflare": "0.5.0-beta.78",
36
+ "@astrale-os/ox": ">=0.1.4 <1.0.0",
37
+ "@astrale-os/shell": "0.4.2-beta.8",
38
38
  "@astrale-os/shell-react": "0.3.2-beta.5",
39
- "@astrale-os/ui": "0.3.0-beta.9",
40
- "@cloudflare/workers-types": "5.20260819.1",
41
- "@tailwindcss/vite": "^4.0.6",
42
- "@tanstack/react-router": "1.170.17",
43
- "@tanstack/router-plugin": "1.168.19",
39
+ "@astrale-os/ui": "0.3.0-beta.13",
40
+ "@cloudflare/workers-types": "5.20260821.1",
41
+ "@tailwindcss/vite": "^4.3.3",
42
+ "@tanstack/react-router": "1.170.18",
43
+ "@tanstack/router-plugin": "1.168.23",
44
44
  "@testing-library/jest-dom": "7.0.1",
45
45
  "@testing-library/react": "16.3.2",
46
- "@testing-library/user-event": "14.6.1",
47
- "@types/node": "^22.0.0",
48
- "@types/react": "^19.2.0",
49
- "@types/react-dom": "^19.2.0",
50
- "@vitejs/plugin-react": "^6.0.5",
46
+ "@testing-library/user-event": "14.6.5",
47
+ "@types/node": "^26.2.0",
48
+ "@types/react": "^19.2.18",
49
+ "@types/react-dom": "^19.2.4",
50
+ "@vitejs/plugin-react": "^6.1.0",
51
51
  "jsdom": "30.0.1",
52
- "oxlint": ">=1.78.0 <2.0.0",
53
- "react": "^19.2.0",
54
- "react-dom": "^19.2.0",
55
- "tailwindcss": "^4.0.6",
52
+ "oxlint": ">=1.79.0 <2.0.0",
53
+ "react": "^19.2.8",
54
+ "react-dom": "^19.2.8",
55
+ "tailwindcss": "^4.3.3",
56
56
  "typescript": "7.0.2",
57
- "vite": "^8.2.1",
58
- "vitest": "^4.1.10"
57
+ "vite": "^8.2.2",
58
+ "vitest": "^4.1.11"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=22.13"
@@ -78,7 +78,8 @@
78
78
  "provider:route-wildcard": "bun providers/cloudflare/operator/routing/wildcard.ts",
79
79
  "provider:route-tenant": "bun providers/cloudflare/operator/routing/tenant.ts",
80
80
  "typecheck": "tsc --noEmit && tsc --project providers/cloudflare/operator/dispatch/tsconfig.json",
81
- "test": "vitest run --config vitest.config.ts",
81
+ "test": "vitest run --config vitest.config.ts && pnpm run accessibility:check",
82
+ "accessibility:check": "oxlint ui views frontend/src --jsx-a11y-plugin --react-plugin --deny-warnings",
82
83
  "frontend:dev": "vite",
83
84
  "frontend:build": "vite build"
84
85
  }
@@ -1,19 +0,0 @@
1
- export declare const hosted_by_service: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2
- readonly depth: 0;
3
- readonly abstract: false;
4
- readonly extends: readonly [];
5
- readonly properties: {
6
- readonly callableRef: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "callableRef", "self">;
7
- readonly callablePath: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "callablePath", "self">;
8
- };
9
- readonly source: {
10
- readonly as: "function";
11
- readonly outgoing: "0..1";
12
- };
13
- readonly target: {
14
- readonly as: "service";
15
- readonly incoming: "0..*";
16
- };
17
- readonly constraints: Record<never, never>;
18
- readonly effectiveProperties: import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "callablePath", "self"> | import("@astrale-os/sdk/schema").AuthoredPropertyProjection<string, string, true, "callableRef", "self">;
19
- }>;
@@ -1,14 +0,0 @@
1
- import { K, edgeClass } from '@astrale-os/sdk/schema';
2
- import { z } from 'zod';
3
- import { TraverseHostedFunction } from './policies.js';
4
- import { Service } from './service-class.js';
5
- export const hosted_by_service = edgeClass.directed({
6
- description: 'One installed Function declaration delivered by one Service.',
7
- source: { as: 'function', accepts: [K.classes.Function], outgoing: '0..1' },
8
- target: { as: 'service', accepts: [() => Service], incoming: '0..*' },
9
- properties: {
10
- callableRef: z.string().min(1).max(512),
11
- callablePath: z.string().min(1).max(2_048),
12
- },
13
- policies: { traverse: () => TraverseHostedFunction },
14
- });
@@ -1,16 +0,0 @@
1
- export declare const service_hosts_domain: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2
- readonly depth: 0;
3
- readonly abstract: false;
4
- readonly extends: readonly [];
5
- readonly properties: never;
6
- readonly source: {
7
- readonly as: "service";
8
- readonly outgoing: "0..1";
9
- };
10
- readonly target: {
11
- readonly as: "domain";
12
- readonly incoming: "0..1";
13
- };
14
- readonly constraints: Record<never, never>;
15
- readonly effectiveProperties: never;
16
- }>;
@@ -1,9 +0,0 @@
1
- import { K, edgeClass } from '@astrale-os/sdk/schema';
2
- import { TraverseHostedDomain } from './policies.js';
3
- import { Service } from './service-class.js';
4
- export const service_hosts_domain = edgeClass.directed({
5
- description: 'The installed Astrale Domain currently hosted by one Service.',
6
- source: { as: 'service', accepts: [() => Service], outgoing: '0..1' },
7
- target: { as: 'domain', accepts: [K.classes.Domain], incoming: '0..1' },
8
- policies: { traverse: () => TraverseHostedDomain },
9
- });