@logto/cloud 0.2.5-c2fffa4 → 0.2.5-c98a257

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 +585 -102
  2. package/package.json +8 -8
@@ -16,6 +16,8 @@ declare enum VerificationCodeType {
16
16
  Register = "Register",
17
17
  ForgotPassword = "ForgotPassword",
18
18
  Generic = "Generic",
19
+ UserPermissionValidation = "UserPermissionValidation",
20
+ BindNewIdentifier = "BindNewIdentifier",
19
21
  /** @deprecated Use `Generic` type template for sending test sms/email use case */
20
22
  Test = "Test"
21
23
  }
@@ -29,7 +31,11 @@ declare enum TemplateType {
29
31
  /** The template for sending organization invitation. */
30
32
  OrganizationInvitation = "OrganizationInvitation",
31
33
  /** The template for generic usage. */
32
- Generic = "Generic"
34
+ Generic = "Generic",
35
+ /** The template for validating user permission for sensitive operations. */
36
+ UserPermissionValidation = "UserPermissionValidation",
37
+ /** The template for binding a new identifier to an existing account. */
38
+ BindNewIdentifier = "BindNewIdentifier"
33
39
  }
34
40
  declare enum OrganizationInvitationStatus {
35
41
  Pending = "Pending",
@@ -37,7 +43,17 @@ declare enum OrganizationInvitationStatus {
37
43
  Expired = "Expired",
38
44
  Revoked = "Revoked"
39
45
  }
40
- declare enum LogtoJwtTokenPath {
46
+ /** The scopes (permissions) defined by the organization template. */
47
+ export type OrganizationScope = {
48
+ tenantId: string;
49
+ /** The globally unique identifier of the organization scope. */
50
+ id: string;
51
+ /** The organization scope's name, unique within the organization template. */
52
+ name: string;
53
+ /** A brief description of the organization scope. */
54
+ description: string | null;
55
+ };
56
+ declare enum LogtoJwtTokenKeyType {
41
57
  AccessToken = "access-token",
42
58
  ClientCredentials = "client-credentials"
43
59
  }
@@ -59,6 +75,23 @@ declare enum TenantRole {
59
75
  /** Collaborator of the tenant, who has permissions to operate the tenant data, but not the tenant settings. */
60
76
  Collaborator = "collaborator"
61
77
  }
78
+ declare const availableReportableUsageKeys: readonly [
79
+ "tokenLimit",
80
+ "machineToMachineLimit",
81
+ "resourcesLimit",
82
+ "enterpriseSsoLimit",
83
+ "hooksLimit",
84
+ "tenantMembersLimit",
85
+ "mfaEnabled",
86
+ "organizationsEnabled",
87
+ "organizationsLimit"
88
+ ];
89
+ export type ReportableUsageKey = (typeof availableReportableUsageKeys)[number];
90
+ export type RealtimeReportableUsageKey = Exclude<ReportableUsageKey, "tokenLimit">;
91
+ declare enum LogtoSkuType {
92
+ Basic = "Basic",
93
+ AddOn = "AddOn"
94
+ }
62
95
  declare const AffiliateProperties: import("@withtyped/server/lib/model/index.js").default<"affiliate_properties", {
63
96
  createdAt: Date;
64
97
  affiliateId: string;
@@ -72,11 +105,17 @@ declare const Affiliates: import("@withtyped/server/lib/model/index.js").default
72
105
  id: string;
73
106
  }, "id" | "createdAt", "id" | "createdAt">;
74
107
  export type Affiliate = InferModelType<typeof Affiliates>;
108
+ declare enum RegionName {
109
+ EU = "EU",
110
+ US = "US",
111
+ AU = "AU"
112
+ }
75
113
  export type AffiliateData = Affiliate & {
76
114
  properties: Array<Pick<AffiliateProperty, "type" | "value">>;
77
115
  };
78
116
  declare const router: import("@withtyped/server").Router<RequestContext, WithAuthContext<Omit<import("@withtyped/server").BaseContext & {
79
117
  request: {
118
+ id?: string | undefined;
80
119
  method?: import("@withtyped/server").RequestMethod | undefined;
81
120
  headers: import("http").IncomingHttpHeaders;
82
121
  url: URL;
@@ -84,6 +123,7 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
84
123
  };
85
124
  }, "request"> & {
86
125
  request: Record<string, unknown> & {
126
+ id?: string | undefined;
87
127
  method?: import("@withtyped/server").RequestMethod | undefined;
88
128
  headers: import("http").IncomingHttpHeaders;
89
129
  url: URL;
@@ -92,16 +132,20 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
92
132
  body?: Json | undefined;
93
133
  bodyRaw?: Buffer | undefined;
94
134
  };
95
- }>, 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<{
135
+ }>, 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<{
96
136
  patch: {
97
137
  "/tenants/:tenantId": import("@withtyped/server").PathGuard<"/:tenantId", unknown, {
98
138
  name?: string | undefined;
99
139
  }, {
100
140
  id: string;
101
141
  name: string;
142
+ createdAt: Date;
143
+ quota: {
144
+ mauLimit: number | null;
145
+ tokenLimit: number | null;
146
+ };
102
147
  usage: {
103
148
  activeUsers: number;
104
- cost: number;
105
149
  tokenUsage: number;
106
150
  };
107
151
  indicator: string;
@@ -112,11 +156,21 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
112
156
  planId: string;
113
157
  currentPeriodStart: Date;
114
158
  currentPeriodEnd: Date;
159
+ isEnterprisePlan: boolean;
160
+ id?: string | undefined;
161
+ upcomingInvoice?: {
162
+ subtotal: number;
163
+ subtotalExcludingTax: number | null;
164
+ total: number;
165
+ totalExcludingTax: number | null;
166
+ } | null | undefined;
115
167
  };
168
+ regionName: RegionName;
169
+ tag: TenantTag;
116
170
  openInvoices: {
117
- status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
118
171
  id: string;
119
172
  createdAt: Date;
173
+ status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
120
174
  updatedAt: Date;
121
175
  customerId: string | null;
122
176
  billingReason: string | null;
@@ -124,11 +178,11 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
124
178
  periodEnd: Date;
125
179
  amountDue: number;
126
180
  amountPaid: number;
181
+ basicSkuId: string | null;
127
182
  subscriptionId: string | null;
128
183
  hostedInvoiceUrl: string | null;
129
184
  invoicePdf: string | null;
130
185
  }[];
131
- tag: TenantTag;
132
186
  }>;
133
187
  };
134
188
  options: {};
@@ -136,9 +190,13 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
136
190
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
137
191
  id: string;
138
192
  name: string;
193
+ createdAt: Date;
194
+ quota: {
195
+ mauLimit: number | null;
196
+ tokenLimit: number | null;
197
+ };
139
198
  usage: {
140
199
  activeUsers: number;
141
- cost: number;
142
200
  tokenUsage: number;
143
201
  };
144
202
  indicator: string;
@@ -149,11 +207,21 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
149
207
  planId: string;
150
208
  currentPeriodStart: Date;
151
209
  currentPeriodEnd: Date;
210
+ isEnterprisePlan: boolean;
211
+ id?: string | undefined;
212
+ upcomingInvoice?: {
213
+ subtotal: number;
214
+ subtotalExcludingTax: number | null;
215
+ total: number;
216
+ totalExcludingTax: number | null;
217
+ } | null | undefined;
152
218
  };
219
+ regionName: RegionName;
220
+ tag: TenantTag;
153
221
  openInvoices: {
154
- status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
155
222
  id: string;
156
223
  createdAt: Date;
224
+ status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
157
225
  updatedAt: Date;
158
226
  customerId: string | null;
159
227
  billingReason: string | null;
@@ -161,23 +229,28 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
161
229
  periodEnd: Date;
162
230
  amountDue: number;
163
231
  amountPaid: number;
232
+ basicSkuId: string | null;
164
233
  subscriptionId: string | null;
165
234
  hostedInvoiceUrl: string | null;
166
235
  invoicePdf: string | null;
167
236
  }[];
168
- tag: TenantTag;
169
237
  }[]>;
