alpic 0.0.0-dev.c848d78 → 0.0.0-dev.c8f1fc4

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 (78) hide show
  1. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/deploy.e2e.test.js +185 -0
  3. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  4. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  5. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  6. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  7. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/git.e2e.test.js +182 -0
  9. package/dist/__tests__/git.e2e.test.js.map +1 -0
  10. package/dist/__tests__/mock-server.d.ts +22 -0
  11. package/dist/__tests__/mock-server.js +435 -0
  12. package/dist/__tests__/mock-server.js.map +1 -0
  13. package/dist/__tests__/utils.d.ts +55 -0
  14. package/dist/__tests__/utils.js +174 -0
  15. package/dist/__tests__/utils.js.map +1 -0
  16. package/dist/api.d.ts +4 -0
  17. package/dist/api.js +19 -0
  18. package/dist/api.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +9 -0
  20. package/dist/commands/deploy.js +86 -0
  21. package/dist/commands/deploy.js.map +1 -0
  22. package/dist/commands/git/connect.d.ts +9 -0
  23. package/dist/commands/git/connect.js +65 -0
  24. package/dist/commands/git/connect.js.map +1 -0
  25. package/dist/commands/git/disconnect.d.ts +9 -0
  26. package/dist/commands/git/disconnect.js +55 -0
  27. package/dist/commands/git/disconnect.js.map +1 -0
  28. package/dist/commands/{hello.d.ts → git.d.ts} +1 -1
  29. package/dist/commands/git.js +17 -0
  30. package/dist/commands/git.js.map +1 -0
  31. package/dist/commands/telemetry/disable.d.ts +5 -0
  32. package/dist/commands/telemetry/disable.js +14 -0
  33. package/dist/commands/telemetry/disable.js.map +1 -0
  34. package/dist/commands/telemetry/enable.d.ts +5 -0
  35. package/dist/commands/telemetry/enable.js +13 -0
  36. package/dist/commands/telemetry/enable.js.map +1 -0
  37. package/dist/commands/telemetry/status.d.ts +5 -0
  38. package/dist/commands/telemetry/status.js +19 -0
  39. package/dist/commands/telemetry/status.js.map +1 -0
  40. package/dist/lib/alpic-command.d.ts +4 -0
  41. package/dist/lib/alpic-command.js +20 -0
  42. package/dist/lib/alpic-command.js.map +1 -0
  43. package/dist/lib/archive.d.ts +7 -0
  44. package/dist/lib/archive.js +55 -0
  45. package/dist/lib/archive.js.map +1 -0
  46. package/dist/lib/auth.d.ts +1 -0
  47. package/dist/lib/auth.js +10 -0
  48. package/dist/lib/auth.js.map +1 -0
  49. package/dist/lib/config.d.ts +11 -0
  50. package/dist/lib/config.js +31 -0
  51. package/dist/lib/config.js.map +1 -0
  52. package/dist/lib/deployment.d.ts +21 -0
  53. package/dist/lib/deployment.js +38 -0
  54. package/dist/lib/deployment.js.map +1 -0
  55. package/dist/lib/git.d.ts +14 -0
  56. package/dist/lib/git.js +106 -0
  57. package/dist/lib/git.js.map +1 -0
  58. package/dist/lib/global-config.d.ts +9 -0
  59. package/dist/lib/global-config.js +48 -0
  60. package/dist/lib/global-config.js.map +1 -0
  61. package/dist/lib/project.d.ts +67 -0
  62. package/dist/lib/project.js +285 -0
  63. package/dist/lib/project.js.map +1 -0
  64. package/dist/lib/telemetry.d.ts +7 -0
  65. package/dist/lib/telemetry.js +66 -0
  66. package/dist/lib/telemetry.js.map +1 -0
  67. package/dist/lib/upload.d.ts +1 -0
  68. package/dist/lib/upload.js +14 -0
  69. package/dist/lib/upload.js.map +1 -0
  70. package/dist/posthog.d.ts +3 -0
  71. package/dist/posthog.js +10 -0
  72. package/dist/posthog.js.map +1 -0
  73. package/dist/types.d.ts +7 -0
  74. package/dist/types.js +2 -0
  75. package/dist/types.js.map +1 -0
  76. package/package.json +26 -6
  77. package/dist/commands/hello.js +0 -10
  78. package/dist/commands/hello.js.map +0 -1
