@logto/cloud 0.2.5-d9576f9 → 0.2.5-e5d8200

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.
Files changed (2) hide show
  1. package/lib/routes/index.d.ts +149 -101
  2. package/package.json +5 -10
@@ -37,6 +37,20 @@ declare enum OrganizationInvitationStatus {
37
37
  Expired = "Expired",
38
38
  Revoked = "Revoked"
39
39
  }
40
+ /** The scopes (permissions) defined by the organization template. */
41
+ export type OrganizationScope = {
42
+ tenantId: string;
43
+ /** The globally unique identifier of the organization scope. */
44
+ id: string;
45
+ /** The organization scope's name, unique within the organization template. */
46
+ name: string;
47
+ /** A brief description of the organization scope. */
48
+ description: string | null;
49
+ };
50
+ declare enum LogtoJwtTokenKeyType {
51
+ AccessToken = "access-token",
52
+ ClientCredentials = "client-credentials"
53
+ }
40
54
  /**
41
55
  * The simplified organization role entity that is returned in the `roles` field
42
56
  * of the organization.
@@ -52,8 +66,8 @@ declare enum TenantTag {
52
66
  declare enum TenantRole {
53
67
  /** Admin of the tenant, who has all permissions. */
54
68
  Admin = "admin",
55
- /** Member of the tenant, who has permissions to operate the tenant data, but not the tenant settings. */
56
- Member = "member"
69
+ /** Collaborator of the tenant, who has permissions to operate the tenant data, but not the tenant settings. */
70
+ Collaborator = "collaborator"
57
71
  }
58
72
  declare const AffiliateProperties: import("@withtyped/server/lib/model/index.js").default<"affiliate_properties", {
59
73
  createdAt: Date;
@@ -63,10 +77,10 @@ declare const AffiliateProperties: import("@withtyped/server/lib/model/index.js"
63
77
  }, "createdAt", "createdAt">;
64
78
  export type AffiliateProperty = InferModelType<typeof AffiliateProperties>;
65
79
  declare const Affiliates: import("@withtyped/server/lib/model/index.js").default<"affiliates", {
66
- id: string;
67
- createdAt: Date;
68
80
  name: string;
69
- }, "createdAt" | "id", "createdAt" | "id">;
81
+ createdAt: Date;
82
+ id: string;
83
+ }, "id" | "createdAt", "id" | "createdAt">;
70
84
  export type Affiliate = InferModelType<typeof Affiliates>;
71
85
  export type AffiliateData = Affiliate & {
72
86
  properties: Array<Pick<AffiliateProperty, "type" | "value">>;
@@ -88,8 +102,7 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
88
102
  body?: Json | undefined;
89
103
  bodyRaw?: Buffer | undefined;
90
104
  };
91
- }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
92
- options: {};
105
+ }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
93
106
  patch: {
94
107
  "/tenants/:tenantId": import("@withtyped/server").PathGuard<"/:tenantId", unknown, {
95
108
  name?: string | undefined;
@@ -110,11 +123,10 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
110
123
  currentPeriodStart: Date;
111
124
  currentPeriodEnd: Date;
112
125
  };
113
- tag: TenantTag;
114
126
  openInvoices: {
115
127
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
116
- createdAt: Date;
117
128
  id: string;
129
+ createdAt: Date;
118
130
  updatedAt: Date;
119
131
  customerId: string | null;
120
132
  billingReason: string | null;
@@ -126,8 +138,10 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
126
138
  hostedInvoiceUrl: string | null;
127
139
  invoicePdf: string | null;
128
140
  }[];
141
+ tag: TenantTag;
129
142
  }>;
130
143
  };
144
+ options: {};
131
145
  get: {
132
146
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
133
147
  id: string;
@@ -146,11 +160,10 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
146
160
  currentPeriodStart: Date;
147
161
  currentPeriodEnd: Date;
148
162
  };
149
- tag: TenantTag;
150
163
  openInvoices: {
151
164
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
152
- createdAt: Date;
153
165
  id: string;
166
+ createdAt: Date;
154
167
  updatedAt: Date;
155
168
  customerId: string | null;
156
169
  billingReason: string | null;
@@ -162,6 +175,7 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
162
175
  hostedInvoiceUrl: string | null;
163
176
  invoicePdf: string | null;
164
177
  }[];
