@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.
- package/CHANGELOG.md +18 -0
- package/dist/config/schema.d.mts +54 -10
- package/dist/config/schema.d.ts +54 -10
- package/dist/config/schema.js +6 -4
- package/dist/config/schema.js.map +1 -1
- package/dist/esm/config/schema.js +5 -3
- package/dist/esm/config/schema.js.map +1 -1
- package/dist/esm/helpers/emails.js +79 -0
- package/dist/esm/helpers/emails.js.map +1 -0
- package/dist/esm/interface/admin-interface.js +44 -12
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/client-interface.js +41 -0
- package/dist/esm/interface/client-interface.js.map +1 -1
- package/dist/esm/interface/crud/{oauth.js → connected-accounts.js} +2 -2
- package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
- package/dist/esm/interface/crud/oauth-providers.js +87 -0
- package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
- package/dist/esm/interface/crud/projects.js +7 -5
- package/dist/esm/interface/crud/projects.js.map +1 -1
- package/dist/esm/interface/server-interface.js +51 -0
- package/dist/esm/interface/server-interface.js.map +1 -1
- package/dist/esm/known-errors.js +10 -0
- package/dist/esm/known-errors.js.map +1 -1
- package/dist/esm/schema-fields.js +24 -1
- package/dist/esm/schema-fields.js.map +1 -1
- package/dist/esm/utils/esbuild.js +14 -4
- package/dist/esm/utils/esbuild.js.map +1 -1
- package/dist/esm/utils/oauth.js +1 -1
- package/dist/esm/utils/oauth.js.map +1 -1
- package/dist/helpers/emails.d.mts +24 -0
- package/dist/helpers/emails.d.ts +24 -0
- package/dist/helpers/{email-themes.js → emails.js} +48 -11
- package/dist/helpers/emails.js.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/interface/admin-interface.d.mts +20 -11
- package/dist/interface/admin-interface.d.ts +20 -11
- package/dist/interface/admin-interface.js +44 -12
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/client-interface.d.mts +24 -1
- package/dist/interface/client-interface.d.ts +24 -1
- package/dist/interface/client-interface.js +41 -0
- package/dist/interface/client-interface.js.map +1 -1
- package/dist/interface/crud/{oauth.js → connected-accounts.js} +5 -5
- package/dist/interface/crud/connected-accounts.js.map +1 -0
- package/dist/interface/crud/oauth-providers.d.mts +172 -0
- package/dist/interface/crud/oauth-providers.d.ts +172 -0
- package/dist/interface/crud/oauth-providers.js +107 -0
- package/dist/interface/crud/oauth-providers.js.map +1 -0
- package/dist/interface/crud/project-api-keys.d.mts +2 -2
- package/dist/interface/crud/project-api-keys.d.ts +2 -2
- package/dist/interface/crud/projects.d.mts +15 -12
- package/dist/interface/crud/projects.d.ts +15 -12
- package/dist/interface/crud/projects.js +5 -3
- package/dist/interface/crud/projects.js.map +1 -1
- package/dist/interface/server-interface.d.mts +45 -1
- package/dist/interface/server-interface.d.ts +45 -1
- package/dist/interface/server-interface.js +51 -0
- package/dist/interface/server-interface.js.map +1 -1
- package/dist/known-errors.d.mts +3 -0
- package/dist/known-errors.d.ts +3 -0
- package/dist/known-errors.js +10 -0
- package/dist/known-errors.js.map +1 -1
- package/dist/schema-fields.d.mts +16 -3
- package/dist/schema-fields.d.ts +16 -3
- package/dist/schema-fields.js +31 -1
- package/dist/schema-fields.js.map +1 -1
- package/dist/utils/esbuild.d.mts +3 -0
- package/dist/utils/esbuild.d.ts +3 -0
- package/dist/utils/esbuild.js +14 -4
- package/dist/utils/esbuild.js.map +1 -1
- package/dist/utils/oauth.d.mts +2 -2
- package/dist/utils/oauth.d.ts +2 -2
- package/dist/utils/oauth.js +1 -1
- package/dist/utils/oauth.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/helpers/email-themes.js +0 -45
- package/dist/esm/helpers/email-themes.js.map +0 -1
- package/dist/esm/interface/crud/oauth.js.map +0 -1
- package/dist/helpers/email-themes.d.mts +0 -13
- package/dist/helpers/email-themes.d.ts +0 -13
- package/dist/helpers/email-themes.js.map +0 -1
- package/dist/interface/crud/oauth.js.map +0 -1
- /package/dist/interface/crud/{oauth.d.mts → connected-accounts.d.mts} +0 -0
- /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
|
package/dist/config/schema.d.mts
CHANGED
|
@@ -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 ? {
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -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 ? {
|
package/dist/config/schema.js
CHANGED
|
@@ -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
|
|
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:
|
|
242
|
-
themeList:
|
|
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/
|
|
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) {
|