@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.10
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 +92 -8
- package/dist/admin/admin.controller.d.ts +52 -71
- package/dist/admin/admin.controller.js +117 -63
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +47 -16
- package/dist/admin/extensions.controller.js +94 -23
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +9 -9
- package/dist/admin/setup.controller.js +28 -26
- package/dist/admin/setup.service.d.ts +20 -28
- package/dist/admin/setup.service.js +65 -65
- package/dist/agents/agent-lookup.d.ts +72 -0
- package/dist/agents/agent-lookup.js +208 -0
- 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 +54 -169
- package/dist/agents/agents.controller.js +172 -37
- package/dist/agents/agents.module.d.ts +10 -0
- package/dist/agents/agents.module.js +71 -0
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +104 -76
- package/dist/agents/agents.service.js +509 -383
- package/dist/agents/definition.d.ts +133 -21
- package/dist/agents/definition.js +361 -41
- 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 +868 -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 +78 -6
- package/dist/agents/templates.controller.js +154 -8
- package/dist/agents/templates.d.ts +132 -30
- package/dist/agents/templates.js +500 -46
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -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 +77 -0
- package/dist/background/tasks.service.js +216 -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 +102 -52
- package/dist/catalog/admin-catalog.controller.js +222 -67
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +232 -0
- package/dist/catalog/catalog-content.js +367 -0
- package/dist/catalog/catalog-files.d.ts +41 -0
- package/dist/catalog/catalog-files.js +86 -0
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +290 -0
- package/dist/catalog/catalog-items.js +676 -0
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1124 -0
- package/dist/catalog/catalog.module.d.ts +12 -0
- package/dist/catalog/catalog.module.js +81 -0
- package/dist/catalog/catalog.service.d.ts +141 -206
- package/dist/catalog/catalog.service.js +237 -528
- package/dist/catalog/claude/agents.js +15 -10
- package/dist/catalog/cli.d.ts +14 -3
- package/dist/catalog/cli.js +39 -32
- 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 +90 -0
- package/dist/catalog/component-scope.controller.js +234 -0
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +327 -0
- package/dist/catalog/component-scope.service.js +990 -0
- package/dist/catalog/component-state.d.ts +188 -0
- package/dist/catalog/component-state.js +455 -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 +45 -0
- package/dist/catalog/job-ids.js +40 -0
- package/dist/catalog/jobs.d.ts +27 -0
- package/dist/catalog/jobs.js +70 -0
- package/dist/catalog/locks.d.ts +24 -0
- package/dist/catalog/locks.js +63 -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 +53 -44
- package/dist/catalog/marketplaces.controller.js +146 -51
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +136 -26
- package/dist/catalog/marketplaces.service.js +663 -281
- package/dist/catalog/org-catalog.controller.d.ts +115 -63
- package/dist/catalog/org-catalog.controller.js +207 -100
- package/dist/catalog/org-catalog.schemas.d.ts +88 -0
- package/dist/catalog/org-catalog.schemas.js +93 -0
- package/dist/catalog/org-catalog.service.d.ts +89 -216
- package/dist/catalog/org-catalog.service.js +431 -472
- 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 +113 -0
- package/dist/catalog/org-extension.controller.js +271 -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 +801 -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 +223 -0
- package/dist/catalog/platform-components.js +763 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +270 -68
- package/dist/catalog/plugin-import.js +1004 -277
- package/dist/catalog/plugin-install.d.ts +251 -65
- package/dist/catalog/plugin-install.js +1128 -344
- package/dist/catalog/plugin-package.js +14 -1
- package/dist/catalog/plugin-upgrade.d.ts +301 -188
- package/dist/catalog/plugin-upgrade.js +1256 -1068
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +205 -117
- package/dist/catalog/requests.service.js +612 -369
- 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 +118 -0
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +11 -4
- package/dist/channels/cards.d.ts +33 -11
- package/dist/channels/cards.js +96 -24
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +130 -0
- package/dist/channels/channels.schemas.d.ts +37 -0
- package/dist/channels/channels.schemas.js +38 -0
- package/dist/channels/connections.controller.d.ts +44 -37
- package/dist/channels/connections.controller.js +83 -38
- package/dist/channels/connections.service.d.ts +101 -30
- package/dist/channels/connections.service.js +380 -147
- package/dist/channels/inbound.d.ts +44 -38
- package/dist/channels/inbound.js +190 -44
- package/dist/channels/job-ids.d.ts +10 -0
- package/dist/channels/job-ids.js +10 -0
- package/dist/channels/jobs.d.ts +85 -0
- package/dist/channels/jobs.js +157 -0
- package/dist/channels/outbound.d.ts +71 -80
- package/dist/channels/outbound.js +219 -201
- package/dist/channels/phrases.d.ts +33 -2
- package/dist/channels/phrases.js +29 -1
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +34 -8
- package/dist/channels/threads.js +79 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- package/dist/config/docs.js +5 -1
- package/dist/config/load.d.ts +3 -2
- package/dist/config/load.js +3 -2
- package/dist/config/nacos-source.js +11 -2
- package/dist/config/schema.d.ts +51 -3
- package/dist/config/schema.js +269 -27
- package/dist/conversations/access.d.ts +31 -0
- package/dist/conversations/access.js +110 -0
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/artifacts.d.ts +11 -11
- package/dist/conversations/artifacts.js +36 -10
- package/dist/conversations/attachments.controller.d.ts +1 -1
- package/dist/conversations/attachments.controller.js +8 -6
- package/dist/conversations/attachments.module.d.ts +7 -0
- package/dist/conversations/attachments.module.js +25 -0
- package/dist/conversations/attachments.service.d.ts +60 -22
- package/dist/conversations/attachments.service.js +249 -51
- package/dist/conversations/conversations.controller.d.ts +86 -50
- package/dist/conversations/conversations.controller.js +184 -103
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +72 -0
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +166 -49
- package/dist/conversations/conversations.service.js +383 -179
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +64 -27
- package/dist/conversations/event-log.js +167 -31
- package/dist/conversations/events.d.ts +252 -9
- package/dist/conversations/events.js +243 -32
- package/dist/conversations/files.d.ts +10 -10
- package/dist/conversations/files.js +37 -11
- package/dist/conversations/idem-keys.d.ts +5 -0
- package/dist/conversations/idem-keys.js +5 -0
- package/dist/conversations/job-ids.d.ts +6 -0
- package/dist/conversations/job-ids.js +6 -0
- package/dist/conversations/message-context.d.ts +79 -0
- package/dist/conversations/message-context.js +145 -0
- package/dist/conversations/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +53 -58
- package/dist/conversations/queue.js +37 -293
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +350 -0
- package/dist/conversations/titles.d.ts +83 -27
- package/dist/conversations/titles.js +195 -70
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +26 -1
- package/dist/ctx/create-ctx.js +45 -16
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/queue.js +3 -2
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +550 -25
- package/dist/db/pool.d.ts +10 -0
- package/dist/db/pool.js +4 -0
- package/dist/devices/device-auth.controller.d.ts +42 -0
- package/dist/devices/device-auth.controller.js +116 -0
- package/dist/devices/device-auth.d.ts +119 -0
- package/dist/devices/device-auth.js +403 -0
- package/dist/devices/device-auth.module.d.ts +7 -0
- package/dist/devices/device-auth.module.js +25 -0
- package/dist/devices/device-gateway.d.ts +128 -0
- package/dist/devices/device-gateway.js +530 -0
- package/dist/devices/device-provider.d.ts +89 -0
- package/dist/devices/device-provider.js +151 -0
- package/dist/devices/device-routes.d.ts +36 -0
- package/dist/devices/device-routes.js +90 -0
- package/dist/devices/devices.module.d.ts +16 -0
- package/dist/devices/devices.module.js +44 -0
- package/dist/devices/dto.d.ts +66 -0
- package/dist/devices/dto.js +44 -0
- package/dist/devices/keys.d.ts +25 -0
- package/dist/devices/keys.js +25 -0
- package/dist/devices/machines.d.ts +118 -0
- package/dist/devices/machines.js +366 -0
- package/dist/devices/relay.d.ts +100 -0
- package/dist/devices/relay.js +373 -0
- package/dist/devices/targets.d.ts +28 -0
- package/dist/devices/targets.js +73 -0
- package/dist/environments/access.d.ts +66 -0
- package/dist/environments/access.js +113 -0
- package/dist/environments/conversation-environments.d.ts +75 -0
- package/dist/environments/conversation-environments.js +231 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +36 -0
- package/dist/environments/environments.controller.js +124 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +31 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +251 -0
- package/dist/environments/environments.service.js +791 -0
- package/dist/environments/label.d.ts +11 -0
- package/dist/environments/label.js +25 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +136 -2
- package/dist/errors.js +136 -2
- package/dist/evals/budget.d.ts +42 -21
- package/dist/evals/budget.js +114 -62
- package/dist/evals/evals.module.d.ts +31 -0
- package/dist/evals/evals.module.js +114 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -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 +75 -10
- package/dist/evals/run-replay.js +218 -94
- package/dist/evals/runs.controller.d.ts +3 -58
- package/dist/evals/runs.controller.js +18 -50
- package/dist/evals/runs.service.d.ts +31 -52
- package/dist/evals/runs.service.js +281 -255
- package/dist/evals/sets.controller.d.ts +3 -29
- package/dist/evals/sets.controller.js +18 -39
- package/dist/evals/sets.service.d.ts +29 -13
- package/dist/evals/sets.service.js +262 -202
- package/dist/evals/snapshot.d.ts +5 -4
- package/dist/evals/snapshot.js +17 -4
- package/dist/evals/step-replay.d.ts +6 -8
- package/dist/evals/step-replay.js +17 -10
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.d.ts +2 -2
- package/dist/evals/trajectory.js +1 -1
- package/dist/evals/trajectory.service.d.ts +13 -7
- package/dist/evals/trajectory.service.js +56 -21
- package/dist/evals/worker.d.ts +48 -31
- package/dist/evals/worker.js +229 -123
- package/dist/extensions/admin-ops.d.ts +133 -41
- package/dist/extensions/admin-ops.js +378 -172
- package/dist/extensions/admin-view.d.ts +82 -32
- package/dist/extensions/admin-view.js +284 -71
- package/dist/extensions/approvals.d.ts +24 -10
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +112 -45
- package/dist/extensions/bootstrap.d.ts +136 -46
- package/dist/extensions/bootstrap.js +417 -167
- package/dist/extensions/cli.d.ts +32 -10
- package/dist/extensions/cli.js +52 -98
- package/dist/extensions/config-hash.d.ts +10 -0
- package/dist/extensions/config-hash.js +38 -0
- package/dist/extensions/config-issues.d.ts +19 -0
- package/dist/extensions/config-issues.js +48 -0
- 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 +55 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +146 -70
- package/dist/extensions/deployment-config.js +439 -246
- package/dist/extensions/display-name.d.ts +22 -0
- package/dist/extensions/display-name.js +77 -0
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +96 -0
- package/dist/extensions/hooks.d.ts +40 -6
- package/dist/extensions/hooks.js +83 -17
- package/dist/extensions/host.d.ts +161 -80
- package/dist/extensions/host.js +505 -213
- package/dist/extensions/installs.d.ts +73 -19
- package/dist/extensions/installs.js +174 -37
- package/dist/extensions/job-ids.d.ts +6 -0
- package/dist/extensions/job-ids.js +6 -0
- package/dist/extensions/lifecycle-topics.d.ts +18 -0
- package/dist/extensions/lifecycle-topics.js +18 -0
- package/dist/extensions/lifecycle.d.ts +35 -47
- package/dist/extensions/lifecycle.js +103 -39
- package/dist/extensions/locks.d.ts +45 -0
- package/dist/extensions/locks.js +112 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.d.ts +141 -49
- package/dist/extensions/org-config.js +471 -243
- 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 +14 -1
- package/dist/extensions/package.js +51 -2
- package/dist/extensions/permission-view.d.ts +59 -6
- package/dist/extensions/permission-view.js +7 -5
- package/dist/extensions/plugin-guides.d.ts +129 -0
- package/dist/extensions/plugin-guides.js +283 -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 +50 -2
- package/dist/extensions/registry.js +91 -4
- 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 +19 -10
- package/dist/extensions/sources.js +34 -13
- package/dist/extensions/state.module.d.ts +9 -0
- package/dist/extensions/state.module.js +38 -0
- package/dist/extensions/unavailable.d.ts +50 -0
- package/dist/extensions/unavailable.js +115 -0
- package/dist/files/files.module.d.ts +3 -0
- package/dist/files/files.module.js +22 -0
- package/dist/files/previewers.controller.d.ts +7 -2
- package/dist/files/previewers.controller.js +19 -12
- package/dist/files/previewers.d.ts +21 -19
- package/dist/files/previewers.js +114 -38
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/adapter.d.ts +3 -0
- package/dist/http/adapter.js +25 -0
- package/dist/http/api.module.d.ts +3 -110
- package/dist/http/api.module.js +86 -358
- package/dist/http/app.d.ts +22 -17
- package/dist/http/app.js +83 -52
- package/dist/http/error-filter.module.d.ts +5 -0
- package/dist/http/error-filter.module.js +18 -0
- package/dist/http/error.filter.js +2 -2
- package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +7 -3
- package/dist/http/gateway-routes.js +16 -0
- 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 +130 -38
- package/dist/identity/accounts.js +373 -186
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +9 -5
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +40 -30
- package/dist/identity/auth.guard.d.ts +16 -8
- package/dist/identity/auth.guard.js +41 -13
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/cookies.d.ts +26 -5
- package/dist/identity/cookies.js +58 -6
- package/dist/identity/external-identity-lock.d.ts +17 -0
- package/dist/identity/external-identity-lock.js +39 -0
- package/dist/identity/external.d.ts +19 -15
- package/dist/identity/external.js +163 -125
- package/dist/identity/identity.module.d.ts +6 -0
- package/dist/identity/identity.module.js +59 -0
- 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 +32 -15
- package/dist/identity/me.controller.js +78 -33
- package/dist/identity/me.schemas.d.ts +14 -0
- package/dist/identity/me.schemas.js +17 -0
- package/dist/identity/principal.d.ts +11 -3
- package/dist/identity/principal.js +11 -3
- package/dist/identity/sessions.d.ts +24 -10
- package/dist/identity/sessions.js +119 -42
- package/dist/identity/settings.d.ts +42 -23
- package/dist/identity/settings.js +137 -72
- package/dist/identity/sso.controller.d.ts +7 -7
- package/dist/identity/sso.controller.js +13 -9
- package/dist/identity/sso.d.ts +9 -12
- package/dist/identity/sso.js +54 -24
- package/dist/identity/super-admin.d.ts +20 -0
- package/dist/identity/super-admin.js +81 -0
- package/dist/inbox/inbox.module.d.ts +6 -0
- package/dist/inbox/inbox.module.js +26 -0
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/inbox.service.d.ts +68 -11
- package/dist/inbox/inbox.service.js +104 -13
- 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 +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +20 -9
- package/dist/infra/cache/cache.module.d.ts +3 -0
- package/dist/infra/cache/cache.module.js +16 -0
- package/dist/infra/cache/cache.service.d.ts +21 -0
- package/dist/infra/cache/cache.service.js +80 -0
- package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
- package/dist/infra/cache/cacheable.decorator.js +83 -0
- package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
- package/dist/infra/cli/kernel-cli.module.js +173 -0
- package/dist/infra/close-within.d.ts +15 -0
- package/dist/infra/close-within.js +36 -0
- package/dist/infra/config/config.module.d.ts +13 -0
- package/dist/infra/config/config.module.js +39 -0
- package/dist/infra/config/kernel-config.service.d.ts +25 -0
- package/dist/infra/config/kernel-config.service.js +157 -0
- package/dist/infra/database/after-commit.d.ts +6 -0
- package/dist/infra/database/after-commit.js +9 -0
- package/dist/infra/database/database.module.d.ts +25 -0
- package/dist/infra/database/database.module.js +91 -0
- package/dist/infra/database/kernel-db.d.ts +22 -0
- package/dist/infra/database/kernel-db.js +65 -0
- package/dist/infra/database/transaction-host.d.ts +50 -0
- package/dist/infra/database/transaction-host.js +125 -0
- package/dist/infra/database/transactional.decorator.d.ts +15 -0
- package/dist/infra/database/transactional.decorator.js +27 -0
- package/dist/infra/database/xact-lock.d.ts +17 -0
- package/dist/infra/database/xact-lock.js +43 -0
- package/dist/infra/events/kernel-events.d.ts +121 -0
- package/dist/infra/events/kernel-events.js +65 -0
- package/dist/infra/health/health.controller.d.ts +26 -0
- package/dist/infra/health/health.controller.js +104 -0
- package/dist/infra/health/health.module.d.ts +9 -0
- package/dist/infra/health/health.module.js +24 -0
- package/dist/infra/health/health.options.d.ts +10 -0
- package/dist/infra/health/health.options.js +15 -0
- package/dist/infra/health/shutdown-state.d.ts +6 -0
- package/dist/infra/health/shutdown-state.js +2 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
- package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
- package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
- package/dist/infra/lifecycle/process-guards.d.ts +52 -0
- package/dist/infra/lifecycle/process-guards.js +90 -0
- package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
- package/dist/infra/lifecycle/shutdown-signals.js +48 -0
- package/dist/infra/lock/key-template.d.ts +13 -0
- package/dist/infra/lock/key-template.js +46 -0
- package/dist/infra/lock/lock.module.d.ts +3 -0
- package/dist/infra/lock/lock.module.js +16 -0
- package/dist/infra/lock/lock.service.d.ts +120 -0
- package/dist/infra/lock/lock.service.js +343 -0
- package/dist/infra/lock/shared-lease.d.ts +44 -0
- package/dist/infra/lock/shared-lease.js +121 -0
- package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
- package/dist/infra/lock/with-lock.decorator.js +49 -0
- package/dist/infra/logging/logging.module.d.ts +18 -0
- package/dist/infra/logging/logging.module.js +52 -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/configured-processor.d.ts +18 -0
- package/dist/infra/queue/configured-processor.js +23 -0
- package/dist/infra/queue/job-failure.d.ts +18 -0
- package/dist/infra/queue/job-failure.js +26 -0
- package/dist/infra/queue/queue-shutdown.d.ts +27 -0
- package/dist/infra/queue/queue-shutdown.js +81 -0
- package/dist/infra/queue/queue.module.d.ts +16 -0
- package/dist/infra/queue/queue.module.js +61 -0
- package/dist/infra/queue/redis-connection.d.ts +13 -0
- package/dist/infra/queue/redis-connection.js +25 -0
- package/dist/infra/queue/retired-schedulers.d.ts +7 -0
- package/dist/infra/queue/retired-schedulers.js +9 -0
- package/dist/infra/queue/run-job.d.ts +16 -0
- package/dist/infra/queue/run-job.js +19 -0
- package/dist/infra/redis/redis.module.d.ts +24 -0
- package/dist/infra/redis/redis.module.js +91 -0
- package/dist/infra/schedule/cron-tick.d.ts +12 -0
- package/dist/infra/schedule/cron-tick.js +25 -0
- package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
- package/dist/infra/schedule/locked-cron.decorator.js +53 -0
- package/dist/infra/schedule/locked-interval.d.ts +69 -0
- package/dist/infra/schedule/locked-interval.js +190 -0
- package/dist/infra/schedule/locked-tick.d.ts +90 -0
- package/dist/infra/schedule/locked-tick.js +137 -0
- package/dist/infra/schedule/schedule.module.d.ts +8 -0
- package/dist/infra/schedule/schedule.module.js +27 -0
- package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
- package/dist/infra/schedule/scheduled-runs.js +163 -0
- package/dist/infra/swagger/swagger.d.ts +16 -0
- package/dist/infra/swagger/swagger.js +31 -0
- package/dist/infra/throttler/credential-throttler.d.ts +35 -0
- package/dist/infra/throttler/credential-throttler.js +77 -0
- package/dist/infra/throttler/named-throttlers.d.ts +36 -0
- package/dist/infra/throttler/named-throttlers.js +157 -0
- package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
- package/dist/infra/throttler/redis-throttler-storage.js +130 -0
- package/dist/infra/throttler/throttler.guard.d.ts +23 -0
- package/dist/infra/throttler/throttler.guard.js +68 -0
- package/dist/infra/throttler/throttler.module.d.ts +15 -0
- package/dist/infra/throttler/throttler.module.js +53 -0
- package/dist/infra/tokens.d.ts +20 -0
- package/dist/infra/tokens.js +20 -0
- package/dist/infra/validation/create-zod-dto.d.ts +23 -0
- package/dist/infra/validation/create-zod-dto.js +35 -0
- package/dist/infra/validation/parse-with-zod.d.ts +7 -0
- package/dist/infra/validation/parse-with-zod.js +12 -0
- package/dist/infra/validation/validation.module.d.ts +3 -0
- package/dist/infra/validation/validation.module.js +16 -0
- package/dist/infra/validation/zod-params.d.ts +7 -0
- package/dist/infra/validation/zod-params.js +42 -0
- package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
- package/dist/infra/validation/zod-validation.pipe.js +31 -0
- package/dist/kernel.d.ts +9 -241
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +145 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +465 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +34 -0
- package/dist/log-context.js +44 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +53 -10
- package/dist/log.js +168 -18
- 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 +7 -0
- package/dist/models/models.module.js +36 -0
- 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 +13 -5
- package/dist/models/prices.js +69 -39
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +16 -11
- package/dist/models/purposes.d.ts +103 -23
- package/dist/models/purposes.js +208 -77
- package/dist/net/public-address.js +3 -2
- package/dist/orgs/directory-sync.controller.d.ts +1 -1
- package/dist/orgs/directory-sync.controller.js +2 -2
- package/dist/orgs/directory-sync.d.ts +74 -35
- package/dist/orgs/directory-sync.js +243 -132
- package/dist/orgs/invitations.controller.d.ts +8 -8
- package/dist/orgs/invitations.controller.js +27 -26
- package/dist/orgs/invitations.service.d.ts +12 -9
- package/dist/orgs/invitations.service.js +130 -92
- package/dist/orgs/job-ids.d.ts +8 -0
- package/dist/orgs/job-ids.js +8 -0
- package/dist/orgs/members.service.d.ts +19 -12
- package/dist/orgs/members.service.js +161 -117
- package/dist/orgs/offboarding.d.ts +61 -60
- package/dist/orgs/offboarding.js +206 -95
- package/dist/orgs/org-lock.d.ts +33 -19
- package/dist/orgs/org-lock.js +94 -35
- package/dist/orgs/org.guard.d.ts +11 -1
- package/dist/orgs/org.guard.js +45 -34
- package/dist/orgs/orgs.controller.d.ts +13 -16
- package/dist/orgs/orgs.controller.js +29 -20
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +71 -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 +47 -21
- package/dist/orgs/orgs.service.js +166 -91
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +2 -2
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +45 -14
- package/dist/orgs/settings.service.js +110 -51
- package/dist/overrides.d.ts +63 -0
- package/dist/overrides.js +34 -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 +667 -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 +90 -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.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -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 +717 -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 +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +599 -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 +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +17 -0
- package/dist/platform/ops/connectors.ops.js +188 -0
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.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 +378 -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 +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -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 +28 -0
- package/dist/platform/ops/platform.ops.js +204 -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/skills.ops.d.ts +17 -0
- package/dist/platform/ops/skills.ops.js +216 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -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 +39 -0
- package/dist/platform/platform-ops.module.js +122 -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 +63 -0
- package/dist/roles/gateway-role.d.ts +54 -0
- package/dist/roles/gateway-role.js +118 -0
- package/dist/roles/gateway.module.d.ts +9 -0
- package/dist/roles/gateway.module.js +31 -0
- package/dist/roles/worker-role.d.ts +65 -0
- package/dist/roles/worker-role.js +151 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +106 -0
- package/dist/runtime/abort.js +19 -2
- package/dist/runtime/checkpointer.d.ts +8 -3
- package/dist/runtime/checkpointer.js +87 -55
- 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/environment-paths.d.ts +40 -0
- package/dist/runtime/context/environment-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/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +11 -4
- package/dist/runtime/hook-calls.js +41 -13
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +37 -18
- package/dist/runtime/loop.d.ts +42 -6
- package/dist/runtime/loop.js +14 -0
- package/dist/runtime/maintenance-queue.d.ts +10 -0
- package/dist/runtime/maintenance-queue.js +10 -0
- package/dist/runtime/maintenance.d.ts +50 -74
- package/dist/runtime/maintenance.js +166 -136
- package/dist/runtime/model-call.d.ts +61 -15
- package/dist/runtime/model-call.js +128 -84
- package/dist/runtime/providers.d.ts +158 -27
- package/dist/runtime/providers.js +373 -63
- package/dist/runtime/quota.d.ts +17 -3
- package/dist/runtime/quota.js +27 -2
- package/dist/runtime/retired-schedulers.d.ts +7 -0
- package/dist/runtime/retired-schedulers.js +31 -0
- 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 +43 -0
- package/dist/runtime/run-control.js +89 -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 +27 -18
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +46 -0
- package/dist/runtime/run-jobs.js +91 -0
- package/dist/runtime/run-processors.d.ts +60 -0
- package/dist/runtime/run-processors.js +185 -0
- package/dist/runtime/run-queue.d.ts +90 -58
- package/dist/runtime/run-queue.js +566 -297
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +134 -77
- package/dist/runtime/run-worker.js +412 -236
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +122 -0
- package/dist/runtime/step-log.d.ts +51 -0
- package/dist/runtime/step-log.js +111 -0
- package/dist/runtime/stream.controller.d.ts +28 -9
- package/dist/runtime/stream.controller.js +72 -13
- package/dist/runtime/stream.d.ts +27 -6
- package/dist/runtime/stream.js +102 -7
- package/dist/runtime/subagents/child.d.ts +58 -51
- package/dist/runtime/subagents/child.js +105 -86
- package/dist/runtime/subagents/definition.d.ts +32 -28
- package/dist/runtime/subagents/definition.js +89 -143
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +197 -27
- package/dist/runtime/subagents/dispatch.js +336 -270
- package/dist/runtime/subagents/limits.d.ts +32 -8
- package/dist/runtime/subagents/limits.js +44 -8
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +3 -2
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +10 -8
- 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 +27 -10
- package/dist/runtime/subagents/roster.js +49 -13
- package/dist/runtime/subagents/skill-fork.d.ts +10 -10
- package/dist/runtime/subagents/skill-fork.js +23 -8
- 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 +43 -0
- package/dist/runtime/subagents/subagents.service.js +106 -0
- 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 +121 -83
- package/dist/runtime/usage-report.js +355 -180
- package/dist/runtime/waits.d.ts +258 -81
- package/dist/runtime/waits.js +800 -263
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +68 -0
- package/dist/sandbox/jobs.js +150 -0
- package/dist/sandbox/leases.d.ts +73 -82
- package/dist/sandbox/leases.js +162 -346
- package/dist/sandbox/providers.d.ts +46 -0
- package/dist/sandbox/providers.js +83 -0
- package/dist/sandbox/sandbox.module.d.ts +9 -0
- package/dist/sandbox/sandbox.module.js +36 -0
- package/dist/sandbox/sandbox.service.d.ts +359 -151
- package/dist/sandbox/sandbox.service.js +950 -435
- package/dist/sandbox/unreachable.d.ts +30 -0
- package/dist/sandbox/unreachable.js +108 -0
- package/dist/skills/catalog.d.ts +40 -26
- package/dist/skills/catalog.js +120 -99
- package/dist/skills/changes.controller.d.ts +11 -4
- package/dist/skills/changes.controller.js +34 -9
- package/dist/skills/changes.service.d.ts +31 -21
- package/dist/skills/changes.service.js +426 -368
- package/dist/skills/invocable.controller.d.ts +2 -2
- package/dist/skills/invocable.controller.js +10 -7
- package/dist/skills/invocation-keys.d.ts +1 -1
- package/dist/skills/invocation-keys.js +1 -1
- package/dist/skills/invoke.d.ts +19 -18
- package/dist/skills/invoke.js +68 -24
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +33 -7
- package/dist/skills/skills.controller.js +79 -12
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +39 -0
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +151 -44
- package/dist/skills/skills.service.js +636 -204
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/storage/job-ids.d.ts +6 -0
- package/dist/storage/job-ids.js +6 -0
- package/dist/storage/purge.d.ts +22 -7
- package/dist/storage/purge.js +55 -3
- package/dist/storage/storage.module.d.ts +6 -0
- package/dist/storage/storage.module.js +23 -0
- package/dist/storage/storage.service.d.ts +18 -4
- package/dist/storage/storage.service.js +44 -3
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +14 -11
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/approvals.service.d.ts +53 -27
- package/dist/tools/approvals.service.js +365 -260
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtin-names.d.ts +109 -0
- package/dist/tools/builtin-names.js +173 -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 +3 -3
- package/dist/tools/builtins/ask-user.js +3 -3
- package/dist/tools/builtins/builtin-tools.d.ts +41 -0
- package/dist/tools/builtins/builtin-tools.js +151 -0
- 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 +3 -3
- package/dist/tools/builtins/read-tool-output.js +3 -3
- package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
- package/dist/tools/builtins/sandbox/bash.js +293 -41
- package/dist/tools/builtins/sandbox/common.d.ts +142 -40
- package/dist/tools/builtins/sandbox/common.js +227 -65
- package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
- package/dist/tools/builtins/sandbox/deliver.js +21 -18
- package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
- package/dist/tools/builtins/sandbox/edit.js +65 -51
- 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 +19 -14
- package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
- package/dist/tools/builtins/sandbox/grep.js +155 -36
- 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 +30 -20
- 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 +52 -45
- 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 +32 -21
- package/dist/tools/builtins/skill-load.js +125 -74
- package/dist/tools/builtins/skill-write.d.ts +4 -4
- package/dist/tools/builtins/skill-write.js +12 -12
- 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/canonical-json.d.ts +6 -0
- package/dist/tools/canonical-json.js +16 -0
- package/dist/tools/connector-content.controller.d.ts +1 -1
- package/dist/tools/connector-content.controller.js +11 -6
- package/dist/tools/connector-content.d.ts +12 -15
- package/dist/tools/connector-content.js +53 -18
- package/dist/tools/connectors.controller.d.ts +16 -3
- package/dist/tools/connectors.controller.js +34 -14
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +80 -18
- package/dist/tools/connectors.service.js +529 -358
- package/dist/tools/credentials.d.ts +20 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/display-names.d.ts +9 -0
- package/dist/tools/display-names.js +24 -0
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +116 -84
- 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 +73 -13
- package/dist/tools/info.js +151 -39
- package/dist/tools/job-ids.d.ts +13 -0
- package/dist/tools/job-ids.js +15 -0
- package/dist/tools/jobs.d.ts +24 -0
- package/dist/tools/jobs.js +69 -0
- 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 +115 -0
- package/dist/tools/naming.d.ts +1 -5
- package/dist/tools/naming.js +1 -7
- package/dist/tools/oauth/flow-paths.d.ts +16 -0
- package/dist/tools/oauth/flow-paths.js +38 -0
- package/dist/tools/oauth/flow.d.ts +30 -30
- package/dist/tools/oauth/flow.js +109 -81
- package/dist/tools/oauth/oauth.controller.d.ts +3 -3
- package/dist/tools/oauth/oauth.controller.js +12 -9
- package/dist/tools/oauth/tokens.d.ts +45 -10
- package/dist/tools/oauth/tokens.js +70 -24
- package/dist/tools/org-tool-switches.d.ts +88 -0
- package/dist/tools/org-tool-switches.js +201 -0
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +48 -4
- package/dist/tools/pipeline.d.ts +108 -80
- package/dist/tools/pipeline.js +396 -409
- package/dist/tools/policy.d.ts +4 -17
- package/dist/tools/policy.js +49 -35
- package/dist/tools/questions.controller.d.ts +2 -2
- package/dist/tools/questions.controller.js +9 -6
- package/dist/tools/questions.service.d.ts +26 -25
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +215 -84
- package/dist/tools/registry.js +382 -264
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +1 -1
- package/dist/tools/specs.d.ts +5 -4
- package/dist/tools/specs.js +3 -1
- package/dist/tools/tools.module.d.ts +10 -0
- package/dist/tools/tools.module.js +113 -0
- package/dist/tools/validate.js +1 -1
- package/dist/ui/call-extension.d.ts +16 -0
- package/dist/ui/call-extension.js +38 -0
- package/dist/ui/embed-token.d.ts +9 -5
- package/dist/ui/embed-token.js +34 -6
- package/dist/ui/ui-stream.d.ts +22 -17
- package/dist/ui/ui-stream.js +72 -12
- package/dist/ui/ui.module.d.ts +7 -0
- package/dist/ui/ui.module.js +28 -0
- package/dist/ui/views.controller.d.ts +14 -12
- package/dist/ui/views.controller.js +32 -25
- package/dist/ui/views.d.ts +10 -57
- package/dist/ui/views.js +58 -46
- package/package.json +15 -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/dist/catalog/upgrade-targets.d.ts +0 -59
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -21
- package/dist/conversations/sandbox-status.js +0 -24
- package/dist/extensions/org-config.controller.d.ts +0 -24
- package/dist/extensions/org-config.controller.js +0 -59
- package/dist/http/gateway.module.js +0 -13
- package/dist/http/health.controller.d.ts +0 -26
- package/dist/http/health.controller.js +0 -79
- package/dist/http/tokens.d.ts +0 -131
- package/dist/http/tokens.js +0 -131
- package/dist/http/zod.pipe.d.ts +0 -8
- package/dist/http/zod.pipe.js +0 -14
- package/dist/identity/enterprise-admin.d.ts +0 -14
- package/dist/identity/enterprise-admin.js +0 -27
- package/dist/identity/rate-limit.d.ts +0 -55
- package/dist/identity/rate-limit.js +0 -121
- package/dist/sandbox/lifecycle.d.ts +0 -21
- package/dist/sandbox/lifecycle.js +0 -68
- package/dist/tools/builtins/sandbox/names.d.ts +0 -7
- package/dist/tools/builtins/sandbox/names.js +0 -20
|
@@ -0,0 +1,163 @@
|
|
|
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 { Inject, Injectable, } from "@nestjs/common";
|
|
11
|
+
import { DiscoveryService, MetadataScanner } from "@nestjs/core";
|
|
12
|
+
import { SchedulerRegistry } from "@nestjs/schedule";
|
|
13
|
+
import { waitWithin } from "../close-within.js";
|
|
14
|
+
import { runOutsideTransaction } from "../database/transaction-host.js";
|
|
15
|
+
import { GracefulShutdown } from "../lifecycle/graceful-shutdown.service.js";
|
|
16
|
+
import { KERNEL_LOGGER } from "../tokens.js";
|
|
17
|
+
import { LockedIntervalScheduler } from "./locked-interval.js";
|
|
18
|
+
import { LOCKED_JOB, LOCKED_JOB_BODY, SCHEDULED_RUNS, } from "./locked-tick.js";
|
|
19
|
+
/**
|
|
20
|
+
* The runs of the `@LockedCron` / `@LockedInterval` jobs (ticks and `runOnStart` runs), their
|
|
21
|
+
* start gate ({@link open}) and their stop. At module init it attaches itself to every provider instance with a locked job
|
|
22
|
+
* (`SCHEDULED_RUNS`), so each run is tracked and gets {@link signal}. {@link stop} (idempotent)
|
|
23
|
+
* stops the cron and interval timers, aborts the signal, refuses new runs and waits for the runs in
|
|
24
|
+
* progress within its budget, capped by what is left of the shared stop deadline
|
|
25
|
+
* (`GracefulShutdown`): the runs end (and release their locks) before Redis and the pool close.
|
|
26
|
+
* Runs over the budget are abandoned with a WARN; the job's own failures after the stop began are
|
|
27
|
+
* logged at WARN / INFO, never ERROR. The kernel's stop phases call it through the worker role
|
|
28
|
+
* (`WorkerRole.stopSchedules`, awaited in the runs phase, before the extension host closes: jobs may
|
|
29
|
+
* call extensions); `beforeApplicationShutdown` covers an application without them.
|
|
30
|
+
*/
|
|
31
|
+
let ScheduledRuns = class ScheduledRuns {
|
|
32
|
+
discovery;
|
|
33
|
+
scanner;
|
|
34
|
+
crons;
|
|
35
|
+
intervals;
|
|
36
|
+
shutdown;
|
|
37
|
+
log;
|
|
38
|
+
abort = new AbortController();
|
|
39
|
+
inFlight = new Set();
|
|
40
|
+
stopping;
|
|
41
|
+
gateOpen = false;
|
|
42
|
+
/** Each locked job's body by job name, bound to its instance (for {@link runNow}). */
|
|
43
|
+
bodies = new Map();
|
|
44
|
+
constructor(discovery, scanner, crons, intervals, shutdown, log) {
|
|
45
|
+
this.discovery = discovery;
|
|
46
|
+
this.scanner = scanner;
|
|
47
|
+
this.crons = crons;
|
|
48
|
+
this.intervals = intervals;
|
|
49
|
+
this.shutdown = shutdown;
|
|
50
|
+
this.log = log;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Attaches itself to every instance with a locked job in `onModuleInit`, which runs before any
|
|
54
|
+
* `onApplicationBootstrap` hook, so the start gate already guards the jobs when the cron
|
|
55
|
+
* orchestrator and the interval scheduler arm their timers there.
|
|
56
|
+
*/
|
|
57
|
+
onModuleInit() {
|
|
58
|
+
for (const wrapper of this.discovery.getProviders()) {
|
|
59
|
+
const instance = wrapper.instance;
|
|
60
|
+
if (!instance || typeof instance !== "object" || !wrapper.isDependencyTreeStatic())
|
|
61
|
+
continue;
|
|
62
|
+
const proto = Object.getPrototypeOf(instance);
|
|
63
|
+
if (!proto)
|
|
64
|
+
continue;
|
|
65
|
+
let hasJob = false;
|
|
66
|
+
for (const m of this.scanner.getAllMethodNames(proto)) {
|
|
67
|
+
const fn = instance[m];
|
|
68
|
+
if (typeof fn !== "function" || Reflect.getMetadata(LOCKED_JOB, fn) !== true)
|
|
69
|
+
continue;
|
|
70
|
+
hasJob = true;
|
|
71
|
+
const job = Reflect.getMetadata(LOCKED_JOB_BODY, fn);
|
|
72
|
+
if (job)
|
|
73
|
+
this.bodies.set(job.name, (signal) => job.body.call(instance, signal));
|
|
74
|
+
}
|
|
75
|
+
if (hasJob) {
|
|
76
|
+
Object.defineProperty(instance, SCHEDULED_RUNS, { value: this, configurable: true });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Runs the body of the locked job named `name` once, now, outside its schedule: no tick marker
|
|
82
|
+
* and no run lock, in a fresh async context (no transaction), with the stop signal. A job's name
|
|
83
|
+
* enqueued on the maintenance queue runs this way, as the maintenance handlers of the periodic
|
|
84
|
+
* jobs did before they became locked jobs. Resolves false when no job has that name; the body's
|
|
85
|
+
* error is thrown.
|
|
86
|
+
*/
|
|
87
|
+
async runNow(name) {
|
|
88
|
+
const body = this.bodies.get(name);
|
|
89
|
+
if (!body)
|
|
90
|
+
return false;
|
|
91
|
+
await runOutsideTransaction(() => Promise.resolve(body(this.abort.signal)));
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/** The start gate is open: ticks and start runs may run. */
|
|
95
|
+
get opened() {
|
|
96
|
+
return this.gateOpen && this.stopping === undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Opens the start gate. Until this is called every tick and start run skips at INFO: the
|
|
100
|
+
* cron and interval timers are armed at application bootstrap, which runs before the kernel's
|
|
101
|
+
* start sequence (migrations, bootstrap, extension load). The kernel's worker role opens it once
|
|
102
|
+
* its queue consumers started (then starts the `runOnStart` runs); a stop closes it again.
|
|
103
|
+
*/
|
|
104
|
+
open() {
|
|
105
|
+
if (this.stopping === undefined)
|
|
106
|
+
this.gateOpen = true;
|
|
107
|
+
}
|
|
108
|
+
get stopped() {
|
|
109
|
+
return this.stopping !== undefined;
|
|
110
|
+
}
|
|
111
|
+
get signal() {
|
|
112
|
+
return this.abort.signal;
|
|
113
|
+
}
|
|
114
|
+
/** The number of runs in progress. */
|
|
115
|
+
get inFlightCount() {
|
|
116
|
+
return this.inFlight.size;
|
|
117
|
+
}
|
|
118
|
+
track(p) {
|
|
119
|
+
this.inFlight.add(p);
|
|
120
|
+
const forget = () => {
|
|
121
|
+
this.inFlight.delete(p);
|
|
122
|
+
};
|
|
123
|
+
p.then(forget, forget);
|
|
124
|
+
return p;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Stops the schedulers and waits for the runs in progress, at most `budgetMs` (capped by the
|
|
128
|
+
* shared stop deadline). Idempotent: later calls return the first call's promise.
|
|
129
|
+
*/
|
|
130
|
+
stop(budgetMs) {
|
|
131
|
+
this.stopping ??= this.runStop(budgetMs);
|
|
132
|
+
return this.stopping;
|
|
133
|
+
}
|
|
134
|
+
async beforeApplicationShutdown() {
|
|
135
|
+
await this.stop(this.shutdown.remainingMs());
|
|
136
|
+
}
|
|
137
|
+
async runStop(budgetMs) {
|
|
138
|
+
this.gateOpen = false;
|
|
139
|
+
for (const job of this.crons.getCronJobs().values())
|
|
140
|
+
void job.stop();
|
|
141
|
+
this.intervals.stopAll();
|
|
142
|
+
this.abort.abort(new Error("the scheduler is stopping"));
|
|
143
|
+
if (this.inFlight.size === 0)
|
|
144
|
+
return;
|
|
145
|
+
const waitMs = Math.max(0, Math.min(budgetMs, this.shutdown.remainingMs()));
|
|
146
|
+
if (!(await waitWithin(Promise.allSettled([...this.inFlight]), waitMs))) {
|
|
147
|
+
this.log.warn("shutdown: scheduled jobs did not stop in time; abandoned", {
|
|
148
|
+
inFlight: this.inFlight.size,
|
|
149
|
+
budgetMs: waitMs,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
ScheduledRuns = __decorate([
|
|
155
|
+
Injectable(),
|
|
156
|
+
__param(0, Inject(DiscoveryService)),
|
|
157
|
+
__param(1, Inject(MetadataScanner)),
|
|
158
|
+
__param(2, Inject(SchedulerRegistry)),
|
|
159
|
+
__param(3, Inject(LockedIntervalScheduler)),
|
|
160
|
+
__param(4, Inject(GracefulShutdown)),
|
|
161
|
+
__param(5, Inject(KERNEL_LOGGER))
|
|
162
|
+
], ScheduledRuns);
|
|
163
|
+
export { ScheduledRuns };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { INestApplication } from "@nestjs/common";
|
|
2
|
+
import { type OpenAPIObject } from "@nestjs/swagger";
|
|
3
|
+
/** A `$ref` to a named DTO's schema, for `@ApiBody({ schema: dtoRef(Dto) })` and friends. */
|
|
4
|
+
export declare function dtoRef(dto: {
|
|
5
|
+
readonly dtoName: string | undefined;
|
|
6
|
+
}): {
|
|
7
|
+
$ref: string;
|
|
8
|
+
};
|
|
9
|
+
/** Builds the OpenAPI document: the routes Nest found plus every named zod DTO's JSON Schema. */
|
|
10
|
+
export declare function buildSwaggerDocument(app: INestApplication, version: string): OpenAPIObject;
|
|
11
|
+
/**
|
|
12
|
+
* Serves the swagger UI at `/docs` (JSON at `/docs-json`) when `enabled`; otherwise does nothing
|
|
13
|
+
* and builds no document. The routes sit outside Nest's guards, so they are unauthenticated: the
|
|
14
|
+
* option is for development and trials (`http.swagger`, default false).
|
|
15
|
+
*/
|
|
16
|
+
export declare function setupSwagger(app: INestApplication, enabled: boolean, version?: string): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
|
|
2
|
+
import { registeredZodDtos } from "../validation/create-zod-dto.js";
|
|
3
|
+
/** A `$ref` to a named DTO's schema, for `@ApiBody({ schema: dtoRef(Dto) })` and friends. */
|
|
4
|
+
export function dtoRef(dto) {
|
|
5
|
+
if (dto.dtoName === undefined)
|
|
6
|
+
throw new Error("dtoRef: the DTO has no name");
|
|
7
|
+
return { $ref: `#/components/schemas/${dto.dtoName}` };
|
|
8
|
+
}
|
|
9
|
+
/** Builds the OpenAPI document: the routes Nest found plus every named zod DTO's JSON Schema. */
|
|
10
|
+
export function buildSwaggerDocument(app, version) {
|
|
11
|
+
const doc = SwaggerModule.createDocument(app, new DocumentBuilder().setTitle("Capybara kernel API").setVersion(version).build());
|
|
12
|
+
const schemas = { ...(doc.components?.schemas ?? {}) };
|
|
13
|
+
for (const dto of registeredZodDtos()) {
|
|
14
|
+
if (dto.dtoName !== undefined)
|
|
15
|
+
schemas[dto.dtoName] = dto.jsonSchema();
|
|
16
|
+
}
|
|
17
|
+
doc.components = { ...doc.components, schemas: schemas };
|
|
18
|
+
return doc;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Serves the swagger UI at `/docs` (JSON at `/docs-json`) when `enabled`; otherwise does nothing
|
|
22
|
+
* and builds no document. The routes sit outside Nest's guards, so they are unauthenticated: the
|
|
23
|
+
* option is for development and trials (`http.swagger`, default false).
|
|
24
|
+
*/
|
|
25
|
+
export function setupSwagger(app, enabled, version = "0") {
|
|
26
|
+
if (!enabled)
|
|
27
|
+
return;
|
|
28
|
+
SwaggerModule.setup("docs", app, buildSwaggerDocument(app, version), {
|
|
29
|
+
jsonDocumentUrl: "docs-json",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ThrottlerStorage } from "@nestjs/throttler";
|
|
2
|
+
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
3
|
+
import { type NamedThrottler } from "./named-throttlers.js";
|
|
4
|
+
/**
|
|
5
|
+
* The Redis key of one counter. All counters of a credential group share the hash tag
|
|
6
|
+
* `{cred:<group>}`, so the keys of one reservation live in one Redis Cluster slot (one EVAL, no
|
|
7
|
+
* CROSSSLOT).
|
|
8
|
+
*/
|
|
9
|
+
export declare const credentialRedisKey: (t: NamedThrottler, tracker: string) => string;
|
|
10
|
+
/**
|
|
11
|
+
* Credential-attempt limiting for handlers (login, change password, setup token, invitation
|
|
12
|
+
* accept), on the named-throttler table and the Redis storage.
|
|
13
|
+
* Call it inside the handler after pipes and preconditions, as the limiter is called today:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* await this.credentials.reserve(["login", "login-ip", "login-account"], req, reply);
|
|
17
|
+
* ... check the credentials ...
|
|
18
|
+
* await this.credentials.succeeded(["login", "login-ip", "login-account"], req);
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* `reserve` is one EVAL across the keys, all or nothing: a request rejected on one dimension is
|
|
22
|
+
* counted on none, and `retry-after` is the largest remaining TTL among the keys at their limit.
|
|
23
|
+
* `succeeded` is one EVAL: `clear` throttlers lose their counter, `refund` ones one attempt.
|
|
24
|
+
* FAIL-CLOSED: a Redis error propagates (a 500).
|
|
25
|
+
*/
|
|
26
|
+
export declare class CredentialThrottler {
|
|
27
|
+
private readonly storage;
|
|
28
|
+
constructor(storage: ThrottlerStorage);
|
|
29
|
+
/** Reserves one attempt on every named throttler or throws 429 `auth.rate_limited` (header set on `reply`). */
|
|
30
|
+
reserve(names: readonly string[], req: FastifyRequest, reply: FastifyReply): Promise<void>;
|
|
31
|
+
/** A successful attempt: clears the `clear` counters and refunds one on the `refund` ones. */
|
|
32
|
+
succeeded(names: readonly string[], req: FastifyRequest): Promise<void>;
|
|
33
|
+
private resolve;
|
|
34
|
+
private redisStorage;
|
|
35
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
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 { Inject, Injectable } from "@nestjs/common";
|
|
11
|
+
import { getStorageToken } from "@nestjs/throttler";
|
|
12
|
+
import { ApiError } from "../../errors.js";
|
|
13
|
+
import { NAMED_THROTTLERS, throttlerKey } from "./named-throttlers.js";
|
|
14
|
+
/**
|
|
15
|
+
* The Redis key of one counter. All counters of a credential group share the hash tag
|
|
16
|
+
* `{cred:<group>}`, so the keys of one reservation live in one Redis Cluster slot (one EVAL, no
|
|
17
|
+
* CROSSSLOT).
|
|
18
|
+
*/
|
|
19
|
+
export const credentialRedisKey = (t, tracker) => `throttler:{cred:${t.group}}:${t.name}:${throttlerKey(t.name, tracker)}`;
|
|
20
|
+
/**
|
|
21
|
+
* Credential-attempt limiting for handlers (login, change password, setup token, invitation
|
|
22
|
+
* accept), on the named-throttler table and the Redis storage.
|
|
23
|
+
* Call it inside the handler after pipes and preconditions, as the limiter is called today:
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* await this.credentials.reserve(["login", "login-ip", "login-account"], req, reply);
|
|
27
|
+
* ... check the credentials ...
|
|
28
|
+
* await this.credentials.succeeded(["login", "login-ip", "login-account"], req);
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* `reserve` is one EVAL across the keys, all or nothing: a request rejected on one dimension is
|
|
32
|
+
* counted on none, and `retry-after` is the largest remaining TTL among the keys at their limit.
|
|
33
|
+
* `succeeded` is one EVAL: `clear` throttlers lose their counter, `refund` ones one attempt.
|
|
34
|
+
* FAIL-CLOSED: a Redis error propagates (a 500).
|
|
35
|
+
*/
|
|
36
|
+
let CredentialThrottler = class CredentialThrottler {
|
|
37
|
+
storage;
|
|
38
|
+
constructor(storage) {
|
|
39
|
+
this.storage = storage;
|
|
40
|
+
}
|
|
41
|
+
/** Reserves one attempt on every named throttler or throws 429 `auth.rate_limited` (header set on `reply`). */
|
|
42
|
+
async reserve(names, req, reply) {
|
|
43
|
+
const ts = this.resolve(names);
|
|
44
|
+
const r = await this.redisStorage().reserve(ts.map((t) => credentialRedisKey(t, t.getTracker(req))), ts.map((t) => t.limit), ts[0]?.ttl ?? 0);
|
|
45
|
+
if (r.allowed)
|
|
46
|
+
return;
|
|
47
|
+
reply.header("retry-after", String(r.retryAfterSeconds));
|
|
48
|
+
throw new ApiError("auth.rate_limited", ts[0]?.message ?? "");
|
|
49
|
+
}
|
|
50
|
+
/** A successful attempt: clears the `clear` counters and refunds one on the `refund` ones. */
|
|
51
|
+
async succeeded(names, req) {
|
|
52
|
+
const ts = this.resolve(names);
|
|
53
|
+
const key = (t) => credentialRedisKey(t, t.getTracker(req));
|
|
54
|
+
await this.redisStorage().succeeded(ts.filter((t) => t.onSuccess === "clear").map(key), ts.filter((t) => t.onSuccess === "refund").map(key));
|
|
55
|
+
}
|
|
56
|
+
resolve(names) {
|
|
57
|
+
const ts = names.map((n) => {
|
|
58
|
+
const t = NAMED_THROTTLERS.find((x) => x.name === n);
|
|
59
|
+
if (!t)
|
|
60
|
+
throw new Error(`unknown throttler "${n}"`);
|
|
61
|
+
return t;
|
|
62
|
+
});
|
|
63
|
+
const group = ts[0]?.group;
|
|
64
|
+
if (!group || ts.some((t) => t.group !== group || t.ttl !== ts[0]?.ttl)) {
|
|
65
|
+
throw new Error("credential throttlers of one call must share one group and window");
|
|
66
|
+
}
|
|
67
|
+
return ts;
|
|
68
|
+
}
|
|
69
|
+
redisStorage() {
|
|
70
|
+
return this.storage;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
CredentialThrottler = __decorate([
|
|
74
|
+
Injectable(),
|
|
75
|
+
__param(0, Inject(getStorageToken()))
|
|
76
|
+
], CredentialThrottler);
|
|
77
|
+
export { CredentialThrottler };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FastifyRequest } from "fastify";
|
|
2
|
+
/** The counting window of every credential throttler, ms (first attempt starts it). */
|
|
3
|
+
export declare const CREDENTIAL_WINDOW_MS = 900000;
|
|
4
|
+
/** A named throttler: a limit over a tracker, answering 429 `auth.rate_limited` with `message`. */
|
|
5
|
+
export interface NamedThrottler {
|
|
6
|
+
name: string;
|
|
7
|
+
limit: number;
|
|
8
|
+
ttl: number;
|
|
9
|
+
/** The 429 message (today's text of the route that used the limiter). */
|
|
10
|
+
message: string;
|
|
11
|
+
/** The credential group: throttlers of one group are reserved together (one Redis hash tag). */
|
|
12
|
+
group: string;
|
|
13
|
+
/** What a successful attempt does to this counter: delete it, or give one attempt back. */
|
|
14
|
+
onSuccess: "clear" | "refund";
|
|
15
|
+
getTracker: (req: FastifyRequest) => string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Every rate limit of the kernel today, as named throttlers (spec §2.4). The credential routes
|
|
19
|
+
* reserve theirs through `CredentialThrottler` inside the handler (one group per route, all or
|
|
20
|
+
* nothing); a plain per-route limit would opt in with `@Throttled(...names)`.
|
|
21
|
+
*
|
|
22
|
+
* | route | names (reserved via `CredentialThrottler`) |
|
|
23
|
+
* |---|---|
|
|
24
|
+
* | `POST /api/v1/auth/login` | `login`, `login-ip`, `login-account` |
|
|
25
|
+
* | `PUT /api/v1/me/password` | `change-password`, `change-password-ip` |
|
|
26
|
+
* | `POST /api/v1/setup` | `setup-token`, `setup-ip` |
|
|
27
|
+
* | `POST /api/v1/invitations/:token/accept` | `invitation`, `invitation-ip` |
|
|
28
|
+
* | `GET /api/v1/device/pending/:userCode`, `POST /api/v1/device/confirm`, `POST /api/v1/device/deny` | `device-code-account` |
|
|
29
|
+
*
|
|
30
|
+
* `POST /api/v1/device/authorize` and `POST /api/v1/device/token` opt in to `device-authorize-ip`
|
|
31
|
+
* and `device-token-ip` with `@Throttled` (every request counts; neither checks a guessable
|
|
32
|
+
* credential: the device code is 32 random bytes).
|
|
33
|
+
*/
|
|
34
|
+
export declare const NAMED_THROTTLERS: readonly NamedThrottler[];
|
|
35
|
+
/** The storage key of a named throttler's counter for a tracker (shared by the guard and success paths). */
|
|
36
|
+
export declare const throttlerKey: (name: string, tracker: string) => string;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/** The counting window of every credential throttler, ms (first attempt starts it). */
|
|
3
|
+
export const CREDENTIAL_WINDOW_MS = 900_000;
|
|
4
|
+
const sha256 = (s) => createHash("sha256").update(s).digest("hex");
|
|
5
|
+
/** Logins are normalized the way local accounts are (no format check): case / space variants share a count. */
|
|
6
|
+
const loginHash = (login) => sha256(login.normalize("NFKC").trim().toLowerCase());
|
|
7
|
+
const bodyLogin = (req) => {
|
|
8
|
+
const b = req.body;
|
|
9
|
+
const login = typeof b === "object" && b !== null ? b.login : undefined;
|
|
10
|
+
return typeof login === "string" ? login : "";
|
|
11
|
+
};
|
|
12
|
+
/** The client address: Fastify's `request.ip`, which already honors `http.trustProxy`. */
|
|
13
|
+
const ip = (req) => req.ip;
|
|
14
|
+
const principalAccountId = (req) => {
|
|
15
|
+
const p = req.principal;
|
|
16
|
+
return p?.account?.id ?? "";
|
|
17
|
+
};
|
|
18
|
+
const routeToken = (req) => String(req.params?.token ?? "");
|
|
19
|
+
const LOGIN_MSG = "Too many failed login attempts; try again later";
|
|
20
|
+
/**
|
|
21
|
+
* Every rate limit of the kernel today, as named throttlers (spec §2.4). The credential routes
|
|
22
|
+
* reserve theirs through `CredentialThrottler` inside the handler (one group per route, all or
|
|
23
|
+
* nothing); a plain per-route limit would opt in with `@Throttled(...names)`.
|
|
24
|
+
*
|
|
25
|
+
* | route | names (reserved via `CredentialThrottler`) |
|
|
26
|
+
* |---|---|
|
|
27
|
+
* | `POST /api/v1/auth/login` | `login`, `login-ip`, `login-account` |
|
|
28
|
+
* | `PUT /api/v1/me/password` | `change-password`, `change-password-ip` |
|
|
29
|
+
* | `POST /api/v1/setup` | `setup-token`, `setup-ip` |
|
|
30
|
+
* | `POST /api/v1/invitations/:token/accept` | `invitation`, `invitation-ip` |
|
|
31
|
+
* | `GET /api/v1/device/pending/:userCode`, `POST /api/v1/device/confirm`, `POST /api/v1/device/deny` | `device-code-account` |
|
|
32
|
+
*
|
|
33
|
+
* `POST /api/v1/device/authorize` and `POST /api/v1/device/token` opt in to `device-authorize-ip`
|
|
34
|
+
* and `device-token-ip` with `@Throttled` (every request counts; neither checks a guessable
|
|
35
|
+
* credential: the device code is 32 random bytes).
|
|
36
|
+
*/
|
|
37
|
+
export const NAMED_THROTTLERS = [
|
|
38
|
+
// (login, IP): 10; an attacker filling one login from one IP leaves the owner's other IPs alone (R25)
|
|
39
|
+
{
|
|
40
|
+
name: "login",
|
|
41
|
+
group: "login",
|
|
42
|
+
onSuccess: "clear",
|
|
43
|
+
limit: 10,
|
|
44
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
45
|
+
message: LOGIN_MSG,
|
|
46
|
+
getTracker: (req) => `${loginHash(bodyLogin(req))}:${sha256(ip(req))}`,
|
|
47
|
+
},
|
|
48
|
+
// client IP across logins (credential stuffing): 50
|
|
49
|
+
{
|
|
50
|
+
name: "login-ip",
|
|
51
|
+
group: "login",
|
|
52
|
+
onSuccess: "refund",
|
|
53
|
+
limit: 50,
|
|
54
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
55
|
+
message: LOGIN_MSG,
|
|
56
|
+
getTracker: ip,
|
|
57
|
+
},
|
|
58
|
+
// one login across IPs (distributed guessing): 100
|
|
59
|
+
{
|
|
60
|
+
name: "login-account",
|
|
61
|
+
group: "login",
|
|
62
|
+
onSuccess: "clear",
|
|
63
|
+
limit: 100,
|
|
64
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
65
|
+
message: LOGIN_MSG,
|
|
66
|
+
getTracker: (req) => loginHash(bodyLogin(req)),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "change-password",
|
|
70
|
+
group: "change-password",
|
|
71
|
+
onSuccess: "clear",
|
|
72
|
+
limit: 10,
|
|
73
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
74
|
+
message: "Too many failed password attempts; try again later",
|
|
75
|
+
getTracker: (req) => sha256(principalAccountId(req)),
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "change-password-ip",
|
|
79
|
+
group: "change-password",
|
|
80
|
+
onSuccess: "refund",
|
|
81
|
+
limit: 50,
|
|
82
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
83
|
+
message: "Too many failed password attempts; try again later",
|
|
84
|
+
getTracker: ip,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "setup-token",
|
|
88
|
+
group: "setup",
|
|
89
|
+
onSuccess: "clear",
|
|
90
|
+
limit: 100,
|
|
91
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
92
|
+
message: "Too many setup attempts; try again later",
|
|
93
|
+
getTracker: () => sha256("token"),
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "setup-ip",
|
|
97
|
+
group: "setup",
|
|
98
|
+
onSuccess: "refund",
|
|
99
|
+
limit: 10,
|
|
100
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
101
|
+
message: "Too many setup attempts; try again later",
|
|
102
|
+
getTracker: ip,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "invitation",
|
|
106
|
+
group: "invitation",
|
|
107
|
+
onSuccess: "clear",
|
|
108
|
+
limit: 10,
|
|
109
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
110
|
+
message: "Too many invitation attempts; try again later",
|
|
111
|
+
getTracker: (req) => sha256(routeToken(req)),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "invitation-ip",
|
|
115
|
+
group: "invitation",
|
|
116
|
+
onSuccess: "refund",
|
|
117
|
+
limit: 20,
|
|
118
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
119
|
+
message: "Too many invitation attempts; try again later",
|
|
120
|
+
getTracker: ip,
|
|
121
|
+
},
|
|
122
|
+
// device sign-in codes issued per client address (each one holds Redis state for its TTL): 20.
|
|
123
|
+
// Opted in with @Throttled, which counts every request before the handler: group and onSuccess
|
|
124
|
+
// are unused (they matter only to CredentialThrottler).
|
|
125
|
+
{
|
|
126
|
+
name: "device-authorize-ip",
|
|
127
|
+
group: "device-authorize",
|
|
128
|
+
onSuccess: "clear",
|
|
129
|
+
limit: 20,
|
|
130
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
131
|
+
message: "Too many device sign-in attempts; try again later",
|
|
132
|
+
getTracker: ip,
|
|
133
|
+
},
|
|
134
|
+
// device token polls per client address (@Throttled like device-authorize-ip): 600, one login
|
|
135
|
+
// polls up to 120 times (600 s / 5 s), so several machines behind one NAT address fit
|
|
136
|
+
{
|
|
137
|
+
name: "device-token-ip",
|
|
138
|
+
group: "device-token",
|
|
139
|
+
onSuccess: "clear",
|
|
140
|
+
limit: 600,
|
|
141
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
142
|
+
message: "Too many device sign-in polls; try again later",
|
|
143
|
+
getTracker: ip,
|
|
144
|
+
},
|
|
145
|
+
// user codes tried per signed-in person (guessing another machine's code): 10, refunded on success
|
|
146
|
+
{
|
|
147
|
+
name: "device-code-account",
|
|
148
|
+
group: "device-code",
|
|
149
|
+
onSuccess: "refund",
|
|
150
|
+
limit: 10,
|
|
151
|
+
ttl: CREDENTIAL_WINDOW_MS,
|
|
152
|
+
message: "Too many device code attempts; try again later",
|
|
153
|
+
getTracker: (req) => sha256(principalAccountId(req)),
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
/** The storage key of a named throttler's counter for a tracker (shared by the guard and success paths). */
|
|
157
|
+
export const throttlerKey = (name, tracker) => sha256(`${name}:${tracker}`);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ThrottlerStorage } from "@nestjs/throttler";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
3
|
+
import type { KernelLogger } from "../../log.js";
|
|
4
|
+
interface ThrottlerStorageRecord {
|
|
5
|
+
totalHits: number;
|
|
6
|
+
timeToExpire: number;
|
|
7
|
+
isBlocked: boolean;
|
|
8
|
+
timeToBlockExpire: number;
|
|
9
|
+
}
|
|
10
|
+
export type ReserveResult = {
|
|
11
|
+
allowed: true;
|
|
12
|
+
} | {
|
|
13
|
+
allowed: false;
|
|
14
|
+
retryAfterSeconds: number;
|
|
15
|
+
};
|
|
16
|
+
/** The Redis key of a counter. The `{key}` hash tag keeps it in one Redis Cluster slot. */
|
|
17
|
+
export declare const throttlerRedisKey: (key: string, throttlerName: string) => string;
|
|
18
|
+
/**
|
|
19
|
+
* The `@nestjs/throttler` storage on the shared Redis connection: every replica counts into the
|
|
20
|
+
* same keys (the default in-memory storage would give each replica its own quota). Fail-open: a
|
|
21
|
+
* Redis error lets the request through and logs a warning, so a Redis blip never turns every
|
|
22
|
+
* throttled route into a 5xx (availability over limit precision).
|
|
23
|
+
*/
|
|
24
|
+
export declare class RedisThrottlerStorage implements ThrottlerStorage {
|
|
25
|
+
private readonly redis;
|
|
26
|
+
private readonly log;
|
|
27
|
+
constructor(redis: Redis, log: KernelLogger);
|
|
28
|
+
/** `ttl` is in milliseconds (the throttler convention); `blockDuration` is unused. */
|
|
29
|
+
increment(key: string, ttl: number, limit: number, _blockDuration: number, throttlerName: string): Promise<ThrottlerStorageRecord>;
|
|
30
|
+
/**
|
|
31
|
+
* Reserves one attempt on every key (which must share one hash tag), all or nothing. Unlike
|
|
32
|
+
* `increment` it does NOT swallow Redis errors: the caller fails closed.
|
|
33
|
+
*/
|
|
34
|
+
reserve(keys: string[], limits: number[], ttlMs: number): Promise<ReserveResult>;
|
|
35
|
+
/** A successful attempt: deletes the `clear` counters and refunds one on the `refund` ones. Fails closed. */
|
|
36
|
+
succeeded(clear: string[], refund: string[]): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export {};
|