170
238
  };
171
239
  post: {
172
240
  "/tenants": import("@withtyped/server").PathGuard<"/", unknown, {
173
241
  name?: string | undefined;
174
242
  tag?: TenantTag | undefined;
243
+ regionName?: RegionName | undefined;
175
244
  }, {
176
245
  id: string;
177
246
  name: string;
247
+ createdAt: Date;
248
+ quota: {
249
+ mauLimit: number | null;
250
+ tokenLimit: number | null;
251
+ };
178
252
  usage: {
179
253
  activeUsers: number;
180
- cost: number;
181
254
  tokenUsage: number;
182
255
  };
183
256
  indicator: string;
@@ -188,11 +261,21 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
188
261
  planId: string;
189
262
  currentPeriodStart: Date;
190
263
  currentPeriodEnd: Date;
264
+ isEnterprisePlan: boolean;
265
+ id?: string | undefined;
266
+ upcomingInvoice?: {
267
+ subtotal: number;
268
+ subtotalExcludingTax: number | null;
269
+ total: number;
270
+ totalExcludingTax: number | null;
271
+ } | null | undefined;
191
272
  };
273
+ regionName: RegionName;
274
+ tag: TenantTag;
192
275
  openInvoices: {
193
- status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
194
276
  id: string;
195
277
  createdAt: Date;
278
+ status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
196
279
  updatedAt: Date;
197
280
  customerId: string | null;
198
281
  billingReason: string | null;
@@ -200,11 +283,11 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
200
283
  periodEnd: Date;
201
284
  amountDue: number;
202
285
  amountPaid: number;
286
+ basicSkuId: string | null;
203
287
  subscriptionId: string | null;
204
288
  hostedInvoiceUrl: string | null;
205
289
  invoicePdf: string | null;
206
290
  }[];
207
- tag: TenantTag;
208
291
  }>;
209
292
  };
210
293
  put: {};
