alpic 0.0.0-dev.ff063bb → 0.0.0-dev.ff13ae5

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 (149) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +142 -0
  3. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  4. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  5. package/dist/__tests__/deploy-flags.e2e.test.js +111 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  7. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deploy.e2e.test.js +168 -0
  9. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  10. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +250 -0
  12. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  13. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +121 -0
  15. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  16. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +139 -0
  18. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +319 -0
  21. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  24. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  25. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  26. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  27. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  28. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  30. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  31. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  32. package/dist/__tests__/git.e2e.test.js +221 -0
  33. package/dist/__tests__/git.e2e.test.js.map +1 -0
  34. package/dist/__tests__/mock-server.d.ts +23 -0
  35. package/dist/__tests__/mock-server.js +583 -0
  36. package/dist/__tests__/mock-server.js.map +1 -0
  37. package/dist/__tests__/utils.d.ts +67 -0
  38. package/dist/__tests__/utils.js +255 -0
  39. package/dist/__tests__/utils.js.map +1 -0
  40. package/dist/api.d.ts +3 -9
  41. package/dist/api.js +14 -32
  42. package/dist/api.js.map +1 -1
  43. package/dist/commands/deploy.d.ts +7 -4
  44. package/dist/commands/deploy.js +63 -31
  45. package/dist/commands/deploy.js.map +1 -1
  46. package/dist/commands/environment-variable/add.d.ts +14 -0
  47. package/dist/commands/environment-variable/add.js +46 -0
  48. package/dist/commands/environment-variable/add.js.map +1 -0
  49. package/dist/commands/environment-variable/list.d.ts +9 -0
  50. package/dist/commands/environment-variable/list.js +44 -0
  51. package/dist/commands/environment-variable/list.js.map +1 -0
  52. package/dist/commands/environment-variable/remove.d.ts +11 -0
  53. package/dist/commands/environment-variable/remove.js +32 -0
  54. package/dist/commands/environment-variable/remove.js.map +1 -0
  55. package/dist/commands/environment-variable/update.d.ts +13 -0
  56. package/dist/commands/environment-variable/update.js +40 -0
  57. package/dist/commands/environment-variable/update.js.map +1 -0
  58. package/dist/commands/git/connect.d.ts +10 -0
  59. package/dist/commands/git/connect.js +58 -0
  60. package/dist/commands/git/connect.js.map +1 -0
  61. package/dist/commands/git/disconnect.d.ts +9 -0
  62. package/dist/commands/git/disconnect.js +41 -0
  63. package/dist/commands/git/disconnect.js.map +1 -0
  64. package/dist/commands/git.d.ts +6 -0
  65. package/dist/commands/git.js +17 -0
  66. package/dist/commands/git.js.map +1 -0
  67. package/dist/commands/login.d.ts +6 -0
  68. package/dist/commands/login.js +32 -0
  69. package/dist/commands/login.js.map +1 -0
  70. package/dist/commands/logout.d.ts +6 -0
  71. package/dist/commands/logout.js +20 -0
  72. package/dist/commands/logout.js.map +1 -0
  73. package/dist/commands/telemetry/disable.d.ts +5 -0
  74. package/dist/commands/telemetry/disable.js +14 -0
  75. package/dist/commands/telemetry/disable.js.map +1 -0
  76. package/dist/commands/telemetry/enable.d.ts +5 -0
  77. package/dist/commands/telemetry/enable.js +13 -0
  78. package/dist/commands/telemetry/enable.js.map +1 -0
  79. package/dist/commands/telemetry/status.d.ts +5 -0
  80. package/dist/commands/telemetry/status.js +19 -0
  81. package/dist/commands/telemetry/status.js.map +1 -0
  82. package/dist/commands/whoami.d.ts +6 -0
  83. package/dist/commands/whoami.js +13 -0
  84. package/dist/commands/whoami.js.map +1 -0
  85. package/dist/env.d.ts +4 -0
  86. package/dist/env.js +10 -0
  87. package/dist/env.js.map +1 -0
  88. package/dist/lib/alpic-command.d.ts +6 -0
  89. package/dist/lib/alpic-command.js +27 -0
  90. package/dist/lib/alpic-command.js.map +1 -0
  91. package/dist/lib/archive.d.ts +3 -3
  92. package/dist/lib/archive.js +11 -15
  93. package/dist/lib/archive.js.map +1 -1
  94. package/dist/lib/auth/auth.d.ts +2 -0
  95. package/dist/lib/auth/auth.js +21 -0
  96. package/dist/lib/auth/auth.js.map +1 -0
  97. package/dist/lib/auth/oauth/client.d.ts +28 -0
  98. package/dist/lib/auth/oauth/client.js +110 -0
  99. package/dist/lib/auth/oauth/client.js.map +1 -0
  100. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  101. package/dist/lib/auth/oauth/constants.js +3 -0
  102. package/dist/lib/auth/oauth/constants.js.map +1 -0
  103. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  104. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  105. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  106. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  107. package/dist/lib/auth/oauth/server/index.js +102 -0
  108. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  109. package/dist/lib/auth/whoami.d.ts +1 -0
  110. package/dist/lib/auth/whoami.js +41 -0
  111. package/dist/lib/auth/whoami.js.map +1 -0
  112. package/dist/lib/base-workflow.d.ts +10 -0
  113. package/dist/lib/base-workflow.js +22 -0
  114. package/dist/lib/base-workflow.js.map +1 -0
  115. package/dist/lib/config.d.ts +2 -2
  116. package/dist/lib/config.js +7 -7
  117. package/dist/lib/config.js.map +1 -1
  118. package/dist/lib/deployment.d.ts +20 -0
  119. package/dist/lib/deployment.js +42 -0
  120. package/dist/lib/deployment.js.map +1 -0
  121. package/dist/lib/environment-variable.d.ts +41 -0
  122. package/dist/lib/environment-variable.js +304 -0
  123. package/dist/lib/environment-variable.js.map +1 -0
  124. package/dist/lib/git.d.ts +22 -0
  125. package/dist/lib/git.js +131 -0
  126. package/dist/lib/git.js.map +1 -0
  127. package/dist/lib/global-store.d.ts +28 -0
  128. package/dist/lib/global-store.js +76 -0
  129. package/dist/lib/global-store.js.map +1 -0
  130. package/dist/lib/project.d.ts +71 -10
  131. package/dist/lib/project.js +274 -124
  132. package/dist/lib/project.js.map +1 -1
  133. package/dist/lib/table.d.ts +8 -0
  134. package/dist/lib/table.js +27 -0
  135. package/dist/lib/table.js.map +1 -0
  136. package/dist/lib/telemetry.d.ts +7 -0
  137. package/dist/lib/telemetry.js +66 -0
  138. package/dist/lib/telemetry.js.map +1 -0
  139. package/dist/lib/utils.d.ts +1 -0
  140. package/dist/lib/utils.js +17 -0
  141. package/dist/lib/utils.js.map +1 -0
  142. package/dist/lib/utils.test.d.ts +1 -0
  143. package/dist/lib/utils.test.js +14 -0
  144. package/dist/lib/utils.test.js.map +1 -0
  145. package/dist/posthog.d.ts +3 -0
  146. package/dist/posthog.js +10 -0
  147. package/dist/posthog.js.map +1 -0
  148. package/dist/types.d.ts +0 -34
  149. package/package.json +35 -11
