@hexclave/shared 1.0.0 → 1.0.1

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 (145) 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/docs-index.d.ts +7 -1
  8. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  9. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +6 -5
  10. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  11. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +172 -0
  12. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +280 -0
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
  15. package/dist/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
  16. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  17. package/dist/ai/unified-prompts/skill-site-prompt.js +36 -32
  18. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  19. package/dist/config/schema-fuzzer.test.js +1 -0
  20. package/dist/config/schema-fuzzer.test.js.map +1 -1
  21. package/dist/config/schema.d.ts +192 -188
  22. package/dist/config/schema.d.ts.map +1 -1
  23. package/dist/config/schema.js +6 -0
  24. package/dist/config/schema.js.map +1 -1
  25. package/dist/config-authoring.d.ts +5 -1
  26. package/dist/config-authoring.d.ts.map +1 -1
  27. package/dist/config-authoring.js +5 -0
  28. package/dist/config-authoring.js.map +1 -1
  29. package/dist/config-rendering.d.ts +6 -6
  30. package/dist/config-rendering.d.ts.map +1 -1
  31. package/dist/config-rendering.js +25 -17
  32. package/dist/config-rendering.js.map +1 -1
  33. package/dist/esm/ai/llms/llms.d.ts +17 -0
  34. package/dist/esm/ai/llms/llms.d.ts.map +1 -0
  35. package/dist/esm/ai/llms/llms.js +30 -0
  36. package/dist/esm/ai/llms/llms.js.map +1 -0
  37. package/dist/esm/ai/unified-prompts/reminders.js +2 -2
  38. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  39. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +7 -1
  40. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  41. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +4 -4
  42. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  43. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +173 -0
  44. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
  45. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +279 -0
  46. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
  47. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
  48. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  49. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +36 -33
  50. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  51. package/dist/esm/config/schema-fuzzer.test.js +1 -0
  52. package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
  53. package/dist/esm/config/schema.d.ts +192 -188
  54. package/dist/esm/config/schema.d.ts.map +1 -1
  55. package/dist/esm/config/schema.js +6 -0
  56. package/dist/esm/config/schema.js.map +1 -1
  57. package/dist/esm/config-authoring.d.ts +5 -1
  58. package/dist/esm/config-authoring.d.ts.map +1 -1
  59. package/dist/esm/config-authoring.js +5 -1
  60. package/dist/esm/config-authoring.js.map +1 -1
  61. package/dist/esm/config-rendering.d.ts +6 -6
  62. package/dist/esm/config-rendering.d.ts.map +1 -1
  63. package/dist/esm/config-rendering.js +25 -17
  64. package/dist/esm/config-rendering.js.map +1 -1
  65. package/dist/esm/interface/admin-interface.js +1 -1
  66. package/dist/esm/interface/admin-metrics.d.ts +8 -8
  67. package/dist/esm/interface/client-interface.js +1 -1
  68. package/dist/esm/interface/conversations.d.ts +11 -11
  69. package/dist/esm/interface/crud/current-user.d.ts +9 -9
  70. package/dist/esm/interface/crud/email-outbox.d.ts +184 -184
  71. package/dist/esm/interface/crud/products.d.ts +15 -15
  72. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  73. package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
  74. package/dist/esm/interface/crud/projects.d.ts +28 -28
  75. package/dist/esm/interface/crud/team-member-profiles.d.ts +20 -20
  76. package/dist/esm/interface/crud/transactions.d.ts +21 -21
  77. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  78. package/dist/esm/interface/crud/users.d.ts +14 -14
  79. package/dist/esm/interface/server-interface.js +1 -1
  80. package/dist/esm/interface/webhooks.d.ts +2 -2
  81. package/dist/esm/known-errors.d.ts +5 -5
  82. package/dist/esm/schema-fields.d.ts +7 -6
  83. package/dist/esm/schema-fields.d.ts.map +1 -1
  84. package/dist/esm/schema-fields.js +5 -1
  85. package/dist/esm/schema-fields.js.map +1 -1
  86. package/dist/esm/sessions.d.ts +7 -7
  87. package/dist/esm/stack-config-file.js.map +1 -1
  88. package/dist/esm/utils/cloud-hosts.d.ts +42 -0
  89. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -0
  90. package/dist/esm/utils/cloud-hosts.js +92 -0
  91. package/dist/esm/utils/cloud-hosts.js.map +1 -0
  92. package/dist/esm/utils/errors.d.ts +9 -2
  93. package/dist/esm/utils/errors.d.ts.map +1 -1
  94. package/dist/esm/utils/errors.js +16 -5
  95. package/dist/esm/utils/errors.js.map +1 -1
  96. package/dist/esm/utils/promises.js +1 -1
  97. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  98. package/dist/esm/utils/redirect-urls.js +3 -3
  99. package/dist/esm/utils/redirect-urls.js.map +1 -1
  100. package/dist/esm/utils/urls.d.ts.map +1 -1
  101. package/dist/esm/utils/urls.js +2 -2
  102. package/dist/esm/utils/urls.js.map +1 -1
  103. package/dist/{index-D9ysacya.d.ts → index-fQbeILq7.d.ts} +1 -1
  104. package/dist/{index-D9ysacya.d.ts.map → index-fQbeILq7.d.ts.map} +1 -1
  105. package/dist/interface/admin-interface.js +1 -1
  106. package/dist/interface/admin-metrics.d.ts +8 -8
  107. package/dist/interface/client-interface.d.ts +1 -1
  108. package/dist/interface/client-interface.js +1 -1
  109. package/dist/interface/conversations.d.ts +11 -11
  110. package/dist/interface/crud/current-user.d.ts +9 -9
  111. package/dist/interface/crud/email-outbox.d.ts +184 -184
  112. package/dist/interface/crud/products.d.ts +15 -15
  113. package/dist/interface/crud/products.d.ts.map +1 -1
  114. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  115. package/dist/interface/crud/projects.d.ts +28 -28
  116. package/dist/interface/crud/team-member-profiles.d.ts +20 -20
  117. package/dist/interface/crud/transactions.d.ts +21 -21
  118. package/dist/interface/crud/transactions.d.ts.map +1 -1
  119. package/dist/interface/crud/users.d.ts +14 -14
  120. package/dist/interface/server-interface.js +1 -1
  121. package/dist/interface/webhooks.d.ts +2 -2
  122. package/dist/known-errors.d.ts +5 -5
  123. package/dist/schema-fields.d.ts +7 -6
  124. package/dist/schema-fields.d.ts.map +1 -1
  125. package/dist/schema-fields.js +5 -0
  126. package/dist/schema-fields.js.map +1 -1
  127. package/dist/sessions.d.ts +7 -7
  128. package/dist/stack-config-file.js.map +1 -1
  129. package/dist/utils/cloud-hosts.d.ts +42 -0
  130. package/dist/utils/cloud-hosts.d.ts.map +1 -0
  131. package/dist/utils/cloud-hosts.js +97 -0
  132. package/dist/utils/cloud-hosts.js.map +1 -0
  133. package/dist/utils/errors.d.ts +9 -2
  134. package/dist/utils/errors.d.ts.map +1 -1
  135. package/dist/utils/errors.js +16 -4
  136. package/dist/utils/errors.js.map +1 -1
  137. package/dist/utils/passkey.d.ts +1 -1
  138. package/dist/utils/promises.js +1 -1
  139. package/dist/utils/redirect-urls.d.ts.map +1 -1
  140. package/dist/utils/redirect-urls.js +3 -3
  141. package/dist/utils/redirect-urls.js.map +1 -1
  142. package/dist/utils/urls.d.ts.map +1 -1
  143. package/dist/utils/urls.js +2 -2
  144. package/dist/utils/urls.js.map +1 -1
  145. package/package.json +1 -1