@@ -219,23 +302,276 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
219
302
  get: {
220
303
  "/tenants/my/subscription": import("@withtyped/server").PathGuard<"/my/subscription", unknown, unknown, {
221
304
  status: "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid" | "paused";
305
+ quota: {
306
+ auditLogsRetentionDays: number | null;
307
+ mauLimit: number | null;
308
+ applicationsLimit: number | null;
309
+ thirdPartyApplicationsLimit: number | null;
310
+ scopesPerResourceLimit: number | null;
311
+ socialConnectorsLimit: number | null;
312
+ userRolesLimit: number | null;
313
+ machineToMachineRolesLimit: number | null;
314
+ scopesPerRoleLimit: number | null;
315
+ hooksLimit: number | null;
316
+ customJwtEnabled: boolean;
317
+ subjectTokenEnabled: boolean;
318
+ bringYourUiEnabled: boolean;
319
+ tokenLimit: number | null;
320
+ machineToMachineLimit: number | null;
321
+ resourcesLimit: number | null;
322
+ enterpriseSsoLimit: number | null;
323
+ tenantMembersLimit: number | null;
324
+ mfaEnabled: boolean;
325
+ organizationsEnabled: boolean;
326
+ organizationsLimit: number | null;
327
+ idpInitiatedSsoEnabled: boolean;
328
+ samlApplicationsLimit: number | null;
329
+ };
222
330
  planId: string;
223
331
  currentPeriodStart: Date;
224
332
  currentPeriodEnd: Date;
333
+ isEnterprisePlan: boolean;
334
+ id?: string | undefined;
335
+ upcomingInvoice?: {
336
+ subtotal: number;
337
+ subtotalExcludingTax: number | null;
338
+ total: number;
339
+ totalExcludingTax: number | null;
340
+ } | null | undefined;
225
341
  }>;
226
342
  } & {
343
+ "/tenants/my/subscription-usage": import("@withtyped/server").PathGuard<"/my/subscription-usage", unknown, unknown, {
344
+ usage: {
345
+ applicationsLimit: number;
346
+ thirdPartyApplicationsLimit: number;
347
+ scopesPerResourceLimit: number;
348
+ socialConnectorsLimit: number;
349
+ userRolesLimit: number;
350
+ machineToMachineRolesLimit: number;
351
+ scopesPerRoleLimit: number;
352
+ hooksLimit: number;
353
+ customJwtEnabled: boolean;
354
+ subjectTokenEnabled: boolean;
355
+ bringYourUiEnabled: boolean;
356
+ machineToMachineLimit: number;
357
+ resourcesLimit: number;
358
+ enterpriseSsoLimit: number;
359
+ tenantMembersLimit: number;
360
+ mfaEnabled: boolean;
361
+ organizationsEnabled: boolean;
362
+ organizationsLimit: number;
363
+ idpInitiatedSsoEnabled: boolean;
364
+ samlApplicationsLimit: number;
365
+ };
366
+ resources: Record<string, number>;
367
+ roles: Record<string, number>;
368
+ quota: {
369
+ auditLogsRetentionDays: number | null;
370
+ mauLimit: number | null;
371
+ applicationsLimit: number | null;
372
+ thirdPartyApplicationsLimit: number | null;
373
+ scopesPerResourceLimit: number | null;
374
+ socialConnectorsLimit: number | null;
375
+ userRolesLimit: number | null;
376
+ machineToMachineRolesLimit: number | null;
377
+ scopesPerRoleLimit: number | null;
378
+ hooksLimit: number | null;
379
+ customJwtEnabled: boolean;
380
+ subjectTokenEnabled: boolean;
381
+ bringYourUiEnabled: boolean;
382
+ tokenLimit: number | null;
383
+ machineToMachineLimit: number | null;
384
+ resourcesLimit: number | null;
385
+ enterpriseSsoLimit: number | null;
386
+ tenantMembersLimit: number | null;
387
+ mfaEnabled: boolean;
388
+ organizationsEnabled: boolean;
389
+ organizationsLimit: number | null;
390
+ idpInitiatedSsoEnabled: boolean;
391
+ samlApplicationsLimit: number | null;
392
+ };
393
+ basicQuota: {
394
+ auditLogsRetentionDays: number | null;
395
+ mauLimit: number | null;
396
+ applicationsLimit: number | null;
397
+ thirdPartyApplicationsLimit: number | null;
398
+ scopesPerResourceLimit: number | null;
399
+ socialConnectorsLimit: number | null;
400
+ userRolesLimit: number | null;
401
+ machineToMachineRolesLimit: number | null;
402
+ scopesPerRoleLimit: number | null;
403
+ hooksLimit: number | null;
404
+ customJwtEnabled: boolean;
405
+ subjectTokenEnabled: boolean;
406
+ bringYourUiEnabled: boolean;
407
+ tokenLimit: number | null;
408
+ machineToMachineLimit: number | null;
409
+ resourcesLimit: number | null;
410
+ enterpriseSsoLimit: number | null;
411
+ tenantMembersLimit: number | null;
412
+ mfaEnabled: boolean;
413
+ organizationsEnabled: boolean;
414
+ organizationsLimit: number | null;
415
+ idpInitiatedSsoEnabled: boolean;
416
+ samlApplicationsLimit: number | null;
417
+ };
418
+ }>;
419
+ };
420
+ post: {
421
+ "/tenants/my/subscription/item-updates": import("@withtyped/server").PathGuard<"/my/subscription/item-updates", unknown, {
422
+ usageKey: RealtimeReportableUsageKey;
423
+ }, {
424
+ message: string;
425
+ }>;
426
+ };
427
+ put: {};
428
+ delete: {};
429
+ copy: {};
430
+ head: {};
431
+ }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
432
+ patch: {};
433
+ options: {};
434
+ get: {
227
435
  "/tenants/:tenantId/subscription": import("@withtyped/server").PathGuard<"/:tenantId/subscription", unknown, unknown, {
228
436
  status: "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid" | "paused";
229
437
  planId: string;
230
438
  currentPeriodStart: Date;
231
439
  currentPeriodEnd: Date;
440
+ isEnterprisePlan: boolean;
441
+ id?: string | undefined;
442
+ upcomingInvoice?: {
443
+ subtotal: number;
444
+ subtotalExcludingTax: number | null;
445
+ total: number;
446
+ totalExcludingTax: number | null;
447
+ } | null | undefined;
448
+ }>;
449
+ } & {
450
+ "/tenants/:tenantId/subscription-usage": import("@withtyped/server").PathGuard<"/:tenantId/subscription-usage", unknown, unknown, {
451
+ usage: {
452
+ applicationsLimit: number;
453
+ thirdPartyApplicationsLimit: number;
454
+ scopesPerResourceLimit: number;
455
+ socialConnectorsLimit: number;
456
+ userRolesLimit: number;
457
+ machineToMachineRolesLimit: number;
458
+ scopesPerRoleLimit: number;
459
+ hooksLimit: number;
460
+ customJwtEnabled: boolean;
461
+ subjectTokenEnabled: boolean;
462
+ bringYourUiEnabled: boolean;
463
+ machineToMachineLimit: number;
464
+ resourcesLimit: number;
465
+ enterpriseSsoLimit: number;
466
+ tenantMembersLimit: number;
467
+ mfaEnabled: boolean;
468
+ organizationsEnabled: boolean;
469
+ organizationsLimit: number;
470
+ idpInitiatedSsoEnabled: boolean;
471
+ samlApplicationsLimit: number;
472
+ };
473
+ resources: Record<string, number>;
474
+ roles: Record<string, number>;
475
+ quota: {
476
+ auditLogsRetentionDays: number | null;
477
+ mauLimit: number | null;
478
+ applicationsLimit: number | null;
479
+ thirdPartyApplicationsLimit: number | null;
480
+ scopesPerResourceLimit: number | null;
481
+ socialConnectorsLimit: number | null;
482
+ userRolesLimit: number | null;
483
+ machineToMachineRolesLimit: number | null;
484
+ scopesPerRoleLimit: number | null;
485
+ hooksLimit: number | null;
486
+ customJwtEnabled: boolean;
487
+ subjectTokenEnabled: boolean;
488
+ bringYourUiEnabled: boolean;
489
+ tokenLimit: number | null;
490
+ machineToMachineLimit: number | null;
491
+ resourcesLimit: number | null;
492
+ enterpriseSsoLimit: number | null;
493
+ tenantMembersLimit: number | null;
494
+ mfaEnabled: boolean;
495
+ organizationsEnabled: boolean;
496
+ organizationsLimit: number | null;
497
+ idpInitiatedSsoEnabled: boolean;
498
+ samlApplicationsLimit: number | null;
499
+ };
500
+ basicQuota: {
501
+ auditLogsRetentionDays: number | null;
502
+ mauLimit: number | null;
503
+ applicationsLimit: number | null;
504
+ thirdPartyApplicationsLimit: number | null;
505
+ scopesPerResourceLimit: number | null;
506
+ socialConnectorsLimit: number | null;
507
+ userRolesLimit: number | null;
508
+ machineToMachineRolesLimit: number | null;
509
+ scopesPerRoleLimit: number | null;
510
+ hooksLimit: number | null;
511
+ customJwtEnabled: boolean;
512
+ subjectTokenEnabled: boolean;
513
+ bringYourUiEnabled: boolean;
514
+ tokenLimit: number | null;
515
+ machineToMachineLimit: number | null;
516
+ resourcesLimit: number | null;
517
+ enterpriseSsoLimit: number | null;
518
+ tenantMembersLimit: number | null;
519
+ mfaEnabled: boolean;
520
+ organizationsEnabled: boolean;
521
+ organizationsLimit: number | null;
522
+ idpInitiatedSsoEnabled: boolean;
523
+ samlApplicationsLimit: number | null;
524
+ };
525
+ }>;
526
+ } & {
527
+ "/tenants/:tenantId/subscription/periodic-usage": import("@withtyped/server").PathGuard<"/:tenantId/subscription/periodic-usage", unknown, unknown, {
528
+ mauLimit: number;
529
+ tokenLimit: number;
530
+ }>;
531
+ } & {
532
+ "/tenants/:tenantId/subscription/add-on-skus": import("@withtyped/server").PathGuard<"/:tenantId/subscription/add-on-skus", unknown, unknown, {
533
+ tokenLimit?: {
534
+ id: string;
535
+ name: string | null;
536
+ createdAt: Date;
537
+ defaultPriceId: string | null;
538
+ unitPrice: number | null;
539
+ type: LogtoSkuType;
540
+ quota: {
541
+ auditLogsRetentionDays?: number | null | undefined;
542
+ mauLimit?: number | null | undefined;
543
+ applicationsLimit?: number | null | undefined;
544
+ thirdPartyApplicationsLimit?: number | null | undefined;
545
+ scopesPerResourceLimit?: number | null | undefined;
546
+ socialConnectorsLimit?: number | null | undefined;
547
+ userRolesLimit?: number | null | undefined;
548
+ machineToMachineRolesLimit?: number | null | undefined;
549
+ scopesPerRoleLimit?: number | null | undefined;
550
+ hooksLimit?: number | null | undefined;
551
+ customJwtEnabled?: boolean | undefined;
552
+ subjectTokenEnabled?: boolean | undefined;
553
+ bringYourUiEnabled?: boolean | undefined;
554
+ tokenLimit?: number | null | undefined;
555
+ machineToMachineLimit?: number | null | undefined;
556
+ resourcesLimit?: number | null | undefined;
557
+ enterpriseSsoLimit?: number | null | undefined;
558
+ tenantMembersLimit?: number | null | undefined;
559
+ mfaEnabled?: boolean | undefined;
560
+ organizationsEnabled?: boolean | undefined;
561
+ organizationsLimit?: number | null | undefined;
562
+ idpInitiatedSsoEnabled?: boolean | undefined;
563
+ samlApplicationsLimit?: number | null | undefined;
564
+ };
565
+ updatedAt: Date;
566
+ productId: string | null;
567
+ } | undefined;
232
568
  }>;
233
569
  } & {
234
570
  "/tenants/:tenantId/invoices": import("@withtyped/server").PathGuard<"/:tenantId/invoices", unknown, unknown, {
235
571
  invoices: {
236
- status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
237
572
  id: string;
238
573
  createdAt: Date;
574
+ status: "void" | "open" | "draft" | "paid" | "uncollectible" | null;
239
575
  updatedAt: Date;
240
576
  customerId: string | null;
241
577
  billingReason: string | null;
@@ -243,22 +579,56 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
243
579
  periodEnd: Date;
244
580
  amountDue: number;
245
581
  amountPaid: number;
582
+ basicSkuId: string | null;
246
583
  subscriptionId: string | null;
247
584
  hostedInvoiceUrl: string | null;
248
585
  invoicePdf: string | null;
249
586
  planName: string | null;
587
+ skuId?: string | null | undefined;
250
588
  }[];
251
589
  }>;
590
+ } & {
591
+ "/tenants/:tenantId/available-skus": import("@withtyped/server").PathGuard<"/:tenantId/available-skus", {
592
+ type?: LogtoSkuType | undefined;
593
+ }, unknown, {
594
+ id: string;
595
+ name: string | null;
596
+ createdAt: Date;
597
+ defaultPriceId: string | null;
598
+ unitPrice: number | null;
599
+ type: LogtoSkuType;
600
+ quota: {
601
+ auditLogsRetentionDays?: number | null | undefined;
602
+ mauLimit?: number | null | undefined;
603
+ applicationsLimit?: number | null | undefined;
604
+ thirdPartyApplicationsLimit?: number | null | undefined;
605
+ scopesPerResourceLimit?: number | null | undefined;
606
+ socialConnectorsLimit?: number | null | undefined;
607
+ userRolesLimit?: number | null | undefined;
608
+ machineToMachineRolesLimit?: number | null | undefined;
609
+ scopesPerRoleLimit?: number | null | undefined;
610
+ hooksLimit?: number | null | undefined;
611
+ customJwtEnabled?: boolean | undefined;
612
+ subjectTokenEnabled?: boolean | undefined;
613
+ bringYourUiEnabled?: boolean | undefined;
614
+ tokenLimit?: number | null | undefined;
615
+ machineToMachineLimit?: number | null | undefined;
616
+ resourcesLimit?: number | null | undefined;
617
+ enterpriseSsoLimit?: number | null | undefined;
618
+ tenantMembersLimit?: number | null | undefined;
619
+ mfaEnabled?: boolean | undefined;
620
+ organizationsEnabled?: boolean | undefined;
621
+ organizationsLimit?: number | null | undefined;
622
+ idpInitiatedSsoEnabled?: boolean | undefined;
623
+ samlApplicationsLimit?: number | null | undefined;
624
+ };
625
+ updatedAt: Date;
626
+ productId: string | null;
627
+ }[]>;
252
628
  } & {
253
629
  "/tenants/:tenantId/invoices/:invoiceId/hosted-invoice-url": import("@withtyped/server").PathGuard<"/:tenantId/invoices/:invoiceId/hosted-invoice-url", unknown, unknown, {
254
630
  hostedInvoiceUrl: string;
255
631
  }>;
256
- } & {
257
- "/tenants/:tenantId/usage": import("@withtyped/server").PathGuard<"/:tenantId/usage", unknown, unknown, {
258
- activeUsers: number;
259
- cost: number;
260
- tokenUsage: number;
261
- }>;
262
632
  };
