@stackframe/stack-shared 2.8.22 → 2.8.25

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 (85) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/config/schema.d.mts +54 -10
  3. package/dist/config/schema.d.ts +54 -10
  4. package/dist/config/schema.js +6 -4
  5. package/dist/config/schema.js.map +1 -1
  6. package/dist/esm/config/schema.js +5 -3
  7. package/dist/esm/config/schema.js.map +1 -1
  8. package/dist/esm/helpers/emails.js +79 -0
  9. package/dist/esm/helpers/emails.js.map +1 -0
  10. package/dist/esm/interface/admin-interface.js +44 -12
  11. package/dist/esm/interface/admin-interface.js.map +1 -1
  12. package/dist/esm/interface/client-interface.js +41 -0
  13. package/dist/esm/interface/client-interface.js.map +1 -1
  14. package/dist/esm/interface/crud/{oauth.js → connected-accounts.js} +2 -2
  15. package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
  16. package/dist/esm/interface/crud/oauth-providers.js +87 -0
  17. package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
  18. package/dist/esm/interface/crud/projects.js +7 -5
  19. package/dist/esm/interface/crud/projects.js.map +1 -1
  20. package/dist/esm/interface/server-interface.js +51 -0
  21. package/dist/esm/interface/server-interface.js.map +1 -1
  22. package/dist/esm/known-errors.js +10 -0
  23. package/dist/esm/known-errors.js.map +1 -1
  24. package/dist/esm/schema-fields.js +24 -1
  25. package/dist/esm/schema-fields.js.map +1 -1
  26. package/dist/esm/utils/esbuild.js +14 -4
  27. package/dist/esm/utils/esbuild.js.map +1 -1
  28. package/dist/esm/utils/oauth.js +1 -1
  29. package/dist/esm/utils/oauth.js.map +1 -1
  30. package/dist/helpers/emails.d.mts +24 -0
  31. package/dist/helpers/emails.d.ts +24 -0
  32. package/dist/helpers/{email-themes.js → emails.js} +48 -11
  33. package/dist/helpers/emails.js.map +1 -0
  34. package/dist/index.d.mts +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/interface/admin-interface.d.mts +20 -11
  37. package/dist/interface/admin-interface.d.ts +20 -11
  38. package/dist/interface/admin-interface.js +44 -12
  39. package/dist/interface/admin-interface.js.map +1 -1
  40. package/dist/interface/client-interface.d.mts +24 -1
  41. package/dist/interface/client-interface.d.ts +24 -1
  42. package/dist/interface/client-interface.js +41 -0
  43. package/dist/interface/client-interface.js.map +1 -1
  44. package/dist/interface/crud/{oauth.js → connected-accounts.js} +5 -5
  45. package/dist/interface/crud/connected-accounts.js.map +1 -0
  46. package/dist/interface/crud/oauth-providers.d.mts +172 -0
  47. package/dist/interface/crud/oauth-providers.d.ts +172 -0
  48. package/dist/interface/crud/oauth-providers.js +107 -0
  49. package/dist/interface/crud/oauth-providers.js.map +1 -0
  50. package/dist/interface/crud/project-api-keys.d.mts +2 -2
  51. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  52. package/dist/interface/crud/projects.d.mts +15 -12
  53. package/dist/interface/crud/projects.d.ts +15 -12
  54. package/dist/interface/crud/projects.js +5 -3
  55. package/dist/interface/crud/projects.js.map +1 -1
  56. package/dist/interface/server-interface.d.mts +45 -1
  57. package/dist/interface/server-interface.d.ts +45 -1
  58. package/dist/interface/server-interface.js +51 -0
  59. package/dist/interface/server-interface.js.map +1 -1
  60. package/dist/known-errors.d.mts +3 -0
  61. package/dist/known-errors.d.ts +3 -0
  62. package/dist/known-errors.js +10 -0
  63. package/dist/known-errors.js.map +1 -1
  64. package/dist/schema-fields.d.mts +16 -3
  65. package/dist/schema-fields.d.ts +16 -3
  66. package/dist/schema-fields.js +31 -1
  67. package/dist/schema-fields.js.map +1 -1
  68. package/dist/utils/esbuild.d.mts +3 -0
  69. package/dist/utils/esbuild.d.ts +3 -0
  70. package/dist/utils/esbuild.js +14 -4
  71. package/dist/utils/esbuild.js.map +1 -1
  72. package/dist/utils/oauth.d.mts +2 -2
  73. package/dist/utils/oauth.d.ts +2 -2
  74. package/dist/utils/oauth.js +1 -1
  75. package/dist/utils/oauth.js.map +1 -1
  76. package/package.json +1 -1
  77. package/dist/esm/helpers/email-themes.js +0 -45
  78. package/dist/esm/helpers/email-themes.js.map +0 -1
  79. package/dist/esm/interface/crud/oauth.js.map +0 -1
  80. package/dist/helpers/email-themes.d.mts +0 -13
  81. package/dist/helpers/email-themes.d.ts +0 -13
  82. package/dist/helpers/email-themes.js.map +0 -1
  83. package/dist/interface/crud/oauth.js.map +0 -1
  84. /package/dist/interface/crud/{oauth.d.mts → connected-accounts.d.mts} +0 -0
  85. /package/dist/interface/crud/{oauth.d.ts → connected-accounts.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @stackframe/stack-shared
2
2
 
3
+ ## 2.8.25
4
+
5
+ ### Patch Changes
6
+
7
+ - Various changes
8
+
9
+ ## 2.8.24
10
+
11
+ ### Patch Changes
12
+
13
+ - Various changes
14
+
15
+ ## 2.8.23
16
+
17
+ ### Patch Changes
18
+
19
+ - Various changes
20
+
3
21
  ## 2.8.22
4
22
 
5
23
  ### Patch Changes
@@ -63,7 +63,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
63
63
  oauth?: {
64
64
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
65
65
  providers?: Record<string, {
66
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
66
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
67
67
  allowSignIn?: boolean | undefined;
68
68
  allowConnectedAccounts?: boolean | undefined;
69
69
  }> | undefined;
@@ -75,6 +75,13 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
75
75
  displayName: string;
76
76
  tsxSource: string;
77
77
  }> | undefined;
78
+ templateList?: Record<string, {
79
+ description: string;
80
+ displayName: string;
81
+ tsxSource: string;
82
+ variables: string[];
83
+ subject: string;
84
+ }> | undefined;
78
85
  };
