@voltro/protocol 0.84.0 → 0.86.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/CHANGELOG.md +1215 -0
- package/README.md +14 -0
- package/THIRD-PARTY-NOTICES.md +5 -89
- package/dist/apikey.d.ts +32 -34
- package/dist/approval.js +64 -0
- package/dist/approvalDescriptors.js +26 -0
- package/dist/auth.js +369 -0
- package/dist/boundedRing.js +27 -0
- package/dist/businessRule.js +11 -0
- package/dist/connection.js +73 -0
- package/dist/devActivity.js +4 -0
- package/dist/errorValue.js +21 -0
- package/dist/event.js +104 -0
- package/dist/idempotency.js +66 -0
- package/dist/identity.js +5 -9
- package/dist/index.d.ts +1494 -1366
- package/dist/index.js +42 -1411
- package/dist/inspect.d.ts +88 -88
- package/dist/inspect.js +14 -190
- package/dist/inspectBackfill.js +52 -0
- package/dist/inspectCommandRejection.js +21 -0
- package/dist/inspectProjection.js +133 -0
- package/dist/inspectStorageProjection.js +86 -0
- package/dist/inspectValueIdentity.js +4 -0
- package/dist/inspectWorkflowExecution.js +34 -0
- package/dist/inspectWorkflowQueuedStart.js +31 -0
- package/dist/jsonSchema.js +54 -0
- package/dist/jwt.d.ts +32 -34
- package/dist/outbox.js +10 -0
- package/dist/pairing.js +75 -0
- package/dist/plugin.js +61 -0
- package/dist/pluginNaming.js +32 -0
- package/dist/procedure.js +262 -0
- package/dist/publicApi.js +344 -0
- package/dist/reactivityChannel.js +34 -0
- package/dist/rest.d.ts +105 -57
- package/dist/rest.js +259 -437
- package/dist/restFormat.js +163 -0
- package/dist/rowEquality.js +31 -0
- package/dist/rowPatch.js +182 -0
- package/dist/schemaShape.js +67 -0
- package/dist/scopes.js +240 -0
- package/dist/serverErrorBus.js +15 -0
- package/dist/serviceCall.js +14 -0
- package/dist/session.d.ts +90 -96
- package/dist/session.js +13 -15
- package/dist/{sessionHeader-DriTZhmv.js → sessionHeader.js} +1 -1
- package/dist/storageAccess.js +14 -0
- package/dist/storeErrors.js +66 -0
- package/dist/storeScreenshots.js +90 -0
- package/dist/strictInput.js +27 -0
- package/dist/subscriptionEvent.js +37 -0
- package/dist/tenantSelection.js +40 -0
- package/dist/time.js +7 -0
- package/dist/undo.js +38 -0
- package/dist/validation.js +39 -0
- package/dist/webSocketGateway.js +10 -0
- package/dist/workflow.js +297 -0
- package/dist/workflowAccess.js +61 -0
- package/dist/workflowRestart.js +45 -0
- package/dist/workflowRetry.js +44 -0
- package/dist/workflowStartOutcome.js +30 -0
- package/package.json +4 -8
- package/dist/restFormat-EZ8k9ZcQ.js +0 -304
- package/dist/scopes-Di756ENh.js +0 -518
package/dist/rest.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as AST from 'effect/SchemaAST';
|
|
2
2
|
import { DataStore } from '@voltro/database';
|
|
3
|
+
import { Effect } from 'effect';
|
|
3
4
|
import { Schema } from 'effect';
|
|
4
5
|
|
|
5
|
-
declare interface ActionProcedureDescriptor<Name extends string, Input extends Schema.
|
|
6
|
+
declare interface ActionProcedureDescriptor<Name extends string, Input extends Schema.Top, Output extends Schema.Top, Error extends Schema.Top> {
|
|
6
7
|
readonly kind: 'action';
|
|
7
8
|
readonly name: Name;
|
|
8
9
|
readonly input: Input;
|
|
@@ -113,7 +114,7 @@ export declare const bytes: (stream: ReadableStream<Uint8Array> | (() => Readabl
|
|
|
113
114
|
* Field by field for a struct; the object is returned unchanged for any other
|
|
114
115
|
* shape (the schema then decides). Unknown keys pass through untouched.
|
|
115
116
|
*/
|
|
116
|
-
export declare const coerceQueryObject: (query: unknown, input: Schema.
|
|
117
|
+
export declare const coerceQueryObject: (query: unknown, input: Schema.Top) => unknown;
|
|
117
118
|
|
|
118
119
|
/**
|
|
119
120
|
* Coerce ONE query-string value toward what `ast` (an ENCODED shape) expects.
|
|
@@ -144,7 +145,7 @@ export declare const collectPublicApiRoutes: (entries: ReadonlyArray<PublicApiEn
|
|
|
144
145
|
declare type DeclaredAccess<Input = unknown> = ReadonlyArray<AnyGuardSpec<Input> | OpenAccessSpec | ServiceAccessSpec>;
|
|
145
146
|
|
|
146
147
|
/** The `_tag` literals a descriptor's `error:` union declares (empty for none). */
|
|
147
|
-
export declare const declaredErrorTags: (error: Schema.
|
|
148
|
+
export declare const declaredErrorTags: (error: Schema.Top | undefined) => ReadonlySet<string>;
|
|
148
149
|
|
|
149
150
|
/**
|
|
150
151
|
* Identity helper that fixes the descriptor's types (like `defineAction` /
|
|
@@ -210,7 +211,7 @@ export declare const encodeRestSuccess: (format: RestFormat, value: unknown, ctx
|
|
|
210
211
|
|
|
211
212
|
/** The member of an error union that declares `tag`, as a schema of its own —
|
|
212
213
|
* for the spec's per-status responses. */
|
|
213
|
-
export declare const errorMemberSchema: (error: Schema.
|
|
214
|
+
export declare const errorMemberSchema: (error: Schema.Top | undefined, tag: string) => Schema.Top | undefined;
|
|
214
215
|
|
|
215
216
|
/** Normalize the `exposeAsTool` shorthand. `true` is only valid when the
|
|
216
217
|
* descriptor carries a top-level `description`; callers pass that in. */
|
|
@@ -359,7 +360,7 @@ export declare const matchPathParams: (pattern: string, path: string) => Record<
|
|
|
359
360
|
* (for example joining a room) must execute once for EACH native connection. */
|
|
360
361
|
declare type MutationIdempotencyScope = 'subject' | 'connection';
|
|
361
362
|
|
|
362
|
-
declare interface MutationProcedureDescriptor<Name extends string, Input extends Schema.
|
|
363
|
+
declare interface MutationProcedureDescriptor<Name extends string, Input extends Schema.Top, Output extends Schema.Top, Error extends Schema.Top> {
|
|
363
364
|
readonly kind: 'mutation';
|
|
364
365
|
readonly name: Name;
|
|
365
366
|
readonly input: Input;
|
|
@@ -498,7 +499,7 @@ export declare const pathParamNames: (path: string) => ReadonlyArray<string>;
|
|
|
498
499
|
* Requires the plugin to ship the schema as a NAMED export from `module`.
|
|
499
500
|
*/
|
|
500
501
|
declare interface PluginErrorSchema {
|
|
501
|
-
readonly schema: Schema.
|
|
502
|
+
readonly schema: Schema.Top;
|
|
502
503
|
readonly import: {
|
|
503
504
|
readonly module: string;
|
|
504
505
|
readonly name: string;
|
|
@@ -589,6 +590,9 @@ declare interface PluginHttpRoute {
|
|
|
589
590
|
* handler branches on: exempting `/saml` exempts `POST /saml/anything`.
|
|
590
591
|
*/
|
|
591
592
|
readonly originGuard?: 'exempt';
|
|
593
|
+
readonly cors?: RestCors;
|
|
594
|
+
/** Bearer-only routes must discard cookie authority before authentication. */
|
|
595
|
+
readonly credentials?: 'bearer';
|
|
592
596
|
}
|
|
593
597
|
|
|
594
598
|
/**
|
|
@@ -827,7 +831,7 @@ export declare interface PublicApiClientConfig {
|
|
|
827
831
|
}
|
|
828
832
|
|
|
829
833
|
/** A descriptor kind that can be projected to REST (streams are not, in v1). */
|
|
830
|
-
export declare type PublicApiDescriptor = QueryProcedureDescriptor<string, Schema.
|
|
834
|
+
export declare type PublicApiDescriptor = QueryProcedureDescriptor<string, Schema.Top, Schema.Top, Schema.Top> | MutationProcedureDescriptor<string, Schema.Top, Schema.Top, Schema.Top> | ActionProcedureDescriptor<string, Schema.Top, Schema.Top, Schema.Top>;
|
|
831
835
|
|
|
832
836
|
/** A descriptor paired with its bound executor, for batch projection at boot. */
|
|
833
837
|
export declare interface PublicApiEntry {
|
|
@@ -1061,7 +1065,7 @@ declare interface QueryCacheConfig {
|
|
|
1061
1065
|
readonly scope: 'subject' | 'tenant' | 'global';
|
|
1062
1066
|
}
|
|
1063
1067
|
|
|
1064
|
-
declare interface QueryProcedureDescriptor<Name extends string, Input extends Schema.
|
|
1068
|
+
declare interface QueryProcedureDescriptor<Name extends string, Input extends Schema.Top, Output extends Schema.Top, Error extends Schema.Top> {
|
|
1065
1069
|
readonly kind: 'query';
|
|
1066
1070
|
readonly name: Name;
|
|
1067
1071
|
readonly input: Input;
|
|
@@ -1196,7 +1200,18 @@ export declare interface RestByteResponse {
|
|
|
1196
1200
|
* headers CDNs purge by. A request that carries a credential (`Authorization`
|
|
1197
1201
|
* or a cookie) gets `private, no-cache` and no tags, whatever is declared:
|
|
1198
1202
|
* what a key or a session may see must never land in a shared cache. Every
|
|
1199
|
-
* such answer says `Vary: Authorization, Cookie`.
|
|
1203
|
+
* such answer says `Vary: Authorization, Cookie`.
|
|
1204
|
+
*
|
|
1205
|
+
* With `audience`, the ANSWER decides instead of the request's cookies: an
|
|
1206
|
+
* answer that is the same for every reader (`'public'`) is shared even when
|
|
1207
|
+
* the request carries cookies (a consent choice, a signed-in reader on a
|
|
1208
|
+
* public page) — the cache serves it to everyone, so it says only
|
|
1209
|
+
* `Vary: Authorization`; an answer for this reader alone (`'private'`: a
|
|
1210
|
+
* members page, a running experiment) is `private, no-store`. A request with
|
|
1211
|
+
* `Authorization` is private either way.
|
|
1212
|
+
*
|
|
1213
|
+
* Any other answer than a 200 (a 404, a 410, a 401) of a route with `cache`
|
|
1214
|
+
* is `private, no-store`: one reader's "not found" can be another's page.
|
|
1200
1215
|
*/
|
|
1201
1216
|
export declare interface RestCache {
|
|
1202
1217
|
/** Seconds a cache may serve the answer without asking again. */
|
|
@@ -1206,8 +1221,30 @@ export declare interface RestCache {
|
|
|
1206
1221
|
/** Purge tags from the answer as it goes on the wire, and the input.
|
|
1207
1222
|
* A tag with whitespace or a comma is dropped (no header can carry it). */
|
|
1208
1223
|
readonly tags?: (output: unknown, input: unknown) => ReadonlyArray<string>;
|
|
1224
|
+
/** Who may share the answer, decided by the answer and the reader it was
|
|
1225
|
+
* made for: `'public'` — every reader gets the same, cookies are ignored;
|
|
1226
|
+
* `'private'` — this reader's alone, never shared. Answer `'private'` for
|
|
1227
|
+
* a signed-in `subject` whenever anything in the answer depends on who
|
|
1228
|
+
* reads it. Without it, any cookie makes the answer private. */
|
|
1229
|
+
readonly audience?: (output: unknown, input: unknown, subject: Subject) => 'public' | 'private';
|
|
1209
1230
|
}
|
|
1210
1231
|
|
|
1232
|
+
/** Cross-origin browser access for one route. Origins are exact, including opaque `null`. */
|
|
1233
|
+
export declare interface RestCors {
|
|
1234
|
+
readonly origins: ReadonlyArray<string>;
|
|
1235
|
+
readonly headers?: ReadonlyArray<string>;
|
|
1236
|
+
readonly methods?: ReadonlyArray<RestMethod>;
|
|
1237
|
+
/** Preflight cache lifetime in seconds. */
|
|
1238
|
+
readonly maxAge?: number;
|
|
1239
|
+
readonly exposeHeaders?: ReadonlyArray<string>;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
/** Shared by the descriptor adapter and listener, including early transport refusals. */
|
|
1243
|
+
export declare const restCorsHeaders: (cors: RestCors | undefined, origin: string | undefined) => Record<string, string>;
|
|
1244
|
+
|
|
1245
|
+
/** Preflight never authenticates, consumes quota, reads a body or executes a handler. */
|
|
1246
|
+
export declare const restCorsPreflight: (cors: RestCors, method: string, headers: Readonly<Record<string, string>>) => PluginHttpRouteResult;
|
|
1247
|
+
|
|
1211
1248
|
export declare type RestDates = 'iso' | 'epoch-ms';
|
|
1212
1249
|
|
|
1213
1250
|
export declare type RestEnvelope = 'none' | 'data' | 'jsonapi';
|
|
@@ -1310,6 +1347,13 @@ export declare type RestNaming = 'camelCase' | 'snake_case';
|
|
|
1310
1347
|
|
|
1311
1348
|
export declare type RestPagination = 'link-header' | 'body-cursor';
|
|
1312
1349
|
|
|
1350
|
+
/** Uses the mounted rate-limit plugin's store, algorithms and dynamic policy. */
|
|
1351
|
+
export declare interface RestRateLimit {
|
|
1352
|
+
readonly limit: number;
|
|
1353
|
+
readonly window: string;
|
|
1354
|
+
readonly by?: 'subject' | 'tenant' | 'apiKey' | 'ip' | 'global';
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1313
1357
|
/** A schema-encoded REST body with an application-selected HTTP status and
|
|
1314
1358
|
* response headers. The marker keeps ordinary domain objects unambiguous.
|
|
1315
1359
|
* `output` still validates/encodes `body`; use `Schema.Void` with a 204 when
|
|
@@ -1363,10 +1407,10 @@ export declare interface RestRouteDescriptor<I, O> {
|
|
|
1363
1407
|
* before decoding. Omit for routes that take no input. The schema's
|
|
1364
1408
|
* decoded `Type` flows to the handler's `input`; its `Encoded` is left
|
|
1365
1409
|
* open (`any`) so any `Schema.Struct(...)` is accepted. */
|
|
1366
|
-
readonly input?: Schema.
|
|
1410
|
+
readonly input?: Schema.Codec<I, any, never, never>;
|
|
1367
1411
|
/** Output schema. The handler returns the decoded `Type`; the desugar
|
|
1368
1412
|
* encodes it to JSON for the `200` response. */
|
|
1369
|
-
readonly output: Schema.
|
|
1413
|
+
readonly output: Schema.Codec<O, any, never, never>;
|
|
1370
1414
|
readonly handler: (input: I, ctx: RestRouteContext) => Promise<RestHandlerResult<O>> | RestHandlerResult<O>;
|
|
1371
1415
|
readonly summary?: string;
|
|
1372
1416
|
readonly description?: string;
|
|
@@ -1408,6 +1452,10 @@ export declare interface RestRouteDescriptor<I, O> {
|
|
|
1408
1452
|
*/
|
|
1409
1453
|
readonly version?: `v${number}`;
|
|
1410
1454
|
readonly guards?: ReadonlyArray<RestGuard>;
|
|
1455
|
+
readonly cors?: RestCors;
|
|
1456
|
+
/** Only an explicit bearer header may authenticate; cookies are removed before auth and context construction. */
|
|
1457
|
+
readonly credentials?: 'bearer';
|
|
1458
|
+
readonly rateLimit?: RestRateLimit;
|
|
1411
1459
|
/**
|
|
1412
1460
|
* This route STREAMS (Server-Sent Events) rather than resolving one value — its
|
|
1413
1461
|
* handler returns `sse(...)`. Declared on the descriptor, not left implicit in
|
|
@@ -1462,10 +1510,10 @@ export declare interface RestRouteProjection {
|
|
|
1462
1510
|
/** `publicApi.idempotent` — the route honours `Idempotency-Key` (under the
|
|
1463
1511
|
* app's idempotency binding); a client sends one per attempt. */
|
|
1464
1512
|
readonly idempotent: boolean;
|
|
1465
|
-
readonly input: Schema.
|
|
1513
|
+
readonly input: Schema.Top;
|
|
1466
1514
|
/** The wire names of the input fields bound from the path. */
|
|
1467
1515
|
readonly pathParams: ReadonlyArray<string>;
|
|
1468
|
-
readonly output: Schema.
|
|
1516
|
+
readonly output: Schema.Top;
|
|
1469
1517
|
/** The first `source` table, when the procedure declares one. */
|
|
1470
1518
|
readonly source: string | undefined;
|
|
1471
1519
|
/** Every failure the operation answers with a typed body, and its status:
|
|
@@ -1474,7 +1522,7 @@ export declare interface RestRouteProjection {
|
|
|
1474
1522
|
readonly errorResponses: ReadonlyArray<{
|
|
1475
1523
|
readonly status: number;
|
|
1476
1524
|
readonly tag: string;
|
|
1477
|
-
readonly schema: Schema.
|
|
1525
|
+
readonly schema: Schema.Top;
|
|
1478
1526
|
}>;
|
|
1479
1527
|
readonly format: RestFormat;
|
|
1480
1528
|
}
|
|
@@ -1493,6 +1541,8 @@ export declare const restRoutesToHttpRoutes: (routes: ReadonlyArray<RestRouteDes
|
|
|
1493
1541
|
* auth subject + the bound DataStore.
|
|
1494
1542
|
*/
|
|
1495
1543
|
export declare interface RestServeBindings {
|
|
1544
|
+
/** Bound once from the app's mounted rate-limit plugin. */
|
|
1545
|
+
readonly rateLimit?: (policy: RestRateLimit, ctx: RestRouteContext, route: RestRouteDescriptor<any, any>) => Effect.Effect<void, unknown>;
|
|
1496
1546
|
/** Resolve the calling subject from the request headers. */
|
|
1497
1547
|
readonly resolveSubject?: (headers: Readonly<Record<string, string>>) => Subject | Promise<Subject>;
|
|
1498
1548
|
/** The bound framework DataStore. */
|
|
@@ -1528,15 +1578,15 @@ export declare interface RestStreamResponse {
|
|
|
1528
1578
|
|
|
1529
1579
|
/**
|
|
1530
1580
|
* Rewrite a descriptor's schema into the shape the profile puts on the wire:
|
|
1531
|
-
* `timestampMs`
|
|
1532
|
-
*
|
|
1533
|
-
*
|
|
1534
|
-
*
|
|
1535
|
-
*
|
|
1536
|
-
* `format: date-time` string, the snake keys). Classes and other opaque
|
|
1537
|
-
*
|
|
1581
|
+
* `timestampMs` becomes an RFC 3339 string under `dates: 'iso'`, and every
|
|
1582
|
+
* struct's property names become `snake_case` under `naming: 'snake_case'` —
|
|
1583
|
+
* as an encoding, so decoding a wire value yields the descriptor's own typed
|
|
1584
|
+
* value and encoding the typed value yields the wire form.
|
|
1585
|
+
* `Schema.toJsonSchemaDocument` of the result documents the wire (a
|
|
1586
|
+
* `format: date-time` string, the snake keys). Classes and other opaque codecs
|
|
1587
|
+
* pass through unchanged; a struct inside one keeps its keys.
|
|
1538
1588
|
*/
|
|
1539
|
-
export declare const restViewSchema: (schema: Schema.
|
|
1589
|
+
export declare const restViewSchema: (schema: Schema.Top, format: RestFormat) => Schema.Top;
|
|
1540
1590
|
|
|
1541
1591
|
/**
|
|
1542
1592
|
* Whether `path` is one the route declared. The underlying router folds case
|
|
@@ -1602,33 +1652,31 @@ export declare const sse: (subscribe: (emit: (chunk: string) => void) => () => v
|
|
|
1602
1652
|
* the protocol requires — a raw `\n` inside one would truncate the event. */
|
|
1603
1653
|
export declare const sseFrame: (event: string, data: unknown) => string;
|
|
1604
1654
|
|
|
1605
|
-
declare const Subject: Schema.Union<[Schema.Struct<{
|
|
1606
|
-
type: Schema.Literal<
|
|
1607
|
-
id:
|
|
1608
|
-
tenantId:
|
|
1609
|
-
scopes: Schema.optional<Schema
|
|
1610
|
-
metadata: Schema.optional<Schema
|
|
1655
|
+
declare const Subject: Schema.Union<readonly [Schema.Struct<{
|
|
1656
|
+
readonly type: Schema.Literal<"user">;
|
|
1657
|
+
readonly id: Schema.String;
|
|
1658
|
+
readonly tenantId: Schema.String;
|
|
1659
|
+
readonly scopes: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1660
|
+
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
|
|
1611
1661
|
}>, Schema.Struct<{
|
|
1612
|
-
type: Schema.Literal<
|
|
1613
|
-
id:
|
|
1614
|
-
tenantId:
|
|
1615
|
-
scopes: Schema.optional<Schema
|
|
1616
|
-
metadata: Schema.optional<Schema
|
|
1662
|
+
readonly type: Schema.Literal<"apiKey">;
|
|
1663
|
+
readonly id: Schema.String;
|
|
1664
|
+
readonly tenantId: Schema.String;
|
|
1665
|
+
readonly scopes: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1666
|
+
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
|
|
1617
1667
|
}>, Schema.Struct<{
|
|
1618
|
-
type: Schema.Literal<
|
|
1619
|
-
id:
|
|
1620
|
-
tenantId:
|
|
1668
|
+
readonly type: Schema.Literal<"serviceAccount">;
|
|
1669
|
+
readonly id: Schema.String;
|
|
1670
|
+
readonly tenantId: Schema.String;
|
|
1621
1671
|
/** Application actor used for audit columns; null means machine work with
|
|
1622
1672
|
* no application actor. Identity only, never a permission grant. */
|
|
1623
|
-
auditActorId: Schema.
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
scopes: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
1627
|
-
metadata: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
|
|
1673
|
+
readonly auditActorId: Schema.optionalKey<Schema.NullOr<Schema.String>>;
|
|
1674
|
+
readonly scopes: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1675
|
+
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
|
|
1628
1676
|
}>, Schema.Struct<{
|
|
1629
|
-
type: Schema.Literal<
|
|
1630
|
-
id:
|
|
1631
|
-
tenantId: Schema.NullOr<
|
|
1677
|
+
readonly type: Schema.Literal<"anonymous">;
|
|
1678
|
+
readonly id: Schema.Null;
|
|
1679
|
+
readonly tenantId: Schema.NullOr<Schema.String>;
|
|
1632
1680
|
/**
|
|
1633
1681
|
* Set when this caller PRESENTED a credential and it was rejected — an
|
|
1634
1682
|
* expired token above all. Absent when they presented none.
|
|
@@ -1645,21 +1693,21 @@ declare const Subject: Schema.Union<[Schema.Struct<{
|
|
|
1645
1693
|
* must not break an `openAccess` procedure that needs no session at all. The
|
|
1646
1694
|
* fact travels, and only a guard that actually refuses spends it.
|
|
1647
1695
|
*/
|
|
1648
|
-
credentialRejected: Schema.optional<
|
|
1696
|
+
readonly credentialRejected: Schema.optional<Schema.String>;
|
|
1649
1697
|
}>, Schema.Struct<{
|
|
1650
|
-
type: Schema.Literal<
|
|
1651
|
-
id:
|
|
1652
|
-
tenantId:
|
|
1653
|
-
scopes: Schema.optional<Schema
|
|
1654
|
-
metadata: Schema.optional<Schema
|
|
1698
|
+
readonly type: Schema.Literal<"system">;
|
|
1699
|
+
readonly id: Schema.String;
|
|
1700
|
+
readonly tenantId: Schema.Null;
|
|
1701
|
+
readonly scopes: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1702
|
+
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
|
|
1655
1703
|
}>, Schema.Struct<{
|
|
1656
|
-
type: Schema.Literal<
|
|
1657
|
-
id:
|
|
1704
|
+
readonly type: Schema.Literal<"service">;
|
|
1705
|
+
readonly id: Schema.String;
|
|
1658
1706
|
/** The calling app's name, as the callee lists it in `serviceCallers`. */
|
|
1659
|
-
service:
|
|
1660
|
-
tenantId:
|
|
1661
|
-
scopes: Schema.optional<Schema
|
|
1662
|
-
metadata: Schema.optional<Schema
|
|
1707
|
+
readonly service: Schema.String;
|
|
1708
|
+
readonly tenantId: Schema.Null;
|
|
1709
|
+
readonly scopes: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1710
|
+
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
|
|
1663
1711
|
}>]>;
|
|
1664
1712
|
|
|
1665
1713
|
declare type Subject = typeof Subject.Type;
|
|
@@ -1737,7 +1785,7 @@ declare interface UpdateTarget<Input = unknown, Row = unknown, Item = Record<str
|
|
|
1737
1785
|
export declare const wireExample: (example: {
|
|
1738
1786
|
readonly request?: unknown;
|
|
1739
1787
|
readonly response?: unknown;
|
|
1740
|
-
}, wireInput: Schema.
|
|
1788
|
+
}, wireInput: Schema.Top, wireOutput: Schema.Top) => {
|
|
1741
1789
|
readonly request?: unknown;
|
|
1742
1790
|
readonly response?: unknown;
|
|
1743
1791
|
};
|