@tai42/api-client 19.3.0 → 21.0.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/README.md +29 -0
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +6 -4
- package/dist/agents.js.map +1 -1
- package/dist/client/agents-client.d.ts.map +1 -1
- package/dist/client/agents-client.js +3 -2
- package/dist/client/agents-client.js.map +1 -1
- package/dist/client/auth-client.d.ts +143 -90
- package/dist/client/auth-client.d.ts.map +1 -1
- package/dist/client/auth-client.js +81 -25
- package/dist/client/auth-client.js.map +1 -1
- package/dist/client/backend-client.d.ts +14 -13
- package/dist/client/backend-client.d.ts.map +1 -1
- package/dist/client/backend-client.js +7 -3
- package/dist/client/backend-client.js.map +1 -1
- package/dist/client/backup-client.d.ts +45 -19
- package/dist/client/backup-client.d.ts.map +1 -1
- package/dist/client/backup-client.js +8 -3
- package/dist/client/backup-client.js.map +1 -1
- package/dist/client/capabilities-client.d.ts +20 -16
- package/dist/client/capabilities-client.d.ts.map +1 -1
- package/dist/client/capabilities-client.js +3 -2
- package/dist/client/capabilities-client.js.map +1 -1
- package/dist/client/channels-client.d.ts.map +1 -1
- package/dist/client/channels-client.js +2 -1
- package/dist/client/channels-client.js.map +1 -1
- package/dist/client/config-client.d.ts +44 -17
- package/dist/client/config-client.d.ts.map +1 -1
- package/dist/client/config-client.js +10 -4
- package/dist/client/config-client.js.map +1 -1
- package/dist/client/connectors-client.d.ts +270 -81
- package/dist/client/connectors-client.d.ts.map +1 -1
- package/dist/client/connectors-client.js +38 -10
- package/dist/client/connectors-client.js.map +1 -1
- package/dist/client/conversations-client.d.ts +440 -86
- package/dist/client/conversations-client.d.ts.map +1 -1
- package/dist/client/conversations-client.js +46 -17
- package/dist/client/conversations-client.js.map +1 -1
- package/dist/client/hooks-client.d.ts +3 -3
- package/dist/client/hooks-client.d.ts.map +1 -1
- package/dist/client/hooks-client.js +12 -7
- package/dist/client/hooks-client.js.map +1 -1
- package/dist/client/index.d.ts +2252 -864
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +10 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/interactions-client.d.ts +19 -14
- package/dist/client/interactions-client.d.ts.map +1 -1
- package/dist/client/interactions-client.js +21 -9
- package/dist/client/interactions-client.js.map +1 -1
- package/dist/client/login-client.d.ts +18 -17
- package/dist/client/login-client.d.ts.map +1 -1
- package/dist/client/login-client.js +8 -4
- package/dist/client/login-client.js.map +1 -1
- package/dist/client/manifest-client.d.ts +276 -105
- package/dist/client/manifest-client.d.ts.map +1 -1
- package/dist/client/manifest-client.js +22 -16
- package/dist/client/manifest-client.js.map +1 -1
- package/dist/client/marketplace-client.d.ts +181 -51
- package/dist/client/marketplace-client.d.ts.map +1 -1
- package/dist/client/marketplace-client.js +23 -12
- package/dist/client/marketplace-client.js.map +1 -1
- package/dist/client/mcp-config-schema-client.d.ts.map +1 -1
- package/dist/client/mcp-config-schema-client.js +2 -1
- package/dist/client/mcp-config-schema-client.js.map +1 -1
- package/dist/client/notifications-client.d.ts +44 -14
- package/dist/client/notifications-client.d.ts.map +1 -1
- package/dist/client/notifications-client.js +2 -1
- package/dist/client/notifications-client.js.map +1 -1
- package/dist/client/observability-client.d.ts +78 -38
- package/dist/client/observability-client.d.ts.map +1 -1
- package/dist/client/observability-client.js +29 -6
- package/dist/client/observability-client.js.map +1 -1
- package/dist/client/plugins-client.d.ts +8 -6
- package/dist/client/plugins-client.d.ts.map +1 -1
- package/dist/client/plugins-client.js +2 -1
- package/dist/client/plugins-client.js.map +1 -1
- package/dist/client/policy-client.d.ts +4 -4
- package/dist/client/policy-client.d.ts.map +1 -1
- package/dist/client/policy-client.js +11 -4
- package/dist/client/policy-client.js.map +1 -1
- package/dist/client/presets-client.d.ts +84 -39
- package/dist/client/presets-client.d.ts.map +1 -1
- package/dist/client/presets-client.js +25 -13
- package/dist/client/presets-client.js.map +1 -1
- package/dist/client/profiles-client.d.ts +40 -33
- package/dist/client/profiles-client.d.ts.map +1 -1
- package/dist/client/profiles-client.js +15 -10
- package/dist/client/profiles-client.js.map +1 -1
- package/dist/client/schedules-client.d.ts +21 -17
- package/dist/client/schedules-client.d.ts.map +1 -1
- package/dist/client/schedules-client.js +8 -5
- package/dist/client/schedules-client.js.map +1 -1
- package/dist/client/settings-schema-client.d.ts +1 -1
- package/dist/client/settings-schema-client.d.ts.map +1 -1
- package/dist/client/settings-schema-client.js +2 -1
- package/dist/client/settings-schema-client.js.map +1 -1
- package/dist/client/states-client.d.ts +215 -87
- package/dist/client/states-client.d.ts.map +1 -1
- package/dist/client/states-client.js +98 -37
- package/dist/client/states-client.js.map +1 -1
- package/dist/client/storage-client.d.ts +5 -5
- package/dist/client/storage-client.d.ts.map +1 -1
- package/dist/client/storage-client.js +24 -12
- package/dist/client/storage-client.js.map +1 -1
- package/dist/client/sub-mcp-client.d.ts +3 -1
- package/dist/client/sub-mcp-client.d.ts.map +1 -1
- package/dist/client/sub-mcp-client.js +9 -4
- package/dist/client/sub-mcp-client.js.map +1 -1
- package/dist/client/system-client.d.ts +2 -2
- package/dist/client/system-client.d.ts.map +1 -1
- package/dist/client/system-client.js +2 -1
- package/dist/client/system-client.js.map +1 -1
- package/dist/client/templates-client.d.ts +65 -6
- package/dist/client/templates-client.d.ts.map +1 -1
- package/dist/client/templates-client.js +25 -7
- package/dist/client/templates-client.js.map +1 -1
- package/dist/client/tool-extensions-client.d.ts +41 -16
- package/dist/client/tool-extensions-client.d.ts.map +1 -1
- package/dist/client/tool-extensions-client.js +6 -4
- package/dist/client/tool-extensions-client.js.map +1 -1
- package/dist/client/tool-meta-client.d.ts +8 -8
- package/dist/client/tool-meta-client.d.ts.map +1 -1
- package/dist/client/tool-meta-client.js +12 -8
- package/dist/client/tool-meta-client.js.map +1 -1
- package/dist/client/tools-client.d.ts +150 -23
- package/dist/client/tools-client.d.ts.map +1 -1
- package/dist/client/tools-client.js +8 -8
- package/dist/client/tools-client.js.map +1 -1
- package/dist/client/trigger-links-client.d.ts +11 -9
- package/dist/client/trigger-links-client.d.ts.map +1 -1
- package/dist/client/trigger-links-client.js +4 -4
- package/dist/client/trigger-links-client.js.map +1 -1
- package/dist/fleet-report.d.ts +21 -5
- package/dist/fleet-report.d.ts.map +1 -1
- package/dist/fleet-report.js +31 -6
- package/dist/fleet-report.js.map +1 -1
- package/dist/generated/api-routes.d.ts +1014 -0
- package/dist/generated/api-routes.d.ts.map +1 -0
- package/dist/generated/api-routes.js +322 -0
- package/dist/generated/api-routes.js.map +1 -0
- package/dist/generated/openapi-schemas.d.ts +12425 -0
- package/dist/generated/openapi-schemas.d.ts.map +1 -0
- package/dist/generated/openapi-schemas.js +671 -0
- package/dist/generated/openapi-schemas.js.map +1 -0
- package/dist/generated/served-schemas.d.ts +6697 -392
- package/dist/generated/served-schemas.d.ts.map +1 -1
- package/dist/generated/served-schemas.js +7061 -46
- package/dist/generated/served-schemas.js.map +1 -1
- package/dist/headers.d.ts +4 -0
- package/dist/headers.d.ts.map +1 -0
- package/dist/headers.js +4 -0
- package/dist/headers.js.map +1 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +4 -3
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/api-keys.d.ts +14 -12
- package/dist/schemas/api-keys.d.ts.map +1 -1
- package/dist/schemas/api-keys.js +9 -23
- package/dist/schemas/api-keys.js.map +1 -1
- package/dist/schemas/auth-routes.d.ts +34 -29
- package/dist/schemas/auth-routes.d.ts.map +1 -1
- package/dist/schemas/auth-routes.js +22 -27
- package/dist/schemas/auth-routes.js.map +1 -1
- package/dist/schemas/backup.d.ts +157 -36
- package/dist/schemas/backup.d.ts.map +1 -1
- package/dist/schemas/backup.js +27 -26
- package/dist/schemas/backup.js.map +1 -1
- package/dist/schemas/capabilities.d.ts +32 -22
- package/dist/schemas/capabilities.d.ts.map +1 -1
- package/dist/schemas/capabilities.js +15 -40
- package/dist/schemas/capabilities.js.map +1 -1
- package/dist/schemas/channels.d.ts +1 -1
- package/dist/schemas/channels.d.ts.map +1 -1
- package/dist/schemas/channels.js +2 -5
- package/dist/schemas/channels.js.map +1 -1
- package/dist/schemas/config.d.ts.map +1 -1
- package/dist/schemas/config.js +4 -6
- package/dist/schemas/config.js.map +1 -1
- package/dist/schemas/connectors.d.ts +381 -185
- package/dist/schemas/connectors.d.ts.map +1 -1
- package/dist/schemas/connectors.js +54 -101
- package/dist/schemas/connectors.js.map +1 -1
- package/dist/schemas/conversations.d.ts +970 -241
- package/dist/schemas/conversations.d.ts.map +1 -1
- package/dist/schemas/conversations.js +40 -134
- package/dist/schemas/conversations.js.map +1 -1
- package/dist/schemas/extensions.d.ts +9 -6
- package/dist/schemas/extensions.d.ts.map +1 -1
- package/dist/schemas/extensions.js +6 -4
- package/dist/schemas/extensions.js.map +1 -1
- package/dist/schemas/fleet.d.ts +153 -99
- package/dist/schemas/fleet.d.ts.map +1 -1
- package/dist/schemas/fleet.js +41 -51
- package/dist/schemas/fleet.js.map +1 -1
- package/dist/schemas/hooks.d.ts +34 -34
- package/dist/schemas/hooks.d.ts.map +1 -1
- package/dist/schemas/hooks.js +15 -34
- package/dist/schemas/hooks.js.map +1 -1
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/interactions.d.ts +146 -123
- package/dist/schemas/interactions.d.ts.map +1 -1
- package/dist/schemas/interactions.js +44 -129
- package/dist/schemas/interactions.js.map +1 -1
- package/dist/schemas/login.d.ts +36 -37
- package/dist/schemas/login.d.ts.map +1 -1
- package/dist/schemas/login.js +8 -42
- package/dist/schemas/login.js.map +1 -1
- package/dist/schemas/manifest-mcp.d.ts +61 -35
- package/dist/schemas/manifest-mcp.d.ts.map +1 -1
- package/dist/schemas/manifest-mcp.js +13 -19
- package/dist/schemas/manifest-mcp.js.map +1 -1
- package/dist/schemas/marketplace.d.ts +219 -133
- package/dist/schemas/marketplace.d.ts.map +1 -1
- package/dist/schemas/marketplace.js +35 -120
- package/dist/schemas/marketplace.js.map +1 -1
- package/dist/schemas/members.d.ts +161 -0
- package/dist/schemas/members.d.ts.map +1 -0
- package/dist/schemas/members.js +73 -0
- package/dist/schemas/members.js.map +1 -0
- package/dist/schemas/notifications.d.ts +113 -41
- package/dist/schemas/notifications.d.ts.map +1 -1
- package/dist/schemas/notifications.js +9 -35
- package/dist/schemas/notifications.js.map +1 -1
- package/dist/schemas/observability.d.ts +174 -72
- package/dist/schemas/observability.d.ts.map +1 -1
- package/dist/schemas/observability.js +23 -76
- package/dist/schemas/observability.js.map +1 -1
- package/dist/schemas/policy.d.ts +11 -11
- package/dist/schemas/policy.d.ts.map +1 -1
- package/dist/schemas/policy.js +5 -12
- package/dist/schemas/policy.js.map +1 -1
- package/dist/schemas/presets.d.ts +109 -64
- package/dist/schemas/presets.d.ts.map +1 -1
- package/dist/schemas/presets.js +12 -48
- package/dist/schemas/presets.js.map +1 -1
- package/dist/schemas/principals.d.ts +28 -21
- package/dist/schemas/principals.d.ts.map +1 -1
- package/dist/schemas/principals.js +13 -25
- package/dist/schemas/principals.js.map +1 -1
- package/dist/schemas/profiles.d.ts +75 -63
- package/dist/schemas/profiles.d.ts.map +1 -1
- package/dist/schemas/profiles.js +24 -54
- package/dist/schemas/profiles.js.map +1 -1
- package/dist/schemas/roles.d.ts +22 -22
- package/dist/schemas/roles.d.ts.map +1 -1
- package/dist/schemas/roles.js +10 -17
- package/dist/schemas/roles.js.map +1 -1
- package/dist/schemas/schedules.d.ts +21 -15
- package/dist/schemas/schedules.d.ts.map +1 -1
- package/dist/schemas/schedules.js +4 -13
- package/dist/schemas/schedules.js.map +1 -1
- package/dist/schemas/served.d.ts +6373 -194
- package/dist/schemas/served.d.ts.map +1 -1
- package/dist/schemas/served.js +21 -0
- package/dist/schemas/served.js.map +1 -1
- package/dist/schemas/settings-schema.d.ts +1 -1
- package/dist/schemas/settings-schema.d.ts.map +1 -1
- package/dist/schemas/settings-schema.js +17 -19
- package/dist/schemas/settings-schema.js.map +1 -1
- package/dist/schemas/setup.d.ts +6 -6
- package/dist/schemas/setup.d.ts.map +1 -1
- package/dist/schemas/setup.js +2 -11
- package/dist/schemas/setup.js.map +1 -1
- package/dist/schemas/states.d.ts +450 -135
- package/dist/schemas/states.d.ts.map +1 -1
- package/dist/schemas/states.js +76 -140
- package/dist/schemas/states.js.map +1 -1
- package/dist/schemas/storage.d.ts +7 -8
- package/dist/schemas/storage.d.ts.map +1 -1
- package/dist/schemas/storage.js +8 -17
- package/dist/schemas/storage.js.map +1 -1
- package/dist/schemas/studio-plugins.d.ts +24 -18
- package/dist/schemas/studio-plugins.d.ts.map +1 -1
- package/dist/schemas/studio-plugins.js +5 -19
- package/dist/schemas/studio-plugins.js.map +1 -1
- package/dist/schemas/sub-mcp.d.ts +11 -8
- package/dist/schemas/sub-mcp.d.ts.map +1 -1
- package/dist/schemas/sub-mcp.js +10 -19
- package/dist/schemas/sub-mcp.js.map +1 -1
- package/dist/schemas/system-kinds.d.ts +76 -46
- package/dist/schemas/system-kinds.d.ts.map +1 -1
- package/dist/schemas/system-kinds.js +11 -28
- package/dist/schemas/system-kinds.js.map +1 -1
- package/dist/schemas/templates.d.ts +83 -25
- package/dist/schemas/templates.d.ts.map +1 -1
- package/dist/schemas/templates.js +8 -9
- package/dist/schemas/templates.js.map +1 -1
- package/dist/schemas/tool-meta.d.ts +15 -15
- package/dist/schemas/tool-meta.d.ts.map +1 -1
- package/dist/schemas/tool-meta.js +6 -21
- package/dist/schemas/tool-meta.js.map +1 -1
- package/dist/schemas/tools.d.ts +177 -56
- package/dist/schemas/tools.d.ts.map +1 -1
- package/dist/schemas/tools.js +20 -41
- package/dist/schemas/tools.js.map +1 -1
- package/dist/schemas/trigger-links.d.ts +22 -17
- package/dist/schemas/trigger-links.d.ts.map +1 -1
- package/dist/schemas/trigger-links.js +7 -27
- package/dist/schemas/trigger-links.js.map +1 -1
- package/dist/tool-runs.d.ts +175 -54
- package/dist/tool-runs.d.ts.map +1 -1
- package/dist/tool-runs.js +33 -34
- package/dist/tool-runs.js.map +1 -1
- package/package.json +4 -3
- package/src/agents.ts +16 -4
- package/src/client/agents-client.ts +3 -2
- package/src/client/auth-client.ts +134 -34
- package/src/client/backend-client.ts +8 -3
- package/src/client/backup-client.ts +8 -3
- package/src/client/capabilities-client.ts +4 -2
- package/src/client/channels-client.ts +3 -1
- package/src/client/config-client.ts +13 -5
- package/src/client/connectors-client.ts +91 -16
- package/src/client/conversations-client.ts +79 -30
- package/src/client/hooks-client.ts +25 -12
- package/src/client/index.ts +16 -4
- package/src/client/interactions-client.ts +40 -16
- package/src/client/login-client.ts +8 -4
- package/src/client/manifest-client.ts +48 -24
- package/src/client/marketplace-client.ts +23 -12
- package/src/client/mcp-config-schema-client.ts +2 -1
- package/src/client/notifications-client.ts +2 -1
- package/src/client/observability-client.ts +60 -8
- package/src/client/plugins-client.ts +2 -1
- package/src/client/policy-client.ts +24 -9
- package/src/client/presets-client.ts +26 -13
- package/src/client/profiles-client.ts +53 -24
- package/src/client/schedules-client.ts +14 -20
- package/src/client/settings-schema-client.ts +2 -1
- package/src/client/states-client.ts +151 -49
- package/src/client/storage-client.ts +43 -14
- package/src/client/sub-mcp-client.ts +10 -4
- package/src/client/system-client.ts +2 -1
- package/src/client/templates-client.ts +26 -7
- package/src/client/tool-extensions-client.ts +14 -7
- package/src/client/tool-meta-client.ts +46 -21
- package/src/client/tools-client.ts +13 -8
- package/src/client/trigger-links-client.ts +10 -6
- package/src/fleet-report.ts +48 -7
- package/src/generated/api-routes.ts +327 -0
- package/src/generated/openapi-schemas.ts +1508 -0
- package/src/generated/served-schemas.ts +7118 -82
- package/src/headers.ts +4 -0
- package/src/http.ts +4 -3
- package/src/index.ts +52 -10
- package/src/schemas/api-keys.ts +9 -25
- package/src/schemas/auth-routes.ts +27 -28
- package/src/schemas/backup.ts +33 -31
- package/src/schemas/capabilities.ts +16 -39
- package/src/schemas/channels.ts +4 -4
- package/src/schemas/config.ts +6 -6
- package/src/schemas/connectors.ts +61 -102
- package/src/schemas/conversations.ts +43 -133
- package/src/schemas/extensions.ts +7 -4
- package/src/schemas/fleet.ts +51 -51
- package/src/schemas/hooks.ts +18 -37
- package/src/schemas/index.ts +1 -1
- package/src/schemas/interactions.ts +48 -131
- package/src/schemas/login.ts +10 -41
- package/src/schemas/manifest-mcp.ts +13 -19
- package/src/schemas/marketplace.ts +37 -120
- package/src/schemas/members.ts +91 -0
- package/src/schemas/notifications.ts +10 -34
- package/src/schemas/observability.ts +34 -79
- package/src/schemas/policy.ts +5 -12
- package/src/schemas/presets.ts +13 -48
- package/src/schemas/principals.ts +17 -24
- package/src/schemas/profiles.ts +25 -55
- package/src/schemas/roles.ts +11 -17
- package/src/schemas/schedules.ts +4 -15
- package/src/schemas/served.ts +33 -0
- package/src/schemas/settings-schema.ts +18 -23
- package/src/schemas/setup.ts +4 -10
- package/src/schemas/states.ts +88 -139
- package/src/schemas/storage.ts +10 -16
- package/src/schemas/studio-plugins.ts +8 -19
- package/src/schemas/sub-mcp.ts +12 -18
- package/src/schemas/system-kinds.ts +12 -29
- package/src/schemas/templates.ts +8 -10
- package/src/schemas/tool-meta.ts +8 -20
- package/src/schemas/tools.ts +22 -45
- package/src/schemas/trigger-links.ts +8 -26
- package/src/tool-runs.ts +47 -38
- package/dist/client/web-entry-gate-client.d.ts +0 -34
- package/dist/client/web-entry-gate-client.d.ts.map +0 -1
- package/dist/client/web-entry-gate-client.js +0 -25
- package/dist/client/web-entry-gate-client.js.map +0 -1
- package/dist/schemas/web-entry.d.ts +0 -45
- package/dist/schemas/web-entry.d.ts.map +0 -1
- package/dist/schemas/web-entry.js +0 -36
- package/dist/schemas/web-entry.js.map +0 -1
- package/src/client/web-entry-gate-client.ts +0 -45
- package/src/schemas/web-entry.ts +0 -46
package/src/schemas/fleet.ts
CHANGED
|
@@ -1,37 +1,29 @@
|
|
|
1
1
|
/** Backend identity and worker-bus fleet/fan-out response schemas. */
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import * as openapi from '../generated/openapi-schemas';
|
|
5
5
|
|
|
6
6
|
/** `GET /api/backend` — the execution-backend identity, or the absent sentinel
|
|
7
7
|
* (`present: false`, a 200) when no backend plugin is registered. Backend identity
|
|
8
8
|
* is kept distinct from the fleet: the fleet doors ride the app's worker bus and
|
|
9
9
|
* need no backend at all. */
|
|
10
|
-
export const backendInfo =
|
|
11
|
-
present: z.boolean(),
|
|
12
|
-
backend: z.string().nullable(),
|
|
13
|
-
module: z.string().nullable(),
|
|
14
|
-
});
|
|
10
|
+
export const backendInfo = openapi.backendInfo;
|
|
15
11
|
export type BackendInfo = z.infer<typeof backendInfo>;
|
|
16
12
|
|
|
17
13
|
/** The two worker kinds that join the bus: an ASGI `serve` worker or a
|
|
18
14
|
* `backend` runtime process. A drift throws `ApiSchemaError`. */
|
|
19
|
-
export const workerKind =
|
|
15
|
+
export const workerKind = openapi.workerKind;
|
|
20
16
|
export type WorkerKind = z.infer<typeof workerKind>;
|
|
21
17
|
|
|
22
18
|
/** The lifecycle state a worker advertises in its presence value: `ready` once its
|
|
23
19
|
* resync has converged, `resyncing` while a boot/reconnect resync runs, `recycling`
|
|
24
20
|
* once it has begun a graceful self-exit. A drift throws `ApiSchemaError`. */
|
|
25
|
-
export const workerState =
|
|
21
|
+
export const workerState = openapi.workerState;
|
|
26
22
|
export type WorkerState = z.infer<typeof workerState>;
|
|
27
23
|
|
|
28
24
|
/** The last op a worker applied, stamped onto its presence row after the terminal
|
|
29
25
|
* reply. `outcome` is the free op-outcome string; `at` is the ISO instant it landed. */
|
|
30
|
-
export const workerLastOp =
|
|
31
|
-
op: z.string(),
|
|
32
|
-
outcome: z.string(),
|
|
33
|
-
at: z.string(),
|
|
34
|
-
});
|
|
26
|
+
export const workerLastOp = openapi.lastOp;
|
|
35
27
|
export type WorkerLastOp = z.infer<typeof workerLastOp>;
|
|
36
28
|
|
|
37
29
|
/**
|
|
@@ -45,17 +37,7 @@ export type WorkerLastOp = z.infer<typeof workerLastOp>;
|
|
|
45
37
|
* only freshness signal a client reads, never a client-side threshold; `last_op` is the
|
|
46
38
|
* worker's last applied op, or `null` before it has applied one.
|
|
47
39
|
*/
|
|
48
|
-
export const fleetWorker =
|
|
49
|
-
name: z.string(),
|
|
50
|
-
kind: workerKind,
|
|
51
|
-
pid: z.number(),
|
|
52
|
-
generation: z.number(),
|
|
53
|
-
joined_at: z.string(),
|
|
54
|
-
beat_at: z.string(),
|
|
55
|
-
state: workerState,
|
|
56
|
-
stale: z.boolean(),
|
|
57
|
-
last_op: workerLastOp.nullable(),
|
|
58
|
-
});
|
|
40
|
+
export const fleetWorker = openapi.workerListingRow;
|
|
59
41
|
export type FleetWorker = z.infer<typeof fleetWorker>;
|
|
60
42
|
|
|
61
43
|
/**
|
|
@@ -64,7 +46,7 @@ export type FleetWorker = z.infer<typeof fleetWorker>;
|
|
|
64
46
|
* processes alike), not only backend workers. A census read that fails surfaces as a
|
|
65
47
|
* loud 500, never a fabricated empty fleet.
|
|
66
48
|
*/
|
|
67
|
-
export const fleetWorkers =
|
|
49
|
+
export const fleetWorkers = openapi.workerListing;
|
|
68
50
|
export type FleetWorkers = z.infer<typeof fleetWorkers>;
|
|
69
51
|
|
|
70
52
|
/**
|
|
@@ -76,16 +58,7 @@ export type FleetWorkers = z.infer<typeof fleetWorkers>;
|
|
|
76
58
|
* `recycling` is departing, `stale` is a quiet row past the freshness bound carrying no
|
|
77
59
|
* convergence promise).
|
|
78
60
|
*/
|
|
79
|
-
export const fleetOutcome =
|
|
80
|
-
'applied',
|
|
81
|
-
'failed',
|
|
82
|
-
'missing',
|
|
83
|
-
'departed',
|
|
84
|
-
'timed_out',
|
|
85
|
-
'resyncing',
|
|
86
|
-
'recycling',
|
|
87
|
-
'stale',
|
|
88
|
-
]);
|
|
61
|
+
export const fleetOutcome = openapi.opOutcome;
|
|
89
62
|
export type FleetOutcome = z.infer<typeof fleetOutcome>;
|
|
90
63
|
|
|
91
64
|
/**
|
|
@@ -94,13 +67,7 @@ export type FleetOutcome = z.infer<typeof fleetOutcome>;
|
|
|
94
67
|
* publisher's report text for a computed gap outcome (`missing`/`departed`/`timed_out`/
|
|
95
68
|
* `resyncing`/`recycling`/`stale`). A drift throws `ApiSchemaError`.
|
|
96
69
|
*/
|
|
97
|
-
export const fleetWorkerResult =
|
|
98
|
-
name: z.string(),
|
|
99
|
-
outcome: fleetOutcome,
|
|
100
|
-
payload: jsonValue,
|
|
101
|
-
error: z.string().nullable(),
|
|
102
|
-
detail: z.string().nullable(),
|
|
103
|
-
});
|
|
70
|
+
export const fleetWorkerResult = openapi.workerResult;
|
|
104
71
|
export type FleetWorkerResult = z.infer<typeof fleetWorkerResult>;
|
|
105
72
|
|
|
106
73
|
/**
|
|
@@ -114,13 +81,7 @@ export type FleetWorkerResult = z.infer<typeof fleetWorkerResult>;
|
|
|
114
81
|
* reload; it is also the body the mode-wrapped {@link fleetReportFanout} carries under its
|
|
115
82
|
* `fleet` / `unreachable` modes.
|
|
116
83
|
*/
|
|
117
|
-
export const fleetResult =
|
|
118
|
-
op: z.string(),
|
|
119
|
-
reachable: z.boolean(),
|
|
120
|
-
local_only: z.boolean(),
|
|
121
|
-
results: z.array(fleetWorkerResult),
|
|
122
|
-
error: z.string().nullable(),
|
|
123
|
-
});
|
|
84
|
+
export const fleetResult = openapi.fleetResult;
|
|
124
85
|
export type FleetResult = z.infer<typeof fleetResult>;
|
|
125
86
|
|
|
126
87
|
/**
|
|
@@ -146,9 +107,48 @@ export type FleetReloadResult = z.infer<typeof fleetReloadResult>;
|
|
|
146
107
|
* unknown-key stripping would otherwise silently drop the field, hiding a failed
|
|
147
108
|
* propagation from the shared fleet-report handler. A drift throws `ApiSchemaError`.
|
|
148
109
|
*/
|
|
110
|
+
// Hand-written: the spec publishes a fan-out as one object with optional fields; the client
|
|
111
|
+
// discriminates its three modes.
|
|
112
|
+
const fanoutFleetResult = openapi.fleetResult.omit({ ok: true });
|
|
149
113
|
export const fleetReportFanout = z.discriminatedUnion('mode', [
|
|
150
114
|
z.object({ mode: z.literal('local-only'), note: z.string() }),
|
|
151
|
-
|
|
152
|
-
|
|
115
|
+
fanoutFleetResult.extend({ mode: z.literal('fleet') }),
|
|
116
|
+
fanoutFleetResult.extend({ mode: z.literal('unreachable') }),
|
|
153
117
|
]);
|
|
154
118
|
export type FleetReportFanout = z.infer<typeof fleetReportFanout>;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* One worker line of a fleet recycle roll. `status` is `recycled` (confirmed on
|
|
122
|
+
* reality), `timed-out` or `failed` (the target the roll stopped at — `detail` names
|
|
123
|
+
* why), or `self-deferred` (the worker that took the change recycles itself after
|
|
124
|
+
* replying). `generation_before` is the life that was recycled.
|
|
125
|
+
*/
|
|
126
|
+
export const recycleEntry = openapi.recycleEntry;
|
|
127
|
+
export type RecycleEntry = z.infer<typeof recycleEntry>;
|
|
128
|
+
|
|
129
|
+
/** One newly-ready worker life observed since the change began — capacity evidence. */
|
|
130
|
+
export const freshLife = openapi.freshLife;
|
|
131
|
+
export type FreshLife = z.infer<typeof freshLife>;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Where a recycle roll stopped and why: `name` is the target it stopped at, or `null`
|
|
135
|
+
* when the bus could not be read before a target was reached.
|
|
136
|
+
*/
|
|
137
|
+
export const recycleStop = openapi.recycleStop;
|
|
138
|
+
export type RecycleStop = z.infer<typeof recycleStop>;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The report of a fleet recycle roll an env change carrying a recycle-class key ran:
|
|
142
|
+
* the worker lines, the fresh lives, and where the roll stopped (`null` when it ran to
|
|
143
|
+
* its end). Names only — never an env value.
|
|
144
|
+
*/
|
|
145
|
+
export const recycleRoll = openapi.recycleRoll;
|
|
146
|
+
export type RecycleRoll = z.infer<typeof recycleRoll>;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* One worker an operation names as still awaiting a respawn: its recycle-class `keys`
|
|
150
|
+
* changed in the stored env since its process bound them (at boot, or when the plugin that
|
|
151
|
+
* declares them was loaded), and nothing in the operation respawns it.
|
|
152
|
+
*/
|
|
153
|
+
export const awaitingWorker = openapi.awaitingWorker;
|
|
154
|
+
export type AwaitingWorker = z.infer<typeof awaitingWorker>;
|
package/src/schemas/hooks.ts
CHANGED
|
@@ -1,57 +1,38 @@
|
|
|
1
1
|
/** Hook listing, registration and topic-verifier response schemas. */
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import * as openapi from '../generated/openapi-schemas';
|
|
5
5
|
|
|
6
|
-
// The
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// bundle and re-exported at the top of this file, not defined here.
|
|
6
|
+
// The hook response schemas: the fire-door authority enum, the list rows and their
|
|
7
|
+
// wrapper, and the per-topic verifier/trigger metadata. The served hook DOCUMENT schemas
|
|
8
|
+
// (`hookSubject`/`hookParams`/`hookRegister`) are re-exported from `./served`.
|
|
10
9
|
|
|
11
10
|
/** A fire door — who may trigger a path, not what the fire may do. A string enum. */
|
|
12
|
-
export const triggerAuth =
|
|
13
|
-
'public',
|
|
14
|
-
'verifier',
|
|
15
|
-
'token',
|
|
16
|
-
'token+api_key',
|
|
17
|
-
'out-of-service',
|
|
18
|
-
]);
|
|
11
|
+
export const triggerAuth = openapi.hookListView.shape.trigger_auth.valueType;
|
|
19
12
|
export type TriggerAuth = z.infer<typeof triggerAuth>;
|
|
20
13
|
|
|
21
|
-
export const hookList =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
z.string(),
|
|
30
|
-
z.object({ verifier: z.string(), config: z.record(z.string(), z.unknown()) }),
|
|
31
|
-
)
|
|
32
|
-
.default({}),
|
|
33
|
-
// Per-topic fire door (topic → door). Tolerant of an older response omitting it.
|
|
34
|
-
trigger_auth: z.record(z.string(), triggerAuth).default({}),
|
|
14
|
+
export const hookList = openapi.hookListView.extend({
|
|
15
|
+
// Per-topic verifier bindings: the topic name maps to the verifier bound to it and that
|
|
16
|
+
// verifier's config (which carries a `secret_env` name, never a secret value). Hand-typed:
|
|
17
|
+
// the spec publishes a binding as an open value.
|
|
18
|
+
topic_verifiers: z.record(
|
|
19
|
+
z.string(),
|
|
20
|
+
z.object({ verifier: z.string(), config: z.record(z.string(), z.unknown()) }),
|
|
21
|
+
),
|
|
35
22
|
});
|
|
36
23
|
export type HookList = z.infer<typeof hookList>;
|
|
37
24
|
|
|
38
|
-
export const hookRegistered =
|
|
39
|
-
registered: z.boolean(),
|
|
40
|
-
name: z.string(),
|
|
41
|
-
});
|
|
25
|
+
export const hookRegistered = openapi.hookRegisterResult;
|
|
42
26
|
|
|
43
|
-
export const hookRemoved =
|
|
44
|
-
removed: z.boolean(),
|
|
45
|
-
name: z.string(),
|
|
46
|
-
});
|
|
27
|
+
export const hookRemoved = openapi.removedByName;
|
|
47
28
|
|
|
48
29
|
// The registered webhook-verifier catalog (`GET /api/hooks/verifiers`) — the
|
|
49
30
|
// sorted verifier NAMES only, never any verifier's config. An empty registry is a
|
|
50
31
|
// valid empty array. This is the ONLY source the topic-verifier bind picker reads.
|
|
51
|
-
export const hookVerifiers =
|
|
32
|
+
export const hookVerifiers = openapi.stringListResponse;
|
|
52
33
|
|
|
53
34
|
/** `PUT /api/hooks/topics/{topic}/verifier` — the bound topic + verifier name. */
|
|
54
|
-
export const topicVerifierSet =
|
|
35
|
+
export const topicVerifierSet = openapi.topicVerifierView;
|
|
55
36
|
|
|
56
37
|
/** `DELETE /api/hooks/topics/{topic}/verifier` — the unbound topic. */
|
|
57
|
-
export const topicVerifierRemoved =
|
|
38
|
+
export const topicVerifierRemoved = openapi.removedByTopic;
|
package/src/schemas/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './interactions';
|
|
|
15
15
|
export * from './login';
|
|
16
16
|
export * from './manifest-mcp';
|
|
17
17
|
export * from './marketplace';
|
|
18
|
+
export * from './members';
|
|
18
19
|
export * from './notifications';
|
|
19
20
|
export * from './observability';
|
|
20
21
|
export * from './policy';
|
|
@@ -36,4 +37,3 @@ export * from './templates';
|
|
|
36
37
|
export * from './tool-meta';
|
|
37
38
|
export * from './tools';
|
|
38
39
|
export * from './trigger-links';
|
|
39
|
-
export * from './web-entry';
|
|
@@ -1,69 +1,41 @@
|
|
|
1
1
|
/** Interaction question, answer and media response schemas. */
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import * as openapi from '../generated/openapi-schemas';
|
|
5
|
+
import * as served from '../generated/served-schemas';
|
|
5
6
|
|
|
6
7
|
// Shapes match the skeleton's interactions SSE contract: the SSE
|
|
7
8
|
// `interaction.add` frame carries the question and its answer format; the answer
|
|
8
9
|
// door returns { interaction_id, status }. `answered` is not a wire field — it
|
|
9
10
|
// is a client-side flag the stream hook flips on an `interaction.answered` event.
|
|
10
11
|
|
|
11
|
-
export const answerFormat =
|
|
12
|
+
export const answerFormat = openapi.answerFormat;
|
|
12
13
|
export type AnswerFormat = z.infer<typeof answerFormat>;
|
|
13
14
|
|
|
14
|
-
/** The kind of a
|
|
15
|
-
export const mediaKind =
|
|
15
|
+
/** The kind of a display-only media item: an image, a link, or a document, video or audio file. */
|
|
16
|
+
export const mediaKind = openapi.mediaKind;
|
|
16
17
|
export type MediaKind = z.infer<typeof mediaKind>;
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
* One item of a question's display-only media.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* so one malformed/hostile item is a loud per-item notice, not a whole-frame parse
|
|
23
|
-
* failure that would silently vanish an answerable question.
|
|
24
|
-
*
|
|
25
|
-
* `caption` is `.nullish()` (absent OR `null` both parse to a caption-less item):
|
|
26
|
-
* a caption-less item may arrive with the key omitted OR with an explicit `null`, so
|
|
27
|
-
* `.optional()` here would false-fail the explicit `null` and render a good image as
|
|
28
|
-
* malformed. `url` and `kind` are the only load-bearing fields; the image
|
|
29
|
-
* src scheme gate and the link neutralization are enforced by the renderer.
|
|
20
|
+
* One item of a question's display-only media. The renderer resolves `url` (the image src
|
|
21
|
+
* scheme gate and the link neutralization are enforced there); `caption` and `filename`
|
|
22
|
+
* are `null` when absent.
|
|
30
23
|
*/
|
|
31
|
-
export const interactionMediaItem =
|
|
32
|
-
kind: mediaKind,
|
|
33
|
-
url: z.string(),
|
|
34
|
-
caption: z.string().nullish(),
|
|
35
|
-
});
|
|
24
|
+
export const interactionMediaItem = openapi.mediaItem;
|
|
36
25
|
export type InteractionMediaItem = z.infer<typeof interactionMediaItem>;
|
|
37
26
|
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
* fetchable file — `image`/`document`/`audio`/`video` — never a `link`: a labelled
|
|
41
|
-
* anchor is question CONTEXT (see {@link mediaKind}), not a participant's sent file.
|
|
42
|
-
*/
|
|
43
|
-
export const attachmentMediaKind = z.enum(['image', 'document', 'audio', 'video']);
|
|
27
|
+
/** The kind of an inbound attachment carried on a transcript record. */
|
|
28
|
+
export const attachmentMediaKind = openapi.mediaKind;
|
|
44
29
|
export type AttachmentMediaKind = z.infer<typeof attachmentMediaKind>;
|
|
45
30
|
|
|
46
31
|
/**
|
|
47
32
|
* One inbound attachment a participant sent, projected onto a transcript record's
|
|
48
|
-
* `inbound_attachments`.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* `url` is the served-media reference the renderer resolves to the API origin (the
|
|
54
|
-
* same served-url discipline the ask-media renderer uses); the image src scheme gate
|
|
55
|
-
* and the per-item load-failure notice are enforced there. `caption` and `filename`
|
|
56
|
-
* are `.nullish()` (absent OR explicit `null` both parse to absent): the projection
|
|
57
|
-
* may omit the key OR emit `null`, so `.optional()` alone would false-fail an explicit
|
|
58
|
-
* `null`. `filename` is meaningful only for a `document`; the renderer shows it as the
|
|
59
|
-
* download label.
|
|
33
|
+
* `inbound_attachments`. `url` is the served-media reference the renderer resolves to the
|
|
34
|
+
* API origin (the same served-url discipline the ask-media renderer uses); the image src
|
|
35
|
+
* scheme gate and the per-item load-failure notice are enforced there. `filename` is
|
|
36
|
+
* meaningful only for a `document`; the renderer shows it as the download label.
|
|
60
37
|
*/
|
|
61
|
-
export const attachmentMediaItem =
|
|
62
|
-
kind: attachmentMediaKind,
|
|
63
|
-
url: z.string(),
|
|
64
|
-
caption: z.string().nullish(),
|
|
65
|
-
filename: z.string().nullish(),
|
|
66
|
-
});
|
|
38
|
+
export const attachmentMediaItem = openapi.mediaItem;
|
|
67
39
|
export type AttachmentMediaItem = z.infer<typeof attachmentMediaItem>;
|
|
68
40
|
|
|
69
41
|
/**
|
|
@@ -73,10 +45,7 @@ export type AttachmentMediaItem = z.infer<typeof attachmentMediaItem>;
|
|
|
73
45
|
* `enum` this way for one ask without republishing the form. Applied per property by
|
|
74
46
|
* the form preview (safeParsed), so a malformed entry is a loud notice, never silent.
|
|
75
47
|
*/
|
|
76
|
-
export const formOption =
|
|
77
|
-
value: z.string(),
|
|
78
|
-
label: z.string().nullish(),
|
|
79
|
-
});
|
|
48
|
+
export const formOption = openapi.formOption;
|
|
80
49
|
export type FormOption = z.infer<typeof formOption>;
|
|
81
50
|
|
|
82
51
|
/**
|
|
@@ -85,14 +54,11 @@ export type FormOption = z.infer<typeof formOption>;
|
|
|
85
54
|
* default to empty. The form preview safeParses this off `format_payload.data`, so a
|
|
86
55
|
* malformed block is a loud notice rather than a whole-frame parse failure.
|
|
87
56
|
*/
|
|
88
|
-
export const formData =
|
|
89
|
-
values: z.record(z.string(), z.unknown()).default({}),
|
|
90
|
-
options: z.record(z.string(), z.array(formOption)).default({}),
|
|
91
|
-
});
|
|
57
|
+
export const formData = openapi.formData;
|
|
92
58
|
export type FormData = z.infer<typeof formData>;
|
|
93
59
|
|
|
94
60
|
/** The kind of an ordered display block a page may carry alongside its input fields. */
|
|
95
|
-
export const displayBlockKind =
|
|
61
|
+
export const displayBlockKind = openapi.displayBlock.shape.kind;
|
|
96
62
|
export type DisplayBlockKind = z.infer<typeof displayBlockKind>;
|
|
97
63
|
|
|
98
64
|
/**
|
|
@@ -106,17 +72,11 @@ export type DisplayBlockKind = z.infer<typeof displayBlockKind>;
|
|
|
106
72
|
* whole-page parse failure. Applied per block by the preview (safeParsed via its page),
|
|
107
73
|
* so a malformed block is a loud notice, never silent.
|
|
108
74
|
*/
|
|
109
|
-
export const displayBlock =
|
|
110
|
-
kind: displayBlockKind,
|
|
111
|
-
text: z.string().nullish(),
|
|
112
|
-
src: z.string().nullish(),
|
|
113
|
-
alt: z.string().nullish(),
|
|
114
|
-
slot: z.string().nullish(),
|
|
115
|
-
});
|
|
75
|
+
export const displayBlock = openapi.displayBlock;
|
|
116
76
|
export type DisplayBlock = z.infer<typeof displayBlock>;
|
|
117
77
|
|
|
118
78
|
/** A page's role: an ordinary `input` page (default) or a terminal `review` summary. */
|
|
119
|
-
export const formPageKind =
|
|
79
|
+
export const formPageKind = openapi.formPage.shape.kind.unwrap();
|
|
120
80
|
export type FormPageKind = z.infer<typeof formPageKind>;
|
|
121
81
|
|
|
122
82
|
/**
|
|
@@ -131,18 +91,16 @@ export type FormPageKind = z.infer<typeof formPageKind>;
|
|
|
131
91
|
* and carries no new input fields; it defaults to `input`. Both are additive: an older
|
|
132
92
|
* payload ({title, fields}) parses unchanged.
|
|
133
93
|
*/
|
|
134
|
-
export const formPage =
|
|
135
|
-
title: z.string(),
|
|
136
|
-
fields: z.array(z.string()),
|
|
137
|
-
display: z.array(displayBlock).default([]),
|
|
138
|
-
kind: formPageKind.default('input'),
|
|
139
|
-
});
|
|
94
|
+
export const formPage = openapi.formPage;
|
|
140
95
|
export type FormPage = z.infer<typeof formPage>;
|
|
141
96
|
|
|
142
97
|
/** The `form` pages list (`format_payload.pages`), safeParsed as a whole by the preview. */
|
|
143
98
|
export const formPages = z.array(formPage);
|
|
144
99
|
export type FormPages = z.infer<typeof formPages>;
|
|
145
100
|
|
|
101
|
+
// The form reactions and the form update are hand-written: the spec carries them inside an
|
|
102
|
+
// open `format_payload` and an open reaction `update`.
|
|
103
|
+
|
|
146
104
|
/**
|
|
147
105
|
* When a `form` reacts while it is open (`format_payload.reactions`): the plain,
|
|
148
106
|
* renderer-readable description of WHEN the form calls its reaction handler. Absent ⇒ a
|
|
@@ -163,12 +121,12 @@ export const formReactions = z.object({
|
|
|
163
121
|
export type FormReactions = z.infer<typeof formReactions>;
|
|
164
122
|
|
|
165
123
|
/**
|
|
166
|
-
* The form update a reaction door returns (`POST /api/interactions/{id}/react
|
|
167
|
-
* same kind of data a form is sent with, applied to the open form. `values`
|
|
168
|
-
* values; `options` replaces the per-send choice list of option-bearing fields;
|
|
169
|
-
* shows per-field messages (keyed by field name); `display` fills display slots
|
|
170
|
-
* slot name) — a computed total among them. Every member defaults to empty, so a
|
|
171
|
-
* that touches only one of them returns only that one. The door response is safeParsed, so
|
|
124
|
+
* The form update a reaction door returns (`POST /api/interactions/{id}/react`, its
|
|
125
|
+
* `update`): the same kind of data a form is sent with, applied to the open form. `values`
|
|
126
|
+
* sets field values; `options` replaces the per-send choice list of option-bearing fields;
|
|
127
|
+
* `errors` shows per-field messages (keyed by field name); `display` fills display slots
|
|
128
|
+
* (keyed by slot name) — a computed total among them. Every member defaults to empty, so a
|
|
129
|
+
* reaction that touches only one of them returns only that one. The door response is safeParsed, so
|
|
172
130
|
* a malformed update surfaces loudly rather than applying a half-understood change.
|
|
173
131
|
*/
|
|
174
132
|
export const formUpdate = z.object({
|
|
@@ -180,68 +138,33 @@ export const formUpdate = z.object({
|
|
|
180
138
|
export type FormUpdate = z.infer<typeof formUpdate>;
|
|
181
139
|
|
|
182
140
|
/**
|
|
183
|
-
* The event a reaction round-trip reports to the door
|
|
184
|
-
* declared events fired, `field` names the changed
|
|
185
|
-
* `page` names the advanced-from page (by title) for a
|
|
186
|
-
* `submitted` event carries neither. The body also carries the
|
|
187
|
-
* far (see {@link interactionsClient}'s `reactInteraction`).
|
|
141
|
+
* The event a reaction round-trip reports to the door (the contract's `FormReactionEvent`
|
|
142
|
+
* document): `kind` is which of the three declared events fired, `field` names the changed
|
|
143
|
+
* field for a `field_changed` event, and `page` names the advanced-from page (by title) for a
|
|
144
|
+
* `page_advanced` event. A `submitted` event carries neither. The body also carries the
|
|
145
|
+
* partial `values` filled so far (see {@link interactionsClient}'s `reactInteraction`).
|
|
188
146
|
*/
|
|
189
|
-
export const
|
|
190
|
-
export type ReactionEventKind = z.infer<typeof reactionEventKind>;
|
|
191
|
-
|
|
192
|
-
export const reactionEvent = z.object({
|
|
193
|
-
kind: reactionEventKind,
|
|
194
|
-
field: z.string().optional(),
|
|
195
|
-
page: z.string().optional(),
|
|
196
|
-
});
|
|
147
|
+
export const reactionEvent = served.formReactionEvent;
|
|
197
148
|
export type ReactionEvent = z.infer<typeof reactionEvent>;
|
|
149
|
+
export type ReactionEventKind = ReactionEvent['kind'];
|
|
198
150
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
// `data` and `pages
|
|
151
|
+
/** The reaction door's reply: the interaction id and the form `update` to apply. */
|
|
152
|
+
export const interactionReaction = openapi.interactionReactionResult.extend({ update: formUpdate });
|
|
153
|
+
export type InteractionReaction = z.infer<typeof interactionReaction>;
|
|
154
|
+
|
|
155
|
+
export const interaction = openapi.interactionFrame.extend({
|
|
156
|
+
// Hand-written: the format-specific payload (select options, form JSON schema with
|
|
157
|
+
// optional per-send `data` and `pages`, external url) is `null` for formats that carry
|
|
206
158
|
// none (text/confirm); it is normalized to `{}` so consumers always see an object.
|
|
207
159
|
format_payload: z
|
|
208
160
|
.record(z.string(), z.unknown())
|
|
209
161
|
.nullish()
|
|
210
162
|
.transform((value) => value ?? {}),
|
|
211
|
-
created_at: z.string(),
|
|
212
|
-
timeout_at: z.string(),
|
|
213
|
-
// Whether the answer body is sensitive and never persisted server-side. Rides
|
|
214
|
-
// every add frame; an absent value (older frame) normalizes to false.
|
|
215
|
-
sensitive: z.boolean().default(false),
|
|
216
|
-
// True only for an external question answered by a signed server-to-server
|
|
217
|
-
// callback (never by a human); the frame never carries the verifier object.
|
|
218
|
-
// Absent/undefined for every other question.
|
|
219
|
-
server_verified: z.boolean().optional(),
|
|
220
|
-
// Name of the channel plugin the question was also delivered through (e.g.
|
|
221
|
-
// "telegram"); absent when the question lives only in this inbox.
|
|
222
|
-
channel: z.string().optional(),
|
|
223
|
-
// Interaction attribution, each additive and absent when unset. `recipient` is
|
|
224
|
-
// the channel delivery address the question went to; `origin` is the run id of
|
|
225
|
-
// the background tool run that asked; `audience` is the user_id the question is
|
|
226
|
-
// addressed to. Display/binding data only, never an authorization axis; a
|
|
227
|
-
// present non-string is malformed.
|
|
228
|
-
recipient: z.string().optional(),
|
|
229
|
-
origin: z.string().optional(),
|
|
230
|
-
audience: z.string().optional(),
|
|
231
|
-
// Display-only media shown WITH the question (images and/or links). Absent when
|
|
232
|
-
// the question carries none. Deliberately LOOSE (`z.array(z.unknown())`): each
|
|
233
|
-
// item is `safeParse`d per item by the renderer against `interactionMediaItem`,
|
|
234
|
-
// so one malformed/hostile item can never fail the whole frame parse and hide an
|
|
235
|
-
// answerable question. A present non-array value is still malformed.
|
|
236
|
-
media: z.array(z.unknown()).optional(),
|
|
237
163
|
});
|
|
238
164
|
export type Interaction = z.infer<typeof interaction>;
|
|
239
165
|
|
|
240
166
|
/** The answer door's response — the blocked caller was woken. */
|
|
241
|
-
export const interactionAnswered =
|
|
242
|
-
interaction_id: z.string(),
|
|
243
|
-
status: z.string(),
|
|
244
|
-
});
|
|
167
|
+
export const interactionAnswered = openapi.interactionActionResult;
|
|
245
168
|
export type InteractionAnswered = z.infer<typeof interactionAnswered>;
|
|
246
169
|
|
|
247
170
|
/**
|
|
@@ -250,10 +173,7 @@ export type InteractionAnswered = z.infer<typeof interactionAnswered>;
|
|
|
250
173
|
* answer door's terminal reply, but the door is distinct so it carries its own
|
|
251
174
|
* schema.
|
|
252
175
|
*/
|
|
253
|
-
export const interactionCancelled =
|
|
254
|
-
interaction_id: z.string(),
|
|
255
|
-
status: z.string(),
|
|
256
|
-
});
|
|
176
|
+
export const interactionCancelled = openapi.interactionActionResult;
|
|
257
177
|
export type InteractionCancelled = z.infer<typeof interactionCancelled>;
|
|
258
178
|
|
|
259
179
|
/**
|
|
@@ -261,8 +181,5 @@ export type InteractionCancelled = z.infer<typeof interactionCancelled>;
|
|
|
261
181
|
* item is the same record the stream's `interaction.add` frame carries. The pending
|
|
262
182
|
* set is the paged base the tail-only stream applies live deltas over.
|
|
263
183
|
*/
|
|
264
|
-
export const interactionsPage = z.
|
|
265
|
-
items: z.array(interaction),
|
|
266
|
-
...pageWindow,
|
|
267
|
-
});
|
|
184
|
+
export const interactionsPage = openapi.interactionWindow.extend({ items: z.array(interaction) });
|
|
268
185
|
export type InteractionsPage = z.infer<typeof interactionsPage>;
|
package/src/schemas/login.ts
CHANGED
|
@@ -1,67 +1,36 @@
|
|
|
1
1
|
/** Public login-method aggregator and login-result schemas. */
|
|
2
|
-
import { z } from 'zod';
|
|
2
|
+
import type { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
import * as openapi from '../generated/openapi-schemas';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* One field of a `form` login method. `secret` fields render as password
|
|
6
8
|
* inputs; `autocomplete` passes through to the input (e.g. "email",
|
|
7
9
|
* "current-password", "new-password").
|
|
8
10
|
*/
|
|
9
|
-
export const loginFormField =
|
|
10
|
-
name: z.string().min(1),
|
|
11
|
-
label: z.string().min(1),
|
|
12
|
-
secret: z.boolean(),
|
|
13
|
-
autocomplete: z.string().optional(),
|
|
14
|
-
});
|
|
11
|
+
export const loginFormField = openapi.formField;
|
|
15
12
|
|
|
16
13
|
/**
|
|
17
14
|
* The two — and only two — login-method shapes. Discriminated on `shape`; an
|
|
18
15
|
* unknown shape fails validation loudly (contract drift, not a soft skip).
|
|
19
|
-
* Optional fields are `.optional()` (absent), never `.nullable()`: the server
|
|
20
|
-
* serializes with `exclude_none`, so an absent field is OMITTED, never `null`.
|
|
21
16
|
*/
|
|
22
|
-
export const loginMethod =
|
|
23
|
-
z.object({
|
|
24
|
-
shape: z.literal('form'),
|
|
25
|
-
id: z.string().min(1),
|
|
26
|
-
title: z.string().min(1),
|
|
27
|
-
purpose: z.enum(['login', 'invite']).default('login'),
|
|
28
|
-
fields: z.array(loginFormField).min(1),
|
|
29
|
-
submit_path: z.string().min(1),
|
|
30
|
-
}),
|
|
31
|
-
z.object({
|
|
32
|
-
shape: z.literal('button'),
|
|
33
|
-
id: z.string().min(1),
|
|
34
|
-
label: z.string().min(1),
|
|
35
|
-
icon: z.string().optional(),
|
|
36
|
-
href: z.string().min(1),
|
|
37
|
-
}),
|
|
38
|
-
]);
|
|
17
|
+
export const loginMethod = openapi.loginMethodsListing.shape.methods.element;
|
|
39
18
|
|
|
40
19
|
/**
|
|
41
20
|
* `GET /api/login/methods` (PUBLIC). `needs_setup: true` ⇒ no principal exists
|
|
42
21
|
* yet, so the deployment must be initialized through the setup door before anyone
|
|
43
22
|
* can sign in. `setup_login` names the login-credential kinds the setup door can
|
|
44
|
-
* attach the owner's login with; it is `null
|
|
45
|
-
*
|
|
46
|
-
*
|
|
23
|
+
* attach the owner's login with; it is `null` when no login-attaching accounts
|
|
24
|
+
* provider is configured (a keys-only deployment). `claim_fragment_key` names the
|
|
25
|
+
* URL-fragment key a claim link carries its token under.
|
|
47
26
|
*/
|
|
48
|
-
export const loginMethods =
|
|
49
|
-
methods: z.array(loginMethod),
|
|
50
|
-
needs_setup: z.boolean(),
|
|
51
|
-
setup_login: z
|
|
52
|
-
.object({ kinds: z.array(z.enum(['password', 'invite'])) })
|
|
53
|
-
.nullable()
|
|
54
|
-
.optional(),
|
|
55
|
-
});
|
|
27
|
+
export const loginMethods = openapi.loginMethodsListing;
|
|
56
28
|
|
|
57
29
|
/**
|
|
58
30
|
* A successful login/exchange: the minted session token (opaque, `tai-sess-`
|
|
59
31
|
* prefixed — the client treats it as an opaque string) + its user.
|
|
60
32
|
*/
|
|
61
|
-
export const loginResult =
|
|
62
|
-
token: z.string().min(1),
|
|
63
|
-
user_id: z.string().min(1),
|
|
64
|
-
});
|
|
33
|
+
export const loginResult = openapi.claimExchangeResult;
|
|
65
34
|
|
|
66
35
|
export type LoginFormField = z.infer<typeof loginFormField>;
|
|
67
36
|
export type LoginMethod = z.infer<typeof loginMethod>;
|