@alpic-ai/api 0.0.0-staging.bd5000e → 0.0.0-staging.bdeff30

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,13 +220,144 @@ 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>;
224
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
225
+ NOT_FOUND: {};
226
+ BAD_REQUEST: {};
227
+ }>, Record<never, never>>;
228
+ };
229
+ };
230
+ environmentVariables: {
231
+ list: {
232
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
233
+ environmentId: z.ZodString;
234
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
235
+ id: z.ZodString;
236
+ key: z.ZodString;
237
+ value: z.ZodString;
238
+ isSecret: z.ZodBoolean;
239
+ createdAt: z.ZodCoercedDate<unknown>;
240
+ }, z.core.$strip>>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
241
+ NOT_FOUND: {};
242
+ }>, Record<never, never>>;
243
+ };
244
+ create: {
245
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
246
+ environmentId: z.ZodString;
247
+ environmentVariables: z.ZodArray<z.ZodObject<{
248
+ key: z.ZodString;
249
+ value: z.ZodString;
250
+ isSecret: z.ZodDefault<z.ZodBoolean>;
251
+ }, z.core.$strip>>;
252
+ }, z.core.$strip>, z.ZodObject<{
253
+ success: z.ZodLiteral<true>;
120
254
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
121
255
  NOT_FOUND: {};
122
256
  BAD_REQUEST: {};
123
257
  }>, Record<never, never>>;
124
258
  };
259
+ update: {
260
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
261
+ environmentVariableId: z.ZodString;
262
+ key: z.ZodString;
263
+ value: z.ZodOptional<z.ZodString>;
264
+ isSecret: z.ZodDefault<z.ZodBoolean>;
265
+ }, z.core.$strip>, z.ZodObject<{
266
+ success: z.ZodLiteral<true>;
267
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
268
+ NOT_FOUND: {};
269
+ BAD_REQUEST: {};
270
+ }>, Record<never, never>>;
271
+ };
272
+ delete: {
273
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
274
+ environmentVariableId: z.ZodString;
275
+ }, z.core.$strip>, z.ZodObject<{
276
+ success: z.ZodLiteral<true>;
277
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
278
+ NOT_FOUND: {};
279
+ }>, Record<never, never>>;
280
+ };
125
281
  };
