@alpic-ai/api 0.0.0-staging.05f123d → 0.0.0-staging.076ee72

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
@@ -6,6 +6,7 @@ import { z } from "zod";
6
6
  type ApiContext = {
7
7
  request: Request & {
8
8
  teamIds: string[];
9
+ defaultTeamId: string | undefined;
9
10
  };
10
11
  };
11
12
  declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
@@ -29,7 +30,93 @@ declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuil
29
30
  BAD_REQUEST: {};
30
31
  }>, Record<never, never>>;
31
32
  declare const contract: {
33
+ teams: {
34
+ list: {
35
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
36
+ id: z.ZodString;
37
+ name: z.ZodString;
38
+ createdAt: z.ZodCoercedDate<unknown>;
39
+ hasStripeAccount: z.ZodBoolean;
40
+ hasActiveSubscription: z.ZodBoolean;
41
+ }, z.core.$strip>>, Record<never, never>, Record<never, never>>;
42
+ };
43
+ };
44
+ analytics: {
45
+ get: {
46
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
47
+ projectId: z.ZodString;
48
+ startTimestamp: z.ZodCoercedNumber<unknown>;
49
+ endTimestamp: z.ZodCoercedNumber<unknown>;
50
+ timeZone: z.ZodString;
51
+ }, z.core.$strip>, z.ZodObject<{
52
+ metadata: z.ZodObject<{
53
+ startTimestamp: z.ZodNumber;
54
+ endTimestamp: z.ZodNumber;
55
+ timeZone: z.ZodString;
56
+ startDate: z.ZodCoercedDate<unknown>;
57
+ interval: z.ZodString;
58
+ }, z.core.$strip>;
59
+ timeSeries: z.ZodObject<{
60
+ sessions_count: z.ZodArray<z.ZodObject<{
61
+ timestamp: z.ZodNumber;
62
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
63
+ }, z.core.$strip>>;
64
+ requests_count: z.ZodArray<z.ZodObject<{
65
+ timestamp: z.ZodNumber;
66
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
67
+ }, z.core.$strip>>;
68
+ requests_latency_mean: z.ZodArray<z.ZodObject<{
69
+ timestamp: z.ZodNumber;
70
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
71
+ }, z.core.$strip>>;
72
+ tool_errors: z.ZodArray<z.ZodObject<{
73
+ timestamp: z.ZodNumber;
74
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
75
+ }, z.core.$strip>>;
76
+ mcp_errors: z.ZodArray<z.ZodObject<{
77
+ timestamp: z.ZodNumber;
78
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
79
+ }, z.core.$strip>>;
80
+ output_token_mean: z.ZodArray<z.ZodObject<{
81
+ timestamp: z.ZodNumber;
82
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
83
+ }, z.core.$strip>>;
84
+ task_count: z.ZodArray<z.ZodObject<{
85
+ timestamp: z.ZodNumber;
86
+ categories: z.ZodRecord<z.ZodString, z.ZodUnknown>;
87
+ }, z.core.$strip>>;
88
+ }, z.core.$strip>;
89
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
90
+ NOT_FOUND: {};
91
+ BAD_REQUEST: {};
92
+ }>, Record<never, never>>;
93
+ };
94
+ };
32
95
  deployments: {
96
+ list: {
97
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
98
+ projectId: z.ZodString;
99
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
100
+ id: z.ZodString;
101
+ status: z.ZodEnum<{
102
+ ongoing: "ongoing";
103
+ deployed: "deployed";
104
+ failed: "failed";
105
+ canceled: "canceled";
106
+ }>;
107
+ sourceRef: z.ZodNullable<z.ZodString>;
108
+ sourceCommitId: z.ZodNullable<z.ZodString>;
109
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
110
+ authorUsername: z.ZodNullable<z.ZodString>;
111
+ authorAvatarUrl: z.ZodNullable<z.ZodString>;
112
+ startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
113
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
114
+ isCurrent: z.ZodBoolean;
115
+ environmentId: z.ZodString;
116
+ }, z.core.$strip>>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
117
+ NOT_FOUND: {};
118
+ }>, Record<never, never>>;
119
+ };
33
120
  get: {
34
121
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
35
122
  deploymentId: z.ZodString;
@@ -48,6 +135,7 @@ declare const contract: {
48
135
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
49
136
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
50
137
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
138
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
51
139
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
52
140
  NOT_FOUND: {};
53
141
  }>, Record<never, never>>;
@@ -61,6 +149,19 @@ declare const contract: {
61
149
  expiresAt: z.ZodCoercedDate<unknown>;
62
150
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
63
151
  };
152
+ getLogs: {
153
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
154
+ deploymentId: z.ZodString;
155
+ }, z.core.$strip>, z.ZodObject<{
156
+ logs: z.ZodArray<z.ZodObject<{
157
+ timestamp: z.ZodOptional<z.ZodCoercedDate<unknown>>;
158
+ content: z.ZodOptional<z.ZodString>;
159
+ }, z.core.$strip>>;
160
+ hasMoreLogs: z.ZodBoolean;
161
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
162
+ NOT_FOUND: {};
163
+ }>, Record<never, never>>;
164
+ };
64
165
  };
