@prisma/compute-cli 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.
Files changed (99) hide show
  1. package/README.md +118 -0
  2. package/bin/compute +4 -0
  3. package/bin/compute-bun +4 -0
  4. package/dist/cli.d.ts +4 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +28 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/deploy.d.ts +56 -0
  9. package/dist/commands/deploy.d.ts.map +1 -0
  10. package/dist/commands/deploy.js +106 -0
  11. package/dist/commands/deploy.js.map +1 -0
  12. package/dist/commands/env.d.ts +2 -0
  13. package/dist/commands/env.d.ts.map +1 -0
  14. package/dist/commands/env.js +84 -0
  15. package/dist/commands/env.js.map +1 -0
  16. package/dist/commands/helpers.d.ts +27 -0
  17. package/dist/commands/helpers.d.ts.map +1 -0
  18. package/dist/commands/helpers.js +128 -0
  19. package/dist/commands/helpers.js.map +1 -0
  20. package/dist/commands/login.d.ts +2 -0
  21. package/dist/commands/login.d.ts.map +1 -0
  22. package/dist/commands/login.js +17 -0
  23. package/dist/commands/login.js.map +1 -0
  24. package/dist/commands/logout.d.ts +2 -0
  25. package/dist/commands/logout.d.ts.map +1 -0
  26. package/dist/commands/logout.js +17 -0
  27. package/dist/commands/logout.js.map +1 -0
  28. package/dist/commands/projects.d.ts +2 -0
  29. package/dist/commands/projects.d.ts.map +1 -0
  30. package/dist/commands/projects.js +43 -0
  31. package/dist/commands/projects.js.map +1 -0
  32. package/dist/commands/services.d.ts +2 -0
  33. package/dist/commands/services.d.ts.map +1 -0
  34. package/dist/commands/services.js +318 -0
  35. package/dist/commands/services.js.map +1 -0
  36. package/dist/commands/versions.d.ts +2 -0
  37. package/dist/commands/versions.d.ts.map +1 -0
  38. package/dist/commands/versions.js +321 -0
  39. package/dist/commands/versions.js.map +1 -0
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +3 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/lib/auth/client.d.ts +7 -0
  45. package/dist/lib/auth/client.d.ts.map +1 -0
  46. package/dist/lib/auth/client.js +26 -0
  47. package/dist/lib/auth/client.js.map +1 -0
  48. package/dist/lib/auth/guard.d.ts +12 -0
  49. package/dist/lib/auth/guard.d.ts.map +1 -0
  50. package/dist/lib/auth/guard.js +39 -0
  51. package/dist/lib/auth/guard.js.map +1 -0
  52. package/dist/lib/auth/login.d.ts +15 -0
  53. package/dist/lib/auth/login.d.ts.map +1 -0
  54. package/dist/lib/auth/login.js +128 -0
  55. package/dist/lib/auth/login.js.map +1 -0
  56. package/dist/lib/auth/token-storage.d.ts +9 -0
  57. package/dist/lib/auth/token-storage.d.ts.map +1 -0
  58. package/dist/lib/auth/token-storage.js +55 -0
  59. package/dist/lib/auth/token-storage.js.map +1 -0
  60. package/dist/lib/compute-config.d.ts +12 -0
  61. package/dist/lib/compute-config.d.ts.map +1 -0
  62. package/dist/lib/compute-config.js +69 -0
  63. package/dist/lib/compute-config.js.map +1 -0
  64. package/dist/lib/format.d.ts +2 -0
  65. package/dist/lib/format.d.ts.map +1 -0
  66. package/dist/lib/format.js +11 -0
  67. package/dist/lib/format.js.map +1 -0
  68. package/dist/lib/interaction.d.ts +17 -0
  69. package/dist/lib/interaction.d.ts.map +1 -0
  70. package/dist/lib/interaction.js +131 -0
  71. package/dist/lib/interaction.js.map +1 -0
  72. package/dist/lib/json-output.d.ts +3 -0
  73. package/dist/lib/json-output.d.ts.map +1 -0
  74. package/dist/lib/json-output.js +9 -0
  75. package/dist/lib/json-output.js.map +1 -0
  76. package/dist/lib/progress.d.ts +6 -0
  77. package/dist/lib/progress.d.ts.map +1 -0
  78. package/dist/lib/progress.js +156 -0
  79. package/dist/lib/progress.js.map +1 -0
  80. package/package.json +45 -0
  81. package/src/cli.ts +30 -0
  82. package/src/commands/deploy.ts +127 -0
  83. package/src/commands/env.ts +104 -0
  84. package/src/commands/helpers.ts +153 -0
  85. package/src/commands/login.ts +18 -0
  86. package/src/commands/logout.ts +18 -0
  87. package/src/commands/projects.ts +54 -0
  88. package/src/commands/services.ts +385 -0
  89. package/src/commands/versions.ts +389 -0
  90. package/src/index.ts +2 -0
  91. package/src/lib/auth/client.ts +39 -0
  92. package/src/lib/auth/guard.ts +51 -0
  93. package/src/lib/auth/login.ts +175 -0
  94. package/src/lib/auth/token-storage.ts +73 -0
  95. package/src/lib/compute-config.ts +95 -0
  96. package/src/lib/format.ts +16 -0
  97. package/src/lib/interaction.ts +166 -0
  98. package/src/lib/json-output.ts +9 -0
  99. package/src/lib/progress.ts +172 -0