263
633
  post: {
264
634
  "/tenants/:tenantId/stripe-customer-portal": import("@withtyped/server").PathGuard<"/:tenantId/stripe-customer-portal", unknown, {
@@ -310,71 +680,183 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
310
680
  };
311
681
  }, unknown>;
312
682
  } & {
313
- "/services/custom-jwt": import("@withtyped/server").PathGuard<"/custom-jwt", unknown, {
683
+ "/services/custom-jwt": import("@withtyped/server").PathGuard<"/custom-jwt", {
684
+ isTest?: string | undefined;
685
+ }, {
686
+ context: Record<string, Json>;
314
687
  script: string;
315
- tokenType: LogtoJwtTokenPath.AccessToken;
688
+ tokenType: LogtoJwtTokenKeyType.AccessToken;
316
689
  token: Record<string, Json>;
317
- context: Record<string, Json>;
318
- envVars?: Record<string, string> | undefined;
690
+ environmentVariables?: Record<string, string> | undefined;
319
691
  } | {
320
692
  script: string;
321
- tokenType: LogtoJwtTokenPath.ClientCredentials;
693
+ tokenType: LogtoJwtTokenKeyType.ClientCredentials;
322
694
  token: Record<string, Json>;
323
- envVars?: Record<string, string> | undefined;
695
+ environmentVariables?: Record<string, string> | undefined;
324
696
  }, Record<string, unknown>>;
325
697
  };
326
- put: {};
327
- delete: {};
698
+ put: {
699
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, {
700
+ "jwt.accessToken"?: {
701
+ production?: string | undefined;
702
+ test?: string | undefined;
703
+ } | undefined;
704
+ "jwt.clientCredentials"?: {
705
+ production?: string | undefined;
706
+ test?: string | undefined;
707
+ } | undefined;
708
+ }, unknown>;
709
+ };
710
+ delete: {
711
+ "/services/custom-jwt/worker": import("@withtyped/server").PathGuard<"/custom-jwt/worker", unknown, unknown, unknown>;
712
+ };
328
713
  copy: {};
329
714
  head: {};
330
715
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
331
716
  patch: {};
332
717
  options: {};
333
718
  get: {
334
- "/subscription-plans": import("@withtyped/server").PathGuard<"/", unknown, unknown, {
719
+ "/skus": import("@withtyped/server").PathGuard<"/", {
720
+ type?: LogtoSkuType | undefined;
721
+ }, unknown, {
335
722
  id: string;
723
+ name: string | null;
336
724
  createdAt: Date;
337
- name: string;
725
+ defaultPriceId: string | null;
726
+ unitPrice: number | null;
727
+ type: LogtoSkuType;
728
+ quota: {
729
+ auditLogsRetentionDays?: number | null | undefined;
730
+ mauLimit?: number | null | undefined;
731
+ applicationsLimit?: number | null | undefined;
732
+ thirdPartyApplicationsLimit?: number | null | undefined;
733
+ scopesPerResourceLimit?: number | null | undefined;
734
+ socialConnectorsLimit?: number | null | undefined;
735
+ userRolesLimit?: number | null | undefined;
736
+ machineToMachineRolesLimit?: number | null | undefined;
737
+ scopesPerRoleLimit?: number | null | undefined;
738
+ hooksLimit?: number | null | undefined;
739
+ customJwtEnabled?: boolean | undefined;
740
+ subjectTokenEnabled?: boolean | undefined;
741
+ bringYourUiEnabled?: boolean | undefined;
742
+ tokenLimit?: number | null | undefined;
743
+ machineToMachineLimit?: number | null | undefined;
744
+ resourcesLimit?: number | null | undefined;
745
+ enterpriseSsoLimit?: number | null | undefined;
746
+ tenantMembersLimit?: number | null | undefined;
747
+ mfaEnabled?: boolean | undefined;
748
+ organizationsEnabled?: boolean | undefined;
749
+ organizationsLimit?: number | null | undefined;
750
+ idpInitiatedSsoEnabled?: boolean | undefined;
751
+ samlApplicationsLimit?: number | null | undefined;
752
+ };
338
753
  updatedAt: Date;
339
- stripeProducts: {
340
- type: "flat" | "tier1" | "tier2" | "tier3";
341
- id: string;
342
- name: string;
343
- price: {
344
- id: string;
345
- unitAmountDecimal: string;
346
- quantity?: 1 | undefined;
347
- unitAmount?: number | null | undefined;
348
- };
349
- description?: string | undefined;
350
- }[];
754
+ productId: string | null;
755
+ }[]>;
756
+ };
757
+ post: {
758
+ "/skus": import("@withtyped/server").PathGuard<"/", unknown, {
759
+ type: LogtoSkuType.AddOn;
351
760
  quota: {
761
+ tokenLimit?: number | null | undefined;
762
+ machineToMachineLimit?: number | null | undefined;
763
+ resourcesLimit?: number | null | undefined;
764
+ enterpriseSsoLimit?: number | null | undefined;
765
+ hooksLimit?: number | null | undefined;
766
+ tenantMembersLimit?: number | null | undefined;
767
+ mfaEnabled?: boolean | undefined;
768
+ organizationsEnabled?: boolean | undefined;
769
+ organizationsLimit?: number | null | undefined;
770
+ auditLogsRetentionDays?: number | null | undefined;
771
+ mauLimit?: number | null | undefined;
772
+ applicationsLimit?: number | null | undefined;
773
+ thirdPartyApplicationsLimit?: number | null | undefined;
774
+ scopesPerResourceLimit?: number | null | undefined;
775
+ socialConnectorsLimit?: number | null | undefined;
776
+ userRolesLimit?: number | null | undefined;
777
+ machineToMachineRolesLimit?: number | null | undefined;
778
+ scopesPerRoleLimit?: number | null | undefined;
779
+ customJwtEnabled?: boolean | undefined;
780
+ subjectTokenEnabled?: boolean | undefined;
781
+ bringYourUiEnabled?: boolean | undefined;
782
+ idpInitiatedSsoEnabled?: boolean | undefined;
783
+ samlApplicationsLimit?: number | null | undefined;
784
+ };
785
+ } | {
786
+ type: LogtoSkuType.Basic;
787
+ quota: {
788
+ auditLogsRetentionDays: number | null;
352
789
  mauLimit: number | null;
353
- tokenLimit: number | null;
354
790
  applicationsLimit: number | null;
355
- machineToMachineLimit: number | null;
356
- resourcesLimit: number | null;
791
+ thirdPartyApplicationsLimit: number | null;
357
792
  scopesPerResourceLimit: number | null;
358
- customDomainEnabled: boolean;
359
- omniSignInEnabled: boolean;
360
- builtInEmailConnectorEnabled: boolean;
361
793
  socialConnectorsLimit: number | null;
362
- standardConnectorsLimit: number | null;
363
- rolesLimit: number | null;
794
+ userRolesLimit: number | null;
364
795
  machineToMachineRolesLimit: number | null;
365
796
  scopesPerRoleLimit: number | null;
366
797
  hooksLimit: number | null;
367
- auditLogsRetentionDays: number | null;
798
+ customJwtEnabled: boolean;
799
+ subjectTokenEnabled: boolean;
800
+ bringYourUiEnabled: boolean;
801
+ tokenLimit: number | null;
802
+ machineToMachineLimit: number | null;
803
+ resourcesLimit: number | null;
804
+ enterpriseSsoLimit: number | null;
805
+ tenantMembersLimit: number | null;
368
806
  mfaEnabled: boolean;
369
807
  organizationsEnabled: boolean;
370
- ssoEnabled: boolean;
371
- thirdPartyApplicationsLimit: number | null;
808
+ organizationsLimit: number | null;
809
+ idpInitiatedSsoEnabled: boolean;
810
+ samlApplicationsLimit: number | null;
372
811
  };
373
- }[]>;
812
+ addOnRelations: {
813
+ tokenLimit: string;
814
+ };
815
+ }, {
816
+ id: string;
817
+ createdAt: Date;
818
+ type: LogtoSkuType;
819
+ updatedAt: Date;
820
+ quota: {
821
+ auditLogsRetentionDays?: number | null | undefined;
822
+ mauLimit?: number | null | undefined;
823
+ applicationsLimit?: number | null | undefined;
824
+ thirdPartyApplicationsLimit?: number | null | undefined;
825
+ scopesPerResourceLimit?: number | null | undefined;
826
+ socialConnectorsLimit?: number | null | undefined;
827
+ userRolesLimit?: number | null | undefined;
828
+ machineToMachineRolesLimit?: number | null | undefined;
829
+ scopesPerRoleLimit?: number | null | undefined;
830
+ hooksLimit?: number | null | undefined;
831
+ customJwtEnabled?: boolean | undefined;
832
+ subjectTokenEnabled?: boolean | undefined;
833
+ bringYourUiEnabled?: boolean | undefined;
834
+ tokenLimit?: number | null | undefined;
835
+ machineToMachineLimit?: number | null | undefined;
836
+ resourcesLimit?: number | null | undefined;
837
+ enterpriseSsoLimit?: number | null | undefined;
838
+ tenantMembersLimit?: number | null | undefined;
839
+ mfaEnabled?: boolean | undefined;
840
+ organizationsEnabled?: boolean | undefined;
841
+ organizationsLimit?: number | null | undefined;
842
+ idpInitiatedSsoEnabled?: boolean | undefined;
843
+ samlApplicationsLimit?: number | null | undefined;
844
+ };
845
+ }>;
846
+ } & {
847
+ "/skus/:skuId/products": import("@withtyped/server").PathGuard<"/:skuId/products", {
848
+ isOneTime?: string | undefined;
849
+ }, {
850
+ name: string;
851
+ unitPrice: number;
852
+ }, {
853
+ productId: string;
854
+ }>;
374
855
  };
375
- post: {};
376
856
  put: {};
377
- delete: {};
857
+ delete: {
858
+ "/skus/:skuId": import("@withtyped/server").PathGuard<"/:skuId", unknown, unknown, unknown>;
859
+ };
378
860
  copy: {};
379
861
  head: {};
380
862
  }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
