@substrat-run/control-plane-api 0.167.1 → 0.170.0
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/api.d.ts +6 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +31 -13
- package/dist/api.js.map +1 -1
- package/dist/connection-binding-relay.d.ts +44 -0
- package/dist/connection-binding-relay.d.ts.map +1 -0
- package/dist/connection-binding-relay.js +202 -0
- package/dist/connection-binding-relay.js.map +1 -0
- package/dist/connection-relay.d.ts +20 -3
- package/dist/connection-relay.d.ts.map +1 -1
- package/dist/connection-relay.js +28 -3
- package/dist/connection-relay.js.map +1 -1
- package/dist/deploy.d.ts +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +1 -1
- package/dist/deploy.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/source-builds.d.ts.map +1 -1
- package/dist/source-builds.js +37 -30
- package/dist/source-builds.js.map +1 -1
- package/dist/vertical-client.d.ts +10 -0
- package/dist/vertical-client.d.ts.map +1 -1
- package/dist/vertical-client.js +12 -0
- package/dist/vertical-client.js.map +1 -1
- package/dist/vertical-connectors.d.ts +1 -1
- package/dist/vertical-connectors.d.ts.map +1 -1
- package/dist/vertical-connectors.js +20 -5
- package/dist/vertical-connectors.js.map +1 -1
- package/package.json +8 -8
package/dist/api.d.ts
CHANGED
|
@@ -41,6 +41,12 @@ export interface ConnectionInspector {
|
|
|
41
41
|
vertical: string;
|
|
42
42
|
}) => Promise<ConnectionScopeBinding>;
|
|
43
43
|
bindings?: (host: ScopeHost, connection: Connection) => Promise<ConnectionScopeBinding[]>;
|
|
44
|
+
/**
|
|
45
|
+
* #2732: drop `connection`'s binding to one scope, `bindScope`'s inverse. Idempotent; what the
|
|
46
|
+
* scope already landed stays. The key the binding held is the caller's to take back
|
|
47
|
+
* (`revokeFromConnection`).
|
|
48
|
+
*/
|
|
49
|
+
unbindScope?: (host: ScopeHost, connection: Connection, scopeId: ScopeId) => Promise<void>;
|
|
44
50
|
probe?: (host: ScopeHost, connection: Connection) => Promise<ConnectionProbe>;
|
|
45
51
|
activity?: (host: ScopeHost, connection: Connection, opts: {
|
|
46
52
|
live: boolean;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -31,7 +31,7 @@ import { NON_PROBLEM_REFUSAL, coded, mapError, relayed } from './errors.js';
|
|
|
31
31
|
import { maskDump, maskRecords } from './mask.js';
|
|
32
32
|
import { createPseudonymizer } from './pseudonymize.js';
|
|
33
33
|
import { openDump, sealDump } from './seal.js';
|
|
34
|
-
import { assertSandboxContract, verticalUploadBindings, migrationsDigestBindings, deployManifest, storedDeployManifest, pushedOwnerGrantProblems, pushedConnectorProblems, pushedModuleRegistryProblems, pushedPermissionRegistry, deploymentRefFor, stableDeploymentRefFor, nextMigrationTag, upstreamStatusOf, } from './deploy.js';
|
|
34
|
+
import { assertSandboxContract, verticalUploadBindings, migrationsDigestBindings, deployManifest, storedDeployManifest, pushedOwnerGrantProblems, pushedConnectorProblems, pushedModuleRegistryProblems, pushedLandingProblems, pushedPermissionRegistry, deploymentRefFor, stableDeploymentRefFor, nextMigrationTag, upstreamStatusOf, } from './deploy.js';
|
|
35
35
|
/**
|
|
36
36
|
* Answer with a problem document (#113 phase 4).
|
|
37
37
|
*
|
|
@@ -2351,7 +2351,10 @@ export function createControlPlaneApi(options) {
|
|
|
2351
2351
|
return refuse(c, 'validation_failed', 'body tenantId disagrees with the route tenant');
|
|
2352
2352
|
}
|
|
2353
2353
|
try {
|
|
2354
|
-
return c.json(
|
|
2354
|
+
return c.json(
|
|
2355
|
+
// Always tenant-owned (#2732): a scope's own connection is made only by that scope, through
|
|
2356
|
+
// the vertical's relay.
|
|
2357
|
+
await relayConnectionUpsert(c.var.host, c.get('actor'), { ...body, tenantId, owner: 'tenant' }, {
|
|
2355
2358
|
probeCandidate,
|
|
2356
2359
|
prepareCandidate,
|
|
2357
2360
|
...(options.verticalConnectorDeclaration ? { declarationOf: options.verticalConnectorDeclaration } : {}),
|
|
@@ -2574,7 +2577,8 @@ export function createControlPlaneApi(options) {
|
|
|
2574
2577
|
*/
|
|
2575
2578
|
app.post('/tenants/:tenantId/connections/:id/verify', async (c) => {
|
|
2576
2579
|
const row = await inspectableConnection(c);
|
|
2577
|
-
|
|
2580
|
+
// #2732: a connector opens the tenant's connection for a provider, so a scope's own reads as absent here.
|
|
2581
|
+
if (!row || row.ownerScopeId !== null)
|
|
2578
2582
|
return refuse(c, 'not_found', 'unknown connection');
|
|
2579
2583
|
const probe = inspectorOf(row)?.probe;
|
|
2580
2584
|
if (!probe) {
|
|
@@ -2681,7 +2685,8 @@ export function createControlPlaneApi(options) {
|
|
|
2681
2685
|
*/
|
|
2682
2686
|
app.get('/tenants/:tenantId/connections/:id/credential', async (c) => {
|
|
2683
2687
|
const row = await inspectableConnection(c);
|
|
2684
|
-
|
|
2688
|
+
// #2732: as /verify, a scope's own connection reads as absent until its own read exists.
|
|
2689
|
+
if (!row || row.ownerScopeId !== null)
|
|
2685
2690
|
return refuse(c, 'not_found', 'unknown connection');
|
|
2686
2691
|
const credential = inspectorOf(row)?.credential;
|
|
2687
2692
|
if (!credential) {
|
|
@@ -7323,6 +7328,10 @@ export function createControlPlaneApi(options) {
|
|
|
7323
7328
|
const moduleProblems = pushedModuleRegistryProblems(checked.data.modules, registry.data);
|
|
7324
7329
|
if (moduleProblems.length > 0)
|
|
7325
7330
|
return refuseManifest({ path: ['registry', 'permissions'], message: moduleProblems.join('; ') });
|
|
7331
|
+
// #2732: a landing's mode as the modules declare it, so an on-request one is never stored as every-install.
|
|
7332
|
+
const landingProblems = pushedLandingProblems(checked.data.modules, registry.data);
|
|
7333
|
+
if (landingProblems.length > 0)
|
|
7334
|
+
return refuseManifest({ path: ['registry', 'connections'], message: landingProblems.join('; ') });
|
|
7326
7335
|
}
|
|
7327
7336
|
// #2430: an owner grant is a person's, so it holds no key the registry reserves.
|
|
7328
7337
|
const ownerGrants = pushedOwnerGrantProblems(checked.data);
|
|
@@ -8287,19 +8296,23 @@ export function createControlPlaneApi(options) {
|
|
|
8287
8296
|
if (!c.req.header('content-type')?.startsWith('application/json')) {
|
|
8288
8297
|
return refuseStatus(c, 415, 'submit source JSON; client-built module uploads are no longer accepted');
|
|
8289
8298
|
}
|
|
8290
|
-
|
|
8299
|
+
// The snapshot can be tens of MB, and a build runs for minutes. An async frame keeps a
|
|
8300
|
+
// local alive across every later await, used or not, so the request is read past Hono's
|
|
8301
|
+
// body cache and `input` is dropped once handed over: only its scalars outlive the build.
|
|
8302
|
+
let input = sourceBuildRequest.parse(JSON.parse(await c.req.raw.text()));
|
|
8303
|
+
const { tenant: pin, allowFork } = input;
|
|
8291
8304
|
const bare = c.req.param('slug');
|
|
8292
8305
|
let sourceSlug = bare;
|
|
8293
8306
|
let sourceTenant = null;
|
|
8294
8307
|
if (p.kind === 'builder') {
|
|
8295
|
-
if (
|
|
8296
|
-
return refuse(c, 'forbidden', `push is pinned to workspace '${
|
|
8308
|
+
if (pin && pin !== p.tenantId && pin !== p.tenantSlug) {
|
|
8309
|
+
return refuse(c, 'forbidden', `push is pinned to workspace '${pin}' but this session acts for '${p.tenantSlug}'`);
|
|
8297
8310
|
}
|
|
8298
8311
|
sourceTenant = p.tenantId;
|
|
8299
8312
|
sourceSlug = effectiveSlug(p, bare);
|
|
8300
8313
|
}
|
|
8301
|
-
else if (
|
|
8302
|
-
const tenant = (await c.var.admin.listTenants(c.get('actor'))).find((t) => t.id ===
|
|
8314
|
+
else if (pin) {
|
|
8315
|
+
const tenant = (await c.var.admin.listTenants(c.get('actor'))).find((t) => t.id === pin || t.slug === pin);
|
|
8303
8316
|
if (!tenant)
|
|
8304
8317
|
return refuse(c, 'not_found', 'unknown workspace');
|
|
8305
8318
|
sourceTenant = tenant.id;
|
|
@@ -8313,14 +8326,16 @@ export function createControlPlaneApi(options) {
|
|
|
8313
8326
|
if (platformScriptCollision(sourceSlug))
|
|
8314
8327
|
return refuseStatus(c, 422, 'reserved platform script name');
|
|
8315
8328
|
requestedVersion = input.version;
|
|
8316
|
-
|
|
8329
|
+
const building = options.sourceBuilds.build(sourceTenant ?? 'platform', sourceSlug, input);
|
|
8330
|
+
input = undefined;
|
|
8331
|
+
built = await building;
|
|
8317
8332
|
form = built.form;
|
|
8318
8333
|
// Addressing is the authenticated caller's, never a field emitted by project code.
|
|
8319
8334
|
form.delete('tenant');
|
|
8320
|
-
if (
|
|
8321
|
-
form.set('tenant',
|
|
8335
|
+
if (pin)
|
|
8336
|
+
form.set('tenant', pin);
|
|
8322
8337
|
form.delete('allowFork');
|
|
8323
|
-
if (
|
|
8338
|
+
if (allowFork)
|
|
8324
8339
|
form.set('allowFork', '1');
|
|
8325
8340
|
}
|
|
8326
8341
|
else {
|
|
@@ -8339,6 +8354,9 @@ export function createControlPlaneApi(options) {
|
|
|
8339
8354
|
const moduleProblems = pushedModuleRegistryProblems(manifest.modules, manifest.registry);
|
|
8340
8355
|
if (moduleProblems.length > 0)
|
|
8341
8356
|
return refuse(c, 'validation_failed', `manifest registry.permissions: ${moduleProblems.join('; ')}`);
|
|
8357
|
+
const landingProblems = pushedLandingProblems(manifest.modules, manifest.registry);
|
|
8358
|
+
if (landingProblems.length > 0)
|
|
8359
|
+
return refuse(c, 'validation_failed', `manifest registry.connections: ${landingProblems.join('; ')}`);
|
|
8342
8360
|
// #2430: an owner grant is a person's, so it holds no key the registry reserves.
|
|
8343
8361
|
const ownerGrants = pushedOwnerGrantProblems(manifest);
|
|
8344
8362
|
if (ownerGrants.length > 0)
|