@alpic-ai/api 0.0.0-staging.e2caa7a → 0.0.0-staging.e36f4d7

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,8 @@ import { z } from "zod";
6
6
  type ApiContext = {
7
7
  request: Request & {
8
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<{
@@ -36,7 +38,6 @@ declare const contract: {
36
38
  name: z.ZodString;
37
39
  createdAt: z.ZodCoercedDate<unknown>;
38
40
  hasStripeAccount: z.ZodBoolean;
39
- hasActiveSubscription: z.ZodBoolean;
40
41
  }, z.core.$strip>>, Record<never, never>, Record<never, never>>;
41
42
  };
42
43
  };
@@ -225,6 +226,94 @@ declare const contract: {
225
226
  BAD_REQUEST: {};
226
227
  }>, Record<never, never>>;
227
228
  };
229
+ getLogs: {
230
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
231
+ environmentId: z.ZodString;
232
+ since: z.ZodOptional<z.ZodString>;
233
+ until: z.ZodOptional<z.ZodString>;
234
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
235
+ level: z.ZodOptional<z.ZodArray<z.ZodEnum<{
236
+ INFO: "INFO";
237
+ ERROR: "ERROR";
238
+ WARNING: "WARNING";
239
+ DEBUG: "DEBUG";
240
+ }>>>;
241
+ search: z.ZodOptional<z.ZodString>;
242
+ nextToken: z.ZodOptional<z.ZodString>;
243
+ }, z.core.$strip>, z.ZodObject<{
244
+ logs: z.ZodArray<z.ZodObject<{
245
+ timestamp: z.ZodCoercedDate<unknown>;
246
+ type: z.ZodEnum<{
247
+ INFO: "INFO";
248
+ ERROR: "ERROR";
249
+ WARNING: "WARNING";
250
+ DEBUG: "DEBUG";
251
+ START: "START";
252
+ END: "END";
253
+ }>;
254
+ requestId: z.ZodString;
255
+ content: z.ZodOptional<z.ZodString>;
256
+ method: z.ZodOptional<z.ZodString>;
257
+ durationInMs: z.ZodOptional<z.ZodNumber>;
258
+ }, z.core.$strip>>;
259
+ nextToken: z.ZodNullable<z.ZodString>;
260
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
261
+ NOT_FOUND: {};
262
+ BAD_REQUEST: {};
263
+ }>, Record<never, never>>;
264
+ };
265
+ };
266
+ environmentVariables: {
267
+ list: {
268
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
269
+ environmentId: z.ZodString;
270
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
271
+ id: z.ZodString;
272
+ key: z.ZodString;
273
+ value: z.ZodString;
274
+ isSecret: z.ZodBoolean;
275
+ createdAt: z.ZodCoercedDate<unknown>;
276
+ }, z.core.$strip>>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
277
+ NOT_FOUND: {};
278
+ }>, Record<never, never>>;
279
+ };
280
+ create: {
281
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
282
+ environmentId: z.ZodString;
283
+ environmentVariables: z.ZodArray<z.ZodObject<{
284
+ key: z.ZodString;
285
+ value: z.ZodString;
286
+ isSecret: z.ZodDefault<z.ZodBoolean>;
287
+ }, z.core.$strip>>;
288
+ }, z.core.$strip>, z.ZodObject<{
289
+ success: z.ZodLiteral<true>;
290
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
291
+ NOT_FOUND: {};
292
+ BAD_REQUEST: {};
293
+ }>, Record<never, never>>;
294
+ };
295
+ update: {
296
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
297
+ environmentVariableId: z.ZodString;
298
+ key: z.ZodString;
299
+ value: z.ZodOptional<z.ZodString>;
300
+ isSecret: z.ZodDefault<z.ZodBoolean>;
301
+ }, z.core.$strip>, z.ZodObject<{
302
+ success: z.ZodLiteral<true>;
303
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
304
+ NOT_FOUND: {};
305
+ BAD_REQUEST: {};
306
+ }>, Record<never, never>>;
307
+ };
308
+ delete: {
309
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodObject<{
310
+ environmentVariableId: z.ZodString;
311
+ }, z.core.$strip>, z.ZodObject<{
312
+ success: z.ZodLiteral<true>;
313
+ }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
314
+ NOT_FOUND: {};
315
+ }>, Record<never, never>>;
316
+ };
228
317
  };
