@hexclave/shared 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/ai/llms/llms.d.ts +17 -0
  2. package/dist/ai/llms/llms.d.ts.map +1 -0
  3. package/dist/ai/llms/llms.js +36 -0
  4. package/dist/ai/llms/llms.js.map +1 -0
  5. package/dist/ai/unified-prompts/reminders.js +2 -2
  6. package/dist/ai/unified-prompts/reminders.js.map +1 -1
  7. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  8. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +3 -1
  9. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  10. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +7 -1
  11. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  12. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +6 -5
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +172 -0
  15. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
  16. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +280 -0
  17. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
  18. package/dist/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
  19. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  20. package/dist/ai/unified-prompts/skill-site-prompt.js +36 -32
  21. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  22. package/dist/config/schema-fuzzer.test.js +1 -0
  23. package/dist/config/schema-fuzzer.test.js.map +1 -1
  24. package/dist/config/schema.d.ts +201 -197
  25. package/dist/config/schema.d.ts.map +1 -1
  26. package/dist/config/schema.js +6 -0
  27. package/dist/config/schema.js.map +1 -1
  28. package/dist/config-authoring.d.ts +5 -1
  29. package/dist/config-authoring.d.ts.map +1 -1
  30. package/dist/config-authoring.js +5 -0
  31. package/dist/config-authoring.js.map +1 -1
  32. package/dist/config-rendering.d.ts +6 -6
  33. package/dist/config-rendering.d.ts.map +1 -1
  34. package/dist/config-rendering.js +25 -17
  35. package/dist/config-rendering.js.map +1 -1
  36. package/dist/esm/ai/llms/llms.d.ts +17 -0
  37. package/dist/esm/ai/llms/llms.d.ts.map +1 -0
  38. package/dist/esm/ai/llms/llms.js +30 -0
  39. package/dist/esm/ai/llms/llms.js.map +1 -0
  40. package/dist/esm/ai/unified-prompts/reminders.js +2 -2
  41. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  42. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  43. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +3 -1
  44. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  45. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +7 -1
  46. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  47. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +4 -4
  48. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  49. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +173 -0
  50. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
  51. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +279 -0
  52. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
  53. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
  54. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  55. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +36 -33
  56. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  57. package/dist/esm/config/schema-fuzzer.test.js +1 -0
  58. package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
  59. package/dist/esm/config/schema.d.ts +201 -197
  60. package/dist/esm/config/schema.d.ts.map +1 -1
  61. package/dist/esm/config/schema.js +6 -0
  62. package/dist/esm/config/schema.js.map +1 -1
  63. package/dist/esm/config-authoring.d.ts +5 -1
  64. package/dist/esm/config-authoring.d.ts.map +1 -1
  65. package/dist/esm/config-authoring.js +5 -1
  66. package/dist/esm/config-authoring.js.map +1 -1
  67. package/dist/esm/config-rendering.d.ts +6 -6
  68. package/dist/esm/config-rendering.d.ts.map +1 -1
  69. package/dist/esm/config-rendering.js +25 -17
  70. package/dist/esm/config-rendering.js.map +1 -1
  71. package/dist/esm/hooks/use-hover.d.ts +1 -1
  72. package/dist/esm/hooks/use-hover.d.ts.map +1 -1
  73. package/dist/esm/hooks/use-hover.js.map +1 -1
  74. package/dist/esm/interface/admin-interface.js +1 -1
  75. package/dist/esm/interface/admin-metrics.d.ts +8 -8
  76. package/dist/esm/interface/client-interface.js +1 -1
  77. package/dist/esm/interface/conversations.d.ts +32 -32
  78. package/dist/esm/interface/crud/current-user.d.ts +8 -8
  79. package/dist/esm/interface/crud/email-outbox.d.ts +218 -218
  80. package/dist/esm/interface/crud/products.d.ts +20 -20
  81. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  82. package/dist/esm/interface/crud/project-api-keys.d.ts +3 -3
  83. package/dist/esm/interface/crud/projects.d.ts +36 -36
  84. package/dist/esm/interface/crud/team-member-profiles.d.ts +16 -16
  85. package/dist/esm/interface/crud/transactions.d.ts +23 -23
  86. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  87. package/dist/esm/interface/crud/users.d.ts +14 -14
  88. package/dist/esm/interface/server-interface.js +1 -1
  89. package/dist/esm/interface/webhooks.d.ts +4 -4
  90. package/dist/esm/known-errors.d.ts +7 -7
  91. package/dist/esm/schema-fields.d.ts +7 -6
  92. package/dist/esm/schema-fields.d.ts.map +1 -1
  93. package/dist/esm/schema-fields.js +5 -1
  94. package/dist/esm/schema-fields.js.map +1 -1
  95. package/dist/esm/stack-config-file.js.map +1 -1
  96. package/dist/esm/utils/cloud-hosts.d.ts +42 -0
  97. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -0
  98. package/dist/esm/utils/cloud-hosts.js +92 -0
  99. package/dist/esm/utils/cloud-hosts.js.map +1 -0
  100. package/dist/esm/utils/errors.d.ts +9 -2
  101. package/dist/esm/utils/errors.d.ts.map +1 -1
  102. package/dist/esm/utils/errors.js +16 -5
  103. package/dist/esm/utils/errors.js.map +1 -1
  104. package/dist/esm/utils/promises.js +1 -1
  105. package/dist/esm/utils/react.d.ts.map +1 -1
  106. package/dist/esm/utils/react.js +4 -4
  107. package/dist/esm/utils/react.js.map +1 -1
  108. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  109. package/dist/esm/utils/redirect-urls.js +3 -3
  110. package/dist/esm/utils/redirect-urls.js.map +1 -1
  111. package/dist/esm/utils/urls.d.ts.map +1 -1
  112. package/dist/esm/utils/urls.js +2 -2
  113. package/dist/esm/utils/urls.js.map +1 -1
  114. package/dist/hooks/use-hover.d.ts +1 -1
  115. package/dist/hooks/use-hover.d.ts.map +1 -1
  116. package/dist/hooks/use-hover.js.map +1 -1
  117. package/dist/{index-D9ysacya.d.ts → index-fQbeILq7.d.ts} +1 -1
  118. package/dist/{index-D9ysacya.d.ts.map → index-fQbeILq7.d.ts.map} +1 -1
  119. package/dist/interface/admin-interface.js +1 -1
  120. package/dist/interface/admin-metrics.d.ts +8 -8
  121. package/dist/interface/client-interface.d.ts +1 -1
  122. package/dist/interface/client-interface.js +1 -1
  123. package/dist/interface/conversations.d.ts +32 -32
  124. package/dist/interface/crud/current-user.d.ts +8 -8
  125. package/dist/interface/crud/email-outbox.d.ts +218 -218
  126. package/dist/interface/crud/products.d.ts +20 -20
  127. package/dist/interface/crud/products.d.ts.map +1 -1
  128. package/dist/interface/crud/project-api-keys.d.ts +3 -3
  129. package/dist/interface/crud/projects.d.ts +36 -36
  130. package/dist/interface/crud/team-member-profiles.d.ts +16 -16
  131. package/dist/interface/crud/transactions.d.ts +23 -23
  132. package/dist/interface/crud/transactions.d.ts.map +1 -1
  133. package/dist/interface/crud/users.d.ts +14 -14
  134. package/dist/interface/server-interface.js +1 -1
  135. package/dist/interface/webhooks.d.ts +4 -4
  136. package/dist/known-errors.d.ts +7 -7
  137. package/dist/schema-fields.d.ts +7 -6
  138. package/dist/schema-fields.d.ts.map +1 -1
  139. package/dist/schema-fields.js +5 -0
  140. package/dist/schema-fields.js.map +1 -1
  141. package/dist/stack-config-file.js.map +1 -1
  142. package/dist/utils/cloud-hosts.d.ts +42 -0
  143. package/dist/utils/cloud-hosts.d.ts.map +1 -0
  144. package/dist/utils/cloud-hosts.js +97 -0
  145. package/dist/utils/cloud-hosts.js.map +1 -0
  146. package/dist/utils/errors.d.ts +9 -2
  147. package/dist/utils/errors.d.ts.map +1 -1
  148. package/dist/utils/errors.js +16 -4
  149. package/dist/utils/errors.js.map +1 -1
  150. package/dist/utils/passkey.d.ts +1 -1
  151. package/dist/utils/promises.js +1 -1
  152. package/dist/utils/react.d.ts.map +1 -1
  153. package/dist/utils/react.js +4 -4
  154. package/dist/utils/react.js.map +1 -1
  155. package/dist/utils/redirect-urls.d.ts.map +1 -1
  156. package/dist/utils/redirect-urls.js +3 -3
  157. package/dist/utils/redirect-urls.js.map +1 -1
  158. package/dist/utils/urls.d.ts.map +1 -1
  159. package/dist/utils/urls.js +2 -2
  160. package/dist/utils/urls.js.map +1 -1
  161. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema-fuzzer.test.js","names":[],"sources":["../../../src/config/schema-fuzzer.test.ts"],"sourcesContent":["import { ALL_APPS } from \"../apps/apps-config\";\nimport { SUPPORTED_CURRENCIES } from \"../utils/currency-constants\";\nimport { HexclaveAssertionError } from \"../utils/errors\";\nimport { getOrUndefined, isObjectLike, set, typedEntries, typedFromEntries } from \"../utils/objects\";\nimport { nicify } from \"../utils/strings\";\nimport { normalize, override } from \"./format\";\nimport { BranchConfigNormalizedOverride, EnvironmentConfigNormalizedOverride, OrganizationConfigNormalizedOverride, ProjectConfigNormalizedOverride, applyBranchDefaults, applyEnvironmentDefaults, applyOrganizationDefaults, applyProjectDefaults, assertNoConfigOverrideErrors, branchConfigSchema, environmentConfigSchema, migrateConfigOverride, organizationConfigSchema, projectConfigSchema, sanitizeBranchConfig, sanitizeEnvironmentConfig, sanitizeOrganizationConfig, sanitizeProjectConfig } from \"./schema\";\n\ntype FuzzerConfig<T> = ReadonlyArray<T extends object ? ([T] extends [any[]] ? { readonly [K in keyof T]: FuzzerConfig<T[K]> } : Required<{\n [K in keyof T]: FuzzerConfig<T[K]>;\n}> & Record<string, FuzzerConfig<any>>) : T>;\n\nconst projectSchemaFuzzerConfig = [{\n sourceOfTruth: [{\n type: [\"hosted\"],\n }],\n project: [{\n requirePublishableClientKey: [true, false],\n }],\n}] satisfies FuzzerConfig<ProjectConfigNormalizedOverride>;\n\nconst branchSchemaFuzzerConfig = [{\n apiKeys: [{\n enabled: [{\n team: [true, false],\n user: [true, false],\n }],\n }],\n auth: [{\n allowSignUp: [true, false],\n password: [{\n allowSignIn: [true, false],\n }],\n otp: [{\n allowSignIn: [true, false],\n }],\n passkey: [{\n allowSignIn: [true, false],\n }],\n oauth: [{\n accountMergeStrategy: [\"link_method\", \"raise_error\", \"allow_duplicates\"],\n providers: [{\n \"google\": [{\n type: [\"google\", \"github\", \"x\"] as const,\n allowSignIn: [true, false],\n allowConnectedAccounts: [true, false],\n }],\n }],\n }],\n signUpRules: [{\n \"some-rule-id\": [{\n enabled: [true, false],\n displayName: [\"Block Test Emails\", \"Allow Only Company Domain\"],\n priority: [0, 1, 100],\n condition: ['email.endsWith(\"@test.com\")', 'emailDomain == \"company.com\"'],\n action: [{\n type: [\"allow\", \"reject\", \"restrict\", \"log\"] as const,\n message: [\"\", \"Sign up is not allowed for this email\"],\n }],\n }],\n }],\n signUpRulesDefaultAction: [\"allow\", \"reject\"],\n }],\n dbSync: [{\n externalDatabases: [{\n \"some-external-db-id\": [{\n type: [\"postgres\"] as const,\n connectionString: [\n \"postgres://user:password@host:port/database\",\n \"some-connection-string\",\n ],\n }],\n }],\n }],\n dataVault: [{\n stores: [{\n \"some-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n \"some-other-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n }],\n }],\n payments: [{\n blockNewPurchases: [false, true],\n autoPay: [{\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n productLines: [{\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n customerType: [\"user\", \"team\", \"custom\"] as const,\n }],\n }],\n catalogs: [{ // ensure migration works\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n }],\n }],\n groups: [{ // ensure migration works\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n }],\n }],\n items: [{\n \"some-item-id\": [{\n customerType: [\"user\", \"team\", \"custom\"] as const,\n displayName: [\"Some Item\", \"Some Other Item\"],\n }],\n }],\n products: [{\n \"some-product-id\": [{\n displayName: [\"Some Product\", \"Some Other Product\"],\n customerType: [\"user\", \"team\", \"custom\"] as const,\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n stackable: [true, false],\n productLineId: [\"some-product-line-id\", \"some-other-product-line-id\"],\n catalogId: [\"some-product-line-id\", \"some-other-product-line-id\"], // ensure migration works\n groupId: [\"some-product-line-id\", \"some-other-product-line-id\"], // ensure migration works\n isAddOnTo: [false, { \"some-product-id\": [true], \"some-other-product-id\": [true] }] as const,\n prices: [{\n \"some-price-id\": [{\n ...typedFromEntries(SUPPORTED_CURRENCIES.map(currency => [currency.code, [\"100_00\", \"not a number\", \"Infinity\", \"0\"]])),\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n }],\n includedItems: [{\n \"some-item-id\": [{\n quantity: [0, 1, -3, 100, 0.333, Infinity],\n repeat: [\"never\", [[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n expires: [\"never\", \"when-purchase-expires\", \"when-repeated\"] as const,\n }],\n }],\n }],\n }],\n }],\n emails: [{\n themes: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n displayName: [\"Some Theme\", \"Some Other Theme\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n selectedThemeId: [\"some-theme-id\", \"some-other-theme-id\"],\n templates: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n themeId: [\"some-theme-id\", \"some-other-theme-id\"],\n displayName: [\"Some Template\", \"Some Other Template\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n }],\n teams: [{\n createPersonalTeamOnSignUp: [true, false],\n allowClientTeamCreation: [true, false],\n }],\n users: [{\n allowClientUserDeletion: [true, false],\n }],\n rbac: [{\n permissions: [{\n \"some_permission_id\": [{\n containedPermissionIds: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n description: [\"Some Permission\", \"Some Other Permission\"],\n scope: [\"team\", \"project\"] as const,\n }],\n }],\n defaultPermissions: [{\n teamCreator: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n teamMember: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n signUp: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n }],\n }],\n domains: [{}],\n apps: [{\n installed: [typedFromEntries(typedEntries(ALL_APPS).map(([key, value]) => [key, [{\n enabled: [true, false],\n }]]))],\n }],\n onboarding: [{\n requireEmailVerification: [true, false],\n }],\n}] satisfies FuzzerConfig<BranchConfigNormalizedOverride>;\n\nconst environmentSchemaFuzzerConfig = [{\n ...branchSchemaFuzzerConfig[0],\n auth: [{\n ...branchSchemaFuzzerConfig[0].auth[0],\n oauth: [{\n ...branchSchemaFuzzerConfig[0].auth[0].oauth[0],\n providers: [typedFromEntries(typedEntries(branchSchemaFuzzerConfig[0].auth[0].oauth[0].providers[0]).map(([key, value]) => [key, [{\n ...value[0],\n isShared: [true, false],\n clientId: [\"some-client-id\"],\n clientSecret: [\"some-client-secret\"],\n facebookConfigId: [\"some-facebook-config-id\"],\n microsoftTenantId: [\"some-microsoft-tenant-id\"],\n appleBundles: [{ \"some-bundle-id\": [{ bundleId: [\"com.example.app\"] }] }],\n }]]))] as const,\n }],\n }],\n domains: [{\n allowLocalhost: [true, false],\n trustedDomains: [{\n \"some-domain-id\": [{\n baseUrl: [\"https://example.com/something-here\"],\n handlerPath: [\"/something-here\"],\n }],\n }],\n }],\n emails: [{\n ...branchSchemaFuzzerConfig[0].emails[0],\n server: [{\n isShared: [true, false],\n provider: [\"resend\", \"smtp\", \"managed\"] as const,\n host: [\"example.com\", \"://super weird host that's not valid\"],\n port: [1234, 0.12543, -100, Infinity],\n username: [\"some-username\", \"some username with a space\"],\n password: [\"some-password\", \"some password with a space\"],\n senderName: [\"Some Sender\"],\n senderEmail: [\"some-sender@example.com\", \"some invalid email\"],\n managedSubdomain: [\"mail.example.com\", \"invalid subdomain\"],\n managedSenderLocalPart: [\"noreply\", \"some invalid local part\"],\n }],\n }],\n payments: [{\n ...branchSchemaFuzzerConfig[0].payments[0],\n testMode: [false, true],\n }],\n analytics: [{\n queryFolders: [{\n \"some-folder-id\": [{\n displayName: [\"Some Folder\", \"Some Other Folder\"],\n sortOrder: [0, 1, 10, -5],\n queries: [{\n \"some-query-id\": [{\n displayName: [\"Some Query\", \"Some Other Query\"],\n sqlQuery: [\"\", \"SELECT * FROM events\", \"SELECT * FROM users\"],\n description: [\"\", \"A query description\", \"Another description\"],\n }],\n }],\n }],\n }],\n }],\n customDashboards: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n displayName: [\"My Dashboard\", \"User Growth Dashboard\"],\n tsxSource: [\"\", \"function Dashboard() { return <div>Hello</div>; }\"],\n }],\n }],\n}] satisfies FuzzerConfig<EnvironmentConfigNormalizedOverride>;\n\nconst organizationSchemaFuzzerConfig = environmentSchemaFuzzerConfig satisfies FuzzerConfig<OrganizationConfigNormalizedOverride>;\n\nfunction setDeep<T>(obj: T, path: string[], value: any) {\n if (!isObjectLike(obj)) return obj;\n\n if (path.length === 0) {\n throw new Error(\"Path is empty\");\n } else if (path.length === 1) {\n set(obj as any, path[0], value);\n } else {\n const [key, ...rest] = path;\n setDeep(getOrUndefined(obj as any, key), rest, value);\n }\n}\n\nfunction createFuzzerInput<T>(config: FuzzerConfig<T>, progress: number): T {\n progress = Math.min(1, 2 * progress);\n const createShouldRandom = (strength: number) => {\n const chance = Math.random() * strength * 1.2 - 0.1;\n return () => Math.random() < chance;\n };\n const createShouldObjectDependent = (strength: number) => {\n const objectChance = Math.random() * strength * 1.2 - 0.1;\n const primitiveChance = Math.random() * strength * 1.2 - 0.1;\n return (v: any) => Math.random() * Math.random() < (isObjectLike(v) ? objectChance : primitiveChance);\n };\n\n const shouldKeep = createShouldObjectDependent(progress * 1);\n const shouldMakeNested = createShouldObjectDependent(1.25);\n const shouldNull = createShouldRandom(0.25);\n\n let res: any;\n const recurse = <U>(outputPath: string[], config: FuzzerConfig<U>, forceNested: boolean, forceNonNull: boolean) => {\n let subConfig: any = config[Math.floor(Math.random() * config.length)];\n const originalValue = isObjectLike(subConfig) ? (Array.isArray(subConfig) ? [] : {}) : subConfig;\n\n const newValue = forceNonNull || !shouldNull() ? originalValue : null;\n const newOutputPath = forceNested || shouldMakeNested(originalValue) || outputPath.length === 0 ? outputPath : [outputPath.join(\".\")];\n if (outputPath.length === 0) {\n res = newValue;\n } else {\n if (forceNested || shouldKeep(originalValue)) {\n setDeep(res, newOutputPath, newValue);\n }\n }\n if (isObjectLike(subConfig)) {\n for (const [key, newValue] of typedEntries(subConfig)) {\n recurse([...newOutputPath, key], newValue, Array.isArray(subConfig), Array.isArray(subConfig));\n }\n }\n };\n recurse<T>([], config, false, true);\n return res;\n}\n\nimport.meta.vitest?.test(\"fuzz schemas\", async ({ expect }) => {\n const totalIterations = process.env.CI ? 1000 : 200;\n for (let i = 0; i < totalIterations; i++) {\n const projectInput = createFuzzerInput<ProjectConfigNormalizedOverride>(projectSchemaFuzzerConfig, i / totalIterations);\n const branchInput = createFuzzerInput<BranchConfigNormalizedOverride>(branchSchemaFuzzerConfig, i / totalIterations);\n const environmentInput = createFuzzerInput<EnvironmentConfigNormalizedOverride>(environmentSchemaFuzzerConfig, i / totalIterations);\n const organizationInput = createFuzzerInput<OrganizationConfigNormalizedOverride>(organizationSchemaFuzzerConfig, i / totalIterations);\n\n try {\n const projectMigrated = migrateConfigOverride(\"project\", projectInput);\n await assertNoConfigOverrideErrors(projectConfigSchema, projectMigrated);\n const projectOverridden = override({}, projectMigrated);\n await sanitizeProjectConfig(normalize(applyProjectDefaults(projectOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const branchMigrated = migrateConfigOverride(\"branch\", branchInput);\n await assertNoConfigOverrideErrors(branchConfigSchema, branchMigrated);\n const branchOverridden = override(projectOverridden, branchMigrated);\n await sanitizeBranchConfig(normalize(applyBranchDefaults(branchOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const environmentMigrated = migrateConfigOverride(\"environment\", environmentInput);\n await assertNoConfigOverrideErrors(environmentConfigSchema, environmentMigrated);\n const environmentOverridden = override(branchOverridden, environmentMigrated);\n await sanitizeEnvironmentConfig(normalize(applyEnvironmentDefaults(environmentOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const organizationMigrated = migrateConfigOverride(\"organization\", organizationInput);\n await assertNoConfigOverrideErrors(organizationConfigSchema, organizationMigrated);\n const organizationOverridden = override(environmentOverridden, organizationMigrated);\n await sanitizeOrganizationConfig(normalize(applyOrganizationDefaults(organizationOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n } catch (e) {\n const data = {\n cause: e,\n inputs: {\n projectInput,\n branchInput,\n environmentInput,\n organizationInput,\n },\n } as const;\n console.error(\"Failed to fuzz schema in iteration ${i}/${totalIterations}!\", nicify(data));\n throw new HexclaveAssertionError(`Error in iteration ${i}/${totalIterations} of schema fuzz: ${e}`, { cause: e });\n }\n }\n});\n\nimport.meta.vitest?.test(\"rejects include-by-default product prices in config overrides\", async ({ expect }) => {\n await expect(assertNoConfigOverrideErrors(branchConfigSchema, {\n \"payments.products.free.prices\": \"include-by-default\",\n })).rejects.toThrow(/payments\\.products\\.free\\.prices must not be one of the following values: include-by-default/);\n});\n"],"mappings":";;;;;;;;;AAYA,MAAM,4BAA4B,CAAC;CACjC,eAAe,CAAC,EACd,MAAM,CAAC,SAAS,EACjB,CAAC;CACF,SAAS,CAAC,EACR,6BAA6B,CAAC,MAAM,MAAM,EAC3C,CAAC;CACH,CAAC;AAEF,MAAM,2BAA2B,CAAC;CAChC,SAAS,CAAC,EACR,SAAS,CAAC;EACR,MAAM,CAAC,MAAM,MAAM;EACnB,MAAM,CAAC,MAAM,MAAM;EACpB,CAAC,EACH,CAAC;CACF,MAAM,CAAC;EACL,aAAa,CAAC,MAAM,MAAM;EAC1B,UAAU,CAAC,EACT,aAAa,CAAC,MAAM,MAAM,EAC3B,CAAC;EACF,KAAK,CAAC,EACJ,aAAa,CAAC,MAAM,MAAM,EAC3B,CAAC;EACF,SAAS,CAAC,EACR,aAAa,CAAC,MAAM,MAAM,EAC3B,CAAC;EACF,OAAO,CAAC;GACN,sBAAsB;IAAC;IAAe;IAAe;IAAmB;GACxE,WAAW,CAAC,EACV,UAAU,CAAC;IACT,MAAM;KAAC;KAAU;KAAU;KAAI;IAC/B,aAAa,CAAC,MAAM,MAAM;IAC1B,wBAAwB,CAAC,MAAM,MAAM;IACtC,CAAC,EACH,CAAC;GACH,CAAC;EACF,aAAa,CAAC,EACZ,gBAAgB,CAAC;GACf,SAAS,CAAC,MAAM,MAAM;GACtB,aAAa,CAAC,qBAAqB,4BAA4B;GAC/D,UAAU;IAAC;IAAG;IAAG;IAAI;GACrB,WAAW,CAAC,iCAA+B,iCAA+B;GAC1E,QAAQ,CAAC;IACP,MAAM;KAAC;KAAS;KAAU;KAAY;KAAM;IAC5C,SAAS,CAAC,IAAI,wCAAwC;IACvD,CAAC;GACH,CAAC,EACH,CAAC;EACF,0BAA0B,CAAC,SAAS,SAAS;EAC9C,CAAC;CACF,QAAQ,CAAC,EACP,mBAAmB,CAAC,EAClB,uBAAuB,CAAC;EACtB,MAAM,CAAC,WAAW;EAClB,kBAAkB,CAChB,+CACA,yBACD;EACF,CAAC,EACH,CAAC,EACH,CAAC;CACF,WAAW,CAAC,EACV,QAAQ,CAAC;EACP,iBAAiB,CAAC,EAChB,aAAa,CAAC,cAAc,mBAAmB,EAChD,CAAC;EACF,uBAAuB,CAAC,EACtB,aAAa,CAAC,cAAc,mBAAmB,EAChD,CAAC;EACH,CAAC,EACH,CAAC;CACF,UAAU,CAAC;EACT,mBAAmB,CAAC,OAAO,KAAK;EAChC,SAAS,CAAC,EACR,UAAU,CAAC,CAAC;GAAC;GAAG;GAAG;GAAI;GAAK;GAAO;GAAS,EAAE;GAAC;GAAO;GAAQ;GAAS;GAAO,CAAC,CAAC,EACjF,CAAC;EACF,cAAc,CAAC,EACb,wBAAwB,CAAC;GACvB,aAAa,CAAC,qBAAqB,0BAA0B;GAC7D,cAAc;IAAC;IAAQ;IAAQ;IAAS;GACzC,CAAC,EACH,CAAC;EACF,UAAU,CAAC,EACT,wBAAwB,CAAC,EACvB,aAAa,CAAC,qBAAqB,0BAA0B,EAC9D,CAAC,EACH,CAAC;EACF,QAAQ,CAAC,EACP,wBAAwB,CAAC,EACvB,aAAa,CAAC,qBAAqB,0BAA0B,EAC9D,CAAC,EACH,CAAC;EACF,OAAO,CAAC,EACN,gBAAgB,CAAC;GACf,cAAc;IAAC;IAAQ;IAAQ;IAAS;GACxC,aAAa,CAAC,aAAa,kBAAkB;GAC9C,CAAC,EACH,CAAC;EACF,UAAU,CAAC,EACT,mBAAmB,CAAC;GAClB,aAAa,CAAC,gBAAgB,qBAAqB;GACnD,cAAc;IAAC;IAAQ;IAAQ;IAAS;GACxC,WAAW,CAAC,CAAC;IAAC;IAAG;IAAG;IAAI;IAAK;IAAO;IAAS,EAAE;IAAC;IAAO;IAAQ;IAAS;IAAO,CAAC,CAAC;GACjF,YAAY,CAAC,MAAM,MAAM;GACzB,WAAW,CAAC,MAAM,MAAM;GACxB,eAAe,CAAC,wBAAwB,6BAA6B;GACrE,WAAW,CAAC,wBAAwB,6BAA6B;GACjE,SAAS,CAAC,wBAAwB,6BAA6B;GAC/D,WAAW,CAAC,OAAO;IAAE,mBAAmB,CAAC,KAAK;IAAE,yBAAyB,CAAC,KAAK;IAAE,CAAC;GAClF,QAAQ,CAAC,EACP,iBAAiB,CAAC;IAChB,GAAG,iBAAiB,qBAAqB,KAAI,aAAY,CAAC,SAAS,MAAM;KAAC;KAAU;KAAgB;KAAY;KAAI,CAAC,CAAC,CAAC;IACvH,UAAU,CAAC,CAAC;KAAC;KAAG;KAAG;KAAI;KAAK;KAAO;KAAS,EAAE;KAAC;KAAO;KAAQ;KAAS;KAAO,CAAC,CAAC;IAChF,YAAY,CAAC,MAAM,MAAM;IACzB,WAAW,CAAC,CAAC;KAAC;KAAG;KAAG;KAAI;KAAK;KAAO;KAAS,EAAE;KAAC;KAAO;KAAQ;KAAS;KAAO,CAAC,CAAC;IAClF,CAAC,EACH,CAAC;GACF,eAAe,CAAC,EACd,gBAAgB,CAAC;IACf,UAAU;KAAC;KAAG;KAAG;KAAI;KAAK;KAAO;KAAS;IAC1C,QAAQ,CAAC,SAAS,CAAC;KAAC;KAAG;KAAG;KAAI;KAAK;KAAO;KAAS,EAAE;KAAC;KAAO;KAAQ;KAAS;KAAO,CAAC,CAAC;IACvF,SAAS;KAAC;KAAS;KAAyB;KAAgB;IAC7D,CAAC,EACH,CAAC;GACH,CAAC,EACH,CAAC;EACH,CAAC;CACF,QAAQ,CAAC;EACP,QAAQ,CAAC,EACP,wCAAwC,CAAC;GACvC,aAAa,CAAC,cAAc,mBAAmB;GAC/C,WAAW,CAAC,IAAI,8BAA8B;GAC/C,CAAC,EACH,CAAC;EACF,iBAAiB,CAAC,iBAAiB,sBAAsB;EACzD,WAAW,CAAC,EACV,wCAAwC,CAAC;GACvC,SAAS,CAAC,iBAAiB,sBAAsB;GACjD,aAAa,CAAC,iBAAiB,sBAAsB;GACrD,WAAW,CAAC,IAAI,8BAA8B;GAC/C,CAAC,EACH,CAAC;EACH,CAAC;CACF,OAAO,CAAC;EACN,4BAA4B,CAAC,MAAM,MAAM;EACzC,yBAAyB,CAAC,MAAM,MAAM;EACvC,CAAC;CACF,OAAO,CAAC,EACN,yBAAyB,CAAC,MAAM,MAAM,EACvC,CAAC;CACF,MAAM,CAAC;EACL,aAAa,CAAC,EACZ,sBAAsB,CAAC;GACrB,wBAAwB,CAAC;IACvB,sBAAsB,CAAC,KAAK;IAC5B,6BAA6B,CAAC,KAAK;IACpC,CAAC;GACF,aAAa,CAAC,mBAAmB,wBAAwB;GACzD,OAAO,CAAC,QAAQ,UAAU;GAC3B,CAAC,EACH,CAAC;EACF,oBAAoB,CAAC;GACnB,aAAa,CAAC;IACZ,sBAAsB,CAAC,KAAK;IAC5B,6BAA6B,CAAC,KAAK;IACpC,CAAC;GACF,YAAY,CAAC;IACX,sBAAsB,CAAC,KAAK;IAC5B,6BAA6B,CAAC,KAAK;IACpC,CAAC;GACF,QAAQ,CAAC;IACP,sBAAsB,CAAC,KAAK;IAC5B,6BAA6B,CAAC,KAAK;IACpC,CAAC;GACH,CAAC;EACH,CAAC;CACF,SAAS,CAAC,EAAE,CAAC;CACb,MAAM,CAAC,EACL,WAAW,CAAC,iBAAiB,aAAa,SAAS,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,EAC/E,SAAS,CAAC,MAAM,MAAM,EACvB,CAAC,CAAC,CAAC,CAAC,CAAC,EACP,CAAC;CACF,YAAY,CAAC,EACX,0BAA0B,CAAC,MAAM,MAAM,EACxC,CAAC;CACH,CAAC;AAEF,MAAM,gCAAgC,CAAC;CACrC,GAAG,yBAAyB;CAC5B,MAAM,CAAC;EACL,GAAG,yBAAyB,GAAG,KAAK;EACpC,OAAO,CAAC;GACN,GAAG,yBAAyB,GAAG,KAAK,GAAG,MAAM;GAC7C,WAAW,CAAC,iBAAiB,aAAa,yBAAyB,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC;IAChI,GAAG,MAAM;IACT,UAAU,CAAC,MAAM,MAAM;IACvB,UAAU,CAAC,iBAAiB;IAC5B,cAAc,CAAC,qBAAqB;IACpC,kBAAkB,CAAC,0BAA0B;IAC7C,mBAAmB,CAAC,2BAA2B;IAC/C,cAAc,CAAC,EAAE,kBAAkB,CAAC,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC,CAAC,CAAC;GACP,CAAC;EACH,CAAC;CACF,SAAS,CAAC;EACR,gBAAgB,CAAC,MAAM,MAAM;EAC7B,gBAAgB,CAAC,EACf,kBAAkB,CAAC;GACjB,SAAS,CAAC,qCAAqC;GAC/C,aAAa,CAAC,kBAAkB;GACjC,CAAC,EACH,CAAC;EACH,CAAC;CACF,QAAQ,CAAC;EACP,GAAG,yBAAyB,GAAG,OAAO;EACtC,QAAQ,CAAC;GACP,UAAU,CAAC,MAAM,MAAM;GACvB,UAAU;IAAC;IAAU;IAAQ;IAAU;GACvC,MAAM,CAAC,eAAe,uCAAuC;GAC7D,MAAM;IAAC;IAAM;IAAS;IAAM;IAAS;GACrC,UAAU,CAAC,iBAAiB,6BAA6B;GACzD,UAAU,CAAC,iBAAiB,6BAA6B;GACzD,YAAY,CAAC,cAAc;GAC3B,aAAa,CAAC,2BAA2B,qBAAqB;GAC9D,kBAAkB,CAAC,oBAAoB,oBAAoB;GAC3D,wBAAwB,CAAC,WAAW,0BAA0B;GAC/D,CAAC;EACH,CAAC;CACF,UAAU,CAAC;EACT,GAAG,yBAAyB,GAAG,SAAS;EACxC,UAAU,CAAC,OAAO,KAAK;EACxB,CAAC;CACF,WAAW,CAAC,EACV,cAAc,CAAC,EACb,kBAAkB,CAAC;EACjB,aAAa,CAAC,eAAe,oBAAoB;EACjD,WAAW;GAAC;GAAG;GAAG;GAAI;GAAG;EACzB,SAAS,CAAC,EACR,iBAAiB,CAAC;GAChB,aAAa,CAAC,cAAc,mBAAmB;GAC/C,UAAU;IAAC;IAAI;IAAwB;IAAsB;GAC7D,aAAa;IAAC;IAAI;IAAuB;IAAsB;GAChE,CAAC,EACH,CAAC;EACH,CAAC,EACH,CAAC,EACH,CAAC;CACF,kBAAkB,CAAC,EACjB,wCAAwC,CAAC;EACvC,aAAa,CAAC,gBAAgB,wBAAwB;EACtD,WAAW,CAAC,IAAI,oDAAoD;EACrE,CAAC,EACH,CAAC;CACH,CAAC;AAEF,MAAM,iCAAiC;AAEvC,SAAS,QAAW,KAAQ,MAAgB,OAAY;AACtD,KAAI,CAAC,aAAa,IAAI,CAAE,QAAO;AAE/B,KAAI,KAAK,WAAW,EAClB,OAAM,IAAI,MAAM,gBAAgB;UACvB,KAAK,WAAW,EACzB,KAAI,KAAY,KAAK,IAAI,MAAM;MAC1B;EACL,MAAM,CAAC,KAAK,GAAG,QAAQ;AACvB,UAAQ,eAAe,KAAY,IAAI,EAAE,MAAM,MAAM;;;AAIzD,SAAS,kBAAqB,QAAyB,UAAqB;AAC1E,YAAW,KAAK,IAAI,GAAG,IAAI,SAAS;CACpC,MAAM,sBAAsB,aAAqB;EAC/C,MAAM,SAAS,KAAK,QAAQ,GAAG,WAAW,MAAM;AAChD,eAAa,KAAK,QAAQ,GAAG;;CAE/B,MAAM,+BAA+B,aAAqB;EACxD,MAAM,eAAe,KAAK,QAAQ,GAAG,WAAW,MAAM;EACtD,MAAM,kBAAkB,KAAK,QAAQ,GAAG,WAAW,MAAM;AACzD,UAAQ,MAAW,KAAK,QAAQ,GAAG,KAAK,QAAQ,IAAI,aAAa,EAAE,GAAG,eAAe;;CAGvF,MAAM,aAAa,4BAA4B,WAAW,EAAE;CAC5D,MAAM,mBAAmB,4BAA4B,KAAK;CAC1D,MAAM,aAAa,mBAAmB,IAAK;CAE3C,IAAI;CACJ,MAAM,WAAc,YAAsB,QAAyB,aAAsB,iBAA0B;EACjH,IAAI,YAAiB,OAAO,KAAK,MAAM,KAAK,QAAQ,GAAG,OAAO,OAAO;EACrE,MAAM,gBAAgB,aAAa,UAAU,GAAI,MAAM,QAAQ,UAAU,GAAG,EAAE,GAAG,EAAE,GAAI;EAEvF,MAAM,WAAW,gBAAgB,CAAC,YAAY,GAAG,gBAAgB;EACjE,MAAM,gBAAgB,eAAe,iBAAiB,cAAc,IAAI,WAAW,WAAW,IAAI,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC;AACrI,MAAI,WAAW,WAAW,EACxB,OAAM;WAEF,eAAe,WAAW,cAAc,CAC1C,SAAQ,KAAK,eAAe,SAAS;AAGzC,MAAI,aAAa,UAAU,CACzB,MAAK,MAAM,CAAC,KAAK,aAAa,aAAa,UAAU,CACnD,SAAQ,CAAC,GAAG,eAAe,IAAI,EAAE,UAAU,MAAM,QAAQ,UAAU,EAAE,MAAM,QAAQ,UAAU,CAAC;;AAIpG,SAAW,EAAE,EAAE,QAAQ,OAAO,KAAK;AACnC,QAAO;;CAGT,SAAW,KAAC,gBAAmB,OAAQ,EAAE,aAAS;CAChD,MAAM,kBAAkB,QAAQ,IAAI,KAAK,MAAO;AAChD,MAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,KAAK;EACxC,MAAM,eAAe,kBAAmD,2BAA2B,IAAI,gBAAgB;EACvH,MAAM,cAAc,kBAAkD,0BAA0B,IAAI,gBAAgB;EACpH,MAAM,mBAAmB,kBAAuD,+BAA+B,IAAI,gBAAgB;EACnI,MAAM,oBAAoB,kBAAwD,gCAAgC,IAAI,gBAAgB;AAEtI,MAAI;GACF,MAAM,kBAAkB,sBAAsB,WAAW,aAAa;AACtE,SAAM,6BAA6B,qBAAqB,gBAAgB;GACxE,MAAM,oBAAoB,SAAS,EAAE,EAAE,gBAAgB;AACvD,SAAM,sBAAsB,UAAU,qBAAqB,kBAAkB,EAAE,EAAE,oBAAoB,UAAU,CAAC,CAAQ;GAExH,MAAM,iBAAiB,sBAAsB,UAAU,YAAY;AACnE,SAAM,6BAA6B,oBAAoB,eAAe;GACtE,MAAM,mBAAmB,SAAS,mBAAmB,eAAe;AACpE,SAAM,qBAAqB,UAAU,oBAAoB,iBAAiB,EAAE,EAAE,oBAAoB,UAAU,CAAC,CAAQ;GAErH,MAAM,sBAAsB,sBAAsB,eAAe,iBAAiB;AAClF,SAAM,6BAA6B,yBAAyB,oBAAoB;GAChF,MAAM,wBAAwB,SAAS,kBAAkB,oBAAoB;AAC7E,SAAM,0BAA0B,UAAU,yBAAyB,sBAAsB,EAAE,EAAE,oBAAoB,UAAU,CAAC,CAAQ;GAEpI,MAAM,uBAAuB,sBAAsB,gBAAgB,kBAAkB;AACrF,SAAM,6BAA6B,0BAA0B,qBAAqB;AAElF,SAAM,2BAA2B,UAAU,0BADZ,SAAS,uBAAuB,qBAAqB,CACQ,EAAE,EAAE,oBAAoB,UAAU,CAAC,CAAQ;WAEhI,GAAG;GACV,MAAM,OAAO;IACX,OAAO;IACP,QAAQ;KACN;KACA;KACA;KACA;KACD;IACF;AACD,WAAQ,MAAM,+DAA+D,OAAO,KAAK,CAAC;AAC1F,SAAM,IAAI,uBAAuB,sBAAsB,EAAE,GAAG,gBAAgB,mBAAmB,KAAK,EAAE,OAAO,GAAG,CAAC;;;EAGrH;CAEF,SAAW,KAAC,iEAAkE,OAAU,EAAE,aAAS;AACjG,OAAM,OAAO,6BAA6B,oBAAoB,EAC5D,iCAAiC,sBAClC,CAAC,CAAC,CAAC,QAAQ,QAAQ,+FAA+F;EACnH"}
