@astrale-os/sdk 0.1.10 → 0.3.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.
Files changed (186) hide show
  1. package/LICENSE +202 -0
  2. package/dist/auth/check.d.ts +1 -2
  3. package/dist/auth/check.d.ts.map +1 -1
  4. package/dist/auth/check.js +2 -6
  5. package/dist/auth/check.js.map +1 -1
  6. package/dist/auth/index.d.ts +3 -1
  7. package/dist/auth/index.d.ts.map +1 -1
  8. package/dist/auth/index.js +2 -1
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/auth/issuer-mint.d.ts +53 -0
  11. package/dist/auth/issuer-mint.d.ts.map +1 -0
  12. package/dist/auth/issuer-mint.js +35 -0
  13. package/dist/auth/issuer-mint.js.map +1 -0
  14. package/dist/auth/kernel-client.d.ts +8 -2
  15. package/dist/auth/kernel-client.d.ts.map +1 -1
  16. package/dist/auth/kernel-client.js +22 -46
  17. package/dist/auth/kernel-client.js.map +1 -1
  18. package/dist/cli/dotenv.d.ts +8 -0
  19. package/dist/cli/dotenv.d.ts.map +1 -1
  20. package/dist/cli/dotenv.js +18 -0
  21. package/dist/cli/dotenv.js.map +1 -1
  22. package/dist/cli/index.d.ts +1 -1
  23. package/dist/cli/index.d.ts.map +1 -1
  24. package/dist/cli/index.js +1 -1
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/log.d.ts +11 -0
  27. package/dist/cli/log.d.ts.map +1 -0
  28. package/dist/cli/log.js +17 -0
  29. package/dist/cli/log.js.map +1 -0
  30. package/dist/cli/publish.d.ts +35 -0
  31. package/dist/cli/publish.d.ts.map +1 -0
  32. package/dist/cli/publish.js +271 -0
  33. package/dist/cli/publish.js.map +1 -0
  34. package/dist/cli/run.d.ts +17 -2
  35. package/dist/cli/run.d.ts.map +1 -1
  36. package/dist/cli/run.js +102 -111
  37. package/dist/cli/run.js.map +1 -1
  38. package/dist/cli/spec.d.ts.map +1 -1
  39. package/dist/cli/spec.js +1 -0
  40. package/dist/cli/spec.js.map +1 -1
  41. package/dist/config/adapter.d.ts +12 -11
  42. package/dist/config/adapter.d.ts.map +1 -1
  43. package/dist/config/adapter.js.map +1 -1
  44. package/dist/config/define-domain.d.ts +88 -27
  45. package/dist/config/define-domain.d.ts.map +1 -1
  46. package/dist/config/define-domain.js +79 -33
  47. package/dist/config/define-domain.js.map +1 -1
  48. package/dist/config/deploy.d.ts +1 -1
  49. package/dist/config/deploy.js +1 -1
  50. package/dist/config/index.d.ts +1 -1
  51. package/dist/config/index.d.ts.map +1 -1
  52. package/dist/define/remote-function.d.ts +32 -17
  53. package/dist/define/remote-function.d.ts.map +1 -1
  54. package/dist/define/remote-function.js +10 -9
  55. package/dist/define/remote-function.js.map +1 -1
  56. package/dist/define/view.d.ts +8 -6
  57. package/dist/define/view.d.ts.map +1 -1
  58. package/dist/define/view.js +8 -6
  59. package/dist/define/view.js.map +1 -1
  60. package/dist/deploy/check.d.ts +6 -6
  61. package/dist/deploy/check.d.ts.map +1 -1
  62. package/dist/deploy/check.js +1 -1
  63. package/dist/deploy/check.js.map +1 -1
  64. package/dist/deploy/index.d.ts +0 -1
  65. package/dist/deploy/index.d.ts.map +1 -1
  66. package/dist/deploy/index.js +0 -1
  67. package/dist/deploy/index.js.map +1 -1
  68. package/dist/deploy/meta.d.ts +11 -0
  69. package/dist/deploy/meta.d.ts.map +1 -1
  70. package/dist/deploy/meta.js +23 -0
  71. package/dist/deploy/meta.js.map +1 -1
  72. package/dist/dispatch/dispatcher.d.ts +17 -4
  73. package/dist/dispatch/dispatcher.d.ts.map +1 -1
  74. package/dist/dispatch/dispatcher.js +15 -3
  75. package/dist/dispatch/dispatcher.js.map +1 -1
  76. package/dist/dispatch/execute.d.ts +6 -2
  77. package/dist/dispatch/execute.d.ts.map +1 -1
  78. package/dist/dispatch/execute.js +1 -0
  79. package/dist/dispatch/execute.js.map +1 -1
  80. package/dist/dispatch/identity.d.ts +12 -10
  81. package/dist/dispatch/identity.d.ts.map +1 -1
  82. package/dist/dispatch/identity.js +10 -15
  83. package/dist/dispatch/identity.js.map +1 -1
  84. package/dist/dispatch/index.d.ts +1 -1
  85. package/dist/dispatch/index.d.ts.map +1 -1
  86. package/dist/dispatch/index.js +1 -1
  87. package/dist/dispatch/index.js.map +1 -1
  88. package/dist/dispatch/self.d.ts +25 -37
  89. package/dist/dispatch/self.d.ts.map +1 -1
  90. package/dist/dispatch/self.js +60 -30
  91. package/dist/dispatch/self.js.map +1 -1
  92. package/dist/domain/binding.d.ts +18 -0
  93. package/dist/domain/binding.d.ts.map +1 -0
  94. package/dist/domain/binding.js +29 -0
  95. package/dist/domain/binding.js.map +1 -0
  96. package/dist/domain/build-spec.d.ts.map +1 -1
  97. package/dist/domain/build-spec.js +22 -7
  98. package/dist/domain/build-spec.js.map +1 -1
  99. package/dist/domain/define.d.ts +28 -43
  100. package/dist/domain/define.d.ts.map +1 -1
  101. package/dist/domain/define.js +23 -60
  102. package/dist/domain/define.js.map +1 -1
  103. package/dist/domain/extend-functions.d.ts +48 -0
  104. package/dist/domain/extend-functions.d.ts.map +1 -0
  105. package/dist/domain/extend-functions.js +84 -0
  106. package/dist/domain/extend-functions.js.map +1 -0
  107. package/dist/domain/extend-views.d.ts +45 -0
  108. package/dist/domain/extend-views.d.ts.map +1 -0
  109. package/dist/domain/extend-views.js +116 -0
  110. package/dist/domain/extend-views.js.map +1 -0
  111. package/dist/index.d.ts +8 -4
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +13 -5
  114. package/dist/index.js.map +1 -1
  115. package/dist/method/class.d.ts +2 -2
  116. package/dist/method/class.d.ts.map +1 -1
  117. package/dist/method/class.js.map +1 -1
  118. package/dist/method/context.d.ts +18 -3
  119. package/dist/method/context.d.ts.map +1 -1
  120. package/dist/method/index.d.ts +2 -2
  121. package/dist/method/index.d.ts.map +1 -1
  122. package/dist/method/index.js.map +1 -1
  123. package/dist/method/single.d.ts +25 -38
  124. package/dist/method/single.d.ts.map +1 -1
  125. package/dist/method/single.js +1 -11
  126. package/dist/method/single.js.map +1 -1
  127. package/dist/server/auxiliary-routes.d.ts.map +1 -1
  128. package/dist/server/auxiliary-routes.js +14 -3
  129. package/dist/server/auxiliary-routes.js.map +1 -1
  130. package/dist/server/create.d.ts +2 -15
  131. package/dist/server/create.d.ts.map +1 -1
  132. package/dist/server/create.js +15 -51
  133. package/dist/server/create.js.map +1 -1
  134. package/dist/server/domain-entry.d.ts +10 -0
  135. package/dist/server/domain-entry.d.ts.map +1 -1
  136. package/dist/server/domain-entry.js +2 -0
  137. package/dist/server/domain-entry.js.map +1 -1
  138. package/dist/server/index.d.ts +0 -1
  139. package/dist/server/index.d.ts.map +1 -1
  140. package/dist/server/index.js +0 -1
  141. package/dist/server/index.js.map +1 -1
  142. package/dist/server/worker-entry.d.ts +3 -3
  143. package/dist/server/worker-entry.js +3 -3
  144. package/package.json +10 -11
  145. package/src/auth/check.ts +2 -6
  146. package/src/auth/index.ts +3 -1
  147. package/src/auth/issuer-mint.ts +75 -0
  148. package/src/auth/kernel-client.ts +31 -63
  149. package/src/cli/dotenv.ts +20 -0
  150. package/src/cli/index.ts +1 -1
  151. package/src/cli/log.ts +18 -0
  152. package/src/cli/publish.ts +341 -0
  153. package/src/cli/run.ts +109 -125
  154. package/src/cli/spec.ts +1 -0
  155. package/src/config/adapter.ts +9 -11
  156. package/src/config/define-domain.ts +184 -53
  157. package/src/config/deploy.ts +1 -1
  158. package/src/config/index.ts +1 -1
  159. package/src/define/remote-function.ts +56 -21
  160. package/src/define/view.ts +8 -6
  161. package/src/deploy/check.ts +7 -7
  162. package/src/deploy/index.ts +0 -1
  163. package/src/deploy/meta.ts +25 -0
  164. package/src/dispatch/dispatcher.ts +32 -9
  165. package/src/dispatch/execute.ts +7 -2
  166. package/src/dispatch/identity.ts +17 -22
  167. package/src/dispatch/index.ts +1 -1
  168. package/src/dispatch/self.ts +117 -41
  169. package/src/domain/binding.ts +37 -0
  170. package/src/domain/build-spec.ts +32 -7
  171. package/src/domain/define.ts +71 -78
  172. package/src/domain/extend-functions.ts +106 -0
  173. package/src/domain/extend-views.ts +151 -0
  174. package/src/index.ts +36 -7
  175. package/src/method/class.ts +11 -7
  176. package/src/method/context.ts +19 -3
  177. package/src/method/index.ts +8 -2
  178. package/src/method/single.ts +35 -42
  179. package/src/server/auxiliary-routes.ts +14 -3
  180. package/src/server/create.ts +15 -51
  181. package/src/server/domain-entry.ts +12 -0
  182. package/src/server/index.ts +0 -1
  183. package/src/server/worker-entry.ts +3 -3
  184. package/src/deploy/hash-spec.ts +0 -31
  185. package/src/domain/extend-core.ts +0 -301
  186. package/src/server/worker-meta.ts +0 -25
