@keystrokehq/hosting 0.1.14 → 0.1.16
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/docker.cjs +131 -0
- package/dist/docker.cjs.map +1 -0
- package/dist/docker.d.cts +23 -0
- package/dist/docker.d.cts.map +1 -0
- package/dist/docker.d.mts +23 -0
- package/dist/docker.d.mts.map +1 -0
- package/dist/docker.mjs +129 -0
- package/dist/docker.mjs.map +1 -0
- package/dist/index.cjs +28 -8351
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -124
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -124
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -8301
- package/dist/index.mjs.map +1 -1
- package/dist/org-artifacts.cjs +4 -0
- package/dist/org-artifacts.d.cts +2 -0
- package/dist/org-artifacts.d.mts +2 -0
- package/dist/org-artifacts.mjs +2 -0
- package/dist/plugin-is5oPt6x.d.cts +44 -0
- package/dist/plugin-is5oPt6x.d.cts.map +1 -0
- package/dist/plugin-qEl5Sx4m.d.mts +44 -0
- package/dist/plugin-qEl5Sx4m.d.mts.map +1 -0
- package/dist/runtime-B0jF0oMv.d.cts +69 -0
- package/dist/runtime-B0jF0oMv.d.cts.map +1 -0
- package/dist/runtime-B0jF0oMv.d.mts +69 -0
- package/dist/runtime-B0jF0oMv.d.mts.map +1 -0
- package/dist/runtime-BmfsHLrk.mjs +19 -0
- package/dist/runtime-BmfsHLrk.mjs.map +1 -0
- package/dist/runtime-CV7pSfMl.cjs +30 -0
- package/dist/runtime-CV7pSfMl.cjs.map +1 -0
- package/dist/wait-for-health-DM55_NQh.cjs +340 -0
- package/dist/wait-for-health-DM55_NQh.cjs.map +1 -0
- package/dist/wait-for-health-XEzPPQIO.mjs +209 -0
- package/dist/wait-for-health-XEzPPQIO.mjs.map +1 -0
- package/package.json +13 -3
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_runtime = require("./runtime-CV7pSfMl.cjs");
|
|
3
|
+
exports.encodeOrgArtifacts = require_runtime.encodeOrgArtifacts;
|
|
4
|
+
exports.parseOrgArtifactsFromEnv = require_runtime.parseOrgArtifactsFromEnv;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as ProjectRuntimeDatabase, c as ProjectRuntimeInput, d as encodeOrgArtifacts, f as parseOrgArtifactsFromEnv, i as ProjectRuntime, l as ProjectRuntimeReconcileInput, n as OrgProjectDeploy, o as ProjectRuntimeDestroyInput, r as ProjectPingTarget, s as ProjectRuntimeHosting, t as OrgArtifactSpec, u as ProjectRuntimeResult } from "./runtime-B0jF0oMv.cjs";
|
|
2
|
+
export { type OrgArtifactSpec, type OrgProjectDeploy, type ProjectPingTarget, type ProjectRuntime, type ProjectRuntimeDatabase, type ProjectRuntimeDestroyInput, type ProjectRuntimeHosting, type ProjectRuntimeInput, type ProjectRuntimeReconcileInput, type ProjectRuntimeResult, encodeOrgArtifacts, parseOrgArtifactsFromEnv };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as ProjectRuntimeDatabase, c as ProjectRuntimeInput, d as encodeOrgArtifacts, f as parseOrgArtifactsFromEnv, i as ProjectRuntime, l as ProjectRuntimeReconcileInput, n as OrgProjectDeploy, o as ProjectRuntimeDestroyInput, r as ProjectPingTarget, s as ProjectRuntimeHosting, t as OrgArtifactSpec, u as ProjectRuntimeResult } from "./runtime-B0jF0oMv.mjs";
|
|
2
|
+
export { type OrgArtifactSpec, type OrgProjectDeploy, type ProjectPingTarget, type ProjectRuntime, type ProjectRuntimeDatabase, type ProjectRuntimeDestroyInput, type ProjectRuntimeHosting, type ProjectRuntimeInput, type ProjectRuntimeReconcileInput, type ProjectRuntimeResult, encodeOrgArtifacts, parseOrgArtifactsFromEnv };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { i as ProjectRuntime, r as ProjectPingTarget } from "./runtime-B0jF0oMv.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/worker-runtime-config.d.ts
|
|
4
|
+
/** Resolved platform ↔ project-server worker auth contract. */
|
|
5
|
+
type WorkerRuntimeConfig = {
|
|
6
|
+
/** Platform API base URL reachable from the project-server runtime. */platformUrl: string; /** Bearer token for platform `/internal` routes. */
|
|
7
|
+
workerToken: string;
|
|
8
|
+
};
|
|
9
|
+
declare class WorkerRuntimeConfigError extends Error {
|
|
10
|
+
readonly missing: readonly string[];
|
|
11
|
+
constructor(missing: string[]);
|
|
12
|
+
}
|
|
13
|
+
/** Fail fast when the platform cannot start worker-mode project servers. */
|
|
14
|
+
declare function resolveWorkerRuntimeConfig(source?: NodeJS.ProcessEnv): WorkerRuntimeConfig;
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/plugin.d.ts
|
|
17
|
+
type HostingOptions = {
|
|
18
|
+
image?: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
fetchImpl?: typeof fetch;
|
|
21
|
+
healthTimeoutMs?: number;
|
|
22
|
+
};
|
|
23
|
+
type OrganizationHostingInput = {
|
|
24
|
+
organizationId: string;
|
|
25
|
+
name: string;
|
|
26
|
+
};
|
|
27
|
+
type OrganizationHostingResult = {
|
|
28
|
+
appName: string;
|
|
29
|
+
};
|
|
30
|
+
type HostingPlugin = {
|
|
31
|
+
name: string; /** Validated at plugin creation — shared by platform internal routes and project-server containers. */
|
|
32
|
+
workerRuntime: WorkerRuntimeConfig;
|
|
33
|
+
createRuntime(): ProjectRuntime;
|
|
34
|
+
provisionOrganization?(input: OrganizationHostingInput): Promise<OrganizationHostingResult>;
|
|
35
|
+
deprovisionOrganization?(result: OrganizationHostingResult): Promise<void>;
|
|
36
|
+
canPingTarget?(target: ProjectPingTarget): target is {
|
|
37
|
+
baseUrl: string;
|
|
38
|
+
runtimeId: string | null;
|
|
39
|
+
};
|
|
40
|
+
pingRequestHeaders?(runtimeId: string | null): Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { WorkerRuntimeConfig as a, OrganizationHostingResult as i, HostingPlugin as n, WorkerRuntimeConfigError as o, OrganizationHostingInput as r, resolveWorkerRuntimeConfig as s, HostingOptions as t };
|
|
44
|
+
//# sourceMappingURL=plugin-is5oPt6x.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-is5oPt6x.d.cts","names":[],"sources":["../src/worker-runtime-config.ts","../src/plugin.ts"],"mappings":";;;;KAGY,mBAAA;yEAEV,WAAA,UAF6B;EAI7B,WAAW;AAAA;AAAA,cAGA,wBAAA,SAAiC,KAAK;EAAA,SACxC,OAAA;cAEG,OAAA;AAAA;;iBAWE,0BAAA,CACd,MAAA,GAAQ,MAAA,CAAO,UAAA,GACd,mBAAmB;;;KCvBV,cAAA;EACV,KAAA;EACA,GAAA,GAAM,MAAA,CAAO,UAAA;EACb,SAAA,UAAmB,KAAK;EACxB,eAAA;AAAA;AAAA,KAGU,wBAAA;EACV,cAAA;EACA,IAAI;AAAA;AAAA,KAGM,yBAAA;EACV,OAAO;AAAA;AAAA,KAGG,aAAA;EACV,IAAA,UDP6B;ECS7B,aAAA,EAAe,mBAAA;EACf,aAAA,IAAiB,cAAA;EACjB,qBAAA,EAAuB,KAAA,EAAO,wBAAA,GAA2B,OAAA,CAAQ,yBAAA;EACjE,uBAAA,EAAyB,MAAA,EAAQ,yBAAA,GAA4B,OAAA;EAC7D,aAAA,EACE,MAAA,EAAQ,iBAAA,GACP,MAAA;IAAY,OAAA;IAAiB,SAAA;EAAA;EAChC,kBAAA,EAAoB,SAAA,kBAA2B,MAAA;AAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { i as ProjectRuntime, r as ProjectPingTarget } from "./runtime-B0jF0oMv.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/worker-runtime-config.d.ts
|
|
4
|
+
/** Resolved platform ↔ project-server worker auth contract. */
|
|
5
|
+
type WorkerRuntimeConfig = {
|
|
6
|
+
/** Platform API base URL reachable from the project-server runtime. */platformUrl: string; /** Bearer token for platform `/internal` routes. */
|
|
7
|
+
workerToken: string;
|
|
8
|
+
};
|
|
9
|
+
declare class WorkerRuntimeConfigError extends Error {
|
|
10
|
+
readonly missing: readonly string[];
|
|
11
|
+
constructor(missing: string[]);
|
|
12
|
+
}
|
|
13
|
+
/** Fail fast when the platform cannot start worker-mode project servers. */
|
|
14
|
+
declare function resolveWorkerRuntimeConfig(source?: NodeJS.ProcessEnv): WorkerRuntimeConfig;
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/plugin.d.ts
|
|
17
|
+
type HostingOptions = {
|
|
18
|
+
image?: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
fetchImpl?: typeof fetch;
|
|
21
|
+
healthTimeoutMs?: number;
|
|
22
|
+
};
|
|
23
|
+
type OrganizationHostingInput = {
|
|
24
|
+
organizationId: string;
|
|
25
|
+
name: string;
|
|
26
|
+
};
|
|
27
|
+
type OrganizationHostingResult = {
|
|
28
|
+
appName: string;
|
|
29
|
+
};
|
|
30
|
+
type HostingPlugin = {
|
|
31
|
+
name: string; /** Validated at plugin creation — shared by platform internal routes and project-server containers. */
|
|
32
|
+
workerRuntime: WorkerRuntimeConfig;
|
|
33
|
+
createRuntime(): ProjectRuntime;
|
|
34
|
+
provisionOrganization?(input: OrganizationHostingInput): Promise<OrganizationHostingResult>;
|
|
35
|
+
deprovisionOrganization?(result: OrganizationHostingResult): Promise<void>;
|
|
36
|
+
canPingTarget?(target: ProjectPingTarget): target is {
|
|
37
|
+
baseUrl: string;
|
|
38
|
+
runtimeId: string | null;
|
|
39
|
+
};
|
|
40
|
+
pingRequestHeaders?(runtimeId: string | null): Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { WorkerRuntimeConfig as a, OrganizationHostingResult as i, HostingPlugin as n, WorkerRuntimeConfigError as o, OrganizationHostingInput as r, resolveWorkerRuntimeConfig as s, HostingOptions as t };
|
|
44
|
+
//# sourceMappingURL=plugin-qEl5Sx4m.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-qEl5Sx4m.d.mts","names":[],"sources":["../src/worker-runtime-config.ts","../src/plugin.ts"],"mappings":";;;;KAGY,mBAAA;yEAEV,WAAA,UAF6B;EAI7B,WAAW;AAAA;AAAA,cAGA,wBAAA,SAAiC,KAAK;EAAA,SACxC,OAAA;cAEG,OAAA;AAAA;;iBAWE,0BAAA,CACd,MAAA,GAAQ,MAAA,CAAO,UAAA,GACd,mBAAmB;;;KCvBV,cAAA;EACV,KAAA;EACA,GAAA,GAAM,MAAA,CAAO,UAAA;EACb,SAAA,UAAmB,KAAK;EACxB,eAAA;AAAA;AAAA,KAGU,wBAAA;EACV,cAAA;EACA,IAAI;AAAA;AAAA,KAGM,yBAAA;EACV,OAAO;AAAA;AAAA,KAGG,aAAA;EACV,IAAA,UDP6B;ECS7B,aAAA,EAAe,mBAAA;EACf,aAAA,IAAiB,cAAA;EACjB,qBAAA,EAAuB,KAAA,EAAO,wBAAA,GAA2B,OAAA,CAAQ,yBAAA;EACjE,uBAAA,EAAyB,MAAA,EAAQ,yBAAA,GAA4B,OAAA;EAC7D,aAAA,EACE,MAAA,EAAQ,iBAAA,GACP,MAAA;IAAY,OAAA;IAAiB,SAAA;EAAA;EAChC,kBAAA,EAAoB,SAAA,kBAA2B,MAAA;AAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//#region src/runtime.d.ts
|
|
2
|
+
type ProjectRuntimeDatabase = {
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
database: string;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
searchPath: string;
|
|
9
|
+
organizationId: string; /** @deprecated Per-project workers only — org workers omit this. */
|
|
10
|
+
projectId?: string;
|
|
11
|
+
};
|
|
12
|
+
type OrgProjectDeploy = {
|
|
13
|
+
projectId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
artifactId: string;
|
|
16
|
+
artifactStorageKey: string;
|
|
17
|
+
artifactVersion: number;
|
|
18
|
+
};
|
|
19
|
+
type OrgArtifactSpec = {
|
|
20
|
+
projectId: string;
|
|
21
|
+
artifactStorageKey: string;
|
|
22
|
+
artifactId: string; /** Monotonic per-project artifact version from the platform database. */
|
|
23
|
+
artifactVersion: number;
|
|
24
|
+
};
|
|
25
|
+
type ProjectRuntimeHosting = {
|
|
26
|
+
appName: string;
|
|
27
|
+
};
|
|
28
|
+
type ProjectRuntimeInput = {
|
|
29
|
+
organizationId: string;
|
|
30
|
+
projects: OrgProjectDeploy[];
|
|
31
|
+
database: ProjectRuntimeDatabase;
|
|
32
|
+
hosting?: ProjectRuntimeHosting; /** Extra env merged into the project server launch spec (e.g. from an llmProxy plugin). */
|
|
33
|
+
env?: Record<string, string>; /** Previous runtime to retire after a successful cutover. */
|
|
34
|
+
previousRuntimeId?: string | null;
|
|
35
|
+
};
|
|
36
|
+
/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
|
|
37
|
+
declare function encodeOrgArtifacts(artifacts: OrgArtifactSpec[]): string;
|
|
38
|
+
declare function parseOrgArtifactsFromEnv(env?: NodeJS.ProcessEnv): OrgArtifactSpec[] | undefined;
|
|
39
|
+
type ProjectRuntimeDestroyInput = {
|
|
40
|
+
runtimeId: string;
|
|
41
|
+
hosting?: ProjectRuntimeHosting;
|
|
42
|
+
};
|
|
43
|
+
type ProjectRuntimeReconcileInput = {
|
|
44
|
+
organizationId: string; /** The runtime to keep — every other runtime belonging to this org should be destroyed. */
|
|
45
|
+
keepRuntimeId: string;
|
|
46
|
+
hosting?: ProjectRuntimeHosting;
|
|
47
|
+
};
|
|
48
|
+
type ProjectRuntimeResult = {
|
|
49
|
+
runtimeId: string;
|
|
50
|
+
baseUrl: string;
|
|
51
|
+
};
|
|
52
|
+
type ProjectRuntime = {
|
|
53
|
+
start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;
|
|
54
|
+
destroy?(input: ProjectRuntimeDestroyInput): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Sweep away every runtime for this org except `keepRuntimeId`, retrying
|
|
57
|
+
* transient failures instead of giving up after one attempt. This catches
|
|
58
|
+
* orphans that a single {@link destroy} call missed (e.g. a previous deploy's
|
|
59
|
+
* destroy failed silently), not just the one runtime recorded as "previous."
|
|
60
|
+
*/
|
|
61
|
+
reconcile?(input: ProjectRuntimeReconcileInput): Promise<void>;
|
|
62
|
+
};
|
|
63
|
+
type ProjectPingTarget = {
|
|
64
|
+
baseUrl: string | null;
|
|
65
|
+
runtimeId: string | null;
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { ProjectRuntimeDatabase as a, ProjectRuntimeInput as c, encodeOrgArtifacts as d, parseOrgArtifactsFromEnv as f, ProjectRuntime as i, ProjectRuntimeReconcileInput as l, OrgProjectDeploy as n, ProjectRuntimeDestroyInput as o, ProjectPingTarget as r, ProjectRuntimeHosting as s, OrgArtifactSpec as t, ProjectRuntimeResult as u };
|
|
69
|
+
//# sourceMappingURL=runtime-B0jF0oMv.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-B0jF0oMv.d.cts","names":[],"sources":["../src/runtime.ts"],"mappings":";KAAY,sBAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EACA,cAAA,UAHA;EAKA,SAAA;AAAA;AAAA,KAGU,gBAAA;EACV,SAAA;EACA,IAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA;AAAA;AAAA,KAGU,eAAA;EACV,SAAA;EACA,kBAAA;EACA,UAAA,UAPA;EASA,eAAA;AAAA;AAAA,KAGU,qBAAA;EACV,OAAO;AAAA;AAAA,KAGG,mBAAA;EACV,cAAA;EACA,QAAA,EAAU,gBAAA;EACV,QAAA,EAAU,sBAAA;EACV,OAAA,GAAU,qBAAA,EAXV;EAaA,GAAA,GAAM,MAAA,kBAbS;EAef,iBAAA;AAAA;;iBAIc,kBAAA,CAAmB,SAA4B,EAAjB,eAAe;AAAA,iBAI7C,wBAAA,CACd,GAAA,GAAK,MAAA,CAAO,UAAA,GACX,eAAe;AAAA,KA6BN,0BAAA;EACV,SAAA;EACA,OAAA,GAAU,qBAAqB;AAAA;AAAA,KAGrB,4BAAA;EACV,cAAA,UA/CM;EAiDN,aAAA;EACA,OAAA,GAAU,qBAAqB;AAAA;AAAA,KAGrB,oBAAA;EACV,SAAA;EACA,OAAO;AAAA;AAAA,KAGG,cAAA;EACV,KAAA,CAAM,KAAA,EAAO,mBAAA,GAAsB,OAAA,CAAQ,oBAAA;EAC3C,OAAA,EAAS,KAAA,EAAO,0BAAA,GAA6B,OAAA;EA5DvC;;;AAEW;AAInB;;EA6DE,SAAA,EAAW,KAAA,EAAO,4BAAA,GAA+B,OAAA;AAAA;AAAA,KAGvC,iBAAA;EACV,OAAA;EACA,SAAS;AAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//#region src/runtime.d.ts
|
|
2
|
+
type ProjectRuntimeDatabase = {
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
database: string;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
searchPath: string;
|
|
9
|
+
organizationId: string; /** @deprecated Per-project workers only — org workers omit this. */
|
|
10
|
+
projectId?: string;
|
|
11
|
+
};
|
|
12
|
+
type OrgProjectDeploy = {
|
|
13
|
+
projectId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
artifactId: string;
|
|
16
|
+
artifactStorageKey: string;
|
|
17
|
+
artifactVersion: number;
|
|
18
|
+
};
|
|
19
|
+
type OrgArtifactSpec = {
|
|
20
|
+
projectId: string;
|
|
21
|
+
artifactStorageKey: string;
|
|
22
|
+
artifactId: string; /** Monotonic per-project artifact version from the platform database. */
|
|
23
|
+
artifactVersion: number;
|
|
24
|
+
};
|
|
25
|
+
type ProjectRuntimeHosting = {
|
|
26
|
+
appName: string;
|
|
27
|
+
};
|
|
28
|
+
type ProjectRuntimeInput = {
|
|
29
|
+
organizationId: string;
|
|
30
|
+
projects: OrgProjectDeploy[];
|
|
31
|
+
database: ProjectRuntimeDatabase;
|
|
32
|
+
hosting?: ProjectRuntimeHosting; /** Extra env merged into the project server launch spec (e.g. from an llmProxy plugin). */
|
|
33
|
+
env?: Record<string, string>; /** Previous runtime to retire after a successful cutover. */
|
|
34
|
+
previousRuntimeId?: string | null;
|
|
35
|
+
};
|
|
36
|
+
/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
|
|
37
|
+
declare function encodeOrgArtifacts(artifacts: OrgArtifactSpec[]): string;
|
|
38
|
+
declare function parseOrgArtifactsFromEnv(env?: NodeJS.ProcessEnv): OrgArtifactSpec[] | undefined;
|
|
39
|
+
type ProjectRuntimeDestroyInput = {
|
|
40
|
+
runtimeId: string;
|
|
41
|
+
hosting?: ProjectRuntimeHosting;
|
|
42
|
+
};
|
|
43
|
+
type ProjectRuntimeReconcileInput = {
|
|
44
|
+
organizationId: string; /** The runtime to keep — every other runtime belonging to this org should be destroyed. */
|
|
45
|
+
keepRuntimeId: string;
|
|
46
|
+
hosting?: ProjectRuntimeHosting;
|
|
47
|
+
};
|
|
48
|
+
type ProjectRuntimeResult = {
|
|
49
|
+
runtimeId: string;
|
|
50
|
+
baseUrl: string;
|
|
51
|
+
};
|
|
52
|
+
type ProjectRuntime = {
|
|
53
|
+
start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;
|
|
54
|
+
destroy?(input: ProjectRuntimeDestroyInput): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Sweep away every runtime for this org except `keepRuntimeId`, retrying
|
|
57
|
+
* transient failures instead of giving up after one attempt. This catches
|
|
58
|
+
* orphans that a single {@link destroy} call missed (e.g. a previous deploy's
|
|
59
|
+
* destroy failed silently), not just the one runtime recorded as "previous."
|
|
60
|
+
*/
|
|
61
|
+
reconcile?(input: ProjectRuntimeReconcileInput): Promise<void>;
|
|
62
|
+
};
|
|
63
|
+
type ProjectPingTarget = {
|
|
64
|
+
baseUrl: string | null;
|
|
65
|
+
runtimeId: string | null;
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { ProjectRuntimeDatabase as a, ProjectRuntimeInput as c, encodeOrgArtifacts as d, parseOrgArtifactsFromEnv as f, ProjectRuntime as i, ProjectRuntimeReconcileInput as l, OrgProjectDeploy as n, ProjectRuntimeDestroyInput as o, ProjectPingTarget as r, ProjectRuntimeHosting as s, OrgArtifactSpec as t, ProjectRuntimeResult as u };
|
|
69
|
+
//# sourceMappingURL=runtime-B0jF0oMv.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-B0jF0oMv.d.mts","names":[],"sources":["../src/runtime.ts"],"mappings":";KAAY,sBAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EACA,cAAA,UAHA;EAKA,SAAA;AAAA;AAAA,KAGU,gBAAA;EACV,SAAA;EACA,IAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA;AAAA;AAAA,KAGU,eAAA;EACV,SAAA;EACA,kBAAA;EACA,UAAA,UAPA;EASA,eAAA;AAAA;AAAA,KAGU,qBAAA;EACV,OAAO;AAAA;AAAA,KAGG,mBAAA;EACV,cAAA;EACA,QAAA,EAAU,gBAAA;EACV,QAAA,EAAU,sBAAA;EACV,OAAA,GAAU,qBAAA,EAXV;EAaA,GAAA,GAAM,MAAA,kBAbS;EAef,iBAAA;AAAA;;iBAIc,kBAAA,CAAmB,SAA4B,EAAjB,eAAe;AAAA,iBAI7C,wBAAA,CACd,GAAA,GAAK,MAAA,CAAO,UAAA,GACX,eAAe;AAAA,KA6BN,0BAAA;EACV,SAAA;EACA,OAAA,GAAU,qBAAqB;AAAA;AAAA,KAGrB,4BAAA;EACV,cAAA,UA/CM;EAiDN,aAAA;EACA,OAAA,GAAU,qBAAqB;AAAA;AAAA,KAGrB,oBAAA;EACV,SAAA;EACA,OAAO;AAAA;AAAA,KAGG,cAAA;EACV,KAAA,CAAM,KAAA,EAAO,mBAAA,GAAsB,OAAA,CAAQ,oBAAA;EAC3C,OAAA,EAAS,KAAA,EAAO,0BAAA,GAA6B,OAAA;EA5DvC;;;AAEW;AAInB;;EA6DE,SAAA,EAAW,KAAA,EAAO,4BAAA,GAA+B,OAAA;AAAA;AAAA,KAGvC,iBAAA;EACV,OAAA;EACA,SAAS;AAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/runtime.ts
|
|
2
|
+
/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
|
|
3
|
+
function encodeOrgArtifacts(artifacts) {
|
|
4
|
+
return Buffer.from(JSON.stringify(artifacts)).toString("base64");
|
|
5
|
+
}
|
|
6
|
+
function parseOrgArtifactsFromEnv(env = process.env) {
|
|
7
|
+
const raw = env.KEYSTROKE_ORG_ARTIFACTS?.trim();
|
|
8
|
+
if (!raw) return;
|
|
9
|
+
const parsed = JSON.parse(Buffer.from(raw, "base64").toString("utf8"));
|
|
10
|
+
if (!Array.isArray(parsed)) throw new Error("KEYSTROKE_ORG_ARTIFACTS must decode to a JSON array");
|
|
11
|
+
return parsed.map((entry) => {
|
|
12
|
+
if (!entry || typeof entry !== "object" || typeof entry.projectId !== "string" || typeof entry.artifactStorageKey !== "string" || typeof entry.artifactId !== "string" || typeof entry.artifactVersion !== "number") throw new Error("KEYSTROKE_ORG_ARTIFACTS entries require projectId, artifactStorageKey, artifactId, and artifactVersion");
|
|
13
|
+
return entry;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { parseOrgArtifactsFromEnv as n, encodeOrgArtifacts as t };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=runtime-BmfsHLrk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-BmfsHLrk.mjs","names":[],"sources":["../src/runtime.ts"],"sourcesContent":["export type ProjectRuntimeDatabase = {\n host: string;\n port: number;\n database: string;\n user: string;\n password: string;\n searchPath: string;\n organizationId: string;\n /** @deprecated Per-project workers only — org workers omit this. */\n projectId?: string;\n};\n\nexport type OrgProjectDeploy = {\n projectId: string;\n name: string;\n artifactId: string;\n artifactStorageKey: string;\n artifactVersion: number;\n};\n\nexport type OrgArtifactSpec = {\n projectId: string;\n artifactStorageKey: string;\n artifactId: string;\n /** Monotonic per-project artifact version from the platform database. */\n artifactVersion: number;\n};\n\nexport type ProjectRuntimeHosting = {\n appName: string;\n};\n\nexport type ProjectRuntimeInput = {\n organizationId: string;\n projects: OrgProjectDeploy[];\n database: ProjectRuntimeDatabase;\n hosting?: ProjectRuntimeHosting;\n /** Extra env merged into the project server launch spec (e.g. from an llmProxy plugin). */\n env?: Record<string, string>;\n /** Previous runtime to retire after a successful cutover. */\n previousRuntimeId?: string | null;\n};\n\n/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */\nexport function encodeOrgArtifacts(artifacts: OrgArtifactSpec[]): string {\n return Buffer.from(JSON.stringify(artifacts)).toString(\"base64\");\n}\n\nexport function parseOrgArtifactsFromEnv(\n env: NodeJS.ProcessEnv = process.env,\n): OrgArtifactSpec[] | undefined {\n const raw = env.KEYSTROKE_ORG_ARTIFACTS?.trim();\n if (!raw) {\n return undefined;\n }\n\n const parsed = JSON.parse(Buffer.from(raw, \"base64\").toString(\"utf8\")) as unknown;\n if (!Array.isArray(parsed)) {\n throw new Error(\"KEYSTROKE_ORG_ARTIFACTS must decode to a JSON array\");\n }\n\n return parsed.map((entry) => {\n if (\n !entry ||\n typeof entry !== \"object\" ||\n typeof (entry as OrgArtifactSpec).projectId !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactStorageKey !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactId !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactVersion !== \"number\"\n ) {\n throw new Error(\n \"KEYSTROKE_ORG_ARTIFACTS entries require projectId, artifactStorageKey, artifactId, and artifactVersion\",\n );\n }\n\n return entry as OrgArtifactSpec;\n });\n}\n\nexport type ProjectRuntimeDestroyInput = {\n runtimeId: string;\n hosting?: ProjectRuntimeHosting;\n};\n\nexport type ProjectRuntimeReconcileInput = {\n organizationId: string;\n /** The runtime to keep — every other runtime belonging to this org should be destroyed. */\n keepRuntimeId: string;\n hosting?: ProjectRuntimeHosting;\n};\n\nexport type ProjectRuntimeResult = {\n runtimeId: string;\n baseUrl: string;\n};\n\nexport type ProjectRuntime = {\n start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;\n destroy?(input: ProjectRuntimeDestroyInput): Promise<void>;\n /**\n * Sweep away every runtime for this org except `keepRuntimeId`, retrying\n * transient failures instead of giving up after one attempt. This catches\n * orphans that a single {@link destroy} call missed (e.g. a previous deploy's\n * destroy failed silently), not just the one runtime recorded as \"previous.\"\n */\n reconcile?(input: ProjectRuntimeReconcileInput): Promise<void>;\n};\n\nexport type ProjectPingTarget = {\n baseUrl: string | null;\n runtimeId: string | null;\n};\n"],"mappings":";;AA4CA,SAAgB,mBAAmB,WAAsC;CACvE,OAAO,OAAO,KAAK,KAAK,UAAU,SAAS,CAAC,EAAE,SAAS,QAAQ;AACjE;AAEA,SAAgB,yBACd,MAAyB,QAAQ,KACF;CAC/B,MAAM,MAAM,IAAI,yBAAyB,KAAK;CAC9C,IAAI,CAAC,KACH;CAGF,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,MAAM,CAAC;CACrE,IAAI,CAAC,MAAM,QAAQ,MAAM,GACvB,MAAM,IAAI,MAAM,qDAAqD;CAGvE,OAAO,OAAO,KAAK,UAAU;EAC3B,IACE,CAAC,SACD,OAAO,UAAU,YACjB,OAAQ,MAA0B,cAAc,YAChD,OAAQ,MAA0B,uBAAuB,YACzD,OAAQ,MAA0B,eAAe,YACjD,OAAQ,MAA0B,oBAAoB,UAEtD,MAAM,IAAI,MACR,wGACF;EAGF,OAAO;CACT,CAAC;AACH"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/runtime.ts
|
|
2
|
+
/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */
|
|
3
|
+
function encodeOrgArtifacts(artifacts) {
|
|
4
|
+
return Buffer.from(JSON.stringify(artifacts)).toString("base64");
|
|
5
|
+
}
|
|
6
|
+
function parseOrgArtifactsFromEnv(env = process.env) {
|
|
7
|
+
const raw = env.KEYSTROKE_ORG_ARTIFACTS?.trim();
|
|
8
|
+
if (!raw) return;
|
|
9
|
+
const parsed = JSON.parse(Buffer.from(raw, "base64").toString("utf8"));
|
|
10
|
+
if (!Array.isArray(parsed)) throw new Error("KEYSTROKE_ORG_ARTIFACTS must decode to a JSON array");
|
|
11
|
+
return parsed.map((entry) => {
|
|
12
|
+
if (!entry || typeof entry !== "object" || typeof entry.projectId !== "string" || typeof entry.artifactStorageKey !== "string" || typeof entry.artifactId !== "string" || typeof entry.artifactVersion !== "number") throw new Error("KEYSTROKE_ORG_ARTIFACTS entries require projectId, artifactStorageKey, artifactId, and artifactVersion");
|
|
13
|
+
return entry;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
Object.defineProperty(exports, "encodeOrgArtifacts", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function() {
|
|
20
|
+
return encodeOrgArtifacts;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports, "parseOrgArtifactsFromEnv", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function() {
|
|
26
|
+
return parseOrgArtifactsFromEnv;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=runtime-CV7pSfMl.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-CV7pSfMl.cjs","names":[],"sources":["../src/runtime.ts"],"sourcesContent":["export type ProjectRuntimeDatabase = {\n host: string;\n port: number;\n database: string;\n user: string;\n password: string;\n searchPath: string;\n organizationId: string;\n /** @deprecated Per-project workers only — org workers omit this. */\n projectId?: string;\n};\n\nexport type OrgProjectDeploy = {\n projectId: string;\n name: string;\n artifactId: string;\n artifactStorageKey: string;\n artifactVersion: number;\n};\n\nexport type OrgArtifactSpec = {\n projectId: string;\n artifactStorageKey: string;\n artifactId: string;\n /** Monotonic per-project artifact version from the platform database. */\n artifactVersion: number;\n};\n\nexport type ProjectRuntimeHosting = {\n appName: string;\n};\n\nexport type ProjectRuntimeInput = {\n organizationId: string;\n projects: OrgProjectDeploy[];\n database: ProjectRuntimeDatabase;\n hosting?: ProjectRuntimeHosting;\n /** Extra env merged into the project server launch spec (e.g. from an llmProxy plugin). */\n env?: Record<string, string>;\n /** Previous runtime to retire after a successful cutover. */\n previousRuntimeId?: string | null;\n};\n\n/** Builds base64 `KEYSTROKE_ORG_ARTIFACTS` payload for org worker containers. */\nexport function encodeOrgArtifacts(artifacts: OrgArtifactSpec[]): string {\n return Buffer.from(JSON.stringify(artifacts)).toString(\"base64\");\n}\n\nexport function parseOrgArtifactsFromEnv(\n env: NodeJS.ProcessEnv = process.env,\n): OrgArtifactSpec[] | undefined {\n const raw = env.KEYSTROKE_ORG_ARTIFACTS?.trim();\n if (!raw) {\n return undefined;\n }\n\n const parsed = JSON.parse(Buffer.from(raw, \"base64\").toString(\"utf8\")) as unknown;\n if (!Array.isArray(parsed)) {\n throw new Error(\"KEYSTROKE_ORG_ARTIFACTS must decode to a JSON array\");\n }\n\n return parsed.map((entry) => {\n if (\n !entry ||\n typeof entry !== \"object\" ||\n typeof (entry as OrgArtifactSpec).projectId !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactStorageKey !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactId !== \"string\" ||\n typeof (entry as OrgArtifactSpec).artifactVersion !== \"number\"\n ) {\n throw new Error(\n \"KEYSTROKE_ORG_ARTIFACTS entries require projectId, artifactStorageKey, artifactId, and artifactVersion\",\n );\n }\n\n return entry as OrgArtifactSpec;\n });\n}\n\nexport type ProjectRuntimeDestroyInput = {\n runtimeId: string;\n hosting?: ProjectRuntimeHosting;\n};\n\nexport type ProjectRuntimeReconcileInput = {\n organizationId: string;\n /** The runtime to keep — every other runtime belonging to this org should be destroyed. */\n keepRuntimeId: string;\n hosting?: ProjectRuntimeHosting;\n};\n\nexport type ProjectRuntimeResult = {\n runtimeId: string;\n baseUrl: string;\n};\n\nexport type ProjectRuntime = {\n start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;\n destroy?(input: ProjectRuntimeDestroyInput): Promise<void>;\n /**\n * Sweep away every runtime for this org except `keepRuntimeId`, retrying\n * transient failures instead of giving up after one attempt. This catches\n * orphans that a single {@link destroy} call missed (e.g. a previous deploy's\n * destroy failed silently), not just the one runtime recorded as \"previous.\"\n */\n reconcile?(input: ProjectRuntimeReconcileInput): Promise<void>;\n};\n\nexport type ProjectPingTarget = {\n baseUrl: string | null;\n runtimeId: string | null;\n};\n"],"mappings":";;AA4CA,SAAgB,mBAAmB,WAAsC;CACvE,OAAO,OAAO,KAAK,KAAK,UAAU,SAAS,CAAC,EAAE,SAAS,QAAQ;AACjE;AAEA,SAAgB,yBACd,MAAyB,QAAQ,KACF;CAC/B,MAAM,MAAM,IAAI,yBAAyB,KAAK;CAC9C,IAAI,CAAC,KACH;CAGF,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,MAAM,CAAC;CACrE,IAAI,CAAC,MAAM,QAAQ,MAAM,GACvB,MAAM,IAAI,MAAM,qDAAqD;CAGvE,OAAO,OAAO,KAAK,UAAU;EAC3B,IACE,CAAC,SACD,OAAO,UAAU,YACjB,OAAQ,MAA0B,cAAc,YAChD,OAAQ,MAA0B,uBAAuB,YACzD,OAAQ,MAA0B,eAAe,YACjD,OAAQ,MAA0B,oBAAoB,UAEtD,MAAM,IAAI,MACR,wGACF;EAGF,OAAO;CACT,CAAC;AACH"}
|