@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
|
@@ -1,422 +1,531 @@
|
|
|
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
|
+
};
|
|
1
10
|
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
12
|
import { sql } from "kysely";
|
|
3
13
|
import { ApiError } from "../errors.js";
|
|
4
14
|
import { audit } from "../identity/audit.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
15
|
+
import { readOrgMarketplaceBrowse } from "../identity/settings.js";
|
|
16
|
+
import { SuperAdminLock } from "../identity/super-admin.js";
|
|
17
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
18
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
19
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
20
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
21
|
+
import { LockService } from "../infra/lock/lock.service.js";
|
|
22
|
+
import { WithLock } from "../infra/lock/with-lock.decorator.js";
|
|
23
|
+
import { OrgLock } from "../orgs/org-lock.js";
|
|
7
24
|
import { roleAtLeast } from "../orgs/roles.js";
|
|
25
|
+
import { CatalogService } from "./catalog.service.js";
|
|
26
|
+
import { CatalogScopeService } from "./catalog-scope.service.js";
|
|
27
|
+
import { assertEntryNotDeprecated, loadMarketplaceEntry } from "./marketplaces.service.js";
|
|
28
|
+
import { OrgCatalogService } from "./org-catalog.service.js";
|
|
29
|
+
import { PluginImport } from "./plugin-import.js";
|
|
30
|
+
import { itemsSeenBy } from "./scope-state.js";
|
|
8
31
|
/** 申请列表一次最多返回的条数。 */
|
|
9
32
|
export const CATALOG_REQUESTS_LIST_MAX = 200;
|
|
10
33
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
11
34
|
const requestNotFound = () => new ApiError("catalog.request_not_found", "Catalog request not found");
|
|
12
35
|
const itemNotFound = () => new ApiError("catalog.item_not_found", "Catalog item not found");
|
|
13
|
-
const itemDisabled = () => new ApiError("catalog.item_disabled", "This catalog item is disabled by the
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.forShare()
|
|
23
|
-
.executeTakeFirst();
|
|
24
|
-
}
|
|
25
|
-
async function hasGrant(db, orgId, itemId) {
|
|
26
|
-
const g = await db
|
|
27
|
-
.selectFrom("catalog_org_grants")
|
|
28
|
-
.select("item_id")
|
|
29
|
-
.where("item_id", "=", itemId)
|
|
30
|
-
.where("org_id", "=", orgId)
|
|
31
|
-
.executeTakeFirst();
|
|
32
|
-
return g !== undefined;
|
|
33
|
-
}
|
|
36
|
+
const itemDisabled = () => new ApiError("catalog.item_disabled", "This catalog item is disabled by the super admin and cannot be requested");
|
|
37
|
+
const alreadyDecided = () => new ApiError("catalog.request_decided", "This request has already been decided");
|
|
38
|
+
const pendingExists = () => new ApiError("catalog.request_pending", "This organization already has a pending request of this kind for it");
|
|
39
|
+
/** A unique violation (the partial index of pending requests). */
|
|
40
|
+
const isUniqueViolation = (e) => typeof e === "object" && e !== null && e.code === "23505";
|
|
41
|
+
/** The deployment-level kinds (decided by the super admin). */
|
|
42
|
+
const DEPLOYMENT_KINDS = ["access", "import"];
|
|
43
|
+
/** The org-level kinds (decided by the org admins). */
|
|
44
|
+
const ORG_KINDS = ["enable", "connector_setup"];
|
|
34
45
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
46
|
+
* Catalog requests under plugin scope (spec §5.1). Three kinds, one pending request per (org,
|
|
47
|
+
* kind, item or entry) (partial unique indexes; org-side writes run inside the org row lock):
|
|
48
|
+
* - `enable`: a member asks the org admins to switch on an item that is off in the org (an
|
|
49
|
+
* `optional` item); an org admin approving it switches the item on, as that admin;
|
|
50
|
+
* - `access`: an org admin asks the super admin for a `named` item shown to orgs outside its
|
|
51
|
+
* list; approving adds the org to the list (`CatalogScopeService.addOrg`), the scope sync then
|
|
52
|
+
* installs it;
|
|
53
|
+
* - `import`: an org admin asks for a marketplace entry not in the catalog (deployment setting
|
|
54
|
+
* `orgMarketplaceBrowse`); approving prepares the import and returns its staging, the request
|
|
55
|
+
* resolves when the super admin confirms it (scope default `named` = the requesting org);
|
|
56
|
+
* - `connector_setup` (ruling P4-7): one per agent (`agent_id`, `pending_keys`), asking the org
|
|
57
|
+
* admins to set up an agent's pending connectors; written by the agents module
|
|
58
|
+
* (`PendingConnectorRequests`), closed by binding (`approved`) or the agent's deletion
|
|
59
|
+
* (`cancelled`); here it is listed and rejected.
|
|
60
|
+
* A rejection stores an optional reason. Decided requests show in the requester's inbox until
|
|
61
|
+
* dismissed. No in-process state.
|
|
42
62
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
63
|
+
let CatalogRequestsService = class CatalogRequestsService {
|
|
64
|
+
kdb;
|
|
65
|
+
orgLock;
|
|
66
|
+
adminLock;
|
|
67
|
+
orgCatalog;
|
|
68
|
+
scope;
|
|
69
|
+
catalog;
|
|
70
|
+
config;
|
|
71
|
+
pluginImport;
|
|
72
|
+
txHost;
|
|
73
|
+
lockService;
|
|
74
|
+
constructor(kdb,
|
|
75
|
+
/** The org row and super admin locks: both join the caller's transaction. */
|
|
76
|
+
orgLock, adminLock, orgCatalog, scope, catalog, config, pluginImport, txHost,
|
|
77
|
+
/** Serializes the approvals of one `import` request (`@WithLock`). */
|
|
78
|
+
lockService) {
|
|
79
|
+
this.kdb = kdb;
|
|
80
|
+
this.orgLock = orgLock;
|
|
81
|
+
this.adminLock = adminLock;
|
|
82
|
+
this.orgCatalog = orgCatalog;
|
|
83
|
+
this.scope = scope;
|
|
84
|
+
this.catalog = catalog;
|
|
85
|
+
this.config = config;
|
|
86
|
+
this.pluginImport = pluginImport;
|
|
87
|
+
this.txHost = txHost;
|
|
88
|
+
this.lockService = lockService;
|
|
48
89
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (item.policy === "needs_approval" && !(await hasGrant(t, orgId, approvedBy))) {
|
|
53
|
-
throw new ApiError("catalog.approval_required", "This catalog item needs enterprise admin approval before this organization can install it");
|
|
90
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
91
|
+
get db() {
|
|
92
|
+
return this.kdb.db;
|
|
54
93
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
.
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
* Throws `catalog.item_disabled` when a plugin's own catalog item is disabled (the message names
|
|
77
|
-
* the plugin).
|
|
78
|
-
*/
|
|
79
|
-
export function pluginItemDisabled(names) {
|
|
80
|
-
return new ApiError("catalog.item_disabled", `The enterprise admin disabled the catalog item of extension ${names.join(", ")}; it cannot be newly enabled, not even through a plugin that bundles it`);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* When an org enables an extension directly (not by installing from an item, e.g.
|
|
84
|
-
* `PUT /orgs/:orgId/extensions/:extension`), it is judged by every catalog item that brought it into the
|
|
85
|
-
* deployment (`extension_catalog_sources`), and **the strictest wins**: any source disabled ->
|
|
86
|
-
* `catalog.item_disabled`; otherwise any source needs_approval without a grant of that item to the
|
|
87
|
-
* org -> `catalog.approval_required`; all allow / granted -> passes. Deleted items no longer count
|
|
88
|
-
* as sources (an enterprise admin deleting an item withdraws its constraint). No source (not
|
|
89
|
-
* installed through the catalog) -> not bound by catalog policy.
|
|
90
|
-
*/
|
|
91
|
-
export async function assertPluginSourcesInstallable(t, orgId, plugin) {
|
|
92
|
-
const rows = await t
|
|
93
|
-
.selectFrom("extension_catalog_sources as s")
|
|
94
|
-
.innerJoin("catalog_items as i", "i.id", "s.item_id")
|
|
95
|
-
.select(["i.id", "i.policy"])
|
|
96
|
-
.where("s.plugin", "=", plugin)
|
|
97
|
-
.where("i.deleted_at", "is", null)
|
|
98
|
-
.orderBy("i.id")
|
|
99
|
-
.forShare("i")
|
|
100
|
-
.execute();
|
|
101
|
-
if (rows.some((r) => r.policy === "disabled"))
|
|
102
|
-
throw itemDisabled();
|
|
103
|
-
for (const r of rows) {
|
|
104
|
-
if (r.policy === "needs_approval" && !(await hasGrant(t, orgId, r.id))) {
|
|
105
|
-
throw new ApiError("catalog.approval_required", "A catalog item that brought this extension in needs enterprise admin approval before this organization can enable it");
|
|
94
|
+
/**
|
|
95
|
+
* A request for a catalog item (`POST /orgs/:orgId/catalog/:itemId/requests`): `enable`
|
|
96
|
+
* (`catalog.request`, members and up) or `access` (`catalog.decide`, org admins), checked first.
|
|
97
|
+
* The item as the org sees it: absent (missing, deleted, hidden, disabled for a member) ->
|
|
98
|
+
* `catalog.item_not_found`; disabled -> `catalog.item_disabled` for an org admin; its extension
|
|
99
|
+
* unable to run on the platform -> `catalog.request_invalid`; `access` needs
|
|
100
|
+
* `not_offered`, `enable` needs `off` (else `catalog.request_invalid`); a pending request of the
|
|
101
|
+
* kind -> `catalog.request_pending`. Audits `catalog.requested`.
|
|
102
|
+
*/
|
|
103
|
+
async requestItem(orgId, actor, itemId, input, opts = {}) {
|
|
104
|
+
const action = input.kind === "access" ? "catalog.decide" : "catalog.request";
|
|
105
|
+
await this.authorize(orgId, actor, action);
|
|
106
|
+
if (!UUID_RE.test(itemId))
|
|
107
|
+
throw itemNotFound();
|
|
108
|
+
const [item] = await this.orgCatalog.list(orgId, actor, itemId);
|
|
109
|
+
if (!item)
|
|
110
|
+
throw itemNotFound();
|
|
111
|
+
if (item.state === "unavailable" && item.reason === "plugin_disabled")
|
|
112
|
+
throw itemDisabled();
|
|
113
|
+
if (item.state === "unavailable") {
|
|
114
|
+
throw new ApiError("catalog.request_invalid", `This plugin's extension cannot run on the platform now (${item.reason ?? "unavailable"}); only the super admin can fix that`);
|
|
106
115
|
}
|
|
116
|
+
const want = input.kind === "access" ? "not_offered" : "off";
|
|
117
|
+
if (item.state !== want) {
|
|
118
|
+
throw new ApiError("catalog.request_invalid", input.kind === "access"
|
|
119
|
+
? "This plugin is already offered to this organization"
|
|
120
|
+
: "This plugin is not off in this organization (or not one an org admin switches on)");
|
|
121
|
+
}
|
|
122
|
+
const id = await this.writeItemRequest(orgId, actor, item.name, itemId, input, opts);
|
|
123
|
+
return this.view(id);
|
|
107
124
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
* deleted), status `cancelled` (the decider is the actor). Each one audits
|
|
112
|
-
* `catalog.request_cancelled` (with the reason). Returns how many were cancelled.
|
|
113
|
-
*/
|
|
114
|
-
export async function cancelPendingRequests(t, where, actor, reason, opts = {}) {
|
|
115
|
-
let q = t
|
|
116
|
-
.updateTable("catalog_requests")
|
|
117
|
-
.set({ status: "cancelled", decided_by: actor, decided_at: sql `now()` })
|
|
118
|
-
.where("status", "=", "pending");
|
|
119
|
-
q =
|
|
120
|
-
"itemId" in where ? q.where("item_id", "=", where.itemId) : q.where("org_id", "=", where.orgId);
|
|
121
|
-
const rows = await q.returning(["id", "org_id", "item_id", "stage"]).execute();
|
|
122
|
-
for (const r of rows) {
|
|
123
|
-
await audit(t, {
|
|
124
|
-
actorAccountId: actor,
|
|
125
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
126
|
-
orgId: r.org_id,
|
|
127
|
-
action: "catalog.request_cancelled",
|
|
128
|
-
target: r.id,
|
|
129
|
-
detail: { itemId: r.item_id, stage: r.stage, reason },
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
return rows.length;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Catalog requests and approvals (C22 / F-AF). Two levels:
|
|
136
|
-
* - a member request (stage `org`) goes to the org admins' inbox, an org admin (`catalog.decide`)
|
|
137
|
-
* approves or rejects it; when the item is needs_approval without a grant for this org, approving
|
|
138
|
-
* moves the request to stage `deployment` (still pending) for the enterprise admins to decide;
|
|
139
|
-
* - an org admin installing a needs_approval item without a grant -> creates a stage `deployment`
|
|
140
|
-
* request (or moves the existing pending one there);
|
|
141
|
-
* - an enterprise admin approving a stage `deployment` request -> writes a grant
|
|
142
|
-
* (`catalog_org_grants`, valid across versions), after which org admins can install.
|
|
143
|
-
* One pending request per org and item (partial unique index; org-side writes all run inside the
|
|
144
|
-
* org row lock, in order). No in-process state.
|
|
145
|
-
*/
|
|
146
|
-
export class CatalogRequestsService {
|
|
147
|
-
db;
|
|
148
|
-
constructor(db) {
|
|
149
|
-
this.db = db;
|
|
125
|
+
/** The role check alone, before any item error (a member cannot probe items by error codes). */
|
|
126
|
+
async authorize(orgId, actor, action) {
|
|
127
|
+
await this.orgLock.lockAndAuthorize(orgId, actor, action);
|
|
150
128
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
const existing = await this.pendingRow(t, orgId, itemId);
|
|
168
|
-
if (existing)
|
|
169
|
-
return { id: existing.id, created: false };
|
|
170
|
-
const id = randomUUID();
|
|
129
|
+
async writeItemRequest(orgId, actor, name, itemId, input, opts) {
|
|
130
|
+
const t = this.db;
|
|
131
|
+
await this.orgLock.lockAndAuthorize(orgId, actor, input.kind === "access" ? "catalog.decide" : "catalog.request");
|
|
132
|
+
const existing = await t
|
|
133
|
+
.selectFrom("catalog_requests")
|
|
134
|
+
.select("id")
|
|
135
|
+
.where("org_id", "=", orgId)
|
|
136
|
+
.where("item_id", "=", itemId)
|
|
137
|
+
.where("kind", "=", input.kind)
|
|
138
|
+
.where("status", "=", "pending")
|
|
139
|
+
.executeTakeFirst();
|
|
140
|
+
if (existing)
|
|
141
|
+
throw pendingExists();
|
|
142
|
+
const id = randomUUID();
|
|
143
|
+
try {
|
|
171
144
|
await t
|
|
172
145
|
.insertInto("catalog_requests")
|
|
173
146
|
.values({
|
|
174
147
|
id,
|
|
175
148
|
org_id: orgId,
|
|
176
149
|
item_id: itemId,
|
|
177
|
-
|
|
178
|
-
|
|
150
|
+
kind: input.kind,
|
|
151
|
+
// still written for the old NOT NULL / CHECK, never read
|
|
152
|
+
stage: input.kind === "enable" ? "org" : "deployment",
|
|
179
153
|
requested_by: actor,
|
|
180
154
|
note: input.note ?? "",
|
|
181
155
|
})
|
|
182
156
|
.execute();
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
if (isUniqueViolation(e))
|
|
160
|
+
throw pendingExists();
|
|
161
|
+
throw e;
|
|
162
|
+
}
|
|
163
|
+
await audit(t, {
|
|
164
|
+
actorAccountId: actor,
|
|
165
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
166
|
+
orgId,
|
|
167
|
+
action: "catalog.requested",
|
|
168
|
+
target: id,
|
|
169
|
+
detail: { itemId, name, kind: input.kind, ...opts.auditDetail },
|
|
192
170
|
});
|
|
193
|
-
return
|
|
171
|
+
return id;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* An org admin asks for a marketplace entry to be imported (`POST /orgs/:orgId/
|
|
175
|
+
* marketplace-requests`, `catalog.decide`). The deployment setting `orgMarketplaceBrowse` off ->
|
|
176
|
+
* `catalog.marketplace_browse_disabled`; the marketplace or the entry / version missing ->
|
|
177
|
+
* `marketplace.not_found` / `marketplace.entry_not_found`; a deprecated version ->
|
|
178
|
+
* `marketplace.entry_deprecated`; a live item of that name ->
|
|
179
|
+
* `catalog.request_invalid` (ask for access instead) when the org can see or request that item
|
|
180
|
+
* (a hidden one is not revealed: the request is accepted); a pending request for the entry ->
|
|
181
|
+
* `catalog.request_pending`. Audits `catalog.requested`.
|
|
182
|
+
*/
|
|
183
|
+
async requestImport(orgId, actor, input, opts = {}) {
|
|
184
|
+
const id = await this.writeImportRequest(orgId, actor, input, opts);
|
|
185
|
+
return this.view(id);
|
|
194
186
|
}
|
|
195
|
-
|
|
196
|
-
|
|
187
|
+
async writeImportRequest(orgId, actor, input, opts) {
|
|
188
|
+
const t = this.db;
|
|
189
|
+
await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.decide");
|
|
190
|
+
if (!(await readOrgMarketplaceBrowse(t))) {
|
|
191
|
+
throw new ApiError("catalog.marketplace_browse_disabled", "Organizations cannot browse the marketplaces or request imports in this deployment");
|
|
192
|
+
}
|
|
193
|
+
const { entry } = await loadMarketplaceEntry(t, this.config.get(), input.marketplaceId, input.name, input.version);
|
|
194
|
+
assertEntryNotDeprecated(entry);
|
|
195
|
+
const live = await t
|
|
196
|
+
.selectFrom("catalog_items")
|
|
197
|
+
.select("id")
|
|
198
|
+
.where("name", "=", input.name)
|
|
199
|
+
.where("deleted_at", "is", null)
|
|
200
|
+
.executeTakeFirst();
|
|
201
|
+
// Only an item the org can see or request is named back to it; a hidden `named` item stays
|
|
202
|
+
// unknown and the request is accepted (approving it adds the org to that item's list)
|
|
203
|
+
if (live && (await itemsSeenBy(t, orgId, [live.id])).has(live.id)) {
|
|
204
|
+
throw new ApiError("catalog.request_invalid", `Plugin ${input.name} is already in the catalog; request access to it instead`);
|
|
205
|
+
}
|
|
206
|
+
const existing = await t
|
|
197
207
|
.selectFrom("catalog_requests")
|
|
198
|
-
.select(
|
|
208
|
+
.select("id")
|
|
199
209
|
.where("org_id", "=", orgId)
|
|
200
|
-
.where("
|
|
210
|
+
.where("kind", "=", "import")
|
|
211
|
+
.where("marketplace_id", "=", input.marketplaceId)
|
|
212
|
+
.where("entry_name", "=", input.name)
|
|
201
213
|
.where("status", "=", "pending")
|
|
202
214
|
.executeTakeFirst();
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
* An org admin installing a needs_approval item without a grant: in the caller's transaction (the
|
|
206
|
-
* caller has locked the org row and re-checked the role) creates a stage `deployment` request; an
|
|
207
|
-
* existing pending request is moved to deployment (a member request goes to the enterprise admins
|
|
208
|
-
* with it). Returns the request id. Audits `catalog.requested`.
|
|
209
|
-
*/
|
|
210
|
-
async requestDeployment(t, orgId, actor, item, version, opts = {}) {
|
|
211
|
-
const existing = await this.pendingRow(t, orgId, item.id);
|
|
212
|
-
if (existing) {
|
|
213
|
-
if (existing.stage === "org") {
|
|
214
|
-
await t
|
|
215
|
-
.updateTable("catalog_requests")
|
|
216
|
-
.set({ stage: "deployment", org_decided_by: actor, org_decided_at: sql `now()` })
|
|
217
|
-
.where("id", "=", existing.id)
|
|
218
|
-
.execute();
|
|
219
|
-
await audit(t, {
|
|
220
|
-
actorAccountId: actor,
|
|
221
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
222
|
-
orgId,
|
|
223
|
-
action: "catalog.request_decided",
|
|
224
|
-
target: existing.id,
|
|
225
|
-
detail: { itemId: item.id, decision: "approve", stage: "org", escalated: true },
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
return existing.id;
|
|
229
|
-
}
|
|
215
|
+
if (existing)
|
|
216
|
+
throw pendingExists();
|
|
230
217
|
const id = randomUUID();
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
218
|
+
try {
|
|
219
|
+
await t
|
|
220
|
+
.insertInto("catalog_requests")
|
|
221
|
+
.values({
|
|
222
|
+
id,
|
|
223
|
+
org_id: orgId,
|
|
224
|
+
item_id: null,
|
|
225
|
+
kind: "import",
|
|
226
|
+
stage: "deployment",
|
|
227
|
+
marketplace_id: input.marketplaceId,
|
|
228
|
+
entry_name: input.name,
|
|
229
|
+
entry_version: input.version,
|
|
230
|
+
requested_by: actor,
|
|
231
|
+
note: input.note ?? "",
|
|
232
|
+
})
|
|
233
|
+
.execute();
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
if (isUniqueViolation(e))
|
|
237
|
+
throw pendingExists();
|
|
238
|
+
throw e;
|
|
239
|
+
}
|
|
242
240
|
await audit(t, {
|
|
243
241
|
actorAccountId: actor,
|
|
244
242
|
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
245
243
|
orgId,
|
|
246
244
|
action: "catalog.requested",
|
|
247
245
|
target: id,
|
|
248
|
-
detail: {
|
|
246
|
+
detail: {
|
|
247
|
+
kind: "import",
|
|
248
|
+
marketplaceId: input.marketplaceId,
|
|
249
|
+
name: input.name,
|
|
250
|
+
version: input.version,
|
|
251
|
+
...opts.auditDetail,
|
|
252
|
+
},
|
|
249
253
|
});
|
|
250
254
|
return id;
|
|
251
255
|
}
|
|
252
256
|
/**
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
257
|
+
* An org admin decides a member's `enable` or `connector_setup` request (`catalog.decide`). Not
|
|
258
|
+
* this org's request of those kinds -> `catalog.request_not_found`; decided ->
|
|
259
|
+
* `catalog.request_decided`. Approving an `enable` request switches the item on in the org as the
|
|
260
|
+
* deciding admin ({@link OrgCatalogService.setSwitch}: its errors, e.g. inputs the install
|
|
261
|
+
* needs, leave the request pending); the install itself resolves the request. A
|
|
262
|
+
* `connector_setup` request is approved only by binding its connectors (ruling P4-T6-6):
|
|
263
|
+
* approving it -> `catalog.request_invalid`. Rejecting stores the reason. Audits
|
|
264
|
+
* `catalog.request_decided`.
|
|
256
265
|
*/
|
|
257
|
-
async
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
266
|
+
async decideOrg(orgId, actor, requestId, decision, opts = {}) {
|
|
267
|
+
if (!UUID_RE.test(requestId))
|
|
268
|
+
throw requestNotFound();
|
|
269
|
+
if (decision.approve) {
|
|
270
|
+
const itemId = await this.pendingOrgRequest(orgId, actor, requestId);
|
|
271
|
+
await this.orgCatalog.setSwitch(orgId, actor, itemId, { enabled: true }, opts.actorTokenId);
|
|
272
|
+
}
|
|
273
|
+
await this.writeDecision(requestId, actor, decision, opts, { orgId });
|
|
274
|
+
return this.view(requestId);
|
|
275
|
+
}
|
|
276
|
+
/** The item of a pending `enable` request of the org (the decider re-checked). */
|
|
277
|
+
async pendingOrgRequest(orgId, actor, requestId) {
|
|
278
|
+
await this.orgLock.lockAndAuthorize(orgId, actor, "catalog.decide");
|
|
279
|
+
const row = await this.db
|
|
280
|
+
.selectFrom("catalog_requests")
|
|
281
|
+
.select(["item_id", "status", "kind"])
|
|
282
|
+
.where("id", "=", requestId)
|
|
261
283
|
.where("org_id", "=", orgId)
|
|
262
|
-
.where("
|
|
263
|
-
.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
orgId,
|
|
271
|
-
action: "catalog.request_decided",
|
|
272
|
-
target: r.id,
|
|
273
|
-
detail: { itemId, decision: "approve", stage: r.stage, installed: true },
|
|
274
|
-
});
|
|
284
|
+
.where("kind", "in", [...ORG_KINDS])
|
|
285
|
+
.executeTakeFirst();
|
|
286
|
+
if (!row)
|
|
287
|
+
throw requestNotFound();
|
|
288
|
+
if (row.status !== "pending")
|
|
289
|
+
throw alreadyDecided();
|
|
290
|
+
if (row.kind === "connector_setup") {
|
|
291
|
+
throw new ApiError("catalog.request_invalid", "A connector setup request is resolved by binding the agent's connectors; reject it to refuse");
|
|
275
292
|
}
|
|
293
|
+
if (row.item_id === null)
|
|
294
|
+
throw requestNotFound();
|
|
295
|
+
return row.item_id;
|
|
276
296
|
}
|
|
277
297
|
/**
|
|
278
|
-
*
|
|
279
|
-
* the request row FOR UPDATE).
|
|
280
|
-
* decided
|
|
281
|
-
* deleted or disabled -> `catalog.item_disabled
|
|
282
|
-
*
|
|
298
|
+
* A super admin decides an `access` or `import` request (re-checked inside the super
|
|
299
|
+
* admin lock; the request row FOR UPDATE). Missing or an `enable` request ->
|
|
300
|
+
* `catalog.request_not_found`; decided -> `catalog.request_decided`. Approving `access`: the item
|
|
301
|
+
* deleted or disabled -> `catalog.item_disabled`, the org deleted -> not found; otherwise the org
|
|
302
|
+
* joins the item's `named` list. Approving `import` prepares the import of the entry and returns
|
|
303
|
+
* it; the request stays pending, linked to the staging, until that confirm commits (approving
|
|
304
|
+
* again prepares a new one). Audits `catalog.request_decided` (`catalog.request_import_prepared`
|
|
305
|
+
* for an import's approval).
|
|
283
306
|
*/
|
|
284
|
-
async
|
|
307
|
+
async decideDeployment(actor, requestId, decision, opts = {}) {
|
|
285
308
|
if (!UUID_RE.test(requestId))
|
|
286
309
|
throw requestNotFound();
|
|
287
|
-
await this.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
})
|
|
319
|
-
.where("id", "=", requestId)
|
|
320
|
-
.execute();
|
|
321
|
-
await audit(t, {
|
|
322
|
-
actorAccountId: actor,
|
|
323
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
324
|
-
orgId,
|
|
325
|
-
action: "catalog.request_decided",
|
|
326
|
-
target: requestId,
|
|
327
|
-
detail: { itemId: row.item_id, decision, stage: "org", escalated },
|
|
310
|
+
const row = await this.pendingDeploymentRequest(actor, requestId);
|
|
311
|
+
if (decision.approve && row.kind === "import")
|
|
312
|
+
return this.approveImport(actor, requestId, opts);
|
|
313
|
+
await this.writeDecision(requestId, actor, decision, opts, { deployment: true });
|
|
314
|
+
return { request: await this.view(requestId) };
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Approves an `import` request, one approval of a request at a time (across replicas): an item
|
|
318
|
+
* of the entry's name that holds the requested version already (one hidden from the org, which
|
|
319
|
+
* is why the request was accepted) -> the org joins its `named` list at once, nothing imported;
|
|
320
|
+
* a staging linked by an earlier approval and not expired -> that staging again; otherwise the
|
|
321
|
+
* import is prepared and linked. The confirm of a staging adds the org to an item that exists by
|
|
322
|
+
* then (`PluginImport.commit`).
|
|
323
|
+
*/
|
|
324
|
+
async approveImport(actor, requestId, opts) {
|
|
325
|
+
const row = await this.pendingDeploymentRequest(actor, requestId);
|
|
326
|
+
if (row.marketplace_id === null || row.entry_name === null) {
|
|
327
|
+
throw new ApiError("catalog.request_invalid", "The marketplace of this request was deleted; reject it");
|
|
328
|
+
}
|
|
329
|
+
const existing = await this.db
|
|
330
|
+
.selectFrom("catalog_items as i")
|
|
331
|
+
.innerJoin("catalog_item_versions as v", "v.item_id", "i.id")
|
|
332
|
+
.select("i.id")
|
|
333
|
+
.where("i.name", "=", row.entry_name)
|
|
334
|
+
.where("i.deleted_at", "is", null)
|
|
335
|
+
.where("v.version", "=", row.entry_version ?? "")
|
|
336
|
+
.executeTakeFirst();
|
|
337
|
+
if (existing) {
|
|
338
|
+
await this.writeDecision(requestId, actor, { approve: true }, opts, {
|
|
339
|
+
deployment: true,
|
|
340
|
+
grantItem: existing.id,
|
|
328
341
|
});
|
|
342
|
+
return { request: await this.view(requestId) };
|
|
343
|
+
}
|
|
344
|
+
if (row.staging_id !== null) {
|
|
345
|
+
const staged = await this.pluginImport.staged(row.staging_id).catch(() => undefined);
|
|
346
|
+
if (staged) {
|
|
347
|
+
return {
|
|
348
|
+
request: await this.view(requestId),
|
|
349
|
+
import: {
|
|
350
|
+
stagingId: staged.stagingId,
|
|
351
|
+
review: staged.review,
|
|
352
|
+
permissionsMismatch: staged.permissionsMismatch ?? null,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
const prepared = await this.catalog.importFromMarketplace(actor, {
|
|
358
|
+
marketplaceId: row.marketplace_id,
|
|
359
|
+
name: row.entry_name,
|
|
360
|
+
...(row.entry_version !== null && { version: row.entry_version }),
|
|
361
|
+
}, opts);
|
|
362
|
+
await this.linkStaging(actor, requestId, prepared.stagingId, opts);
|
|
363
|
+
return { request: await this.view(requestId), import: prepared };
|
|
364
|
+
}
|
|
365
|
+
/** A pending `access` / `import` request (the row locked; the super admin re-checked). */
|
|
366
|
+
async pendingDeploymentRequest(actor, requestId) {
|
|
367
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
368
|
+
const row = await this.db
|
|
369
|
+
.selectFrom("catalog_requests")
|
|
370
|
+
.select(["kind", "status", "marketplace_id", "entry_name", "entry_version", "staging_id"])
|
|
371
|
+
.where("id", "=", requestId)
|
|
372
|
+
.where("kind", "in", [...DEPLOYMENT_KINDS])
|
|
373
|
+
.forUpdate()
|
|
374
|
+
.executeTakeFirst();
|
|
375
|
+
if (!row)
|
|
376
|
+
throw requestNotFound();
|
|
377
|
+
if (row.status !== "pending")
|
|
378
|
+
throw alreadyDecided();
|
|
379
|
+
return row;
|
|
380
|
+
}
|
|
381
|
+
/** Links a still pending `import` request to its prepared staging. */
|
|
382
|
+
async linkStaging(actor, requestId, stagingId, opts) {
|
|
383
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
384
|
+
const row = await this.db
|
|
385
|
+
.selectFrom("catalog_requests")
|
|
386
|
+
.select(["org_id", "status", "entry_name"])
|
|
387
|
+
.where("id", "=", requestId)
|
|
388
|
+
.forUpdate()
|
|
389
|
+
.executeTakeFirstOrThrow();
|
|
390
|
+
if (row.status !== "pending")
|
|
391
|
+
throw alreadyDecided();
|
|
392
|
+
await this.db
|
|
393
|
+
.updateTable("catalog_requests")
|
|
394
|
+
.set({ staging_id: stagingId })
|
|
395
|
+
.where("id", "=", requestId)
|
|
396
|
+
.execute();
|
|
397
|
+
await audit(this.db, {
|
|
398
|
+
actorAccountId: actor,
|
|
399
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
400
|
+
orgId: row.org_id,
|
|
401
|
+
action: "catalog.request_import_prepared",
|
|
402
|
+
target: requestId,
|
|
403
|
+
detail: { name: row.entry_name, stagingId },
|
|
329
404
|
});
|
|
330
|
-
return this.view(this.db, requestId);
|
|
331
405
|
}
|
|
332
406
|
/**
|
|
333
|
-
*
|
|
334
|
-
*
|
|
335
|
-
* `
|
|
336
|
-
* deleted or disabled -> `catalog.item_disabled`, the request's org deleted ->
|
|
337
|
-
* `catalog.request_not_found`. Approval writes a grant to `catalog_org_grants`. Audits
|
|
338
|
-
* `catalog.request_decided` (with orgId).
|
|
407
|
+
* Writes a decision (the request row FOR UPDATE): org side (`orgId`: the org admin re-checked,
|
|
408
|
+
* `enable` only) or deployment side (the super admin re-checked, `access` / `import`). An
|
|
409
|
+
* approval of an `enable` request may find it approved already by the install it triggered.
|
|
339
410
|
*/
|
|
340
|
-
async
|
|
341
|
-
|
|
411
|
+
async writeDecision(requestId, actor, decision, opts, side) {
|
|
412
|
+
const t = this.db;
|
|
413
|
+
if ("orgId" in side)
|
|
414
|
+
await this.orgLock.lockAndAuthorize(side.orgId, actor, "catalog.decide");
|
|
415
|
+
else
|
|
416
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
417
|
+
let q = t
|
|
418
|
+
.selectFrom("catalog_requests")
|
|
419
|
+
.select(["id", "org_id", "item_id", "kind", "status", "decided_by"])
|
|
420
|
+
.where("id", "=", requestId);
|
|
421
|
+
q =
|
|
422
|
+
"orgId" in side
|
|
423
|
+
? q.where("org_id", "=", side.orgId).where("kind", "in", [...ORG_KINDS])
|
|
424
|
+
: q.where("kind", "in", [...DEPLOYMENT_KINDS]);
|
|
425
|
+
const row = await q.forUpdate().executeTakeFirst();
|
|
426
|
+
if (!row)
|
|
342
427
|
throw requestNotFound();
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
428
|
+
if (row.status !== "pending") {
|
|
429
|
+
// The switch-on of this approval already resolved it (the install approves pending requests)
|
|
430
|
+
if (decision.approve && row.kind === "enable" && row.status === "approved")
|
|
431
|
+
return;
|
|
432
|
+
throw alreadyDecided();
|
|
433
|
+
}
|
|
434
|
+
if (decision.approve && row.kind === "access" && row.item_id !== null) {
|
|
435
|
+
const item = await t
|
|
436
|
+
.selectFrom("catalog_items")
|
|
437
|
+
.select(["deleted_at", "disabled"])
|
|
438
|
+
.where("id", "=", row.item_id)
|
|
350
439
|
.executeTakeFirst();
|
|
351
|
-
if (
|
|
440
|
+
if (!item || item.deleted_at !== null || item.disabled)
|
|
441
|
+
throw itemDisabled();
|
|
442
|
+
const org = await t
|
|
443
|
+
.selectFrom("orgs")
|
|
444
|
+
.select("deleted_at")
|
|
445
|
+
.where("id", "=", row.org_id)
|
|
446
|
+
.executeTakeFirst();
|
|
447
|
+
if (!org || org.deleted_at !== null)
|
|
352
448
|
throw requestNotFound();
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
.
|
|
381
|
-
.
|
|
382
|
-
|
|
383
|
-
actorAccountId: actor,
|
|
384
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
385
|
-
orgId: row.org_id,
|
|
386
|
-
action: "catalog.request_decided",
|
|
387
|
-
target: requestId,
|
|
388
|
-
detail: { itemId: row.item_id, decision, stage: "deployment" },
|
|
389
|
-
});
|
|
449
|
+
await this.scope.addOrg(actor, row.item_id, row.org_id, { ...opts, requestId });
|
|
450
|
+
}
|
|
451
|
+
// An `import` request whose entry is in the catalog already: the org joins that item's list
|
|
452
|
+
const grantItem = "grantItem" in side ? side.grantItem : undefined;
|
|
453
|
+
if (decision.approve && row.kind === "import" && grantItem !== undefined) {
|
|
454
|
+
await this.scope.addOrg(actor, grantItem, row.org_id, { ...opts, requestId });
|
|
455
|
+
}
|
|
456
|
+
await t
|
|
457
|
+
.updateTable("catalog_requests")
|
|
458
|
+
.set({
|
|
459
|
+
status: decision.approve ? "approved" : "rejected",
|
|
460
|
+
reason: decision.approve ? null : (decision.reason ?? null),
|
|
461
|
+
...(grantItem !== undefined && { item_id: grantItem }),
|
|
462
|
+
decided_by: actor,
|
|
463
|
+
decided_at: sql `now()`,
|
|
464
|
+
})
|
|
465
|
+
.where("id", "=", requestId)
|
|
466
|
+
.execute();
|
|
467
|
+
await audit(t, {
|
|
468
|
+
actorAccountId: actor,
|
|
469
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
470
|
+
orgId: row.org_id,
|
|
471
|
+
action: "catalog.request_decided",
|
|
472
|
+
target: requestId,
|
|
473
|
+
detail: {
|
|
474
|
+
itemId: row.item_id,
|
|
475
|
+
kind: row.kind,
|
|
476
|
+
decision: decision.approve ? "approve" : "reject",
|
|
477
|
+
...(!decision.approve && decision.reason !== undefined && { reason: decision.reason }),
|
|
478
|
+
},
|
|
390
479
|
});
|
|
391
|
-
return this.view(this.db, requestId);
|
|
392
480
|
}
|
|
393
|
-
/**
|
|
481
|
+
/**
|
|
482
|
+
* The requester dismisses a decided request from the inbox (`POST /orgs/:orgId/
|
|
483
|
+
* catalog-requests/:id/dismiss`). Not the requester's decided request in this org ->
|
|
484
|
+
* `catalog.request_not_found`.
|
|
485
|
+
*/
|
|
486
|
+
async dismiss(orgId, accountId, requestId) {
|
|
487
|
+
if (!UUID_RE.test(requestId))
|
|
488
|
+
throw requestNotFound();
|
|
489
|
+
const r = await this.db
|
|
490
|
+
.updateTable("catalog_requests")
|
|
491
|
+
.set({ dismissed_at: sql `now()` })
|
|
492
|
+
.where("id", "=", requestId)
|
|
493
|
+
.where("org_id", "=", orgId)
|
|
494
|
+
.where("requested_by", "=", accountId)
|
|
495
|
+
.where("status", "in", ["approved", "rejected"])
|
|
496
|
+
.where("dismissed_at", "is", null)
|
|
497
|
+
.executeTakeFirst();
|
|
498
|
+
if (r.numUpdatedRows === 0n)
|
|
499
|
+
throw requestNotFound();
|
|
500
|
+
}
|
|
501
|
+
/** 超级管理员的申请列表(`access` / `import`;`status` 缺省 pending),新的在前。 */
|
|
394
502
|
async listDeployment(q = {}) {
|
|
395
|
-
const rows = await this.baseQuery(
|
|
396
|
-
.where("r.
|
|
503
|
+
const rows = await this.baseQuery()
|
|
504
|
+
.where("r.kind", "in", [...DEPLOYMENT_KINDS])
|
|
397
505
|
.where("r.status", "=", q.status ?? "pending")
|
|
398
506
|
.where("o.deleted_at", "is", null)
|
|
399
507
|
.orderBy("r.created_at", "desc")
|
|
400
508
|
.orderBy("r.id")
|
|
401
509
|
.limit(CATALOG_REQUESTS_LIST_MAX)
|
|
402
510
|
.execute();
|
|
403
|
-
return
|
|
511
|
+
return this.toViews(rows);
|
|
404
512
|
}
|
|
405
|
-
/**
|
|
513
|
+
/** 待超级管理员处理的申请数(后台概览)。 */
|
|
406
514
|
async countPendingDeployment() {
|
|
407
515
|
const r = await this.db
|
|
408
516
|
.selectFrom("catalog_requests as r")
|
|
409
517
|
.innerJoin("orgs as o", "o.id", "r.org_id")
|
|
410
518
|
.select(sql `count(*)`.as("n"))
|
|
411
|
-
.where("r.
|
|
519
|
+
.where("r.kind", "in", [...DEPLOYMENT_KINDS])
|
|
412
520
|
.where("r.status", "=", "pending")
|
|
413
521
|
.where("o.deleted_at", "is", null)
|
|
414
522
|
.executeTakeFirstOrThrow();
|
|
415
523
|
return Number(r.n);
|
|
416
524
|
}
|
|
417
525
|
/**
|
|
418
|
-
*
|
|
419
|
-
*
|
|
526
|
+
* The inbox: when the account is an org admin of the org (the role read live), the members'
|
|
527
|
+
* pending `enable` requests and the pending `connector_setup` requests, newest first; otherwise
|
|
528
|
+
* none.
|
|
420
529
|
*/
|
|
421
530
|
async listForOrgAdmin(orgId, accountId) {
|
|
422
531
|
const m = await this.db
|
|
@@ -427,78 +536,212 @@ export class CatalogRequestsService {
|
|
|
427
536
|
.executeTakeFirst();
|
|
428
537
|
if (!m || !roleAtLeast(m.role, "admin"))
|
|
429
538
|
return [];
|
|
430
|
-
const rows = await this.baseQuery(
|
|
539
|
+
const rows = await this.baseQuery()
|
|
431
540
|
.where("r.org_id", "=", orgId)
|
|
432
|
-
.where("r.
|
|
541
|
+
.where("r.kind", "in", [...ORG_KINDS])
|
|
433
542
|
.where("r.status", "=", "pending")
|
|
434
543
|
.orderBy("r.created_at", "desc")
|
|
435
544
|
.orderBy("r.id")
|
|
436
545
|
.limit(CATALOG_REQUESTS_LIST_MAX)
|
|
437
546
|
.execute();
|
|
438
|
-
|
|
547
|
+
// A request on an item the org can no longer see (its scope hid it since) is left out, so
|
|
548
|
+
// nothing reveals the item's name to the org; a setup request of a deleted agent too
|
|
549
|
+
const ids = [...new Set(rows.flatMap((r) => (r.item_id !== null ? [r.item_id] : [])))];
|
|
550
|
+
const seen = await itemsSeenBy(this.db, orgId, ids);
|
|
551
|
+
return this.toViews(rows.filter((r) => r.kind === "connector_setup"
|
|
552
|
+
? r.agent_id !== null && r.agent_deleted_at === null
|
|
553
|
+
: r.item_id !== null && seen.has(r.item_id)));
|
|
439
554
|
}
|
|
440
|
-
/**
|
|
441
|
-
async
|
|
442
|
-
const rows = await this.
|
|
443
|
-
.
|
|
444
|
-
.
|
|
445
|
-
.where("
|
|
446
|
-
.
|
|
555
|
+
/** The inbox: the account's decided requests in the org it has not dismissed, newest first. */
|
|
556
|
+
async listDecidedForRequester(orgId, accountId) {
|
|
557
|
+
const rows = await this.baseQuery()
|
|
558
|
+
.where("r.org_id", "=", orgId)
|
|
559
|
+
.where("r.requested_by", "=", accountId)
|
|
560
|
+
.where("r.status", "in", ["approved", "rejected"])
|
|
561
|
+
.where("r.dismissed_at", "is", null)
|
|
562
|
+
.orderBy("r.decided_at", "desc")
|
|
563
|
+
.orderBy("r.id")
|
|
564
|
+
.limit(CATALOG_REQUESTS_LIST_MAX)
|
|
447
565
|
.execute();
|
|
448
|
-
|
|
449
|
-
for (const r of rows)
|
|
450
|
-
out.set(r.item_id, { id: r.id, stage: r.stage, status: r.status });
|
|
451
|
-
return out;
|
|
566
|
+
return this.toViews(rows);
|
|
452
567
|
}
|
|
453
|
-
|
|
454
|
-
|
|
568
|
+
/**
|
|
569
|
+
* The account's own requests in the org, pending and decided (dismissed ones too), newest first;
|
|
570
|
+
* cancelled ones are left out (the Platform tool's `requests.list-mine`).
|
|
571
|
+
*/
|
|
572
|
+
async listForRequester(orgId, accountId) {
|
|
573
|
+
const rows = await this.baseQuery()
|
|
574
|
+
.where("r.org_id", "=", orgId)
|
|
575
|
+
.where("r.requested_by", "=", accountId)
|
|
576
|
+
.where("r.status", "in", ["pending", "approved", "rejected"])
|
|
577
|
+
.orderBy("r.created_at", "desc")
|
|
578
|
+
.orderBy("r.id")
|
|
579
|
+
.limit(CATALOG_REQUESTS_LIST_MAX)
|
|
580
|
+
.execute();
|
|
581
|
+
return this.toViews(rows);
|
|
582
|
+
}
|
|
583
|
+
async view(id) {
|
|
584
|
+
const row = await this.baseQuery().where("r.id", "=", id).executeTakeFirst();
|
|
455
585
|
if (!row)
|
|
456
586
|
throw requestNotFound();
|
|
457
|
-
return
|
|
587
|
+
return (await this.toViews([row]))[0];
|
|
458
588
|
}
|
|
459
|
-
|
|
460
|
-
|
|
589
|
+
/** The views of `rows`, with the display names of the connector templates setup requests name. */
|
|
590
|
+
async toViews(rows) {
|
|
591
|
+
const ids = new Set();
|
|
592
|
+
for (const r of rows) {
|
|
593
|
+
if (r.kind !== "connector_setup")
|
|
594
|
+
continue;
|
|
595
|
+
const def = r.agent_definition;
|
|
596
|
+
for (const c of def?.pendingConnectors ?? []) {
|
|
597
|
+
if ("template" in c.source && UUID_RE.test(c.source.template))
|
|
598
|
+
ids.add(c.source.template);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
const names = new Map();
|
|
602
|
+
if (ids.size > 0) {
|
|
603
|
+
const found = await this.db
|
|
604
|
+
.selectFrom("platform_connector_templates")
|
|
605
|
+
.select(["id", "file"])
|
|
606
|
+
.where("id", "in", [...ids])
|
|
607
|
+
.execute();
|
|
608
|
+
for (const t of found) {
|
|
609
|
+
const dn = t.file?.displayName;
|
|
610
|
+
names.set(t.id, dn ?? null);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
return rows.map((r) => toView(r, names));
|
|
614
|
+
}
|
|
615
|
+
baseQuery() {
|
|
616
|
+
return (this.db
|
|
461
617
|
.selectFrom("catalog_requests as r")
|
|
462
|
-
.
|
|
618
|
+
.leftJoin("catalog_items as i", "i.id", "r.item_id")
|
|
463
619
|
.innerJoin("orgs as o", "o.id", "r.org_id")
|
|
464
620
|
.leftJoin("accounts as a", "a.id", "r.requested_by")
|
|
621
|
+
// a connector_setup request's agent and its current version (name, pending connectors)
|
|
622
|
+
.leftJoin("agents as ag", "ag.id", "r.agent_id")
|
|
623
|
+
.leftJoin("agent_versions as av", (j) => j.onRef("av.agent_id", "=", "ag.id").onRef("av.version", "=", "ag.current_version"))
|
|
465
624
|
.select([
|
|
625
|
+
"r.agent_id",
|
|
626
|
+
"r.pending_keys",
|
|
627
|
+
"ag.deleted_at as agent_deleted_at",
|
|
628
|
+
"av.definition as agent_definition",
|
|
466
629
|
"r.id",
|
|
467
630
|
"r.org_id",
|
|
468
631
|
"o.name as org_name",
|
|
632
|
+
"r.kind",
|
|
469
633
|
"r.item_id",
|
|
470
634
|
"i.name",
|
|
471
635
|
"i.display_name",
|
|
472
|
-
"r.
|
|
473
|
-
"r.
|
|
636
|
+
"r.marketplace_id",
|
|
637
|
+
"r.entry_name",
|
|
638
|
+
"r.entry_version",
|
|
474
639
|
"r.status",
|
|
475
640
|
"r.note",
|
|
641
|
+
"r.reason",
|
|
476
642
|
"r.requested_by",
|
|
477
643
|
"a.display_name as requested_by_name",
|
|
478
644
|
"r.decided_by",
|
|
479
645
|
"r.decided_at",
|
|
480
|
-
"r.
|
|
481
|
-
"r.org_decided_at",
|
|
646
|
+
"r.staging_id",
|
|
482
647
|
"r.created_at",
|
|
483
|
-
]);
|
|
648
|
+
]));
|
|
484
649
|
}
|
|
650
|
+
};
|
|
651
|
+
__decorate([
|
|
652
|
+
Transactional()
|
|
653
|
+
], CatalogRequestsService.prototype, "authorize", null);
|
|
654
|
+
__decorate([
|
|
655
|
+
Transactional()
|
|
656
|
+
], CatalogRequestsService.prototype, "writeItemRequest", null);
|
|
657
|
+
__decorate([
|
|
658
|
+
Transactional()
|
|
659
|
+
], CatalogRequestsService.prototype, "writeImportRequest", null);
|
|
660
|
+
__decorate([
|
|
661
|
+
Transactional()
|
|
662
|
+
], CatalogRequestsService.prototype, "pendingOrgRequest", null);
|
|
663
|
+
__decorate([
|
|
664
|
+
WithLock({ key: "catalog-request-#{1}", ttl: 60_000, waitTimeout: 180_000 })
|
|
665
|
+
], CatalogRequestsService.prototype, "approveImport", null);
|
|
666
|
+
__decorate([
|
|
667
|
+
Transactional()
|
|
668
|
+
], CatalogRequestsService.prototype, "pendingDeploymentRequest", null);
|
|
669
|
+
__decorate([
|
|
670
|
+
Transactional()
|
|
671
|
+
], CatalogRequestsService.prototype, "linkStaging", null);
|
|
672
|
+
__decorate([
|
|
673
|
+
Transactional()
|
|
674
|
+
], CatalogRequestsService.prototype, "writeDecision", null);
|
|
675
|
+
CatalogRequestsService = __decorate([
|
|
676
|
+
Injectable(),
|
|
677
|
+
__param(0, Inject(KernelDb)),
|
|
678
|
+
__param(1, Inject(OrgLock)),
|
|
679
|
+
__param(2, Inject(SuperAdminLock)),
|
|
680
|
+
__param(3, Inject(OrgCatalogService)),
|
|
681
|
+
__param(4, Inject(CatalogScopeService)),
|
|
682
|
+
__param(5, Inject(CatalogService)),
|
|
683
|
+
__param(6, Inject(KernelConfigService)),
|
|
684
|
+
__param(7, Inject(PluginImport)),
|
|
685
|
+
__param(8, Inject(TransactionHost)),
|
|
686
|
+
__param(9, Inject(LockService))
|
|
687
|
+
], CatalogRequestsService);
|
|
688
|
+
export { CatalogRequestsService };
|
|
689
|
+
/** The view fields of a `connector_setup` request (ruling P4-T6-5); null for other kinds. */
|
|
690
|
+
function setupFields(r, templateNames) {
|
|
691
|
+
if (r.kind !== "connector_setup" || r.agent_id === null)
|
|
692
|
+
return { agent: null, connectors: null };
|
|
693
|
+
const def = (r.agent_definition ?? null);
|
|
694
|
+
const pending = new Map((def?.pendingConnectors ?? []).map((c) => [c.key, c]));
|
|
695
|
+
const connectors = [];
|
|
696
|
+
for (const key of r.pending_keys ?? []) {
|
|
697
|
+
const c = pending.get(key);
|
|
698
|
+
if (c === undefined)
|
|
699
|
+
continue;
|
|
700
|
+
const src = c.source;
|
|
701
|
+
connectors.push({
|
|
702
|
+
key,
|
|
703
|
+
label: c.label,
|
|
704
|
+
kind: "template" in src ? "template" : "needs",
|
|
705
|
+
source: "template" in src
|
|
706
|
+
? { template: { id: src.template, displayName: templateNames.get(src.template) ?? null } }
|
|
707
|
+
: {
|
|
708
|
+
needs: {
|
|
709
|
+
protocol: src.needs.protocol,
|
|
710
|
+
endpoint: src.needs.endpoint,
|
|
711
|
+
tools: [...src.needs.tools],
|
|
712
|
+
},
|
|
713
|
+
},
|
|
714
|
+
tools: c.tools !== undefined && c.tools.length > 0 ? [...c.tools] : null,
|
|
715
|
+
// jsonb keeps no key order: sorted
|
|
716
|
+
policies: Object.keys(c.policies ?? {}).sort(),
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
return {
|
|
720
|
+
agent: { id: r.agent_id, name: def?.name ?? "", deleted: r.agent_deleted_at !== null },
|
|
721
|
+
connectors,
|
|
722
|
+
};
|
|
485
723
|
}
|
|
486
|
-
function toView(r) {
|
|
724
|
+
function toView(r, templateNames) {
|
|
487
725
|
return {
|
|
488
726
|
id: r.id,
|
|
489
727
|
orgId: r.org_id,
|
|
490
728
|
orgName: r.org_name,
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
729
|
+
kind: r.kind,
|
|
730
|
+
item: r.item_id !== null && r.name !== null
|
|
731
|
+
? { id: r.item_id, name: r.name, displayName: r.display_name }
|
|
732
|
+
: null,
|
|
733
|
+
entry: r.entry_name !== null
|
|
734
|
+
? { marketplaceId: r.marketplace_id, name: r.entry_name, version: r.entry_version }
|
|
735
|
+
: null,
|
|
736
|
+
...setupFields(r, templateNames),
|
|
494
737
|
status: r.status,
|
|
495
738
|
note: r.note,
|
|
739
|
+
reason: r.reason,
|
|
496
740
|
requestedBy: r.requested_by,
|
|
497
741
|
requestedByName: r.requested_by_name,
|
|
498
742
|
decidedBy: r.decided_by,
|
|
499
743
|
decidedAt: r.decided_at?.toISOString() ?? null,
|
|
500
|
-
|
|
501
|
-
orgDecidedAt: r.org_decided_at?.toISOString() ?? null,
|
|
744
|
+
stagingId: r.status === "pending" ? r.staging_id : null,
|
|
502
745
|
createdAt: r.created_at.toISOString(),
|
|
503
746
|
};
|
|
504
747
|
}
|