@alpic-ai/api 0.0.0-dev.fdab6ef → 0.0.0-dev.fe594dc

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.
package/dist/index.d.mts CHANGED
@@ -5,7 +5,7 @@ import { z } from "zod";
5
5
  //#region src/api.contract.d.ts
6
6
  type ApiContext = {
7
7
  request: Request & {
8
- teamId: string;
8
+ teamIds: string[];
9
9
  };
10
10
  };
11
11
  declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
@@ -29,7 +29,93 @@ declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuil
29
29
  BAD_REQUEST: {};
30
30
  }>, Record<never, never>>;
31
31
  declare const contract: {
32
+ teams: {
33
+ list: {
34
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
35
+ id: z.ZodString;
36
+ name: z.ZodString;
37
+ createdAt: z.ZodCoercedDate<unknown>;
38
+ hasStripeAccount: z.ZodBoolean;
39
+ hasActiveSubscription: z.ZodBoolean;
40
+ }, z.core.$strip>>, Record<never, never>, Record<never, never>>;
41
+ };
42
+ };
43
+ analytics: {
44
+ get: {
45
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
46
+ projectId: z.ZodString;
47
+ startTimestamp: z.ZodCoercedNumber<unknown>;
48
+ endTimestamp: z.ZodCoercedNumber<unknown>;
49
+ timeZone: z.ZodString;
50
+ }, z.core.$strip>, z.ZodObject<{
51
+ metadata: z.ZodObject<{
52
+ startTimestamp: z.ZodNumber;
53
+ endTimestamp: z.ZodNumber;
54
+ timeZone: z.ZodString;
55
+ startDate: z.ZodCoercedDate<unknown>;
56
+ interval: z.ZodString;
57
+ }, z.core.$strip>;
58
+ timeSeries: z.ZodObject<{
59
+ sessions_count: z.ZodArray<z.ZodObject<{
60
+ timestamp: z.ZodNumber;
61
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
62
+ }, z.core.$strip>>;
63
+ requests_count: z.ZodArray<z.ZodObject<{
64
+ timestamp: z.ZodNumber;
65
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
66
+ }, z.core.$strip>>;
67
+ requests_latency_mean: z.ZodArray<z.ZodObject<{
68
+ timestamp: z.ZodNumber;
69
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
70
+ }, z.core.$strip>>;
71
+ tool_errors: z.ZodArray<z.ZodObject<{
72
+ timestamp: z.ZodNumber;
73
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
74
+ }, z.core.$strip>>;
75
+ mcp_errors: z.ZodArray<z.ZodObject<{
76
+ timestamp: z.ZodNumber;
77
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
78
+ }, z.core.$strip>>;
79
+ output_token_mean: z.ZodArray<z.ZodObject<{
80
+ timestamp: z.ZodNumber;
81
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
82
+ }, z.core.$strip>>;
83
+ task_count: z.ZodArray<z.ZodObject<{
84
+ timestamp: z.ZodNumber;
85
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
86
+ }, z.core.$strip>>;
87
+ }, z.core.$strip>;
88
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
89
+ NOT_FOUND: {};
90
+ BAD_REQUEST: {};
91
+ }>, Record<never, never>>;
92
+ };
93
+ };
32
94
  deployments: {
95
+ list: {
96
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
97
+ projectId: z.ZodString;
98
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
99
+ id: z.ZodString;
100
+ status: z.ZodEnum<{
101
+ ongoing: "ongoing";
102
+ deployed: "deployed";
103
+ failed: "failed";
104
+ canceled: "canceled";
105
+ }>;
106
+ sourceRef: z.ZodNullable<z.ZodString>;
107
+ sourceCommitId: z.ZodNullable<z.ZodString>;
108
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
109
+ authorUsername: z.ZodNullable<z.ZodString>;
110
+ authorAvatarUrl: z.ZodNullable<z.ZodString>;
111
+ startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
112
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
113
+ isCurrent: z.ZodBoolean;
114
+ environmentId: z.ZodString;
115
+ }, z.core.$strip>>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
116
+ NOT_FOUND: {};
117
+ }>, Record<never, never>>;
118
+ };
33
119
  get: {
34
120
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
35
121
  deploymentId: z.ZodString;
@@ -48,17 +134,33 @@ declare const contract: {
48
134
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
49
135
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
50
136
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
137
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
51
138
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
52
139
  NOT_FOUND: {};
53
140
  }>, Record<never, never>>;
54
141
  };