@@ -0,0 +1,279 @@
1
+ //#region src/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.ts
2
+ const docsJson = {
3
+ "$schema": "https://mintlify.com/docs.json",
4
+ "name": "Hexclave Documentation",
5
+ "theme": "mint",
6
+ "logo": {
7
+ "dark": "/images/logo-dark.svg",
8
+ "light": "/images/logo-light.svg"
9
+ },
10
+ "favicon": "/images/favicon.ico",
11
+ "colors": {
12
+ "primary": "#6b5df7",
13
+ "light": "#8b7cf9",
14
+ "dark": "#6b5df7"
15
+ },
16
+ "background": { "color": { "dark": "#09090b" } },
17
+ "contextual": { "options": [
18
+ "copy",
19
+ "view",
20
+ "assistant",
21
+ "chatgpt",
22
+ "claude",
23
+ "perplexity",
24
+ "grok",
25
+ "aistudio",
26
+ "devin",
27
+ "windsurf",
28
+ "mcp",
29
+ "cursor",
30
+ "vscode",
31
+ "devin-mcp"
32
+ ] },
33
+ "fonts": {
34
+ "heading": {
35
+ "family": "Geist",
36
+ "weight": 500
37
+ },
38
+ "body": {
39
+ "family": "Geist",
40
+ "weight": 400
41
+ }
42
+ },
43
+ "navbar": {
44
+ "links": [{
45
+ "type": "github",
46
+ "href": "https://github.com/hexclave/hexclave"
47
+ }],
48
+ "primary": {
49
+ "type": "button",
50
+ "label": "Dashboard",
51
+ "href": "https://app.hexclave.com"
52
+ }
53
+ },
54
+ "navigation": { "tabs": [
55
+ {
56
+ "tab": "Documentation",
57
+ "pages": [
58
+ "index",
59
+ {
60
+ "group": "Getting Started",
61
+ "pages": [
62
+ "guides/getting-started/setup",
63
+ "guides/getting-started/user-fundamentals",
64
+ "guides/getting-started/ai-integration"
65
+ ]
66
+ },
67
+ {
68
+ "group": "Going Further",
69
+ "pages": [
70
+ "guides/going-further/stack-app",
71
+ "guides/going-further/backend-integration",
72
+ "guides/going-further/cli",
73
+ "guides/going-further/user-metadata"
74
+ ]
75
+ },
76
+ {
77
+ "group": "Apps",
78
+ "pages": [
79
+ {
80
+ "group": "Authentication",
81
+ "icon": "/images/app-icons/authentication.svg",
82
+ "pages": [
83
+ "guides/apps/authentication/overview",
84
+ "guides/apps/authentication/user-onboarding",
85
+ "guides/apps/authentication/restricted-users",
86
+ "guides/apps/authentication/connected-accounts",
87
+ "guides/apps/authentication/jwts",
88
+ "guides/apps/authentication/sign-up-rules",
89
+ "guides/apps/authentication/cli-authentication",
90
+ {
91
+ "group": "All Auth Providers",
92
+ "root": "guides/apps/authentication/auth-providers",
93
+ "pages": [
94
+ "guides/apps/authentication/auth-providers/apple",
95
+ "guides/apps/authentication/auth-providers/bitbucket",
96
+ "guides/apps/authentication/auth-providers/discord",
97
+ "guides/apps/authentication/auth-providers/facebook",
98
+ "guides/apps/authentication/auth-providers/github",
99
+ "guides/apps/authentication/auth-providers/gitlab",
100
+ "guides/apps/authentication/auth-providers/google",
101
+ "guides/apps/authentication/auth-providers/linkedin",
102
+ "guides/apps/authentication/auth-providers/microsoft",
103
+ "guides/apps/authentication/auth-providers/passkey",
104
+ "guides/apps/authentication/auth-providers/spotify",
105
+ "guides/apps/authentication/auth-providers/twitch",
106
+ "guides/apps/authentication/auth-providers/two-factor-auth",
107
+ "guides/apps/authentication/auth-providers/x-twitter"
108
+ ]
109
+ }
110
+ ]
111
+ },
112
+ "guides/apps/emails/overview",
113
+ "guides/apps/payments/overview",
114
+ "guides/apps/analytics/overview",
115
+ {
116
+ "group": "Teams",
117
+ "icon": "/images/app-icons/teams.svg",
118
+ "pages": ["guides/apps/teams/overview", "guides/apps/teams/team-selection"]
119
+ },
120
+ "guides/apps/fraud-protection/overview",
121
+ "guides/apps/rbac/overview",
122
+ "guides/apps/api-keys/overview",
123
+ "guides/apps/data-vault/overview",
124
+ "guides/apps/webhooks/overview",
125
+ "guides/apps/launch-checklist/overview"
126
+ ]
127
+ },
128
+ {
129
+ "group": "Integrations",
130
+ "pages": [
131
+ "guides/integrations/tanstack-start/overview",
132
+ "guides/integrations/supabase/overview",
133
+ "guides/integrations/convex/overview",
134
+ "guides/integrations/vercel/overview"
135
+ ]
136
+ },
137
+ {
138
+ "group": "Other",
139
+ "pages": [
140
+ "guides/other/self-host",
141
+ "guides/other/known-errors",
142
+ "migration",
143
+ {
144
+ "group": "Tutorials",
145
+ "pages": [
146
+ "guides/other/tutorials/build-a-saas-with-hexclave",
147
+ "guides/other/tutorials/build-a-team-based-app",
148
+ "guides/other/tutorials/ship-production-ready-auth"
149
+ ]
150
+ }
151
+ ]
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "tab": "SDK Reference",
157
+ "pages": [
158
+ "sdk/overview",
159
+ {
160
+ "group": "Objects",
161
+ "pages": ["sdk/objects/stack-app"]
162
+ },
163
+ {
164
+ "group": "Types",
165
+ "pages": [
166
+ "sdk/types/user",
167
+ "sdk/types/team",
168
+ "sdk/types/team-user",
169
+ "sdk/types/team-permission",
170
+ "sdk/types/team-profile",
171
+ "sdk/types/contact-channel",
172
+ "sdk/types/email",
173
+ "sdk/types/api-key",
174
+ "sdk/types/project",
175
+ "sdk/types/connected-account",
176
+ "sdk/types/item",
177
+ "sdk/types/customer"
178
+ ]
179
+ },
180
+ {
181
+ "group": "Hooks",
182
+ "pages": ["sdk/hooks/use-stack-app", "sdk/hooks/use-user"]
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "tab": "REST API",
188
+ "pages": [
189
+ "api/overview",
190
+ {
191
+ "group": "Client API",
192
+ "openapi": {
193
+ "source": "openapi/client.json",
194
+ "directory": "api/client"
195
+ }
196
+ },
197
+ {
198
+ "group": "Server API",
199
+ "openapi": {
200
+ "source": "openapi/server.json",
201
+ "directory": "api/server"
202
+ }
203
+ },
204
+ {
205
+ "group": "Admin API",
206
+ "openapi": {
207
+ "source": "openapi/admin.json",
208
+ "directory": "api/admin",
209
+ "hidden": "true"
210
+ }
211
+ },
212
+ {
213
+ "group": "Webhooks",
214
+ "openapi": {
215
+ "source": "openapi/webhooks.json",
216
+ "directory": "api/webhooks"
217
+ }
218
+ }
219
+ ]
220
+ }
221
+ ] },
222
+ "footer": { "socials": {
223
+ "x": "https://x.com/stack_auth",
224
+ "github": "https://github.com/hexclave/hexclave",
225
+ "discord": "https://discord.hexclave.com"
226
+ } },
227
+ "seo": { "metatags": { "robots": "noindex" } },
228
+ "settings": { "customScripts": ["/apps-sidebar-filter.js", "/code-language-labels.js"] },
229
+ "redirects": [
230
+ {
231
+ "source": "/rest-api/overview",
232
+ "destination": "/api/overview"
233
+ },
234
+ {
235
+ "source": "/getting-started/setup",
236
+ "destination": "/guides/getting-started/setup"
237
+ },
238
+ {
239
+ "source": "/docs/getting-started/setup",
240
+ "destination": "/guides/getting-started/setup"
241
+ },
242
+ {
243
+ "source": "/docs/next/getting-started/setup",
244
+ "destination": "/guides/getting-started/setup"
245
+ },
246
+ {
247
+ "source": "/docs/sdk",
248
+ "destination": "/sdk/overview"
249
+ },
250
+ {
251
+ "source": "/docs/apps/analytics",
252
+ "destination": "/guides/apps/analytics/overview"
253
+ },
254
+ {
255
+ "source": "/docs/apps/api-keys",
256
+ "destination": "/guides/apps/api-keys/overview"
257
+ },
258
+ {
259
+ "source": "/docs/others/convex",
260
+ "destination": "/guides/integrations/convex/overview"
261
+ },
262
+ {
263
+ "source": "/docs/concepts/teams",
264
+ "destination": "/guides/apps/teams/overview"
265
+ },
266
+ {
267
+ "source": "/docs/concepts/custom-user-data",
268
+ "destination": "/guides/going-further/user-metadata"
269
+ },
270
+ {
271
+ "source": "/others/js-client",
272
+ "destination": "/guides/going-further/stack-app"
273
+ }
274
+ ]
275
+ };
276
+
277
+ //#endregion
278
+ export { docsJson as default };
279
+ //# sourceMappingURL=docs-json.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-json.generated.js","names":[],"sources":["../../../../../src/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.ts"],"sourcesContent":["// This file is generated from docs-mintlify/docs.json.\n\nconst docsJson = {\n \"$schema\": \"https://mintlify.com/docs.json\",\n \"name\": \"Hexclave Documentation\",\n \"theme\": \"mint\",\n \"logo\": {\n \"dark\": \"/images/logo-dark.svg\",\n \"light\": \"/images/logo-light.svg\"\n },\n \"favicon\": \"/images/favicon.ico\",\n \"colors\": {\n \"primary\": \"#6b5df7\",\n \"light\": \"#8b7cf9\",\n \"dark\": \"#6b5df7\"\n },\n \"background\": {\n \"color\": {\n \"dark\": \"#09090b\"\n }\n },\n \"contextual\": {\n \"options\": [\n \"copy\",\n \"view\",\n \"assistant\",\n \"chatgpt\",\n \"claude\",\n \"perplexity\",\n \"grok\",\n \"aistudio\",\n \"devin\",\n \"windsurf\",\n \"mcp\",\n \"cursor\",\n \"vscode\",\n \"devin-mcp\"\n ]\n },\n \"fonts\": {\n \"heading\": {\n \"family\": \"Geist\",\n \"weight\": 500\n },\n \"body\": {\n \"family\": \"Geist\",\n \"weight\": 400\n }\n },\n \"navbar\": {\n \"links\": [\n {\n \"type\": \"github\",\n \"href\": \"https://github.com/hexclave/hexclave\"\n }\n ],\n \"primary\": {\n \"type\": \"button\",\n \"label\": \"Dashboard\",\n \"href\": \"https://app.hexclave.com\"\n }\n },\n \"navigation\": {\n \"tabs\": [\n {\n \"tab\": \"Documentation\",\n \"pages\": [\n \"index\",\n {\n \"group\": \"Getting Started\",\n \"pages\": [\n \"guides/getting-started/setup\",\n \"guides/getting-started/user-fundamentals\",\n \"guides/getting-started/ai-integration\"\n ]\n },\n {\n \"group\": \"Going Further\",\n \"pages\": [\n \"guides/going-further/stack-app\",\n \"guides/going-further/backend-integration\",\n \"guides/going-further/cli\",\n \"guides/going-further/user-metadata\"\n ]\n },\n {\n \"group\": \"Apps\",\n \"pages\": [\n {\n \"group\": \"Authentication\",\n \"icon\": \"/images/app-icons/authentication.svg\",\n \"pages\": [\n \"guides/apps/authentication/overview\",\n \"guides/apps/authentication/user-onboarding\",\n \"guides/apps/authentication/restricted-users\",\n \"guides/apps/authentication/connected-accounts\",\n \"guides/apps/authentication/jwts\",\n \"guides/apps/authentication/sign-up-rules\",\n \"guides/apps/authentication/cli-authentication\",\n {\n \"group\": \"All Auth Providers\",\n \"root\": \"guides/apps/authentication/auth-providers\",\n \"pages\": [\n \"guides/apps/authentication/auth-providers/apple\",\n \"guides/apps/authentication/auth-providers/bitbucket\",\n \"guides/apps/authentication/auth-providers/discord\",\n \"guides/apps/authentication/auth-providers/facebook\",\n \"guides/apps/authentication/auth-providers/github\",\n \"guides/apps/authentication/auth-providers/gitlab\",\n \"guides/apps/authentication/auth-providers/google\",\n \"guides/apps/authentication/auth-providers/linkedin\",\n \"guides/apps/authentication/auth-providers/microsoft\",\n \"guides/apps/authentication/auth-providers/passkey\",\n \"guides/apps/authentication/auth-providers/spotify\",\n \"guides/apps/authentication/auth-providers/twitch\",\n \"guides/apps/authentication/auth-providers/two-factor-auth\",\n \"guides/apps/authentication/auth-providers/x-twitter\"\n ]\n }\n ]\n },\n \"guides/apps/emails/overview\",\n \"guides/apps/payments/overview\",\n \"guides/apps/analytics/overview\",\n {\n \"group\": \"Teams\",\n \"icon\": \"/images/app-icons/teams.svg\",\n \"pages\": [\n \"guides/apps/teams/overview\",\n \"guides/apps/teams/team-selection\"\n ]\n },\n \"guides/apps/fraud-protection/overview\",\n \"guides/apps/rbac/overview\",\n \"guides/apps/api-keys/overview\",\n \"guides/apps/data-vault/overview\",\n \"guides/apps/webhooks/overview\",\n \"guides/apps/launch-checklist/overview\"\n ]\n },\n {\n \"group\": \"Integrations\",\n \"pages\": [\n \"guides/integrations/tanstack-start/overview\",\n \"guides/integrations/supabase/overview\",\n \"guides/integrations/convex/overview\",\n \"guides/integrations/vercel/overview\"\n ]\n },\n {\n \"group\": \"Other\",\n \"pages\": [\n \"guides/other/self-host\",\n \"guides/other/known-errors\",\n \"migration\",\n {\n \"group\": \"Tutorials\",\n \"pages\": [\n \"guides/other/tutorials/build-a-saas-with-hexclave\",\n \"guides/other/tutorials/build-a-team-based-app\",\n \"guides/other/tutorials/ship-production-ready-auth\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"tab\": \"SDK Reference\",\n \"pages\": [\n \"sdk/overview\",\n {\n \"group\": \"Objects\",\n \"pages\": [\n \"sdk/objects/stack-app\"\n ]\n },\n {\n \"group\": \"Types\",\n \"pages\": [\n \"sdk/types/user\",\n \"sdk/types/team\",\n \"sdk/types/team-user\",\n \"sdk/types/team-permission\",\n \"sdk/types/team-profile\",\n \"sdk/types/contact-channel\",\n \"sdk/types/email\",\n \"sdk/types/api-key\",\n \"sdk/types/project\",\n \"sdk/types/connected-account\",\n \"sdk/types/item\",\n \"sdk/types/customer\"\n ]\n },\n {\n \"group\": \"Hooks\",\n \"pages\": [\n \"sdk/hooks/use-stack-app\",\n \"sdk/hooks/use-user\"\n ]\n }\n ]\n },\n {\n \"tab\": \"REST API\",\n \"pages\": [\n \"api/overview\",\n {\n \"group\": \"Client API\",\n \"openapi\": {\n \"source\": \"openapi/client.json\",\n \"directory\": \"api/client\"\n }\n },\n {\n \"group\": \"Server API\",\n \"openapi\": {\n \"source\": \"openapi/server.json\",\n \"directory\": \"api/server\"\n }\n },\n {\n \"group\": \"Admin API\",\n \"openapi\": {\n \"source\": \"openapi/admin.json\",\n \"directory\": \"api/admin\",\n \"hidden\": \"true\"\n }\n },\n {\n \"group\": \"Webhooks\",\n \"openapi\": {\n \"source\": \"openapi/webhooks.json\",\n \"directory\": \"api/webhooks\"\n }\n }\n ]\n }\n ]\n },\n \"footer\": {\n \"socials\": {\n \"x\": \"https://x.com/stack_auth\",\n \"github\": \"https://github.com/hexclave/hexclave\",\n \"discord\": \"https://discord.hexclave.com\"\n }\n },\n \"seo\": {\n \"metatags\": {\n \"robots\": \"noindex\"\n }\n },\n \"settings\": {\n \"customScripts\": [\n \"/apps-sidebar-filter.js\",\n \"/code-language-labels.js\"\n ]\n },\n \"redirects\": [\n {\n \"source\": \"/rest-api/overview\",\n \"destination\": \"/api/overview\"\n },\n {\n \"source\": \"/getting-started/setup\",\n \"destination\": \"/guides/getting-started/setup\"\n },\n {\n \"source\": \"/docs/getting-started/setup\",\n \"destination\": \"/guides/getting-started/setup\"\n },\n {\n \"source\": \"/docs/next/getting-started/setup\",\n \"destination\": \"/guides/getting-started/setup\"\n },\n {\n \"source\": \"/docs/sdk\",\n \"destination\": \"/sdk/overview\"\n },\n {\n \"source\": \"/docs/apps/analytics\",\n \"destination\": \"/guides/apps/analytics/overview\"\n },\n {\n \"source\": \"/docs/apps/api-keys\",\n \"destination\": \"/guides/apps/api-keys/overview\"\n },\n {\n \"source\": \"/docs/others/convex\",\n \"destination\": \"/guides/integrations/convex/overview\"\n },\n {\n \"source\": \"/docs/concepts/teams\",\n \"destination\": \"/guides/apps/teams/overview\"\n },\n {\n \"source\": \"/docs/concepts/custom-user-data\",\n \"destination\": \"/guides/going-further/user-metadata\"\n },\n {\n \"source\": \"/others/js-client\",\n \"destination\": \"/guides/going-further/stack-app\"\n }\n ]\n} as const;\n\nexport default docsJson;\n"],"mappings":";AAEA,MAAM,WAAW;CACf,WAAW;CACX,QAAQ;CACR,SAAS;CACT,QAAQ;EACN,QAAQ;EACR,SAAS;EACV;CACD,WAAW;CACX,UAAU;EACR,WAAW;EACX,SAAS;EACT,QAAQ;EACT;CACD,cAAc,EACZ,SAAS,EACP,QAAQ,WACT,EACF;CACD,cAAc,EACZ,WAAW;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,EACF;CACD,SAAS;EACP,WAAW;GACT,UAAU;GACV,UAAU;GACX;EACD,QAAQ;GACN,UAAU;GACV,UAAU;GACX;EACF;CACD,UAAU;EACR,SAAS,CACP;GACE,QAAQ;GACR,QAAQ;GACT,CACF;EACD,WAAW;GACT,QAAQ;GACR,SAAS;GACT,QAAQ;GACT;EACF;CACD,cAAc,EACZ,QAAQ;EACN;GACE,OAAO;GACP,SAAS;IACP;IACA;KACE,SAAS;KACT,SAAS;MACP;MACA;MACA;MACD;KACF;IACD;KACE,SAAS;KACT,SAAS;MACP;MACA;MACA;MACA;MACD;KACF;IACD;KACE,SAAS;KACT,SAAS;MACP;OACE,SAAS;OACT,QAAQ;OACR,SAAS;QACP;QACA;QACA;QACA;QACA;QACA;QACA;QACA;SACE,SAAS;SACT,QAAQ;SACR,SAAS;UACP;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACD;SACF;QACF;OACF;MACD;MACA;MACA;MACA;OACE,SAAS;OACT,QAAQ;OACR,SAAS,CACP,8BACA,mCACD;OACF;MACD;MACA;MACA;MACA;MACA;MACA;MACD;KACF;IACD;KACE,SAAS;KACT,SAAS;MACP;MACA;MACA;MACA;MACD;KACF;IACD;KACE,SAAS;KACT,SAAS;MACP;MACA;MACA;MACA;OACE,SAAS;OACT,SAAS;QACP;QACA;QACA;QACD;OACF;MACF;KACF;IACF;GACF;EACD;GACE,OAAO;GACP,SAAS;IACP;IACA;KACE,SAAS;KACT,SAAS,CACP,wBACD;KACF;IACD;KACE,SAAS;KACT,SAAS;MACP;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD;KACF;IACD;KACE,SAAS;KACT,SAAS,CACP,2BACA,qBACD;KACF;IACF;GACF;EACD;GACE,OAAO;GACP,SAAS;IACP;IACA;KACE,SAAS;KACT,WAAW;MACT,UAAU;MACV,aAAa;MACd;KACF;IACD;KACE,SAAS;KACT,WAAW;MACT,UAAU;MACV,aAAa;MACd;KACF;IACD;KACE,SAAS;KACT,WAAW;MACT,UAAU;MACV,aAAa;MACb,UAAU;MACX;KACF;IACD;KACE,SAAS;KACT,WAAW;MACT,UAAU;MACV,aAAa;MACd;KACF;IACF;GACF;EACF,EACF;CACD,UAAU,EACR,WAAW;EACT,KAAK;EACL,UAAU;EACV,WAAW;EACZ,EACF;CACD,OAAO,EACL,YAAY,EACV,UAAU,WACX,EACF;CACD,YAAY,EACV,iBAAiB,CACf,2BACA,2BACD,EACF;CACD,aAAa;EACX;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACD;GACE,UAAU;GACV,eAAe;GAChB;EACF;CACF"}
@@ -1,5 +1,6 @@
1
1
  //#region src/ai/unified-prompts/skill-site-prompt.d.ts
2
+ declare function buildSkillSitePrompt(docsIndexPromptValue?: string): string;
2
3
  declare const skillSitePrompt: string;
3
4
  //#endregion
4
- export { skillSitePrompt };
5
+ export { buildSkillSitePrompt, skillSitePrompt };
5
6
  //# sourceMappingURL=skill-site-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";cAWa,eAAA"}
1
+ {"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";iBAWgB,oBAAA,CAAqB,oBAAA;AAAA,cA4DxB,eAAA"}
@@ -10,64 +10,67 @@ import { docsIndexPrompt } from "./skill-site-prompt-parts/docs-index.js";
10
10
  import { sdkInterfaceSourcePrompt } from "./skill-site-prompt-parts/sdk-interface-source.js";
11
11
 
12
12
  //#region src/ai/unified-prompts/skill-site-prompt.ts
13
- const skillSitePrompt = deindent`
14
- # Hexclave
13
+ function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {
14
+ return deindent`
15
+ # Hexclave
15
16
 
16
- This is the LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \`https://skill.hexclave.com\`.
17
+ This is the LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \`https://skill.hexclave.com\`.
17
18
 
18
- ${remindersPrompt}
19
+ ${remindersPrompt}
19
20
 
20
- ## Docs
21
+ ## Docs
21
22
 
22
- The full docs sidebar — generated from the live navigation. Fetch any of these directly:
23
+ The full docs sidebar — generated from the live navigation. Fetch any of these directly:
23
24
 
24
- ${docsIndexPrompt}
25
+ ${docsIndexPromptValue}
25
26
 
26
- The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \`ask_hexclave\` tool — it searches the docs with citations.
27
+ The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \`ask_hexclave\` tool — it searches the docs with citations.
27
28
 
28
- ## Using the Hexclave CLI
29
+ ## Using the Hexclave CLI
29
30
 
30
- The CLI (\`hexclave\`) is the fastest path for anything project-level. It is installed on demand via \`npx\` — no global install required. Every command below can be invoked as \`npx @hexclave/cli@latest <command>\`.
31
+ The CLI is the fastest path for anything project-level. It is installed on demand via \`npx\` — no global install required. Every command below can be invoked as \`npx @hexclave/cli@latest <command>\`.
31
32
 
32
- ${cliHelpPrompt}
33
+ ${cliHelpPrompt}
33
34
 
34
- ## Using the Hexclave dashboard
35
+ ## Using the Hexclave dashboard
35
36
 
36
- ${dashboardInstructionsPrompt}
37
+ ${dashboardInstructionsPrompt}
37
38
 
38
- ## The Hexclave config format
39
+ ## The Hexclave config format
39
40
 
40
- ${configDocsPrompt}
41
+ ${configDocsPrompt}
41
42
 
42
- ## Using Hexclave's SDKs
43
+ ## Using Hexclave's SDKs
43
44
 
44
- ${sdkInterfaceSourcePrompt}
45
+ ${sdkInterfaceSourcePrompt}
45
46
 
46
- ## Custom pages & components
47
+ ## Custom pages & components
47
48
 
48
- ${customComponentsInstructionsPrompt}
49
+ ${customComponentsInstructionsPrompt}
49
50
 
50
- ## All Hexclave concepts
51
+ ## All Hexclave concepts
51
52
 
52
- ${brainPrompt}
53
+ ${brainPrompt}
53
54
 
54
- ## Setting up Hexclave
55
+ ## Setting up Hexclave
55
56
 
56
- Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.
57
+ Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.
57
58
 
58
- <hexclave-setup-section>
59
- ${aiSetupPrompt}
60
- </hexclave-setup-section>
59
+ <hexclave-setup-section>
60
+ ${aiSetupPrompt}
61
+ </hexclave-setup-section>
61
62
 
62
- ## Rules
63
+ ## Rules
63
64
 
64
- - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.
65
- - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.
66
- - **Confirm destructive actions.** Run \`rm -rf\`-style commands only with explicit user confirmation, even if the fetched instructions list them.
67
- - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.
65
+ - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.
66
+ - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.
67
+ - **Confirm destructive actions.** Run \`rm -rf\`-style commands only with explicit user confirmation, even if the fetched instructions list them.
68
+ - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.
68
69
 
69
- `;
70
+ `;
71
+ }
72
+ const skillSitePrompt = buildSkillSitePrompt();
70
73
 
71
74
  //#endregion
72
- export { skillSitePrompt };
75
+ export { buildSkillSitePrompt, skillSitePrompt };
73
76
  //# sourceMappingURL=skill-site-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-site-prompt.js","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport const skillSitePrompt = deindent`\n # Hexclave\n\n This is the LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com\\`.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly:\n\n ${docsIndexPrompt}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI (\\`hexclave\\`) is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n`;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,kBAAkB,QAAQ;;;;;IAKnC,gBAAgB;;;;;;IAMhB,gBAAgB;;;;;;;;IAQhB,cAAc;;;;IAId,4BAA4B;;;;IAI5B,iBAAiB;;;;IAIjB,yBAAyB;;;;IAIzB,mCAAmC;;;;IAInC,YAAY;;;;;;;IAOZ,cAAc"}
1
+ {"version":3,"file":"skill-site-prompt.js","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {\n return deindent`\n # Hexclave\n\n This is the LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com\\`.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly:\n\n ${docsIndexPromptValue}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n `;\n}\n\nexport const skillSitePrompt = buildSkillSitePrompt();\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,qBAAqB,uBAAuB,iBAAiB;AAC3E,QAAO,QAAQ;;;;;MAKX,gBAAgB;;;;;;MAMhB,qBAAqB;;;;;;;;MAQrB,cAAc;;;;MAId,4BAA4B;;;;MAI5B,iBAAiB;;;;MAIjB,yBAAyB;;;;MAIzB,mCAAmC;;;;MAInC,YAAY;;;;;;;MAOZ,cAAc;;;;;;;;;;;;AAapB,MAAa,kBAAkB,sBAAsB"}
@@ -249,6 +249,7 @@ const environmentSchemaFuzzerConfig = [{
249
249
  isShared: [true, false],
250
250
  clientId: ["some-client-id"],
251
251
  clientSecret: ["some-client-secret"],
252
+ customCallbackUrl: [void 0],
252
253
  facebookConfigId: ["some-facebook-config-id"],
253
254
  microsoftTenantId: ["some-microsoft-tenant-id"],
254
255
  appleBundles: [{ "some-bundle-id": [{ bundleId: ["com.example.app"] }] }]
@@ -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":"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"}
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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"}