@@ -388,17 +870,19 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
388
870
  status: "open" | "complete" | "expired";
389
871
  tenantId: string | null;
390
872
  updatedAt: Date;
391
- planId: string;
873
+ skuId: string | null;
874
+ planId: string | null;
392
875
  }>;
393
876
  };
394
877
  post: {
395
878
  "/checkout-session": import("@withtyped/server").PathGuard<"/", unknown, {
396
- planId: string;
397
879
  successCallbackUrl: string;
398
880
  tenantId?: string | undefined;
399
- cancelCallbackUrl?: string | undefined;
400
- tenantTag?: TenantTag | undefined;
881
+ skuId?: string | undefined;
401
882
  tenantName?: string | undefined;
883
+ tenantTag?: TenantTag | undefined;
884
+ tenantRegionName?: RegionName | undefined;
885
+ cancelCallbackUrl?: string | undefined;
402
886
  }, {
403
887
  sessionId: string;
404
888
  redirectUri?: string | null | undefined;
@@ -482,15 +966,15 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
482
966
  status: OrganizationInvitationStatus;
483
967
  tenantId: string;
484
968
  updatedAt: number;
485
- organizationId: string;
486
969
  inviterId: string | null;
487
970
  invitee: string;
488
- expiresAt: number;
489
971
  acceptedUserId: string | null;
972
+ organizationId: string;
973
+ expiresAt: number;
490
974
  organizationRoles: OrganizationRoleEntity[];
491
975
  } & {
492
- tenantTag: TenantTag;
493
976
  tenantName: string;
977
+ tenantTag: TenantTag;
494
978
  })[]>;