178
+ tag: TenantTag;
165
179
  }[]>;
166
180
  };
167
181
  post: {
@@ -185,11 +199,10 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
185
199
  currentPeriodStart: Date;
186
200
  currentPeriodEnd: Date;
187
201
  };
188
- tag: TenantTag;
189
202
  openInvoices: {
190
203
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
191
- createdAt: Date;
192
204
  id: string;
205
+ createdAt: Date;
193
206
  updatedAt: Date;
194
207
  customerId: string | null;
195
208
  billingReason: string | null;
@@ -201,6 +214,7 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
201
214
  hostedInvoiceUrl: string | null;
202
215
  invoicePdf: string | null;
203
216
  }[];
217
+ tag: TenantTag;
204
218
  }>;
205
219
  };
206
220
  put: {};
@@ -210,8 +224,8 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
210
224
  copy: {};
211
225
  head: {};
212
226
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
213
- options: {};
214
227
  patch: {};
228
+ options: {};
215
229
  get: {
216
230
  "/tenants/my/subscription": import("@withtyped/server").PathGuard<"/my/subscription", unknown, unknown, {
217
231
  status: "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid" | "paused";
@@ -230,8 +244,8 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
230
244
  "/tenants/:tenantId/invoices": import("@withtyped/server").PathGuard<"/:tenantId/invoices", unknown, unknown, {
231
245
  invoices: {
232
246
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
233
- createdAt: Date;
234
247
  id: string;
248
+ createdAt: Date;
235
249
  updatedAt: Date;
236
250
  customerId: string | null;
237
251
  billingReason: string | null;
@@ -270,8 +284,8 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
270
284
  copy: {};
271
285
  head: {};
272
286
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
273
- options: {};
274
287
  patch: {};
288
+ options: {};
275
289
  get: {
276
290
  "/services/mails/usage": import("@withtyped/server").PathGuard<"/mails/usage", {
277
291
  from?: string | undefined;
@@ -286,6 +300,7 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
286
300
  payload: {
287
301
  code?: string | undefined;
288
302
  link?: string | undefined;
303
+ } & Record<string, string> & {
289
304
  senderName?: string | undefined;
290
305
  companyInformation?: string | undefined;
291
306
  appLogo?: string | undefined;
@@ -301,22 +316,63 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
301
316
  payload: {
302
317
  code?: string | undefined;
303
318
  link?: string | undefined;
304
- };
319
+ } & Record<string, string>;
305
320
  };
306
321
  }, unknown>;
322
+ } & {
323
+ "/services/custom-jwt": import("@withtyped/server").PathGuard<"/custom-jwt", {
324
+ isTest?: string | undefined;
325
+ }, {
326
+ script: string;
327
+ tokenType: LogtoJwtTokenKeyType.AccessToken;
328
+ token: Record<string, Json>;
329
+ context: Record<string, Json>;
330
+ environmentVariables?: Record<string, string> | undefined;
331
+ } | {
332
+ script: string;
333
+ tokenType: LogtoJwtTokenKeyType.ClientCredentials;
334
+ token: Record<string, Json>;
335
+ environmentVariables?: Record<string, string> | undefined;
336
+ }, Record<string, unknown>>;
337
+ };
338
+ put: {
339
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, {
340
+ "jwt.accessToken"?: {
341
+ production?: string | undefined;
342
+ test?: string | undefined;
343
+ } | undefined;
344
+ "jwt.clientCredentials"?: {
345
+ production?: string | undefined;
346
+ test?: string | undefined;
347
+ } | undefined;
348
+ }, unknown>;
349
+ };
350
+ delete: {
351
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, unknown, unknown>;
307
352
  };
308
- put: {};
309
- delete: {};
310
353
  copy: {};
311
354
  head: {};
312
355
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
313
- options: {};
314
356
  patch: {};
357
+ options: {};
315
358
  get: {
316
359
  "/subscription-plans": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
317
- createdAt: Date;
318
360
  id: string;
361
+ createdAt: Date;
319
362
  name: string;
363
+ updatedAt: Date;
364
+ stripeProducts: {
365
+ type: "flat" | "tier1" | "tier2" | "tier3";
366
+ id: string;
367
+ name: string;
368
+ price: {
369
+ id: string;
370
+ unitAmountDecimal: string;
371
+ quantity?: 1 | undefined;
372
+ unitAmount?: number | null | undefined;
373
+ };
374
+ description?: string | undefined;
375
+ }[];
320
376
  quota: {
321
377
  mauLimit: number | null;
322
378
  tokenLimit: number | null;
@@ -338,20 +394,9 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
338
394
  organizationsEnabled: boolean;
339
395
  ssoEnabled: boolean;
340
396
  thirdPartyApplicationsLimit: number | null;
397
+ tenantMembersLimit: number | null;
398
+ customJwtEnabled: boolean;
341
399
  };
342
- stripeProducts: {
343
- type: "flat" | "tier1" | "tier2" | "tier3";
344
- id: string;
345
- name: string;
346
- price: {
347
- id: string;
348
- unitAmountDecimal: string;
349
- quantity?: 1 | undefined;
350
- unitAmount?: number | null | undefined;
351
- };
352
- description?: string | undefined;
353
- }[];
354
- updatedAt: Date;
355
400
  }[]>;
356
401
  };
357
402
  post: {};
@@ -360,33 +405,16 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
360
405
  copy: {};
361
406
  head: {};
362
407
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
363
- options: {};
364
408
  patch: {};
365
- get: {
366
- "/my/tenant": import("@withtyped/server").PathGuard<"/tenant", unknown, unknown, {
367
- name: string;
368
- id: string;
369
- indicator: string;
370
- isSuspended: boolean;
371
- tag: TenantTag;
372
- }>;
373
- };
374
- post: {};
375
- put: {};
376
- delete: {};
377
- copy: {};
378
- head: {};
379
- }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
380
409
  options: {};
381
- patch: {};
382
410
  get: {
383
411
  "/checkout-session/:id": import("@withtyped/server").PathGuard<"/:id", unknown, unknown, {
384
- status: "open" | "complete" | "expired";
385
- createdAt: Date;
386
412
  id: string;
413
+ createdAt: Date;
387
414
  userId: string;
388
- updatedAt: Date;
415
+ status: "open" | "complete" | "expired";
389
416
  tenantId: string | null;
417
+ updatedAt: Date;
390
418
  planId: string;
391
419
  }>;
392
420
  };
@@ -408,8 +436,8 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
408
436
  copy: {};
409
437
  head: {};
410
438
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
411
- options: {};
412
439
  patch: {};
440
+ options: {};
413
441
  get: {
414
442
  "/affiliates": import("@withtyped/server").PathGuard<"/", unknown, unknown, AffiliateData[]>;
415
443
  };
@@ -417,33 +445,33 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
417
445
  "/affiliates": import("@withtyped/server").PathGuard<"/", unknown, {
418
446
  name: string;
419
447
  }, {
420
- createdAt: Date;
421
448
  id: string;
449
+ createdAt: Date;
422
450
  name: string;
423
451
  }>;
424
452
  } & {
425
453
  "/affiliates/:id/properties": import("@withtyped/server").PathGuard<"/:id/properties", unknown, {
426
- value: string;
427
454
  type: "hostname" | "query";
428
- }, {
429
455
  value: string;
430
- type: "hostname" | "query";
456
+ }, {
431
457
  createdAt: Date;
432
458
  affiliateId: string;
459
+ type: "hostname" | "query";
460
+ value: string;
433
461
  }>;
434
462
  };
