@hexclave/shared 1.0.14 → 1.0.15

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 (116) hide show
  1. package/dist/apps/apps-config.d.ts +6 -0
  2. package/dist/apps/apps-config.js +6 -0
  3. package/dist/apps/apps-config.js.map +1 -1
  4. package/dist/config/schema.d.ts +68 -68
  5. package/dist/config-authoring.d.ts.map +1 -1
  6. package/dist/config-authoring.js.map +1 -1
  7. package/dist/config-authoring.test.js +1 -1
  8. package/dist/config-authoring.test.js.map +1 -1
  9. package/dist/config-rendering.d.ts +2 -2
  10. package/dist/config-rendering.js +16 -0
  11. package/dist/config-rendering.js.map +1 -1
  12. package/dist/esm/apps/apps-config.d.ts +6 -0
  13. package/dist/esm/apps/apps-config.js +6 -0
  14. package/dist/esm/apps/apps-config.js.map +1 -1
  15. package/dist/esm/config/schema.d.ts +68 -68
  16. package/dist/esm/config-authoring.d.ts.map +1 -1
  17. package/dist/esm/config-authoring.js.map +1 -1
  18. package/dist/esm/config-authoring.test.js +1 -1
  19. package/dist/esm/config-authoring.test.js.map +1 -1
  20. package/dist/esm/config-rendering.d.ts +2 -2
  21. package/dist/esm/config-rendering.js +16 -2
  22. package/dist/esm/config-rendering.js.map +1 -1
  23. package/dist/esm/hexclave-config-file.d.ts +24 -1
  24. package/dist/esm/hexclave-config-file.d.ts.map +1 -1
  25. package/dist/esm/hexclave-config-file.js +69 -2
  26. package/dist/esm/hexclave-config-file.js.map +1 -1
  27. package/dist/esm/interface/admin-interface.d.ts +19 -1
  28. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  29. package/dist/esm/interface/admin-interface.js +14 -0
  30. package/dist/esm/interface/admin-interface.js.map +1 -1
  31. package/dist/esm/interface/admin-metrics.d.ts +101 -7
  32. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  33. package/dist/esm/interface/admin-metrics.js +61 -1
  34. package/dist/esm/interface/admin-metrics.js.map +1 -1
  35. package/dist/esm/interface/conversations.d.ts +38 -38
  36. package/dist/esm/interface/crud/current-user.d.ts +2 -2
  37. package/dist/esm/interface/crud/email-outbox.d.ts +150 -150
  38. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  39. package/dist/esm/interface/crud/products.d.ts +4 -4
  40. package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
  41. package/dist/esm/interface/crud/projects.d.ts +51 -51
  42. package/dist/esm/interface/crud/team-member-profiles.d.ts +10 -10
  43. package/dist/esm/interface/crud/transactions.d.ts +2 -2
  44. package/dist/esm/interface/crud/users.d.ts +10 -10
  45. package/dist/esm/interface/webhooks.d.ts +2 -2
  46. package/dist/esm/schema-fields.d.ts +3 -3
  47. package/dist/esm/sessions.d.ts +2 -2
  48. package/dist/esm/utils/analytics-clickmap-overlay.d.ts +18 -0
  49. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -0
  50. package/dist/esm/utils/analytics-clickmap-overlay.js +19 -0
  51. package/dist/esm/utils/analytics-clickmap-overlay.js.map +1 -0
  52. package/dist/esm/utils/dev-tool.d.ts +31 -0
  53. package/dist/esm/utils/dev-tool.d.ts.map +1 -0
  54. package/dist/esm/utils/dev-tool.js +32 -0
  55. package/dist/esm/utils/dev-tool.js.map +1 -0
  56. package/dist/esm/utils/dom.d.ts +7 -1
  57. package/dist/esm/utils/dom.d.ts.map +1 -1
  58. package/dist/esm/utils/dom.js +20 -1
  59. package/dist/esm/utils/dom.js.map +1 -1
  60. package/dist/esm/utils/elements-chain.d.ts +38 -0
  61. package/dist/esm/utils/elements-chain.d.ts.map +1 -0
  62. package/dist/esm/utils/elements-chain.js +297 -0
  63. package/dist/esm/utils/elements-chain.js.map +1 -0
  64. package/dist/hexclave-config-file.d.ts +24 -1
  65. package/dist/hexclave-config-file.d.ts.map +1 -1
  66. package/dist/hexclave-config-file.js +71 -1
  67. package/dist/hexclave-config-file.js.map +1 -1
  68. package/dist/interface/admin-interface.d.ts +19 -1
  69. package/dist/interface/admin-interface.d.ts.map +1 -1
  70. package/dist/interface/admin-interface.js +14 -0
  71. package/dist/interface/admin-interface.js.map +1 -1
  72. package/dist/interface/admin-metrics.d.ts +101 -7
  73. package/dist/interface/admin-metrics.d.ts.map +1 -1
  74. package/dist/interface/admin-metrics.js +65 -0
  75. package/dist/interface/admin-metrics.js.map +1 -1
  76. package/dist/interface/conversations.d.ts +38 -38
  77. package/dist/interface/crud/current-user.d.ts +2 -2
  78. package/dist/interface/crud/email-outbox.d.ts +150 -150
  79. package/dist/interface/crud/invoices.d.ts +2 -2
  80. package/dist/interface/crud/products.d.ts +4 -4
  81. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  82. package/dist/interface/crud/projects.d.ts +51 -51
  83. package/dist/interface/crud/team-member-profiles.d.ts +10 -10
  84. package/dist/interface/crud/transactions.d.ts +2 -2
  85. package/dist/interface/crud/users.d.ts +10 -10
  86. package/dist/interface/webhooks.d.ts +2 -2
  87. package/dist/schema-fields.d.ts +3 -3
  88. package/dist/sessions.d.ts +2 -2
  89. package/dist/utils/analytics-clickmap-overlay.d.ts +18 -0
  90. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -0
  91. package/dist/utils/analytics-clickmap-overlay.js +23 -0
  92. package/dist/utils/analytics-clickmap-overlay.js.map +1 -0
  93. package/dist/utils/dev-tool.d.ts +31 -0
  94. package/dist/utils/dev-tool.d.ts.map +1 -0
  95. package/dist/utils/dev-tool.js +37 -0
  96. package/dist/utils/dev-tool.js.map +1 -0
  97. package/dist/utils/dom.d.ts +7 -1
  98. package/dist/utils/dom.d.ts.map +1 -1
  99. package/dist/utils/dom.js +20 -0
  100. package/dist/utils/dom.js.map +1 -1
  101. package/dist/utils/elements-chain.d.ts +38 -0
  102. package/dist/utils/elements-chain.d.ts.map +1 -0
  103. package/dist/utils/elements-chain.js +304 -0
  104. package/dist/utils/elements-chain.js.map +1 -0
  105. package/package.json +1 -1
  106. package/src/apps/apps-config.ts +6 -0
  107. package/src/config-authoring.test.ts +1 -1
  108. package/src/config-authoring.ts +6 -6
  109. package/src/config-rendering.ts +24 -2
  110. package/src/hexclave-config-file.ts +90 -1
  111. package/src/interface/admin-interface.ts +43 -1
  112. package/src/interface/admin-metrics.ts +92 -4
  113. package/src/utils/analytics-clickmap-overlay.tsx +15 -0
  114. package/src/utils/dev-tool.tsx +30 -0
  115. package/src/utils/dom.tsx +42 -0
  116. package/src/utils/elements-chain.tsx +349 -0