495
979
  } & {
496
980
  "/invitations/:invitationId": import("@withtyped/server").PathGuard<"/:invitationId", unknown, unknown, {
@@ -499,11 +983,11 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
499
983
  status: OrganizationInvitationStatus;
500
984
  tenantId: string;
501
985
  updatedAt: number;
502
- organizationId: string;
503
986
  inviterId: string | null;
504
987
  invitee: string;
505
- expiresAt: number;
506
988
  acceptedUserId: string | null;
989
+ organizationId: string;
990
+ expiresAt: number;
507
991
  organizationRoles: OrganizationRoleEntity[];
508
992
  }>;
509
993
  };
@@ -512,9 +996,21 @@ declare const router: import("@withtyped/server").Router<RequestContext, WithAut
512
996
  delete: {};
513
997
  copy: {};
514
998
  head: {};
999
+ }, "/api">>, import("@withtyped/server").RoutesWithPrefix<{
1000
+ patch: {};
1001
+ options: {};
1002
+ get: {};
1003
+ post: {};
1004
+ put: {};
1005
+ delete: {
1006
+ "/me": import("@withtyped/server").PathGuard<"/", unknown, unknown, unknown>;
1007
+ };
1008
+ copy: {};
1009
+ head: {};
515
1010
  }, "/api">>, "/api">;