435
463
  put: {};
436
464
  delete: {
437
465
  "/affiliates/:id/properties": import("@withtyped/server").PathGuard<"/:id/properties", unknown, {
438
- value: string;
439
466
  type: "hostname" | "query";
467
+ value: string;
440
468
  }, unknown>;
441
469
  };
442
470
  copy: {};
443
471
  head: {};
444
472
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
445
- options: {};
446
473
  patch: {};
474
+ options: {};
447
475
  get: {};
448
476
  post: {
449
477
  "/affiliate-logs": import("@withtyped/server").PathGuard<"/", unknown, {
@@ -452,8 +480,8 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
452
480
  hostname?: string | undefined;
453
481
  query?: string | undefined;
454
482
  }, {
455
- createdAt: Date;
456
483
  id: string;
484
+ createdAt: Date;
457
485
  affiliateId: string | null;
458
486
  userId: string;
459
487
  createdVia: {
@@ -468,28 +496,44 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
468
496
  copy: {};
469
497
  head: {};
470
498
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
471
- options: {};
472
- patch: {};
473
- get: {};
474
- post: {};
475
- put: {};
476
- delete: {
477
- "/logs/expired": import("@withtyped/server").PathGuard<"/expired", {
478
- dryRun?: string | undefined;
479
- }, unknown, {
480
- affectedRows: number;
481
- }>;
482
- };
483
- copy: {};
484
- head: {};
485
- }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
486
- options: {};
487
499
  patch: {
488
500
  "/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:invitationId/status", unknown, {
489
501
  status: OrganizationInvitationStatus.Accepted;
490
502
  }, unknown>;
491
503
  };
492
- get: {};
504
+ options: {};
505
+ get: {
506
+ "/invitations": import("@withtyped/server").PathGuard<"/", unknown, unknown, ({
507
+ id: string;
508
+ createdAt: number;
509
+ status: OrganizationInvitationStatus;
510
+ tenantId: string;
511
+ updatedAt: number;
512
+ inviterId: string | null;
513
+ invitee: string;
514
+ acceptedUserId: string | null;
515
+ organizationId: string;
516
+ expiresAt: number;
517
+ organizationRoles: OrganizationRoleEntity[];
518
+ } & {
519
+ tenantTag: TenantTag;
520
+ tenantName: string;
521
+ })[]>;
522
+ } & {
523
+ "/invitations/:invitationId": import("@withtyped/server").PathGuard<"/:invitationId", unknown, unknown, {
524
+ id: string;
525
+ createdAt: number;
526
+ status: OrganizationInvitationStatus;
527
+ tenantId: string;
528
+ updatedAt: number;
529
+ inviterId: string | null;
530
+ invitee: string;
531
+ acceptedUserId: string | null;
532
+ organizationId: string;
533
+ expiresAt: number;
534
+ organizationRoles: OrganizationRoleEntity[];
535
+ }>;
536
+ };
493
537
  post: {};
494
538
  put: {};
495
539
  delete: {};
@@ -504,24 +548,24 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
504
548
  body?: unknown;
505
549
  };
506
550
  }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