65
166
  environments: {
66
167
  create: {
@@ -119,6 +220,7 @@ declare const contract: {
119
220
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
120
221
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
121
222
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
223
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
122
224
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
123
225
  NOT_FOUND: {};
124
226
  BAD_REQUEST: {};
@@ -126,6 +228,75 @@ declare const contract: {
126
228
  };
127
229
  };
128
230
  projects: {
231
+ update: {
232
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
233
+ projectId: z.ZodString;
234
+ name: z.ZodOptional<z.ZodString>;
235
+ sourceRepository: z.ZodOptional<z.ZodNullable<z.ZodString>>;
236
+ }, z.core.$strip>, z.ZodObject<{
237
+ id: z.ZodString;
238
+ name: z.ZodString;
239
+ teamId: z.ZodString;
240
+ sourceRepository: z.ZodNullable<z.ZodString>;
241
+ runtime: z.ZodEnum<{
242
+ "python3.13": "python3.13";
243
+ "python3.14": "python3.14";
244
+ node22: "node22";
245
+ node24: "node24";
246
+ }>;
247
+ transport: z.ZodNullable<z.ZodEnum<{
248
+ stdio: "stdio";
249
+ sse: "sse";
250
+ streamablehttp: "streamablehttp";
251
+ }>>;
252
+ rootDirectory: z.ZodNullable<z.ZodString>;
253
+ buildCommand: z.ZodNullable<z.ZodString>;
254
+ buildOutputDir: z.ZodNullable<z.ZodString>;
255
+ installCommand: z.ZodNullable<z.ZodString>;
256
+ startCommand: z.ZodNullable<z.ZodString>;
257
+ createdAt: z.ZodCoercedDate<unknown>;
258
+ productionEnvironment: z.ZodNullable<z.ZodObject<{
259
+ id: z.ZodString;
260
+ name: z.ZodString;
261
+ mcpServerUrl: z.ZodString;
262
+ latestDeployment: z.ZodNullable<z.ZodObject<{
263
+ id: z.ZodString;
264
+ status: z.ZodEnum<{
265
+ ongoing: "ongoing";
266
+ deployed: "deployed";
267
+ failed: "failed";
268
+ canceled: "canceled";
269
+ }>;
270
+ sourceCommitId: z.ZodNullable<z.ZodString>;
271
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
272
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
273
+ }, z.core.$strip>>;
274
+ }, z.core.$strip>>;
275
+ environments: z.ZodArray<z.ZodObject<{
276
+ id: z.ZodString;
277
+ name: z.ZodString;
278
+ sourceBranch: z.ZodNullable<z.ZodString>;
279
+ mcpServerUrl: z.ZodString;
280
+ createdAt: z.ZodCoercedDate<unknown>;
281
+ projectId: z.ZodString;
282
+ latestDeployment: z.ZodNullable<z.ZodObject<{
283
+ id: z.ZodString;
284
+ status: z.ZodEnum<{
285
+ ongoing: "ongoing";
286
+ deployed: "deployed";
287
+ failed: "failed";
288
+ canceled: "canceled";
289
+ }>;
290
+ sourceCommitId: z.ZodNullable<z.ZodString>;
291
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
292
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
293
+ }, z.core.$strip>>;
294
+ }, z.core.$strip>>;
295
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
296
+ NOT_FOUND: {};
297
+ BAD_REQUEST: {};
298
+ }>, Record<never, never>>;
299
+ };
129
300
  get: {
130
301
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
131
302
  projectId: z.ZodString;
@@ -193,7 +364,9 @@ declare const contract: {
193
364
  }>, Record<never, never>>;
194
365
  };
195
366
  list: {
196
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
367
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
368
+ teamId: z.ZodOptional<z.ZodString>;
369
+ }, z.core.$strip>>, z.ZodArray<z.ZodObject<{
197
370
  id: z.ZodString;
198
371
  name: z.ZodString;
199
372
  teamId: z.ZodString;
@@ -318,6 +491,15 @@ declare const contract: {
318
491
  BAD_REQUEST: {};
319
492
  }>, Record<never, never>>;
320
493
  };
494
+ delete: {
495
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
496
+ projectId: z.ZodString;
497
+ }, z.core.$strip>, z.ZodObject<{
498
+ success: z.ZodLiteral<true>;
499
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
500
+ NOT_FOUND: {};
501
+ }>, Record<never, never>>;
502
+ };
321
503
  };
