@keystrokehq/hosting 0.0.50

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.
@@ -0,0 +1,141 @@
1
+ import Docker from "dockerode";
2
+
3
+ //#region src/constants.d.ts
4
+ declare const PROJECT_SERVER_IMAGE = "keystroke/project-server:local";
5
+ declare const PROJECT_SERVER_PORT = 3000;
6
+ declare const PROJECT_SERVER_ROOT = "/app";
7
+ declare const PROJECT_SERVER_FRAMEWORK_ROOT = "/opt/keystroke";
8
+ declare const PROJECT_SERVER_FRAMEWORK_NODE_MODULES = "/opt/keystroke/node_modules";
9
+ declare const PROJECT_SERVER_HEALTH: {
10
+ readonly path: "/health";
11
+ readonly port: 3000;
12
+ };
13
+ //#endregion
14
+ //#region src/runtime.d.ts
15
+ type ProjectRuntimeDatabase = {
16
+ host: string;
17
+ port: number;
18
+ database: string;
19
+ user: string;
20
+ password: string;
21
+ searchPath: string;
22
+ projectId: string;
23
+ organizationId: string;
24
+ };
25
+ type ProjectRuntimeHosting = {
26
+ appName: string;
27
+ };
28
+ type ProjectRuntimeInput = {
29
+ projectId: string;
30
+ name: string;
31
+ artifactUrl: string;
32
+ database: ProjectRuntimeDatabase;
33
+ hosting?: ProjectRuntimeHosting;
34
+ };
35
+ type ProjectRuntimeResult = {
36
+ runtimeId: string;
37
+ baseUrl: string;
38
+ };
39
+ type ProjectRuntime = {
40
+ start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;
41
+ };
42
+ type ProjectPingTarget = {
43
+ baseUrl: string | null;
44
+ runtimeId: string | null;
45
+ };
46
+ //#endregion
47
+ //#region src/plugin.d.ts
48
+ type HostingOptions = {
49
+ image?: string;
50
+ env?: NodeJS.ProcessEnv;
51
+ fetchImpl?: typeof fetch;
52
+ healthTimeoutMs?: number;
53
+ };
54
+ type OrganizationHostingInput = {
55
+ organizationId: string;
56
+ name: string;
57
+ slug: string;
58
+ };
59
+ type OrganizationHostingResult = {
60
+ appName: string;
61
+ };
62
+ type HostingPlugin = {
63
+ name: string;
64
+ createRuntime(): ProjectRuntime;
65
+ provisionOrganization?(input: OrganizationHostingInput): Promise<OrganizationHostingResult>;
66
+ deprovisionOrganization?(result: OrganizationHostingResult): Promise<void>;
67
+ canPingTarget?(target: ProjectPingTarget): target is {
68
+ baseUrl: string;
69
+ runtimeId: string | null;
70
+ };
71
+ pingRequestHeaders?(runtimeId: string | null): Record<string, string>;
72
+ };
73
+ //#endregion
74
+ //#region src/docker/create-docker-runtime.d.ts
75
+ type DockerPluginOptions = HostingOptions & {
76
+ docker?: Docker;
77
+ };
78
+ //#endregion
79
+ //#region src/docker/plugin.d.ts
80
+ declare function dockerPlugin(options?: DockerPluginOptions): HostingPlugin;
81
+ //#endregion
82
+ //#region src/default-plugin.d.ts
83
+ /** Local Docker hosting — default for platform and dev. */
84
+ declare function defaultHostingPlugin(options?: DockerPluginOptions): HostingPlugin;
85
+ //#endregion
86
+ //#region src/runtime-env.d.ts
87
+ declare const PROJECT_DATABASE_ENV_KEYS: readonly ["POSTGRES_HOST", "POSTGRES_PORT", "POSTGRES_DB", "POSTGRES_USER", "POSTGRES_PASSWORD", "DATABASE_SEARCH_PATH"];
88
+ type RuntimeLaunchSpec = {
89
+ image: string;
90
+ env: Record<string, string>;
91
+ port: number;
92
+ health: typeof PROJECT_SERVER_HEALTH;
93
+ };
94
+ /** Per-project postgres env injected into every project server container/machine. */
95
+ declare function projectDatabaseRuntimeEnv(database: ProjectRuntimeDatabase): Record<(typeof PROJECT_DATABASE_ENV_KEYS)[number], string>;
96
+ /**
97
+ * Builds the launch spec for a single project server. `artifactUrl` is the
98
+ * per-project presigned URL to that deploy's built `dist` — there is no base
99
+ * image, so it is required.
100
+ */
101
+ declare function resolveRuntimeLaunch(options: HostingOptions, artifactUrl: string, database: ProjectRuntimeDatabase): RuntimeLaunchSpec;
102
+ /** Env vars passed into the project server container/machine. */
103
+ declare function buildRuntimeEnv(source: NodeJS.ProcessEnv, artifactUrl: string, database: ProjectRuntimeDatabase): Record<string, string>;
104
+ /** Rewrite loopback hosts so containers can reach Postgres and other host services. */
105
+ declare function rewriteLoopbackHost(host: string): string;
106
+ /** dockerode expects `KEY=value` strings. */
107
+ declare function formatDockerEnv(env: Record<string, string>): string[];
108
+ declare function resolveProjectServerImage(env?: NodeJS.ProcessEnv, override?: string): string;
109
+ //#endregion
110
+ //#region src/wait-for-health.d.ts
111
+ type WaitForHealthOptions = {
112
+ timeoutMs?: number;
113
+ intervalMs?: number;
114
+ fetchImpl?: typeof fetch;
115
+ };
116
+ declare function waitForHealth(baseUrl: string, options?: WaitForHealthOptions): Promise<void>;
117
+ //#endregion
118
+ //#region src/runtime-constants.d.ts
119
+ /** Timeout for a single project runtime `/health` probe. */
120
+ declare const RUNTIME_PING_TIMEOUT_MS = 15000;
121
+ //#endregion
122
+ //#region src/ping-project.d.ts
123
+ type PingProjectOptions = {
124
+ runtimeId?: string | null;
125
+ fetchImpl?: typeof fetch;
126
+ timeoutMs?: number;
127
+ plugin?: Pick<HostingPlugin, "pingRequestHeaders">;
128
+ };
129
+ declare function pingProject(baseUrl: string, options?: PingProjectOptions): Promise<boolean>;
130
+ //#endregion
131
+ //#region src/ping-project-target.d.ts
132
+ declare function canPingProjectTarget(target: ProjectPingTarget, plugin?: Pick<HostingPlugin, "canPingTarget">): target is {
133
+ baseUrl: string;
134
+ runtimeId: string | null;
135
+ };
136
+ declare function pingProjectTarget(target: ProjectPingTarget, options?: PingProjectOptions & {
137
+ plugin?: Pick<HostingPlugin, "canPingTarget" | "pingRequestHeaders">;
138
+ }): Promise<boolean>;
139
+ //#endregion
140
+ export { type DockerPluginOptions, type HostingOptions, type HostingPlugin, type OrganizationHostingInput, type OrganizationHostingResult, PROJECT_DATABASE_ENV_KEYS, PROJECT_SERVER_FRAMEWORK_NODE_MODULES, PROJECT_SERVER_FRAMEWORK_ROOT, PROJECT_SERVER_HEALTH, PROJECT_SERVER_IMAGE, PROJECT_SERVER_PORT, PROJECT_SERVER_ROOT, type PingProjectOptions, type ProjectPingTarget, type ProjectRuntime, type ProjectRuntimeDatabase, type ProjectRuntimeHosting, type ProjectRuntimeInput, type ProjectRuntimeResult, RUNTIME_PING_TIMEOUT_MS, type RuntimeLaunchSpec, type WaitForHealthOptions, buildRuntimeEnv, canPingProjectTarget, defaultHostingPlugin, dockerPlugin, formatDockerEnv, pingProject, pingProjectTarget, projectDatabaseRuntimeEnv, resolveProjectServerImage, resolveRuntimeLaunch, rewriteLoopbackHost, waitForHealth };
141
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/constants.ts","../src/runtime.ts","../src/plugin.ts","../src/docker/create-docker-runtime.ts","../src/docker/plugin.ts","../src/default-plugin.ts","../src/runtime-env.ts","../src/wait-for-health.ts","../src/runtime-constants.ts","../src/ping-project.ts","../src/ping-project-target.ts"],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import Docker from "dockerode";
2
+
3
+ //#region src/constants.d.ts
4
+ declare const PROJECT_SERVER_IMAGE = "keystroke/project-server:local";
5
+ declare const PROJECT_SERVER_PORT = 3000;
6
+ declare const PROJECT_SERVER_ROOT = "/app";
7
+ declare const PROJECT_SERVER_FRAMEWORK_ROOT = "/opt/keystroke";
8
+ declare const PROJECT_SERVER_FRAMEWORK_NODE_MODULES = "/opt/keystroke/node_modules";
9
+ declare const PROJECT_SERVER_HEALTH: {
10
+ readonly path: "/health";
11
+ readonly port: 3000;
12
+ };
13
+ //#endregion
14
+ //#region src/runtime.d.ts
15
+ type ProjectRuntimeDatabase = {
16
+ host: string;
17
+ port: number;
18
+ database: string;
19
+ user: string;
20
+ password: string;
21
+ searchPath: string;
22
+ projectId: string;
23
+ organizationId: string;
24
+ };
25
+ type ProjectRuntimeHosting = {
26
+ appName: string;
27
+ };
28
+ type ProjectRuntimeInput = {
29
+ projectId: string;
30
+ name: string;
31
+ artifactUrl: string;
32
+ database: ProjectRuntimeDatabase;
33
+ hosting?: ProjectRuntimeHosting;
34
+ };
35
+ type ProjectRuntimeResult = {
36
+ runtimeId: string;
37
+ baseUrl: string;
38
+ };
39
+ type ProjectRuntime = {
40
+ start(input: ProjectRuntimeInput): Promise<ProjectRuntimeResult>;
41
+ };
42
+ type ProjectPingTarget = {
43
+ baseUrl: string | null;
44
+ runtimeId: string | null;
45
+ };
46
+ //#endregion
47
+ //#region src/plugin.d.ts
48
+ type HostingOptions = {
49
+ image?: string;
50
+ env?: NodeJS.ProcessEnv;
51
+ fetchImpl?: typeof fetch;
52
+ healthTimeoutMs?: number;
53
+ };
54
+ type OrganizationHostingInput = {
55
+ organizationId: string;
56
+ name: string;
57
+ slug: string;
58
+ };
59
+ type OrganizationHostingResult = {
60
+ appName: string;
61
+ };
62
+ type HostingPlugin = {
63
+ name: string;
64
+ createRuntime(): ProjectRuntime;
65
+ provisionOrganization?(input: OrganizationHostingInput): Promise<OrganizationHostingResult>;
66
+ deprovisionOrganization?(result: OrganizationHostingResult): Promise<void>;
67
+ canPingTarget?(target: ProjectPingTarget): target is {
68
+ baseUrl: string;
69
+ runtimeId: string | null;
70
+ };
71
+ pingRequestHeaders?(runtimeId: string | null): Record<string, string>;
72
+ };
73
+ //#endregion
74
+ //#region src/docker/create-docker-runtime.d.ts
75
+ type DockerPluginOptions = HostingOptions & {
76
+ docker?: Docker;
77
+ };
78
+ //#endregion
79
+ //#region src/docker/plugin.d.ts
80
+ declare function dockerPlugin(options?: DockerPluginOptions): HostingPlugin;
81
+ //#endregion
82
+ //#region src/default-plugin.d.ts
83
+ /** Local Docker hosting — default for platform and dev. */
84
+ declare function defaultHostingPlugin(options?: DockerPluginOptions): HostingPlugin;
85
+ //#endregion
86
+ //#region src/runtime-env.d.ts
87
+ declare const PROJECT_DATABASE_ENV_KEYS: readonly ["POSTGRES_HOST", "POSTGRES_PORT", "POSTGRES_DB", "POSTGRES_USER", "POSTGRES_PASSWORD", "DATABASE_SEARCH_PATH"];
88
+ type RuntimeLaunchSpec = {
89
+ image: string;
90
+ env: Record<string, string>;
91
+ port: number;
92
+ health: typeof PROJECT_SERVER_HEALTH;
93
+ };
94
+ /** Per-project postgres env injected into every project server container/machine. */
95
+ declare function projectDatabaseRuntimeEnv(database: ProjectRuntimeDatabase): Record<(typeof PROJECT_DATABASE_ENV_KEYS)[number], string>;
96
+ /**
97
+ * Builds the launch spec for a single project server. `artifactUrl` is the
98
+ * per-project presigned URL to that deploy's built `dist` — there is no base
99
+ * image, so it is required.
100
+ */
101
+ declare function resolveRuntimeLaunch(options: HostingOptions, artifactUrl: string, database: ProjectRuntimeDatabase): RuntimeLaunchSpec;
102
+ /** Env vars passed into the project server container/machine. */
103
+ declare function buildRuntimeEnv(source: NodeJS.ProcessEnv, artifactUrl: string, database: ProjectRuntimeDatabase): Record<string, string>;
104
+ /** Rewrite loopback hosts so containers can reach Postgres and other host services. */
105
+ declare function rewriteLoopbackHost(host: string): string;
106
+ /** dockerode expects `KEY=value` strings. */
107
+ declare function formatDockerEnv(env: Record<string, string>): string[];
108
+ declare function resolveProjectServerImage(env?: NodeJS.ProcessEnv, override?: string): string;
109
+ //#endregion
110
+ //#region src/wait-for-health.d.ts
111
+ type WaitForHealthOptions = {
112
+ timeoutMs?: number;
113
+ intervalMs?: number;
114
+ fetchImpl?: typeof fetch;
115
+ };
116
+ declare function waitForHealth(baseUrl: string, options?: WaitForHealthOptions): Promise<void>;
117
+ //#endregion
118
+ //#region src/runtime-constants.d.ts
119
+ /** Timeout for a single project runtime `/health` probe. */
120
+ declare const RUNTIME_PING_TIMEOUT_MS = 15000;
121
+ //#endregion
122
+ //#region src/ping-project.d.ts
123
+ type PingProjectOptions = {
124
+ runtimeId?: string | null;
125
+ fetchImpl?: typeof fetch;
126
+ timeoutMs?: number;
127
+ plugin?: Pick<HostingPlugin, "pingRequestHeaders">;
128
+ };
129
+ declare function pingProject(baseUrl: string, options?: PingProjectOptions): Promise<boolean>;
130
+ //#endregion
131
+ //#region src/ping-project-target.d.ts
132
+ declare function canPingProjectTarget(target: ProjectPingTarget, plugin?: Pick<HostingPlugin, "canPingTarget">): target is {
133
+ baseUrl: string;
134
+ runtimeId: string | null;
135
+ };
136
+ declare function pingProjectTarget(target: ProjectPingTarget, options?: PingProjectOptions & {
137
+ plugin?: Pick<HostingPlugin, "canPingTarget" | "pingRequestHeaders">;
138
+ }): Promise<boolean>;
139
+ //#endregion
140
+ export { type DockerPluginOptions, type HostingOptions, type HostingPlugin, type OrganizationHostingInput, type OrganizationHostingResult, PROJECT_DATABASE_ENV_KEYS, PROJECT_SERVER_FRAMEWORK_NODE_MODULES, PROJECT_SERVER_FRAMEWORK_ROOT, PROJECT_SERVER_HEALTH, PROJECT_SERVER_IMAGE, PROJECT_SERVER_PORT, PROJECT_SERVER_ROOT, type PingProjectOptions, type ProjectPingTarget, type ProjectRuntime, type ProjectRuntimeDatabase, type ProjectRuntimeHosting, type ProjectRuntimeInput, type ProjectRuntimeResult, RUNTIME_PING_TIMEOUT_MS, type RuntimeLaunchSpec, type WaitForHealthOptions, buildRuntimeEnv, canPingProjectTarget, defaultHostingPlugin, dockerPlugin, formatDockerEnv, pingProject, pingProjectTarget, projectDatabaseRuntimeEnv, resolveProjectServerImage, resolveRuntimeLaunch, rewriteLoopbackHost, waitForHealth };
141
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/constants.ts","../src/runtime.ts","../src/plugin.ts","../src/docker/create-docker-runtime.ts","../src/docker/plugin.ts","../src/default-plugin.ts","../src/runtime-env.ts","../src/wait-for-health.ts","../src/runtime-constants.ts","../src/ping-project.ts","../src/ping-project-target.ts"],"mappings":";;;cAAa,oBAAA;AAAA,cAEA,mBAAA;AAAA,cAEA,mBAAA;AAAA,cAEA,6BAAA;AAAA,cAEA,qCAAA;AAAA,cAEA,qBAAA;EAAA,SAGH,IAAA;EAAA,SAAA,IAAA;AAAA;;;KCbE,sBAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EACA,SAAA;EACA,cAAA;AAAA;AAAA,KAGU,qBAAA;EACV,OAAO;AAAA;AAAA,KAGG,mBAAA;EACV,SAAA;EACA,IAAA;EACA,WAAA;EACA,QAAA,EAAU,sBAAA;EACV,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;AAAA;AAAA,KAGjC,iBAAA;EACV,OAAA;EACA,SAAS;AAAA;;;KChCC,cAAA;EACV,KAAA;EACA,GAAA,GAAM,MAAA,CAAO,UAAA;EACb,SAAA,UAAmB,KAAK;EACxB,eAAA;AAAA;AAAA,KAGU,wBAAA;EACV,cAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,yBAAA;EACV,OAAO;AAAA;AAAA,KAGG,aAAA;EACV,IAAA;EACA,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;;;KCnBrC,mBAAA,GAAsB,cAAA;EAChC,MAAA,GAAS,MAAM;AAAA;;;iBCFD,YAAA,CAAa,OAAA,GAAS,mBAAA,GAA2B,aAAa;;;;iBCH9D,oBAAA,CAAqB,OAAA,GAAS,mBAAA,GAA2B,aAAa;;;cCiBzE,yBAAA;AAAA,KASD,iBAAA;EACV,KAAA;EACA,GAAA,EAAK,MAAA;EACL,IAAA;EACA,MAAA,SAAe,qBAAqB;AAAA;;iBAItB,yBAAA,CACd,QAAA,EAAU,sBAAA,GACT,MAAA,SAAe,yBAAA;ANtCc;AAEhC;;;;AAFgC,iBMsDhB,oBAAA,CACd,OAAA,EAAS,cAAA,EACT,WAAA,UACA,QAAA,EAAU,sBAAA,GACT,iBAAA;ANtDH;AAAA,iBMsEgB,eAAA,CACd,MAAA,EAAQ,MAAA,CAAO,UAAA,EACf,WAAA,UACA,QAAA,EAAU,sBAAA,GACT,MAAA;;iBAuDa,mBAAA,CAAoB,IAAY;ANjIN;AAAA,iBM0I1B,eAAA,CAAgB,GAA2B,EAAtB,MAAM;AAAA,iBAI3B,yBAAA,CACd,GAAA,GAAK,MAAA,CAAO,UAAwB,EACpC,QAAA;;;KCjJU,oBAAA;EACV,SAAA;EACA,UAAA;EACA,SAAA,UAAmB,KAAK;AAAA;AAAA,iBAGJ,aAAA,CACpB,OAAA,UACA,OAAA,GAAS,oBAAA,GACR,OAAO;;;;cCbG,uBAAA;;;KCGD,kBAAA;EACV,SAAA;EACA,SAAA,UAAmB,KAAA;EACnB,SAAA;EACA,MAAA,GAAS,IAAA,CAAK,aAAA;AAAA;AAAA,iBAGM,WAAA,CACpB,OAAA,UACA,OAAA,GAAS,kBAAA,GACR,OAAO;;;iBCVM,oBAAA,CACd,MAAA,EAAQ,iBAAA,EACR,MAAA,GAAS,IAAA,CAAK,aAAA,qBACb,MAAA;EAAY,OAAA;EAAiB,SAAA;AAAA;AAAA,iBAQV,iBAAA,CACpB,MAAA,EAAQ,iBAAA,EACR,OAAA,GAAS,kBAAA;EACP,MAAA,GAAS,IAAA,CAAK,aAAA;AAAA,IAEf,OAAA"}