507
- options: {};
508
551
  patch: {
509
552
  "/:tenantId/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/status", unknown, {
510
553
  status: OrganizationInvitationStatus.Revoked;
511
554
  }, {
512
- status: OrganizationInvitationStatus;
513
- createdAt: number;
514
555
  id: string;
515
- updatedAt: number;
556
+ createdAt: number;
557
+ status: OrganizationInvitationStatus;
516
558
  tenantId: string;
517
- organizationId: string;
559
+ updatedAt: number;
518
560
  inviterId: string | null;
519
- expiresAt: number;
520
- organizationRoles: OrganizationRoleEntity[];
521
561
  invitee: string;
522
562
  acceptedUserId: string | null;
563
+ organizationId: string;
564
+ expiresAt: number;
565
+ organizationRoles: OrganizationRoleEntity[];
523
566
  }>;
524
567
  };
568
+ options: {};
525
569
  get: {
526
570
  "/:tenantId/members": import("@withtyped/server").PathGuard<"/:tenantId/members", unknown, unknown, {
527
571
  id: string;
@@ -533,37 +577,41 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
533
577
  organizationRoles: OrganizationRoleEntity[];
534
578
  }[]>;
535
579
  } & {
536
- "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, {
537
- status: OrganizationInvitationStatus;
538
- createdAt: number;
580
+ "/:tenantId/members/:userId/scopes": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId/scopes", unknown, unknown, OrganizationScope[]>;
581
+ } & {
582
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, ({
539
583
  id: string;
540
- updatedAt: number;
584
+ createdAt: number;
585
+ status: OrganizationInvitationStatus;
541
586
  tenantId: string;
542
- organizationId: string;
587
+ updatedAt: number;
543
588
  inviterId: string | null;
544
- expiresAt: number;
545
- organizationRoles: OrganizationRoleEntity[];
546
589
  invitee: string;
547
590
  acceptedUserId: string | null;
548
- }[]>;
591
+ organizationId: string;
592
+ expiresAt: number;
593
+ organizationRoles: OrganizationRoleEntity[];
594
+ } & {
595
+ inviterName?: string | undefined;
596
+ })[]>;
549
597
  };