1
+ {"version":3,"file":"schema-fuzzer.test.js","names":[],"sources":["../../../src/config/schema-fuzzer.test.ts"],"sourcesContent":["import { ALL_APPS } from \"../apps/apps-config\";\nimport { SUPPORTED_CURRENCIES } from \"../utils/currency-constants\";\nimport { HexclaveAssertionError } from \"../utils/errors\";\nimport { getOrUndefined, isObjectLike, set, typedEntries, typedFromEntries } from \"../utils/objects\";\nimport { nicify } from \"../utils/strings\";\nimport { normalize, override } from \"./format\";\nimport { BranchConfigNormalizedOverride, EnvironmentConfigNormalizedOverride, OrganizationConfigNormalizedOverride, ProjectConfigNormalizedOverride, applyBranchDefaults, applyEnvironmentDefaults, applyOrganizationDefaults, applyProjectDefaults, assertNoConfigOverrideErrors, branchConfigSchema, environmentConfigSchema, migrateConfigOverride, organizationConfigSchema, projectConfigSchema, sanitizeBranchConfig, sanitizeEnvironmentConfig, sanitizeOrganizationConfig, sanitizeProjectConfig } from \"./schema\";\n\ntype FuzzerConfig<T> = ReadonlyArray<T extends object ? ([T] extends [any[]] ? { readonly [K in keyof T]: FuzzerConfig<T[K]> } : Required<{\n [K in keyof T]: FuzzerConfig<T[K]>;\n}> & Record<string, FuzzerConfig<any>>) : T>;\n\nconst projectSchemaFuzzerConfig = [{\n sourceOfTruth: [{\n type: [\"hosted\"],\n }],\n project: [{\n requirePublishableClientKey: [true, false],\n }],\n}] satisfies FuzzerConfig<ProjectConfigNormalizedOverride>;\n\nconst branchSchemaFuzzerConfig = [{\n apiKeys: [{\n enabled: [{\n team: [true, false],\n user: [true, false],\n }],\n }],\n auth: [{\n allowSignUp: [true, false],\n password: [{\n allowSignIn: [true, false],\n }],\n otp: [{\n allowSignIn: [true, false],\n }],\n passkey: [{\n allowSignIn: [true, false],\n }],\n oauth: [{\n accountMergeStrategy: [\"link_method\", \"raise_error\", \"allow_duplicates\"],\n providers: [{\n \"google\": [{\n type: [\"google\", \"github\", \"x\"] as const,\n allowSignIn: [true, false],\n allowConnectedAccounts: [true, false],\n }],\n }],\n }],\n signUpRules: [{\n \"some-rule-id\": [{\n enabled: [true, false],\n displayName: [\"Block Test Emails\", \"Allow Only Company Domain\"],\n priority: [0, 1, 100],\n condition: ['email.endsWith(\"@test.com\")', 'emailDomain == \"company.com\"'],\n action: [{\n type: [\"allow\", \"reject\", \"restrict\", \"log\"] as const,\n message: [\"\", \"Sign up is not allowed for this email\"],\n }],\n }],\n }],\n signUpRulesDefaultAction: [\"allow\", \"reject\"],\n }],\n dbSync: [{\n externalDatabases: [{\n \"some-external-db-id\": [{\n type: [\"postgres\"] as const,\n connectionString: [\n \"postgres://user:password@host:port/database\",\n \"some-connection-string\",\n ],\n }],\n }],\n }],\n dataVault: [{\n stores: [{\n \"some-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n \"some-other-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n }],\n }],\n payments: [{\n blockNewPurchases: [false, true],\n autoPay: [{\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n productLines: [{\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n customerType: [\"user\", \"team\", \"custom\"] as const,\n }],\n }],\n catalogs: [{ // ensure migration works\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n }],\n }],\n groups: [{ // ensure migration works\n \"some-product-line-id\": [{\n displayName: [\"Some Product Line\", \"Some Other Product Line\"],\n }],\n }],\n items: [{\n \"some-item-id\": [{\n customerType: [\"user\", \"team\", \"custom\"] as const,\n displayName: [\"Some Item\", \"Some Other Item\"],\n }],\n }],\n products: [{\n \"some-product-id\": [{\n displayName: [\"Some Product\", \"Some Other Product\"],\n customerType: [\"user\", \"team\", \"custom\"] as const,\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n stackable: [true, false],\n productLineId: [\"some-product-line-id\", \"some-other-product-line-id\"],\n catalogId: [\"some-product-line-id\", \"some-other-product-line-id\"], // ensure migration works\n groupId: [\"some-product-line-id\", \"some-other-product-line-id\"], // ensure migration works\n isAddOnTo: [false, { \"some-product-id\": [true], \"some-other-product-id\": [true] }] as const,\n prices: [{\n \"some-price-id\": [{\n ...typedFromEntries(SUPPORTED_CURRENCIES.map(currency => [currency.code, [\"100_00\", \"not a number\", \"Infinity\", \"0\"]])),\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n }],\n includedItems: [{\n \"some-item-id\": [{\n quantity: [0, 1, -3, 100, 0.333, Infinity],\n repeat: [\"never\", [[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n expires: [\"never\", \"when-purchase-expires\", \"when-repeated\"] as const,\n }],\n }],\n }],\n }],\n }],\n emails: [{\n themes: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n displayName: [\"Some Theme\", \"Some Other Theme\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n selectedThemeId: [\"some-theme-id\", \"some-other-theme-id\"],\n templates: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n themeId: [\"some-theme-id\", \"some-other-theme-id\"],\n displayName: [\"Some Template\", \"Some Other Template\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n }],\n teams: [{\n createPersonalTeamOnSignUp: [true, false],\n allowClientTeamCreation: [true, false],\n }],\n users: [{\n allowClientUserDeletion: [true, false],\n }],\n rbac: [{\n permissions: [{\n \"some_permission_id\": [{\n containedPermissionIds: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n description: [\"Some Permission\", \"Some Other Permission\"],\n scope: [\"team\", \"project\"] as const,\n }],\n }],\n defaultPermissions: [{\n teamCreator: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n teamMember: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n signUp: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n }],\n }],\n domains: [{}],\n apps: [{\n installed: [typedFromEntries(typedEntries(ALL_APPS).map(([key, value]) => [key, [{\n enabled: [true, false],\n }]]))],\n }],\n onboarding: [{\n requireEmailVerification: [true, false],\n }],\n}] satisfies FuzzerConfig<BranchConfigNormalizedOverride>;\n\nconst environmentSchemaFuzzerConfig = [{\n ...branchSchemaFuzzerConfig[0],\n auth: [{\n ...branchSchemaFuzzerConfig[0].auth[0],\n oauth: [{\n ...branchSchemaFuzzerConfig[0].auth[0].oauth[0],\n providers: [typedFromEntries(typedEntries(branchSchemaFuzzerConfig[0].auth[0].oauth[0].providers[0]).map(([key, value]) => [key, [{\n ...value[0],\n isShared: [true, false],\n clientId: [\"some-client-id\"],\n clientSecret: [\"some-client-secret\"],\n // Kept undefined: the schema forbids customCallbackUrl when isShared is\n // true, and the fuzzer randomizes each field independently so it cannot\n // honor that coupling. The accept path is covered by an e2e test.\n customCallbackUrl: [undefined] as (string | undefined)[],\n facebookConfigId: [\"some-facebook-config-id\"],\n microsoftTenantId: [\"some-microsoft-tenant-id\"],\n appleBundles: [{ \"some-bundle-id\": [{ bundleId: [\"com.example.app\"] }] }],\n }]]))] as const,\n }],\n }],\n domains: [{\n allowLocalhost: [true, false],\n trustedDomains: [{\n \"some-domain-id\": [{\n baseUrl: [\"https://example.com/something-here\"],\n handlerPath: [\"/something-here\"],\n }],\n }],\n }],\n emails: [{\n ...branchSchemaFuzzerConfig[0].emails[0],\n server: [{\n isShared: [true, false],\n provider: [\"resend\", \"smtp\", \"managed\"] as const,\n host: [\"example.com\", \"://super weird host that's not valid\"],\n port: [1234, 0.12543, -100, Infinity],\n username: [\"some-username\", \"some username with a space\"],\n password: [\"some-password\", \"some password with a space\"],\n senderName: [\"Some Sender\"],\n senderEmail: [\"some-sender@example.com\", \"some invalid email\"],\n managedSubdomain: [\"mail.example.com\", \"invalid subdomain\"],\n managedSenderLocalPart: [\"noreply\", \"some invalid local part\"],\n }],\n }],\n payments: [{\n ...branchSchemaFuzzerConfig[0].payments[0],\n testMode: [false, true],\n }],\n analytics: [{\n queryFolders: [{\n \"some-folder-id\": [{\n displayName: [\"Some Folder\", \"Some Other Folder\"],\n sortOrder: [0, 1, 10, -5],\n queries: [{\n \"some-query-id\": [{\n displayName: [\"Some Query\", \"Some Other Query\"],\n sqlQuery: [\"\", \"SELECT * FROM events\", \"SELECT * FROM users\"],\n description: [\"\", \"A query description\", \"Another description\"],\n }],\n }],\n }],\n }],\n }],\n customDashboards: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n displayName: [\"My Dashboard\", \"User Growth Dashboard\"],\n tsxSource: [\"\", \"function Dashboard() { return <div>Hello</div>; }\"],\n }],\n }],\n}] satisfies FuzzerConfig<EnvironmentConfigNormalizedOverride>;\n\nconst organizationSchemaFuzzerConfig = environmentSchemaFuzzerConfig satisfies FuzzerConfig<OrganizationConfigNormalizedOverride>;\n\nfunction setDeep<T>(obj: T, path: string[], value: any) {\n if (!isObjectLike(obj)) return obj;\n\n if (path.length === 0) {\n throw new Error(\"Path is empty\");\n } else if (path.length === 1) {\n set(obj as any, path[0], value);\n } else {\n const [key, ...rest] = path;\n setDeep(getOrUndefined(obj as any, key), rest, value);\n }\n}\n\nfunction createFuzzerInput<T>(config: FuzzerConfig<T>, progress: number): T {\n progress = Math.min(1, 2 * progress);\n const createShouldRandom = (strength: number) => {\n const chance = Math.random() * strength * 1.2 - 0.1;\n return () => Math.random() < chance;\n };\n const createShouldObjectDependent = (strength: number) => {\n const objectChance = Math.random() * strength * 1.2 - 0.1;\n const primitiveChance = Math.random() * strength * 1.2 - 0.1;\n return (v: any) => Math.random() * Math.random() < (isObjectLike(v) ? objectChance : primitiveChance);\n };\n\n const shouldKeep = createShouldObjectDependent(progress * 1);\n const shouldMakeNested = createShouldObjectDependent(1.25);\n const shouldNull = createShouldRandom(0.25);\n\n let res: any;\n const recurse = <U>(outputPath: string[], config: FuzzerConfig<U>, forceNested: boolean, forceNonNull: boolean) => {\n let subConfig: any = config[Math.floor(Math.random() * config.length)];\n const originalValue = isObjectLike(subConfig) ? (Array.isArray(subConfig) ? [] : {}) : subConfig;\n\n const newValue = forceNonNull || !shouldNull() ? originalValue : null;\n const newOutputPath = forceNested || shouldMakeNested(originalValue) || outputPath.length === 0 ? outputPath : [outputPath.join(\".\")];\n if (outputPath.length === 0) {\n res = newValue;\n } else {\n if (forceNested || shouldKeep(originalValue)) {\n setDeep(res, newOutputPath, newValue);\n }\n }\n if (isObjectLike(subConfig)) {\n for (const [key, newValue] of typedEntries(subConfig)) {\n recurse([...newOutputPath, key], newValue, Array.isArray(subConfig), Array.isArray(subConfig));\n }\n }\n };\n recurse<T>([], config, false, true);\n return res;\n}\n\nimport.meta.vitest?.test(\"fuzz schemas\", async ({ expect }) => {\n const totalIterations = process.env.CI ? 1000 : 200;\n for (let i = 0; i < totalIterations; i++) {\n const projectInput = createFuzzerInput<ProjectConfigNormalizedOverride>(projectSchemaFuzzerConfig, i / totalIterations);\n const branchInput = createFuzzerInput<BranchConfigNormalizedOverride>(branchSchemaFuzzerConfig, i / totalIterations);\n const environmentInput = createFuzzerInput<EnvironmentConfigNormalizedOverride>(environmentSchemaFuzzerConfig, i / totalIterations);\n const organizationInput = createFuzzerInput<OrganizationConfigNormalizedOverride>(organizationSchemaFuzzerConfig, i / totalIterations);\n\n try {\n const projectMigrated = migrateConfigOverride(\"project\", projectInput);\n await assertNoConfigOverrideErrors(projectConfigSchema, projectMigrated);\n const projectOverridden = override({}, projectMigrated);\n await sanitizeProjectConfig(normalize(applyProjectDefaults(projectOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const branchMigrated = migrateConfigOverride(\"branch\", branchInput);\n await assertNoConfigOverrideErrors(branchConfigSchema, branchMigrated);\n const branchOverridden = override(projectOverridden, branchMigrated);\n await sanitizeBranchConfig(normalize(applyBranchDefaults(branchOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const environmentMigrated = migrateConfigOverride(\"environment\", environmentInput);\n await assertNoConfigOverrideErrors(environmentConfigSchema, environmentMigrated);\n const environmentOverridden = override(branchOverridden, environmentMigrated);\n await sanitizeEnvironmentConfig(normalize(applyEnvironmentDefaults(environmentOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const organizationMigrated = migrateConfigOverride(\"organization\", organizationInput);\n await assertNoConfigOverrideErrors(organizationConfigSchema, organizationMigrated);\n const organizationOverridden = override(environmentOverridden, organizationMigrated);\n await sanitizeOrganizationConfig(normalize(applyOrganizationDefaults(organizationOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n } catch (e) {\n const data = {\n cause: e,\n inputs: {\n projectInput,\n branchInput,\n environmentInput,\n organizationInput,\n },\n } as const;\n console.error(\"Failed to fuzz schema in iteration ${i}/${totalIterations}!\", nicify(data));\n throw new HexclaveAssertionError(`Error in iteration ${i}/${totalIterations} of schema fuzz: ${e}`, { cause: e });\n }\n }\n});\n\nimport.meta.vitest?.test(\"rejects include-by-default product prices in config overrides\", async ({ expect }) => {\n await expect(assertNoConfigOverrideErrors(branchConfigSchema, {\n \"payments.products.free.prices\": \"include-by-default\",\n })).rejects.toThrow(/payments\\.products\\.free\\.prices must not be one of the following values: include-by-default/);\n});\n"],"mappings":"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"}