@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.2
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/dist/admin/admin.controller.d.ts +17 -17
- package/dist/admin/admin.controller.js +43 -26
- package/dist/admin/admin.module.d.ts +3 -0
- package/dist/admin/admin.module.js +22 -0
- package/dist/admin/extensions.controller.d.ts +14 -14
- package/dist/admin/extensions.controller.js +30 -17
- package/dist/admin/setup-lock.d.ts +16 -0
- package/dist/admin/setup-lock.js +47 -0
- package/dist/admin/setup.controller.d.ts +8 -8
- package/dist/admin/setup.controller.js +27 -25
- package/dist/admin/setup.service.d.ts +19 -27
- package/dist/admin/setup.service.js +61 -61
- package/dist/agents/agent-lookup.d.ts +53 -0
- package/dist/agents/agent-lookup.js +179 -0
- package/dist/agents/agents.controller.d.ts +1 -1
- package/dist/agents/agents.controller.js +14 -8
- package/dist/agents/agents.module.d.ts +7 -0
- package/dist/agents/agents.module.js +41 -0
- package/dist/agents/agents.service.d.ts +39 -58
- package/dist/agents/agents.service.js +261 -329
- package/dist/agents/definition.d.ts +8 -0
- package/dist/agents/definition.js +8 -0
- package/dist/agents/models.controller.d.ts +1 -1
- package/dist/agents/models.controller.js +2 -2
- package/dist/agents/templates.controller.d.ts +1 -1
- package/dist/agents/templates.controller.js +2 -2
- package/dist/agents/templates.d.ts +6 -8
- package/dist/agents/templates.js +20 -4
- package/dist/app.d.ts +93 -0
- package/dist/app.js +150 -0
- package/dist/catalog/admin-catalog.controller.d.ts +3 -3
- package/dist/catalog/admin-catalog.controller.js +27 -13
- package/dist/catalog/catalog-content.d.ts +185 -0
- package/dist/catalog/catalog-content.js +323 -0
- package/dist/catalog/catalog-items.d.ts +186 -0
- package/dist/catalog/catalog-items.js +410 -0
- package/dist/catalog/catalog.module.d.ts +14 -0
- package/dist/catalog/catalog.module.js +71 -0
- package/dist/catalog/catalog.service.d.ts +34 -188
- package/dist/catalog/catalog.service.js +155 -489
- package/dist/catalog/cli.d.ts +3 -2
- package/dist/catalog/cli.js +13 -31
- package/dist/catalog/job-ids.d.ts +15 -0
- package/dist/catalog/job-ids.js +15 -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/marketplaces.controller.d.ts +4 -4
- package/dist/catalog/marketplaces.controller.js +22 -11
- package/dist/catalog/marketplaces.service.d.ts +30 -13
- package/dist/catalog/marketplaces.service.js +330 -256
- package/dist/catalog/org-catalog.controller.d.ts +4 -3
- package/dist/catalog/org-catalog.controller.js +29 -14
- package/dist/catalog/org-catalog.service.d.ts +32 -198
- package/dist/catalog/org-catalog.service.js +159 -400
- package/dist/catalog/plugin-import.d.ts +73 -34
- package/dist/catalog/plugin-import.js +356 -217
- package/dist/catalog/plugin-install.d.ts +83 -41
- package/dist/catalog/plugin-install.js +421 -269
- package/dist/catalog/plugin-upgrade.d.ts +59 -4
- package/dist/catalog/plugin-upgrade.js +407 -282
- package/dist/catalog/requests.service.d.ts +27 -15
- package/dist/catalog/requests.service.js +201 -145
- package/dist/catalog/upgrade-targets.d.ts +4 -7
- package/dist/channels/actions.d.ts +6 -4
- package/dist/channels/actions.js +1 -1
- package/dist/channels/cards.d.ts +2 -2
- package/dist/channels/channels.module.d.ts +40 -0
- package/dist/channels/channels.module.js +128 -0
- package/dist/channels/connections.controller.d.ts +1 -1
- package/dist/channels/connections.controller.js +11 -6
- package/dist/channels/connections.service.d.ts +43 -21
- package/dist/channels/connections.service.js +236 -131
- package/dist/channels/inbound.d.ts +34 -38
- package/dist/channels/inbound.js +107 -41
- 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 +60 -82
- package/dist/channels/outbound.js +165 -194
- package/dist/channels/supervisor.d.ts +88 -46
- package/dist/channels/supervisor.js +230 -132
- package/dist/channels/threads.d.ts +29 -8
- package/dist/channels/threads.js +71 -13
- package/dist/channels/webhook.d.ts +20 -14
- package/dist/channels/webhook.js +51 -20
- 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 +1 -0
- package/dist/config/schema.js +10 -4
- package/dist/conversations/access.d.ts +29 -0
- package/dist/conversations/access.js +86 -0
- package/dist/conversations/artifacts.d.ts +10 -10
- package/dist/conversations/artifacts.js +35 -9
- 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 +30 -22
- package/dist/conversations/attachments.service.js +119 -46
- package/dist/conversations/conversations.controller.d.ts +8 -7
- package/dist/conversations/conversations.controller.js +59 -29
- package/dist/conversations/conversations.module.d.ts +8 -0
- package/dist/conversations/conversations.module.js +69 -0
- package/dist/conversations/conversations.service.d.ts +40 -38
- package/dist/conversations/conversations.service.js +130 -140
- package/dist/conversations/event-log.d.ts +28 -18
- package/dist/conversations/event-log.js +74 -27
- 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/outputs-read.d.ts +11 -11
- package/dist/conversations/outputs-read.js +31 -7
- package/dist/conversations/queue.d.ts +48 -56
- package/dist/conversations/queue.js +13 -289
- package/dist/conversations/queue.service.d.ts +60 -0
- package/dist/conversations/queue.service.js +343 -0
- package/dist/conversations/sandbox-status.d.ts +13 -10
- package/dist/conversations/sandbox-status.js +36 -8
- package/dist/conversations/titles.d.ts +71 -24
- package/dist/conversations/titles.js +159 -63
- package/dist/ctx/bus.js +9 -3
- package/dist/ctx/create-ctx.d.ts +6 -0
- package/dist/ctx/create-ctx.js +7 -9
- package/dist/ctx/lock.d.ts +7 -3
- package/dist/ctx/lock.js +9 -20
- package/dist/ctx/secrets.d.ts +10 -2
- package/dist/ctx/secrets.js +7 -3
- package/dist/db/kernel-schema.d.ts +2 -2
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- 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/jobs.d.ts +20 -0
- package/dist/evals/jobs.js +45 -0
- package/dist/evals/run-replay.d.ts +56 -8
- package/dist/evals/run-replay.js +140 -80
- package/dist/evals/runs.controller.d.ts +1 -1
- package/dist/evals/runs.controller.js +17 -8
- package/dist/evals/runs.service.d.ts +23 -45
- package/dist/evals/runs.service.js +245 -234
- package/dist/evals/sets.controller.d.ts +1 -1
- package/dist/evals/sets.controller.js +17 -8
- package/dist/evals/sets.service.d.ts +22 -6
- package/dist/evals/sets.service.js +248 -194
- package/dist/evals/snapshot.d.ts +2 -2
- package/dist/evals/step-replay.d.ts +2 -2
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.controller.d.ts +1 -1
- package/dist/evals/trajectory.controller.js +11 -7
- package/dist/evals/trajectory.service.d.ts +5 -4
- package/dist/evals/trajectory.service.js +30 -7
- package/dist/evals/worker.d.ts +44 -27
- package/dist/evals/worker.js +220 -121
- package/dist/extensions/admin-ops.d.ts +61 -33
- package/dist/extensions/admin-ops.js +248 -154
- package/dist/extensions/admin-view.d.ts +38 -27
- package/dist/extensions/admin-view.js +126 -55
- package/dist/extensions/approvals.d.ts +12 -8
- package/dist/extensions/approvals.js +73 -46
- package/dist/extensions/blobs.d.ts +27 -10
- package/dist/extensions/blobs.js +111 -45
- package/dist/extensions/bootstrap.d.ts +58 -31
- package/dist/extensions/bootstrap.js +175 -121
- package/dist/extensions/cli.d.ts +20 -10
- package/dist/extensions/cli.js +41 -96
- package/dist/extensions/config-issues.d.ts +7 -0
- package/dist/extensions/config-issues.js +31 -0
- package/dist/extensions/deployment-config-store.d.ts +49 -0
- package/dist/extensions/deployment-config-store.js +133 -0
- package/dist/extensions/deployment-config.d.ts +58 -67
- package/dist/extensions/deployment-config.js +202 -230
- package/dist/extensions/enabled.d.ts +5 -5
- package/dist/extensions/extensions.module.d.ts +8 -0
- package/dist/extensions/extensions.module.js +77 -0
- package/dist/extensions/hooks.d.ts +3 -2
- package/dist/extensions/hooks.js +1 -1
- package/dist/extensions/host.d.ts +72 -68
- package/dist/extensions/host.js +191 -152
- package/dist/extensions/installs.d.ts +49 -16
- package/dist/extensions/installs.js +128 -32
- 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 +33 -0
- package/dist/extensions/locks.js +86 -0
- package/dist/extensions/migrate-lock.d.ts +3 -4
- package/dist/extensions/org-config.controller.d.ts +1 -1
- package/dist/extensions/org-config.controller.js +8 -5
- package/dist/extensions/org-config.d.ts +48 -46
- package/dist/extensions/org-config.js +284 -226
- package/dist/extensions/registry.d.ts +50 -2
- package/dist/extensions/registry.js +89 -4
- package/dist/extensions/sources.d.ts +12 -8
- package/dist/extensions/sources.js +34 -13
- 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 +17 -9
- package/dist/files/previewers.d.ts +13 -18
- package/dist/files/previewers.js +83 -36
- 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 +47 -355
- package/dist/http/app.d.ts +11 -15
- package/dist/http/app.js +17 -62
- 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/identity/accounts.d.ts +82 -29
- package/dist/identity/accounts.js +294 -175
- package/dist/identity/api-tokens.d.ts +11 -7
- package/dist/identity/api-tokens.js +71 -44
- package/dist/identity/audit.d.ts +7 -4
- package/dist/identity/audit.js +5 -1
- package/dist/identity/auth.controller.d.ts +11 -10
- package/dist/identity/auth.controller.js +31 -25
- package/dist/identity/auth.guard.d.ts +3 -3
- package/dist/identity/auth.guard.js +6 -4
- package/dist/identity/binding.d.ts +9 -11
- package/dist/identity/binding.js +41 -13
- package/dist/identity/enterprise-admin.d.ts +18 -12
- package/dist/identity/enterprise-admin.js +67 -13
- 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 +56 -0
- package/dist/identity/me.controller.d.ts +16 -15
- package/dist/identity/me.controller.js +37 -31
- package/dist/identity/sessions.d.ts +12 -10
- package/dist/identity/sessions.js +74 -42
- package/dist/identity/settings.d.ts +20 -14
- package/dist/identity/settings.js +85 -57
- 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/inbox/inbox.module.d.ts +3 -0
- package/dist/inbox/inbox.module.js +22 -0
- package/dist/inbox/inbox.service.d.ts +7 -9
- package/dist/inbox/inbox.service.js +32 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +9 -6
- 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 +165 -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 +126 -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 +90 -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 +96 -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 +86 -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 +16 -0
- package/dist/infra/logging/logging.module.js +34 -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 +7 -0
- package/dist/infra/queue/redis-connection.js +18 -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 +87 -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 +31 -0
- package/dist/infra/throttler/named-throttlers.js +119 -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 +15 -0
- package/dist/infra/tokens.js +15 -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 -244
- package/dist/kernel.js +8 -1305
- package/dist/kernel.module.d.ts +17 -0
- package/dist/kernel.module.js +136 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
- package/dist/lifecycle/kernel-lifecycle.js +451 -0
- package/dist/lifecycle/tokens.d.ts +3 -0
- package/dist/lifecycle/tokens.js +3 -0
- package/dist/log-context.d.ts +2 -0
- package/dist/log-context.js +4 -0
- package/dist/models/models.module.d.ts +3 -0
- package/dist/models/models.module.js +24 -0
- package/dist/models/prices.d.ts +8 -2
- package/dist/models/prices.js +65 -37
- package/dist/models/purposes.controller.d.ts +1 -1
- package/dist/models/purposes.controller.js +5 -6
- package/dist/models/purposes.d.ts +35 -13
- package/dist/models/purposes.js +101 -51
- 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 +61 -31
- package/dist/orgs/directory-sync.js +212 -125
- 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 +54 -57
- package/dist/orgs/offboarding.js +161 -71
- package/dist/orgs/org-lock.d.ts +28 -19
- package/dist/orgs/org-lock.js +81 -35
- package/dist/orgs/org.guard.d.ts +1 -1
- package/dist/orgs/org.guard.js +2 -2
- package/dist/orgs/orgs.controller.d.ts +13 -13
- package/dist/orgs/orgs.controller.js +29 -17
- package/dist/orgs/orgs.module.d.ts +6 -0
- package/dist/orgs/orgs.module.js +68 -0
- package/dist/orgs/orgs.service.d.ts +30 -19
- package/dist/orgs/orgs.service.js +139 -86
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.controller.js +8 -6
- package/dist/orgs/settings.service.d.ts +14 -8
- package/dist/orgs/settings.service.js +75 -46
- package/dist/overrides.d.ts +56 -0
- package/dist/overrides.js +30 -0
- package/dist/roles/gateway-role.d.ts +43 -0
- package/dist/roles/gateway-role.js +98 -0
- package/dist/roles/gateway.module.d.ts +8 -0
- package/dist/roles/gateway.module.js +28 -0
- package/dist/roles/worker-role.d.ts +63 -0
- package/dist/roles/worker-role.js +144 -0
- package/dist/roles/worker.module.d.ts +14 -0
- package/dist/roles/worker.module.js +90 -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/conversation-lock.d.ts +20 -11
- package/dist/runtime/conversation-lock.js +62 -72
- package/dist/runtime/hook-calls.d.ts +3 -3
- package/dist/runtime/hook-calls.js +1 -6
- package/dist/runtime/job-ids.d.ts +10 -0
- package/dist/runtime/job-ids.js +10 -0
- package/dist/runtime/langgraph-loop.js +1 -1
- package/dist/runtime/loop.d.ts +7 -0
- 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 +45 -74
- package/dist/runtime/maintenance.js +139 -137
- package/dist/runtime/model-call.d.ts +7 -4
- package/dist/runtime/model-call.js +24 -57
- package/dist/runtime/providers.d.ts +17 -6
- package/dist/runtime/providers.js +66 -25
- 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-control.d.ts +33 -0
- package/dist/runtime/run-control.js +77 -0
- package/dist/runtime/run-finish.d.ts +26 -17
- package/dist/runtime/run-finish.js +98 -51
- package/dist/runtime/run-jobs.d.ts +48 -0
- package/dist/runtime/run-jobs.js +95 -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 +32 -57
- package/dist/runtime/run-queue.js +291 -295
- package/dist/runtime/run-steps.d.ts +39 -0
- package/dist/runtime/run-steps.js +96 -0
- package/dist/runtime/run-worker.d.ts +121 -75
- package/dist/runtime/run-worker.js +340 -226
- package/dist/runtime/runtime.module.d.ts +10 -0
- package/dist/runtime/runtime.module.js +112 -0
- package/dist/runtime/step-log.d.ts +40 -0
- package/dist/runtime/step-log.js +94 -0
- package/dist/runtime/stream.controller.d.ts +5 -8
- package/dist/runtime/stream.controller.js +14 -12
- package/dist/runtime/stream.d.ts +24 -6
- package/dist/runtime/stream.js +78 -7
- package/dist/runtime/subagents/child.d.ts +3 -44
- package/dist/runtime/subagents/child.js +0 -79
- package/dist/runtime/subagents/definition.d.ts +4 -4
- package/dist/runtime/subagents/definition.js +2 -2
- package/dist/runtime/subagents/dispatch.d.ts +87 -6
- package/dist/runtime/subagents/dispatch.js +135 -140
- package/dist/runtime/subagents/limits.d.ts +9 -4
- package/dist/runtime/subagents/limits.js +4 -2
- package/dist/runtime/subagents/org-agents.d.ts +4 -4
- package/dist/runtime/subagents/org-agents.js +1 -1
- package/dist/runtime/subagents/progress.d.ts +2 -2
- package/dist/runtime/subagents/roster.d.ts +3 -3
- package/dist/runtime/subagents/roster.js +1 -1
- package/dist/runtime/subagents/skill-fork.d.ts +6 -7
- package/dist/runtime/subagents/skill-fork.js +16 -5
- package/dist/runtime/subagents/subagents.service.d.ts +40 -0
- package/dist/runtime/subagents/subagents.service.js +101 -0
- package/dist/runtime/usage-report.d.ts +94 -52
- package/dist/runtime/usage-report.js +200 -100
- package/dist/runtime/waits.d.ts +125 -57
- package/dist/runtime/waits.js +431 -208
- package/dist/sandbox/job-ids.d.ts +10 -0
- package/dist/sandbox/job-ids.js +10 -0
- package/dist/sandbox/jobs.d.ts +41 -0
- package/dist/sandbox/jobs.js +113 -0
- package/dist/sandbox/leases.d.ts +39 -31
- package/dist/sandbox/leases.js +117 -257
- package/dist/sandbox/providers.d.ts +19 -0
- package/dist/sandbox/providers.js +38 -0
- package/dist/sandbox/sandbox.module.d.ts +8 -0
- package/dist/sandbox/sandbox.module.js +30 -0
- package/dist/sandbox/sandbox.service.d.ts +24 -29
- package/dist/sandbox/sandbox.service.js +106 -75
- package/dist/skills/catalog.d.ts +33 -20
- package/dist/skills/catalog.js +96 -53
- package/dist/skills/changes.controller.d.ts +4 -4
- package/dist/skills/changes.controller.js +15 -9
- package/dist/skills/changes.service.d.ts +28 -18
- package/dist/skills/changes.service.js +421 -364
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +8 -5
- package/dist/skills/invoke.d.ts +16 -15
- package/dist/skills/invoke.js +48 -17
- package/dist/skills/skills.controller.d.ts +1 -1
- package/dist/skills/skills.controller.js +11 -6
- package/dist/skills/skills.module.d.ts +6 -0
- package/dist/skills/skills.module.js +30 -0
- package/dist/skills/skills.service.d.ts +47 -30
- package/dist/skills/skills.service.js +221 -158
- 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/tools/approvals.controller.d.ts +1 -1
- package/dist/tools/approvals.controller.js +12 -8
- package/dist/tools/approvals.service.d.ts +27 -25
- package/dist/tools/approvals.service.js +324 -258
- package/dist/tools/breaker.d.ts +2 -2
- package/dist/tools/breaker.js +21 -3
- package/dist/tools/builtins/ask-user.d.ts +2 -2
- package/dist/tools/builtins/ask-user.js +1 -1
- package/dist/tools/builtins/builtin-tools.d.ts +21 -0
- package/dist/tools/builtins/builtin-tools.js +80 -0
- package/dist/tools/builtins/read-tool-output.d.ts +2 -2
- package/dist/tools/builtins/read-tool-output.js +1 -1
- package/dist/tools/builtins/sandbox/bash.js +2 -2
- package/dist/tools/builtins/sandbox/common.d.ts +2 -1
- package/dist/tools/builtins/sandbox/deliver.js +2 -2
- package/dist/tools/builtins/sandbox/edit.js +1 -1
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -2
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/write.js +1 -1
- package/dist/tools/builtins/skill-load.d.ts +3 -3
- package/dist/tools/builtins/skill-load.js +1 -1
- 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 +1 -1
- package/dist/tools/connectors.controller.js +21 -10
- package/dist/tools/connectors.service.d.ts +31 -13
- package/dist/tools/connectors.service.js +434 -344
- package/dist/tools/credentials.d.ts +17 -20
- package/dist/tools/credentials.js +55 -34
- package/dist/tools/drift.d.ts +29 -41
- package/dist/tools/drift.js +111 -79
- package/dist/tools/info.d.ts +12 -9
- package/dist/tools/info.js +33 -7
- 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/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 +11 -3
- package/dist/tools/oauth/tokens.js +15 -14
- package/dist/tools/outputs.d.ts +13 -4
- package/dist/tools/outputs.js +47 -3
- package/dist/tools/pipeline.d.ts +62 -46
- package/dist/tools/pipeline.js +145 -64
- package/dist/tools/policy.d.ts +2 -2
- package/dist/tools/questions.controller.d.ts +1 -1
- package/dist/tools/questions.controller.js +8 -5
- package/dist/tools/questions.service.d.ts +25 -24
- package/dist/tools/questions.service.js +201 -142
- package/dist/tools/registry.d.ts +30 -20
- package/dist/tools/registry.js +73 -37
- 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 +91 -0
- 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 +9 -57
- package/dist/ui/views.js +43 -45
- package/package.json +9 -2
- 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/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/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
- /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
|
@@ -1,18 +1,34 @@
|
|
|
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";
|
|
2
11
|
import { CATALOG_ITEM_NAME_RE, marketplaceEntryVersion, PLUGIN_MANIFEST_FILE, parseMarketplaceManifest, parsePluginManifest, SDK_VERSION, SEMVER_VERSION_RE, } from "@capybara-hq/plugin-sdk";
|
|
12
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
13
|
import { sql } from "kysely";
|
|
4
14
|
import semver from "semver";
|
|
5
15
|
import { MARKETPLACE_MAX_MIRRORS } from "../config/schema.js";
|
|
6
16
|
import { ConfigError } from "../config/types.js";
|
|
7
17
|
import { createSecrets } from "../ctx/secrets.js";
|
|
8
18
|
import { ApiError } from "../errors.js";
|
|
9
|
-
import { DEPLOYMENT_SECRETS_ORG } from "../extensions/deployment-config.js";
|
|
19
|
+
import { DEPLOYMENT_SECRETS_ORG } from "../extensions/deployment-config-store.js";
|
|
10
20
|
import { audit } from "../identity/audit.js";
|
|
11
|
-
import {
|
|
21
|
+
import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
|
|
22
|
+
import { KernelConfigService } from "../infra/config/kernel-config.service.js";
|
|
23
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
24
|
+
import { TransactionHost } from "../infra/database/transaction-host.js";
|
|
25
|
+
import { Transactional } from "../infra/database/transactional.decorator.js";
|
|
26
|
+
import { KERNEL_LOGGER, KEYRING } from "../infra/tokens.js";
|
|
12
27
|
import { KERNEL_VERSION } from "../version.js";
|
|
13
28
|
import { CLAUDE_PLUGIN_FILE } from "./claude/manifest.js";
|
|
14
29
|
import { CLAUDE_MARKETPLACE_FILE, parseClaudeMarketplace, } from "./claude/marketplace.js";
|
|
15
30
|
import { expandGitUrl, GitSourceError, gitErrorDetails, gitLocationIdentity, gitUrlIdentity, normalGitPath, readGitTreeAndOids, resolveGitCommit, } from "./git-source.js";
|
|
31
|
+
import { CatalogSourceLock } from "./locks.js";
|
|
16
32
|
import { fetchMarketplaceManifest, MarketplaceFetchError, MarketplaceInvalidError, marketplaceNetPolicy, marketplaceUrlProblem, } from "./marketplace-fetch.js";
|
|
17
33
|
import { compareVersions, newestFirst, sameRelease } from "./versions.js";
|
|
18
34
|
/** 官方清单来源的 id。 */
|
|
@@ -346,10 +362,28 @@ export async function loadMarketplaceEntry(db, config, sourceId, name, version)
|
|
|
346
362
|
* status `error`. A status change audits `marketplace.refreshed` and logs once. Stateless, shared
|
|
347
363
|
* by every replica.
|
|
348
364
|
*/
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
365
|
+
let MarketplacesService = class MarketplacesService {
|
|
366
|
+
kdb;
|
|
367
|
+
adminLock;
|
|
368
|
+
sourceLock;
|
|
369
|
+
config;
|
|
370
|
+
keyring;
|
|
371
|
+
log;
|
|
372
|
+
txHost;
|
|
373
|
+
constructor(kdb,
|
|
374
|
+
/** The enterprise admin lock (identity/enterprise-admin.ts): joins the caller's transaction. */
|
|
375
|
+
adminLock, sourceLock, config, keyring, log, txHost) {
|
|
376
|
+
this.kdb = kdb;
|
|
377
|
+
this.adminLock = adminLock;
|
|
378
|
+
this.sourceLock = sourceLock;
|
|
379
|
+
this.config = config;
|
|
380
|
+
this.keyring = keyring;
|
|
381
|
+
this.log = log;
|
|
382
|
+
this.txHost = txHost;
|
|
383
|
+
}
|
|
384
|
+
/** The kernel-schema handle of the current context (the transaction, else the pool). */
|
|
385
|
+
get db() {
|
|
386
|
+
return this.kdb.db;
|
|
353
387
|
}
|
|
354
388
|
/**
|
|
355
389
|
* Creates / updates the official marketplace from config (name, URL, its form per
|
|
@@ -360,14 +394,14 @@ export class MarketplacesService {
|
|
|
360
394
|
* without the schema).
|
|
361
395
|
*/
|
|
362
396
|
async syncOfficialFromConfig() {
|
|
363
|
-
const o = this.
|
|
397
|
+
const o = this.config.get().marketplaces.official;
|
|
364
398
|
const { form, url } = marketplaceForm(o.url);
|
|
365
399
|
if (form === "git" && o.mirrors.length > 0) {
|
|
366
400
|
throw new ConfigError("invalid configuration:\n - marketplaces.official.mirrors: a git marketplace has no mirrors (point marketplaces.official.url at a mirror repository instead)");
|
|
367
401
|
}
|
|
368
402
|
const mirrors = JSON.stringify(o.mirrors);
|
|
369
403
|
const same = sql `marketplaces.url = excluded.url AND marketplaces.form = excluded.form`;
|
|
370
|
-
await this.
|
|
404
|
+
await this.db
|
|
371
405
|
.insertInto("marketplaces")
|
|
372
406
|
.values({
|
|
373
407
|
id: OFFICIAL_MARKETPLACE_ID,
|
|
@@ -393,7 +427,7 @@ export class MarketplacesService {
|
|
|
393
427
|
}
|
|
394
428
|
/** 全部来源(official 在前,其余按创建时间)。 */
|
|
395
429
|
async list() {
|
|
396
|
-
const rows = (await this.
|
|
430
|
+
const rows = (await this.db
|
|
397
431
|
.selectFrom("marketplaces")
|
|
398
432
|
.selectAll()
|
|
399
433
|
.orderBy("builtin", "desc")
|
|
@@ -403,7 +437,7 @@ export class MarketplacesService {
|
|
|
403
437
|
return this.views(rows);
|
|
404
438
|
}
|
|
405
439
|
async get(id) {
|
|
406
|
-
const row = (await this.
|
|
440
|
+
const row = (await this.db
|
|
407
441
|
.selectFrom("marketplaces")
|
|
408
442
|
.selectAll()
|
|
409
443
|
.where("id", "=", id)
|
|
@@ -425,41 +459,44 @@ export class MarketplacesService {
|
|
|
425
459
|
if (input.token !== undefined)
|
|
426
460
|
this.checkToken(input.token);
|
|
427
461
|
const id = randomUUID();
|
|
428
|
-
await this.
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
462
|
+
await this.writeAdd(actor, id, { ...input, name, form, url }, opts);
|
|
463
|
+
return this.get(id);
|
|
464
|
+
}
|
|
465
|
+
async writeAdd(actor, id, input, opts) {
|
|
466
|
+
const { name, url, form } = input;
|
|
467
|
+
const t = this.db;
|
|
468
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
469
|
+
await t
|
|
470
|
+
.insertInto("marketplaces")
|
|
471
|
+
.values({
|
|
472
|
+
id,
|
|
473
|
+
name,
|
|
474
|
+
url,
|
|
475
|
+
form,
|
|
476
|
+
ref: input.ref ?? null,
|
|
477
|
+
mirrors: JSON.stringify(input.mirrors ?? []),
|
|
478
|
+
builtin: false,
|
|
479
|
+
enabled: true,
|
|
480
|
+
created_by: actor,
|
|
481
|
+
})
|
|
482
|
+
.execute();
|
|
483
|
+
if (input.token !== undefined) {
|
|
484
|
+
await this.secrets().set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), input.token);
|
|
485
|
+
}
|
|
486
|
+
await audit(t, {
|
|
487
|
+
actorAccountId: actor,
|
|
488
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
489
|
+
action: "marketplace.added",
|
|
490
|
+
target: id,
|
|
491
|
+
detail: {
|
|
434
492
|
name,
|
|
435
493
|
url,
|
|
436
494
|
form,
|
|
437
|
-
ref: input.ref
|
|
438
|
-
mirrors:
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
created_by: actor,
|
|
442
|
-
})
|
|
443
|
-
.execute();
|
|
444
|
-
if (input.token !== undefined) {
|
|
445
|
-
await this.secrets(trx).set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), input.token);
|
|
446
|
-
}
|
|
447
|
-
await audit(trx, {
|
|
448
|
-
actorAccountId: actor,
|
|
449
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
450
|
-
action: "marketplace.added",
|
|
451
|
-
target: id,
|
|
452
|
-
detail: {
|
|
453
|
-
name,
|
|
454
|
-
url,
|
|
455
|
-
form,
|
|
456
|
-
...(input.ref !== undefined && { ref: input.ref }),
|
|
457
|
-
mirrors: input.mirrors ?? [],
|
|
458
|
-
hasToken: input.token !== undefined,
|
|
459
|
-
},
|
|
460
|
-
});
|
|
495
|
+
...(input.ref !== undefined && { ref: input.ref }),
|
|
496
|
+
mirrors: input.mirrors ?? [],
|
|
497
|
+
hasToken: input.token !== undefined,
|
|
498
|
+
},
|
|
461
499
|
});
|
|
462
|
-
return this.get(id);
|
|
463
500
|
}
|
|
464
501
|
/**
|
|
465
502
|
* Updates an enterprise marketplace (audit `marketplace.updated`, listing the changed fields, the
|
|
@@ -472,101 +509,103 @@ export class MarketplacesService {
|
|
|
472
509
|
*/
|
|
473
510
|
async update(actor, id, patch, opts = {}) {
|
|
474
511
|
const name = patch.name !== undefined ? this.checkName(patch.name) : undefined;
|
|
475
|
-
await this.
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
await secrets.set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), patch.token);
|
|
512
|
+
await this.writeUpdate(actor, id, name, patch, opts);
|
|
513
|
+
return this.get(id);
|
|
514
|
+
}
|
|
515
|
+
async writeUpdate(actor, id, name, patch, opts) {
|
|
516
|
+
const t = this.db;
|
|
517
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
518
|
+
const row = (await t
|
|
519
|
+
.selectFrom("marketplaces")
|
|
520
|
+
.selectAll()
|
|
521
|
+
.where("id", "=", id)
|
|
522
|
+
.forUpdate()
|
|
523
|
+
.executeTakeFirst());
|
|
524
|
+
if (!row)
|
|
525
|
+
throw notFound();
|
|
526
|
+
if (row.builtin &&
|
|
527
|
+
(name !== undefined ||
|
|
528
|
+
patch.url !== undefined ||
|
|
529
|
+
patch.form !== undefined ||
|
|
530
|
+
patch.ref !== undefined ||
|
|
531
|
+
patch.mirrors !== undefined ||
|
|
532
|
+
patch.token !== undefined)) {
|
|
533
|
+
throw builtinErr("changed");
|
|
534
|
+
}
|
|
535
|
+
const target = patch.url !== undefined || patch.form !== undefined
|
|
536
|
+
? marketplaceForm(patch.url ?? row.url, patch.form)
|
|
537
|
+
: { form: row.form, url: row.url };
|
|
538
|
+
// Switching form clears the other form's fields unless the patch sets them: the ref when
|
|
539
|
+
// becoming http, the mirrors when becoming git
|
|
540
|
+
const switched = target.form !== row.form;
|
|
541
|
+
const ref = patch.ref !== undefined ? patch.ref : switched && target.form === "http" ? null : row.ref;
|
|
542
|
+
const mirrors = patch.mirrors ?? (switched && target.form === "git" ? [] : row.mirrors);
|
|
543
|
+
this.checkUrls(target.url, mirrors);
|
|
544
|
+
this.checkGitFields(target.form, ref, mirrors);
|
|
545
|
+
if (typeof patch.token === "string")
|
|
546
|
+
this.checkToken(patch.token);
|
|
547
|
+
const changed = [];
|
|
548
|
+
const set = {};
|
|
549
|
+
if (name !== undefined && name !== row.name) {
|
|
550
|
+
set.name = name;
|
|
551
|
+
changed.push("name");
|
|
552
|
+
}
|
|
553
|
+
if (target.url !== row.url) {
|
|
554
|
+
set.url = target.url;
|
|
555
|
+
changed.push("url");
|
|
556
|
+
}
|
|
557
|
+
if (target.form !== row.form) {
|
|
558
|
+
set.form = target.form;
|
|
559
|
+
changed.push("form");
|
|
560
|
+
}
|
|
561
|
+
if (ref !== row.ref) {
|
|
562
|
+
set.ref = ref;
|
|
563
|
+
changed.push("ref");
|
|
564
|
+
}
|
|
565
|
+
if (set.url !== undefined || set.form !== undefined || set.ref !== undefined) {
|
|
566
|
+
set.etag = null;
|
|
567
|
+
set.last_commit = null;
|
|
568
|
+
}
|
|
569
|
+
if (JSON.stringify(mirrors) !== JSON.stringify(row.mirrors)) {
|
|
570
|
+
set.mirrors = JSON.stringify(mirrors);
|
|
571
|
+
changed.push("mirrors");
|
|
572
|
+
}
|
|
573
|
+
if (patch.enabled !== undefined && patch.enabled !== row.enabled) {
|
|
574
|
+
set.enabled = patch.enabled;
|
|
575
|
+
changed.push("enabled");
|
|
576
|
+
}
|
|
577
|
+
if (Object.keys(set).length > 0) {
|
|
578
|
+
await t.updateTable("marketplaces").set(set).where("id", "=", id).execute();
|
|
579
|
+
}
|
|
580
|
+
if (patch.token !== undefined) {
|
|
581
|
+
const secrets = this.secrets();
|
|
582
|
+
const had = (await secrets.get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) !== null;
|
|
583
|
+
if (patch.token === null) {
|
|
584
|
+
if (had) {
|
|
585
|
+
await secrets.delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
|
|
550
586
|
changed.push("token");
|
|
551
587
|
}
|
|
552
588
|
}
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
589
|
+
else {
|
|
590
|
+
await secrets.set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), patch.token);
|
|
591
|
+
changed.push("token");
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
if (changed.length === 0)
|
|
595
|
+
return;
|
|
596
|
+
await audit(t, {
|
|
597
|
+
actorAccountId: actor,
|
|
598
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
599
|
+
action: "marketplace.updated",
|
|
600
|
+
target: id,
|
|
601
|
+
detail: {
|
|
602
|
+
changed,
|
|
603
|
+
...(set.enabled !== undefined && { enabled: set.enabled }),
|
|
604
|
+
...(set.url !== undefined && { url: set.url }),
|
|
605
|
+
...(set.form !== undefined && { form: set.form }),
|
|
606
|
+
...(set.ref !== undefined && { ref: set.ref }),
|
|
607
|
+
},
|
|
568
608
|
});
|
|
569
|
-
return this.get(id);
|
|
570
609
|
}
|
|
571
610
|
/**
|
|
572
611
|
* Deletes an enterprise marketplace (audit `marketplace.removed`): its cached entries and token
|
|
@@ -574,27 +613,26 @@ export class MarketplacesService {
|
|
|
574
613
|
* only be disabled -> `marketplace.builtin`.
|
|
575
614
|
*/
|
|
576
615
|
async remove(actor, id, opts = {}) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
});
|
|
616
|
+
const t = this.db;
|
|
617
|
+
await this.adminLock.lockAndAuthorize(actor);
|
|
618
|
+
const row = await t
|
|
619
|
+
.selectFrom("marketplaces")
|
|
620
|
+
.select(["builtin", "name", "url"])
|
|
621
|
+
.where("id", "=", id)
|
|
622
|
+
.forUpdate()
|
|
623
|
+
.executeTakeFirst();
|
|
624
|
+
if (!row)
|
|
625
|
+
throw notFound();
|
|
626
|
+
if (row.builtin)
|
|
627
|
+
throw builtinErr("deleted");
|
|
628
|
+
await t.deleteFrom("marketplaces").where("id", "=", id).execute();
|
|
629
|
+
await this.secrets().delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
|
|
630
|
+
await audit(t, {
|
|
631
|
+
actorAccountId: actor,
|
|
632
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
633
|
+
action: "marketplace.removed",
|
|
634
|
+
target: id,
|
|
635
|
+
detail: { name: row.name, url: row.url },
|
|
598
636
|
});
|
|
599
637
|
}
|
|
600
638
|
/**
|
|
@@ -609,8 +647,8 @@ export class MarketplacesService {
|
|
|
609
647
|
* (the message gives each URL's failure).
|
|
610
648
|
*/
|
|
611
649
|
async refresh(id, signal, actor, opts = {}) {
|
|
612
|
-
const config = this.
|
|
613
|
-
const row = (await this.
|
|
650
|
+
const config = this.config.get();
|
|
651
|
+
const row = (await this.db
|
|
614
652
|
.selectFrom("marketplaces")
|
|
615
653
|
.selectAll()
|
|
616
654
|
.where("id", "=", id)
|
|
@@ -624,7 +662,7 @@ export class MarketplacesService {
|
|
|
624
662
|
}
|
|
625
663
|
const token = row.builtin
|
|
626
664
|
? undefined
|
|
627
|
-
: ((await this.secrets(
|
|
665
|
+
: ((await this.secrets().get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined);
|
|
628
666
|
const tokenOrigin = new URL(row.url).origin;
|
|
629
667
|
const errors = [];
|
|
630
668
|
// the API code of each failed URL (undefined: an ordinary fetch failure)
|
|
@@ -660,7 +698,7 @@ export class MarketplacesService {
|
|
|
660
698
|
etag: row.etag,
|
|
661
699
|
...(token !== undefined && { token, tokenOrigin }),
|
|
662
700
|
maxBytes: config.marketplaces.maxIndexBytes,
|
|
663
|
-
timeoutMs:
|
|
701
|
+
timeoutMs: MARKETPLACE_FETCH_TIMEOUT_MS,
|
|
664
702
|
net: marketplaceNetPolicy(config),
|
|
665
703
|
signal,
|
|
666
704
|
});
|
|
@@ -688,89 +726,17 @@ export class MarketplacesService {
|
|
|
688
726
|
? new Map()
|
|
689
727
|
: await this.resolveHeads(id, outcome === "not_modified" ? undefined : outcome.manifest.plugins, { url: row.url, token }, signal);
|
|
690
728
|
const lastError = status === "error" ? errors.join("\n").slice(0, MAX_ERROR_CHARS) : null;
|
|
691
|
-
const from = await this.
|
|
692
|
-
await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.catalog-source:${id}`}))`.execute(trx);
|
|
693
|
-
const cur = await trx
|
|
694
|
-
.selectFrom("marketplaces")
|
|
695
|
-
.select(["last_status", "url", "mirrors", "form", "ref", "last_commit"])
|
|
696
|
-
.where("id", "=", id)
|
|
697
|
-
.forUpdate()
|
|
698
|
-
.executeTakeFirst();
|
|
699
|
-
if (!cur)
|
|
700
|
-
throw notFound();
|
|
701
|
-
// The admin changed the URL / mirrors during the fetch: what we fetched is the old address's
|
|
702
|
-
// content, so write no entries, ETag or status (the next refresh uses the new address)
|
|
703
|
-
if (cur.url !== row.url ||
|
|
704
|
-
cur.form !== row.form ||
|
|
705
|
-
cur.ref !== row.ref ||
|
|
706
|
-
// another refresh wrote a commit meanwhile: ours may be older, never move it back
|
|
707
|
-
cur.last_commit !== row.last_commit ||
|
|
708
|
-
JSON.stringify(cur.mirrors) !== JSON.stringify(row.mirrors)) {
|
|
709
|
-
return "stale";
|
|
710
|
-
}
|
|
711
|
-
if (outcome !== undefined && outcome !== "not_modified") {
|
|
712
|
-
await this.replaceEntries(trx, id, outcome.manifest.plugins, outcome.trees, outcome.overlays);
|
|
713
|
-
}
|
|
714
|
-
if (outcome !== undefined) {
|
|
715
|
-
// heads not resolved this time are unknown again (never a stale head)
|
|
716
|
-
await trx
|
|
717
|
-
.updateTable("marketplace_entries")
|
|
718
|
-
.set({ head_commit: null, tree_oid: null })
|
|
719
|
-
.where("source_id", "=", id)
|
|
720
|
-
.where("head_commit", "is not", null)
|
|
721
|
-
.execute();
|
|
722
|
-
}
|
|
723
|
-
for (const [key, head] of heads) {
|
|
724
|
-
const [name, version] = key.split("\0");
|
|
725
|
-
await trx
|
|
726
|
-
.updateTable("marketplace_entries")
|
|
727
|
-
.set({ head_commit: head.commit, tree_oid: head.tree })
|
|
728
|
-
.where("source_id", "=", id)
|
|
729
|
-
.where("name", "=", name)
|
|
730
|
-
.where("version", "=", version)
|
|
731
|
-
.execute();
|
|
732
|
-
}
|
|
733
|
-
await trx
|
|
734
|
-
.updateTable("marketplaces")
|
|
735
|
-
.set({
|
|
736
|
-
last_status: status,
|
|
737
|
-
last_error: lastError,
|
|
738
|
-
last_refreshed_at: sql `now()`,
|
|
739
|
-
...(outcome !== undefined &&
|
|
740
|
-
outcome !== "not_modified" && {
|
|
741
|
-
etag: outcome.etag,
|
|
742
|
-
last_commit: outcome.commit ?? null,
|
|
743
|
-
owner_name: outcome.manifest.owner?.name ?? null,
|
|
744
|
-
skipped: JSON.stringify(outcome.skipped ?? []),
|
|
745
|
-
}),
|
|
746
|
-
})
|
|
747
|
-
.where("id", "=", id)
|
|
748
|
-
.execute();
|
|
749
|
-
if (cur.last_status !== status) {
|
|
750
|
-
await audit(trx, {
|
|
751
|
-
...(actor !== undefined && { actorAccountId: actor }),
|
|
752
|
-
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
753
|
-
action: "marketplace.refreshed",
|
|
754
|
-
target: id,
|
|
755
|
-
detail: {
|
|
756
|
-
from: cur.last_status,
|
|
757
|
-
to: status,
|
|
758
|
-
...(lastError !== null && { error: lastError }),
|
|
759
|
-
},
|
|
760
|
-
});
|
|
761
|
-
}
|
|
762
|
-
return cur.last_status;
|
|
763
|
-
});
|
|
729
|
+
const from = await this.recordRefresh(row, { outcome, heads, status, lastError }, actor, opts);
|
|
764
730
|
if (from === "stale") {
|
|
765
|
-
this.
|
|
731
|
+
this.log.info("marketplace changed during refresh; result discarded", { marketplace: id });
|
|
766
732
|
return this.get(id);
|
|
767
733
|
}
|
|
768
734
|
if (from !== status) {
|
|
769
735
|
if (status === "error") {
|
|
770
|
-
this.
|
|
736
|
+
this.log.warn("marketplace refresh failed", { marketplace: id, error: lastError });
|
|
771
737
|
}
|
|
772
738
|
else {
|
|
773
|
-
this.
|
|
739
|
+
this.log.info("marketplace refreshed", { marketplace: id });
|
|
774
740
|
}
|
|
775
741
|
}
|
|
776
742
|
if (status === "error" && opts.throwOnError) {
|
|
@@ -794,7 +760,7 @@ export class MarketplacesService {
|
|
|
794
760
|
* (Decision 3). Throws {@link GitSourceError} or {@link MarketplaceInvalidError}.
|
|
795
761
|
*/
|
|
796
762
|
async fetchGit(row, token, signal) {
|
|
797
|
-
const config = this.
|
|
763
|
+
const config = this.config.get();
|
|
798
764
|
const options = {
|
|
799
765
|
net: marketplaceNetPolicy(config),
|
|
800
766
|
maxBytes: config.packages.maxBytes,
|
|
@@ -914,9 +880,9 @@ export class MarketplacesService {
|
|
|
914
880
|
* entry unknown (never fails the refresh). Returns `name\0version` -> head.
|
|
915
881
|
*/
|
|
916
882
|
async resolveHeads(id, fresh, m, signal) {
|
|
917
|
-
const config = this.
|
|
883
|
+
const config = this.config.get();
|
|
918
884
|
const listed = fresh ??
|
|
919
|
-
(await this.
|
|
885
|
+
(await this.db
|
|
920
886
|
.selectFrom("marketplace_entries")
|
|
921
887
|
.select("entry")
|
|
922
888
|
.where("source_id", "=", id)
|
|
@@ -925,7 +891,7 @@ export class MarketplacesService {
|
|
|
925
891
|
const names = [...new Set(listed.filter((e) => "git" in e.source).map((e) => e.name))];
|
|
926
892
|
if (names.length === 0)
|
|
927
893
|
return out;
|
|
928
|
-
const imported = await this.
|
|
894
|
+
const imported = await this.db
|
|
929
895
|
.selectFrom("catalog_items as i")
|
|
930
896
|
.innerJoin("catalog_item_versions as v", "v.item_id", "i.id")
|
|
931
897
|
.select(["i.name", "v.version", "v.source", "v.source_ref", "v.integrity", "v.source_detail"])
|
|
@@ -933,7 +899,7 @@ export class MarketplacesService {
|
|
|
933
899
|
.where("i.name", "in", names)
|
|
934
900
|
.execute();
|
|
935
901
|
const todo = headsToResolve(listed, imported, config, MARKETPLACE_HEADS_MAX);
|
|
936
|
-
const timeoutMs =
|
|
902
|
+
const timeoutMs = MARKETPLACE_FETCH_TIMEOUT_MS;
|
|
937
903
|
const queue = [...todo];
|
|
938
904
|
await Promise.all(Array.from({ length: Math.min(HEADS_CONCURRENCY, queue.length) }, async () => {
|
|
939
905
|
for (let e = queue.shift(); e !== undefined; e = queue.shift()) {
|
|
@@ -959,7 +925,7 @@ export class MarketplacesService {
|
|
|
959
925
|
}
|
|
960
926
|
catch (err) {
|
|
961
927
|
// a head lookup never fails the refresh: that entry stays unknown
|
|
962
|
-
this.
|
|
928
|
+
this.log.warn("cannot resolve the branch head of a marketplace entry", {
|
|
963
929
|
marketplace: id,
|
|
964
930
|
entry: e.name,
|
|
965
931
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -971,12 +937,12 @@ export class MarketplacesService {
|
|
|
971
937
|
}
|
|
972
938
|
/** The token of an enterprise marketplace (undefined without one; official never has one). */
|
|
973
939
|
async token(id) {
|
|
974
|
-
return (await this.secrets(
|
|
940
|
+
return (await this.secrets().get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined;
|
|
975
941
|
}
|
|
976
942
|
/** Refreshes every effective marketplace (maintenance job `catalogs-refresh`), one failing not stopping the rest. */
|
|
977
943
|
async refreshAll(signal) {
|
|
978
|
-
const config = this.
|
|
979
|
-
const rows = await this.
|
|
944
|
+
const config = this.config.get();
|
|
945
|
+
const rows = await this.db
|
|
980
946
|
.selectFrom("marketplaces")
|
|
981
947
|
.select(["id", "builtin", "enabled"])
|
|
982
948
|
.orderBy("id")
|
|
@@ -990,7 +956,7 @@ export class MarketplacesService {
|
|
|
990
956
|
await this.refresh(r.id, signal);
|
|
991
957
|
}
|
|
992
958
|
catch (err) {
|
|
993
|
-
this.
|
|
959
|
+
this.log.error("marketplace refresh crashed", { marketplace: r.id, err });
|
|
994
960
|
}
|
|
995
961
|
}
|
|
996
962
|
}
|
|
@@ -1001,8 +967,8 @@ export class MarketplacesService {
|
|
|
1001
967
|
* (the UI suggests narrowing the filter).
|
|
1002
968
|
*/
|
|
1003
969
|
async entries(q = {}) {
|
|
1004
|
-
const config = this.
|
|
1005
|
-
let query = this.
|
|
970
|
+
const config = this.config.get();
|
|
971
|
+
let query = this.db
|
|
1006
972
|
.selectFrom("marketplace_entries as e")
|
|
1007
973
|
.innerJoin("marketplaces as s", "s.id", "e.source_id")
|
|
1008
974
|
.select([
|
|
@@ -1043,7 +1009,7 @@ export class MarketplacesService {
|
|
|
1043
1009
|
a.source_id.localeCompare(b.source_id));
|
|
1044
1010
|
if (rows.length === 0)
|
|
1045
1011
|
return { items: [], truncated: false };
|
|
1046
|
-
const items = await this.
|
|
1012
|
+
const items = await this.db
|
|
1047
1013
|
.selectFrom("catalog_items as i")
|
|
1048
1014
|
.leftJoin("catalog_item_versions as v", "v.item_id", "i.id")
|
|
1049
1015
|
.select([
|
|
@@ -1114,14 +1080,95 @@ export class MarketplacesService {
|
|
|
1114
1080
|
});
|
|
1115
1081
|
return { items: views, truncated };
|
|
1116
1082
|
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Writes a refresh's result under the marketplace's lock (entries, heads, status, the status
|
|
1085
|
+
* change audit); `stale` when the marketplace changed during the fetch (nothing is written).
|
|
1086
|
+
*/
|
|
1087
|
+
async recordRefresh(row, r, actor, opts) {
|
|
1088
|
+
const { id } = row;
|
|
1089
|
+
const { outcome, heads, status, lastError } = r;
|
|
1090
|
+
await this.sourceLock.lock(id);
|
|
1091
|
+
const t = this.db;
|
|
1092
|
+
const cur = await t
|
|
1093
|
+
.selectFrom("marketplaces")
|
|
1094
|
+
.select(["last_status", "url", "mirrors", "form", "ref", "last_commit"])
|
|
1095
|
+
.where("id", "=", id)
|
|
1096
|
+
.forUpdate()
|
|
1097
|
+
.executeTakeFirst();
|
|
1098
|
+
if (!cur)
|
|
1099
|
+
throw notFound();
|
|
1100
|
+
// The admin changed the URL / mirrors during the fetch: what we fetched is the old address's
|
|
1101
|
+
// content, so write no entries, ETag or status (the next refresh uses the new address)
|
|
1102
|
+
if (cur.url !== row.url ||
|
|
1103
|
+
cur.form !== row.form ||
|
|
1104
|
+
cur.ref !== row.ref ||
|
|
1105
|
+
// another refresh wrote a commit meanwhile: ours may be older, never move it back
|
|
1106
|
+
cur.last_commit !== row.last_commit ||
|
|
1107
|
+
JSON.stringify(cur.mirrors) !== JSON.stringify(row.mirrors)) {
|
|
1108
|
+
return "stale";
|
|
1109
|
+
}
|
|
1110
|
+
if (outcome !== undefined && outcome !== "not_modified") {
|
|
1111
|
+
await this.replaceEntries(id, outcome.manifest.plugins, outcome.trees, outcome.overlays);
|
|
1112
|
+
}
|
|
1113
|
+
if (outcome !== undefined) {
|
|
1114
|
+
// heads not resolved this time are unknown again (never a stale head)
|
|
1115
|
+
await t
|
|
1116
|
+
.updateTable("marketplace_entries")
|
|
1117
|
+
.set({ head_commit: null, tree_oid: null })
|
|
1118
|
+
.where("source_id", "=", id)
|
|
1119
|
+
.where("head_commit", "is not", null)
|
|
1120
|
+
.execute();
|
|
1121
|
+
}
|
|
1122
|
+
for (const [key, head] of heads) {
|
|
1123
|
+
const [name, version] = key.split("\0");
|
|
1124
|
+
await t
|
|
1125
|
+
.updateTable("marketplace_entries")
|
|
1126
|
+
.set({ head_commit: head.commit, tree_oid: head.tree })
|
|
1127
|
+
.where("source_id", "=", id)
|
|
1128
|
+
.where("name", "=", name)
|
|
1129
|
+
.where("version", "=", version)
|
|
1130
|
+
.execute();
|
|
1131
|
+
}
|
|
1132
|
+
await t
|
|
1133
|
+
.updateTable("marketplaces")
|
|
1134
|
+
.set({
|
|
1135
|
+
last_status: status,
|
|
1136
|
+
last_error: lastError,
|
|
1137
|
+
last_refreshed_at: sql `now()`,
|
|
1138
|
+
...(outcome !== undefined &&
|
|
1139
|
+
outcome !== "not_modified" && {
|
|
1140
|
+
etag: outcome.etag,
|
|
1141
|
+
last_commit: outcome.commit ?? null,
|
|
1142
|
+
owner_name: outcome.manifest.owner?.name ?? null,
|
|
1143
|
+
skipped: JSON.stringify(outcome.skipped ?? []),
|
|
1144
|
+
}),
|
|
1145
|
+
})
|
|
1146
|
+
.where("id", "=", id)
|
|
1147
|
+
.execute();
|
|
1148
|
+
if (cur.last_status !== status) {
|
|
1149
|
+
await audit(t, {
|
|
1150
|
+
...(actor !== undefined && { actorAccountId: actor }),
|
|
1151
|
+
...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
|
|
1152
|
+
action: "marketplace.refreshed",
|
|
1153
|
+
target: id,
|
|
1154
|
+
detail: {
|
|
1155
|
+
from: cur.last_status,
|
|
1156
|
+
to: status,
|
|
1157
|
+
...(lastError !== null && { error: lastError }),
|
|
1158
|
+
},
|
|
1159
|
+
});
|
|
1160
|
+
}
|
|
1161
|
+
return cur.last_status;
|
|
1162
|
+
}
|
|
1117
1163
|
/**
|
|
1118
1164
|
* Replaces the entries of a marketplace; `trees` (a git marketplace) gives each path entry the
|
|
1119
1165
|
* tree oid of its directory.
|
|
1120
1166
|
*/
|
|
1121
|
-
async replaceEntries(
|
|
1122
|
-
|
|
1167
|
+
async replaceEntries(id, entries, trees, overlays) {
|
|
1168
|
+
const t = this.db;
|
|
1169
|
+
await t.deleteFrom("marketplace_entries").where("source_id", "=", id).execute();
|
|
1123
1170
|
for (let i = 0; i < entries.length; i += INSERT_BATCH) {
|
|
1124
|
-
await
|
|
1171
|
+
await t
|
|
1125
1172
|
.insertInto("marketplace_entries")
|
|
1126
1173
|
.values(entries.slice(i, i + INSERT_BATCH).map((e) => ({
|
|
1127
1174
|
source_id: id,
|
|
@@ -1138,15 +1185,15 @@ export class MarketplacesService {
|
|
|
1138
1185
|
async views(rows) {
|
|
1139
1186
|
if (rows.length === 0)
|
|
1140
1187
|
return [];
|
|
1141
|
-
const config = this.
|
|
1188
|
+
const config = this.config.get();
|
|
1142
1189
|
const ids = rows.map((r) => r.id);
|
|
1143
|
-
const counts = await this.
|
|
1190
|
+
const counts = await this.db
|
|
1144
1191
|
.selectFrom("marketplace_entries")
|
|
1145
1192
|
.select(["source_id", (eb) => eb.fn.countAll().as("n")])
|
|
1146
1193
|
.where("source_id", "in", ids)
|
|
1147
1194
|
.groupBy("source_id")
|
|
1148
1195
|
.execute();
|
|
1149
|
-
const tokens = await this.
|
|
1196
|
+
const tokens = await this.db
|
|
1150
1197
|
.selectFrom("secrets")
|
|
1151
1198
|
.select("key")
|
|
1152
1199
|
.where("namespace", "=", SECRETS_NAMESPACE)
|
|
@@ -1176,8 +1223,9 @@ export class MarketplacesService {
|
|
|
1176
1223
|
createdAt: r.created_at.toISOString(),
|
|
1177
1224
|
}));
|
|
1178
1225
|
}
|
|
1179
|
-
secrets(
|
|
1180
|
-
|
|
1226
|
+
/** The deployment secrets on the current context's handle (the transaction, else the pool). */
|
|
1227
|
+
secrets() {
|
|
1228
|
+
return createSecrets(this.db, this.keyring, SECRETS_NAMESPACE);
|
|
1181
1229
|
}
|
|
1182
1230
|
checkName(name) {
|
|
1183
1231
|
const n = name.trim();
|
|
@@ -1187,7 +1235,7 @@ export class MarketplacesService {
|
|
|
1187
1235
|
return n;
|
|
1188
1236
|
}
|
|
1189
1237
|
checkUrls(url, mirrors) {
|
|
1190
|
-
const allow = this.
|
|
1238
|
+
const allow = this.config.get().marketplaces.allowInsecureLoopback;
|
|
1191
1239
|
if (mirrors.length > MARKETPLACE_MAX_MIRRORS) {
|
|
1192
1240
|
throw new ApiError("validation_failed", `at most ${MARKETPLACE_MAX_MIRRORS} mirrors`);
|
|
1193
1241
|
}
|
|
@@ -1214,4 +1262,30 @@ export class MarketplacesService {
|
|
|
1214
1262
|
throw new ApiError("validation_failed", `token must be 1–${MAX_TOKEN_CHARS} characters without line breaks`);
|
|
1215
1263
|
}
|
|
1216
1264
|
}
|
|
1217
|
-
}
|
|
1265
|
+
};
|
|
1266
|
+
__decorate([
|
|
1267
|
+
Transactional()
|
|
1268
|
+
], MarketplacesService.prototype, "writeAdd", null);
|
|
1269
|
+
__decorate([
|
|
1270
|
+
Transactional()
|
|
1271
|
+
], MarketplacesService.prototype, "writeUpdate", null);
|
|
1272
|
+
__decorate([
|
|
1273
|
+
Transactional()
|
|
1274
|
+
], MarketplacesService.prototype, "remove", null);
|
|
1275
|
+
__decorate([
|
|
1276
|
+
Transactional()
|
|
1277
|
+
], MarketplacesService.prototype, "recordRefresh", null);
|
|
1278
|
+
__decorate([
|
|
1279
|
+
Transactional({ propagation: "mandatory" })
|
|
1280
|
+
], MarketplacesService.prototype, "replaceEntries", null);
|
|
1281
|
+
MarketplacesService = __decorate([
|
|
1282
|
+
Injectable(),
|
|
1283
|
+
__param(0, Inject(KernelDb)),
|
|
1284
|
+
__param(1, Inject(EnterpriseAdminLock)),
|
|
1285
|
+
__param(2, Inject(CatalogSourceLock)),
|
|
1286
|
+
__param(3, Inject(KernelConfigService)),
|
|
1287
|
+
__param(4, Inject(KEYRING)),
|
|
1288
|
+
__param(5, Inject(KERNEL_LOGGER)),
|
|
1289
|
+
__param(6, Inject(TransactionHost))
|
|
1290
|
+
], MarketplacesService);
|
|
1291
|
+
export { MarketplacesService };
|