@alpic-ai/api 0.0.0-staging.28a2783 → 0.0.0-staging.29dafd1

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,9 @@ 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
+ defaultTeamId: string | undefined;
10
+ awsCognitoUserSub: string | undefined;
9
11
  };
10
12
  };
11
13
  declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
@@ -29,7 +31,92 @@ declare const createEnvironmentContractV1: _orpc_contract0.ContractProcedureBuil
29
31
  BAD_REQUEST: {};
30
32
  }>, Record<never, never>>;
31
33
  declare const contract: {
34
+ teams: {
35
+ list: {
36
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
37
+ id: z.ZodString;
38
+ name: z.ZodString;
39
+ createdAt: z.ZodCoercedDate<unknown>;
40
+ hasStripeAccount: 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,17 +135,33 @@ 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>>;
54
142
  };
55
143
  uploadArtifact: {
56
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodObject<{
144
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
145
+ teamId: z.ZodOptional<z.ZodString>;
146
+ }, z.core.$strip>>, z.ZodObject<{
57
147
  uploadUrl: z.ZodString;
58
148
  token: z.ZodString;
59
149
  expiresAt: z.ZodCoercedDate<unknown>;
60
150
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
61
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
+ };
62
165
  };
63
166
  environments: {
64
167
  create: {
@@ -117,6 +220,7 @@ declare const contract: {
117
220
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
118
221
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
119
222
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
223
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
120
224
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
121
225
  NOT_FOUND: {};
122
226
  BAD_REQUEST: {};
@@ -124,6 +228,84 @@ declare const contract: {
124
228
  };
125
229
  };
126
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
+ domains: z.ZodArray<z.ZodObject<{
263
+ domain: z.ZodString;
264
+ status: z.ZodEnum<{
265
+ ongoing: "ongoing";
266
+ deployed: "deployed";
267
+ failed: "failed";
268
+ }>;
269
+ createdAt: z.ZodCoercedDate<unknown>;
270
+ }, z.core.$strip>>;
271
+ latestDeployment: z.ZodNullable<z.ZodObject<{
272
+ id: z.ZodString;
273
+ status: z.ZodEnum<{
274
+ ongoing: "ongoing";
275
+ deployed: "deployed";
276
+ failed: "failed";
277
+ canceled: "canceled";
278
+ }>;
279
+ sourceCommitId: z.ZodNullable<z.ZodString>;
280
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
281
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
282
+ }, z.core.$strip>>;
283
+ }, z.core.$strip>>;
284
+ environments: z.ZodArray<z.ZodObject<{
285
+ id: z.ZodString;
286
+ name: z.ZodString;
287
+ sourceBranch: z.ZodNullable<z.ZodString>;
288
+ mcpServerUrl: z.ZodString;
289
+ createdAt: z.ZodCoercedDate<unknown>;
290
+ projectId: z.ZodString;
291
+ latestDeployment: z.ZodNullable<z.ZodObject<{
292
+ id: z.ZodString;
293
+ status: z.ZodEnum<{
294
+ ongoing: "ongoing";
295
+ deployed: "deployed";
296
+ failed: "failed";
297
+ canceled: "canceled";
298
+ }>;
299
+ sourceCommitId: z.ZodNullable<z.ZodString>;
300
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
301
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
302
+ }, z.core.$strip>>;
303
+ }, z.core.$strip>>;
304
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
305
+ NOT_FOUND: {};
306
+ BAD_REQUEST: {};
307
+ }>, Record<never, never>>;
308
+ };
127
309
  get: {
128
310
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
129
311
  projectId: z.ZodString;
@@ -153,6 +335,15 @@ declare const contract: {
153
335
  id: z.ZodString;
154
336
  name: z.ZodString;
155
337
  mcpServerUrl: z.ZodString;
338
+ domains: z.ZodArray<z.ZodObject<{
339
+ domain: z.ZodString;
340
+ status: z.ZodEnum<{
341
+ ongoing: "ongoing";
342
+ deployed: "deployed";
343
+ failed: "failed";
344
+ }>;
345
+ createdAt: z.ZodCoercedDate<unknown>;
346
+ }, z.core.$strip>>;
156
347
  latestDeployment: z.ZodNullable<z.ZodObject<{
157
348
  id: z.ZodString;
158
349
  status: z.ZodEnum<{
@@ -191,7 +382,9 @@ declare const contract: {
191
382
  }>, Record<never, never>>;
192
383
  };
193
384
  list: {
194
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
385
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
386
+ teamId: z.ZodOptional<z.ZodString>;
387
+ }, z.core.$strip>>, z.ZodArray<z.ZodObject<{
195
388
  id: z.ZodString;
196
389
  name: z.ZodString;
197
390
  teamId: z.ZodString;
@@ -217,6 +410,15 @@ declare const contract: {
217
410
  id: z.ZodString;
218
411
  name: z.ZodString;
219
412
  mcpServerUrl: z.ZodString;
413
+ domains: z.ZodArray<z.ZodObject<{
414
+ domain: z.ZodString;
415
+ status: z.ZodEnum<{
416
+ ongoing: "ongoing";
417
+ deployed: "deployed";
418
+ failed: "failed";
419
+ }>;
420
+ createdAt: z.ZodCoercedDate<unknown>;
421
+ }, z.core.$strip>>;
220
422
  latestDeployment: z.ZodNullable<z.ZodObject<{
221
423
  id: z.ZodString;
222
424
  status: z.ZodEnum<{
@@ -254,6 +456,7 @@ declare const contract: {
254
456
  };
255
457
  create: {
256
458
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
459
+ teamId: z.ZodOptional<z.ZodString>;
257
460
  name: z.ZodString;
258
461
  sourceRepository: z.ZodOptional<z.ZodString>;
259
462
  branchName: z.ZodOptional<z.ZodString>;
@@ -315,6 +518,24 @@ declare const contract: {
315
518
  BAD_REQUEST: {};
316
519
  }>, Record<never, never>>;
317
520
  };
521
+ delete: {
522
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
523
+ projectId: z.ZodString;
524
+ }, z.core.$strip>, z.ZodObject<{
525
+ success: z.ZodLiteral<true>;
526
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
527
+ NOT_FOUND: {};
528
+ }>, Record<never, never>>;
529
+ };
530
+ };
531
+ tunnels: {
532
+ getTicket: {
533
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodObject<{
534
+ subdomain: z.ZodString;
535
+ ticket: z.ZodString;
536
+ tunnelHost: z.ZodString;
537
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
538
+ };
318
539
  };
319
540
  };
320
541
  type RouterInput = InferContractRouterInputs<typeof contract>;
package/dist/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
1
  import { oc } from "@orpc/contract";
2
2
  import { z } from "zod";
3
-
4
3
  //#region src/schemas.ts
5
4
  const RESERVED_KEYS = [
6
5
  "_HANDLER",
@@ -13,7 +12,11 @@ const RESERVED_KEYS = [
13
12
  "AWS_LAMBDA_FUNCTION_VERSION",
14
13
  "AWS_LAMBDA_INITIALIZATION_TYPE",
15
14
  "AWS_LAMBDA_LOG_GROUP_NAME",
15
+ "AWS_LAMBDA_LOG_STREAM_NAME",
16
16
  "AWS_ACCESS_KEY",
17
+ "AWS_ACCESS_KEY_ID",
18
+ "AWS_SECRET_ACCESS_KEY",
19
+ "AWS_SESSION_TOKEN",
17
20
  "AWS_LAMBDA_RUNTIME_API",
18
21
  "LAMBDA_TASK_ROOT",
19
22
  "LAMBDA_RUNTIME_DIR",
@@ -55,7 +58,6 @@ const transportSchema = z.enum([
55
58
  "sse",
56
59
  "streamablehttp"
57
60
  ]);
58
-
59
61
  //#endregion
60
62
  //#region src/api.contract.ts
61
63
  const deploymentStatusSchema = z.enum([
@@ -82,6 +84,7 @@ const deploymentSchema = z.object({
82
84
  startedAt: z.coerce.date().nullable(),
83
85
  completedAt: z.coerce.date().nullable()
84
86
  });
87
+ const deploymentWithPageUrlSchema = deploymentSchema.extend({ deploymentPageUrl: z.url().nullable() });
85
88
  const createEnvironmentContractV1 = oc.route({
86
89
  path: "/v1/environments",
87
90
  method: "POST",
@@ -106,7 +109,7 @@ const createEnvironmentContractV1 = oc.route({
106
109
  projectId: z.string().describe("The ID of the project the environment belongs to")
107
110
  }));
108
111
  const getEnvironmentContractV1 = oc.route({
109
- path: "/v1/environments/:environmentId",
112
+ path: "/v1/environments/{environmentId}",
110
113
  method: "GET",
111
114
  summary: "Get an environment",
112
115
  description: "Get an environment by ID",
@@ -121,10 +124,20 @@ const getEnvironmentContractV1 = oc.route({
121
124
  createdAt: z.coerce.date(),
122
125
  projectId: z.string()
123
126
  }));
127
+ const domainSchema = z.object({
128
+ domain: z.string(),
129
+ status: z.enum([
130
+ "ongoing",
131
+ "deployed",
132
+ "failed"
133
+ ]),
134
+ createdAt: z.coerce.date()
135
+ });
124
136
  const productionEnvironmentSchema = z.object({
125
137
  id: z.string(),
126
138
  name: z.string(),
127
139
  mcpServerUrl: z.string(),
140
+ domains: z.array(domainSchema),
128
141
  latestDeployment: latestDeploymentSchema.nullable()
129
142
  });
130
143
  const environmentSchema = z.object({
@@ -153,7 +166,7 @@ const projectOutputSchema = z.object({
153
166
  environments: z.array(environmentSchema)
154
167
  });
155
168
  const getProjectContractV1 = oc.route({
156
- path: "/v1/projects/:projectId",
169
+ path: "/v1/projects/{projectId}",
157
170
  method: "GET",
158
171
  summary: "Get a project",
159
172
  description: "Get a project by ID",
@@ -167,7 +180,7 @@ const listProjectsContractV1 = oc.route({
167
180
  description: "List all projects for a team",
168
181
  tags: ["projects"],
169
182
  successDescription: "The list of projects"
170
- }).output(z.array(projectOutputSchema));
183
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.array(projectOutputSchema));
171
184
  const createProjectContractV1 = oc.route({
172
185
  path: "/v1/projects",
173
186
  method: "POST",
@@ -179,7 +192,8 @@ const createProjectContractV1 = oc.route({
179
192
  NOT_FOUND: {},
180
193
  BAD_REQUEST: {}
181
194
  }).input(z.object({
182
- name: z.string().min(1).max(100),
195
+ teamId: z.string().optional(),
196
+ name: z.string().trim().min(1).max(100),
183
197
  sourceRepository: z.string().optional(),
184
198
  branchName: z.string().min(1).optional(),
185
199
  runtime: runtimeSchema,
@@ -209,8 +223,31 @@ const createProjectContractV1 = oc.route({
209
223
  startCommand: z.string().nullable(),
210
224
  createdAt: z.coerce.date()
211
225
  }));
226
+ const deleteProjectContractV1 = oc.route({
227
+ path: "/v1/projects/:projectId",
228
+ method: "DELETE",
229
+ summary: "Delete a project",
230
+ description: "Delete a project and all its environments",
231
+ tags: ["projects"],
232
+ successDescription: "The project has been deleted successfully"
233
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.object({ success: z.literal(true) }));
234
+ const updateProjectContractV1 = oc.route({
235
+ path: "/v1/projects/{projectId}",
236
+ method: "PATCH",
237
+ summary: "Update a project",
238
+ description: "Update project settings",
239
+ tags: ["projects"],
240
+ successDescription: "The project has been updated successfully"
241
+ }).errors({
242
+ NOT_FOUND: {},
243
+ BAD_REQUEST: {}
244
+ }).input(z.object({
245
+ projectId: z.string().describe("The ID of the project"),
246
+ name: z.string().min(1).max(100).optional().describe("The new name for the project"),
247
+ sourceRepository: z.string().nullable().optional().describe("The source repository to connect to the project")
248
+ })).output(projectOutputSchema);
212
249
  const deployEnvironmentContractV1 = oc.route({
213
- path: "/v1/environments/:environmentId/deploy",
250
+ path: "/v1/environments/{environmentId}/deploy",
214
251
  method: "POST",
215
252
  summary: "Deploy an environment",
216
253
  description: "Deploy an environment",
@@ -222,7 +259,7 @@ const deployEnvironmentContractV1 = oc.route({
222
259
  }).input(z.object({
223
260
  environmentId: z.string().describe("The ID of the environment to deploy"),
224
261
  token: z.string().describe("The token to identify the source archive").optional()
225
- })).output(deploymentSchema);
262
+ })).output(deploymentWithPageUrlSchema);
226
263
  const uploadDeploymentArtifactContractV1 = oc.route({
227
264
  path: "/v1/deployments/upload",
228
265
  method: "POST",
@@ -230,23 +267,115 @@ const uploadDeploymentArtifactContractV1 = oc.route({
230
267
  description: "Return a presigned S3 URL to upload a deployment artifact",
231
268
  tags: ["deployments"],
232
269
  successDescription: "The presigned upload URL has been generated successfully"
233
- }).output(z.object({
270
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.object({
234
271
  uploadUrl: z.string().url().describe("Presigned S3 URL to upload the source archive with HTTP PUT"),
235
272
  token: z.string().describe("Token to identify the source archive"),
236
273
  expiresAt: z.coerce.date().describe("Expiration date of the presigned URL")
237
274
  }));
275
+ const listProjectDeploymentsContractV1 = oc.route({
276
+ path: "/v1/projects/{projectId}/deployments",
277
+ method: "GET",
278
+ summary: "List project deployments",
279
+ description: "List all deployments for a project",
280
+ tags: ["deployments"],
281
+ successDescription: "The list of deployments"
282
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.array(deploymentSchema.extend({
283
+ isCurrent: z.boolean(),
284
+ environmentId: z.string()
285
+ })));
238
286
  const getDeploymentContractV1 = oc.route({
239
- path: "/v1/deployments/:deploymentId",
287
+ path: "/v1/deployments/{deploymentId}",
240
288
  method: "GET",
241
289
  summary: "Get a deployment",
242
290
  description: "Get a deployment by ID",
243
291
  tags: ["deployments"],
244
292
  successDescription: "The deployment details"
245
- }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentSchema);
293
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentWithPageUrlSchema);
294
+ const getDeploymentLogsContractV1 = oc.route({
295
+ path: "/v1/deployments/{deploymentId}/logs",
296
+ method: "GET",
297
+ summary: "Get deployment logs",
298
+ description: "Get the logs for a deployment",
299
+ tags: ["deployments"],
300
+ successDescription: "The deployment logs"
301
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(z.object({
302
+ logs: z.array(z.object({
303
+ timestamp: z.coerce.date().optional(),
304
+ content: z.string().optional()
305
+ })),
306
+ hasMoreLogs: z.boolean()
307
+ }));
308
+ const analyticsDataPointSchema = z.object({
309
+ timestamp: z.number(),
310
+ categories: z.record(z.string(), z.unknown())
311
+ });
312
+ const analyticsTimeSeriesSchema = z.object({
313
+ sessions_count: z.array(analyticsDataPointSchema),
314
+ requests_count: z.array(analyticsDataPointSchema),
315
+ requests_latency_mean: z.array(analyticsDataPointSchema),
316
+ tool_errors: z.array(analyticsDataPointSchema),
317
+ mcp_errors: z.array(analyticsDataPointSchema),
318
+ output_token_mean: z.array(analyticsDataPointSchema),
319
+ task_count: z.array(analyticsDataPointSchema)
320
+ });
321
+ const getProjectAnalyticsContractV1 = oc.route({
322
+ path: "/v1/analytics/{projectId}",
323
+ method: "GET",
324
+ summary: "Get project analytics",
325
+ description: "Get analytics data for a project over a time range",
326
+ tags: ["analytics"],
327
+ successDescription: "The project analytics data"
328
+ }).errors({
329
+ NOT_FOUND: {},
330
+ BAD_REQUEST: {}
331
+ }).input(z.object({
332
+ projectId: z.string().describe("The ID of the project"),
333
+ startTimestamp: z.coerce.number().describe("Start timestamp in milliseconds"),
334
+ endTimestamp: z.coerce.number().describe("End timestamp in milliseconds"),
335
+ timeZone: z.string().describe("IANA timezone (e.g. Europe/Paris)")
336
+ }).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({
337
+ metadata: z.object({
338
+ startTimestamp: z.number(),
339
+ endTimestamp: z.number(),
340
+ timeZone: z.string(),
341
+ startDate: z.coerce.date(),
342
+ interval: z.string()
343
+ }),
344
+ timeSeries: analyticsTimeSeriesSchema
345
+ }));
346
+ const listTeamsContractV1 = oc.route({
347
+ path: "/v1/teams",
348
+ method: "GET",
349
+ summary: "List teams",
350
+ description: "List all teams for the authenticated user",
351
+ tags: ["teams"],
352
+ successDescription: "The list of teams"
353
+ }).output(z.array(z.object({
354
+ id: z.string(),
355
+ name: z.string(),
356
+ createdAt: z.coerce.date(),
357
+ hasStripeAccount: z.boolean()
358
+ })));
359
+ const getTunnelTicketContractV1 = oc.route({
360
+ path: "/v1/tunnels/ticket",
361
+ method: "GET",
362
+ summary: "Get a tunnel ticket",
363
+ description: "Get a signed ticket for establishing a tunnel connection. Requires user authentication (API keys are not supported).",
364
+ tags: ["tunnels"],
365
+ successDescription: "The tunnel ticket"
366
+ }).output(z.object({
367
+ subdomain: z.string().describe("The subdomain assigned to the user"),
368
+ ticket: z.string().describe("The signed tunnel ticket"),
369
+ tunnelHost: z.string().describe("The tunnel host to connect to")
370
+ }));
246
371
  const contract = {
372
+ teams: { list: { v1: listTeamsContractV1 } },
373
+ analytics: { get: { v1: getProjectAnalyticsContractV1 } },
247
374
  deployments: {
375
+ list: { v1: listProjectDeploymentsContractV1 },
248
376
  get: { v1: getDeploymentContractV1 },
249
- uploadArtifact: { v1: uploadDeploymentArtifactContractV1 }
377
+ uploadArtifact: { v1: uploadDeploymentArtifactContractV1 },
378
+ getLogs: { v1: getDeploymentLogsContractV1 }
250
379
  },
251
380
  environments: {
252
381
  create: { v1: createEnvironmentContractV1 },
@@ -254,11 +383,13 @@ const contract = {
254
383
  deploy: { v1: deployEnvironmentContractV1 }
255
384
  },
256
385
  projects: {
386
+ update: { v1: updateProjectContractV1 },
257
387
  get: { v1: getProjectContractV1 },
258
388
  list: { v1: listProjectsContractV1 },
259
- create: { v1: createProjectContractV1 }
260
- }
389
+ create: { v1: createProjectContractV1 },
390
+ delete: { v1: deleteProjectContractV1 }
391
+ },
392
+ tunnels: { getTicket: { v1: getTunnelTicketContractV1 } }
261
393
  };
262
-
263
394
  //#endregion
264
- export { buildSettingsSchema, contract, createEnvironmentContractV1, environmentVariableSchema, environmentVariablesSchema, runtimeSchema, transportSchema };
395
+ export { buildSettingsSchema, contract, createEnvironmentContractV1, environmentVariableSchema, environmentVariablesSchema, runtimeSchema, transportSchema };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpic-ai/api",
3
- "version": "0.0.0-staging.28a2783",
3
+ "version": "0.0.0-staging.29dafd1",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,14 +17,13 @@
17
17
  "author": "Alpic",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@orpc/contract": "^1.13.4",
20
+ "@orpc/contract": "^1.13.6",
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
- "tsdown": "^0.20.3",
26
+ "tsdown": "^0.21.1",
28
27
  "typescript": "^5.9.3",
29
28
  "vitest": "^4.0.18"
30
29
  },