@@ -1 +1 @@
1
- {"version":3,"file":"config-rendering.js","names":[],"sources":["../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { parseHexclaveConfigFileContent, renderConfigFileContent } from \"./hexclave-config-file\";\nexport { parseHexclaveConfigFileContent, renderConfigFileContent };\n\n/**\n * Packages that export the `HexclaveConfig` type, in priority order.\n * The first match found in a project's dependencies wins. Hexclave-branded\n * packages come first (canonical); the legacy `@stackframe/*` names remain\n * so projects pinned to the last legacy release still render a config file\n * that compiles against their installed SDK.\n */\nconst CONFIG_IMPORT_PACKAGES = [\n \"@hexclave/next\",\n \"@hexclave/react\",\n \"@hexclave/tanstack-start\",\n \"@hexclave/js\",\n \"@hexclave/template\",\n \"@stackframe/stack\",\n \"@stackframe/react\",\n \"@stackframe/js\",\n \"@stackframe/template\",\n] as const;\n\n/**\n * Given a list of dependency names (from package.json), returns the SDK\n * package that should be used for the `HexclaveConfig` import, or `undefined`\n * if none of the known packages are installed.\n */\nexport function detectConfigImportPackage(dependencies: string[]): string | undefined {\n for (const pkg of CONFIG_IMPORT_PACKAGES) {\n if (dependencies.includes(pkg)) {\n return pkg;\n }\n }\n return undefined;\n}\n\n/**\n * Walks up from `dir` to find the nearest `package.json` and returns the\n * best SDK package to use for the `HexclaveConfig` type import.\n */\nexport function detectImportPackageFromDir(dir: string): string | undefined {\n let current = dir;\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n return detectConfigImportPackage(deps);\n } catch {\n return undefined;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return undefined;\n}\n\nimport.meta.vitest?.test(\"renderConfigFileContent normalizes config exports\", ({ expect }) => {\n expect(renderConfigFileContent({\n \"payments.items.todos.displayName\": \"Todo Slots\",\n \"payments.items.todos.customerType\": \"user\",\n })).toContain(`export const config: HexclaveConfig = {\n \"payments\": {\n \"items\": {\n \"todos\": {\n \"displayName\": \"Todo Slots\",\n \"customerType\": \"user\"\n }\n }\n }\n};`);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses static config exports\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent(`\n import type { StackConfig } from \"@hexclave/js\";\n export const config: StackConfig = {\n auth: { allowSignUp: true },\n payments: { testMode: false },\n };\n `, \"stack.config.ts\")).toMatchInlineSnapshot(`\n {\n \"auth\": {\n \"allowSignUp\": true,\n },\n \"payments\": {\n \"testMode\": false,\n },\n }\n `);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses show-onboarding\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent('export const config = \"show-onboarding\";', \"stack.config.ts\")).toBe(\"show-onboarding\");\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent rejects dynamic config exports\", ({ expect }) => {\n expect(() => parseHexclaveConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toThrow(/Unsupported config expression/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects conflicting dotted keys\", ({ expect }) => {\n expect(() => renderConfigFileContent({\n \"a.b\": 1,\n \"a.b.c\": 2,\n })).toThrowError(/conflicting keys.*\"a\\.b\\.c\"/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects invalid config exports\", ({ expect }) => {\n expect(() => renderConfigFileContent(null)).toThrowErrorMatchingInlineSnapshot(\n `[Error: Invalid config: expected a plain object.]`,\n );\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent uses custom import package\", ({ expect }) => {\n const content = renderConfigFileContent({}, \"@hexclave/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/next/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent defaults to @hexclave/js\", ({ expect }) => {\n const content = renderConfigFileContent({});\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/js/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent keeps legacy @stackframe packages on their root entrypoint\", ({ expect }) => {\n // The lightweight `/config` subpath only exists on Hexclave-branded packages;\n // already-published @stackframe/* releases predate it.\n const content = renderConfigFileContent({}, \"@stackframe/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@stackframe/next\";');\n});\n\nimport.meta.vitest?.test(\"detectConfigImportPackage picks first matching package by priority\", ({ expect }) => {\n expect(detectConfigImportPackage([\"@hexclave/next\", \"@hexclave/js\"])).toBe(\"@hexclave/next\");\n expect(detectConfigImportPackage([\"@hexclave/react\", \"@hexclave/js\"])).toBe(\"@hexclave/react\");\n expect(detectConfigImportPackage([\"@hexclave/js\"])).toBe(\"@hexclave/js\");\n expect(detectConfigImportPackage([\"@hexclave/tanstack-start\"])).toBe(\"@hexclave/tanstack-start\");\n // Hexclave names take priority over legacy stackframe names when both appear.\n expect(detectConfigImportPackage([\"@stackframe/stack\", \"@hexclave/next\"])).toBe(\"@hexclave/next\");\n // Legacy fallback still works for projects pinned to the last @stackframe/* release.\n expect(detectConfigImportPackage([\"@stackframe/stack\"])).toBe(\"@stackframe/stack\");\n expect(detectConfigImportPackage([\"@stackframe/template\"])).toBe(\"@stackframe/template\");\n expect(detectConfigImportPackage([\"lodash\", \"express\"])).toBeUndefined();\n expect(detectConfigImportPackage([])).toBeUndefined();\n});\n"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AAOD,SAAgB,0BAA0B,cAA4C;AACpF,MAAK,MAAM,OAAO,uBAChB,KAAI,aAAa,SAAS,IAAI,CAC5B,QAAO;;;;;;AAUb,SAAgB,2BAA2B,KAAiC;CAC1E,IAAI,UAAU;AACd,QAAO,MAAM;EACX,MAAM,UAAU,aAAK,KAAK,SAAS,eAAe;AAClD,yBAAe,QAAQ,CACrB,KAAI;GACF,MAAM,MAAM,KAAK,2BAAmB,SAAS,QAAQ,CAAC;AAKtD,UAAO,0BAJM,CACX,GAAG,OAAO,KAAK,IAAI,gBAAgB,EAAE,CAAC,EACtC,GAAG,OAAO,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAC1C,CACqC;UAChC;AACN;;EAGJ,MAAM,SAAS,aAAK,QAAQ,QAAQ;AACpC,MAAI,WAAW,QAAS;AACxB,YAAU;;;CAKd,SAAW,KAAC,sDAAwD,EAAA,aAAa;AAC/E,+DAA+B;EAC7B,oCAAoC;EACpC,qCAAqC;EACtC,CAAC,CAAC,CAAC,UAAU;;;;;;;;;IASZ;EACF;CAEF,SAAW,KAAC,gEAAkE,EAAA,aAAa;AACzF,sEAAsC;;;;;;KAMnC,kBAAkB,CAAC,CAAC,sBAAsB;;;;;;;;;IAS3C;EACF;CAEF,SAAW,KAAC,0DAAyD,EAAA,aAAgB;AACnF,sEAAsC,8CAA4C,kBAAkB,CAAC,CAAC,KAAK,kBAAkB;EAC7H;CAEF,SAAW,KAAC,kEAAoE,EAAA,aAAa;AAC3F,4EAA4C,uCAAuC,kBAAkB,CAAC,CAAC,QAAQ,gCAAgC;EAC/I;CAEF,SAAW,KAAC,4DAAgE,EAAC,aAAU;AACrF,qEAAqC;EACnC,OAAO;EACP,SAAS;EACV,CAAC,CAAC,CAAC,aAAa,8BAA8B;EAC/C;CAEF,SAAW,KAAC,2DAA6D,EAAA,aAAa;AACpF,qEAAqC,KAAK,CAAC,CAAC,mCAC1C,oDACD;EACD;CAEF,SAAW,KAAC,uDAAyD,EAAA,aAAa;AAEhF,+DADwC,EAAE,EAAE,iBAAiB,CAC9C,CAAC,UAAU,iEAA+D;EACzF;CAEF,SAAW,KAAC,qDAAmD,EAAQ,aAAS;AAE9E,+DADwC,EAAE,CAAC,CAC5B,CAAC,UAAU,+DAA6D;EACvF;CAEF,SAAW,KAAC,uFAAsF,EAAA,aAAgB;AAIhH,+DADwC,EAAE,EAAE,mBAAmB,CAChD,CAAC,UAAU,4DAA0D;EACpF;CAEF,SAAW,KAAC,uEAAwE,EAAA,aAAc;AAChG,QAAO,0BAA0B,CAAC,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAC5F,QAAO,0BAA0B,CAAC,mBAAmB,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB;AAC9F,QAAO,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe;AACxE,QAAO,0BAA0B,CAAC,2BAA2B,CAAC,CAAC,CAAC,KAAK,2BAA2B;AAEhG,QAAO,0BAA0B,CAAC,qBAAqB,iBAAiB,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAEjG,QAAO,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,oBAAoB;AAClF,QAAO,0BAA0B,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,uBAAuB;AACxF,QAAO,0BAA0B,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,eAAe;AACxE,QAAO,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe;EACrD"}
1
+ {"version":3,"file":"config-rendering.js","names":[],"sources":["../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { hexclaveConfigFileExportsConfig, parseHexclaveConfigFileContent, renderConfigFileContent, tryParseHexclaveConfigFileContent } from \"./hexclave-config-file\";\nexport { hexclaveConfigFileExportsConfig, parseHexclaveConfigFileContent, renderConfigFileContent, tryParseHexclaveConfigFileContent };\n\n/**\n * Packages that export the `HexclaveConfig` type, in priority order.\n * The first match found in a project's dependencies wins. Hexclave-branded\n * packages come first (canonical); the legacy `@stackframe/*` names remain\n * so projects pinned to the last legacy release still render a config file\n * that compiles against their installed SDK.\n */\nconst CONFIG_IMPORT_PACKAGES = [\n \"@hexclave/next\",\n \"@hexclave/react\",\n \"@hexclave/tanstack-start\",\n \"@hexclave/js\",\n \"@hexclave/template\",\n \"@stackframe/stack\",\n \"@stackframe/react\",\n \"@stackframe/js\",\n \"@stackframe/template\",\n] as const;\n\n/**\n * Given a list of dependency names (from package.json), returns the SDK\n * package that should be used for the `HexclaveConfig` import, or `undefined`\n * if none of the known packages are installed.\n */\nexport function detectConfigImportPackage(dependencies: string[]): string | undefined {\n for (const pkg of CONFIG_IMPORT_PACKAGES) {\n if (dependencies.includes(pkg)) {\n return pkg;\n }\n }\n return undefined;\n}\n\n/**\n * Walks up from `dir` to find the nearest `package.json` and returns the\n * best SDK package to use for the `HexclaveConfig` type import.\n */\nexport function detectImportPackageFromDir(dir: string): string | undefined {\n let current = dir;\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n return detectConfigImportPackage(deps);\n } catch {\n return undefined;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return undefined;\n}\n\nimport.meta.vitest?.test(\"renderConfigFileContent normalizes config exports\", ({ expect }) => {\n expect(renderConfigFileContent({\n \"payments.items.todos.displayName\": \"Todo Slots\",\n \"payments.items.todos.customerType\": \"user\",\n })).toContain(`export const config: HexclaveConfig = {\n \"payments\": {\n \"items\": {\n \"todos\": {\n \"displayName\": \"Todo Slots\",\n \"customerType\": \"user\"\n }\n }\n }\n};`);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses static config exports\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent(`\n import type { StackConfig } from \"@hexclave/js\";\n export const config: StackConfig = {\n auth: { allowSignUp: true },\n payments: { testMode: false },\n };\n `, \"stack.config.ts\")).toMatchInlineSnapshot(`\n {\n \"auth\": {\n \"allowSignUp\": true,\n },\n \"payments\": {\n \"testMode\": false,\n },\n }\n `);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses show-onboarding\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent('export const config = \"show-onboarding\";', \"stack.config.ts\")).toBe(\"show-onboarding\");\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent rejects dynamic config exports\", ({ expect }) => {\n expect(() => parseHexclaveConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toThrow(/Unsupported config expression/);\n});\n\nimport.meta.vitest?.test(\"tryParseHexclaveConfigFileContent returns the config for static exports\", ({ expect }) => {\n expect(tryParseHexclaveConfigFileContent(\"export const config = { auth: { allowSignUp: true } };\", \"stack.config.ts\")).toEqual({\n auth: { allowSignUp: true },\n });\n});\n\nimport.meta.vitest?.test(\"tryParseHexclaveConfigFileContent returns null for non-static exports\", ({ expect }) => {\n // Wrapped in a helper call (e.g. defineStackConfig) -> not a plain literal.\n expect(tryParseHexclaveConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toBeNull();\n // References an imported value -> has structure to preserve.\n expect(tryParseHexclaveConfigFileContent('import x from \"./x.txt\" with { type: \"text\" };\\nexport const config = { a: x };', \"stack.config.ts\")).toBeNull();\n // Syntax error.\n expect(tryParseHexclaveConfigFileContent(\"export const config = {\", \"stack.config.ts\")).toBeNull();\n});\n\nimport.meta.vitest?.test(\"hexclaveConfigFileExportsConfig detects a config export\", ({ expect }) => {\n expect(hexclaveConfigFileExportsConfig(\"export const config = { a: 1 };\", \"stack.config.ts\")).toBe(true);\n expect(hexclaveConfigFileExportsConfig('import x from \"./x.txt\" with { type: \"text\" };\\nexport const config = { a: x };', \"stack.config.ts\")).toBe(true);\n expect(hexclaveConfigFileExportsConfig(\"export const notConfig = { a: 1 };\", \"stack.config.ts\")).toBe(false);\n expect(hexclaveConfigFileExportsConfig(\"export const config = {\", \"stack.config.ts\")).toBe(false);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects conflicting dotted keys\", ({ expect }) => {\n expect(() => renderConfigFileContent({\n \"a.b\": 1,\n \"a.b.c\": 2,\n })).toThrowError(/conflicting keys.*\"a\\.b\\.c\"/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects invalid config exports\", ({ expect }) => {\n expect(() => renderConfigFileContent(null)).toThrowErrorMatchingInlineSnapshot(\n `[Error: Invalid config: expected a plain object.]`,\n );\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent uses custom import package\", ({ expect }) => {\n const content = renderConfigFileContent({}, \"@hexclave/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/next/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent defaults to @hexclave/js\", ({ expect }) => {\n const content = renderConfigFileContent({});\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/js/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent keeps legacy @stackframe packages on their root entrypoint\", ({ expect }) => {\n // The lightweight `/config` subpath only exists on Hexclave-branded packages;\n // already-published @stackframe/* releases predate it.\n const content = renderConfigFileContent({}, \"@stackframe/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@stackframe/next\";');\n});\n\nimport.meta.vitest?.test(\"detectConfigImportPackage picks first matching package by priority\", ({ expect }) => {\n expect(detectConfigImportPackage([\"@hexclave/next\", \"@hexclave/js\"])).toBe(\"@hexclave/next\");\n expect(detectConfigImportPackage([\"@hexclave/react\", \"@hexclave/js\"])).toBe(\"@hexclave/react\");\n expect(detectConfigImportPackage([\"@hexclave/js\"])).toBe(\"@hexclave/js\");\n expect(detectConfigImportPackage([\"@hexclave/tanstack-start\"])).toBe(\"@hexclave/tanstack-start\");\n // Hexclave names take priority over legacy stackframe names when both appear.\n expect(detectConfigImportPackage([\"@stackframe/stack\", \"@hexclave/next\"])).toBe(\"@hexclave/next\");\n // Legacy fallback still works for projects pinned to the last @stackframe/* release.\n expect(detectConfigImportPackage([\"@stackframe/stack\"])).toBe(\"@stackframe/stack\");\n expect(detectConfigImportPackage([\"@stackframe/template\"])).toBe(\"@stackframe/template\");\n expect(detectConfigImportPackage([\"lodash\", \"express\"])).toBeUndefined();\n expect(detectConfigImportPackage([])).toBeUndefined();\n});\n"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AAOD,SAAgB,0BAA0B,cAA4C;AACpF,MAAK,MAAM,OAAO,uBAChB,KAAI,aAAa,SAAS,IAAI,CAC5B,QAAO;;;;;;AAUb,SAAgB,2BAA2B,KAAiC;CAC1E,IAAI,UAAU;AACd,QAAO,MAAM;EACX,MAAM,UAAU,aAAK,KAAK,SAAS,eAAe;AAClD,yBAAe,QAAQ,CACrB,KAAI;GACF,MAAM,MAAM,KAAK,2BAAmB,SAAS,QAAQ,CAAC;AAKtD,UAAO,0BAJM,CACX,GAAG,OAAO,KAAK,IAAI,gBAAgB,EAAE,CAAC,EACtC,GAAG,OAAO,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAC1C,CACqC;UAChC;AACN;;EAGJ,MAAM,SAAS,aAAK,QAAQ,QAAQ;AACpC,MAAI,WAAW,QAAS;AACxB,YAAU;;;CAKd,SAAW,KAAC,sDAAwD,EAAA,aAAa;AAC/E,+DAA+B;EAC7B,oCAAoC;EACpC,qCAAqC;EACtC,CAAC,CAAC,CAAC,UAAU;;;;;;;;;IASZ;EACF;CAEF,SAAW,KAAC,gEAAkE,EAAA,aAAa;AACzF,sEAAsC;;;;;;KAMnC,kBAAkB,CAAC,CAAC,sBAAsB;;;;;;;;;IAS3C;EACF;CAEF,SAAW,KAAC,0DAAyD,EAAA,aAAgB;AACnF,sEAAsC,8CAA4C,kBAAkB,CAAC,CAAC,KAAK,kBAAkB;EAC7H;CAEF,SAAW,KAAC,kEAAoE,EAAA,aAAa;AAC3F,4EAA4C,uCAAuC,kBAAkB,CAAC,CAAC,QAAQ,gCAAgC;EAC/I;CAEF,SAAW,KAAC,4EAA8E,EAAA,aAAa;AACrG,yEAAyC,0DAA0D,kBAAkB,CAAC,CAAC,QAAQ,EAC7H,MAAM,EAAE,aAAa,MAAM,EAC5B,CAAC;EACF;CAEF,SAAW,KAAC,0EAA4E,EAAA,aAAa;AAEnG,yEAAyC,uCAAuC,kBAAkB,CAAC,CAAC,UAAU;AAE9G,yEAAyC,uFAAmF,kBAAkB,CAAC,CAAC,UAAU;AAE1J,yEAAyC,2BAA2B,kBAAkB,CAAC,CAAC,UAAU;EAClG;CAEF,SAAW,KAAC,4DAA+D,EAAA,aAAY;AACrF,uEAAuC,mCAAmC,kBAAkB,CAAC,CAAC,KAAK,KAAK;AACxG,uEAAuC,uFAAmF,kBAAkB,CAAC,CAAC,KAAK,KAAK;AACxJ,uEAAuC,sCAAsC,kBAAkB,CAAC,CAAC,KAAK,MAAM;AAC5G,uEAAuC,2BAA2B,kBAAkB,CAAC,CAAC,KAAK,MAAM;EACjG;CAEF,SAAW,KAAC,4DAAgE,EAAC,aAAU;AACrF,qEAAqC;EACnC,OAAO;EACP,SAAS;EACV,CAAC,CAAC,CAAC,aAAa,8BAA8B;EAC/C;CAEF,SAAW,KAAC,2DAA6D,EAAA,aAAa;AACpF,qEAAqC,KAAK,CAAC,CAAC,mCAC1C,oDACD;EACD;CAEF,SAAW,KAAC,uDAAyD,EAAA,aAAa;AAEhF,+DADwC,EAAE,EAAE,iBAAiB,CAC9C,CAAC,UAAU,iEAA+D;EACzF;CAEF,SAAW,KAAC,qDAAmD,EAAQ,aAAS;AAE9E,+DADwC,EAAE,CAAC,CAC5B,CAAC,UAAU,+DAA6D;EACvF;CAEF,SAAW,KAAC,uFAAsF,EAAA,aAAgB;AAIhH,+DADwC,EAAE,EAAE,mBAAmB,CAChD,CAAC,UAAU,4DAA0D;EACpF;CAEF,SAAW,KAAC,uEAAwE,EAAA,aAAc;AAChG,QAAO,0BAA0B,CAAC,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAC5F,QAAO,0BAA0B,CAAC,mBAAmB,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB;AAC9F,QAAO,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe;AACxE,QAAO,0BAA0B,CAAC,2BAA2B,CAAC,CAAC,CAAC,KAAK,2BAA2B;AAEhG,QAAO,0BAA0B,CAAC,qBAAqB,iBAAiB,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAEjG,QAAO,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,oBAAoB;AAClF,QAAO,0BAA0B,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,uBAAuB;AACxF,QAAO,0BAA0B,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,eAAe;AACxE,QAAO,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe;EACrD"}
@@ -156,6 +156,12 @@ declare const ALL_APPS: {
156
156
  readonly tags: ["developers", "operations"];
157
157
  readonly stage: "stable";
158
158
  };
159
+ readonly clickmaps: {
160
+ readonly displayName: "Clickmaps";
161
+ readonly subtitle: "Visualize where users click across your app";
162
+ readonly tags: ["developers", "operations"];
163
+ readonly stage: "alpha";
164
+ };
159
165
  readonly "session-replays": {
160
166
  readonly displayName: "Session Replays";
161
167
  readonly subtitle: "Watch real user sessions to understand how people use your app";
@@ -141,6 +141,12 @@ const ALL_APPS = {
141
141
  tags: ["developers", "operations"],
142
142
  stage: "stable"
143
143
  },
144
+ "clickmaps": {
145
+ displayName: "Clickmaps",
146
+ subtitle: "Visualize where users click across your app",
147
+ tags: ["developers", "operations"],
148
+ stage: "alpha"
149
+ },
144
150
  "session-replays": {
145
151
  displayName: "Session Replays",
146
152
  subtitle: "Watch real user sessions to understand how people use your app",
@@ -1 +1 @@
1
- {"version":3,"file":"apps-config.js","names":[],"sources":["../../../src/apps/apps-config.ts"],"sourcesContent":["type AppTag = {\n displayName: string,\n};\n\nexport const ALL_APP_TAGS = {\n \"expert\": {\n displayName: \"Expert\",\n },\n \"integration\": {\n displayName: \"Integrations\",\n },\n \"auth\": {\n displayName: \"Authentication\",\n },\n \"developers\": {\n displayName: \"For Developers\",\n },\n \"security\": {\n displayName: \"Security\",\n },\n \"operations\": {\n displayName: \"For Operations\",\n },\n \"gtm\": {\n displayName: \"Go-to-market\",\n },\n \"comms\": {\n displayName: \"Communications\",\n },\n \"automation\": {\n displayName: \"Automation\",\n },\n \"storage\": {\n displayName: \"Storage & Databases\",\n },\n \"various\": {\n displayName: \"Various\",\n },\n} as const satisfies Record<string, AppTag>;\n\ntype App = {\n displayName: string,\n subtitle: string,\n tags: (keyof typeof ALL_APP_TAGS)[],\n stage: \"alpha\" | \"beta\" | \"stable\",\n};\n\nexport type AppId = keyof typeof ALL_APPS;\n\nexport const ALL_APPS = {\n \"authentication\": {\n displayName: \"Authentication\",\n subtitle: \"User sign-in and account management\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"fraud-protection\": {\n displayName: \"Fraud Protection\",\n subtitle: \"Protect your project from fraud and abuse\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"onboarding\": {\n displayName: \"Onboarding\",\n subtitle: \"Configure user onboarding requirements\",\n tags: [\"auth\"],\n stage: \"alpha\",\n },\n \"teams\": {\n displayName: \"Teams\",\n subtitle: \"Team collaboration and management\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"rbac\": {\n displayName: \"RBAC\",\n subtitle: \"Role-based access control and permissions\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"api-keys\": {\n displayName: \"API Keys\",\n subtitle: \"API key generation and management\",\n tags: [\"auth\", \"security\", \"developers\"],\n stage: \"stable\",\n },\n \"payments\": {\n displayName: \"Payments\",\n subtitle: \"Payment processing and subscription management\",\n tags: [\"operations\", \"gtm\"],\n stage: \"beta\",\n },\n \"emails\": {\n displayName: \"Emails\",\n subtitle: \"Email template configuration and management\",\n tags: [\"comms\"],\n stage: \"stable\",\n },\n \"support\": {\n displayName: \"Support\",\n subtitle: \"Customer conversations, team replies, and internal notes\",\n tags: [\"comms\", \"operations\"],\n stage: \"alpha\",\n },\n \"email-api\": {\n displayName: \"Email API\",\n subtitle: \"Programmatic email sending and delivery\",\n tags: [\"comms\", \"developers\", \"expert\"],\n stage: \"alpha\",\n },\n \"data-vault\": {\n displayName: \"Data Vault\",\n subtitle: \"Secure storage for sensitive user data\",\n tags: [\"security\", \"storage\"],\n stage: \"beta\",\n },\n \"webhooks\": {\n displayName: \"Webhooks\",\n subtitle: \"Real-time event notifications and integrations\",\n tags: [\"developers\"],\n stage: \"stable\",\n },\n \"tv-mode\": {\n displayName: \"TV mode\",\n subtitle: \"Dashboard display for large screens\",\n tags: [\"various\"],\n stage: \"alpha\",\n },\n \"launch-checklist\": {\n displayName: \"Launch Checklist\",\n subtitle: \"Pre-launch verification and readiness checks\",\n tags: [\"various\"],\n stage: \"stable\",\n },\n \"catalyst\": {\n displayName: \"Catalyst\",\n subtitle: \"Project scaffolding and rapid development\",\n tags: [\"various\"],\n stage: \"alpha\",\n },\n \"neon\": {\n displayName: \"Neon Integration\",\n subtitle: \"Serverless Postgres database integration\",\n tags: [\"integration\", \"storage\"],\n stage: \"alpha\",\n },\n \"convex\": {\n displayName: \"Convex Integration\",\n subtitle: \"Real-time backend platform integration\",\n tags: [\"integration\", \"storage\"],\n stage: \"alpha\",\n },\n \"vercel\": {\n displayName: \"Vercel Integration\",\n subtitle: \"Deploy your Hexclave project to Vercel\",\n tags: [\"integration\", \"developers\"],\n stage: \"stable\",\n },\n \"tanstack-start\": {\n displayName: \"TanStack Start\",\n subtitle: \"Use Hexclave in TanStack Start apps\",\n tags: [\"integration\", \"developers\"],\n stage: \"alpha\",\n },\n \"analytics\": {\n displayName: \"Analytics\",\n subtitle: \"View and explore analytics data\",\n tags: [\"developers\", \"operations\"],\n stage: \"stable\",\n },\n \"session-replays\": {\n displayName: \"Session Replays\",\n subtitle: \"Watch real user sessions to understand how people use your app\",\n tags: [\"developers\", \"operations\"],\n stage: \"stable\",\n },\n} as const satisfies Record<string, App>;\n"],"mappings":";AAIA,MAAa,eAAe;CAC1B,UAAU,EACR,aAAa,UACd;CACD,eAAe,EACb,aAAa,gBACd;CACD,QAAQ,EACN,aAAa,kBACd;CACD,cAAc,EACZ,aAAa,kBACd;CACD,YAAY,EACV,aAAa,YACd;CACD,cAAc,EACZ,aAAa,kBACd;CACD,OAAO,EACL,aAAa,gBACd;CACD,SAAS,EACP,aAAa,kBACd;CACD,cAAc,EACZ,aAAa,cACd;CACD,WAAW,EACT,aAAa,uBACd;CACD,WAAW,EACT,aAAa,WACd;CACF;AAWD,MAAa,WAAW;CACtB,kBAAkB;EAChB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,oBAAoB;EAClB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,cAAc;EACZ,aAAa;EACb,UAAU;EACV,MAAM,CAAC,OAAO;EACd,OAAO;EACR;CACD,SAAS;EACP,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,QAAQ;EACN,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM;GAAC;GAAQ;GAAY;GAAa;EACxC,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,MAAM;EAC3B,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ;EACf,OAAO;EACR;CACD,WAAW;EACT,aAAa;EACb,UAAU;EACV,MAAM,CAAC,SAAS,aAAa;EAC7B,OAAO;EACR;CACD,aAAa;EACX,aAAa;EACb,UAAU;EACV,MAAM;GAAC;GAAS;GAAc;GAAS;EACvC,OAAO;EACR;CACD,cAAc;EACZ,aAAa;EACb,UAAU;EACV,MAAM,CAAC,YAAY,UAAU;EAC7B,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,aAAa;EACpB,OAAO;EACR;CACD,WAAW;EACT,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,oBAAoB;EAClB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,QAAQ;EACN,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,UAAU;EAChC,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,UAAU;EAChC,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,aAAa;EACnC,OAAO;EACR;CACD,kBAAkB;EAChB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,aAAa;EACnC,OAAO;EACR;CACD,aAAa;EACX,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,aAAa;EAClC,OAAO;EACR;CACD,mBAAmB;EACjB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,aAAa;EAClC,OAAO;EACR;CACF"}
1
+ {"version":3,"file":"apps-config.js","names":[],"sources":["../../../src/apps/apps-config.ts"],"sourcesContent":["type AppTag = {\n displayName: string,\n};\n\nexport const ALL_APP_TAGS = {\n \"expert\": {\n displayName: \"Expert\",\n },\n \"integration\": {\n displayName: \"Integrations\",\n },\n \"auth\": {\n displayName: \"Authentication\",\n },\n \"developers\": {\n displayName: \"For Developers\",\n },\n \"security\": {\n displayName: \"Security\",\n },\n \"operations\": {\n displayName: \"For Operations\",\n },\n \"gtm\": {\n displayName: \"Go-to-market\",\n },\n \"comms\": {\n displayName: \"Communications\",\n },\n \"automation\": {\n displayName: \"Automation\",\n },\n \"storage\": {\n displayName: \"Storage & Databases\",\n },\n \"various\": {\n displayName: \"Various\",\n },\n} as const satisfies Record<string, AppTag>;\n\ntype App = {\n displayName: string,\n subtitle: string,\n tags: (keyof typeof ALL_APP_TAGS)[],\n stage: \"alpha\" | \"beta\" | \"stable\",\n};\n\nexport type AppId = keyof typeof ALL_APPS;\n\nexport const ALL_APPS = {\n \"authentication\": {\n displayName: \"Authentication\",\n subtitle: \"User sign-in and account management\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"fraud-protection\": {\n displayName: \"Fraud Protection\",\n subtitle: \"Protect your project from fraud and abuse\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"onboarding\": {\n displayName: \"Onboarding\",\n subtitle: \"Configure user onboarding requirements\",\n tags: [\"auth\"],\n stage: \"alpha\",\n },\n \"teams\": {\n displayName: \"Teams\",\n subtitle: \"Team collaboration and management\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"rbac\": {\n displayName: \"RBAC\",\n subtitle: \"Role-based access control and permissions\",\n tags: [\"auth\", \"security\"],\n stage: \"stable\",\n },\n \"api-keys\": {\n displayName: \"API Keys\",\n subtitle: \"API key generation and management\",\n tags: [\"auth\", \"security\", \"developers\"],\n stage: \"stable\",\n },\n \"payments\": {\n displayName: \"Payments\",\n subtitle: \"Payment processing and subscription management\",\n tags: [\"operations\", \"gtm\"],\n stage: \"beta\",\n },\n \"emails\": {\n displayName: \"Emails\",\n subtitle: \"Email template configuration and management\",\n tags: [\"comms\"],\n stage: \"stable\",\n },\n \"support\": {\n displayName: \"Support\",\n subtitle: \"Customer conversations, team replies, and internal notes\",\n tags: [\"comms\", \"operations\"],\n stage: \"alpha\",\n },\n \"email-api\": {\n displayName: \"Email API\",\n subtitle: \"Programmatic email sending and delivery\",\n tags: [\"comms\", \"developers\", \"expert\"],\n stage: \"alpha\",\n },\n \"data-vault\": {\n displayName: \"Data Vault\",\n subtitle: \"Secure storage for sensitive user data\",\n tags: [\"security\", \"storage\"],\n stage: \"beta\",\n },\n \"webhooks\": {\n displayName: \"Webhooks\",\n subtitle: \"Real-time event notifications and integrations\",\n tags: [\"developers\"],\n stage: \"stable\",\n },\n \"tv-mode\": {\n displayName: \"TV mode\",\n subtitle: \"Dashboard display for large screens\",\n tags: [\"various\"],\n stage: \"alpha\",\n },\n \"launch-checklist\": {\n displayName: \"Launch Checklist\",\n subtitle: \"Pre-launch verification and readiness checks\",\n tags: [\"various\"],\n stage: \"stable\",\n },\n \"catalyst\": {\n displayName: \"Catalyst\",\n subtitle: \"Project scaffolding and rapid development\",\n tags: [\"various\"],\n stage: \"alpha\",\n },\n \"neon\": {\n displayName: \"Neon Integration\",\n subtitle: \"Serverless Postgres database integration\",\n tags: [\"integration\", \"storage\"],\n stage: \"alpha\",\n },\n \"convex\": {\n displayName: \"Convex Integration\",\n subtitle: \"Real-time backend platform integration\",\n tags: [\"integration\", \"storage\"],\n stage: \"alpha\",\n },\n \"vercel\": {\n displayName: \"Vercel Integration\",\n subtitle: \"Deploy your Hexclave project to Vercel\",\n tags: [\"integration\", \"developers\"],\n stage: \"stable\",\n },\n \"tanstack-start\": {\n displayName: \"TanStack Start\",\n subtitle: \"Use Hexclave in TanStack Start apps\",\n tags: [\"integration\", \"developers\"],\n stage: \"alpha\",\n },\n \"analytics\": {\n displayName: \"Analytics\",\n subtitle: \"View and explore analytics data\",\n tags: [\"developers\", \"operations\"],\n stage: \"stable\",\n },\n \"clickmaps\": {\n displayName: \"Clickmaps\",\n subtitle: \"Visualize where users click across your app\",\n tags: [\"developers\", \"operations\"],\n stage: \"alpha\",\n },\n \"session-replays\": {\n displayName: \"Session Replays\",\n subtitle: \"Watch real user sessions to understand how people use your app\",\n tags: [\"developers\", \"operations\"],\n stage: \"stable\",\n },\n} as const satisfies Record<string, App>;\n"],"mappings":";AAIA,MAAa,eAAe;CAC1B,UAAU,EACR,aAAa,UACd;CACD,eAAe,EACb,aAAa,gBACd;CACD,QAAQ,EACN,aAAa,kBACd;CACD,cAAc,EACZ,aAAa,kBACd;CACD,YAAY,EACV,aAAa,YACd;CACD,cAAc,EACZ,aAAa,kBACd;CACD,OAAO,EACL,aAAa,gBACd;CACD,SAAS,EACP,aAAa,kBACd;CACD,cAAc,EACZ,aAAa,cACd;CACD,WAAW,EACT,aAAa,uBACd;CACD,WAAW,EACT,aAAa,WACd;CACF;AAWD,MAAa,WAAW;CACtB,kBAAkB;EAChB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,oBAAoB;EAClB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,cAAc;EACZ,aAAa;EACb,UAAU;EACV,MAAM,CAAC,OAAO;EACd,OAAO;EACR;CACD,SAAS;EACP,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,QAAQ;EACN,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ,WAAW;EAC1B,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM;GAAC;GAAQ;GAAY;GAAa;EACxC,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,MAAM;EAC3B,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,QAAQ;EACf,OAAO;EACR;CACD,WAAW;EACT,aAAa;EACb,UAAU;EACV,MAAM,CAAC,SAAS,aAAa;EAC7B,OAAO;EACR;CACD,aAAa;EACX,aAAa;EACb,UAAU;EACV,MAAM;GAAC;GAAS;GAAc;GAAS;EACvC,OAAO;EACR;CACD,cAAc;EACZ,aAAa;EACb,UAAU;EACV,MAAM,CAAC,YAAY,UAAU;EAC7B,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,aAAa;EACpB,OAAO;EACR;CACD,WAAW;EACT,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,oBAAoB;EAClB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,YAAY;EACV,aAAa;EACb,UAAU;EACV,MAAM,CAAC,UAAU;EACjB,OAAO;EACR;CACD,QAAQ;EACN,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,UAAU;EAChC,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,UAAU;EAChC,OAAO;EACR;CACD,UAAU;EACR,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,aAAa;EACnC,OAAO;EACR;CACD,kBAAkB;EAChB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,eAAe,aAAa;EACnC,OAAO;EACR;CACD,aAAa;EACX,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,aAAa;EAClC,OAAO;EACR;CACD,aAAa;EACX,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,aAAa;EAClC,OAAO;EACR;CACD,mBAAmB;EACjB,aAAa;EACb,UAAU;EACV,MAAM,CAAC,cAAc,aAAa;EAClC,OAAO;EACR;CACF"}
@@ -84,7 +84,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
84
84
  sourceOfTruth: {
85
85
  type: "hosted";
86
86
  };
87
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
87
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
88
88
  payments?: {
89
89
  blockNewPurchases?: boolean | undefined;
90
90
  autoPay?: {
@@ -125,6 +125,13 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
125
125
  }>;
126
126
  }>;
127
127
  } | undefined;
128
+ users: {
129
+ allowClientUserDeletion?: boolean | undefined;
130
+ };
131
+ teams: {
132
+ createPersonalTeamOnSignUp?: boolean | undefined;
133
+ allowClientTeamCreation?: boolean | undefined;
134
+ };
128
135
  auth: {
129
136
  allowSignUp?: boolean | undefined;
130
137
  signUpRulesDefaultAction?: string | undefined;
@@ -134,9 +141,6 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
134
141
  otp: {
135
142
  allowSignIn?: boolean | undefined;
136
143
  };
137
- passkey: {
138
- allowSignIn?: boolean | undefined;
139
- };
140
144
  oauth: {
141
145
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
142
146
  providers: Record<string, {
@@ -145,10 +149,13 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
145
149
  allowConnectedAccounts?: boolean | undefined;
146
150
  }>;
147
151
  };
152
+ passkey: {
153
+ allowSignIn?: boolean | undefined;
154
+ };
148
155
  signUpRules: Record<string, {
149
156
  displayName?: string | undefined;
150
- enabled?: boolean | undefined;
151
157
  priority?: number | undefined;
158
+ enabled?: boolean | undefined;
152
159
  condition?: string | undefined;
153
160
  action: {
154
161
  message?: string | undefined;
@@ -159,10 +166,6 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
159
166
  onboarding: {
160
167
  requireEmailVerification?: boolean | undefined;
161
168
  };
162
- teams: {
163
- createPersonalTeamOnSignUp?: boolean | undefined;
164
- allowClientTeamCreation?: boolean | undefined;
165
- };
166
169
  rbac: {
167
170
  permissions: Record<string, {
168
171
  description?: string | undefined;
@@ -187,9 +190,6 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
187
190
  tsxSource: string;
188
191
  }>;
189
192
  };
190
- users: {
191
- allowClientUserDeletion?: boolean | undefined;
192
- };
193
193
  apiKeys: {
194
194
  enabled: {
195
195
  team?: boolean | undefined;
@@ -197,7 +197,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
197
197
  };
198
198
  };
199
199
  apps: {
200
- installed: Record<"authentication" | "fraud-protection" | "onboarding" | "teams" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "session-replays", {
200
+ installed: Record<"teams" | "authentication" | "fraud-protection" | "onboarding" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "clickmaps" | "session-replays", {
201
201
  enabled?: boolean | undefined;
202
202
  }>;
203
203
  };
@@ -218,7 +218,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
218
218
  project: {
219
219
  requirePublishableClientKey: undefined;
220
220
  };
221
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
221
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
222
222
  rbac: {
223
223
  permissions: undefined;
224
224
  defaultPermissions: {
@@ -293,7 +293,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
293
293
  sourceOfTruth: {
294
294
  type: "hosted";
295
295
  };
296
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
296
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
297
297
  payments?: {
298
298
  blockNewPurchases?: boolean | undefined;
299
299
  autoPay?: {
@@ -334,6 +334,13 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
334
334
  }>;
335
335
  }>;
336
336
  } | undefined;
337
+ users: {
338
+ allowClientUserDeletion?: boolean | undefined;
339
+ };
340
+ teams: {
341
+ createPersonalTeamOnSignUp?: boolean | undefined;
342
+ allowClientTeamCreation?: boolean | undefined;
343
+ };
337
344
  auth: {
338
345
  allowSignUp?: boolean | undefined;
339
346
  signUpRulesDefaultAction?: string | undefined;
@@ -343,9 +350,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
343
350
  otp: {
344
351
  allowSignIn?: boolean | undefined;
345
352
  };
346
- passkey: {
347
- allowSignIn?: boolean | undefined;
348
- };
349
353
  oauth: {
350
354
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
351
355
  providers: Record<string, {
@@ -354,10 +358,13 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
354
358
  allowConnectedAccounts?: boolean | undefined;
355
359
  }>;
356
360
  };
361
+ passkey: {
362
+ allowSignIn?: boolean | undefined;
363
+ };
357
364
  signUpRules: Record<string, {
358
365
  displayName?: string | undefined;
359
- enabled?: boolean | undefined;
360
366
  priority?: number | undefined;
367
+ enabled?: boolean | undefined;
361
368
  condition?: string | undefined;
362
369
  action: {
363
370
  message?: string | undefined;
@@ -368,10 +375,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
368
375
  onboarding: {
369
376
  requireEmailVerification?: boolean | undefined;
370
377
  };
371
- teams: {
372
- createPersonalTeamOnSignUp?: boolean | undefined;
373
- allowClientTeamCreation?: boolean | undefined;
374
- };
375
378
  rbac: {
376
379
  permissions: Record<string, {
377
380
  description?: string | undefined;
@@ -396,9 +399,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
396
399
  tsxSource: string;
397
400
  }>;
398
401
  };
399
- users: {
400
- allowClientUserDeletion?: boolean | undefined;
401
- };
402
402
  apiKeys: {
403
403
  enabled: {
404
404
  team?: boolean | undefined;
@@ -406,7 +406,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
406
406
  };
407
407
  };
408
408
  apps: {
409
- installed: Record<"authentication" | "fraud-protection" | "onboarding" | "teams" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "session-replays", {
409
+ installed: Record<"teams" | "authentication" | "fraud-protection" | "onboarding" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "clickmaps" | "session-replays", {
410
410
  enabled?: boolean | undefined;
411
411
  }>;
412
412
  };
@@ -474,9 +474,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
474
474
  otp: {
475
475
  allowSignIn?: boolean | undefined;
476
476
  };
477
- passkey: {
478
- allowSignIn?: boolean | undefined;
479
- };
480
477
  oauth: {
481
478
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
482
479
  providers: Record<string, {
@@ -485,10 +482,13 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
485
482
  allowConnectedAccounts?: boolean | undefined;
486
483
  }>;
487
484
  };
485
+ passkey: {
486
+ allowSignIn?: boolean | undefined;
487
+ };
488
488
  signUpRules: Record<string, {
489
489
  displayName?: string | undefined;
490
- enabled?: boolean | undefined;
491
490
  priority?: number | undefined;
491
+ enabled?: boolean | undefined;
492
492
  condition?: string | undefined;
493
493
  action: {
494
494
  message?: string | undefined;
@@ -572,7 +572,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
572
572
  project: {
573
573
  requirePublishableClientKey: undefined;
574
574
  };
575
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
575
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
576
576
  rbac: {
577
577
  permissions: undefined;
578
578
  defaultPermissions: {
@@ -645,7 +645,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
645
645
  project: {
646
646
  requirePublishableClientKey: undefined;
647
647
  };
648
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
648
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
649
649
  rbac: {
650
650
  permissions: undefined;
651
651
  defaultPermissions: {
@@ -718,7 +718,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
718
718
  project: {
719
719
  requirePublishableClientKey: undefined;
720
720
  };
721
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
721
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
722
722
  rbac: {
723
723
  permissions: undefined;
724
724
  defaultPermissions: {
@@ -794,7 +794,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
794
794
  project: {
795
795
  requirePublishableClientKey: undefined;
796
796
  };
797
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
797
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
798
798
  rbac: {
799
799
  permissions: undefined;
800
800
  defaultPermissions: {
@@ -880,7 +880,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
880
880
  project: {
881
881
  requirePublishableClientKey: undefined;
882
882
  };
883
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
883
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
884
884
  rbac: {
885
885
  permissions: undefined;
886
886
  defaultPermissions: {
@@ -956,7 +956,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
956
956
  project: {
957
957
  requirePublishableClientKey: undefined;
958
958
  };
959
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
959
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
960
960
  rbac: {
961
961
  permissions: undefined;
962
962
  defaultPermissions: {
@@ -1038,7 +1038,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1038
1038
  sourceOfTruth: {
1039
1039
  type: "hosted";
1040
1040
  };
1041
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1041
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1042
1042
  payments?: {
1043
1043
  blockNewPurchases?: boolean | undefined;
1044
1044
  autoPay?: {
@@ -1079,6 +1079,13 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1079
1079
  }>;
1080
1080
  }>;
1081
1081
  } | undefined;
1082
+ users: {
1083
+ allowClientUserDeletion?: boolean | undefined;
1084
+ };
1085
+ teams: {
1086
+ createPersonalTeamOnSignUp?: boolean | undefined;
1087
+ allowClientTeamCreation?: boolean | undefined;
1088
+ };
1082
1089
  auth: {
1083
1090
  allowSignUp?: boolean | undefined;
1084
1091
  signUpRulesDefaultAction?: string | undefined;
@@ -1088,9 +1095,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1088
1095
  otp: {
1089
1096
  allowSignIn?: boolean | undefined;
1090
1097
  };
1091
- passkey: {
1092
- allowSignIn?: boolean | undefined;
1093
- };
1094
1098
  oauth: {
1095
1099
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
1096
1100
  providers: Record<string, {
@@ -1099,10 +1103,13 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1099
1103
  allowConnectedAccounts?: boolean | undefined;
1100
1104
  }>;
1101
1105
  };
1106
+ passkey: {
1107
+ allowSignIn?: boolean | undefined;
1108
+ };
1102
1109
  signUpRules: Record<string, {
1103
1110
  displayName?: string | undefined;
1104
- enabled?: boolean | undefined;
1105
1111
  priority?: number | undefined;
1112
+ enabled?: boolean | undefined;
1106
1113
  condition?: string | undefined;
1107
1114
  action: {
1108
1115
  message?: string | undefined;
@@ -1113,10 +1120,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1113
1120
  onboarding: {
1114
1121
  requireEmailVerification?: boolean | undefined;
1115
1122
  };
1116
- teams: {
1117
- createPersonalTeamOnSignUp?: boolean | undefined;
1118
- allowClientTeamCreation?: boolean | undefined;
1119
- };
1120
1123
  rbac: {
1121
1124
  permissions: Record<string, {
1122
1125
  description?: string | undefined;
@@ -1141,9 +1144,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1141
1144
  tsxSource: string;
1142
1145
  }>;
1143
1146
  };
1144
- users: {
1145
- allowClientUserDeletion?: boolean | undefined;
1146
- };
1147
1147
  apiKeys: {
1148
1148
  enabled: {
1149
1149
  team?: boolean | undefined;
@@ -1151,7 +1151,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1151
1151
  };
1152
1152
  };
1153
1153
  apps: {
1154
- installed: Record<"authentication" | "fraud-protection" | "onboarding" | "teams" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "session-replays", {
1154
+ installed: Record<"teams" | "authentication" | "fraud-protection" | "onboarding" | "rbac" | "api-keys" | "payments" | "emails" | "support" | "email-api" | "data-vault" | "webhooks" | "tv-mode" | "launch-checklist" | "catalyst" | "neon" | "convex" | "vercel" | "tanstack-start" | "analytics" | "clickmaps" | "session-replays", {
1155
1155
  enabled?: boolean | undefined;
1156
1156
  }>;
1157
1157
  };
@@ -1219,9 +1219,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1219
1219
  otp: {
1220
1220
  allowSignIn?: boolean | undefined;
1221
1221
  };
1222
- passkey: {
1223
- allowSignIn?: boolean | undefined;
1224
- };
1225
1222
  oauth: {
1226
1223
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
1227
1224
  providers: Record<string, {
@@ -1230,10 +1227,13 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1230
1227
  allowConnectedAccounts?: boolean | undefined;
1231
1228
  }>;
1232
1229
  };
1230
+ passkey: {
1231
+ allowSignIn?: boolean | undefined;
1232
+ };
1233
1233
  signUpRules: Record<string, {
1234
1234
  displayName?: string | undefined;
1235
- enabled?: boolean | undefined;
1236
1235
  priority?: number | undefined;
1236
+ enabled?: boolean | undefined;
1237
1237
  condition?: string | undefined;
1238
1238
  action: {
1239
1239
  message?: string | undefined;
@@ -1317,7 +1317,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1317
1317
  project: {
1318
1318
  requirePublishableClientKey: undefined;
1319
1319
  };
1320
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1320
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1321
1321
  rbac: {
1322
1322
  permissions: undefined;
1323
1323
  defaultPermissions: {
@@ -1390,7 +1390,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1390
1390
  project: {
1391
1391
  requirePublishableClientKey: undefined;
1392
1392
  };
1393
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1393
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1394
1394
  rbac: {
1395
1395
  permissions: undefined;
1396
1396
  defaultPermissions: {
@@ -1463,7 +1463,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1463
1463
  project: {
1464
1464
  requirePublishableClientKey: undefined;
1465
1465
  };
1466
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1466
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1467
1467
  rbac: {
1468
1468
  permissions: undefined;
1469
1469
  defaultPermissions: {
@@ -1539,7 +1539,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1539
1539
  project: {
1540
1540
  requirePublishableClientKey: undefined;
1541
1541
  };
1542
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1542
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1543
1543
  rbac: {
1544
1544
  permissions: undefined;
1545
1545
  defaultPermissions: {
@@ -1625,7 +1625,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1625
1625
  project: {
1626
1626
  requirePublishableClientKey: undefined;
1627
1627
  };
1628
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1628
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1629
1629
  rbac: {
1630
1630
  permissions: undefined;
1631
1631
  defaultPermissions: {
@@ -1701,7 +1701,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1701
1701
  project: {
1702
1702
  requirePublishableClientKey: undefined;
1703
1703
  };
1704
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1704
+ }, string>, "users" | "teams" | "auth" | "onboarding" | "rbac" | "payments" | "emails" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1705
1705
  rbac: {
1706
1706
  permissions: undefined;
1707
1707
  defaultPermissions: {
@@ -2064,15 +2064,14 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2064
2064
  };
2065
2065
  signUpRules: Record<string, {
2066
2066
  displayName: string | undefined;
2067
- enabled: boolean;
2068
2067
  priority: number;
2068
+ enabled: boolean;
2069
2069
  condition: string | undefined;
2070
2070
  action: {
2071
2071
  message: string | undefined;
2072
2072
  type: "allow" | "reject" | "restrict" | "log";
2073
2073
  };
2074
2074
  }>;
2075
- allowSignUp: boolean;
2076
2075
  password: {
2077
2076
  allowSignIn: boolean;
2078
2077
  };
@@ -2082,6 +2081,7 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2082
2081
  passkey: {
2083
2082
  allowSignIn: boolean;
2084
2083
  };
2084
+ allowSignUp: boolean;
2085
2085
  signUpRulesDefaultAction: string;
2086
2086
  };
2087
2087
  emails: {
@@ -2137,8 +2137,8 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2137
2137
  stackable: boolean | undefined;
2138
2138
  includedItems: {
2139
2139
  [x: string]: {
2140
- repeat: "never" | [number, "day" | "week" | "month" | "year"];
2141
2140
  quantity: number;
2141
+ repeat: "never" | [number, "day" | "week" | "month" | "year"];
2142
2142
  expires: "never" | "when-purchase-expires" | "when-repeated";
2143
2143
  };
2144
2144
  };
@@ -2174,13 +2174,16 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2174
2174
  } & {
2175
2175
  readonly type: "hosted";
2176
2176
  };
2177
- onboarding: {
2178
- requireEmailVerification: boolean;
2177
+ users: {
2178
+ allowClientUserDeletion: boolean;
2179
2179
  };
2180
2180
  teams: {
2181
2181
  createPersonalTeamOnSignUp: boolean;
2182
2182
  allowClientTeamCreation: boolean;
2183
2183
  };
2184
+ onboarding: {
2185
+ requireEmailVerification: boolean;
2186
+ };
2184
2187
  rbac: {
2185
2188
  permissions: {
2186
2189
  [x: string]: {
@@ -2218,9 +2221,6 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2218
2221
  };
2219
2222
  };
2220
2223
  };
2221
- users: {
2222
- allowClientUserDeletion: boolean;
2223
- };
2224
2224
  apiKeys: {
2225
2225
  enabled: {
2226
2226
  team: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config-authoring.d.ts","names":[],"sources":["../../src/config-authoring.ts"],"mappings":";;;KAEK,iBAAA,GAAoB,8BAAA;AAAA,cACZ,iCAAA;AAHyD;AAAA,KAK1D,WAAA,GAAc,iBAAA,UAA2B,iCAAA;AAAA,KAGzC,cAAA,GAAiB,iBAAA,UAA2B,iCAAA;AAAA,KAEnD,iBAAA,qBACH,QAAA,8BACI,MAAA,4CACgB,MAAA,GAAS,CAAA,eAAgB,QAAA,GAAW,iBAAA,CAAkB,MAAA,CAAO,CAAA,GAAI,QAAA,CAAS,CAAA,eACxF,MAAA,GACF,QAAA,kBACE,MAAA,kBACE,OAAA,OAAc,MAAA,QAAc,QAAA,gCACZ,MAAA,GAAS,CAAA,eAAgB,QAAA,GAAW,iBAAA,CAAkB,MAAA,CAAO,CAAA,GAAI,QAAA,CAAS,CAAA,uBAE1F,MAAA,GACF,MAAA;AAAA,KAEH,iBAAA,WAA4B,WAAA,IAC/B,CAAA,SAAU,iBAAA,GACN,CAAA,GAAI,iBAAA,CAAkB,CAAA,EAAG,iBAAA,IACzB,CAAA;;iBAGU,iBAAA,iBAAkC,WAAA,CAAA,CAAa,MAAA,EAAQ,iBAAA,CAAkB,CAAA,IAAK,CAAA;AAAA,iBAK9E,oBAAA,iBAAqC,cAAA,CAAA,CAAgB,MAAA,EAAQ,iBAAA,CAAkB,CAAA,IAAK,CAAA"}
1
+ {"version":3,"file":"config-authoring.d.ts","names":[],"sources":["../../src/config-authoring.ts"],"mappings":";;;KAEK,iBAAA,GAAoB,8BAAA;AAAA,cACZ,iCAAA;AAHyD;AAAA,KAK1D,WAAA,GAAc,iBAAA,UAA2B,iCAAA;AAAA,KAGzC,cAAA,GAAiB,iBAAA,UAA2B,iCAAA;AAAA,KAEnD,iBAAA,qBACH,QAAA,8BACM,MAAA,4CACc,MAAA,GAAS,CAAA,eAAgB,QAAA,GAAW,iBAAA,CAAkB,MAAA,CAAO,CAAA,GAAI,QAAA,CAAS,CAAA,eACtF,MAAA,GACJ,QAAA,kBACI,MAAA,kBACA,OAAA,OAAc,MAAA,QAAc,QAAA,gCACZ,MAAA,GAAS,CAAA,eAAgB,QAAA,GAAW,iBAAA,CAAkB,MAAA,CAAO,CAAA,GAAI,QAAA,CAAS,CAAA,uBAExF,MAAA,GACF,MAAA;AAAA,KAEL,iBAAA,WAA4B,WAAA,IAC/B,CAAA,SAAU,iBAAA,GACN,CAAA,GAAI,iBAAA,CAAkB,CAAA,EAAG,iBAAA,IACzB,CAAA;;iBAGU,iBAAA,iBAAkC,WAAA,CAAA,CAAa,MAAA,EAAQ,iBAAA,CAAkB,CAAA,IAAK,CAAA;AAAA,iBAK9E,oBAAA,iBAAqC,cAAA,CAAA,CAAgB,MAAA,EAAQ,iBAAA,CAAkB,CAAA,IAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-authoring.js","names":[],"sources":["../../src/config-authoring.ts"],"sourcesContent":["import type { BranchConfigNormalizedOverride } from \"./config/schema\";\n\ntype StackConfigObject = BranchConfigNormalizedOverride;\nexport const showOnboardingHexclaveConfigValue = \"show-onboarding\";\n/** @deprecated Use `HexclaveConfig` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */\nexport type StackConfig = StackConfigObject | typeof showOnboardingHexclaveConfigValue;\n\n// Hexclave alias — same shape, declared separately so it doesn't inherit the deprecation tag.\nexport type HexclaveConfig = StackConfigObject | typeof showOnboardingHexclaveConfigValue;\n\ntype StrictConfigShape<Actual, Expected> =\n Expected extends readonly unknown[]\n ? Actual extends readonly unknown[]\n ? { [K in keyof Actual]: K extends keyof Expected ? StrictConfigShape<Actual[K], Expected[K]> : never }\n : Actual\n : Expected extends object\n ? Actual extends object\n ? Exclude<keyof Actual, keyof Expected> extends never\n ? { [K in keyof Actual]: K extends keyof Expected ? StrictConfigShape<Actual[K], Expected[K]> : never }\n : never\n : Actual\n : Actual;\n\ntype StrictStackConfig<T extends StackConfig> =\n T extends StackConfigObject\n ? T & StrictConfigShape<T, StackConfigObject>\n : T;\n\n/** @deprecated Use `defineHexclaveConfig` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */\nexport function defineStackConfig<const T extends StackConfig>(config: StrictStackConfig<T>): T {\n return config;\n}\n\n// Hexclave alias — separate function so it does not inherit the deprecation tag.\nexport function defineHexclaveConfig<const T extends HexclaveConfig>(config: StrictStackConfig<T>): T {\n return config;\n}\n"],"mappings":";AAGA,MAAa,oCAAoC;;AA0BjD,SAAgB,kBAA+C,QAAiC;AAC9F,QAAO;;AAIT,SAAgB,qBAAqD,QAAiC;AACpG,QAAO"}
1
+ {"version":3,"file":"config-authoring.js","names":[],"sources":["../../src/config-authoring.ts"],"sourcesContent":["import type { BranchConfigNormalizedOverride } from \"./config/schema\";\n\ntype StackConfigObject = BranchConfigNormalizedOverride;\nexport const showOnboardingHexclaveConfigValue = \"show-onboarding\";\n/** @deprecated Use `HexclaveConfig` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */\nexport type StackConfig = StackConfigObject | typeof showOnboardingHexclaveConfigValue;\n\n// Hexclave alias — same shape, declared separately so it doesn't inherit the deprecation tag.\nexport type HexclaveConfig = StackConfigObject | typeof showOnboardingHexclaveConfigValue;\n\ntype StrictConfigShape<Actual, Expected> =\n Expected extends readonly unknown[]\n ? Actual extends readonly unknown[]\n ? { [K in keyof Actual]: K extends keyof Expected ? StrictConfigShape<Actual[K], Expected[K]> : never }\n : Actual\n : Expected extends object\n ? Actual extends object\n ? Exclude<keyof Actual, keyof Expected> extends never\n ? { [K in keyof Actual]: K extends keyof Expected ? StrictConfigShape<Actual[K], Expected[K]> : never }\n : never\n : Actual\n : Actual;\n\ntype StrictStackConfig<T extends StackConfig> =\n T extends StackConfigObject\n ? T & StrictConfigShape<T, StackConfigObject>\n : T;\n\n/** @deprecated Use `defineHexclaveConfig` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */\nexport function defineStackConfig<const T extends StackConfig>(config: StrictStackConfig<T>): T {\n return config;\n}\n\n// Hexclave alias — separate function so it does not inherit the deprecation tag.\nexport function defineHexclaveConfig<const T extends HexclaveConfig>(config: StrictStackConfig<T>): T {\n return config;\n}\n"],"mappings":";AAGA,MAAa,oCAAoC;;AA0BjD,SAAgB,kBAA+C,QAAiC;AAC9F,QAAO;;AAIT,SAAgB,qBAAqD,QAAiC;AACpG,QAAO"}
@@ -1,6 +1,6 @@
1
1
  import { expect, it } from "vitest";
2
- import { typeAssertExtends } from "./utils/types.js";
3
2
  import { defineStackConfig } from "./config-authoring.js";
3
+ import { typeAssertExtends } from "./utils/types.js";
4
4
 
5
5
  //#region src/config-authoring.test.ts
6
6
  const validConfig = defineStackConfig({ payments: { items: { todos: {
@@ -1 +1 @@
1
- {"version":3,"file":"config-authoring.test.js","names":[],"sources":["../../src/config-authoring.test.ts"],"sourcesContent":["import { expect, it } from \"vitest\";\nimport { typeAssertExtends } from \"./utils/types\";\nimport { defineStackConfig, type StackConfig } from \"./config-authoring\";\n\nconst validConfig = defineStackConfig({\n payments: {\n items: {\n todos: {\n displayName: \"Todo Slots\",\n customerType: \"user\",\n },\n },\n },\n});\nconst showOnboardingConfig = defineStackConfig(\"show-onboarding\");\n\ntypeAssertExtends<typeof validConfig, StackConfig>()();\ntypeAssertExtends<typeof showOnboardingConfig, StackConfig>()();\n\nit(\"returns its input unchanged\", () => {\n expect(defineStackConfig(validConfig)).toBe(validConfig);\n expect(defineStackConfig(showOnboardingConfig)).toBe(showOnboardingConfig);\n});\n\ndefineStackConfig({\n // @ts-expect-error Top-level dot notation should not be accepted in typed config files.\n \"payments.items\": {\n todos: {\n displayName: \"Todo Slots\",\n customerType: \"user\",\n },\n },\n});\n\ndefineStackConfig({\n payments: {\n // @ts-expect-error Unknown keys should not be accepted in typed config files.\n missingField: true,\n },\n});\n\ndefineStackConfig({\n payments: {\n items: {\n todos: {\n displayName: \"Todo Slots\",\n // @ts-expect-error Invalid enum values should fail type-checking.\n customerType: \"workspace\",\n },\n },\n },\n});\n"],"mappings":";;;;;AAIA,MAAM,cAAc,kBAAkB,EACpC,UAAU,EACR,OAAO,EACL,OAAO;CACL,aAAa;CACb,cAAc;CACf,EACF,EACF,EACF,CAAC;AACF,MAAM,uBAAuB,kBAAkB,kBAAkB;AAEjE,mBAAoD,EAAE;AACtD,mBAA6D,EAAE;AAE/D,GAAG,qCAAqC;AACtC,QAAO,kBAAkB,YAAY,CAAC,CAAC,KAAK,YAAY;AACxD,QAAO,kBAAkB,qBAAqB,CAAC,CAAC,KAAK,qBAAqB;EAC1E;AAEF,kBAAkB,EAEhB,kBAAkB,EAChB,OAAO;CACL,aAAa;CACb,cAAc;CACf,EACF,EACF,CAAC;AAEF,kBAAkB,EAChB,UAAU,EAER,cAAc,MACf,EACF,CAAC;AAEF,kBAAkB,EAChB,UAAU,EACR,OAAO,EACL,OAAO;CACL,aAAa;CAEb,cAAc;CACf,EACF,EACF,EACF,CAAC"}
1
+ {"version":3,"file":"config-authoring.test.js","names":[],"sources":["../../src/config-authoring.test.ts"],"sourcesContent":["import { expect, it } from \"vitest\";\nimport { defineStackConfig, type StackConfig } from \"./config-authoring\";\nimport { typeAssertExtends } from \"./utils/types\";\n\nconst validConfig = defineStackConfig({\n payments: {\n items: {\n todos: {\n displayName: \"Todo Slots\",\n customerType: \"user\",\n },\n },\n },\n});\nconst showOnboardingConfig = defineStackConfig(\"show-onboarding\");\n\ntypeAssertExtends<typeof validConfig, StackConfig>()();\ntypeAssertExtends<typeof showOnboardingConfig, StackConfig>()();\n\nit(\"returns its input unchanged\", () => {\n expect(defineStackConfig(validConfig)).toBe(validConfig);\n expect(defineStackConfig(showOnboardingConfig)).toBe(showOnboardingConfig);\n});\n\ndefineStackConfig({\n // @ts-expect-error Top-level dot notation should not be accepted in typed config files.\n \"payments.items\": {\n todos: {\n displayName: \"Todo Slots\",\n customerType: \"user\",\n },\n },\n});\n\ndefineStackConfig({\n payments: {\n // @ts-expect-error Unknown keys should not be accepted in typed config files.\n missingField: true,\n },\n});\n\ndefineStackConfig({\n payments: {\n items: {\n todos: {\n displayName: \"Todo Slots\",\n // @ts-expect-error Invalid enum values should fail type-checking.\n customerType: \"workspace\",\n },\n },\n },\n});\n"],"mappings":";;;;;AAIA,MAAM,cAAc,kBAAkB,EACpC,UAAU,EACR,OAAO,EACL,OAAO;CACL,aAAa;CACb,cAAc;CACf,EACF,EACF,EACF,CAAC;AACF,MAAM,uBAAuB,kBAAkB,kBAAkB;AAEjE,mBAAoD,EAAE;AACtD,mBAA6D,EAAE;AAE/D,GAAG,qCAAqC;AACtC,QAAO,kBAAkB,YAAY,CAAC,CAAC,KAAK,YAAY;AACxD,QAAO,kBAAkB,qBAAqB,CAAC,CAAC,KAAK,qBAAqB;EAC1E;AAEF,kBAAkB,EAEhB,kBAAkB,EAChB,OAAO;CACL,aAAa;CACb,cAAc;CACf,EACF,EACF,CAAC;AAEF,kBAAkB,EAChB,UAAU,EAER,cAAc,MACf,EACF,CAAC;AAEF,kBAAkB,EAChB,UAAU,EACR,OAAO,EACL,OAAO;CACL,aAAa;CAEb,cAAc;CACf,EACF,EACF,EACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { parseHexclaveConfigFileContent, renderConfigFileContent } from "./hexclave-config-file";
1
+ import { hexclaveConfigFileExportsConfig, parseHexclaveConfigFileContent, renderConfigFileContent, tryParseHexclaveConfigFileContent } from "./hexclave-config-file";
2
2
 
3
3
  //#region src/config-rendering.d.ts
4
4
  /**
@@ -13,5 +13,5 @@ declare function detectConfigImportPackage(dependencies: string[]): string | und
13
13
  */
14
14
  declare function detectImportPackageFromDir(dir: string): string | undefined;
15
15
  //#endregion
16
- export { detectConfigImportPackage, detectImportPackageFromDir, parseHexclaveConfigFileContent, renderConfigFileContent };
16
+ export { detectConfigImportPackage, detectImportPackageFromDir, hexclaveConfigFileExportsConfig, parseHexclaveConfigFileContent, renderConfigFileContent, tryParseHexclaveConfigFileContent };
17
17
  //# sourceMappingURL=config-rendering.d.ts.map