229
318
  projects: {
230
319
  update: {
@@ -258,6 +347,15 @@ declare const contract: {
258
347
  id: z.ZodString;
259
348
  name: z.ZodString;
260
349
  mcpServerUrl: z.ZodString;
350
+ domains: z.ZodArray<z.ZodObject<{
351
+ domain: z.ZodString;
352
+ status: z.ZodEnum<{
353
+ ongoing: "ongoing";
354
+ deployed: "deployed";
355
+ failed: "failed";
356
+ }>;
357
+ createdAt: z.ZodCoercedDate<unknown>;
358
+ }, z.core.$strip>>;
261
359
  latestDeployment: z.ZodNullable<z.ZodObject<{
262
360
  id: z.ZodString;
263
361
  status: z.ZodEnum<{
@@ -325,6 +423,15 @@ declare const contract: {
325
423
  id: z.ZodString;
326
424
  name: z.ZodString;
327
425
  mcpServerUrl: z.ZodString;
426
+ domains: z.ZodArray<z.ZodObject<{
427
+ domain: z.ZodString;
428
+ status: z.ZodEnum<{
429
+ ongoing: "ongoing";
430
+ deployed: "deployed";
431
+ failed: "failed";
432
+ }>;
433
+ createdAt: z.ZodCoercedDate<unknown>;
434
+ }, z.core.$strip>>;
328
435
  latestDeployment: z.ZodNullable<z.ZodObject<{
329
436
  id: z.ZodString;
330
437
  status: z.ZodEnum<{
@@ -363,7 +470,9 @@ declare const contract: {
363
470
  }>, Record<never, never>>;
364
471
  };
365
472
  list: {
366
- v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
473
+ v1: _orpc_contract0.ContractProcedureBuilderWithInputOutput<z.ZodOptional<z.ZodObject<{
474
+ teamId: z.ZodOptional<z.ZodString>;
475
+ }, z.core.$strip>>, z.ZodArray<z.ZodObject<{
367
476
  id: z.ZodString;
368
477
  name: z.ZodString;
369
478
  teamId: z.ZodString;
@@ -389,6 +498,15 @@ declare const contract: {
389
498
  id: z.ZodString;
390
499
  name: z.ZodString;
391
500
  mcpServerUrl: z.ZodString;
501
+ domains: z.ZodArray<z.ZodObject<{
502
+ domain: z.ZodString;
503
+ status: z.ZodEnum<{
504
+ ongoing: "ongoing";
505
+ deployed: "deployed";
506
+ failed: "failed";
507
+ }>;
508
+ createdAt: z.ZodCoercedDate<unknown>;
509
+ }, z.core.$strip>>;
392
510
  latestDeployment: z.ZodNullable<z.ZodObject<{
393
511
  id: z.ZodString;
394
512
  status: z.ZodEnum<{
@@ -498,6 +616,15 @@ declare const contract: {
498
616
  }>, Record<never, never>>;
499
617
  };
500
618
  };
619
+ tunnels: {
620
+ getTicket: {
621
+ v1: _orpc_contract0.ContractProcedureBuilderWithOutput<_orpc_contract0.Schema<unknown, unknown>, z.ZodObject<{
622
+ subdomain: z.ZodString;
623
+ ticket: z.ZodString;
624
+ tunnelHost: z.ZodString;
625
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
626
+ };
627
+ };
501
628
  };
502
629
  type RouterInput = InferContractRouterInputs<typeof contract>;
503
630
  type RouterOutput = InferContractRouterOutputs<typeof contract>;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { oc } from "@orpc/contract";
2
+ import ms from "ms";
2
3
  import { z } from "zod";
3
-
4
4
  //#region src/schemas.ts
5
5
  const RESERVED_KEYS = [
6
6
  "_HANDLER",
@@ -13,7 +13,11 @@ const RESERVED_KEYS = [
13
13
  "AWS_LAMBDA_FUNCTION_VERSION",
14
14
  "AWS_LAMBDA_INITIALIZATION_TYPE",
15
15
  "AWS_LAMBDA_LOG_GROUP_NAME",
16
+ "AWS_LAMBDA_LOG_STREAM_NAME",
16
17
  "AWS_ACCESS_KEY",
18
+ "AWS_ACCESS_KEY_ID",
19
+ "AWS_SECRET_ACCESS_KEY",
20
+ "AWS_SESSION_TOKEN",
17
21
  "AWS_LAMBDA_RUNTIME_API",
18
22
  "LAMBDA_TASK_ROOT",
19
23
  "LAMBDA_RUNTIME_DIR",
@@ -30,7 +34,8 @@ const RESERVED_KEYS = [
30
34
  "BUILD_ARG_BUILD_COMMAND",
31
35
  "BUILD_ARG_BUILD_OUTPUT_DIR",
32
36
  "BUILD_ARG_START_COMMAND",
33
- "ALPIC_HOST"
37
+ "ALPIC_HOST",
38
+ "ALPIC_CUSTOM_DOMAINS"
34
39
  ];
35
40
  const environmentVariableSchema = z.object({
36
41
  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 +60,6 @@ const transportSchema = z.enum([
55
60
  "sse",
56
61
  "streamablehttp"
57
62
  ]);
58
-
59
63
  //#endregion
60
64
  //#region src/api.contract.ts
61
65
  const deploymentStatusSchema = z.enum([
@@ -83,6 +87,10 @@ const deploymentSchema = z.object({
83
87
  completedAt: z.coerce.date().nullable()
84
88
  });
85
89
  const deploymentWithPageUrlSchema = deploymentSchema.extend({ deploymentPageUrl: z.url().nullable() });
90
+ const isValidLogTimeInput = (value) => {
91
+ if (ms(value) !== void 0) return true;
92
+ return !Number.isNaN(new Date(value).getTime());
93
+ };
86
94
  const createEnvironmentContractV1 = oc.route({
87
95
  path: "/v1/environments",
88
96
  method: "POST",
@@ -122,10 +130,20 @@ const getEnvironmentContractV1 = oc.route({
122
130
  createdAt: z.coerce.date(),
123
131
  projectId: z.string()
124
132
  }));
133
+ const domainSchema = z.object({
134
+ domain: z.string(),
135
+ status: z.enum([
136
+ "ongoing",
137
+ "deployed",
138
+ "failed"
139
+ ]),
140
+ createdAt: z.coerce.date()
141
+ });
125
142
  const productionEnvironmentSchema = z.object({
126
143
  id: z.string(),
127
144
  name: z.string(),
128
145
  mcpServerUrl: z.string(),
146
+ domains: z.array(domainSchema),
129
147
  latestDeployment: latestDeploymentSchema.nullable()
130
148
  });
131
149
  const environmentSchema = z.object({
@@ -168,7 +186,7 @@ const listProjectsContractV1 = oc.route({
168
186
  description: "List all projects for a team",
169
187
  tags: ["projects"],
170
188
  successDescription: "The list of projects"
171
- }).output(z.array(projectOutputSchema));
189
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.array(projectOutputSchema));
172
190
  const createProjectContractV1 = oc.route({
173
191
  path: "/v1/projects",
174
192
  method: "POST",
@@ -181,7 +199,7 @@ const createProjectContractV1 = oc.route({
181
199
  BAD_REQUEST: {}
182
200
  }).input(z.object({
183
201
  teamId: z.string().optional(),
184
- name: z.string().min(1).max(100),
202
+ name: z.string().trim().min(1).max(100),
185
203
  sourceRepository: z.string().optional(),
186
204
  branchName: z.string().min(1).optional(),
187
205
  runtime: runtimeSchema,
@@ -211,6 +229,59 @@ const createProjectContractV1 = oc.route({
211
229
  startCommand: z.string().nullable(),
212
230
  createdAt: z.coerce.date()
213
231
  }));
232
+ const environmentVariableOutputSchema = z.object({
233
+ id: z.string(),
234
+ key: z.string(),
235
+ value: z.string(),
236
+ isSecret: z.boolean(),
237
+ createdAt: z.coerce.date()
238
+ });
239
+ const listEnvironmentVariablesContractV1 = oc.route({
240
+ path: "/v1/environments/{environmentId}/environment-variables",
241
+ method: "GET",
242
+ summary: "List environment variables",
243
+ description: "List all environment variables for an environment",
244
+ tags: ["environments"],
245
+ successDescription: "The list of environment variables"
246
+ }).errors({ NOT_FOUND: {} }).input(z.object({ environmentId: z.string().describe("The ID of the environment") })).output(z.array(environmentVariableOutputSchema));
247
+ const createEnvironmentVariablesContractV1 = oc.route({
248
+ path: "/v1/environments/{environmentId}/environment-variables",
249
+ method: "POST",
250
+ summary: "Add environment variables",
251
+ description: "Add one or more environment variables to an environment",
252
+ tags: ["environments"],
253
+ successDescription: "The environment variables have been added successfully"
254
+ }).errors({
255
+ NOT_FOUND: {},
256
+ BAD_REQUEST: {}
257
+ }).input(z.object({
258
+ environmentId: z.string().describe("The ID of the environment"),
259
+ environmentVariables: environmentVariablesSchema
260
+ })).output(z.object({ success: z.literal(true) }));
261
+ const updateEnvironmentVariableContractV1 = oc.route({
262
+ path: "/v1/environment-variables/{environmentVariableId}",
263
+ method: "PATCH",
264
+ summary: "Update an environment variable",
265
+ description: "Update an environment variable by ID",
266
+ tags: ["environments"],
267
+ successDescription: "The environment variable has been updated successfully"
268
+ }).errors({
269
+ NOT_FOUND: {},
270
+ BAD_REQUEST: {}
271
+ }).input(z.object({
272
+ environmentVariableId: z.string().describe("The ID of the environment variable"),
273
+ key: environmentVariableSchema.shape.key,
274
+ value: environmentVariableSchema.shape.value.optional(),
275
+ isSecret: environmentVariableSchema.shape.isSecret
276
+ })).output(z.object({ success: z.literal(true) }));
277
+ const deleteEnvironmentVariableContractV1 = oc.route({
278
+ path: "/v1/environment-variables/{environmentVariableId}",
279
+ method: "DELETE",
280
+ summary: "Delete an environment variable",
281
+ description: "Delete an environment variable by ID",
282
+ tags: ["environments"],
283
+ successDescription: "The environment variable has been deleted successfully"
284
+ }).errors({ NOT_FOUND: {} }).input(z.object({ environmentVariableId: z.string().describe("The ID of the environment variable") })).output(z.object({ success: z.literal(true) }));
214
285
  const deleteProjectContractV1 = oc.route({
215
286
  path: "/v1/projects/:projectId",
216
287
  method: "DELETE",
@@ -279,6 +350,47 @@ const getDeploymentContractV1 = oc.route({
279
350
  tags: ["deployments"],
280
351
  successDescription: "The deployment details"
281
352
  }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentWithPageUrlSchema);
353
+ const getLogsContractV1 = oc.route({
354
+ path: "/v1/environments/{environmentId}/logs",
355
+ method: "GET",
356
+ summary: "Get logs",
357
+ description: "Get logs for an environment",
358
+ tags: ["environments"],
359
+ successDescription: "The logs"
360
+ }).errors({
361
+ NOT_FOUND: {},
362
+ BAD_REQUEST: {}
363
+ }).input(z.object({
364
+ environmentId: z.string().describe("The ID of the environment"),
365
+ since: z.string().refine(isValidLogTimeInput, { message: "Invalid time. Use relative (1h, 30m, 2d) or ISO 8601 format." }).optional().describe("Start time — ISO 8601 (2024-01-01T00:00:00Z) or relative (1h, 30m, 2d)"),
366
+ until: z.string().refine(isValidLogTimeInput, { message: "Invalid time. Use relative (1h, 30m, 2d) or ISO 8601 format." }).optional().describe("End time — ISO 8601 or relative"),
367
+ limit: z.coerce.number().int().min(1).max(1e3).default(1e3).describe("Maximum number of log entries to return."),
368
+ level: z.array(z.enum([
369
+ "INFO",
370
+ "ERROR",
371
+ "WARNING",
372
+ "DEBUG"
373
+ ])).optional().describe("Filter by log level"),
374
+ search: z.string().optional().describe("Filter pattern to search for in log content"),
375
+ nextToken: z.string().optional().describe("Pagination token from a previous response")
376
+ })).output(z.object({
377
+ logs: z.array(z.object({
378
+ timestamp: z.coerce.date(),
379
+ type: z.enum([
380
+ "START",
381
+ "END",
382
+ "INFO",
383
+ "ERROR",
384
+ "WARNING",
385
+ "DEBUG"
386
+ ]),
387
+ requestId: z.string(),
388
+ content: z.string().optional(),
389
+ method: z.string().optional(),
390
+ durationInMs: z.number().optional()
391
+ })),
392
+ nextToken: z.string().nullable()
393
+ }));
282
394
  const getDeploymentLogsContractV1 = oc.route({
283
395
  path: "/v1/deployments/{deploymentId}/logs",
284
396
  method: "GET",
@@ -342,9 +454,20 @@ const listTeamsContractV1 = oc.route({
342
454
  id: z.string(),
343
455
  name: z.string(),
344
456
  createdAt: z.coerce.date(),
345
- hasStripeAccount: z.boolean(),
346
- hasActiveSubscription: z.boolean()
457
+ hasStripeAccount: z.boolean()
347
458
  })));
459
+ const getTunnelTicketContractV1 = oc.route({
460
+ path: "/v1/tunnels/ticket",
461
+ method: "GET",
462
+ summary: "Get a tunnel ticket",
463
+ description: "Get a signed ticket for establishing a tunnel connection. Requires user authentication (API keys are not supported).",
464
+ tags: ["tunnels"],
465
+ successDescription: "The tunnel ticket"
466
+ }).output(z.object({
467
+ subdomain: z.string().describe("The subdomain assigned to the user"),
468
+ ticket: z.string().describe("The signed tunnel ticket"),
469
+ tunnelHost: z.string().describe("The tunnel host to connect to")
470
+ }));
348
471
  const contract = {
349
472
  teams: { list: { v1: listTeamsContractV1 } },
350
473
  analytics: { get: { v1: getProjectAnalyticsContractV1 } },
@@ -357,7 +480,14 @@ const contract = {
357
480
  environments: {
358
481
  create: { v1: createEnvironmentContractV1 },
359
482
  get: { v1: getEnvironmentContractV1 },
360
- deploy: { v1: deployEnvironmentContractV1 }
483
+ deploy: { v1: deployEnvironmentContractV1 },
484
+ getLogs: { v1: getLogsContractV1 }
485
+ },
486
+ environmentVariables: {
487
+ list: { v1: listEnvironmentVariablesContractV1 },
488
+ create: { v1: createEnvironmentVariablesContractV1 },
489
+ update: { v1: updateEnvironmentVariableContractV1 },
490
+ delete: { v1: deleteEnvironmentVariableContractV1 }
361
491
  },
362
492
  projects: {
363
493
  update: { v1: updateProjectContractV1 },
@@ -365,8 +495,8 @@ const contract = {
365
495
  list: { v1: listProjectsContractV1 },
366
496
  create: { v1: createProjectContractV1 },
367
497
  delete: { v1: deleteProjectContractV1 }
368
- }
498
+ },
499
+ tunnels: { getTicket: { v1: getTunnelTicketContractV1 } }
369
500
  };
370
-
371
501
  //#endregion
372
- export { buildSettingsSchema, contract, createEnvironmentContractV1, environmentVariableSchema, environmentVariablesSchema, runtimeSchema, transportSchema };
502
+ 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.e2caa7a",
3
+ "version": "0.0.0-staging.e36f4d7",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,13 +17,15 @@
17
17
  "author": "Alpic",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@orpc/contract": "^1.13.5",
20
+ "@orpc/contract": "^1.13.6",
21
+ "ms": "^2.1.3",
21
22
  "zod": "^4.3.6"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@total-typescript/tsconfig": "^1.0.4",
26
+ "@types/ms": "^2.1.0",
25
27
  "shx": "^0.4.0",
26
- "tsdown": "^0.20.3",
28
+ "tsdown": "^0.21.1",
27
29
  "typescript": "^5.9.3",
28
30
  "vitest": "^4.0.18"
29
31
  },
@@ -33,6 +35,7 @@
33
35
  "test": "pnpm run test:unit && pnpm run test:type && pnpm run test:format",
34
36
  "test:unit": "vitest run",
35
37
  "test:format": "prettier --check .",
36
- "test:type": "tsc --noEmit"
38
+ "test:type": "tsc --noEmit",
39
+ "publish:npm": "pnpm publish --tag \"${NPM_TAG}\" --access public --no-git-checks"
37
40
  }
38
41
  }