@opengeni/api-router 3.1.3-canary.38890816741001 → 3.2.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/app.js +1 -1
- package/dist/{chunk-OT56OY4V.js → chunk-PQBHZ2YH.js} +1090 -68
- package/dist/{chunk-OT56OY4V.js.map → chunk-PQBHZ2YH.js.map} +1 -1
- package/dist/index.js +49 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/external-vault-providers.d.ts +29 -0
- package/dist/interaction-secrets-vault.d.ts +2 -2
- package/dist/mcp/action-descriptions.d.ts +1 -1
- package/dist/routes/vault-providers.d.ts +4 -2
- package/dist/shutdown.d.ts +14 -0
- package/dist/workspace-tool-gateway-secrets.d.ts +1 -1
- package/package.json +25 -22
- package/src/app.ts +14 -2
- package/src/index.ts +13 -1
- package/src/integrations/external-vault-providers.ts +136 -0
- package/src/interaction-secrets-vault.ts +6 -2
- package/src/mcp/action-catalog.gen.ts +253 -4
- package/src/mcp/action-descriptions.ts +32 -2
- package/src/mcp/action-schema-imports.gen.ts +3 -1
- package/src/routes/connections.ts +17 -0
- package/src/routes/vault-providers.ts +788 -29
- package/src/routes/vaults.ts +5 -1
- package/src/shutdown.ts +54 -0
- package/src/workspace-tool-gateway-secrets.ts +9 -2
- package/src/workspace-tool-gateway.ts +6 -2
|
@@ -13789,7 +13789,90 @@ function registerSessionHistoryImportRoutes(app, deps) {
|
|
|
13789
13789
|
}
|
|
13790
13790
|
|
|
13791
13791
|
// src/routes/vault-providers.ts
|
|
13792
|
+
import { isDeepStrictEqual } from "util";
|
|
13792
13793
|
import { HTTPException as HTTPException20 } from "hono/http-exception";
|
|
13794
|
+
|
|
13795
|
+
// src/integrations/external-vault-providers.ts
|
|
13796
|
+
import { pinnedFetch } from "@opengeni/network";
|
|
13797
|
+
import { VaultProviderError } from "@opengeni/vaults";
|
|
13798
|
+
function createNativeExternalVaultFactories(settings, options = {}) {
|
|
13799
|
+
const factories = {
|
|
13800
|
+
keeper: keeperFactory(settings, options.keeper ?? {})
|
|
13801
|
+
};
|
|
13802
|
+
const cliPath = settings.protonPassCliPath;
|
|
13803
|
+
if (cliPath) factories.protonpass = protonPassFactory(cliPath, options.protonpass ?? {});
|
|
13804
|
+
return factories;
|
|
13805
|
+
}
|
|
13806
|
+
async function closeNativeExternalVaultProviders() {
|
|
13807
|
+
const pools = [...protonPools.values()];
|
|
13808
|
+
protonPools.clear();
|
|
13809
|
+
await Promise.all(pools.map(async (pool) => (await pool.catch(() => null))?.close()));
|
|
13810
|
+
}
|
|
13811
|
+
function mismatch() {
|
|
13812
|
+
throw new VaultProviderError(
|
|
13813
|
+
"provider_unavailable",
|
|
13814
|
+
"The configured adapter does not match this connection."
|
|
13815
|
+
);
|
|
13816
|
+
}
|
|
13817
|
+
function nativeKeeperFetch(settings, pinned = {}) {
|
|
13818
|
+
return (input, init) => pinnedFetch(input, init, settings, {
|
|
13819
|
+
...pinned,
|
|
13820
|
+
label: "Keeper Secrets Manager",
|
|
13821
|
+
requireHttpsOutsideLocalTest: true
|
|
13822
|
+
});
|
|
13823
|
+
}
|
|
13824
|
+
function keeperFactory(settings, seams) {
|
|
13825
|
+
const fetch2 = nativeKeeperFetch(settings);
|
|
13826
|
+
return async (input) => {
|
|
13827
|
+
const credentials = input.credentials;
|
|
13828
|
+
if (credentials.provider !== "keeper") mismatch();
|
|
13829
|
+
const persist = input.persistCredentials;
|
|
13830
|
+
const { openKeeperConnection } = await import("@opengeni/vaults-keeper");
|
|
13831
|
+
const opened = await openKeeperConnection({
|
|
13832
|
+
credentials: "oneTimeToken" in credentials ? {
|
|
13833
|
+
oneTimeToken: credentials.oneTimeToken,
|
|
13834
|
+
...credentials.hostname ? { hostname: credentials.hostname } : {}
|
|
13835
|
+
} : { configuration: credentials.configuration },
|
|
13836
|
+
// Without it openKeeperConnection refuses: a redeemed token or rotated
|
|
13837
|
+
// key must never live only in memory.
|
|
13838
|
+
...persist ? {
|
|
13839
|
+
persistConfiguration: (configuration) => persist({ provider: "keeper", configuration })
|
|
13840
|
+
} : {},
|
|
13841
|
+
...input.operations ? { operations: input.operations } : {},
|
|
13842
|
+
// Cancels a pending bootstrap; a stored configuration opens without a request.
|
|
13843
|
+
...input.signal ? { signal: input.signal } : {},
|
|
13844
|
+
fetch: fetch2,
|
|
13845
|
+
...seams
|
|
13846
|
+
});
|
|
13847
|
+
const stored = {
|
|
13848
|
+
provider: "keeper",
|
|
13849
|
+
configuration: opened.configuration
|
|
13850
|
+
};
|
|
13851
|
+
return { provider: opened.provider, credentials: stored };
|
|
13852
|
+
};
|
|
13853
|
+
}
|
|
13854
|
+
var protonPools = /* @__PURE__ */ new Map();
|
|
13855
|
+
function protonPassFactory(binaryPath, seams) {
|
|
13856
|
+
return async (input) => {
|
|
13857
|
+
const credentials = input.credentials;
|
|
13858
|
+
if (credentials.provider !== "protonpass") mismatch();
|
|
13859
|
+
let pool = protonPools.get(binaryPath);
|
|
13860
|
+
if (!pool) {
|
|
13861
|
+
pool = import("@opengeni/vaults-protonpass").then(
|
|
13862
|
+
({ createProtonPassProviderPool }) => createProtonPassProviderPool({ ...seams, binaryPath })
|
|
13863
|
+
);
|
|
13864
|
+
protonPools.set(binaryPath, pool);
|
|
13865
|
+
pool.catch(() => protonPools.delete(binaryPath));
|
|
13866
|
+
}
|
|
13867
|
+
const provider = (await pool).provider(credentials.token, {
|
|
13868
|
+
...input.connectionId === void 0 ? {} : { connectionId: input.connectionId },
|
|
13869
|
+
...input.operations ? { operations: input.operations } : {}
|
|
13870
|
+
});
|
|
13871
|
+
return { provider, credentials: { provider: "protonpass", token: credentials.token } };
|
|
13872
|
+
};
|
|
13873
|
+
}
|
|
13874
|
+
|
|
13875
|
+
// src/routes/vault-providers.ts
|
|
13793
13876
|
import {
|
|
13794
13877
|
CreateManagedProviderVaultRequest,
|
|
13795
13878
|
DisconnectOnePasswordResponse,
|
|
@@ -13800,15 +13883,22 @@ import {
|
|
|
13800
13883
|
OnePasswordConnectionSummary,
|
|
13801
13884
|
ProviderVaultMeta,
|
|
13802
13885
|
ReplaceOnePasswordTokenRequest,
|
|
13886
|
+
InstallVaultProviderRequest,
|
|
13887
|
+
InstallVaultProviderResponse,
|
|
13888
|
+
ListVaultProviderConnectionsResponse,
|
|
13889
|
+
ReplaceVaultProviderCredentialsRequest,
|
|
13890
|
+
DisconnectVaultProviderResponse,
|
|
13803
13891
|
VAULT_ERROR_HTTP_STATUS
|
|
13804
13892
|
} from "@opengeni/contracts";
|
|
13805
13893
|
import {
|
|
13806
13894
|
ONEPASSWORD_CREDENTIAL_ROLE,
|
|
13807
13895
|
ONEPASSWORD_PROVIDER_DOMAIN,
|
|
13808
13896
|
createWorkspaceVaultProviderRegistry,
|
|
13897
|
+
createRemoteExternalVaultFactories,
|
|
13809
13898
|
externalActorContinuationForAuthorization as externalActorContinuationForAuthorization4,
|
|
13810
13899
|
hasPermission as hasPermission6,
|
|
13811
13900
|
isVaultError,
|
|
13901
|
+
VaultError,
|
|
13812
13902
|
providerSecretName,
|
|
13813
13903
|
requirePermission as requirePermission2,
|
|
13814
13904
|
syncLinkedProviderVault,
|
|
@@ -13820,7 +13910,15 @@ import {
|
|
|
13820
13910
|
onePasswordConnectionMetadata,
|
|
13821
13911
|
requireAccessGrantAuthorization as requireAccessGrantAuthorization4,
|
|
13822
13912
|
requireEnvironmentEncryption as requireEnvironmentEncryption3,
|
|
13823
|
-
vaultErrorCodeForProvider
|
|
13913
|
+
vaultErrorCodeForProvider,
|
|
13914
|
+
externalVaultConnectionDetails,
|
|
13915
|
+
externalVaultConnectionMetadata,
|
|
13916
|
+
externalVaultProviderDomain,
|
|
13917
|
+
externalVaultProviderForConnection,
|
|
13918
|
+
isExternalVaultConnection,
|
|
13919
|
+
StoredVaultProviderCredentials,
|
|
13920
|
+
loadExternalVaultConnection,
|
|
13921
|
+
pendingVaultCredentialBundle
|
|
13824
13922
|
} from "@opengeni/core";
|
|
13825
13923
|
import {
|
|
13826
13924
|
createConnection,
|
|
@@ -13829,6 +13927,7 @@ import {
|
|
|
13829
13927
|
getConnectionMetadata,
|
|
13830
13928
|
getVault,
|
|
13831
13929
|
linkProviderVault,
|
|
13930
|
+
preflightProviderVaultLink,
|
|
13832
13931
|
listConnectionsMetadata,
|
|
13833
13932
|
listVaultsForSubject,
|
|
13834
13933
|
revokeConnection,
|
|
@@ -13836,7 +13935,10 @@ import {
|
|
|
13836
13935
|
} from "@opengeni/db";
|
|
13837
13936
|
import {
|
|
13838
13937
|
isVaultProviderError,
|
|
13839
|
-
VaultProviderError
|
|
13938
|
+
VaultProviderError as VaultProviderError2,
|
|
13939
|
+
createProviderCallBudget,
|
|
13940
|
+
listProviderVaults,
|
|
13941
|
+
providerOperations
|
|
13840
13942
|
} from "@opengeni/vaults";
|
|
13841
13943
|
|
|
13842
13944
|
// src/connection-ownership.ts
|
|
@@ -14059,8 +14161,54 @@ function vaultProviderRegistryFor(deps, input) {
|
|
|
14059
14161
|
workspaceId: input.workspaceId,
|
|
14060
14162
|
subjectId: input.subjectId,
|
|
14061
14163
|
hostVaultProvider: deps.connectionCredentials?.vaultProvider ?? null,
|
|
14062
|
-
onePasswordVaultProvider: deps.onePasswordVaultProvider === null ? null : onePasswordFactoryFor(deps)
|
|
14063
|
-
|
|
14164
|
+
onePasswordVaultProvider: deps.onePasswordVaultProvider === null ? null : onePasswordFactoryFor(deps),
|
|
14165
|
+
externalVaultProviders: externalVaultFactoriesFor(deps),
|
|
14166
|
+
...input.executionContext ? { executionContext: input.executionContext } : {}
|
|
14167
|
+
});
|
|
14168
|
+
}
|
|
14169
|
+
var defaultExternalVaultFactories = /* @__PURE__ */ new WeakMap();
|
|
14170
|
+
function externalVaultFactoriesFor(deps) {
|
|
14171
|
+
if (deps.externalVaultProviders !== void 0) return deps.externalVaultProviders ?? {};
|
|
14172
|
+
let factories = defaultExternalVaultFactories.get(deps);
|
|
14173
|
+
if (!factories) {
|
|
14174
|
+
factories = {
|
|
14175
|
+
...createRemoteExternalVaultFactories(deps.settings),
|
|
14176
|
+
...createNativeExternalVaultFactories(deps.settings)
|
|
14177
|
+
};
|
|
14178
|
+
defaultExternalVaultFactories.set(deps, factories);
|
|
14179
|
+
}
|
|
14180
|
+
return factories;
|
|
14181
|
+
}
|
|
14182
|
+
async function providerForConnection(deps, input) {
|
|
14183
|
+
const connection = await getConnectionMetadata(
|
|
14184
|
+
deps.db,
|
|
14185
|
+
input.workspaceId,
|
|
14186
|
+
input.connectionId,
|
|
14187
|
+
input.subjectId
|
|
14188
|
+
);
|
|
14189
|
+
if (connection && isOnePasswordConnection(connection)) {
|
|
14190
|
+
return { ...await onePasswordProviderForConnection(deps, input), source: "onepassword" };
|
|
14191
|
+
}
|
|
14192
|
+
if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked") {
|
|
14193
|
+
throw new HTTPException20(404, { message: "Vault connection not found" });
|
|
14194
|
+
}
|
|
14195
|
+
const details = externalVaultConnectionDetails(connection.metadata);
|
|
14196
|
+
const factory = externalVaultFactoriesFor(deps)[details.provider];
|
|
14197
|
+
if (!factory)
|
|
14198
|
+
throw new VaultProviderError2(
|
|
14199
|
+
"provider_unavailable",
|
|
14200
|
+
"This vault provider is not available in this deployment."
|
|
14201
|
+
);
|
|
14202
|
+
return {
|
|
14203
|
+
source: details.provider,
|
|
14204
|
+
provider: await externalVaultProviderForConnection({
|
|
14205
|
+
...input,
|
|
14206
|
+
db: deps.db,
|
|
14207
|
+
settings: deps.settings,
|
|
14208
|
+
provider: details.provider,
|
|
14209
|
+
factory
|
|
14210
|
+
})
|
|
14211
|
+
};
|
|
14064
14212
|
}
|
|
14065
14213
|
function vaultContextFor(authorization, workspaceId) {
|
|
14066
14214
|
return {
|
|
@@ -14132,7 +14280,7 @@ function vaultRouteError(c, error, write = false) {
|
|
|
14132
14280
|
function findProviderVault(vaults, externalVaultId) {
|
|
14133
14281
|
const found = vaults.find((vault) => vault.externalVaultId === externalVaultId);
|
|
14134
14282
|
if (!found) {
|
|
14135
|
-
throw new
|
|
14283
|
+
throw new VaultProviderError2(
|
|
14136
14284
|
"provider_not_found",
|
|
14137
14285
|
"that vault does not exist or is not shared with this connection"
|
|
14138
14286
|
);
|
|
@@ -14145,7 +14293,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14145
14293
|
const rows3 = await listVaultsForSubject(db, context, { workspaceId });
|
|
14146
14294
|
return new Map(
|
|
14147
14295
|
rows3.filter(
|
|
14148
|
-
(row) => row.source
|
|
14296
|
+
(row) => row.source !== "opengeni" && row.providerConnectionId === connectionId && row.providerVaultRef
|
|
14149
14297
|
).map((row) => [row.providerVaultRef, row.id])
|
|
14150
14298
|
);
|
|
14151
14299
|
});
|
|
@@ -14181,7 +14329,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14181
14329
|
planTier: payload.planTier,
|
|
14182
14330
|
allowFakeTokens: settings.onePasswordFakeTokens
|
|
14183
14331
|
});
|
|
14184
|
-
vaults = await provider
|
|
14332
|
+
vaults = await listProviderVaults(provider, routeProviderContext(null));
|
|
14185
14333
|
} catch (error) {
|
|
14186
14334
|
return providerErrorResponse(c, error);
|
|
14187
14335
|
}
|
|
@@ -14244,13 +14392,13 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14244
14392
|
);
|
|
14245
14393
|
const { grant } = authorization;
|
|
14246
14394
|
try {
|
|
14247
|
-
const { provider } = await
|
|
14395
|
+
const { provider } = await providerForConnection(deps, {
|
|
14248
14396
|
workspaceId,
|
|
14249
14397
|
connectionId,
|
|
14250
14398
|
subjectId: grant.subjectId
|
|
14251
14399
|
});
|
|
14252
14400
|
const [vaults, linked] = await Promise.all([
|
|
14253
|
-
provider
|
|
14401
|
+
listProviderVaults(provider, routeProviderContext(connectionId)),
|
|
14254
14402
|
linkedVaults({
|
|
14255
14403
|
workspaceId,
|
|
14256
14404
|
connectionId,
|
|
@@ -14263,7 +14411,9 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14263
14411
|
externalVaultId: vault.externalVaultId,
|
|
14264
14412
|
name: vault.name,
|
|
14265
14413
|
itemCount: vault.itemCount,
|
|
14266
|
-
linkedVaultId: linked.get(vault.externalVaultId) ?? null
|
|
14414
|
+
linkedVaultId: linked.get(vault.externalVaultId) ?? null,
|
|
14415
|
+
writeAccess: vault.writeAccess ?? "unknown",
|
|
14416
|
+
operations: providerOperations(provider.capabilities(), vault)
|
|
14267
14417
|
})
|
|
14268
14418
|
)
|
|
14269
14419
|
});
|
|
@@ -14282,33 +14432,38 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14282
14432
|
const context = vaultContextFor(authorization, workspaceId);
|
|
14283
14433
|
try {
|
|
14284
14434
|
let provider;
|
|
14285
|
-
if (payload.provider
|
|
14435
|
+
if (payload.provider !== "host") {
|
|
14286
14436
|
if (!payload.connectionId) {
|
|
14287
|
-
throw new HTTPException20(422, {
|
|
14437
|
+
throw new HTTPException20(422, {
|
|
14438
|
+
message: "connectionId is required for a connected provider"
|
|
14439
|
+
});
|
|
14288
14440
|
}
|
|
14289
|
-
|
|
14441
|
+
const resolved = await providerForConnection(deps, {
|
|
14290
14442
|
workspaceId,
|
|
14291
14443
|
connectionId: payload.connectionId,
|
|
14292
14444
|
subjectId: authorization.grant.subjectId
|
|
14293
|
-
})
|
|
14445
|
+
});
|
|
14446
|
+
if (resolved.source !== payload.provider)
|
|
14447
|
+
throw new HTTPException20(422, { message: "Connection provider does not match" });
|
|
14448
|
+
provider = resolved.provider;
|
|
14294
14449
|
} else {
|
|
14295
14450
|
const host = deps.connectionCredentials?.vaultProvider;
|
|
14296
14451
|
if (!host) {
|
|
14297
|
-
throw new
|
|
14452
|
+
throw new VaultProviderError2(
|
|
14298
14453
|
"provider_unavailable",
|
|
14299
14454
|
"this deployment has no host vault provider"
|
|
14300
14455
|
);
|
|
14301
14456
|
}
|
|
14302
14457
|
provider = host;
|
|
14303
14458
|
}
|
|
14304
|
-
const connectionId = payload.provider
|
|
14459
|
+
const connectionId = payload.provider !== "host" ? payload.connectionId : null;
|
|
14305
14460
|
const providerVault = findProviderVault(
|
|
14306
|
-
await provider
|
|
14461
|
+
await listProviderVaults(provider, routeProviderContext(connectionId)),
|
|
14307
14462
|
payload.externalVaultId
|
|
14308
14463
|
);
|
|
14309
14464
|
const row = await linkProviderVault(db, context, {
|
|
14310
14465
|
ownerKind: payload.ownerKind,
|
|
14311
|
-
name: payload.name ?? providerSecretName(providerVault.name, "
|
|
14466
|
+
name: payload.name ?? providerSecretName(providerVault.name, "Connected vault"),
|
|
14312
14467
|
source: payload.provider,
|
|
14313
14468
|
providerConnectionId: connectionId,
|
|
14314
14469
|
providerVaultRef: providerVault.externalVaultId,
|
|
@@ -14344,7 +14499,8 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14344
14499
|
providers: vaultProviderRegistryFor(deps, {
|
|
14345
14500
|
workspaceId,
|
|
14346
14501
|
subjectId: authorization.grant.subjectId
|
|
14347
|
-
})
|
|
14502
|
+
}),
|
|
14503
|
+
force: true
|
|
14348
14504
|
});
|
|
14349
14505
|
const rateLimitedUntil = result2.status === "skipped_rate_limited" || result2.status === "failed" && result2.rateLimitedUntil ? result2.rateLimitedUntil : null;
|
|
14350
14506
|
if (rateLimitedUntil) {
|
|
@@ -14368,45 +14524,100 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14368
14524
|
throw new HTTPException20(403, { message: "missing permission: account:admin" });
|
|
14369
14525
|
}
|
|
14370
14526
|
const context = vaultContextFor(authorization, workspaceId);
|
|
14527
|
+
let created;
|
|
14528
|
+
let linked;
|
|
14529
|
+
let sharingFailure;
|
|
14371
14530
|
try {
|
|
14531
|
+
const { connection, metadata } = await requireOnePasswordConnection(
|
|
14532
|
+
deps,
|
|
14533
|
+
authorization,
|
|
14534
|
+
workspaceId,
|
|
14535
|
+
connectionId
|
|
14536
|
+
);
|
|
14537
|
+
const ownership = connection.subjectId !== null ? "user" : metadata.ownership;
|
|
14538
|
+
if (ownership !== payload.ownerKind || ownership === "user" && connection.subjectId !== authorization.grant.subjectId) {
|
|
14539
|
+
throw new VaultError(
|
|
14540
|
+
"vault_permission_denied",
|
|
14541
|
+
`A ${ownership} 1Password connection backs only ${ownership} vaults`,
|
|
14542
|
+
{ connectionId, connectionOwnership: ownership, ownerKind: payload.ownerKind }
|
|
14543
|
+
);
|
|
14544
|
+
}
|
|
14545
|
+
const link = {
|
|
14546
|
+
ownerKind: payload.ownerKind,
|
|
14547
|
+
name: payload.name,
|
|
14548
|
+
source: "onepassword",
|
|
14549
|
+
providerConnectionId: connectionId,
|
|
14550
|
+
mode: "read_write",
|
|
14551
|
+
allowOrganization: isAccountAdmin(authorization)
|
|
14552
|
+
};
|
|
14553
|
+
await preflightProviderVaultLink(db, context, link);
|
|
14372
14554
|
const { provider } = await onePasswordProviderForConnection(deps, {
|
|
14373
14555
|
workspaceId,
|
|
14374
14556
|
connectionId,
|
|
14375
14557
|
subjectId: authorization.grant.subjectId
|
|
14376
14558
|
});
|
|
14377
14559
|
if (!provider.createVault || !provider.capabilities().createVault) {
|
|
14378
|
-
throw new
|
|
14560
|
+
throw new VaultProviderError2(
|
|
14379
14561
|
"provider_unavailable",
|
|
14380
14562
|
"this 1Password connection cannot create vaults"
|
|
14381
14563
|
);
|
|
14382
14564
|
}
|
|
14383
|
-
const
|
|
14384
|
-
|
|
14385
|
-
|
|
14386
|
-
|
|
14387
|
-
|
|
14388
|
-
|
|
14389
|
-
|
|
14390
|
-
|
|
14391
|
-
|
|
14392
|
-
|
|
14393
|
-
|
|
14394
|
-
|
|
14395
|
-
|
|
14396
|
-
|
|
14565
|
+
const { OnePasswordVaultCreatedError } = await loadOnePasswordModule();
|
|
14566
|
+
try {
|
|
14567
|
+
created = await provider.createVault(routeProviderContext(connectionId), {
|
|
14568
|
+
name: payload.name,
|
|
14569
|
+
description: "Managed by Opengeni",
|
|
14570
|
+
allowAdminsAccess: true,
|
|
14571
|
+
...payload.groupId ? { groupId: payload.groupId } : {}
|
|
14572
|
+
});
|
|
14573
|
+
} catch (error) {
|
|
14574
|
+
if (error instanceof OnePasswordVaultCreatedError) {
|
|
14575
|
+
created = error.createdVault;
|
|
14576
|
+
sharingFailure = error;
|
|
14577
|
+
} else if (isVaultProviderError(error)) {
|
|
14578
|
+
throw error;
|
|
14579
|
+
} else {
|
|
14580
|
+
throw new VaultProviderError2(
|
|
14581
|
+
"provider_outcome_unknown",
|
|
14582
|
+
"1Password did not confirm vault creation; it may have been applied. Check the connection's vault list before creating again."
|
|
14583
|
+
);
|
|
14584
|
+
}
|
|
14585
|
+
}
|
|
14586
|
+
linked = await linkProviderVault(db, context, {
|
|
14587
|
+
...link,
|
|
14588
|
+
providerVaultRef: created.externalVaultId
|
|
14397
14589
|
});
|
|
14398
14590
|
await syncLinkedProviderVault({
|
|
14399
14591
|
db,
|
|
14400
14592
|
context,
|
|
14401
|
-
vaultId:
|
|
14593
|
+
vaultId: linked.id,
|
|
14402
14594
|
providers: vaultProviderRegistryFor(deps, {
|
|
14403
14595
|
workspaceId,
|
|
14404
14596
|
subjectId: authorization.grant.subjectId
|
|
14405
14597
|
}),
|
|
14406
14598
|
force: true
|
|
14407
14599
|
});
|
|
14408
|
-
|
|
14600
|
+
if (sharingFailure) throw sharingFailure;
|
|
14601
|
+
return c.json(await vaultSummaryFor(deps, authorization, workspaceId, linked.id), 201);
|
|
14409
14602
|
} catch (error) {
|
|
14603
|
+
if (created) {
|
|
14604
|
+
const local = isVaultError(error) ? error : vaultErrorFromDatabase(error);
|
|
14605
|
+
const code = local?.code ?? (isVaultProviderError(error) ? vaultErrorCodeForProvider(error.code, "write") : "provider_unavailable");
|
|
14606
|
+
const message = linked ? sharingFailure ? "The vault was created and linked, but its group access could not be confirmed. Check sharing in 1Password. Do not create it again." : "The vault was created and linked, but its refresh could not be confirmed. Refresh the linked vault. Do not create it again." : "The vault was created in 1Password, but its local link could not be confirmed. Use Link on the existing provider vault after resolving the local refusal. Do not create it again.";
|
|
14607
|
+
return vaultRouteError(
|
|
14608
|
+
c,
|
|
14609
|
+
new VaultError(code, message, {
|
|
14610
|
+
created: true,
|
|
14611
|
+
// A lost DB acknowledgement is not proof that the link rolled back.
|
|
14612
|
+
linked: linked ? true : local ? false : null,
|
|
14613
|
+
connectionId,
|
|
14614
|
+
externalVaultId: created.externalVaultId,
|
|
14615
|
+
...linked ? { vaultId: linked.id } : {},
|
|
14616
|
+
...sharingFailure ? { groupGrantConfirmed: false } : {}
|
|
14617
|
+
}),
|
|
14618
|
+
true
|
|
14619
|
+
);
|
|
14620
|
+
}
|
|
14410
14621
|
return vaultRouteError(c, error, true);
|
|
14411
14622
|
}
|
|
14412
14623
|
});
|
|
@@ -14472,7 +14683,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14472
14683
|
planTier,
|
|
14473
14684
|
allowFakeTokens: settings.onePasswordFakeTokens
|
|
14474
14685
|
});
|
|
14475
|
-
vaults = await provider
|
|
14686
|
+
vaults = await listProviderVaults(provider, routeProviderContext(connectionId));
|
|
14476
14687
|
} catch (error) {
|
|
14477
14688
|
return providerErrorResponse(c, error);
|
|
14478
14689
|
}
|
|
@@ -14578,10 +14789,515 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
|
|
|
14578
14789
|
}
|
|
14579
14790
|
return c.json(DisconnectOnePasswordResponse.parse({ unlinkedVaultIds }));
|
|
14580
14791
|
});
|
|
14792
|
+
app.get("/v1/workspaces/:workspaceId/vault-providers/connections", async (c) => {
|
|
14793
|
+
const workspaceId = c.req.param("workspaceId");
|
|
14794
|
+
const authorization = await requireAccessGrantAuthorization4(
|
|
14795
|
+
c,
|
|
14796
|
+
deps,
|
|
14797
|
+
workspaceId,
|
|
14798
|
+
"secrets:list"
|
|
14799
|
+
);
|
|
14800
|
+
const factories = externalVaultFactoriesFor(deps);
|
|
14801
|
+
const rows3 = await listConnectionsMetadata(db, workspaceId, authorization.grant.subjectId);
|
|
14802
|
+
const connections = rows3.filter((row) => row.status !== "revoked").flatMap((row) => {
|
|
14803
|
+
if (isOnePasswordConnection(row)) {
|
|
14804
|
+
return [
|
|
14805
|
+
{
|
|
14806
|
+
...onePasswordConnectionSummary(authorization, row),
|
|
14807
|
+
provider: "onepassword",
|
|
14808
|
+
// The published legacy 1Password port has no granular override.
|
|
14809
|
+
operations: providerOperations({
|
|
14810
|
+
write: true,
|
|
14811
|
+
createVault: true,
|
|
14812
|
+
totp: true,
|
|
14813
|
+
files: false,
|
|
14814
|
+
groupGrants: true,
|
|
14815
|
+
passkeys: false
|
|
14816
|
+
}),
|
|
14817
|
+
available: deps.onePasswordVaultProvider !== null
|
|
14818
|
+
}
|
|
14819
|
+
];
|
|
14820
|
+
}
|
|
14821
|
+
if (!isExternalVaultConnection(row)) return [];
|
|
14822
|
+
const details = externalVaultConnectionDetails(row.metadata);
|
|
14823
|
+
return [
|
|
14824
|
+
{
|
|
14825
|
+
id: row.id,
|
|
14826
|
+
provider: details.provider,
|
|
14827
|
+
ownership: details.ownership,
|
|
14828
|
+
accountName: details.accountName,
|
|
14829
|
+
label: details.label,
|
|
14830
|
+
verifiedAt: details.verifiedAt,
|
|
14831
|
+
createdAt: row.createdAt,
|
|
14832
|
+
createdBySubjectId: row.createdBySubjectId,
|
|
14833
|
+
canManage: canManageExternal(authorization, row, details),
|
|
14834
|
+
operations: details.operations,
|
|
14835
|
+
available: Boolean(factories[details.provider]),
|
|
14836
|
+
verificationStatus: details.verificationStatus ?? "ready"
|
|
14837
|
+
}
|
|
14838
|
+
];
|
|
14839
|
+
});
|
|
14840
|
+
const providers = ["onepassword", "external", "protonpass", "keeper", "bitwarden"].map((provider) => {
|
|
14841
|
+
const available = provider === "onepassword" ? deps.onePasswordVaultProvider !== null : Boolean(factories[provider]);
|
|
14842
|
+
return { provider, available, reason: available ? null : "not_enabled" };
|
|
14843
|
+
});
|
|
14844
|
+
return c.json(ListVaultProviderConnectionsResponse.parse({ connections, providers }));
|
|
14845
|
+
});
|
|
14846
|
+
app.post("/v1/workspaces/:workspaceId/vault-providers/connections", async (c) => {
|
|
14847
|
+
const workspaceId = c.req.param("workspaceId");
|
|
14848
|
+
const authorization = await requireSetupAuthority(c, workspaceId);
|
|
14849
|
+
const { grant } = authorization;
|
|
14850
|
+
const payload = await parseRequestJson(c, InstallVaultProviderRequest);
|
|
14851
|
+
requireOwnership(authorization, payload.ownership);
|
|
14852
|
+
const key2 = requireEnvironmentEncryption3(settings);
|
|
14853
|
+
if (!externalVaultFactoriesFor(deps)[payload.credentials.provider]) {
|
|
14854
|
+
return vaultRouteError(
|
|
14855
|
+
c,
|
|
14856
|
+
new VaultProviderError2(
|
|
14857
|
+
"provider_unavailable",
|
|
14858
|
+
"This vault provider is not available in this deployment."
|
|
14859
|
+
)
|
|
14860
|
+
);
|
|
14861
|
+
}
|
|
14862
|
+
const details = {
|
|
14863
|
+
version: 1,
|
|
14864
|
+
provider: payload.credentials.provider,
|
|
14865
|
+
ownership: payload.ownership,
|
|
14866
|
+
accountId: null,
|
|
14867
|
+
accountName: null,
|
|
14868
|
+
label: payload.label ?? null,
|
|
14869
|
+
verifiedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
14870
|
+
verificationStatus: "pending",
|
|
14871
|
+
operations: providerOperations({
|
|
14872
|
+
write: false,
|
|
14873
|
+
createVault: false,
|
|
14874
|
+
totp: false,
|
|
14875
|
+
files: false,
|
|
14876
|
+
groupGrants: false,
|
|
14877
|
+
passkeys: false
|
|
14878
|
+
})
|
|
14879
|
+
};
|
|
14880
|
+
const continuation = externalActorContinuationForAuthorization4(authorization);
|
|
14881
|
+
const connection = await db.transaction(async (tx) => {
|
|
14882
|
+
await requireConnectOwnerAuthority(tx, {
|
|
14883
|
+
accountId: grant.accountId,
|
|
14884
|
+
workspaceId,
|
|
14885
|
+
subjectId: grant.subjectId,
|
|
14886
|
+
personalOwnerVerified: isPersonalConnectionOwnerPrincipal(authorization),
|
|
14887
|
+
...continuation ? { externalContinuation: continuation } : {}
|
|
14888
|
+
});
|
|
14889
|
+
return createConnection(tx, {
|
|
14890
|
+
accountId: grant.accountId,
|
|
14891
|
+
workspaceId,
|
|
14892
|
+
subjectId: payload.ownership === "user" ? grant.subjectId : null,
|
|
14893
|
+
providerDomain: externalVaultProviderDomain(details.provider),
|
|
14894
|
+
kind: "api_key",
|
|
14895
|
+
status: "needs_reauth",
|
|
14896
|
+
credentialEncrypted: encryptEnvironmentValue2(key2, "{}"),
|
|
14897
|
+
grantedScopes: [],
|
|
14898
|
+
expiresAt: null,
|
|
14899
|
+
metadata: externalVaultConnectionMetadata(details),
|
|
14900
|
+
createdBySubjectId: grant.subjectId
|
|
14901
|
+
});
|
|
14902
|
+
});
|
|
14903
|
+
try {
|
|
14904
|
+
const result2 = await finishExternalSetup({
|
|
14905
|
+
authorization,
|
|
14906
|
+
workspaceId,
|
|
14907
|
+
connection,
|
|
14908
|
+
credentials: payload.credentials,
|
|
14909
|
+
currentCredentials: null,
|
|
14910
|
+
isNew: true
|
|
14911
|
+
});
|
|
14912
|
+
return c.json(result2.body, result2.status);
|
|
14913
|
+
} catch (error) {
|
|
14914
|
+
return vaultRouteError(c, error);
|
|
14915
|
+
}
|
|
14916
|
+
});
|
|
14917
|
+
app.put(
|
|
14918
|
+
"/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
|
|
14919
|
+
async (c) => {
|
|
14920
|
+
const workspaceId = c.req.param("workspaceId");
|
|
14921
|
+
const connectionId = c.req.param("connectionId");
|
|
14922
|
+
const authorization = await requireSetupAuthority(c, workspaceId);
|
|
14923
|
+
const { grant } = authorization;
|
|
14924
|
+
const connection = await getConnectionMetadata(
|
|
14925
|
+
db,
|
|
14926
|
+
workspaceId,
|
|
14927
|
+
connectionId,
|
|
14928
|
+
grant.subjectId
|
|
14929
|
+
);
|
|
14930
|
+
if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked") {
|
|
14931
|
+
throw new HTTPException20(404, { message: "Vault connection not found" });
|
|
14932
|
+
}
|
|
14933
|
+
const details = externalVaultConnectionDetails(connection.metadata);
|
|
14934
|
+
if (!canManageExternal(authorization, connection, details))
|
|
14935
|
+
throw new HTTPException20(403, { message: "You cannot change this vault connection" });
|
|
14936
|
+
requireOwnership(authorization, details.ownership);
|
|
14937
|
+
const payload = await parseRequestJson(c, ReplaceVaultProviderCredentialsRequest);
|
|
14938
|
+
if (payload.credentials.provider !== details.provider)
|
|
14939
|
+
throw new HTTPException20(422, { message: "Connection provider does not match" });
|
|
14940
|
+
try {
|
|
14941
|
+
const loaded = await loadExternalVaultConnection(db, settings, {
|
|
14942
|
+
workspaceId,
|
|
14943
|
+
connectionId,
|
|
14944
|
+
subjectId: grant.subjectId,
|
|
14945
|
+
provider: details.provider,
|
|
14946
|
+
allowPendingVerification: true
|
|
14947
|
+
});
|
|
14948
|
+
const result2 = await finishExternalSetup({
|
|
14949
|
+
authorization,
|
|
14950
|
+
workspaceId,
|
|
14951
|
+
connection: loaded.connection,
|
|
14952
|
+
credentials: payload.credentials,
|
|
14953
|
+
currentCredentials: loaded.currentCredentials,
|
|
14954
|
+
pendingCredentials: loaded.pendingCredentials,
|
|
14955
|
+
isNew: false
|
|
14956
|
+
});
|
|
14957
|
+
return c.json(result2.body, result2.status);
|
|
14958
|
+
} catch (error) {
|
|
14959
|
+
return vaultRouteError(c, error);
|
|
14960
|
+
}
|
|
14961
|
+
}
|
|
14962
|
+
);
|
|
14963
|
+
app.post(
|
|
14964
|
+
"/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
|
|
14965
|
+
async (c) => {
|
|
14966
|
+
const workspaceId = c.req.param("workspaceId");
|
|
14967
|
+
const connectionId = c.req.param("connectionId");
|
|
14968
|
+
const authorization = await requireSetupAuthority(c, workspaceId);
|
|
14969
|
+
const connection = await getConnectionMetadata(
|
|
14970
|
+
db,
|
|
14971
|
+
workspaceId,
|
|
14972
|
+
connectionId,
|
|
14973
|
+
authorization.grant.subjectId
|
|
14974
|
+
);
|
|
14975
|
+
if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked")
|
|
14976
|
+
throw new HTTPException20(404, { message: "Vault connection not found" });
|
|
14977
|
+
const details = externalVaultConnectionDetails(connection.metadata);
|
|
14978
|
+
if (!canManageExternal(authorization, connection, details))
|
|
14979
|
+
throw new HTTPException20(403, { message: "You cannot verify this vault connection" });
|
|
14980
|
+
requireOwnership(authorization, details.ownership);
|
|
14981
|
+
try {
|
|
14982
|
+
const loaded = await loadExternalVaultConnection(db, settings, {
|
|
14983
|
+
workspaceId,
|
|
14984
|
+
connectionId,
|
|
14985
|
+
subjectId: authorization.grant.subjectId,
|
|
14986
|
+
provider: details.provider,
|
|
14987
|
+
allowPendingVerification: true
|
|
14988
|
+
});
|
|
14989
|
+
const result2 = await finishExternalSetup({
|
|
14990
|
+
authorization,
|
|
14991
|
+
workspaceId,
|
|
14992
|
+
connection: loaded.connection,
|
|
14993
|
+
credentials: loaded.credentials,
|
|
14994
|
+
currentCredentials: loaded.currentCredentials,
|
|
14995
|
+
pendingCredentials: loaded.pendingCredentials,
|
|
14996
|
+
isNew: false
|
|
14997
|
+
});
|
|
14998
|
+
return c.json(result2.body, result2.status);
|
|
14999
|
+
} catch (error) {
|
|
15000
|
+
return vaultRouteError(c, error);
|
|
15001
|
+
}
|
|
15002
|
+
}
|
|
15003
|
+
);
|
|
15004
|
+
app.delete("/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId", async (c) => {
|
|
15005
|
+
const workspaceId = c.req.param("workspaceId");
|
|
15006
|
+
const connectionId = c.req.param("connectionId");
|
|
15007
|
+
const authorization = await requireSetupAuthority(c, workspaceId);
|
|
15008
|
+
const { grant } = authorization;
|
|
15009
|
+
const connection = await getConnectionMetadata(db, workspaceId, connectionId, grant.subjectId);
|
|
15010
|
+
if (!connection || connection.status === "revoked")
|
|
15011
|
+
throw new HTTPException20(404, { message: "Vault connection not found" });
|
|
15012
|
+
if (isOnePasswordConnection(connection)) {
|
|
15013
|
+
requireManageOnePasswordConnection(
|
|
15014
|
+
authorization,
|
|
15015
|
+
connection,
|
|
15016
|
+
onePasswordConnectionMetadata(connection.metadata)
|
|
15017
|
+
);
|
|
15018
|
+
} else {
|
|
15019
|
+
const details = externalVaultConnectionDetails(connection.metadata);
|
|
15020
|
+
if (!details || !isExternalVaultConnection(connection))
|
|
15021
|
+
throw new HTTPException20(404, { message: "Vault connection not found" });
|
|
15022
|
+
if (!canManageExternal(authorization, connection, details))
|
|
15023
|
+
throw new HTTPException20(403, { message: "You cannot disconnect this vault connection" });
|
|
15024
|
+
}
|
|
15025
|
+
try {
|
|
15026
|
+
const unlinkedVaultIds = await db.transaction(async (tx) => {
|
|
15027
|
+
const context = vaultContextFor(authorization, workspaceId);
|
|
15028
|
+
const rows3 = await listVaultsForSubject(tx, context, { workspaceId });
|
|
15029
|
+
const unlinked = [];
|
|
15030
|
+
for (const row of rows3.filter(
|
|
15031
|
+
(candidate) => candidate.providerConnectionId === connectionId
|
|
15032
|
+
)) {
|
|
15033
|
+
await deleteVault(tx, context, {
|
|
15034
|
+
vaultId: row.id,
|
|
15035
|
+
confirmName: row.name,
|
|
15036
|
+
allowOrganization: isAccountAdmin(authorization)
|
|
15037
|
+
});
|
|
15038
|
+
unlinked.push(row.id);
|
|
15039
|
+
}
|
|
15040
|
+
const revoked = await revokeConnection(
|
|
15041
|
+
tx,
|
|
15042
|
+
workspaceId,
|
|
15043
|
+
connectionId,
|
|
15044
|
+
grant.subjectId,
|
|
15045
|
+
connection.version
|
|
15046
|
+
);
|
|
15047
|
+
if (!revoked)
|
|
15048
|
+
throw new HTTPException20(409, {
|
|
15049
|
+
message: "This vault connection changed. Reload it before disconnecting."
|
|
15050
|
+
});
|
|
15051
|
+
return unlinked;
|
|
15052
|
+
});
|
|
15053
|
+
return c.json(DisconnectVaultProviderResponse.parse({ unlinkedVaultIds }));
|
|
15054
|
+
} catch (error) {
|
|
15055
|
+
return vaultRouteError(c, error);
|
|
15056
|
+
}
|
|
15057
|
+
});
|
|
15058
|
+
async function requireSetupAuthority(c, workspaceId) {
|
|
15059
|
+
const authorization = await requireAccessGrantAuthorization4(
|
|
15060
|
+
c,
|
|
15061
|
+
deps,
|
|
15062
|
+
workspaceId,
|
|
15063
|
+
"connections:write"
|
|
15064
|
+
);
|
|
15065
|
+
requirePermission2(authorization.grant, "secrets:write");
|
|
15066
|
+
return authorization;
|
|
15067
|
+
}
|
|
15068
|
+
function requireOwnership(authorization, ownership) {
|
|
15069
|
+
if (ownership === "organization" && !isAccountAdmin(authorization))
|
|
15070
|
+
throw new HTTPException20(403, { message: "missing permission: account:admin" });
|
|
15071
|
+
if (ownership === "user" && !isPersonalConnectionOwnerPrincipal(authorization))
|
|
15072
|
+
throw new HTTPException20(403, {
|
|
15073
|
+
message: "Only a signed-in person can manage a personal vault connection"
|
|
15074
|
+
});
|
|
15075
|
+
}
|
|
15076
|
+
function canManageExternal(authorization, connection, details) {
|
|
15077
|
+
const grant = authorization.grant;
|
|
15078
|
+
return hasPermission6(grant.permissions, "connections:write", grant.permissionMode) && hasPermission6(grant.permissions, "secrets:write", grant.permissionMode) && (connection.subjectId !== null ? connection.subjectId === grant.subjectId && isPersonalConnectionOwnerPrincipal(authorization) : details.ownership !== "organization" || isAccountAdmin(authorization));
|
|
15079
|
+
}
|
|
15080
|
+
function catalogVault(provider, vault, linkedVaultId) {
|
|
15081
|
+
return {
|
|
15082
|
+
externalVaultId: vault.externalVaultId,
|
|
15083
|
+
name: vault.name,
|
|
15084
|
+
itemCount: vault.itemCount,
|
|
15085
|
+
linkedVaultId,
|
|
15086
|
+
writeAccess: vault.writeAccess ?? "unknown",
|
|
15087
|
+
operations: providerOperations(provider.capabilities(), vault)
|
|
15088
|
+
};
|
|
15089
|
+
}
|
|
15090
|
+
async function finishExternalSetup(input) {
|
|
15091
|
+
const { authorization, workspaceId } = input;
|
|
15092
|
+
const { grant } = authorization;
|
|
15093
|
+
const key2 = requireEnvironmentEncryption3(settings);
|
|
15094
|
+
const details = externalVaultConnectionDetails(input.connection.metadata);
|
|
15095
|
+
const context = vaultContextFor(authorization, workspaceId);
|
|
15096
|
+
const linked = await linkedVaultRows(context, workspaceId, input.connection.id);
|
|
15097
|
+
let connection = input.connection;
|
|
15098
|
+
let saved = false;
|
|
15099
|
+
let hasPending = Boolean(input.pendingCredentials);
|
|
15100
|
+
let rejectedAccount;
|
|
15101
|
+
let storedBundle = input.pendingCredentials ? pendingVaultCredentialBundle(input.currentCredentials, input.pendingCredentials) : input.currentCredentials ?? {};
|
|
15102
|
+
const continuation = externalActorContinuationForAuthorization4(authorization);
|
|
15103
|
+
const persist = async (credentials, ready) => {
|
|
15104
|
+
const unchangedCurrent = input.currentCredentials !== null && isDeepStrictEqual(credentials, input.currentCredentials);
|
|
15105
|
+
const pending2 = !ready && !unchangedCurrent;
|
|
15106
|
+
const nextMetadata = ready ?? {
|
|
15107
|
+
...details,
|
|
15108
|
+
verificationStatus: pending2 ? "pending" : "ready"
|
|
15109
|
+
};
|
|
15110
|
+
const nextBundle = pending2 ? pendingVaultCredentialBundle(input.currentCredentials, credentials) : credentials;
|
|
15111
|
+
const nextStatus = pending2 ? connection.status : "active";
|
|
15112
|
+
const previousDetails = externalVaultConnectionDetails(connection.metadata);
|
|
15113
|
+
const generationChanged = !isDeepStrictEqual(nextBundle, storedBundle) || nextStatus !== connection.status || !isDeepStrictEqual(previousDetails?.operations, nextMetadata.operations);
|
|
15114
|
+
if (!generationChanged && isDeepStrictEqual(previousDetails, nextMetadata)) {
|
|
15115
|
+
saved = true;
|
|
15116
|
+
hasPending = pending2;
|
|
15117
|
+
return;
|
|
15118
|
+
}
|
|
15119
|
+
const updated = await db.transaction(async (tx) => {
|
|
15120
|
+
await requireConnectOwnerAuthority(tx, {
|
|
15121
|
+
accountId: grant.accountId,
|
|
15122
|
+
workspaceId,
|
|
15123
|
+
subjectId: grant.subjectId,
|
|
15124
|
+
personalOwnerVerified: isPersonalConnectionOwnerPrincipal(authorization),
|
|
15125
|
+
...continuation ? { externalContinuation: continuation } : {}
|
|
15126
|
+
});
|
|
15127
|
+
return updateConnection(tx, {
|
|
15128
|
+
workspaceId,
|
|
15129
|
+
connectionId: connection.id,
|
|
15130
|
+
visibleToSubjectId: grant.subjectId,
|
|
15131
|
+
expectedVersion: connection.version,
|
|
15132
|
+
status: nextStatus,
|
|
15133
|
+
...generationChanged ? { credentialEncrypted: encryptEnvironmentValue2(key2, JSON.stringify(nextBundle)) } : {},
|
|
15134
|
+
metadata: { ...connection.metadata, ...externalVaultConnectionMetadata(nextMetadata) },
|
|
15135
|
+
updatedBySubjectId: grant.subjectId
|
|
15136
|
+
});
|
|
15137
|
+
});
|
|
15138
|
+
if (!updated)
|
|
15139
|
+
throw new HTTPException20(409, {
|
|
15140
|
+
message: "This vault connection changed. Reload it before continuing setup."
|
|
15141
|
+
});
|
|
15142
|
+
connection = updated;
|
|
15143
|
+
saved = true;
|
|
15144
|
+
hasPending = pending2;
|
|
15145
|
+
storedBundle = nextBundle;
|
|
15146
|
+
};
|
|
15147
|
+
try {
|
|
15148
|
+
const checked = await prepareExternal(
|
|
15149
|
+
input.credentials,
|
|
15150
|
+
authorization,
|
|
15151
|
+
workspaceId,
|
|
15152
|
+
connection.id,
|
|
15153
|
+
persist
|
|
15154
|
+
);
|
|
15155
|
+
const sameAccount = details.accountId !== null ? checked.accountId === details.accountId : linked.length === 0 || linked.every(
|
|
15156
|
+
(row) => checked.vaults.some((vault) => vault.externalVaultId === row.providerVaultRef)
|
|
15157
|
+
);
|
|
15158
|
+
if (!sameAccount) {
|
|
15159
|
+
rejectedAccount = new VaultProviderError2(
|
|
15160
|
+
"provider_conflict",
|
|
15161
|
+
"These credentials do not reach the same account and linked vaults. Connect them separately instead."
|
|
15162
|
+
);
|
|
15163
|
+
throw rejectedAccount;
|
|
15164
|
+
}
|
|
15165
|
+
const ready = {
|
|
15166
|
+
...details,
|
|
15167
|
+
accountId: checked.accountId ?? details.accountId,
|
|
15168
|
+
accountName: checked.accountName,
|
|
15169
|
+
operations: checked.operations,
|
|
15170
|
+
verifiedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
15171
|
+
verificationStatus: "ready"
|
|
15172
|
+
};
|
|
15173
|
+
await persist(checked.credentials, ready);
|
|
15174
|
+
const providers = vaultProviderRegistryFor(deps, { workspaceId, subjectId: grant.subjectId });
|
|
15175
|
+
for (const row of linked) {
|
|
15176
|
+
await syncLinkedProviderVault({
|
|
15177
|
+
db,
|
|
15178
|
+
context,
|
|
15179
|
+
vaultId: row.id,
|
|
15180
|
+
providers,
|
|
15181
|
+
force: true
|
|
15182
|
+
}).catch(() => void 0);
|
|
15183
|
+
}
|
|
15184
|
+
const linkedIds = new Map(linked.map((row) => [row.providerVaultRef, row.id]));
|
|
15185
|
+
return {
|
|
15186
|
+
status: input.isNew ? 201 : 200,
|
|
15187
|
+
body: InstallVaultProviderResponse.parse({
|
|
15188
|
+
connectionId: connection.id,
|
|
15189
|
+
provider: details.provider,
|
|
15190
|
+
accountName: ready.accountName,
|
|
15191
|
+
operations: ready.operations,
|
|
15192
|
+
vaults: checked.vaults.map(
|
|
15193
|
+
(vault) => catalogVault(checked.provider, vault, linkedIds.get(vault.externalVaultId) ?? null)
|
|
15194
|
+
)
|
|
15195
|
+
})
|
|
15196
|
+
};
|
|
15197
|
+
} catch (error) {
|
|
15198
|
+
if (rejectedAccount && error === rejectedAccount && hasPending) {
|
|
15199
|
+
if (input.currentCredentials) {
|
|
15200
|
+
await persist(input.currentCredentials, { ...details, verificationStatus: "ready" });
|
|
15201
|
+
} else {
|
|
15202
|
+
await revokeConnection(
|
|
15203
|
+
db,
|
|
15204
|
+
workspaceId,
|
|
15205
|
+
connection.id,
|
|
15206
|
+
grant.subjectId,
|
|
15207
|
+
connection.version
|
|
15208
|
+
);
|
|
15209
|
+
}
|
|
15210
|
+
throw error;
|
|
15211
|
+
}
|
|
15212
|
+
if (saved && hasPending && isVaultProviderError(error)) {
|
|
15213
|
+
return {
|
|
15214
|
+
status: 202,
|
|
15215
|
+
body: InstallVaultProviderResponse.parse({
|
|
15216
|
+
connectionId: connection.id,
|
|
15217
|
+
provider: details.provider,
|
|
15218
|
+
accountName: details.accountName,
|
|
15219
|
+
operations: details.operations,
|
|
15220
|
+
vaults: [],
|
|
15221
|
+
discoveryPending: true,
|
|
15222
|
+
errorCode: error.code
|
|
15223
|
+
})
|
|
15224
|
+
};
|
|
15225
|
+
}
|
|
15226
|
+
if (!saved && input.isNew) {
|
|
15227
|
+
await revokeConnection(db, workspaceId, connection.id, grant.subjectId, connection.version);
|
|
15228
|
+
}
|
|
15229
|
+
throw error;
|
|
15230
|
+
}
|
|
15231
|
+
}
|
|
15232
|
+
async function prepareExternal(credentials, authorization, workspaceId, connectionId, persistCredentials) {
|
|
15233
|
+
const factory = externalVaultFactoriesFor(deps)[credentials.provider];
|
|
15234
|
+
if (!factory)
|
|
15235
|
+
throw new VaultProviderError2(
|
|
15236
|
+
"provider_unavailable",
|
|
15237
|
+
"This vault provider is not available in this deployment."
|
|
15238
|
+
);
|
|
15239
|
+
let rotated;
|
|
15240
|
+
const signal = AbortSignal.timeout(3e4);
|
|
15241
|
+
const prepared = await factory({
|
|
15242
|
+
credentials,
|
|
15243
|
+
...connectionId ? { connectionId } : {},
|
|
15244
|
+
signal,
|
|
15245
|
+
persistCredentials: async (next) => {
|
|
15246
|
+
const parsed = StoredVaultProviderCredentials.safeParse(next);
|
|
15247
|
+
if (!parsed.success || parsed.data.provider !== credentials.provider)
|
|
15248
|
+
throw new VaultProviderError2(
|
|
15249
|
+
"provider_unavailable",
|
|
15250
|
+
"The provider returned invalid connection state."
|
|
15251
|
+
);
|
|
15252
|
+
rotated = parsed.data;
|
|
15253
|
+
await persistCredentials(parsed.data);
|
|
15254
|
+
}
|
|
15255
|
+
});
|
|
15256
|
+
if (prepared.provider.id !== credentials.provider)
|
|
15257
|
+
throw new VaultProviderError2(
|
|
15258
|
+
"provider_unavailable",
|
|
15259
|
+
"The configured adapter does not match this connection."
|
|
15260
|
+
);
|
|
15261
|
+
const preparedCredentials = StoredVaultProviderCredentials.safeParse(prepared.credentials);
|
|
15262
|
+
if (!preparedCredentials.success || preparedCredentials.data.provider !== credentials.provider)
|
|
15263
|
+
throw new VaultProviderError2(
|
|
15264
|
+
"provider_unavailable",
|
|
15265
|
+
"The provider returned invalid connection state."
|
|
15266
|
+
);
|
|
15267
|
+
if (!rotated) await persistCredentials(preparedCredentials.data);
|
|
15268
|
+
const ctx = {
|
|
15269
|
+
connectionId,
|
|
15270
|
+
budget: createProviderCallBudget(50),
|
|
15271
|
+
signal,
|
|
15272
|
+
forceRefresh: true,
|
|
15273
|
+
authority: {
|
|
15274
|
+
accountId: authorization.grant.accountId,
|
|
15275
|
+
workspaceId,
|
|
15276
|
+
connectionWorkspaceId: workspaceId,
|
|
15277
|
+
subjectId: authorization.grant.subjectId
|
|
15278
|
+
}
|
|
15279
|
+
};
|
|
15280
|
+
const validated = await prepared.provider.validate(ctx);
|
|
15281
|
+
const vaults = await listProviderVaults(prepared.provider, ctx);
|
|
15282
|
+
const stored = StoredVaultProviderCredentials.safeParse(rotated ?? prepared.credentials);
|
|
15283
|
+
if (!stored.success || stored.data.provider !== credentials.provider)
|
|
15284
|
+
throw new VaultProviderError2(
|
|
15285
|
+
"provider_unavailable",
|
|
15286
|
+
"The provider returned invalid connection state."
|
|
15287
|
+
);
|
|
15288
|
+
return {
|
|
15289
|
+
provider: prepared.provider,
|
|
15290
|
+
credentials: stored.data,
|
|
15291
|
+
vaults,
|
|
15292
|
+
accountId: validated.accountId ?? null,
|
|
15293
|
+
accountName: validated.accountName,
|
|
15294
|
+
operations: providerOperations(prepared.provider.capabilities())
|
|
15295
|
+
};
|
|
15296
|
+
}
|
|
14581
15297
|
async function linkedVaultRows(context, workspaceId, connectionId) {
|
|
14582
15298
|
const rows3 = await listVaultsForSubject(db, context, { workspaceId });
|
|
14583
15299
|
return rows3.filter(
|
|
14584
|
-
(row) => row.source
|
|
15300
|
+
(row) => row.source !== "opengeni" && row.providerConnectionId === connectionId && row.providerVaultRef !== null
|
|
14585
15301
|
);
|
|
14586
15302
|
}
|
|
14587
15303
|
}
|
|
@@ -15017,12 +15733,12 @@ import {
|
|
|
15017
15733
|
} from "@opengeni/contracts";
|
|
15018
15734
|
import {
|
|
15019
15735
|
encryptEnvironmentValue as encryptEnvironmentValue3,
|
|
15020
|
-
VaultError
|
|
15736
|
+
VaultError as VaultError2
|
|
15021
15737
|
} from "@opengeni/db";
|
|
15022
15738
|
function encrypted(key2, plaintext) {
|
|
15023
15739
|
const valueSize = Buffer.byteLength(plaintext, "utf8");
|
|
15024
15740
|
if (valueSize > VAULT_LIMITS.textValueMaxBytes) {
|
|
15025
|
-
throw new
|
|
15741
|
+
throw new VaultError2(
|
|
15026
15742
|
"secret_value_too_large",
|
|
15027
15743
|
`the value is larger than ${VAULT_LIMITS.textValueMaxBytes} bytes`,
|
|
15028
15744
|
{ limit: VAULT_LIMITS.textValueMaxBytes }
|
|
@@ -15039,7 +15755,7 @@ function prepareSecretAnswers(settings, answers, source) {
|
|
|
15039
15755
|
}
|
|
15040
15756
|
const key2 = environmentsEncryptionKeyBytes3(settings);
|
|
15041
15757
|
if (!key2) {
|
|
15042
|
-
throw new
|
|
15758
|
+
throw new VaultError2(
|
|
15043
15759
|
"encryption_key_missing",
|
|
15044
15760
|
"vaults require OPENGENI_ENVIRONMENTS_ENCRYPTION_KEY"
|
|
15045
15761
|
);
|
|
@@ -17934,7 +18650,7 @@ async function projectWorkspaceArtifactMutationProvenance(response, canReadSessi
|
|
|
17934
18650
|
}
|
|
17935
18651
|
|
|
17936
18652
|
// src/integrations/social-api.ts
|
|
17937
|
-
import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES4, pinnedFetch as
|
|
18653
|
+
import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES4, pinnedFetch as pinnedFetch4, readResponseJsonBounded as readResponseJsonBounded3 } from "@opengeni/network";
|
|
17938
18654
|
|
|
17939
18655
|
// src/integrations/social-oauth.ts
|
|
17940
18656
|
import { withOrganizationIntegrationAcquisition as withOrganizationIntegrationAcquisition2 } from "@opengeni/db/organization-integration-policy";
|
|
@@ -18002,7 +18718,7 @@ import {
|
|
|
18002
18718
|
RequestDeadlineError,
|
|
18003
18719
|
isLocalTestEnvironment,
|
|
18004
18720
|
parseMcpOAuthChallenge,
|
|
18005
|
-
pinnedFetch,
|
|
18721
|
+
pinnedFetch as pinnedFetch2,
|
|
18006
18722
|
readResponseJsonBounded,
|
|
18007
18723
|
resolveMcpOAuthDiscovery,
|
|
18008
18724
|
validateHttpUrl
|
|
@@ -20425,7 +21141,7 @@ async function fetchOAuth(rawUrl, settings, init = {}, hop = 0) {
|
|
|
20425
21141
|
let response;
|
|
20426
21142
|
try {
|
|
20427
21143
|
const endpoint = oauthEndpointUrl(rawUrl, settings, "OAuth endpoint");
|
|
20428
|
-
response = await
|
|
21144
|
+
response = await pinnedFetch2(endpoint, init, settings, {
|
|
20429
21145
|
label: "OAuth discovery",
|
|
20430
21146
|
requireHttpsOutsideLocalTest: true
|
|
20431
21147
|
});
|
|
@@ -20572,7 +21288,7 @@ import {
|
|
|
20572
21288
|
getConnectAttempt as getConnectAttempt2
|
|
20573
21289
|
} from "@opengeni/db";
|
|
20574
21290
|
import { createSignedState as createSignedState3, readSignedState as readSignedState3 } from "@opengeni/github";
|
|
20575
|
-
import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES3, pinnedFetch as
|
|
21291
|
+
import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES3, pinnedFetch as pinnedFetch3, readResponseJsonBounded as readResponseJsonBounded2 } from "@opengeni/network";
|
|
20576
21292
|
import { Buffer as Buffer3 } from "buffer";
|
|
20577
21293
|
import { createHash as createHash8, randomBytes as randomBytes4 } from "crypto";
|
|
20578
21294
|
import { HTTPException as HTTPException28 } from "hono/http-exception";
|
|
@@ -20613,7 +21329,7 @@ function socialProviderFetch(deps, url, init, label) {
|
|
|
20613
21329
|
if (deps.providerFetch) {
|
|
20614
21330
|
return deps.providerFetch(url, init, label);
|
|
20615
21331
|
}
|
|
20616
|
-
return
|
|
21332
|
+
return pinnedFetch3(url, init, deps.settings, {
|
|
20617
21333
|
label,
|
|
20618
21334
|
requireHttpsOutsideLocalTest: true
|
|
20619
21335
|
});
|
|
@@ -21460,7 +22176,7 @@ function socialApiHeaders(bundle) {
|
|
|
21460
22176
|
async function socialApiRequest(deps, ref, bundle, url, init) {
|
|
21461
22177
|
const requestInit = { ...init, signal: AbortSignal.timeout(SOCIAL_TIMEOUT_MS) };
|
|
21462
22178
|
const label = `social ${bundle.provider} API`;
|
|
21463
|
-
const response = deps.providerFetch ? await deps.providerFetch(url.toString(), requestInit, label) : await
|
|
22179
|
+
const response = deps.providerFetch ? await deps.providerFetch(url.toString(), requestInit, label) : await pinnedFetch4(url.toString(), requestInit, deps.settings, {
|
|
21464
22180
|
label,
|
|
21465
22181
|
requireHttpsOutsideLocalTest: true
|
|
21466
22182
|
});
|
|
@@ -34305,7 +35021,10 @@ var ACTION_CATALOG = [
|
|
|
34305
35021
|
"request": [],
|
|
34306
35022
|
"response": [
|
|
34307
35023
|
"DisconnectOnePasswordResponse",
|
|
35024
|
+
"DisconnectVaultProviderResponse",
|
|
34308
35025
|
"InstallOnePasswordResponse",
|
|
35026
|
+
"InstallVaultProviderResponse",
|
|
35027
|
+
"ListVaultProviderConnectionsResponse",
|
|
34309
35028
|
"OnePasswordConnectionSummary",
|
|
34310
35029
|
"ProviderVaultMeta",
|
|
34311
35030
|
"RevealVaultFieldResponse",
|
|
@@ -34313,6 +35032,7 @@ var ACTION_CATALOG = [
|
|
|
34313
35032
|
"VaultFieldVersionMeta",
|
|
34314
35033
|
"VaultItem",
|
|
34315
35034
|
"VaultItemSummary",
|
|
35035
|
+
"VaultProviderConnectionSummary",
|
|
34316
35036
|
"VaultSummary"
|
|
34317
35037
|
]
|
|
34318
35038
|
},
|
|
@@ -34330,6 +35050,28 @@ var ACTION_CATALOG = [
|
|
|
34330
35050
|
"request": [],
|
|
34331
35051
|
"response": []
|
|
34332
35052
|
},
|
|
35053
|
+
{
|
|
35054
|
+
"id": "DELETE /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId",
|
|
35055
|
+
"method": "DELETE",
|
|
35056
|
+
"path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId",
|
|
35057
|
+
"request": [],
|
|
35058
|
+
"response": [
|
|
35059
|
+
"DisconnectOnePasswordResponse",
|
|
35060
|
+
"DisconnectVaultProviderResponse",
|
|
35061
|
+
"InstallOnePasswordResponse",
|
|
35062
|
+
"InstallVaultProviderResponse",
|
|
35063
|
+
"ListVaultProviderConnectionsResponse",
|
|
35064
|
+
"OnePasswordConnectionSummary",
|
|
35065
|
+
"ProviderVaultMeta",
|
|
35066
|
+
"RevealVaultFieldResponse",
|
|
35067
|
+
"SessionSecretsView",
|
|
35068
|
+
"VaultFieldVersionMeta",
|
|
35069
|
+
"VaultItem",
|
|
35070
|
+
"VaultItemSummary",
|
|
35071
|
+
"VaultProviderConnectionSummary",
|
|
35072
|
+
"VaultSummary"
|
|
35073
|
+
]
|
|
35074
|
+
},
|
|
34333
35075
|
{
|
|
34334
35076
|
"id": "DELETE /v1/workspaces/:workspaceId/vaults/:vaultId",
|
|
34335
35077
|
"method": "DELETE",
|
|
@@ -34337,7 +35079,10 @@ var ACTION_CATALOG = [
|
|
|
34337
35079
|
"request": [],
|
|
34338
35080
|
"response": [
|
|
34339
35081
|
"DisconnectOnePasswordResponse",
|
|
35082
|
+
"DisconnectVaultProviderResponse",
|
|
34340
35083
|
"InstallOnePasswordResponse",
|
|
35084
|
+
"InstallVaultProviderResponse",
|
|
35085
|
+
"ListVaultProviderConnectionsResponse",
|
|
34341
35086
|
"OnePasswordConnectionSummary",
|
|
34342
35087
|
"ProviderVaultMeta",
|
|
34343
35088
|
"RevealVaultFieldResponse",
|
|
@@ -34345,6 +35090,7 @@ var ACTION_CATALOG = [
|
|
|
34345
35090
|
"VaultFieldVersionMeta",
|
|
34346
35091
|
"VaultItem",
|
|
34347
35092
|
"VaultItemSummary",
|
|
35093
|
+
"VaultProviderConnectionSummary",
|
|
34348
35094
|
"VaultSummary"
|
|
34349
35095
|
]
|
|
34350
35096
|
},
|
|
@@ -34535,7 +35281,10 @@ var ACTION_CATALOG = [
|
|
|
34535
35281
|
"request": [],
|
|
34536
35282
|
"response": [
|
|
34537
35283
|
"DisconnectOnePasswordResponse",
|
|
35284
|
+
"DisconnectVaultProviderResponse",
|
|
34538
35285
|
"InstallOnePasswordResponse",
|
|
35286
|
+
"InstallVaultProviderResponse",
|
|
35287
|
+
"ListVaultProviderConnectionsResponse",
|
|
34539
35288
|
"OnePasswordConnectionSummary",
|
|
34540
35289
|
"ProviderVaultMeta",
|
|
34541
35290
|
"RevealVaultFieldResponse",
|
|
@@ -34543,6 +35292,7 @@ var ACTION_CATALOG = [
|
|
|
34543
35292
|
"VaultFieldVersionMeta",
|
|
34544
35293
|
"VaultItem",
|
|
34545
35294
|
"VaultItemSummary",
|
|
35295
|
+
"VaultProviderConnectionSummary",
|
|
34546
35296
|
"VaultSummary"
|
|
34547
35297
|
]
|
|
34548
35298
|
},
|
|
@@ -34834,8 +35584,11 @@ var ACTION_CATALOG = [
|
|
|
34834
35584
|
],
|
|
34835
35585
|
"response": [
|
|
34836
35586
|
"DisconnectOnePasswordResponse",
|
|
35587
|
+
"DisconnectVaultProviderResponse",
|
|
34837
35588
|
"EnsureWorkspaceResponse",
|
|
34838
35589
|
"InstallOnePasswordResponse",
|
|
35590
|
+
"InstallVaultProviderResponse",
|
|
35591
|
+
"ListVaultProviderConnectionsResponse",
|
|
34839
35592
|
"OnePasswordConnectionSummary",
|
|
34840
35593
|
"ProviderVaultMeta",
|
|
34841
35594
|
"RevealVaultFieldResponse",
|
|
@@ -34843,6 +35596,7 @@ var ACTION_CATALOG = [
|
|
|
34843
35596
|
"VaultFieldVersionMeta",
|
|
34844
35597
|
"VaultItem",
|
|
34845
35598
|
"VaultItemSummary",
|
|
35599
|
+
"VaultProviderConnectionSummary",
|
|
34846
35600
|
"VaultSummary"
|
|
34847
35601
|
]
|
|
34848
35602
|
},
|
|
@@ -35098,7 +35852,10 @@ var ACTION_CATALOG = [
|
|
|
35098
35852
|
"request": [],
|
|
35099
35853
|
"response": [
|
|
35100
35854
|
"DisconnectOnePasswordResponse",
|
|
35855
|
+
"DisconnectVaultProviderResponse",
|
|
35101
35856
|
"InstallOnePasswordResponse",
|
|
35857
|
+
"InstallVaultProviderResponse",
|
|
35858
|
+
"ListVaultProviderConnectionsResponse",
|
|
35102
35859
|
"OnePasswordConnectionSummary",
|
|
35103
35860
|
"ProviderVaultMeta",
|
|
35104
35861
|
"RevealVaultFieldResponse",
|
|
@@ -35106,6 +35863,7 @@ var ACTION_CATALOG = [
|
|
|
35106
35863
|
"VaultFieldVersionMeta",
|
|
35107
35864
|
"VaultItem",
|
|
35108
35865
|
"VaultItemSummary",
|
|
35866
|
+
"VaultProviderConnectionSummary",
|
|
35109
35867
|
"VaultSummary"
|
|
35110
35868
|
]
|
|
35111
35869
|
},
|
|
@@ -35116,7 +35874,10 @@ var ACTION_CATALOG = [
|
|
|
35116
35874
|
"request": [],
|
|
35117
35875
|
"response": [
|
|
35118
35876
|
"DisconnectOnePasswordResponse",
|
|
35877
|
+
"DisconnectVaultProviderResponse",
|
|
35119
35878
|
"InstallOnePasswordResponse",
|
|
35879
|
+
"InstallVaultProviderResponse",
|
|
35880
|
+
"ListVaultProviderConnectionsResponse",
|
|
35120
35881
|
"OnePasswordConnectionSummary",
|
|
35121
35882
|
"ProviderVaultMeta",
|
|
35122
35883
|
"RevealVaultFieldResponse",
|
|
@@ -35124,6 +35885,7 @@ var ACTION_CATALOG = [
|
|
|
35124
35885
|
"VaultFieldVersionMeta",
|
|
35125
35886
|
"VaultItem",
|
|
35126
35887
|
"VaultItemSummary",
|
|
35888
|
+
"VaultProviderConnectionSummary",
|
|
35127
35889
|
"VaultSummary"
|
|
35128
35890
|
]
|
|
35129
35891
|
},
|
|
@@ -35262,7 +36024,10 @@ var ACTION_CATALOG = [
|
|
|
35262
36024
|
"request": [],
|
|
35263
36025
|
"response": [
|
|
35264
36026
|
"DisconnectOnePasswordResponse",
|
|
36027
|
+
"DisconnectVaultProviderResponse",
|
|
35265
36028
|
"InstallOnePasswordResponse",
|
|
36029
|
+
"InstallVaultProviderResponse",
|
|
36030
|
+
"ListVaultProviderConnectionsResponse",
|
|
35266
36031
|
"OnePasswordConnectionSummary",
|
|
35267
36032
|
"ProviderVaultMeta",
|
|
35268
36033
|
"RevealVaultFieldResponse",
|
|
@@ -35270,6 +36035,7 @@ var ACTION_CATALOG = [
|
|
|
35270
36035
|
"VaultFieldVersionMeta",
|
|
35271
36036
|
"VaultItem",
|
|
35272
36037
|
"VaultItemSummary",
|
|
36038
|
+
"VaultProviderConnectionSummary",
|
|
35273
36039
|
"VaultSummary"
|
|
35274
36040
|
]
|
|
35275
36041
|
},
|
|
@@ -35311,6 +36077,28 @@ var ACTION_CATALOG = [
|
|
|
35311
36077
|
"ToolGatewayDeclarationsResponse"
|
|
35312
36078
|
]
|
|
35313
36079
|
},
|
|
36080
|
+
{
|
|
36081
|
+
"id": "GET /v1/workspaces/:workspaceId/vault-providers/connections",
|
|
36082
|
+
"method": "GET",
|
|
36083
|
+
"path": "/v1/workspaces/:workspaceId/vault-providers/connections",
|
|
36084
|
+
"request": [],
|
|
36085
|
+
"response": [
|
|
36086
|
+
"DisconnectOnePasswordResponse",
|
|
36087
|
+
"DisconnectVaultProviderResponse",
|
|
36088
|
+
"InstallOnePasswordResponse",
|
|
36089
|
+
"InstallVaultProviderResponse",
|
|
36090
|
+
"ListVaultProviderConnectionsResponse",
|
|
36091
|
+
"OnePasswordConnectionSummary",
|
|
36092
|
+
"ProviderVaultMeta",
|
|
36093
|
+
"RevealVaultFieldResponse",
|
|
36094
|
+
"SessionSecretsView",
|
|
36095
|
+
"VaultFieldVersionMeta",
|
|
36096
|
+
"VaultItem",
|
|
36097
|
+
"VaultItemSummary",
|
|
36098
|
+
"VaultProviderConnectionSummary",
|
|
36099
|
+
"VaultSummary"
|
|
36100
|
+
]
|
|
36101
|
+
},
|
|
35314
36102
|
{
|
|
35315
36103
|
"id": "GET /v1/workspaces/:workspaceId/vaults",
|
|
35316
36104
|
"method": "GET",
|
|
@@ -35318,7 +36106,10 @@ var ACTION_CATALOG = [
|
|
|
35318
36106
|
"request": [],
|
|
35319
36107
|
"response": [
|
|
35320
36108
|
"DisconnectOnePasswordResponse",
|
|
36109
|
+
"DisconnectVaultProviderResponse",
|
|
35321
36110
|
"InstallOnePasswordResponse",
|
|
36111
|
+
"InstallVaultProviderResponse",
|
|
36112
|
+
"ListVaultProviderConnectionsResponse",
|
|
35322
36113
|
"OnePasswordConnectionSummary",
|
|
35323
36114
|
"ProviderVaultMeta",
|
|
35324
36115
|
"RevealVaultFieldResponse",
|
|
@@ -35326,6 +36117,7 @@ var ACTION_CATALOG = [
|
|
|
35326
36117
|
"VaultFieldVersionMeta",
|
|
35327
36118
|
"VaultItem",
|
|
35328
36119
|
"VaultItemSummary",
|
|
36120
|
+
"VaultProviderConnectionSummary",
|
|
35329
36121
|
"VaultSummary"
|
|
35330
36122
|
]
|
|
35331
36123
|
},
|
|
@@ -35336,7 +36128,10 @@ var ACTION_CATALOG = [
|
|
|
35336
36128
|
"request": [],
|
|
35337
36129
|
"response": [
|
|
35338
36130
|
"DisconnectOnePasswordResponse",
|
|
36131
|
+
"DisconnectVaultProviderResponse",
|
|
35339
36132
|
"InstallOnePasswordResponse",
|
|
36133
|
+
"InstallVaultProviderResponse",
|
|
36134
|
+
"ListVaultProviderConnectionsResponse",
|
|
35340
36135
|
"OnePasswordConnectionSummary",
|
|
35341
36136
|
"ProviderVaultMeta",
|
|
35342
36137
|
"RevealVaultFieldResponse",
|
|
@@ -35344,6 +36139,7 @@ var ACTION_CATALOG = [
|
|
|
35344
36139
|
"VaultFieldVersionMeta",
|
|
35345
36140
|
"VaultItem",
|
|
35346
36141
|
"VaultItemSummary",
|
|
36142
|
+
"VaultProviderConnectionSummary",
|
|
35347
36143
|
"VaultSummary"
|
|
35348
36144
|
]
|
|
35349
36145
|
},
|
|
@@ -35373,7 +36169,22 @@ var ACTION_CATALOG = [
|
|
|
35373
36169
|
"method": "GET",
|
|
35374
36170
|
"path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
|
|
35375
36171
|
"request": [],
|
|
35376
|
-
"response": [
|
|
36172
|
+
"response": [
|
|
36173
|
+
"DisconnectOnePasswordResponse",
|
|
36174
|
+
"DisconnectVaultProviderResponse",
|
|
36175
|
+
"InstallOnePasswordResponse",
|
|
36176
|
+
"InstallVaultProviderResponse",
|
|
36177
|
+
"ListVaultProviderConnectionsResponse",
|
|
36178
|
+
"OnePasswordConnectionSummary",
|
|
36179
|
+
"ProviderVaultMeta",
|
|
36180
|
+
"RevealVaultFieldResponse",
|
|
36181
|
+
"SessionSecretsView",
|
|
36182
|
+
"VaultFieldVersionMeta",
|
|
36183
|
+
"VaultItem",
|
|
36184
|
+
"VaultItemSummary",
|
|
36185
|
+
"VaultProviderConnectionSummary",
|
|
36186
|
+
"VaultSummary"
|
|
36187
|
+
]
|
|
35377
36188
|
},
|
|
35378
36189
|
{
|
|
35379
36190
|
"id": "GET /v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance/state",
|
|
@@ -35387,7 +36198,22 @@ var ACTION_CATALOG = [
|
|
|
35387
36198
|
"method": "GET",
|
|
35388
36199
|
"path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/usage",
|
|
35389
36200
|
"request": [],
|
|
35390
|
-
"response": [
|
|
36201
|
+
"response": [
|
|
36202
|
+
"DisconnectOnePasswordResponse",
|
|
36203
|
+
"DisconnectVaultProviderResponse",
|
|
36204
|
+
"InstallOnePasswordResponse",
|
|
36205
|
+
"InstallVaultProviderResponse",
|
|
36206
|
+
"ListVaultProviderConnectionsResponse",
|
|
36207
|
+
"OnePasswordConnectionSummary",
|
|
36208
|
+
"ProviderVaultMeta",
|
|
36209
|
+
"RevealVaultFieldResponse",
|
|
36210
|
+
"SessionSecretsView",
|
|
36211
|
+
"VaultFieldVersionMeta",
|
|
36212
|
+
"VaultItem",
|
|
36213
|
+
"VaultItemSummary",
|
|
36214
|
+
"VaultProviderConnectionSummary",
|
|
36215
|
+
"VaultSummary"
|
|
36216
|
+
]
|
|
35391
36217
|
},
|
|
35392
36218
|
{
|
|
35393
36219
|
"id": "GET /v1/workspaces/external/:workspaceSource/:workspaceExternalId/usage/me",
|
|
@@ -35609,7 +36435,10 @@ var ACTION_CATALOG = [
|
|
|
35609
36435
|
"ConnectionMetadata",
|
|
35610
36436
|
"ConnectionResponse",
|
|
35611
36437
|
"DisconnectOnePasswordResponse",
|
|
36438
|
+
"DisconnectVaultProviderResponse",
|
|
35612
36439
|
"InstallOnePasswordResponse",
|
|
36440
|
+
"InstallVaultProviderResponse",
|
|
36441
|
+
"ListVaultProviderConnectionsResponse",
|
|
35613
36442
|
"OnePasswordConnectionSummary",
|
|
35614
36443
|
"ProviderVaultMeta",
|
|
35615
36444
|
"RevealVaultFieldResponse",
|
|
@@ -35617,6 +36446,7 @@ var ACTION_CATALOG = [
|
|
|
35617
36446
|
"VaultFieldVersionMeta",
|
|
35618
36447
|
"VaultItem",
|
|
35619
36448
|
"VaultItemSummary",
|
|
36449
|
+
"VaultProviderConnectionSummary",
|
|
35620
36450
|
"VaultSummary"
|
|
35621
36451
|
]
|
|
35622
36452
|
},
|
|
@@ -36379,7 +37209,10 @@ var ACTION_CATALOG = [
|
|
|
36379
37209
|
"request": [],
|
|
36380
37210
|
"response": [
|
|
36381
37211
|
"DisconnectOnePasswordResponse",
|
|
37212
|
+
"DisconnectVaultProviderResponse",
|
|
36382
37213
|
"InstallOnePasswordResponse",
|
|
37214
|
+
"InstallVaultProviderResponse",
|
|
37215
|
+
"ListVaultProviderConnectionsResponse",
|
|
36383
37216
|
"OnePasswordConnectionSummary",
|
|
36384
37217
|
"ProviderVaultMeta",
|
|
36385
37218
|
"RevealVaultFieldResponse",
|
|
@@ -36387,6 +37220,7 @@ var ACTION_CATALOG = [
|
|
|
36387
37220
|
"VaultFieldVersionMeta",
|
|
36388
37221
|
"VaultItem",
|
|
36389
37222
|
"VaultItemSummary",
|
|
37223
|
+
"VaultProviderConnectionSummary",
|
|
36390
37224
|
"VaultSummary",
|
|
36391
37225
|
"Workspace"
|
|
36392
37226
|
]
|
|
@@ -36710,7 +37544,21 @@ var ACTION_CATALOG = [
|
|
|
36710
37544
|
"ImportArchivedSessionRequest"
|
|
36711
37545
|
],
|
|
36712
37546
|
"response": [
|
|
36713
|
-
"
|
|
37547
|
+
"DisconnectOnePasswordResponse",
|
|
37548
|
+
"DisconnectVaultProviderResponse",
|
|
37549
|
+
"ImportArchivedSessionResponse",
|
|
37550
|
+
"InstallOnePasswordResponse",
|
|
37551
|
+
"InstallVaultProviderResponse",
|
|
37552
|
+
"ListVaultProviderConnectionsResponse",
|
|
37553
|
+
"OnePasswordConnectionSummary",
|
|
37554
|
+
"ProviderVaultMeta",
|
|
37555
|
+
"RevealVaultFieldResponse",
|
|
37556
|
+
"SessionSecretsView",
|
|
37557
|
+
"VaultFieldVersionMeta",
|
|
37558
|
+
"VaultItem",
|
|
37559
|
+
"VaultItemSummary",
|
|
37560
|
+
"VaultProviderConnectionSummary",
|
|
37561
|
+
"VaultSummary"
|
|
36714
37562
|
]
|
|
36715
37563
|
},
|
|
36716
37564
|
{
|
|
@@ -38125,7 +38973,10 @@ var ACTION_CATALOG = [
|
|
|
38125
38973
|
"request": [],
|
|
38126
38974
|
"response": [
|
|
38127
38975
|
"DisconnectOnePasswordResponse",
|
|
38976
|
+
"DisconnectVaultProviderResponse",
|
|
38128
38977
|
"InstallOnePasswordResponse",
|
|
38978
|
+
"InstallVaultProviderResponse",
|
|
38979
|
+
"ListVaultProviderConnectionsResponse",
|
|
38129
38980
|
"OnePasswordConnectionSummary",
|
|
38130
38981
|
"ProviderVaultMeta",
|
|
38131
38982
|
"RevealVaultFieldResponse",
|
|
@@ -38133,6 +38984,7 @@ var ACTION_CATALOG = [
|
|
|
38133
38984
|
"VaultFieldVersionMeta",
|
|
38134
38985
|
"VaultItem",
|
|
38135
38986
|
"VaultItemSummary",
|
|
38987
|
+
"VaultProviderConnectionSummary",
|
|
38136
38988
|
"VaultSummary"
|
|
38137
38989
|
]
|
|
38138
38990
|
},
|
|
@@ -38258,7 +39110,10 @@ var ACTION_CATALOG = [
|
|
|
38258
39110
|
"request": [],
|
|
38259
39111
|
"response": [
|
|
38260
39112
|
"DisconnectOnePasswordResponse",
|
|
39113
|
+
"DisconnectVaultProviderResponse",
|
|
38261
39114
|
"InstallOnePasswordResponse",
|
|
39115
|
+
"InstallVaultProviderResponse",
|
|
39116
|
+
"ListVaultProviderConnectionsResponse",
|
|
38262
39117
|
"OnePasswordConnectionSummary",
|
|
38263
39118
|
"ProviderVaultMeta",
|
|
38264
39119
|
"RevealVaultFieldResponse",
|
|
@@ -38266,6 +39121,7 @@ var ACTION_CATALOG = [
|
|
|
38266
39121
|
"VaultFieldVersionMeta",
|
|
38267
39122
|
"VaultItem",
|
|
38268
39123
|
"VaultItemSummary",
|
|
39124
|
+
"VaultProviderConnectionSummary",
|
|
38269
39125
|
"VaultSummary"
|
|
38270
39126
|
]
|
|
38271
39127
|
},
|
|
@@ -38276,7 +39132,10 @@ var ACTION_CATALOG = [
|
|
|
38276
39132
|
"request": [],
|
|
38277
39133
|
"response": [
|
|
38278
39134
|
"DisconnectOnePasswordResponse",
|
|
39135
|
+
"DisconnectVaultProviderResponse",
|
|
38279
39136
|
"InstallOnePasswordResponse",
|
|
39137
|
+
"InstallVaultProviderResponse",
|
|
39138
|
+
"ListVaultProviderConnectionsResponse",
|
|
38280
39139
|
"OnePasswordConnectionSummary",
|
|
38281
39140
|
"ProviderVaultMeta",
|
|
38282
39141
|
"RevealVaultFieldResponse",
|
|
@@ -38284,6 +39143,7 @@ var ACTION_CATALOG = [
|
|
|
38284
39143
|
"VaultFieldVersionMeta",
|
|
38285
39144
|
"VaultItem",
|
|
38286
39145
|
"VaultItemSummary",
|
|
39146
|
+
"VaultProviderConnectionSummary",
|
|
38287
39147
|
"VaultSummary"
|
|
38288
39148
|
]
|
|
38289
39149
|
},
|
|
@@ -38535,6 +39395,52 @@ var ACTION_CATALOG = [
|
|
|
38535
39395
|
"ToolGatewayTargetApprovalResponse"
|
|
38536
39396
|
]
|
|
38537
39397
|
},
|
|
39398
|
+
{
|
|
39399
|
+
"id": "POST /v1/workspaces/:workspaceId/vault-providers/connections",
|
|
39400
|
+
"method": "POST",
|
|
39401
|
+
"path": "/v1/workspaces/:workspaceId/vault-providers/connections",
|
|
39402
|
+
"request": [
|
|
39403
|
+
"InstallVaultProviderRequest"
|
|
39404
|
+
],
|
|
39405
|
+
"response": [
|
|
39406
|
+
"DisconnectOnePasswordResponse",
|
|
39407
|
+
"DisconnectVaultProviderResponse",
|
|
39408
|
+
"InstallOnePasswordResponse",
|
|
39409
|
+
"InstallVaultProviderResponse",
|
|
39410
|
+
"ListVaultProviderConnectionsResponse",
|
|
39411
|
+
"OnePasswordConnectionSummary",
|
|
39412
|
+
"ProviderVaultMeta",
|
|
39413
|
+
"RevealVaultFieldResponse",
|
|
39414
|
+
"SessionSecretsView",
|
|
39415
|
+
"VaultFieldVersionMeta",
|
|
39416
|
+
"VaultItem",
|
|
39417
|
+
"VaultItemSummary",
|
|
39418
|
+
"VaultProviderConnectionSummary",
|
|
39419
|
+
"VaultSummary"
|
|
39420
|
+
]
|
|
39421
|
+
},
|
|
39422
|
+
{
|
|
39423
|
+
"id": "POST /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
|
|
39424
|
+
"method": "POST",
|
|
39425
|
+
"path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
|
|
39426
|
+
"request": [],
|
|
39427
|
+
"response": [
|
|
39428
|
+
"DisconnectOnePasswordResponse",
|
|
39429
|
+
"DisconnectVaultProviderResponse",
|
|
39430
|
+
"InstallOnePasswordResponse",
|
|
39431
|
+
"InstallVaultProviderResponse",
|
|
39432
|
+
"ListVaultProviderConnectionsResponse",
|
|
39433
|
+
"OnePasswordConnectionSummary",
|
|
39434
|
+
"ProviderVaultMeta",
|
|
39435
|
+
"RevealVaultFieldResponse",
|
|
39436
|
+
"SessionSecretsView",
|
|
39437
|
+
"VaultFieldVersionMeta",
|
|
39438
|
+
"VaultItem",
|
|
39439
|
+
"VaultItemSummary",
|
|
39440
|
+
"VaultProviderConnectionSummary",
|
|
39441
|
+
"VaultSummary"
|
|
39442
|
+
]
|
|
39443
|
+
},
|
|
38538
39444
|
{
|
|
38539
39445
|
"id": "POST /v1/workspaces/:workspaceId/vaults",
|
|
38540
39446
|
"method": "POST",
|
|
@@ -38542,7 +39448,10 @@ var ACTION_CATALOG = [
|
|
|
38542
39448
|
"request": [],
|
|
38543
39449
|
"response": [
|
|
38544
39450
|
"DisconnectOnePasswordResponse",
|
|
39451
|
+
"DisconnectVaultProviderResponse",
|
|
38545
39452
|
"InstallOnePasswordResponse",
|
|
39453
|
+
"InstallVaultProviderResponse",
|
|
39454
|
+
"ListVaultProviderConnectionsResponse",
|
|
38546
39455
|
"OnePasswordConnectionSummary",
|
|
38547
39456
|
"ProviderVaultMeta",
|
|
38548
39457
|
"RevealVaultFieldResponse",
|
|
@@ -38550,6 +39459,7 @@ var ACTION_CATALOG = [
|
|
|
38550
39459
|
"VaultFieldVersionMeta",
|
|
38551
39460
|
"VaultItem",
|
|
38552
39461
|
"VaultItemSummary",
|
|
39462
|
+
"VaultProviderConnectionSummary",
|
|
38553
39463
|
"VaultSummary"
|
|
38554
39464
|
]
|
|
38555
39465
|
},
|
|
@@ -38602,7 +39512,10 @@ var ACTION_CATALOG = [
|
|
|
38602
39512
|
"request": [],
|
|
38603
39513
|
"response": [
|
|
38604
39514
|
"DisconnectOnePasswordResponse",
|
|
39515
|
+
"DisconnectVaultProviderResponse",
|
|
38605
39516
|
"InstallOnePasswordResponse",
|
|
39517
|
+
"InstallVaultProviderResponse",
|
|
39518
|
+
"ListVaultProviderConnectionsResponse",
|
|
38606
39519
|
"OnePasswordConnectionSummary",
|
|
38607
39520
|
"ProviderVaultMeta",
|
|
38608
39521
|
"RevealVaultFieldResponse",
|
|
@@ -38610,6 +39523,7 @@ var ACTION_CATALOG = [
|
|
|
38610
39523
|
"VaultFieldVersionMeta",
|
|
38611
39524
|
"VaultItem",
|
|
38612
39525
|
"VaultItemSummary",
|
|
39526
|
+
"VaultProviderConnectionSummary",
|
|
38613
39527
|
"VaultSummary"
|
|
38614
39528
|
]
|
|
38615
39529
|
},
|
|
@@ -38820,7 +39734,10 @@ var ACTION_CATALOG = [
|
|
|
38820
39734
|
"request": [],
|
|
38821
39735
|
"response": [
|
|
38822
39736
|
"DisconnectOnePasswordResponse",
|
|
39737
|
+
"DisconnectVaultProviderResponse",
|
|
38823
39738
|
"InstallOnePasswordResponse",
|
|
39739
|
+
"InstallVaultProviderResponse",
|
|
39740
|
+
"ListVaultProviderConnectionsResponse",
|
|
38824
39741
|
"OnePasswordConnectionSummary",
|
|
38825
39742
|
"ProviderVaultMeta",
|
|
38826
39743
|
"RevealVaultFieldResponse",
|
|
@@ -38828,6 +39745,7 @@ var ACTION_CATALOG = [
|
|
|
38828
39745
|
"VaultFieldVersionMeta",
|
|
38829
39746
|
"VaultItem",
|
|
38830
39747
|
"VaultItemSummary",
|
|
39748
|
+
"VaultProviderConnectionSummary",
|
|
38831
39749
|
"VaultSummary"
|
|
38832
39750
|
]
|
|
38833
39751
|
},
|
|
@@ -38861,7 +39779,10 @@ var ACTION_CATALOG = [
|
|
|
38861
39779
|
"request": [],
|
|
38862
39780
|
"response": [
|
|
38863
39781
|
"DisconnectOnePasswordResponse",
|
|
39782
|
+
"DisconnectVaultProviderResponse",
|
|
38864
39783
|
"InstallOnePasswordResponse",
|
|
39784
|
+
"InstallVaultProviderResponse",
|
|
39785
|
+
"ListVaultProviderConnectionsResponse",
|
|
38865
39786
|
"OnePasswordConnectionSummary",
|
|
38866
39787
|
"ProviderVaultMeta",
|
|
38867
39788
|
"RevealVaultFieldResponse",
|
|
@@ -38869,6 +39790,7 @@ var ACTION_CATALOG = [
|
|
|
38869
39790
|
"VaultFieldVersionMeta",
|
|
38870
39791
|
"VaultItem",
|
|
38871
39792
|
"VaultItemSummary",
|
|
39793
|
+
"VaultProviderConnectionSummary",
|
|
38872
39794
|
"VaultSummary"
|
|
38873
39795
|
]
|
|
38874
39796
|
},
|
|
@@ -38879,12 +39801,51 @@ var ACTION_CATALOG = [
|
|
|
38879
39801
|
"request": [],
|
|
38880
39802
|
"response": []
|
|
38881
39803
|
},
|
|
39804
|
+
{
|
|
39805
|
+
"id": "PUT /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
|
|
39806
|
+
"method": "PUT",
|
|
39807
|
+
"path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
|
|
39808
|
+
"request": [
|
|
39809
|
+
"ReplaceVaultProviderCredentialsRequest"
|
|
39810
|
+
],
|
|
39811
|
+
"response": [
|
|
39812
|
+
"DisconnectOnePasswordResponse",
|
|
39813
|
+
"DisconnectVaultProviderResponse",
|
|
39814
|
+
"InstallOnePasswordResponse",
|
|
39815
|
+
"InstallVaultProviderResponse",
|
|
39816
|
+
"ListVaultProviderConnectionsResponse",
|
|
39817
|
+
"OnePasswordConnectionSummary",
|
|
39818
|
+
"ProviderVaultMeta",
|
|
39819
|
+
"RevealVaultFieldResponse",
|
|
39820
|
+
"SessionSecretsView",
|
|
39821
|
+
"VaultFieldVersionMeta",
|
|
39822
|
+
"VaultItem",
|
|
39823
|
+
"VaultItemSummary",
|
|
39824
|
+
"VaultProviderConnectionSummary",
|
|
39825
|
+
"VaultSummary"
|
|
39826
|
+
]
|
|
39827
|
+
},
|
|
38882
39828
|
{
|
|
38883
39829
|
"id": "PUT /v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
|
|
38884
39830
|
"method": "PUT",
|
|
38885
39831
|
"path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
|
|
38886
39832
|
"request": [],
|
|
38887
|
-
"response": [
|
|
39833
|
+
"response": [
|
|
39834
|
+
"DisconnectOnePasswordResponse",
|
|
39835
|
+
"DisconnectVaultProviderResponse",
|
|
39836
|
+
"InstallOnePasswordResponse",
|
|
39837
|
+
"InstallVaultProviderResponse",
|
|
39838
|
+
"ListVaultProviderConnectionsResponse",
|
|
39839
|
+
"OnePasswordConnectionSummary",
|
|
39840
|
+
"ProviderVaultMeta",
|
|
39841
|
+
"RevealVaultFieldResponse",
|
|
39842
|
+
"SessionSecretsView",
|
|
39843
|
+
"VaultFieldVersionMeta",
|
|
39844
|
+
"VaultItem",
|
|
39845
|
+
"VaultItemSummary",
|
|
39846
|
+
"VaultProviderConnectionSummary",
|
|
39847
|
+
"VaultSummary"
|
|
39848
|
+
]
|
|
38888
39849
|
},
|
|
38889
39850
|
{
|
|
38890
39851
|
"id": "PUT /v1/workspaces/external/:workspaceSource/:workspaceExternalId/members/:subjectId/allowance",
|
|
@@ -40882,7 +41843,10 @@ var ACTION_CATALOG = [
|
|
|
40882
41843
|
],
|
|
40883
41844
|
"response": [
|
|
40884
41845
|
"DisconnectOnePasswordResponse",
|
|
41846
|
+
"DisconnectVaultProviderResponse",
|
|
40885
41847
|
"InstallOnePasswordResponse",
|
|
41848
|
+
"InstallVaultProviderResponse",
|
|
41849
|
+
"ListVaultProviderConnectionsResponse",
|
|
40886
41850
|
"OnePasswordConnectionSummary",
|
|
40887
41851
|
"ProviderVaultMeta",
|
|
40888
41852
|
"RevealVaultFieldResponse",
|
|
@@ -40890,6 +41854,7 @@ var ACTION_CATALOG = [
|
|
|
40890
41854
|
"VaultFieldVersionMeta",
|
|
40891
41855
|
"VaultItem",
|
|
40892
41856
|
"VaultItemSummary",
|
|
41857
|
+
"VaultProviderConnectionSummary",
|
|
40893
41858
|
"VaultSummary",
|
|
40894
41859
|
"Workspace"
|
|
40895
41860
|
]
|
|
@@ -41038,7 +42003,7 @@ var ACTION_CATALOG = [
|
|
|
41038
42003
|
];
|
|
41039
42004
|
|
|
41040
42005
|
// src/mcp/action-schema-imports.gen.ts
|
|
41041
|
-
import { AcceptOrganizationInvitationRequest, AcceptOrganizationRecoveryCustodyRequest, AcknowledgeStreamRequest, ActivateCodexRealtimeConnectionRequest, ActivateCompanyProfileRevisionRequest, ActivatePreferenceRegistryRevisionRequest, ActivateWorkspaceInstructionPolicyRequest, AddDocumentRequest, AddWorkspaceMemberRequest, AgentInstructionReviewRequest, AgentLearningContext, ApiIntegrationOAuthStartRequest, AppendArchivedSessionEventsRequest as AppendArchivedSessionEventsRequest2, ApplySessionGoalRevisionRequest, ApproveSlackUserLinkAccessRequest, ArtifactCatalogKind, AtlassianLifecycleActionRequest, AttachViewerRequest, BeginSessionRealtimeRequest, BrowserActionRequest, BrowserDomReadRequest, BrowserDownloadSaveRequest, BrowserOpenTargetRequest, BrowserSessionAttachmentRequest, BrowserSessionLifecycleRequest, ChangeMachineAudienceRequest, ChangePreferenceRegistryScopeRequest, ClaudeSubscriptionOAuthCompleteRequest, ClaudeSubscriptionOAuthStartRequest, ClaudeSubscriptionSetupTokenRequest as ClaudeSubscriptionSetupTokenRequest2, ClearWorkspaceAllowanceRequest, CodexAppsDesignationRequest as CodexAppsDesignationRequest2, CodexRealtimeWebrtcRequest, CodexSourceRequest as CodexSourceRequest2, CompanyProfileDiffRequest, ComputerActionRequest, ComputerNativeCallRequest, ComputerSessionAttachmentRequest, ComputerSessionLifecycleRequest, ConfigureOrganizationRecoveryPolicyRequest, CorrectPreferenceRegistryRequest, CreateAdditionalOrganizationRequest, CreateApiKeyRequest, CreateAutomationSourceRequest, CreateAutomationTriggerRequest, CreateBillingPortalRequest, CreateBrowserIdentityRequest, CreateBrowserSessionRequest, CreateCapabilityCatalogItemRequest, CreateChannelRequest, CreateCheckoutRequest, CreateComputerSessionRequest, CreateConnectionRequest, CreateDocumentBaseRequest, CreateFeedbackRequest, CreateFileUploadRequest as CreateFileUploadRequest2, CreateInteractionInterventionRequest, CreateKnowledgeDropRequest, CreateNetworkRouteRequest, CreateOrganizationApiKeyRequest, CreateOrganizationInvitationRequest, CreateOrganizationProviderCustomModelRequest, CreateOrganizationRequest, CreateOrganizationServiceAccountRequest, CreateOrganizationWebhookRequest, CreateOrganizationWorkspaceRequest, CreatePersonalApiKeyRequest, CreatePrReviewAppRegistrationRequest, CreatePrReviewRepositoryBindingRequest, CreatePreferenceRegistryProposalRequest, CreateRigRequest, CreateScheduledTaskRequest as CreateScheduledTaskRequest2, CreateSessionRequest, CreateSiteAuthConnectionRequest, CreateWorkspaceArtifactRequest, CreateWorkspaceGatewayCustomModelRequest as CreateWorkspaceGatewayCustomModelRequest2, CreateWorkspaceInstructionPolicyDraftRequest, CreateWorkspaceInstructionPolicyOnboardingProposalRequest, CreateWorkspaceOpenRouterCustomModelRequest, CreateWorkspaceOpperCustomModelRequest, CreateWorkspaceRequest, CreateWorkspaceWebhookRequest, DeactivatePreferenceRegistryRequest, DeleteOrganizationProviderCustomModelRequest, DeleteSessionQueueItemRequest, DeleteWorkspaceGatewayCustomModelRequest as DeleteWorkspaceGatewayCustomModelRequest2, DeleteWorkspaceOpenRouterCustomModelRequest, DeleteWorkspaceOpperCustomModelRequest, DeviceEnrollmentApproveRequest, DisableOrganizationRecoveryPolicyRequest, EditSessionQueueItemRequest, EnableCapabilityRequest, EndSessionRealtimeRequest, EnsureWorkspaceRequest, ExternalAuthInteractiveRequest, ExternalAuthRunRequest, FikenInstallRequest as FikenInstallRequest2, FikenOAuthStartRequest, FileListRequest as FileListRequest2, ForkSessionRequest, FsDeleteRequest, FsListBatchRequest, FsListRequest, FsMkdirRequest, FsMoveRequest, FsReadRequest, FsWriteRequest, GatewayRealtimeConnectRequest, GetMyUsageRequest, GetUsageRequest, GitDiffRequest, GitLogRequest, GitReadBatchRequest, GitShowRequest, GitStatusRequest, GrantSessionAdminAccessRequest, GrantWorkspaceCreditsRequest, ImportArchivedSessionRequest as ImportArchivedSessionRequest2, ImportLegacyWorkspaceInstructionPolicyDraftRequest, InboxItem, InboxSettings, InsightsRange, InstallApiIntegrationRequest, InstallLibrarySkillRequest, InstallPluginRequest, InstallSkillRequest, IssueUserResourceGrantRequest, KnowledgeEntryBatchReviewRequest, KnowledgeEntryListRequest as KnowledgeEntryListRequest3, KnowledgeEntryRestoreRequest, KnowledgeEntryReviewRequest, KnowledgeEntrySaveRequest as KnowledgeEntrySaveRequest2, KnowledgeReviewBatchListRequest, KnowledgeSavePreparationRequest as KnowledgeSavePreparationRequest2, MachineAudiencePreviewRequest, McpConnectionDecision, MemberNotificationsSetting, MemorySlackPublicationActionRequest, MintEnrollTokenRequest, ModelConnectionAccessPolicy, MoveDocumentRequest, MoveSessionQueueItemRequest, MutateIntegrationFacetRequest, OAuthStartRequest, OpenGeniSlackBotInstallRequest, OpenMachinePrivacySettingsRequest, OrganizationModelProviderKind, OrganizationRecoveryOperationCommandRequest, OrganizationUsagePeriod, PrepareSlackUserLinkAccessRequest, PreviewApiIntegrationRequest, PreviewPluginRequest, PreviewSkillImportRequest, ProposeRigChangeRequest, PtyCloseRequest, PtyOpenRequest, PtyResizeRequest, PtyWriteRequest, PublishBrowserRevisionRequest, PublishSandboxFileArtifactRequest, PublishWorkspaceArtifactVersionRequest, PutOrganizationCredentialProviderRequest, PutOrganizationWorkspaceMemberRequest, PutWorkspaceCredentialProviderRequest, ReclassifyDocumentAuthorityRequest, RefreshScheduledTaskAccessRequest, RejectPreferenceRegistryProposalRequest, RejectSessionGoalRevisionRequest, RemoveEnrollmentRequest, RenewSessionRealtimeRequest, ReorderChannelsRequest, ReportAuthRunRequest, ResolveInteractionInterventionRequest, RetryOrganizationUserSetupDeliveryRequest, RevokeOrganizationInvitationRequest, RevokeOrganizationModelProviderConnectionRequest, RevokeOrganizationWorkspaceMemberRequest, RollbackCompanyProfileRequest, RollbackSessionGoalRevisionRequest, RollbackWorkspaceArtifactRequest, RollbackWorkspaceInstructionPolicyRequest, RotateSessionMcpCredentialsRequest, RunDocumentDefaultCollectionBackfillRequest, SandboxRecoveryRequest, SaveAtlassianSourcesRequest as SaveAtlassianSourcesRequest2, SaveComposerDraftRequest, SaveNewSessionDraftRequest, SessionCodexAccountPinRequest, SessionControlRequest, SessionHumanInputRequest, SessionInboxMute, SessionMessageSearchRequest, SessionRetryRequest, SessionScopeSubjectId, SessionStatus, SessionVisibility, SetMemberAllowanceRequest, SetSessionModelAccountChoiceRequest, SetSessionUsageLimitRequest, SetWorkspaceAllowanceRequest, SetWorkspaceArtifactStatusRequest, SetWorkspaceDefaultRigRequest, SiteDataCollectionDefinitionRequest as SiteDataCollectionDefinitionRequest3, SiteDataImportRequest as SiteDataImportRequest3, SiteDataQueryRequest as SiteDataQueryRequest3, SiteDataWriteRequest as SiteDataWriteRequest3, SiteLimitProfile, SitePublishWarningFix as SitePublishWarningFix2, SiteSqlExportFormat as SiteSqlExportFormat3, SiteSqlImportRequest as SiteSqlImportRequest3, SiteSqlMigrationRequest as SiteSqlMigrationRequest2, SiteSqlQueryDefinitionRequest as SiteSqlQueryDefinitionRequest3, SiteSqlRunRequest as SiteSqlRunRequest3, SiteSqlSettingsRequest as SiteSqlSettingsRequest2, SiteSqlStatementRequest as SiteSqlStatementRequest3, SiteTakedownRequest, SlackUserLinkAccessMutationRequest, SocialOAuthStartRequest, StartAuthRunRequest, StartOrganizationRecoveryOperationRequest, SteerSessionQueueItemRequest, SubmitComposerDraftRequest, SubscriptionAccountRenameRequest as SubscriptionAccountRenameRequest2, SubscriptionAccountToggleRequest as SubscriptionAccountToggleRequest3, SubscriptionConnectPollRequest, SubscriptionRotationSettingsRequest as SubscriptionRotationSettingsRequest3, SupergrokConnectStartRequest, SupersedePreferenceRegistryRequest, SwapActiveSandboxRequest, SyncSessionRealtimeLedgerRequest, TerminalExecRequest, TriggerAutomationManuallyRequest, UninstallApiIntegrationRequest, UninstallPluginRequest, UninstallSkillRequest, UpdateAutomationSourceRequest, UpdateAutomationTriggerRequest, UpdateBrowserIdentityRequest, UpdateChannelRequest, UpdateCompanyProfileAgentPolicyRequest, UpdateCompanyProfileRequest, UpdateConnectionRequest, UpdateConnectorToolPermissionsRequest, UpdateGitHubActionPolicyRequest, UpdateMachineOperationPolicyRequest, UpdateMemorySlackPublicationConfigurationRequest, UpdateModelAccountPreferencesRequest, UpdateNetworkRouteRequest, UpdateOpenGeniSlackBotOrganizationAccess, UpdateOrganizationAgentAdminAccessRequest, UpdateOrganizationApiKeyRequest, UpdateOrganizationIntegrationPolicyRequest, UpdateOrganizationMcpConnectionRequest, UpdateOrganizationMemberRequest, UpdateOrganizationModelAccountSettingsRequest, UpdateOrganizationModelDefaultsRequest, UpdateOrganizationNameRequest, UpdateOrganizationPrivacySettingsRequest, UpdateOrganizationPrivateSessionSettingsRequest, UpdateOrganizationRetentionPolicyRequest, UpdateOrganizationServiceAccountRequest, UpdateOrganizationWebhookRequest, UpdateOrganizationWorkspaceRequest, UpdatePrReviewAppRegistrationRequest, UpdatePrReviewRepositoryBindingRequest, UpdateRigRequest, UpdateScheduledTaskRequest, UpdateSessionAgentRequest, UpdateSessionArchiveRequest, UpdateSessionAttentionRequest, UpdateSessionChannelRequest, UpdateSessionGoalRequest, UpdateSessionMcpApprovalPolicyRequest, UpdateSessionMcpToolPermissionsRequest, UpdateSessionPinRequest, UpdateSessionRequest, UpdateSessionRetentionRequest, UpdateSessionSkillsRequest, UpdateSessionToolPolicyRequest, UpdateSessionVisibilityRequest, UpdateSiteAuthConnectionRequest, UpdateSlackChannelRoutesRequest, UpdateVideoGenerationPolicyRequest, UpdateWorkspaceArtifactVisibilityRequest, UpdateWorkspaceMemberRequest, UpdateWorkspaceModelAccountSettingsRequest, UpdateWorkspaceModelPolicyRequest, UpdateWorkspaceRequest, UpdateWorkspaceSettingsRequest, UpdateWorkspaceWebhookRequest, UpsertIntegrationFacetRequest, UpsertOrganizationModelProviderConnectionRequest, UpsertSitePublicationRequest as UpsertSitePublicationRequest2, VerifyAuthRunRequest, ViewerHeartbeatRequest, WorkClaimSubjectType, WorkspaceInstructionPolicyDiffRequest, WorkspacePauseTimerRequest } from "@opengeni/contracts";
|
|
42006
|
+
import { AcceptOrganizationInvitationRequest, AcceptOrganizationRecoveryCustodyRequest, AcknowledgeStreamRequest, ActivateCodexRealtimeConnectionRequest, ActivateCompanyProfileRevisionRequest, ActivatePreferenceRegistryRevisionRequest, ActivateWorkspaceInstructionPolicyRequest, AddDocumentRequest, AddWorkspaceMemberRequest, AgentInstructionReviewRequest, AgentLearningContext, ApiIntegrationOAuthStartRequest, AppendArchivedSessionEventsRequest as AppendArchivedSessionEventsRequest2, ApplySessionGoalRevisionRequest, ApproveSlackUserLinkAccessRequest, ArtifactCatalogKind, AtlassianLifecycleActionRequest, AttachViewerRequest, BeginSessionRealtimeRequest, BrowserActionRequest, BrowserDomReadRequest, BrowserDownloadSaveRequest, BrowserOpenTargetRequest, BrowserSessionAttachmentRequest, BrowserSessionLifecycleRequest, ChangeMachineAudienceRequest, ChangePreferenceRegistryScopeRequest, ClaudeSubscriptionOAuthCompleteRequest, ClaudeSubscriptionOAuthStartRequest, ClaudeSubscriptionSetupTokenRequest as ClaudeSubscriptionSetupTokenRequest2, ClearWorkspaceAllowanceRequest, CodexAppsDesignationRequest as CodexAppsDesignationRequest2, CodexRealtimeWebrtcRequest, CodexSourceRequest as CodexSourceRequest2, CompanyProfileDiffRequest, ComputerActionRequest, ComputerNativeCallRequest, ComputerSessionAttachmentRequest, ComputerSessionLifecycleRequest, ConfigureOrganizationRecoveryPolicyRequest, CorrectPreferenceRegistryRequest, CreateAdditionalOrganizationRequest, CreateApiKeyRequest, CreateAutomationSourceRequest, CreateAutomationTriggerRequest, CreateBillingPortalRequest, CreateBrowserIdentityRequest, CreateBrowserSessionRequest, CreateCapabilityCatalogItemRequest, CreateChannelRequest, CreateCheckoutRequest, CreateComputerSessionRequest, CreateConnectionRequest, CreateDocumentBaseRequest, CreateFeedbackRequest, CreateFileUploadRequest as CreateFileUploadRequest2, CreateInteractionInterventionRequest, CreateKnowledgeDropRequest, CreateNetworkRouteRequest, CreateOrganizationApiKeyRequest, CreateOrganizationInvitationRequest, CreateOrganizationProviderCustomModelRequest, CreateOrganizationRequest, CreateOrganizationServiceAccountRequest, CreateOrganizationWebhookRequest, CreateOrganizationWorkspaceRequest, CreatePersonalApiKeyRequest, CreatePrReviewAppRegistrationRequest, CreatePrReviewRepositoryBindingRequest, CreatePreferenceRegistryProposalRequest, CreateRigRequest, CreateScheduledTaskRequest as CreateScheduledTaskRequest2, CreateSessionRequest, CreateSiteAuthConnectionRequest, CreateWorkspaceArtifactRequest, CreateWorkspaceGatewayCustomModelRequest as CreateWorkspaceGatewayCustomModelRequest2, CreateWorkspaceInstructionPolicyDraftRequest, CreateWorkspaceInstructionPolicyOnboardingProposalRequest, CreateWorkspaceOpenRouterCustomModelRequest, CreateWorkspaceOpperCustomModelRequest, CreateWorkspaceRequest, CreateWorkspaceWebhookRequest, DeactivatePreferenceRegistryRequest, DeleteOrganizationProviderCustomModelRequest, DeleteSessionQueueItemRequest, DeleteWorkspaceGatewayCustomModelRequest as DeleteWorkspaceGatewayCustomModelRequest2, DeleteWorkspaceOpenRouterCustomModelRequest, DeleteWorkspaceOpperCustomModelRequest, DeviceEnrollmentApproveRequest, DisableOrganizationRecoveryPolicyRequest, EditSessionQueueItemRequest, EnableCapabilityRequest, EndSessionRealtimeRequest, EnsureWorkspaceRequest, ExternalAuthInteractiveRequest, ExternalAuthRunRequest, FikenInstallRequest as FikenInstallRequest2, FikenOAuthStartRequest, FileListRequest as FileListRequest2, ForkSessionRequest, FsDeleteRequest, FsListBatchRequest, FsListRequest, FsMkdirRequest, FsMoveRequest, FsReadRequest, FsWriteRequest, GatewayRealtimeConnectRequest, GetMyUsageRequest, GetUsageRequest, GitDiffRequest, GitLogRequest, GitReadBatchRequest, GitShowRequest, GitStatusRequest, GrantSessionAdminAccessRequest, GrantWorkspaceCreditsRequest, ImportArchivedSessionRequest as ImportArchivedSessionRequest2, ImportLegacyWorkspaceInstructionPolicyDraftRequest, InboxItem, InboxSettings, InsightsRange, InstallApiIntegrationRequest, InstallLibrarySkillRequest, InstallPluginRequest, InstallSkillRequest, InstallVaultProviderRequest as InstallVaultProviderRequest2, IssueUserResourceGrantRequest, KnowledgeEntryBatchReviewRequest, KnowledgeEntryListRequest as KnowledgeEntryListRequest3, KnowledgeEntryRestoreRequest, KnowledgeEntryReviewRequest, KnowledgeEntrySaveRequest as KnowledgeEntrySaveRequest2, KnowledgeReviewBatchListRequest, KnowledgeSavePreparationRequest as KnowledgeSavePreparationRequest2, MachineAudiencePreviewRequest, McpConnectionDecision, MemberNotificationsSetting, MemorySlackPublicationActionRequest, MintEnrollTokenRequest, ModelConnectionAccessPolicy, MoveDocumentRequest, MoveSessionQueueItemRequest, MutateIntegrationFacetRequest, OAuthStartRequest, OpenGeniSlackBotInstallRequest, OpenMachinePrivacySettingsRequest, OrganizationModelProviderKind, OrganizationRecoveryOperationCommandRequest, OrganizationUsagePeriod, PrepareSlackUserLinkAccessRequest, PreviewApiIntegrationRequest, PreviewPluginRequest, PreviewSkillImportRequest, ProposeRigChangeRequest, PtyCloseRequest, PtyOpenRequest, PtyResizeRequest, PtyWriteRequest, PublishBrowserRevisionRequest, PublishSandboxFileArtifactRequest, PublishWorkspaceArtifactVersionRequest, PutOrganizationCredentialProviderRequest, PutOrganizationWorkspaceMemberRequest, PutWorkspaceCredentialProviderRequest, ReclassifyDocumentAuthorityRequest, RefreshScheduledTaskAccessRequest, RejectPreferenceRegistryProposalRequest, RejectSessionGoalRevisionRequest, RemoveEnrollmentRequest, RenewSessionRealtimeRequest, ReorderChannelsRequest, ReplaceVaultProviderCredentialsRequest as ReplaceVaultProviderCredentialsRequest2, ReportAuthRunRequest, ResolveInteractionInterventionRequest, RetryOrganizationUserSetupDeliveryRequest, RevokeOrganizationInvitationRequest, RevokeOrganizationModelProviderConnectionRequest, RevokeOrganizationWorkspaceMemberRequest, RollbackCompanyProfileRequest, RollbackSessionGoalRevisionRequest, RollbackWorkspaceArtifactRequest, RollbackWorkspaceInstructionPolicyRequest, RotateSessionMcpCredentialsRequest, RunDocumentDefaultCollectionBackfillRequest, SandboxRecoveryRequest, SaveAtlassianSourcesRequest as SaveAtlassianSourcesRequest2, SaveComposerDraftRequest, SaveNewSessionDraftRequest, SessionCodexAccountPinRequest, SessionControlRequest, SessionHumanInputRequest, SessionInboxMute, SessionMessageSearchRequest, SessionRetryRequest, SessionScopeSubjectId, SessionStatus, SessionVisibility, SetMemberAllowanceRequest, SetSessionModelAccountChoiceRequest, SetSessionUsageLimitRequest, SetWorkspaceAllowanceRequest, SetWorkspaceArtifactStatusRequest, SetWorkspaceDefaultRigRequest, SiteDataCollectionDefinitionRequest as SiteDataCollectionDefinitionRequest3, SiteDataImportRequest as SiteDataImportRequest3, SiteDataQueryRequest as SiteDataQueryRequest3, SiteDataWriteRequest as SiteDataWriteRequest3, SiteLimitProfile, SitePublishWarningFix as SitePublishWarningFix2, SiteSqlExportFormat as SiteSqlExportFormat3, SiteSqlImportRequest as SiteSqlImportRequest3, SiteSqlMigrationRequest as SiteSqlMigrationRequest2, SiteSqlQueryDefinitionRequest as SiteSqlQueryDefinitionRequest3, SiteSqlRunRequest as SiteSqlRunRequest3, SiteSqlSettingsRequest as SiteSqlSettingsRequest2, SiteSqlStatementRequest as SiteSqlStatementRequest3, SiteTakedownRequest, SlackUserLinkAccessMutationRequest, SocialOAuthStartRequest, StartAuthRunRequest, StartOrganizationRecoveryOperationRequest, SteerSessionQueueItemRequest, SubmitComposerDraftRequest, SubscriptionAccountRenameRequest as SubscriptionAccountRenameRequest2, SubscriptionAccountToggleRequest as SubscriptionAccountToggleRequest3, SubscriptionConnectPollRequest, SubscriptionRotationSettingsRequest as SubscriptionRotationSettingsRequest3, SupergrokConnectStartRequest, SupersedePreferenceRegistryRequest, SwapActiveSandboxRequest, SyncSessionRealtimeLedgerRequest, TerminalExecRequest, TriggerAutomationManuallyRequest, UninstallApiIntegrationRequest, UninstallPluginRequest, UninstallSkillRequest, UpdateAutomationSourceRequest, UpdateAutomationTriggerRequest, UpdateBrowserIdentityRequest, UpdateChannelRequest, UpdateCompanyProfileAgentPolicyRequest, UpdateCompanyProfileRequest, UpdateConnectionRequest, UpdateConnectorToolPermissionsRequest, UpdateGitHubActionPolicyRequest, UpdateMachineOperationPolicyRequest, UpdateMemorySlackPublicationConfigurationRequest, UpdateModelAccountPreferencesRequest, UpdateNetworkRouteRequest, UpdateOpenGeniSlackBotOrganizationAccess, UpdateOrganizationAgentAdminAccessRequest, UpdateOrganizationApiKeyRequest, UpdateOrganizationIntegrationPolicyRequest, UpdateOrganizationMcpConnectionRequest, UpdateOrganizationMemberRequest, UpdateOrganizationModelAccountSettingsRequest, UpdateOrganizationModelDefaultsRequest, UpdateOrganizationNameRequest, UpdateOrganizationPrivacySettingsRequest, UpdateOrganizationPrivateSessionSettingsRequest, UpdateOrganizationRetentionPolicyRequest, UpdateOrganizationServiceAccountRequest, UpdateOrganizationWebhookRequest, UpdateOrganizationWorkspaceRequest, UpdatePrReviewAppRegistrationRequest, UpdatePrReviewRepositoryBindingRequest, UpdateRigRequest, UpdateScheduledTaskRequest, UpdateSessionAgentRequest, UpdateSessionArchiveRequest, UpdateSessionAttentionRequest, UpdateSessionChannelRequest, UpdateSessionGoalRequest, UpdateSessionMcpApprovalPolicyRequest, UpdateSessionMcpToolPermissionsRequest, UpdateSessionPinRequest, UpdateSessionRequest, UpdateSessionRetentionRequest, UpdateSessionSkillsRequest, UpdateSessionToolPolicyRequest, UpdateSessionVisibilityRequest, UpdateSiteAuthConnectionRequest, UpdateSlackChannelRoutesRequest, UpdateVideoGenerationPolicyRequest, UpdateWorkspaceArtifactVisibilityRequest, UpdateWorkspaceMemberRequest, UpdateWorkspaceModelAccountSettingsRequest, UpdateWorkspaceModelPolicyRequest, UpdateWorkspaceRequest, UpdateWorkspaceSettingsRequest, UpdateWorkspaceWebhookRequest, UpsertIntegrationFacetRequest, UpsertOrganizationModelProviderConnectionRequest, UpsertSitePublicationRequest as UpsertSitePublicationRequest2, VerifyAuthRunRequest, ViewerHeartbeatRequest, WorkClaimSubjectType, WorkspaceInstructionPolicyDiffRequest, WorkspacePauseTimerRequest } from "@opengeni/contracts";
|
|
41042
42007
|
var ACTION_REQUEST_SCHEMAS = {
|
|
41043
42008
|
AcceptOrganizationInvitationRequest,
|
|
41044
42009
|
AcceptOrganizationRecoveryCustodyRequest,
|
|
@@ -41166,6 +42131,7 @@ var ACTION_REQUEST_SCHEMAS = {
|
|
|
41166
42131
|
InstallLibrarySkillRequest,
|
|
41167
42132
|
InstallPluginRequest,
|
|
41168
42133
|
InstallSkillRequest,
|
|
42134
|
+
InstallVaultProviderRequest: InstallVaultProviderRequest2,
|
|
41169
42135
|
IssueUserResourceGrantRequest,
|
|
41170
42136
|
KnowledgeEntryBatchReviewRequest,
|
|
41171
42137
|
KnowledgeEntryListRequest: KnowledgeEntryListRequest3,
|
|
@@ -41211,6 +42177,7 @@ var ACTION_REQUEST_SCHEMAS = {
|
|
|
41211
42177
|
RemoveEnrollmentRequest,
|
|
41212
42178
|
RenewSessionRealtimeRequest,
|
|
41213
42179
|
ReorderChannelsRequest,
|
|
42180
|
+
ReplaceVaultProviderCredentialsRequest: ReplaceVaultProviderCredentialsRequest2,
|
|
41214
42181
|
ReportAuthRunRequest,
|
|
41215
42182
|
ResolveInteractionInterventionRequest,
|
|
41216
42183
|
RetryOrganizationUserSetupDeliveryRequest,
|
|
@@ -41348,6 +42315,31 @@ var PROVIDERS = {
|
|
|
41348
42315
|
supergrok: "SuperGrok (xAI)"
|
|
41349
42316
|
};
|
|
41350
42317
|
var RULES = [
|
|
42318
|
+
{
|
|
42319
|
+
method: "GET",
|
|
42320
|
+
pattern: /\/vault-providers\/connections$/,
|
|
42321
|
+
text: () => "List connected password managers and deployment availability: 1Password, Proton Pass, Keeper, Bitwarden and external vaults. Returns connection metadata and setup status, not secret values; does not contact providers."
|
|
42322
|
+
},
|
|
42323
|
+
{
|
|
42324
|
+
method: "POST",
|
|
42325
|
+
pattern: /\/vault-providers\/connections$/,
|
|
42326
|
+
text: () => "Connect Proton Pass, Keeper Secrets Manager, a customer-controlled Bitwarden bridge or an external vault. Set ownership and provider-specific credentials. Saved-but-pending setup returns a connection ID; register it with a remote host if needed, then verify using the saved credentials."
|
|
42327
|
+
},
|
|
42328
|
+
{
|
|
42329
|
+
method: "PUT",
|
|
42330
|
+
pattern: /\/vault-providers\/connections\/:connectionId\/credentials$/,
|
|
42331
|
+
text: () => "Replace a connected password manager's credentials without changing its vault links. The same upstream account must verify successfully; pending verification keeps the previously working credential. Never repeat a consumed Keeper one-time token."
|
|
42332
|
+
},
|
|
42333
|
+
{
|
|
42334
|
+
method: "POST",
|
|
42335
|
+
pattern: /\/vault-providers\/connections\/:connectionId\/verify$/,
|
|
42336
|
+
text: () => "Finish a pending vault connection using its already saved credentials. Checks the provider and discovers available vaults without resubmitting a Keeper bootstrap token or remote signing key."
|
|
42337
|
+
},
|
|
42338
|
+
{
|
|
42339
|
+
method: "DELETE",
|
|
42340
|
+
pattern: /\/vault-providers\/connections\/:connectionId$/,
|
|
42341
|
+
text: () => "Disconnect a password manager and unlink its local vault mirrors. Removes Opengeni's stored access; never deletes upstream vaults or items."
|
|
42342
|
+
},
|
|
41351
42343
|
{
|
|
41352
42344
|
method: "GET",
|
|
41353
42345
|
pattern: /\/(codex|claude|supergrok)\/accounts$/,
|
|
@@ -48129,7 +49121,9 @@ function workspaceGatewaySecretArguments(input) {
|
|
|
48129
49121
|
workspaceGatewaySecretPrincipal(input.grant, site),
|
|
48130
49122
|
{
|
|
48131
49123
|
capabilityEnabled: true,
|
|
48132
|
-
...input.providersForSubject ? {
|
|
49124
|
+
...input.providersForSubject ? {
|
|
49125
|
+
providersForSubject: (subjectId) => input.providersForSubject(subjectId, site)
|
|
49126
|
+
} : {}
|
|
48133
49127
|
}
|
|
48134
49128
|
);
|
|
48135
49129
|
const hook = createSecretArgumentResolver({
|
|
@@ -48854,7 +49848,11 @@ async function prepareWorkspaceToolGatewayForGrantInternal(routeDeps, grant, all
|
|
|
48854
49848
|
db: routeDeps.db,
|
|
48855
49849
|
settings: gatewaySettings,
|
|
48856
49850
|
grant,
|
|
48857
|
-
providersForSubject: (subjectId) => vaultProviderRegistryFor(routeDeps, {
|
|
49851
|
+
providersForSubject: (subjectId, site) => vaultProviderRegistryFor(routeDeps, {
|
|
49852
|
+
workspaceId: grant.workspaceId,
|
|
49853
|
+
subjectId,
|
|
49854
|
+
...site ? { executionContext: { siteId: site.siteId } } : {}
|
|
49855
|
+
})
|
|
48858
49856
|
}),
|
|
48859
49857
|
mapDefinition: (definition) => {
|
|
48860
49858
|
if (options.target && definition.approvalAuthorityDigest === void 0) {
|
|
@@ -51271,7 +52269,7 @@ import {
|
|
|
51271
52269
|
} from "@opengeni/contracts";
|
|
51272
52270
|
import {
|
|
51273
52271
|
DestinationPolicyError as DestinationPolicyError2,
|
|
51274
|
-
pinnedFetch as
|
|
52272
|
+
pinnedFetch as pinnedFetch5
|
|
51275
52273
|
} from "@opengeni/network";
|
|
51276
52274
|
var RESPONSE_EXCERPT_BYTES = 1024;
|
|
51277
52275
|
var PROVIDER_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -51393,7 +52391,7 @@ async function sendIntegrationEndpointTest(input) {
|
|
|
51393
52391
|
const base = { request: input.body, credentials: null };
|
|
51394
52392
|
let response;
|
|
51395
52393
|
try {
|
|
51396
|
-
response = await (input.fetch ??
|
|
52394
|
+
response = await (input.fetch ?? pinnedFetch5)(
|
|
51397
52395
|
input.url,
|
|
51398
52396
|
{
|
|
51399
52397
|
method: "POST",
|
|
@@ -88509,6 +89507,7 @@ import {
|
|
|
88509
89507
|
listOwnConnectionAccountsForGrant,
|
|
88510
89508
|
hasReservedFikenMetadata,
|
|
88511
89509
|
ONEPASSWORD_CREDENTIAL_ROLE as ONEPASSWORD_CREDENTIAL_ROLE2,
|
|
89510
|
+
EXTERNAL_VAULT_CREDENTIAL_ROLE,
|
|
88512
89511
|
hasReservedOpenGeniSlackBotMetadata,
|
|
88513
89512
|
isOpenGeniSlackBotConnection as isOpenGeniSlackBotConnection3,
|
|
88514
89513
|
openGeniSlackBotMetadata as openGeniSlackBotMetadata2,
|
|
@@ -88574,7 +89573,7 @@ import {
|
|
|
88574
89573
|
import { createSignedState as createSignedState10, readSignedState as readSignedState9 } from "@opengeni/github";
|
|
88575
89574
|
import {
|
|
88576
89575
|
OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES5,
|
|
88577
|
-
pinnedFetch as
|
|
89576
|
+
pinnedFetch as pinnedFetch6,
|
|
88578
89577
|
readResponseJsonBounded as readResponseJsonBounded10
|
|
88579
89578
|
} from "@opengeni/network";
|
|
88580
89579
|
import { HTTPException as HTTPException62 } from "hono/http-exception";
|
|
@@ -89145,7 +90144,7 @@ async function verifyProviderIdentity(deps, definition, token) {
|
|
|
89145
90144
|
}
|
|
89146
90145
|
async function providerFetch3(deps, url, init) {
|
|
89147
90146
|
try {
|
|
89148
|
-
return await
|
|
90147
|
+
return await pinnedFetch6(
|
|
89149
90148
|
url,
|
|
89150
90149
|
{
|
|
89151
90150
|
...init,
|
|
@@ -90630,6 +91629,7 @@ function registerConnectionRoutes(app, deps) {
|
|
|
90630
91629
|
c.req.param("connectionId"),
|
|
90631
91630
|
grant.subjectId
|
|
90632
91631
|
);
|
|
91632
|
+
assertNotReservedExternalVaultMetadata(existing?.metadata);
|
|
90633
91633
|
if (existing && isOpenGeniSlackBotConnection3(existing)) {
|
|
90634
91634
|
const destination = ConnectorDocumentDestinationSelection.safeParse(
|
|
90635
91635
|
payload.metadata?.documentDestination
|
|
@@ -90863,6 +91863,7 @@ function registerConnectionRoutes(app, deps) {
|
|
|
90863
91863
|
if (!existing) {
|
|
90864
91864
|
throw new HTTPException64(404, { message: "connection not found" });
|
|
90865
91865
|
}
|
|
91866
|
+
assertNotReservedExternalVaultMetadata(existing.metadata);
|
|
90866
91867
|
const expectedVersion = c.req.query("expectedVersion");
|
|
90867
91868
|
if (expectedVersion !== void 0) {
|
|
90868
91869
|
if (!/^[1-9]\d*$/.test(expectedVersion) || !Number.isSafeInteger(Number(expectedVersion))) {
|
|
@@ -91305,12 +92306,20 @@ function assertNotReservedFikenMetadata(metadata) {
|
|
|
91305
92306
|
}
|
|
91306
92307
|
}
|
|
91307
92308
|
function assertNotReservedOnePasswordMetadata(metadata) {
|
|
92309
|
+
assertNotReservedExternalVaultMetadata(metadata);
|
|
91308
92310
|
if (metadata?.credentialRole === ONEPASSWORD_CREDENTIAL_ROLE2) {
|
|
91309
92311
|
throw new HTTPException64(422, {
|
|
91310
92312
|
message: "1Password connections are created by the verified 1Password install flow"
|
|
91311
92313
|
});
|
|
91312
92314
|
}
|
|
91313
92315
|
}
|
|
92316
|
+
function assertNotReservedExternalVaultMetadata(metadata) {
|
|
92317
|
+
if (metadata?.credentialRole === EXTERNAL_VAULT_CREDENTIAL_ROLE || metadata?.vaultProvider !== void 0) {
|
|
92318
|
+
throw new HTTPException64(422, {
|
|
92319
|
+
message: "Vault connections are managed through the verified vault connection flow"
|
|
92320
|
+
});
|
|
92321
|
+
}
|
|
92322
|
+
}
|
|
91314
92323
|
function assertNotReservedApiIntegrationOAuthMetadata(metadata) {
|
|
91315
92324
|
if (metadata?.credentialRole === API_INTEGRATION_OAUTH_CREDENTIAL_ROLE3) {
|
|
91316
92325
|
throw new HTTPException64(422, {
|
|
@@ -97677,7 +98686,7 @@ import {
|
|
|
97677
98686
|
requireSessionAuthorization as requireSessionAuthorization11,
|
|
97678
98687
|
SessionAuthorizationDeniedError as SessionAuthorizationDeniedError10,
|
|
97679
98688
|
SessionAuthorizationUnavailableError as SessionAuthorizationUnavailableError9,
|
|
97680
|
-
VaultError as
|
|
98689
|
+
VaultError as VaultError3,
|
|
97681
98690
|
vaultErrorFromDatabase as vaultErrorFromDatabase4
|
|
97682
98691
|
} from "@opengeni/core";
|
|
97683
98692
|
var PREFIX = "/v1/workspaces/:workspaceId";
|
|
@@ -97696,7 +98705,7 @@ function requireRevealAuthority(grant) {
|
|
|
97696
98705
|
return;
|
|
97697
98706
|
}
|
|
97698
98707
|
if (grant.principalKind !== "human_session" || grant.serviceInitiator) {
|
|
97699
|
-
throw new
|
|
98708
|
+
throw new VaultError3(
|
|
97700
98709
|
"vault_reveal_requires_human",
|
|
97701
98710
|
"revealing a value needs a person signed in, or an API key with secrets:read"
|
|
97702
98711
|
);
|
|
@@ -97762,7 +98771,7 @@ function registerVaultRoutes(app, deps) {
|
|
|
97762
98771
|
async function itemInVault(actor, workspaceId, vaultId, itemId) {
|
|
97763
98772
|
const item = await vaults().getItem(actor, workspaceId, itemId);
|
|
97764
98773
|
if (item.vaultId !== vaultId) {
|
|
97765
|
-
throw new
|
|
98774
|
+
throw new VaultError3("vault_item_not_found", "item not found", { itemId });
|
|
97766
98775
|
}
|
|
97767
98776
|
return item;
|
|
97768
98777
|
}
|
|
@@ -97908,7 +98917,9 @@ function registerVaultRoutes(app, deps) {
|
|
|
97908
98917
|
const payload = await parseRequestJson(c, MoveVaultItemRequest);
|
|
97909
98918
|
const itemId = c.req.param("itemId");
|
|
97910
98919
|
await itemInVault(actor, workspaceId, c.req.param("vaultId"), itemId);
|
|
97911
|
-
return c.json(
|
|
98920
|
+
return c.json(
|
|
98921
|
+
await vaultsWithProviders(actor, workspaceId).moveItem(actor, workspaceId, itemId, payload)
|
|
98922
|
+
);
|
|
97912
98923
|
})
|
|
97913
98924
|
);
|
|
97914
98925
|
app.post(
|
|
@@ -97947,7 +98958,7 @@ function registerVaultRoutes(app, deps) {
|
|
|
97947
98958
|
);
|
|
97948
98959
|
const fieldId = c.req.param("fieldId");
|
|
97949
98960
|
if (!item.fields.some((field) => field.id === fieldId)) {
|
|
97950
|
-
throw new
|
|
98961
|
+
throw new VaultError3("vault_field_not_found", "field not found", { fieldId });
|
|
97951
98962
|
}
|
|
97952
98963
|
return c.json({ versions: await vaults().listFieldVersions(actor, workspaceId, fieldId) });
|
|
97953
98964
|
})
|
|
@@ -106929,7 +107940,7 @@ function createVaultInteractionSecretsPort(deps) {
|
|
|
106929
107940
|
return createSecretResolver2({ db: deps.db, encryptionKey }, principal, {
|
|
106930
107941
|
capabilityEnabled: await secretsEnabled(principal),
|
|
106931
107942
|
...providersFor ? {
|
|
106932
|
-
providersForSubject: (subjectId) => providersFor(principal.workspaceId, subjectId)
|
|
107943
|
+
providersForSubject: (subjectId) => providersFor(principal.workspaceId, subjectId, principal)
|
|
106933
107944
|
} : {}
|
|
106934
107945
|
});
|
|
106935
107946
|
},
|
|
@@ -111181,7 +112192,7 @@ import { HTTPException as HTTPException94 } from "hono/http-exception";
|
|
|
111181
112192
|
|
|
111182
112193
|
// src/integrations/pr-review-provider.ts
|
|
111183
112194
|
import {
|
|
111184
|
-
pinnedFetch as
|
|
112195
|
+
pinnedFetch as pinnedFetch7,
|
|
111185
112196
|
readResponseJsonBounded as readResponseJsonBounded12,
|
|
111186
112197
|
readResponseTextBounded as readResponseTextBounded3
|
|
111187
112198
|
} from "@opengeni/network";
|
|
@@ -111273,7 +112284,7 @@ async function providerJson2(input, url, headers) {
|
|
|
111273
112284
|
headers: { accept: "application/json", ...headers },
|
|
111274
112285
|
signal
|
|
111275
112286
|
};
|
|
111276
|
-
response = input.fetchImpl ? await input.fetchImpl(url, requestInit) : await
|
|
112287
|
+
response = input.fetchImpl ? await input.fetchImpl(url, requestInit) : await pinnedFetch7(url, requestInit, input.settings, {
|
|
111277
112288
|
label: `${input.provider} PR Review repository verification`,
|
|
111278
112289
|
requireHttpsOutsideLocalTest: true
|
|
111279
112290
|
});
|
|
@@ -144701,7 +145712,17 @@ function createAppComposition(deps) {
|
|
|
144701
145712
|
const interactionSecrets = createVaultInteractionSecretsPort({
|
|
144702
145713
|
db: routeDeps.db,
|
|
144703
145714
|
encryptionKey: environmentsEncryptionKeyBytes14(routeDeps.settings) ?? null,
|
|
144704
|
-
providersFor: (workspaceId, subjectId) => vaultProviderRegistryFor(routeDeps, {
|
|
145715
|
+
providersFor: (workspaceId, subjectId, principal) => vaultProviderRegistryFor(routeDeps, {
|
|
145716
|
+
workspaceId,
|
|
145717
|
+
subjectId,
|
|
145718
|
+
...principal ? {
|
|
145719
|
+
executionContext: {
|
|
145720
|
+
sessionId: principal.sessionId,
|
|
145721
|
+
turnId: principal.turnId,
|
|
145722
|
+
attemptId: principal.attemptId
|
|
145723
|
+
}
|
|
145724
|
+
} : {}
|
|
145725
|
+
})
|
|
144705
145726
|
});
|
|
144706
145727
|
registerBrowserSessionRoutes(app, routeDeps, { interactionSecrets });
|
|
144707
145728
|
registerComputerSessionRoutes(app, routeDeps, { interactionSecrets });
|
|
@@ -146289,6 +147310,7 @@ export {
|
|
|
146289
147310
|
apiRequestBindingsForTransportPeer,
|
|
146290
147311
|
reconcileScreenControlOnHello,
|
|
146291
147312
|
withAccessGrantSessionRlsContext,
|
|
147313
|
+
closeNativeExternalVaultProviders,
|
|
146292
147314
|
SlackBotProviderError,
|
|
146293
147315
|
createOpenGeniSlackBotInteractionClient,
|
|
146294
147316
|
startTemporalScheduleCleanupPump,
|
|
@@ -146329,4 +147351,4 @@ export {
|
|
|
146329
147351
|
withDefaultEnabledCapabilityMcpTools,
|
|
146330
147352
|
workflowIdForSession4 as workflowIdForSession
|
|
146331
147353
|
};
|
|
146332
|
-
//# sourceMappingURL=chunk-
|
|
147354
|
+
//# sourceMappingURL=chunk-PQBHZ2YH.js.map
|