@logto/cloud 0.2.5-5a698db → 0.2.5-5e334eb

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 +707 -96
  2. package/package.json +14 -18
@@ -1,11 +1,13 @@
1
- // Generated by dts-bundle-generator v8.0.1
1
+ // Generated by dts-bundle-generator v9.3.1
2
2
 
3
- import { RequestContext } from '@withtyped/server';
3
+ import { Json, JsonObject, RequestContext } from '@withtyped/server';
4
4
  import { InferModelType } from '@withtyped/server/model';
5
5
 
6
6
  export type WithAuthContext<Context = RequestContext> = Context & {
7
7
  auth: {
8
+ /** The ID of the authenticated subject (`sub`). */
8
9
  id: string;
10
+ /** The scopes that the subject has (`scope`). */
9
11
  scopes: string[];
10
12
  };
11
13
  };
@@ -17,35 +19,129 @@ declare enum VerificationCodeType {
17
19
  /** @deprecated Use `Generic` type template for sending test sms/email use case */
18
20
  Test = "Test"
19
21
  }
22
+ declare enum TemplateType {
23
+ /** The template for sending verification code when user is signing in. */
24
+ SignIn = "SignIn",
25
+ /** The template for sending verification code when user is registering. */
26
+ Register = "Register",
27
+ /** The template for sending verification code when user is resetting password. */
28
+ ForgotPassword = "ForgotPassword",
29
+ /** The template for sending organization invitation. */
30
+ OrganizationInvitation = "OrganizationInvitation",
31
+ /** The template for generic usage. */
32
+ Generic = "Generic"
33
+ }
34
+ declare enum OrganizationInvitationStatus {
35
+ Pending = "Pending",
36
+ Accepted = "Accepted",
37
+ Expired = "Expired",
38
+ Revoked = "Revoked"
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
+ }
54
+ /**
55
+ * The simplified organization role entity that is returned in the `roles` field
56
+ * of the organization.
57
+ */
58
+ export type OrganizationRoleEntity = {
59
+ id: string;
60
+ name: string;
61
+ };
20
62
  declare enum TenantTag {
21
63
  Development = "development",
22
- Staging = "staging",
23
64
  Production = "production"
24
65
  }