516
1011
  export declare const tenantAuthRouter: import("@withtyped/server").Router<RequestContext, import("@withtyped/server").WithBodyContext<import("@withtyped/server").BaseContext & {
517
1012
  request: {
1013
+ id?: string | undefined;
518
1014
  method?: import("@withtyped/server").RequestMethod | undefined;
519
1015
  headers: import("http").IncomingHttpHeaders;
520
1016
  url: URL;
@@ -530,11 +1026,11 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
530
1026
  status: OrganizationInvitationStatus;
531
1027
  tenantId: string;
532
1028
  updatedAt: number;
533
- organizationId: string;
534
1029
  inviterId: string | null;
535
1030
  invitee: string;
536
- expiresAt: number;
537
1031
  acceptedUserId: string | null;
1032
+ organizationId: string;
1033
+ expiresAt: number;
538
1034
  organizationRoles: OrganizationRoleEntity[];
539
1035
  }>;
540
1036
  };
@@ -550,23 +1046,27 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
550
1046
  organizationRoles: OrganizationRoleEntity[];
551
1047
  }[]>;
552
1048
  } & {
553
- "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, {
1049
+ "/:tenantId/members/:userId/scopes": import("@withtyped/server").PathGuard<"/:tenantId/members/:userId/scopes", unknown, unknown, OrganizationScope[]>;
1050
+ } & {
1051
+ "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, unknown, ({
554
1052
  id: string;
555
1053
  createdAt: number;
556
1054
  status: OrganizationInvitationStatus;
557
1055
  tenantId: string;
558
1056
  updatedAt: number;
559
- organizationId: string;
560
1057
  inviterId: string | null;
561
1058
  invitee: string;
562
- expiresAt: number;
563
1059
  acceptedUserId: string | null;
1060
+ organizationId: string;
1061
+ expiresAt: number;
564
1062
  organizationRoles: OrganizationRoleEntity[];
565
- }[]>;
1063
+ } & {
1064
+ inviterName?: string | undefined;
1065
+ })[]>;
566
1066
  };
