@logto/cloud 0.2.5-93f5b5e → 0.2.5-a21a38a

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 +219 -48
  2. package/package.json +13 -12
@@ -1,37 +1,68 @@
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
  };
12
- declare enum TenantTag {
13
- Development = "development",
14
- Staging = "staging",
15
- Production = "production"
16
- }
17
14
  declare enum VerificationCodeType {
18
15
  SignIn = "SignIn",
19
16
  Register = "Register",
20
17
  ForgotPassword = "ForgotPassword",
21
- /** @deprecated */
22
- Continue = "Continue",
23
18
  Generic = "Generic",
24
19
  /** @deprecated Use `Generic` type template for sending test sms/email use case */
25
20
  Test = "Test"
26
21
  }
27
- declare const AffiliateProperties: import("@withtyped/server/model").default<"affiliate_properties", {
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
+ /**
41
+ * The simplified organization role entity that is returned in the `roles` field
42
+ * of the organization.
43
+ */
44
+ export type OrganizationRoleEntity = {
45
+ id: string;
46
+ name: string;
47
+ };
48
+ declare enum TenantTag {
49
+ Development = "development",
50
+ Production = "production"
51
+ }
52
+ declare enum TenantRole {
53
+ /** Admin of the tenant, who has all permissions. */
54
+ Admin = "admin",
55
+ /** Member of the tenant, who has permissions to operate the tenant data, but not the tenant settings. */
56
+ Member = "member"
57
+ }
58
+ declare const AffiliateProperties: import("@withtyped/server/lib/model/index.js").default<"affiliate_properties", {
28
59
  createdAt: Date;
29
60
  affiliateId: string;
30
61
  type: "hostname" | "query";
31
62
  value: string;
32
63
  }, "createdAt", "createdAt">;
33
64
  export type AffiliateProperty = InferModelType<typeof AffiliateProperties>;
34
- declare const Affiliates: import("@withtyped/server/model").default<"affiliates", {
65
+ declare const Affiliates: import("@withtyped/server/lib/model/index.js").default<"affiliates", {
35
66
  id: string;
36
67
  createdAt: Date;
37
68
  name: string;
@@ -40,15 +71,36 @@ export type Affiliate = InferModelType<typeof Affiliates>;
40
71
  export type AffiliateData = Affiliate & {
41
72
  properties: Array<Pick<AffiliateProperty, "type" | "value">>;
42
73
  };
43
- 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<{
74
+ declare const router: import("@withtyped/server").Router<RequestContext, WithAuthContext<Omit<import("@withtyped/server").BaseContext & {
75
+ request: {
76
+ method?: import("@withtyped/server").RequestMethod | undefined;
77
+ headers: import("http").IncomingHttpHeaders;
78
+ url: URL;
79
+ body?: unknown;
80
+ };
81
+ }, "request"> & {
82
+ request: Record<string, unknown> & {
83
+ method?: import("@withtyped/server").RequestMethod | undefined;
84
+ headers: import("http").IncomingHttpHeaders;
85
+ url: URL;
86
+ body?: unknown;
87
+ } & {
88
+ body?: Json | undefined;
89
+ bodyRaw?: Buffer | undefined;
90
+ };
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<{
44
92
  options: {};
45
93
  patch: {
46
94
  "/tenants/:tenantId": import("@withtyped/server").PathGuard<"/:tenantId", unknown, {
47
95
  name?: string | undefined;
48
- tag?: TenantTag | undefined;
49
96
  }, {
50
97
  id: string;
51
98
  name: string;
99
+ usage: {
100
+ activeUsers: number;
101
+ cost: number;
102
+ tokenUsage: number;
103
+ };
52
104
  indicator: string;
53
105
  isSuspended: boolean;
54
106
  planId: string;
@@ -59,10 +111,6 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
59
111
  currentPeriodEnd: Date;
60
112
  };
61
113
  tag: TenantTag;
62
- usage: {
63
- activeUsers: number;
64
- cost: number;
65
- };
66
114
  openInvoices: {
67
115
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
68
116
  createdAt: Date;
@@ -84,6 +132,11 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
84
132
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
85
133
  id: string;
86
134
  name: string;
135
+ usage: {
136
+ activeUsers: number;
137
+ cost: number;
138
+ tokenUsage: number;
139
+ };
87
140
  indicator: string;
88
141
  isSuspended: boolean;
89
142
  planId: string;
@@ -94,10 +147,6 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
94
147
  currentPeriodEnd: Date;
95
148
  };
96
149
  tag: TenantTag;
97
- usage: {
98
- activeUsers: number;
99
- cost: number;
100
- };
101
150
  openInvoices: {
102
151
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
103
152
  createdAt: Date;
@@ -122,6 +171,11 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
122
171
  }, {
123
172
  id: string;
124
173
  name: string;
174
+ usage: {
175
+ activeUsers: number;
176
+ cost: number;
177
+ tokenUsage: number;
178
+ };
125
179
  indicator: string;
126
180
  isSuspended: boolean;
127
181
  planId: string;
@@ -132,10 +186,6 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
132
186
  currentPeriodEnd: Date;
133
187
  };
134
188
  tag: TenantTag;
135
- usage: {
136
- activeUsers: number;
137
- cost: number;
138
- };
139
189
  openInvoices: {
140
190
  status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
141
191
  createdAt: Date;
@@ -154,11 +204,11 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
154
204
  }>;
155
205
  };
156
206
  put: {};
157
- head: {};
158
207
  delete: {
159
208
  "/tenants/:tenantId": import("@withtyped/server").PathGuard<"/:tenantId", unknown, unknown, unknown>;
160
209
  };
161
210
  copy: {};
211
+ head: {};
162
212
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
163
213
  options: {};
164
214
  patch: {};
@@ -196,11 +246,14 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
196
246
  }[];
197
247
  }>;
198
248
  } & {
199
- "/tenants/:tenantId/invoices/:invoiceId/hosted-invoice-url": import("@withtyped/server").PathGuard<"/:tenantId/invoices/:invoiceId/hosted-invoice-url", unknown, unknown, string>;
249
+ "/tenants/:tenantId/invoices/:invoiceId/hosted-invoice-url": import("@withtyped/server").PathGuard<"/:tenantId/invoices/:invoiceId/hosted-invoice-url", unknown, unknown, {
250
+ hostedInvoiceUrl: string;
251
+ }>;
200
252
  } & {
201
253
  "/tenants/:tenantId/usage": import("@withtyped/server").PathGuard<"/:tenantId/usage", unknown, unknown, {
202
254
  activeUsers: number;
203
255
  cost: number;
256
+ tokenUsage: number;
204
257
  }>;
205
258
  };
206
259
  post: {
@@ -211,11 +264,11 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
211
264
  }>;
212
265
  };
213
266
  put: {};
214
- head: {};
215
267
  delete: {
216
268
  "/tenants/:tenantId/subscription": import("@withtyped/server").PathGuard<"/:tenantId/subscription", unknown, unknown, unknown>;
217
269
  };
218
270
  copy: {};
271
+ head: {};
219
272
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
220
273
  options: {};
221
274
  patch: {};
@@ -229,12 +282,13 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
229
282
  post: {
230
283
  "/services/mails": import("@withtyped/server").PathGuard<"/mails", unknown, {
231
284
  data: {
232
- type: VerificationCodeType;
285
+ type: TemplateType | VerificationCodeType;
233
286
  payload: {
287
+ code?: string | undefined;
288
+ link?: string | undefined;
234
289
  senderName?: string | undefined;
235
290
  companyInformation?: string | undefined;
236
291
  appLogo?: string | undefined;
237
- code: string;
238
292
  };
239
293
  to: string;
240
294
  };
@@ -242,18 +296,19 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
242
296
  } & {
243
297
  "/services/send-sms": import("@withtyped/server").PathGuard<"/send-sms", unknown, {
244
298
  data: {
245
- type: VerificationCodeType;
299
+ type: TemplateType | VerificationCodeType;
246
300
  to: string;
247
301
  payload: {
248
- code: string;
302
+ code?: string | undefined;
303
+ link?: string | undefined;
249
304
  };
250
305
  };
251
306
  }, unknown>;
252
307
  };
253
308
  put: {};
254
- head: {};
255
309
  delete: {};
256
310
  copy: {};
311
+ head: {};
257
312
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
258
313
  options: {};
259
314
  patch: {};
@@ -264,6 +319,7 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
264
319
  name: string;
265
320
  quota: {
266
321
  mauLimit: number | null;
322
+ tokenLimit: number | null;
267
323
  applicationsLimit: number | null;
268
324
  machineToMachineLimit: number | null;
269
325
  resourcesLimit: number | null;
@@ -274,38 +330,42 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
274
330
  socialConnectorsLimit: number | null;
275
331
  standardConnectorsLimit: number | null;
276
332
  rolesLimit: number | null;
333
+ machineToMachineRolesLimit: number | null;
277
334
  scopesPerRoleLimit: number | null;
278
335
  hooksLimit: number | null;
279
336
  auditLogsRetentionDays: number | null;
280
337
  mfaEnabled: boolean;
338
+ organizationsEnabled: boolean;
339
+ ssoEnabled: boolean;
340
+ thirdPartyApplicationsLimit: number | null;
281
341
  };
282
342
  stripeProducts: {
283
- description?: string | undefined;
284
343
  type: "flat" | "tier1" | "tier2" | "tier3";
285
344
  id: string;
286
345
  name: string;
287
346
  price: {
288
- quantity?: 1 | undefined;
289
- unitAmount?: number | null | undefined;
290
347
  id: string;
291
348
  unitAmountDecimal: string;
349
+ quantity?: 1 | undefined;
350
+ unitAmount?: number | null | undefined;
292
351
  };
352
+ description?: string | undefined;
293
353
  }[];
294
354
  updatedAt: Date;
295
355
  }[]>;
296
356
  };
297
357
  post: {};
298
358
  put: {};
299
- head: {};
300
359
  delete: {};
301
360
  copy: {};
361
+ head: {};
302
362
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
303
363
  options: {};
304
364
  patch: {};
305
365
  get: {
306
366
  "/my/tenant": import("@withtyped/server").PathGuard<"/tenant", unknown, unknown, {
307
- id: string;
308
367
  name: string;
368
+ id: string;
309
369
  indicator: string;
310
370
  isSuspended: boolean;
311
371
  tag: TenantTag;
@@ -313,9 +373,9 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
313
373
  };
314
374
  post: {};
315
375
  put: {};
316
- head: {};
317
376
  delete: {};
318
377
  copy: {};
378
+ head: {};
319
379
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
320
380
  options: {};
321
381
  patch: {};
@@ -332,21 +392,21 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
332
392
  };
333
393
  post: {
334
394
  "/checkout-session": import("@withtyped/server").PathGuard<"/", unknown, {
395
+ planId: string;
396
+ successCallbackUrl: string;
335
397
  tenantId?: string | undefined;
398
+ cancelCallbackUrl?: string | undefined;
336
399
  tenantTag?: TenantTag | undefined;
337
400
  tenantName?: string | undefined;
338
- cancelCallbackUrl?: string | undefined;
339
- planId: string;
340
- successCallbackUrl: string;
341
401
  }, {
342
- redirectUri?: string | null | undefined;
343
402
  sessionId: string;
403
+ redirectUri?: string | null | undefined;
344
404
  }>;
345
405
  };
346
406
  put: {};
347
- head: {};
348
407
  delete: {};
349
408
  copy: {};
409
+ head: {};
350
410
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
351
411
  options: {};
352
412
  patch: {};
@@ -373,7 +433,6 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
373
433
  }>;
