@opengeni/core 3.0.1 → 3.1.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/README.md +4 -4
- package/dist/access/index.d.ts +131 -7
- package/dist/access/service-initiator.d.ts +3 -0
- package/dist/application/archived-session-imports.d.ts +6 -0
- package/dist/application/composer-submit.d.ts +1 -1
- package/dist/application/connect-operation.d.ts +6 -0
- package/dist/application/external-workspace-members.d.ts +13 -1
- package/dist/application/modal-native-live-declaration-join.d.ts +37 -0
- package/dist/application/modal-native-original-configuration.d.ts +79 -0
- package/dist/application/modal-native-worker-host-transport.d.ts +297 -0
- package/dist/application/new-session-drafts.d.ts +29 -2
- package/dist/application/organization-privacy.d.ts +57 -0
- package/dist/application/prepared-mcp-connection.d.ts +31 -0
- package/dist/application/sandbox-recovery.d.ts +58 -0
- package/dist/application/session-commands.d.ts +3 -0
- package/dist/application/session-tenancy.d.ts +13 -4
- package/dist/billing/agent-run-admission.d.ts +21 -0
- package/dist/billing/limits.d.ts +27 -1
- package/dist/billing/model-call-admission.d.ts +34 -0
- package/dist/billing/model-usage-settlement.d.ts +112 -0
- package/dist/canonical-human-identities.js +1 -1
- package/dist/{chunk-VCZFFEPB.js → chunk-7T2SZ7BI.js} +16 -2
- package/dist/chunk-7T2SZ7BI.js.map +1 -0
- package/dist/{chunk-ZYCNLYGH.js → chunk-OMJFIIWK.js} +178 -12
- package/dist/chunk-OMJFIIWK.js.map +1 -0
- package/dist/{chunk-H7X52RI2.js → chunk-QI2M2B2K.js} +83 -8
- package/dist/chunk-QI2M2B2K.js.map +1 -0
- package/dist/{chunk-OF65T3PM.js → chunk-TTWTXQB2.js} +94 -6
- package/dist/chunk-TTWTXQB2.js.map +1 -0
- package/dist/codex-model-availability.d.ts +55 -0
- package/dist/default-session-model.d.ts +192 -0
- package/dist/dependencies.d.ts +41 -7
- package/dist/developer-setup-credential-ceiling.d.ts +10 -0
- package/dist/domain/agent-config-resolution.d.ts +49 -0
- package/dist/domain/automations.d.ts +8 -1
- package/dist/domain/capabilities.d.ts +112 -8
- package/dist/domain/connection-account-selection-error.d.ts +8 -0
- package/dist/domain/connector-tool-permissions.d.ts +62 -0
- package/dist/domain/direct-model-provider.d.ts +3 -0
- package/dist/domain/editable-artifacts/agent-application.d.ts +10 -1
- package/dist/domain/editable-artifacts/durable-export.d.ts +22 -1
- package/dist/domain/editable-artifacts/ports.d.ts +10 -0
- package/dist/domain/editable-artifacts/service.d.ts +3 -1
- package/dist/domain/editable-artifacts/types.d.ts +1 -1
- package/dist/domain/encryption-key.d.ts +12 -0
- package/dist/domain/insights-timing.d.ts +16 -0
- package/dist/domain/insights-usage.d.ts +27 -0
- package/dist/domain/insights.d.ts +21 -3
- package/dist/domain/knowledge-files.d.ts +1 -1
- package/dist/domain/knowledge-preparation.d.ts +10 -0
- package/dist/domain/knowledge-preparation.test.d.ts +1 -0
- package/dist/domain/knowledge-search.d.ts +15 -76
- package/dist/domain/mcp-account-bindings.d.ts +17 -0
- package/dist/domain/mcp-account-routes.d.ts +21 -0
- package/dist/domain/native-mcp-connection-admission.d.ts +3 -0
- package/dist/domain/organization-integration-catalog.d.ts +15 -0
- package/dist/domain/personal-connection-delegations.d.ts +73 -12
- package/dist/domain/pr-review.d.ts +121 -6
- package/dist/domain/realtime-voice-billing.d.ts +103 -0
- package/dist/domain/resources.d.ts +17 -1
- package/dist/domain/scheduled-task-access.d.ts +265 -0
- package/dist/domain/scheduled-task-account-audit.d.ts +27 -0
- package/dist/domain/scheduled-task-audience.d.ts +70 -0
- package/dist/domain/scheduled-tasks.d.ts +61 -18
- package/dist/domain/session-connection-accounts.d.ts +53 -0
- package/dist/domain/session-file-access.d.ts +4 -0
- package/dist/domain/session-native-connection-replacement.d.ts +14 -0
- package/dist/domain/session-start-timing.d.ts +7 -0
- package/dist/domain/session-tool-policy.d.ts +102 -4
- package/dist/domain/sessions.d.ts +179 -15
- package/dist/domain/site-audience.d.ts +52 -0
- package/dist/domain/skills.d.ts +29 -1
- package/dist/domain/slack-bot.d.ts +46 -1
- package/dist/domain/slack-publication-secret-safety.d.ts +1 -1
- package/dist/domain/vaults/index.d.ts +7 -0
- package/dist/domain/vaults/mapping.d.ts +25 -0
- package/dist/domain/vaults/provider-registry.d.ts +72 -0
- package/dist/domain/vaults/provider-sync.d.ts +176 -0
- package/dist/domain/vaults/provider-writes.d.ts +57 -0
- package/dist/domain/vaults/secret-resolver.d.ts +34 -0
- package/dist/domain/vaults/types.d.ts +24 -0
- package/dist/domain/vaults/vault-service.d.ts +35 -0
- package/dist/domain/voice-input-billing.d.ts +77 -0
- package/dist/domain/web-search-billing.d.ts +51 -0
- package/dist/domain/workspace-credits.d.ts +7 -0
- package/dist/editable-artifact-live/application.d.ts +2 -1
- package/dist/editable-artifact-live/server.d.ts +5 -1
- package/dist/editable-artifact-live/ticket.d.ts +2 -1
- package/dist/editable-artifact-live/types.d.ts +9 -0
- package/dist/editable-artifact-live.js +2 -2
- package/dist/editable-artifacts.js +10 -2
- package/dist/goal-admission.d.ts +627 -0
- package/dist/host-session-usage-limit.d.ts +15 -0
- package/dist/index.d.ts +43 -8
- package/dist/index.js +22682 -11743
- package/dist/index.js.map +1 -1
- package/dist/managed-session.d.ts +110 -7
- package/dist/model-call.d.ts +58 -0
- package/dist/model-catalog.d.ts +29 -3
- package/dist/model-provider-credentials.d.ts +43 -0
- package/dist/product-usage-metrics.d.ts +30 -0
- package/dist/rigs/index.d.ts +1 -13
- package/dist/sandbox/fleet.d.ts +58 -4
- package/dist/sandbox/routing.d.ts +42 -2
- package/dist/sandbox/runtime-settings.d.ts +27 -17
- package/dist/session-authorization.d.ts +10 -0
- package/dist/session-usage-limit-metrics.d.ts +60 -0
- package/dist/session-usage-limits.d.ts +89 -0
- package/dist/site-agent-clamp.d.ts +71 -0
- package/dist/site-session-origin.d.ts +39 -2
- package/dist/transcription.d.ts +120 -3
- package/dist/turn-surface.d.ts +20 -0
- package/dist/user-presence.d.ts +32 -0
- package/dist/workflow-wake-contract.d.ts +13 -1
- package/package.json +15 -22
- package/src/access/index.ts +961 -38
- package/src/access/service-initiator.ts +50 -0
- package/src/application/api-integration-servers.ts +9 -0
- package/src/application/archived-session-imports.ts +161 -0
- package/src/application/composer-submit.ts +3 -2
- package/src/application/connect-authority.ts +3 -3
- package/src/application/connect-operation.ts +37 -3
- package/src/application/external-continuation.ts +20 -3
- package/src/application/external-link-work-admission.ts +3 -0
- package/src/application/external-workspace-members.ts +51 -3
- package/src/application/modal-native-live-declaration-join.ts +196 -0
- package/src/application/modal-native-original-configuration.ts +261 -0
- package/src/application/modal-native-worker-host-transport.ts +263 -0
- package/src/application/new-session-drafts.ts +172 -55
- package/src/application/organization-privacy.ts +161 -0
- package/src/application/prepared-mcp-connection.ts +133 -0
- package/src/application/sandbox-recovery.ts +78 -0
- package/src/application/session-commands.ts +73 -1
- package/src/application/session-mcp-credential-rotation.ts +61 -18
- package/src/application/session-tenancy.ts +262 -44
- package/src/application/user-resource-grants.ts +1 -29
- package/src/billing/agent-run-admission.ts +117 -0
- package/src/billing/limits.ts +138 -14
- package/src/billing/model-call-admission.ts +118 -0
- package/src/billing/model-usage-settlement.ts +472 -0
- package/src/codex-model-availability.ts +264 -0
- package/src/default-session-model.ts +692 -0
- package/src/dependencies.ts +48 -6
- package/src/developer-setup-credential-ceiling.ts +60 -0
- package/src/domain/agent-config-resolution.ts +148 -0
- package/src/domain/automations.ts +76 -2
- package/src/domain/capabilities.ts +830 -181
- package/src/domain/connection-account-selection-error.ts +19 -0
- package/src/domain/connector-tool-permissions.ts +572 -0
- package/src/domain/direct-model-provider.ts +62 -0
- package/src/domain/editable-artifacts/agent-application.ts +44 -6
- package/src/domain/editable-artifacts/durable-export.ts +100 -5
- package/src/domain/editable-artifacts/in-memory.ts +6 -0
- package/src/domain/editable-artifacts/ports.ts +11 -0
- package/src/domain/editable-artifacts/service.ts +20 -0
- package/src/domain/editable-artifacts/types.ts +1 -1
- package/src/domain/encryption-key.ts +26 -0
- package/src/domain/file-owner.ts +16 -1
- package/src/domain/github-action-policies.ts +1 -1
- package/src/domain/github-skill-source.ts +3 -1
- package/src/domain/insights-timing.ts +95 -0
- package/src/domain/insights-usage.ts +67 -0
- package/src/domain/insights.ts +167 -43
- package/src/domain/knowledge-files.ts +10 -3
- package/src/domain/knowledge-messages.ts +1 -0
- package/src/domain/knowledge-preparation.test.ts +276 -0
- package/src/domain/knowledge-preparation.ts +147 -0
- package/src/domain/knowledge-search.test.ts +617 -5
- package/src/domain/knowledge-search.ts +240 -23
- package/src/domain/mcp-account-bindings.ts +169 -0
- package/src/domain/mcp-account-routes.ts +152 -0
- package/src/domain/native-mcp-connection-admission.ts +14 -0
- package/src/domain/organization-integration-catalog.ts +88 -0
- package/src/domain/personal-connection-delegations.ts +399 -257
- package/src/domain/pr-review.ts +24 -8
- package/src/domain/realtime-voice-billing.ts +425 -0
- package/src/domain/resources.ts +50 -4
- package/src/domain/scheduled-task-access.ts +1089 -0
- package/src/domain/scheduled-task-account-audit.ts +90 -0
- package/src/domain/scheduled-task-audience.ts +249 -0
- package/src/domain/scheduled-tasks.ts +1313 -374
- package/src/domain/session-connection-accounts.ts +239 -0
- package/src/domain/session-file-access.ts +47 -0
- package/src/domain/session-native-connection-replacement.ts +64 -0
- package/src/domain/session-start-timing.ts +60 -0
- package/src/domain/session-tool-policy.ts +489 -14
- package/src/domain/sessions.ts +2254 -717
- package/src/domain/site-audience.ts +130 -0
- package/src/domain/skills.ts +9 -0
- package/src/domain/slack-bot.ts +141 -4
- package/src/domain/slack-publication-secret-safety.ts +1 -1
- package/src/domain/vaults/index.ts +19 -0
- package/src/domain/vaults/mapping.ts +190 -0
- package/src/domain/vaults/provider-registry.ts +201 -0
- package/src/domain/vaults/provider-sync.ts +531 -0
- package/src/domain/vaults/provider-writes.ts +288 -0
- package/src/domain/vaults/secret-resolver.ts +464 -0
- package/src/domain/vaults/types.ts +26 -0
- package/src/domain/vaults/vault-service.ts +1316 -0
- package/src/domain/voice-input-billing.ts +330 -0
- package/src/domain/web-search-billing.ts +169 -0
- package/src/domain/workspace-credits.ts +13 -0
- package/src/editable-artifact-live/application.ts +8 -1
- package/src/editable-artifact-live/server.ts +154 -6
- package/src/editable-artifact-live/ticket.ts +86 -1
- package/src/editable-artifact-live/types.ts +10 -0
- package/src/goal-admission.ts +220 -0
- package/src/host-session-usage-limit.ts +25 -0
- package/src/index.ts +75 -11
- package/src/managed-session.ts +137 -6
- package/src/model-call.ts +79 -0
- package/src/model-catalog.ts +345 -91
- package/src/model-provider-credentials.ts +394 -0
- package/src/product-usage-metrics.ts +101 -0
- package/src/rigs/index.ts +23 -111
- package/src/sandbox/fleet.ts +253 -28
- package/src/sandbox/routing.ts +204 -43
- package/src/sandbox/runtime-settings.ts +159 -85
- package/src/session-authorization.ts +172 -23
- package/src/session-usage-limit-metrics.ts +95 -0
- package/src/session-usage-limits.ts +415 -0
- package/src/site-agent-clamp.ts +226 -0
- package/src/site-session-origin.ts +84 -5
- package/src/transcription.ts +123 -4
- package/src/turn-surface.ts +47 -0
- package/src/user-presence.ts +134 -0
- package/src/workflow-wake-contract.ts +14 -1
- package/dist/application/host-mcp-owner.d.ts +0 -6
- package/dist/application/host-mcp-resolvers.d.ts +0 -13
- package/dist/chunk-5WZYFL45.js +0 -266
- package/dist/chunk-5WZYFL45.js.map +0 -1
- package/dist/chunk-H7X52RI2.js.map +0 -1
- package/dist/chunk-OF65T3PM.js.map +0 -1
- package/dist/chunk-VCZFFEPB.js.map +0 -1
- package/dist/chunk-ZYCNLYGH.js.map +0 -1
- package/dist/domain/connection-authority.d.ts +0 -97
- package/dist/domain/connection-authority.js +0 -169
- package/dist/domain/connection-authority.js.map +0 -1
- package/dist/domain/environments.d.ts +0 -33
- package/dist/domain/host-mcp-authority-source-admission.d.ts +0 -10
- package/dist/domain/host-mcp-task-admission.d.ts +0 -18
- package/dist/domain/packs.d.ts +0 -59
- package/dist/domain/product-integration-pack.d.ts +0 -44
- package/dist/domain/product-integration-skill.gen.d.ts +0 -5
- package/dist/remote-mcp-credentials.d.ts +0 -23
- package/dist/remote-mcp-credentials.js +0 -11
- package/dist/remote-mcp-credentials.js.map +0 -1
- package/src/application/host-mcp-owner.ts +0 -41
- package/src/application/host-mcp-resolvers.ts +0 -84
- package/src/domain/connection-authority.ts +0 -329
- package/src/domain/environments.ts +0 -120
- package/src/domain/host-mcp-authority-source-admission.ts +0 -25
- package/src/domain/host-mcp-task-admission.ts +0 -121
- package/src/domain/packs.ts +0 -699
- package/src/domain/product-integration-pack.ts +0 -42
- package/src/domain/product-integration-skill.gen.ts +0 -52
- package/src/remote-mcp-credentials.ts +0 -361
package/src/rigs/index.ts
CHANGED
|
@@ -11,7 +11,6 @@ import type {
|
|
|
11
11
|
ProposeRigChangeRequest,
|
|
12
12
|
Rig,
|
|
13
13
|
RigChange,
|
|
14
|
-
ResourceAuthorityScope,
|
|
15
14
|
RigVersion,
|
|
16
15
|
UpdateRigRequest,
|
|
17
16
|
} from "@opengeni/contracts";
|
|
@@ -26,7 +25,6 @@ import {
|
|
|
26
25
|
getRigByName,
|
|
27
26
|
getRigChange,
|
|
28
27
|
getRigVersion,
|
|
29
|
-
getVariableSet,
|
|
30
28
|
listRigChanges,
|
|
31
29
|
listRigVersions,
|
|
32
30
|
recordAuditEvent,
|
|
@@ -37,8 +35,7 @@ import {
|
|
|
37
35
|
type Database,
|
|
38
36
|
} from "@opengeni/db";
|
|
39
37
|
import { HTTPException } from "hono/http-exception";
|
|
40
|
-
import {
|
|
41
|
-
import { requirePermission } from "../access";
|
|
38
|
+
import { variableSetsRemovedError } from "../domain/encryption-key";
|
|
42
39
|
import { rigProviderImagesFromVerification } from "./provider-images";
|
|
43
40
|
|
|
44
41
|
export * from "./provider-images";
|
|
@@ -46,34 +43,9 @@ export * from "./provider-images";
|
|
|
46
43
|
export const MAX_RIGS_PER_WORKSPACE = 50;
|
|
47
44
|
export const MAX_CHECKS_PER_RIG = 100;
|
|
48
45
|
export const MAX_CREDENTIAL_HOOKS_PER_RIG = 50;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
type VariableSetEnvironment = { values: Record<string, string> } | null;
|
|
53
|
-
|
|
54
|
-
/** Load complete rig defaults concurrently while preserving listed precedence. */
|
|
55
|
-
export async function loadRigDefaultVariableSetEnvironment(
|
|
56
|
-
variableSetIds: readonly string[],
|
|
57
|
-
load: (variableSetId: string) => Promise<VariableSetEnvironment>,
|
|
58
|
-
): Promise<Record<string, string>> {
|
|
59
|
-
const variableSets = await boundedParallelMap(
|
|
60
|
-
variableSetIds,
|
|
61
|
-
RIG_DEFAULT_VARIABLE_SET_LOAD_CONCURRENCY,
|
|
62
|
-
load,
|
|
63
|
-
);
|
|
64
|
-
const values: Record<string, string> = {};
|
|
65
|
-
for (const variableSet of variableSets) {
|
|
66
|
-
Object.assign(values, variableSet?.values ?? {});
|
|
67
|
-
}
|
|
68
|
-
return values;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** Rig defaults layer below the session's explicitly selected variable set. */
|
|
72
|
-
export function mergeRigDefaultVariableSetEnvironment(
|
|
73
|
-
rigDefaultValues: Record<string, string>,
|
|
74
|
-
sessionValues: Record<string, string>,
|
|
75
|
-
): Record<string, string> {
|
|
76
|
-
return { ...rigDefaultValues, ...sessionValues };
|
|
46
|
+
/** Rig default Variable Sets were removed with Variable Sets (RM-1). */
|
|
47
|
+
function assertNoDefaultVariableSets(ids: ReadonlyArray<string> | null | undefined): void {
|
|
48
|
+
if (ids?.length) throw variableSetsRemovedError("defaultVariableSetIds");
|
|
77
49
|
}
|
|
78
50
|
|
|
79
51
|
export type RigServices = {
|
|
@@ -128,7 +100,7 @@ export async function requireRigForApi(
|
|
|
128
100
|
): Promise<Rig> {
|
|
129
101
|
const rig = await getRig(db, grant, rigId);
|
|
130
102
|
if (!rig) {
|
|
131
|
-
throw new HTTPException(404, { message: "
|
|
103
|
+
throw new HTTPException(404, { message: "sandbox environment not found" });
|
|
132
104
|
}
|
|
133
105
|
return rig;
|
|
134
106
|
}
|
|
@@ -143,7 +115,7 @@ export async function requireRigChangeForApi(
|
|
|
143
115
|
// RLS + the workspace clause make a cross-workspace id indistinguishable from
|
|
144
116
|
// missing; the rigId clause keeps the change addressable only under its rig.
|
|
145
117
|
if (!change || change.rigId !== rigId) {
|
|
146
|
-
throw new HTTPException(404, { message: "
|
|
118
|
+
throw new HTTPException(404, { message: "sandbox environment change not found" });
|
|
147
119
|
}
|
|
148
120
|
return change;
|
|
149
121
|
}
|
|
@@ -151,7 +123,7 @@ export async function requireRigChangeForApi(
|
|
|
151
123
|
function trimmedRigName(name: string): string {
|
|
152
124
|
const trimmed = name.trim();
|
|
153
125
|
if (!trimmed) {
|
|
154
|
-
throw new HTTPException(422, { message: "
|
|
126
|
+
throw new HTTPException(422, { message: "sandbox environment name is required" });
|
|
155
127
|
}
|
|
156
128
|
return trimmed;
|
|
157
129
|
}
|
|
@@ -165,58 +137,13 @@ function assertUniqueCheckNames(checks: ReadonlyArray<{ name: string }> | undefi
|
|
|
165
137
|
for (const check of checks) {
|
|
166
138
|
if (seen.has(check.name)) {
|
|
167
139
|
throw new HTTPException(422, {
|
|
168
|
-
message: `duplicate
|
|
140
|
+
message: `duplicate sandbox environment check name: ${check.name}`,
|
|
169
141
|
});
|
|
170
142
|
}
|
|
171
143
|
seen.add(check.name);
|
|
172
144
|
}
|
|
173
145
|
}
|
|
174
146
|
|
|
175
|
-
// Every referenced default variable set must exist in the workspace. RLS makes a
|
|
176
|
-
// cross-workspace id indistinguishable from a missing one, so both map to 422.
|
|
177
|
-
async function assertVariableSetsExist(
|
|
178
|
-
db: Database,
|
|
179
|
-
access: AccessGrant,
|
|
180
|
-
rigScope: ResourceAuthorityScope,
|
|
181
|
-
ids: ReadonlyArray<string> | undefined,
|
|
182
|
-
): Promise<void> {
|
|
183
|
-
if (ids === undefined) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
requirePermission(access, "variable-sets:attach");
|
|
187
|
-
if (ids.length === 0) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
requirePermission(access, "variable-sets:use");
|
|
191
|
-
const unique = [...new Set(ids)];
|
|
192
|
-
for (const id of unique) {
|
|
193
|
-
const variableSet = await getVariableSet(db, access, id);
|
|
194
|
-
if (!variableSet) {
|
|
195
|
-
throw new HTTPException(422, {
|
|
196
|
-
message: `unknown defaultVariableSetId: ${id}`,
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
if (!variableSetScopeAllowedForRig(rigScope, variableSet.scope)) {
|
|
200
|
-
throw new HTTPException(422, {
|
|
201
|
-
message: `${rigScope}-scoped rigs cannot use ${variableSet.scope}-scoped variable sets`,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** A resource may depend only on Variable Sets whose audience is no narrower
|
|
208
|
-
* than its own. User-owned rigs may use anything visible to their owner. */
|
|
209
|
-
export function variableSetScopeAllowedForRig(
|
|
210
|
-
rigScope: ResourceAuthorityScope,
|
|
211
|
-
variableSetScope: ResourceAuthorityScope,
|
|
212
|
-
): boolean {
|
|
213
|
-
return (
|
|
214
|
-
rigScope === "user" ||
|
|
215
|
-
variableSetScope === "organization" ||
|
|
216
|
-
(rigScope === "workspace" && variableSetScope === "workspace")
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
147
|
export async function createRigForApi(
|
|
221
148
|
deps: RigServices,
|
|
222
149
|
grant: AccessGrant,
|
|
@@ -225,20 +152,15 @@ export async function createRigForApi(
|
|
|
225
152
|
): Promise<Rig> {
|
|
226
153
|
const name = trimmedRigName(payload.name);
|
|
227
154
|
assertUniqueCheckNames(payload.checks);
|
|
228
|
-
|
|
229
|
-
deps.db,
|
|
230
|
-
grant,
|
|
231
|
-
payload.scope,
|
|
232
|
-
payload.defaultVariableSetIds.length > 0 ? payload.defaultVariableSetIds : undefined,
|
|
233
|
-
);
|
|
155
|
+
assertNoDefaultVariableSets(payload.defaultVariableSetIds);
|
|
234
156
|
if ((await countRigs(deps.db, grant, payload.scope)) >= MAX_RIGS_PER_WORKSPACE) {
|
|
235
157
|
throw new HTTPException(422, {
|
|
236
|
-
message: `a workspace supports at most ${MAX_RIGS_PER_WORKSPACE}
|
|
158
|
+
message: `a workspace supports at most ${MAX_RIGS_PER_WORKSPACE} sandbox environments`,
|
|
237
159
|
});
|
|
238
160
|
}
|
|
239
161
|
if (await getRigByName(deps.db, grant, name, payload.scope)) {
|
|
240
162
|
throw new HTTPException(409, {
|
|
241
|
-
message: `
|
|
163
|
+
message: `sandbox environment name is already in use: ${name}`,
|
|
242
164
|
});
|
|
243
165
|
}
|
|
244
166
|
const createdBy = rigActorForGrant(grant);
|
|
@@ -281,7 +203,7 @@ export async function updateRigForApi(
|
|
|
281
203
|
const existing = await getRigByName(deps.db, grant, name, rig.scope);
|
|
282
204
|
if (existing && existing.id !== rig.id) {
|
|
283
205
|
throw new HTTPException(409, {
|
|
284
|
-
message: `
|
|
206
|
+
message: `sandbox environment name is already in use: ${name}`,
|
|
285
207
|
});
|
|
286
208
|
}
|
|
287
209
|
}
|
|
@@ -339,17 +261,12 @@ export async function proposeRigChangeForApi(
|
|
|
339
261
|
const workspaceId = rig.workspaceId;
|
|
340
262
|
if (!rig.activeVersion) {
|
|
341
263
|
throw new HTTPException(422, {
|
|
342
|
-
message: "
|
|
264
|
+
message: "sandbox environment has no active version to base a change on",
|
|
343
265
|
});
|
|
344
266
|
}
|
|
345
267
|
if (request.kind === "definition_edit") {
|
|
346
268
|
assertUniqueCheckNames(request.payload.checks);
|
|
347
|
-
|
|
348
|
-
deps.db,
|
|
349
|
-
grant,
|
|
350
|
-
rig.scope,
|
|
351
|
-
request.payload.defaultVariableSetIds ?? undefined,
|
|
352
|
-
);
|
|
269
|
+
assertNoDefaultVariableSets(request.payload.defaultVariableSetIds);
|
|
353
270
|
}
|
|
354
271
|
const change = await createRigChange(deps.db, {
|
|
355
272
|
accountId: grant.accountId,
|
|
@@ -412,7 +329,7 @@ async function promoteChangeWithActiveCas(
|
|
|
412
329
|
} catch (error) {
|
|
413
330
|
if (error instanceof RigActiveVersionChangedError) {
|
|
414
331
|
throw new HTTPException(409, {
|
|
415
|
-
message: `
|
|
332
|
+
message: `sandbox environment moved since this change was verified (base ${error.expectedVersionId}, now ${error.actualVersionId ?? "none"}); re-verify before promoting`,
|
|
416
333
|
});
|
|
417
334
|
}
|
|
418
335
|
if (error instanceof RigChangeTransitionError) {
|
|
@@ -435,15 +352,15 @@ export async function promoteSetupAppendChange(
|
|
|
435
352
|
}
|
|
436
353
|
if (change.status !== "proposed" && change.status !== "verifying") {
|
|
437
354
|
throw new HTTPException(409, {
|
|
438
|
-
message: `
|
|
355
|
+
message: `sandbox environment change is ${change.status}; cannot promote`,
|
|
439
356
|
});
|
|
440
357
|
}
|
|
441
358
|
if (!change.baseVersionId) {
|
|
442
|
-
throw new HTTPException(422, { message: "
|
|
359
|
+
throw new HTTPException(422, { message: "sandbox environment change has no base version" });
|
|
443
360
|
}
|
|
444
361
|
const base = await getRigVersion(deps.db, rig.workspaceId, rig.id, change.baseVersionId);
|
|
445
362
|
if (!base) {
|
|
446
|
-
throw new HTTPException(404, { message: "base
|
|
363
|
+
throw new HTTPException(404, { message: "base sandbox environment version not found" });
|
|
447
364
|
}
|
|
448
365
|
const payload = change.payload as { command?: unknown; note?: unknown };
|
|
449
366
|
if (typeof payload.command !== "string" || !payload.command.trim()) {
|
|
@@ -510,7 +427,7 @@ export async function promoteVerifiedDefinitionEditChangeForApi(
|
|
|
510
427
|
}
|
|
511
428
|
if (change.status !== "proposed") {
|
|
512
429
|
throw new HTTPException(409, {
|
|
513
|
-
message: `
|
|
430
|
+
message: `sandbox environment change is ${change.status}; cannot promote`,
|
|
514
431
|
});
|
|
515
432
|
}
|
|
516
433
|
if (change.verification?.passed !== true) {
|
|
@@ -519,11 +436,11 @@ export async function promoteVerifiedDefinitionEditChangeForApi(
|
|
|
519
436
|
});
|
|
520
437
|
}
|
|
521
438
|
if (!change.baseVersionId) {
|
|
522
|
-
throw new HTTPException(422, { message: "
|
|
439
|
+
throw new HTTPException(422, { message: "sandbox environment change has no base version" });
|
|
523
440
|
}
|
|
524
441
|
const base = await getRigVersion(deps.db, rig.workspaceId, rig.id, change.baseVersionId);
|
|
525
442
|
if (!base) {
|
|
526
|
-
throw new HTTPException(404, { message: "base
|
|
443
|
+
throw new HTTPException(404, { message: "base sandbox environment version not found" });
|
|
527
444
|
}
|
|
528
445
|
const payload = change.payload as {
|
|
529
446
|
setupScript?: unknown;
|
|
@@ -590,15 +507,10 @@ export async function createRigVersionForApi(
|
|
|
590
507
|
payload: RigDefinitionEditPayload,
|
|
591
508
|
): Promise<RigVersion> {
|
|
592
509
|
if (!rig.activeVersion) {
|
|
593
|
-
throw new HTTPException(422, { message: "
|
|
510
|
+
throw new HTTPException(422, { message: "sandbox environment has no active version" });
|
|
594
511
|
}
|
|
595
512
|
assertUniqueCheckNames(payload.checks);
|
|
596
|
-
|
|
597
|
-
deps.db,
|
|
598
|
-
grant,
|
|
599
|
-
rig.scope,
|
|
600
|
-
payload.defaultVariableSetIds ?? undefined,
|
|
601
|
-
);
|
|
513
|
+
assertNoDefaultVariableSets(payload.defaultVariableSetIds);
|
|
602
514
|
const base = rig.activeVersion;
|
|
603
515
|
const version = await createRigVersion(
|
|
604
516
|
deps.db,
|