@stackframe/stack-shared 2.8.17 → 2.8.20
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 +39 -11
- package/dist/config/schema.d.ts +39 -11
- package/dist/config/schema.js +28 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/esm/config/schema.js +29 -6
- package/dist/esm/config/schema.js.map +1 -1
- package/dist/esm/interface/admin-interface.js +22 -0
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/crud/projects.js +3 -2
- package/dist/esm/interface/crud/projects.js.map +1 -1
- package/dist/esm/known-errors.js +12 -1
- package/dist/esm/known-errors.js.map +1 -1
- package/dist/esm/schema-fields.js +2 -2
- package/dist/esm/schema-fields.js.map +1 -1
- package/dist/esm/utils/esbuild.js +85 -0
- package/dist/esm/utils/esbuild.js.map +1 -0
- package/dist/esm/utils/globals.js.map +1 -1
- package/dist/esm/utils/objects.js.map +1 -1
- package/dist/esm/utils/react.js +11 -1
- package/dist/esm/utils/react.js.map +1 -1
- package/dist/interface/admin-interface.d.mts +9 -0
- package/dist/interface/admin-interface.d.ts +9 -0
- package/dist/interface/admin-interface.js +22 -0
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/crud/projects.d.mts +10 -6
- package/dist/interface/crud/projects.d.ts +10 -6
- package/dist/interface/crud/projects.js +3 -2
- package/dist/interface/crud/projects.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 +12 -1
- package/dist/known-errors.js.map +1 -1
- package/dist/schema-fields.d.mts +2 -2
- package/dist/schema-fields.d.ts +2 -2
- package/dist/schema-fields.js +3 -3
- package/dist/schema-fields.js.map +1 -1
- package/dist/utils/esbuild.d.mts +10 -0
- package/dist/utils/esbuild.d.ts +10 -0
- package/dist/utils/esbuild.js +121 -0
- package/dist/utils/esbuild.js.map +1 -0
- package/dist/utils/globals.js.map +1 -1
- package/dist/utils/objects.d.mts +2 -1
- package/dist/utils/objects.d.ts +2 -1
- package/dist/utils/objects.js.map +1 -1
- package/dist/utils/react.d.mts +7 -2
- package/dist/utils/react.d.ts +7 -2
- package/dist/utils/react.js +13 -2
- package/dist/utils/react.js.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @stackframe/stack-shared
|
|
2
2
|
|
|
3
|
+
## 2.8.20
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Various changes
|
|
8
|
+
|
|
9
|
+
## 2.8.19
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Various changes
|
|
14
|
+
|
|
15
|
+
## 2.8.18
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Various changes
|
|
20
|
+
|
|
3
21
|
## 2.8.17
|
|
4
22
|
|
|
5
23
|
## 2.8.16
|
package/dist/config/schema.d.mts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as yup from 'yup';
|
|
2
2
|
import { DeepMerge, DeepPartial } from '../utils/objects.mjs';
|
|
3
|
-
import { PrettifyType } from '../utils/types.mjs';
|
|
4
3
|
import { NormalizesTo, Config } from './format.mjs';
|
|
5
4
|
|
|
6
5
|
declare const configLevels: readonly ["project", "branch", "environment", "organization"];
|
|
@@ -8,7 +7,19 @@ type ConfigLevel = typeof configLevels[number];
|
|
|
8
7
|
/**
|
|
9
8
|
* All fields that can be overridden at this level.
|
|
10
9
|
*/
|
|
11
|
-
declare const projectConfigSchema: yup.ObjectSchema<{
|
|
10
|
+
declare const projectConfigSchema: yup.ObjectSchema<{
|
|
11
|
+
sourceOfTruth: {
|
|
12
|
+
type?: "hosted" | undefined;
|
|
13
|
+
} | {
|
|
14
|
+
type?: "neon" | undefined;
|
|
15
|
+
connectionStrings: Record<string, string>;
|
|
16
|
+
} | {
|
|
17
|
+
type?: "postgres" | undefined;
|
|
18
|
+
connectionString: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
}, yup.AnyObject, {
|
|
21
|
+
sourceOfTruth: undefined;
|
|
22
|
+
}, "">;
|
|
12
23
|
declare const branchConfigSchema: yup.ObjectSchema<{} & {
|
|
13
24
|
rbac: {
|
|
14
25
|
permissions?: Record<string, {
|
|
@@ -60,6 +71,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
|
|
|
60
71
|
} | undefined;
|
|
61
72
|
emails: {};
|
|
62
73
|
}, yup.AnyObject, {
|
|
74
|
+
sourceOfTruth: undefined;
|
|
63
75
|
rbac: {
|
|
64
76
|
permissions: undefined;
|
|
65
77
|
defaultPermissions: {
|
|
@@ -177,6 +189,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
177
189
|
}) | undefined;
|
|
178
190
|
}) | undefined;
|
|
179
191
|
emails: Omit<{}, never> & {
|
|
192
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
180
193
|
server: {
|
|
181
194
|
host?: string | undefined;
|
|
182
195
|
port?: number | undefined;
|
|
@@ -229,6 +242,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
229
242
|
}) | undefined;
|
|
230
243
|
}) | undefined;
|
|
231
244
|
emails: Omit<{}, never> & {
|
|
245
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
232
246
|
server: {
|
|
233
247
|
host?: string | undefined;
|
|
234
248
|
port?: number | undefined;
|
|
@@ -248,6 +262,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
248
262
|
}> | undefined;
|
|
249
263
|
}) | undefined;
|
|
250
264
|
}, yup.AnyObject, {
|
|
265
|
+
sourceOfTruth: undefined;
|
|
251
266
|
rbac: {
|
|
252
267
|
permissions: undefined;
|
|
253
268
|
defaultPermissions: {
|
|
@@ -270,6 +285,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
270
285
|
};
|
|
271
286
|
};
|
|
272
287
|
domains: {
|
|
288
|
+
sourceOfTruth: undefined;
|
|
273
289
|
rbac: {
|
|
274
290
|
permissions: undefined;
|
|
275
291
|
defaultPermissions: {
|
|
@@ -313,6 +329,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
313
329
|
emails: {};
|
|
314
330
|
};
|
|
315
331
|
auth: {
|
|
332
|
+
sourceOfTruth: undefined;
|
|
316
333
|
rbac: {
|
|
317
334
|
permissions: undefined;
|
|
318
335
|
defaultPermissions: {
|
|
@@ -356,6 +373,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
356
373
|
emails: {};
|
|
357
374
|
};
|
|
358
375
|
emails: {
|
|
376
|
+
sourceOfTruth: undefined;
|
|
359
377
|
rbac: {
|
|
360
378
|
permissions: undefined;
|
|
361
379
|
defaultPermissions: {
|
|
@@ -474,6 +492,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
474
492
|
}) | undefined;
|
|
475
493
|
}) | undefined;
|
|
476
494
|
emails: Omit<{}, never> & {
|
|
495
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
477
496
|
server: {
|
|
478
497
|
host?: string | undefined;
|
|
479
498
|
port?: number | undefined;
|
|
@@ -485,6 +504,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
485
504
|
};
|
|
486
505
|
};
|
|
487
506
|
} & {}, yup.AnyObject, {
|
|
507
|
+
sourceOfTruth: undefined;
|
|
488
508
|
rbac: {
|
|
489
509
|
permissions: undefined;
|
|
490
510
|
defaultPermissions: {
|
|
@@ -507,6 +527,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
507
527
|
};
|
|
508
528
|
};
|
|
509
529
|
domains: {
|
|
530
|
+
sourceOfTruth: undefined;
|
|
510
531
|
rbac: {
|
|
511
532
|
permissions: undefined;
|
|
512
533
|
defaultPermissions: {
|
|
@@ -550,6 +571,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
550
571
|
emails: {};
|
|
551
572
|
};
|
|
552
573
|
auth: {
|
|
574
|
+
sourceOfTruth: undefined;
|
|
553
575
|
rbac: {
|
|
554
576
|
permissions: undefined;
|
|
555
577
|
defaultPermissions: {
|
|
@@ -593,6 +615,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
593
615
|
emails: {};
|
|
594
616
|
};
|
|
595
617
|
emails: {
|
|
618
|
+
sourceOfTruth: undefined;
|
|
596
619
|
rbac: {
|
|
597
620
|
permissions: undefined;
|
|
598
621
|
defaultPermissions: {
|
|
@@ -636,7 +659,11 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
636
659
|
emails: {};
|
|
637
660
|
};
|
|
638
661
|
}, "">;
|
|
639
|
-
declare const projectConfigDefaults: {
|
|
662
|
+
declare const projectConfigDefaults: {
|
|
663
|
+
sourceOfTruth: {
|
|
664
|
+
type: "hosted";
|
|
665
|
+
};
|
|
666
|
+
};
|
|
640
667
|
declare const branchConfigDefaults: {};
|
|
641
668
|
declare const environmentConfigDefaults: {};
|
|
642
669
|
declare const organizationConfigDefaults: {
|
|
@@ -691,6 +718,7 @@ declare const organizationConfigDefaults: {
|
|
|
691
718
|
server: {
|
|
692
719
|
isShared: true;
|
|
693
720
|
};
|
|
721
|
+
theme: "default-light";
|
|
694
722
|
};
|
|
695
723
|
};
|
|
696
724
|
type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? {
|
|
@@ -717,13 +745,13 @@ type ProjectConfigOverrideOverride = Config & DeepPartial<ProjectConfigOverride>
|
|
|
717
745
|
type BranchConfigOverrideOverride = Config & DeepPartial<BranchConfigOverride>;
|
|
718
746
|
type EnvironmentConfigOverrideOverride = Config & DeepPartial<EnvironmentConfigOverride>;
|
|
719
747
|
type OrganizationConfigOverrideOverride = Config & DeepPartial<OrganizationConfigOverride>;
|
|
720
|
-
type ProjectIncompleteConfig = ProjectConfigNormalizedOverride
|
|
721
|
-
type BranchIncompleteConfig = ProjectIncompleteConfig & BranchConfigNormalizedOverride
|
|
722
|
-
type EnvironmentIncompleteConfig = BranchIncompleteConfig & EnvironmentConfigNormalizedOverride
|
|
723
|
-
type OrganizationIncompleteConfig = EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride
|
|
724
|
-
type ProjectRenderedConfig =
|
|
725
|
-
type BranchRenderedConfig =
|
|
726
|
-
type EnvironmentRenderedConfig =
|
|
727
|
-
type OrganizationRenderedConfig =
|
|
748
|
+
type ProjectIncompleteConfig = ApplyDefaults<typeof projectConfigDefaults, ProjectConfigNormalizedOverride>;
|
|
749
|
+
type BranchIncompleteConfig = ApplyDefaults<typeof branchConfigDefaults, ProjectIncompleteConfig & BranchConfigNormalizedOverride>;
|
|
750
|
+
type EnvironmentIncompleteConfig = ApplyDefaults<typeof environmentConfigDefaults, BranchIncompleteConfig & EnvironmentConfigNormalizedOverride>;
|
|
751
|
+
type OrganizationIncompleteConfig = ApplyDefaults<typeof organizationConfigDefaults, EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride>;
|
|
752
|
+
type ProjectRenderedConfig = Omit<ProjectIncompleteConfig, keyof BranchConfigNormalizedOverride | keyof EnvironmentConfigNormalizedOverride | keyof OrganizationConfigNormalizedOverride>;
|
|
753
|
+
type BranchRenderedConfig = Omit<BranchIncompleteConfig, keyof EnvironmentConfigNormalizedOverride | keyof OrganizationConfigNormalizedOverride>;
|
|
754
|
+
type EnvironmentRenderedConfig = Omit<EnvironmentIncompleteConfig, keyof OrganizationConfigNormalizedOverride>;
|
|
755
|
+
type OrganizationRenderedConfig = OrganizationIncompleteConfig;
|
|
728
756
|
|
|
729
757
|
export { type ApplyDefaults, type BranchConfigNormalizedOverride, type BranchConfigOverride, type BranchConfigOverrideOverride, type BranchConfigStrippedNormalizedOverride, type BranchIncompleteConfig, type BranchRenderedConfig, type ConfigLevel, type DeepReplaceAllowFunctionsForObjects, type DeepReplaceFunctionsWithObjects, type EnvironmentConfigNormalizedOverride, type EnvironmentConfigOverride, type EnvironmentConfigOverrideOverride, type EnvironmentConfigStrippedNormalizedOverride, type EnvironmentIncompleteConfig, type EnvironmentRenderedConfig, type OrganizationConfigNormalizedOverride, type OrganizationConfigOverride, type OrganizationConfigOverrideOverride, type OrganizationConfigStrippedNormalizedOverride, type OrganizationIncompleteConfig, type OrganizationRenderedConfig, type ProjectConfigNormalizedOverride, type ProjectConfigOverride, type ProjectConfigOverrideOverride, type ProjectConfigStrippedNormalizedOverride, type ProjectIncompleteConfig, type ProjectRenderedConfig, applyDefaults, branchConfigDefaults, branchConfigSchema, configLevels, environmentConfigDefaults, environmentConfigSchema, organizationConfigDefaults, organizationConfigSchema, projectConfigDefaults, projectConfigSchema };
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as yup from 'yup';
|
|
2
2
|
import { DeepMerge, DeepPartial } from '../utils/objects.js';
|
|
3
|
-
import { PrettifyType } from '../utils/types.js';
|
|
4
3
|
import { NormalizesTo, Config } from './format.js';
|
|
5
4
|
|
|
6
5
|
declare const configLevels: readonly ["project", "branch", "environment", "organization"];
|
|
@@ -8,7 +7,19 @@ type ConfigLevel = typeof configLevels[number];
|
|
|
8
7
|
/**
|
|
9
8
|
* All fields that can be overridden at this level.
|
|
10
9
|
*/
|
|
11
|
-
declare const projectConfigSchema: yup.ObjectSchema<{
|
|
10
|
+
declare const projectConfigSchema: yup.ObjectSchema<{
|
|
11
|
+
sourceOfTruth: {
|
|
12
|
+
type?: "hosted" | undefined;
|
|
13
|
+
} | {
|
|
14
|
+
type?: "neon" | undefined;
|
|
15
|
+
connectionStrings: Record<string, string>;
|
|
16
|
+
} | {
|
|
17
|
+
type?: "postgres" | undefined;
|
|
18
|
+
connectionString: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
}, yup.AnyObject, {
|
|
21
|
+
sourceOfTruth: undefined;
|
|
22
|
+
}, "">;
|
|
12
23
|
declare const branchConfigSchema: yup.ObjectSchema<{} & {
|
|
13
24
|
rbac: {
|
|
14
25
|
permissions?: Record<string, {
|
|
@@ -60,6 +71,7 @@ declare const branchConfigSchema: yup.ObjectSchema<{} & {
|
|
|
60
71
|
} | undefined;
|
|
61
72
|
emails: {};
|
|
62
73
|
}, yup.AnyObject, {
|
|
74
|
+
sourceOfTruth: undefined;
|
|
63
75
|
rbac: {
|
|
64
76
|
permissions: undefined;
|
|
65
77
|
defaultPermissions: {
|
|
@@ -177,6 +189,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
177
189
|
}) | undefined;
|
|
178
190
|
}) | undefined;
|
|
179
191
|
emails: Omit<{}, never> & {
|
|
192
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
180
193
|
server: {
|
|
181
194
|
host?: string | undefined;
|
|
182
195
|
port?: number | undefined;
|
|
@@ -229,6 +242,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
229
242
|
}) | undefined;
|
|
230
243
|
}) | undefined;
|
|
231
244
|
emails: Omit<{}, never> & {
|
|
245
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
232
246
|
server: {
|
|
233
247
|
host?: string | undefined;
|
|
234
248
|
port?: number | undefined;
|
|
@@ -248,6 +262,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
248
262
|
}> | undefined;
|
|
249
263
|
}) | undefined;
|
|
250
264
|
}, yup.AnyObject, {
|
|
265
|
+
sourceOfTruth: undefined;
|
|
251
266
|
rbac: {
|
|
252
267
|
permissions: undefined;
|
|
253
268
|
defaultPermissions: {
|
|
@@ -270,6 +285,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
270
285
|
};
|
|
271
286
|
};
|
|
272
287
|
domains: {
|
|
288
|
+
sourceOfTruth: undefined;
|
|
273
289
|
rbac: {
|
|
274
290
|
permissions: undefined;
|
|
275
291
|
defaultPermissions: {
|
|
@@ -313,6 +329,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
313
329
|
emails: {};
|
|
314
330
|
};
|
|
315
331
|
auth: {
|
|
332
|
+
sourceOfTruth: undefined;
|
|
316
333
|
rbac: {
|
|
317
334
|
permissions: undefined;
|
|
318
335
|
defaultPermissions: {
|
|
@@ -356,6 +373,7 @@ declare const environmentConfigSchema: yup.ObjectSchema<{
|
|
|
356
373
|
emails: {};
|
|
357
374
|
};
|
|
358
375
|
emails: {
|
|
376
|
+
sourceOfTruth: undefined;
|
|
359
377
|
rbac: {
|
|
360
378
|
permissions: undefined;
|
|
361
379
|
defaultPermissions: {
|
|
@@ -474,6 +492,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
474
492
|
}) | undefined;
|
|
475
493
|
}) | undefined;
|
|
476
494
|
emails: Omit<{}, never> & {
|
|
495
|
+
theme?: "default-light" | "default-dark" | undefined;
|
|
477
496
|
server: {
|
|
478
497
|
host?: string | undefined;
|
|
479
498
|
port?: number | undefined;
|
|
@@ -485,6 +504,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
485
504
|
};
|
|
486
505
|
};
|
|
487
506
|
} & {}, yup.AnyObject, {
|
|
507
|
+
sourceOfTruth: undefined;
|
|
488
508
|
rbac: {
|
|
489
509
|
permissions: undefined;
|
|
490
510
|
defaultPermissions: {
|
|
@@ -507,6 +527,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
507
527
|
};
|
|
508
528
|
};
|
|
509
529
|
domains: {
|
|
530
|
+
sourceOfTruth: undefined;
|
|
510
531
|
rbac: {
|
|
511
532
|
permissions: undefined;
|
|
512
533
|
defaultPermissions: {
|
|
@@ -550,6 +571,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
550
571
|
emails: {};
|
|
551
572
|
};
|
|
552
573
|
auth: {
|
|
574
|
+
sourceOfTruth: undefined;
|
|
553
575
|
rbac: {
|
|
554
576
|
permissions: undefined;
|
|
555
577
|
defaultPermissions: {
|
|
@@ -593,6 +615,7 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
593
615
|
emails: {};
|
|
594
616
|
};
|
|
595
617
|
emails: {
|
|
618
|
+
sourceOfTruth: undefined;
|
|
596
619
|
rbac: {
|
|
597
620
|
permissions: undefined;
|
|
598
621
|
defaultPermissions: {
|
|
@@ -636,7 +659,11 @@ declare const organizationConfigSchema: yup.ObjectSchema<{
|
|
|
636
659
|
emails: {};
|
|
637
660
|
};
|
|
638
661
|
}, "">;
|
|
639
|
-
declare const projectConfigDefaults: {
|
|
662
|
+
declare const projectConfigDefaults: {
|
|
663
|
+
sourceOfTruth: {
|
|
664
|
+
type: "hosted";
|
|
665
|
+
};
|
|
666
|
+
};
|
|
640
667
|
declare const branchConfigDefaults: {};
|
|
641
668
|
declare const environmentConfigDefaults: {};
|
|
642
669
|
declare const organizationConfigDefaults: {
|
|
@@ -691,6 +718,7 @@ declare const organizationConfigDefaults: {
|
|
|
691
718
|
server: {
|
|
692
719
|
isShared: true;
|
|
693
720
|
};
|
|
721
|
+
theme: "default-light";
|
|
694
722
|
};
|
|
695
723
|
};
|
|
696
724
|
type DeepReplaceAllowFunctionsForObjects<T> = T extends object ? {
|
|
@@ -717,13 +745,13 @@ type ProjectConfigOverrideOverride = Config & DeepPartial<ProjectConfigOverride>
|
|
|
717
745
|
type BranchConfigOverrideOverride = Config & DeepPartial<BranchConfigOverride>;
|
|
718
746
|
type EnvironmentConfigOverrideOverride = Config & DeepPartial<EnvironmentConfigOverride>;
|
|
719
747
|
type OrganizationConfigOverrideOverride = Config & DeepPartial<OrganizationConfigOverride>;
|
|
720
|
-
type ProjectIncompleteConfig = ProjectConfigNormalizedOverride
|
|
721
|
-
type BranchIncompleteConfig = ProjectIncompleteConfig & BranchConfigNormalizedOverride
|
|
722
|
-
type EnvironmentIncompleteConfig = BranchIncompleteConfig & EnvironmentConfigNormalizedOverride
|
|
723
|
-
type OrganizationIncompleteConfig = EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride
|
|
724
|
-
type ProjectRenderedConfig =
|
|
725
|
-
type BranchRenderedConfig =
|
|
726
|
-
type EnvironmentRenderedConfig =
|
|
727
|
-
type OrganizationRenderedConfig =
|
|
748
|
+
type ProjectIncompleteConfig = ApplyDefaults<typeof projectConfigDefaults, ProjectConfigNormalizedOverride>;
|
|
749
|
+
type BranchIncompleteConfig = ApplyDefaults<typeof branchConfigDefaults, ProjectIncompleteConfig & BranchConfigNormalizedOverride>;
|
|
750
|
+
type EnvironmentIncompleteConfig = ApplyDefaults<typeof environmentConfigDefaults, BranchIncompleteConfig & EnvironmentConfigNormalizedOverride>;
|
|
751
|
+
type OrganizationIncompleteConfig = ApplyDefaults<typeof organizationConfigDefaults, EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride>;
|
|
752
|
+
type ProjectRenderedConfig = Omit<ProjectIncompleteConfig, keyof BranchConfigNormalizedOverride | keyof EnvironmentConfigNormalizedOverride | keyof OrganizationConfigNormalizedOverride>;
|
|
753
|
+
type BranchRenderedConfig = Omit<BranchIncompleteConfig, keyof EnvironmentConfigNormalizedOverride | keyof OrganizationConfigNormalizedOverride>;
|
|
754
|
+
type EnvironmentRenderedConfig = Omit<EnvironmentIncompleteConfig, keyof OrganizationConfigNormalizedOverride>;
|
|
755
|
+
type OrganizationRenderedConfig = OrganizationIncompleteConfig;
|
|
728
756
|
|
|
729
757
|
export { type ApplyDefaults, type BranchConfigNormalizedOverride, type BranchConfigOverride, type BranchConfigOverrideOverride, type BranchConfigStrippedNormalizedOverride, type BranchIncompleteConfig, type BranchRenderedConfig, type ConfigLevel, type DeepReplaceAllowFunctionsForObjects, type DeepReplaceFunctionsWithObjects, type EnvironmentConfigNormalizedOverride, type EnvironmentConfigOverride, type EnvironmentConfigOverrideOverride, type EnvironmentConfigStrippedNormalizedOverride, type EnvironmentIncompleteConfig, type EnvironmentRenderedConfig, type OrganizationConfigNormalizedOverride, type OrganizationConfigOverride, type OrganizationConfigOverrideOverride, type OrganizationConfigStrippedNormalizedOverride, type OrganizationIncompleteConfig, type OrganizationRenderedConfig, type ProjectConfigNormalizedOverride, type ProjectConfigOverride, type ProjectConfigOverrideOverride, type ProjectConfigStrippedNormalizedOverride, type ProjectIncompleteConfig, type ProjectRenderedConfig, applyDefaults, branchConfigDefaults, branchConfigSchema, configLevels, environmentConfigDefaults, environmentConfigSchema, organizationConfigDefaults, organizationConfigSchema, projectConfigDefaults, projectConfigSchema };
|
package/dist/config/schema.js
CHANGED
|
@@ -49,7 +49,24 @@ var import_objects = require("../utils/objects.js");
|
|
|
49
49
|
var configLevels = ["project", "branch", "environment", "organization"];
|
|
50
50
|
var permissionRegex = /^\$?[a-z0-9_:]+$/;
|
|
51
51
|
var customPermissionRegex = /^[a-z0-9_:]+$/;
|
|
52
|
-
var projectConfigSchema = (0, import_schema_fields.yupObject)({
|
|
52
|
+
var projectConfigSchema = (0, import_schema_fields.yupObject)({
|
|
53
|
+
sourceOfTruth: (0, import_schema_fields.yupUnion)(
|
|
54
|
+
(0, import_schema_fields.yupObject)({
|
|
55
|
+
type: (0, import_schema_fields.yupString)().oneOf(["hosted"]).optional()
|
|
56
|
+
}).defined(),
|
|
57
|
+
(0, import_schema_fields.yupObject)({
|
|
58
|
+
type: (0, import_schema_fields.yupString)().oneOf(["neon"]).optional(),
|
|
59
|
+
connectionStrings: (0, import_schema_fields.yupRecord)(
|
|
60
|
+
(0, import_schema_fields.yupString)().defined(),
|
|
61
|
+
(0, import_schema_fields.yupString)().defined()
|
|
62
|
+
).defined()
|
|
63
|
+
}).defined(),
|
|
64
|
+
(0, import_schema_fields.yupObject)({
|
|
65
|
+
type: (0, import_schema_fields.yupString)().oneOf(["postgres"]).optional(),
|
|
66
|
+
connectionString: (0, import_schema_fields.yupString)().defined()
|
|
67
|
+
}).defined()
|
|
68
|
+
).optional()
|
|
69
|
+
});
|
|
53
70
|
var branchRbacDefaultPermissions = (0, import_schema_fields.yupRecord)(
|
|
54
71
|
(0, import_schema_fields.yupString)().optional().matches(permissionRegex),
|
|
55
72
|
(0, import_schema_fields.yupBoolean)().isTrue().optional()
|
|
@@ -104,7 +121,7 @@ var branchAuthSchema = (0, import_schema_fields.yupObject)({
|
|
|
104
121
|
var branchDomain = (0, import_schema_fields.yupObject)({
|
|
105
122
|
allowLocalhost: (0, import_schema_fields.yupBoolean)().optional()
|
|
106
123
|
}).optional();
|
|
107
|
-
var branchConfigSchema = projectConfigSchema.concat((0, import_schema_fields.yupObject)({
|
|
124
|
+
var branchConfigSchema = projectConfigSchema.omit(["sourceOfTruth"]).concat((0, import_schema_fields.yupObject)({
|
|
108
125
|
rbac: branchRbacSchema,
|
|
109
126
|
teams: (0, import_schema_fields.yupObject)({
|
|
110
127
|
createPersonalTeamOnSignUp: (0, import_schema_fields.yupBoolean)().optional(),
|
|
@@ -145,7 +162,8 @@ var environmentConfigSchema = branchConfigSchema.concat((0, import_schema_fields
|
|
|
145
162
|
password: schemaFields.emailPasswordSchema.optional().nonEmpty(),
|
|
146
163
|
senderName: schemaFields.emailSenderNameSchema.optional().nonEmpty(),
|
|
147
164
|
senderEmail: schemaFields.emailSenderEmailSchema.optional().nonEmpty()
|
|
148
|
-
})
|
|
165
|
+
}),
|
|
166
|
+
theme: schemaFields.emailThemeSchema.optional()
|
|
149
167
|
}).optional()),
|
|
150
168
|
domains: branchConfigSchema.getNested("domains").concat((0, import_schema_fields.yupObject)({
|
|
151
169
|
trustedDomains: (0, import_schema_fields.yupRecord)(
|
|
@@ -158,7 +176,11 @@ var environmentConfigSchema = branchConfigSchema.concat((0, import_schema_fields
|
|
|
158
176
|
}))
|
|
159
177
|
}));
|
|
160
178
|
var organizationConfigSchema = environmentConfigSchema.concat((0, import_schema_fields.yupObject)({}));
|
|
161
|
-
var projectConfigDefaults = {
|
|
179
|
+
var projectConfigDefaults = {
|
|
180
|
+
sourceOfTruth: {
|
|
181
|
+
type: "hosted"
|
|
182
|
+
}
|
|
183
|
+
};
|
|
162
184
|
var branchConfigDefaults = {};
|
|
163
185
|
var environmentConfigDefaults = {};
|
|
164
186
|
var organizationConfigDefaults = {
|
|
@@ -212,7 +234,8 @@ var organizationConfigDefaults = {
|
|
|
212
234
|
emails: {
|
|
213
235
|
server: {
|
|
214
236
|
isShared: true
|
|
215
|
-
}
|
|
237
|
+
},
|
|
238
|
+
theme: "default-light"
|
|
216
239
|
}
|
|
217
240
|
};
|
|
218
241
|
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 } from \"../schema-fields\";\nimport { allProviders } from \"../utils/oauth\";\nimport { DeepMerge, DeepPartial, get, has, isObjectLike, mapValues, set } from \"../utils/objects\";\nimport { PrettifyType } from \"../utils/types\";\nimport { Config, NormalizesTo } from \"./format\";\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\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.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}));\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 = {} 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 },\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, without the properties that may be overridden still\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 = ProjectConfigNormalizedOverride;\nexport type BranchIncompleteConfig = ProjectIncompleteConfig & BranchConfigNormalizedOverride;\nexport type EnvironmentIncompleteConfig = BranchIncompleteConfig & EnvironmentConfigNormalizedOverride;\nexport type OrganizationIncompleteConfig = EnvironmentIncompleteConfig & OrganizationConfigNormalizedOverride;\n\n// Rendered configs\nexport type ProjectRenderedConfig = PrettifyType<ApplyDefaults<typeof projectConfigDefaults, ProjectConfigStrippedNormalizedOverride>>;\nexport type BranchRenderedConfig = PrettifyType<ProjectRenderedConfig & ApplyDefaults<typeof branchConfigDefaults, BranchConfigStrippedNormalizedOverride>>;\nexport type EnvironmentRenderedConfig = PrettifyType<BranchRenderedConfig & ApplyDefaults<typeof environmentConfigDefaults, EnvironmentConfigStrippedNormalizedOverride>>;\nexport type OrganizationRenderedConfig = PrettifyType<EnvironmentRenderedConfig & ApplyDefaults<typeof organizationConfigDefaults, OrganizationConfigStrippedNormalizedOverride>>;\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\";\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}));\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 theme: schemaFields.emailThemeSchema.optional(),\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-light',\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,12 +1,29 @@
|
|
|
1
1
|
// src/config/schema.ts
|
|
2
2
|
import * as schemaFields from "../schema-fields.js";
|
|
3
|
-
import { yupBoolean, yupObject, yupRecord, yupString } from "../schema-fields.js";
|
|
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
6
|
var configLevels = ["project", "branch", "environment", "organization"];
|
|
7
7
|
var permissionRegex = /^\$?[a-z0-9_:]+$/;
|
|
8
8
|
var customPermissionRegex = /^[a-z0-9_:]+$/;
|
|
9
|
-
var projectConfigSchema = yupObject({
|
|
9
|
+
var projectConfigSchema = yupObject({
|
|
10
|
+
sourceOfTruth: yupUnion(
|
|
11
|
+
yupObject({
|
|
12
|
+
type: yupString().oneOf(["hosted"]).optional()
|
|
13
|
+
}).defined(),
|
|
14
|
+
yupObject({
|
|
15
|
+
type: yupString().oneOf(["neon"]).optional(),
|
|
16
|
+
connectionStrings: yupRecord(
|
|
17
|
+
yupString().defined(),
|
|
18
|
+
yupString().defined()
|
|
19
|
+
).defined()
|
|
20
|
+
}).defined(),
|
|
21
|
+
yupObject({
|
|
22
|
+
type: yupString().oneOf(["postgres"]).optional(),
|
|
23
|
+
connectionString: yupString().defined()
|
|
24
|
+
}).defined()
|
|
25
|
+
).optional()
|
|
26
|
+
});
|
|
10
27
|
var branchRbacDefaultPermissions = yupRecord(
|
|
11
28
|
yupString().optional().matches(permissionRegex),
|
|
12
29
|
yupBoolean().isTrue().optional()
|
|
@@ -61,7 +78,7 @@ var branchAuthSchema = yupObject({
|
|
|
61
78
|
var branchDomain = yupObject({
|
|
62
79
|
allowLocalhost: yupBoolean().optional()
|
|
63
80
|
}).optional();
|
|
64
|
-
var branchConfigSchema = projectConfigSchema.concat(yupObject({
|
|
81
|
+
var branchConfigSchema = projectConfigSchema.omit(["sourceOfTruth"]).concat(yupObject({
|
|
65
82
|
rbac: branchRbacSchema,
|
|
66
83
|
teams: yupObject({
|
|
67
84
|
createPersonalTeamOnSignUp: yupBoolean().optional(),
|
|
@@ -102,7 +119,8 @@ var environmentConfigSchema = branchConfigSchema.concat(yupObject({
|
|
|
102
119
|
password: schemaFields.emailPasswordSchema.optional().nonEmpty(),
|
|
103
120
|
senderName: schemaFields.emailSenderNameSchema.optional().nonEmpty(),
|
|
104
121
|
senderEmail: schemaFields.emailSenderEmailSchema.optional().nonEmpty()
|
|
105
|
-
})
|
|
122
|
+
}),
|
|
123
|
+
theme: schemaFields.emailThemeSchema.optional()
|
|
106
124
|
}).optional()),
|
|
107
125
|
domains: branchConfigSchema.getNested("domains").concat(yupObject({
|
|
108
126
|
trustedDomains: yupRecord(
|
|
@@ -115,7 +133,11 @@ var environmentConfigSchema = branchConfigSchema.concat(yupObject({
|
|
|
115
133
|
}))
|
|
116
134
|
}));
|
|
117
135
|
var organizationConfigSchema = environmentConfigSchema.concat(yupObject({}));
|
|
118
|
-
var projectConfigDefaults = {
|
|
136
|
+
var projectConfigDefaults = {
|
|
137
|
+
sourceOfTruth: {
|
|
138
|
+
type: "hosted"
|
|
139
|
+
}
|
|
140
|
+
};
|
|
119
141
|
var branchConfigDefaults = {};
|
|
120
142
|
var environmentConfigDefaults = {};
|
|
121
143
|
var organizationConfigDefaults = {
|
|
@@ -169,7 +191,8 @@ var organizationConfigDefaults = {
|
|
|
169
191
|
emails: {
|
|
170
192
|
server: {
|
|
171
193
|
isShared: true
|
|
172
|
-
}
|
|
194
|
+
},
|
|
195
|
+
theme: "default-light"
|
|
173
196
|
}
|
|
174
197
|
};
|
|
175
198
|
function applyDefaults(defaults, config) {
|