374
434
  };
375
435
  put: {};
376
- head: {};
377
436
  delete: {
378
437
  "/affiliates/:id/properties": import("@withtyped/server").PathGuard<"/:id/properties", unknown, {
379
438
  value: string;
@@ -381,33 +440,145 @@ declare const router: import("@withtyped/server").Router<WithAuthContext, import
381
440
  }, unknown>;
382
441
  };
383
442
  copy: {};
443
+ head: {};
384
444
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
385
445
  options: {};
386
446
  patch: {};
387
447
  get: {};
388
448
  post: {
389
449
  "/affiliate-logs": import("@withtyped/server").PathGuard<"/", unknown, {
390
- hostname?: string | undefined;
391
- query?: string | undefined;
392
450
  createdAt: string;
393
451
  userId: string;
452
+ hostname?: string | undefined;
453
+ query?: string | undefined;
394
454
  }, {
395
455
  createdAt: Date;
396
456
  id: string;
397
457
  affiliateId: string | null;
398
458
  userId: string;
399
459
  createdVia: {
460
+ createdAt: string;
400
461
  hostname?: string | undefined;
401
462
  query?: string | undefined;
402
- createdAt: string;
403
463
  };
404
464
  }>;
405
465
  };
406
466
  put: {};
467
+ delete: {};
468
+ copy: {};
469
+ head: {};
470
+ }, "/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: {};
407
484
  head: {};