79
86
  }, yup.AnyObject, {
80
87
  sourceOfTruth: undefined;
@@ -121,6 +128,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
121
128
  emails: {
122
129
  theme: undefined;
123
130
  themeList: undefined;
131
+ templateList: undefined;
124
132
  };
125
133
  }, "">;
126
134
  declare const environmentConfigSchema: yup.ObjectSchema<{
@@ -171,7 +179,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
171
179
  oauth?: {
172
180
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
173
181
  providers?: Record<string, {
174
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
182
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
175
183
  allowSignIn?: boolean | undefined;
176
184
  allowConnectedAccounts?: boolean | undefined;
177
185
  }> | undefined;
@@ -180,13 +188,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
180
188
  oauth?: (Omit<{
181
189
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
182
190
  providers?: Record<string, {
183
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
191
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
184
192
  allowSignIn?: boolean | undefined;
185
193
  allowConnectedAccounts?: boolean | undefined;
186
194
  }> | undefined;
187
195
  }, never> & {
188
196
  providers?: Record<string, {
189
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
197
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
190
198
  clientId?: string | undefined;
191
199
  clientSecret?: string | undefined;
192
200
  allowSignIn?: boolean | undefined;
@@ -203,6 +211,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
203
211
  displayName: string;
204
212
  tsxSource: string;
205
213
  }> | undefined;
214
+ templateList?: Record<string, {
215
+ description: string;
216
+ displayName: string;
217
+ tsxSource: string;
218
+ variables: string[];
219
+ subject: string;
220
+ }> | undefined;
206
221
  }, never> & {
207
222
  server: {
208
223
  host?: string | undefined;
@@ -229,7 +244,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
229
244
  oauth?: {
230
245
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
231
246
  providers?: Record<string, {
232
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
247
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
233
248
  allowSignIn?: boolean | undefined;
234
249
  allowConnectedAccounts?: boolean | undefined;
235
250
  }> | undefined;
@@ -238,13 +253,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
238
253
  oauth?: (Omit<{
239
254
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
240
255
  providers?: Record<string, {
241
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
256
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
242
257
  allowSignIn?: boolean | undefined;
243
258
  allowConnectedAccounts?: boolean | undefined;
244
259
  }> | undefined;
245
260
  }, never> & {
246
261
  providers?: Record<string, {
247
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
262
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
248
263
  clientId?: string | undefined;
249
264
  clientSecret?: string | undefined;
250
265
  allowSignIn?: boolean | undefined;
@@ -261,6 +276,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
261
276
  displayName: string;
262
277
  tsxSource: string;
263
278
  }> | undefined;
279
+ templateList?: Record<string, {
280
+ description: string;
281
+ displayName: string;
282
+ tsxSource: string;
283
+ variables: string[];
284
+ subject: string;
285
+ }> | undefined;
264
286
  }, never> & {
265
287
  server: {
266
288
  host?: string | undefined;
@@ -348,6 +370,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
348
370
  emails: {
349
371
  theme: undefined;
350
372
  themeList: undefined;
373
+ templateList: undefined;
351
374
  };
352
375
  };
353
376
  auth: {
@@ -395,6 +418,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
395
418
  emails: {
396
419
  theme: undefined;
397
420
  themeList: undefined;
421
+ templateList: undefined;
398
422
  };
399
423
  };
400
424
  emails: {
@@ -442,6 +466,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
442
466
  emails: {
443
467
  theme: undefined;
444
468
  themeList: undefined;
469
+ templateList: undefined;
445
470
  };
446
471
  };
447
472
  }, "">;
@@ -493,7 +518,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
493
518
  oauth?: {
494
519
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
495
520
  providers?: Record<string, {
496
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
521
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
497
522
  allowSignIn?: boolean | undefined;
498
523
  allowConnectedAccounts?: boolean | undefined;
499
524
  }> | undefined;
@@ -502,13 +527,13 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
502
527
  oauth?: (Omit<{
503
528
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
504
529
  providers?: Record<string, {
505
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
530
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
506
531
  allowSignIn?: boolean | undefined;
507
532
  allowConnectedAccounts?: boolean | undefined;
508
533
  }> | undefined;
509
534
  }, never> & {
510
535
  providers?: Record<string, {
511
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
536
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
512
537
  clientId?: string | undefined;
513
538
  clientSecret?: string | undefined;
514
539
  allowSignIn?: boolean | undefined;
@@ -525,6 +550,13 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
525
550
  displayName: string;
526
551
  tsxSource: string;
527
552
  }> | undefined;
553
+ templateList?: Record<string, {
554
+ description: string;
555
+ displayName: string;
556
+ tsxSource: string;
557
+ variables: string[];
558
+ subject: string;
559
+ }> | undefined;
528
560
  }, never> & {
529
561
  server: {
530
562
  host?: string | undefined;
@@ -604,6 +636,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
604
636
  emails: {
605
637
  theme: undefined;
606
638
  themeList: undefined;
639
+ templateList: undefined;
607
640
  };
608
641
  };
609
642
  auth: {
@@ -651,6 +684,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
651
684
  emails: {
652
685
  theme: undefined;
653
686
  themeList: undefined;
687
+ templateList: undefined;
654
688
  };
655
689
  };
656
690
  emails: {
@@ -698,6 +732,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
698
732
  emails: {
699
733
  theme: undefined;
700
734
  themeList: undefined;
735
+ templateList: undefined;
701
736
  };
702
737
  };
703
738
  }, "">;
@@ -771,6 +806,15 @@ declare const organizationConfigDefaults: {
771
806
  tsxSource: string;
772
807
  };
773
808
  };
809
+ templateList: {
810
+ "e7d009ce-8d47-4528-b245-5bf119f2ffa3": {
811
+ displayName: string;
812
+ description: string;
813
+ variables: string[];
814
+ subject: string;
815
+ tsxSource: string;
816
+ };
817
+ };
774
818
  };
775
819
  };
776
820
  type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? {
@@ -63,7 +63,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
63
63
  oauth?: {
64
64
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
65
65
  providers?: Record<string, {
66
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
66
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
67
67
  allowSignIn?: boolean | undefined;
68
68
  allowConnectedAccounts?: boolean | undefined;
69
69
  }> | undefined;
@@ -75,6 +75,13 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
75
75
  displayName: string;
76
76
  tsxSource: string;
77
77
  }> | undefined;
78
+ templateList?: Record<string, {
79
+ description: string;
80
+ displayName: string;
81
+ tsxSource: string;
82
+ variables: string[];
83
+ subject: string;
84
+ }> | undefined;
78
85
  };
79
86
  }, yup.AnyObject, {
80
87
  sourceOfTruth: undefined;
@@ -121,6 +128,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
121
128
  emails: {
122
129
  theme: undefined;
123
130
  themeList: undefined;
131
+ templateList: undefined;
124
132
  };
125
133
  }, "">;
126
134
  declare const environmentConfigSchema: yup.ObjectSchema<{
@@ -171,7 +179,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
171
179
  oauth?: {
172
180
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
173
181
  providers?: Record<string, {
174
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
182
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
175
183
  allowSignIn?: boolean | undefined;
176
184
  allowConnectedAccounts?: boolean | undefined;
177
185
  }> | undefined;
@@ -180,13 +188,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
180
188
  oauth?: (Omit<{
181
189
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
182
190
  providers?: Record<string, {
183
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
191
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
184
192
  allowSignIn?: boolean | undefined;
185
193
  allowConnectedAccounts?: boolean | undefined;
186
194
  }> | undefined;
187
195
  }, never> & {
188
196
  providers?: Record<string, {
189
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
197
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
190
198
  clientId?: string | undefined;
191
199
  clientSecret?: string | undefined;
192
200
  allowSignIn?: boolean | undefined;
@@ -203,6 +211,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
203
211
  displayName: string;
204
212
  tsxSource: string;
205
213
  }> | undefined;
214
+ templateList?: Record<string, {
215
+ description: string;
216
+ displayName: string;
217
+ tsxSource: string;
218
+ variables: string[];
219
+ subject: string;
220
+ }> | undefined;
206
221
  }, never> & {
207
222
  server: {
208
223
  host?: string | undefined;
@@ -229,7 +244,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
229
244
  oauth?: {
230
245
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
231
246
  providers?: Record<string, {
232
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
247
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
233
248
  allowSignIn?: boolean | undefined;
234
249
  allowConnectedAccounts?: boolean | undefined;
235
250
  }> | undefined;
@@ -238,13 +253,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
238
253
  oauth?: (Omit<{
239
254
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
240
255
  providers?: Record<string, {
241
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
256
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
242
257
  allowSignIn?: boolean | undefined;
243
258
  allowConnectedAccounts?: boolean | undefined;
244
259
  }> | undefined;
245
260
  }, never> & {
246
261
  providers?: Record<string, {
247
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
262
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
248
263
  clientId?: string | undefined;
249
264
  clientSecret?: string | undefined;
250
265
  allowSignIn?: boolean | undefined;
@@ -261,6 +276,13 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
261
276
  displayName: string;
262
277
  tsxSource: string;
263
278
  }> | undefined;
279
+ templateList?: Record<string, {
280
+ description: string;
281
+ displayName: string;
282
+ tsxSource: string;
283
+ variables: string[];
284
+ subject: string;
285
+ }> | undefined;
264
286
  }, never> & {
265
287
  server: {
266
288
  host?: string | undefined;
@@ -348,6 +370,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
348
370
  emails: {
349
371
  theme: undefined;
350
372
  themeList: undefined;
373
+ templateList: undefined;
351
374
  };
352
375
  };
353
376
  auth: {
@@ -395,6 +418,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
395
418
  emails: {
396
419
  theme: undefined;
397
420
  themeList: undefined;
421
+ templateList: undefined;
398
422
  };
399
423
  };
400
424
  emails: {
@@ -442,6 +466,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
442
466
  emails: {
443
467
  theme: undefined;
444
468
  themeList: undefined;
469
+ templateList: undefined;
445
470
  };
446
471
  };
447
472
  }, "">;
@@ -493,7 +518,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
493
518
  oauth?: {
494
519
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
495
520
  providers?: Record<string, {
496
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
521
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
497
522
  allowSignIn?: boolean | undefined;
498
523
  allowConnectedAccounts?: boolean | undefined;
499
524
  }> | undefined;
@@ -502,13 +527,13 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
502
527
  oauth?: (Omit<{
503
528
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
504
529
  providers?: Record<string, {
505
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
530
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
506
531
  allowSignIn?: boolean | undefined;
507
532
  allowConnectedAccounts?: boolean | undefined;
508
533
  }> | undefined;
509
534
  }, never> & {
510
535
  providers?: Record<string, {
511
- type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | undefined;
536
+ type?: "google" | "github" | "microsoft" | "spotify" | "facebook" | "discord" | "gitlab" | "bitbucket" | "linkedin" | "apple" | "x" | "twitch" | undefined;
512
537
  clientId?: string | undefined;
513
538
  clientSecret?: string | undefined;
514
539
  allowSignIn?: boolean | undefined;
@@ -525,6 +550,13 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
525
550
  displayName: string;
526
551
  tsxSource: string;
527
552
  }> | undefined;
553
+ templateList?: Record<string, {
554
+ description: string;
555
+ displayName: string;
556
+ tsxSource: string;
557
+ variables: string[];
558
+ subject: string;
559
+ }> | undefined;
528
560
  }, never> & {
529
561
  server: {
530
562
  host?: string | undefined;
@@ -604,6 +636,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
604
636
  emails: {
605
637
  theme: undefined;
606
638
  themeList: undefined;
639
+ templateList: undefined;
607
640
  };
608
641
  };
609
642
  auth: {
@@ -651,6 +684,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
651
684
  emails: {
652
685
  theme: undefined;
653
686
  themeList: undefined;
687
+ templateList: undefined;
654
688
  };
655
689
  };
656
690
  emails: {
@@ -698,6 +732,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
698
732
  emails: {
699
733
  theme: undefined;
700
734
  themeList: undefined;
735
+ templateList: undefined;
701
736
  };
702
737
  };
703
738
  }, "">;
@@ -771,6 +806,15 @@ declare const organizationConfigDefaults: {
771
806
  tsxSource: string;
772
807
  };
773
808
  };
809
+ templateList: {
810
+ "e7d009ce-8d47-4528-b245-5bf119f2ffa3": {
811
+ displayName: string;
812
+ description: string;
813
+ variables: string[];
814
+ subject: string;
815
+ tsxSource: string;
816
+ };
817
+ };
774
818
  };
775
819
  };
776
820
  type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? {
@@ -46,7 +46,7 @@ var schemaFields = __toESM(require("../schema-fields.js"));
46
46
  var import_schema_fields = require("../schema-fields.js");
47
47
  var import_oauth = require("../utils/oauth.js");
48
48
  var import_objects = require("../utils/objects.js");
49
- var import_email_themes = require("../helpers/email-themes.js");
49
+ var import_emails = require("../helpers/emails.js");
50
50
  var configLevels = ["project", "branch", "environment", "organization"];
51
51
  var permissionRegex = /^\$?[a-z0-9_:]+$/;
52
52
  var customPermissionRegex = /^[a-z0-9_:]+$/;
@@ -136,7 +136,8 @@ var branchConfigSchema = projectConfigSchema.omit(["sourceOfTruth"]).concat((0,
136
136
  auth: branchAuthSchema,
137
137
  emails: (0, import_schema_fields.yupObject)({
138
138
  theme: schemaFields.emailThemeSchema.optional(),
139
- themeList: schemaFields.emailThemeListSchema.optional()
139
+ themeList: schemaFields.emailThemeListSchema.optional(),
140
+ templateList: schemaFields.emailTemplateListSchema.optional()
140
141
  })
141
142
  }));
142
143
  var environmentConfigSchema = branchConfigSchema.concat((0, import_schema_fields.yupObject)({
@@ -238,8 +239,9 @@ var organizationConfigDefaults = {
238
239
  server: {
239
240
  isShared: true
240
241
  },
241
- theme: import_email_themes.DEFAULT_EMAIL_THEME_ID,
242
- themeList: import_email_themes.DEFAULT_EMAIL_THEMES
242
+ theme: import_emails.DEFAULT_EMAIL_THEME_ID,
243
+ themeList: import_emails.DEFAULT_EMAIL_THEMES,
244
+ templateList: import_emails.DEFAULT_EMAIL_TEMPLATES
243
245
  }
244
246
  };
245
247
  function applyDefaults(defaults, config) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/schema.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport * as schemaFields from \"../schema-fields\";\nimport { yupBoolean, yupObject, yupRecord, yupString, yupUnion } from \"../schema-fields\";\nimport { allProviders } from \"../utils/oauth\";\nimport { DeepMerge, DeepPartial, get, has, isObjectLike, mapValues, set } from \"../utils/objects\";\nimport { Config, NormalizesTo } from \"./format\";\nimport { DEFAULT_EMAIL_THEME_ID, DEFAULT_EMAIL_THEMES } from \"../helpers/email-themes\";\n\n// NOTE: The validation schemas in here are all schematic validators, not sanity-check validators.\n// For more info, see ./README.md\n\n\nexport const configLevels = ['project', 'branch', 'environment', 'organization'] as const;\nexport type ConfigLevel = typeof configLevels[number];\nconst permissionRegex = /^\\$?[a-z0-9_:]+$/;\nconst customPermissionRegex = /^[a-z0-9_:]+$/;\n\n/**\n * All fields that can be overridden at this level.\n */\nexport const projectConfigSchema = yupObject({\n sourceOfTruth: yupUnion(\n yupObject({\n type: yupString().oneOf(['hosted']).optional(),\n }).defined(),\n yupObject({\n type: yupString().oneOf(['neon']).optional(),\n connectionStrings: yupRecord(\n yupString().defined(),\n yupString().defined(),\n ).defined(),\n }).defined(),\n yupObject({\n type: yupString().oneOf(['postgres']).optional(),\n connectionString: yupString().defined()\n }).defined(),\n ).optional(),\n});\n\n// --- NEW RBAC Schema ---\nconst branchRbacDefaultPermissions = yupRecord(\n yupString().optional().matches(permissionRegex),\n yupBoolean().isTrue().optional(),\n).optional();\n\nconst branchRbacSchema = yupObject({\n permissions: yupRecord(\n yupString().optional().matches(customPermissionRegex),\n yupObject({\n description: yupString().optional(),\n scope: yupString().oneOf(['team', 'project']).optional(),\n containedPermissionIds: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupBoolean().isTrue().optional()\n ).optional(),\n }).optional(),\n ).optional(),\n defaultPermissions: yupObject({\n teamCreator: branchRbacDefaultPermissions,\n teamMember: branchRbacDefaultPermissions,\n signUp: branchRbacDefaultPermissions,\n }).optional(),\n}).optional();\n// --- END NEW RBAC Schema ---\n\n// --- NEW API Keys Schema ---\nconst branchApiKeysSchema = yupObject({\n enabled: yupObject({\n team: yupBoolean().optional(),\n user: yupBoolean().optional(),\n }).optional(),\n}).optional();\n// --- END NEW API Keys Schema ---\n\n\nconst branchAuthSchema = yupObject({\n allowSignUp: yupBoolean().optional(),\n password: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n otp: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n passkey: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n oauth: yupObject({\n accountMergeStrategy: yupString().oneOf(['link_method', 'raise_error', 'allow_duplicates']).optional(),\n providers: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupObject({\n type: yupString().oneOf(allProviders).optional(),\n allowSignIn: yupBoolean().optional(),\n allowConnectedAccounts: yupBoolean().optional(),\n }).defined(),\n ).optional(),\n }).optional(),\n}).optional();\n\nconst branchDomain = yupObject({\n allowLocalhost: yupBoolean().optional(),\n}).optional();\n\nexport const branchConfigSchema = projectConfigSchema.omit(['sourceOfTruth']).concat(yupObject({\n rbac: branchRbacSchema,\n\n teams: yupObject({\n createPersonalTeamOnSignUp: yupBoolean().optional(),\n allowClientTeamCreation: yupBoolean().optional(),\n }).optional(),\n\n users: yupObject({\n allowClientUserDeletion: yupBoolean().optional(),\n }).optional(),\n\n apiKeys: branchApiKeysSchema,\n\n domains: branchDomain,\n\n auth: branchAuthSchema,\n\n emails: yupObject({\n theme: schemaFields.emailThemeSchema.optional(),\n themeList: schemaFields.emailThemeListSchema.optional(),\n }),\n\n}));\n\n\nexport const environmentConfigSchema = branchConfigSchema.concat(yupObject({\n auth: branchConfigSchema.getNested(\"auth\").concat(yupObject({\n oauth: branchConfigSchema.getNested(\"auth\").getNested(\"oauth\").concat(yupObject({\n providers: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupObject({\n type: yupString().oneOf(allProviders).optional(),\n isShared: yupBoolean().optional(),\n clientId: schemaFields.oauthClientIdSchema.optional(),\n clientSecret: schemaFields.oauthClientSecretSchema.optional(),\n facebookConfigId: schemaFields.oauthFacebookConfigIdSchema.optional(),\n microsoftTenantId: schemaFields.oauthMicrosoftTenantIdSchema.optional(),\n allowSignIn: yupBoolean().optional(),\n allowConnectedAccounts: yupBoolean().optional(),\n }),\n ).optional(),\n }).optional()),\n })),\n\n emails: branchConfigSchema.getNested(\"emails\").concat(yupObject({\n server: yupObject({\n isShared: yupBoolean().optional(),\n host: schemaFields.emailHostSchema.optional().nonEmpty(),\n port: schemaFields.emailPortSchema.optional(),\n username: schemaFields.emailUsernameSchema.optional().nonEmpty(),\n password: schemaFields.emailPasswordSchema.optional().nonEmpty(),\n senderName: schemaFields.emailSenderNameSchema.optional().nonEmpty(),\n senderEmail: schemaFields.emailSenderEmailSchema.optional().nonEmpty(),\n }),\n }).optional()),\n\n domains: branchConfigSchema.getNested(\"domains\").concat(yupObject({\n trustedDomains: yupRecord(\n yupString().uuid().optional(),\n yupObject({\n baseUrl: schemaFields.urlSchema.optional(),\n handlerPath: schemaFields.handlerPathSchema.optional(),\n }),\n ).optional(),\n })),\n}));\n\nexport const organizationConfigSchema = environmentConfigSchema.concat(yupObject({}));\n\n\n// Defaults\n// these are objects that are merged together to form the rendered config (see ./README.md)\n// Wherever an object could be used as a value, a function can instead be used to generate the default values on a per-key basis\n// NOTE: These values are the defaults of the schema, NOT the defaults for newly created projects. The values here signify what `null` means for each property. If you want new projects by default to have a certain value set to true, you should update the corresponding function in the backend instead.\nexport const projectConfigDefaults = {\n sourceOfTruth: {\n type: 'hosted',\n },\n} satisfies DeepReplaceAllowFunctionsForObjects<ProjectConfigStrippedNormalizedOverride>;\n\nexport const branchConfigDefaults = {} satisfies DeepReplaceAllowFunctionsForObjects<BranchConfigStrippedNormalizedOverride>;\n\nexport const environmentConfigDefaults = {} satisfies DeepReplaceAllowFunctionsForObjects<EnvironmentConfigStrippedNormalizedOverride>;\n\nexport const organizationConfigDefaults = {\n rbac: {\n permissions: (key: string) => ({}),\n defaultPermissions: {\n teamCreator: {},\n teamMember: {},\n signUp: {},\n },\n },\n\n apiKeys: {\n enabled: {\n team: false,\n user: false,\n },\n },\n\n teams: {\n createPersonalTeamOnSignUp: false,\n allowClientTeamCreation: false,\n },\n\n users: {\n allowClientUserDeletion: false,\n },\n\n domains: {\n allowLocalhost: false,\n trustedDomains: (key: string) => ({\n handlerPath: '/handler',\n }),\n },\n\n auth: {\n allowSignUp: true,\n password: {\n allowSignIn: false,\n },\n otp: {\n allowSignIn: false,\n },\n passkey: {\n allowSignIn: false,\n },\n oauth: {\n accountMergeStrategy: 'link_method',\n providers: (key: string) => ({\n isShared: true,\n allowSignIn: false,\n allowConnectedAccounts: false,\n }),\n },\n },\n\n emails: {\n server: {\n isShared: true,\n },\n theme: DEFAULT_EMAIL_THEME_ID,\n themeList: DEFAULT_EMAIL_THEMES,\n },\n} satisfies DeepReplaceAllowFunctionsForObjects<OrganizationConfigStrippedNormalizedOverride>;\n\nexport type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? { [K in keyof T]: DeepReplaceAllowFunctionsForObjects<T[K]> } | ((arg: keyof T) => DeepReplaceAllowFunctionsForObjects<T[keyof T]>) : T;\nexport type DeepReplaceFunctionsWithObjects<T> = T extends (arg: infer K extends string) => infer R ? DeepReplaceFunctionsWithObjects<Record<K, R>> : (T extends object ? { [K in keyof T]: DeepReplaceFunctionsWithObjects<T[K]> } : T);\nexport type ApplyDefaults<D extends object | ((key: string) => unknown), C extends object> = DeepMerge<DeepReplaceFunctionsWithObjects<D>, C>;\nexport function applyDefaults<D extends object | ((key: string) => unknown), C extends object>(defaults: D, config: C): ApplyDefaults<D, C> {\n const res: any = typeof defaults === 'function' ? {} : mapValues(defaults, v => typeof v === 'function' ? {} : (typeof v === 'object' ? applyDefaults(v as any, {}) : v));\n for (const [key, mergeValue] of Object.entries(config)) {\n const baseValue = typeof defaults === 'function' ? defaults(key) : (has(defaults, key as any) ? get(defaults, key as any) : undefined);\n if (baseValue !== undefined) {\n if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {\n set(res, key, applyDefaults(baseValue, mergeValue));\n continue;\n }\n }\n set(res, key, mergeValue);\n }\n return res as any;\n}\nundefined?.test(\"applyDefaults\", ({ expect }) => {\n expect(applyDefaults({ a: 1 }, { a: 2 })).toEqual({ a: 2 });\n expect(applyDefaults({ a: { b: 1 } }, { a: { c: 2 } })).toEqual({ a: { b: 1, c: 2 } });\n expect(applyDefaults((key: string) => ({ b: key }), { a: {} })).toEqual({ a: { b: \"a\" } });\n expect(applyDefaults({ a: (key: string) => ({ b: key }) }, { a: { c: { d: 1 } } })).toEqual({ a: { c: { b: \"c\", d: 1 } } });\n expect(applyDefaults({ a: (key: string) => ({ b: key }) }, {})).toEqual({ a: {} });\n expect(applyDefaults({ a: { b: (key: string) => ({ b: key }) } }, {})).toEqual({ a: { b: {} } });\n});\n\n// Normalized overrides\nexport type ProjectConfigNormalizedOverride = yup.InferType<typeof projectConfigSchema>;\nexport type BranchConfigNormalizedOverride = yup.InferType<typeof branchConfigSchema>;\nexport type EnvironmentConfigNormalizedOverride = yup.InferType<typeof environmentConfigSchema>;\nexport type OrganizationConfigNormalizedOverride = yup.InferType<typeof organizationConfigSchema>;\n\n// Normalized overrides, but only the fields that will NOT be overridden by a future level anymore\nexport type ProjectConfigStrippedNormalizedOverride = Omit<ProjectConfigNormalizedOverride,\n | keyof BranchConfigNormalizedOverride\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type BranchConfigStrippedNormalizedOverride = Omit<BranchConfigNormalizedOverride,\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type EnvironmentConfigStrippedNormalizedOverride = Omit<EnvironmentConfigNormalizedOverride,\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type OrganizationConfigStrippedNormalizedOverride = OrganizationConfigNormalizedOverride;\n\n// Overrides\nexport type ProjectConfigOverride = NormalizesTo<ProjectConfigNormalizedOverride>;\nexport type BranchConfigOverride = NormalizesTo<BranchConfigNormalizedOverride>;\nexport type EnvironmentConfigOverride = NormalizesTo<EnvironmentConfigNormalizedOverride>;\nexport type OrganizationConfigOverride = NormalizesTo<OrganizationConfigNormalizedOverride>;\n\n// Override overrides (used to update the overrides)\nexport type ProjectConfigOverrideOverride = Config & DeepPartial<ProjectConfigOverride>;\nexport type BranchConfigOverrideOverride = Config & DeepPartial<BranchConfigOverride>;\nexport type EnvironmentConfigOverrideOverride = Config & DeepPartial<EnvironmentConfigOverride>;\nexport type OrganizationConfigOverrideOverride = Config & DeepPartial<OrganizationConfigOverride>;\n\n// Incomplete configs\nexport type ProjectIncompleteConfig = ApplyDefaults<typeof projectConfigDefaults, ProjectConfigNormalizedOverride>;\nexport type BranchIncompleteConfig = ApplyDefaults<typeof branchConfigDefaults, ProjectIncompleteConfig & BranchConfigNormalizedOverride>;\nexport type EnvironmentIncompleteConfig = ApplyDefaults<typeof environmentConfigDefaults, BranchIncompleteConfig & EnvironmentConfigNormalizedOverride>;\nexport type OrganizationIncompleteConfig = ApplyDefaults<typeof organizationConfigDefaults, EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride>;\n\n// Rendered configs\nexport type ProjectRenderedConfig = Omit<ProjectIncompleteConfig,\n | keyof BranchConfigNormalizedOverride\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type BranchRenderedConfig = Omit<BranchIncompleteConfig,\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type EnvironmentRenderedConfig = Omit<EnvironmentIncompleteConfig,\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type OrganizationRenderedConfig = OrganizationIncompleteConfig;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/config/schema.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport * as schemaFields from \"../schema-fields\";\nimport { yupBoolean, yupObject, yupRecord, yupString, yupUnion } from \"../schema-fields\";\nimport { allProviders } from \"../utils/oauth\";\nimport { DeepMerge, DeepPartial, get, has, isObjectLike, mapValues, set } from \"../utils/objects\";\nimport { Config, NormalizesTo } from \"./format\";\nimport { DEFAULT_EMAIL_THEME_ID, DEFAULT_EMAIL_THEMES, DEFAULT_EMAIL_TEMPLATES } from \"../helpers/emails\";\n\n// NOTE: The validation schemas in here are all schematic validators, not sanity-check validators.\n// For more info, see ./README.md\n\n\nexport const configLevels = ['project', 'branch', 'environment', 'organization'] as const;\nexport type ConfigLevel = typeof configLevels[number];\nconst permissionRegex = /^\\$?[a-z0-9_:]+$/;\nconst customPermissionRegex = /^[a-z0-9_:]+$/;\n\n/**\n * All fields that can be overridden at this level.\n */\nexport const projectConfigSchema = yupObject({\n sourceOfTruth: yupUnion(\n yupObject({\n type: yupString().oneOf(['hosted']).optional(),\n }).defined(),\n yupObject({\n type: yupString().oneOf(['neon']).optional(),\n connectionStrings: yupRecord(\n yupString().defined(),\n yupString().defined(),\n ).defined(),\n }).defined(),\n yupObject({\n type: yupString().oneOf(['postgres']).optional(),\n connectionString: yupString().defined()\n }).defined(),\n ).optional(),\n});\n\n// --- NEW RBAC Schema ---\nconst branchRbacDefaultPermissions = yupRecord(\n yupString().optional().matches(permissionRegex),\n yupBoolean().isTrue().optional(),\n).optional();\n\nconst branchRbacSchema = yupObject({\n permissions: yupRecord(\n yupString().optional().matches(customPermissionRegex),\n yupObject({\n description: yupString().optional(),\n scope: yupString().oneOf(['team', 'project']).optional(),\n containedPermissionIds: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupBoolean().isTrue().optional()\n ).optional(),\n }).optional(),\n ).optional(),\n defaultPermissions: yupObject({\n teamCreator: branchRbacDefaultPermissions,\n teamMember: branchRbacDefaultPermissions,\n signUp: branchRbacDefaultPermissions,\n }).optional(),\n}).optional();\n// --- END NEW RBAC Schema ---\n\n// --- NEW API Keys Schema ---\nconst branchApiKeysSchema = yupObject({\n enabled: yupObject({\n team: yupBoolean().optional(),\n user: yupBoolean().optional(),\n }).optional(),\n}).optional();\n// --- END NEW API Keys Schema ---\n\n\nconst branchAuthSchema = yupObject({\n allowSignUp: yupBoolean().optional(),\n password: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n otp: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n passkey: yupObject({\n allowSignIn: yupBoolean().optional(),\n }).optional(),\n oauth: yupObject({\n accountMergeStrategy: yupString().oneOf(['link_method', 'raise_error', 'allow_duplicates']).optional(),\n providers: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupObject({\n type: yupString().oneOf(allProviders).optional(),\n allowSignIn: yupBoolean().optional(),\n allowConnectedAccounts: yupBoolean().optional(),\n }).defined(),\n ).optional(),\n }).optional(),\n}).optional();\n\nconst branchDomain = yupObject({\n allowLocalhost: yupBoolean().optional(),\n}).optional();\n\nexport const branchConfigSchema = projectConfigSchema.omit(['sourceOfTruth']).concat(yupObject({\n rbac: branchRbacSchema,\n\n teams: yupObject({\n createPersonalTeamOnSignUp: yupBoolean().optional(),\n allowClientTeamCreation: yupBoolean().optional(),\n }).optional(),\n\n users: yupObject({\n allowClientUserDeletion: yupBoolean().optional(),\n }).optional(),\n\n apiKeys: branchApiKeysSchema,\n\n domains: branchDomain,\n\n auth: branchAuthSchema,\n\n emails: yupObject({\n theme: schemaFields.emailThemeSchema.optional(),\n themeList: schemaFields.emailThemeListSchema.optional(),\n templateList: schemaFields.emailTemplateListSchema.optional(),\n }),\n\n}));\n\n\nexport const environmentConfigSchema = branchConfigSchema.concat(yupObject({\n auth: branchConfigSchema.getNested(\"auth\").concat(yupObject({\n oauth: branchConfigSchema.getNested(\"auth\").getNested(\"oauth\").concat(yupObject({\n providers: yupRecord(\n yupString().optional().matches(permissionRegex),\n yupObject({\n type: yupString().oneOf(allProviders).optional(),\n isShared: yupBoolean().optional(),\n clientId: schemaFields.oauthClientIdSchema.optional(),\n clientSecret: schemaFields.oauthClientSecretSchema.optional(),\n facebookConfigId: schemaFields.oauthFacebookConfigIdSchema.optional(),\n microsoftTenantId: schemaFields.oauthMicrosoftTenantIdSchema.optional(),\n allowSignIn: yupBoolean().optional(),\n allowConnectedAccounts: yupBoolean().optional(),\n }),\n ).optional(),\n }).optional()),\n })),\n\n emails: branchConfigSchema.getNested(\"emails\").concat(yupObject({\n server: yupObject({\n isShared: yupBoolean().optional(),\n host: schemaFields.emailHostSchema.optional().nonEmpty(),\n port: schemaFields.emailPortSchema.optional(),\n username: schemaFields.emailUsernameSchema.optional().nonEmpty(),\n password: schemaFields.emailPasswordSchema.optional().nonEmpty(),\n senderName: schemaFields.emailSenderNameSchema.optional().nonEmpty(),\n senderEmail: schemaFields.emailSenderEmailSchema.optional().nonEmpty(),\n }),\n }).optional()),\n\n domains: branchConfigSchema.getNested(\"domains\").concat(yupObject({\n trustedDomains: yupRecord(\n yupString().uuid().optional(),\n yupObject({\n baseUrl: schemaFields.urlSchema.optional(),\n handlerPath: schemaFields.handlerPathSchema.optional(),\n }),\n ).optional(),\n })),\n}));\n\nexport const organizationConfigSchema = environmentConfigSchema.concat(yupObject({}));\n\n\n// Defaults\n// these are objects that are merged together to form the rendered config (see ./README.md)\n// Wherever an object could be used as a value, a function can instead be used to generate the default values on a per-key basis\n// NOTE: These values are the defaults of the schema, NOT the defaults for newly created projects. The values here signify what `null` means for each property. If you want new projects by default to have a certain value set to true, you should update the corresponding function in the backend instead.\nexport const projectConfigDefaults = {\n sourceOfTruth: {\n type: 'hosted',\n },\n} satisfies DeepReplaceAllowFunctionsForObjects<ProjectConfigStrippedNormalizedOverride>;\n\nexport const branchConfigDefaults = {} satisfies DeepReplaceAllowFunctionsForObjects<BranchConfigStrippedNormalizedOverride>;\n\nexport const environmentConfigDefaults = {} satisfies DeepReplaceAllowFunctionsForObjects<EnvironmentConfigStrippedNormalizedOverride>;\n\nexport const organizationConfigDefaults = {\n rbac: {\n permissions: (key: string) => ({}),\n defaultPermissions: {\n teamCreator: {},\n teamMember: {},\n signUp: {},\n },\n },\n\n apiKeys: {\n enabled: {\n team: false,\n user: false,\n },\n },\n\n teams: {\n createPersonalTeamOnSignUp: false,\n allowClientTeamCreation: false,\n },\n\n users: {\n allowClientUserDeletion: false,\n },\n\n domains: {\n allowLocalhost: false,\n trustedDomains: (key: string) => ({\n handlerPath: '/handler',\n }),\n },\n\n auth: {\n allowSignUp: true,\n password: {\n allowSignIn: false,\n },\n otp: {\n allowSignIn: false,\n },\n passkey: {\n allowSignIn: false,\n },\n oauth: {\n accountMergeStrategy: 'link_method',\n providers: (key: string) => ({\n isShared: true,\n allowSignIn: false,\n allowConnectedAccounts: false,\n }),\n },\n },\n\n emails: {\n server: {\n isShared: true,\n },\n theme: DEFAULT_EMAIL_THEME_ID,\n themeList: DEFAULT_EMAIL_THEMES,\n templateList: DEFAULT_EMAIL_TEMPLATES,\n },\n} satisfies DeepReplaceAllowFunctionsForObjects<OrganizationConfigStrippedNormalizedOverride>;\n\nexport type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? { [K in keyof T]: DeepReplaceAllowFunctionsForObjects<T[K]> } | ((arg: keyof T) => DeepReplaceAllowFunctionsForObjects<T[keyof T]>) : T;\nexport type DeepReplaceFunctionsWithObjects<T> = T extends (arg: infer K extends string) => infer R ? DeepReplaceFunctionsWithObjects<Record<K, R>> : (T extends object ? { [K in keyof T]: DeepReplaceFunctionsWithObjects<T[K]> } : T);\nexport type ApplyDefaults<D extends object | ((key: string) => unknown), C extends object> = DeepMerge<DeepReplaceFunctionsWithObjects<D>, C>;\nexport function applyDefaults<D extends object | ((key: string) => unknown), C extends object>(defaults: D, config: C): ApplyDefaults<D, C> {\n const res: any = typeof defaults === 'function' ? {} : mapValues(defaults, v => typeof v === 'function' ? {} : (typeof v === 'object' ? applyDefaults(v as any, {}) : v));\n for (const [key, mergeValue] of Object.entries(config)) {\n const baseValue = typeof defaults === 'function' ? defaults(key) : (has(defaults, key as any) ? get(defaults, key as any) : undefined);\n if (baseValue !== undefined) {\n if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {\n set(res, key, applyDefaults(baseValue, mergeValue));\n continue;\n }\n }\n set(res, key, mergeValue);\n }\n return res as any;\n}\nundefined?.test(\"applyDefaults\", ({ expect }) => {\n expect(applyDefaults({ a: 1 }, { a: 2 })).toEqual({ a: 2 });\n expect(applyDefaults({ a: { b: 1 } }, { a: { c: 2 } })).toEqual({ a: { b: 1, c: 2 } });\n expect(applyDefaults((key: string) => ({ b: key }), { a: {} })).toEqual({ a: { b: \"a\" } });\n expect(applyDefaults({ a: (key: string) => ({ b: key }) }, { a: { c: { d: 1 } } })).toEqual({ a: { c: { b: \"c\", d: 1 } } });\n expect(applyDefaults({ a: (key: string) => ({ b: key }) }, {})).toEqual({ a: {} });\n expect(applyDefaults({ a: { b: (key: string) => ({ b: key }) } }, {})).toEqual({ a: { b: {} } });\n});\n\n// Normalized overrides\nexport type ProjectConfigNormalizedOverride = yup.InferType<typeof projectConfigSchema>;\nexport type BranchConfigNormalizedOverride = yup.InferType<typeof branchConfigSchema>;\nexport type EnvironmentConfigNormalizedOverride = yup.InferType<typeof environmentConfigSchema>;\nexport type OrganizationConfigNormalizedOverride = yup.InferType<typeof organizationConfigSchema>;\n\n// Normalized overrides, but only the fields that will NOT be overridden by a future level anymore\nexport type ProjectConfigStrippedNormalizedOverride = Omit<ProjectConfigNormalizedOverride,\n | keyof BranchConfigNormalizedOverride\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type BranchConfigStrippedNormalizedOverride = Omit<BranchConfigNormalizedOverride,\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type EnvironmentConfigStrippedNormalizedOverride = Omit<EnvironmentConfigNormalizedOverride,\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type OrganizationConfigStrippedNormalizedOverride = OrganizationConfigNormalizedOverride;\n\n// Overrides\nexport type ProjectConfigOverride = NormalizesTo<ProjectConfigNormalizedOverride>;\nexport type BranchConfigOverride = NormalizesTo<BranchConfigNormalizedOverride>;\nexport type EnvironmentConfigOverride = NormalizesTo<EnvironmentConfigNormalizedOverride>;\nexport type OrganizationConfigOverride = NormalizesTo<OrganizationConfigNormalizedOverride>;\n\n// Override overrides (used to update the overrides)\nexport type ProjectConfigOverrideOverride = Config & DeepPartial<ProjectConfigOverride>;\nexport type BranchConfigOverrideOverride = Config & DeepPartial<BranchConfigOverride>;\nexport type EnvironmentConfigOverrideOverride = Config & DeepPartial<EnvironmentConfigOverride>;\nexport type OrganizationConfigOverrideOverride = Config & DeepPartial<OrganizationConfigOverride>;\n\n// Incomplete configs\nexport type ProjectIncompleteConfig = ApplyDefaults<typeof projectConfigDefaults, ProjectConfigNormalizedOverride>;\nexport type BranchIncompleteConfig = ApplyDefaults<typeof branchConfigDefaults, ProjectIncompleteConfig & BranchConfigNormalizedOverride>;\nexport type EnvironmentIncompleteConfig = ApplyDefaults<typeof environmentConfigDefaults, BranchIncompleteConfig & EnvironmentConfigNormalizedOverride>;\nexport type OrganizationIncompleteConfig = ApplyDefaults<typeof organizationConfigDefaults, EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride>;\n\n// Rendered configs\nexport type ProjectRenderedConfig = Omit<ProjectIncompleteConfig,\n | keyof BranchConfigNormalizedOverride\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type BranchRenderedConfig = Omit<BranchIncompleteConfig,\n | keyof EnvironmentConfigNormalizedOverride\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type EnvironmentRenderedConfig = Omit<EnvironmentIncompleteConfig,\n | keyof OrganizationConfigNormalizedOverride\n>;\nexport type OrganizationRenderedConfig = OrganizationIncompleteConfig;\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import * as schemaFields from "../schema-fields.js";
3
3
  import { yupBoolean, yupObject, yupRecord, yupString, yupUnion } from "../schema-fields.js";
4
4
  import { allProviders } from "../utils/oauth.js";
5
5
  import { get, has, isObjectLike, mapValues, set } from "../utils/objects.js";
6
- import { DEFAULT_EMAIL_THEME_ID, DEFAULT_EMAIL_THEMES } from "../helpers/email-themes.js";
6
+ import { DEFAULT_EMAIL_THEME_ID, DEFAULT_EMAIL_THEMES, DEFAULT_EMAIL_TEMPLATES } from "../helpers/emails.js";
7
7
  var configLevels = ["project", "branch", "environment", "organization"];
8
8
  var permissionRegex = /^\$?[a-z0-9_:]+$/;
9
9
  var customPermissionRegex = /^[a-z0-9_:]+$/;
@@ -93,7 +93,8 @@ var branchConfigSchema = projectConfigSchema.omit(["sourceOfTruth"]).concat(yupO
93
93
  auth: branchAuthSchema,
94
94
  emails: yupObject({
95
95
  theme: schemaFields.emailThemeSchema.optional(),
96
- themeList: schemaFields.emailThemeListSchema.optional()
96
+ themeList: schemaFields.emailThemeListSchema.optional(),
97
+ templateList: schemaFields.emailTemplateListSchema.optional()
97
98
  })
98
99
  }));
99
100
  var environmentConfigSchema = branchConfigSchema.concat(yupObject({
@@ -196,7 +197,8 @@ var organizationConfigDefaults = {
196
197
  isShared: true
197
198
  },
198
199
  theme: DEFAULT_EMAIL_THEME_ID,
199
- themeList: DEFAULT_EMAIL_THEMES
200
+ themeList: DEFAULT_EMAIL_THEMES,
201
+ templateList: DEFAULT_EMAIL_TEMPLATES
200
202
  }
201
203
  };
202
204
  function applyDefaults(defaults, config) {