550
598
  post: {
551
599
  "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, {
552
- roleName: TenantRole;
553
600
  invitee: string;
601
+ roleName: TenantRole;
554
602
  expiresAt?: number | undefined;
555
603
  }, {
556
- status: OrganizationInvitationStatus;
557
- createdAt: number;
558
604
  id: string;
559
- updatedAt: number;
605
+ createdAt: number;
606
+ status: OrganizationInvitationStatus;
560
607
  tenantId: string;
561
- organizationId: string;
608
+ updatedAt: number;
562
609
  inviterId: string | null;
563
- expiresAt: number;
564
- organizationRoles: OrganizationRoleEntity[];
565
610
  invitee: string;
566
611
  acceptedUserId: string | null;
612
+ organizationId: string;
613
+ expiresAt: number;
614
+ organizationRoles: OrganizationRoleEntity[];
567
615
  }>;
568
616
  } & {
569
617
  "/:tenantId/invitations/:invitationId/message": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/message", unknown, unknown, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/cloud",
3
- "version": "0.2.5-d9576f9",
3
+ "version": "0.2.5-e5d8200",
4
4
  "description": "Logto Cloud service.",
5
5
  "main": "build/index.js",
6
6
  "author": "Silverhand Inc. <contact@silverhand.io>",
@@ -17,22 +17,20 @@
17
17
  },
18
18
  "devDependencies": {
19
19
  "@silverhand/eslint-config": "5.0.0",
20
- "@silverhand/jest-config": "5.0.0",
21
20
  "@silverhand/ts-config": "5.0.0",
22
21
  "@types/accepts": "^1.3.5",
23
22
  "@types/http-proxy": "^1.17.9",
24
- "@types/jest": "^29.4.0",
25
23
  "@types/mime-types": "^2.1.1",
26
24
  "@types/node": "^20.0.0",
27
25
  "@types/yargs": "^17.0.24",
28
26
  "dts-bundle-generator": "^9.3.1",
29
27
  "eslint": "^8.44.0",
30
- "jest": "^29.5.0",
31
28
  "lint-staged": "^15.0.0",
32
29
  "nodemon": "^3.0.0",
33
- "p-map": "^7.0.1",
34
30
  "prettier": "^3.0.0",
35
- "typescript": "^5.3.3"
31
+ "typescript": "^5.3.3",
32
+ "vite-tsconfig-paths": "^4.3.1",
33
+ "vitest": "^1.0.0"
36
34
  },
37
35
  "engines": {
38
36
  "node": "^20.9.0"
@@ -59,14 +57,11 @@
59
57
  "build": "rm -rf build/ && tsc -p tsconfig.build.json && pnpm build:lib",
60
58
  "//": "It is not used to build the service itself.",
61
59
  "build:lib": "rm -rf lib/ && dts-bundle-generator src/routes/index.ts --project tsconfig.build.lib.json -o lib/routes/index.d.ts",
62
- "build:test": "rm -rf build/ && tsc -p tsconfig.test.json --sourcemap",
63
60
  "lint": "eslint --ext .ts src",
64
61
  "lint:report": "pnpm lint --format json --output-file report.json",
65
62
  "dev": "rm -rf build/ && nodemon",
66
63
  "start": "NODE_ENV=production node .",
67
- "test:only": "NODE_OPTIONS=\"--experimental-vm-modules --max_old_space_size=4096\" jest --logHeapUsage",
68
- "test": "pnpm build:test && pnpm test:only && pnpm build:lib && pnpm test:types",
69
- "test:ci": "pnpm test:only --coverage --silent",
64
+ "test": "vitest && pnpm build:lib && pnpm test:types",
70
65
  "test:types": "tsc -p tsconfig.test.types.json",
71
66
  "cli": "node ./build/cli/index.js"
72
67
  }