@almadar/core 11.3.0 → 11.5.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/behavior-package.js +1 -3
- package/dist/{builders-DXPLnmJy.d.ts → builders-JiXD6W1T.d.ts} +2266 -98
- package/dist/builders.d.ts +5 -5
- package/dist/builders.js +8 -10
- package/dist/{bus-CRxTnebm.d.ts → bus-__zVNcsp.d.ts} +133 -438
- package/dist/{chunk-DNS4GKQV.js → chunk-27Y5AXHB.js} +71 -45
- package/dist/chunk-2WLRKYD5.js +3823 -0
- package/dist/{chunk-B4MNHGBP.js → chunk-5IRZ6ROW.js} +0 -2
- package/dist/{chunk-7NDAXM2Z.js → chunk-6XYHVJ4J.js} +1 -3
- package/dist/{chunk-RGACZEYC.js → chunk-DDBAQMWA.js} +0 -2
- package/dist/{chunk-7GHJU5WI.js → chunk-GNLND5O2.js} +0 -2
- package/dist/{chunk-M4S2B5VJ.js → chunk-IU3WGC6Q.js} +0 -2
- package/dist/{chunk-LPJ7GKRM.js → chunk-J64IR3DR.js} +17 -9
- package/dist/{chunk-PYYHDYTD.js → chunk-J64YVVB4.js} +1 -3
- package/dist/{chunk-7B4JRMRL.js → chunk-JN3MMQTB.js} +15 -7
- package/dist/{chunk-VIHQKKTZ.js → chunk-LQZXCL47.js} +66 -32
- package/dist/{chunk-6H3UIZR2.js → chunk-OQ3Y5SL3.js} +4 -6
- package/dist/{chunk-3DZOFI53.js → chunk-Q4OJQNYY.js} +5 -4
- package/dist/{chunk-347APWFM.js → chunk-R3Y7ABF4.js} +2 -4
- package/dist/{chunk-N3CK4AYW.js → chunk-VC3HXUWQ.js} +7929 -404
- package/dist/{chunk-2NKK2X53.js → chunk-VQWE3FCB.js} +1 -3
- package/dist/{chunk-VG7BRFUD.js → chunk-W3UJRSYC.js} +0 -2
- package/dist/{chunk-XBWV3DXX.js → chunk-XYHBAUWE.js} +242 -10
- package/dist/{effect-C2VKm6kk.d.ts → effect-gddySYLX.d.ts} +215 -18
- package/dist/{effect-result-BFNANDJ-.d.ts → effect-result-BvBwmspK.d.ts} +131 -43
- package/dist/{expression-DirYKz-f.d.ts → expression-DxY6ct3t.d.ts} +1 -1
- package/dist/factory/index.d.ts +3 -3
- package/dist/factory/index.js +8 -10
- package/dist/factory-runtime/index.d.ts +3 -3
- package/dist/factory-runtime/index.js +15 -17
- package/dist/fixtures.d.ts +8 -7
- package/dist/fixtures.js +6 -8
- package/dist/i18n/index.js +2 -4
- package/dist/{index-DuHpwitt.d.ts → index-h6KrpmjR.d.ts} +23 -10
- package/dist/index.d.ts +15 -17
- package/dist/index.js +23 -25
- package/dist/kernel-wire.d.ts +3 -3
- package/dist/kernel-wire.js +3 -5
- package/dist/language/constructs.json +18 -3
- package/dist/language/program-types.json +28 -1
- package/dist/language/validation-codes.json +231 -1
- package/dist/language/vocabulary.json +63 -1
- package/dist/language-data.js +3 -5
- package/dist/lolo-document/index.js +0 -2
- package/dist/patterns/component-mapping.json +11 -1
- package/dist/patterns/definitions.d.ts +2 -2
- package/dist/patterns/definitions.js +1 -3
- package/dist/patterns/event-contracts.json +1 -1
- package/dist/patterns/index.d.ts +47 -3
- package/dist/patterns/index.js +3 -5
- package/dist/patterns/patterns-registry.json +7929 -402
- package/dist/patterns/registry.json +7929 -402
- package/dist/themes/index.js +2 -4
- package/dist/{trait-Cv3HTGFL.d.ts → trait-Oun4JgeZ.d.ts} +52 -22
- package/dist/types/index.d.ts +8 -8
- package/dist/types/index.js +12 -14
- package/dist/{types-wWEqi7vj.d.ts → types-B-r7Z7Lf.d.ts} +3 -3
- package/package.json +6 -6
- package/dist/behavior-package.js.map +0 -1
- package/dist/builders.js.map +0 -1
- package/dist/chunk-2NKK2X53.js.map +0 -1
- package/dist/chunk-347APWFM.js.map +0 -1
- package/dist/chunk-3DZOFI53.js.map +0 -1
- package/dist/chunk-6H3UIZR2.js.map +0 -1
- package/dist/chunk-7B4JRMRL.js.map +0 -1
- package/dist/chunk-7GHJU5WI.js.map +0 -1
- package/dist/chunk-7NDAXM2Z.js.map +0 -1
- package/dist/chunk-B4MNHGBP.js.map +0 -1
- package/dist/chunk-DNS4GKQV.js.map +0 -1
- package/dist/chunk-LPJ7GKRM.js.map +0 -1
- package/dist/chunk-M4S2B5VJ.js.map +0 -1
- package/dist/chunk-N3CK4AYW.js.map +0 -1
- package/dist/chunk-PYYHDYTD.js.map +0 -1
- package/dist/chunk-RGACZEYC.js.map +0 -1
- package/dist/chunk-VG7BRFUD.js.map +0 -1
- package/dist/chunk-VIHQKKTZ.js.map +0 -1
- package/dist/chunk-XBWV3DXX.js.map +0 -1
- package/dist/chunk-ZDIHVDTW.js +0 -3810
- package/dist/chunk-ZDIHVDTW.js.map +0 -1
- package/dist/factory/index.js.map +0 -1
- package/dist/factory-runtime/index.js.map +0 -1
- package/dist/fixtures.js.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kernel-wire.js.map +0 -1
- package/dist/language-data.js.map +0 -1
- package/dist/lolo-document/index.js.map +0 -1
- package/dist/patterns/definitions.js.map +0 -1
- package/dist/patterns/index.js.map +0 -1
- package/dist/themes/index.js.map +0 -1
- package/dist/types/index.js.map +0 -1
|
@@ -1,9 +1,107 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import { c as
|
|
4
|
-
import {
|
|
5
|
-
import { P as PayloadField } from './trait-
|
|
6
|
-
import { J as JsonSchema } from './types-
|
|
2
|
+
import { b as EventPayloadValue, c as EventPayload, L as LogMeta, J as JsonValue, a as JsonObject } from './expression-DxY6ct3t.js';
|
|
3
|
+
import { V as Viewer, R as RowQuery, Q as QueryCapabilities, c as RowIdPage, d as RowWriteOp, e as RowWriteOutcome, f as RowWriteBatch, W as WriteCapabilities, g as RowCommitWrite, B as BusEventSource, C as ClientEffect, H as HostAskCompletion, D as DeliveryRecord, h as DispatchLog, a as EventResponse, b as EmittedEvent, E as EventRequest, i as RowSetRef } from './effect-result-BvBwmspK.js';
|
|
4
|
+
import { i as FieldValue, c as EntityRow, S as ServiceParams } from './effect-gddySYLX.js';
|
|
5
|
+
import { P as PayloadField } from './trait-Oun4JgeZ.js';
|
|
6
|
+
import { J as JsonSchema } from './types-B-r7Z7Lf.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Authenticated user context — what `@user.x` resolves against.
|
|
10
|
+
*
|
|
11
|
+
* The canonical shape for the `user` binding root, shared by both execution
|
|
12
|
+
* paths: the JS interpreter resolves `@user.id` through
|
|
13
|
+
* `EvaluationContext.user`, and the compiled shell emits `user?.id` against the
|
|
14
|
+
* `UserContext` its `@app/shared` re-exports from here.
|
|
15
|
+
*
|
|
16
|
+
* `id` is the field the behavior library reads for ownership scoping and `role`
|
|
17
|
+
* the field it reads for capability gating. Auth providers that name the subject
|
|
18
|
+
* `uid` must normalize at their boundary — {@link normalizeUserContext} does that.
|
|
19
|
+
*
|
|
20
|
+
* @packageDocumentation
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* What a host's auth provider has resolved the viewer to be — from session
|
|
25
|
+
* resolution only, never from an interactive sign-in action: `pending` until
|
|
26
|
+
* the session is known; `anonymous` / `authenticated` once it is; `failed`
|
|
27
|
+
* when connecting or resolving the session failed; `unavailable` when the host
|
|
28
|
+
* has no sign-in configured. An `access: authenticated` page mounts only on
|
|
29
|
+
* `authenticated`.
|
|
30
|
+
*/
|
|
31
|
+
type ViewerAuthority = 'pending' | 'anonymous' | 'authenticated' | 'failed' | 'unavailable';
|
|
32
|
+
/**
|
|
33
|
+
* The `@user` binding: a {@link Viewer} held flat. Its named fields are the viewer's; each claim is a key holding its
|
|
34
|
+
* JSON value, readable as `@user.<claim>`. The Rust twin of the conversion is `orbital_core_base::viewer`
|
|
35
|
+
* (`Viewer::from_user` / `Viewer::to_user`).
|
|
36
|
+
*/
|
|
37
|
+
type UserContext = Omit<Viewer, 'claims'> & {
|
|
38
|
+
[key: string]: FieldValue;
|
|
39
|
+
};
|
|
40
|
+
/** Zod twin of the generated {@link Viewer}: the record a `.lolo` program names as `Viewer`. */
|
|
41
|
+
declare const ViewerSchema: z.ZodType<Viewer>;
|
|
42
|
+
/**
|
|
43
|
+
* The identity of an unauthenticated viewer. A resolvable object rather than
|
|
44
|
+
* `undefined` so a role predicate evaluates to a definite `false` instead of
|
|
45
|
+
* comparing against nothing.
|
|
46
|
+
*/
|
|
47
|
+
declare const ANONYMOUS_USER: UserContext;
|
|
48
|
+
/** Provider-shaped identity claims, before normalization. */
|
|
49
|
+
type RawUserClaims = {
|
|
50
|
+
id?: string;
|
|
51
|
+
uid?: string;
|
|
52
|
+
email?: string | null;
|
|
53
|
+
name?: string | null;
|
|
54
|
+
displayName?: string | null;
|
|
55
|
+
/** Absent or `null` when the token carries none, as the kernel's `Viewer.role` (`Option`). */
|
|
56
|
+
role?: string | null;
|
|
57
|
+
permissions?: string[] | null;
|
|
58
|
+
} & {
|
|
59
|
+
[key: string]: FieldValue;
|
|
60
|
+
};
|
|
61
|
+
/** Zod twin of `RawUserClaims` — the wire shape of `EventRequest.user`. */
|
|
62
|
+
declare const RawUserClaimsSchema: z.ZodType<RawUserClaims>;
|
|
63
|
+
/**
|
|
64
|
+
* Normalize provider claims into a {@link UserContext}.
|
|
65
|
+
*
|
|
66
|
+
* Firebase (and most OIDC providers) name the subject `uid` and the display name
|
|
67
|
+
* `displayName`, while every `.lolo` behavior reads `@user.id` / `@user.name`.
|
|
68
|
+
* Without this normalization `@user.id` is `undefined` against a fully
|
|
69
|
+
* authenticated request and every ownership filter silently matches no rows.
|
|
70
|
+
* `uid` is preserved so `@user.uid` keeps working.
|
|
71
|
+
*
|
|
72
|
+
* Returns `undefined` for absent or subject-less claims so callers can
|
|
73
|
+
* distinguish "no auth ran" from "anonymous"; use {@link ANONYMOUS_USER} where a
|
|
74
|
+
* definite identity is required.
|
|
75
|
+
*/
|
|
76
|
+
declare function normalizeUserContext(claims: RawUserClaims | null | undefined): UserContext | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Turn a row of an app's `[identity]` entity into a viewer.
|
|
79
|
+
*
|
|
80
|
+
* There is no separate persona shape: an identity row IS the persona
|
|
81
|
+
* (`Almadar_LOLO_Identity.md` §4.3), so this only guards the one field the
|
|
82
|
+
* behavior library requires — a non-empty string `id` — and passes every other
|
|
83
|
+
* declared field through as a `@user.<field>` claim. Rows without a usable id
|
|
84
|
+
* yield `undefined` rather than a persona nobody can own rows as.
|
|
85
|
+
*/
|
|
86
|
+
declare function personaFromIdentityRow(row: Record<string, FieldValue | undefined>): UserContext | undefined;
|
|
87
|
+
/** Look a persona up in a roster by id, or by role when no id matches. */
|
|
88
|
+
declare function findPersonaInRoster(roster: readonly UserContext[], idOrRole: string): UserContext | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Resolve a persona spec — a bare id/role (`Person Id 3`, `moderator`) or a full
|
|
91
|
+
* JSON `UserContext` — into a viewer. This is the `ALMADAR_PERSONA` contract,
|
|
92
|
+
* shared by every host that presents an app as somebody.
|
|
93
|
+
*
|
|
94
|
+
* The roster is the app's OWN declared personas — the seeded rows of its
|
|
95
|
+
* `[identity]` entity (`Almadar_LOLO_Identity.md` §4.3) — supplied by the host
|
|
96
|
+
* that has them in hand (the runtime's live store on the interpreter path, the
|
|
97
|
+
* schema-derived seed rows on the compiled path). There is no global roster:
|
|
98
|
+
* an app without an `[identity]` entity resolves only JSON-form specs.
|
|
99
|
+
*
|
|
100
|
+
* Throws on anything unresolvable rather than returning `undefined`: "no persona"
|
|
101
|
+
* and "persona silently ignored" look identical on screen, so a bad spec must
|
|
102
|
+
* fail at boot instead of rendering as nobody.
|
|
103
|
+
*/
|
|
104
|
+
declare function resolvePersonaSpec(spec: string, roster: readonly UserContext[]): UserContext;
|
|
7
105
|
|
|
8
106
|
/**
|
|
9
107
|
* Service Contract Types
|
|
@@ -155,216 +253,8 @@ type RowPage<T> = {
|
|
|
155
253
|
/** Rows matching the filters and search, across all pages. */
|
|
156
254
|
total: number;
|
|
157
255
|
};
|
|
158
|
-
/** The comparison members of `StoreFilterOp`. */
|
|
159
|
-
type RowCompareOp = Extract<StoreFilterOp, "==" | "!=" | "<" | "<=" | ">" | ">=">;
|
|
160
|
-
/**
|
|
161
|
-
* A row predicate with two-valued logic: a missing or null field satisfies only `!=` against a
|
|
162
|
-
* non-null value and `isNull: true`, and fails every other leaf, so `not` of a failing leaf holds.
|
|
163
|
-
* Leaves reuse the `StoreFilterOp` meanings: `member` is `in`, `hasElement` is `array-contains`,
|
|
164
|
-
* `contains` is a substring test.
|
|
165
|
-
*/
|
|
166
|
-
type RowPredicate = {
|
|
167
|
-
kind: "compare";
|
|
168
|
-
field: string;
|
|
169
|
-
op: RowCompareOp;
|
|
170
|
-
value: FieldValue;
|
|
171
|
-
} | {
|
|
172
|
-
kind: "member";
|
|
173
|
-
field: string;
|
|
174
|
-
values: FieldValue[];
|
|
175
|
-
} | {
|
|
176
|
-
kind: "hasElement";
|
|
177
|
-
field: string;
|
|
178
|
-
value: FieldValue;
|
|
179
|
-
} | {
|
|
180
|
-
kind: "contains";
|
|
181
|
-
field: string;
|
|
182
|
-
text: string;
|
|
183
|
-
caseSensitive: boolean;
|
|
184
|
-
} | {
|
|
185
|
-
kind: "isNull";
|
|
186
|
-
field: string;
|
|
187
|
-
isNull: boolean;
|
|
188
|
-
} | {
|
|
189
|
-
kind: "all";
|
|
190
|
-
of: RowPredicate[];
|
|
191
|
-
} | {
|
|
192
|
-
kind: "any";
|
|
193
|
-
of: RowPredicate[];
|
|
194
|
-
} | {
|
|
195
|
-
kind: "not";
|
|
196
|
-
of: RowPredicate;
|
|
197
|
-
} | {
|
|
198
|
-
kind: "const";
|
|
199
|
-
value: boolean;
|
|
200
|
-
};
|
|
201
|
-
/** One sort key. Missing and null values sort last in both directions; ties break by `id` ascending. A query with no `order` is ordered by `createdAt` ascending, then `id` (EXEC-FETCH-1). */
|
|
202
|
-
type RowOrder = {
|
|
203
|
-
field: string;
|
|
204
|
-
direction: "asc" | "desc";
|
|
205
|
-
};
|
|
206
|
-
/**
|
|
207
|
-
* A vector-similarity query: up to `k` rows ordered by descending cosine similarity of `field` to `vector`
|
|
208
|
-
* (EXEC-FETCH-2). A row whose field is absent, null or of zero norm is skipped; a stored vector that is not a
|
|
209
|
-
* `[number]` of the query's length, a zero-norm query or a non-positive `k` fails.
|
|
210
|
-
*/
|
|
211
|
-
type RowNearest = {
|
|
212
|
-
field: string;
|
|
213
|
-
vector: number[];
|
|
214
|
-
k: number;
|
|
215
|
-
};
|
|
216
|
-
/**
|
|
217
|
-
* A pushed-down query: rows matching `policy` AND `filter`, ordered, then windowed. `policy` is the
|
|
218
|
-
* entity's `@read` predicate already specialised to the viewer; `filter` is the call-site filter.
|
|
219
|
-
*/
|
|
220
|
-
type RowQuery = {
|
|
221
|
-
policy?: RowPredicate;
|
|
222
|
-
filter?: RowPredicate;
|
|
223
|
-
/** Absent = `createdAt` ascending, then `id` ascending (EXEC-FETCH-1). */
|
|
224
|
-
order?: RowOrder;
|
|
225
|
-
offset?: number;
|
|
226
|
-
/** Absent = no limit. */
|
|
227
|
-
limit?: number;
|
|
228
|
-
/** Absent = `exact`. With `none` the store need not count; `total` is then only the window's size. */
|
|
229
|
-
total?: RowTotalMode;
|
|
230
|
-
/** The nearest `k` rows among those `policy` and `filter` admit. Excludes `order`, `offset` and `limit`; `total` is the count returned. */
|
|
231
|
-
nearest?: RowNearest;
|
|
232
|
-
};
|
|
233
256
|
/** The answer to a `RowQuery`: the window, and `total` = every match before the window. */
|
|
234
257
|
type RowQueryPage = RowPage<EntityRow>;
|
|
235
|
-
/** Value kinds a store can compare, in `compare`/`member`/`hasElement` operands. */
|
|
236
|
-
type RowValueKind = "string" | "number" | "boolean" | "date" | "null";
|
|
237
|
-
/** Every operator a `RowPredicate` leaf can carry. */
|
|
238
|
-
type RowOperator = RowCompareOp | "member" | "hasElement" | "contains";
|
|
239
|
-
/** The value kinds one operator accepts on a store; an operator not listed accepts every kind. */
|
|
240
|
-
type OperatorValueKinds = {
|
|
241
|
-
operator: RowOperator;
|
|
242
|
-
valueKinds: RowValueKind[];
|
|
243
|
-
};
|
|
244
|
-
/** Whether `total` counts every match (`exact`, the default) or the store may skip the count (`none`). */
|
|
245
|
-
type RowTotalMode = "exact" | "none";
|
|
246
|
-
/** What an adapter's `queryPage` honours for one entity type. */
|
|
247
|
-
type QueryCapabilities = {
|
|
248
|
-
leaves: ("compare" | "member" | "hasElement" | "contains" | "isNull")[];
|
|
249
|
-
combinators: ("all" | "any" | "not")[];
|
|
250
|
-
compareOps: RowCompareOp[];
|
|
251
|
-
/** Per operator x value kind restrictions; absent = every kind for every declared operator. */
|
|
252
|
-
operatorValueKinds?: OperatorValueKinds[];
|
|
253
|
-
orderableFields: {
|
|
254
|
-
kind: "every-field";
|
|
255
|
-
} | {
|
|
256
|
-
kind: "listed";
|
|
257
|
-
fields: string[];
|
|
258
|
-
};
|
|
259
|
-
/** offset and limit. */
|
|
260
|
-
window: boolean;
|
|
261
|
-
/** `total` counts every match, not the window. Needed only for `total: exact` queries. */
|
|
262
|
-
exactTotal: boolean;
|
|
263
|
-
/** `queryIds` is implemented. */
|
|
264
|
-
idsOnly?: boolean;
|
|
265
|
-
/** `nearest` is pushed down: the store ranks by cosine similarity itself (EXEC-FETCH-2). */
|
|
266
|
-
nearest?: boolean;
|
|
267
|
-
};
|
|
268
|
-
/** The answer to a `queryIds`: the window's ids in order, and `total` as in `RowQueryPage`. */
|
|
269
|
-
type RowIdPage = {
|
|
270
|
-
ids: string[];
|
|
271
|
-
total: number;
|
|
272
|
-
};
|
|
273
|
-
/**
|
|
274
|
-
* One write. `create` fails (`duplicate-id`) when its id is taken. `upsert` creates the row or replaces it
|
|
275
|
-
* whole by id (`created` / `updated`), keeping the existing `createdAt`. `update` changes an existing row only
|
|
276
|
-
* (never an upsert) and merges `data` over it with `id` stamped last; `guard` is tested against the pre-image.
|
|
277
|
-
* `delete` likewise. Native `rekey` moves an existing id with insertion-order collision semantics; support is explicit.
|
|
278
|
-
*/
|
|
279
|
-
type RowWriteOp = {
|
|
280
|
-
kind: "create";
|
|
281
|
-
entityType: string;
|
|
282
|
-
data: EntityRow;
|
|
283
|
-
} | {
|
|
284
|
-
kind: "upsert";
|
|
285
|
-
entityType: string;
|
|
286
|
-
data: EntityRow;
|
|
287
|
-
} | {
|
|
288
|
-
kind: "update";
|
|
289
|
-
entityType: string;
|
|
290
|
-
id: string;
|
|
291
|
-
data: EntityRow;
|
|
292
|
-
guard?: RowPredicate;
|
|
293
|
-
} | {
|
|
294
|
-
kind: "delete";
|
|
295
|
-
entityType: string;
|
|
296
|
-
id: string;
|
|
297
|
-
guard?: RowPredicate;
|
|
298
|
-
} | {
|
|
299
|
-
kind: "rekey";
|
|
300
|
-
entityType: string;
|
|
301
|
-
id: string;
|
|
302
|
-
newId: string;
|
|
303
|
-
guard?: RowPredicate;
|
|
304
|
-
};
|
|
305
|
-
/**
|
|
306
|
-
* What one write did. `before` (the pre-image) is present exactly when the op carried a guard.
|
|
307
|
-
* `rolled-back` is only produced inside an `atomic` batch that failed: the op had succeeded and was undone.
|
|
308
|
-
*/
|
|
309
|
-
type RowWriteOutcome = {
|
|
310
|
-
kind: "created";
|
|
311
|
-
row: EntityRow;
|
|
312
|
-
} | {
|
|
313
|
-
kind: "updated";
|
|
314
|
-
row: EntityRow;
|
|
315
|
-
before?: EntityRow;
|
|
316
|
-
} | {
|
|
317
|
-
kind: "deleted";
|
|
318
|
-
before?: EntityRow;
|
|
319
|
-
} | {
|
|
320
|
-
kind: "not-found";
|
|
321
|
-
} | {
|
|
322
|
-
kind: "duplicate-id";
|
|
323
|
-
} | {
|
|
324
|
-
kind: "refused";
|
|
325
|
-
} | {
|
|
326
|
-
kind: "failed";
|
|
327
|
-
message: string;
|
|
328
|
-
} | {
|
|
329
|
-
kind: "rolled-back";
|
|
330
|
-
};
|
|
331
|
-
/**
|
|
332
|
-
* `atomic`: all ops apply or none do (a `persist batch`); on failure the outcomes are `rolled-back` for
|
|
333
|
-
* every earlier op, then the failing outcome, and nothing is written.
|
|
334
|
-
* `stop`: ops apply in order and stop at the first failure; earlier ops stay applied, later ones are
|
|
335
|
-
* not attempted and have no outcome (a run of plain `persist` effects).
|
|
336
|
-
*/
|
|
337
|
-
type RowWriteFailureMode = "atomic" | "stop";
|
|
338
|
-
type RowWriteBatch = {
|
|
339
|
-
ops: RowWriteOp[];
|
|
340
|
-
onFailure: RowWriteFailureMode;
|
|
341
|
-
};
|
|
342
|
-
/** What an adapter's `writeWhere`/`writeBatch` honours for one entity type. */
|
|
343
|
-
type WriteCapabilities = {
|
|
344
|
-
/** The guard predicates the store can test; a `Pick` of the query capabilities. */
|
|
345
|
-
guards: Pick<QueryCapabilities, "leaves" | "combinators" | "compareOps">;
|
|
346
|
-
/** `writeWhere` tests the guard and the existence of the row in one step. */
|
|
347
|
-
conditional: boolean;
|
|
348
|
-
/** Outcomes carry the written row. */
|
|
349
|
-
returnsRow: boolean;
|
|
350
|
-
/** `writeBatch` with `onFailure: "stop"`. */
|
|
351
|
-
stopRuns: boolean;
|
|
352
|
-
/** `writeBatch` with `onFailure: "atomic"`; needs transactions. */
|
|
353
|
-
atomicBatch: boolean;
|
|
354
|
-
/** Native id moves; absent means unsupported. */
|
|
355
|
-
rekey?: boolean;
|
|
356
|
-
/** The store commits rows the kernel decided (`commitRows`) and holds no write semantics (EXEC-STORE-5). */
|
|
357
|
-
commitRows?: boolean;
|
|
358
|
-
};
|
|
359
|
-
/** What a compare-and-commit does to one row the kernel read. */
|
|
360
|
-
type RowCommitWrite = {
|
|
361
|
-
kind: "keep";
|
|
362
|
-
} | {
|
|
363
|
-
kind: "put";
|
|
364
|
-
row: EntityRow;
|
|
365
|
-
} | {
|
|
366
|
-
kind: "delete";
|
|
367
|
-
};
|
|
368
258
|
/** One row of a compare-and-commit: the version the kernel read (`null` when absent) and what it writes (EXEC-STORE-5). */
|
|
369
259
|
type RowCommit = {
|
|
370
260
|
entityType: string;
|
|
@@ -470,125 +360,6 @@ interface LazyService<T> {
|
|
|
470
360
|
*/
|
|
471
361
|
declare function createLazyService<T>(factory: () => T): LazyService<T>;
|
|
472
362
|
|
|
473
|
-
/**
|
|
474
|
-
* A fetched page by reference: `ids` = the window in order, `total` = matches before the window at
|
|
475
|
-
* dispatch time, `query` = what produced it (its predicates, incl. the @read policy, re-count `total`; order and window are ignored).
|
|
476
|
-
*/
|
|
477
|
-
type RowSetRef = {
|
|
478
|
-
entityType: string;
|
|
479
|
-
ids: string[];
|
|
480
|
-
total: number;
|
|
481
|
-
query: RowQuery;
|
|
482
|
-
};
|
|
483
|
-
declare const RowSetRefSchema: z.ZodType<RowSetRef>;
|
|
484
|
-
/** Tag property of a `RowSetMarker`; `$`-prefixed so it never collides with a pattern prop key. */
|
|
485
|
-
declare const ROW_SET_MARKER: "$rowSet";
|
|
486
|
-
/** A render prop leaf resolved to rows at paint time by the kernel (`@read` applied there). */
|
|
487
|
-
type RowSetMarker = {
|
|
488
|
-
readonly [ROW_SET_MARKER]: true;
|
|
489
|
-
readonly ref: RowSetRef;
|
|
490
|
-
};
|
|
491
|
-
declare function rowSetMarker(ref: RowSetRef): RowSetMarker;
|
|
492
|
-
declare function isRowSetMarker(value: RuntimeValue): value is RowSetMarker;
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* Authenticated user context — what `@user.x` resolves against.
|
|
496
|
-
*
|
|
497
|
-
* The canonical shape for the `user` binding root, shared by both execution
|
|
498
|
-
* paths: the JS interpreter resolves `@user.id` through
|
|
499
|
-
* `EvaluationContext.user`, and the compiled shell emits `user?.id` against the
|
|
500
|
-
* `UserContext` its `@app/shared` re-exports from here.
|
|
501
|
-
*
|
|
502
|
-
* `id` is the field the behavior library reads for ownership scoping and `role`
|
|
503
|
-
* the field it reads for capability gating. Auth providers that name the subject
|
|
504
|
-
* `uid` must normalize at their boundary — {@link normalizeUserContext} does that.
|
|
505
|
-
*
|
|
506
|
-
* @packageDocumentation
|
|
507
|
-
*/
|
|
508
|
-
|
|
509
|
-
/**
|
|
510
|
-
* What a host's auth provider has resolved the viewer to be — from session
|
|
511
|
-
* resolution only, never from an interactive sign-in action: `pending` until
|
|
512
|
-
* the session is known; `anonymous` / `authenticated` once it is; `failed`
|
|
513
|
-
* when connecting or resolving the session failed; `unavailable` when the host
|
|
514
|
-
* has no sign-in configured. An `access: authenticated` page mounts only on
|
|
515
|
-
* `authenticated`.
|
|
516
|
-
*/
|
|
517
|
-
type ViewerAuthority = 'pending' | 'anonymous' | 'authenticated' | 'failed' | 'unavailable';
|
|
518
|
-
/**
|
|
519
|
-
* The `@user` binding: a {@link Viewer} held flat. Its named fields are the viewer's; each claim is a key holding its
|
|
520
|
-
* JSON value, readable as `@user.<claim>`. The Rust twin of the conversion is `orbital_core_base::viewer`
|
|
521
|
-
* (`Viewer::from_user` / `Viewer::to_user`).
|
|
522
|
-
*/
|
|
523
|
-
type UserContext = Omit<Viewer, 'claims'> & {
|
|
524
|
-
[key: string]: FieldValue;
|
|
525
|
-
};
|
|
526
|
-
/** Zod twin of the generated {@link Viewer}: the record a `.lolo` program names as `Viewer`. */
|
|
527
|
-
declare const ViewerSchema: z.ZodType<Viewer>;
|
|
528
|
-
/**
|
|
529
|
-
* The identity of an unauthenticated viewer. A resolvable object rather than
|
|
530
|
-
* `undefined` so a role predicate evaluates to a definite `false` instead of
|
|
531
|
-
* comparing against nothing.
|
|
532
|
-
*/
|
|
533
|
-
declare const ANONYMOUS_USER: UserContext;
|
|
534
|
-
/** Provider-shaped identity claims, before normalization. */
|
|
535
|
-
type RawUserClaims = {
|
|
536
|
-
id?: string;
|
|
537
|
-
uid?: string;
|
|
538
|
-
email?: string | null;
|
|
539
|
-
name?: string | null;
|
|
540
|
-
displayName?: string | null;
|
|
541
|
-
/** Absent or `null` when the token carries none, as the kernel's `Viewer.role` (`Option`). */
|
|
542
|
-
role?: string | null;
|
|
543
|
-
permissions?: string[] | null;
|
|
544
|
-
} & {
|
|
545
|
-
[key: string]: FieldValue;
|
|
546
|
-
};
|
|
547
|
-
/** Zod twin of `RawUserClaims` — the wire shape of `EventRequest.user`. */
|
|
548
|
-
declare const RawUserClaimsSchema: z.ZodType<RawUserClaims>;
|
|
549
|
-
/**
|
|
550
|
-
* Normalize provider claims into a {@link UserContext}.
|
|
551
|
-
*
|
|
552
|
-
* Firebase (and most OIDC providers) name the subject `uid` and the display name
|
|
553
|
-
* `displayName`, while every `.lolo` behavior reads `@user.id` / `@user.name`.
|
|
554
|
-
* Without this normalization `@user.id` is `undefined` against a fully
|
|
555
|
-
* authenticated request and every ownership filter silently matches no rows.
|
|
556
|
-
* `uid` is preserved so `@user.uid` keeps working.
|
|
557
|
-
*
|
|
558
|
-
* Returns `undefined` for absent or subject-less claims so callers can
|
|
559
|
-
* distinguish "no auth ran" from "anonymous"; use {@link ANONYMOUS_USER} where a
|
|
560
|
-
* definite identity is required.
|
|
561
|
-
*/
|
|
562
|
-
declare function normalizeUserContext(claims: RawUserClaims | null | undefined): UserContext | undefined;
|
|
563
|
-
/**
|
|
564
|
-
* Turn a row of an app's `[identity]` entity into a viewer.
|
|
565
|
-
*
|
|
566
|
-
* There is no separate persona shape: an identity row IS the persona
|
|
567
|
-
* (`Almadar_LOLO_Identity.md` §4.3), so this only guards the one field the
|
|
568
|
-
* behavior library requires — a non-empty string `id` — and passes every other
|
|
569
|
-
* declared field through as a `@user.<field>` claim. Rows without a usable id
|
|
570
|
-
* yield `undefined` rather than a persona nobody can own rows as.
|
|
571
|
-
*/
|
|
572
|
-
declare function personaFromIdentityRow(row: Record<string, FieldValue | undefined>): UserContext | undefined;
|
|
573
|
-
/** Look a persona up in a roster by id, or by role when no id matches. */
|
|
574
|
-
declare function findPersonaInRoster(roster: readonly UserContext[], idOrRole: string): UserContext | undefined;
|
|
575
|
-
/**
|
|
576
|
-
* Resolve a persona spec — a bare id/role (`Person Id 3`, `moderator`) or a full
|
|
577
|
-
* JSON `UserContext` — into a viewer. This is the `ALMADAR_PERSONA` contract,
|
|
578
|
-
* shared by every host that presents an app as somebody.
|
|
579
|
-
*
|
|
580
|
-
* The roster is the app's OWN declared personas — the seeded rows of its
|
|
581
|
-
* `[identity]` entity (`Almadar_LOLO_Identity.md` §4.3) — supplied by the host
|
|
582
|
-
* that has them in hand (the runtime's live store on the interpreter path, the
|
|
583
|
-
* schema-derived seed rows on the compiled path). There is no global roster:
|
|
584
|
-
* an app without an `[identity]` entity resolves only JSON-form specs.
|
|
585
|
-
*
|
|
586
|
-
* Throws on anything unresolvable rather than returning `undefined`: "no persona"
|
|
587
|
-
* and "persona silently ignored" look identical on screen, so a bad spec must
|
|
588
|
-
* fail at boot instead of rendering as nobody.
|
|
589
|
-
*/
|
|
590
|
-
declare function resolvePersonaSpec(spec: string, roster: readonly UserContext[]): UserContext;
|
|
591
|
-
|
|
592
363
|
declare const ExternalInputSchema: z.ZodObject<{
|
|
593
364
|
orbital: z.ZodString;
|
|
594
365
|
trait: z.ZodString;
|
|
@@ -703,6 +474,26 @@ declare const PayloadJsonSchemaSchema: z.ZodType<JsonSchema>;
|
|
|
703
474
|
* `getSymbolAtLocation`.
|
|
704
475
|
*/
|
|
705
476
|
type EventKey = string;
|
|
477
|
+
/**
|
|
478
|
+
* Name of a field of the entity a component is bound to. A marker for a prop
|
|
479
|
+
* or item property whose value is a field name (not arbitrary text), such as
|
|
480
|
+
* the field a grid groups by or a filter applies to.
|
|
481
|
+
*
|
|
482
|
+
* Plain alias over `string`, not branded, for the same reason as `EventKey`:
|
|
483
|
+
* field names come from user data at runtime, so cast friction would buy
|
|
484
|
+
* nothing. The pattern-sync tool finds it by type identity and writes
|
|
485
|
+
* `kind: "field-ref"` into the patterns registry.
|
|
486
|
+
*/
|
|
487
|
+
type EntityFieldName = string;
|
|
488
|
+
/** The name of a field of the rows held by the sibling prop `P` (`RowFieldName<'lineItems'>`). */
|
|
489
|
+
type RowFieldName<P extends string> = string;
|
|
490
|
+
/**
|
|
491
|
+
* User-visible text a component paints (a label, title or message), as
|
|
492
|
+
* opposed to an identifier, key or class name. A marker alias over `string`,
|
|
493
|
+
* found by type identity; the pattern-sync tool writes `kind: "text"` into
|
|
494
|
+
* the patterns registry.
|
|
495
|
+
*/
|
|
496
|
+
type VisibleText = string;
|
|
706
497
|
/**
|
|
707
498
|
* Phantom-typed brand for declarative bus-emit props on UI components.
|
|
708
499
|
*
|
|
@@ -763,90 +554,7 @@ type EventEmit<P> = string & {
|
|
|
763
554
|
type EventListen<P> = string & {
|
|
764
555
|
readonly __listenPayload?: P;
|
|
765
556
|
};
|
|
766
|
-
|
|
767
|
-
* Identifies the origin of a bus event. Used by cross-trait listeners to
|
|
768
|
-
* filter emits from specific orbitals, traits, transitions, or ticks.
|
|
769
|
-
*
|
|
770
|
-
* `transition` and `tick` are optional runtime-internal details; most
|
|
771
|
-
* consumers only care about `orbital` and `trait`.
|
|
772
|
-
*/
|
|
773
|
-
type BusEventSource = {
|
|
774
|
-
orbital?: string;
|
|
775
|
-
/** V4 dual-carry id sibling of `orbital` — stable across an orbital rename. */
|
|
776
|
-
orbitalId?: OrbitalId;
|
|
777
|
-
trait?: string;
|
|
778
|
-
/** V4 dual-carry id sibling of `trait` — stable across a trait rename. */
|
|
779
|
-
traitId?: TraitId;
|
|
780
|
-
/** V4 dual-carry id of the emitted event — stable across an event rename. */
|
|
781
|
-
eventId?: EventId;
|
|
782
|
-
transition?: string;
|
|
783
|
-
tick?: string;
|
|
784
|
-
/**
|
|
785
|
-
* True when the orbital bridge re-broadcasts an event onto the bus
|
|
786
|
-
* (any source — both echoes of the dispatched event and server-side
|
|
787
|
-
* cascade emits via `(emit X)` / `fetch.emit.success`). Cross-trait
|
|
788
|
-
* listeners filter on this flag so the click-time qualified emit
|
|
789
|
-
* (which has no `fromBridge`) doesn't double-fire alongside the
|
|
790
|
-
* post-server bridge confirmation. See `dispatched` for the narrower
|
|
791
|
-
* "echo of the just-dispatched event" signal.
|
|
792
|
-
*/
|
|
793
|
-
fromBridge?: boolean;
|
|
794
|
-
/**
|
|
795
|
-
* True ONLY for bridge echoes the receiving tab already processed, so
|
|
796
|
-
* the originating trait's self-subscription skips them instead of
|
|
797
|
-
* re-dispatching its own echo (infinite loop / double execution).
|
|
798
|
-
* Set by path 1 of useOrbitalBridge (compiled shell — echo of the
|
|
799
|
-
* just-dispatched event; server-side cascade emits there carry
|
|
800
|
-
* `fromBridge: true` but NOT `dispatched`, so they still reach the
|
|
801
|
-
* source trait's transition handler, e.g. `loading -> browsing` on a
|
|
802
|
-
* fetch's `emit.success`) and by ServerBridge (runtime path — stamped
|
|
803
|
-
* on exactly one response-cascade echo per event the dispatch delivered
|
|
804
|
-
* locally on the bare key, `stampLocallyDeliveredEchoes`; server-only
|
|
805
|
-
* results stay unstamped). Cross-trait `listens` never filter on this
|
|
806
|
-
* flag, so their delivery is unaffected. Push-leg events from OTHER
|
|
807
|
-
* tabs (multiplayer) are never stamped.
|
|
808
|
-
*/
|
|
809
|
-
dispatched?: boolean;
|
|
810
|
-
/**
|
|
811
|
-
* The client that originated the dispatch whose effects emitted this
|
|
812
|
-
* event (from `EventRequest.clientId`); absent for headless
|
|
813
|
-
* dispatches (ticks, circuit-router probes, walkers). The server-side
|
|
814
|
-
* listens fan-out skips client-originated cascade emits — under dual
|
|
815
|
-
* execution the originating client relays every cascade hop through the
|
|
816
|
-
* bridge itself, so the server dispatching the same hop double-ran it
|
|
817
|
-
* (one Send persisted two rows). Headless topology keeps the fan-out:
|
|
818
|
-
* there is no client to drive the circuit.
|
|
819
|
-
*/
|
|
820
|
-
originClientId?: string;
|
|
821
|
-
/**
|
|
822
|
-
* Per-activation key a UI control stamps on the event it emits, so it can
|
|
823
|
-
* show its own busy state for exactly as long as the dispatches that event
|
|
824
|
-
* started are in flight (`@almadar/ui` lib/pendingDispatch). Never set by
|
|
825
|
-
* the bridge or the server.
|
|
826
|
-
*/
|
|
827
|
-
pendingKey?: string;
|
|
828
|
-
/**
|
|
829
|
-
* Set by a server-role kernel on a `persist` effect's `emit.success` envelope: the one emit a live-push
|
|
830
|
-
* host (`setLiveBroadcastSink`) also fans out to every other connected client.
|
|
831
|
-
*/
|
|
832
|
-
persistSuccess?: boolean;
|
|
833
|
-
/**
|
|
834
|
-
* The row of the emitting trait's entity that made the emit, when the trait's rows are addressed by a `per`
|
|
835
|
-
* listener. A listener with a `per` clause evaluates its own key; one without ignores this.
|
|
836
|
-
*/
|
|
837
|
-
instanceKey?: string;
|
|
838
|
-
};
|
|
839
|
-
/** The delivery a transition is processing: `@event`, and one element of `@prevEvents` (Runtime Spec Clause 5.5). */
|
|
840
|
-
type DeliveryRecord = {
|
|
841
|
-
event: string;
|
|
842
|
-
payload?: EventPayload;
|
|
843
|
-
source: BusEventSource;
|
|
844
|
-
};
|
|
845
|
-
/** A trait's log so far in a dispatch that began elsewhere (`@prevEvents` / `@prevStates`), carried on the request. */
|
|
846
|
-
type DispatchLog = {
|
|
847
|
-
prevEvents: DeliveryRecord[];
|
|
848
|
-
prevStates: string[];
|
|
849
|
-
};
|
|
557
|
+
|
|
850
558
|
/** Zod twin of `BusEventSource`. */
|
|
851
559
|
declare const BusEventSourceSchema: z.ZodType<BusEventSource, object>;
|
|
852
560
|
/** Zod twin of `DeliveryRecord`. */
|
|
@@ -874,18 +582,7 @@ type BusEvent = {
|
|
|
874
582
|
type BusEventListener = (event: BusEvent) => void;
|
|
875
583
|
/** Returned by `on()` / `once()` to detach a listener. */
|
|
876
584
|
type Unsubscribe = () => void;
|
|
877
|
-
|
|
878
|
-
* One event a transition's effects emitted, carried back to the client to
|
|
879
|
-
* re-dispatch (in order) so the state machine advances through the
|
|
880
|
-
* cascade without server-side recursion. Named/shaped to match the
|
|
881
|
-
* generated compiled-path `EmittedEvent` (orbital-shell-typescript's
|
|
882
|
-
* `shared/types.ts`) so the two execution paths agree on one shape.
|
|
883
|
-
*/
|
|
884
|
-
type EmittedEvent = {
|
|
885
|
-
event: string;
|
|
886
|
-
payload?: EventPayload;
|
|
887
|
-
source?: BusEventSource;
|
|
888
|
-
};
|
|
585
|
+
|
|
889
586
|
/** Zod twin of `EmittedEvent`. Third type param `object`, see `BusEventSourceSchema`. */
|
|
890
587
|
declare const EmittedEventSchema: z.ZodType<EmittedEvent, object>;
|
|
891
588
|
/**
|
|
@@ -914,7 +611,8 @@ type ClientNavigateBackTuple = ['navigate-back'];
|
|
|
914
611
|
/** A `runsOn: client` host-port effect (`auth/sign-out`, `audio/*`) the client host answers; its arguments are resolved. */
|
|
915
612
|
type ClientHostAskTuple = ['host-ask', string, JsonValue[]] | ['host-ask', string, JsonValue[], HostAskCompletion];
|
|
916
613
|
|
|
917
|
-
|
|
614
|
+
/** The effect tuple shipped in `EventResponse.clientEffectsByTrait`: the generated kernel wire `ClientEffect`, one copy. */
|
|
615
|
+
type ClientEffectTuple = ClientEffect;
|
|
918
616
|
/** Zod twin of `ClientRenderUITuple`. */
|
|
919
617
|
declare const ClientRenderUITupleSchema: z.ZodTuple<[z.ZodLiteral<"render-ui">, z.ZodString, z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>>], null>;
|
|
920
618
|
/** Zod twin of `ClientNavigateTuple` — one variant per fixed arity (2/3/4), unioned. */
|
|
@@ -951,11 +649,7 @@ declare function normalizeEventKey(eventKey: string): string;
|
|
|
951
649
|
/** The event a tick firing carries on the wire (`EventRequest.event` of a `runTick` leg). */
|
|
952
650
|
declare function tickEventKey(tickName: string): string;
|
|
953
651
|
type LifecycleEvent = (typeof LIFECYCLE_EVENTS)[number];
|
|
954
|
-
|
|
955
|
-
type MountSeed = {
|
|
956
|
-
trait: string;
|
|
957
|
-
event: LifecycleEvent;
|
|
958
|
-
};
|
|
652
|
+
|
|
959
653
|
declare const MountSeedSchema: z.ZodObject<{
|
|
960
654
|
trait: z.ZodString;
|
|
961
655
|
event: z.ZodEnum<{
|
|
@@ -1002,7 +696,7 @@ declare const EventStreamItemSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
1002
696
|
timestamp: z.ZodNumber;
|
|
1003
697
|
}, z.core.$strip>, z.ZodObject<{
|
|
1004
698
|
type: z.ZodLiteral<"effect">;
|
|
1005
|
-
data: z.ZodType<
|
|
699
|
+
data: z.ZodType<ClientEffect, unknown, z.core.$ZodTypeInternals<ClientEffect, unknown>>;
|
|
1006
700
|
timestamp: z.ZodNumber;
|
|
1007
701
|
}, z.core.$strip>, z.ZodObject<{
|
|
1008
702
|
type: z.ZodLiteral<"complete">;
|
|
@@ -1049,10 +743,11 @@ interface ServiceHostPorts {
|
|
|
1049
743
|
* A `program/dispatch` event request (owner, 2026-10-21): dispatch `request` on `orbital` as the HTTP events
|
|
1050
744
|
* route does (`input: true` admits only a declared external input, as the inputs route). `request` is what the kernel
|
|
1051
745
|
* parsed (`EventRequest::from_dispatch`); its `user` is the dispatch's viewer when the call names one.
|
|
746
|
+
* `wire` answers a browser: the response is the kernel's client view (EXEC-DIST-8).
|
|
1052
747
|
* A host that does not serve event requests leaves it out.
|
|
1053
748
|
*/
|
|
1054
749
|
supportsDispatchStream?: true;
|
|
1055
|
-
dispatchRequest?(orbital: string, request: EventRequest, input: boolean, stream?: boolean): Promise<DispatchRequestOutcome>;
|
|
750
|
+
dispatchRequest?(orbital: string, request: EventRequest, input: boolean, stream?: boolean, wire?: boolean): Promise<DispatchRequestOutcome>;
|
|
1056
751
|
/** A `program/dispatch { inbound }` delivery through the inbound route, credential check and answer path. */
|
|
1057
752
|
deliverInbound?(name: string, delivery: {
|
|
1058
753
|
headers: Readonly<Record<string, string>>;
|
|
@@ -1110,5 +805,5 @@ interface LiveBroadcastItem {
|
|
|
1110
805
|
/** Zod twin of `LiveBroadcastItem`. Third type param `object`, see `BusEventSourceSchema`. */
|
|
1111
806
|
declare const LiveBroadcastItemSchema: z.ZodType<LiveBroadcastItem, object>;
|
|
1112
807
|
|
|
1113
|
-
export {
|
|
1114
|
-
export type { BusEvent as B, ClientEffectTuple as C,
|
|
808
|
+
export { ANONYMOUS_USER as A, DeliveryRecordSchema as D, InboundRouteSchema as G, HostAskCompletionSchema as H, LIFECYCLE_EVENTS as J, LiveBroadcastItemSchema as N, MountSeedSchema as O, NameListSchema as P, OptionalNameSchema as Q, OrbitalRegisterResponseSchema as S, PayloadIssueSchema as V, PayloadJsonSchemaSchema as W, RawUserClaimsSchema as _, ServerTopologySchema as a5, UNMOUNT_EVENT as ae, ViewerSchema as ah, createLazyService as aj, createTypedEventBus as ak, findPersonaInRoster as al, normalizeEventKey as am, normalizeUserContext as an, personaFromIdentityRow as ao, resolvePersonaSpec as ap, tickEventKey as aq, BusEventSourceSchema as b, ClientEffectTupleSchema as c, ClientHostAskTupleSchema as e, ClientNavigateBackTupleSchema as g, ClientNavigateTupleSchema as i, ClientRenderUITupleSchema as k, DispatchLogSchema as l, EmittedEventSchema as n, EventStreamItemSchema as s, ExternalInputSchema as v, InboundAnswerSchema as w, InboundFoundSchema as y, InboundOnlySchema as z };
|
|
809
|
+
export type { RowCommit as $, BusEvent as B, ClientEffectTuple as C, EventStreamItem as E, InboundRoute as F, InboundAnswer as I, LazyService as K, LiveBroadcastItem as L, LifecycleEvent as M, OrbitalRegisterResponse as R, PayloadIssue as T, UserContext as U, PersistActionName as X, PersistenceAdapter as Y, RawUserClaims as Z, BusEventListener as a, RowFieldName as a0, RowPage as a1, RowPageRequest as a2, RowQueryPage as a3, ServerTopology as a4, ServiceAction as a6, ServiceActionName as a7, ServiceContract as a8, ServiceEvents as a9, ServiceHostPorts as aa, StoreContract as ab, StoreFilter as ac, StoreFilterOp as ad, Unsubscribe as af, ViewerAuthority as ag, VisibleText as ai, ClientHostAskTuple as d, ClientNavigateBackTuple as f, ClientNavigateTuple as h, ClientRenderUITuple as j, DispatchRequestOutcome as m, EntityFieldName as o, EventEmit as p, EventKey as q, EventListen as r, ExternalInput as t, ExternalInputRequest as u, InboundDelivery as x };
|