@heramb1/provider-railway 0.1.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.
@@ -0,0 +1,33 @@
1
+ import type { DeployOptions, DeployResult, DestroyResult, EnvVarResult, ProviderLock, StatusResult } from '@heramb1/core';
2
+ export interface RailwayLockOptions {
3
+ token: string;
4
+ }
5
+ export declare class RailwayLock implements ProviderLock {
6
+ readonly name = "railway";
7
+ private client;
8
+ constructor(options: RailwayLockOptions);
9
+ deploy(options: DeployOptions): Promise<DeployResult>;
10
+ /** Find an existing Railway project by name or create one. */
11
+ findOrCreateProject(name: string): Promise<{
12
+ id: string;
13
+ name: string;
14
+ }>;
15
+ /** Find an existing service in a project or create an empty one. */
16
+ findOrCreateService(projectId: string, name: string): Promise<{
17
+ id: string;
18
+ name: string;
19
+ }>;
20
+ private listProjects;
21
+ private listServices;
22
+ getStatus(serviceId: string): Promise<StatusResult>;
23
+ setEnvVars(serviceId: string, vars: Record<string, string>): Promise<EnvVarResult>;
24
+ getLogs(serviceId: string): AsyncIterable<string>;
25
+ destroy(serviceId: string): Promise<DestroyResult>;
26
+ private triggerDeploy;
27
+ private getEnvironmentIdForService;
28
+ private getDefaultEnvironmentId;
29
+ private waitForDeploy;
30
+ private getProjectIdForService;
31
+ }
32
+ export declare function createRailwayLock(token: string): RailwayLock;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACb,MAAM,eAAe,CAAC;AAIvB,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,kBAAkB;IASjC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA6B3D,8DAA8D;IACxD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAqB9E,oEAAoE;IAC9D,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;YAqB1B,YAAY;YAwBZ,YAAY;IA0BpB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA2CnD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BjF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAMlD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAiB1C,aAAa;YAUb,0BAA0B;YA6B1B,uBAAuB;YA4BvB,aAAa;YAyBb,sBAAsB;CAarC;AAwBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAE5D"}
package/dist/index.js ADDED
@@ -0,0 +1,302 @@
1
+ import { GraphQLClient, gql } from 'graphql-request';
2
+ const RAILWAY_API = 'https://backboard.railway.app/graphql/v2';
3
+ export class RailwayLock {
4
+ name = 'railway';
5
+ client;
6
+ constructor(options) {
7
+ this.client = new GraphQLClient(RAILWAY_API, {
8
+ headers: {
9
+ Authorization: `Bearer ${options.token}`,
10
+ 'Content-Type': 'application/json',
11
+ },
12
+ });
13
+ }
14
+ async deploy(options) {
15
+ let { serviceId, projectId } = options;
16
+ const { envVars } = options;
17
+ if (!serviceId && options.name) {
18
+ const project = await this.findOrCreateProject(options.name);
19
+ projectId = project.id;
20
+ const service = await this.findOrCreateService(projectId, options.name);
21
+ serviceId = service.id;
22
+ }
23
+ if (!serviceId && projectId) {
24
+ const service = await this.findOrCreateService(projectId, options.name ?? 'backend');
25
+ serviceId = service.id;
26
+ }
27
+ if (envVars && serviceId) {
28
+ await this.setEnvVars(serviceId, envVars);
29
+ }
30
+ if (serviceId) {
31
+ await this.triggerDeploy(serviceId);
32
+ const url = await this.waitForDeploy(serviceId);
33
+ return { url, serviceId };
34
+ }
35
+ throw new Error('Railway deploy requires serviceId, projectId, or name for auto-provision');
36
+ }
37
+ /** Find an existing Railway project by name or create one. */
38
+ async findOrCreateProject(name) {
39
+ const existing = await this.listProjects();
40
+ const match = existing.find((p) => p.name === name);
41
+ if (match)
42
+ return match;
43
+ const mutation = gql `
44
+ mutation projectCreate($input: ProjectCreateInput!) {
45
+ projectCreate(input: $input) {
46
+ id
47
+ name
48
+ }
49
+ }
50
+ `;
51
+ const data = await this.client.request(mutation, { input: { name } });
52
+ return data.projectCreate;
53
+ }
54
+ /** Find an existing service in a project or create an empty one. */
55
+ async findOrCreateService(projectId, name) {
56
+ const existing = await this.listServices(projectId);
57
+ const match = existing.find((s) => s.name === name);
58
+ if (match)
59
+ return match;
60
+ const mutation = gql `
61
+ mutation serviceCreate($input: ServiceCreateInput!) {
62
+ serviceCreate(input: $input) {
63
+ id
64
+ name
65
+ }
66
+ }
67
+ `;
68
+ const data = await this.client.request(mutation, { input: { projectId, name } });
69
+ return data.serviceCreate;
70
+ }
71
+ async listProjects() {
72
+ const query = gql `
73
+ query projects {
74
+ projects {
75
+ edges {
76
+ node {
77
+ id
78
+ name
79
+ }
80
+ }
81
+ }
82
+ }
83
+ `;
84
+ try {
85
+ const data = await this.client.request(query);
86
+ return data.projects.edges.map((e) => e.node);
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ async listServices(projectId) {
93
+ const query = gql `
94
+ query project($id: String!) {
95
+ project(id: $id) {
96
+ services {
97
+ edges {
98
+ node {
99
+ id
100
+ name
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ `;
107
+ try {
108
+ const data = await this.client.request(query, { id: projectId });
109
+ return data.project?.services?.edges.map((e) => e.node) ?? [];
110
+ }
111
+ catch {
112
+ return [];
113
+ }
114
+ }
115
+ async getStatus(serviceId) {
116
+ const query = gql `
117
+ query service($id: String!) {
118
+ service(id: $id) {
119
+ id
120
+ name
121
+ serviceInstances {
122
+ edges {
123
+ node {
124
+ latestDeployment {
125
+ status
126
+ staticUrl
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ `;
134
+ try {
135
+ const data = await this.client.request(query, { id: serviceId });
136
+ const deployment = data.service?.serviceInstances?.edges[0]?.node?.latestDeployment;
137
+ const status = mapRailwayStatus(deployment?.status);
138
+ const url = deployment?.staticUrl ? `https://${deployment.staticUrl}` : undefined;
139
+ return { status, url };
140
+ }
141
+ catch {
142
+ return { status: 'unknown' };
143
+ }
144
+ }
145
+ async setEnvVars(serviceId, vars) {
146
+ try {
147
+ const query = gql `
148
+ mutation variableCollectionUpsert($input: VariableCollectionUpsertInput!) {
149
+ variableCollectionUpsert(input: $input)
150
+ }
151
+ `;
152
+ const projectId = await this.getProjectIdForService(serviceId);
153
+ const environmentId = await this.getEnvironmentIdForService(serviceId);
154
+ await this.client.request(query, {
155
+ input: {
156
+ projectId,
157
+ serviceId,
158
+ environmentId,
159
+ variables: vars,
160
+ replace: false,
161
+ },
162
+ });
163
+ return { ok: true };
164
+ }
165
+ catch (err) {
166
+ return {
167
+ ok: false,
168
+ error: err instanceof Error ? err.message : String(err),
169
+ };
170
+ }
171
+ }
172
+ async *getLogs(serviceId) {
173
+ const status = await this.getStatus(serviceId);
174
+ yield `[railway] Service ${serviceId} — status: ${status.status}${status.url ? ` (${status.url})` : ''}`;
175
+ yield `[railway] Use Railway dashboard or CLI for full log streaming`;
176
+ }
177
+ async destroy(serviceId) {
178
+ try {
179
+ const mutation = gql `
180
+ mutation serviceDelete($id: String!) {
181
+ serviceDelete(id: $id)
182
+ }
183
+ `;
184
+ await this.client.request(mutation, { id: serviceId });
185
+ return { ok: true };
186
+ }
187
+ catch (err) {
188
+ return {
189
+ ok: false,
190
+ error: err instanceof Error ? err.message : String(err),
191
+ };
192
+ }
193
+ }
194
+ async triggerDeploy(serviceId) {
195
+ const environmentId = await this.getEnvironmentIdForService(serviceId);
196
+ const mutation = gql `
197
+ mutation serviceInstanceDeploy($serviceId: String!, $environmentId: String!) {
198
+ serviceInstanceDeploy(serviceId: $serviceId, environmentId: $environmentId)
199
+ }
200
+ `;
201
+ await this.client.request(mutation, { serviceId, environmentId });
202
+ }
203
+ async getEnvironmentIdForService(serviceId) {
204
+ const query = gql `
205
+ query service($id: String!) {
206
+ service(id: $id) {
207
+ projectId
208
+ serviceInstances {
209
+ edges {
210
+ node {
211
+ environmentId
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ `;
218
+ const data = await this.client.request(query, { id: serviceId });
219
+ const fromInstance = data.service.serviceInstances?.edges[0]?.node?.environmentId;
220
+ if (fromInstance)
221
+ return fromInstance;
222
+ return this.getDefaultEnvironmentId(data.service.projectId);
223
+ }
224
+ async getDefaultEnvironmentId(projectId) {
225
+ const query = gql `
226
+ query project($id: String!) {
227
+ project(id: $id) {
228
+ environments {
229
+ edges {
230
+ node {
231
+ id
232
+ name
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ `;
239
+ const data = await this.client.request(query, { id: projectId });
240
+ const envs = data.project?.environments?.edges.map((e) => e.node) ?? [];
241
+ const production = envs.find((e) => e.name.toLowerCase() === 'production') ?? envs[0];
242
+ if (!production) {
243
+ throw new Error(`No Railway environment found for project ${projectId}`);
244
+ }
245
+ return production.id;
246
+ }
247
+ async waitForDeploy(serviceId, maxAttempts = 24) {
248
+ for (let i = 0; i < maxAttempts; i++) {
249
+ const status = await this.getStatus(serviceId);
250
+ if (status.status === 'live' && status.url) {
251
+ return status.url;
252
+ }
253
+ if (status.status === 'failed') {
254
+ throw new Error(`Railway deployment failed for service ${serviceId}. Check build logs in the Railway dashboard.`);
255
+ }
256
+ if (i >= 5 && status.status === 'pending' && !status.url) {
257
+ throw new Error('Railway service has no deployment yet. In Railway dashboard: connect this service to your GitHub repo, ' +
258
+ 'set root directory (e.g. packages/api), build & start commands, then run heramb deploy again. ' +
259
+ `Service ID: ${serviceId}`);
260
+ }
261
+ await sleep(5000);
262
+ }
263
+ throw new Error('Railway deployment timed out. Open the Railway dashboard — the service may need a GitHub repo linked or env vars set.');
264
+ }
265
+ async getProjectIdForService(serviceId) {
266
+ const query = gql `
267
+ query service($id: String!) {
268
+ service(id: $id) {
269
+ projectId
270
+ }
271
+ }
272
+ `;
273
+ const data = await this.client.request(query, {
274
+ id: serviceId,
275
+ });
276
+ return data.service.projectId;
277
+ }
278
+ }
279
+ function mapRailwayStatus(status) {
280
+ switch (status?.toUpperCase()) {
281
+ case 'SUCCESS':
282
+ case 'ACTIVE':
283
+ return 'live';
284
+ case 'BUILDING':
285
+ case 'DEPLOYING':
286
+ return 'deploying';
287
+ case 'FAILED':
288
+ case 'CRASHED':
289
+ return 'failed';
290
+ case 'INITIALIZING':
291
+ return 'building';
292
+ default:
293
+ return 'pending';
294
+ }
295
+ }
296
+ function sleep(ms) {
297
+ return new Promise((resolve) => setTimeout(resolve, ms));
298
+ }
299
+ export function createRailwayLock(token) {
300
+ return new RailwayLock({ token });
301
+ }
302
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@heramb1/provider-railway",
3
+ "version": "0.1.0",
4
+ "description": "Railway lock — GraphQL API driver for Heramb",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc"
16
+ },
17
+ "files": ["dist"],
18
+ "license": "MIT",
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/buildwithrenuka/heremb.git",
25
+ "directory": "packages/providers/railway"
26
+ },
27
+ "keywords": ["deploy", "railway", "heramb"],
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "dependencies": {
32
+ "@heramb1/core": "0.1.0",
33
+ "graphql": "^16.9.0",
34
+ "graphql-request": "^7.1.2"
35
+ },
36
+ "devDependencies": {
37
+ "typescript": "^5.7.2"
38
+ }
39
+ }