25
- declare const AffiliateProperties: import("@withtyped/server/model").default<"affiliate_properties", {
66
+ declare enum TenantRole {
67
+ /** Admin of the tenant, who has all permissions. */
68
+ Admin = "admin",
69
+ /** Collaborator of the tenant, who has permissions to operate the tenant data, but not the tenant settings. */
70
+ Collaborator = "collaborator"
71
+ }
72
+ declare const availableReportableUsageKeys: readonly [
73
+ "tokenLimit",
74
+ "machineToMachineLimit",
75
+ "resourcesLimit",
76
+ "enterpriseSsoLimit",
77
+ "hooksLimit",
78
+ "tenantMembersLimit",
79
+ "mfaEnabled",
80
+ "organizationsEnabled",
81
+ "organizationsLimit"
82
+ ];
83
+ export type ReportableUsageKey = (typeof availableReportableUsageKeys)[number];
84
+ export type RealtimeReportableUsageKey = Exclude<ReportableUsageKey, "tokenLimit">;
85
+ declare enum LogtoSkuType {
86
+ Basic = "Basic",
87
+ AddOn = "AddOn"
88
+ }
89
+ declare const AffiliateProperties: import("@withtyped/server/lib/model/index.js").default<"affiliate_properties", {
26
90
  createdAt: Date;
27
91
  affiliateId: string;
28
92
  type: "hostname" | "query";
29
93
  value: string;
30
94
  }, "createdAt", "createdAt">;
31
95
  export type AffiliateProperty = InferModelType<typeof AffiliateProperties>;
32
- declare const Affiliates: import("@withtyped/server/model").default<"affiliates", {
33
- id: string;
34
- createdAt: Date;
96
+ declare const Affiliates: import("@withtyped/server/lib/model/index.js").default<"affiliates", {
35
97
  name: string;
36
- }, "createdAt" | "id", "createdAt" | "id">;
98
+ createdAt: Date;
99
+ id: string;
100
+ }, "id" | "createdAt", "id" | "createdAt">;
37
101
  export type Affiliate = InferModelType<typeof Affiliates>;
102
+ declare enum RegionName {
103
+ EU = "EU",
104
+ US = "US",
105
+ AU = "AU"
106
+ }
38
107
  export type AffiliateData = Affiliate & {
39
108
  properties: Array<Pick<AffiliateProperty, "type" | "value">>;
40
109
  };
41
- declare const router: import("@withtyped/server").Router<WithAuthContext, 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<{
42
- options: {};
110
+ declare const router: import("@withtyped/server").Router<RequestContext, WithAuthContext<Omit<import("@withtyped/server").BaseContext & {
111
+ request: {
112
+ id?: string | undefined;
113
+ method?: import("@withtyped/server").RequestMethod | undefined;
114
+ headers: import("http").IncomingHttpHeaders;
115
+ url: URL;
116
+ body?: unknown;
117
+ };
118
+ }, "request"> & {
119
+ request: Record<string, unknown> & {
120
+ id?: string | undefined;
121
+ method?: import("@withtyped/server").RequestMethod | undefined;
122
+ headers: import("http").IncomingHttpHeaders;
123
+ url: URL;
124
+ body?: unknown;
125
+ } & {
126
+ body?: Json | undefined;
127
+ bodyRaw?: Buffer | undefined;
128
+ };
129
+ }>, 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<{
43
130
  patch: {
44
131
  "/tenants/:tenantId": import("@withtyped/server").PathGuard<"/:tenantId", unknown, {
45
132
  name?: string | undefined;
46
133
  }, {
47
134
  id: string;
48
135
  name: string;
136
+ quota: {
137
+ mauLimit: number | null;
138
+ tokenLimit: number | null;
139
+ };
140
+ createdAt: Date;
141
+ usage: {
142
+ activeUsers: number;
143
+ tokenUsage: number;
144
+ };
49
145
  indicator: string;
50
146
  isSuspended: boolean;
51
147
  planId: string;
@@ -54,16 +150,22 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
54
150
  planId: string;
55
151
  currentPeriodStart: Date;
56
152
  currentPeriodEnd: Date;
153
+ isEnterprisePlan: boolean;
154
+ id?: string | undefined;
155
+ upcomingInvoice?: {
156
+ subtotal: number;
157
+ subtotalExcludingTax: number | null;
158
+ total: number;
159
+ totalExcludingTax: number | null;
160
+ } | null | undefined;
161
+ isAddOnAvailable?: boolean | undefined;
57
162
  };
163
+ regionName: RegionName;
58
164
  tag: TenantTag;
59
- usage: {
60
- activeUsers: number;
61
- cost: number;
62
- };
63
165
  openInvoices: {
64
166
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
65
- createdAt: Date;
66
167
  id: string;
168
+ createdAt: Date;
67
169
  updatedAt: Date;
68
170
  customerId: string | null;
69
171
  billingReason: string | null;
@@ -77,10 +179,20 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
77
179
  }[];
78
180
  }>;
79
181
  };
182
+ options: {};
80
183
  get: {
81
184
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
82
185
  id: string;
83
186
  name: string;
187
+ quota: {
188
+ mauLimit: number | null;
189
+ tokenLimit: number | null;
190
+ };
191
+ createdAt: Date;
192
+ usage: {
193
+ activeUsers: number;
194
+ tokenUsage: number;
195
+ };
84
196
  indicator: string;
85
197
  isSuspended: boolean;
86
198
  planId: string;
@@ -89,16 +201,22 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
89
201
  planId: string;
90
202
  currentPeriodStart: Date;
91
203
  currentPeriodEnd: Date;
204
+ isEnterprisePlan: boolean;
205
+ id?: string | undefined;
206
+ upcomingInvoice?: {
207
+ subtotal: number;
208
+ subtotalExcludingTax: number | null;
209
+ total: number;
210
+ totalExcludingTax: number | null;
211
+ } | null | undefined;
212
+ isAddOnAvailable?: boolean | undefined;
92
213
  };
214
+ regionName: RegionName;
93
215
  tag: TenantTag;
94
- usage: {
95
- activeUsers: number;
96
- cost: number;
97
- };
98
216
  openInvoices: {
99
217
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
100
- createdAt: Date;
101
218
  id: string;
219
+ createdAt: Date;
102
220
  updatedAt: Date;
103
221
  customerId: string | null;
104
222
  billingReason: string | null;
@@ -116,9 +234,19 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
116
234
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, {
117
235
  name?: string | undefined;
118
236
  tag?: TenantTag | undefined;
237
+ regionName?: RegionName | undefined;
119
238
  }, {
120
239
  id: string;
121
240
  name: string;
241
+ quota: {
242
+ mauLimit: number | null;
243
+ tokenLimit: number | null;
244
+ };
245
+ createdAt: Date;
246
+ usage: {
247
+ activeUsers: number;
248
+ tokenUsage: number;
249
+ };
122
250
  indicator: string;
123
251
  isSuspended: boolean;
124
252
  planId: string;
@@ -127,16 +255,22 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
127
255
  planId: string;
128
256
  currentPeriodStart: Date;
129
257
  currentPeriodEnd: Date;
258
+ isEnterprisePlan: boolean;
259
+ id?: string | undefined;
260
+ upcomingInvoice?: {
261
+ subtotal: number;
262
+ subtotalExcludingTax: number | null;
263
+ total: number;
264
+ totalExcludingTax: number | null;
265
+ } | null | undefined;
266
+ isAddOnAvailable?: boolean | undefined;
130
267
  };
268
+ regionName: RegionName;
131
269
  tag: TenantTag;
132
- usage: {
133
- activeUsers: number;
134
- cost: number;
135
- };
136
270
  openInvoices: {
137
271
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
138
- createdAt: Date;
139
272
  id: string;
273
+ createdAt: Date;
140
274
  updatedAt: Date;
141
275
  customerId: string | null;
142
276
  billingReason: string | null;
@@ -157,14 +291,97 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
157
291
  copy: {};
158
292
  head: {};
159
293
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
160
- options: {};
161
294
  patch: {};
295
+ options: {};
162
296
  get: {
163
297
  "/tenants/my/subscription": import("@withtyped/server").PathGuard<"/my/subscription", unknown, unknown, {
164
298
  status: "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid" | "paused";
165
299
  planId: string;
166
300
  currentPeriodStart: Date;
167
301
  currentPeriodEnd: Date;
302
+ isEnterprisePlan: boolean;
303
+ id?: string | undefined;
304
+ upcomingInvoice?: {
305
+ subtotal: number;
306
+ subtotalExcludingTax: number | null;
307
+ total: number;
308
+ totalExcludingTax: number | null;
309
+ } | null | undefined;
310
+ isAddOnAvailable?: boolean | undefined;
311
+ }>;
312
+ } & {
313
+ "/tenants/my/subscription-usage": import("@withtyped/server").PathGuard<"/my/subscription-usage", unknown, unknown, {
314
+ usage: {
315
+ applicationsLimit: number;
316
+ machineToMachineLimit: number;
317
+ resourcesLimit: number;
318
+ scopesPerResourceLimit: number;
319
+ socialConnectorsLimit: number;
320
+ machineToMachineRolesLimit: number;
321
+ scopesPerRoleLimit: number;
322
+ hooksLimit: number;
323
+ mfaEnabled: boolean;
324
+ organizationsEnabled: boolean;
325
+ thirdPartyApplicationsLimit: number;
326
+ tenantMembersLimit: number;
327
+ customJwtEnabled: boolean;
328
+ subjectTokenEnabled: boolean;
329
+ bringYourUiEnabled: boolean;
330
+ userRolesLimit: number;
331
+ enterpriseSsoLimit: number;
332
+ organizationsLimit: number;
333
+ idpInitiatedSsoEnabled: boolean;
334
+ };
335
+ resources: Record<string, number>;
336
+ roles: Record<string, number>;
337
+ quota: {
338
+ mauLimit: number | null;
339
+ tokenLimit: number | null;
340
+ applicationsLimit: number | null;
341
+ machineToMachineLimit: number | null;
342
+ resourcesLimit: number | null;
343
+ scopesPerResourceLimit: number | null;
344
+ socialConnectorsLimit: number | null;
345
+ machineToMachineRolesLimit: number | null;
346
+ scopesPerRoleLimit: number | null;
347
+ hooksLimit: number | null;
348
+ auditLogsRetentionDays: number | null;
349
+ mfaEnabled: boolean;
350
+ organizationsEnabled: boolean;
351
+ thirdPartyApplicationsLimit: number | null;
352
+ tenantMembersLimit: number | null;
353
+ customJwtEnabled: boolean;
354
+ subjectTokenEnabled: boolean;
355
+ bringYourUiEnabled: boolean;
356
+ userRolesLimit: number | null;
357
+ enterpriseSsoLimit: number | null;
358
+ organizationsLimit: number | null;
359
+ idpInitiatedSsoEnabled: boolean;
360
+ };
361
+ basicQuota: {
362
+ mauLimit: number | null;
363
+ tokenLimit: number | null;
364
+ applicationsLimit: number | null;
365
+ machineToMachineLimit: number | null;
366
+ resourcesLimit: number | null;
367
+ scopesPerResourceLimit: number | null;
368
+ socialConnectorsLimit: number | null;
369
+ machineToMachineRolesLimit: number | null;
370
+ scopesPerRoleLimit: number | null;
371
+ hooksLimit: number | null;
372
+ auditLogsRetentionDays: number | null;
373
+ mfaEnabled: boolean;
374
+ organizationsEnabled: boolean;
375
+ thirdPartyApplicationsLimit: number | null;
376
+ tenantMembersLimit: number | null;
377
+ customJwtEnabled: boolean;
378
+ subjectTokenEnabled: boolean;
379
+ bringYourUiEnabled: boolean;
380
+ userRolesLimit: number | null;
381
+ enterpriseSsoLimit: number | null;
382
+ organizationsLimit: number | null;
383
+ idpInitiatedSsoEnabled: boolean;
384
+ };
168
385
  }>;
169
386
  } & {
170
387
  "/tenants/:tenantId/subscription": import("@withtyped/server").PathGuard<"/:tenantId/subscription", unknown, unknown, {
@@ -172,13 +389,101 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
172
389
  planId: string;
173
390
  currentPeriodStart: Date;
174
391
  currentPeriodEnd: Date;
392
+ isEnterprisePlan: boolean;
393
+ id?: string | undefined;
394
+ upcomingInvoice?: {
395
+ subtotal: number;
396
+ subtotalExcludingTax: number | null;
397
+ total: number;
398
+ totalExcludingTax: number | null;
399
+ } | null | undefined;
400
+ isAddOnAvailable?: boolean | undefined;
401
+ }>;
402
+ } & {
403
+ "/tenants/:tenantId/subscription-usage": import("@withtyped/server").PathGuard<"/:tenantId/subscription-usage", unknown, unknown, {
404
+ usage: {
405
+ applicationsLimit: number;
406
+ machineToMachineLimit: number;
407
+ resourcesLimit: number;
408
+ scopesPerResourceLimit: number;
409
+ socialConnectorsLimit: number;
410
+ machineToMachineRolesLimit: number;
411
+ scopesPerRoleLimit: number;
412
+ hooksLimit: number;
413
+ mfaEnabled: boolean;
414
+ organizationsEnabled: boolean;
415
+ thirdPartyApplicationsLimit: number;
416
+ tenantMembersLimit: number;
417
+ customJwtEnabled: boolean;
418
+ subjectTokenEnabled: boolean;
419
+ bringYourUiEnabled: boolean;
420
+ userRolesLimit: number;
421
+ enterpriseSsoLimit: number;
422
+ organizationsLimit: number;
423
+ idpInitiatedSsoEnabled: boolean;
424
+ };
425
+ resources: Record<string, number>;
426
+ roles: Record<string, number>;
427
+ quota: {
428
+ mauLimit: number | null;
429
+ tokenLimit: number | null;
430
+ applicationsLimit: number | null;
431
+ machineToMachineLimit: number | null;
432
+ resourcesLimit: number | null;
433
+ scopesPerResourceLimit: number | null;
434
+ socialConnectorsLimit: number | null;
435
+ machineToMachineRolesLimit: number | null;
436
+ scopesPerRoleLimit: number | null;
437
+ hooksLimit: number | null;
438
+ auditLogsRetentionDays: number | null;
439
+ mfaEnabled: boolean;
440
+ organizationsEnabled: boolean;
441
+ thirdPartyApplicationsLimit: number | null;
442
+ tenantMembersLimit: number | null;
443
+ customJwtEnabled: boolean;
444
+ subjectTokenEnabled: boolean;
445
+ bringYourUiEnabled: boolean;
446
+ userRolesLimit: number | null;
447
+ enterpriseSsoLimit: number | null;
448
+ organizationsLimit: number | null;
449
+ idpInitiatedSsoEnabled: boolean;
450
+ };
451
+ basicQuota: {
452
+ mauLimit: number | null;
453
+ tokenLimit: number | null;
454
+ applicationsLimit: number | null;
455
+ machineToMachineLimit: number | null;
456
+ resourcesLimit: number | null;
457
+ scopesPerResourceLimit: number | null;
458
+ socialConnectorsLimit: number | null;
459
+ machineToMachineRolesLimit: number | null;
460
+ scopesPerRoleLimit: number | null;
461
+ hooksLimit: number | null;
462
+ auditLogsRetentionDays: number | null;
463
+ mfaEnabled: boolean;
464
+ organizationsEnabled: boolean;
465
+ thirdPartyApplicationsLimit: number | null;
466
+ tenantMembersLimit: number | null;
467
+ customJwtEnabled: boolean;
468
+ subjectTokenEnabled: boolean;
469
+ bringYourUiEnabled: boolean;
470
+ userRolesLimit: number | null;
471
+ enterpriseSsoLimit: number | null;
472
+ organizationsLimit: number | null;
473
+ idpInitiatedSsoEnabled: boolean;
474
+ };
475
+ }>;
476
+ } & {
477
+ "/tenants/:tenantId/subscription/periodic-usage": import("@withtyped/server").PathGuard<"/:tenantId/subscription/periodic-usage", unknown, unknown, {
478
+ mauLimit: number;
479
+ tokenLimit: number;
175
480
  }>;
176
481
  } & {
177
482
  "/tenants/:tenantId/invoices": import("@withtyped/server").PathGuard<"/:tenantId/invoices", unknown, unknown, {
178
483
  invoices: {
179
484
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
180
- createdAt: Date;
181
485
  id: string;
486
+ createdAt: Date;
182
487
  updatedAt: Date;
183
488
  customerId: string | null;
184
489
  billingReason: string | null;
@@ -190,19 +495,58 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
190
495
  hostedInvoiceUrl: string | null;
191
496
  invoicePdf: string | null;
192
497
  planName: string | null;
498
+ skuId?: string | null | undefined;
193
499
  }[];
194
500
  }>;
501
+ } & {
502
+ "/tenants/:tenantId/available-skus": import("@withtyped/server").PathGuard<"/:tenantId/available-skus", {
503
+ type?: LogtoSkuType | undefined;
504
+ }, unknown, {
505
+ type: LogtoSkuType;
506
+ id: string;
507
+ name: string | null;
508
+ quota: {
509
+ mauLimit?: number | null | undefined;
510
+ tokenLimit?: number | null | undefined;
511
+ applicationsLimit?: number | null | undefined;
512
+ machineToMachineLimit?: number | null | undefined;
513
+ resourcesLimit?: number | null | undefined;
514
+ scopesPerResourceLimit?: number | null | undefined;
515
+ socialConnectorsLimit?: number | null | undefined;
516
+ machineToMachineRolesLimit?: number | null | undefined;
517
+ scopesPerRoleLimit?: number | null | undefined;
518
+ hooksLimit?: number | null | undefined;
519
+ auditLogsRetentionDays?: number | null | undefined;
520
+ mfaEnabled?: boolean | undefined;
521
+ organizationsEnabled?: boolean | undefined;
522
+ thirdPartyApplicationsLimit?: number | null | undefined;
523
+ tenantMembersLimit?: number | null | undefined;
524
+ customJwtEnabled?: boolean | undefined;
525
+ subjectTokenEnabled?: boolean | undefined;
526
+ bringYourUiEnabled?: boolean | undefined;
527
+ userRolesLimit?: number | null | undefined;
528
+ enterpriseSsoLimit?: number | null | undefined;
529
+ organizationsLimit?: number | null | undefined;
530
+ idpInitiatedSsoEnabled?: boolean | undefined;
531
+ };
532
+ createdAt: Date;
533
+ updatedAt: Date;
534
+ defaultPriceId: string | null;
535
+ unitPrice: number | null;
536
+ productId: string | null;
537
+ }[]>;
195
538
  } & {
196
539
  "/tenants/:tenantId/invoices/:invoiceId/hosted-invoice-url": import("@withtyped/server").PathGuard<"/:tenantId/invoices/:invoiceId/hosted-invoice-url", unknown, unknown, {
197
540
  hostedInvoiceUrl: string;
198
541
  }>;
199
- } & {
200
- "/tenants/:tenantId/usage": import("@withtyped/server").PathGuard<"/:tenantId/usage", unknown, unknown, {
201
- activeUsers: number;
202
- cost: number;
203
- }>;
204
542
  };
205
543
  post: {
544
+ "/tenants/my/subscription/item-updates": import("@withtyped/server").PathGuard<"/my/subscription/item-updates", unknown, {
545
+ usageKey: RealtimeReportableUsageKey;
546
+ }, {
547
+ message: string;
548
+ }>;
549
+ } & {
206
550
  "/tenants/:tenantId/stripe-customer-portal": import("@withtyped/server").PathGuard<"/:tenantId/stripe-customer-portal", unknown, {
207
551
  callbackUrl?: string | undefined;
208
552
  }, {
@@ -216,8 +560,8 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
216
560
  copy: {};
217
561
  head: {};
218
562
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
219
- options: {};
220
563
  patch: {};
564
+ options: {};
221
565
  get: {
222
566
  "/services/mails/usage": import("@withtyped/server").PathGuard<"/mails/usage", {
223
567
  from?: string | undefined;
@@ -228,9 +572,11 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
228
572
  post: {
229
573
  "/services/mails": import("@withtyped/server").PathGuard<"/mails", unknown, {
230
574
  data: {
231
- type: VerificationCodeType;
575
+ type: TemplateType | VerificationCodeType;
232
576
  payload: {
233
- code: string;
577
+ code?: string | undefined;
578
+ link?: string | undefined;
579
+ } & Record<string, string> & {
234
580
  senderName?: string | undefined;
235
581
  companyInformation?: string | undefined;
236
582
  appLogo?: string | undefined;
@@ -241,104 +587,212 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
241
587
  } & {
242
588
  "/services/send-sms": import("@withtyped/server").PathGuard<"/send-sms", unknown, {
243
589
  data: {
244
- type: VerificationCodeType;
590
+ type: TemplateType | VerificationCodeType;
245
591
  to: string;
246
592
  payload: {
247
- code: string;
248
- };
593
+ code?: string | undefined;
594
+ link?: string | undefined;
595
+ } & Record<string, string>;
249
596
  };
250
597
  }, unknown>;
598
+ } & {
599
+ "/services/custom-jwt": import("@withtyped/server").PathGuard<"/custom-jwt", {
600
+ isTest?: string | undefined;
601
+ }, {
602
+ context: Record<string, Json>;
603
+ script: string;
604
+ tokenType: LogtoJwtTokenKeyType.AccessToken;
605
+ token: Record<string, Json>;
606
+ environmentVariables?: Record<string, string> | undefined;
607
+ } | {
608
+ script: string;
609
+ tokenType: LogtoJwtTokenKeyType.ClientCredentials;
610
+ token: Record<string, Json>;
611
+ environmentVariables?: Record<string, string> | undefined;
612
+ }, Record<string, unknown>>;
613
+ };
614
+ put: {
615
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, {
616
+ "jwt.accessToken"?: {
617
+ production?: string | undefined;
618
+ test?: string | undefined;
619
+ } | undefined;
620
+ "jwt.clientCredentials"?: {
621
+ production?: string | undefined;
622
+ test?: string | undefined;
623
+ } | undefined;
624
+ }, unknown>;
625
+ };
626
+ delete: {
627
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, unknown, unknown>;
251
628
  };
252
- put: {};
253
- delete: {};
254
629
  copy: {};
255
630
  head: {};
256
631
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
257
- options: {};
258
632
  patch: {};
633
+ options: {};
259
634
  get: {
260
- "/subscription-plans": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
261
- createdAt: Date;
635
+ "/skus": import("@withtyped/server").PathGuard<"/", {
636
+ type?: LogtoSkuType | undefined;
637
+ }, unknown, {
638
+ type: LogtoSkuType;
262
639
  id: string;
263
- name: string;
640
+ name: string | null;
641
+ quota: {
642
+ mauLimit?: number | null | undefined;
643
+ tokenLimit?: number | null | undefined;
644
+ applicationsLimit?: number | null | undefined;
645
+ machineToMachineLimit?: number | null | undefined;
646
+ resourcesLimit?: number | null | undefined;
647
+ scopesPerResourceLimit?: number | null | undefined;
648
+ socialConnectorsLimit?: number | null | undefined;
649
+ machineToMachineRolesLimit?: number | null | undefined;
650
+ scopesPerRoleLimit?: number | null | undefined;
651
+ hooksLimit?: number | null | undefined;
652
+ auditLogsRetentionDays?: number | null | undefined;
653
+ mfaEnabled?: boolean | undefined;
654
+ organizationsEnabled?: boolean | undefined;
655
+ thirdPartyApplicationsLimit?: number | null | undefined;
656
+ tenantMembersLimit?: number | null | undefined;
657
+ customJwtEnabled?: boolean | undefined;
658
+ subjectTokenEnabled?: boolean | undefined;
659
+ bringYourUiEnabled?: boolean | undefined;
660
+ userRolesLimit?: number | null | undefined;
661
+ enterpriseSsoLimit?: number | null | undefined;
662
+ organizationsLimit?: number | null | undefined;
663
+ idpInitiatedSsoEnabled?: boolean | undefined;
664
+ };
665
+ createdAt: Date;
666
+ updatedAt: Date;
667
+ defaultPriceId: string | null;
668
+ unitPrice: number | null;
669
+ productId: string | null;
670
+ }[]>;
671
+ };
672
+ post: {
673
+ "/skus": import("@withtyped/server").PathGuard<"/", unknown, {
674
+ type: LogtoSkuType.AddOn;
675
+ quota: {
676
+ tokenLimit?: number | null | undefined;
677
+ machineToMachineLimit?: number | null | undefined;
678
+ resourcesLimit?: number | null | undefined;
679
+ enterpriseSsoLimit?: number | null | undefined;
680
+ hooksLimit?: number | null | undefined;
681
+ tenantMembersLimit?: number | null | undefined;
682
+ mfaEnabled?: boolean | undefined;
683
+ organizationsEnabled?: boolean | undefined;
684
+ organizationsLimit?: number | null | undefined;
685
+ mauLimit?: number | null | undefined;
686
+ applicationsLimit?: number | null | undefined;
687
+ scopesPerResourceLimit?: number | null | undefined;
688
+ socialConnectorsLimit?: number | null | undefined;
689
+ machineToMachineRolesLimit?: number | null | undefined;
690
+ scopesPerRoleLimit?: number | null | undefined;
691
+ auditLogsRetentionDays?: number | null | undefined;
692
+ thirdPartyApplicationsLimit?: number | null | undefined;
693
+ customJwtEnabled?: boolean | undefined;
694
+ subjectTokenEnabled?: boolean | undefined;
695
+ bringYourUiEnabled?: boolean | undefined;
696
+ userRolesLimit?: number | null | undefined;
697
+ idpInitiatedSsoEnabled?: boolean | undefined;
698
+ };
699
+ } | {
700
+ type: LogtoSkuType.Basic;
264
701
  quota: {
265
702
  mauLimit: number | null;
703
+ tokenLimit: number | null;
266
704
  applicationsLimit: number | null;
267
705
  machineToMachineLimit: number | null;
268
706
  resourcesLimit: number | null;
269
707
  scopesPerResourceLimit: number | null;
270
- customDomainEnabled: boolean;
271
- omniSignInEnabled: boolean;
272
- builtInEmailConnectorEnabled: boolean;
273
708
  socialConnectorsLimit: number | null;
274
- standardConnectorsLimit: number | null;
275
- rolesLimit: number | null;
709
+ machineToMachineRolesLimit: number | null;
276
710
  scopesPerRoleLimit: number | null;
277
711
  hooksLimit: number | null;
278
712
  auditLogsRetentionDays: number | null;
279
713
  mfaEnabled: boolean;
280
714
  organizationsEnabled: boolean;
281
- ssoEnabled: boolean;
715
+ thirdPartyApplicationsLimit: number | null;
716
+ tenantMembersLimit: number | null;
717
+ customJwtEnabled: boolean;
718
+ subjectTokenEnabled: boolean;
719
+ bringYourUiEnabled: boolean;
720
+ userRolesLimit: number | null;
721
+ enterpriseSsoLimit: number | null;
722
+ organizationsLimit: number | null;
723
+ idpInitiatedSsoEnabled: boolean;
282
724
  };
283
- stripeProducts: {
284
- type: "flat" | "tier1" | "tier2" | "tier3";
285
- id: string;
286
- name: string;
287
- price: {
288
- id: string;
289
- unitAmountDecimal: string;
290
- quantity?: 1 | undefined;
291
- unitAmount?: number | null | undefined;
292
- };
293
- description?: string | undefined;
294
- }[];
725
+ }, {
726
+ id: string;
727
+ createdAt: Date;
728
+ type: LogtoSkuType;
295
729
  updatedAt: Date;
296
- }[]>;
297
- };
298
- post: {};
299
- put: {};
300
- delete: {};
301
- copy: {};
302
- head: {};
303
- }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
304
- options: {};
305
- patch: {};
306
- get: {
307
- "/my/tenant": import("@withtyped/server").PathGuard<"/tenant", unknown, unknown, {
730
+ quota: {
731
+ mauLimit?: number | null | undefined;
732
+ tokenLimit?: number | null | undefined;
733
+ applicationsLimit?: number | null | undefined;
734
+ machineToMachineLimit?: number | null | undefined;
735
+ resourcesLimit?: number | null | undefined;
736
+ scopesPerResourceLimit?: number | null | undefined;
737
+ socialConnectorsLimit?: number | null | undefined;
738
+ machineToMachineRolesLimit?: number | null | undefined;
739
+ scopesPerRoleLimit?: number | null | undefined;
740
+ hooksLimit?: number | null | undefined;
741
+ auditLogsRetentionDays?: number | null | undefined;
742
+ mfaEnabled?: boolean | undefined;
743
+ organizationsEnabled?: boolean | undefined;
744
+ thirdPartyApplicationsLimit?: number | null | undefined;
745
+ tenantMembersLimit?: number | null | undefined;
746
+ customJwtEnabled?: boolean | undefined;
747
+ subjectTokenEnabled?: boolean | undefined;
748
+ bringYourUiEnabled?: boolean | undefined;
749
+ userRolesLimit?: number | null | undefined;
750
+ enterpriseSsoLimit?: number | null | undefined;
751
+ organizationsLimit?: number | null | undefined;
752
+ idpInitiatedSsoEnabled?: boolean | undefined;
753
+ };
754
+ }>;
755
+ } & {
756
+ "/skus/:skuId/products": import("@withtyped/server").PathGuard<"/:skuId/products", {
757
+ isOneTime?: string | undefined;
758
+ }, {
308
759
  name: string;
309
- id: string;
310
- indicator: string;
311
- isSuspended: boolean;
312
- tag: TenantTag;
760
+ unitPrice: number;
761
+ }, {
762
+ productId: string;
313
763
  }>;
314
764
  };
315
- post: {};
316
765
  put: {};
317
- delete: {};
766
+ delete: {
767
+ "/skus/:skuId": import("@withtyped/server").PathGuard<"/:skuId", unknown, unknown, unknown>;
768
+ };
318
769
  copy: {};
319
770
  head: {};
320
771
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
321
- options: {};
322
772
  patch: {};
773
+ options: {};
323
774
  get: {
324
775
  "/checkout-session/:id": import("@withtyped/server").PathGuard<"/:id", unknown, unknown, {
325
- status: "open" | "complete" | "expired";
326
- createdAt: Date;
327
776
  id: string;
777
+ createdAt: Date;
328
778
  userId: string;
329
- updatedAt: Date;
779
+ status: "open" | "complete" | "expired";
330
780
  tenantId: string | null;
331
- planId: string;
781
+ updatedAt: Date;
782
+ planId: string | null;
783
+ skuId: string | null;
332
784
  }>;
333
785
  };
334
786
  post: {
335
787
  "/checkout-session": import("@withtyped/server").PathGuard<"/", unknown, {
336
- planId: string;
337
788
  successCallbackUrl: string;
338
789
  tenantId?: string | undefined;
339
- cancelCallbackUrl?: string | undefined;
340
- tenantTag?: TenantTag | undefined;
790
+ planId?: string | undefined;
791
+ skuId?: string | undefined;
341
792
  tenantName?: string | undefined;
793
+ tenantTag?: TenantTag | undefined;
794
+ tenantRegionName?: RegionName | undefined;
795
+ cancelCallbackUrl?: string | undefined;
342
796
  }, {
343
797
  sessionId: string;
344
798
  redirectUri?: string | null | undefined;
@@ -349,8 +803,8 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
349
803
  copy: {};
350
804
  head: {};
351
805
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
352
- options: {};
353
806
  patch: {};
807
+ options: {};
354
808
  get: {
355
809
  "/affiliates": import("@withtyped/server").PathGuard<"/", unknown, unknown, AffiliateData[]>;
356
810
  };
@@ -358,33 +812,33 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
358
812
  "/affiliates": import("@withtyped/server").PathGuard<"/", unknown, {
359
813
  name: string;
360
814
  }, {
361
- createdAt: Date;
362
815
  id: string;
816
+ createdAt: Date;
363
817
  name: string;
364
818
  }>;
365
819
  } & {
366
820
  "/affiliates/:id/properties": import("@withtyped/server").PathGuard<"/:id/properties", unknown, {
367
- value: string;
368
821
  type: "hostname" | "query";
369
- }, {
370
822
  value: string;
371
- type: "hostname" | "query";
823
+ }, {
372
824
  createdAt: Date;
373
825
  affiliateId: string;
826
+ type: "hostname" | "query";
827
+ value: string;
374
828
  }>;
375
829
  };
376
830
  put: {};
377
831
  delete: {
378
832
  "/affiliates/:id/properties": import("@withtyped/server").PathGuard<"/:id/properties", unknown, {
379
- value: string;
380
833
  type: "hostname" | "query";
834
+ value: string;
381
835
  }, unknown>;
382
836
  };
383
837
  copy: {};
384
838
  head: {};
385
839
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
386
- options: {};
387
840
  patch: {};
841
+ options: {};
388
842
  get: {};
389
843
  post: {
390
844
  "/affiliate-logs": import("@withtyped/server").PathGuard<"/", unknown, {
@@ -393,8 +847,8 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
393
847
  hostname?: string | undefined;
394
848
  query?: string | undefined;
395
849
  }, {
396
- createdAt: Date;
397
850
  id: string;
851
+ createdAt: Date;
398
852
  affiliateId: string | null;
399
853
  userId: string;
400
854
  createdVia: {
@@ -408,7 +862,164 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
408
862
  delete: {};
409
863
  copy: {};
410
864
  head: {};
865
+ }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
866
+ patch: {
867
+ "/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:invitationId/status", unknown, {
868
+ status: OrganizationInvitationStatus.Accepted;
869
+ }, unknown>;
870
+ };
871
+ options: {};
872
+ get: {
873
+ "/invitations": import("@withtyped/server").PathGuard<"/", unknown, unknown, ({
874
+ id: string;
875
+ createdAt: number;
876
+ status: OrganizationInvitationStatus;
877
+ tenantId: string;
878
+ updatedAt: number;
879
+ inviterId: string | null;
880
+ invitee: string;
881
+ acceptedUserId: string | null;
882
+ organizationId: string;
883
+ expiresAt: number;
884
+ organizationRoles: OrganizationRoleEntity[];
885
+ } & {
886
+ tenantName: string;
887
+ tenantTag: TenantTag;
888
+ })[]>;
889
+ } & {
890
+ "/invitations/:invitationId": import("@withtyped/server").PathGuard<"/:invitationId", unknown, unknown, {
891
+ id: string;
892
+ createdAt: number;
893
+ status: OrganizationInvitationStatus;
894
+ tenantId: string;
895
+ updatedAt: number;
896
+ inviterId: string | null;
897
+ invitee: string;
898
+ acceptedUserId: string | null;
899
+ organizationId: string;
900
+ expiresAt: number;
901
+ organizationRoles: OrganizationRoleEntity[];
902
+ }>;
903
+ };
904
+ post: {};
905
+ put: {};
906
+ delete: {};
907
+ copy: {};
908
+ head: {};
909
+ }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
910
+ patch: {};
911
+ options: {};
912
+ get: {};
913
+ post: {};
914
+ put: {};
915
+ delete: {
916
+ "/me": import("@withtyped/server").PathGuard<"/", unknown, unknown, unknown>;
917
+ };
918
+ copy: {};
919
+ head: {};
411
920
  }, "/api">>, "/api">;
921
+ export declare const tenantAuthRouter: import("@withtyped/server").Router<RequestContext, import("@withtyped/server").WithBodyContext<import("@withtyped/server").BaseContext & {
922
+ request: {
923
+ id?: string | undefined;
924
+ method?: import("@withtyped/server").RequestMethod | undefined;
925
+ headers: import("http").IncomingHttpHeaders;
926
+ url: URL;
927
+ body?: unknown;
928
+ };
929
+ }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
930
+ patch: {
931
+ "/:tenantId/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/status", unknown, {
932
+ status: OrganizationInvitationStatus.Revoked;
933
+ }, {
934
+ id: string;
935
+ createdAt: number;
936
+ status: OrganizationInvitationStatus;
937
+ tenantId: string;
938
+ updatedAt: number;
939
+ inviterId: string | null;
940
+ invitee: string;
941
+ acceptedUserId: string | null;
942
+ organizationId: string;
943
+ expiresAt: number;
944
+ organizationRoles: OrganizationRoleEntity[];
945
+ }>;
946
+ };
947
+ options: {};
948
+ get: {
949
+ "/:tenantId/members": import("@withtyped/server").PathGuard<"/:tenantId/members", unknown, unknown, {
950
+ id: string;
951
+ name: string | null;
952
+ username: string | null;
953
+ primaryEmail: string | null;
954
+ primaryPhone: string | null;
955
+ avatar: string | null;
956
+ organizationRoles: OrganizationRoleEntity[];
957
+ }[]>;
958
+ } & {
959
+ "/:tenantId/members/:userId/scopes": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId/scopes", unknown, unknown, OrganizationScope[]>;
960
+ } & {
961
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, ({
962
+ id: string;
963
+ createdAt: number;
964
+ status: OrganizationInvitationStatus;
965
+ tenantId: string;
966
+ updatedAt: number;
967
+ inviterId: string | null;
968
+ invitee: string;
969
+ acceptedUserId: string | null;
970
+ organizationId: string;
971
+ expiresAt: number;
972
+ organizationRoles: OrganizationRoleEntity[];
973
+ } & {
974
+ inviterName?: string | undefined;
975
+ })[]>;
976
+ };
977
+ post: {
978
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, {
979
+ invitee: string | string[];
980
+ roleName: TenantRole;
981
+ expiresAt?: number | undefined;
982
+ }, {
983
+ id: string;
984
+ createdAt: number;
985
+ status: OrganizationInvitationStatus;
986
+ tenantId: string;
987
+ updatedAt: number;
988
+ inviterId: string | null;
989
+ invitee: string;
990
+ acceptedUserId: string | null;
991
+ organizationId: string;
992
+ expiresAt: number;
993
+ organizationRoles: OrganizationRoleEntity[];
994
+ } | {
995
+ id: string;
996
+ createdAt: number;
997
+ status: OrganizationInvitationStatus;
998
+ tenantId: string;
999
+ updatedAt: number;
1000
+ inviterId: string | null;
1001
+ invitee: string;
1002
+ acceptedUserId: string | null;
1003
+ organizationId: string;
1004
+ expiresAt: number;
1005
+ organizationRoles: OrganizationRoleEntity[];
1006
+ }[]>;
1007
+ } & {
1008
+ "/:tenantId/invitations/:invitationId/message": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/message", unknown, unknown, unknown>;
1009
+ };
1010
+ put: {
1011
+ "/:tenantId/members/:userId/roles": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId/roles", unknown, {
1012
+ roleName: TenantRole;
1013
+ }, unknown>;
1014
+ };
1015
+ delete: {
1016
+ "/:tenantId/members/:userId": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId", unknown, unknown, unknown>;
1017
+ } & {
1018
+ "/:tenantId/invitations/:invitationId": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId", unknown, unknown, unknown>;
1019
+ };
1020
+ copy: {};
1021
+ head: {};
1022
+ }, "/api/tenants">>, "/api/tenants">;
412
1023
 
413
1024
  export {
414
1025
  router as default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/cloud",
3
- "version": "0.2.5-5a698db",
3
+ "version": "0.2.5-5e334eb",
4
4
  "description": "Logto Cloud service.",
5
5
  "main": "build/index.js",
6
6
  "author": "Silverhand Inc. <contact@silverhand.io>",
@@ -16,25 +16,24 @@
16
16
  "#src/*": "./build/*"
17
17
  },
18
18
  "devDependencies": {
19
- "@silverhand/eslint-config": "4.0.1",
20
- "@silverhand/jest-config": "4.0.0",
21
- "@silverhand/ts-config": "4.0.0",
19
+ "@silverhand/eslint-config": "6.0.1",
20
+ "@silverhand/ts-config": "6.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
- "@types/node": "^18.11.18",
24
+ "@types/node": "^20.0.0",
27
25
  "@types/yargs": "^17.0.24",
28
- "dts-bundle-generator": "^8.0.1",
29
- "eslint": "^8.44.0",
30
- "jest": "^29.5.0",
26
+ "dts-bundle-generator": "^9.3.1",
27
+ "eslint": "^8.57.0",
31
28
  "lint-staged": "^15.0.0",
32
29
  "nodemon": "^3.0.0",
33
30
  "prettier": "^3.0.0",
34
- "typescript": "^5.0.0"
31
+ "typescript": "^5.3.3",
32
+ "vite-tsconfig-paths": "^5.0.0",
33
+ "vitest": "^2.0.0"
35
34
  },
36
35
  "engines": {
37
- "node": "^18.12.0"
36
+ "node": "^20.9.0"
38
37
  },
39
38
  "eslintConfig": {
40
39
  "extends": "@silverhand",
@@ -50,22 +49,19 @@
50
49
  "access": "public"
51
50
  },
52
51
  "dependencies": {
53
- "@silverhand/essentials": "^2.8.5",
54
- "@withtyped/server": "^0.12.7"
52
+ "@silverhand/essentials": "^2.9.2",
53
+ "@withtyped/server": "^0.14.0"
55
54
  },
56
55
  "scripts": {
57
56
  "precommit": "lint-staged",
58
57
  "build": "rm -rf build/ && tsc -p tsconfig.build.json && pnpm build:lib",
59
58
  "//": "It is not used to build the service itself.",
60
- "build:lib": "rm -rf lib/ && dts-bundle-generator src/routes/index.ts --project tsconfig.build.json -o lib/routes/index.d.ts",
61
- "build:test": "rm -rf build/ && tsc -p tsconfig.test.json --sourcemap",
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
60
  "lint": "eslint --ext .ts src",
63
61
  "lint:report": "pnpm lint --format json --output-file report.json",
64
62
  "dev": "rm -rf build/ && nodemon",
65
63
  "start": "NODE_ENV=production node .",
66
- "test:only": "NODE_OPTIONS=\"--experimental-vm-modules --max_old_space_size=4096\" jest --logHeapUsage",
67
- "test": "pnpm build:test && pnpm test:only && pnpm build:lib && pnpm test:types",
68
- "test:ci": "pnpm test:only --coverage --silent",
64
+ "test": "vitest && pnpm build:lib && pnpm test:types",
69
65
  "test:types": "tsc -p tsconfig.test.types.json",
70
66
  "cli": "node ./build/cli/index.js"
71
67
  }