@inquir/compute 0.3.0 → 0.4.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/README.md +161 -6
- package/dist/app-observability.d.ts +69 -0
- package/dist/app-observability.d.ts.map +1 -0
- package/dist/app-observability.js +65 -0
- package/dist/app-observability.js.map +1 -0
- package/dist/app-observability.types.d.ts +358 -0
- package/dist/app-observability.types.d.ts.map +1 -0
- package/dist/app-observability.types.js +2 -0
- package/dist/app-observability.types.js.map +1 -0
- package/dist/apps.d.ts +73 -1
- package/dist/apps.d.ts.map +1 -1
- package/dist/apps.js +16 -0
- package/dist/apps.js.map +1 -1
- package/dist/build-timeout-policy.d.ts +13 -0
- package/dist/build-timeout-policy.d.ts.map +1 -0
- package/dist/build-timeout-policy.js +11 -0
- package/dist/build-timeout-policy.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/invocation-observation.d.ts +23 -0
- package/dist/invocation-observation.d.ts.map +1 -0
- package/dist/invocation-observation.js +79 -0
- package/dist/invocation-observation.js.map +1 -0
- package/dist/projects.d.ts +10 -1
- package/dist/projects.d.ts.map +1 -1
- package/dist/projects.js +13 -1
- package/dist/projects.js.map +1 -1
- package/dist/release-commands.d.ts +80 -0
- package/dist/release-commands.d.ts.map +1 -0
- package/dist/release-commands.js +147 -0
- package/dist/release-commands.js.map +1 -0
- package/dist/source-command-http.d.ts +7 -0
- package/dist/source-command-http.d.ts.map +1 -0
- package/dist/source-command-http.js +87 -0
- package/dist/source-command-http.js.map +1 -0
- package/dist/source-command-protocol.d.ts +137 -0
- package/dist/source-command-protocol.d.ts.map +1 -0
- package/dist/source-command-protocol.js +311 -0
- package/dist/source-command-protocol.js.map +1 -0
- package/dist/source-commands.d.ts +33 -0
- package/dist/source-commands.d.ts.map +1 -0
- package/dist/source-commands.js +116 -0
- package/dist/source-commands.js.map +1 -0
- package/dist/transport.d.ts +27 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +56 -7
- package/dist/transport.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Public build observation policy, also used when talking to an older API. */
|
|
2
|
+
export interface BuildTimeoutPolicy {
|
|
3
|
+
executionTimeoutMs: number;
|
|
4
|
+
queueTimeoutMs: number;
|
|
5
|
+
completionGraceMs: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Compatibility defaults for older APIs. A valid server-supplied policy is
|
|
9
|
+
* authoritative; these independently versioned client defaults do not configure
|
|
10
|
+
* the server's execution or queue limits.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_BUILD_TIMEOUT_POLICY: Readonly<BuildTimeoutPolicy>;
|
|
13
|
+
//# sourceMappingURL=build-timeout-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-timeout-policy.d.ts","sourceRoot":"","sources":["../src/build-timeout-policy.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,kBAAkB,CAIpE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility defaults for older APIs. A valid server-supplied policy is
|
|
3
|
+
* authoritative; these independently versioned client defaults do not configure
|
|
4
|
+
* the server's execution or queue limits.
|
|
5
|
+
*/
|
|
6
|
+
export const DEFAULT_BUILD_TIMEOUT_POLICY = Object.freeze({
|
|
7
|
+
executionTimeoutMs: 45 * 60_000,
|
|
8
|
+
queueTimeoutMs: 60 * 60_000,
|
|
9
|
+
completionGraceMs: 15_000,
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=build-timeout-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-timeout-policy.js","sourceRoot":"","sources":["../src/build-timeout-policy.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAiC,MAAM,CAAC,MAAM,CAAC;IACtF,kBAAkB,EAAE,EAAE,GAAG,MAAM;IAC/B,cAAc,EAAE,EAAE,GAAG,MAAM;IAC3B,iBAAiB,EAAE,MAAM;CAC1B,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './apps.js';
|
|
2
|
+
export * from './build-timeout-policy.js';
|
|
3
|
+
export * from './app-observability.js';
|
|
2
4
|
export * from './config.js';
|
|
3
5
|
export * from './codegen.js';
|
|
4
6
|
export * from './define-function.js';
|
|
@@ -8,6 +10,10 @@ export * from './hashing.js';
|
|
|
8
10
|
export * from './local-runner.js';
|
|
9
11
|
export * from './projects.js';
|
|
10
12
|
export * from './transport.js';
|
|
13
|
+
export * from './source-commands.js';
|
|
11
14
|
export * from './types.js';
|
|
12
15
|
export { createZipBase64 } from './zip.js';
|
|
16
|
+
export * from './invocation-observation.js';
|
|
17
|
+
export { prepareReleaseCommand, restoreReleaseCommand, ReleaseCommandObservationEndedError } from './release-commands.js';
|
|
18
|
+
export type { ReleaseCommandInput, ReleaseCommandRecord, ReleaseCommandOutcome, ReleaseCommandOperation } from './release-commands.js';
|
|
13
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAC1H,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './apps.js';
|
|
2
|
+
export * from './build-timeout-policy.js';
|
|
3
|
+
export * from './app-observability.js';
|
|
2
4
|
export * from './config.js';
|
|
3
5
|
export * from './codegen.js';
|
|
4
6
|
export * from './define-function.js';
|
|
@@ -8,6 +10,9 @@ export * from './hashing.js';
|
|
|
8
10
|
export * from './local-runner.js';
|
|
9
11
|
export * from './projects.js';
|
|
10
12
|
export * from './transport.js';
|
|
13
|
+
export * from './source-commands.js';
|
|
11
14
|
export * from './types.js';
|
|
12
15
|
export { createZipBase64 } from './zip.js';
|
|
16
|
+
export * from './invocation-observation.js';
|
|
17
|
+
export { prepareReleaseCommand, restoreReleaseCommand, ReleaseCommandObservationEndedError } from './release-commands.js';
|
|
13
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RemoteInvocationResult as InvocationResult } from './types.js';
|
|
2
|
+
export interface PendingRemoteInvocation {
|
|
3
|
+
invocationId: string;
|
|
4
|
+
functionId: string;
|
|
5
|
+
state: 'PENDING' | 'RECOVERY_HELD';
|
|
6
|
+
}
|
|
7
|
+
export declare class RemoteInvocationObservationEndedError extends Error {
|
|
8
|
+
readonly pending: PendingRemoteInvocation;
|
|
9
|
+
constructor(pending: PendingRemoteInvocation, options?: ErrorOptions);
|
|
10
|
+
}
|
|
11
|
+
export declare function validateInvocationObservation(options: {
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
intervalMs?: number;
|
|
14
|
+
}): void;
|
|
15
|
+
export declare function pendingRemoteInvocation(value: unknown, functionId: string, invocationId?: string): PendingRemoteInvocation | null;
|
|
16
|
+
/** Only resume is repeated. Stop observing does not call durable cancel. */
|
|
17
|
+
export declare function observeRemoteInvocation(initial: unknown, functionId: string, resume: (handle: PendingRemoteInvocation, signal: AbortSignal) => Promise<unknown>, options?: {
|
|
18
|
+
signal?: AbortSignal;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
intervalMs?: number;
|
|
21
|
+
onPending?: (pending: PendingRemoteInvocation) => void;
|
|
22
|
+
}): Promise<InvocationResult>;
|
|
23
|
+
//# sourceMappingURL=invocation-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation-observation.d.ts","sourceRoot":"","sources":["../src/invocation-observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,eAAe,CAAC;CACpC;AACD,qBAAa,qCAAsC,SAAQ,KAAK;IAClD,QAAQ,CAAC,OAAO,EAAE,uBAAuB;gBAAhC,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,YAAY;CAI9E;AACD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIxG;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAOjI;AACD,4EAA4E;AAC5E,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAChF,MAAM,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EAClF,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;CAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkCpK"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export class RemoteInvocationObservationEndedError extends Error {
|
|
2
|
+
pending;
|
|
3
|
+
constructor(pending, options) {
|
|
4
|
+
super(`Invocation ${pending.invocationId} is still ${pending.state === 'PENDING' ? 'running' : 'awaiting recovery'}. Resume this invocation; do not start another.`, options);
|
|
5
|
+
this.pending = pending;
|
|
6
|
+
this.name = 'RemoteInvocationObservationEndedError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function validateInvocationObservation(options) {
|
|
10
|
+
for (const value of [options.timeoutMs ?? 120_000, options.intervalMs ?? 250]) {
|
|
11
|
+
if (!Number.isFinite(value) || value < 0 || value > 2_147_483_647)
|
|
12
|
+
throw new Error('Invalid invocation observation timing');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function pendingRemoteInvocation(value, functionId, invocationId) {
|
|
16
|
+
if (!value || typeof value !== 'object' || !('state' in value))
|
|
17
|
+
return null;
|
|
18
|
+
const p = value;
|
|
19
|
+
if (!['PENDING', 'RECOVERY_HELD'].includes(p.state) || p.functionId !== functionId
|
|
20
|
+
|| !/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/.test(p.invocationId)
|
|
21
|
+
|| invocationId !== undefined && invocationId !== p.invocationId)
|
|
22
|
+
throw new Error('Invocation observation identity differs');
|
|
23
|
+
return { invocationId: p.invocationId, functionId, state: p.state };
|
|
24
|
+
}
|
|
25
|
+
/** Only resume is repeated. Stop observing does not call durable cancel. */
|
|
26
|
+
export async function observeRemoteInvocation(initial, functionId, resume, options = {}) {
|
|
27
|
+
options = { ...options };
|
|
28
|
+
validateInvocationObservation(options);
|
|
29
|
+
let response = initial, pending = null;
|
|
30
|
+
const controller = new AbortController(), timeoutMs = options.timeoutMs ?? 120_000;
|
|
31
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs < 0)
|
|
32
|
+
throw new Error('Invalid invocation observation timeout');
|
|
33
|
+
const abort = () => controller.abort(options.signal?.reason);
|
|
34
|
+
if (options.signal?.aborted)
|
|
35
|
+
abort();
|
|
36
|
+
else
|
|
37
|
+
options.signal?.addEventListener('abort', abort, { once: true });
|
|
38
|
+
const timer = setTimeout(() => controller.abort(new Error('Invocation observation timed out')), timeoutMs);
|
|
39
|
+
try {
|
|
40
|
+
while (true) {
|
|
41
|
+
const next = pendingRemoteInvocation(response, functionId, pending?.invocationId);
|
|
42
|
+
if (!next) {
|
|
43
|
+
const terminal = response;
|
|
44
|
+
if (!terminal || terminal.functionId !== functionId || pending && terminal.invocationId !== pending.invocationId
|
|
45
|
+
|| !['SUCCEEDED', 'FAILED', 'TIMED_OUT', 'CANCELLED'].includes(terminal.status))
|
|
46
|
+
throw new Error('Invalid invocation terminal response');
|
|
47
|
+
return terminal;
|
|
48
|
+
}
|
|
49
|
+
pending = next;
|
|
50
|
+
options.onPending?.({ ...pending });
|
|
51
|
+
if (controller.signal.aborted)
|
|
52
|
+
throw new RemoteInvocationObservationEndedError(pending);
|
|
53
|
+
try {
|
|
54
|
+
await new Promise((resolve, reject) => {
|
|
55
|
+
const done = () => { clearTimeout(delay); controller.signal.removeEventListener('abort', stopped); resolve(); };
|
|
56
|
+
const stopped = () => { clearTimeout(delay); controller.signal.removeEventListener('abort', stopped); reject(controller.signal.reason); };
|
|
57
|
+
const delay = setTimeout(done, options.intervalMs ?? 250);
|
|
58
|
+
controller.signal.addEventListener('abort', stopped, { once: true });
|
|
59
|
+
if (controller.signal.aborted)
|
|
60
|
+
stopped();
|
|
61
|
+
});
|
|
62
|
+
response = await resume(pending, controller.signal);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new RemoteInvocationObservationEndedError(pending, { cause: error });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (pending && !(error instanceof RemoteInvocationObservationEndedError))
|
|
71
|
+
throw new RemoteInvocationObservationEndedError(pending, { cause: error });
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
options.signal?.removeEventListener('abort', abort);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=invocation-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation-observation.js","sourceRoot":"","sources":["../src/invocation-observation.ts"],"names":[],"mappings":"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"}
|
package/dist/projects.d.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* dashboard's project view.
|
|
4
4
|
*
|
|
5
5
|
* A folder groups long-lived container applications (web services, APIs,
|
|
6
|
-
* databases, and workers).
|
|
6
|
+
* databases, and workers). Archiving a project archives its applications too;
|
|
7
|
+
* removing a membership leaves the application running. Serverless functions
|
|
8
|
+
* are managed separately.
|
|
7
9
|
* The canvas draws its
|
|
8
10
|
* application members as nodes, the recorded connections between them as
|
|
9
11
|
* edges, and remembers where each node was dragged on the membership row.
|
|
@@ -52,6 +54,13 @@ export declare function getProject(client: TransportClient, project: string): Pr
|
|
|
52
54
|
export declare function createProject(client: TransportClient, input: CreateProjectInput): Promise<Project>;
|
|
53
55
|
/** Idempotent: filing an existing member again returns the same membership. */
|
|
54
56
|
export declare function addProjectResource(client: TransportClient, project: string, resource: ProjectResourceRef): Promise<ProjectMember>;
|
|
57
|
+
/**
|
|
58
|
+
* Unfile an application from one project. It keeps running, and its other
|
|
59
|
+
* memberships stay; a 404 means it was not a member.
|
|
60
|
+
*/
|
|
61
|
+
export declare function removeProjectResource(client: TransportClient, project: string, resource: ProjectResourceRef): Promise<{
|
|
62
|
+
removed: true;
|
|
63
|
+
}>;
|
|
55
64
|
export interface CanvasPosition {
|
|
56
65
|
x: number;
|
|
57
66
|
y: number;
|
package/dist/projects.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"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"}
|
package/dist/projects.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* dashboard's project view.
|
|
4
4
|
*
|
|
5
5
|
* A folder groups long-lived container applications (web services, APIs,
|
|
6
|
-
* databases, and workers).
|
|
6
|
+
* databases, and workers). Archiving a project archives its applications too;
|
|
7
|
+
* removing a membership leaves the application running. Serverless functions
|
|
8
|
+
* are managed separately.
|
|
7
9
|
* The canvas draws its
|
|
8
10
|
* application members as nodes, the recorded connections between them as
|
|
9
11
|
* edges, and remembers where each node was dragged on the membership row.
|
|
@@ -35,6 +37,16 @@ export async function addProjectResource(client, project, resource) {
|
|
|
35
37
|
id: resource.id,
|
|
36
38
|
});
|
|
37
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Unfile an application from one project. It keeps running, and its other
|
|
42
|
+
* memberships stay; a 404 means it was not a member.
|
|
43
|
+
*/
|
|
44
|
+
export async function removeProjectResource(client, project, resource) {
|
|
45
|
+
if (resource?.kind !== 'application') {
|
|
46
|
+
throw new TypeError('Projects only contain long-lived container applications; resource.kind must be "application".');
|
|
47
|
+
}
|
|
48
|
+
return rawRequest(client, 'DELETE', `/v1/projects/${encodeURIComponent(project)}/resources/application/${encodeURIComponent(resource.id)}`);
|
|
49
|
+
}
|
|
38
50
|
/** `:project` is the folder's id or slug. */
|
|
39
51
|
export async function getProjectCanvas(client, project) {
|
|
40
52
|
return rawRequest(client, 'GET', `/v1/projects/${encodeURIComponent(project)}/canvas`);
|
package/dist/projects.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type TransportClient } from './transport.js';
|
|
2
|
+
export interface ReleaseCommandInput {
|
|
3
|
+
command: string;
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export interface ReleaseCommandRecord {
|
|
8
|
+
version: 1;
|
|
9
|
+
apiUrl: string;
|
|
10
|
+
credentialHash: string;
|
|
11
|
+
tenantId: string;
|
|
12
|
+
functionId: string;
|
|
13
|
+
requestId: string;
|
|
14
|
+
input: {
|
|
15
|
+
command: string;
|
|
16
|
+
timeoutMs: number;
|
|
17
|
+
env: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export type ReleaseCommandOutcome = {
|
|
21
|
+
requestId: string;
|
|
22
|
+
functionId: string;
|
|
23
|
+
kind: 'EXEC_RELEASE';
|
|
24
|
+
state: 'PENDING' | 'RECOVERY_HELD';
|
|
25
|
+
resumeUrl: string;
|
|
26
|
+
} | {
|
|
27
|
+
requestId: string;
|
|
28
|
+
functionId: string;
|
|
29
|
+
kind: 'EXEC_RELEASE';
|
|
30
|
+
state: 'CANCELLED_BEFORE_ADMISSION' | 'CANCELLED_WITHOUT_CONTAINER';
|
|
31
|
+
result: null;
|
|
32
|
+
} | {
|
|
33
|
+
requestId: string;
|
|
34
|
+
functionId: string;
|
|
35
|
+
kind: 'EXEC_RELEASE';
|
|
36
|
+
state: 'REMOVED';
|
|
37
|
+
result: {
|
|
38
|
+
termination: 'EXITED' | 'TIMEOUT' | 'CANCELLED' | 'HOST_REBOOT';
|
|
39
|
+
exitCode: number | null;
|
|
40
|
+
stdout: string;
|
|
41
|
+
stderr: string;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
timedOut: boolean;
|
|
44
|
+
truncated: boolean;
|
|
45
|
+
logFailure: {
|
|
46
|
+
code: string;
|
|
47
|
+
} | null;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export declare class ReleaseCommandObservationEndedError extends Error {
|
|
51
|
+
readonly retained: ReleaseCommandRecord;
|
|
52
|
+
constructor(retained: ReleaseCommandRecord, options?: ErrorOptions);
|
|
53
|
+
}
|
|
54
|
+
export interface ReleaseCommandOperation {
|
|
55
|
+
record(): ReleaseCommandRecord;
|
|
56
|
+
submit(signal?: AbortSignal): Promise<ReleaseCommandOutcome>;
|
|
57
|
+
resume(signal?: AbortSignal): Promise<ReleaseCommandOutcome>;
|
|
58
|
+
cancel(signal?: AbortSignal): Promise<{
|
|
59
|
+
requestId: string;
|
|
60
|
+
functionId: string;
|
|
61
|
+
kind: 'EXEC_RELEASE';
|
|
62
|
+
state: 'CANCEL_REQUESTED';
|
|
63
|
+
}>;
|
|
64
|
+
/** Only resumes. An expired observer never requests durable cancellation. */
|
|
65
|
+
observe(options?: {
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
timeoutMs?: number;
|
|
68
|
+
pollIntervalMs?: number;
|
|
69
|
+
}): Promise<ReleaseCommandOutcome>;
|
|
70
|
+
}
|
|
71
|
+
/** The caller must persist the original UUID/request before the FIRST HTTP submission. */
|
|
72
|
+
export declare function prepareReleaseCommand(client: TransportClient, options: {
|
|
73
|
+
functionId: string;
|
|
74
|
+
requestId: string;
|
|
75
|
+
input: ReleaseCommandInput;
|
|
76
|
+
retain(record: ReleaseCommandRecord): Promise<void>;
|
|
77
|
+
}): Promise<ReleaseCommandOperation>;
|
|
78
|
+
/** Recovery performs NO discovery and NO submit, even after admission is withdrawn. */
|
|
79
|
+
export declare function restoreReleaseCommand(client: TransportClient, record: ReleaseCommandRecord): ReleaseCommandOperation;
|
|
80
|
+
//# sourceMappingURL=release-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-commands.d.ts","sourceRoot":"","sources":["../src/release-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { ApiError, createClient, authHeaders, getMe, toApiError } from './transport.js';
|
|
3
|
+
import { boundedSourceCommandFetch } from './source-command-http.js';
|
|
4
|
+
export class ReleaseCommandObservationEndedError extends Error {
|
|
5
|
+
retained;
|
|
6
|
+
constructor(retained, options) {
|
|
7
|
+
super('Release command observation ended; resume this same request ID', options);
|
|
8
|
+
this.retained = retained;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/;
|
|
12
|
+
function identifier(value) {
|
|
13
|
+
if (typeof value !== 'string' || !value || value.length > 256 || Array.from(value).some(c => c.charCodeAt(0) < 32 || c.charCodeAt(0) === 127))
|
|
14
|
+
throw new Error('Invalid release command scope');
|
|
15
|
+
}
|
|
16
|
+
function object(value) { if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
17
|
+
throw new Error('Invalid release command protocol'); return value; }
|
|
18
|
+
function exact(value, keys) { if (Object.keys(value).sort().join(',') !== keys)
|
|
19
|
+
throw new Error('Release command fields differ'); }
|
|
20
|
+
function normalized(input) {
|
|
21
|
+
const value = structuredClone(input), env = value?.env ?? {}, timeoutMs = value?.timeoutMs ?? 60000;
|
|
22
|
+
const string = (v) => typeof v === 'string' && !v.includes('\0') && Buffer.from(v).toString('utf8') === v;
|
|
23
|
+
if (!value || Object.keys(value).some(k => !['command', 'timeoutMs', 'env'].includes(k)) || !string(value.command) || !value.command || value.command.length > 4000
|
|
24
|
+
|| !Number.isSafeInteger(timeoutMs) || timeoutMs < 1000 || timeoutMs > 900000 || !env || typeof env !== 'object' || Array.isArray(env)
|
|
25
|
+
|| !Object.entries(env).every(([key, item]) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key) && string(item)))
|
|
26
|
+
throw new Error('Invalid release command input');
|
|
27
|
+
return { command: value.command, timeoutMs, env };
|
|
28
|
+
}
|
|
29
|
+
function binding(client) {
|
|
30
|
+
const url = new URL(client.baseUrl);
|
|
31
|
+
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash || !client.apiKey)
|
|
32
|
+
throw new Error('Release commands require a plain authenticated HTTP API');
|
|
33
|
+
return { apiUrl: url.toString().replace(/\/+$/, ''), credentialHash: createHash('sha256').update(client.apiKey).digest('hex') };
|
|
34
|
+
}
|
|
35
|
+
function operation(client, value) {
|
|
36
|
+
const retained = structuredClone(value), current = binding(client);
|
|
37
|
+
exact(object(retained), 'apiUrl,credentialHash,functionId,input,requestId,tenantId,version');
|
|
38
|
+
identifier(retained.tenantId);
|
|
39
|
+
identifier(retained.functionId);
|
|
40
|
+
if (retained.version !== 1 || !UUID.test(retained.requestId) || retained.apiUrl !== current.apiUrl || retained.credentialHash !== current.credentialHash
|
|
41
|
+
|| client.workspaceId !== undefined && client.workspaceId !== retained.tenantId || JSON.stringify(normalized(retained.input)) !== JSON.stringify(retained.input))
|
|
42
|
+
throw new Error('Retained release command binding differs');
|
|
43
|
+
// The platform captures at most 1 MiB of logs; JSON escapes may expand each
|
|
44
|
+
// byte sixfold. This response bound preserves the entire validated capture.
|
|
45
|
+
const pinned = createClient({ ...client, baseUrl: retained.apiUrl, workspaceId: retained.tenantId, fetchImpl: boundedSourceCommandFetch(client.fetchImpl, { responseLimitBytes: 8 * 1024 * 1024 }) });
|
|
46
|
+
const base = `/functions/${encodeURIComponent(retained.functionId)}/release-commands/${retained.requestId}`;
|
|
47
|
+
async function request(mode, signal) {
|
|
48
|
+
signal?.throwIfAborted();
|
|
49
|
+
const response = await pinned.fetchImpl(pinned.baseUrl + base + (mode === 'submit' ? '' : `/${mode}`), { method: 'POST', redirect: 'error', signal,
|
|
50
|
+
headers: { ...authHeaders(pinned), 'Content-Type': 'application/json' }, body: JSON.stringify(mode === 'submit' ? retained.input : {}) });
|
|
51
|
+
const payload = await response.json();
|
|
52
|
+
if (!response.ok)
|
|
53
|
+
throw toApiError(response, payload);
|
|
54
|
+
const row = object(payload);
|
|
55
|
+
if (row.requestId !== retained.requestId || row.functionId !== retained.functionId || row.kind !== 'EXEC_RELEASE')
|
|
56
|
+
throw new Error('Release command response scope differs');
|
|
57
|
+
if (mode === 'cancel') {
|
|
58
|
+
exact(row, 'functionId,kind,requestId,state');
|
|
59
|
+
if (response.status !== 202 || row.state !== 'CANCEL_REQUESTED')
|
|
60
|
+
throw new Error('Invalid cancellation intent');
|
|
61
|
+
return row;
|
|
62
|
+
}
|
|
63
|
+
if (row.state === 'PENDING' || row.state === 'RECOVERY_HELD') {
|
|
64
|
+
exact(row, 'functionId,kind,requestId,resumeUrl,state');
|
|
65
|
+
if (response.status !== 202 || row.resumeUrl !== base + '/resume')
|
|
66
|
+
throw new Error('Untrusted release recovery URL');
|
|
67
|
+
}
|
|
68
|
+
else if (row.state === 'CANCELLED_BEFORE_ADMISSION' || row.state === 'CANCELLED_WITHOUT_CONTAINER') {
|
|
69
|
+
exact(row, 'functionId,kind,requestId,result,state');
|
|
70
|
+
if (response.status !== 200 || row.result !== null)
|
|
71
|
+
throw new Error('Invalid pre-admission cancellation');
|
|
72
|
+
}
|
|
73
|
+
else if (row.state === 'REMOVED') {
|
|
74
|
+
exact(row, 'functionId,kind,requestId,result,state');
|
|
75
|
+
const result = object(row.result);
|
|
76
|
+
exact(result, 'durationMs,exitCode,logFailure,stderr,stdout,termination,timedOut,truncated');
|
|
77
|
+
if (response.status !== 200 || !['EXITED', 'TIMEOUT', 'CANCELLED', 'HOST_REBOOT'].includes(String(result.termination))
|
|
78
|
+
|| !(result.exitCode === null || Number.isSafeInteger(result.exitCode) && Number(result.exitCode) >= 0 && Number(result.exitCode) <= 255)
|
|
79
|
+
|| result.termination === 'EXITED' && result.exitCode === null || typeof result.stdout !== 'string' || typeof result.stderr !== 'string'
|
|
80
|
+
|| typeof result.durationMs !== 'number' || !Number.isFinite(result.durationMs) || result.durationMs < 0 || typeof result.truncated !== 'boolean'
|
|
81
|
+
|| result.timedOut !== (result.termination === 'TIMEOUT'))
|
|
82
|
+
throw new Error('Invalid removed command result');
|
|
83
|
+
if (result.logFailure !== null) {
|
|
84
|
+
const failure = object(result.logFailure);
|
|
85
|
+
exact(failure, 'code');
|
|
86
|
+
if (!['LOG_LAYOUT_INVALID', 'LOG_RECORD_INVALID', 'LOG_RECORD_INCOMPLETE', 'LOG_LIMIT_EXCEEDED'].includes(String(failure.code)) || result.stdout !== '' || result.stderr !== '' || result.truncated !== true)
|
|
87
|
+
throw new Error('Invalid log failure');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
throw new Error('Unknown release command state');
|
|
92
|
+
return row;
|
|
93
|
+
}
|
|
94
|
+
return { record: () => structuredClone(retained), submit: async (signal) => await request('submit', signal),
|
|
95
|
+
resume: async (signal) => await request('resume', signal),
|
|
96
|
+
cancel: async (signal) => await request('cancel', signal),
|
|
97
|
+
async observe(options = {}) {
|
|
98
|
+
const timeout = options.timeoutMs ?? 900000, poll = options.pollIntervalMs ?? 100, signal = options.signal;
|
|
99
|
+
if (!Number.isSafeInteger(timeout) || timeout < 1 || timeout > 900000 || !Number.isSafeInteger(poll) || poll < 1 || poll > 10000)
|
|
100
|
+
throw new Error('Invalid command observation limits');
|
|
101
|
+
const control = new AbortController(), abort = () => control.abort(signal?.reason), timer = setTimeout(() => control.abort(), timeout);
|
|
102
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
103
|
+
if (signal?.aborted)
|
|
104
|
+
abort();
|
|
105
|
+
try {
|
|
106
|
+
for (;;) {
|
|
107
|
+
control.signal.throwIfAborted();
|
|
108
|
+
const result = await request('resume', control.signal);
|
|
109
|
+
if (result.state === 'REMOVED' || result.state === 'CANCELLED_BEFORE_ADMISSION' || result.state === 'CANCELLED_WITHOUT_CONTAINER')
|
|
110
|
+
return result;
|
|
111
|
+
await new Promise((resolve, reject) => {
|
|
112
|
+
const ended = () => { clearTimeout(wait); control.signal.removeEventListener('abort', ended); reject(control.signal.reason); }, wait = setTimeout(() => { control.signal.removeEventListener('abort', ended); resolve(); }, poll);
|
|
113
|
+
control.signal.addEventListener('abort', ended, { once: true });
|
|
114
|
+
if (control.signal.aborted)
|
|
115
|
+
ended();
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// 404 (unknown request) and 409 (changed command, lost before start) are
|
|
121
|
+
// definite outcomes: resuming the same request ID cannot change them.
|
|
122
|
+
if (error instanceof ApiError && (error.status === 404 || error.status === 409))
|
|
123
|
+
throw error;
|
|
124
|
+
throw new ReleaseCommandObservationEndedError(structuredClone(retained), { cause: error });
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
clearTimeout(timer);
|
|
128
|
+
signal?.removeEventListener('abort', abort);
|
|
129
|
+
}
|
|
130
|
+
} };
|
|
131
|
+
}
|
|
132
|
+
/** The caller must persist the original UUID/request before the FIRST HTTP submission. */
|
|
133
|
+
export async function prepareReleaseCommand(client, options) {
|
|
134
|
+
const frozen = structuredClone({ functionId: options.functionId, requestId: options.requestId, input: normalized(options.input) }), retain = options.retain;
|
|
135
|
+
identifier(frozen.functionId);
|
|
136
|
+
if (!UUID.test(frozen.requestId) || typeof retain !== 'function')
|
|
137
|
+
throw new Error('A durable original release command identity is required');
|
|
138
|
+
const snapshot = createClient({ ...client }), current = binding(snapshot), me = snapshot.workspaceId ? null : await getMe(snapshot), tenantId = snapshot.workspaceId ?? me?.activeWorkspace?.id;
|
|
139
|
+
identifier(tenantId);
|
|
140
|
+
const record = { version: 1, ...current, tenantId, functionId: frozen.functionId, requestId: frozen.requestId, input: frozen.input };
|
|
141
|
+
const prepared = operation(snapshot, record);
|
|
142
|
+
await retain(prepared.record());
|
|
143
|
+
return prepared;
|
|
144
|
+
}
|
|
145
|
+
/** Recovery performs NO discovery and NO submit, even after admission is withdrawn. */
|
|
146
|
+
export function restoreReleaseCommand(client, record) { return operation(client, record); }
|
|
147
|
+
//# sourceMappingURL=release-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-commands.js","sourceRoot":"","sources":["../src/release-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Binds every discovery/action request to a finite whole-body wait. Late replies
|
|
2
|
+
* are disposed without awaiting body cancellation or triggering another action.
|
|
3
|
+
*/
|
|
4
|
+
export declare function boundedSourceCommandFetch(fetchImpl: typeof fetch, options?: {
|
|
5
|
+
responseLimitBytes?: number;
|
|
6
|
+
}): typeof fetch;
|
|
7
|
+
//# sourceMappingURL=source-command-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-command-http.d.ts","sourceRoot":"","sources":["../src/source-command-http.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAC,OAAO,KAAK,EAAC,OAAO,GAAC;IAAC,kBAAkB,CAAC,EAAC,MAAM,CAAA;CAAI,GAAE,OAAO,KAAK,CAoCrH"}
|