55
142
  uploadArtifact: {
56
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodObject<{
143
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
144
+ teamId: z.ZodOptional<z.ZodString>;
145
+ }, z.core.$strip>>, z.ZodObject<{
57
146
  uploadUrl: z.ZodString;
58
147
  token: z.ZodString;
59
148
  expiresAt: z.ZodCoercedDate<unknown>;
60
149
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
61
150
  };
151
+ getLogs: {
152
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
153
+ deploymentId: z.ZodString;
154
+ }, z.core.$strip>, z.ZodObject<{
155
+ logs: z.ZodArray<z.ZodObject<{
156
+ timestamp: z.ZodOptional<z.ZodCoercedDate<unknown>>;
157
+ content: z.ZodOptional<z.ZodString>;
158
+ }, z.core.$strip>>;
159
+ hasMoreLogs: z.ZodBoolean;
160
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
161
+ NOT_FOUND: {};
162
+ }>, Record<never, never>>;
163
+ };
62
164
  };
63
165
  environments: {
64
166
  create: {
@@ -117,6 +219,7 @@ declare const contract: {
117
219
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
118
220
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
119
221
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
222
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
120
223
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
121
224
  NOT_FOUND: {};
122
225
  BAD_REQUEST: {};
@@ -124,6 +227,75 @@ declare const contract: {
124
227
  };
125
228
  };
126
229
  projects: {
230
+ update: {
231
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
232
+ projectId: z.ZodString;
233
+ name: z.ZodOptional<z.ZodString>;
234
+ sourceRepository: z.ZodOptional<z.ZodNullable<z.ZodString>>;
235
+ }, z.core.$strip>, z.ZodObject<{
236
+ id: z.ZodString;
237
+ name: z.ZodString;
238
+ teamId: z.ZodString;
239
+ sourceRepository: z.ZodNullable<z.ZodString>;
240
+ runtime: z.ZodEnum<{
241
+ "python3.13": "python3.13";
242
+ "python3.14": "python3.14";
243
+ node22: "node22";
244
+ node24: "node24";
245
+ }>;
246
+ transport: z.ZodNullable<z.ZodEnum<{
247
+ stdio: "stdio";
248
+ sse: "sse";
249
+ streamablehttp: "streamablehttp";
250
+ }>>;
251
+ rootDirectory: z.ZodNullable<z.ZodString>;
252
+ buildCommand: z.ZodNullable<z.ZodString>;
253
+ buildOutputDir: z.ZodNullable<z.ZodString>;
254
+ installCommand: z.ZodNullable<z.ZodString>;
255
+ startCommand: z.ZodNullable<z.ZodString>;
256
+ createdAt: z.ZodCoercedDate<unknown>;
257
+ productionEnvironment: z.ZodNullable<z.ZodObject<{
258
+ id: z.ZodString;
259
+ name: z.ZodString;
260
+ mcpServerUrl: z.ZodString;
261
+ latestDeployment: z.ZodNullable<z.ZodObject<{
262
+ id: z.ZodString;
263
+ status: z.ZodEnum<{
264
+ ongoing: "ongoing";
265
+ deployed: "deployed";
266
+ failed: "failed";
267
+ canceled: "canceled";
268
+ }>;
269
+ sourceCommitId: z.ZodNullable<z.ZodString>;
270
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
271
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
272
+ }, z.core.$strip>>;
273
+ }, z.core.$strip>>;
274
+ environments: z.ZodArray<z.ZodObject<{
275
+ id: z.ZodString;
276
+ name: z.ZodString;
277
+ sourceBranch: z.ZodNullable<z.ZodString>;
278
+ mcpServerUrl: z.ZodString;
279
+ createdAt: z.ZodCoercedDate<unknown>;
280
+ projectId: z.ZodString;
281
+ latestDeployment: z.ZodNullable<z.ZodObject<{
282
+ id: z.ZodString;
283
+ status: z.ZodEnum<{
284
+ ongoing: "ongoing";
285
+ deployed: "deployed";
286
+ failed: "failed";
287
+ canceled: "canceled";
288
+ }>;
289
+ sourceCommitId: z.ZodNullable<z.ZodString>;
290
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
291
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
292
+ }, z.core.$strip>>;
293
+ }, z.core.$strip>>;
294
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
295
+ NOT_FOUND: {};
296
+ BAD_REQUEST: {};
297
+ }>, Record<never, never>>;
298
+ };
127
299
  get: {
128
300
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
129
301
  projectId: z.ZodString;
@@ -254,6 +426,7 @@ declare const contract: {
254
426
  };
255
427
  create: {
256
428
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
429
+ teamId: z.ZodOptional<z.ZodString>;
257
430
  name: z.ZodString;
258
431
  sourceRepository: z.ZodOptional<z.ZodString>;
259
432
  branchName: z.ZodOptional<z.ZodString>;
@@ -315,6 +488,15 @@ declare const contract: {
315
488
  BAD_REQUEST: {};
316
489
  }>, Record<never, never>>;
317
490
  };
491
+ delete: {
492
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
493
+ projectId: z.ZodString;
494
+ }, z.core.$strip>, z.ZodObject<{
495
+ success: z.ZodLiteral<true>;
496
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
497
+ NOT_FOUND: {};
498
+ }>, Record<never, never>>;
499
+ };
318
500
  };
319
501
  };