567
1067
  post: {
568
1068
  "/:tenantId/invitations": import("@withtyped/server").PathGuard<"/:tenantId/invitations", unknown, {
569
- invitee: string;
1069
+ invitee: string | string[];
570
1070
  roleName: TenantRole;
571
1071
  expiresAt?: number | undefined;
572
1072
  }, {
@@ -575,13 +1075,25 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
575
1075
  status: OrganizationInvitationStatus;
576
1076
  tenantId: string;
577
1077
  updatedAt: number;
578
- organizationId: string;
579
1078
  inviterId: string | null;
580
1079
  invitee: string;
1080
+ acceptedUserId: string | null;
1081
+ organizationId: string;
581
1082
  expiresAt: number;
1083
+ organizationRoles: OrganizationRoleEntity[];
1084
+ } | {
1085
+ id: string;
1086
+ createdAt: number;
1087
+ status: OrganizationInvitationStatus;
1088
+ tenantId: string;
1089
+ updatedAt: number;
1090
+ inviterId: string | null;
1091
+ invitee: string;
582
1092
  acceptedUserId: string | null;
1093
+ organizationId: string;
1094
+ expiresAt: number;
583
1095
  organizationRoles: OrganizationRoleEntity[];
584
- }>;
1096
+ }[]>;
585
1097
  } & {
586
1098
  "/:tenantId/invitations/:invitationId/message": import("@withtyped/server").PathGuard<"/:tenantId/invitations/:invitationId/message", unknown, unknown, unknown>;
587
1099
  };
@@ -598,35 +1110,6 @@ export declare const tenantAuthRouter: import("@withtyped/server").Router<Reques
598
1110
  copy: {};
599
1111
  head: {};
600
1112
  }, "/api/tenants">>, "/api/tenants">;
601
- export declare const functionsRouter: import("@withtyped/server").Router<RequestContext, WithAuthContext<Omit<import("@withtyped/server").BaseContext & {
602
- request: {
603
- method?: import("@withtyped/server").RequestMethod | undefined;
604
- headers: import("http").IncomingHttpHeaders;
605
- url: URL;
606
- body?: unknown;
607
- };
608
- }, "request"> & {
609
- request: Record<string, unknown> & {
610
- method?: import("@withtyped/server").RequestMethod | undefined;
611
- headers: import("http").IncomingHttpHeaders;
612
- url: URL;
613
- body?: unknown;
614
- } & {
615
- body?: Json | undefined;
616
- bodyRaw?: Buffer | undefined;
617
- };
618
- }>, import("@withtyped/server").MergeRoutes<import("@withtyped/server").BaseRoutes, import("@withtyped/server").RoutesWithPrefix<{
619
- patch: {};
620
- options: {};
621
- get: {};
622
- post: {
623
- "/database-alteration": import("@withtyped/server").PathGuard<"/database-alteration", unknown, Json, unknown>;
624
- };
625
- put: {};
626
- delete: {};
627
- copy: {};
628
- head: {};
629
- }, "/functions">>, "/functions">;
630
1113
 
631
1114
  export {
632
1115
  router as default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/cloud",
3
- "version": "0.2.5-c2fffa4",
3
+ "version": "0.2.5-c98a257",
4
4
  "description": "Logto Cloud service.",
5
5
  "main": "build/index.js",
6
6
  "author": "Silverhand Inc. <contact@silverhand.io>",
@@ -16,21 +16,21 @@
16
16
  "#src/*": "./build/*"
17
17
  },
18
18
  "devDependencies": {
19
- "@silverhand/eslint-config": "5.0.0",
20
- "@silverhand/ts-config": "5.0.0",
19
+ "@silverhand/eslint-config": "6.0.1",
20
+ "@silverhand/ts-config": "6.0.0",
21
21
  "@types/accepts": "^1.3.5",
22
22
  "@types/http-proxy": "^1.17.9",
23
23
  "@types/mime-types": "^2.1.1",
24
24
  "@types/node": "^20.0.0",
25
25
  "@types/yargs": "^17.0.24",
26
26
  "dts-bundle-generator": "^9.3.1",
27
- "eslint": "^8.44.0",
27
+ "eslint": "^8.57.0",
28
28
  "lint-staged": "^15.0.0",
29
29
  "nodemon": "^3.0.0",
30
30
  "prettier": "^3.0.0",
31
31
  "typescript": "^5.3.3",
32
- "vite-tsconfig-paths": "^4.3.1",
33
- "vitest": "^1.0.0"
32
+ "vite-tsconfig-paths": "^5.0.0",
33
+ "vitest": "^2.1.8"
34
34
  },
35
35
  "engines": {
36
36
  "node": "^20.9.0"
@@ -49,8 +49,8 @@
49
49
  "access": "public"
50
50
  },
51
51
  "dependencies": {
52
- "@silverhand/essentials": "^2.9.0",
53
- "@withtyped/server": "^0.13.3"
52
+ "@silverhand/essentials": "^2.9.2",
53
+ "@withtyped/server": "^0.14.0"
54
54
  },
55
55
  "scripts": {
56
56
  "precommit": "lint-staged",