126
282
  projects: {
283
+ update: {
284
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
285
+ projectId: z.ZodString;
286
+ name: z.ZodOptional<z.ZodString>;
287
+ sourceRepository: z.ZodOptional<z.ZodNullable<z.ZodString>>;
288
+ }, z.core.$strip>, z.ZodObject<{
289
+ id: z.ZodString;
290
+ name: z.ZodString;
291
+ teamId: z.ZodString;
292
+ sourceRepository: z.ZodNullable<z.ZodString>;
293
+ runtime: z.ZodEnum<{
294
+ "python3.13": "python3.13";
295
+ "python3.14": "python3.14";
296
+ node22: "node22";
297
+ node24: "node24";
298
+ }>;
299
+ transport: z.ZodNullable<z.ZodEnum<{
300
+ stdio: "stdio";
301
+ sse: "sse";
302
+ streamablehttp: "streamablehttp";
303
+ }>>;
304
+ rootDirectory: z.ZodNullable<z.ZodString>;
305
+ buildCommand: z.ZodNullable<z.ZodString>;
306
+ buildOutputDir: z.ZodNullable<z.ZodString>;
307
+ installCommand: z.ZodNullable<z.ZodString>;
308
+ startCommand: z.ZodNullable<z.ZodString>;
309
+ createdAt: z.ZodCoercedDate<unknown>;
310
+ productionEnvironment: z.ZodNullable<z.ZodObject<{
311
+ id: z.ZodString;
312
+ name: z.ZodString;
313
+ mcpServerUrl: z.ZodString;
314
+ domains: z.ZodArray<z.ZodObject<{
315
+ domain: z.ZodString;
316
+ status: z.ZodEnum<{
317
+ ongoing: "ongoing";
318
+ deployed: "deployed";
319
+ failed: "failed";
320
+ }>;
321
+ createdAt: z.ZodCoercedDate<unknown>;
322
+ }, z.core.$strip>>;
323
+ latestDeployment: z.ZodNullable<z.ZodObject<{
324
+ id: z.ZodString;
325
+ status: z.ZodEnum<{
326
+ ongoing: "ongoing";
327
+ deployed: "deployed";
328
+ failed: "failed";
329
+ canceled: "canceled";
330
+ }>;
331
+ sourceCommitId: z.ZodNullable<z.ZodString>;
332
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
333
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
334
+ }, z.core.$strip>>;
335
+ }, z.core.$strip>>;
336
+ environments: z.ZodArray<z.ZodObject<{
337
+ id: z.ZodString;
338
+ name: z.ZodString;
339
+ sourceBranch: z.ZodNullable<z.ZodString>;
340
+ mcpServerUrl: z.ZodString;
341
+ createdAt: z.ZodCoercedDate<unknown>;
342
+ projectId: z.ZodString;
343
+ latestDeployment: z.ZodNullable<z.ZodObject<{
344
+ id: z.ZodString;
345
+ status: z.ZodEnum<{
346
+ ongoing: "ongoing";
347
+ deployed: "deployed";
348
+ failed: "failed";
349
+ canceled: "canceled";
350
+ }>;
351
+ sourceCommitId: z.ZodNullable<z.ZodString>;
352
+ sourceCommitMessage: z.ZodNullable<z.ZodString>;
353
+ completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
354
+ }, z.core.$strip>>;
355
+ }, z.core.$strip>>;
356
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
357
+ NOT_FOUND: {};
358
+ BAD_REQUEST: {};
359
+ }>, Record<never, never>>;
360
+ };
127
361
  get: {
128
362
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
129
363
  projectId: z.ZodString;
@@ -153,6 +387,15 @@ declare const contract: {
153
387
  id: z.ZodString;
154
388
  name: z.ZodString;
155
389
  mcpServerUrl: z.ZodString;
390
+ domains: z.ZodArray<z.ZodObject<{
391
+ domain: z.ZodString;
392
+ status: z.ZodEnum<{
393
+ ongoing: "ongoing";
394
+ deployed: "deployed";
395
+ failed: "failed";
396
+ }>;
397
+ createdAt: z.ZodCoercedDate<unknown>;
398
+ }, z.core.$strip>>;
156
399
  latestDeployment: z.ZodNullable<z.ZodObject<{
157
400
  id: z.ZodString;
158
401
  status: z.ZodEnum<{
@@ -191,7 +434,9 @@ declare const contract: {
191
434
  }>, Record<never, never>>;
192
435
  };
193
436
  list: {
194
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
437
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
438
+ teamId: z.ZodOptional<z.ZodString>;
439
+ }, z.core.$strip>>, z.ZodArray<z.ZodObject<{
195
440
  id: z.ZodString;
196
441
  name: z.ZodString;
197
442
  teamId: z.ZodString;
@@ -217,6 +462,15 @@ declare const contract: {
217
462
  id: z.ZodString;
218
463
  name: z.ZodString;
219
464
  mcpServerUrl: z.ZodString;
465
+ domains: z.ZodArray<z.ZodObject<{
466
+ domain: z.ZodString;
467
+ status: z.ZodEnum<{
468
+ ongoing: "ongoing";
469
+ deployed: "deployed";
470
+ failed: "failed";
471
+ }>;
472
+ createdAt: z.ZodCoercedDate<unknown>;
473
+ }, z.core.$strip>>;
220
474
  latestDeployment: z.ZodNullable<z.ZodObject<{
221
475
  id: z.ZodString;
222
476
  status: z.ZodEnum<{
@@ -254,6 +508,7 @@ declare const contract: {
254
508
  };
255
509
  create: {
256
510
  v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
511
+ teamId: z.ZodOptional<z.ZodString>;
257
512
  name: z.ZodString;
258
513
  sourceRepository: z.ZodOptional<z.ZodString>;
259
514
  branchName: z.ZodOptional<z.ZodString>;
@@ -315,6 +570,24 @@ declare const contract: {
315
570
  BAD_REQUEST: {};
316
571
  }>, Record<never, never>>;
317
572
  };
573
+ delete: {
574
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
575
+ projectId: z.ZodString;
576
+ }, z.core.$strip>, z.ZodObject<{
577
+ success: z.ZodLiteral<true>;
578
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
579
+ NOT_FOUND: {};
580
+ }>, Record<never, never>>;
581
+ };
582
+ };
583
+ tunnels: {
584
+ getTicket: {
585
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodObject<{
586
+ subdomain: z.ZodString;
587
+ ticket: z.ZodString;
588
+ tunnelHost: z.ZodString;
589
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
590
+ };
318
591
  };
319
592
  };
320
593
  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",
@@ -30,7 +33,8 @@ const RESERVED_KEYS = [
30
33
  "BUILD_ARG_BUILD_COMMAND",
31
34
  "BUILD_ARG_BUILD_OUTPUT_DIR",
32
35
  "BUILD_ARG_START_COMMAND",
33
- "ALPIC_HOST"
36
+ "ALPIC_HOST",
37
+ "ALPIC_CUSTOM_DOMAINS"
34
38
  ];
35
39
  const environmentVariableSchema = z.object({
36
40
  key: z.string().min(2, "Key must be at least 2 characters").regex(/^[a-zA-Z]([a-zA-Z0-9_])+$/, "Key must start with a letter and contain only letters, numbers, and underscores").refine((key) => !RESERVED_KEYS.includes(key), "This key is reserved and cannot be used as an environment variable key"),
@@ -55,7 +59,6 @@ const transportSchema = z.enum([
55
59
  "sse",
56
60
  "streamablehttp"
57
61
  ]);
58
-
59
62
  //#endregion
60
63
  //#region src/api.contract.ts
61
64
  const deploymentStatusSchema = z.enum([
@@ -82,6 +85,7 @@ const deploymentSchema = z.object({
82
85
  startedAt: z.coerce.date().nullable(),
83
86
  completedAt: z.coerce.date().nullable()
84
87
  });
88
+ const deploymentWithPageUrlSchema = deploymentSchema.extend({ deploymentPageUrl: z.url().nullable() });
85
89
  const createEnvironmentContractV1 = oc.route({
86
90
  path: "/v1/environments",
87
91
  method: "POST",
@@ -106,7 +110,7 @@ const createEnvironmentContractV1 = oc.route({
106
110
  projectId: z.string().describe("The ID of the project the environment belongs to")
107
111
  }));
108
112
  const getEnvironmentContractV1 = oc.route({
109
- path: "/v1/environments/:environmentId",
113
+ path: "/v1/environments/{environmentId}",
110
114
  method: "GET",
111
115
  summary: "Get an environment",
112
116
  description: "Get an environment by ID",
@@ -121,10 +125,20 @@ const getEnvironmentContractV1 = oc.route({
121
125
  createdAt: z.coerce.date(),
122
126
  projectId: z.string()
123
127
  }));
128
+ const domainSchema = z.object({
129
+ domain: z.string(),
130
+ status: z.enum([
131
+ "ongoing",
132
+ "deployed",
133
+ "failed"
134
+ ]),
135
+ createdAt: z.coerce.date()
136
+ });
124
137
  const productionEnvironmentSchema = z.object({
125
138
  id: z.string(),
126
139
  name: z.string(),
127
140
  mcpServerUrl: z.string(),
141
+ domains: z.array(domainSchema),
128
142
  latestDeployment: latestDeploymentSchema.nullable()
129
143
  });
130
144
  const environmentSchema = z.object({
@@ -153,7 +167,7 @@ const projectOutputSchema = z.object({
153
167
  environments: z.array(environmentSchema)
154
168
  });
155
169
  const getProjectContractV1 = oc.route({
156
- path: "/v1/projects/:projectId",
170
+ path: "/v1/projects/{projectId}",
157
171
  method: "GET",
158
172
  summary: "Get a project",
159
173
  description: "Get a project by ID",
@@ -167,7 +181,7 @@ const listProjectsContractV1 = oc.route({
167
181
  description: "List all projects for a team",
168
182
  tags: ["projects"],
169
183
  successDescription: "The list of projects"
170
- }).output(z.array(projectOutputSchema));
184
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.array(projectOutputSchema));
171
185
  const createProjectContractV1 = oc.route({
172
186
  path: "/v1/projects",
173
187
  method: "POST",
@@ -179,7 +193,8 @@ const createProjectContractV1 = oc.route({
179
193
  NOT_FOUND: {},
180
194
  BAD_REQUEST: {}
181
195
  }).input(z.object({
182
- name: z.string().min(1).max(100),
196
+ teamId: z.string().optional(),
197
+ name: z.string().trim().min(1).max(100),
183
198
  sourceRepository: z.string().optional(),
184
199
  branchName: z.string().min(1).optional(),
185
200
  runtime: runtimeSchema,
@@ -209,8 +224,84 @@ const createProjectContractV1 = oc.route({
209
224
  startCommand: z.string().nullable(),
210
225
  createdAt: z.coerce.date()
211
226
  }));
227
+ const environmentVariableOutputSchema = z.object({
228
+ id: z.string(),
229
+ key: z.string(),
230
+ value: z.string(),
231
+ isSecret: z.boolean(),
232
+ createdAt: z.coerce.date()
233
+ });
234
+ const listEnvironmentVariablesContractV1 = oc.route({
235
+ path: "/v1/environments/{environmentId}/environment-variables",
236
+ method: "GET",
237
+ summary: "List environment variables",
238
+ description: "List all environment variables for an environment",
239
+ tags: ["environments"],
240
+ successDescription: "The list of environment variables"
241
+ }).errors({ NOT_FOUND: {} }).input(z.object({ environmentId: z.string().describe("The ID of the environment") })).output(z.array(environmentVariableOutputSchema));
242
+ const createEnvironmentVariablesContractV1 = oc.route({
243
+ path: "/v1/environments/{environmentId}/environment-variables",
244
+ method: "POST",
245
+ summary: "Add environment variables",
246
+ description: "Add one or more environment variables to an environment",
247
+ tags: ["environments"],
248
+ successDescription: "The environment variables have been added successfully"
249
+ }).errors({
250
+ NOT_FOUND: {},
251
+ BAD_REQUEST: {}
252
+ }).input(z.object({
253
+ environmentId: z.string().describe("The ID of the environment"),
254
+ environmentVariables: environmentVariablesSchema
255
+ })).output(z.object({ success: z.literal(true) }));
256
+ const updateEnvironmentVariableContractV1 = oc.route({
257
+ path: "/v1/environment-variables/{environmentVariableId}",
258
+ method: "PATCH",
259
+ summary: "Update an environment variable",
260
+ description: "Update an environment variable by ID",
261
+ tags: ["environments"],
262
+ successDescription: "The environment variable has been updated successfully"
263
+ }).errors({
264
+ NOT_FOUND: {},
265
+ BAD_REQUEST: {}
266
+ }).input(z.object({
267
+ environmentVariableId: z.string().describe("The ID of the environment variable"),
268
+ key: environmentVariableSchema.shape.key,
269
+ value: environmentVariableSchema.shape.value.optional(),
270
+ isSecret: environmentVariableSchema.shape.isSecret
271
+ })).output(z.object({ success: z.literal(true) }));
272
+ const deleteEnvironmentVariableContractV1 = oc.route({
273
+ path: "/v1/environment-variables/{environmentVariableId}",
274
+ method: "DELETE",
275
+ summary: "Delete an environment variable",
276
+ description: "Delete an environment variable by ID",
277
+ tags: ["environments"],
278
+ successDescription: "The environment variable has been deleted successfully"
279
+ }).errors({ NOT_FOUND: {} }).input(z.object({ environmentVariableId: z.string().describe("The ID of the environment variable") })).output(z.object({ success: z.literal(true) }));
280
+ const deleteProjectContractV1 = oc.route({
281
+ path: "/v1/projects/:projectId",
282
+ method: "DELETE",
283
+ summary: "Delete a project",
284
+ description: "Delete a project and all its environments",
285
+ tags: ["projects"],
286
+ successDescription: "The project has been deleted successfully"
287
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.object({ success: z.literal(true) }));
288
+ const updateProjectContractV1 = oc.route({
289
+ path: "/v1/projects/{projectId}",
290
+ method: "PATCH",
291
+ summary: "Update a project",
292
+ description: "Update project settings",
293
+ tags: ["projects"],
294
+ successDescription: "The project has been updated successfully"
295
+ }).errors({
296
+ NOT_FOUND: {},
297
+ BAD_REQUEST: {}
298
+ }).input(z.object({
299
+ projectId: z.string().describe("The ID of the project"),
300
+ name: z.string().min(1).max(100).optional().describe("The new name for the project"),
301
+ sourceRepository: z.string().nullable().optional().describe("The source repository to connect to the project")
302
+ })).output(projectOutputSchema);
212
303
  const deployEnvironmentContractV1 = oc.route({
213
- path: "/v1/environments/:environmentId/deploy",
304
+ path: "/v1/environments/{environmentId}/deploy",
214
305
  method: "POST",
215
306
  summary: "Deploy an environment",
216
307
  description: "Deploy an environment",
@@ -222,7 +313,7 @@ const deployEnvironmentContractV1 = oc.route({
222
313
  }).input(z.object({
223
314
  environmentId: z.string().describe("The ID of the environment to deploy"),
224
315
  token: z.string().describe("The token to identify the source archive").optional()
225
- })).output(deploymentSchema);
316
+ })).output(deploymentWithPageUrlSchema);
226
317
  const uploadDeploymentArtifactContractV1 = oc.route({
227
318
  path: "/v1/deployments/upload",
228
319
  method: "POST",
@@ -230,35 +321,135 @@ const uploadDeploymentArtifactContractV1 = oc.route({
230
321
  description: "Return a presigned S3 URL to upload a deployment artifact",
231
322
  tags: ["deployments"],
232
323
  successDescription: "The presigned upload URL has been generated successfully"
233
- }).output(z.object({
324
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.object({
234
325
  uploadUrl: z.string().url().describe("Presigned S3 URL to upload the source archive with HTTP PUT"),
235
326
  token: z.string().describe("Token to identify the source archive"),
236
327
  expiresAt: z.coerce.date().describe("Expiration date of the presigned URL")
237
328
  }));
329
+ const listProjectDeploymentsContractV1 = oc.route({
330
+ path: "/v1/projects/{projectId}/deployments",
331
+ method: "GET",
332
+ summary: "List project deployments",
333
+ description: "List all deployments for a project",
334
+ tags: ["deployments"],
335
+ successDescription: "The list of deployments"
336
+ }).errors({ NOT_FOUND: {} }).input(z.object({ projectId: z.string().describe("The ID of the project") })).output(z.array(deploymentSchema.extend({
337
+ isCurrent: z.boolean(),
338
+ environmentId: z.string()
339
+ })));
238
340
  const getDeploymentContractV1 = oc.route({
239
- path: "/v1/deployments/:deploymentId",
341
+ path: "/v1/deployments/{deploymentId}",
240
342
  method: "GET",
241
343
  summary: "Get a deployment",
242
344
  description: "Get a deployment by ID",
243
345
  tags: ["deployments"],
244
346
  successDescription: "The deployment details"
245
- }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentSchema);
347
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentWithPageUrlSchema);
348
+ const getDeploymentLogsContractV1 = oc.route({
349
+ path: "/v1/deployments/{deploymentId}/logs",
350
+ method: "GET",
351
+ summary: "Get deployment logs",
352
+ description: "Get the logs for a deployment",
353
+ tags: ["deployments"],
354
+ successDescription: "The deployment logs"
355
+ }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(z.object({
356
+ logs: z.array(z.object({
357
+ timestamp: z.coerce.date().optional(),
358
+ content: z.string().optional()
359
+ })),
360
+ hasMoreLogs: z.boolean()
361
+ }));
362
+ const analyticsDataPointSchema = z.object({
363
+ timestamp: z.number(),
364
+ categories: z.record(z.string(), z.unknown())
365
+ });
366
+ const analyticsTimeSeriesSchema = z.object({
367
+ sessions_count: z.array(analyticsDataPointSchema),
368
+ requests_count: z.array(analyticsDataPointSchema),
369
+ requests_latency_mean: z.array(analyticsDataPointSchema),
370
+ tool_errors: z.array(analyticsDataPointSchema),
371
+ mcp_errors: z.array(analyticsDataPointSchema),
372
+ output_token_mean: z.array(analyticsDataPointSchema),
373
+ task_count: z.array(analyticsDataPointSchema)
374
+ });
375
+ const getProjectAnalyticsContractV1 = oc.route({
376
+ path: "/v1/analytics/{projectId}",
377
+ method: "GET",
378
+ summary: "Get project analytics",
379
+ description: "Get analytics data for a project over a time range",
380
+ tags: ["analytics"],
381
+ successDescription: "The project analytics data"
382
+ }).errors({
383
+ NOT_FOUND: {},
384
+ BAD_REQUEST: {}
385
+ }).input(z.object({
386
+ projectId: z.string().describe("The ID of the project"),
387
+ startTimestamp: z.coerce.number().describe("Start timestamp in milliseconds"),
388
+ endTimestamp: z.coerce.number().describe("End timestamp in milliseconds"),
389
+ timeZone: z.string().describe("IANA timezone (e.g. Europe/Paris)")
390
+ }).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({
391
+ metadata: z.object({
392
+ startTimestamp: z.number(),
393
+ endTimestamp: z.number(),
394
+ timeZone: z.string(),
395
+ startDate: z.coerce.date(),
396
+ interval: z.string()
397
+ }),
398
+ timeSeries: analyticsTimeSeriesSchema
399
+ }));
400
+ const listTeamsContractV1 = oc.route({
401
+ path: "/v1/teams",
402
+ method: "GET",
403
+ summary: "List teams",
404
+ description: "List all teams for the authenticated user",
405
+ tags: ["teams"],
406
+ successDescription: "The list of teams"
407
+ }).output(z.array(z.object({
408
+ id: z.string(),
409
+ name: z.string(),
410
+ createdAt: z.coerce.date(),
411
+ hasStripeAccount: z.boolean()
412
+ })));
413
+ const getTunnelTicketContractV1 = oc.route({
414
+ path: "/v1/tunnels/ticket",
415
+ method: "GET",
416
+ summary: "Get a tunnel ticket",
417
+ description: "Get a signed ticket for establishing a tunnel connection. Requires user authentication (API keys are not supported).",
418
+ tags: ["tunnels"],
419
+ successDescription: "The tunnel ticket"
420
+ }).output(z.object({
421
+ subdomain: z.string().describe("The subdomain assigned to the user"),
422
+ ticket: z.string().describe("The signed tunnel ticket"),
423
+ tunnelHost: z.string().describe("The tunnel host to connect to")
424
+ }));
246
425
  const contract = {
426
+ teams: { list: { v1: listTeamsContractV1 } },
427
+ analytics: { get: { v1: getProjectAnalyticsContractV1 } },
247
428
  deployments: {
429
+ list: { v1: listProjectDeploymentsContractV1 },
248
430
  get: { v1: getDeploymentContractV1 },
249
- uploadArtifact: { v1: uploadDeploymentArtifactContractV1 }
431
+ uploadArtifact: { v1: uploadDeploymentArtifactContractV1 },
432
+ getLogs: { v1: getDeploymentLogsContractV1 }
250
433
  },
251
434
  environments: {
252
435
  create: { v1: createEnvironmentContractV1 },
253
436
  get: { v1: getEnvironmentContractV1 },
254
437
  deploy: { v1: deployEnvironmentContractV1 }
255
438
  },
439
+ environmentVariables: {
440
+ list: { v1: listEnvironmentVariablesContractV1 },
441
+ create: { v1: createEnvironmentVariablesContractV1 },
442
+ update: { v1: updateEnvironmentVariableContractV1 },
443
+ delete: { v1: deleteEnvironmentVariableContractV1 }
444
+ },
256
445
  projects: {
446
+ update: { v1: updateProjectContractV1 },
257
447
  get: { v1: getProjectContractV1 },
258
448
  list: { v1: listProjectsContractV1 },
259
- create: { v1: createProjectContractV1 }
260
- }
449
+ create: { v1: createProjectContractV1 },
450
+ delete: { v1: deleteProjectContractV1 }
451
+ },
452
+ tunnels: { getTicket: { v1: getTunnelTicketContractV1 } }
261
453
  };
262
-
263
454
  //#endregion
264
- export { buildSettingsSchema, contract, createEnvironmentContractV1, environmentVariableSchema, environmentVariablesSchema, runtimeSchema, transportSchema };
455
+ 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.bd5000e",
3
+ "version": "0.0.0-staging.bdeff30",
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
  },