322
504
  };
323
505
  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",
@@ -167,7 +168,7 @@ const listProjectsContractV1 = oc.route({
167
168
  description: "List all projects for a team",
168
169
  tags: ["projects"],
169
170
  successDescription: "The list of projects"
170
- }).output(z.array(projectOutputSchema));
171
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.array(projectOutputSchema));
171
172
  const createProjectContractV1 = oc.route({
172
173
  path: "/v1/projects",
173
174
  method: "POST",
@@ -180,7 +181,7 @@ const createProjectContractV1 = oc.route({
180
181
  BAD_REQUEST: {}
181
182
  }).input(z.object({
182
183
  teamId: z.string().optional(),
183
- name: z.string().min(1).max(100),
184
+ name: z.string().trim().min(1).max(100),
184
185
  sourceRepository: z.string().optional(),
185
186
  branchName: z.string().min(1).optional(),
186
187
  runtime: runtimeSchema,
@@ -210,8 +211,31 @@ const createProjectContractV1 = oc.route({
210
211
  startCommand: z.string().nullable(),
211
212
  createdAt: z.coerce.date()
212
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);
213
237
  const deployEnvironmentContractV1 = oc.route({
214
- path: "/v1/environments/:environmentId/deploy",
238
+ path: "/v1/environments/{environmentId}/deploy",
215
239
  method: "POST",
216
240
  summary: "Deploy an environment",
217
241
  description: "Deploy an environment",
@@ -223,7 +247,7 @@ const deployEnvironmentContractV1 = oc.route({
223
247
  }).input(z.object({
224
248
  environmentId: z.string().describe("The ID of the environment to deploy"),
225
249
  token: z.string().describe("The token to identify the source archive").optional()
226
- })).output(deploymentSchema);
250
+ })).output(deploymentWithPageUrlSchema);
227
251
  const uploadDeploymentArtifactContractV1 = oc.route({
228
252
  path: "/v1/deployments/upload",
229
253
  method: "POST",
@@ -236,18 +260,99 @@ const uploadDeploymentArtifactContractV1 = oc.route({
236
260
  token: z.string().describe("Token to identify the source archive"),
237
261
  expiresAt: z.coerce.date().describe("Expiration date of the presigned URL")
238
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
+ })));
239
274
  const getDeploymentContractV1 = oc.route({
240
- path: "/v1/deployments/:deploymentId",
275
+ path: "/v1/deployments/{deploymentId}",
241
276
  method: "GET",
242
277
  summary: "Get a deployment",
243
278
  description: "Get a deployment by ID",
244
279
  tags: ["deployments"],
245
280
  successDescription: "The deployment details"
246
- }).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
+ })));
247
348
  const contract = {
349
+ teams: { list: { v1: listTeamsContractV1 } },
350
+ analytics: { get: { v1: getProjectAnalyticsContractV1 } },
248
351
  deployments: {
352
+ list: { v1: listProjectDeploymentsContractV1 },
249
353
  get: { v1: getDeploymentContractV1 },
250
- uploadArtifact: { v1: uploadDeploymentArtifactContractV1 }
354
+ uploadArtifact: { v1: uploadDeploymentArtifactContractV1 },
355
+ getLogs: { v1: getDeploymentLogsContractV1 }
251
356
  },
252
357
  environments: {
253
358
  create: { v1: createEnvironmentContractV1 },
@@ -255,9 +360,11 @@ const contract = {
255
360
  deploy: { v1: deployEnvironmentContractV1 }
256
361
  },
257
362
  projects: {
363
+ update: { v1: updateProjectContractV1 },
258
364
  get: { v1: getProjectContractV1 },
259
365
  list: { v1: listProjectsContractV1 },
260
- create: { v1: createProjectContractV1 }
366
+ create: { v1: createProjectContractV1 },
367
+ delete: { v1: deleteProjectContractV1 }
261
368
  }
262
369
  };
263
370
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpic-ai/api",
3
- "version": "0.0.0-staging.05f123d",
3
+ "version": "0.0.0-staging.076ee72",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,12 +17,11 @@
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": {
24
24
  "@total-typescript/tsconfig": "^1.0.4",
25
- "biome": "^0.3.3",
26
25
  "shx": "^0.4.0",
27
26
  "tsdown": "^0.20.3",
28
27
  "typescript": "^5.9.3",