@@ -0,0 +1,583 @@
1
+ import * as https from "node:https";
2
+ import { OpenAPIHandler } from "@orpc/openapi/node";
3
+ import { ORPCError, implement } from "@orpc/server";
4
+ import express, {} from "express";
5
+ import { randomUUID } from "node:crypto";
6
+ import { readFileSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { contract } from "@alpic-ai/api";
10
+ const __testDirname = dirname(fileURLToPath(import.meta.url));
11
+ const FIXTURE_CERT_PATH = join(__testDirname, "fixtures", "certs", "localhost-cert.pem");
12
+ const FIXTURE_KEY_PATH = join(__testDirname, "fixtures", "certs", "localhost-key.pem");
13
+ function getTlsAssets() {
14
+ return {
15
+ key: readFileSync(FIXTURE_KEY_PATH, "utf8"),
16
+ cert: readFileSync(FIXTURE_CERT_PATH, "utf8"),
17
+ certPath: FIXTURE_CERT_PATH,
18
+ };
19
+ }
20
+ export class MockApiServer {
21
+ server = null;
22
+ app;
23
+ port = null;
24
+ mockData;
25
+ callHistory = [];
26
+ constructor() {
27
+ this.app = express();
28
+ this.mockData = {
29
+ projects: new Map(),
30
+ environments: new Map(),
31
+ deployments: new Map(),
32
+ environmentVariables: new Map(),
33
+ };
34
+ }
35
+ async start() {
36
+ if (this.server) {
37
+ throw new Error("Server is already running");
38
+ }
39
+ this.configureServer();
40
+ const tlsAssets = getTlsAssets();
41
+ process.env.NODE_EXTRA_CA_CERTS = tlsAssets.certPath;
42
+ const httpsOptions = { key: tlsAssets.key, cert: tlsAssets.cert };
43
+ return new Promise((resolve) => {
44
+ this.server = https.createServer(httpsOptions, this.app).listen(0, "127.0.0.1", () => {
45
+ if (!this.server) {
46
+ throw new Error("Server is not running");
47
+ }
48
+ const address = this.server.address();
49
+ this.port = address.port;
50
+ const url = `https://127.0.0.1:${this.port}`;
51
+ resolve(url);
52
+ });
53
+ });
54
+ }
55
+ configureServer() {
56
+ this.app.put("/__mock__upload/:token", express.raw({ type: "*/*", limit: "50mb" }), async (req, res) => {
57
+ const apiCall = {
58
+ method: req.method,
59
+ path: req.path,
60
+ timestamp: new Date(),
61
+ input: { token: req.params.token, size: req.body.length },
62
+ responseStatus: 200,
63
+ };
64
+ this.callHistory.push(apiCall);
65
+ res.status(200).end();
66
+ });
67
+ this.app.use(express.json());
68
+ this.app.get("/.well-known/oauth-protected-resource", (_req, res) => {
69
+ const base = `https://127.0.0.1:${this.port}`;
70
+ res.status(200).json({
71
+ resource: "https://api.alpic.ai",
72
+ authorization_servers: [base],
73
+ bearer_methods_supported: ["header"],
74
+ scopes_supported: ["openid", "email", "profile"],
75
+ resource_documentation: "https://docs.alpic.ai",
76
+ });
77
+ });
78
+ this.app.get("/.well-known/openid-configuration", (_req, res) => {
79
+ const base = `https://127.0.0.1:${this.port}`;
80
+ res.status(200).json({
81
+ issuer: base,
82
+ userinfo_endpoint: `${base}/oauth2/userInfo`,
83
+ authorization_endpoint: `${base}/oauth2/authorize`,
84
+ token_endpoint: `${base}/oauth2/token`,
85
+ jwks_uri: `${base}/.well-known/jwks.json`,
86
+ });
87
+ });
88
+ this.app.get("/oauth2/userInfo", (req, res) => {
89
+ const auth = req.headers.authorization;
90
+ if (!auth?.startsWith("Bearer ")) {
91
+ res.status(401).json({ error: "Missing or invalid Authorization" });
92
+ return;
93
+ }
94
+ res.status(200).json({
95
+ sub: "test-sub",
96
+ email_verified: "true",
97
+ identities: [],
98
+ name: "Test User",
99
+ email: "test@example.com",
100
+ picture: "",
101
+ username: "testuser",
102
+ });
103
+ });
104
+ const router = implement(contract).router({
105
+ tunnels: {
106
+ getTicket: {
107
+ v1: implement(contract.tunnels.getTicket.v1).handler(async () => {
108
+ return {
109
+ subdomain: "cool-mongoose-123",
110
+ ticket: "mock-ticket",
111
+ tunnelHost: "tunnel.alpic.dev",
112
+ };
113
+ }),
114
+ },
115
+ },
116
+ teams: {
117
+ list: {
118
+ v1: implement(contract.teams.list.v1).handler(async () => {
119
+ return [
120
+ {
121
+ id: "mock-team-id",
122
+ name: "Mock Team",
123
+ createdAt: new Date(),
124
+ hasStripeAccount: false,
125
+ },
126
+ ];
127
+ }),
128
+ },
129
+ },
130
+ analytics: {
131
+ get: {
132
+ v1: implement(contract.analytics.get.v1).handler(async ({ input }) => {
133
+ const project = this.mockData.projects.get(input.projectId);
134
+ if (!project) {
135
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
136
+ }
137
+ const emptyTimeSeries = {
138
+ sessions_count: [],
139
+ requests_count: [],
140
+ requests_latency_mean: [],
141
+ tool_errors: [],
142
+ mcp_errors: [],
143
+ output_token_mean: [],
144
+ task_count: [],
145
+ };
146
+ return {
147
+ metadata: {
148
+ startTimestamp: input.startTimestamp,
149
+ endTimestamp: input.endTimestamp,
150
+ timeZone: input.timeZone,
151
+ startDate: new Date(input.startTimestamp),
152
+ interval: "1h",
153
+ },
154
+ timeSeries: emptyTimeSeries,
155
+ };
156
+ }),
157
+ },
158
+ },
159
+ projects: {
160
+ list: {
161
+ v1: implement(contract.projects.list.v1).handler(async () => {
162
+ return Array.from(this.mockData.projects.values()).map((project) => ({
163
+ id: project.id,
164
+ name: project.name,
165
+ teamId: project.teamId,
166
+ environments: project.environments,
167
+ productionEnvironment: project.productionEnvironment,
168
+ sourceRepository: project.sourceRepository,
169
+ runtime: project.runtime,
170
+ transport: project.transport,
171
+ rootDirectory: project.rootDirectory,
172
+ buildCommand: project.buildCommand,
173
+ buildOutputDir: project.buildOutputDir,
174
+ installCommand: project.installCommand,
175
+ startCommand: project.startCommand,
176
+ createdAt: project.createdAt,
177
+ }));
178
+ }),
179
+ },
180
+ get: {
181
+ v1: implement(contract.projects.get.v1).handler(async ({ input }) => {
182
+ const project = this.mockData.projects.get(input.projectId);
183
+ if (!project) {
184
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
185
+ }
186
+ return project;
187
+ }),
188
+ },
189
+ create: {
190
+ v1: implement(contract.projects.create.v1).handler(async ({ input }) => {
191
+ const projectId = randomUUID();
192
+ const teamId = "mock-team-id";
193
+ const productionEnvId = randomUUID();
194
+ const productionEnvName = "production";
195
+ const project = {
196
+ id: projectId,
197
+ name: input.name,
198
+ teamId,
199
+ environments: [],
200
+ productionEnvironment: {
201
+ id: productionEnvId,
202
+ name: productionEnvName,
203
+ },
204
+ sourceRepository: input.sourceRepository ?? null,
205
+ runtime: input.runtime,
206
+ transport: input.transport ?? null,
207
+ rootDirectory: input.rootDirectory ?? null,
208
+ buildCommand: input.settings?.buildCommand ?? null,
209
+ buildOutputDir: input.settings?.buildOutputDir ?? null,
210
+ installCommand: input.settings?.installCommand ?? null,
211
+ startCommand: input.settings?.startCommand ?? null,
212
+ createdAt: new Date(),
213
+ };
214
+ const environment = {
215
+ id: productionEnvId,
216
+ name: productionEnvName,
217
+ sourceBranch: null,
218
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
219
+ domains: [`https://mcp-${projectId}.alpic.ai`],
220
+ createdAt: new Date(),
221
+ projectId,
222
+ };
223
+ this.mockData.environments.set(productionEnvId, environment);
224
+ const fullProject = {
225
+ ...project,
226
+ productionEnvironment: {
227
+ id: productionEnvId,
228
+ name: productionEnvName,
229
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
230
+ domains: [],
231
+ latestDeployment: null,
232
+ },
233
+ environments: [
234
+ {
235
+ id: productionEnvId,
236
+ name: productionEnvName,
237
+ sourceBranch: null,
238
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
239
+ createdAt: new Date(),
240
+ projectId,
241
+ latestDeployment: null,
242
+ },
243
+ ],
244
+ };
245
+ this.mockData.projects.set(projectId, fullProject);
246
+ return project;
247
+ }),
248
+ },
249
+ update: {
250
+ v1: implement(contract.projects.update.v1).handler(async ({ input }) => {
251
+ const project = this.mockData.projects.get(input.projectId);
252
+ if (!project) {
253
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
254
+ }
255
+ if (input.sourceRepository !== undefined) {
256
+ project.sourceRepository = input.sourceRepository;
257
+ }
258
+ this.mockData.projects.set(input.projectId, project);
259
+ return project;
260
+ }),
261
+ },
262
+ delete: {
263
+ v1: implement(contract.projects.delete.v1).handler(async ({ input }) => {
264
+ const project = this.mockData.projects.get(input.projectId);
265
+ if (!project) {
266
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
267
+ }
268
+ this.mockData.projects.delete(input.projectId);
269
+ return { success: true };
270
+ }),
271
+ },
272
+ },
273
+ environments: {
274
+ create: {
275
+ v1: implement(contract.environments.create.v1).handler(async ({ input }) => {
276
+ const project = this.mockData.projects.get(input.projectId);
277
+ if (!project) {
278
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
279
+ }
280
+ const environmentId = randomUUID();
281
+ const mcpServerUrl = `https://mcp-${environmentId}.alpic.ai`;
282
+ const createdAt = new Date();
283
+ const environment = {
284
+ id: environmentId,
285
+ name: input.name,
286
+ sourceBranch: input.sourceBranch,
287
+ mcpServerUrl,
288
+ domains: [mcpServerUrl],
289
+ createdAt,
290
+ projectId: input.projectId,
291
+ };
292
+ this.mockData.environments.set(environmentId, environment);
293
+ this.mockData.projects.set(input.projectId, {
294
+ ...project,
295
+ environments: [
296
+ ...project.environments,
297
+ {
298
+ id: environmentId,
299
+ name: input.name,
300
+ sourceBranch: input.sourceBranch,
301
+ mcpServerUrl,
302
+ createdAt,
303
+ projectId: input.projectId,
304
+ latestDeployment: null,
305
+ },
306
+ ],
307
+ });
308
+ return {
309
+ id: environmentId,
310
+ name: input.name,
311
+ sourceBranch: input.sourceBranch,
312
+ createdAt,
313
+ projectId: input.projectId,
314
+ urls: [mcpServerUrl],
315
+ };
316
+ }),
317
+ },
318
+ get: {
319
+ v1: implement(contract.environments.get.v1).handler(async ({ input }) => {
320
+ const environment = this.mockData.environments.get(input.environmentId);
321
+ if (!environment) {
322
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
323
+ }
324
+ return environment;
325
+ }),
326
+ },
327
+ deploy: {
328
+ v1: implement(contract.environments.deploy.v1).handler(async ({ input }) => {
329
+ const environment = this.mockData.environments.get(input.environmentId);
330
+ if (!environment) {
331
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
332
+ }
333
+ const deploymentId = randomUUID();
334
+ const deployment = {
335
+ id: deploymentId,
336
+ status: "ongoing",
337
+ sourceRef: environment.sourceBranch,
338
+ sourceCommitId: randomUUID().slice(0, 7),
339
+ sourceCommitMessage: "Mock deployment",
340
+ authorUsername: "test-user",
341
+ authorAvatarUrl: null,
342
+ startedAt: new Date(),
343
+ completedAt: null,
344
+ deploymentPageUrl: "https://app.alpic.ai/deployments/mock",
345
+ };
346
+ this.mockData.deployments.set(deploymentId, deployment);
347
+ return deployment;
348
+ }),
349
+ },
350
+ },
351
+ environmentVariables: {
352
+ list: {
353
+ v1: implement(contract.environmentVariables.list.v1).handler(async ({ input }) => {
354
+ const environment = this.mockData.environments.get(input.environmentId);
355
+ if (!environment) {
356
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
357
+ }
358
+ return this.mockData.environmentVariables.get(input.environmentId) ?? [];
359
+ }),
360
+ },
361
+ create: {
362
+ v1: implement(contract.environmentVariables.create.v1).handler(async ({ input }) => {
363
+ const environment = this.mockData.environments.get(input.environmentId);
364
+ if (!environment) {
365
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
366
+ }
367
+ const existing = this.mockData.environmentVariables.get(input.environmentId) ?? [];
368
+ const newVars = input.environmentVariables.map((variable) => ({
369
+ id: randomUUID(),
370
+ key: variable.key,
371
+ value: variable.value,
372
+ isSecret: variable.isSecret,
373
+ createdAt: new Date(),
374
+ }));
375
+ for (const newVar of newVars) {
376
+ if (existing.some((existingVar) => existingVar.key === newVar.key)) {
377
+ throw new ORPCError("BAD_REQUEST", {
378
+ message: `Environment variable "${newVar.key}" already exists`,
379
+ });
380
+ }
381
+ }
382
+ this.mockData.environmentVariables.set(input.environmentId, [...existing, ...newVars]);
383
+ return { success: true };
384
+ }),
385
+ },
386
+ update: {
387
+ v1: implement(contract.environmentVariables.update.v1).handler(async ({ input }) => {
388
+ for (const [environmentId, variables] of this.mockData.environmentVariables.entries()) {
389
+ const index = variables.findIndex((variable) => variable.id === input.environmentVariableId);
390
+ if (index !== -1) {
391
+ const updated = variables.map((variable, i) => i === index
392
+ ? { ...variable, key: input.key, value: input.value ?? variable.value, isSecret: input.isSecret }
393
+ : variable);
394
+ this.mockData.environmentVariables.set(environmentId, updated);
395
+ return { success: true };
396
+ }
397
+ }
398
+ throw new ORPCError("NOT_FOUND", { message: "Environment variable not found" });
399
+ }),
400
+ },
401
+ delete: {
402
+ v1: implement(contract.environmentVariables.delete.v1).handler(async ({ input }) => {
403
+ for (const [environmentId, variables] of this.mockData.environmentVariables.entries()) {
404
+ const index = variables.findIndex((variable) => variable.id === input.environmentVariableId);
405
+ if (index !== -1) {
406
+ this.mockData.environmentVariables.set(environmentId, variables.filter((_, i) => i !== index));
407
+ return { success: true };
408
+ }
409
+ }
410
+ throw new ORPCError("NOT_FOUND", { message: "Environment variable not found" });
411
+ }),
412
+ },
413
+ },
414
+ deployments: {
415
+ list: {
416
+ v1: implement(contract.deployments.list.v1).handler(async ({ input }) => {
417
+ const project = this.mockData.projects.get(input.projectId);
418
+ if (!project) {
419
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
420
+ }
421
+ return Array.from(this.mockData.deployments.values()).map((deployment) => ({
422
+ ...deployment,
423
+ isCurrent: deployment.status === "deployed",
424
+ environmentId: project.productionEnvironment?.id ?? "",
425
+ }));
426
+ }),
427
+ },
428
+ get: {
429
+ v1: implement(contract.deployments.get.v1).handler(async ({ input }) => {
430
+ const deployment = this.mockData.deployments.get(input.deploymentId);
431
+ if (!deployment) {
432
+ throw new ORPCError("NOT_FOUND", { message: "Deployment not found" });
433
+ }
434
+ if (deployment.status === "ongoing") {
435
+ const updatedDeployment = {
436
+ ...deployment,
437
+ status: "deployed",
438
+ completedAt: new Date(),
439
+ deploymentPageUrl: deployment.deploymentPageUrl ?? null,
440
+ };
441
+ this.mockData.deployments.set(input.deploymentId, updatedDeployment);
442
+ return updatedDeployment;
443
+ }
444
+ return deployment;
445
+ }),
446
+ },
447
+ getLogs: {
448
+ v1: implement(contract.deployments.getLogs.v1).handler(async ({ input }) => {
449
+ const deployment = this.mockData.deployments.get(input.deploymentId);
450
+ if (!deployment) {
451
+ throw new ORPCError("NOT_FOUND", { message: "Deployment not found" });
452
+ }
453
+ return {
454
+ logs: [{ timestamp: new Date(), content: "Mock log entry" }],
455
+ hasMoreLogs: false,
456
+ };
457
+ }),
458
+ },
459
+ uploadArtifact: {
460
+ v1: implement(contract.deployments.uploadArtifact.v1).handler(async () => {
461
+ const token = randomUUID();
462
+ const baseUrl = `https://127.0.0.1:${this.port}`;
463
+ const uploadUrl = `${baseUrl}/__mock__upload/${token}`;
464
+ return {
465
+ uploadUrl,
466
+ token,
467
+ expiresAt: new Date(Date.now() + 3600000),
468
+ };
469
+ }),
470
+ },
471
+ },
472
+ });
473
+ const handler = new OpenAPIHandler(router);
474
+ this.app.use(async (req, res) => {
475
+ const apiCall = {
476
+ method: req.method,
477
+ path: req.path,
478
+ timestamp: new Date(),
479
+ };
480
+ if (req.body) {
481
+ apiCall.input = req.body;
482
+ }
483
+ const result = await handler.handle(req, res, {
484
+ context: {},
485
+ });
486
+ if (!result.matched) {
487
+ apiCall.responseStatus = 404;
488
+ this.callHistory.push(apiCall);
489
+ res.status(404).json({ error: "Not found" });
490
+ return;
491
+ }
492
+ apiCall.responseStatus = res.statusCode || 200;
493
+ this.callHistory.push(apiCall);
494
+ });
495
+ }
496
+ async stop() {
497
+ return new Promise((resolve, reject) => {
498
+ if (!this.server) {
499
+ resolve();
500
+ return;
501
+ }
502
+ this.server.close((error) => {
503
+ if (error) {
504
+ console.error("[MOCK] Error stopping server:", error);
505
+ reject(error);
506
+ }
507
+ else {
508
+ this.server = null;
509
+ resolve();
510
+ }
511
+ });
512
+ });
513
+ }
514
+ getCalls(method, pathPattern) {
515
+ return this.callHistory.filter((call) => {
516
+ if (method && call.method !== method)
517
+ return false;
518
+ if (pathPattern) {
519
+ if (typeof pathPattern === "string") {
520
+ if (!call.path.includes(pathPattern))
521
+ return false;
522
+ }
523
+ else {
524
+ if (!pathPattern.test(call.path))
525
+ return false;
526
+ }
527
+ }
528
+ return true;
529
+ });
530
+ }
531
+ getLastCall(method, pathPattern) {
532
+ for (let i = this.callHistory.length - 1; i >= 0; i--) {
533
+ const call = this.callHistory[i];
534
+ if (!call)
535
+ continue;
536
+ if (method && call.method !== method)
537
+ continue;
538
+ if (pathPattern) {
539
+ if (typeof pathPattern === "string") {
540
+ if (!call.path.includes(pathPattern))
541
+ continue;
542
+ }
543
+ else {
544
+ if (!pathPattern.test(call.path))
545
+ continue;
546
+ }
547
+ }
548
+ return call;
549
+ }
550
+ return undefined;
551
+ }
552
+ addEnvironmentVariables(environmentId, variables) {
553
+ this.mockData.environmentVariables.set(environmentId, variables);
554
+ }
555
+ addProject(project) {
556
+ this.mockData.projects.set(project.id, project);
557
+ if (project.productionEnvironment) {
558
+ const env = {
559
+ id: project.productionEnvironment.id,
560
+ name: project.productionEnvironment.name,
561
+ sourceBranch: null,
562
+ mcpServerUrl: project.productionEnvironment.mcpServerUrl,
563
+ domains: [project.productionEnvironment.mcpServerUrl],
564
+ createdAt: new Date(),
565
+ projectId: project.id,
566
+ };
567
+ this.mockData.environments.set(env.id, env);
568
+ }
569
+ for (const env of project.environments) {
570
+ const fullEnv = {
571
+ id: env.id,
572
+ name: env.name,
573
+ sourceBranch: env.sourceBranch,
574
+ mcpServerUrl: env.mcpServerUrl,
575
+ domains: [env.mcpServerUrl],
576
+ createdAt: env.createdAt,
577
+ projectId: project.id,
578
+ };
579
+ this.mockData.environments.set(env.id, fullEnv);
580
+ }
581
+ }
582
+ }
583
+ //# sourceMappingURL=mock-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../src/__tests__/mock-server.ts"],"names":[],"mappings":"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"}