@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.21
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/bootstrap.json +94 -5
- package/dist/admin/admin-agents.controller.d.ts +28 -0
- package/dist/admin/admin-agents.controller.js +79 -0
- package/dist/admin/admin-connectors.controller.d.ts +29 -0
- package/dist/admin/admin-connectors.controller.js +79 -0
- package/dist/admin/admin-items.schemas.d.ts +42 -0
- package/dist/admin/admin-items.schemas.js +48 -0
- package/dist/admin/admin.controller.d.ts +52 -80
- package/dist/admin/admin.controller.js +112 -81
- package/dist/admin/admin.module.d.ts +4 -1
- package/dist/admin/admin.module.js +50 -4
- package/dist/admin/admin.schemas.d.ts +69 -0
- package/dist/admin/admin.schemas.js +53 -0
- package/dist/admin/audit.controller.d.ts +14 -0
- package/dist/admin/audit.controller.js +42 -0
- package/dist/admin/audit.schemas.d.ts +8 -0
- package/dist/admin/audit.schemas.js +17 -0
- package/dist/admin/extensions.controller.d.ts +34 -3
- package/dist/admin/extensions.controller.js +66 -8
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/health.service.d.ts +104 -0
- package/dist/admin/health.service.js +246 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/overview.controller.d.ts +31 -0
- package/dist/admin/overview.controller.js +78 -0
- package/dist/admin/overview.schemas.d.ts +8 -0
- package/dist/admin/overview.schemas.js +13 -0
- package/dist/admin/overview.service.d.ts +112 -0
- package/dist/admin/overview.service.js +223 -0
- package/dist/admin/platform-audit.service.d.ts +41 -0
- package/dist/admin/platform-audit.service.js +70 -0
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/admin/usage.service.d.ts +149 -0
- package/dist/admin/usage.service.js +321 -0
- package/dist/agents/admin-agents.d.ts +92 -0
- package/dist/agents/admin-agents.js +170 -0
- package/dist/agents/agent-lookup.d.ts +24 -0
- package/dist/agents/agent-lookup.js +46 -2
- package/dist/agents/agent-profile.service.d.ts +31 -0
- package/dist/agents/agent-profile.service.js +122 -0
- package/dist/agents/agents.controller.d.ts +53 -168
- package/dist/agents/agents.controller.js +163 -34
- package/dist/agents/agents.module.d.ts +6 -2
- package/dist/agents/agents.module.js +41 -7
- package/dist/agents/agents.schemas.d.ts +392 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +121 -36
- package/dist/agents/agents.service.js +411 -121
- package/dist/agents/definition.d.ts +142 -21
- package/dist/agents/definition.js +389 -43
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +680 -0
- package/dist/agents/from-template.service.d.ts +72 -0
- package/dist/agents/from-template.service.js +178 -0
- package/dist/agents/instruction-files.d.ts +60 -0
- package/dist/agents/instruction-files.js +111 -0
- package/dist/agents/models.controller.d.ts +44 -6
- package/dist/agents/models.controller.js +84 -8
- package/dist/agents/org-templates.d.ts +186 -0
- package/dist/agents/org-templates.js +876 -0
- package/dist/agents/pending-connector-requests.d.ts +79 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/profile.d.ts +114 -0
- package/dist/agents/profile.js +55 -0
- package/dist/agents/readiness.controller.d.ts +26 -0
- package/dist/agents/readiness.controller.js +56 -0
- package/dist/agents/templates.controller.d.ts +77 -5
- package/dist/agents/templates.controller.js +153 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +482 -44
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/background/background.controller.d.ts +38 -0
- package/dist/background/background.controller.js +88 -0
- package/dist/background/background.module.d.ts +10 -0
- package/dist/background/background.module.js +39 -0
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/finish.d.ts +44 -0
- package/dist/background/finish.js +95 -0
- package/dist/background/launch-lock.d.ts +15 -0
- package/dist/background/launch-lock.js +40 -0
- package/dist/background/launch.d.ts +42 -0
- package/dist/background/launch.js +77 -0
- package/dist/background/poll.job.d.ts +56 -0
- package/dist/background/poll.job.js +195 -0
- package/dist/background/render.d.ts +23 -0
- package/dist/background/render.js +48 -0
- package/dist/background/session.d.ts +48 -0
- package/dist/background/session.js +80 -0
- package/dist/background/status.d.ts +35 -0
- package/dist/background/status.js +57 -0
- package/dist/background/stop.d.ts +68 -0
- package/dist/background/stop.js +244 -0
- package/dist/background/store.d.ts +167 -0
- package/dist/background/store.js +361 -0
- package/dist/background/store.module.d.ts +6 -0
- package/dist/background/store.module.js +22 -0
- package/dist/background/tasks.service.d.ts +109 -0
- package/dist/background/tasks.service.js +271 -0
- package/dist/background/wake-rules.d.ts +66 -0
- package/dist/background/wake-rules.js +113 -0
- package/dist/background/wake.d.ts +30 -0
- package/dist/background/wake.js +63 -0
- package/dist/catalog/admin-catalog.controller.d.ts +136 -52
- package/dist/catalog/admin-catalog.controller.js +275 -65
- package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
- package/dist/catalog/admin-catalog.schemas.js +99 -0
- package/dist/catalog/appearance.schemas.d.ts +10 -0
- package/dist/catalog/appearance.schemas.js +20 -0
- package/dist/catalog/appearance.service.d.ts +105 -0
- package/dist/catalog/appearance.service.js +306 -0
- package/dist/catalog/catalog-content.d.ts +122 -35
- package/dist/catalog/catalog-content.js +122 -14
- package/dist/catalog/catalog-files.d.ts +42 -0
- package/dist/catalog/catalog-files.js +89 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +63 -0
- package/dist/catalog/catalog-items.d.ts +122 -7
- package/dist/catalog/catalog-items.js +301 -13
- package/dist/catalog/catalog-scope.service.d.ts +293 -0
- package/dist/catalog/catalog-scope.service.js +1236 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +47 -31
- package/dist/catalog/catalog.service.d.ts +122 -31
- package/dist/catalog/catalog.service.js +177 -105
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/claude/translate.js +3 -0
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +29 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +102 -0
- package/dist/catalog/component-scope.controller.js +257 -0
- package/dist/catalog/component-scope.schemas.d.ts +118 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +394 -0
- package/dist/catalog/component-scope.service.js +1133 -0
- package/dist/catalog/component-state.d.ts +207 -0
- package/dist/catalog/component-state.js +484 -0
- package/dist/catalog/git-source.d.ts +9 -1
- package/dist/catalog/git-source.js +29 -2
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplace-icons.d.ts +64 -0
- package/dist/catalog/marketplace-icons.js +131 -0
- package/dist/catalog/marketplaces.controller.d.ts +50 -41
- package/dist/catalog/marketplaces.controller.js +130 -46
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +110 -17
- package/dist/catalog/marketplaces.service.js +337 -29
- package/dist/catalog/org-catalog.controller.d.ts +114 -62
- package/dist/catalog/org-catalog.controller.js +191 -98
- package/dist/catalog/org-catalog.schemas.d.ts +104 -0
- package/dist/catalog/org-catalog.schemas.js +107 -0
- package/dist/catalog/org-catalog.service.d.ts +72 -33
- package/dist/catalog/org-catalog.service.js +367 -158
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +133 -0
- package/dist/catalog/org-extension.controller.js +313 -0
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
- package/dist/catalog/org-plugin-uploads.controller.js +200 -0
- package/dist/catalog/org-plugin-uploads.d.ts +71 -0
- package/dist/catalog/org-plugin-uploads.js +122 -0
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +188 -0
- package/dist/catalog/owned-items.js +808 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +243 -0
- package/dist/catalog/platform-components.js +872 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +583 -0
- package/dist/catalog/plugin-import.d.ts +254 -47
- package/dist/catalog/plugin-import.js +810 -112
- package/dist/catalog/plugin-install.d.ts +205 -42
- package/dist/catalog/plugin-install.js +828 -126
- package/dist/catalog/plugin-package.d.ts +43 -4
- package/dist/catalog/plugin-package.js +194 -7
- package/dist/catalog/plugin-upgrade.d.ts +308 -225
- package/dist/catalog/plugin-upgrade.js +1325 -1131
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +194 -118
- package/dist/catalog/requests.service.js +530 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +119 -0
- package/dist/channels/actions.js +10 -3
- package/dist/channels/cards.d.ts +36 -10
- package/dist/channels/cards.js +100 -25
- package/dist/channels/channels.module.js +13 -2
- package/dist/channels/channels.schemas.d.ts +41 -0
- package/dist/channels/channels.schemas.js +40 -0
- package/dist/channels/connections.controller.d.ts +46 -37
- package/dist/channels/connections.controller.js +76 -34
- package/dist/channels/connections.service.d.ts +102 -10
- package/dist/channels/connections.service.js +271 -24
- package/dist/channels/inbound.d.ts +11 -1
- package/dist/channels/inbound.js +87 -7
- package/dist/channels/outbound.d.ts +14 -1
- package/dist/channels/outbound.js +64 -15
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +2 -0
- package/dist/channels/supervisor.js +4 -0
- package/dist/channels/threads.d.ts +5 -0
- package/dist/channels/threads.js +8 -0
- package/dist/channels/webhook.d.ts +21 -1
- package/dist/channels/webhook.js +39 -4
- package/dist/client/client-access.service.d.ts +102 -0
- package/dist/client/client-access.service.js +303 -0
- package/dist/client/client-builds.service.d.ts +109 -0
- package/dist/client/client-builds.service.js +229 -0
- package/dist/client/client-delivery.controller.d.ts +25 -0
- package/dist/client/client-delivery.controller.js +66 -0
- package/dist/client/client-files.d.ts +48 -0
- package/dist/client/client-files.js +136 -0
- package/dist/client/client-reports.cron.d.ts +13 -0
- package/dist/client/client-reports.cron.js +42 -0
- package/dist/client/client-reports.service.d.ts +30 -0
- package/dist/client/client-reports.service.js +102 -0
- package/dist/client/client-sign-in.service.d.ts +21 -0
- package/dist/client/client-sign-in.service.js +49 -0
- package/dist/client/client.controller.d.ts +49 -0
- package/dist/client/client.controller.js +129 -0
- package/dist/client/client.module.d.ts +8 -0
- package/dist/client/client.module.js +28 -0
- package/dist/client/client.schemas.d.ts +61 -0
- package/dist/client/client.schemas.js +27 -0
- package/dist/config/docs.js +5 -1
- package/dist/config/schema.d.ts +35 -2
- package/dist/config/schema.js +216 -21
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +29 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +1 -1
- package/dist/conversations/artifacts.js +1 -1
- package/dist/conversations/attachments.service.d.ts +30 -0
- package/dist/conversations/attachments.service.js +130 -5
- package/dist/conversations/conversations.controller.d.ts +79 -44
- package/dist/conversations/conversations.controller.js +133 -82
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +10 -7
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +161 -13
- package/dist/conversations/conversations.service.js +329 -57
- package/dist/conversations/device-status.d.ts +24 -0
- package/dist/conversations/device-status.js +71 -0
- package/dist/conversations/event-log.d.ts +45 -9
- package/dist/conversations/event-log.js +113 -6
- package/dist/conversations/events.d.ts +255 -9
- package/dist/conversations/events.js +250 -34
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/queue.d.ts +5 -2
- package/dist/conversations/queue.js +24 -4
- package/dist/conversations/queue.service.d.ts +2 -2
- package/dist/conversations/queue.service.js +21 -3
- package/dist/conversations/titles.d.ts +12 -3
- package/dist/conversations/titles.js +40 -16
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +48 -5
- package/dist/ctx/create-ctx.js +174 -34
- package/dist/db/kernel-schema.d.ts +668 -27
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +3 -0
- package/dist/devices/access.d.ts +66 -0
- package/dist/devices/access.js +113 -0
- package/dist/devices/conversation-devices.d.ts +75 -0
- package/dist/devices/conversation-devices.js +230 -0
- package/dist/devices/devices.controller.d.ts +36 -0
- package/dist/devices/devices.controller.js +124 -0
- package/dist/devices/devices.module.d.ts +8 -0
- package/dist/devices/devices.module.js +34 -0
- package/dist/devices/devices.schemas.d.ts +3 -0
- package/dist/devices/devices.schemas.js +14 -0
- package/dist/devices/devices.service.d.ts +251 -0
- package/dist/devices/devices.service.js +791 -0
- package/dist/devices/dto.d.ts +25 -0
- package/dist/devices/dto.js +12 -0
- package/dist/devices/label.d.ts +11 -0
- package/dist/devices/label.js +25 -0
- package/dist/devices/legacy-cleanup.job.d.ts +34 -0
- package/dist/devices/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +215 -3
- package/dist/errors.js +215 -3
- package/dist/evals/evals.module.js +11 -2
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +36 -10
- package/dist/evals/recorded-tools.d.ts +37 -1
- package/dist/evals/recorded-tools.js +120 -10
- package/dist/evals/run-replay.d.ts +20 -3
- package/dist/evals/run-replay.js +78 -14
- package/dist/evals/runs.controller.d.ts +2 -57
- package/dist/evals/runs.controller.js +1 -42
- package/dist/evals/runs.service.d.ts +8 -7
- package/dist/evals/runs.service.js +45 -30
- package/dist/evals/sets.controller.d.ts +2 -28
- package/dist/evals/sets.controller.js +1 -31
- package/dist/evals/sets.service.d.ts +7 -7
- package/dist/evals/sets.service.js +23 -17
- package/dist/evals/snapshot.d.ts +3 -2
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +4 -6
- package/dist/evals/step-replay.js +16 -9
- package/dist/evals/trajectory.d.ts +5 -3
- package/dist/evals/trajectory.js +4 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +81 -14
- package/dist/extensions/admin-ops.js +181 -47
- package/dist/extensions/admin-view.d.ts +57 -10
- package/dist/extensions/admin-view.js +249 -27
- package/dist/extensions/approvals.d.ts +12 -2
- package/dist/extensions/blobs.d.ts +14 -1
- package/dist/extensions/blobs.js +49 -5
- package/dist/extensions/bootstrap.d.ts +85 -10
- package/dist/extensions/bootstrap.js +215 -36
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +13 -1
- package/dist/extensions/config-issues.js +22 -5
- package/dist/extensions/config-json-schema.d.ts +43 -7
- package/dist/extensions/config-json-schema.js +124 -58
- package/dist/extensions/deployment-config-store.d.ts +6 -0
- package/dist/extensions/deployment-config.d.ts +94 -9
- package/dist/extensions/deployment-config.js +255 -34
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +133 -0
- package/dist/extensions/effective-config.js +379 -0
- package/dist/extensions/extensions.module.js +31 -12
- package/dist/extensions/guide-places.d.ts +68 -0
- package/dist/extensions/guide-places.js +152 -0
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +105 -12
- package/dist/extensions/host.js +372 -87
- package/dist/extensions/installs.d.ts +30 -9
- package/dist/extensions/installs.js +57 -16
- package/dist/extensions/instance.d.ts +17 -2
- package/dist/extensions/instance.js +21 -0
- package/dist/extensions/ledger.d.ts +1 -1
- package/dist/extensions/locks.d.ts +12 -0
- package/dist/extensions/locks.js +26 -0
- package/dist/extensions/org-config.d.ts +97 -7
- package/dist/extensions/org-config.js +215 -45
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/package.d.ts +18 -4
- package/dist/extensions/package.js +56 -3
- package/dist/extensions/permission-set.d.ts +35 -5
- package/dist/extensions/permission-set.js +36 -5
- package/dist/extensions/permission-view.d.ts +106 -13
- package/dist/extensions/permission-view.js +33 -15
- package/dist/extensions/plugin-guides.d.ts +282 -0
- package/dist/extensions/plugin-guides.js +554 -0
- package/dist/extensions/plugin-icons.d.ts +54 -0
- package/dist/extensions/plugin-icons.js +125 -0
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.controller.d.ts +28 -0
- package/dist/extensions/point-defaults.controller.js +69 -0
- package/dist/extensions/point-defaults.d.ts +73 -0
- package/dist/extensions/point-defaults.js +236 -0
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/registry.d.ts +1 -1
- package/dist/extensions/registry.js +2 -0
- package/dist/extensions/resolve.d.ts +51 -1
- package/dist/extensions/resolve.js +85 -3
- package/dist/extensions/single-provider.d.ts +92 -0
- package/dist/extensions/single-provider.js +180 -0
- package/dist/extensions/sources.d.ts +13 -2
- package/dist/extensions/sources.js +2 -0
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +46 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/previewers.controller.js +2 -3
- package/dist/files/previewers.d.ts +10 -3
- package/dist/files/previewers.js +40 -11
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/api.module.js +76 -4
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/http/gateway-routes.d.ts +7 -3
- package/dist/http/gateway-routes.js +6 -3
- package/dist/http/nest-logger.d.ts +6 -5
- package/dist/http/nest-logger.js +24 -10
- package/dist/http/plugin-dispatch.d.ts +4 -1
- package/dist/http/plugin-dispatch.js +14 -2
- package/dist/identity/accounts.d.ts +77 -31
- package/dist/identity/accounts.js +133 -52
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.controller.js +9 -5
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +35 -9
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +7 -4
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +17 -1
- package/dist/identity/me.controller.js +45 -4
- package/dist/identity/me.schemas.d.ts +24 -0
- package/dist/identity/me.schemas.js +25 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +12 -0
- package/dist/identity/sessions.js +45 -0
- package/dist/identity/settings.d.ts +99 -12
- package/dist/identity/settings.js +234 -25
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/identity/write-actor.d.ts +11 -0
- package/dist/identity/write-actor.js +7 -0
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +64 -4
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +157 -0
- package/dist/inbox/platform-inbox.service.js +281 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +32 -1
- package/dist/infra/database/database.module.js +1 -0
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +31 -3
- package/dist/infra/lifecycle/process-guards.js +4 -0
- package/dist/infra/lock/lock.service.d.ts +8 -0
- package/dist/infra/lock/lock.service.js +27 -0
- package/dist/infra/logging/logging.module.d.ts +4 -2
- package/dist/infra/logging/logging.module.js +24 -6
- package/dist/infra/presence/presence.module.d.ts +6 -0
- package/dist/infra/presence/presence.module.js +22 -0
- package/dist/infra/presence/replica-presence.d.ts +87 -0
- package/dist/infra/presence/replica-presence.js +189 -0
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/infra/queue/redis-connection.d.ts +6 -0
- package/dist/infra/queue/redis-connection.js +7 -0
- package/dist/infra/redis/redis.module.js +6 -2
- package/dist/infra/throttler/named-throttlers.d.ts +12 -0
- package/dist/infra/throttler/named-throttlers.js +67 -0
- package/dist/infra/throttler/throttler.guard.js +1 -1
- package/dist/infra/tokens.d.ts +6 -1
- package/dist/infra/tokens.js +6 -1
- package/dist/kernel.module.js +15 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +9 -3
- package/dist/lifecycle/kernel-lifecycle.js +51 -11
- package/dist/local-devices/device-auth.controller.d.ts +42 -0
- package/dist/local-devices/device-auth.controller.js +116 -0
- package/dist/local-devices/device-auth.d.ts +119 -0
- package/dist/local-devices/device-auth.js +401 -0
- package/dist/local-devices/device-auth.module.d.ts +7 -0
- package/dist/local-devices/device-auth.module.js +25 -0
- package/dist/local-devices/device-routes.d.ts +36 -0
- package/dist/local-devices/device-routes.js +90 -0
- package/dist/local-devices/dto.d.ts +66 -0
- package/dist/local-devices/dto.js +44 -0
- package/dist/local-devices/keys.d.ts +25 -0
- package/dist/local-devices/keys.js +25 -0
- package/dist/local-devices/local-device-gateway.d.ts +134 -0
- package/dist/local-devices/local-device-gateway.js +542 -0
- package/dist/local-devices/local-device-provider.d.ts +89 -0
- package/dist/local-devices/local-device-provider.js +151 -0
- package/dist/local-devices/local-devices.module.d.ts +16 -0
- package/dist/local-devices/local-devices.module.js +44 -0
- package/dist/local-devices/machines.d.ts +118 -0
- package/dist/local-devices/machines.js +366 -0
- package/dist/local-devices/relay.d.ts +100 -0
- package/dist/local-devices/relay.js +373 -0
- package/dist/local-devices/targets.d.ts +28 -0
- package/dist/local-devices/targets.js +73 -0
- package/dist/log.d.ts +13 -1
- package/dist/log.js +93 -17
- package/dist/models/embeddings.d.ts +82 -0
- package/dist/models/embeddings.js +326 -0
- package/dist/models/enablement.controller.d.ts +40 -0
- package/dist/models/enablement.controller.js +74 -0
- package/dist/models/enablement.d.ts +101 -0
- package/dist/models/enablement.js +264 -0
- package/dist/models/models.module.d.ts +5 -1
- package/dist/models/models.module.js +16 -4
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +8 -6
- package/dist/models/prices.js +11 -9
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +72 -14
- package/dist/models/purposes.js +115 -34
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +12 -8
- package/dist/orgs/offboarding.js +54 -33
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.controller.d.ts +2 -5
- package/dist/orgs/orgs.controller.js +3 -6
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +23 -8
- package/dist/orgs/orgs.service.js +38 -16
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +66 -6
- package/dist/orgs/settings.service.js +89 -10
- package/dist/overrides.d.ts +16 -1
- package/dist/overrides.js +10 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +28 -0
- package/dist/platform/errors.js +65 -0
- package/dist/platform/exclusions.d.ts +11 -0
- package/dist/platform/exclusions.js +774 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +169 -0
- package/dist/platform/operation.js +102 -0
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin-items.ops.d.ts +37 -0
- package/dist/platform/ops/admin-items.ops.js +278 -0
- package/dist/platform/ops/admin.ops.d.ts +38 -0
- package/dist/platform/ops/admin.ops.js +497 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
- package/dist/platform/ops/agent-skills.ops.js +509 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
- package/dist/platform/ops/agent-templates.ops.js +272 -0
- package/dist/platform/ops/agents.ops.d.ts +37 -0
- package/dist/platform/ops/agents.ops.js +730 -0
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
- package/dist/platform/ops/catalog-admin.ops.js +682 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +854 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +190 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/devices.ops.d.ts +26 -0
- package/dist/platform/ops/devices.ops.js +311 -0
- package/dist/platform/ops/errors.d.ts +16 -0
- package/dist/platform/ops/errors.js +30 -0
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +372 -0
- package/dist/platform/ops/extensions.ops.d.ts +25 -0
- package/dist/platform/ops/extensions.ops.js +347 -0
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +381 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
- package/dist/platform/ops/marketplaces.ops.js +466 -0
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
- package/dist/platform/ops/org-plugins.ops.js +388 -0
- package/dist/platform/ops/org-settings.ops.d.ts +18 -0
- package/dist/platform/ops/org-settings.ops.js +127 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +298 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +30 -0
- package/dist/platform/ops/platform.ops.js +231 -0
- package/dist/platform/ops/plugins.ops.d.ts +35 -0
- package/dist/platform/ops/plugins.ops.js +476 -0
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +191 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/setup.ops.d.ts +24 -0
- package/dist/platform/ops/setup.ops.js +212 -0
- package/dist/platform/ops/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +160 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/ops/themes.ops.d.ts +14 -0
- package/dist/platform/ops/themes.ops.js +47 -0
- package/dist/platform/ops/ui.ops.d.ts +8 -0
- package/dist/platform/ops/ui.ops.js +41 -0
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +118 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +43 -0
- package/dist/platform/platform-ops.module.js +142 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +85 -0
- package/dist/roles/gateway-role.d.ts +18 -3
- package/dist/roles/gateway-role.js +33 -5
- package/dist/roles/gateway.module.d.ts +2 -1
- package/dist/roles/gateway.module.js +6 -3
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +21 -1
- package/dist/runtime/context/build.d.ts +21 -13
- package/dist/runtime/context/build.js +106 -29
- package/dist/runtime/context/claude-tools.d.ts +4 -1
- package/dist/runtime/context/claude-tools.js +13 -12
- package/dist/runtime/context/compaction.js +24 -1
- package/dist/runtime/context/device-paths.d.ts +40 -0
- package/dist/runtime/context/device-paths.js +48 -0
- package/dist/runtime/context/legacy-text.d.ts +22 -0
- package/dist/runtime/context/legacy-text.js +37 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/context/skills.d.ts +29 -11
- package/dist/runtime/context/skills.js +46 -32
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.d.ts +8 -1
- package/dist/runtime/hook-calls.js +40 -7
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +36 -17
- package/dist/runtime/loop.d.ts +35 -6
- package/dist/runtime/maintenance.d.ts +9 -4
- package/dist/runtime/maintenance.js +35 -8
- package/dist/runtime/model-call.d.ts +54 -11
- package/dist/runtime/model-call.js +105 -28
- package/dist/runtime/providers.d.ts +149 -29
- package/dist/runtime/providers.js +332 -63
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +236 -0
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-finish.d.ts +1 -1
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +7 -9
- package/dist/runtime/run-queue.d.ts +62 -5
- package/dist/runtime/run-queue.js +313 -40
- package/dist/runtime/run-worker.d.ts +19 -8
- package/dist/runtime/run-worker.js +105 -44
- package/dist/runtime/runtime.module.js +13 -3
- package/dist/runtime/step-log.d.ts +15 -4
- package/dist/runtime/step-log.js +24 -7
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +31 -26
- package/dist/runtime/subagents/definition.js +89 -142
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +116 -27
- package/dist/runtime/subagents/dispatch.js +213 -142
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.js +2 -1
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +25 -8
- package/dist/runtime/subagents/roster.js +48 -12
- package/dist/runtime/subagents/skill-fork.d.ts +4 -3
- package/dist/runtime/subagents/skill-fork.js +9 -5
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +9 -6
- package/dist/runtime/subagents/subagents.service.js +13 -8
- package/dist/runtime/usage-report-jobs.d.ts +88 -0
- package/dist/runtime/usage-report-jobs.js +158 -0
- package/dist/runtime/usage-report.d.ts +35 -39
- package/dist/runtime/usage-report.js +171 -97
- package/dist/runtime/waits.d.ts +148 -39
- package/dist/runtime/waits.js +426 -112
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +34 -7
- package/dist/sandbox/providers.js +54 -9
- package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
- package/dist/sandbox/sandbox-file-reader.js +98 -0
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +10 -4
- package/dist/sandbox/sandbox.service.d.ts +345 -132
- package/dist/sandbox/sandbox.service.js +883 -399
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/setup/kernel-checks.d.ts +91 -0
- package/dist/setup/kernel-checks.js +295 -0
- package/dist/setup/oauth-token-probe.d.ts +47 -0
- package/dist/setup/oauth-token-probe.js +108 -0
- package/dist/setup/redact-check.d.ts +18 -0
- package/dist/setup/redact-check.js +46 -0
- package/dist/setup/setup-check-registry.d.ts +86 -0
- package/dist/setup/setup-check-registry.js +75 -0
- package/dist/setup/setup-checks.controller.d.ts +28 -0
- package/dist/setup/setup-checks.controller.js +78 -0
- package/dist/setup/setup-checks.schemas.d.ts +38 -0
- package/dist/setup/setup-checks.schemas.js +43 -0
- package/dist/setup/setup-checks.service.d.ts +144 -0
- package/dist/setup/setup-checks.service.js +683 -0
- package/dist/setup/setup-guides.controller.d.ts +18 -0
- package/dist/setup/setup-guides.controller.js +48 -0
- package/dist/setup/setup-guides.schemas.d.ts +10 -0
- package/dist/setup/setup-guides.schemas.js +6 -0
- package/dist/setup/setup-guides.service.d.ts +126 -0
- package/dist/setup/setup-guides.service.js +315 -0
- package/dist/setup/setup.module.d.ts +8 -0
- package/dist/setup/setup.module.js +31 -0
- package/dist/skills/agent-skills.controller.d.ts +48 -0
- package/dist/skills/agent-skills.controller.js +131 -0
- package/dist/skills/agent-skills.service.d.ts +262 -0
- package/dist/skills/agent-skills.service.js +996 -0
- package/dist/skills/catalog.d.ts +14 -11
- package/dist/skills/catalog.js +32 -50
- package/dist/skills/changes.controller.d.ts +12 -22
- package/dist/skills/changes.controller.js +27 -56
- package/dist/skills/changes.service.d.ts +69 -115
- package/dist/skills/changes.service.js +249 -598
- package/dist/skills/conversation-catalog.d.ts +53 -0
- package/dist/skills/conversation-catalog.js +149 -0
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +2 -2
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +3 -3
- package/dist/skills/invoke.js +21 -8
- package/dist/skills/package.d.ts +15 -1
- package/dist/skills/package.js +14 -1
- package/dist/skills/skills.controller.d.ts +32 -6
- package/dist/skills/skills.controller.js +64 -11
- package/dist/skills/skills.module.js +25 -3
- package/dist/skills/skills.schemas.d.ts +44 -0
- package/dist/skills/skills.schemas.js +68 -0
- package/dist/skills/skills.service.d.ts +123 -26
- package/dist/skills/skills.service.js +493 -76
- package/dist/skills/usable.d.ts +82 -0
- package/dist/skills/usable.js +388 -0
- package/dist/themes/render-css.d.ts +13 -0
- package/dist/themes/render-css.js +135 -0
- package/dist/themes/theme-delivery.service.d.ts +36 -0
- package/dist/themes/theme-delivery.service.js +116 -0
- package/dist/themes/theme-state.d.ts +116 -0
- package/dist/themes/theme-state.js +221 -0
- package/dist/themes/theme-usage.d.ts +61 -0
- package/dist/themes/theme-usage.js +98 -0
- package/dist/themes/themes-public.controller.d.ts +33 -0
- package/dist/themes/themes-public.controller.js +98 -0
- package/dist/themes/themes.controller.d.ts +13 -0
- package/dist/themes/themes.controller.js +38 -0
- package/dist/themes/themes.module.d.ts +3 -0
- package/dist/themes/themes.module.js +21 -0
- package/dist/themes/themes.schemas.d.ts +3 -0
- package/dist/themes/themes.schemas.js +2 -0
- package/dist/themes/themes.service.d.ts +50 -0
- package/dist/themes/themes.service.js +99 -0
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/admin-connectors.d.ts +69 -0
- package/dist/tools/admin-connectors.js +135 -0
- package/dist/tools/approvals.controller.js +2 -3
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +26 -2
- package/dist/tools/approvals.service.js +44 -5
- package/dist/tools/builtin-names.d.ts +104 -0
- package/dist/tools/builtin-names.js +164 -0
- package/dist/tools/builtins/agent.d.ts +27 -25
- package/dist/tools/builtins/agent.js +66 -63
- package/dist/tools/builtins/ask-user.d.ts +1 -1
- package/dist/tools/builtins/ask-user.js +5 -4
- package/dist/tools/builtins/builtin-tools.d.ts +23 -4
- package/dist/tools/builtins/builtin-tools.js +78 -12
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +51 -0
- package/dist/tools/builtins/platform.js +451 -0
- package/dist/tools/builtins/read-tool-output.d.ts +1 -1
- package/dist/tools/builtins/read-tool-output.js +2 -2
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +291 -39
- package/dist/tools/builtins/sandbox/common.d.ts +135 -36
- package/dist/tools/builtins/sandbox/common.js +222 -62
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +19 -16
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +64 -50
- package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
- package/dist/tools/builtins/sandbox/file-state.js +34 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob-match.js +1 -1
- package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
- package/dist/tools/builtins/sandbox/glob.js +17 -12
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +153 -34
- package/dist/tools/builtins/sandbox/index.d.ts +9 -5
- package/dist/tools/builtins/sandbox/index.js +13 -5
- package/dist/tools/builtins/sandbox/read.d.ts +2 -2
- package/dist/tools/builtins/sandbox/read.js +29 -19
- package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
- package/dist/tools/builtins/sandbox/task-output.js +334 -0
- package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
- package/dist/tools/builtins/sandbox/task-stop.js +113 -0
- package/dist/tools/builtins/sandbox/write.d.ts +1 -1
- package/dist/tools/builtins/sandbox/write.js +51 -44
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +29 -18
- package/dist/tools/builtins/skill-load.js +125 -73
- package/dist/tools/builtins/tool-search.d.ts +13 -9
- package/dist/tools/builtins/tool-search.js +25 -14
- package/dist/tools/builtins/web/errors.d.ts +8 -0
- package/dist/tools/builtins/web/errors.js +53 -0
- package/dist/tools/builtins/web/extract.d.ts +62 -0
- package/dist/tools/builtins/web/extract.js +271 -0
- package/dist/tools/builtins/web/fetch.d.ts +55 -0
- package/dist/tools/builtins/web/fetch.js +175 -0
- package/dist/tools/builtins/web/index.d.ts +13 -0
- package/dist/tools/builtins/web/index.js +12 -0
- package/dist/tools/builtins/web/page-cache.d.ts +25 -0
- package/dist/tools/builtins/web/page-cache.js +77 -0
- package/dist/tools/builtins/web/search.d.ts +25 -0
- package/dist/tools/builtins/web/search.js +210 -0
- package/dist/tools/builtins/web/url.d.ts +17 -0
- package/dist/tools/builtins/web/url.js +43 -0
- package/dist/tools/connector-account-policies.d.ts +51 -0
- package/dist/tools/connector-account-policies.js +165 -0
- package/dist/tools/connectors.controller.d.ts +74 -9
- package/dist/tools/connectors.controller.js +133 -16
- package/dist/tools/connectors.schemas.d.ts +27 -0
- package/dist/tools/connectors.schemas.js +34 -0
- package/dist/tools/connectors.service.d.ts +101 -8
- package/dist/tools/connectors.service.js +266 -28
- package/dist/tools/credentials.d.ts +23 -0
- package/dist/tools/credentials.js +90 -1
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.js +5 -5
- package/dist/tools/elicitation.js +1 -1
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +61 -4
- package/dist/tools/info.js +119 -33
- package/dist/tools/legacy-data.d.ts +34 -0
- package/dist/tools/legacy-data.js +76 -0
- package/dist/tools/legacy-keys.d.ts +51 -0
- package/dist/tools/legacy-keys.js +114 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +1 -1
- package/dist/tools/oauth/flow-paths.js +1 -1
- package/dist/tools/oauth/flow.js +1 -1
- package/dist/tools/oauth/tokens.d.ts +54 -7
- package/dist/tools/oauth/tokens.js +87 -17
- package/dist/tools/org-tool-switches.d.ts +89 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.js +1 -1
- package/dist/tools/pipeline.d.ts +67 -47
- package/dist/tools/pipeline.js +319 -380
- package/dist/tools/policy.d.ts +30 -23
- package/dist/tools/policy.js +142 -64
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +1 -1
- package/dist/tools/questions.service.d.ts +23 -2
- package/dist/tools/questions.service.js +104 -2
- package/dist/tools/registry.d.ts +189 -68
- package/dist/tools/registry.js +318 -236
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/tools.module.js +31 -3
- package/dist/tools/validate.js +1 -1
- package/dist/ui/admin-ui.controller.d.ts +56 -0
- package/dist/ui/admin-ui.controller.js +192 -0
- package/dist/ui/arrangement.d.ts +65 -0
- package/dist/ui/arrangement.js +171 -0
- package/dist/ui/embed-token.d.ts +2 -2
- package/dist/ui/embed-token.js +30 -5
- package/dist/ui/registry.d.ts +42 -17
- package/dist/ui/registry.js +46 -14
- package/dist/ui/slots.controller.d.ts +11 -0
- package/dist/ui/slots.controller.js +25 -0
- package/dist/ui/ui-stream.d.ts +20 -3
- package/dist/ui/ui-stream.js +25 -7
- package/dist/ui/ui.schemas.d.ts +70 -0
- package/dist/ui/ui.schemas.js +65 -0
- package/dist/ui/views.controller.d.ts +35 -49
- package/dist/ui/views.controller.js +48 -70
- package/dist/ui/views.d.ts +112 -18
- package/dist/ui/views.js +254 -47
- package/package.json +6 -3
- package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
- package/src/migrations/0064_account_last_org.sql +7 -0
- package/src/migrations/0065_conversation_archive.sql +8 -0
- package/src/migrations/0066_extension_display_name.sql +4 -0
- package/src/migrations/0067_agent_profiles.sql +20 -0
- package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
- package/src/migrations/0069_attachments_agent_idx.sql +3 -0
- package/src/migrations/0070_background_tasks.sql +37 -0
- package/src/migrations/0071_background_tasks_reserve.sql +6 -0
- package/src/migrations/0072_background_tasks_stopping.sql +5 -0
- package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/src/migrations/0089_model_kinds_usage.sql +38 -0
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/src/migrations/0093_connected_environments.sql +37 -0
- package/src/migrations/0094_environment_paths_idx.sql +7 -0
- package/src/migrations/0095_environment_files_resets.sql +5 -0
- package/src/migrations/0096_environment_demoted_default.sql +18 -0
- package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
- package/src/migrations/0098_single_provider_running_first.sql +41 -0
- package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
- package/src/migrations/0100_catalog_files.sql +13 -0
- package/src/migrations/0101_marketplace_icons.sql +32 -0
- package/src/migrations/0102_themes.sql +64 -0
- package/src/migrations/0103_ui_theme_setting.sql +7 -0
- package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
- package/src/migrations/0105_devices_rename.sql +136 -0
- package/src/migrations/0106_setup_guides_v2.sql +10 -0
- package/src/migrations/0107_extension_client_builds.sql +50 -0
- package/src/migrations/0108_question_skipped.sql +6 -0
- package/src/migrations/0109_audit_platform_idx.sql +5 -0
- package/src/migrations/0110_usage_time_idx.sql +8 -0
- package/src/migrations/0111_agent_skill_sharing.sql +22 -0
- package/src/migrations/0112_skill_share_requests.sql +4 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -62
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
- package/dist/tools/builtins/skill-write.d.ts +0 -59
- package/dist/tools/builtins/skill-write.js +0 -244
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { randomBytes } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
12
|
+
import { DevicesService } from "../devices/devices.service.js";
|
|
13
|
+
import { ApiError } from "../errors.js";
|
|
14
|
+
import { audit } from "../identity/audit.js";
|
|
15
|
+
import { sha256Hex } from "../identity/hash.js";
|
|
16
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
17
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
18
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
19
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
20
|
+
import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
|
|
21
|
+
import { authorizeOrgAction } from "../orgs/org.guard.js";
|
|
22
|
+
import { LOCAL_PROVIDER } from "../sandbox/providers.js";
|
|
23
|
+
import { deviceNotFound } from "../sandbox/sandbox.service.js";
|
|
24
|
+
import { MachinesService } from "./machines.js";
|
|
25
|
+
/** The 20 consonants a user code is made of (no vowels: no words; no look-alike letters). */
|
|
26
|
+
export const USER_CODE_ALPHABET = "BCDFGHJKLMNPQRSTVWXZ";
|
|
27
|
+
const USER_CODE_LENGTH = 8;
|
|
28
|
+
const DEVICE_CODE_PREFIX = "cap_dvc_";
|
|
29
|
+
const DEVICE_CODE_RE = /^cap_dvc_[A-Za-z0-9_-]{43}$/;
|
|
30
|
+
/** What `slow_down` adds to the poll interval (RFC 8628 §3.5). */
|
|
31
|
+
export const SLOW_DOWN_STEP_SECONDS = 5;
|
|
32
|
+
/** Polls this much earlier than the interval are still on time (network jitter). */
|
|
33
|
+
const POLL_JITTER_MS = 500;
|
|
34
|
+
/** The web page that confirms a code: `<http.publicUrl>/devices/link`. */
|
|
35
|
+
export const DEVICE_PAGE_PATH = "/devices/link";
|
|
36
|
+
/** The machine's WebSocket route: `ws(s)://<http.publicUrl host>/device/connect`. */
|
|
37
|
+
export const DEVICE_CONNECT_PATH = "/device/connect";
|
|
38
|
+
/** The sign-in state of one device code: `capk:device-auth:<sha256(deviceCode)>` (a hash). */
|
|
39
|
+
export const deviceAuthKey = (deviceCode) => authKeyOf(sha256Hex(deviceCode));
|
|
40
|
+
const authKeyOf = (deviceCodeHash) => `capk:device-auth:${deviceCodeHash}`;
|
|
41
|
+
/** The user code's pointer to its device code's hash: `capk:device-user:<XXXX-XXXX>`. */
|
|
42
|
+
export const deviceUserKey = (userCode) => `capk:device-user:${userCode}`;
|
|
43
|
+
/**
|
|
44
|
+
* The poll (`ARGV[1]` now in ms, `ARGV[2]` jitter ms, `ARGV[3]` slow-down step s). Missing →
|
|
45
|
+
* `expired`. Earlier than the interval → `slow_down` with the grown interval. Approved → the
|
|
46
|
+
* parked grant, and the code is deleted (get-and-delete: the credential is handed out once).
|
|
47
|
+
* Otherwise the status (`pending`, `claimed`, `denied`). Every poll records its time.
|
|
48
|
+
*/
|
|
49
|
+
const POLL = `
|
|
50
|
+
if redis.call('EXISTS', KEYS[1]) == 0 then return {'expired'} end
|
|
51
|
+
local now = tonumber(ARGV[1])
|
|
52
|
+
local interval = tonumber(redis.call('HGET', KEYS[1], 'interval'))
|
|
53
|
+
local last = redis.call('HGET', KEYS[1], 'lastPollAt')
|
|
54
|
+
redis.call('HSET', KEYS[1], 'lastPollAt', ARGV[1])
|
|
55
|
+
if last and now - tonumber(last) < interval * 1000 - tonumber(ARGV[2]) then
|
|
56
|
+
interval = interval + tonumber(ARGV[3])
|
|
57
|
+
redis.call('HSET', KEYS[1], 'interval', interval)
|
|
58
|
+
return {'slow_down', tostring(interval)}
|
|
59
|
+
end
|
|
60
|
+
local status = redis.call('HGET', KEYS[1], 'status')
|
|
61
|
+
if status == 'approved' then
|
|
62
|
+
local grant = redis.call('HGET', KEYS[1], 'grant')
|
|
63
|
+
redis.call('DEL', KEYS[1])
|
|
64
|
+
return {'approved', grant}
|
|
65
|
+
end
|
|
66
|
+
return {status}
|
|
67
|
+
`;
|
|
68
|
+
/** Writes the user code's pointer (`ARGV[1]`, TTL `ARGV[2]` s) unless the code is in use. */
|
|
69
|
+
const CREATE_POINTER = `
|
|
70
|
+
if redis.call('EXISTS', KEYS[1]) == 1 then return 0 end
|
|
71
|
+
redis.call('SET', KEYS[1], ARGV[1], 'EX', ARGV[2])
|
|
72
|
+
return 1
|
|
73
|
+
`;
|
|
74
|
+
/** Moves the status from `ARGV[1]` to `ARGV[2]` (setting field `ARGV[3]` to `ARGV[4]` if given). */
|
|
75
|
+
const TRANSITION = `
|
|
76
|
+
if redis.call('HGET', KEYS[1], 'status') ~= ARGV[1] then return 0 end
|
|
77
|
+
redis.call('HSET', KEYS[1], 'status', ARGV[2])
|
|
78
|
+
if ARGV[3] then redis.call('HSET', KEYS[1], ARGV[3], ARGV[4]) end
|
|
79
|
+
return 1
|
|
80
|
+
`;
|
|
81
|
+
const codeInvalid = () => new ApiError("device_sign_in.code_invalid", "This code is unknown or has expired; check the code shown by capybara-device, or run capybara-device login again");
|
|
82
|
+
/** A user code as typed → `XXXX-XXXX`, or null when it cannot be one. */
|
|
83
|
+
export function normalizeUserCode(input) {
|
|
84
|
+
const s = input.toUpperCase().replace(/[\s-]/g, "");
|
|
85
|
+
if (s.length !== USER_CODE_LENGTH)
|
|
86
|
+
return null;
|
|
87
|
+
for (const c of s)
|
|
88
|
+
if (!USER_CODE_ALPHABET.includes(c))
|
|
89
|
+
return null;
|
|
90
|
+
return `${s.slice(0, 4)}-${s.slice(4)}`;
|
|
91
|
+
}
|
|
92
|
+
/** A uniformly random user code (rejection sampling keeps every letter equally likely). */
|
|
93
|
+
function newUserCode() {
|
|
94
|
+
const n = USER_CODE_ALPHABET.length;
|
|
95
|
+
const limit = 256 - (256 % n);
|
|
96
|
+
let out = "";
|
|
97
|
+
while (out.length < USER_CODE_LENGTH) {
|
|
98
|
+
for (const b of randomBytes(USER_CODE_LENGTH * 2)) {
|
|
99
|
+
if (b < limit && out.length < USER_CODE_LENGTH)
|
|
100
|
+
out += USER_CODE_ALPHABET[b % n];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return `${out.slice(0, 4)}-${out.slice(4)}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Device authorization (environments spec §6.2, §13.3; the shape of RFC 8628). The program asks
|
|
107
|
+
* for a code pair (`authorize`), the signed-in person confirms the user code on the web page
|
|
108
|
+
* `/device` (`pending`, `confirm` or `deny`), and the program polls `token` until it gets the
|
|
109
|
+
* machine credential, once. State lives only in Redis, both keys with the code's TTL
|
|
110
|
+
* (`devices.local.authCodeTtlSeconds`): `capk:device-auth:<sha256(deviceCode)>` (a hash:
|
|
111
|
+
* `info` JSON, `status`, `interval`, `lastPollAt`, the parked `grant`) and
|
|
112
|
+
* `capk:device-user:<userCode>` → the device code's hash. The device code itself is never stored.
|
|
113
|
+
*/
|
|
114
|
+
let DeviceAuthService = class DeviceAuthService {
|
|
115
|
+
db;
|
|
116
|
+
txHost;
|
|
117
|
+
redis;
|
|
118
|
+
config;
|
|
119
|
+
devices;
|
|
120
|
+
machines;
|
|
121
|
+
log;
|
|
122
|
+
constructor(db, txHost, redis, config, devices, machines, log) {
|
|
123
|
+
this.db = db;
|
|
124
|
+
this.txHost = txHost;
|
|
125
|
+
this.redis = redis;
|
|
126
|
+
this.config = config;
|
|
127
|
+
this.devices = devices;
|
|
128
|
+
this.machines = machines;
|
|
129
|
+
this.log = log;
|
|
130
|
+
}
|
|
131
|
+
/** A new code pair for a machine. Needs `http.publicUrl` (the page and the connection URL). */
|
|
132
|
+
async authorize(machine) {
|
|
133
|
+
const web = this.publicUrl();
|
|
134
|
+
const { authCodeTtlSeconds: ttl, pollIntervalSeconds: interval } = this.config.get().devices.local;
|
|
135
|
+
const deviceCode = DEVICE_CODE_PREFIX + randomBytes(32).toString("base64url");
|
|
136
|
+
const hash = sha256Hex(deviceCode);
|
|
137
|
+
for (let attempt = 0;; attempt++) {
|
|
138
|
+
const userCode = newUserCode();
|
|
139
|
+
// the pointer first: a user code is never shared by two device codes
|
|
140
|
+
const free = await this.redis.eval(CREATE_POINTER, 1, deviceUserKey(userCode), hash, ttl);
|
|
141
|
+
if (free !== 1) {
|
|
142
|
+
if (attempt >= 4)
|
|
143
|
+
throw new Error("could not find a free device user code");
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const info = {
|
|
147
|
+
machine,
|
|
148
|
+
userCode,
|
|
149
|
+
expiresAt: new Date(Date.now() + ttl * 1000).toISOString(),
|
|
150
|
+
};
|
|
151
|
+
await this.redis
|
|
152
|
+
.multi()
|
|
153
|
+
.hset(authKeyOf(hash), {
|
|
154
|
+
info: JSON.stringify(info),
|
|
155
|
+
status: "pending",
|
|
156
|
+
interval: String(interval),
|
|
157
|
+
})
|
|
158
|
+
.expire(authKeyOf(hash), ttl)
|
|
159
|
+
.exec();
|
|
160
|
+
return {
|
|
161
|
+
deviceCode,
|
|
162
|
+
userCode,
|
|
163
|
+
verificationUri: `${web}${DEVICE_PAGE_PATH}`,
|
|
164
|
+
verificationUriComplete: `${web}${DEVICE_PAGE_PATH}?code=${userCode}`,
|
|
165
|
+
interval,
|
|
166
|
+
expiresIn: ttl,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The program's poll: the grant once the person confirmed (the code is consumed), else
|
|
172
|
+
* `device_sign_in.authorization_pending`, `device_sign_in.slow_down` (details `[{ interval }]`, the grown
|
|
173
|
+
* interval), `device_sign_in.denied` or `device_sign_in.expired` (also for an unknown code).
|
|
174
|
+
*/
|
|
175
|
+
async token(deviceCode) {
|
|
176
|
+
const connectUrl = this.connectUrl();
|
|
177
|
+
if (!DEVICE_CODE_RE.test(deviceCode))
|
|
178
|
+
throw expired();
|
|
179
|
+
const r = (await this.redis.eval(POLL, 1, deviceAuthKey(deviceCode), String(Date.now()), String(POLL_JITTER_MS), String(SLOW_DOWN_STEP_SECONDS)));
|
|
180
|
+
switch (r[0]) {
|
|
181
|
+
case "approved": {
|
|
182
|
+
const grant = JSON.parse(r[1]);
|
|
183
|
+
const local = this.config.get().devices.local;
|
|
184
|
+
return {
|
|
185
|
+
...grant,
|
|
186
|
+
connectUrl,
|
|
187
|
+
reconnectGraceSeconds: local.reconnectGraceSeconds,
|
|
188
|
+
maxFrameBytes: local.maxFrameBytes,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
case "slow_down":
|
|
192
|
+
throw new ApiError("device_sign_in.slow_down", `Polling too fast; wait ${r[1]} seconds between polls`, [{ interval: Number(r[1]) }]);
|
|
193
|
+
case "denied":
|
|
194
|
+
throw new ApiError("device_sign_in.denied", "The sign-in was denied in the browser");
|
|
195
|
+
case "pending":
|
|
196
|
+
case "claimed":
|
|
197
|
+
throw new ApiError("device_sign_in.authorization_pending", "Waiting for the code to be confirmed in the browser");
|
|
198
|
+
default:
|
|
199
|
+
throw expired();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/** The machine waiting behind a user code, for the confirmation page. */
|
|
203
|
+
async pending(userCode) {
|
|
204
|
+
const { info } = await this.lookup(userCode, "pending");
|
|
205
|
+
return { machine: info.machine, expiresAt: info.expiresAt };
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The person confirms a user code: in an org where they may use agents (`agents.use`), into
|
|
209
|
+
* one of their own live local devices or a new one named `name` (` 2`, ` 3`, … appended
|
|
210
|
+
* while the name is taken). One transaction creates the device if needed, issues the
|
|
211
|
+
* machine (revoking the device's previous one) and audits
|
|
212
|
+
* `device.machine_connected` (retried once when a concurrent confirmation took the new
|
|
213
|
+
* name); after the commit the credential is parked for the poll ({@link park}). The code is
|
|
214
|
+
* claimed first, so two confirmations of one code cannot both issue a machine; a confirmation
|
|
215
|
+
* that fails before the commit leaves it pending.
|
|
216
|
+
*/
|
|
217
|
+
async confirm(principal, input) {
|
|
218
|
+
await authorizeOrgAction(this.db.db, principal, input.orgId, "agents.use");
|
|
219
|
+
const { info, hash } = await this.lookup(input.userCode, "pending");
|
|
220
|
+
if (!(await this.transition(hash, "pending", "claimed")))
|
|
221
|
+
throw codeInvalid();
|
|
222
|
+
let issued;
|
|
223
|
+
try {
|
|
224
|
+
issued = await this.confirmIn(principal.account.id, input, info).catch((e) => {
|
|
225
|
+
// a concurrent confirmation took the same new name between our read and our insert
|
|
226
|
+
if (input.name !== undefined && e instanceof ApiError && e.code === "device.name_taken") {
|
|
227
|
+
return this.confirmIn(principal.account.id, input, info);
|
|
228
|
+
}
|
|
229
|
+
throw e;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
await this.transition(hash, "claimed", "pending").catch(() => undefined);
|
|
234
|
+
throw e;
|
|
235
|
+
}
|
|
236
|
+
await this.park(hash, info, issued);
|
|
237
|
+
return { deviceId: issued.deviceId };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Parks the committed machine's credential for the poll. When that fails (the code expired
|
|
241
|
+
* meanwhile, or Redis failed) the machine is revoked again, so no credential nobody holds stays
|
|
242
|
+
* valid, and the person is told to start over: `device_sign_in.expired` / `device_sign_in.unavailable`.
|
|
243
|
+
*/
|
|
244
|
+
async park(hash, info, issued) {
|
|
245
|
+
let parked;
|
|
246
|
+
let failure;
|
|
247
|
+
try {
|
|
248
|
+
parked = await this.transition(hash, "claimed", "approved", JSON.stringify(issued.grant));
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
parked = false;
|
|
252
|
+
failure = e;
|
|
253
|
+
}
|
|
254
|
+
if (parked) {
|
|
255
|
+
await this.redis.del(deviceUserKey(info.userCode)).catch((err) => {
|
|
256
|
+
this.log.warn("could not delete a used device user code", { err });
|
|
257
|
+
});
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
this.log.warn("device credential could not be parked; the machine is revoked", {
|
|
261
|
+
deviceId: issued.deviceId,
|
|
262
|
+
machineId: issued.machineId,
|
|
263
|
+
err: failure,
|
|
264
|
+
});
|
|
265
|
+
await this.abandon(issued);
|
|
266
|
+
// the program's next poll then ends with device_sign_in.expired instead of waiting out the TTL
|
|
267
|
+
await this.redis.del(authKeyOf(hash), deviceUserKey(info.userCode)).catch(() => undefined);
|
|
268
|
+
if (failure === undefined)
|
|
269
|
+
throw expired();
|
|
270
|
+
throw new ApiError("device_sign_in.unavailable", "The machine could not be connected; run capybara-device login again");
|
|
271
|
+
}
|
|
272
|
+
/** Revokes a machine whose credential never reached the program (see {@link park}). */
|
|
273
|
+
async abandon(issued) {
|
|
274
|
+
const { grant, machineId } = issued;
|
|
275
|
+
if (!(await this.machines.revokeMachine(machineId)))
|
|
276
|
+
return;
|
|
277
|
+
await audit(this.db.db, {
|
|
278
|
+
actorAccountId: issued.accountId,
|
|
279
|
+
orgId: grant.orgId,
|
|
280
|
+
action: "device.machine_revoked",
|
|
281
|
+
target: grant.deviceId,
|
|
282
|
+
detail: { machineId, reason: "sign_in_incomplete" },
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/** The person refuses a user code: the program's next poll gets `device_sign_in.denied`. */
|
|
286
|
+
async deny(userCode) {
|
|
287
|
+
const { info, hash } = await this.lookup(userCode, "pending");
|
|
288
|
+
if (!(await this.transition(hash, "pending", "denied")))
|
|
289
|
+
throw codeInvalid();
|
|
290
|
+
await this.redis.del(deviceUserKey(info.userCode));
|
|
291
|
+
}
|
|
292
|
+
async confirmIn(accountId, input, info) {
|
|
293
|
+
const { orgId } = input;
|
|
294
|
+
let deviceId;
|
|
295
|
+
if (input.name !== undefined) {
|
|
296
|
+
const name = await this.freeName(orgId, accountId, input.name);
|
|
297
|
+
deviceId = (await this.devices.createLocal(orgId, accountId, name)).id;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
const env = await this.db
|
|
301
|
+
.selectFrom("devices")
|
|
302
|
+
.select("id")
|
|
303
|
+
.where("id", "=", input.deviceId)
|
|
304
|
+
.where("org_id", "=", orgId)
|
|
305
|
+
.where("owner_kind", "=", "personal")
|
|
306
|
+
.where("owner_account_id", "=", accountId)
|
|
307
|
+
.where("source", "=", "local")
|
|
308
|
+
.where("provider", "=", LOCAL_PROVIDER)
|
|
309
|
+
.where("deleted_at", "is", null)
|
|
310
|
+
.forNoKeyUpdate()
|
|
311
|
+
.executeTakeFirst();
|
|
312
|
+
if (!env)
|
|
313
|
+
throw deviceNotFound();
|
|
314
|
+
deviceId = env.id;
|
|
315
|
+
}
|
|
316
|
+
const { machine } = info;
|
|
317
|
+
const { machineId, credential } = await this.machines.issue({
|
|
318
|
+
orgId,
|
|
319
|
+
deviceId,
|
|
320
|
+
accountId,
|
|
321
|
+
...machine,
|
|
322
|
+
});
|
|
323
|
+
await audit(this.db.db, {
|
|
324
|
+
actorAccountId: accountId,
|
|
325
|
+
orgId,
|
|
326
|
+
action: "device.machine_connected",
|
|
327
|
+
target: deviceId,
|
|
328
|
+
detail: { machineId, ...machine },
|
|
329
|
+
});
|
|
330
|
+
return {
|
|
331
|
+
deviceId,
|
|
332
|
+
machineId,
|
|
333
|
+
accountId,
|
|
334
|
+
grant: { credential, orgId, deviceId },
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/** `name`, or `name 2`, `name 3`, … : the first that is none of the person's live names. */
|
|
338
|
+
async freeName(orgId, accountId, name) {
|
|
339
|
+
const taken = new Set((await this.db
|
|
340
|
+
.selectFrom("devices")
|
|
341
|
+
.select("name")
|
|
342
|
+
.where("org_id", "=", orgId)
|
|
343
|
+
.where("owner_account_id", "=", accountId)
|
|
344
|
+
.where("deleted_at", "is", null)
|
|
345
|
+
.where("name", "is not", null)
|
|
346
|
+
.execute()).map((r) => r.name.toLowerCase()));
|
|
347
|
+
let candidate = name;
|
|
348
|
+
for (let n = 2; taken.has(candidate.toLowerCase()); n++) {
|
|
349
|
+
const suffix = ` ${n}`;
|
|
350
|
+
candidate = `${name.slice(0, 64 - suffix.length)}${suffix}`;
|
|
351
|
+
}
|
|
352
|
+
return candidate;
|
|
353
|
+
}
|
|
354
|
+
/** The code behind a user code with status `status`, else `device_sign_in.code_invalid`. */
|
|
355
|
+
async lookup(userCode, status) {
|
|
356
|
+
const code = normalizeUserCode(userCode);
|
|
357
|
+
if (code === null)
|
|
358
|
+
throw codeInvalid();
|
|
359
|
+
const hash = await this.redis.get(deviceUserKey(code));
|
|
360
|
+
if (hash === null)
|
|
361
|
+
throw codeInvalid();
|
|
362
|
+
const [info, current] = await this.redis.hmget(authKeyOf(hash), "info", "status");
|
|
363
|
+
if (info === null || info === undefined || current !== status)
|
|
364
|
+
throw codeInvalid();
|
|
365
|
+
return { info: JSON.parse(info), hash };
|
|
366
|
+
}
|
|
367
|
+
async transition(hash, from, to, grant) {
|
|
368
|
+
const args = grant === undefined ? [from, to] : [from, to, "grant", grant];
|
|
369
|
+
return (await this.redis.eval(TRANSITION, 1, authKeyOf(hash), ...args)) === 1;
|
|
370
|
+
}
|
|
371
|
+
/** `http.publicUrl` without trailing slashes; unset → `device.unavailable`. */
|
|
372
|
+
publicUrl() {
|
|
373
|
+
const url = this.config.get().http.publicUrl;
|
|
374
|
+
if (!url) {
|
|
375
|
+
throw new ApiError("device.unavailable", "Connecting machines needs http.publicUrl to be configured; ask the super admin");
|
|
376
|
+
}
|
|
377
|
+
return url.replace(/\/+$/, "");
|
|
378
|
+
}
|
|
379
|
+
/** The machine's WebSocket URL: the public URL with `ws` / `wss` and `/device/connect`. */
|
|
380
|
+
connectUrl() {
|
|
381
|
+
return `${this.publicUrl().replace(/^http/i, "ws")}${DEVICE_CONNECT_PATH}`;
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
__decorate([
|
|
385
|
+
Transactional()
|
|
386
|
+
], DeviceAuthService.prototype, "abandon", null);
|
|
387
|
+
__decorate([
|
|
388
|
+
Transactional()
|
|
389
|
+
], DeviceAuthService.prototype, "confirmIn", null);
|
|
390
|
+
DeviceAuthService = __decorate([
|
|
391
|
+
Injectable(),
|
|
392
|
+
__param(0, Inject(KernelDb)),
|
|
393
|
+
__param(1, Inject(TransactionHost)),
|
|
394
|
+
__param(2, Inject(REDIS)),
|
|
395
|
+
__param(3, Inject(KernelConfigService)),
|
|
396
|
+
__param(4, Inject(DevicesService)),
|
|
397
|
+
__param(5, Inject(MachinesService)),
|
|
398
|
+
__param(6, Inject(KERNEL_LOGGER))
|
|
399
|
+
], DeviceAuthService);
|
|
400
|
+
export { DeviceAuthService };
|
|
401
|
+
const expired = () => new ApiError("device_sign_in.expired", "This sign-in code has expired or was already used; run capybara-device login again");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device sign-in (environments spec §13.3): {@link DeviceAuthService} behind
|
|
3
|
+
* `DeviceAuthController`. Kept apart from {@link LocalDevicesModule}, which `DevicesModule`
|
|
4
|
+
* imports (deleting a device revokes its machine), while sign-in needs both.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DeviceAuthModule {
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Module } from "@nestjs/common";
|
|
8
|
+
import { DevicesModule } from "../devices/devices.module.js";
|
|
9
|
+
import { DeviceAuthService } from "./device-auth.js";
|
|
10
|
+
import { LocalDevicesModule } from "./local-devices.module.js";
|
|
11
|
+
/**
|
|
12
|
+
* Device sign-in (environments spec §13.3): {@link DeviceAuthService} behind
|
|
13
|
+
* `DeviceAuthController`. Kept apart from {@link LocalDevicesModule}, which `DevicesModule`
|
|
14
|
+
* imports (deleting a device revokes its machine), while sign-in needs both.
|
|
15
|
+
*/
|
|
16
|
+
let DeviceAuthModule = class DeviceAuthModule {
|
|
17
|
+
};
|
|
18
|
+
DeviceAuthModule = __decorate([
|
|
19
|
+
Module({
|
|
20
|
+
imports: [LocalDevicesModule, DevicesModule],
|
|
21
|
+
providers: [DeviceAuthService],
|
|
22
|
+
exports: [DeviceAuthService],
|
|
23
|
+
})
|
|
24
|
+
], DeviceAuthModule);
|
|
25
|
+
export { DeviceAuthModule };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type WebSocket } from "@fastify/websocket";
|
|
2
|
+
import type { FastifyInstance, FastifyRequest } from "fastify";
|
|
3
|
+
import type { MachineIdentity } from "./machines.js";
|
|
4
|
+
/** The device connection route (environments spec §13.4). */
|
|
5
|
+
export declare const DEVICE_CONNECT_ROUTE = "/device/connect";
|
|
6
|
+
/** The header carrying the program's protocol version. */
|
|
7
|
+
export declare const DEVICE_PROTOCOL_HEADER = "x-capybara-device-protocol";
|
|
8
|
+
/** What the route needs from the gateway (`LocalDeviceGateway`). */
|
|
9
|
+
export interface DeviceRoutesGateway {
|
|
10
|
+
authenticate(credential: string): Promise<MachineIdentity | null>;
|
|
11
|
+
accept(socket: WebSocket, identity: MachineIdentity, credential: string): void;
|
|
12
|
+
}
|
|
13
|
+
export interface DeviceRoutesOptions {
|
|
14
|
+
gateway: DeviceRoutesGateway;
|
|
15
|
+
/** `devices.local.maxFrameBytes`: a larger incoming frame closes the socket (1009). */
|
|
16
|
+
maxFrameBytes: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A WebSocket upgrade: `Upgrade` lists `websocket` and `Connection` lists `upgrade` (both
|
|
20
|
+
* case-insensitive). Other upgrades (`h2c`, …) are ordinary requests here.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isWebSocketUpgrade(req: FastifyRequest): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Registers `GET /device/connect` (the gateway role only) in its own encapsulated scope with
|
|
25
|
+
* `@fastify/websocket`: a raw Fastify route outside Nest, so neither the API's `AuthGuard` nor its
|
|
26
|
+
* CSRF check applies; the route checks the machine credential itself, before the upgrade (401
|
|
27
|
+
* `device.credential_invalid`), then the protocol header (426 `device.program_outdated`).
|
|
28
|
+
* Must be called before Nest `app.init()`, on the root instance.
|
|
29
|
+
*
|
|
30
|
+
* `@fastify/websocket` sends every upgrade request of the server through the Fastify router; the
|
|
31
|
+
* root hooks below keep that from reaching any other route: a WebSocket upgrade to another path
|
|
32
|
+
* is answered 404 and its socket closed once answered (Node would have dropped it without a
|
|
33
|
+
* listener). Other upgrades (`h2c`) reach their route as ordinary requests; their socket, which
|
|
34
|
+
* no HTTP connection owns any more, is closed once answered as well (the upgrade is declined).
|
|
35
|
+
*/
|
|
36
|
+
export declare function registerDeviceConnectRoute(fastify: FastifyInstance, opts: DeviceRoutesOptions): Promise<void>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { DEVICE_PROTOCOL_VERSION } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import websocket, {} from "@fastify/websocket";
|
|
3
|
+
import { errorBody } from "../errors.js";
|
|
4
|
+
/** The device connection route (environments spec §13.4). */
|
|
5
|
+
export const DEVICE_CONNECT_ROUTE = "/device/connect";
|
|
6
|
+
/** The header carrying the program's protocol version. */
|
|
7
|
+
export const DEVICE_PROTOCOL_HEADER = "x-capybara-device-protocol";
|
|
8
|
+
/** The comma-separated tokens of a header, lowercased. */
|
|
9
|
+
function tokens(v) {
|
|
10
|
+
return [v ?? []]
|
|
11
|
+
.flat()
|
|
12
|
+
.flatMap((x) => x.split(","))
|
|
13
|
+
.map((t) => t.trim().toLowerCase());
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A WebSocket upgrade: `Upgrade` lists `websocket` and `Connection` lists `upgrade` (both
|
|
17
|
+
* case-insensitive). Other upgrades (`h2c`, …) are ordinary requests here.
|
|
18
|
+
*/
|
|
19
|
+
export function isWebSocketUpgrade(req) {
|
|
20
|
+
return viaUpgrade(req) && tokens(req.headers.upgrade).includes("websocket");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A request Node handed to the server's `upgrade` listeners (`Connection: upgrade` and an
|
|
24
|
+
* `Upgrade` header, any protocol): its socket belongs to no HTTP connection any more.
|
|
25
|
+
*/
|
|
26
|
+
function viaUpgrade(req) {
|
|
27
|
+
return req.headers.upgrade !== undefined && tokens(req.headers.connection).includes("upgrade");
|
|
28
|
+
}
|
|
29
|
+
/** The `Bearer` credential of the request, or "". */
|
|
30
|
+
function bearer(req) {
|
|
31
|
+
const h = req.headers.authorization;
|
|
32
|
+
const m = typeof h === "string" ? /^Bearer\s+(\S+)\s*$/i.exec(h) : null;
|
|
33
|
+
return m?.[1] ?? "";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Registers `GET /device/connect` (the gateway role only) in its own encapsulated scope with
|
|
37
|
+
* `@fastify/websocket`: a raw Fastify route outside Nest, so neither the API's `AuthGuard` nor its
|
|
38
|
+
* CSRF check applies; the route checks the machine credential itself, before the upgrade (401
|
|
39
|
+
* `device.credential_invalid`), then the protocol header (426 `device.program_outdated`).
|
|
40
|
+
* Must be called before Nest `app.init()`, on the root instance.
|
|
41
|
+
*
|
|
42
|
+
* `@fastify/websocket` sends every upgrade request of the server through the Fastify router; the
|
|
43
|
+
* root hooks below keep that from reaching any other route: a WebSocket upgrade to another path
|
|
44
|
+
* is answered 404 and its socket closed once answered (Node would have dropped it without a
|
|
45
|
+
* listener). Other upgrades (`h2c`) reach their route as ordinary requests; their socket, which
|
|
46
|
+
* no HTTP connection owns any more, is closed once answered as well (the upgrade is declined).
|
|
47
|
+
*/
|
|
48
|
+
export async function registerDeviceConnectRoute(fastify, opts) {
|
|
49
|
+
fastify.addHook("onRequest", async (req, reply) => {
|
|
50
|
+
if (!isWebSocketUpgrade(req) || req.routeOptions.url === DEVICE_CONNECT_ROUTE)
|
|
51
|
+
return;
|
|
52
|
+
return reply
|
|
53
|
+
.code(404)
|
|
54
|
+
.send(errorBody("not_found", "This path does not accept a protocol upgrade"));
|
|
55
|
+
});
|
|
56
|
+
fastify.addHook("onResponse", async (req) => {
|
|
57
|
+
if (viaUpgrade(req))
|
|
58
|
+
req.raw.socket?.destroy();
|
|
59
|
+
});
|
|
60
|
+
await fastify.register(async (scope) => {
|
|
61
|
+
await scope.register(websocket, { options: { maxPayload: opts.maxFrameBytes } });
|
|
62
|
+
const identities = new WeakMap();
|
|
63
|
+
scope.get(DEVICE_CONNECT_ROUTE, {
|
|
64
|
+
websocket: true,
|
|
65
|
+
preValidation: async (req, reply) => {
|
|
66
|
+
const cred = bearer(req);
|
|
67
|
+
const identity = cred === "" ? null : await opts.gateway.authenticate(cred);
|
|
68
|
+
if (identity === null) {
|
|
69
|
+
return reply
|
|
70
|
+
.code(401)
|
|
71
|
+
.send(errorBody("device.credential_invalid", "The machine credential is unknown or revoked. Run capybara-device logout, then capybara-device login."));
|
|
72
|
+
}
|
|
73
|
+
if (req.headers[DEVICE_PROTOCOL_HEADER] !== String(DEVICE_PROTOCOL_VERSION)) {
|
|
74
|
+
return reply
|
|
75
|
+
.code(426)
|
|
76
|
+
.send(errorBody("device.program_outdated", `This kernel speaks device protocol ${DEVICE_PROTOCOL_VERSION}. ` +
|
|
77
|
+
"Update capybara-device."));
|
|
78
|
+
}
|
|
79
|
+
identities.set(req, { identity, cred });
|
|
80
|
+
},
|
|
81
|
+
}, (socket, req) => {
|
|
82
|
+
const found = identities.get(req);
|
|
83
|
+
if (!found) {
|
|
84
|
+
socket.close(4400, "not authenticated");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
opts.gateway.accept(socket, found.identity, found.cred);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** `POST /api/v1/device/authorize`: the machine as the program describes it. */
|
|
3
|
+
export declare const DeviceAuthorizeBody: z.ZodObject<{
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
os: z.ZodEnum<{
|
|
6
|
+
darwin: "darwin";
|
|
7
|
+
linux: "linux";
|
|
8
|
+
}>;
|
|
9
|
+
arch: z.ZodString;
|
|
10
|
+
programVersion: z.ZodString;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
/** `POST /api/v1/device/token`: the secret device code from `authorize`. */
|
|
13
|
+
export declare const DeviceTokenBody: z.ZodObject<{
|
|
14
|
+
deviceCode: z.ZodString;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
export declare const DeviceUserCodeParams: z.ZodObject<{
|
|
17
|
+
userCode: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export declare const DeviceUserCodeBody: z.ZodObject<{
|
|
20
|
+
userCode: z.ZodString;
|
|
21
|
+
}, z.core.$strict>;
|
|
22
|
+
/**
|
|
23
|
+
* `POST /api/v1/device/confirm`: the org and exactly one of an existing local device of the
|
|
24
|
+
* person's (`deviceId`) or the name of a new one (`name`).
|
|
25
|
+
*/
|
|
26
|
+
export declare const DeviceConfirmBody: z.ZodObject<{
|
|
27
|
+
userCode: z.ZodString;
|
|
28
|
+
orgId: z.ZodString;
|
|
29
|
+
deviceId: z.ZodOptional<z.ZodUUID>;
|
|
30
|
+
name: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
declare const DeviceAuthorizeBodyDto_base: import("../infra/validation/create-zod-dto.js").ZodDtoClass<z.ZodObject<{
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
os: z.ZodEnum<{
|
|
35
|
+
darwin: "darwin";
|
|
36
|
+
linux: "linux";
|
|
37
|
+
}>;
|
|
38
|
+
arch: z.ZodString;
|
|
39
|
+
programVersion: z.ZodString;
|
|
40
|
+
}, z.core.$strict>>;
|
|
41
|
+
export declare class DeviceAuthorizeBodyDto extends DeviceAuthorizeBodyDto_base {
|
|
42
|
+
}
|
|
43
|
+
declare const DeviceTokenBodyDto_base: import("../infra/validation/create-zod-dto.js").ZodDtoClass<z.ZodObject<{
|
|
44
|
+
deviceCode: z.ZodString;
|
|
45
|
+
}, z.core.$strict>>;
|
|
46
|
+
export declare class DeviceTokenBodyDto extends DeviceTokenBodyDto_base {
|
|
47
|
+
}
|
|
48
|
+
declare const DeviceUserCodeParamsDto_base: import("../infra/validation/create-zod-dto.js").ZodDtoClass<z.ZodObject<{
|
|
49
|
+
userCode: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
export declare class DeviceUserCodeParamsDto extends DeviceUserCodeParamsDto_base {
|
|
52
|
+
}
|
|
53
|
+
declare const DeviceUserCodeBodyDto_base: import("../infra/validation/create-zod-dto.js").ZodDtoClass<z.ZodObject<{
|
|
54
|
+
userCode: z.ZodString;
|
|
55
|
+
}, z.core.$strict>>;
|
|
56
|
+
export declare class DeviceUserCodeBodyDto extends DeviceUserCodeBodyDto_base {
|
|
57
|
+
}
|
|
58
|
+
declare const DeviceConfirmBodyDto_base: import("../infra/validation/create-zod-dto.js").ZodDtoClass<z.ZodObject<{
|
|
59
|
+
userCode: z.ZodString;
|
|
60
|
+
orgId: z.ZodString;
|
|
61
|
+
deviceId: z.ZodOptional<z.ZodUUID>;
|
|
62
|
+
name: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, z.core.$strict>>;
|
|
64
|
+
export declare class DeviceConfirmBodyDto extends DeviceConfirmBodyDto_base {
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { DeviceName } from "../devices/dto.js";
|
|
3
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
4
|
+
/** `POST /api/v1/device/authorize`: the machine as the program describes it. */
|
|
5
|
+
export const DeviceAuthorizeBody = z
|
|
6
|
+
.object({
|
|
7
|
+
name: z.string().trim().min(1).max(64),
|
|
8
|
+
os: z.enum(["darwin", "linux"]),
|
|
9
|
+
arch: z.string().trim().min(1).max(32),
|
|
10
|
+
programVersion: z.string().trim().min(1).max(64),
|
|
11
|
+
})
|
|
12
|
+
.strict();
|
|
13
|
+
/** `POST /api/v1/device/token`: the secret device code from `authorize`. */
|
|
14
|
+
export const DeviceTokenBody = z.object({ deviceCode: z.string().min(1).max(200) }).strict();
|
|
15
|
+
/** A user code as typed (`XXXX-XXXX`; case, spaces and the dash are forgiven). */
|
|
16
|
+
const UserCode = z.string().min(1).max(32);
|
|
17
|
+
export const DeviceUserCodeParams = z.object({ userCode: UserCode });
|
|
18
|
+
export const DeviceUserCodeBody = z.object({ userCode: UserCode }).strict();
|
|
19
|
+
/**
|
|
20
|
+
* `POST /api/v1/device/confirm`: the org and exactly one of an existing local device of the
|
|
21
|
+
* person's (`deviceId`) or the name of a new one (`name`).
|
|
22
|
+
*/
|
|
23
|
+
export const DeviceConfirmBody = z
|
|
24
|
+
.object({
|
|
25
|
+
userCode: UserCode,
|
|
26
|
+
orgId: z.string().min(1).max(100),
|
|
27
|
+
deviceId: z.uuid().optional(),
|
|
28
|
+
name: DeviceName.optional(),
|
|
29
|
+
})
|
|
30
|
+
.strict()
|
|
31
|
+
.refine((b) => (b.deviceId === undefined) !== (b.name === undefined), {
|
|
32
|
+
message: "Give exactly one of deviceId and name",
|
|
33
|
+
path: ["deviceId"],
|
|
34
|
+
});
|
|
35
|
+
export class DeviceAuthorizeBodyDto extends createZodDto(DeviceAuthorizeBody, "DeviceAuthorizeBody") {
|
|
36
|
+
}
|
|
37
|
+
export class DeviceTokenBodyDto extends createZodDto(DeviceTokenBody, "DeviceTokenBody") {
|
|
38
|
+
}
|
|
39
|
+
export class DeviceUserCodeParamsDto extends createZodDto(DeviceUserCodeParams, "DeviceUserCodeParams") {
|
|
40
|
+
}
|
|
41
|
+
export class DeviceUserCodeBodyDto extends createZodDto(DeviceUserCodeBody, "DeviceUserCodeBody") {
|
|
42
|
+
}
|
|
43
|
+
export class DeviceConfirmBodyDto extends createZodDto(DeviceConfirmBody, "DeviceConfirmBody") {
|
|
44
|
+
}
|