@@ -0,0 +1,321 @@
1
+ import { ComputeClient } from "@prisma/compute-sdk";
2
+ import { defineCommand } from "citty";
3
+ import { formatTable } from "../lib/format.js";
4
+ import { createDeployInteraction, createDestroyVersionInteraction, } from "../lib/interaction.js";
5
+ import { printJsonResult } from "../lib/json-output.js";
6
+ import { createDestroyVersionProgress } from "../lib/progress.js";
7
+ import { endFlow, handleError, parsePollOptions, startFlow, withAuthAndSignal, } from "./helpers.js";
8
+ const versionsListCommand = defineCommand({
9
+ meta: { name: "list", description: "List versions for a compute service" },
10
+ args: {
11
+ service: { type: "string", description: "Compute service ID" },
12
+ json: { type: "boolean", default: false, description: "Output JSON" },
13
+ },
14
+ run: async ({ args }) => {
15
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
16
+ const flowStarted = !args.json && startFlow("Prisma Compute · Versions");
17
+ try {
18
+ const sdk = new ComputeClient(managementClient);
19
+ let serviceId = args.service;
20
+ if (!serviceId) {
21
+ if (args.json) {
22
+ console.error("Missing required flag: --service <id>");
23
+ return 1;
24
+ }
25
+ const interaction = createDeployInteraction();
26
+ if (!interaction?.selectProject || !interaction?.selectService) {
27
+ console.error("Missing required flag: --service <id>");
28
+ return 1;
29
+ }
30
+ const projectsResult = await sdk.listProjects({ signal });
31
+ if (projectsResult.isErr()) {
32
+ console.error(projectsResult.error.message);
33
+ return 1;
34
+ }
35
+ const projectId = await interaction.selectProject(projectsResult.value);
36
+ const servicesResult = await sdk.listServices({
37
+ projectId,
38
+ signal,
39
+ });
40
+ if (servicesResult.isErr()) {
41
+ console.error(servicesResult.error.message);
42
+ return 1;
43
+ }
44
+ const selectedServiceId = await interaction.selectService(servicesResult.value);
45
+ if (selectedServiceId === null) {
46
+ console.error("A service must be selected to list versions.");
47
+ return 1;
48
+ }
49
+ serviceId = selectedServiceId;
50
+ }
51
+ const result = await sdk.listVersions({ serviceId, signal });
52
+ if (args.json) {
53
+ printJsonResult(result);
54
+ return result.isOk() ? 0 : 1;
55
+ }
56
+ if (result.isErr()) {
57
+ console.error(result.error.message);
58
+ return 1;
59
+ }
60
+ if (result.value.length === 0) {
61
+ console.log("No versions found.");
62
+ endFlow(flowStarted);
63
+ return 0;
64
+ }
65
+ console.log(formatTable(["ID", "Status", "Preview Domain", "Created"], result.value.map((v) => [
66
+ v.id,
67
+ v.status ?? "-",
68
+ v.previewDomain ?? "-",
69
+ v.createdAt,
70
+ ])));
71
+ endFlow(flowStarted);
72
+ return 0;
73
+ }
74
+ catch (error) {
75
+ return handleError(error);
76
+ }
77
+ });
78
+ if (exitCode !== 0)
79
+ process.exit(exitCode);
80
+ },
81
+ });
82
+ const versionsShowCommand = defineCommand({
83
+ meta: { name: "show", description: "Show version details" },
84
+ args: {
85
+ id: {
86
+ type: "positional",
87
+ description: "Compute version ID",
88
+ required: false,
89
+ },
90
+ json: { type: "boolean", default: false, description: "Output JSON" },
91
+ },
92
+ run: async ({ args }) => {
93
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
94
+ try {
95
+ const sdk = new ComputeClient(managementClient);
96
+ const versionId = args.id;
97
+ if (!versionId) {
98
+ console.error("Usage: compute versions show <id>");
99
+ return 1;
100
+ }
101
+ const result = await sdk.showVersion({ versionId, signal });
102
+ if (args.json) {
103
+ printJsonResult(result);
104
+ return result.isOk() ? 0 : 1;
105
+ }
106
+ if (result.isErr()) {
107
+ console.error(result.error.message);
108
+ return 1;
109
+ }
110
+ const v = result.value;
111
+ console.log(`ID: ${v.id}`);
112
+ console.log(`Status: ${v.status}`);
113
+ console.log(`Preview Domain: ${v.previewDomain ?? "-"}`);
114
+ console.log(`Created: ${v.createdAt}`);
115
+ if (v.envVars && Object.keys(v.envVars).length > 0) {
116
+ console.log("Env vars:");
117
+ for (const [key, value] of Object.entries(v.envVars)) {
118
+ console.log(` ${key}=${value}`);
119
+ }
120
+ }
121
+ return 0;
122
+ }
123
+ catch (error) {
124
+ return handleError(error);
125
+ }
126
+ });
127
+ if (exitCode !== 0)
128
+ process.exit(exitCode);
129
+ },
130
+ });
131
+ const versionsStartCommand = defineCommand({
132
+ meta: { name: "start", description: "Start a version" },
133
+ args: {
134
+ id: {
135
+ type: "positional",
136
+ description: "Compute version ID",
137
+ required: false,
138
+ },
139
+ json: { type: "boolean", default: false, description: "Output JSON" },
140
+ },
141
+ run: async ({ args }) => {
142
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
143
+ try {
144
+ const sdk = new ComputeClient(managementClient);
145
+ const versionId = args.id;
146
+ if (!versionId) {
147
+ console.error("Usage: compute versions start <id>");
148
+ return 1;
149
+ }
150
+ const result = await sdk.startVersion({ versionId, signal });
151
+ if (args.json) {
152
+ printJsonResult(result);
153
+ return result.isOk() ? 0 : 1;
154
+ }
155
+ if (result.isErr()) {
156
+ console.error(result.error.message);
157
+ return 1;
158
+ }
159
+ console.log(`Version ${versionId} start requested.`);
160
+ return 0;
161
+ }
162
+ catch (error) {
163
+ return handleError(error);
164
+ }
165
+ });
166
+ if (exitCode !== 0)
167
+ process.exit(exitCode);
168
+ },
169
+ });
170
+ const versionsStopCommand = defineCommand({
171
+ meta: { name: "stop", description: "Stop a version" },
172
+ args: {
173
+ id: {
174
+ type: "positional",
175
+ description: "Compute version ID",
176
+ required: false,
177
+ },
178
+ json: { type: "boolean", default: false, description: "Output JSON" },
179
+ },
180
+ run: async ({ args }) => {
181
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
182
+ try {
183
+ const sdk = new ComputeClient(managementClient);
184
+ const versionId = args.id;
185
+ if (!versionId) {
186
+ console.error("Usage: compute versions stop <id>");
187
+ return 1;
188
+ }
189
+ const result = await sdk.stopVersion({ versionId, signal });
190
+ if (args.json) {
191
+ printJsonResult(result);
192
+ return result.isOk() ? 0 : 1;
193
+ }
194
+ if (result.isErr()) {
195
+ console.error(result.error.message);
196
+ return 1;
197
+ }
198
+ console.log(`Version ${versionId} stop requested.`);
199
+ return 0;
200
+ }
201
+ catch (error) {
202
+ return handleError(error);
203
+ }
204
+ });
205
+ if (exitCode !== 0)
206
+ process.exit(exitCode);
207
+ },
208
+ });
209
+ const versionsDeleteCommand = defineCommand({
210
+ meta: { name: "delete", description: "Delete a version" },
211
+ args: {
212
+ id: {
213
+ type: "positional",
214
+ description: "Compute version ID",
215
+ required: false,
216
+ },
217
+ json: { type: "boolean", default: false, description: "Output JSON" },
218
+ },
219
+ run: async ({ args }) => {
220
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
221
+ try {
222
+ const sdk = new ComputeClient(managementClient);
223
+ const versionId = args.id;
224
+ if (!versionId) {
225
+ console.error("Usage: compute versions delete <id>");
226
+ return 1;
227
+ }
228
+ const result = await sdk.deleteVersion({ versionId, signal });
229
+ if (args.json) {
230
+ printJsonResult(result);
231
+ return result.isOk() ? 0 : 1;
232
+ }
233
+ if (result.isErr()) {
234
+ console.error(result.error.message);
235
+ return 1;
236
+ }
237
+ console.log(`Deleted version: ${versionId}`);
238
+ return 0;
239
+ }
240
+ catch (error) {
241
+ return handleError(error);
242
+ }
243
+ });
244
+ if (exitCode !== 0)
245
+ process.exit(exitCode);
246
+ },
247
+ });
248
+ const versionsDestroyCommand = defineCommand({
249
+ meta: { name: "destroy", description: "Stop and delete a compute version" },
250
+ args: {
251
+ id: {
252
+ type: "positional",
253
+ description: "Compute version ID",
254
+ required: false,
255
+ },
256
+ service: {
257
+ type: "string",
258
+ description: "Service ID (for interactive version selection)",
259
+ },
260
+ timeout: {
261
+ type: "string",
262
+ default: "120",
263
+ description: "Poll timeout in seconds",
264
+ },
265
+ pollInterval: {
266
+ type: "string",
267
+ default: "1000",
268
+ description: "Poll interval in milliseconds",
269
+ },
270
+ json: { type: "boolean", default: false, description: "Output JSON" },
271
+ },
272
+ run: async ({ args }) => {
273
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
274
+ const flowStarted = !args.json && startFlow("Prisma Compute · Versions");
275
+ try {
276
+ const sdk = new ComputeClient(managementClient);
277
+ const result = await sdk.destroyVersion({
278
+ versionId: args.id,
279
+ serviceId: args.service,
280
+ ...parsePollOptions(args),
281
+ interaction: args.json
282
+ ? undefined
283
+ : createDestroyVersionInteraction(),
284
+ progress: args.json ? undefined : createDestroyVersionProgress(),
285
+ signal,
286
+ });
287
+ if (args.json) {
288
+ printJsonResult(result);
289
+ return result.isOk() ? 0 : 1;
290
+ }
291
+ if (result.isErr()) {
292
+ console.error(result.error.message);
293
+ return 1;
294
+ }
295
+ console.log(`Version: ${result.value.versionId}`);
296
+ console.log(`Previous status: ${result.value.previousStatus}`);
297
+ console.log(`Stopped: ${result.value.stopped ? "yes" : "no"}`);
298
+ console.log(`Deleted: ${result.value.deleted ? "yes" : "no"}`);
299
+ endFlow(flowStarted, "Destroy flow completed.");
300
+ return 0;
301
+ }
302
+ catch (error) {
303
+ return handleError(error);
304
+ }
305
+ });
306
+ if (exitCode !== 0)
307
+ process.exit(exitCode);
308
+ },
309
+ });
310
+ export const versionsGroup = defineCommand({
311
+ meta: { name: "versions", description: "Version management" },
312
+ subCommands: {
313
+ list: versionsListCommand,
314
+ show: versionsShowCommand,
315
+ start: versionsStartCommand,
316
+ stop: versionsStopCommand,
317
+ delete: versionsDeleteCommand,
318
+ destroy: versionsDestroyCommand,
319
+ },
320
+ });
321
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { BunBuild } from "@prisma/compute-sdk";
2
+ export { mainCommand, runCli } from "./cli.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { BunBuild } from "@prisma/compute-sdk";
2
+ export { mainCommand, runCli } from "./cli.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const CLIENT_ID = "cmm3lndn701oo0uefvxzo0ivw";
2
+ export declare const DEFAULT_API_BASE_URL = "https://api.prisma.io";
3
+ export declare const AUTH_FILE_ENV_VAR = "PRISMA_COMPUTE_AUTH_FILE";
4
+ export declare const SERVICE_TOKEN_ENV_VAR = "PRISMA_API_TOKEN";
5
+ export declare function getApiBaseUrl(): string;
6
+ export declare function getAuthFilePath(): string;
7
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/client.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,8BAA8B,CAAC;AACrD,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAC5D,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAyBxC"}
@@ -0,0 +1,26 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ export const CLIENT_ID = "cmm3lndn701oo0uefvxzo0ivw";
4
+ export const DEFAULT_API_BASE_URL = "https://api.prisma.io";
5
+ export const AUTH_FILE_ENV_VAR = "PRISMA_COMPUTE_AUTH_FILE";
6
+ export const SERVICE_TOKEN_ENV_VAR = "PRISMA_API_TOKEN";
7
+ export function getApiBaseUrl() {
8
+ const configuredBaseUrl = process.env.PRISMA_MANAGEMENT_API_URL?.trim();
9
+ return configuredBaseUrl || DEFAULT_API_BASE_URL;
10
+ }
11
+ export function getAuthFilePath() {
12
+ const configuredPath = process.env[AUTH_FILE_ENV_VAR];
13
+ if (configuredPath && configuredPath.trim().length > 0) {
14
+ return path.resolve(configuredPath);
15
+ }
16
+ if (process.platform === "darwin") {
17
+ return path.join(os.homedir(), "Library", "Application Support", "prisma-compute", "auth.json");
18
+ }
19
+ if (process.platform === "win32") {
20
+ const appData = process.env.APPDATA ?? path.join(os.homedir(), "AppData", "Roaming");
21
+ return path.join(appData, "prisma-compute", "auth.json");
22
+ }
23
+ const xdgConfigHome = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), ".config");
24
+ return path.join(xdgConfigHome, "prisma-compute", "auth.json");
25
+ }
26
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/auth/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,SAAS,GAAG,2BAA2B,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAExD,MAAM,UAAU,aAAa;IAC3B,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC;IACxE,OAAO,iBAAiB,IAAI,oBAAoB,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ManagementApiClient } from "@prisma/management-api-sdk";
2
+ /**
3
+ * Resolve authentication and return a ManagementApiClient.
4
+ *
5
+ * Priority:
6
+ * 1. PRISMA_API_TOKEN env var → service token
7
+ * 2. Stored OAuth tokens → SDK with auto-refresh
8
+ *
9
+ * Returns null if not authenticated (caller should print guidance and exit).
10
+ */
11
+ export declare function requireAuth(): Promise<ManagementApiClient | null>;
12
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAIpC;;;;;;;;GAQG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAiCvE"}
@@ -0,0 +1,39 @@
1
+ import { createManagementApiClient, createManagementApiSdk, } from "@prisma/management-api-sdk";
2
+ import { CLIENT_ID, getApiBaseUrl, SERVICE_TOKEN_ENV_VAR } from "./client.js";
3
+ import { FileTokenStorage } from "./token-storage.js";
4
+ /**
5
+ * Resolve authentication and return a ManagementApiClient.
6
+ *
7
+ * Priority:
8
+ * 1. PRISMA_API_TOKEN env var → service token
9
+ * 2. Stored OAuth tokens → SDK with auto-refresh
10
+ *
11
+ * Returns null if not authenticated (caller should print guidance and exit).
12
+ */
13
+ export async function requireAuth() {
14
+ const rawServiceToken = process.env[SERVICE_TOKEN_ENV_VAR];
15
+ if (rawServiceToken !== undefined) {
16
+ const serviceToken = rawServiceToken.trim();
17
+ if (serviceToken.length > 0) {
18
+ return createManagementApiClient({
19
+ baseUrl: getApiBaseUrl(),
20
+ token: serviceToken,
21
+ });
22
+ }
23
+ throw new Error(`${SERVICE_TOKEN_ENV_VAR} is set but empty. Provide a valid token or unset the variable.`);
24
+ }
25
+ const tokenStorage = new FileTokenStorage();
26
+ const tokens = await tokenStorage.getTokens();
27
+ if (!tokens) {
28
+ console.error("Not authenticated. Run `compute login` or set PRISMA_API_TOKEN.");
29
+ return null;
30
+ }
31
+ const sdk = createManagementApiSdk({
32
+ clientId: CLIENT_ID,
33
+ redirectUri: "http://localhost:0/auth/callback",
34
+ tokenStorage,
35
+ apiBaseUrl: getApiBaseUrl(),
36
+ });
37
+ return sdk.client;
38
+ }
39
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/lib/auth/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC3D,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,yBAAyB,CAAC;gBAC/B,OAAO,EAAE,aAAa,EAAE;gBACxB,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,KAAK,CACb,GAAG,qBAAqB,iEAAiE,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;IAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,iEAAiE,CAClE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,sBAAsB,CAAC;QACjC,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kCAAkC;QAC/C,YAAY;QACZ,UAAU,EAAE,aAAa,EAAE;KAC5B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type TokenStorage } from "@prisma/management-api-sdk";
2
+ export declare class AuthError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export type LoginOptions = {
6
+ tokenStorage?: TokenStorage;
7
+ clientId?: string;
8
+ apiBaseUrl?: string;
9
+ authBaseUrl?: string;
10
+ hostname?: string;
11
+ port?: number;
12
+ openUrl?: (url: string) => Promise<unknown> | unknown;
13
+ };
14
+ export declare function login(options?: LoginOptions): Promise<void>;
15
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAKpC,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACvD,CAAC;AAEF,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,iBAyDrD"}
@@ -0,0 +1,128 @@
1
+ import events from "node:events";
2
+ import http from "node:http";
3
+ import { createManagementApiSdk, AuthError as SDKAuthError, } from "@prisma/management-api-sdk";
4
+ import open from "open";
5
+ import { CLIENT_ID, getApiBaseUrl } from "./client.js";
6
+ import { FileTokenStorage } from "./token-storage.js";
7
+ export class AuthError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "AuthError";
11
+ }
12
+ }
13
+ export async function login(options = {}) {
14
+ const hostname = options.hostname ?? "localhost";
15
+ const port = options.port ?? 0;
16
+ const server = http.createServer();
17
+ server.listen({ host: hostname, port });
18
+ try {
19
+ const addressInfo = await events
20
+ .once(server, "listening")
21
+ .then(() => server.address());
22
+ const state = new LoginState({
23
+ hostname,
24
+ port: addressInfo.port,
25
+ tokenStorage: options.tokenStorage,
26
+ clientId: options.clientId,
27
+ apiBaseUrl: options.apiBaseUrl,
28
+ authBaseUrl: options.authBaseUrl,
29
+ openUrl: options.openUrl,
30
+ });
31
+ const authResult = new Promise((resolve, reject) => {
32
+ server.on("request", async (req, res) => {
33
+ const url = new URL(`http://${state.host}${req.url}`);
34
+ if (url.pathname !== "/auth/callback") {
35
+ res.statusCode = 404;
36
+ res.end("Not found");
37
+ return;
38
+ }
39
+ try {
40
+ await state.handleCallback(url);
41
+ }
42
+ catch (error) {
43
+ res.statusCode = 400;
44
+ const message = error instanceof Error ? error.message : String(error);
45
+ res.end(message);
46
+ reject(error);
47
+ return;
48
+ }
49
+ res.setHeader("Content-Type", "text/html");
50
+ res.end(`<html><body><p>Success! You may now close this page.</p></body></html>`);
51
+ resolve();
52
+ });
53
+ });
54
+ await state.openLoginPage();
55
+ await authResult;
56
+ }
57
+ finally {
58
+ if (server.listening) {
59
+ await new Promise((resolve) => server.close(() => resolve()));
60
+ }
61
+ }
62
+ }
63
+ class LoginState {
64
+ options;
65
+ latestVerifier;
66
+ latestState;
67
+ sdk;
68
+ openUrl;
69
+ constructor(options) {
70
+ this.options = options;
71
+ const tokenStorage = options.tokenStorage ?? new FileTokenStorage();
72
+ this.sdk = createManagementApiSdk({
73
+ clientId: options.clientId ?? CLIENT_ID,
74
+ redirectUri: `http://${options.hostname}:${options.port}/auth/callback`,
75
+ tokenStorage,
76
+ apiBaseUrl: options.apiBaseUrl ?? getApiBaseUrl(),
77
+ authBaseUrl: options.authBaseUrl,
78
+ });
79
+ this.openUrl = options.openUrl ?? open;
80
+ }
81
+ async openLoginPage() {
82
+ const { url, state, verifier } = await this.sdk.getLoginUrl({
83
+ scope: "workspace:admin offline_access",
84
+ additionalParams: {
85
+ utm_source: "compute-cli",
86
+ utm_medium: "command-login",
87
+ utm_campaign: "compute-cli",
88
+ },
89
+ });
90
+ this.latestState = state;
91
+ this.latestVerifier = verifier;
92
+ await this.openUrl(url);
93
+ }
94
+ async handleCallback(url) {
95
+ if (url.pathname !== "/auth/callback") {
96
+ throw new AuthError("Not a callback");
97
+ }
98
+ const params = url.searchParams;
99
+ const error = params.get("error");
100
+ if (error) {
101
+ const errorDescription = params.get("error_description");
102
+ throw new AuthError(errorDescription ? `${error}: ${errorDescription}` : error);
103
+ }
104
+ if (!this.latestVerifier) {
105
+ throw new AuthError("No verifier found");
106
+ }
107
+ if (!this.latestState) {
108
+ throw new AuthError("No state found");
109
+ }
110
+ try {
111
+ await this.sdk.handleCallback({
112
+ callbackUrl: url,
113
+ verifier: this.latestVerifier,
114
+ expectedState: this.latestState,
115
+ });
116
+ }
117
+ catch (error) {
118
+ if (error instanceof SDKAuthError) {
119
+ throw new AuthError(error.message);
120
+ }
121
+ throw new AuthError(error instanceof Error ? error.message : "Unknown error during login");
122
+ }
123
+ }
124
+ get host() {
125
+ return `${this.options.hostname}:${this.options.port}`;
126
+ }
127
+ }
128
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/lib/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TokenStorage, Tokens } from "@prisma/management-api-sdk";
2
+ export declare class FileTokenStorage implements TokenStorage {
3
+ private credentialsStore;
4
+ constructor();
5
+ getTokens(): Promise<Tokens | null>;
6
+ setTokens(tokens: Tokens): Promise<void>;
7
+ clearTokens(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=token-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-storage.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/token-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGvE,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,gBAAgB,CAAmB;;IAMrC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQnC"}