@@ -1,301 +0,0 @@
1
- /**
2
- * Build an augmented `Core<S>` that includes auto-materialized View and
3
- * standalone-function nodes (one per entry in `defineRemoteDomain`'s `views` /
4
- * `remoteFunctions` config), plus their parent Folder + optional `view_for`
5
- * edges. Returns the resolved effective bindings alongside so callers don't
6
- * recompute them.
7
- *
8
- * Standalone callables (the former `RemoteFunction` class) are materialized as
9
- * the canonical kernel `Function` node class — "remote" is just a `binding`,
10
- * not a distinct kind, so there is no per-domain class to configure.
11
- *
12
- * Conflicts: if the user core already declares a top-level node at
13
- * `<viewsFolder>` or `<functionsFolder>`, throws — the auto-materialization
14
- * reserves those slugs.
15
- */
16
-
17
- import type { FunctionBinding } from '@astrale-os/kernel-api/routed'
18
- import type {
19
- AnyEdgeDef,
20
- AnyNodeDef,
21
- Core,
22
- CoreEdgeEntry,
23
- CoreNodeEntry,
24
- Schema,
25
- } from '@astrale-os/kernel-dsl'
26
-
27
- import { Folder, K, KernelSchema } from '@astrale-os/kernel-core'
28
- import { buildCorePath } from '@astrale-os/kernel-dsl'
29
-
30
- /** Canonical node class for standalone callables (the former `RemoteFunction`). */
31
- const FUNCTION_CLASS = KernelSchema.classes.Function as unknown as AnyNodeDef
32
- /** Canonical node class for GUI views. */
33
- const VIEW_CLASS = KernelSchema.classes.View as unknown as AnyNodeDef
34
- /** Canonical edge class linking a View to its target. */
35
- const VIEW_FOR_EDGE_CLASS = KernelSchema.classes.view_for as unknown as AnyEdgeDef
36
-
37
- import type { AnyRemoteFunctionDef } from '../define/remote-function'
38
- import type { ViewDef } from '../define/view'
39
-
40
- export const DEFAULT_VIEWS_FOLDER = 'views'
41
- export const DEFAULT_FUNCTIONS_FOLDER = 'functions'
42
- const SLUG_RE = /^[a-z][a-z0-9-]*$/
43
-
44
- export type ExtendCoreConfig = {
45
- schema: Schema
46
- origin: string
47
- userCore?: Core
48
- /**
49
- * The worker's serving URL — the base every auto-materialized binding
50
- * resolves against. OMITTED at define time (the URL is known only to the
51
- * spec producers): the aux nodes then materialize structure-only (paths,
52
- * names, refs — what identity/subs resolution needs) with no `binding`
53
- * stamped and empty binding maps. Every install graph comes from a
54
- * `materializeRemoteDomain(domain, url)` call where it is present.
55
- */
56
- url?: string
57
-
58
- viewClass?: AnyNodeDef
59
- viewForEdgeClass?: AnyEdgeDef
60
- viewsFolder?: string
61
- // oxlint-disable-next-line no-explicit-any
62
- views?: Record<string, ViewDef<any>>
63
-
64
- functionsFolder?: string
65
- remoteFunctions?: Record<string, AnyRemoteFunctionDef>
66
- }
67
-
68
- export type ExtendCoreResult = {
69
- core: Core
70
- viewBindings: Record<string, FunctionBinding>
71
- remoteFunctionBindings: Record<string, FunctionBinding>
72
- }
73
-
74
- export function extendCore(config: ExtendCoreConfig): ExtendCoreResult {
75
- const {
76
- schema,
77
- origin,
78
- userCore,
79
- url,
80
- viewClass = VIEW_CLASS,
81
- viewForEdgeClass = VIEW_FOR_EDGE_CLASS,
82
- viewsFolder = DEFAULT_VIEWS_FOLDER,
83
- views,
84
- functionsFolder = DEFAULT_FUNCTIONS_FOLDER,
85
- remoteFunctions,
86
- } = config
87
-
88
- validateInputs(config)
89
-
90
- const nodes: CoreNodeEntry[] = userCore ? [...userCore.__nodes] : []
91
- const edges: CoreEdgeEntry[] = userCore ? [...userCore.__edges] : []
92
- const viewBindings: Record<string, FunctionBinding> = {}
93
- const remoteFunctionBindings: Record<string, FunctionBinding> = {}
94
- const enableUiHandshake = viewClass === VIEW_CLASS
95
-
96
- if (views && viewClass) {
97
- // Enforce ViewDef's documented exclusivity: `mount` (SPA route) cannot be
98
- // combined with `render` (inline HTML handler) or an explicit `binding` —
99
- // silently ignoring one of them would deploy a view that behaves
100
- // differently than its definition reads.
101
- for (const [slug, def] of Object.entries(views)) {
102
- if (def.mount && (def.render || def.binding)) {
103
- throw new Error(
104
- `defineRemoteDomain: view "${slug}" sets \`mount\` together with ` +
105
- `${def.render ? '`render`' : '`binding`'} — they are mutually exclusive.`,
106
- )
107
- }
108
- }
109
- assertNoConflict(nodes, origin, viewsFolder)
110
- addFolderAndEntries({
111
- origin,
112
- folderSlug: viewsFolder,
113
- nodes,
114
- entries: Object.entries(views).map(([slug, def]) => {
115
- const binding = url
116
- ? def.mount
117
- ? { remoteUrl: joinWorkerPath(url, def.mount) }
118
- : resolveBinding(def.binding, url, viewsFolder, slug)
119
- : undefined
120
- if (binding) viewBindings[slug] = binding
121
- return {
122
- slug,
123
- nodeClass: viewClass,
124
- data: buildViewData(slug, binding, def, enableUiHandshake),
125
- edges: buildViewForEdges(slug, def, viewForEdgeClass, viewsFolder, origin),
126
- }
127
- }),
128
- edges,
129
- })
130
- }
131
-
132
- if (remoteFunctions) {
133
- assertNoConflict(nodes, origin, functionsFolder)
134
- addFolderAndEntries({
135
- origin,
136
- folderSlug: functionsFolder,
137
- nodes,
138
- entries: Object.entries(remoteFunctions).map(([slug, def]) => {
139
- const binding = url ? resolveBinding(def.binding, url, functionsFolder, slug) : undefined
140
- if (binding) remoteFunctionBindings[slug] = binding
141
- return {
142
- slug,
143
- // Standalone callables materialize as the canonical kernel Function class.
144
- nodeClass: FUNCTION_CLASS,
145
- data: {
146
- ...buildFunctionData(slug, binding),
147
- [K.$.i('Function').ref.key]: def.ref ?? `function.${slug}`,
148
- },
149
- edges: [],
150
- }
151
- }),
152
- edges,
153
- })
154
- }
155
-
156
- return {
157
- core: { schema, domain: origin, __nodes: nodes, __edges: edges },
158
- viewBindings,
159
- remoteFunctionBindings,
160
- }
161
- }
162
-
163
- /** Join a worker-relative mount path onto the serving url (single slash). */
164
- function joinWorkerPath(url: string, mount: string): string {
165
- const base = url.replace(/\/+$/, '')
166
- return `${base}/${mount.replace(/^\/+/, '')}`
167
- }
168
-
169
- export function resolveBinding(
170
- override: FunctionBinding | undefined,
171
- url: string,
172
- folderSlug: string,
173
- slug: string,
174
- ): FunctionBinding {
175
- // Same trailing-slash discipline as `joinWorkerPath` — a `url` ending in `/`
176
- // must not produce `//` in the binding (the kernel pins iss by exact string).
177
- const base = url.replace(/\/+$/, '')
178
- if (override) {
179
- return {
180
- ...override,
181
- remoteUrl: override.remoteUrl ?? `${base}/${folderSlug}/${slug}`,
182
- }
183
- }
184
- return { remoteUrl: `${base}/${folderSlug}/${slug}` }
185
- }
186
-
187
- // ── Internal ───────────────────────────────────────────────────────────────
188
-
189
- function validateInputs(config: ExtendCoreConfig): void {
190
- if (config.views) {
191
- for (const slug of Object.keys(config.views)) {
192
- if (!SLUG_RE.test(slug)) {
193
- throw new Error(`defineRemoteDomain: invalid view slug "${slug}" — must match ${SLUG_RE}.`)
194
- }
195
- }
196
- }
197
- if (config.remoteFunctions) {
198
- for (const slug of Object.keys(config.remoteFunctions)) {
199
- if (!SLUG_RE.test(slug)) {
200
- throw new Error(
201
- `defineRemoteDomain: invalid remote-function slug "${slug}" — must match ${SLUG_RE}.`,
202
- )
203
- }
204
- }
205
- }
206
- }
207
-
208
- function assertNoConflict(
209
- nodes: readonly CoreNodeEntry[],
210
- origin: string,
211
- folderSlug: string,
212
- ): void {
213
- const folderPath = buildCorePath(origin, [folderSlug])
214
- if (nodes.some((n) => n.path === folderPath)) {
215
- throw new Error(
216
- `defineRemoteDomain: top-level core slug "${folderSlug}" is reserved by ` +
217
- 'SDK auto-materialization. Move the conflicting node or rename the ' +
218
- '`viewsFolder` / `functionsFolder` config.',
219
- )
220
- }
221
- }
222
-
223
- type EntryDescriptor = {
224
- slug: string
225
- nodeClass: AnyNodeDef
226
- data: Record<string, unknown>
227
- edges: CoreEdgeEntry[]
228
- }
229
-
230
- function addFolderAndEntries(args: {
231
- origin: string
232
- folderSlug: string
233
- entries: EntryDescriptor[]
234
- nodes: CoreNodeEntry[]
235
- edges: CoreEdgeEntry[]
236
- }): void {
237
- const { origin, folderSlug, entries, nodes, edges } = args
238
-
239
- const folderPath = buildCorePath(origin, [folderSlug])
240
- nodes.push({
241
- path: folderPath,
242
- def: Folder as unknown as AnyNodeDef,
243
- data: { [K.Named.name.key]: folderSlug },
244
- })
245
-
246
- for (const entry of entries) {
247
- nodes.push({
248
- path: buildCorePath(origin, [folderSlug, entry.slug]),
249
- def: entry.nodeClass,
250
- data: entry.data,
251
- parent: folderPath,
252
- })
253
- for (const e of entry.edges) edges.push(e)
254
- }
255
- }
256
-
257
- function buildFunctionData(
258
- slug: string,
259
- binding: FunctionBinding | undefined,
260
- ): Record<string, unknown> {
261
- // Match the kernel-core schema serializer which JSON-stringifies the
262
- // `Function.binding` value on Function nodes (see
263
- // kernel/core/domain/serialize/schema.ts). The kernel install validator
264
- // checks `typeof binding === 'string'` then parses; storing a raw object
265
- // trips the validator with "missing remote binding" even when the object IS
266
- // the binding. No binding at all (define-time, no url) → no prop stamped.
267
- return {
268
- [K.Named.name.key]: slug,
269
- ...(binding ? { [K.$.i('Function').binding.key]: JSON.stringify(binding) } : {}),
270
- }
271
- }
272
-
273
- function buildViewData(
274
- slug: string,
275
- binding: FunctionBinding | undefined,
276
- def: ViewDef,
277
- enableUiHandshake: boolean,
278
- ): Record<string, unknown> {
279
- const handshake = def.handshake ?? (def.render ? 'none' : undefined)
280
- return {
281
- ...buildFunctionData(slug, binding),
282
- ...(enableUiHandshake && handshake ? { [K.UI.handshake.key]: handshake } : {}),
283
- }
284
- }
285
-
286
- function buildViewForEdges(
287
- slug: string,
288
- def: ViewDef,
289
- edgeClass: AnyEdgeDef | undefined,
290
- viewsFolder: string,
291
- origin: string,
292
- ): CoreEdgeEntry[] {
293
- if (!def.viewFor || !edgeClass) return []
294
- const targets = Array.isArray(def.viewFor) ? def.viewFor : [def.viewFor]
295
- const from = buildCorePath(origin, [viewsFolder, slug])
296
- return targets.map((target) => ({
297
- from,
298
- edge: edgeClass,
299
- to: target as CoreEdgeEntry['to'],
300
- }))
301
- }
@@ -1,25 +0,0 @@
1
- /**
2
- * Build the `/meta` provenance block for a domain worker: the build-injected
3
- * `SDK_COMMIT` / `SCHEMA_HASH` globals plus the domain name. A field is omitted
4
- * when its global isn't defined.
5
- *
6
- * `SDK_COMMIT` / `SCHEMA_HASH` are `--define`'d into the worker bundle at build
7
- * time; the bundler applies that text replacement to this inlined helper too, so
8
- * reading them here behaves exactly as the per-worker block this replaces.
9
- */
10
- declare const SDK_COMMIT: string | undefined
11
- declare const SCHEMA_HASH: string | undefined
12
-
13
- export function workerMeta(domainName: string): {
14
- sdkCommit?: string
15
- schemaHash?: string
16
- domainName: string
17
- } {
18
- const sdkCommit = typeof SDK_COMMIT === 'string' ? SDK_COMMIT : undefined
19
- const schemaHash = typeof SCHEMA_HASH === 'string' ? SCHEMA_HASH : undefined
20
- return {
21
- ...(sdkCommit ? { sdkCommit } : {}),
22
- ...(schemaHash ? { schemaHash } : {}),
23
- domainName,
24
- }
25
- }