485
+ }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
486
+ options: {};
487
+ patch: {
488
+ "/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:invitationId/status", unknown, {
489
+ status: OrganizationInvitationStatus.Accepted;
490
+ }, unknown>;
491
+ };
492
+ get: {};
493
+ post: {};
494
+ put: {};
408
495
  delete: {};
409
496
  copy: {};
497
+ head: {};
410
498
  }, "/api">>, "/api">;
499
+ export declare const tenantAuthRouter: import("@withtyped/server").Router<RequestContext, import("@withtyped/server").WithBodyContext<import("@withtyped/server").BaseContext & {
500
+ request: {
501
+ method?: import("@withtyped/server").RequestMethod | undefined;
502
+ headers: import("http").IncomingHttpHeaders;
503
+ url: URL;
504
+ body?: unknown;
505
+ };
506
+ }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
507
+ options: {};
508
+ patch: {
509
+ "/:tenantId/invitations/:invitationId/status": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/status", unknown, {
510
+ status: OrganizationInvitationStatus.Revoked;
511
+ }, {
512
+ status: OrganizationInvitationStatus;
513
+ createdAt: number;
514
+ id: string;
515
+ updatedAt: number;
516
+ tenantId: string;
517
+ organizationId: string;
518
+ inviterId: string | null;
519
+ expiresAt: number;
520
+ organizationRoles: OrganizationRoleEntity[];
521
+ invitee: string;
522
+ acceptedUserId: string | null;
523
+ }>;
524
+ };
525
+ get: {
526
+ "/:tenantId/members": import("@withtyped/server").PathGuard<"/:tenantId/members", unknown, unknown, {
527
+ id: string;
528
+ name: string | null;
529
+ username: string | null;
530
+ primaryEmail: string | null;
531
+ organizationRoles: OrganizationRoleEntity[];
532
+ }[]>;
533
+ } & {
534
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, {
535
+ status: OrganizationInvitationStatus;
536
+ createdAt: number;
537
+ id: string;
538
+ updatedAt: number;
539
+ tenantId: string;
540
+ organizationId: string;
541
+ inviterId: string | null;
542
+ expiresAt: number;
543
+ organizationRoles: OrganizationRoleEntity[];
544
+ invitee: string;
545
+ acceptedUserId: string | null;
546
+ }[]>;
547
+ };
548
+ post: {
549
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, {
550
+ roleName: TenantRole;
551
+ invitee: string;
552
+ expiresAt?: number | undefined;
553
+ }, {
554
+ status: OrganizationInvitationStatus;
555
+ createdAt: number;
556
+ id: string;
557
+ updatedAt: number;
558
+ tenantId: string;
559
+ organizationId: string;
560
+ inviterId: string | null;
561
+ expiresAt: number;
562
+ organizationRoles: OrganizationRoleEntity[];
563
+ invitee: string;
564
+ acceptedUserId: string | null;
565
+ }>;
566
+ } & {
567
+ "/:tenantId/invitations/:invitationId/message": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/message", unknown, unknown, unknown>;
568
+ };
569
+ put: {
570
+ "/:tenantId/members/:userId/roles": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId/roles", unknown, {
571
+ roleName: TenantRole;
572
+ }, unknown>;
573
+ };
574
+ delete: {
575
+ "/:tenantId/members/:userId": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId", unknown, unknown, unknown>;
576
+ } & {
577
+ "/:tenantId/invitations/:invitationId": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId", unknown, unknown, unknown>;
578
+ };
579
+ copy: {};
580
+ head: {};
581
+ }, "/api/tenants">>, "/api/tenants">;
411
582
 
