@alpic-ai/api 0.0.0-staging.f279b42 → 0.0.0-staging.f4ec698

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
  };
@@ -134,6 +135,7 @@ declare const contract: {
134
135
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
135
136
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
136
137
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
138
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
137
139
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
138
140
  NOT_FOUND: {};
139
141
  }>, Record<never, never>>;
@@ -218,11 +220,100 @@ declare const contract: {
218
220
  authorAvatarUrl: z.ZodNullable<z.ZodString>;
219
221
  startedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
220
222
  completedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
223
+ deploymentPageUrl: z.ZodNullable<z.ZodURL>;
221
224
  }, z.core.$strip>, _orpc_contract0.MergedErrorMap<Record<never, never>, {
222
225
  NOT_FOUND: {};
223
226
  BAD_REQUEST: {};
224
227
  }>, Record<never, never>>;
225
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
+ };
226
317
  };
227
318
  projects: {
228
319
  update: {
@@ -256,6 +347,15 @@ declare const contract: {
256
347
  id: z.ZodString;
257
348
  name: z.ZodString;
258
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>>;
259
359
  latestDeployment: z.ZodNullable<z.ZodObject<{
260
360
  id: z.ZodString;
261
361
  status: z.ZodEnum<{
@@ -323,6 +423,15 @@ declare const contract: {
323
423
  id: z.ZodString;
324
424
  name: z.ZodString;
325
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>>;
326
435
  latestDeployment: z.ZodNullable<z.ZodObject<{
327
436
  id: z.ZodString;
328
437
  status: z.ZodEnum<{
@@ -361,7 +470,9 @@ declare const contract: {
361
470
  }>, Record<never, never>>;
362
471
  };
363
472
  list: {
364
- 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<{
365
476
  id: z.ZodString;
366
477
  name: z.ZodString;
367
478
  teamId: z.ZodString;
@@ -387,6 +498,15 @@ declare const contract: {
387
498
  id: z.ZodString;
388
499
  name: z.ZodString;
389
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>>;
390
510
  latestDeployment: z.ZodNullable<z.ZodObject<{
391
511
  id: z.ZodString;
392
512
  status: z.ZodEnum<{
@@ -496,6 +616,15 @@ declare const contract: {
496
616
  }>, Record<never, never>>;
497
617
  };
498
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
+ };
499
628
  };
500
629
  type RouterInput = InferContractRouterInputs<typeof contract>;
501
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([
@@ -82,6 +86,11 @@ const deploymentSchema = z.object({
82
86
  startedAt: z.coerce.date().nullable(),
83
87
  completedAt: z.coerce.date().nullable()
84
88
  });
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
+ };
85
94
  const createEnvironmentContractV1 = oc.route({
86
95
  path: "/v1/environments",
87
96
  method: "POST",
@@ -121,10 +130,20 @@ const getEnvironmentContractV1 = oc.route({
121
130
  createdAt: z.coerce.date(),
122
131
  projectId: z.string()
123
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
+ });
124
142
  const productionEnvironmentSchema = z.object({
125
143
  id: z.string(),
126
144
  name: z.string(),
127
145
  mcpServerUrl: z.string(),
146
+ domains: z.array(domainSchema),
128
147
  latestDeployment: latestDeploymentSchema.nullable()
129
148
  });
130
149
  const environmentSchema = z.object({
@@ -167,7 +186,7 @@ const listProjectsContractV1 = oc.route({
167
186
  description: "List all projects for a team",
168
187
  tags: ["projects"],
169
188
  successDescription: "The list of projects"
170
- }).output(z.array(projectOutputSchema));
189
+ }).input(z.object({ teamId: z.string().optional() }).optional()).output(z.array(projectOutputSchema));
171
190
  const createProjectContractV1 = oc.route({
172
191
  path: "/v1/projects",
173
192
  method: "POST",
@@ -180,7 +199,7 @@ const createProjectContractV1 = oc.route({
180
199
  BAD_REQUEST: {}
181
200
  }).input(z.object({
182
201
  teamId: z.string().optional(),
183
- name: z.string().min(1).max(100),
202
+ name: z.string().trim().min(1).max(100),
184
203
  sourceRepository: z.string().optional(),
185
204
  branchName: z.string().min(1).optional(),
186
205
  runtime: runtimeSchema,
@@ -210,6 +229,59 @@ const createProjectContractV1 = oc.route({
210
229
  startCommand: z.string().nullable(),
211
230
  createdAt: z.coerce.date()
212
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) }));
213
285
  const deleteProjectContractV1 = oc.route({
214
286
  path: "/v1/projects/:projectId",
215
287
  method: "DELETE",
@@ -246,7 +318,7 @@ const deployEnvironmentContractV1 = oc.route({
246
318
  }).input(z.object({
247
319
  environmentId: z.string().describe("The ID of the environment to deploy"),
248
320
  token: z.string().describe("The token to identify the source archive").optional()
249
- })).output(deploymentSchema);
321
+ })).output(deploymentWithPageUrlSchema);
250
322
  const uploadDeploymentArtifactContractV1 = oc.route({
251
323
  path: "/v1/deployments/upload",
252
324
  method: "POST",
@@ -277,7 +349,48 @@ const getDeploymentContractV1 = oc.route({
277
349
  description: "Get a deployment by ID",
278
350
  tags: ["deployments"],
279
351
  successDescription: "The deployment details"
280
- }).errors({ NOT_FOUND: {} }).input(z.object({ deploymentId: z.string().describe("The ID of the deployment") })).output(deploymentSchema);
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
+ }));
281
394
  const getDeploymentLogsContractV1 = oc.route({
282
395
  path: "/v1/deployments/{deploymentId}/logs",
283
396
  method: "GET",
@@ -341,9 +454,20 @@ const listTeamsContractV1 = oc.route({
341
454
  id: z.string(),
342
455
  name: z.string(),
343
456
  createdAt: z.coerce.date(),
344
- hasStripeAccount: z.boolean(),
345
- hasActiveSubscription: z.boolean()
457
+ hasStripeAccount: z.boolean()
346
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
+ }));
347
471
  const contract = {
348
472
  teams: { list: { v1: listTeamsContractV1 } },
349
473
  analytics: { get: { v1: getProjectAnalyticsContractV1 } },
@@ -356,7 +480,14 @@ const contract = {
356
480
  environments: {
357
481
  create: { v1: createEnvironmentContractV1 },
358
482
  get: { v1: getEnvironmentContractV1 },
359
- 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 }
360
491
  },
361
492
  projects: {
362
493
  update: { v1: updateProjectContractV1 },
@@ -364,8 +495,8 @@ const contract = {
364
495
  list: { v1: listProjectsContractV1 },
365
496
  create: { v1: createProjectContractV1 },
366
497
  delete: { v1: deleteProjectContractV1 }
367
- }
498
+ },
499
+ tunnels: { getTicket: { v1: getTunnelTicketContractV1 } }
368
500
  };
369
-
370
501
  //#endregion
371
- 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.f279b42",
3
+ "version": "0.0.0-staging.f4ec698",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,16 +17,17 @@
17
17
  "author": "Alpic",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@orpc/contract": "^1.13.4",
20
+ "@orpc/contract": "^1.13.7",
21
+ "ms": "^2.1.3",
21
22
  "zod": "^4.3.6"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@total-typescript/tsconfig": "^1.0.4",
25
- "biome": "^0.3.3",
26
+ "@types/ms": "^2.1.0",
26
27
  "shx": "^0.4.0",
27
- "tsdown": "^0.20.3",
28
+ "tsdown": "^0.21.3",
28
29
  "typescript": "^5.9.3",
29
- "vitest": "^4.0.18"
30
+ "vitest": "^4.1.0"
30
31
  },
31
32
  "scripts": {
32
33
  "build": "shx rm -rf dist && tsdown",
@@ -34,6 +35,7 @@
34
35
  "test": "pnpm run test:unit && pnpm run test:type && pnpm run test:format",
35
36
  "test:unit": "vitest run",
36
37
  "test:format": "prettier --check .",
37
- "test:type": "tsc --noEmit"
38
+ "test:type": "tsc --noEmit",
39
+ "publish:npm": "pnpm publish --tag \"${NPM_TAG}\" --access public --no-git-checks"
38
40
  }
39
41
  }