@@ -0,0 +1,435 @@
1
+ import { OpenAPIHandler } from "@orpc/openapi/node";
2
+ import { ORPCError, implement } from "@orpc/server";
3
+ import express, {} from "express";
4
+ import { randomUUID } from "node:crypto";
5
+ import { contract } from "@alpic-ai/api";
6
+ export class MockApiServer {
7
+ server = null;
8
+ app;
9
+ port = null;
10
+ mockData;
11
+ callHistory = [];
12
+ constructor() {
13
+ this.app = express();
14
+ this.mockData = {
15
+ projects: new Map(),
16
+ environments: new Map(),
17
+ deployments: new Map(),
18
+ };
19
+ }
20
+ async start() {
21
+ if (this.server) {
22
+ throw new Error("Server is already running");
23
+ }
24
+ this.configureServer();
25
+ return new Promise((resolve) => {
26
+ this.server = this.app.listen(0, "127.0.0.1", () => {
27
+ const address = this.server.address();
28
+ this.port = address.port;
29
+ const url = `http://127.0.0.1:${this.port}`;
30
+ resolve(url);
31
+ });
32
+ });
33
+ }
34
+ configureServer() {
35
+ this.app.put("/__mock__upload/:token", express.raw({ type: "*/*", limit: "50mb" }), async (req, res) => {
36
+ const apiCall = {
37
+ method: req.method,
38
+ path: req.path,
39
+ timestamp: new Date(),
40
+ input: { token: req.params.token, size: req.body.length },
41
+ responseStatus: 200,
42
+ };
43
+ this.callHistory.push(apiCall);
44
+ res.status(200).end();
45
+ });
46
+ this.app.use(express.json());
47
+ const router = implement(contract).router({
48
+ teams: {
49
+ list: {
50
+ v1: implement(contract.teams.list.v1).handler(async () => {
51
+ return [
52
+ {
53
+ id: "mock-team-id",
54
+ name: "Mock Team",
55
+ createdAt: new Date(),
56
+ hasStripeAccount: false,
57
+ hasActiveSubscription: false,
58
+ },
59
+ ];
60
+ }),
61
+ },
62
+ },
63
+ analytics: {
64
+ get: {
65
+ v1: implement(contract.analytics.get.v1).handler(async ({ input }) => {
66
+ const project = this.mockData.projects.get(input.projectId);
67
+ if (!project) {
68
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
69
+ }
70
+ const emptyTimeSeries = {
71
+ sessions_count: [],
72
+ requests_count: [],
73
+ requests_latency_mean: [],
74
+ tool_errors: [],
75
+ mcp_errors: [],
76
+ output_token_mean: [],
77
+ task_count: [],
78
+ };
79
+ return {
80
+ metadata: {
81
+ startTimestamp: input.startTimestamp,
82
+ endTimestamp: input.endTimestamp,
83
+ timeZone: input.timeZone,
84
+ startDate: new Date(input.startTimestamp),
85
+ interval: "1h",
86
+ },
87
+ timeSeries: emptyTimeSeries,
88
+ };
89
+ }),
90
+ },
91
+ },
92
+ projects: {
93
+ list: {
94
+ v1: implement(contract.projects.list.v1).handler(async () => {
95
+ return Array.from(this.mockData.projects.values()).map((project) => ({
96
+ id: project.id,
97
+ name: project.name,
98
+ teamId: project.teamId,
99
+ environments: project.environments,
100
+ productionEnvironment: project.productionEnvironment,
101
+ sourceRepository: project.sourceRepository,
102
+ runtime: project.runtime,
103
+ transport: project.transport,
104
+ rootDirectory: project.rootDirectory,
105
+ buildCommand: project.buildCommand,
106
+ buildOutputDir: project.buildOutputDir,
107
+ installCommand: project.installCommand,
108
+ startCommand: project.startCommand,
109
+ createdAt: project.createdAt,
110
+ }));
111
+ }),
112
+ },
113
+ get: {
114
+ v1: implement(contract.projects.get.v1).handler(async ({ input }) => {
115
+ const project = this.mockData.projects.get(input.projectId);
116
+ if (!project) {
117
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
118
+ }
119
+ return project;
120
+ }),
121
+ },
122
+ create: {
123
+ v1: implement(contract.projects.create.v1).handler(async ({ input }) => {
124
+ const projectId = randomUUID();
125
+ const teamId = "mock-team-id";
126
+ const productionEnvId = randomUUID();
127
+ const productionEnvName = "production";
128
+ const project = {
129
+ id: projectId,
130
+ name: input.name,
131
+ teamId,
132
+ environments: [],
133
+ productionEnvironment: {
134
+ id: productionEnvId,
135
+ name: productionEnvName,
136
+ },
137
+ sourceRepository: input.sourceRepository ?? null,
138
+ runtime: input.runtime,
139
+ transport: input.transport ?? null,
140
+ rootDirectory: input.rootDirectory ?? null,
141
+ buildCommand: input.settings?.buildCommand ?? null,
142
+ buildOutputDir: input.settings?.buildOutputDir ?? null,
143
+ installCommand: input.settings?.installCommand ?? null,
144
+ startCommand: input.settings?.startCommand ?? null,
145
+ createdAt: new Date(),
146
+ };
147
+ const environment = {
148
+ id: productionEnvId,
149
+ name: productionEnvName,
150
+ sourceBranch: null,
151
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
152
+ domains: [`https://mcp-${projectId}.alpic.ai`],
153
+ createdAt: new Date(),
154
+ projectId,
155
+ };
156
+ this.mockData.environments.set(productionEnvId, environment);
157
+ const fullProject = {
158
+ ...project,
159
+ productionEnvironment: {
160
+ id: productionEnvId,
161
+ name: productionEnvName,
162
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
163
+ latestDeployment: null,
164
+ },
165
+ environments: [
166
+ {
167
+ id: productionEnvId,
168
+ name: productionEnvName,
169
+ sourceBranch: null,
170
+ mcpServerUrl: `https://mcp-${projectId}.alpic.ai`,
171
+ createdAt: new Date(),
172
+ projectId,
173
+ latestDeployment: null,
174
+ },
175
+ ],
176
+ };
177
+ this.mockData.projects.set(projectId, fullProject);
178
+ return project;
179
+ }),
180
+ },
181
+ update: {
182
+ v1: implement(contract.projects.update.v1).handler(async ({ input }) => {
183
+ const project = this.mockData.projects.get(input.projectId);
184
+ if (!project) {
185
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
186
+ }
187
+ if (input.sourceRepository !== undefined) {
188
+ project.sourceRepository = input.sourceRepository;
189
+ }
190
+ this.mockData.projects.set(input.projectId, project);
191
+ return project;
192
+ }),
193
+ },
194
+ },
195
+ environments: {
196
+ create: {
197
+ v1: implement(contract.environments.create.v1).handler(async ({ input }) => {
198
+ const project = this.mockData.projects.get(input.projectId);
199
+ if (!project) {
200
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
201
+ }
202
+ const environmentId = randomUUID();
203
+ const mcpServerUrl = `https://mcp-${environmentId}.alpic.ai`;
204
+ const createdAt = new Date();
205
+ const environment = {
206
+ id: environmentId,
207
+ name: input.name,
208
+ sourceBranch: input.sourceBranch,
209
+ mcpServerUrl,
210
+ domains: [mcpServerUrl],
211
+ createdAt,
212
+ projectId: input.projectId,
213
+ };
214
+ this.mockData.environments.set(environmentId, environment);
215
+ this.mockData.projects.set(input.projectId, {
216
+ ...project,
217
+ environments: [
218
+ ...project.environments,
219
+ {
220
+ id: environmentId,
221
+ name: input.name,
222
+ sourceBranch: input.sourceBranch,
223
+ mcpServerUrl,
224
+ createdAt,
225
+ projectId: input.projectId,
226
+ latestDeployment: null,
227
+ },
228
+ ],
229
+ });
230
+ return {
231
+ id: environmentId,
232
+ name: input.name,
233
+ sourceBranch: input.sourceBranch,
234
+ createdAt,
235
+ projectId: input.projectId,
236
+ urls: [mcpServerUrl],
237
+ };
238
+ }),
239
+ },
240
+ get: {
241
+ v1: implement(contract.environments.get.v1).handler(async ({ input }) => {
242
+ const environment = this.mockData.environments.get(input.environmentId);
243
+ if (!environment) {
244
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
245
+ }
246
+ return environment;
247
+ }),
248
+ },
249
+ deploy: {
250
+ v1: implement(contract.environments.deploy.v1).handler(async ({ input }) => {
251
+ const environment = this.mockData.environments.get(input.environmentId);
252
+ if (!environment) {
253
+ throw new ORPCError("NOT_FOUND", { message: "Environment not found" });
254
+ }
255
+ const deploymentId = randomUUID();
256
+ const deployment = {
257
+ id: deploymentId,
258
+ status: "ongoing",
259
+ sourceRef: environment.sourceBranch,
260
+ sourceCommitId: randomUUID().slice(0, 7),
261
+ sourceCommitMessage: "Mock deployment",
262
+ authorUsername: "test-user",
263
+ authorAvatarUrl: null,
264
+ startedAt: new Date(),
265
+ completedAt: null,
266
+ };
267
+ this.mockData.deployments.set(deploymentId, deployment);
268
+ return deployment;
269
+ }),
270
+ },
271
+ },
272
+ deployments: {
273
+ list: {
274
+ v1: implement(contract.deployments.list.v1).handler(async ({ input }) => {
275
+ const project = this.mockData.projects.get(input.projectId);
276
+ if (!project) {
277
+ throw new ORPCError("NOT_FOUND", { message: "Project not found" });
278
+ }
279
+ return Array.from(this.mockData.deployments.values()).map((deployment) => ({
280
+ ...deployment,
281
+ isCurrent: deployment.status === "deployed",
282
+ environmentId: project.productionEnvironment?.id ?? "",
283
+ }));
284
+ }),
285
+ },
286
+ get: {
287
+ v1: implement(contract.deployments.get.v1).handler(async ({ input }) => {
288
+ const deployment = this.mockData.deployments.get(input.deploymentId);
289
+ if (!deployment) {
290
+ throw new ORPCError("NOT_FOUND", { message: "Deployment not found" });
291
+ }
292
+ if (deployment.status === "ongoing") {
293
+ const updatedDeployment = {
294
+ ...deployment,
295
+ status: "deployed",
296
+ completedAt: new Date(),
297
+ };
298
+ this.mockData.deployments.set(input.deploymentId, updatedDeployment);
299
+ return updatedDeployment;
300
+ }
301
+ return deployment;
302
+ }),
303
+ },
304
+ getLogs: {
305
+ v1: implement(contract.deployments.getLogs.v1).handler(async ({ input }) => {
306
+ const deployment = this.mockData.deployments.get(input.deploymentId);
307
+ if (!deployment) {
308
+ throw new ORPCError("NOT_FOUND", { message: "Deployment not found" });
309
+ }
310
+ return {
311
+ logs: [{ timestamp: new Date(), content: "Mock log entry" }],
312
+ hasMoreLogs: false,
313
+ };
314
+ }),
315
+ },
316
+ uploadArtifact: {
317
+ v1: implement(contract.deployments.uploadArtifact.v1).handler(async () => {
318
+ const token = randomUUID();
319
+ const baseUrl = `http://127.0.0.1:${this.port}`;
320
+ const uploadUrl = `${baseUrl}/__mock__upload/${token}`;
321
+ return {
322
+ uploadUrl,
323
+ token,
324
+ expiresAt: new Date(Date.now() + 3600000),
325
+ };
326
+ }),
327
+ },
328
+ },
329
+ });
330
+ const handler = new OpenAPIHandler(router);
331
+ this.app.use(async (req, res) => {
332
+ const apiCall = {
333
+ method: req.method,
334
+ path: req.path,
335
+ timestamp: new Date(),
336
+ };
337
+ if (req.body) {
338
+ apiCall.input = req.body;
339
+ }
340
+ const result = await handler.handle(req, res, {
341
+ context: {},
342
+ });
343
+ if (!result.matched) {
344
+ apiCall.responseStatus = 404;
345
+ this.callHistory.push(apiCall);
346
+ res.status(404).json({ error: "Not found" });
347
+ return;
348
+ }
349
+ apiCall.responseStatus = res.statusCode || 200;
350
+ this.callHistory.push(apiCall);
351
+ });
352
+ }
353
+ async stop() {
354
+ return new Promise((resolve, reject) => {
355
+ if (!this.server) {
356
+ resolve();
357
+ return;
358
+ }
359
+ this.server.close((error) => {
360
+ if (error) {
361
+ console.error("[MOCK] Error stopping server:", error);
362
+ reject(error);
363
+ }
364
+ else {
365
+ this.server = null;
366
+ resolve();
367
+ }
368
+ });
369
+ });
370
+ }
371
+ getCalls(method, pathPattern) {
372
+ return this.callHistory.filter((call) => {
373
+ if (method && call.method !== method)
374
+ return false;
375
+ if (pathPattern) {
376
+ if (typeof pathPattern === "string") {
377
+ if (!call.path.includes(pathPattern))
378
+ return false;
379
+ }
380
+ else {
381
+ if (!pathPattern.test(call.path))
382
+ return false;
383
+ }
384
+ }
385
+ return true;
386
+ });
387
+ }
388
+ getLastCall(method, pathPattern) {
389
+ for (let i = this.callHistory.length - 1; i >= 0; i--) {
390
+ const call = this.callHistory[i];
391
+ if (method && call.method !== method)
392
+ continue;
393
+ if (pathPattern) {
394
+ if (typeof pathPattern === "string") {
395
+ if (!call.path.includes(pathPattern))
396
+ continue;
397
+ }
398
+ else {
399
+ if (!pathPattern.test(call.path))
400
+ continue;
401
+ }
402
+ }
403
+ return call;
404
+ }
405
+ return undefined;
406
+ }
407
+ addProject(project) {
408
+ this.mockData.projects.set(project.id, project);
409
+ if (project.productionEnvironment) {
410
+ const env = {
411
+ id: project.productionEnvironment.id,
412
+ name: project.productionEnvironment.name,
413
+ sourceBranch: null,
414
+ mcpServerUrl: project.productionEnvironment.mcpServerUrl,
415
+ domains: [project.productionEnvironment.mcpServerUrl],
416
+ createdAt: new Date(),
417
+ projectId: project.id,
418
+ };
419
+ this.mockData.environments.set(env.id, env);
420
+ }
421
+ for (const env of project.environments) {
422
+ const fullEnv = {
423
+ id: env.id,
424
+ name: env.name,
425
+ sourceBranch: env.sourceBranch,
426
+ mcpServerUrl: env.mcpServerUrl,
427
+ domains: [env.mcpServerUrl],
428
+ createdAt: env.createdAt,
429
+ projectId: project.id,
430
+ };
431
+ this.mockData.environments.set(env.id, fullEnv);
432
+ }
433
+ }
434
+ }
435
+ //# 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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"}
@@ -0,0 +1,55 @@
1
+ import type { RouterOutput } from "@alpic-ai/api";
2
+ import { type ApiCall } from "./mock-server";
3
+ type Expectable = string | RegExp;
4
+ type ProjectGetV1 = RouterOutput["projects"]["get"]["v1"];
5
+ export type CliSessionOptions = {
6
+ cwd?: string;
7
+ env?: Record<string, string | undefined>;
8
+ cols?: number;
9
+ rows?: number;
10
+ timeoutMs?: number;
11
+ };
12
+ export type CliController = {
13
+ /** Wait until stdout/stderr contains a string or matches a regex */
14
+ expect: (pattern: Expectable, opts?: {
15
+ timeoutMs?: number;
16
+ }) => Promise<void>;
17
+ /** Send a line (adds newline) */
18
+ send: (line: string) => Promise<void>;
19
+ /** Send raw data (no newline) */
20
+ write: (data: string) => void;
21
+ /** Current accumulated output */
22
+ output: () => string;
23
+ /** Clear accumulated output (handy between phases) */
24
+ clear: () => void;
25
+ /** End session (SIGTERM) */
26
+ stop: () => void;
27
+ };
28
+ export declare function cliSession(cmd: string, args: string[], options: CliSessionOptions, fn: (cli: CliController) => Promise<void>): Promise<{
29
+ exitCode: number | null;
30
+ output: string;
31
+ }>;
32
+ export type BuildMockProjectParams = {
33
+ projectId: string;
34
+ teamId: string;
35
+ projectName: string;
36
+ environmentId: string;
37
+ environmentName: string;
38
+ sourceRepository?: string | null;
39
+ sourceBranch?: string | null;
40
+ };
41
+ export declare function buildMockProject(params: BuildMockProjectParams): ProjectGetV1;
42
+ export type SetupTestDirectoryOptions = {
43
+ /** Temp directory prefix (default: "alpic-cli-e2e") */
44
+ prefix?: string;
45
+ /** If true, run git init and add origin/upstream remotes */
46
+ initGit?: boolean;
47
+ };
48
+ export declare function setupTestDirectory(options?: SetupTestDirectoryOptions): Promise<{
49
+ cwd: string;
50
+ binPath: string;
51
+ }>;
52
+ export declare function createConfigFile(cwd: string, projectId: string, teamId: string, projectName: string, environmentId: string, environmentName: string): void;
53
+ export declare function runGit(args: string[], cwd: string): void;
54
+ export declare function expectSuccessfulApiCall(call: ApiCall | undefined, customAssertions?: (call: ApiCall) => void): asserts call is ApiCall;
55
+ export {};