412
583
  export {
413
584
  router as default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/cloud",
3
- "version": "0.2.5-93f5b5e",
3
+ "version": "0.2.5-a21a38a",
4
4
  "description": "Logto Cloud service.",
5
5
  "main": "build/index.js",
6
6
  "author": "Silverhand Inc. <contact@silverhand.io>",
@@ -16,25 +16,26 @@
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": "5.0.0",
20
+ "@silverhand/jest-config": "5.0.0",
21
+ "@silverhand/ts-config": "5.0.0",
22
22
  "@types/accepts": "^1.3.5",
23
23
  "@types/http-proxy": "^1.17.9",
24
24
  "@types/jest": "^29.4.0",
25
25
  "@types/mime-types": "^2.1.1",
26
- "@types/node": "^18.11.18",
26
+ "@types/node": "^20.0.0",
27
27
  "@types/yargs": "^17.0.24",
28
- "dts-bundle-generator": "^8.0.1",
28
+ "dts-bundle-generator": "^9.3.1",
29
29
  "eslint": "^8.44.0",
30
30
  "jest": "^29.5.0",
31
- "lint-staged": "^14.0.0",
31
+ "lint-staged": "^15.0.0",
32
32
  "nodemon": "^3.0.0",
33
+ "p-map": "^7.0.1",
33
34
  "prettier": "^3.0.0",
34
- "typescript": "^5.0.0"
35
+ "typescript": "^5.3.3"
35
36
  },
36
37
  "engines": {
37
- "node": "^18.12.0"
38
+ "node": "^20.9.0"
38
39
  },
39
40
  "eslintConfig": {
40
41
  "extends": "@silverhand",
@@ -50,14 +51,14 @@
50
51
  "access": "public"
51
52
  },
52
53
  "dependencies": {
53
- "@silverhand/essentials": "^2.8.4",
54
- "@withtyped/server": "^0.12.7"
54
+ "@silverhand/essentials": "^2.9.0",
55
+ "@withtyped/server": "^0.13.3"
55
56
  },
56
57
  "scripts": {
57
58
  "precommit": "lint-staged",
58
59
  "build": "rm -rf build/ && tsc -p tsconfig.build.json && pnpm build:lib",
59
60
  "//": "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:lib": "rm -rf lib/ && dts-bundle-generator src/routes/index.ts --project tsconfig.build.lib.json -o lib/routes/index.d.ts",
61
62
  "build:test": "rm -rf build/ && tsc -p tsconfig.test.json --sourcemap",
62
63
  "lint": "eslint --ext .ts src",
63
64
  "lint:report": "pnpm lint --format json --output-file report.json",