320
502
  type RouterInput = InferContractRouterInputs<typeof contract>;
package/dist/index.mjs CHANGED
@@ -82,6 +82,7 @@ const deploymentSchema = z.object({
82
82
  startedAt: z.coerce.date().nullable(),
83
83
  completedAt: z.coerce.date().nullable()
84
84
  });
85
+ const deploymentWithPageUrlSchema = deploymentSchema.extend({ deploymentPageUrl: z.url().nullable() });
85
86
  const createEnvironmentContractV1 = oc.route({
86
87
  path: "/v1/environments",
87
88
  method: "POST",
@@ -106,7 +107,7 @@ const createEnvironmentContractV1 = oc.route({
106
107
  projectId: z.string().describe("The ID of the project the environment belongs to")
107
108
  }));
108
109
  const getEnvironmentContractV1 = oc.route({
109
- path: "/v1/environments/:environmentId",
110
+ path: "/v1/environments/{environmentId}",
110
111
  method: "GET",
111
112
  summary: "Get an environment",
112
113
  description: "Get an environment by ID",
@@ -153,7 +154,7 @@ const projectOutputSchema = z.object({
153
154
  environments: z.array(environmentSchema)
154
155
  });
155
156
  const getProjectContractV1 = oc.route({
156
- path: "/v1/projects/:projectId",
157
+ path: "/v1/projects/{projectId}",
157
158
  method: "GET",
158
159
  summary: "Get a project",
159
160
  description: "Get a project by ID",
@@ -179,6 +180,7 @@ const createProjectContractV1 = oc.route({
179
180
  NOT_FOUND: {},
180
181
  BAD_REQUEST: {}
181
182
  }).input(z.object({
183
+ teamId: z.string().optional(),
182
184
  name: z.string().min(1).max(100),
183
185
  sourceRepository: z.string().optional(),
184
186
  branchName: z.string().min(1).optional(),
@@ -209,8 +211,31 @@ const createProjectContractV1 = oc.route({
209
211
  startCommand: z.string().nullable(),
210
212
  createdAt: z.coerce.date()
211
213
  }));
214
+ const deleteProjectContractV1 = oc.route({
215
+ path: "/v1/projects/:projectId",
216
+ method: "DELETE",
217
+ summary: "Delete a project",
218
+ description: "Delete a project and all its environments",
219
+ tags: ["projects"],
220
+ successDescription: "The project has been deleted successfully"
221
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.object({ success: z.literal(true) }));
222
+ const updateProjectContractV1 = oc.route({
223
+ path: "/v1/projects/{projectId}",
224
+ method: "PATCH",
225
+ summary: "Update a project",
226
+ description: "Update project settings",
227
+ tags: ["projects"],
228
+ successDescription: "The project has been updated successfully"
229
+ }).errors({
230
+ NOT_FOUND: {},
231
+ BAD_REQUEST: {}
232
+ }).input(z.object({
233
+ projectId: z.string().describe("The ID of the project"),
234
+ name: z.string().min(1).max(100).optional().describe("The new name for the project"),
235
+ sourceRepository: z.string().nullable().optional().describe("The source repository to connect to the project")
236
+ })).output(projectOutputSchema);
212
237
  const deployEnvironmentContractV1 = oc.route({
213
- path: "/v1/environments/:environmentId/deploy",
238
+ path: "/v1/environments/{environmentId}/deploy",
214
239
  method: "POST",
215
240
  summary: "Deploy an environment",
216
241
  description: "Deploy an environment",
@@ -222,7 +247,7 @@ const deployEnvironmentContractV1 = oc.route({
222
247
  }).input(z.object({
223
248
  environmentId: z.string().describe("The ID of the environment to deploy"),
224
249
  token: z.string().describe("The token to identify the source archive").optional()
225
- })).output(deploymentSchema);
250
+ })).output(deploymentWithPageUrlSchema);
226
251
  const uploadDeploymentArtifactContractV1 = oc.route({
227
252
  path: "/v1/deployments/upload",
228
253
  method: "POST",
@@ -230,23 +255,104 @@ const uploadDeploymentArtifactContractV1 = oc.route({
230
255
  description: "Return a presigned S3 URL to upload a deployment artifact",
231
256
  tags: ["deployments"],
232
257
  successDescription: "The presigned upload URL has been generated successfully"
233
- }).output(z.object({
258
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.object({
234
259
  uploadUrl: z.string().url().describe("Presigned S3 URL to upload the source archive with HTTP PUT"),
235
260
  token: z.string().describe("Token to identify the source archive"),
236
261
  expiresAt: z.coerce.date().describe("Expiration date of the presigned URL")
237
262
  }));
263
+ const listProjectDeploymentsContractV1 = oc.route({
264
+ path: "/v1/projects/{projectId}/deployments",
265
+ method: "GET",
266
+ summary: "List project deployments",
267
+ description: "List all deployments for a project",
268
+ tags: ["deployments"],
269
+ successDescription: "The list of deployments"
270
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.array(deploymentSchema.extend({
271
+ isCurrent: z.boolean(),
272
+ environmentId: z.string()
273
+ })));
238
274
  const getDeploymentContractV1 = oc.route({
239
- path: "/v1/deployments/:deploymentId",
275
+ path: "/v1/deployments/{deploymentId}",
240
276
  method: "GET",
241
277
  summary: "Get a deployment",
242
278
  description: "Get a deployment by ID",
243
279
  tags: ["deployments"],
244
280
  successDescription: "The deployment details"
245
- }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentSchema);
281
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentWithPageUrlSchema);
282
+ const getDeploymentLogsContractV1 = oc.route({
283
+ path: "/v1/deployments/{deploymentId}/logs",
284
+ method: "GET",
285
+ summary: "Get deployment logs",
286
+ description: "Get the logs for a deployment",
287
+ tags: ["deployments"],
288
+ successDescription: "The deployment logs"
289
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(z.object({
290
+ logs: z.array(z.object({
291
+ timestamp: z.coerce.date().optional(),
292
+ content: z.string().optional()
293
+ })),
294
+ hasMoreLogs: z.boolean()
295
+ }));
296
+ const analyticsDataPointSchema = z.object({
297
+ timestamp: z.number(),
298
+ categories: z.record(z.string(), z.unknown())
299
+ });
300
+ const analyticsTimeSeriesSchema = z.object({
301
+ sessions_count: z.array(analyticsDataPointSchema),
302
+ requests_count: z.array(analyticsDataPointSchema),
303
+ requests_latency_mean: z.array(analyticsDataPointSchema),
304
+ tool_errors: z.array(analyticsDataPointSchema),
305
+ mcp_errors: z.array(analyticsDataPointSchema),
306
+ output_token_mean: z.array(analyticsDataPointSchema),
307
+ task_count: z.array(analyticsDataPointSchema)
308
+ });
309
+ const getProjectAnalyticsContractV1 = oc.route({
310
+ path: "/v1/analytics/{projectId}",
311
+ method: "GET",
312
+ summary: "Get project analytics",
313
+ description: "Get analytics data for a project over a time range",
314
+ tags: ["analytics"],
315
+ successDescription: "The project analytics data"
316
+ }).errors({
317
+ NOT_FOUND: {},
318
+ BAD_REQUEST: {}
319
+ }).input(z.object({
320
+ projectId: z.string().describe("The ID of the project"),
321
+ startTimestamp: z.coerce.number().describe("Start timestamp in milliseconds"),
322
+ endTimestamp: z.coerce.number().describe("End timestamp in milliseconds"),
323
+ timeZone: z.string().describe("IANA timezone (e.g. Europe/Paris)")
324
+ }).refine(({ startTimestamp, endTimestamp }) => endTimestamp - startTimestamp > 0, { message: "End date must be after start date" }).refine(({ startTimestamp, endTimestamp }) => endTimestamp - startTimestamp <= 744 * 60 * 60 * 1e3, { message: "Date range must be less than 1 month" }).refine(({ timeZone }) => Intl.supportedValuesOf("timeZone").includes(timeZone), { message: "Time zone must be a valid IANA timezone" })).output(z.object({
325
+ metadata: z.object({
326
+ startTimestamp: z.number(),
327
+ endTimestamp: z.number(),
328
+ timeZone: z.string(),
329
+ startDate: z.coerce.date(),
330
+ interval: z.string()
331
+ }),
332
+ timeSeries: analyticsTimeSeriesSchema
333
+ }));
334
+ const listTeamsContractV1 = oc.route({
335
+ path: "/v1/teams",
336
+ method: "GET",
337
+ summary: "List teams",
338
+ description: "List all teams for the authenticated user",
339
+ tags: ["teams"],
340
+ successDescription: "The list of teams"
341
+ }).output(z.array(z.object({
342
+ id: z.string(),
343
+ name: z.string(),
344
+ createdAt: z.coerce.date(),
345
+ hasStripeAccount: z.boolean(),
346
+ hasActiveSubscription: z.boolean()
347
+ })));
246
348
  const contract = {
349
+ teams: { list: { v1: listTeamsContractV1 } },
350
+ analytics: { get: { v1: getProjectAnalyticsContractV1 } },
247
351
  deployments: {
352
+ list: { v1: listProjectDeploymentsContractV1 },
248
353
  get: { v1: getDeploymentContractV1 },
249
- uploadArtifact: { v1: uploadDeploymentArtifactContractV1 }
354
+ uploadArtifact: { v1: uploadDeploymentArtifactContractV1 },
355
+ getLogs: { v1: getDeploymentLogsContractV1 }
250
356
  },
251
357
  environments: {
252
358
  create: { v1: createEnvironmentContractV1 },
@@ -254,9 +360,11 @@ const contract = {
254
360
  deploy: { v1: deployEnvironmentContractV1 }
255
361
  },
256
362
  projects: {
363
+ update: { v1: updateProjectContractV1 },
257
364
  get: { v1: getProjectContractV1 },
258
365
  list: { v1: listProjectsContractV1 },
259
- create: { v1: createProjectContractV1 }
366
+ create: { v1: createProjectContractV1 },
367
+ delete: { v1: deleteProjectContractV1 }
260
368
  }
261
369
  };
262
370
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpic-ai/api",
3
- "version": "0.0.0-dev.fdab6ef",
3
+ "version": "0.0.0-dev.fe594dc",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,7 +17,7 @@
17
17
  "author": "Alpic",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@orpc/contract": "^1.13.4",
20
+ "@orpc/contract": "^1.13.5",
21
21
  "zod": "^4.3.6"
22
22
  },
23
23
  "devDependencies": {