@hexclave/cli 1.0.20 → 1.0.21

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 (326) hide show
  1. package/dist/dashboard/apps/dashboard/.next/BUILD_ID +1 -1
  2. package/dist/dashboard/apps/dashboard/.next/build-manifest.json +5 -5
  3. package/dist/dashboard/apps/dashboard/.next/prerender-manifest.json +3 -3
  4. package/dist/dashboard/apps/dashboard/.next/required-server-files.json +1 -1
  5. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page/build-manifest.json +2 -2
  6. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page_client-reference-manifest.js +1 -1
  7. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page/build-manifest.json +2 -2
  8. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page_client-reference-manifest.js +1 -1
  9. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/build-manifest.json +2 -2
  10. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/server-reference-manifest.json +3 -3
  11. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page_client-reference-manifest.js +1 -1
  12. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page/build-manifest.json +2 -2
  13. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page_client-reference-manifest.js +1 -1
  14. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page/build-manifest.json +2 -2
  15. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page_client-reference-manifest.js +1 -1
  16. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page/build-manifest.json +2 -2
  17. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page_client-reference-manifest.js +1 -1
  18. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page/build-manifest.json +2 -2
  19. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page_client-reference-manifest.js +1 -1
  20. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page/build-manifest.json +2 -2
  21. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page_client-reference-manifest.js +1 -1
  22. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page/build-manifest.json +2 -2
  23. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page_client-reference-manifest.js +1 -1
  24. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page/build-manifest.json +2 -2
  25. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page_client-reference-manifest.js +1 -1
  26. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page/build-manifest.json +2 -2
  27. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page_client-reference-manifest.js +1 -1
  28. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page/build-manifest.json +2 -2
  29. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
  30. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page/build-manifest.json +2 -2
  31. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page_client-reference-manifest.js +1 -1
  32. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page/build-manifest.json +2 -2
  33. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page_client-reference-manifest.js +1 -1
  34. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page/build-manifest.json +2 -2
  35. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page_client-reference-manifest.js +1 -1
  36. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page/build-manifest.json +2 -2
  37. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page_client-reference-manifest.js +1 -1
  38. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page/build-manifest.json +2 -2
  39. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page_client-reference-manifest.js +1 -1
  40. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page/build-manifest.json +2 -2
  41. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page_client-reference-manifest.js +1 -1
  42. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page/build-manifest.json +2 -2
  43. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page_client-reference-manifest.js +1 -1
  44. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page/build-manifest.json +2 -2
  45. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page_client-reference-manifest.js +1 -1
  46. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page/build-manifest.json +2 -2
  47. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page_client-reference-manifest.js +1 -1
  48. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page/build-manifest.json +2 -2
  49. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page_client-reference-manifest.js +1 -1
  50. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page/build-manifest.json +2 -2
  51. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page_client-reference-manifest.js +1 -1
  52. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page/build-manifest.json +2 -2
  53. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page_client-reference-manifest.js +1 -1
  54. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page/build-manifest.json +2 -2
  55. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page_client-reference-manifest.js +1 -1
  56. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page/build-manifest.json +2 -2
  57. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page_client-reference-manifest.js +1 -1
  58. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page/build-manifest.json +2 -2
  59. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page_client-reference-manifest.js +1 -1
  60. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page/build-manifest.json +2 -2
  61. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page_client-reference-manifest.js +1 -1
  62. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page/build-manifest.json +2 -2
  63. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page_client-reference-manifest.js +1 -1
  64. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page/build-manifest.json +2 -2
  65. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page_client-reference-manifest.js +1 -1
  66. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page/build-manifest.json +2 -2
  67. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page_client-reference-manifest.js +1 -1
  68. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page/build-manifest.json +2 -2
  69. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page_client-reference-manifest.js +1 -1
  70. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page/build-manifest.json +2 -2
  71. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page_client-reference-manifest.js +1 -1
  72. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page/build-manifest.json +2 -2
  73. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page_client-reference-manifest.js +1 -1
  74. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page/build-manifest.json +2 -2
  75. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page_client-reference-manifest.js +1 -1
  76. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page/build-manifest.json +2 -2
  77. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page_client-reference-manifest.js +1 -1
  78. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page/build-manifest.json +2 -2
  79. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page_client-reference-manifest.js +1 -1
  80. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page/build-manifest.json +2 -2
  81. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page_client-reference-manifest.js +1 -1
  82. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page/build-manifest.json +2 -2
  83. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page_client-reference-manifest.js +1 -1
  84. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page/build-manifest.json +2 -2
  85. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page_client-reference-manifest.js +1 -1
  86. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page/build-manifest.json +2 -2
  87. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page_client-reference-manifest.js +1 -1
  88. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page/build-manifest.json +2 -2
  89. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page_client-reference-manifest.js +1 -1
  90. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page/build-manifest.json +2 -2
  91. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page_client-reference-manifest.js +1 -1
  92. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page/build-manifest.json +2 -2
  93. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page_client-reference-manifest.js +1 -1
  94. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page/build-manifest.json +2 -2
  95. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page_client-reference-manifest.js +1 -1
  96. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page/build-manifest.json +2 -2
  97. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page_client-reference-manifest.js +1 -1
  98. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page/build-manifest.json +2 -2
  99. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page_client-reference-manifest.js +1 -1
  100. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page/build-manifest.json +2 -2
  101. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page_client-reference-manifest.js +1 -1
  102. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page/build-manifest.json +2 -2
  103. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page_client-reference-manifest.js +1 -1
  104. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page/build-manifest.json +2 -2
  105. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page_client-reference-manifest.js +1 -1
  106. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page/build-manifest.json +2 -2
  107. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page_client-reference-manifest.js +1 -1
  108. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page/build-manifest.json +2 -2
  109. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page_client-reference-manifest.js +1 -1
  110. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page/build-manifest.json +2 -2
  111. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page_client-reference-manifest.js +1 -1
  112. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page/build-manifest.json +2 -2
  113. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page_client-reference-manifest.js +1 -1
  114. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page/build-manifest.json +2 -2
  115. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page_client-reference-manifest.js +1 -1
  116. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page/build-manifest.json +2 -2
  117. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page_client-reference-manifest.js +1 -1
  118. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page/build-manifest.json +2 -2
  119. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page_client-reference-manifest.js +1 -1
  120. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page/build-manifest.json +2 -2
  121. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page_client-reference-manifest.js +1 -1
  122. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page/build-manifest.json +2 -2
  123. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page_client-reference-manifest.js +1 -1
  124. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page/build-manifest.json +2 -2
  125. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page_client-reference-manifest.js +1 -1
  126. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page/build-manifest.json +2 -2
  127. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page_client-reference-manifest.js +1 -1
  128. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page/build-manifest.json +2 -2
  129. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page_client-reference-manifest.js +1 -1
  130. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page/build-manifest.json +2 -2
  131. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page_client-reference-manifest.js +1 -1
  132. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page/build-manifest.json +2 -2
  133. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page_client-reference-manifest.js +1 -1
  134. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page/build-manifest.json +2 -2
  135. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page_client-reference-manifest.js +1 -1
  136. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page/build-manifest.json +2 -2
  137. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  138. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page/build-manifest.json +2 -2
  139. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page_client-reference-manifest.js +1 -1
  140. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page/build-manifest.json +2 -2
  141. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page_client-reference-manifest.js +1 -1
  142. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page/build-manifest.json +2 -2
  143. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page_client-reference-manifest.js +1 -1
  144. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page/build-manifest.json +2 -2
  145. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page_client-reference-manifest.js +1 -1
  146. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page/build-manifest.json +2 -2
  147. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page_client-reference-manifest.js +1 -1
  148. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page/build-manifest.json +2 -2
  149. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page_client-reference-manifest.js +1 -1
  150. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page/build-manifest.json +2 -2
  151. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page_client-reference-manifest.js +1 -1
  152. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page/build-manifest.json +2 -2
  153. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page_client-reference-manifest.js +1 -1
  154. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/build-manifest.json +2 -2
  155. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/server-reference-manifest.json +1 -1
  156. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page_client-reference-manifest.js +1 -1
  157. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page/build-manifest.json +2 -2
  158. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
  159. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page/build-manifest.json +2 -2
  160. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page_client-reference-manifest.js +1 -1
  161. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/build-manifest.json +2 -2
  162. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/server-reference-manifest.json +1 -1
  163. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page_client-reference-manifest.js +1 -1
  164. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page/build-manifest.json +2 -2
  165. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
  166. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page/build-manifest.json +2 -2
  167. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  168. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page/build-manifest.json +2 -2
  169. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page_client-reference-manifest.js +1 -1
  170. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page/build-manifest.json +2 -2
  171. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page_client-reference-manifest.js +1 -1
  172. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page/build-manifest.json +2 -2
  173. package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page_client-reference-manifest.js +1 -1
  174. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error/page/build-manifest.json +2 -2
  175. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.html +1 -1
  176. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.rsc +1 -1
  177. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  178. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  179. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  180. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  181. package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  182. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page/build-manifest.json +2 -2
  183. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  184. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.html +2 -2
  185. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.rsc +16 -16
  186. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  187. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  188. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  189. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  190. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  191. package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  192. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page/build-manifest.json +2 -2
  193. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page_client-reference-manifest.js +1 -1
  194. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.html +2 -2
  195. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.rsc +16 -16
  196. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_full.segment.rsc +16 -16
  197. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_head.segment.rsc +4 -4
  198. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_index.segment.rsc +10 -10
  199. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_tree.segment.rsc +2 -2
  200. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret/__PAGE__.segment.rsc +3 -3
  201. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret.segment.rsc +3 -3
  202. package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment.segment.rsc +3 -3
  203. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page/build-manifest.json +2 -2
  204. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page_client-reference-manifest.js +1 -1
  205. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.html +2 -2
  206. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.rsc +17 -17
  207. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_full.segment.rsc +17 -17
  208. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_head.segment.rsc +4 -4
  209. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_index.segment.rsc +10 -10
  210. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_tree.segment.rsc +2 -2
  211. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug/__PAGE__.segment.rsc +4 -4
  212. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug.segment.rsc +3 -3
  213. package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health.segment.rsc +3 -3
  214. package/dist/dashboard/apps/dashboard/.next/server/app/index.html +2 -2
  215. package/dist/dashboard/apps/dashboard/.next/server/app/index.rsc +15 -15
  216. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
  217. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p.segment.rsc +4 -4
  218. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_full.segment.rsc +15 -15
  219. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_head.segment.rsc +4 -4
  220. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_index.segment.rsc +10 -10
  221. package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  222. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.html +2 -2
  223. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.rsc +19 -19
  224. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project/__PAGE__.segment.rsc +3 -3
  225. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project.segment.rsc +3 -3
  226. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
  227. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
  228. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p.segment.rsc +4 -4
  229. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_full.segment.rsc +19 -19
  230. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_head.segment.rsc +4 -4
  231. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_index.segment.rsc +10 -10
  232. package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_tree.segment.rsc +2 -2
  233. package/dist/dashboard/apps/dashboard/.next/server/app/playground.html +2 -2
  234. package/dist/dashboard/apps/dashboard/.next/server/app/playground.rsc +19 -19
  235. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground/__PAGE__.segment.rsc +3 -3
  236. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground.segment.rsc +3 -3
  237. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
  238. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
  239. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p.segment.rsc +4 -4
  240. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_full.segment.rsc +19 -19
  241. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_head.segment.rsc +4 -4
  242. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_index.segment.rsc +10 -10
  243. package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_tree.segment.rsc +2 -2
  244. package/dist/dashboard/apps/dashboard/.next/server/app/projects.html +2 -2
  245. package/dist/dashboard/apps/dashboard/.next/server/app/projects.rsc +19 -19
  246. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects/__PAGE__.segment.rsc +3 -3
  247. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects.segment.rsc +3 -3
  248. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
  249. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
  250. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p.segment.rsc +4 -4
  251. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_full.segment.rsc +19 -19
  252. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_head.segment.rsc +4 -4
  253. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_index.segment.rsc +10 -10
  254. package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  255. package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page/build-manifest.json +2 -2
  256. package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page_client-reference-manifest.js +1 -1
  257. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.html +2 -2
  258. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.rsc +20 -20
  259. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats/__PAGE__.segment.rsc +6 -6
  260. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats.segment.rsc +3 -3
  261. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p.segment.rsc +4 -4
  262. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_full.segment.rsc +20 -20
  263. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_head.segment.rsc +4 -4
  264. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_index.segment.rsc +10 -10
  265. package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_tree.segment.rsc +2 -2
  266. package/dist/dashboard/apps/dashboard/.next/server/chunks/[root-of-the-server]__1m-q0b3._.js +1 -1
  267. package/dist/dashboard/apps/dashboard/.next/server/chunks/_04as7p-._.js +22 -22
  268. package/dist/dashboard/apps/dashboard/.next/server/chunks/_0tnctfw._.js +1 -1
  269. package/dist/dashboard/apps/dashboard/.next/server/chunks/node_modules__pnpm_1_a837b._.js +1 -1
  270. package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_0rk1u8f._.js +1 -1
  271. package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_1eprmn6._.js +1 -1
  272. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_06e1zir._.js +9 -0
  273. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_18ofnte._.js +9 -0
  274. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/15dq_(main)_(protected)_projects_[projectId]_users_[userId]_page-client_tsx_0ptfo2h._.js +2 -2
  275. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/[root-of-the-server]__0fiuqqk._.js +2 -2
  276. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_05oib0d._.js +3 -0
  277. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0s_ag9o._.js +1 -1
  278. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0xl4mrg._.js +3 -3
  279. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1-axnoc._.js +1 -1
  280. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_132pp19._.js +1 -1
  281. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1gqr2d9._.js +1 -1
  282. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1jp05wg._.js +3 -0
  283. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1q7j2d7._.js +5 -5
  284. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1wwwu_3._.js +1 -1
  285. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1z655xf._.js +1 -1
  286. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/apps_dashboard_src_components_dashboard-user-button_tsx_1m9znfy._.js +1 -1
  287. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/node_modules__pnpm_0cfdzin._.js +1 -1
  288. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_0kveln1._.js +1 -1
  289. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_1r7flhi._.js +1 -1
  290. package/dist/dashboard/apps/dashboard/.next/server/middleware-build-manifest.js +5 -5
  291. package/dist/dashboard/apps/dashboard/.next/server/pages/404.html +2 -2
  292. package/dist/dashboard/apps/dashboard/.next/server/pages/500.html +1 -1
  293. package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.js +1 -1
  294. package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.json +5 -5
  295. package/dist/dashboard/apps/dashboard/.next/static/chunks/{2djrn7poti_fw.js → 0-cvg3igufvd6.js} +2 -2
  296. package/dist/dashboard/apps/dashboard/.next/static/chunks/{4079rt6gkozmp.js → 0n_amwdwnr5qv.js} +1 -1
  297. package/dist/dashboard/apps/dashboard/.next/static/chunks/{1c9um9pw7riw0.js → 0n_xejiuv6hi3.js} +2 -2
  298. package/dist/dashboard/apps/dashboard/.next/static/chunks/0nwiy21paqdxk.js +9 -0
  299. package/dist/dashboard/apps/dashboard/.next/static/chunks/{41e2zx2dgkq1w.js → 0x24ip8d8uywa.js} +2 -2
  300. package/dist/dashboard/apps/dashboard/.next/static/chunks/{2zkv3tg8lrss9.js → 1_3_bf5h-idt6.js} +1 -1
  301. package/dist/dashboard/apps/dashboard/.next/static/chunks/1fvvqk0r2b0xi.css +1 -0
  302. package/dist/dashboard/apps/dashboard/.next/static/chunks/{1g7ocjd1h6op9.js → 1iz1z3p9tjgbd.js} +2 -2
  303. package/dist/dashboard/apps/dashboard/.next/static/chunks/{1yis25nn36osv.js → 1l5uzgfyrdupp.js} +5 -5
  304. package/dist/dashboard/apps/dashboard/.next/static/chunks/{2qgng6gut-lpo.js → 2-bdllt91-l80.js} +1 -1
  305. package/dist/dashboard/apps/dashboard/.next/static/chunks/{3bo2ua_y4q43v.js → 2envmrg1f61w5.js} +3 -3
  306. package/dist/dashboard/apps/dashboard/.next/static/chunks/{0_k8aohi1d6c5.js → 2rtuock2-guiu.js} +1 -1
  307. package/dist/dashboard/apps/dashboard/.next/static/chunks/{3d-5wrlqx-xi5.js → 2vif9i05n-kbh.js} +2 -2
  308. package/dist/dashboard/apps/dashboard/.next/static/chunks/{0al4rf0wulms6.js → 2xzp981upsrrz.js} +4 -4
  309. package/dist/dashboard/apps/dashboard/.next/static/chunks/{3yr78v6baa_dn.js → 3kqlh2r279xvm.js} +1 -1
  310. package/dist/dashboard/apps/dashboard/.next/static/chunks/{0nd-d9_e0czkl.js → 3x2nrm-cfkt_s.js} +1 -1
  311. package/dist/dashboard/apps/dashboard/.next/static/chunks/{2u4zmrk36sq5y.js → 3xy61pxy24_4d.js} +1 -1
  312. package/dist/dashboard/apps/dashboard/.next/static/chunks/{turbopack-425k_ofsbf1gw.js → turbopack-2t16bx-7bi0_i.js} +1 -1
  313. package/dist/dashboard/apps/dashboard/package.json +1 -1
  314. package/dist/dashboard/apps/dashboard/server.js +1 -1
  315. package/dist/index.js +39 -15
  316. package/dist/index.js.map +1 -1
  317. package/package.json +4 -4
  318. package/src/commands/dev.ts +49 -10
  319. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_07k2db_._.js +0 -9
  320. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0lvurax._.js +0 -9
  321. package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1_40imk._.js +0 -3
  322. package/dist/dashboard/apps/dashboard/.next/static/chunks/0z4wcrkw_j19e.js +0 -9
  323. package/dist/dashboard/apps/dashboard/.next/static/chunks/3kqudwiyy5y1a.css +0 -1
  324. /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_buildManifest.js +0 -0
  325. /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_clientMiddlewareManifest.js +0 -0
  326. /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_ssgManifest.js +0 -0
@@ -1,9 +1,9 @@
1
1
  module.exports=[168805,(a,b,c)=>{"use strict";let d;Object.defineProperty(c,"__esModule",{value:!0}),c.parseCookie=l,c.parse=l,c.stringifyCookie=function(a,b){let c=b?.encode||encodeURIComponent,d=[];for(let b of Object.keys(a)){let g=a[b];if(void 0===g)continue;if(!e.test(b))throw TypeError(`cookie name is invalid: ${b}`);let h=c(g);if(!f.test(h))throw TypeError(`cookie val is invalid: ${g}`);d.push(`${b}=${h}`)}return d.join("; ")},c.stringifySetCookie=m,c.serialize=m,c.parseSetCookie=function(a,b){let c=b?.decode||q,d=a.length,e=n(a,0,d),f=o(a,0,e),g=-1===f?{name:"",value:c(p(a,0,e))}:{name:p(a,0,f),value:c(p(a,f+1,e))},h=e+1;for(;h<d;){let b=n(a,h,d),c=o(a,h,b),e=-1===c?p(a,h,b):p(a,h,c),f=-1===c?void 0:p(a,c+1,b);switch(e.toLowerCase()){case"httponly":g.httpOnly=!0;break;case"secure":g.secure=!0;break;case"partitioned":g.partitioned=!0;break;case"domain":g.domain=f;break;case"path":g.path=f;break;case"max-age":f&&i.test(f)&&(g.maxAge=Number(f));break;case"expires":if(!f)break;let j=new Date(f);Number.isFinite(j.valueOf())&&(g.expires=j);break;case"priority":if(!f)break;let k=f.toLowerCase();("low"===k||"medium"===k||"high"===k)&&(g.priority=k);break;case"samesite":if(!f)break;let l=f.toLowerCase();("lax"===l||"strict"===l||"none"===l)&&(g.sameSite=l)}h=b+1}return g},c.stringifySetCookie=m,c.serialize=m;let e=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,f=/^[\u0021-\u003A\u003C-\u007E]*$/,g=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,h=/^[\u0020-\u003A\u003D-\u007E]*$/,i=/^-?\d+$/,j=Object.prototype.toString,k=((d=function(){}).prototype=Object.create(null),d);function l(a,b){let c=new k,d=a.length;if(d<2)return c;let e=b?.decode||q,f=0;do{let b=o(a,f,d);if(-1===b)break;let g=n(a,f,d);if(b>g){f=a.lastIndexOf(";",b-1)+1;continue}let h=p(a,f,b);void 0===c[h]&&(c[h]=e(p(a,b+1,g))),f=g+1}while(f<d)return c}function m(a,b,c){let d="object"==typeof a?a:{...c,name:a,value:String(b)},i=("object"==typeof b?b:c)?.encode||encodeURIComponent;if(!e.test(d.name))throw TypeError(`argument name is invalid: ${d.name}`);let k=d.value?i(d.value):"";if(!f.test(k))throw TypeError(`argument val is invalid: ${d.value}`);let l=d.name+"="+k;if(void 0!==d.maxAge){if(!Number.isInteger(d.maxAge))throw TypeError(`option maxAge is invalid: ${d.maxAge}`);l+="; Max-Age="+d.maxAge}if(d.domain){if(!g.test(d.domain))throw TypeError(`option domain is invalid: ${d.domain}`);l+="; Domain="+d.domain}if(d.path){if(!h.test(d.path))throw TypeError(`option path is invalid: ${d.path}`);l+="; Path="+d.path}if(d.expires){var m;if(m=d.expires,"[object Date]"!==j.call(m)||!Number.isFinite(d.expires.valueOf()))throw TypeError(`option expires is invalid: ${d.expires}`);l+="; Expires="+d.expires.toUTCString()}if(d.httpOnly&&(l+="; HttpOnly"),d.secure&&(l+="; Secure"),d.partitioned&&(l+="; Partitioned"),d.priority)switch("string"==typeof d.priority?d.priority.toLowerCase():void 0){case"low":l+="; Priority=Low";break;case"medium":l+="; Priority=Medium";break;case"high":l+="; Priority=High";break;default:throw TypeError(`option priority is invalid: ${d.priority}`)}if(d.sameSite)switch("string"==typeof d.sameSite?d.sameSite.toLowerCase():d.sameSite){case!0:case"strict":l+="; SameSite=Strict";break;case"lax":l+="; SameSite=Lax";break;case"none":l+="; SameSite=None";break;default:throw TypeError(`option sameSite is invalid: ${d.sameSite}`)}return l}function n(a,b,c){let d=a.indexOf(";",b);return -1===d?c:d}function o(a,b,c){let d=a.indexOf("=",b);return d<c?d:-1}function p(a,b,c){let d=b,e=c;do{let b=a.charCodeAt(d);if(32!==b&&9!==b)break}while(++d<e)for(;e>d;){let b=a.charCodeAt(e-1);if(32!==b&&9!==b)break;e--}return a.slice(d,e)}function q(a){if(-1===a.indexOf("%"))return a;try{return decodeURIComponent(a)}catch(b){return a}}},889685,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ActionDidNotRevalidate:function(){return f},ActionDidRevalidateDynamicOnly:function(){return h},ActionDidRevalidateStaticAndDynamic:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=0,g=1,h=2},18024,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(233251),g=a.r(875267),h=a.r(556704),i=a.r(889685);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},782328,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(a.r(304189));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},80660,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cookies",{enumerable:!0,get:function(){return n}});let d=a.r(18024),e=a.r(233251),f=a.r(556704),g=a.r(832319),h=a.r(743019),i=a.r(464500),j=a.r(149979),k=a.r(782328),l=a.r(456279),m=a.r(416867);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}a.r(999988);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},526820,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HeadersAdapter:function(){return h},ReadonlyHeadersError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(875267);class g extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new g}}class h extends Headers{constructor(a){super(),this.headers=new Proxy(a,{get(b,c,d){if("symbol"==typeof c)return f.ReflectAdapter.get(b,c,d);let e=c.toLowerCase(),g=Object.keys(a).find(a=>a.toLowerCase()===e);if(void 0!==g)return f.ReflectAdapter.get(b,g,d)},set(b,c,d,e){if("symbol"==typeof c)return f.ReflectAdapter.set(b,c,d,e);let g=c.toLowerCase(),h=Object.keys(a).find(a=>a.toLowerCase()===g);return f.ReflectAdapter.set(b,h??c,d,e)},has(b,c){if("symbol"==typeof c)return f.ReflectAdapter.has(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0!==e&&f.ReflectAdapter.has(b,e)},deleteProperty(b,c){if("symbol"==typeof c)return f.ReflectAdapter.deleteProperty(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0===e||f.ReflectAdapter.deleteProperty(b,e)}})}static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"append":case"delete":case"set":return g.callable;default:return f.ReflectAdapter.get(a,b,c)}}})}merge(a){return Array.isArray(a)?a.join(", "):a}static from(a){return a instanceof Headers?a:new h(a)}append(a,b){let c=this.headers[a];"string"==typeof c?this.headers[a]=[c,b]:Array.isArray(c)?c.push(b):this.headers[a]=b}delete(a){delete this.headers[a]}get(a){let b=this.headers[a];return void 0!==b?this.merge(b):null}has(a){return void 0!==this.headers[a]}set(a,b){this.headers[a]=b}forEach(a,b){for(let[c,d]of this.entries())a.call(b,d,c,this)}*entries(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase(),c=this.get(b);yield[b,c]}}*keys(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase();yield b}}*values(){for(let a of Object.keys(this.headers)){let b=this.get(a);yield b}}[Symbol.iterator](){return this.entries()}}},829235,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"headers",{enumerable:!0,get:function(){return m}});let d=a.r(526820),e=a.r(556704),f=a.r(832319),g=a.r(743019),h=a.r(464500),i=a.r(149979),j=a.r(782328),k=a.r(456279),l=a.r(416867);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}a.r(999988);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},632895,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"draftMode",{enumerable:!0,get:function(){return l}});let d=a.r(832319),e=a.r(556704),f=a.r(743019),g=a.r(782328),h=a.r(464500),i=a.r(879318),j=a.r(416867),k=a.r(149979);function l(){let a="draftMode",b=e.workAsyncStorage.getStore(),c=d.workUnitAsyncStorage.getStore();switch((!b||!c)&&(0,d.throwForMissingRequestStore)(a),c.type){case"prerender-runtime":return(0,k.delayUntilRuntimeStage)(c,m(c.draftMode,b));case"request":return m(c.draftMode,b);case"cache":case"private-cache":case"unstable-cache":let f=(0,d.getDraftModeProviderForCacheScope)(b,c);if(f)return m(f,b);case"prerender":case"prerender-ppr":case"prerender-legacy":return m(null,b);case"prerender-client":case"validation-client":{let a="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0})}case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`${a}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1132",enumerable:!1,configurable:!0});default:return c}}function m(a,b){let c=o.get(a??n);return c||Promise.resolve(new p(a))}a.r(875267);let n={},o=new WeakMap;class p{constructor(a){this._provider=a}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){q("draftMode().enable()",this.enable),null!==this._provider&&this._provider.enable()}disable(){q("draftMode().disable()",this.disable),null!==this._provider&&this._provider.disable()}}function q(a,b){let c=e.workAsyncStorage.getStore(),g=d.workUnitAsyncStorage.getStore();if(c){if((null==g?void 0:g.phase)==="after")throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E845",enumerable:!1,configurable:!0});if(c.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${c.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(g)switch(g.type){case"cache":case"private-cache":{let d=Object.defineProperty(Error(`Route ${c.route} used "${a}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E829",enumerable:!1,configurable:!0});throw Error.captureStackTrace(d,b),c.invalidDynamicUsageError??=d,d}case"unstable-cache":throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E844",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":{let b=Object.defineProperty(Error(`Route ${c.route} used ${a} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(c.route,a,b,g)}case"prerender-client":case"validation-client":let d="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${d} must not be used within a Client Component. Next.js should be preventing ${d} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(c.route,a,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let e=Object.defineProperty(new i.DynamicServerError(`Route ${c.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.dynamicUsageDescription=a,c.dynamicUsageStack=e.stack,e;case"request":(0,f.trackDynamicDataInDynamicRender)(g);break;case"generate-static-params":throw Object.defineProperty(Error(`Route ${c.route} used \`${a}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1121",enumerable:!1,configurable:!0})}}}(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},315739,(a,b,c)=>{b.exports.cookies=a.r(80660).cookies,b.exports.headers=a.r(829235).headers,b.exports.draftMode=a.r(632895).draftMode},485689,a=>{"use strict";let b,c,d,e;var f=a.i(835020),g=a.i(849092),h=a.i(938152),i=a.i(304189);a.i(491323);var j=a.i(492670),k=a.i(886516),l=a.i(618228),m=a.i(836382),n=a.i(421910),o=a.i(337772);function p(a){let b=new Uint8Array(a),c="";for(let a of b)c+=String.fromCharCode(a);return btoa(c).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function q(a){let b=a.replace(/-/g,"+").replace(/_/g,"/"),c=(4-b.length%4)%4,d=atob(b.padEnd(b.length+c,"=")),e=new ArrayBuffer(d.length),f=new Uint8Array(e);for(let a=0;a<d.length;a++)f[a]=d.charCodeAt(a);return e}function r(){return s.stubThis(globalThis?.PublicKeyCredential!==void 0&&"function"==typeof globalThis.PublicKeyCredential)}let s={stubThis:a=>a};function t(a){let{id:b}=a;return{...a,id:q(b),transports:a.transports}}function u(a){return"localhost"===a||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(a)}class v extends Error{constructor({message:a,code:b,cause:c,name:d}){super(a,{cause:c}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=d??c.name,this.code=b}}let w=new class{constructor(){Object.defineProperty(this,"controller",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}createNewAbortSignal(){if(this.controller){let a=Error("Cancelling existing WebAuthn API call for new one");a.name="AbortError",this.controller.abort(a)}let a=new AbortController;return this.controller=a,a.signal}cancelCeremony(){if(this.controller){let a=Error("Manually cancelling existing WebAuthn API call");a.name="AbortError",this.controller.abort(a),this.controller=void 0}}},x=["cross-platform","platform"];function y(a){if(a&&!(0>x.indexOf(a)))return a}async function z(a){let b,c,d,e,f;!a.optionsJSON&&a.challenge&&(console.warn("startRegistration() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),a={optionsJSON:a});let{optionsJSON:g,useAutoRegister:h=!1}=a;if(!r())throw Error("WebAuthn is not supported in this browser");let i={...g,challenge:q(g.challenge),user:{...g.user,id:q(g.user.id)},excludeCredentials:g.excludeCredentials?.map(t)},j={};h&&(j.mediation="conditional"),j.publicKey=i,j.signal=w.createNewAbortSignal();try{b=await navigator.credentials.create(j)}catch(a){throw function({error:a,options:b}){let{publicKey:c}=b;if(!c)throw Error("options was missing required publicKey property");if("AbortError"===a.name){if(b.signal instanceof AbortSignal)return new v({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:a})}else if("ConstraintError"===a.name){if(c.authenticatorSelection?.requireResidentKey===!0)return new v({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:a});else if("conditional"===b.mediation&&c.authenticatorSelection?.userVerification==="required")return new v({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:a});else if(c.authenticatorSelection?.userVerification==="required")return new v({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:a})}else if("InvalidStateError"===a.name)return new v({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:a});else if("NotAllowedError"===a.name)return new v({message:a.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:a});else if("NotSupportedError"===a.name)return new v(0===c.pubKeyCredParams.filter(a=>"public-key"===a.type).length?{message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:a}:{message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:a});else if("SecurityError"===a.name){let b=globalThis.location.hostname;if(!u(b))return new v({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:a});if(c.rp.id!==b)return new v({message:`The RP ID "${c.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:a})}else if("TypeError"===a.name){if(c.user.id.byteLength<1||c.user.id.byteLength>64)return new v({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:a})}else if("UnknownError"===a.name)return new v({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:a});return a}({error:a,options:j})}if(!b)throw Error("Registration was not completed");let{id:k,rawId:l,response:m,type:n}=b;if("function"==typeof m.getTransports&&(d=m.getTransports()),"function"==typeof m.getPublicKeyAlgorithm)try{e=m.getPublicKeyAlgorithm()}catch(a){A("getPublicKeyAlgorithm()",a)}if("function"==typeof m.getPublicKey)try{let a=m.getPublicKey();null!==a&&(f=p(a))}catch(a){A("getPublicKey()",a)}if("function"==typeof m.getAuthenticatorData)try{c=p(m.getAuthenticatorData())}catch(a){A("getAuthenticatorData()",a)}return{id:k,rawId:p(l),response:{attestationObject:p(m.attestationObject),clientDataJSON:p(m.clientDataJSON),transports:d,publicKeyAlgorithm:e,publicKey:f,authenticatorData:c},type:n,clientExtensionResults:b.getClientExtensionResults(),authenticatorAttachment:y(b.authenticatorAttachment)}}function A(a,b){console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${a}. You should report this error to them.
2
- `,b)}let B=a=>a;async function C(a){let b,c,d;!a.optionsJSON&&a.challenge&&(console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),a={optionsJSON:a});let{optionsJSON:e,useBrowserAutofill:f=!1,verifyBrowserAutofillInput:g=!0}=a;if(!r())throw Error("WebAuthn is not supported in this browser");e.allowCredentials?.length!==0&&(b=e.allowCredentials?.map(t));let h={...e,challenge:q(e.challenge),allowCredentials:b},i={};if(f){if(!await function(){if(!r())return B(new Promise(a=>a(!1)));let a=globalThis.PublicKeyCredential;return a?.isConditionalMediationAvailable===void 0?B(new Promise(a=>a(!1))):B(a.isConditionalMediationAvailable())}())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete$='webauthn']").length<1&&g)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');i.mediation="conditional",h.allowCredentials=[]}i.publicKey=h,i.signal=w.createNewAbortSignal();try{c=await navigator.credentials.get(i)}catch(a){throw function({error:a,options:b}){let{publicKey:c}=b;if(!c)throw Error("options was missing required publicKey property");if("AbortError"===a.name){if(b.signal instanceof AbortSignal)return new v({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:a})}else if("NotAllowedError"===a.name)return new v({message:a.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:a});else if("SecurityError"===a.name){let b=globalThis.location.hostname;if(!u(b))return new v({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:a});if(c.rpId!==b)return new v({message:`The RP ID "${c.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:a})}else if("UnknownError"===a.name)return new v({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:a});return a}({error:a,options:i})}if(!c)throw Error("Authentication was not completed");let{id:j,rawId:k,response:l,type:m}=c;return l.userHandle&&(d=p(l.userHandle)),{id:j,rawId:p(k),response:{authenticatorData:p(l.authenticatorData),clientDataJSON:p(l.clientDataJSON),signature:p(l.signature),userHandle:d},type:m,clientExtensionResults:c.getClientExtensionResults(),authenticatorAttachment:y(c.authenticatorAttachment)}}function D(a,b){throw new h.HexclaveAssertionError(`${b} option is required in a non-browser environment.`,{redirectUrl:a})}var E=a.i(489872);async function F(a,b,c){return{description:c.description,expires_at_millis:null==c.expiresAt?c.expiresAt:c.expiresAt.getTime(),is_public:c.isPublic,..."user"===a?{user_id:b}:{team_id:b}}}async function G(a,b){return(0,E.filterUndefined)({description:b.description,expires_at_millis:null==b.expiresAt?b.expiresAt:b.expiresAt.getTime(),revoked:b.revoked})}function H(a){return{display_name:a.displayName,profile_image_url:a.profileImageUrl,creator_user_id:a.creatorUserId}}var I=a.i(815075);function J(a){return Object.freeze(a),new Proxy(a,{get:(a,b,c)=>"user"===b?function(){throw Error("Hexclave: useUser() already returns the user object. Use `const user = useUser()` (or `const user = await app.getUser()`) instead of destructuring it like `const { user } = ...`.")}():a[b]})}var K=a.i(270314),L=a.i(57539),M=a.i(18726);a.i(781958);var N=a.i(681640);a.s([],105167),a.j(N,105167);var O=a.i(105167),P=a.i(458311),Q=a.i(245800),R=a.i(648812);function S(a){return{display_name:a.displayName,description:a.description,is_production_mode:a.isProductionMode,onboarding_status:a.onboardingStatus,logo_url:a.logoUrl,logo_full_url:a.logoFullUrl,logo_dark_mode_url:a.logoDarkModeUrl,logo_full_dark_mode_url:a.logoFullDarkModeUrl,config:{domains:a.config?.domains?.map(a=>({domain:a.domain,handler_path:a.handlerPath})),oauth_providers:a.config?.oauthProviders?.filter(a=>"custom_oidc"!==a.type).map(a=>({id:a.id,type:a.type,..."standard"===a.type&&{client_id:a.clientId,client_secret:a.clientSecret,facebook_config_id:a.facebookConfigId,microsoft_tenant_id:a.microsoftTenantId,apple_bundle_ids:a.appleBundleIds}})),email_config:a.config?.emailConfig&&("shared"===a.config.emailConfig.type?{type:"shared"}:{type:"standard",host:a.config.emailConfig.host,port:a.config.emailConfig.port,username:a.config.emailConfig.username,password:a.config.emailConfig.password,sender_name:a.config.emailConfig.senderName,sender_email:a.config.emailConfig.senderEmail}),email_theme:a.config?.emailTheme,sign_up_enabled:a.config?.signUpEnabled,credential_enabled:a.config?.credentialEnabled,magic_link_enabled:a.config?.magicLinkEnabled,passkey_enabled:a.config?.passkeyEnabled,allow_localhost:a.config?.allowLocalhost,create_team_on_sign_up:a.config?.createTeamOnSignUp,client_team_creation_enabled:a.config?.clientTeamCreationEnabled,client_user_deletion_enabled:a.config?.clientUserDeletionEnabled,team_creator_default_permissions:a.config?.teamCreatorDefaultPermissions,team_member_default_permissions:a.config?.teamMemberDefaultPermissions,user_default_permissions:a.config?.userDefaultPermissions,oauth_account_merge_strategy:a.config?.oauthAccountMergeStrategy,allow_user_api_keys:a.config?.allowUserApiKeys,allow_team_api_keys:a.config?.allowTeamApiKeys}}}var T=a.i(307469);function U(a){return 1e-5>Math.random()&&Math.random()>.99999&&1e-5>Math.random()&&Math.random()>.99999?"this will never happen":a}var V=a.i(548193),W=a.i(481717),X=class extends Error{constructor(){super("User cancelled the bot challenge"),this.name="BotChallengeUserCancelledError"}},Y=class extends Error{constructor(a="Bot challenge could not be completed",b){super(a,b),this.name="BotChallengeExecutionFailedError"}};async function Z(a){return await a.execute({})}var $=a.i(761490),_=a.i(168805),aa=a.i(315739);let ab=aa.cookies,ac=aa.headers;function ad(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}var ae=function a(b,c){function d(a,d,e){if("u">typeof document){"number"==typeof(e=ad({},c,e)).expires&&(e.expires=new Date(Date.now()+864e5*e.expires)),e.expires&&(e.expires=e.expires.toUTCString()),a=encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var f="";for(var g in e)e[g]&&(f+="; "+g,!0!==e[g]&&(f+="="+e[g].split(";")[0]));return document.cookie=a+"="+b.write(d,a)+f}}return Object.create({set:d,get:function(a){if("u">typeof document&&(!arguments.length||a)){for(var c=document.cookie?document.cookie.split("; "):[],d={},e=0;e<c.length;e++){var f=c[e].split("="),g=f.slice(1).join("=");try{var h=decodeURIComponent(f[0]);if(d[h]=b.read(g,h),a===h)break}catch(a){}}return a?d[a]:d}},remove:function(a,b){d(a,"",ad({},b,{expires:-1}))},withAttributes:function(b){return a(this.converter,ad({},this.attributes,b))},withConverter:function(b){return a(ad({},this.converter,b),this.attributes)}},{attributes:{value:Object.freeze(c)},converter:{value:Object.freeze(b)}})}({read:function(a){return'"'===a[0]&&(a=a.slice(1,-1)),a.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(a){return encodeURIComponent(a).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});"u"<typeof navigator||navigator.userAgent?.startsWith?.("Mozilla/5.0 ");let af="ERR_INVALID_ARG_VALUE";function ag(a,b,c){let d=TypeError(a,{cause:c});return Object.assign(d,{code:b}),d}let ah=new TextEncoder,ai=new TextDecoder;function aj(a){return"string"==typeof a?c(a):b(a)}b=Uint8Array.prototype.toBase64?a=>(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),a.toBase64({alphabet:"base64url",omitPadding:!0})):a=>{a instanceof ArrayBuffer&&(a=new Uint8Array(a));let b=[];for(let c=0;c<a.byteLength;c+=32768)b.push(String.fromCharCode.apply(null,a.subarray(c,c+32768)));return btoa(b.join("")).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")},c=Uint8Array.fromBase64?a=>{try{return Uint8Array.fromBase64(a,{alphabet:"base64url"})}catch(a){throw ag("The input to be decoded is not correctly encoded.",af,a)}}:a=>{try{let b=atob(a.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"")),c=new Uint8Array(b.length);for(let a=0;a<b.length;a++)c[a]=b.charCodeAt(a);return c}catch(a){throw ag("The input to be decoded is not correctly encoded.",af,a)}};function ak(){return aj(crypto.getRandomValues(new Uint8Array(32)))}async function al(a){var b="codeVerifier";try{if("string"!=typeof a)throw ag(`${b} must be a string`,"ERR_INVALID_ARG_TYPE",void 0);if(0===a.length)throw ag(`${b} must not be empty`,af,void 0)}catch(a){throw a}return aj(await crypto.subtle.digest("SHA-256","string"==typeof a?ah.encode(a):ai.decode(a)))}URL.parse;let am="[a-zA-Z0-9!#$%&\\'\\*\\+\\-\\.\\^_`\\|~]+";function an(){if(!(0,P.isBrowserLike)())throw Error("cookieClient functions can only be called in a browser environment, yet window is undefined")}async function ao(){function a(){throw new h.HexclaveAssertionError("Throwing cookie helper is just a placeholder. This should never be called")}return{get:a,getAll:a,set:a,setOrDelete:a,delete:a}}function ap(a){return a.startsWith("__Host-")}function aq(a,b){if(ap(a)&&void 0!==b.domain)throw new h.HexclaveAssertionError("__Host- cookies must not specify a Domain attribute")}async function ar(){var a,b;let c;return(0,P.isBrowserLike)()?as():(a=await ab(),b=await ac(),c={get:a=>c.getAll()[a]??null,getAll:()=>{try{a.set("hexclave-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),a.set("stack-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)})}catch(a){if("object"==typeof a&&null!==a&&"message"in a&&"string"==typeof a.message&&a.message.includes("Cookies can only be modified in a Server Action or Route Handler"));else throw a}return a.getAll().reduce((a,b)=>(a[b.name]=b.value,a),{})},set:(c,d,e)=>{aq(c,e);let f=ax(a,b);try{a.set(c,d,{secure:ap(c)||f,maxAge:"session"===e.maxAge?void 0:e.maxAge,domain:e.domain,sameSite:"lax",path:"/"})}catch(a){at(a,e)}},setOrDelete(a,b,c){null===b?this.delete(a,c):this.set(a,b,c)},delete(b,c){try{aq(b,c),void 0!==c.domain?a.delete({name:b,domain:c.domain,path:"/"}):a.delete({name:b,path:"/"})}catch(a){at(a,c)}}})}function as(){return{get:au,getAll:av,set:aE,setOrDelete:aA,delete:aC}}function at(a,b){if(a instanceof Error&&a.message.includes("Cookies can only be modified in"))if(b.noOpIfServerComponent);else throw new h.HexclaveAssertionError("Attempted to set cookie in server component. Pass { noOpIfServerComponent: true } in the options of Stack's cookie functions if this is intentional and you want to ignore this error. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options");else throw a}function au(a){return av()[a]??null}function av(){return an(),ae.set("hexclave-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),ae.set("stack-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),ae.get()}async function aw(){return!(0,P.isBrowserLike)()&&ax(await ab(),await ac())}RegExp("^[,\\s]*("+am+")"),RegExp("^[,\\s]*("+am+')\\s*=\\s*"((?:[^"\\\\]|\\\\[\\s\\S])*)"[,\\s]*(.*)'),RegExp("^[,\\s]*("+am+")\\s*=\\s*([a-zA-Z0-9!#$%&\\'\\*\\+\\-\\.\\^_`\\|~]+)[,\\s]*(.*)"),RegExp("^([a-zA-Z0-9\\-\\._\\~\\+\\/]+={0,2})(?:$|[,\\s])(.*)");function ax(a,b){return a.has("hexclave-is-https")||a.has("stack-is-https")||"https"===b.get("x-forwarded-proto")}function ay(a,b,c){aq(a,c);let d=ap(a)||(c.secure??!1),f=e??=(an(),!1);ae.set(a,b,{expires:"session"===c.maxAge?void 0:new Date(Date.now()+1e3*c.maxAge),domain:c.domain,secure:d,path:"/",sameSite:"Lax",...f?{partitioned:f,sameSite:"None"}:{}})}function az(a,b){for(let c of(aq(a,b),[!0,!1]))void 0!==b.domain&&ae.remove(a,{domain:b.domain,secure:!1,partitioned:c,path:"/"}),ae.remove(a,{secure:ap(a)||!1,partitioned:c,path:"/"})}function aA(a,b,c){an(),null===b?az(a,c):ay(a,b,c)}async function aB(a,b,c){(await ar()).setOrDelete(a,b,c)}function aC(a,b){an(),az(a,b)}async function aD(a,b){(await ar()).delete(a,b)}function aE(a,b,c){an(),ay(a,b,c)}async function aF(a,b,c){(await ar()).set(a,b,c)}async function aG(){let a=ak(),b=await al(a),c=ak();return await aF("hexclave-oauth-outer-"+c,a,{maxAge:3600}),await aF("stack-oauth-outer-"+c,a,{maxAge:3600}),{codeChallenge:b,state:c}}async function aH(a,b,c){let{codeChallenge:d,state:e}=await aG();return await a.getOAuthUrl({provider:b.provider,redirectUrl:D(b.redirectUrl,"redirectUrl"),errorRedirectUrl:D(b.errorRedirectUrl,"errorRedirectUrl"),afterCallbackRedirectUrl:D(window.location.href,"afterCallbackRedirectUrl"),codeChallenge:d,state:e,type:"link",session:c,providerScope:b.providerScope})}var aI=a.i(957250),aJ=a.i(538107),aK=a.i(46508),aL=a.i(328455),aM=a.i(938660);function aN(a){if(!a)return null;try{let b=JSON.parse(a);if("object"!=typeof b||null===b||"string"!=typeof b.session_id||"number"!=typeof b.created_at_ms||"number"!=typeof b.last_activity_ms)return null;return b}catch{return null}}function aO(){return crypto.randomUUID()}function aP(a){let b=aN(localStorage.getItem(a.key))??(a.legacyKey?aN(localStorage.getItem(a.legacyKey)):null);if(b&&a.nowMs-b.last_activity_ms<=18e4)return b;let c={session_id:aO(),created_at_ms:a.nowMs,last_activity_ms:a.nowMs};return localStorage.setItem(a.key,JSON.stringify(c)),c}var aQ=class{constructor(a,b){this._started=!1,this._cancelled=!1,this._disabled=!1,this._stopRecording=null,this._detachListeners=null,this._flushTimer=null,this._events=[],this._approxBytes=0,this._lastPersistActivity=0,this._recording=!1,this._rrwebModule=null,this._lastBrowserSessionId=null,this._takingSnapshot=!1,this._flushInProgress=!1,this._deps=a,this._replayOptions=b,this._sessionReplaySegmentId=aO(),this._storageKey=function(a){return`hexclave:session-replay:v1:${a}`}(a.projectId),this._legacyStorageKey=function(a){return`stack:session-replay:v1:${a}`}(a.projectId)}start(){this._started||(0,P.isBrowserLike)()&&(this._started=!0,(0,g.runAsynchronously)(()=>this._startRecording(),{noErrorLogging:!0}),this._flushTimer=setInterval(()=>this._tick(),5e3))}stop(){this._cancelled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),(0,g.runAsynchronously)(()=>this._flush({keepalive:!0})),this._stopCurrentRecording()}clearBuffer(){this._events=[],this._approxBytes=0}_persistActivity(a){let b=aP({key:this._storageKey,legacyKey:this._legacyStorageKey,nowMs:a});if(a-this._lastPersistActivity<5e3)return b;this._lastPersistActivity=a;let c={...b,last_activity_ms:a};return localStorage.setItem(this._storageKey,JSON.stringify(c)),b}async _flush(a){if(this._disabled||0===this._events.length||this._flushInProgress)return;let b=Date.now(),c=aP({key:this._storageKey,legacyKey:this._legacyStorageKey,nowMs:b}),d=aO(),e={browser_session_id:c.session_id,session_replay_segment_id:this._sessionReplaySegmentId,batch_id:d,started_at_ms:c.created_at_ms,sent_at_ms:b,events:this._events};this._events=[],this._approxBytes=0,this._flushInProgress=!0;try{let b=await this._deps.sendBatch(JSON.stringify(e),{keepalive:a.keepalive});if("error"===b.status)return void(0,h.captureWarning)("SessionRecorder.flush",b.error);if(!b.data.ok){if((b.data.headers.get("x-hexclave-known-error")??b.data.headers.get("x-stack-known-error"))==="ANALYTICS_NOT_ENABLED"){this._disabled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._stopCurrentRecording();return}(0,h.captureWarning)("SessionRecorder.flush",Error(`SessionRecorder flush failed: ${b.data.status} ${await b.data.text()}`))}}finally{this._flushInProgress=!1}}async _startRecording(){if(this._recording||this._cancelled)return;if(!this._rrwebModule){let b=await m.Result.fromPromise(a.A(75998));if("error"===b.status)return void console.warn("SessionRecorder: rrweb import failed. Is rrweb installed?",b.error);this._rrwebModule=b.data}if(this._cancelled)return;this._stopRecording=this._rrwebModule.record({emit:a=>{let b=Date.now(),c=this._persistActivity(b);if(null===this._lastBrowserSessionId)this._lastBrowserSessionId=c.session_id;else if(c.session_id!==this._lastBrowserSessionId&&!this._takingSnapshot){this._lastBrowserSessionId=c.session_id,this._takingSnapshot=!0;try{this._rrwebModule.record.takeFullSnapshot()}finally{this._takingSnapshot=!1}}this._events.push(a),this._approxBytes+=JSON.stringify(a).length,(this._events.length>=200||this._approxBytes>=512e3)&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))},maskAllInputs:this._replayOptions.maskAllInputs??!0,...void 0!==this._replayOptions.blockClass?{blockClass:this._replayOptions.blockClass}:{},...void 0!==this._replayOptions.blockSelector?{blockSelector:this._replayOptions.blockSelector}:{}})??null,this._recording=!0;let b=()=>{(0,g.runAsynchronously)(()=>this._flush({keepalive:!0}))};window.addEventListener("pagehide",b),document.addEventListener("visibilitychange",b),this._detachListeners=()=>{window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",b)}}_stopCurrentRecording(){this._detachListeners&&(this._detachListeners(),this._detachListeners=null),this._stopRecording&&(this._stopRecording(),this._stopRecording=null),this._events=[],this._approxBytes=0,this._recording=!1}_tick(){!this._cancelled&&this._events.length>0&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))}};function aR(a){return null!=a&&"object"==typeof a&&"width"in a&&"height"in a&&"number"==typeof a.width&&"number"==typeof a.height}function aS(a){return null!=a&&"object"==typeof a&&"pushState"in a&&"replaceState"in a&&"function"==typeof a.pushState&&"function"==typeof a.replaceState}function aT(a){return null!=a.closest(`#${(0,aL.cssEscapeIdent)(aK.DEV_TOOL_ROOT_ID)}, #${(0,aL.cssEscapeIdent)(aK.CLICKMAP_ROOT_ID)}`)}var aU=class{constructor(a){this._started=!1,this._cancelled=!1,this._disabled=!1,this._detachListeners=null,this._flushTimer=null,this._events=[],this._approxBytes=0,this._lastUrl=null,this._originalPushState=null,this._originalReplaceState=null,this._deadClickTimer=null,this._deadClickMutationObserver=null,this._unclassifiedClicks=new Set,this._lastMutationAtMs=null,this._lastScrollAtMs=null,this._lastSelectionChangedAtMs=null,this._lastVisibilityChangeAtMs=null,this._onPopState=()=>{this._capturePageView("pop")},this._onClickCapture=a=>{let b=a.target;if(!(b instanceof Element)||aT(b))return;let c=window.innerWidth,d=window.innerHeight,e=function(a){let b=a,c=0;for(;null!=b&&c<2*aM.ELEMENTS_CHAIN_MAX_DEPTH;){let a=window.getComputedStyle(b);if("fixed"===a.position||"sticky"===a.position)return!0;b=b.parentElement,c+=1}return!1}(b),f=Math.round(a.pageX/16),g=Math.round(a.pageY/16),h=Math.round(a.clientY/16),i=c>0?a.clientX/c:0,j={event_type:"$click",event_at_ms:Date.now(),data:{tag_name:b.tagName.toLowerCase(),text:b.textContent.trim().substring(0,200),href:this._findNearestAnchorHref(b),selector:this._buildSelector(b),elements_chain:(0,aM.buildElementsChain)(b),pointer_target_fixed:+!!e,url:window.location.href,path:window.location.pathname,title:document.title,x:a.clientX,y:a.clientY,page_x:a.pageX,page_y:a.pageY,x_scaled:f,y_scaled:g,client_y_scaled:h,pointer_relative_x:i,viewport_width:c,viewport_height:d,scale_factor:16}};null!==this._deadClickTimer&&this._unclassifiedClicks.size<50&&this._unclassifiedClicks.add(j),this._pushEvent(j)},this._onDeadClickScroll=()=>{this._lastScrollAtMs=Date.now()},this._onDeadClickSelectionChange=()=>{this._lastSelectionChangedAtMs=Date.now()},this._onDeadClickVisibilityChange=()=>{this._lastVisibilityChangeAtMs=Date.now()},this._onPageHide=()=>{(0,g.runAsynchronously)(()=>this._flush({keepalive:!0}))},this._deps=a,this._sessionReplaySegmentId=aO()}start(){this._started||!(0,P.isBrowserLike)()||"function"==typeof window.addEventListener&&"function"==typeof window.removeEventListener&&"function"==typeof document.addEventListener&&"function"==typeof document.removeEventListener&&aR(window.screen)&&(this._started=!0,this._setupPageViewCapture(),this._setupClickCapture(),this._setupDeadClickDetection(),this._setupPageHideListeners(),this._flushTimer=setInterval(()=>this._tick(),1e4))}stop(){this._cancelled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),(0,g.runAsynchronously)(()=>this._flush({keepalive:!0})),this._teardown()}clearBuffer(){this._events=[],this._approxBytes=0,this._unclassifiedClicks.clear()}_pushEvent(a){!this._disabled&&(this._events.push(a),this._approxBytes+=JSON.stringify(a).length,(this._events.length>=50||this._approxBytes>=64e3)&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1})))}_capturePageView(a){let b=window.screen;if(!aR(b))return;let c=window.location.href;(c!==this._lastUrl||"initial"===a)&&(this._lastUrl=c,this._pushEvent({event_type:"$page-view",event_at_ms:Date.now(),data:{url:c,path:window.location.pathname,referrer:document.referrer,title:document.title,entry_type:a,viewport_width:window.innerWidth,viewport_height:window.innerHeight,screen_width:b.width,screen_height:b.height,user_agent:"u">typeof navigator?navigator.userAgent:null}}))}_setupPageViewCapture(){this._capturePageView("initial");let a=window.history;if(!aS(a))return;let b=a.pushState,c=a.replaceState;this._originalPushState=(...c)=>b.apply(a,c),a.pushState=(...a)=>{this._originalPushState(...a),this._capturePageView("push")},this._originalReplaceState=(...b)=>c.apply(a,b),a.replaceState=(...a)=>{this._originalReplaceState(...a),this._capturePageView("replace")},window.addEventListener("popstate",this._onPopState)}_buildSelector(a){let b=[],c=a,d=0;for(;c&&d<8&&c!==document.documentElement;){let a=c.tagName.toLowerCase(),e="data-testid",f=c.getAttribute("data-testid");if(null==f&&(e="data-test-id",f=c.getAttribute("data-test-id")),null!=f&&""!==f.trim()){a+=`[${e}="${f.replace(/"/g,'\\"')}"]`,b.unshift(a);break}if(""!==c.id){a+=`#${(0,aL.cssEscapeIdent)(c.id)}`,b.unshift(a);break}if(c.className&&"string"==typeof c.className){let b=c.className.trim().split(/\s+/).filter(Boolean).slice(0,4);b.length>0&&(a+=`.${b.map(aL.cssEscapeIdent).join(".")}`)}let g=c.parentElement;if(null!=g){let b=c.tagName,d=Array.from(g.children).filter(a=>a.tagName===b);d.length>1&&(a+=`:nth-of-type(${d.indexOf(c)+1})`)}b.unshift(a),c=g,d++}return b.join(" > ")}_findNearestAnchorHref(a){let b=a;for(;b;){if("A"===b.tagName&&b.hasAttribute("href"))return b.getAttribute("href");b=b.parentElement}return null}_setupClickCapture(){document.addEventListener("click",this._onClickCapture,{capture:!0})}_setupDeadClickDetection(){"function"==typeof MutationObserver&&(this._deadClickMutationObserver=new MutationObserver(a=>{a.every(a=>{var b;let c;return null!=(c=(b=a.target)instanceof Element?b:b?.parentElement??null)&&aT(c)})||(this._lastMutationAtMs=Date.now())}),this._deadClickMutationObserver.observe(document.documentElement,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),document.addEventListener("scroll",this._onDeadClickScroll,{capture:!0,passive:!0}),document.addEventListener("selectionchange",this._onDeadClickSelectionChange),document.addEventListener("visibilitychange",this._onDeadClickVisibilityChange),this._deadClickTimer=setInterval(()=>this._checkDeadClicks(),1e3))}_checkDeadClicks(){let a=Date.now();for(let b of this._unclassifiedClicks){let c=(a,c)=>null!=a&&a>=b.event_at_ms&&a-b.event_at_ms<c;c(this._lastScrollAtMs,100)||c(this._lastSelectionChangedAtMs,100)||c(this._lastVisibilityChangeAtMs,100)||c(this._lastMutationAtMs,2500)?this._unclassifiedClicks.delete(b):a-b.event_at_ms>=2750&&(b.data.dead=1,this._unclassifiedClicks.delete(b))}}_teardownDeadClickDetection(){null!==this._deadClickTimer&&(clearInterval(this._deadClickTimer),this._deadClickTimer=null),null!==this._deadClickMutationObserver&&(this._deadClickMutationObserver.disconnect(),this._deadClickMutationObserver=null),document.removeEventListener("scroll",this._onDeadClickScroll,{capture:!0}),document.removeEventListener("selectionchange",this._onDeadClickSelectionChange),document.removeEventListener("visibilitychange",this._onDeadClickVisibilityChange),this._unclassifiedClicks.clear()}_setupPageHideListeners(){window.addEventListener("pagehide",this._onPageHide),document.addEventListener("visibilitychange",this._onPageHide),this._detachListeners=()=>{window.removeEventListener("pagehide",this._onPageHide),document.removeEventListener("visibilitychange",this._onPageHide)}}_teardown(){this._detachListeners&&(this._detachListeners(),this._detachListeners=null);let a=window.history;aS(a)&&(this._originalPushState&&(a.pushState=this._originalPushState),this._originalReplaceState&&(a.replaceState=this._originalReplaceState)),this._originalPushState=null,this._originalReplaceState=null,window.removeEventListener("popstate",this._onPopState),document.removeEventListener("click",this._onClickCapture,{capture:!0}),this._teardownDeadClickDetection(),this._events=[],this._approxBytes=0}async _flush(a){if(this._disabled)return;a.keepalive&&this._unclassifiedClicks.clear();let b=this._events.filter(a=>!this._unclassifiedClicks.has(a));if(0===b.length)return;this._events=this._events.filter(a=>this._unclassifiedClicks.has(a)),this._approxBytes=this._events.reduce((a,b)=>a+JSON.stringify(b).length,0);let c=Date.now(),d=aO(),e={session_replay_segment_id:this._sessionReplaySegmentId,batch_id:d,sent_at_ms:c,events:b},f=await this._deps.sendBatch(JSON.stringify(e),{keepalive:a.keepalive});if("error"===f.status)return void console.warn("EventTracker flush failed:",f.error);if(!f.data.ok){if((f.data.headers.get("x-hexclave-known-error")??f.data.headers.get("x-stack-known-error"))==="ANALYTICS_NOT_ENABLED"){this._disabled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._teardown();return}console.warn("EventTracker flush failed:",f.data.status,await f.data.text())}}_tick(){!this._cancelled&&this._events.length>0&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))}};let aV={marker:"hexclave_cross_domain_auth",state:"hexclave_cross_domain_state",codeChallenge:"hexclave_cross_domain_code_challenge",afterCallbackRedirectUrl:"hexclave_cross_domain_after_callback_redirect_url"};function aW(a,b){return a.get(aV[b])}function aX(a,b){return a.has(aV[b])}function aY(a,b,c){a.set(aV[b],c)}function aZ(a){let b=aW(a.searchParams,"state"),c=aW(a.searchParams,"codeChallenge");return null==b||null==c?null:{state:b,codeChallenge:c}}function a$(a){return aX(a.searchParams,"state")&&aX(a.searchParams,"codeChallenge")&&aX(a.searchParams,"afterCallbackRedirectUrl")}function a_(a){let b=new URL(a.rawHandlerUrl,a.currentUrl),c=a.currentUrl.searchParams.get("after_auth_return_to");for(let d of(null==c||b.searchParams.has("after_auth_return_to")||b.searchParams.set("after_auth_return_to",c),["state","codeChallenge","afterCallbackRedirectUrl"])){let c=aW(a.currentUrl.searchParams,d);null==c||aX(b.searchParams,d)||aY(b.searchParams,d,c)}if("signOut"===a.handlerName)return b.searchParams.has("after_auth_return_to")||(a.currentUrl.protocol===b.protocol&&a.currentUrl.host===b.host?b.searchParams.set("after_auth_return_to",(0,M.getRelativePart)(a.currentUrl)):b.searchParams.set("after_auth_return_to",a.currentUrl.toString())),b.origin===a.currentUrl.origin?(0,M.getRelativePart)(b):b.toString();if(a.currentUrl.origin!==b.origin){if(!a$(b)){let c=a.currentUrl.searchParams.get("after_auth_return_to"),d=c?new URL(c,a.currentUrl).toString():a.currentUrl.toString(),e=function(a){let b=new URL(a.localOAuthCallbackUrl,a.currentUrl);if(b.origin!==a.currentUrl.origin)throw new h.HexclaveAssertionError("Cross-domain auth callback URL must stay on the current origin",{localOAuthCallbackUrl:b.toString(),currentUrl:a.currentUrl.toString()});return aY(b.searchParams,"marker","1"),null!=a.state&&aY(b.searchParams,"state",a.state),null!=a.codeChallenge&&aY(b.searchParams,"codeChallenge",a.codeChallenge),null!=a.afterCallbackRedirectUrl&&aY(b.searchParams,"afterCallbackRedirectUrl",a.afterCallbackRedirectUrl),b}({currentUrl:a.currentUrl,localOAuthCallbackUrl:a.localOAuthCallbackUrl,state:a.crossDomainHandoffParams?.state,codeChallenge:a.crossDomainHandoffParams?.codeChallenge,afterCallbackRedirectUrl:d});b.searchParams.set("after_auth_return_to",e.toString()),aY(b.searchParams,"afterCallbackRedirectUrl",d),null!=a.crossDomainHandoffParams&&(aY(b.searchParams,"state",a.crossDomainHandoffParams.state),aY(b.searchParams,"codeChallenge",a.crossDomainHandoffParams.codeChallenge))}}else a.currentUrl.protocol!==b.protocol||a.currentUrl.host!==b.host||b.searchParams.has("after_auth_return_to")||b.searchParams.set("after_auth_return_to",(0,M.getRelativePart)(a.currentUrl));return b.origin===a.currentUrl.origin?(0,M.getRelativePart)(b):b.toString()}async function a0(a){let b=a_({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,crossDomainHandoffParams:null,localOAuthCallbackUrl:a.localOAuthCallbackUrl});if("signOut"===a.handlerName)return b;let c=new URL(b,a.currentUrl);if(a.currentUrl.origin===c.origin||a$(c))return b;let d=await a.getCrossDomainHandoffParams(a.currentUrl);return a_({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,crossDomainHandoffParams:d,localOAuthCallbackUrl:a.localOAuthCallbackUrl})}async function a1(a){if(a.noRedirectBack||null==a.currentUrl)return{type:"redirect",url:a.rawHandlerUrl};let b=function(a){return"afterSignIn"===a||"afterSignUp"===a?"after-auth-return":"signIn"===a||"signUp"===a||"onboarding"===a||"signOut"===a?"redirect-back-aware":"none"}(a.handlerName);if("none"===b)return{type:"redirect",url:a.rawHandlerUrl};if("after-auth-return"===b){var c,d,e;let b,f,g=a.currentUrl.searchParams.get("after_auth_return_to");if(null==g)return{type:"redirect",url:a.rawHandlerUrl};let h=new URL(g,a.currentUrl),i=(b=(d=(c={currentUrl:a.currentUrl,redirectBackTarget:h}).currentUrl,e=c.redirectBackTarget,{state:aW(d.searchParams,"state")??aW(e.searchParams,"state"),codeChallenge:aW(d.searchParams,"codeChallenge")??aW(e.searchParams,"codeChallenge"),afterCallbackRedirectUrl:aW(d.searchParams,"afterCallbackRedirectUrl")??aW(e.searchParams,"afterCallbackRedirectUrl")}),null==(f=function(a){if(a.redirectBackTarget.origin!==a.currentUrl.origin)return a.redirectBackTarget;if(null==a.handoffParams.state||null==a.handoffParams.codeChallenge||null==a.handoffParams.afterCallbackRedirectUrl)return null;let b=new URL(a.handoffParams.afterCallbackRedirectUrl,a.currentUrl);return b.origin===a.currentUrl.origin?null:new URL(`${a.redirectBackTarget.pathname}${a.redirectBackTarget.search}${a.redirectBackTarget.hash}`,b.origin)}({currentUrl:c.currentUrl,redirectBackTarget:c.redirectBackTarget,handoffParams:b}))?null:{redirectBackTarget:f,handoffParams:b});if(null==i)return{type:"redirect",url:g};let j=i.handoffParams.state,k=i.handoffParams.codeChallenge,l=i.handoffParams.afterCallbackRedirectUrl;if(null==j||null==k){let b=await a.getCrossDomainHandoffParams(a.currentUrl);j??=b.state,k??=b.codeChallenge}return l??=a.currentUrl.toString(),{type:"cross-domain-authorize",redirectUri:i.redirectBackTarget.toString(),state:j,codeChallenge:k,afterCallbackRedirectUrl:l}}if("signIn"!==a.handlerName&&"signUp"!==a.handlerName&&"onboarding"!==a.handlerName&&"signOut"!==a.handlerName)throw new h.HexclaveAssertionError("Unexpected redirect-back-aware handler policy mismatch",{handlerName:a.handlerName,policy:b});return{type:"redirect",url:await a0({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,localOAuthCallbackUrl:a.localOAuthCallbackUrl,getCrossDomainHandoffParams:a.getCrossDomainHandoffParams})}}var a2=a.i(334676),a3=a.i(317683);let a4=null,a5=null,a6=0,a7=null;function a8(){let a=function(){try{let a=localStorage.getItem("__hexclave-dev-tool-override");if("true"===a)return!0;if("false"===a)return!1}catch{}return null}();return null!==a?a:!!(0,a3.canMountIntoDom)()&&(0,M.isLocalhost)(window.location.href)}let a9=null,ba=null,bb=0,bc=null,bd=!1;bd=!0;let be=U(O),bf=new Map,bg="stackauth_",bh="hexclave_";function bi(a){return null==a.accessToken&&null==a.refreshToken?null:`Bearer ${bg}${(0,I.encodeBase64)(new TextEncoder().encode(JSON.stringify(a)))}`}function bj(a,b){if("get"in a&&"function"==typeof a.get)return a.get(b);let c=b.toLowerCase();for(let[b,d]of Object.entries(a))if(b.toLowerCase()===c)return d;return null}async function bk(){return(await ac?.())?.get("host")??null}var bl=class b{static{this.LazyStackAdminAppImpl={value:void 0}}async _createCookieHelper(a){let b=void 0===a?this._tokenStoreInit:a;return"nextjs-cookie"===b||"cookie"===b?await ar():await ao()}async _getUserOAuthConnectionCacheFn(a){let b=await a.getUser(),c=!0;if(b&&b.oauth_providers.find(b=>b.id===a.providerId)||(c=!1),await a.getOrWaitOAuthToken()||(c=!1),!c&&a.redirect){if(!a.session)throw Error(K.deindent`
2
+ `,b)}let B=a=>a;async function C(a){let b,c,d;!a.optionsJSON&&a.challenge&&(console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),a={optionsJSON:a});let{optionsJSON:e,useBrowserAutofill:f=!1,verifyBrowserAutofillInput:g=!0}=a;if(!r())throw Error("WebAuthn is not supported in this browser");e.allowCredentials?.length!==0&&(b=e.allowCredentials?.map(t));let h={...e,challenge:q(e.challenge),allowCredentials:b},i={};if(f){if(!await function(){if(!r())return B(new Promise(a=>a(!1)));let a=globalThis.PublicKeyCredential;return a?.isConditionalMediationAvailable===void 0?B(new Promise(a=>a(!1))):B(a.isConditionalMediationAvailable())}())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete$='webauthn']").length<1&&g)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');i.mediation="conditional",h.allowCredentials=[]}i.publicKey=h,i.signal=w.createNewAbortSignal();try{c=await navigator.credentials.get(i)}catch(a){throw function({error:a,options:b}){let{publicKey:c}=b;if(!c)throw Error("options was missing required publicKey property");if("AbortError"===a.name){if(b.signal instanceof AbortSignal)return new v({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:a})}else if("NotAllowedError"===a.name)return new v({message:a.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:a});else if("SecurityError"===a.name){let b=globalThis.location.hostname;if(!u(b))return new v({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:a});if(c.rpId!==b)return new v({message:`The RP ID "${c.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:a})}else if("UnknownError"===a.name)return new v({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:a});return a}({error:a,options:i})}if(!c)throw Error("Authentication was not completed");let{id:j,rawId:k,response:l,type:m}=c;return l.userHandle&&(d=p(l.userHandle)),{id:j,rawId:p(k),response:{authenticatorData:p(l.authenticatorData),clientDataJSON:p(l.clientDataJSON),signature:p(l.signature),userHandle:d},type:m,clientExtensionResults:c.getClientExtensionResults(),authenticatorAttachment:y(c.authenticatorAttachment)}}function D(a,b){throw new h.HexclaveAssertionError(`${b} option is required in a non-browser environment.`,{redirectUrl:a})}var E=a.i(489872);async function F(a,b,c){return{description:c.description,expires_at_millis:null==c.expiresAt?c.expiresAt:c.expiresAt.getTime(),is_public:c.isPublic,..."user"===a?{user_id:b}:{team_id:b}}}async function G(a,b){return(0,E.filterUndefined)({description:b.description,expires_at_millis:null==b.expiresAt?b.expiresAt:b.expiresAt.getTime(),revoked:b.revoked})}function H(a){return{display_name:a.displayName,profile_image_url:a.profileImageUrl,creator_user_id:a.creatorUserId}}var I=a.i(815075);function J(a){return Object.freeze(a),new Proxy(a,{get:(a,b,c)=>"user"===b?function(){throw Error("Hexclave: useUser() already returns the user object. Use `const user = useUser()` (or `const user = await app.getUser()`) instead of destructuring it like `const { user } = ...`.")}():a[b]})}var K=a.i(270314),L=a.i(57539),M=a.i(18726);a.i(781958);var N=a.i(681640);a.s([],105167),a.j(N,105167);var O=a.i(105167),P=a.i(458311),Q=a.i(245800),R=a.i(648812);function S(a){return{display_name:a.displayName,description:a.description,is_production_mode:a.isProductionMode,onboarding_status:a.onboardingStatus,logo_url:a.logoUrl,logo_full_url:a.logoFullUrl,logo_dark_mode_url:a.logoDarkModeUrl,logo_full_dark_mode_url:a.logoFullDarkModeUrl,config:{domains:a.config?.domains?.map(a=>({domain:a.domain,handler_path:a.handlerPath})),oauth_providers:a.config?.oauthProviders?.filter(a=>"custom_oidc"!==a.type).map(a=>({id:a.id,type:a.type,..."standard"===a.type&&{client_id:a.clientId,client_secret:a.clientSecret,facebook_config_id:a.facebookConfigId,microsoft_tenant_id:a.microsoftTenantId,apple_bundle_ids:a.appleBundleIds}})),email_config:a.config?.emailConfig&&("shared"===a.config.emailConfig.type?{type:"shared"}:{type:"standard",host:a.config.emailConfig.host,port:a.config.emailConfig.port,username:a.config.emailConfig.username,password:a.config.emailConfig.password,sender_name:a.config.emailConfig.senderName,sender_email:a.config.emailConfig.senderEmail}),email_theme:a.config?.emailTheme,sign_up_enabled:a.config?.signUpEnabled,credential_enabled:a.config?.credentialEnabled,magic_link_enabled:a.config?.magicLinkEnabled,passkey_enabled:a.config?.passkeyEnabled,allow_localhost:a.config?.allowLocalhost,create_team_on_sign_up:a.config?.createTeamOnSignUp,client_team_creation_enabled:a.config?.clientTeamCreationEnabled,client_user_deletion_enabled:a.config?.clientUserDeletionEnabled,team_creator_default_permissions:a.config?.teamCreatorDefaultPermissions,team_member_default_permissions:a.config?.teamMemberDefaultPermissions,user_default_permissions:a.config?.userDefaultPermissions,oauth_account_merge_strategy:a.config?.oauthAccountMergeStrategy,allow_user_api_keys:a.config?.allowUserApiKeys,allow_team_api_keys:a.config?.allowTeamApiKeys}}}var T=a.i(307469);function U(a){return 1e-5>Math.random()&&Math.random()>.99999&&1e-5>Math.random()&&Math.random()>.99999?"this will never happen":a}var V=a.i(548193),W=a.i(481717),X=class extends Error{constructor(){super("User cancelled the bot challenge"),this.name="BotChallengeUserCancelledError"}},Y=class extends Error{constructor(a="Bot challenge could not be completed",b){super(a,b),this.name="BotChallengeExecutionFailedError"}};async function Z(a){return await a.execute({})}var $=a.i(761490),_=a.i(168805),aa=a.i(315739);let ab=aa.cookies,ac=aa.headers;function ad(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}var ae=function a(b,c){function d(a,d,e){if("u">typeof document){"number"==typeof(e=ad({},c,e)).expires&&(e.expires=new Date(Date.now()+864e5*e.expires)),e.expires&&(e.expires=e.expires.toUTCString()),a=encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var f="";for(var g in e)e[g]&&(f+="; "+g,!0!==e[g]&&(f+="="+e[g].split(";")[0]));return document.cookie=a+"="+b.write(d,a)+f}}return Object.create({set:d,get:function(a){if("u">typeof document&&(!arguments.length||a)){for(var c=document.cookie?document.cookie.split("; "):[],d={},e=0;e<c.length;e++){var f=c[e].split("="),g=f.slice(1).join("=");try{var h=decodeURIComponent(f[0]);if(d[h]=b.read(g,h),a===h)break}catch(a){}}return a?d[a]:d}},remove:function(a,b){d(a,"",ad({},b,{expires:-1}))},withAttributes:function(b){return a(this.converter,ad({},this.attributes,b))},withConverter:function(b){return a(ad({},this.converter,b),this.attributes)}},{attributes:{value:Object.freeze(c)},converter:{value:Object.freeze(b)}})}({read:function(a){return'"'===a[0]&&(a=a.slice(1,-1)),a.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(a){return encodeURIComponent(a).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});"u"<typeof navigator||navigator.userAgent?.startsWith?.("Mozilla/5.0 ");let af="ERR_INVALID_ARG_VALUE";function ag(a,b,c){let d=TypeError(a,{cause:c});return Object.assign(d,{code:b}),d}let ah=new TextEncoder,ai=new TextDecoder;function aj(a){return"string"==typeof a?c(a):b(a)}b=Uint8Array.prototype.toBase64?a=>(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),a.toBase64({alphabet:"base64url",omitPadding:!0})):a=>{a instanceof ArrayBuffer&&(a=new Uint8Array(a));let b=[];for(let c=0;c<a.byteLength;c+=32768)b.push(String.fromCharCode.apply(null,a.subarray(c,c+32768)));return btoa(b.join("")).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")},c=Uint8Array.fromBase64?a=>{try{return Uint8Array.fromBase64(a,{alphabet:"base64url"})}catch(a){throw ag("The input to be decoded is not correctly encoded.",af,a)}}:a=>{try{let b=atob(a.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"")),c=new Uint8Array(b.length);for(let a=0;a<b.length;a++)c[a]=b.charCodeAt(a);return c}catch(a){throw ag("The input to be decoded is not correctly encoded.",af,a)}};function ak(){return aj(crypto.getRandomValues(new Uint8Array(32)))}async function al(a){var b="codeVerifier";try{if("string"!=typeof a)throw ag(`${b} must be a string`,"ERR_INVALID_ARG_TYPE",void 0);if(0===a.length)throw ag(`${b} must not be empty`,af,void 0)}catch(a){throw a}return aj(await crypto.subtle.digest("SHA-256","string"==typeof a?ah.encode(a):ai.decode(a)))}URL.parse;let am="[a-zA-Z0-9!#$%&\\'\\*\\+\\-\\.\\^_`\\|~]+";function an(){if(!(0,P.isBrowserLike)())throw Error("cookieClient functions can only be called in a browser environment, yet window is undefined")}async function ao(){function a(){throw new h.HexclaveAssertionError("Throwing cookie helper is just a placeholder. This should never be called")}return{get:a,getAll:a,set:a,setOrDelete:a,delete:a}}function ap(a){return a.startsWith("__Host-")}function aq(a,b){if(ap(a)&&void 0!==b.domain)throw new h.HexclaveAssertionError("__Host- cookies must not specify a Domain attribute")}async function ar(){var a,b;let c;return(0,P.isBrowserLike)()?as():(a=await ab(),b=await ac(),c={get:a=>c.getAll()[a]??null,getAll:()=>{try{a.set("hexclave-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),a.set("stack-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)})}catch(a){if("object"==typeof a&&null!==a&&"message"in a&&"string"==typeof a.message&&a.message.includes("Cookies can only be modified in a Server Action or Route Handler"));else throw a}return a.getAll().reduce((a,b)=>(a[b.name]=b.value,a),{})},set:(c,d,e)=>{aq(c,e);let f=ax(a,b);try{a.set(c,d,{secure:ap(c)||f,maxAge:"session"===e.maxAge?void 0:e.maxAge,domain:e.domain,sameSite:"lax",path:"/"})}catch(a){at(a,e)}},setOrDelete(a,b,c){null===b?this.delete(a,c):this.set(a,b,c)},delete(b,c){try{aq(b,c),void 0!==c.domain?a.delete({name:b,domain:c.domain,path:"/"}):a.delete({name:b,path:"/"})}catch(a){at(a,c)}}})}function as(){return{get:au,getAll:av,set:aE,setOrDelete:aA,delete:aC}}function at(a,b){if(a instanceof Error&&a.message.includes("Cookies can only be modified in"))if(b.noOpIfServerComponent);else throw new h.HexclaveAssertionError("Attempted to set cookie in server component. Pass { noOpIfServerComponent: true } in the options of Stack's cookie functions if this is intentional and you want to ignore this error. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options");else throw a}function au(a){return av()[a]??null}function av(){return an(),ae.set("hexclave-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),ae.set("stack-is-https","true",{secure:!0,expires:new Date(Date.now()+31536e6)}),ae.get()}async function aw(){return!(0,P.isBrowserLike)()&&ax(await ab(),await ac())}RegExp("^[,\\s]*("+am+")"),RegExp("^[,\\s]*("+am+')\\s*=\\s*"((?:[^"\\\\]|\\\\[\\s\\S])*)"[,\\s]*(.*)'),RegExp("^[,\\s]*("+am+")\\s*=\\s*([a-zA-Z0-9!#$%&\\'\\*\\+\\-\\.\\^_`\\|~]+)[,\\s]*(.*)"),RegExp("^([a-zA-Z0-9\\-\\._\\~\\+\\/]+={0,2})(?:$|[,\\s])(.*)");function ax(a,b){return a.has("hexclave-is-https")||a.has("stack-is-https")||"https"===b.get("x-forwarded-proto")}function ay(a,b,c){aq(a,c);let d=ap(a)||(c.secure??!1),f=e??=(an(),!1);ae.set(a,b,{expires:"session"===c.maxAge?void 0:new Date(Date.now()+1e3*c.maxAge),domain:c.domain,secure:d,path:"/",sameSite:"Lax",...f?{partitioned:f,sameSite:"None"}:{}})}function az(a,b){for(let c of(aq(a,b),[!0,!1]))void 0!==b.domain&&ae.remove(a,{domain:b.domain,secure:!1,partitioned:c,path:"/"}),ae.remove(a,{secure:ap(a)||!1,partitioned:c,path:"/"})}function aA(a,b,c){an(),null===b?az(a,c):ay(a,b,c)}async function aB(a,b,c){(await ar()).setOrDelete(a,b,c)}function aC(a,b){an(),az(a,b)}async function aD(a,b){(await ar()).delete(a,b)}function aE(a,b,c){an(),ay(a,b,c)}async function aF(a,b,c){(await ar()).set(a,b,c)}async function aG(){let a=ak(),b=await al(a),c=ak();return await aF("hexclave-oauth-outer-"+c,a,{maxAge:3600}),await aF("stack-oauth-outer-"+c,a,{maxAge:3600}),{codeChallenge:b,state:c}}async function aH(a,b,c){let{codeChallenge:d,state:e}=await aG();return await a.getOAuthUrl({provider:b.provider,redirectUrl:D(b.redirectUrl,"redirectUrl"),errorRedirectUrl:D(b.errorRedirectUrl,"errorRedirectUrl"),afterCallbackRedirectUrl:D(window.location.href,"afterCallbackRedirectUrl"),codeChallenge:d,state:e,type:"link",session:c,providerScope:b.providerScope})}var aI=a.i(957250),aJ=a.i(538107),aK=a.i(46508),aL=a.i(328455),aM=a.i(938660);function aN(a){if(!a)return null;try{let b=JSON.parse(a);if("object"!=typeof b||null===b||"string"!=typeof b.session_id||"number"!=typeof b.created_at_ms||"number"!=typeof b.last_activity_ms)return null;return b}catch{return null}}function aO(){return crypto.randomUUID()}function aP(a){let b=aN(localStorage.getItem(a.key))??(a.legacyKey?aN(localStorage.getItem(a.legacyKey)):null);if(b&&a.nowMs-b.last_activity_ms<=18e4)return b;let c={session_id:aO(),created_at_ms:a.nowMs,last_activity_ms:a.nowMs};return localStorage.setItem(a.key,JSON.stringify(c)),c}function aQ(a){return k.KnownErrors.AnalyticsNotEnabled.isInstance(a)}var aR=class{constructor(a,b){this._started=!1,this._cancelled=!1,this._disabled=!1,this._stopRecording=null,this._detachListeners=null,this._flushTimer=null,this._events=[],this._approxBytes=0,this._lastPersistActivity=0,this._recording=!1,this._rrwebModule=null,this._lastBrowserSessionId=null,this._takingSnapshot=!1,this._flushInProgress=!1,this._deps=a,this._replayOptions=b,this._sessionReplaySegmentId=aO(),this._storageKey=function(a){return`hexclave:session-replay:v1:${a}`}(a.projectId),this._legacyStorageKey=function(a){return`stack:session-replay:v1:${a}`}(a.projectId)}start(){this._started||(0,P.isBrowserLike)()&&(this._started=!0,(0,g.runAsynchronously)(()=>this._startRecording(),{noErrorLogging:!0}),this._flushTimer=setInterval(()=>this._tick(),5e3))}stop(){this._cancelled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),(0,g.runAsynchronously)(()=>this._flush({keepalive:!0})),this._stopCurrentRecording()}clearBuffer(){this._events=[],this._approxBytes=0}_persistActivity(a){let b=aP({key:this._storageKey,legacyKey:this._legacyStorageKey,nowMs:a});if(a-this._lastPersistActivity<5e3)return b;this._lastPersistActivity=a;let c={...b,last_activity_ms:a};return localStorage.setItem(this._storageKey,JSON.stringify(c)),b}async _flush(a){if(this._disabled||0===this._events.length||this._flushInProgress)return;let b=Date.now(),c=aP({key:this._storageKey,legacyKey:this._legacyStorageKey,nowMs:b}),d=aO(),e={browser_session_id:c.session_id,session_replay_segment_id:this._sessionReplaySegmentId,batch_id:d,started_at_ms:c.created_at_ms,sent_at_ms:b,events:this._events};this._events=[],this._approxBytes=0,this._flushInProgress=!0;try{let b=await this._deps.sendBatch(JSON.stringify(e),{keepalive:a.keepalive});if("error"===b.status){if(aQ(b.error))return void this._disable();(0,h.captureWarning)("SessionRecorder.flush",b.error);return}b.data.ok||(0,h.captureWarning)("SessionRecorder.flush",Error(`SessionRecorder flush failed: ${b.data.status} ${await b.data.text()}`))}finally{this._flushInProgress=!1}}_disable(){this._disabled=!0,this.clearBuffer(),null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._stopCurrentRecording()}async _startRecording(){if(this._recording||this._cancelled)return;if(!this._rrwebModule){let b=await m.Result.fromPromise(a.A(75998));if("error"===b.status)return void console.warn("SessionRecorder: rrweb import failed. Is rrweb installed?",b.error);this._rrwebModule=b.data}if(this._cancelled)return;this._stopRecording=this._rrwebModule.record({emit:a=>{let b=Date.now(),c=this._persistActivity(b);if(null===this._lastBrowserSessionId)this._lastBrowserSessionId=c.session_id;else if(c.session_id!==this._lastBrowserSessionId&&!this._takingSnapshot){this._lastBrowserSessionId=c.session_id,this._takingSnapshot=!0;try{this._rrwebModule.record.takeFullSnapshot()}finally{this._takingSnapshot=!1}}this._events.push(a),this._approxBytes+=JSON.stringify(a).length,(this._events.length>=200||this._approxBytes>=512e3)&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))},maskAllInputs:this._replayOptions.maskAllInputs??!0,...void 0!==this._replayOptions.blockClass?{blockClass:this._replayOptions.blockClass}:{},...void 0!==this._replayOptions.blockSelector?{blockSelector:this._replayOptions.blockSelector}:{}})??null,this._recording=!0;let b=()=>{(0,g.runAsynchronously)(()=>this._flush({keepalive:!0}))};window.addEventListener("pagehide",b),document.addEventListener("visibilitychange",b),this._detachListeners=()=>{window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",b)}}_stopCurrentRecording(){this._detachListeners&&(this._detachListeners(),this._detachListeners=null),this._stopRecording&&(this._stopRecording(),this._stopRecording=null),this._events=[],this._approxBytes=0,this._recording=!1}_tick(){!this._cancelled&&this._events.length>0&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))}};function aS(a){return null!=a&&"object"==typeof a&&"width"in a&&"height"in a&&"number"==typeof a.width&&"number"==typeof a.height}function aT(a){return null!=a&&"object"==typeof a&&"pushState"in a&&"replaceState"in a&&"function"==typeof a.pushState&&"function"==typeof a.replaceState}function aU(a){return null!=a.closest(`#${(0,aL.cssEscapeIdent)(aK.DEV_TOOL_ROOT_ID)}, #${(0,aL.cssEscapeIdent)(aK.CLICKMAP_ROOT_ID)}`)}var aV=class{constructor(a){this._started=!1,this._cancelled=!1,this._disabled=!1,this._detachListeners=null,this._flushTimer=null,this._events=[],this._approxBytes=0,this._lastUrl=null,this._originalPushState=null,this._originalReplaceState=null,this._deadClickTimer=null,this._deadClickMutationObserver=null,this._unclassifiedClicks=new Set,this._lastMutationAtMs=null,this._lastScrollAtMs=null,this._lastSelectionChangedAtMs=null,this._lastVisibilityChangeAtMs=null,this._onPopState=()=>{this._capturePageView("pop")},this._onClickCapture=a=>{var b;let c=a.target;if(!(c instanceof Element)||aU(c))return;let d=window.innerWidth,e=window.innerHeight,f=function(a){let b=a,c=0;for(;null!=b&&c<2*aM.ELEMENTS_CHAIN_MAX_DEPTH;){let a=window.getComputedStyle(b);if("fixed"===a.position||"sticky"===a.position)return!0;b=b.parentElement,c+=1}return!1}(c),g=Math.round(a.pageX/16),h=Math.round(a.pageY/16),i=Math.round(a.clientY/16),j=d>0?a.clientX/d:0,k={event_type:"$click",event_at_ms:Date.now(),data:{tag_name:c.tagName.toLowerCase(),text:null==(b=c.textContent)?"":b.trim().substring(0,200),href:this._findNearestAnchorHref(c),selector:this._buildSelector(c),elements_chain:(0,aM.buildElementsChain)(c),pointer_target_fixed:+!!f,url:window.location.href,path:window.location.pathname,title:document.title,x:a.clientX,y:a.clientY,page_x:a.pageX,page_y:a.pageY,x_scaled:g,y_scaled:h,client_y_scaled:i,pointer_relative_x:j,viewport_width:d,viewport_height:e,scale_factor:16}};null!==this._deadClickTimer&&this._unclassifiedClicks.size<50&&this._unclassifiedClicks.add(k),this._pushEvent(k)},this._onDeadClickScroll=()=>{this._lastScrollAtMs=Date.now()},this._onDeadClickSelectionChange=()=>{this._lastSelectionChangedAtMs=Date.now()},this._onDeadClickVisibilityChange=()=>{this._lastVisibilityChangeAtMs=Date.now()},this._onPageHide=()=>{(0,g.runAsynchronously)(()=>this._flush({keepalive:!0}))},this._deps=a,this._sessionReplaySegmentId=aO()}start(){this._started||!(0,P.isBrowserLike)()||"function"==typeof window.addEventListener&&"function"==typeof window.removeEventListener&&"function"==typeof document.addEventListener&&"function"==typeof document.removeEventListener&&aS(window.screen)&&(this._started=!0,this._setupPageViewCapture(),this._setupClickCapture(),this._setupDeadClickDetection(),this._setupPageHideListeners(),this._flushTimer=setInterval(()=>this._tick(),1e4))}stop(){this._cancelled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),(0,g.runAsynchronously)(()=>this._flush({keepalive:!0})),this._teardown()}clearBuffer(){this._events=[],this._approxBytes=0,this._unclassifiedClicks.clear()}_pushEvent(a){!this._disabled&&(this._events.push(a),this._approxBytes+=JSON.stringify(a).length,(this._events.length>=50||this._approxBytes>=64e3)&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1})))}_capturePageView(a){let b=window.screen;if(!aS(b))return;let c=window.location.href;(c!==this._lastUrl||"initial"===a)&&(this._lastUrl=c,this._pushEvent({event_type:"$page-view",event_at_ms:Date.now(),data:{url:c,path:window.location.pathname,referrer:document.referrer,title:document.title,entry_type:a,viewport_width:window.innerWidth,viewport_height:window.innerHeight,screen_width:b.width,screen_height:b.height,user_agent:"u">typeof navigator?navigator.userAgent:null}}))}_setupPageViewCapture(){this._capturePageView("initial");let a=window.history;if(!aT(a))return;let b=a.pushState,c=a.replaceState;this._originalPushState=(...c)=>b.apply(a,c),a.pushState=(...a)=>{this._originalPushState(...a),this._capturePageView("push")},this._originalReplaceState=(...b)=>c.apply(a,b),a.replaceState=(...a)=>{this._originalReplaceState(...a),this._capturePageView("replace")},window.addEventListener("popstate",this._onPopState)}_buildSelector(a){let b=[],c=a,d=0;for(;c&&d<8&&c!==document.documentElement;){let a=c.tagName.toLowerCase(),e="data-testid",f=c.getAttribute("data-testid");if(null==f&&(e="data-test-id",f=c.getAttribute("data-test-id")),null!=f&&""!==f.trim()){a+=`[${e}="${f.replace(/"/g,'\\"')}"]`,b.unshift(a);break}if(""!==c.id){a+=`#${(0,aL.cssEscapeIdent)(c.id)}`,b.unshift(a);break}if(c.className&&"string"==typeof c.className){let b=c.className.trim().split(/\s+/).filter(Boolean).slice(0,4);b.length>0&&(a+=`.${b.map(aL.cssEscapeIdent).join(".")}`)}let g=c.parentElement;if(null!=g){let b=c.tagName,d=Array.from(g.children).filter(a=>a.tagName===b);d.length>1&&(a+=`:nth-of-type(${d.indexOf(c)+1})`)}b.unshift(a),c=g,d++}return b.join(" > ")}_findNearestAnchorHref(a){let b=a;for(;b;){if("A"===b.tagName&&b.hasAttribute("href"))return b.getAttribute("href");b=b.parentElement}return null}_setupClickCapture(){document.addEventListener("click",this._onClickCapture,{capture:!0})}_setupDeadClickDetection(){"function"==typeof MutationObserver&&(this._deadClickMutationObserver=new MutationObserver(a=>{a.every(a=>{var b;let c;return null!=(c=(b=a.target)instanceof Element?b:b?.parentElement??null)&&aU(c)})||(this._lastMutationAtMs=Date.now())}),this._deadClickMutationObserver.observe(document.documentElement,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),document.addEventListener("scroll",this._onDeadClickScroll,{capture:!0,passive:!0}),document.addEventListener("selectionchange",this._onDeadClickSelectionChange),document.addEventListener("visibilitychange",this._onDeadClickVisibilityChange),this._deadClickTimer=setInterval(()=>this._checkDeadClicks(),1e3))}_checkDeadClicks(){let a=Date.now();for(let b of this._unclassifiedClicks){let c=(a,c)=>null!=a&&a>=b.event_at_ms&&a-b.event_at_ms<c;c(this._lastScrollAtMs,100)||c(this._lastSelectionChangedAtMs,100)||c(this._lastVisibilityChangeAtMs,100)||c(this._lastMutationAtMs,2500)?this._unclassifiedClicks.delete(b):a-b.event_at_ms>=2750&&(b.data.dead=1,this._unclassifiedClicks.delete(b))}}_teardownDeadClickDetection(){null!==this._deadClickTimer&&(clearInterval(this._deadClickTimer),this._deadClickTimer=null),null!==this._deadClickMutationObserver&&(this._deadClickMutationObserver.disconnect(),this._deadClickMutationObserver=null),document.removeEventListener("scroll",this._onDeadClickScroll,{capture:!0}),document.removeEventListener("selectionchange",this._onDeadClickSelectionChange),document.removeEventListener("visibilitychange",this._onDeadClickVisibilityChange),this._unclassifiedClicks.clear()}_setupPageHideListeners(){window.addEventListener("pagehide",this._onPageHide),document.addEventListener("visibilitychange",this._onPageHide),this._detachListeners=()=>{window.removeEventListener("pagehide",this._onPageHide),document.removeEventListener("visibilitychange",this._onPageHide)}}_teardown(){this._detachListeners&&(this._detachListeners(),this._detachListeners=null);let a=window.history;aT(a)&&(this._originalPushState&&(a.pushState=this._originalPushState),this._originalReplaceState&&(a.replaceState=this._originalReplaceState)),this._originalPushState=null,this._originalReplaceState=null,window.removeEventListener("popstate",this._onPopState),document.removeEventListener("click",this._onClickCapture,{capture:!0}),this._teardownDeadClickDetection(),this._events=[],this._approxBytes=0}async _flush(a){if(this._disabled)return;a.keepalive&&this._unclassifiedClicks.clear();let b=this._events.filter(a=>!this._unclassifiedClicks.has(a));if(0===b.length)return;this._events=this._events.filter(a=>this._unclassifiedClicks.has(a)),this._approxBytes=this._events.reduce((a,b)=>a+JSON.stringify(b).length,0);let c=Date.now(),d=aO(),e={session_replay_segment_id:this._sessionReplaySegmentId,batch_id:d,sent_at_ms:c,events:b},f=await this._deps.sendBatch(JSON.stringify(e),{keepalive:a.keepalive});"error"===f.status?aQ(f.error)?this._disable():console.warn("EventTracker flush failed:",f.error):f.data.ok||console.warn("EventTracker flush failed:",f.data.status,await f.data.text())}_disable(){this._disabled=!0,null!==this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._teardown()}_tick(){!this._cancelled&&this._events.length>0&&(0,g.runAsynchronously)(()=>this._flush({keepalive:!1}))}};let aW={marker:"hexclave_cross_domain_auth",state:"hexclave_cross_domain_state",codeChallenge:"hexclave_cross_domain_code_challenge",afterCallbackRedirectUrl:"hexclave_cross_domain_after_callback_redirect_url"};function aX(a,b){return a.get(aW[b])}function aY(a,b){return a.has(aW[b])}function aZ(a,b,c){a.set(aW[b],c)}function a$(a){let b=aX(a.searchParams,"state"),c=aX(a.searchParams,"codeChallenge");return null==b||null==c?null:{state:b,codeChallenge:c}}function a_(a){return aY(a.searchParams,"state")&&aY(a.searchParams,"codeChallenge")&&aY(a.searchParams,"afterCallbackRedirectUrl")}function a0(a){let b=new URL(a.rawHandlerUrl,a.currentUrl),c=a.currentUrl.searchParams.get("after_auth_return_to");for(let d of(null==c||b.searchParams.has("after_auth_return_to")||b.searchParams.set("after_auth_return_to",c),["state","codeChallenge","afterCallbackRedirectUrl"])){let c=aX(a.currentUrl.searchParams,d);null==c||aY(b.searchParams,d)||aZ(b.searchParams,d,c)}if("signOut"===a.handlerName)return b.searchParams.has("after_auth_return_to")||(a.currentUrl.protocol===b.protocol&&a.currentUrl.host===b.host?b.searchParams.set("after_auth_return_to",(0,M.getRelativePart)(a.currentUrl)):b.searchParams.set("after_auth_return_to",a.currentUrl.toString())),b.origin===a.currentUrl.origin?(0,M.getRelativePart)(b):b.toString();if(a.currentUrl.origin!==b.origin){if(!a_(b)){let c=a.currentUrl.searchParams.get("after_auth_return_to"),d=c?new URL(c,a.currentUrl).toString():a.currentUrl.toString(),e=function(a){let b=new URL(a.localOAuthCallbackUrl,a.currentUrl);if(b.origin!==a.currentUrl.origin)throw new h.HexclaveAssertionError("Cross-domain auth callback URL must stay on the current origin",{localOAuthCallbackUrl:b.toString(),currentUrl:a.currentUrl.toString()});return aZ(b.searchParams,"marker","1"),null!=a.state&&aZ(b.searchParams,"state",a.state),null!=a.codeChallenge&&aZ(b.searchParams,"codeChallenge",a.codeChallenge),null!=a.afterCallbackRedirectUrl&&aZ(b.searchParams,"afterCallbackRedirectUrl",a.afterCallbackRedirectUrl),b}({currentUrl:a.currentUrl,localOAuthCallbackUrl:a.localOAuthCallbackUrl,state:a.crossDomainHandoffParams?.state,codeChallenge:a.crossDomainHandoffParams?.codeChallenge,afterCallbackRedirectUrl:d});b.searchParams.set("after_auth_return_to",e.toString()),aZ(b.searchParams,"afterCallbackRedirectUrl",d),null!=a.crossDomainHandoffParams&&(aZ(b.searchParams,"state",a.crossDomainHandoffParams.state),aZ(b.searchParams,"codeChallenge",a.crossDomainHandoffParams.codeChallenge))}}else a.currentUrl.protocol!==b.protocol||a.currentUrl.host!==b.host||b.searchParams.has("after_auth_return_to")||b.searchParams.set("after_auth_return_to",(0,M.getRelativePart)(a.currentUrl));return b.origin===a.currentUrl.origin?(0,M.getRelativePart)(b):b.toString()}async function a1(a){let b=a0({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,crossDomainHandoffParams:null,localOAuthCallbackUrl:a.localOAuthCallbackUrl});if("signOut"===a.handlerName)return b;let c=new URL(b,a.currentUrl);if(a.currentUrl.origin===c.origin||a_(c))return b;let d=await a.getCrossDomainHandoffParams(a.currentUrl);return a0({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,crossDomainHandoffParams:d,localOAuthCallbackUrl:a.localOAuthCallbackUrl})}async function a2(a){if(a.noRedirectBack||null==a.currentUrl)return{type:"redirect",url:a.rawHandlerUrl};let b=function(a){return"afterSignIn"===a||"afterSignUp"===a?"after-auth-return":"signIn"===a||"signUp"===a||"onboarding"===a||"signOut"===a?"redirect-back-aware":"none"}(a.handlerName);if("none"===b)return{type:"redirect",url:a.rawHandlerUrl};if("after-auth-return"===b){var c,d,e;let b,f,g=a.currentUrl.searchParams.get("after_auth_return_to");if(null==g)return{type:"redirect",url:a.rawHandlerUrl};let h=new URL(g,a.currentUrl),i=(b=(d=(c={currentUrl:a.currentUrl,redirectBackTarget:h}).currentUrl,e=c.redirectBackTarget,{state:aX(d.searchParams,"state")??aX(e.searchParams,"state"),codeChallenge:aX(d.searchParams,"codeChallenge")??aX(e.searchParams,"codeChallenge"),afterCallbackRedirectUrl:aX(d.searchParams,"afterCallbackRedirectUrl")??aX(e.searchParams,"afterCallbackRedirectUrl")}),null==(f=function(a){if(a.redirectBackTarget.origin!==a.currentUrl.origin)return a.redirectBackTarget;if(null==a.handoffParams.state||null==a.handoffParams.codeChallenge||null==a.handoffParams.afterCallbackRedirectUrl)return null;let b=new URL(a.handoffParams.afterCallbackRedirectUrl,a.currentUrl);return b.origin===a.currentUrl.origin?null:new URL(`${a.redirectBackTarget.pathname}${a.redirectBackTarget.search}${a.redirectBackTarget.hash}`,b.origin)}({currentUrl:c.currentUrl,redirectBackTarget:c.redirectBackTarget,handoffParams:b}))?null:{redirectBackTarget:f,handoffParams:b});if(null==i)return{type:"redirect",url:g};let j=i.handoffParams.state,k=i.handoffParams.codeChallenge,l=i.handoffParams.afterCallbackRedirectUrl;if(null==j||null==k){let b=await a.getCrossDomainHandoffParams(a.currentUrl);j??=b.state,k??=b.codeChallenge}return l??=a.currentUrl.toString(),{type:"cross-domain-authorize",redirectUri:i.redirectBackTarget.toString(),state:j,codeChallenge:k,afterCallbackRedirectUrl:l}}if("signIn"!==a.handlerName&&"signUp"!==a.handlerName&&"onboarding"!==a.handlerName&&"signOut"!==a.handlerName)throw new h.HexclaveAssertionError("Unexpected redirect-back-aware handler policy mismatch",{handlerName:a.handlerName,policy:b});return{type:"redirect",url:await a1({handlerName:a.handlerName,rawHandlerUrl:a.rawHandlerUrl,currentUrl:a.currentUrl,localOAuthCallbackUrl:a.localOAuthCallbackUrl,getCrossDomainHandoffParams:a.getCrossDomainHandoffParams})}}var a3=a.i(334676),a4=a.i(317683);let a5=null,a6=null,a7=0,a8=null;function a9(){let a=function(){try{let a=localStorage.getItem("__hexclave-dev-tool-override");if("true"===a)return!0;if("false"===a)return!1}catch{}return null}();return null!==a?a:!!(0,a4.canMountIntoDom)()&&(0,M.isLocalhost)(window.location.href)}let ba=null,bb=null,bc=0,bd=null,be=!1;be=!0;let bf=U(O),bg=new Map,bh="stackauth_",bi="hexclave_";function bj(a){return null==a.accessToken&&null==a.refreshToken?null:`Bearer ${bh}${(0,I.encodeBase64)(new TextEncoder().encode(JSON.stringify(a)))}`}function bk(a,b){if("get"in a&&"function"==typeof a.get)return a.get(b);let c=b.toLowerCase();for(let[b,d]of Object.entries(a))if(b.toLowerCase()===c)return d;return null}async function bl(){return(await ac?.())?.get("host")??null}var bm=class b{static{this.LazyStackAdminAppImpl={value:void 0}}async _createCookieHelper(a){let b=void 0===a?this._tokenStoreInit:a;return"nextjs-cookie"===b||"cookie"===b?await ar():await ao()}async _getUserOAuthConnectionCacheFn(a){let b=await a.getUser(),c=!0;if(b&&b.oauth_providers.find(b=>b.id===a.providerId)||(c=!1),await a.getOrWaitOAuthToken()||(c=!1),!c&&a.redirect){if(!a.session)throw Error(K.deindent`
3
3
  Cannot add new scopes to a user that is not a CurrentUser. Please ensure that you are calling this function on a CurrentUser object, or remove the 'or: redirect' option.
4
4
 
5
5
  Often, you can solve this by calling this function in the browser instead, or by removing the 'or: redirect' option and dealing with the case where the user doesn't have enough permissions.
6
- `);let b=await aH(this._interface,{provider:a.providerId,redirectUrl:this._getOAuthCallbackRedirectUri(),errorRedirectUrl:this.urls.error,providerScope:(0,K.mergeScopeStrings)(a.scope||"",(this._oauthScopesOnSignIn[a.providerId]??[]).join(" "))},a.session);return await this._redirectTo({url:b}),await (0,g.neverResolve)()}if(!c)return null;let d=b.oauth_providers.find(b=>b.id===a.providerId)?.account_id??"";return{id:a.providerId,provider:a.providerId,providerAccountId:d,async getAccessToken(){let b=await a.getOrWaitOAuthToken();if(!b)throw new h.HexclaveAssertionError(`Failed to retrieve an access token for this connected account (provider: ${a.providerId}). This usually means the OAuth refresh token has been revoked or expired. The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`);return b},useAccessToken(){let b=a.useOAuthToken();if(!b)throw new h.HexclaveAssertionError(`Failed to retrieve an access token for this connected account (provider: ${a.providerId}). This usually means the OAuth refresh token has been revoked or expired. The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`);return b}}}_createOAuthConnectionFromCrudItem(a,b){let c=this,d=a.provider,e=a.provider_account_id;return{id:d,provider:d,providerAccountId:e,async getAccessToken(a){let f=a?.scopes?.join(" ")??"",g=m.Result.orThrow(await c._currentUserOAuthConnectionAccessTokensByAccountCache.getOrWait([b,d,e,f],"write-only"));if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)},useAccessToken(a){let f=a?.scopes?.join(" ")??"",g=(0,n.useAsyncCache)(c._currentUserOAuthConnectionAccessTokensByAccountCache,[b,d,e,f],"connection.useAccessToken()");if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)}}}constructor(c,d){this._uniqueIdentifier=void 0,this._sessionRecorder=null,this._eventTracker=null,this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY=!1,this._ownedAdminApps=new W.DependenciesMap,this._currentUserCache=(0,n.createCacheBySession)(async a=>(this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY&&await (0,g.wait)(2e3),a.isKnownToBeInvalid())?null:await this._interface.getClientUserByToken(a)),this._currentProjectCache=(0,n.createCache)(async()=>m.Result.orThrow(await this._interface.getClientProject())),this._ownedProjectsCache=(0,n.createCacheBySession)(async a=>await this._interface.listProjects(a)),this._currentUserPermissionsCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.listCurrentUserTeamPermissions({teamId:b,recursive:c},a)),this._currentUserProjectPermissionsCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listCurrentUserProjectPermissions({recursive:b},a)),this._currentUserTeamsCache=(0,n.createCacheBySession)(async a=>await this._interface.listCurrentUserTeams(a)),this._currentUserOAuthConnectionAccessTokensCache=(0,n.createCacheBySession)(async(a,[b,c])=>{try{return{accessToken:(await this._interface.createProviderAccessToken(b,c||"",a)).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._currentUserOAuthConnectionCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._getUserOAuthConnectionCacheFn({getUser:async()=>m.Result.orThrow(await this._currentUserCache.getOrWait([a],"write-only")),getOrWaitOAuthToken:async()=>m.Result.orThrow(await this._currentUserOAuthConnectionAccessTokensCache.getOrWait([a,b,c||""],"write-only")),useOAuthToken:()=>(0,n.useAsyncCache)(this._currentUserOAuthConnectionAccessTokensCache,[a,b,c||""],"connection.useAccessToken()"),providerId:b,scope:c,redirect:d,session:a})),this._currentUserConnectedAccountsCache=(0,n.createCacheBySession)(async a=>(await this._interface.listConnectedAccounts(a)).items.map(b=>this._createOAuthConnectionFromCrudItem(b,a))),this._currentUserOAuthConnectionAccessTokensByAccountCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>{try{return{accessToken:(await this._interface.createProviderAccessTokenByAccount(b,c,d,a)).access_token}}catch(a){if(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a))return null;throw a}}),this._currentUserValidConnectedAccountForProviderCache=(0,n.createCacheBySession)(async(a,[b,c])=>{let d=m.Result.orThrow(await this._currentUserConnectedAccountsCache.getOrWait([a],"write-only")).filter(a=>a.provider===b),e=c?c.split(" "):void 0;for(let a of d)if("ok"===(await a.getAccessToken({scopes:e})).status)return a;let f=await aH(this._interface,{provider:b,redirectUrl:this._getOAuthCallbackRedirectUri(),errorRedirectUrl:this.urls.error,providerScope:(0,K.mergeScopeStrings)(c,(this._oauthScopesOnSignIn[b]??[]).join(" "))},a);return await this._redirectTo({url:f}),await (0,g.neverResolve)()}),this._teamMemberProfilesCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listTeamMemberProfiles({teamId:b},a)),this._teamInvitationsCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listTeamInvitations({teamId:b},a)),this._currentUserTeamProfileCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.getTeamMemberProfile({teamId:b,userId:"me"},a)),this._currentUserTeamInvitationsCache=(0,n.createCacheBySession)(async a=>await this._interface.listCurrentUserTeamInvitations(a)),this._clientContactChannelsCache=(0,n.createCacheBySession)(async a=>await this._interface.listClientContactChannels(a)),this._userApiKeysCache=(0,n.createCacheBySession)(async a=>await this._interface.listProjectApiKeys({user_id:"me"},a,"client")),this._teamApiKeysCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listProjectApiKeys({team_id:b},a,"client")),this._notificationCategoriesCache=(0,n.createCacheBySession)(async a=>await this._interface.listNotificationCategories(a)),this._currentUserOAuthProvidersCache=(0,n.createCacheBySession)(async a=>await this._interface.listOAuthProviders({user_id:"me"},a)),this._userItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({userId:b,itemId:c},a)),this._teamItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({teamId:b,itemId:c},a)),this._customItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({customCustomerId:b,itemId:c},a)),this._userProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"user",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._teamProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"team",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._customProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"custom",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._userInvoicesCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listInvoices({customer_type:"user",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._teamInvoicesCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listInvoices({customer_type:"team",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._customerBillingCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getCustomerBilling(b,c,a)),this._convexPartialUserCache=(0,n.createCache)(async([a])=>await this._getPartialUserFromConvex(a)),this._trustedParentDomainCache=(0,n.createCache)(async([a])=>await this._getTrustedParentDomain(a)),this._anonymousSignUpInProgress=null,this._prefetchedCrossDomainHandoffParams=null,this._prefetchedCrossDomainHandoffParamsFetchedAt=0,this._isPrefetchingCrossDomainHandoffParams=!1,this._pendingAuthResolutionPromises=[],this._memoryTokenStore=(0,n.createEmptyTokenStore)(),this._nextServerCookiesTokenStores=new WeakMap,this._requestTokenStores=new WeakMap,this._storedBrowserCookieTokenStore=null,this._mostRecentQueuedCookieRefreshIndex=0,this._sessionsByTokenStoreAndSessionKey=new WeakMap,this._botChallengeSiteKeysWarned=!1;const e=(0,n.resolveConstructorOptions)(c);if(!b.LazyStackAdminAppImpl.value)throw new h.HexclaveAssertionError("Admin app implementation not initialized. Did you import the _HexclaveClientApp from hexclave-app/apps/implementations/index.ts? You can't import it directly from ./apps/implementations/client-app-impl.ts as that causes a circular dependency (see the comment at _LazyHexclaveAdminAppImpl for more details).");this._options=e,this._extraOptions=d;const f=e.projectId??(0,n.getDefaultProjectId)();if("internal"!==f&&!f.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i))throw Error(`Invalid project ID: ${f}. Project IDs must be UUIDs. Please check your environment variables and/or your StackApp.`);const i=e.publishableClientKey??(0,n.getDefaultPublishableClientKey)();if(d&&d.interface)this._interface=d.interface;else{const a=(0,n.resolveApiUrls)(e.baseUrl);this._interface=new L.HexclaveClientInterface({getBaseUrl:()=>a()[0],getAnalyticsBaseUrl:()=>(0,n.getAnalyticsBaseUrl)(a()[0]),getApiUrls:a,extraRequestHeaders:e.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),projectId:f,clientVersion:n.clientVersion,...null!=i?{publishableClientKey:i}:{},prepareRequest:async()=>{await ab?.()}})}this._tokenStoreInit=e.tokenStore,this._redirectMethod=e.redirectMethod||((0,P.isBrowserLike)()?"window":"none"),this._redirectMethod=e.redirectMethod||"nextjs",this._urlOptions=e.urls??{},this._oauthScopesOnSignIn=e.oauthScopesOnSignIn??{},(0,P.isBrowserLike)()&&("cookie"===e.tokenStore||"nextjs-cookie"===e.tokenStore)&&((0,g.runAsynchronously)(this._trustedParentDomainCache.getOrWait([window.location.hostname],"write-only")),this._ensureCrossSubdomainCookieExists()),d&&d.uniqueIdentifier&&(this._uniqueIdentifier=d.uniqueIdentifier,this._initUniqueIdentifier()),this._analyticsOptions=e.analytics;const j=async()=>(this._ensurePersistentTokenStore(),await this.getPartialUser({from:"token",or:"anonymous-if-exists"}))?await this._getSession():(await this.getUser({or:"anonymous"}))._internalSession,l=this._analyticsOptions?.enabled!==!1,o=function(a){return{...a?.replays,enabled:a?.replays?.enabled??!0}}(this._analyticsOptions);if(l&&(0,P.isBrowserLike)()&&this._hasPersistentTokenStore()&&o.enabled&&(this._sessionRecorder=new aQ({projectId:this.projectId,sendBatch:async(a,b)=>await this._interface.sendSessionReplayBatch(a,await j(),b)},o),this._sessionRecorder.start()),l&&(0,P.isBrowserLike)()&&this._hasPersistentTokenStore()&&(this._eventTracker=new aU({projectId:this.projectId,sendBatch:async(a,b)=>await this._interface.sendAnalyticsEventBatch(a,await j(),b)}),this._eventTracker.start()),(0,P.isBrowserLike)()&&(this._isOAuthCallbackUrlHosted()||this._currentUrlLooksLikeNestedCrossDomainOAuthCallback())&&this._currentUrlLooksLikeHexclaveOAuthCallback()&&this._trackPendingAuthResolution(async()=>{(0,P.isBrowserLike)()&&await this.callOAuthCallback({dontWarnAboutMissingQueryParams:!0})}),(0,P.isBrowserLike)()){const a=new URL(window.location.href);this._trackPendingAuthResolution(async()=>{await this._maybeHandleNestedCrossDomainAuth(a)})}(0,P.isBrowserLike)()&&!1!==e.devTool&&function(b){ba=b,function(){if(a9&&(a9(),a9=null),!a8()||!ba||!(0,a3.canMountIntoDom)())return;let b=++bb,c=ba;(0,g.runAsynchronously)(async()=>{let d=await (!bc&&(bc=a.A(913572).then(a=>a.createDevTool).catch(a=>{throw bc=null,a})),bc);b!==bb||a8()&&ba===c&&(0,a3.canMountIntoDom)()&&(a9=d(c))},{noErrorLogging:!0,onError:a=>{(0,h.captureError)("dev-tool-mount",a)}})}()}(this),(0,P.isBrowserLike)()&&function(b){a4=b,(0,a3.canMountIntoDom)()&&function(){try{if("1"!==sessionStorage.getItem(a2.CLICKMAP_OVERLAY_RESUME_STORAGE_KEY))return!1;return sessionStorage.removeItem(a2.CLICKMAP_OVERLAY_RESUME_STORAGE_KEY),!0}catch{return!1}}()&&function(){if(a5||!a4||!(0,a3.canMountIntoDom)())return;let b=++a6,c=a4;(0,g.runAsynchronously)(async()=>{let d=await (!a7&&(a7=a.A(728584).then(a=>a.openClickmapOverlay).catch(a=>{throw a7=null,a})),a7);b!==a6||!a5&&a4===c&&(0,a3.canMountIntoDom)()&&(a5=d(c,()=>{a5=null}))},{noErrorLogging:!0,onError:a=>{(0,h.captureError)("clickmap-mount",a)}})}()}(this)}_initUniqueIdentifier(){if(!this._uniqueIdentifier)throw new h.HexclaveAssertionError("Unique identifier not initialized");if(bf.has(this._uniqueIdentifier))throw new h.HexclaveAssertionError("A Stack client app with the same unique identifier already exists");bf.set(this._uniqueIdentifier,[this._extraOptions?.checkString??void 0,this])}_trackPendingAuthResolution(a){let b=(async()=>{await Promise.resolve();try{await a()}catch(a){(0,h.captureError)("pending-auth-resolution-failed",a)}})();this._pendingAuthResolutionPromises.push(b),(0,g.runAsynchronously)(async()=>{try{await b}finally{this._pendingAuthResolutionPromises=this._pendingAuthResolutionPromises.filter(a=>a!==b)}})}async _awaitPendingAuthResolutions(a,b){b?.awaitPendingAuthResolutions!==!1&&void 0===a&&this._hasPersistentTokenStore()&&0!==this._pendingAuthResolutionPromises.length&&await Promise.all(this._pendingAuthResolutionPromises)}_usePendingAuthResolutions(a){void 0===a&&this._hasPersistentTokenStore()&&0!==this._pendingAuthResolutionPromises.length&&(0,l.use)(Promise.all(this._pendingAuthResolutionPromises))}_isOAuthCallbackUrlHosted(){let a=this._urlOptions.oauthCallback??this._urlOptions.default;return"string"!=typeof a&&a?.type==="hosted"}_currentUrlLooksLikeOAuthCallback(){return!1}_currentUrlLooksLikeHexclaveOAuthCallback(){return!1}_currentUrlLooksLikeNestedCrossDomainOAuthCallback(){return!1}_getOAuthCallbackRedirectUri(){if(!this._isOAuthCallbackUrlHosted())return this.urls.oauthCallback;throw new h.HexclaveAssertionError("Hosted OAuth callback URLs require a browser environment to use the current URL as the redirect URI")}async _fetchCurrentRefreshTokenIdIfSignedIn(a){let b=await (await this._getSession(a?.overrideTokenStoreInit,a)).fetchNewTokens();return b?.refreshToken==null?null:b.accessToken.payload.refresh_token_id}async _addNestedCrossDomainAuthParamsToRedirectUrl(a){let b=new URL(a.url,a.currentUrl);if(b.origin===a.currentUrl.origin)return a.url;let c=await this._fetchCurrentRefreshTokenIdIfSignedIn({awaitPendingAuthResolutions:a.awaitPendingAuthResolutions,overrideTokenStoreInit:a.overrideTokenStoreInit});return null==c?a.url:(b.searchParams.set("stack_nested_cross_domain_auth_refresh_token_id",c),b.searchParams.set("stack_nested_cross_domain_auth_callback_url",new URL(this._getOAuthCallbackRedirectUri(),a.currentUrl).toString()),b.toString())}async _maybeHandleNestedCrossDomainAuth(a){return!1}_getUniqueIdentifier(){return this._uniqueIdentifier||(this._uniqueIdentifier=(0,$.generateUuid)(),this._initUniqueIdentifier()),this._uniqueIdentifier}async _checkFeatureSupport(a,b){return await this._interface.checkFeatureSupport({...b,name:a})}_useCheckFeatureSupport(a,b){throw(0,g.runAsynchronously)(this._checkFeatureSupport(a,b)),new h.HexclaveAssertionError(`${a} is not currently supported. Please reach out to Stack support for more information.`)}get _legacyRefreshTokenCookieName(){return`stack-refresh-${this.projectId}`}get _refreshTokenCookieName(){return`hexclave-refresh-${this.projectId}`}_getRefreshTokenDefaultCookieNameForSecure(a){return`${a?"__Host-":""}${this._refreshTokenCookieName}--default`}_getCustomRefreshCookieName(a){let b=(0,I.encodeBase32)(new TextEncoder().encode(a.toLowerCase()));return`${this._refreshTokenCookieName}--custom-${b}`}_getDomainFromCustomRefreshCookieName(a){for(let b of[this._refreshTokenCookieName,this._legacyRefreshTokenCookieName]){let c=`${b}--custom-`;if(a.startsWith(c))try{return new TextDecoder().decode((0,I.decodeBase32)(a.slice(c.length)))}catch{break}}return null}_formatRefreshCookieValue(a,b){return JSON.stringify({refresh_token:a,updated_at_millis:b})}_formatAccessCookieValue(a,b){return a&&b?JSON.stringify([a,b]):null}_parseStructuredRefreshCookie(a){if(!a)return null;let b=(0,V.parseJson)(a);if("ok"!==b.status||"object"!=typeof b.data||null===b.data)return console.warn("Failed to parse structured refresh cookie"),null;let c=b.data,d="refresh_token"in c&&"string"==typeof c.refresh_token?c.refresh_token:null,e="updated_at_millis"in c&&"number"==typeof c.updated_at_millis?c.updated_at_millis:null;return d?{refreshToken:d,updatedAt:e}:(console.warn("Refresh token not found in structured refresh cookie"),null)}_extractRefreshTokenFromCookieMap(a){let{legacyNames:b,structuredPrefixes:c}=this._getRefreshTokenCookieNamePatterns(),d=[`${this._refreshTokenCookieName}--`,`__Host-${this._refreshTokenCookieName}--`],e=b=>{let c=null;for(let[d,e]of Object.entries(a)){if(!b.some(a=>d.startsWith(a)))continue;let a=this._parseStructuredRefreshCookie(e);if(!a)continue;let f=a.updatedAt??-1/0,g=c?.updatedAt??-1/0;(!c||f>g)&&(c=a)}return c},f=e(d);if(f)return{refreshToken:f.refreshToken,updatedAt:f.updatedAt??null};for(let c of b){let b=a[c];if(b)return{refreshToken:b,updatedAt:null}}let g=e(c);return g?{refreshToken:g.refreshToken,updatedAt:g.updatedAt??null}:{refreshToken:null,updatedAt:null}}_getTokensFromCookies(a){let{refreshToken:b}=this._extractRefreshTokenFromCookieMap(a),c=a[this._accessTokenCookieName]??a[this._legacyAccessTokenCookieName]??null,d=null;if(c&&c.startsWith('["')){let a=(0,V.parseJson)(c);"ok"===a.status&&"object"==typeof a.data&&null!==a.data&&Array.isArray(a.data)&&2===a.data.length&&"string"==typeof a.data[0]&&"string"==typeof a.data[1]?a.data[0]===b&&(d=a.data[1]):console.warn("Access token cookie has invalid format")}return{refreshToken:b,accessToken:d}}_getCurrentBrowserCookieTokenStoreValue(a){let b=this._getTokensFromCookies(this._getAllBrowserCookies());return{refreshToken:b.refreshToken,accessToken:b.accessToken??(a?.refreshToken===b.refreshToken?a.accessToken:null)}}get _accessTokenCookieName(){return"hexclave-access"}get _legacyAccessTokenCookieName(){return"stack-access"}_getAllBrowserCookies(){if(!(0,P.isBrowserLike)())throw new h.HexclaveAssertionError("Cannot get browser cookies on the server!");return _.parseCookie(document.cookie||"")}_getRefreshTokenCookieNamePatterns(){return{legacyNames:[this._legacyRefreshTokenCookieName,"stack-refresh"],structuredPrefixes:[`${this._refreshTokenCookieName}--`,`__Host-${this._refreshTokenCookieName}--`,`${this._legacyRefreshTokenCookieName}--`,`__Host-${this._legacyRefreshTokenCookieName}--`]}}_collectRefreshTokenCookieNames(a){let{legacyNames:b,structuredPrefixes:c}=this._getRefreshTokenCookieNamePatterns(),d=new Set;for(let c of b)a[c]&&d.add(c);for(let b of Object.keys(a))c.some(a=>b.startsWith(a))&&d.add(b);return d}_prepareRefreshCookieUpdate(a,b,c,d){let e=this._collectRefreshTokenCookieNames(a);e.delete(d);let f=b?Date.now():null;return{updatedAt:f,refreshCookieValue:b&&null!==f?this._formatRefreshCookieValue(b,f):null,accessTokenPayload:this._formatAccessCookieValue(b,c),cookieNamesToDelete:[...e]}}_ensureCrossSubdomainCookieExists(){(0,g.runAsynchronously)(async()=>{let a=window.location.hostname,b=await this._trustedParentDomainCache.getOrWait([a],"read-write");if("error"===b.status||!b.data)return;let c=this._getAllBrowserCookies(),d=this._getCustomRefreshCookieName(b.data);if(c[d])return;let{refreshToken:e,updatedAt:f}=this._extractRefreshTokenFromCookieMap(c);e&&f&&aA(d,this._formatRefreshCookieValue(e,f),{maxAge:31536e3,domain:b.data})})}_queueCustomRefreshCookieUpdate(a,b,c){(0,g.runAsynchronously)(async()=>{let d;this._mostRecentQueuedCookieRefreshIndex++;let e=this._mostRecentQueuedCookieRefreshIndex;if(!(d=(0,P.isBrowserLike)()?window.location.hostname:await bk()))return void console.warn("No hostname found when queueing custom refresh cookie update");let f=await this._trustedParentDomainCache.getOrWait([d],"read-write"),g={maxAge:31536e3,noOpIfServerComponent:!0},h=async(a,b)=>{let d=this._getCustomRefreshCookieName(a),e={...g,domain:a};"browser"===c?aA(d,b,e):await aB(d,b,e)};if("error"===f.status||!f.data||e!==this._mostRecentQueuedCookieRefreshIndex)return;let i=a&&b?this._formatRefreshCookieValue(a,b):null;await h(f.data,i);let j=await aw(),k=this._getRefreshTokenDefaultCookieNameForSecure(j);"browser"===c?aA(k,null,g):await aB(k,null,g)})}async _getTrustedRedirectConfig(){let a=m.Result.orThrow(await this._currentProjectCache.getOrWait([],"write-only"));return{allowLocalhost:a.config.allow_localhost,trustedDomains:[...a.config.domains.map(a=>a.domain),new URL((0,aJ.getHostedHandlerUrl)({projectId:this.projectId,pagePath:""})).origin]}}async _getTrustedParentDomain(a){return(0,Q.getTrustedParentDomain)(a,(await this._getTrustedRedirectConfig()).trustedDomains)}_getBrowserCookieTokenStore(){if(!(0,P.isBrowserLike)())throw Error("Cannot use cookie token store on the server!");if(null===this._storedBrowserCookieTokenStore){this._storedBrowserCookieTokenStore=new T.Store(this._getCurrentBrowserCookieTokenStoreValue(null));let a=!0;setInterval(()=>{if(a){let a=this._storedBrowserCookieTokenStore.get(),b=this._getCurrentBrowserCookieTokenStoreValue(a);(0,E.deepPlainEquals)(b,a)||this._storedBrowserCookieTokenStore.set(b)}},100),this._storedBrowserCookieTokenStore.onChange(b=>{try{let c=b.refreshToken,d="https:"===window.location.protocol,e=this._getRefreshTokenDefaultCookieNameForSecure(d),{updatedAt:f,refreshCookieValue:g,accessTokenPayload:h,cookieNamesToDelete:i}=this._prepareRefreshCookieUpdate(this._getAllBrowserCookies(),c,b.accessToken??null,e);aA(e,g,{maxAge:31536e3,secure:d}),aA(this._accessTokenCookieName,h,{maxAge:86400}),i.forEach(a=>{let b=this._getDomainFromCustomRefreshCookieName(a);aC(a,b?{domain:b}:{})}),this._queueCustomRefreshCookieUpdate(c,f,"browser"),a=!0}catch(b){if((0,P.isBrowserLike)())throw b;a=!1}})}else{let a=this._storedBrowserCookieTokenStore.get(),b=this._getCurrentBrowserCookieTokenStoreValue(a);(0,E.deepPlainEquals)(b,a)||this._storedBrowserCookieTokenStore.set(b)}return this._storedBrowserCookieTokenStore}_getOrCreateTokenStore(a,b){let c=void 0===b?this._tokenStoreInit:b;switch(c){case"cookie":return this._getBrowserCookieTokenStore();case"nextjs-cookie":if((0,P.isBrowserLike)())return this._getBrowserCookieTokenStore();{let b=new T.Store(this._getTokensFromCookies(a.getAll()));return b.onChange(b=>{(0,g.runAsynchronously)(async()=>{let c=b.refreshToken,d=await aw(),e=this._getRefreshTokenDefaultCookieNameForSecure(d),{updatedAt:f,refreshCookieValue:g,accessTokenPayload:h,cookieNamesToDelete:i}=this._prepareRefreshCookieUpdate(a.getAll(),c,b.accessToken??null,e);await Promise.all([aB(e,g,{maxAge:31536e3,noOpIfServerComponent:!0}),aB(this._accessTokenCookieName,h,{maxAge:86400,noOpIfServerComponent:!0})]),i.length>0&&await Promise.all(i.map(a=>{let b=this._getDomainFromCustomRefreshCookieName(a);return aD(a,{noOpIfServerComponent:!0,...b?{domain:b}:{}})})),this._queueCustomRefreshCookieUpdate(c,f,"server")})}),b}case"memory":return this._memoryTokenStore;default:if(null===c)return(0,n.createEmptyTokenStore)();if("object"==typeof c&&"headers"in c){if(this._requestTokenStores.has(c))return this._requestTokenStores.get(c);let b=bj(c.headers,"authorization");if(b){let a=function(a){let b,c=a.match(/^Bearer\s+(.+)$/i);if(null==c)return null;let d=c[1].trim(),e=d.startsWith(bh)?bh:d.startsWith(bg)?bg:null;if(null==e)return null;let f=d.slice(e.length);if(0===f.length)throw Error("Invalid Authorization header format. Expected `Bearer stackauth_<base64(getAuthJson())>`.");try{let a=new TextDecoder().decode((0,I.decodeBase64)(f));b=JSON.parse(a)}catch(a){throw Error("Invalid stackauth authorization header.",{cause:a})}if(null==b||"object"!=typeof b||Array.isArray(b))throw Error("Invalid stackauth authorization payload. Expected an object.");let g=Reflect.get(b,"accessToken"),h=Reflect.get(b,"refreshToken");if(null!=g&&"string"!=typeof g)throw Error("Invalid stackauth authorization payload. `accessToken` must be a string or null.");if(null!=h&&"string"!=typeof h)throw Error("Invalid stackauth authorization payload. `refreshToken` must be a string or null.");return{accessToken:g??null,refreshToken:h??null}}(b);if(null!=a){let b=new T.Store({accessToken:a.accessToken,refreshToken:a.refreshToken});return this._requestTokenStores.set(c,b),b}}let d=bj(c.headers,"x-stack-auth");if(d){let b;try{if(b=JSON.parse(d),"object"!=typeof b)throw Error("x-stack-auth header must be a JSON object");if(null===b)throw Error("x-stack-auth header must not be null")}catch(a){throw Error("Invalid x-stack-auth header.",{cause:a})}return this._getOrCreateTokenStore(a,{accessToken:b.accessToken??null,refreshToken:b.refreshToken??null})}let e=bj(c.headers,"cookie"),f=_.parseCookie(e||""),g=new T.Store(this._getTokensFromCookies(f));return this._requestTokenStores.set(c,g),g}if("accessToken"in c||"refreshToken"in c)return new T.Store({refreshToken:c.refreshToken,accessToken:c.accessToken});throw Error(`Invalid token store ${c}`)}}_useTokenStore(a){(0,l.suspendIfSsr)();let b=as();return this._getOrCreateTokenStore(b,a)}_getSessionFromTokenStore(a){let b=a.get(),c=o.InternalSession.calculateSessionKey(b),d=c?this._sessionsByTokenStoreAndSessionKey.get(a)?.get(c):null;if(d)return d;let e=this._interface.createSession({refreshToken:b.refreshToken,accessToken:b.accessToken});e.onAccessTokenChange(b=>{a.update(a=>o.InternalSession.calculateSessionKey(a)===c?{...a,accessToken:b?.token??null}:a)}),e.onInvalidate(()=>{a.update(a=>o.InternalSession.calculateSessionKey(a)===c?{...a,accessToken:null,refreshToken:null}:a)});let f=this._sessionsByTokenStoreAndSessionKey.get(a)??new Map;return this._sessionsByTokenStoreAndSessionKey.set(a,f),f.set(c,e),e}async _getSession(a,b){await this._awaitPendingAuthResolutions(a,b);let c=this._getOrCreateTokenStore(await this._createCookieHelper(a),a);return this._getSessionFromTokenStore(c)}_useSession(a){this._usePendingAuthResolutions(a);let b=this._useTokenStore(a),c=(0,i.useCallback)(a=>{var c;let d,e,f,g,h;return d=(c={tokenStore:b,getSession:()=>this._getSessionFromTokenStore(b),onTokenStoreChange:a}).minMillisUntilExpiration??3e4,e=c.maxMillisSinceIssued??6e4,g=(f=c.getSession()).startRefreshingAccessToken(d,e),h=c.tokenStore.onChange(()=>{let a=c.getSession();a.sessionKey!==f.sessionKey&&(g.unsubscribe(),g=(f=a).startRefreshingAccessToken(d,e)),c.onTokenStoreChange()}),()=>{h.unsubscribe(),g.unsubscribe()}},[b]),d=(0,i.useCallback)(()=>this._getSessionFromTokenStore(b),[b]);return i.default.useSyncExternalStore(c,d,d)}async _signInToAccountWithTokens(a){if(!("accessToken"in a)||!("refreshToken"in a))throw new h.HexclaveAssertionError("Invalid tokens object; can't sign in with this",{tokens:a});let b=this._getOrCreateTokenStore(await this._createCookieHelper());b.set(a);let c=this._getSessionFromTokenStore(b);c.updateAccessToken(a),(0,g.runAsynchronously)(this._currentUserCache.getOrWait([c],"write-only"))}_getTokenStoreInitForFreshTokens(a){if(null!=a.accessToken)return{accessToken:a.accessToken,refreshToken:a.refreshToken}}_hasPersistentTokenStore(a){return(void 0!==a?a:this._tokenStoreInit)!==null}_ensurePersistentTokenStore(a){if(!this._hasPersistentTokenStore(a))throw Error("Cannot call this function on a Stack app without a persistent token store. Make sure the tokenStore option on the constructor is set to a non-null value when initializing Stack.\n\nStack uses token stores to access access tokens of the current user. For example, on web frontends it is commonly the string value 'cookies' for cookie storage.")}_isInternalProject(){return"internal"===this.projectId}_ensureInternalProject(){if(!this._isInternalProject())throw Error("Cannot call this function on a Stack app with a project ID other than 'internal'.")}_clientProjectFromCrud(a){return{id:a.id,displayName:a.display_name,config:{signUpEnabled:a.config.sign_up_enabled,credentialEnabled:a.config.credential_enabled,magicLinkEnabled:a.config.magic_link_enabled,passkeyEnabled:a.config.passkey_enabled,clientTeamCreationEnabled:a.config.client_team_creation_enabled,clientUserDeletionEnabled:a.config.client_user_deletion_enabled,allowTeamApiKeys:a.config.allow_team_api_keys,allowUserApiKeys:a.config.allow_user_api_keys,oauthProviders:a.config.enabled_oauth_providers.map(a=>({id:a.id}))}}}_clientPermissionFromCrud(a){return{id:a.id}}_clientTeamUserFromCrud(a){return{id:a.user_id,teamProfile:{displayName:a.display_name,profileImageUrl:a.profile_image_url}}}_clientSentTeamInvitationFromCrud(a,b){return{id:b.id,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),revoke:async()=>{await this._interface.revokeTeamInvitation(b.id,b.team_id,a),await this._teamInvitationsCache.refresh([a,b.team_id])}}}_clientReceivedTeamInvitationFromCrud(a,b){let c=this;return{id:b.id,teamId:b.team_id,teamDisplayName:b.team_display_name,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),accept:async()=>{await c._interface.acceptTeamInvitationById(b.id,a),await Promise.all([c._currentUserTeamInvitationsCache.refresh([a]),c._currentUserTeamsCache.refresh([a]),c._teamInvitationsCache.refresh([a,b.team_id])])}}}_baseApiKeyFromCrud(a){return{id:a.id,description:a.description,expiresAt:a.expires_at_millis?new Date(a.expires_at_millis):void 0,manuallyRevokedAt:a.manually_revoked_at_millis?new Date(a.manually_revoked_at_millis):null,createdAt:new Date(a.created_at_millis),..."team"===a.type?{type:"team",teamId:a.team_id}:{type:"user",userId:a.user_id},value:"string"==typeof a.value?a.value:{lastFour:a.value.last_four},isValid:function(){return null===this.whyInvalid()},whyInvalid:function(){return this.manuallyRevokedAt?"manually-revoked":this.expiresAt&&this.expiresAt<new Date?"expired":null}}}_clientApiKeyFromCrud(a,b){return{...this._baseApiKeyFromCrud(b),async revoke(){await this.update({revoked:!0})},update:async c=>{await this._interface.updateProjectApiKey("team"===b.type?{team_id:b.team_id}:{user_id:b.user_id},b.id,c,a,"client"),"team"===b.type?await this._teamApiKeysCache.refresh([a,b.team_id]):await this._userApiKeysCache.refresh([a])}}}_clientTeamFromCrud(a,b){let c=this;return{id:a.id,displayName:a.display_name,profileImageUrl:a.profile_image_url,clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,...this._createCustomer(a.id,"team",b),async inviteUser(d){await c._interface.sendTeamInvitation({teamId:a.id,email:d.email,session:b,callbackUrl:d.callbackUrl??D(c._getUrls().teamInvitation,"callbackUrl")}),await c._teamInvitationsCache.refresh([b,a.id])},listUsers:async()=>m.Result.orThrow(await c._teamMemberProfilesCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientTeamUserFromCrud(a)),useUsers:()=>(0,n.useAsyncCache)(c._teamMemberProfilesCache,[b,a.id],"team.useUsers()").map(a=>c._clientTeamUserFromCrud(a)),listInvitations:async()=>m.Result.orThrow(await c._teamInvitationsCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientSentTeamInvitationFromCrud(b,a)),useInvitations:()=>(0,n.useAsyncCache)(c._teamInvitationsCache,[b,a.id],"team.useInvitations()").map(a=>c._clientSentTeamInvitationFromCrud(b,a)),async update(d){await c._interface.updateTeam({data:{display_name:d.displayName,profile_image_url:d.profileImageUrl,client_metadata:d.clientMetadata},teamId:a.id},b),await c._currentUserTeamsCache.refresh([b])},async delete(){await c._interface.deleteTeam(a.id,b),await c._currentUserTeamsCache.refresh([b])},useApiKeys:()=>(0,n.useAsyncCache)(c._teamApiKeysCache,[b,a.id],"team.useApiKeys()").map(a=>c._clientApiKeyFromCrud(b,a)),listApiKeys:async()=>m.Result.orThrow(await c._teamApiKeysCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientApiKeyFromCrud(b,a)),async createApiKey(d){let e=await c._interface.createProjectApiKey(await F("team",a.id,d),b,"client");return await c._teamApiKeysCache.refresh([b,a.id]),c._clientApiKeyFromCrud(b,e)}}}_clientContactChannelFromCrud(a,b){let c=this;return{id:a.id,value:a.value,type:a.type,isVerified:a.is_verified,isPrimary:a.is_primary,usedForAuth:a.used_for_auth,async sendVerificationEmail(d){await c._interface.sendCurrentUserContactChannelVerificationEmail(a.id,d?.callbackUrl||D(c._getUrls().emailVerification,"callbackUrl"),b)},async update(d){await c._interface.updateClientContactChannel(a.id,{value:d.value,used_for_auth:d.usedForAuth,is_primary:d.isPrimary},b),await c._clientContactChannelsCache.refresh([b])},async delete(){await c._interface.deleteClientContactChannel(a.id,b),await c._clientContactChannelsCache.refresh([b])}}}_clientNotificationCategoryFromCrud(a,b){let c=this;return{id:a.notification_category_id,name:a.notification_category_name,enabled:a.enabled,canDisable:a.can_disable,async setEnabled(d){await c._interface.setNotificationsEnabled(a.notification_category_id,d,b),await c._notificationCategoriesCache.refresh([b])}}}_clientOAuthProviderFromCrud(a,b){let c=this;return{id:a.id,type:a.type,userId:a.user_id,email:a.email,allowSignIn:a.allow_sign_in,allowConnectedAccounts:a.allow_connected_accounts,async update(d){try{return await c._interface.updateOAuthProvider(a.user_id,a.id,{allow_sign_in:d.allowSignIn,allow_connected_accounts:d.allowConnectedAccounts},b),await Promise.all([c._currentUserOAuthProvidersCache.refresh([b]),c._currentUserConnectedAccountsCache.refresh([b])]),m.Result.ok(void 0)}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}},async delete(){await c._interface.deleteOAuthProvider(a.user_id,a.id,b),await Promise.all([c._currentUserOAuthProvidersCache.refresh([b]),c._currentUserConnectedAccountsCache.refresh([b])])}}}_clientItemFromCrud(a){return{displayName:a.display_name,quantity:a.quantity,nonNegativeQuantity:Math.max(0,a.quantity)}}_customerProductsFromResponse(a){return Object.assign(a.items.map(a=>({id:a.id,quantity:a.quantity,displayName:a.product.display_name,customerType:a.product.customer_type,isServerOnly:a.product.server_only,stackable:a.product.stackable,type:a.type,subscription:a.subscription?{subscriptionId:a.subscription.subscription_id,currentPeriodEnd:a.subscription.current_period_end?new Date(a.subscription.current_period_end):null,cancelAtPeriodEnd:a.subscription.cancel_at_period_end,isCancelable:a.subscription.is_cancelable}:null,switchOptions:a.switch_options?.map(a=>({productId:a.product_id,displayName:a.product.display_name,prices:a.product.prices}))})),{nextCursor:a.pagination.next_cursor??null})}_customerInvoicesFromResponse(a){return Object.assign(a.items.map(a=>({status:a.status,amountTotal:a.amount_total,hostedInvoiceUrl:a.hosted_invoice_url,createdAt:new Date(a.created_at_millis)})),{nextCursor:a.pagination.next_cursor??null})}_customerBillingFromResponse(a){return{hasCustomer:a.has_customer,defaultPaymentMethod:a.default_payment_method}}_createAuth(a){let b=this;return{_internalSession:a,currentSession:{async getTokens(){let b=await a.getOrFetchLikelyValidTokens(2e4,75e3);return{accessToken:b?.accessToken.token??null,refreshToken:b?.refreshToken?.token??null}},useTokens(){let b=(0,i.useCallback)(b=>{let{unsubscribe:c}=a.onInvalidate(b),{unsubscribe:d}=a.onAccessTokenChange(b);return()=>{c(),d()}},[a]),c=(0,i.useCallback)(()=>a.isKnownToBeInvalid()?null:a.getAccessTokenIfNotExpiredYet(2e4,75e3)?.token??null,[a]),d=i.default.useSyncExternalStore(b,c,c);return null!==d||a.isKnownToBeInvalid()||(d=(0,l.use)(a.getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??null),{accessToken:d,refreshToken:a.getRefreshToken()?.token??null}}},async getAccessToken(){return(await this.currentSession.getTokens()).accessToken},useAccessToken(){return this.currentSession.useTokens().accessToken},async getRefreshToken(){return(await this.currentSession.getTokens()).refreshToken},useRefreshToken(){return this.currentSession.useTokens().refreshToken},async getAuthorizationHeader(){return bi(await this.getAuthJson())},useAuthorizationHeader(){return bi(this.useAuthJson())},async getAuthHeaders(){return{"x-stack-auth":JSON.stringify(await this.getAuthJson())}},useAuthHeaders(){return{"x-stack-auth":JSON.stringify(this.useAuthJson())}},async getAuthJson(){return await this.currentSession.getTokens()},useAuthJson(){return this.currentSession.useTokens()},signOut:c=>b._signOut(a,c)}}_editableTeamProfileFromCrud(a,b){let c=this;return{displayName:a.display_name,profileImageUrl:a.profile_image_url,async update(d){await c._interface.updateTeamMemberProfile({teamId:a.team_id,userId:a.user_id,profile:{display_name:d.displayName,profile_image_url:d.profileImageUrl}},b),await c._currentUserTeamProfileCache.refresh([b,a.team_id])}}}_createBaseUser(a){return{id:a.id,displayName:a.display_name,primaryEmail:a.primary_email,primaryEmailVerified:a.primary_email_verified,profileImageUrl:a.profile_image_url,signedUpAt:new Date(a.signed_up_at_millis),clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,hasPassword:a.has_password,emailAuthEnabled:a.auth_with_email,otpAuthEnabled:a.otp_auth_enabled,oauthProviders:a.oauth_providers,passkeyAuthEnabled:a.passkey_auth_enabled,isMultiFactorRequired:a.requires_totp_mfa,isAnonymous:a.is_anonymous,isRestricted:a.is_restricted,restrictedReason:a.restricted_reason,toClientJson:()=>a}}_createUserExtraFromCurrent(a,b){let c=this;return{getActiveSessions:async()=>(await c._interface.listSessions(b)).items.map(a=>c._clientSessionFromCrud(a)),async revokeSession(a){await c._interface.deleteSession(a,b)},setDisplayName(a){return this.update({displayName:a})},setClientMetadata(a){return this.update({clientMetadata:a})},async setSelectedTeam(a){await this.update({selectedTeamId:"string"==typeof a?a:a?.id??null})},getConnectedAccount:async function a(a,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof a&&"provider"in a&&"providerAccountId"in a){let{provider:d,providerAccountId:e}=a,f=m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")).find(a=>a.provider===d&&a.providerAccountId===e);return f||null}return m.Result.orThrow(await c._currentUserOAuthConnectionCache.getOrWait([b,a,e,d?.or==="redirect"],"write-only"))},useConnectedAccount:function(a,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof a&&"provider"in a&&"providerAccountId"in a){let{provider:d,providerAccountId:e}=a;return(0,n.useAsyncCache)(c._currentUserConnectedAccountsCache,[b],"user.useConnectedAccount()").find(a=>a.provider===d&&a.providerAccountId===e)??null}return(0,n.useAsyncCache)(c._currentUserOAuthConnectionCache,[b,a,e,d?.or==="redirect"],"user.useConnectedAccount()")},listConnectedAccounts:async()=>m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")),useConnectedAccounts:()=>(0,n.useAsyncCache)(c._currentUserConnectedAccountsCache,[b],"user.useConnectedAccounts()"),async linkConnectedAccount(a,d){let e=d?.scopes?.join(" ")??"",f=await aH(c._interface,{provider:a,redirectUrl:c._getOAuthCallbackRedirectUri(),errorRedirectUrl:c._getUrls().error,providerScope:(0,K.mergeScopeStrings)(e,(c._oauthScopesOnSignIn[a]??[]).join(" "))},b);return await c._redirectTo({url:f}),await (0,g.neverResolve)()},async getOrLinkConnectedAccount(a,d){for(let e of m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")).filter(b=>b.provider===a))if("ok"===(await e.getAccessToken({scopes:d?.scopes})).status)return e;return await this.linkConnectedAccount(a,d),await (0,g.neverResolve)()},useOrLinkConnectedAccount(a,d){let e=d?.scopes?.join(" ")??"";return(0,n.useAsyncCache)(c._currentUserValidConnectedAccountForProviderCache,[b,a,e],"user.useOrLinkConnectedAccount()")},async getTeam(a){return(await this.listTeams()).find(b=>b.id===a)??null},useTeam(a){let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},listTeams:async()=>m.Result.orThrow(await c._currentUserTeamsCache.getOrWait([b],"write-only")).map(a=>c._clientTeamFromCrud(a,b)),useTeams(){let a=(0,n.useAsyncCache)(c._currentUserTeamsCache,[b],"user.useTeams()");return(0,i.useMemo)(()=>a.map(a=>c._clientTeamFromCrud(a,b)),[a])},async createTeam(a){let d=await c._interface.createClientTeam({display_name:a.displayName,profile_image_url:a.profileImageUrl,creator_user_id:"me"},b);return await c._currentUserTeamsCache.refresh([b]),await this.update({selectedTeamId:d.id}),c._clientTeamFromCrud(d,b)},async leaveTeam(a){await c._interface.leaveTeam(a.id,b)},listTeamInvitations:async()=>m.Result.orThrow(await c._currentUserTeamInvitationsCache.getOrWait([b],"write-only")).map(a=>c._clientReceivedTeamInvitationFromCrud(b,a)),useTeamInvitations(){let a=(0,n.useAsyncCache)(c._currentUserTeamInvitationsCache,[b],"user.useTeamInvitations()");return(0,i.useMemo)(()=>a.map(a=>c._clientReceivedTeamInvitationFromCrud(b,a)),[a])},async listPermissions(a,d){if(a&&"id"in a){let e=d?.recursive??!0;return m.Result.orThrow(await c._currentUserPermissionsCache.getOrWait([b,a.id,e],"write-only")).map(a=>c._clientPermissionFromCrud(a))}{let d=a?.recursive??!0;return m.Result.orThrow(await c._currentUserProjectPermissionsCache.getOrWait([b,d],"write-only")).map(a=>c._clientPermissionFromCrud(a))}},usePermissions(a,d){if(a&&"id"in a){let e=d?.recursive??!0,f=(0,n.useAsyncCache)(c._currentUserPermissionsCache,[b,a.id,e],"user.usePermissions()");return(0,i.useMemo)(()=>f.map(a=>c._clientPermissionFromCrud(a)),[f])}{let d=a?.recursive??!0,e=(0,n.useAsyncCache)(c._currentUserProjectPermissionsCache,[b,d],"user.usePermissions()");return(0,i.useMemo)(()=>e.map(a=>c._clientPermissionFromCrud(a)),[e])}},usePermission(a,b){if(a&&"string"!=typeof a){let c=this.usePermissions(a);return(0,i.useMemo)(()=>c.find(a=>a.id===b)??null,[c,b])}{let b=this.usePermissions();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}},async getPermission(a,b){return a&&"string"!=typeof a?(await this.listPermissions(a)).find(a=>a.id===b)??null:(await this.listPermissions()).find(b=>b.id===a)??null},async hasPermission(a,b){return a&&"string"!=typeof a?await this.getPermission(a,b)!==null:await this.getPermission(a)!==null},update:async a=>await c._updateClientUser(a,b),async sendVerificationEmail(d){if(!a.primary_email)throw new h.HexclaveAssertionError("User does not have a primary email");return await c._interface.sendVerificationEmail(a.primary_email,d?.callbackUrl??D(c._getUrls().emailVerification,"callbackUrl"),b)},async updatePassword(a){let d=await c._interface.updatePassword(a,b);return await c._currentUserCache.refresh([b]),d},async setPassword(a){let d=await c._interface.setPassword(a,b);return await c._currentUserCache.refresh([b]),d},selectedTeam:a.selected_team&&this._clientTeamFromCrud(a.selected_team,b),async getTeamProfile(a){let d=m.Result.orThrow(await c._currentUserTeamProfileCache.getOrWait([b,a.id],"write-only"));return c._editableTeamProfileFromCrud(d,b)},useTeamProfile(a){let d=(0,n.useAsyncCache)(c._currentUserTeamProfileCache,[b,a.id],"user.useTeamProfile()");return c._editableTeamProfileFromCrud(d,b)},async delete(){await c._interface.deleteCurrentUser(b),b.markInvalid()},listContactChannels:async()=>m.Result.orThrow(await c._clientContactChannelsCache.getOrWait([b],"write-only")).map(a=>c._clientContactChannelFromCrud(a,b)),useContactChannels:()=>(0,n.useAsyncCache)(c._clientContactChannelsCache,[b],"user.useContactChannels()").map(a=>c._clientContactChannelFromCrud(a,b)),async createContactChannel(a){let d=await c._interface.createClientContactChannel({value:a.value,type:a.type,used_for_auth:a.usedForAuth,is_primary:a.isPrimary,user_id:"me"},b);return await c._clientContactChannelsCache.refresh([b]),c._clientContactChannelFromCrud(d,b)},useNotificationCategories:()=>(0,n.useAsyncCache)(c._notificationCategoriesCache,[b],"user.useNotificationCategories()").map(a=>c._clientNotificationCategoryFromCrud(a,b)),listNotificationCategories:async()=>m.Result.orThrow(await c._notificationCategoriesCache.getOrWait([b],"write-only")).map(a=>c._clientNotificationCategoryFromCrud(a,b)),useApiKeys:()=>(0,n.useAsyncCache)(c._userApiKeysCache,[b],"user.useApiKeys()").map(a=>c._clientApiKeyFromCrud(b,a)),listApiKeys:async()=>(await c._interface.listProjectApiKeys({user_id:"me"},b,"client")).map(a=>c._clientApiKeyFromCrud(b,a)),async createApiKey(a){let d=await c._interface.createProjectApiKey(await F("user","me",a),b,"client");return await c._userApiKeysCache.refresh([b]),c._clientApiKeyFromCrud(b,d)},useOAuthProviders:()=>(0,n.useAsyncCache)(c._currentUserOAuthProvidersCache,[b],"user.useOAuthProviders()").map(a=>c._clientOAuthProviderFromCrud(a,b)),listOAuthProviders:async()=>m.Result.orThrow(await c._currentUserOAuthProvidersCache.getOrWait([b],"write-only")).map(a=>c._clientOAuthProviderFromCrud(a,b)),useOAuthProvider(a){let b=this.useOAuthProviders();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async getOAuthProvider(a){return(await this.listOAuthProviders()).find(b=>b.id===a)??null},async registerPasskey(a){let d,e=(await c._getCurrentUrl())?.hostname;if(!e)throw new h.HexclaveAssertionError("hostname must be provided if the Stack App does not have a redirect method");let f=await c._interface.initiatePasskeyRegistration({},b);if("ok"!==f.status)return m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to get initiation options for passkey registration"));let{options_json:g,code:i}=f.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==g.rp.id)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${g.rp.id}`);g.rp.id=e;try{d=await z({optionsJSON:g})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return(0,h.captureError)("passkey-registration-failed",a),m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to start passkey registration due to unknown error"))}let j=await c._interface.registerPasskey({credential:d,code:i},b);return await c._refreshUser(b),j}}}_createInternalUserExtra(a){let b=this;return this._ensureInternalProject(),{createProject:c=>b._createProject(a,c),async transferProject(c,d){await b._interface.transferProject(a,c,d),await b._refreshProject()},listOwnedProjects:()=>b._listOwnedProjects(a),useOwnedProjects:()=>b._useOwnedProjects(a)}}_createCustomer(a,b,c){let d=this,e=c??d._interface.createSession({refreshToken:null}),f="user"===b?{userId:a}:{teamId:a};return{async getBilling(){let c=m.Result.orThrow(await d._customerBillingCache.getOrWait([e,b,a],"write-only"));return d._customerBillingFromResponse(c)},useBilling(){let c=(0,n.useAsyncCache)(d._customerBillingCache,[e,b,a],"customer.useBilling()");return d._customerBillingFromResponse(c)},async createPaymentMethodSetupIntent(){let c=await d._interface.createCustomerPaymentMethodSetupIntent(b,a,e);return{clientSecret:c.client_secret,stripeAccountId:c.stripe_account_id}},async setDefaultPaymentMethodFromSetupIntent(c){let f=await d._interface.setDefaultCustomerPaymentMethodFromSetupIntent(b,a,c,e);return await d._customerBillingCache.refresh([e,b,a]),f.default_payment_method},getItem:async a=>await d.getItem({itemId:a,...f}),useItem:a=>d.useItem({itemId:a,...f}),listProducts:async a=>await d.listProducts({...a,...f}),useProducts:a=>d.useProducts({...a,...f}),listInvoices:async a=>await d.listInvoices({...a,...f}),useInvoices:a=>d.useInvoices({...a,...f}),createCheckoutUrl:async c=>await d._interface.createCheckoutUrl(b,a,c.productId,e,c.returnUrl,"client"),async switchSubscription(c){await d._interface.switchSubscription({customer_type:b,customer_id:a,from_product_id:c.fromProductId,to_product_id:c.toProductId,price_id:c.priceId,quantity:c.quantity},e),await d._customerBillingCache.refresh([e,b,a]),"user"===b?await d._userProductsCache.invalidateWhere(([b,c])=>b===e&&c===a):await d._teamProductsCache.invalidateWhere(([b,c])=>b===e&&c===a)}}}async getItem(a){let b,c=await this._getSession();return b="userId"in a?m.Result.orThrow(await this._userItemCache.getOrWait([c,a.userId,a.itemId],"write-only")):"teamId"in a?m.Result.orThrow(await this._teamItemCache.getOrWait([c,a.teamId,a.itemId],"write-only")):m.Result.orThrow(await this._customItemCache.getOrWait([c,a.customCustomerId,a.itemId],"write-only")),this._clientItemFromCrud(b)}useItem(a){let b=this._useSession(),[c,d]="userId"in a?[this._userItemCache,a.userId]:"teamId"in a?[this._teamItemCache,a.teamId]:[this._customItemCache,a.customCustomerId],e=(0,n.useAsyncCache)(c,[b,d,a.itemId],"app.useItem()");return this._clientItemFromCrud(e)}async listProducts(a){let b=(await this.getUser())?._internalSession??await this._getSession();if("userId"in a){let c=m.Result.orThrow(await this._userProductsCache.getOrWait([b,a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}if("teamId"in a){let c=m.Result.orThrow(await this._teamProductsCache.getOrWait([b,a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}let c=m.Result.orThrow(await this._customProductsCache.getOrWait([b,a.customCustomerId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}async listInvoices(a){let b=await this._getSession();if("userId"in a){let c=m.Result.orThrow(await this._userInvoicesCache.getOrWait([b,a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerInvoicesFromResponse(c)}let c=m.Result.orThrow(await this._teamInvoicesCache.getOrWait([b,a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerInvoicesFromResponse(c)}async cancelSubscription(a){let b=await this._getSession(),c=await this.getUser();if(!c)throw new k.KnownErrors.UserAuthenticationRequired;let d="teamId"in a?"team":"user",e="teamId"in a?a.teamId:c.id;await this._interface.cancelSubscription({customer_type:d,customer_id:e,product_id:a.productId,subscription_id:a.subscriptionId},b),"user"===d?await this._userProductsCache.invalidateWhere(([a,c])=>a===b&&c===e):await this._teamProductsCache.invalidateWhere(([a,c])=>a===b&&c===e)}useProducts(a){let b=this._useSession(),c=(0,n.useAsyncCache)("userId"in a?this._userProductsCache:"teamId"in a?this._teamProductsCache:this._customProductsCache,[b,"userId"in a?a.userId:"teamId"in a?a.teamId:a.customCustomerId,a.cursor??null,a.limit??null],"clientApp.useProducts()");return this._customerProductsFromResponse(c)}useInvoices(a){let b=this._useSession(),c=(0,n.useAsyncCache)("userId"in a?this._userInvoicesCache:this._teamInvoicesCache,[b,"userId"in a?a.userId:a.teamId,a.cursor??null,a.limit??null],"clientApp.useInvoices()");return this._customerInvoicesFromResponse(c)}_currentUserFromCrud(a,b){return J({...this._createBaseUser(a),...this._createAuth(b),...this._createUserExtraFromCurrent(a,b),...this._isInternalProject()?this._createInternalUserExtra(b):{},...this._createCustomer(a.id,"user",b)})}_clientSessionFromCrud(a){return{id:a.id,userId:a.user_id,createdAt:new Date(a.created_at),isImpersonation:a.is_impersonation,lastUsedAt:a.last_used_at?new Date(a.last_used_at):void 0,isCurrentSession:a.is_current_session??!1,geoInfo:a.last_used_at_end_user_ip_info}}_getOwnedAdminApp(a,c){return this._ownedAdminApps.has([c,a])||this._ownedAdminApps.set([c,a],new b.LazyStackAdminAppImpl.value({baseUrl:this._interface.options.getBaseUrl(),projectId:a,tokenStore:null,projectOwnerSession:c,noAutomaticPrefetch:!0})),this._ownedAdminApps.get([c,a])}get projectId(){return this._interface.projectId}get version(){return n.clientVersion}_getBotChallengeSiteKeys(){if(!(0,P.isBrowserLike)())return null;let a=aI.envVars.HEXCLAVE_BOT_CHALLENGE_SITE_KEY;return a?{visibleSiteKey:a,invisibleSiteKey:aI.envVars.HEXCLAVE_BOT_CHALLENGE_INVISIBLE_SITE_KEY??a}:(this._botChallengeSiteKeysWarned||(this._botChallengeSiteKeysWarned=!0,console.warn("[stack-auth] HEXCLAVE_BOT_CHALLENGE_SITE_KEY is not set — bot challenge fraud protection is disabled. Set the env variable to enable it.")),null)}_getBotChallengeFlowFailure(a){return a instanceof X?{type:"cancelled",knownError:new k.KnownErrors.BotChallengeFailed("Bot challenge cancelled by user")}:a instanceof Y?{type:"failed",knownError:new k.KnownErrors.BotChallengeFailed(a.message)}:null}_normalizeBotChallengeResult(a){return"ok"===a.status?a:k.KnownErrors.BotChallengeRequired.isInstance(a.error)?((0,h.captureError)("bot-challenge-unexpected-after-flow",a.error),m.Result.error(new k.KnownErrors.BotChallengeFailed("Unexpected bot challenge after flow completion"))):m.Result.error(a.error)}_toInterfaceBotChallengeInput(a){return a.unavailable?{phase:"visible"}:{token:a.token,phase:a.phase}}async _executeResultWithBotChallengeFlow(a){let b,c=this._getBotChallengeSiteKeys();try{b=c?await Z({...c,action:a.action,execute:a.execute,isChallengeRequired:a=>"error"===a.status&&k.KnownErrors.BotChallengeRequired.isInstance(a.error)}):await a.execute({})}catch(b){let a=this._getBotChallengeFlowFailure(b);if(a)return m.Result.error(a.knownError);throw b}return this._normalizeBotChallengeResult(b)}async _isTrusted(a){if((0,M.isRelative)(a))return!0;let b=(0,M.createUrlIfValid)(a);if(null==b)return!1;if((0,aJ.isHostedHandlerUrlForProject)({url:a,projectId:this.projectId}))return!0;let c=await this._getTrustedRedirectConfig();return(0,Q.validateRedirectUrl)(b,{allowLocalhost:c.allowLocalhost,trustedDomains:c.trustedDomains})}get urls(){var a;let b;return b=new Set(Object.entries((a={urls:this._getUrls(),projectId:this.projectId}).urls).filter(([,b])=>(0,aJ.isHostedHandlerUrlForProject)({url:b,projectId:a.projectId})).map(([a])=>a)),new Proxy(a.urls,{get(a,c,d){if("string"==typeof c&&b.has(c))throw Error(`app.urls.${c} cannot be used when this app is configured to use hosted components. \`app.urls\` is static and does not include the runtime redirect-back, cross-domain auth, or sign-out state required by hosted components. `+("handler"===c?"Use a page-specific redirect helper such as app.redirectToSignIn() instead.":`Use app.redirectTo${c.slice(0,1).toUpperCase()}${c.slice(1)}() instead.`));return Reflect.get(a,c,d)}})}_getUrls(){return(0,n.getUrls)(this._urlOptions,{projectId:this.projectId})}_prefetchCrossDomainHandoffParamsIfNeeded(){let a="cookie"===this._tokenStoreInit||"nextjs-cookie"===this._tokenStoreInit;(0,P.isBrowserLike)()&&a&&!this._isPrefetchingCrossDomainHandoffParams&&null==this._getFreshPrefetchedCrossDomainHandoffParams()&&(this._isPrefetchingCrossDomainHandoffParams=!0,(0,g.runAsynchronously)(async()=>{try{if(!(0,P.isBrowserLike)())return;let{state:a,codeChallenge:b}=await aG();this._prefetchedCrossDomainHandoffParams={state:a,codeChallenge:b},this._prefetchedCrossDomainHandoffParamsFetchedAt=performance.now()}finally{this._isPrefetchingCrossDomainHandoffParams=!1}}))}_getCrossDomainHandoffParamsForUrlsGetter(a){let b=aZ(a);if(null!=b)return b;let c=this._getFreshPrefetchedCrossDomainHandoffParams();return null!=c?c:(this._prefetchCrossDomainHandoffParamsIfNeeded(),null)}async _getCrossDomainHandoffParamsForRedirect(a){let b=aZ(a);if(null!=b)return b;let c=this._getFreshPrefetchedCrossDomainHandoffParams();if(null!=c)return c;let{state:d,codeChallenge:e}=await aG();return this._prefetchedCrossDomainHandoffParams={state:d,codeChallenge:e},this._prefetchedCrossDomainHandoffParamsFetchedAt=performance.now(),{state:d,codeChallenge:e}}_getLocalOAuthCallbackHandlerUrl(){return this._isOAuthCallbackUrlHosted()?this._getOAuthCallbackRedirectUri():(0,aJ.resolveHandlerUrls)({urls:{...this._urlOptions,default:{type:"handler-component"},oauthCallback:{type:"handler-component"}},projectId:this.projectId}).oauthCallback}async _createCrossDomainAuthRedirectUrl(a){let b=await this._getSession(a.overrideTokenStoreInit,{awaitPendingAuthResolutions:a.awaitPendingAuthResolutions});await b.fetchNewTokens();let c=await this._interface.sendClientRequest("/auth/oauth/cross-domain/authorize",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({redirect_uri:a.redirectUri,state:a.state,code_challenge:a.codeChallenge,code_challenge_method:"S256",after_callback_redirect_url:a.afterCallbackRedirectUrl})},b);if(!c.ok){let a=await c.text();throw new h.HexclaveAssertionError(`Cross-domain authorization endpoint failed: ${c.status} ${a}`)}let d=await c.json();if(!("redirect_url"in d)||"string"!=typeof d.redirect_url)throw new h.HexclaveAssertionError("Cross-domain authorization endpoint returned an invalid payload",{result:d});return d.redirect_url}_getFreshPrefetchedCrossDomainHandoffParams(){return null==this._prefetchedCrossDomainHandoffParams?null:performance.now()-this._prefetchedCrossDomainHandoffParamsFetchedAt>33e5?(this._prefetchedCrossDomainHandoffParams=null,this._prefetchedCrossDomainHandoffParamsFetchedAt=0,null):this._prefetchedCrossDomainHandoffParams}async _getCurrentUrl(){return"none"===this._redirectMethod?null:new URL(window.location.href)}async _redirectTo(a){"none"!==this._redirectMethod&&(bd&&"nextjs"===this._redirectMethod?be.redirect(a.url.toString(),a.replace?be.RedirectType.replace:be.RedirectType.push):"object"==typeof this._redirectMethod&&this._redirectMethod.navigate?this._redirectMethod.navigate(a.url.toString()):a.replace?window.location.replace(a.url):window.location.assign(a.url),await (0,g.wait)(2e3))}useNavigate(){if("object"==typeof this._redirectMethod)return this._redirectMethod.useNavigate();if("window"===this._redirectMethod)return a=>window.location.assign(a);if("nextjs"!==this._redirectMethod)return a=>{};{let a=be.useRouter();return b=>a.push(b)}}async _redirectIfTrusted(a,b){if(!await this._isTrusted(a))throw Error(`Redirect URL ${a} is not trusted; should be relative.`);return await this._redirectTo({url:a,...b})}async _redirectToHandler(a,b,c){let d=(0,n.getUrls)(this._urlOptions,{projectId:this.projectId})[a];if(!d)throw Error(`No URL for handler name ${a}`);let e=await a1({handlerName:a,rawHandlerUrl:d,noRedirectBack:b?.noRedirectBack===!0,currentUrl:null,localOAuthCallbackUrl:this._getLocalOAuthCallbackHandlerUrl(),getCrossDomainHandoffParams:async a=>await this._getCrossDomainHandoffParamsForRedirect(a)});if("cross-domain-authorize"===e.type){let a=await this._createCrossDomainAuthRedirectUrl({redirectUri:e.redirectUri,state:e.state,codeChallenge:e.codeChallenge,afterCallbackRedirectUrl:e.afterCallbackRedirectUrl,awaitPendingAuthResolutions:c?.awaitPendingAuthResolutions,overrideTokenStoreInit:c?.overrideTokenStoreInit});await this._redirectTo({url:a,...b});return}let f=e.url;await this._redirectIfTrusted(f,b)}_redirectToHandlerDuringRender(a,b){return!1}async redirectToSignIn(a){return await this._redirectToHandler("signIn",a)}async redirectToSignUp(a){return await this._redirectToHandler("signUp",a)}async redirectToSignOut(a){let b=this._urlOptions.signOut??this._urlOptions.default;return"string"!=typeof b&&b?.type==="hosted"?await this.signOut():await this._redirectToHandler("signOut",a)}async redirectToEmailVerification(a){return await this._redirectToHandler("emailVerification",a)}async redirectToPasswordReset(a){return await this._redirectToHandler("passwordReset",a)}async redirectToForgotPassword(a){return await this._redirectToHandler("forgotPassword",a)}async redirectToHome(a){return await this._redirectToHandler("home",a)}async redirectToOAuthCallback(a){return await this._redirectToHandler("oauthCallback",a)}async redirectToMagicLinkCallback(a){return await this._redirectToHandler("magicLinkCallback",a)}async redirectToAfterSignIn(a){return await this._redirectToHandler("afterSignIn",a)}async redirectToAfterSignUp(a){return await this._redirectToHandler("afterSignUp",a)}async redirectToOnboarding(a){return await this._redirectToHandler("onboarding",a)}async redirectToAfterSignOut(a){return await this._redirectToHandler("afterSignOut",a)}async redirectToAccountSettings(a){return await this._redirectToHandler("accountSettings",a)}async redirectToError(a){return await this._redirectToHandler("error",a)}async redirectToTeamInvitation(a){return await this._redirectToHandler("teamInvitation",a)}async redirectToCliAuthConfirm(a){return await this._redirectToHandler("cliAuthConfirm",a)}async redirectToMfa(a){return await this._redirectToHandler("mfa",a)}async sendForgotPasswordEmail(a,b){return await this._interface.sendForgotPasswordEmail(a,b?.callbackUrl??D(this.urls.passwordReset,"callbackUrl"))}async sendMagicLinkEmail(a,b){let c=b?.callbackUrl??D(this.urls.magicLinkCallback,"callbackUrl");return await this._executeResultWithBotChallengeFlow({action:"send_magic_link_email",execute:async b=>await this._interface.sendMagicLinkEmail(a,c,this._toInterfaceBotChallengeInput(b))})}async resetPassword(a){return await this._interface.resetPassword(a)}async verifyPasswordResetCode(a){return await this._interface.verifyPasswordResetCode(a)}async verifyTeamInvitationCode(a){return await this._interface.acceptTeamInvitation({type:"check",code:a,session:await this._getSession()})}async acceptTeamInvitation(a){let b=await this._interface.acceptTeamInvitation({type:"use",code:a,session:await this._getSession()});return"ok"===b.status?m.Result.ok(void 0):m.Result.error(b.error)}async getTeamInvitationDetails(a){let b=await this._interface.acceptTeamInvitation({type:"details",code:a,session:await this._getSession()});return"ok"===b.status?m.Result.ok({teamDisplayName:b.data.team_display_name}):m.Result.error(b.error)}async verifyEmail(a){let b=await this._interface.verifyEmail(a);return await this._currentUserCache.refresh([await this._getSession()]),await this._clientContactChannelsCache.refresh([await this._getSession()]),b}async getUser(a){if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=await this._getSession(a?.tokenStore),c=m.Result.orThrow(await this._currentUserCache.getOrWait([b],"write-only")),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":!c?.is_anonymous&&c?.is_restricted?await this.redirectToOnboarding({replace:!0}):await this.redirectToSignIn({replace:!0});break;case"throw":throw Error("User is not signed in but getUser was called with { or: 'throw' }");case"anonymous":{let a=await this._signUpAnonymously();return await this.getUser({tokenStore:a,or:"anonymous-if-exists[deprecated]",includeRestricted:!0})??(0,h.throwErr)("Something went wrong while signing up anonymously")}case void 0:case"anonymous-if-exists[deprecated]":case"return-null":return null}return c&&this._currentUserFromCrud(c,b)}useUser(a){if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=this._useSession(a?.tokenStore),c=(0,n.useAsyncCache)(this._currentUserCache,[b],"clientApp.useUser()"),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":throw!c?.is_anonymous&&c?.is_restricted?this._redirectToHandlerDuringRender("onboarding",{replace:!0})||(0,g.runAsynchronously)(this.redirectToOnboarding({replace:!0})):this._redirectToHandlerDuringRender("signIn",{replace:!0})||(0,g.runAsynchronously)(this.redirectToSignIn({replace:!0})),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case"throw":throw Error("User is not signed in but useUser was called with { or: 'throw' }");case"anonymous":throw(0,g.runAsynchronously)(async()=>{await this._signUpAnonymously()}),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case void 0:case"anonymous-if-exists[deprecated]":case"return-null":c=null}return(0,i.useMemo)(()=>c&&this._currentUserFromCrud(c,b),[c,b,a?.or])}_getTokenPartialUserFromSession(a,b){let c=a.getAccessTokenIfNotExpiredYet(0,null);if(!c)return null;let d=c.payload.is_anonymous;return d&&"anonymous-if-exists"!==b.or?null:{id:c.payload.sub,primaryEmail:c.payload.email,displayName:c.payload.name,primaryEmailVerified:c.payload.email_verified,isAnonymous:d,isMultiFactorRequired:c.payload.requires_totp_mfa,isRestricted:c.payload.is_restricted,restrictedReason:c.payload.restricted_reason}}async _getPartialUserFromConvex(a){let b=await a.auth.getUserIdentity();return b?{id:b.subject,displayName:b.name??null,primaryEmail:b.email??null,primaryEmailVerified:b.email_verified,isAnonymous:b.is_anonymous,isMultiFactorRequired:b.requires_totp_mfa,isRestricted:b.is_restricted,restrictedReason:b.restricted_reason??null}:null}async getPartialUser(a){switch(a.from){case"token":{this._ensurePersistentTokenStore(a.tokenStore??this._tokenStoreInit);let b=await this._getSession(a.tokenStore);return this._getTokenPartialUserFromSession(b,a)}case"convex":return await this._getPartialUserFromConvex(a.ctx);default:throw Error(`Invalid 'from' option: ${a.from}`)}}usePartialUser(a){switch(a.from){case"token":{this._ensurePersistentTokenStore(a.tokenStore??this._tokenStoreInit);let b=this._useSession(a.tokenStore);return this._getTokenPartialUserFromSession(b,a)}case"convex":return(0,n.useAsyncCache)(this._convexPartialUserCache,[a.ctx],"clientApp.usePartialUser()");default:throw Error(`Invalid 'from' option: ${a.from}`)}}getConvexClientAuth(a){return async b=>{let c=await this._getSession(a.tokenStore??this._tokenStoreInit);return b.forceRefreshToken?(await c.fetchNewTokens())?.accessToken.token??null:(await c.getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??null}}async getConvexHttpClientAuth(a){return(await (await this._getSession(a.tokenStore)).getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??""}async _updateClientUser(a,b){let c=await this._interface.updateClientUser({display_name:a.displayName,client_metadata:a.clientMetadata,selected_team_id:a.selectedTeamId,totp_secret_base64:null!=a.totpMultiFactorSecret?(0,I.encodeBase64)(a.totpMultiFactorSecret):a.totpMultiFactorSecret,profile_image_url:a.profileImageUrl,otp_auth_enabled:a.otpAuthEnabled,passkey_auth_enabled:a.passkeyAuthEnabled,primary_email:a.primaryEmail},b);return await this._refreshUser(b),c}async signInWithOAuth(a,b){throw Error("signInWithOAuth can currently only be called in a browser environment")}async _experimentalMfa(a,b){throw await this.redirectToMfa(),new h.HexclaveAssertionError("we should have redirected in redirectToMfa()")}async _catchMfaRequiredError(a){try{return await a()}catch(a){if(k.KnownErrors.MultiFactorAuthenticationRequired.isInstance(a))return m.Result.ok(await this._experimentalMfa(a,await this._getSession(void 0,{awaitPendingAuthResolutions:!1})));throw a}}async signInWithCredential(a){let b;this._ensurePersistentTokenStore();let c=await this._getSession();try{b=await this._catchMfaRequiredError(async()=>await this._interface.signInWithCredential(a.email,a.password,c))}catch(a){if(k.KnownErrors.InvalidTotpCode.isInstance(a))return m.Result.error(a);throw a}return"ok"===b.status?(await this._signInToAccountWithTokens(b.data),a.noRedirect||await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(b.data)}),m.Result.ok(void 0)):m.Result.error(b.error)}async signUpWithCredential(a){let b;if(a.noVerificationCallback&&a.verificationCallbackUrl)throw new h.HexclaveAssertionError("verificationCallbackUrl is not allowed when noVerificationCallback is true");this._ensurePersistentTokenStore();let c=await this._getSession(),d=a.noVerificationCallback?void 0:a.verificationCallbackUrl??D(this.urls.emailVerification,"verificationCallbackUrl"),e=async b=>{let e=await this._interface.signUpWithCredential(a.email,a.password,d,c,this._toInterfaceBotChallengeInput(b));return"error"===e.status&&e.error instanceof k.KnownErrors.RedirectUrlNotWhitelisted&&void 0!==d&&!a.verificationCallbackUrl&&((0,h.captureError)("signup-verification-url-not-whitelisted",new h.HexclaveAssertionError("The auto-constructed verification callback URL is not whitelisted; proceeding without email verification",{emailVerificationRedirectUrl:d})),e=await this._interface.signUpWithCredential(a.email,a.password,void 0,c,this._toInterfaceBotChallengeInput(b))),e};return"ok"===(b=await this._executeResultWithBotChallengeFlow({action:"sign_up_with_credential",execute:e})).status?(await this._signInToAccountWithTokens(b.data),a.noRedirect||await this._redirectToHandler("afterSignUp",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(b.data)}),m.Result.ok(void 0)):m.Result.error(b.error)}async _signUpAnonymously(){return this._ensurePersistentTokenStore(),this._anonymousSignUpInProgress||(this._anonymousSignUpInProgress=(async()=>{this._ensurePersistentTokenStore();let a=await this._getSession(),b=await this._interface.signUpAnonymously(a);if("ok"===b.status)await this._signInToAccountWithTokens(b.data);else throw new h.HexclaveAssertionError("signUpAnonymously() should never return an error");return this._anonymousSignUpInProgress=null,b.data})()),await this._anonymousSignUpInProgress}async signInWithMagicLink(a,b){let c;this._ensurePersistentTokenStore();let d=await this._getSession();try{c=await this._catchMfaRequiredError(async()=>await this._interface.signInWithMagicLink(a,d))}catch(a){if(k.KnownErrors.InvalidTotpCode.isInstance(a))return m.Result.error(a);throw a}return"ok"===c.status?(await this._signInToAccountWithTokens(c.data),b?.noRedirect||(c.data.newUser?await this._redirectToHandler("afterSignUp",{replace:!0},{awaitPendingAuthResolutions:!1,overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(c.data)}):await this._redirectToHandler("afterSignIn",{replace:!0},{awaitPendingAuthResolutions:!1,overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(c.data)})),m.Result.ok(void 0)):m.Result.error(c.error)}async promptCliLogin(a){let b=await this._interface.sendClientRequest("/auth/cli",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expires_in_millis:a.expiresInMillis,...null!=a.anonRefreshToken?{anon_refresh_token:a.anonRefreshToken}:{}})},null);if(!b.ok)return m.Result.error(new k.KnownErrors.CliAuthError(`Failed to initiate CLI auth: ${b.status} ${await b.text()}`));let c=await b.json(),d=c.polling_code,e=c.login_code,f=(0,aJ.buildCliAuthConfirmUrl)({cliAuthConfirmUrl:this.urls.cliAuthConfirm,appUrl:a.appUrl,loginCode:e});a.promptLink?a.promptLink(f,e):(console.log(`Your verification code: ${e}`),console.log(`Please visit the following URL to authenticate:
7
- ${f}`));let h=0;for(;h<(a.maxAttempts??1/0);){h++;let b=await this._interface.sendClientRequest("/auth/cli/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({polling_code:d})},null);if(!b.ok)return m.Result.error(new k.KnownErrors.CliAuthError(`Failed to initiate CLI auth: ${b.status} ${await b.text()}`));let c=await b.json();if(201===b.status&&"success"===c.status)return m.Result.ok(c.refresh_token);if("waiting"===c.status){await (0,g.wait)(a.waitTimeMillis??2e3);continue}if("expired"===c.status)return m.Result.error(new k.KnownErrors.CliAuthExpiredError("CLI authentication request expired. Please try again."));if("used"===c.status)return m.Result.error(new k.KnownErrors.CliAuthUsedError("This authentication token has already been used."));return m.Result.error(new k.KnownErrors.CliAuthError(`Unexpected status from CLI auth polling: ${c.status}`))}return m.Result.error(new k.KnownErrors.CliAuthError("Timed out waiting for CLI authentication."))}async signInWithMfa(a,b,c){let d;this._ensurePersistentTokenStore();let e=await this._getSession();try{d=await this._catchMfaRequiredError(async()=>await this._interface.signInWithMfa(a,b,e))}catch(a){if(a instanceof k.KnownErrors.InvalidTotpCode)return m.Result.error(a);throw a}return"ok"===d.status?(await this._signInToAccountWithTokens(d.data),c?.noRedirect||(d.data.newUser?await this._redirectToHandler("afterSignUp",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(d.data)}):await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(d.data)})),m.Result.ok(void 0)):m.Result.error(d.error)}async signInWithPasskey(){let a;this._ensurePersistentTokenStore();let b=await this._getSession();try{a=await this._catchMfaRequiredError(async()=>{let a=await this._interface.initiatePasskeyAuthentication({},b);if("ok"!==a.status)return m.Result.error(new k.KnownErrors.PasskeyAuthenticationFailed("Failed to get initiation options for passkey authentication"));let{options_json:c,code:d}=a.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==c.rpId)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${c.rpId}`);c.rpId=window.location.hostname;let e=await C({optionsJSON:c});return await this._interface.signInWithPasskey({authentication_response:e,code:d},b)})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return m.Result.error(new k.KnownErrors.PasskeyAuthenticationFailed("Failed to sign in with passkey"))}return"ok"===a.status?(await this._signInToAccountWithTokens(a.data),await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(a.data)}),m.Result.ok(void 0)):m.Result.error(a.error)}async callOAuthCallback(a){throw Error("callOAuthCallback can currently only be called in a browser environment")}async _signOut(a,b){this._eventTracker?.clearBuffer(),this._sessionRecorder?.clearBuffer(),await T.storeLock.withWriteLock(async()=>{await this._interface.signOut(a),b?.redirectUrl?await this._redirectTo({url:b.redirectUrl,replace:!0}):await this._redirectToDefaultAfterSignOut()})}async _redirectToDefaultAfterSignOut(){null!=this._urlOptions.afterSignOut?await this.redirectToAfterSignOut({replace:!0}):null!=this._urlOptions.home?await this.redirectToHome({replace:!0}):(this._urlOptions.default?.type,await this.redirectToAfterSignOut({replace:!0}))}async signOut(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});b&&await b.signOut({redirectUrl:a?.redirectUrl})}async getAccessToken(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getAccessToken():null}useAccessToken(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useAccessToken():null}async getRefreshToken(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getRefreshToken():null}useRefreshToken(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useRefreshToken():null}async getAuthorizationHeader(a){return bi(await this.getAuthJson(a))}useAuthorizationHeader(a){return bi(this.useAuthJson(a))}async getAuthHeaders(a){return{"x-stack-auth":JSON.stringify(await this.getAuthJson(a))}}useAuthHeaders(a){return{"x-stack-auth":JSON.stringify(this.useAuthJson(a))}}async getAuthJson(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getAuthJson():{accessToken:null,refreshToken:null}}useAuthJson(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useAuthJson():{accessToken:null,refreshToken:null}}async getProject(){let a=m.Result.orThrow(await this._currentProjectCache.getOrWait([],"write-only"));return this._clientProjectFromCrud(a)}useProject(){let a=(0,n.useAsyncCache)(this._currentProjectCache,[],"clientApp.useProject()");return(0,i.useMemo)(()=>this._clientProjectFromCrud(a),[a])}async _listOwnedProjects(a){return this._ensureInternalProject(),m.Result.orThrow(await this._ownedProjectsCache.getOrWait([a],"write-only")).map(b=>this._getOwnedAdminApp(b.id,a)._adminOwnedProjectFromCrud(b,()=>this._refreshOwnedProjects(a)))}_useOwnedProjects(a){this._ensureInternalProject();let b=(0,n.useAsyncCache)(this._ownedProjectsCache,[a],"clientApp.useOwnedProjects()");return(0,i.useMemo)(()=>b.map(b=>this._getOwnedAdminApp(b.id,a)._adminOwnedProjectFromCrud(b,()=>this._refreshOwnedProjects(a))),[b])}async _createProject(a,b){this._ensureInternalProject();let c=await this._interface.createProject({...S(b),display_name:b.displayName,is_development_environment:b.isDevelopmentEnvironment,owner_team_id:b.teamId},a),d=this._getOwnedAdminApp(c.id,a)._adminOwnedProjectFromCrud(c,()=>this._refreshOwnedProjects(a));return await this._refreshOwnedProjects(a),d}async _refreshUser(a){await this._refreshSession(a)}async _refreshSession(a){await Promise.all([this._currentUserCache.refresh([a]),this._currentUserConnectedAccountsCache.refresh([a])]),a.suggestAccessTokenExpired()}async _refreshUsers(){}async _refreshProject(){await this._currentProjectCache.refresh([])}async _refreshOwnedProjects(a){await this._ownedProjectsCache.refresh([a])}static get[R.hexclaveAppInternalsSymbol](){return{fromClientJson:a=>{let c=JSON.stringify((0,E.omit)(a,[])),d=bf.get(a.uniqueIdentifier);if(d){let[b,e]=d;if(void 0!==b&&b!==c)throw new h.HexclaveAssertionError("The provided app JSON does not match the configuration of the existing client app with the same unique identifier",{providedObj:a,existingString:b});return e}let{analytics:e,...f}=(0,E.omit)(a,["uniqueIdentifier"]);return new b({...f,analytics:function(a){if(!a?.replays?.blockClass)return a;let{blockClass:b,...c}=a.replays;return"object"==typeof b&&"__regexp"in b?{...a,replays:{...c,blockClass:new RegExp(b.__regexp,b.__flags)}}:a}(e)},{uniqueIdentifier:a.uniqueIdentifier,checkString:c})}}}get[R.hexclaveAppInternalsSymbol](){return{toClientJson:()=>{if("string"!=typeof this._redirectMethod)throw new h.HexclaveAssertionError("Cannot serialize to JSON from an application with a non-string redirect method");let a="publishableClientKey"in this._interface.options?this._interface.options.publishableClientKey:void 0;return{baseUrl:this._options.baseUrl,projectId:this.projectId,...null!=a?{publishableClientKey:a}:{},tokenStore:this._tokenStoreInit,urls:this._urlOptions,oauthScopesOnSignIn:this._oauthScopesOnSignIn,uniqueIdentifier:this._getUniqueIdentifier(),redirectMethod:this._redirectMethod,extraRequestHeaders:this._options.extraRequestHeaders,devTool:this._options.devTool,analytics:function(a){if(!a?.replays?.blockClass)return a;let{blockClass:b,...c}=a.replays;return b instanceof RegExp?{...a,replays:{...c,blockClass:{__regexp:b.source,__flags:b.flags}}}:a}(this._analyticsOptions)}},setCurrentUser:a=>{(0,g.runAsynchronously)(async()=>{await this._currentUserCache.forceSetCachedValueAsync([await this._getSession()],m.Result.fromPromise(a))})},getConstructorOptions:()=>this._options,sendSessionReplayBatch:async(a,b)=>await this._interface.sendSessionReplayBatch(a,await this._getSession(),b),sendAnalyticsEventBatch:async(a,b)=>await this._interface.sendAnalyticsEventBatch(a,await this._getSession(),b),addRequestListener:a=>this._interface.addRequestListener(a),sendRequest:async(a,b,c="client")=>await this._interface.sendClientRequest(a,b,await this._getSession(),c),getRedirectMethod:()=>this._redirectMethod??(0,h.throwErr)("Redirect method should have been initialized in the Stack client app constructor"),redirectToUrl:async(a,b)=>{await this._redirectTo({url:a,...b})},redirectToHandler:async(a,b)=>{await this._redirectToHandler(a,b)},refreshOwnedProjects:async()=>{await this._refreshOwnedProjects(await this._getSession())},signInWithTokens:async a=>{await this._signInToAccountWithTokens(a)}}}},bm=class extends bl{async _refreshTeamMembership(a,b){await Promise.all([this._serverTeamMemberProfilesCache.refresh([a]),this._serverTeamsCache.refreshWhere(([a])=>a===b||void 0===a),this._serverUsersCache.refreshWhere(b=>b[8]===a)])}_createServerCustomer(a,b){let c=this,d="user"===b?c._serverUserProductsCache:c._serverTeamProductsCache,e="user"===b?{userId:a}:{teamId:a};return{...this._createCustomer(a,b,null),getItem:async a=>await c.getItem({itemId:a,...e}),useItem:a=>c.useItem({itemId:a,...e}),async grantProduct(e){"user"===b?"productId"in e?await c.grantProduct({userId:a,productId:e.productId,quantity:e.quantity}):await c.grantProduct({userId:a,product:e.product,quantity:e.quantity}):"productId"in e?await c.grantProduct({teamId:a,productId:e.productId,quantity:e.quantity}):await c.grantProduct({teamId:a,product:e.product,quantity:e.quantity}),await d.refresh([a,null,null])},async createCheckoutUrl(d){let e="productId"in d?d.productId:d.product;return await c._interface.createCheckoutUrl(b,a,e,null,d.returnUrl,"server")}}}async _updateServerUser(a,b){let c=await this._interface.updateServerUser(a,{display_name:b.displayName,primary_email:b.primaryEmail,client_metadata:b.clientMetadata,client_read_only_metadata:b.clientReadOnlyMetadata,server_metadata:b.serverMetadata,selected_team_id:b.selectedTeamId,primary_email_auth_enabled:b.primaryEmailAuthEnabled,primary_email_verified:b.primaryEmailVerified,password:b.password,profile_image_url:b.profileImageUrl,totp_secret_base64:null!=b.totpMultiFactorSecret?(0,I.encodeBase64)(b.totpMultiFactorSecret):b.totpMultiFactorSecret,restricted_by_admin:b.restrictedByAdmin,restricted_by_admin_reason:b.restrictedByAdminReason,restricted_by_admin_private_details:b.restrictedByAdminPrivateDetails,country_code:b.countryCode,risk_scores:b.riskScores?{sign_up:{bot:b.riskScores.signUp.bot,free_trial_abuse:b.riskScores.signUp.freeTrialAbuse}}:void 0});return await this._refreshUsers(),c}_serverEditableTeamProfileFromCrud(a){let b=this;return{displayName:a.display_name,profileImageUrl:a.profile_image_url,async update(c){await b._interface.updateServerTeamMemberProfile({teamId:a.team_id,userId:a.user_id,profile:{display_name:c.displayName,profile_image_url:c.profileImageUrl}}),await b._serverUserTeamProfileCache.refresh([a.team_id,a.user_id])}}}_serverContactChannelFromCrud(a,b){let c=this;return{id:b.id,value:b.value,type:b.type,isVerified:b.is_verified,isPrimary:b.is_primary,usedForAuth:b.used_for_auth,async sendVerificationEmail(d){await c._interface.sendServerContactChannelVerificationEmail(a,b.id,d?.callbackUrl??D(c._getUrls().emailVerification,"callbackUrl"))},async update(d){await c._interface.updateServerContactChannel(a,b.id,{value:d.value,is_verified:d.isVerified,used_for_auth:d.usedForAuth,is_primary:d.isPrimary}),await Promise.all([c._serverContactChannelsCache.refresh([a]),c._serverUserCache.refresh([a])])},async delete(){await c._interface.deleteServerContactChannel(a,b.id),await Promise.all([c._serverContactChannelsCache.refresh([a]),c._serverUserCache.refresh([a])])}}}_serverNotificationCategoryFromCrud(a,b){let c=this;return{id:b.notification_category_id,name:b.notification_category_name,enabled:b.enabled,canDisable:b.can_disable,async setEnabled(d){await c._interface.setServerNotificationsEnabled(a,b.notification_category_id,d),await c._serverNotificationCategoriesCache.refresh([a])}}}_serverOAuthProviderFromCrud(a){let b=this;return{id:a.id,type:a.type,userId:a.user_id,accountId:a.account_id,email:a.email,allowSignIn:a.allow_sign_in,allowConnectedAccounts:a.allow_connected_accounts,async update(c){try{return await b._interface.updateServerOAuthProvider(a.user_id,a.id,{account_id:c.accountId,email:c.email,allow_sign_in:c.allowSignIn,allow_connected_accounts:c.allowConnectedAccounts}),await Promise.all([b._serverOAuthProvidersCache.refresh([a.user_id]),b._serverUserConnectedAccountsCache.refresh([a.user_id])]),m.Result.ok(void 0)}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}},async delete(){await b._interface.deleteServerOAuthProvider(a.user_id,a.id),await Promise.all([b._serverOAuthProvidersCache.refresh([a.user_id]),b._serverUserConnectedAccountsCache.refresh([a.user_id])])}}}constructor(a,b){const c=(0,n.resolveConstructorOptions)(a),d=c.publishableClientKey??(0,n.getDefaultPublishableClientKey)();super(c,{...b,interface:b?.interface??(()=>{let a=(0,n.resolveApiUrls)(c.baseUrl);return new j.HexclaveServerInterface({getBaseUrl:()=>a()[0],getApiUrls:a,projectId:c.projectId??(0,n.getDefaultProjectId)(),extraRequestHeaders:c.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),clientVersion:n.clientVersion,...null!=d?{publishableClientKey:d}:{},secretServerKey:c.secretServerKey??(0,n.getDefaultSecretServerKey)()})})()}),this._currentServerUserCache=(0,n.createCacheBySession)(async a=>a.isKnownToBeInvalid()?null:await this._interface.getServerUserByToken(a)),this._serverUsersCache=(0,n.createCache)(async([a,b,c,d,e,f,g,i,j])=>{if(i&&!g)throw new h.HexclaveAssertionError("onlyAnonymous=true requires includeAnonymous=true");return i?await this._interface.listServerUsers({cursor:a,limit:b,orderBy:c,desc:d,query:e,includeRestricted:f,includeAnonymous:!0,onlyAnonymous:!0,teamId:j}):await this._interface.listServerUsers({cursor:a,limit:b,orderBy:c,desc:d,query:e,includeRestricted:f,includeAnonymous:g,teamId:j})}),this._serverUserCache=(0,n.createCache)(async([a])=>{let b=await this._interface.getServerUserById(a);return m.Result.or(b,null)}),this._serverTeamsCache=(0,n.createCache)(async([a,b,c,d,e,f])=>await this._interface.listServerTeamsPaginated({userId:a,orderBy:b,desc:c,cursor:d,limit:e,query:f})),this._serverUserTeamInvitationsCache=(0,n.createCache)(async([a])=>await this._interface.listServerUserTeamInvitations(a)),this._serverTeamUserPermissionsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listServerTeamPermissions({teamId:a,userId:b,recursive:c},null)),this._serverAllTeamMemberPermissionsCache=(0,n.createCache)(async([a,b])=>await this._interface.listServerTeamPermissions({teamId:a,recursive:b},null)),this._serverUserProjectPermissionsCache=(0,n.createCache)(async([a,b])=>await this._interface.listServerProjectPermissions({userId:a,recursive:b},null)),this._serverUserOAuthConnectionAccessTokensCache=(0,n.createCache)(async([a,b,c])=>{try{return{accessToken:(await this._interface.createServerProviderAccessToken(a,b,c||"")).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._serverUserOAuthConnectionCache=(0,n.createCache)(async([a,b,c,d])=>await this._getUserOAuthConnectionCacheFn({getUser:async()=>m.Result.orThrow(await this._serverUserCache.getOrWait([a],"write-only")),getOrWaitOAuthToken:async()=>m.Result.orThrow(await this._serverUserOAuthConnectionAccessTokensCache.getOrWait([a,b,c||""],"write-only")),useOAuthToken:()=>(0,n.useAsyncCache)(this._serverUserOAuthConnectionAccessTokensCache,[a,b,c||""],"user.useConnectedAccount()"),providerId:b,scope:c,redirect:d,session:null})),this._serverUserConnectedAccountsCache=(0,n.createCache)(async([a])=>(await this._interface.listServerConnectedAccounts(a)).items.map(b=>this._createServerOAuthConnectionFromCrudItem(a,b))),this._serverUserOAuthConnectionAccessTokensByAccountCache=(0,n.createCache)(async([a,b,c,d])=>{try{return{accessToken:(await this._interface.createServerProviderAccessTokenByAccount(a,b,c,d||"")).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._serverTeamMemberProfilesCache=(0,n.createCache)(async([a])=>await this._interface.listServerTeamMemberProfiles({teamId:a})),this._serverTeamInvitationsCache=(0,n.createCache)(async([a])=>await this._interface.listServerTeamInvitations({teamId:a})),this._serverUserTeamProfileCache=(0,n.createCache)(async([a,b])=>await this._interface.getServerTeamMemberProfile({teamId:a,userId:b})),this._serverContactChannelsCache=(0,n.createCache)(async([a])=>await this._interface.listServerContactChannels(a)),this._serverNotificationCategoriesCache=(0,n.createCache)(async([a])=>await this._interface.listServerNotificationCategories(a)),this._serverDataVaultStoreValueCache=(0,n.createCache)(async([a,b,c])=>await this._interface.getDataVaultStoreValue(c,a,b)),this._emailDeliveryInfoCache=(0,n.createCache)(async()=>await this._interface.getEmailDeliveryInfo()),this._serverUserApiKeysCache=(0,n.createCache)(async([a])=>await this._interface.listProjectApiKeys({user_id:a},null,"server")),this._serverTeamApiKeysCache=(0,n.createCache)(async([a])=>await this._interface.listProjectApiKeys({team_id:a},null,"server")),this._convexIdentitySubjectCache=(0,n.createCache)(async([a])=>{let b=await a.auth.getUserIdentity();return b?b.subject:null}),this._serverCheckApiKeyCache=(0,n.createCache)(async([a,b])=>await this._interface.checkProjectApiKey(a,b,null,"server")),this._serverOAuthProvidersCache=(0,n.createCache)(async([a])=>await this._interface.listServerOAuthProviders({user_id:a})),this._serverTeamItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({teamId:a,itemId:b},null,"server")),this._serverUserItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({userId:a,itemId:b},null,"server")),this._serverCustomItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({customCustomerId:a,itemId:b},null,"server")),this._serverUserProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"user",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server")),this._serverTeamProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"team",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server")),this._serverCustomProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"custom",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server"))}_serverApiKeyFromCrud(a){return{...this._baseApiKeyFromCrud(a),async revoke(){await this.update({revoked:!0})},update:async b=>{await this._interface.updateProjectApiKey("team"===a.type?{team_id:a.team_id}:{user_id:a.user_id},a.id,await G(a.type,b),null,"server"),"team"===a.type?await this._serverTeamApiKeysCache.refresh([a.team_id]):await this._serverUserApiKeysCache.refresh([a.user_id])}}}_createServerOAuthConnectionFromCrudItem(a,b){let c=this,d=b.provider,e=b.provider_account_id;return{id:d,provider:d,providerAccountId:e,async getAccessToken(b){let f=b?.scopes?.join(" ")??"",g=m.Result.orThrow(await c._serverUserOAuthConnectionAccessTokensByAccountCache.getOrWait([a,d,e,f],"write-only"));if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)},useAccessToken(b){let f=b?.scopes?.join(" ")??"",g=(0,n.useAsyncCache)(c._serverUserOAuthConnectionAccessTokensByAccountCache,[a,d,e,f],"connection.useAccessToken()");if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)}}}_serverUserFromCrud(a){let b=this;async function c(c,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof c&&"provider"in c&&"providerAccountId"in c){let{provider:d,providerAccountId:e}=c,f=m.Result.orThrow(await b._serverUserConnectedAccountsCache.getOrWait([a.id],"write-only")).find(a=>a.provider===d&&a.providerAccountId===e);return f||null}return m.Result.orThrow(await b._serverUserOAuthConnectionCache.getOrWait([a.id,c,e,d?.or==="redirect"],"write-only"))}return J({...super._createBaseUser(a),lastActiveAt:new Date(a.last_active_at_millis),serverMetadata:a.server_metadata,restrictedByAdmin:a.restricted_by_admin,restrictedByAdminReason:a.restricted_by_admin_reason,restrictedByAdminPrivateDetails:a.restricted_by_admin_private_details,countryCode:a.country_code,riskScores:{signUp:{bot:a.risk_scores.sign_up.bot,freeTrialAbuse:a.risk_scores.sign_up.free_trial_abuse}},async setPrimaryEmail(c,d){await b._updateServerUser(a.id,{primaryEmail:c,primaryEmailVerified:d?.verified})},async grantPermission(c,d){if(c&&"string"!=typeof c&&d)for(let e of(await b._interface.grantServerTeamUserPermission(c.id,a.id,d),[!0,!1]))await b._serverTeamUserPermissionsCache.refresh([c.id,a.id,e]),await b._serverAllTeamMemberPermissionsCache.refresh([c.id,e]);else for(let d of(await b._interface.grantServerProjectPermission(a.id,c),[!0,!1]))await b._serverUserProjectPermissionsCache.refresh([a.id,d])},async revokePermission(c,d){if(c&&"string"!=typeof c&&d)for(let e of(await b._interface.revokeServerTeamUserPermission(c.id,a.id,d),[!0,!1]))await b._serverTeamUserPermissionsCache.refresh([c.id,a.id,e]),await b._serverAllTeamMemberPermissionsCache.refresh([c.id,e]);else for(let d of(await b._interface.revokeServerProjectPermission(a.id,c),[!0,!1]))await b._serverUserProjectPermissionsCache.refresh([a.id,d])},async delete(){let c=await b._interface.deleteServerUser(a.id);return await b._refreshUsers(),c},async createSession(c){let d=await b._interface.createServerUserSession(a.id,c.expiresInMillis??31536e6,c.isImpersonation??!1);return{getTokens:async()=>d}},getActiveSessions:async()=>(await b._interface.listServerSessions(a.id)).items.map(a=>b._clientSessionFromCrud(a)),async revokeSession(a){await b._interface.deleteServerSession(a)},async setDisplayName(a){return await this.update({displayName:a})},async setClientMetadata(a){return await this.update({clientMetadata:a})},async setClientReadOnlyMetadata(a){return await this.update({clientReadOnlyMetadata:a})},async setServerMetadata(a){return await this.update({serverMetadata:a})},async setSelectedTeam(a){return await this.update({selectedTeamId:"string"==typeof a?a:a?.id??null})},getConnectedAccount:c,useConnectedAccount:function(c,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof c&&"provider"in c&&"providerAccountId"in c){let{provider:d,providerAccountId:e}=c;return(0,n.useAsyncCache)(b._serverUserConnectedAccountsCache,[a.id],"user.useConnectedAccount()").find(a=>a.provider===d&&a.providerAccountId===e)??null}return(0,n.useAsyncCache)(b._serverUserOAuthConnectionCache,[a.id,c,e,d?.or==="redirect"],"user.useConnectedAccount()")},listConnectedAccounts:async()=>m.Result.orThrow(await b._serverUserConnectedAccountsCache.getOrWait([a.id],"write-only")),useConnectedAccounts:()=>(0,n.useAsyncCache)(b._serverUserConnectedAccountsCache,[a.id],"user.useConnectedAccounts()"),async linkConnectedAccount(){throw new h.HexclaveAssertionError("linkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},async getOrLinkConnectedAccount(){throw new h.HexclaveAssertionError("getOrLinkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},useOrLinkConnectedAccount(){throw new h.HexclaveAssertionError("useOrLinkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},selectedTeam:a.selected_team?b._serverTeamFromCrud(a.selected_team):null,async getTeam(a){return(await this.listTeams()).find(b=>b.id===a)??null},useTeam(a){let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async listTeams(c){let d=m.Result.orThrow(await b._serverTeamsCache.getOrWait([a.id,c?.orderBy,c?.desc,c?.cursor,c?.limit,c?.query],"write-only")),e=d.items.map(a=>b._serverTeamFromCrud(a));return e.nextCursor=d.pagination?.next_cursor??null,e},useTeams(c){let d=(0,n.useAsyncCache)(b._serverTeamsCache,[a.id,c?.orderBy,c?.desc,c?.cursor,c?.limit,c?.query],"user.useTeams()");return(0,i.useMemo)(()=>{let a=d.items.map(a=>b._serverTeamFromCrud(a));return a.nextCursor=d.pagination?.next_cursor??null,a},[d])},createTeam:async c=>{let d=await b._interface.createServerTeam(H({creatorUserId:a.id,...c}));return await b._serverTeamsCache.refreshWhere(()=>!0),await b._updateServerUser(a.id,{selectedTeamId:d.id}),b._serverTeamFromCrud(d)},leaveTeam:async c=>{await b._interface.leaveServerTeam({teamId:c.id,userId:a.id}),await b._refreshTeamMembership(c.id,a.id)},listTeamInvitations:async()=>m.Result.orThrow(await b._serverUserTeamInvitationsCache.getOrWait([a.id],"write-only")).map(c=>b._serverReceivedTeamInvitationFromCrud(a.id,c)),useTeamInvitations(){let c=(0,n.useAsyncCache)(b._serverUserTeamInvitationsCache,[a.id],"user.useTeamInvitations()");return(0,i.useMemo)(()=>c.map(c=>b._serverReceivedTeamInvitationFromCrud(a.id,c)),[c])},async listPermissions(c,d){if(c&&"id"in c){let e=d?.recursive??!0;return m.Result.orThrow(await b._serverTeamUserPermissionsCache.getOrWait([c.id,a.id,e],"write-only")).map(a=>b._serverPermissionFromCrud(a))}{let d=c?.recursive??!0;return m.Result.orThrow(await b._serverUserProjectPermissionsCache.getOrWait([a.id,d],"write-only")).map(a=>b._serverPermissionFromCrud(a))}},usePermissions(c,d){if(c&&"id"in c){let e=d?.recursive??!0,f=(0,n.useAsyncCache)(b._serverTeamUserPermissionsCache,[c.id,a.id,e],"user.usePermissions()");return(0,i.useMemo)(()=>f.map(a=>b._serverPermissionFromCrud(a)),[f])}{let d=c?.recursive??!0,e=(0,n.useAsyncCache)(b._serverUserProjectPermissionsCache,[a.id,d],"user.usePermissions()");return(0,i.useMemo)(()=>e.map(a=>b._serverPermissionFromCrud(a)),[e])}},async getPermission(a,b){return a&&"string"!=typeof a?(await this.listPermissions(a)).find(a=>a.id===b)??null:(await this.listPermissions()).find(b=>b.id===a)??null},usePermission(a,b){if(a&&"string"!=typeof a){let c=this.usePermissions(a);return(0,i.useMemo)(()=>c.find(a=>a.id===b)??null,[c,b])}{let b=this.usePermissions();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}},async hasPermission(a,b){return a&&"string"!=typeof a?await this.getPermission(a,b)!==null:await this.getPermission(a)!==null},async update(c){await b._updateServerUser(a.id,c)},sendVerificationEmail:async()=>await b._checkFeatureSupport("sendVerificationEmail() on ServerUser",{}),async updatePassword(c){let d=await b._interface.updatePassword(c);return await b._serverUserCache.refresh([a.id]),d},async setPassword(c){let d=await this.update(c);return await b._serverUserCache.refresh([a.id]),d},async getTeamProfile(c){let d=m.Result.orThrow(await b._serverUserTeamProfileCache.getOrWait([c.id,a.id],"write-only"));return b._serverEditableTeamProfileFromCrud(d)},useTeamProfile(c){let d=(0,n.useAsyncCache)(b._serverUserTeamProfileCache,[c.id,a.id],"user.useTeamProfile()");return(0,i.useMemo)(()=>b._serverEditableTeamProfileFromCrud(d),[d])},listContactChannels:async()=>m.Result.orThrow(await b._serverContactChannelsCache.getOrWait([a.id],"write-only")).map(c=>b._serverContactChannelFromCrud(a.id,c)),useContactChannels(){let c=(0,n.useAsyncCache)(b._serverContactChannelsCache,[a.id],"user.useContactChannels()");return(0,i.useMemo)(()=>c.map(c=>b._serverContactChannelFromCrud(a.id,c)),[c])},createContactChannel:async c=>{var d;let e=await b._interface.createServerContactChannel((d=a.id,{type:c.type,value:c.value,is_verified:c.isVerified,user_id:d,used_for_auth:c.usedForAuth,is_primary:c.isPrimary}));return await Promise.all([b._serverContactChannelsCache.refresh([a.id]),b._serverUserCache.refresh([a.id])]),b._serverContactChannelFromCrud(a.id,e)},useNotificationCategories:()=>(0,n.useAsyncCache)(b._serverNotificationCategoriesCache,[a.id],"user.useNotificationCategories()").map(c=>b._serverNotificationCategoryFromCrud(a.id,c)),listNotificationCategories:async()=>m.Result.orThrow(await b._serverNotificationCategoriesCache.getOrWait([a.id],"write-only")).map(c=>b._serverNotificationCategoryFromCrud(a.id,c)),useApiKeys:()=>(0,n.useAsyncCache)(b._serverUserApiKeysCache,[a.id],"user.useApiKeys()").map(a=>b._serverApiKeyFromCrud(a)),listApiKeys:async()=>m.Result.orThrow(await b._serverUserApiKeysCache.getOrWait([a.id],"write-only")).map(a=>b._serverApiKeyFromCrud(a)),async createApiKey(c){let d=await b._interface.createProjectApiKey(await F("user",a.id,c),null,"server");return await b._serverUserApiKeysCache.refresh([a.id]),b._serverApiKeyFromCrud(d)},useOAuthProviders(){let c=(0,n.useAsyncCache)(b._serverOAuthProvidersCache,[a.id],"user.useOAuthProviders()");return(0,i.useMemo)(()=>c.map(a=>b._serverOAuthProviderFromCrud(a)),[c])},listOAuthProviders:async()=>m.Result.orThrow(await b._serverOAuthProvidersCache.getOrWait([a.id],"write-only")).map(a=>b._serverOAuthProviderFromCrud(a)),useOAuthProvider(a){let b=this.useOAuthProviders();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async getOAuthProvider(a){return(await this.listOAuthProviders()).find(b=>b.id===a)??null},async registerPasskey(c){let d,e=c?.hostname||(await b._getCurrentUrl())?.hostname;if(!e)throw new h.HexclaveAssertionError("hostname must be provided if the Stack App does not have a redirect method");let f=await b._interface.initiateServerPasskeyRegistration(a.id);if("ok"!==f.status)return m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to get initiation options for passkey registration"));let{options_json:g,code:i}=f.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==g.rp.id)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${g.rp.id}`);g.rp.id=e;try{d=await z({optionsJSON:g})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return(0,h.captureError)("passkey-registration-failed",a),m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to start passkey registration due to unknown error"))}let{accessToken:j,refreshToken:l}=await b._interface.createServerUserSession(a.id,6e4*2,!1),n=new o.InternalSession({accessToken:j,refreshToken:l,refreshAccessTokenCallback:async()=>null}),p=await b._interface.registerPasskey({credential:d,code:i},n);return await b._serverUserCache.refresh([a.id]),p},...b._createServerCustomer(a.id,"user")})}_serverTeamUserFromCrud(a){return J({...this._serverUserFromCrud(a.user),teamProfile:{displayName:a.display_name,profileImageUrl:a.profile_image_url}})}_serverSentTeamInvitationFromCrud(a){return{id:a.id,recipientEmail:a.recipient_email,expiresAt:new Date(a.expires_at_millis),revoke:async()=>{await this._interface.revokeServerTeamInvitation(a.id,a.team_id),await this._serverTeamInvitationsCache.refresh([a.team_id])}}}_serverReceivedTeamInvitationFromCrud(a,b){let c=this;return{id:b.id,teamId:b.team_id,teamDisplayName:b.team_display_name,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),accept:async()=>{await c._interface.acceptServerTeamInvitationById(b.id,a),await Promise.all([c._serverUserTeamInvitationsCache.refresh([a]),c._serverTeamInvitationsCache.refresh([b.team_id]),c._refreshTeamMembership(b.team_id,a)])}}}_currentUserFromCrud(a,b){return J({...this._serverUserFromCrud(a),...this._createAuth(b),...this._isInternalProject()?this._createInternalUserExtra(b):{}})}_serverTeamFromCrud(a){let b=this;return{id:a.id,displayName:a.display_name,profileImageUrl:a.profile_image_url,createdAt:new Date(a.created_at_millis),clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,serverMetadata:a.server_metadata,async update(c){await b._interface.updateServerTeam(a.id,{display_name:c.displayName,profile_image_url:c.profileImageUrl,client_metadata:c.clientMetadata,client_read_only_metadata:c.clientReadOnlyMetadata,server_metadata:c.serverMetadata}),await Promise.all([b._serverTeamsCache.refreshWhere(()=>!0),b._serverUsersCache.refreshWhere(()=>!0)])},async delete(){await b._interface.deleteServerTeam(a.id),await Promise.all([b._serverTeamsCache.refreshWhere(()=>!0),b._serverUsersCache.refreshWhere(()=>!0)])},listUsers:async()=>m.Result.orThrow(await b._serverTeamMemberProfilesCache.getOrWait([a.id],"write-only")).map(a=>b._serverTeamUserFromCrud(a)),useUsers(){let c=(0,n.useAsyncCache)(b._serverTeamMemberProfilesCache,[a.id],"team.useUsers()");return(0,i.useMemo)(()=>c.map(a=>b._serverTeamUserFromCrud(a)),[c])},async addUser(c){await b._interface.addServerUserToTeam({teamId:a.id,userId:c}),await b._refreshTeamMembership(a.id,c)},async removeUser(c){await b._interface.removeServerUserFromTeam({teamId:a.id,userId:c}),await b._refreshTeamMembership(a.id,c)},async inviteUser(c){await b._interface.sendServerTeamInvitation({teamId:a.id,email:c.email,callbackUrl:c.callbackUrl??D(b._getUrls().teamInvitation,"callbackUrl")}),await b._serverTeamInvitationsCache.refresh([a.id])},listInvitations:async()=>m.Result.orThrow(await b._serverTeamInvitationsCache.getOrWait([a.id],"write-only")).map(a=>b._serverSentTeamInvitationFromCrud(a)),useInvitations(){let c=(0,n.useAsyncCache)(b._serverTeamInvitationsCache,[a.id],"team.useInvitations()");return(0,i.useMemo)(()=>c.map(a=>b._serverSentTeamInvitationFromCrud(a)),[c])},useApiKeys:()=>(0,n.useAsyncCache)(b._serverTeamApiKeysCache,[a.id],"team.useApiKeys()").map(a=>b._serverApiKeyFromCrud(a)),listApiKeys:async()=>m.Result.orThrow(await b._serverTeamApiKeysCache.getOrWait([a.id],"write-only")).map(a=>b._serverApiKeyFromCrud(a)),async createApiKey(c){let d=await b._interface.createProjectApiKey(await F("team",a.id,c),null,"server");return await b._serverTeamApiKeysCache.refresh([a.id]),b._serverApiKeyFromCrud(d)},...b._createServerCustomer(a.id,"team")}}_serverItemFromCrud(a,b){let c=this;return{displayName:b.display_name,quantity:b.quantity,nonNegativeQuantity:Math.max(0,b.quantity),increaseQuantity:async d=>{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};await c._interface.updateItemQuantity(e,{delta:d}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id])},decreaseQuantity:async d=>{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};await c._interface.updateItemQuantity(e,{delta:-d,allow_negative:!0}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id])},tryDecreaseQuantity:async d=>{try{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};return await c._interface.updateItemQuantity(e,{delta:-d}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id]),!0}catch(a){if(a instanceof k.KnownErrors.ItemQuantityInsufficientAmount)return!1;throw a}}}}async _getUserApiKey(a){let b=m.Result.orThrow(await this._serverCheckApiKeyCache.getOrWait(["user",a.apiKey],"write-only"));return b?this._serverApiKeyFromCrud(b):null}async _getTeamApiKey(a){let b=m.Result.orThrow(await this._serverCheckApiKeyCache.getOrWait(["team",a.apiKey],"write-only"));return b?this._serverApiKeyFromCrud(b):null}_useUserApiKey(a){let b=(0,n.useAsyncCache)(this._serverCheckApiKeyCache,["user",a.apiKey],"serverApp.useUserApiKey()");return(0,i.useMemo)(()=>b?this._serverApiKeyFromCrud(b):null,[b])}_useTeamApiKey(a){let b=(0,n.useAsyncCache)(this._serverCheckApiKeyCache,["team",a.apiKey],"serverApp.useTeamApiKey()");return(0,i.useMemo)(()=>b?this._serverApiKeyFromCrud(b):null,[b])}async _getUserByApiKey(a){let b=await this._getUserApiKey({apiKey:a});return null===b?null:await this.getServerUserById(b.userId)}async _getUserByConvex(a,b){let c=await a.auth.getUserIdentity();if(null===c)return null;let d=await this.getServerUserById(c.subject);return d?.isAnonymous&&!b?null:d}_useUserByConvex(a,b){let c=(0,n.useAsyncCache)(this._convexIdentitySubjectCache,[a],"serverApp.useUserByConvex()");if(null===c)return null;let d=this.useUserById(c);return d?.isAnonymous&&!b?null:d}_useUserByApiKey(a){let b=this._useUserApiKey({apiKey:a});return null===b?null:this.useUserById(b.userId)}async _getTeamByApiKey(a){let b=await this._getTeamApiKey({apiKey:a});return null===b?null:await this.getTeam(b.teamId)}_useTeamByApiKey(a){let b=this._useTeamApiKey({apiKey:a});return null===b?null:this.useTeam(b.teamId)}async createUser(a){let b=await this._interface.createServerUser({primary_email:a.primaryEmail,password:a.password,otp_auth_enabled:a.otpAuthEnabled,primary_email_auth_enabled:a.primaryEmailAuthEnabled,display_name:a.displayName,primary_email_verified:a.primaryEmailVerified,client_metadata:a.clientMetadata,client_read_only_metadata:a.clientReadOnlyMetadata,server_metadata:a.serverMetadata,country_code:a.countryCode,risk_scores:a.riskScores?{sign_up:{bot:a.riskScores.signUp.bot,free_trial_abuse:a.riskScores.signUp.freeTrialAbuse}}:void 0});return await this._refreshUsers(),this._serverUserFromCrud(b)}async getUser(a){if("string"==typeof a)return await this.getServerUserById(a);{if("object"==typeof a&&"apiKey"in a)return await this._getUserByApiKey(a.apiKey);if("object"==typeof a&&"from"in a&&"convex"===a.from)return await this._getUserByConvex(a.ctx,"or"in a&&"anonymous"===a.or);if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=await this._getSession(a?.tokenStore),c=m.Result.orThrow(await this._currentServerUserCache.getOrWait([b],"write-only")),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":!c?.is_anonymous&&c?.is_restricted?await this.redirectToOnboarding({replace:!0}):await this.redirectToSignIn({replace:!0});break;case"throw":throw Error("User is not signed in but getUser was called with { or: 'throw' }");case"anonymous":{let a=await this._signUpAnonymously();return await this.getUser({tokenStore:a,or:"anonymous-if-exists[deprecated]",includeRestricted:!0})??(0,h.throwErr)("Something went wrong while signing up anonymously")}case void 0:case"anonymous-if-exists[deprecated]":case"return-null":return null}return c&&this._currentUserFromCrud(c,b)}}async getServerUser(){return console.warn("hexclaveServerApp.getServerUser is deprecated; use hexclaveServerApp.getUser instead"),await this.getUser()}async getServerUserById(a){let b=m.Result.orThrow(await this._serverUserCache.getOrWait([a],"write-only"));return b&&this._serverUserFromCrud(b)}useUser(a){if("string"==typeof a)return this.useUserById(a);{if("object"==typeof a&&"apiKey"in a)return this._useUserByApiKey(a.apiKey);if("object"==typeof a&&"from"in a&&"convex"===a.from)return this._useUserByConvex(a.ctx,"or"in a&&"anonymous"===a.or);if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=this._useSession(a?.tokenStore),c=(0,n.useAsyncCache)(this._currentServerUserCache,[b],"serverApp.useUser()");if(a?.or==="anonymous"||a?.or,a?.includeRestricted,null===c)switch(a?.or){case"redirect":throw(0,g.runAsynchronously)(this.redirectToSignIn({replace:!0})),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case"throw":throw Error("User is not signed in but useUser was called with { or: 'throw' }");case"anonymous":throw(0,g.runAsynchronously)(async()=>{await this._signUpAnonymously()}),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return")}return(0,i.useMemo)(()=>c&&this._currentUserFromCrud(c,b),[c,b,a?.or])}}useUserById(a){let b=(0,n.useAsyncCache)(this._serverUserCache,[a],"serverApp.useUserById()");return(0,i.useMemo)(()=>b&&this._serverUserFromCrud(b),[b])}async listUsers(a){let b=m.Result.orThrow(await this._serverUsersCache.getOrWait([a?.cursor,a?.limit,a?.orderBy,a?.desc,a?.query,a?.includeRestricted,a?.includeAnonymous,a?.onlyAnonymous,a?.teamId],"write-only")),c=b.items.map(a=>this._serverUserFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}useUsers(a){let b=(0,n.useAsyncCache)(this._serverUsersCache,[a?.cursor,a?.limit,a?.orderBy,a?.desc,a?.query,a?.includeRestricted,a?.includeAnonymous,a?.onlyAnonymous,a?.teamId],"serverApp.useUsers()"),c=b.items.map(a=>this._serverUserFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}_serverPermissionFromCrud(a){return{id:a.id}}_serverTeamPermissionDefinitionFromCrud(a){return{id:a.id,description:a.description,containedPermissionIds:a.contained_permission_ids}}_serverProjectPermissionDefinitionFromCrud(a){return{id:a.id,description:a.description,containedPermissionIds:a.contained_permission_ids}}async getItem(a){if("userId"in a){let b=m.Result.orThrow(await this._serverUserItemsCache.getOrWait([a.userId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"user",id:a.userId},b)}if("teamId"in a){let b=m.Result.orThrow(await this._serverTeamItemsCache.getOrWait([a.teamId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"team",id:a.teamId},b)}{let b=m.Result.orThrow(await this._serverCustomItemsCache.getOrWait([a.customCustomerId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"custom",id:a.customCustomerId},b)}}async listProducts(a){if("userId"in a){let b=m.Result.orThrow(await this._serverUserProductsCache.getOrWait([a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}if("teamId"in a){let b=m.Result.orThrow(await this._serverTeamProductsCache.getOrWait([a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}let b=m.Result.orThrow(await this._serverCustomProductsCache.getOrWait([a.customCustomerId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}useItem(a){let b,c,d;"userId"in a?(b="user",c=a.userId,d=this._serverUserItemsCache):"teamId"in a?(b="team",c=a.teamId,d=this._serverTeamItemsCache):(b="custom",c=a.customCustomerId,d=this._serverCustomItemsCache);let e=[c,a.itemId],f=(0,n.useAsyncCache)(d,e,"serverApp.useItem()");return(0,i.useMemo)(()=>this._serverItemFromCrud({type:b,id:c},f),[f])}async grantProduct(a){let b,c;"userId"in a?(b="user",c=a.userId):"teamId"in a?(b="team",c=a.teamId):(b="custom",c=a.customCustomerId),await this._interface.grantProduct({customerType:b,customerId:c,productId:"productId"in a?a.productId:void 0,product:"product"in a?a.product:void 0,quantity:a.quantity}),await ("user"===b?this._serverUserProductsCache:"team"===b?this._serverTeamProductsCache:this._serverCustomProductsCache).refresh([c,null,null])}async createTeam(a){let b=await this._interface.createServerTeam(H(a));return await this._serverTeamsCache.refreshWhere(()=>!0),this._serverTeamFromCrud(b)}async listTeams(a){let b=m.Result.orThrow(await this._serverTeamsCache.getOrWait([void 0,a?.orderBy,a?.desc,a?.cursor,a?.limit,a?.query],"write-only")),c=b.items.map(a=>this._serverTeamFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}useTeams(a){let b=(0,n.useAsyncCache)(this._serverTeamsCache,[void 0,a?.orderBy,a?.desc,a?.cursor,a?.limit,a?.query],"serverApp.useTeams()");return(0,i.useMemo)(()=>{let a=b.items.map(a=>this._serverTeamFromCrud(a));return a.nextCursor=b.pagination?.next_cursor??null,a},[b])}async listTeamMemberPermissions(a,b){let c=b?.recursive??!1;return m.Result.orThrow(await this._serverAllTeamMemberPermissionsCache.getOrWait([a,c],"write-only")).map(a=>({userId:a.user_id,permissionId:a.id}))}useTeamMemberPermissions(a,b){let c=b?.recursive??!1,d=(0,n.useAsyncCache)(this._serverAllTeamMemberPermissionsCache,[a,c],"serverApp.useTeamMemberPermissions()");return(0,i.useMemo)(()=>d.map(a=>({userId:a.user_id,permissionId:a.id})),[d])}async getTeam(a){return"object"==typeof a&&"apiKey"in a?await this._getTeamByApiKey(a.apiKey):(await this.listTeams()).find(b=>b.id===a)??null}useTeam(a){if("object"==typeof a&&"apiKey"in a)return this._useTeamByApiKey(a.apiKey);{let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}}_createServerDataVaultStore(a){let b=a=>{if("string"!=typeof a.secret)throw Error("secret must be a string, got "+typeof a.secret)};return{id:a,setValue:async(c,d,e)=>{b(e),await this._interface.setDataVaultStoreValue(e.secret,a,c,d)},getValue:async(c,d)=>(b(d),m.Result.orThrow(await this._serverDataVaultStoreValueCache.getOrWait([a,c,d.secret],"write-only"))),useValue:(c,d)=>(b(d),(0,n.useAsyncCache)(this._serverDataVaultStoreValueCache,[a,c,d.secret],"store.useValue()"))}}async getDataVaultStore(a){return this._createServerDataVaultStore(a)}useDataVaultStore(a){return(0,i.useMemo)(()=>this._createServerDataVaultStore(a),[a])}async sendEmail(a){await this._interface.sendEmail(a),await this._emailDeliveryInfoCache.refresh([])}async getEmailDeliveryStats(){return m.Result.orThrow(await this._emailDeliveryInfoCache.getOrWait([],"write-only"))}useEmailDeliveryStats(){return(0,n.useAsyncCache)(this._emailDeliveryInfoCache,[],"hexclaveServerApp.useEmailDeliveryStats()")}async activateEmailCapacityBoost(){await this._interface.activateEmailCapacityBoost(),await this._emailDeliveryInfoCache.refresh([])}async _refreshSession(a){await Promise.all([super._refreshUser(a),this._currentServerUserCache.refresh([a])])}async _refreshUsers(){await Promise.all([super._refreshUsers(),this._serverUserCache.refreshWhere(()=>!0),this._serverUsersCache.refreshWhere(()=>!0),this._serverContactChannelsCache.refreshWhere(()=>!0),this._serverOAuthProvidersCache.refreshWhere(()=>!0),this._serverUserConnectedAccountsCache.refreshWhere(()=>!0)])}async createOAuthProvider(a){try{let b=await this._interface.createServerOAuthProvider({user_id:a.userId,provider_config_id:a.providerConfigId,account_id:a.accountId,email:a.email,allow_sign_in:a.allowSignIn,allow_connected_accounts:a.allowConnectedAccounts});return await Promise.all([this._serverOAuthProvidersCache.refresh([a.userId]),this._serverUserConnectedAccountsCache.refresh([a.userId])]),m.Result.ok(this._serverOAuthProviderFromCrud(b))}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}}},bn=a.i(664967);function bo(a){let b=[],c=`/projects/${a.id}/domains`;for(let{domain:d}of(a.config.allow_localhost&&b.push({message:"Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings",relativeFixUrl:c}),a.config.domains)){let e;try{let a=d.replace(/\*+/g,"wildcard-placeholder");e=new URL(a)}catch(e){(0,h.captureError)("production-mode-domain-not-valid",new h.HexclaveAssertionError("Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place",{domain:d,projectId:a})),b.push({message:"Trusted domain is not a valid URL: "+d,relativeFixUrl:c});continue}(0,M.isLocalhost)(e)?b.push({message:"Localhost domains are not allowed to be trusted in production mode: "+d,relativeFixUrl:c}):e.hostname.match(/^\d+(\.\d+)*$/)?b.push({message:"Direct IPs are not valid for trusted domains in production mode: "+d,relativeFixUrl:c}):"https:"!==e.protocol&&b.push({message:"Trusted domains should be HTTPS: "+d,relativeFixUrl:c})}return b}var bp=class extends bm{constructor(a,b){const c=(0,n.resolveConstructorOptions)(a),d=c.publishableClientKey??(0,n.getDefaultPublishableClientKey)();super(c,{...b,interface:b?.interface??(()=>{let a=(0,n.resolveApiUrls)(c.baseUrl);return new bn.HexclaveAdminInterface({getBaseUrl:()=>a()[0],getApiUrls:a,projectId:c.projectId??(0,n.getDefaultProjectId)(),extraRequestHeaders:c.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),clientVersion:n.clientVersion,...c.projectOwnerSession?{projectOwnerSession:c.projectOwnerSession}:{...d?{publishableClientKey:d}:{},secretServerKey:c.secretServerKey??(0,n.getDefaultSecretServerKey)(),superSecretAdminKey:c.superSecretAdminKey??(0,n.getDefaultSuperSecretAdminKey)()}})})()}),this._adminProjectCache=(0,n.createCache)(async()=>await this._interface.getProject()),this._internalApiKeysCache=(0,n.createCache)(async()=>await this._interface.listInternalApiKeys()),this._adminEmailThemeCache=(0,n.createCache)(async([a])=>await this._interface.getEmailTheme(a)),this._adminEmailThemesCache=(0,n.createCache)(async()=>await this._interface.listEmailThemes()),this._adminEmailTemplatesCache=(0,n.createCache)(async()=>await this._interface.listInternalEmailTemplates()),this._adminEmailDraftsCache=(0,n.createCache)(async()=>await this._interface.listInternalEmailDrafts()),this._adminTeamPermissionDefinitionsCache=(0,n.createCache)(async()=>await this._interface.listTeamPermissionDefinitions()),this._adminProjectPermissionDefinitionsCache=(0,n.createCache)(async()=>await this._interface.listProjectPermissionDefinitions()),this._svixTokenCache=(0,n.createCache)(async()=>await this._interface.getSvixToken()),this._metricsCache=(0,n.createCache)(async([a,b])=>{let c=b?Object.fromEntries(new URLSearchParams(b)):void 0;return await this._interface.getMetrics(a,c)}),this._userActivityCache=(0,n.createCache)(async([a])=>await this._interface.getUserActivity(a)),this._metricsUserCountsCache=(0,n.createCache)(async()=>await this._interface.getMetricsUserCounts()),this._emailPreviewCache=(0,n.createCache)(async([a,b,c,d])=>await this._interface.renderEmailPreview({themeId:a,themeTsxSource:b,templateId:c,templateTsxSource:d})),this._emailPreviewWithEditableMarkersCache=(0,n.createCache)(async([a,b,c,d,e])=>await this._interface.renderEmailPreview({themeId:a,themeTsxSource:b,templateId:c,templateTsxSource:d,editableMarkers:!0,editableSource:e})),this._configOverridesCache=(0,n.createCache)(async()=>await this._interface.getConfig()),this._stripeAccountInfoCache=(0,n.createCache)(async()=>{try{return await this._interface.getStripeAccountInfo()}catch(a){if(a?.status===404)return null;throw a}}),this._transactionsCache=(0,n.createCache)(async([a,b,c,d,e])=>await this._interface.listTransactions({cursor:a,limit:b,type:c,customerType:d,customerId:e}))}_adminConfigFromCrud(a){return JSON.parse(a.config_string)}_adminOwnedProjectFromCrud(a,b){if(null!==this._tokenStoreInit)throw new h.HexclaveAssertionError("Owned apps must always have tokenStore === null — did you not create this project with app._createOwnedApp()?");return{...this._adminProjectFromCrud(a,b),app:this}}_adminProjectFromCrud(a,b){if(a.id!==this.projectId)throw new h.HexclaveAssertionError(`The project ID of the provided project JSON (${a.id}) does not match the project ID of the app (${this.projectId})!`);let c=this;return{id:a.id,displayName:a.display_name,description:a.description,createdAt:new Date(a.created_at_millis),isProductionMode:a.is_production_mode,isDevelopmentEnvironment:a.is_development_environment,ownerTeamId:a.owner_team_id,onboardingStatus:a.onboarding_status,logoUrl:a.logo_url,logoFullUrl:a.logo_full_url,logoDarkModeUrl:a.logo_dark_mode_url,logoFullDarkModeUrl:a.logo_full_dark_mode_url,config:{signUpEnabled:a.config.sign_up_enabled,credentialEnabled:a.config.credential_enabled,magicLinkEnabled:a.config.magic_link_enabled,passkeyEnabled:a.config.passkey_enabled,clientTeamCreationEnabled:a.config.client_team_creation_enabled,clientUserDeletionEnabled:a.config.client_user_deletion_enabled,allowLocalhost:a.config.allow_localhost,oauthAccountMergeStrategy:a.config.oauth_account_merge_strategy,allowUserApiKeys:a.config.allow_user_api_keys,allowTeamApiKeys:a.config.allow_team_api_keys,oauthProviders:a.config.oauth_providers.map(a=>"shared"===a.type?{id:a.id,type:"shared"}:{id:a.id,type:"standard",clientId:a.client_id??(0,h.throwErr)("Client ID is missing"),clientSecret:a.client_secret??(0,h.throwErr)("Client secret is missing"),facebookConfigId:a.facebook_config_id,microsoftTenantId:a.microsoft_tenant_id,appleBundleIds:a.apple_bundle_ids}),emailConfig:"shared"===a.config.email_config.type?{type:"shared"}:{type:"standard",host:a.config.email_config.host??(0,h.throwErr)("Email host is missing"),port:a.config.email_config.port??(0,h.throwErr)("Email port is missing"),username:a.config.email_config.username??(0,h.throwErr)("Email username is missing"),password:a.config.email_config.password??(0,h.throwErr)("Email password is missing"),senderName:a.config.email_config.sender_name??(0,h.throwErr)("Email sender name is missing"),senderEmail:a.config.email_config.sender_email??(0,h.throwErr)("Email sender email is missing")},emailTheme:a.config.email_theme,domains:a.config.domains.map(a=>({domain:a.domain,handlerPath:a.handler_path})),createTeamOnSignUp:a.config.create_team_on_sign_up,teamCreatorDefaultPermissions:a.config.team_creator_default_permissions,teamMemberDefaultPermissions:a.config.team_member_default_permissions,userDefaultPermissions:a.config.user_default_permissions},getConfig:async()=>c._adminConfigFromCrud(await c._interface.getConfig()),useConfig(){let a=(0,n.useAsyncCache)(c._configOverridesCache,[],"project.useConfig()");return(0,i.useMemo)(()=>c._adminConfigFromCrud(a),[a])},async updateConfig(a){await c._interface.updateConfigOverride("environment",a),await c._refreshProjectConfig()},async pushConfig(a,b){var d;await c._interface.setConfigOverride("branch",a,"pushed-from-github"===(d=b.source).type?{type:"pushed-from-github",owner:d.owner,repo:d.repo,branch:d.branch,commit_hash:d.commitHash,config_file_path:d.configFilePath,workflow_path:d.workflowPath}:d),await c._refreshProjectConfig()},async updatePushedConfig(a){await c._interface.updateConfigOverride("branch",a),await c._refreshProjectConfig()},getPushedConfigSource:async()=>{var a;return"pushed-from-github"===(a=await c._interface.getPushedConfigSource()).type?{type:"pushed-from-github",owner:a.owner,repo:a.repo,branch:a.branch,commitHash:a.commit_hash,configFilePath:a.config_file_path,workflowPath:a.workflow_path}:a},async unlinkPushedConfigSource(){await c._interface.unlinkPushedConfigSource(),await c._refreshProjectConfig()},async resetConfigOverrideKeys(a,b){await c._interface.resetConfigOverrideKeys(a,b),await c._refreshProjectConfig()},getConfigOverride:async a=>JSON.parse((await c._interface.getConfigOverride(a)).config_string),async replaceConfigOverride(a,b){if("branch"===a){let d=await c._interface.getPushedConfigSource();await c._interface.setConfigOverride(a,b,d)}else await c._interface.setConfigOverride(a,b);await c._refreshProjectConfig()},async update(a){let{requirePublishableClientKey:d,...e}=a,f=S(e),g=!!f.config&&(0,E.typedValues)(f.config).some(a=>void 0!==a);(0,E.typedEntries)(f).some(([a,b])=>"config"===a?g:void 0!==b)&&(await c._interface.updateProject(f),await b()),void 0!==d&&(await c._interface.updateConfigOverride("project",{"project.requirePublishableClientKey":d}),await c._refreshProjectConfig())},async delete(){await c._interface.deleteProject()},getProductionModeErrors:async()=>bo(a),useProductionModeErrors:()=>bo(a)}}_adminEmailTemplateFromCrud(a){return{type:a.type,subject:a.subject,content:a.content,isDefault:a.is_default}}async getProject(){return this._adminProjectFromCrud(m.Result.orThrow(await this._adminProjectCache.getOrWait([],"write-only")),()=>this._refreshProject())}useProject(){let a=(0,n.useAsyncCache)(this._adminProjectCache,[],"adminApp.useProject()");return(0,i.useMemo)(()=>this._adminProjectFromCrud(a,()=>this._refreshProject()),[a])}_createInternalApiKeyBaseFromCrud(a){let b=this;return{id:a.id,description:a.description,expiresAt:new Date(a.expires_at_millis),manuallyRevokedAt:a.manually_revoked_at_millis?new Date(a.manually_revoked_at_millis):null,createdAt:new Date(a.created_at_millis),isValid(){return null===this.whyInvalid()},whyInvalid(){return this.expiresAt.getTime()<Date.now()?"expired":this.manuallyRevokedAt?"manually-revoked":null},async revoke(){let c=await b._interface.revokeInternalApiKeyById(a.id);return await b._refreshInternalApiKeys(),c}}}_createInternalApiKeyFromCrud(a){return{...this._createInternalApiKeyBaseFromCrud(a),publishableClientKey:a.publishable_client_key?{lastFour:a.publishable_client_key.last_four}:null,secretServerKey:a.secret_server_key?{lastFour:a.secret_server_key.last_four}:null,superSecretAdminKey:a.super_secret_admin_key?{lastFour:a.super_secret_admin_key.last_four}:null}}_createInternalApiKeyFirstViewFromCrud(a){return{...this._createInternalApiKeyBaseFromCrud(a),publishableClientKey:a.publishable_client_key,secretServerKey:a.secret_server_key,superSecretAdminKey:a.super_secret_admin_key}}async listInternalApiKeys(){return m.Result.orThrow(await this._internalApiKeysCache.getOrWait([],"write-only")).map(a=>this._createInternalApiKeyFromCrud(a))}useInternalApiKeys(){let a=(0,n.useAsyncCache)(this._internalApiKeysCache,[],"adminApp.useInternalApiKeys()");return(0,i.useMemo)(()=>a.map(a=>this._createInternalApiKeyFromCrud(a)),[a])}async createInternalApiKey(a){let b=await this._interface.createInternalApiKey({description:a.description,expires_at_millis:a.expiresAt.getTime(),has_publishable_client_key:a.hasPublishableClientKey,has_secret_server_key:a.hasSecretServerKey,has_super_secret_admin_key:a.hasSuperSecretAdminKey});return await this._refreshInternalApiKeys(),this._createInternalApiKeyFirstViewFromCrud(b)}useEmailThemes(){let a=(0,n.useAsyncCache)(this._adminEmailThemesCache,[],"adminApp.useEmailThemes()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name})),[a])}useEmailTemplates(){let a=(0,n.useAsyncCache)(this._adminEmailTemplatesCache,[],"adminApp.useEmailTemplates()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source})),[a])}useEmailDrafts(){let a=(0,n.useAsyncCache)(this._adminEmailDraftsCache,[],"adminApp.useEmailDrafts()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source,sentAt:a.sent_at_millis?new Date(a.sent_at_millis):null})),[a])}async listEmailThemes(){return m.Result.orThrow(await this._adminEmailThemesCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name}))}async listEmailTemplates(){return m.Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source}))}async listEmailDrafts(){return m.Result.orThrow(await this._adminEmailDraftsCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source,sentAt:a.sent_at_millis?new Date(a.sent_at_millis):null}))}async createTeamPermissionDefinition(a){let b=await this._interface.createTeamPermissionDefinition({id:a.id,description:a.description,contained_permission_ids:a.containedPermissionIds});return await this._adminTeamPermissionDefinitionsCache.refresh([]),this._serverTeamPermissionDefinitionFromCrud(b)}async updateTeamPermissionDefinition(a,b){await this._interface.updateTeamPermissionDefinition(a,{description:b.description,contained_permission_ids:b.containedPermissionIds}),await this._adminTeamPermissionDefinitionsCache.refresh([])}async deleteTeamPermissionDefinition(a){await this._interface.deleteTeamPermissionDefinition(a),await this._adminTeamPermissionDefinitionsCache.refresh([])}async listTeamPermissionDefinitions(){return m.Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([],"write-only")).map(a=>this._serverTeamPermissionDefinitionFromCrud(a))}async listTeamPermissionDefinitionsPaginated(a){let b=await this._interface.listTeamPermissionDefinitionsPaginated(a);return{items:b.items.map(a=>this._serverTeamPermissionDefinitionFromCrud(a)),nextCursor:b.nextCursor}}useTeamPermissionDefinitions(){let a=(0,n.useAsyncCache)(this._adminTeamPermissionDefinitionsCache,[],"adminApp.useTeamPermissionDefinitions()");return(0,i.useMemo)(()=>a.map(a=>this._serverTeamPermissionDefinitionFromCrud(a)),[a])}async createProjectPermissionDefinition(a){let b=await this._interface.createProjectPermissionDefinition({id:a.id,description:a.description,contained_permission_ids:a.containedPermissionIds});return await this._adminProjectPermissionDefinitionsCache.refresh([]),this._serverProjectPermissionDefinitionFromCrud(b)}async updateProjectPermissionDefinition(a,b){await this._interface.updateProjectPermissionDefinition(a,{description:b.description,contained_permission_ids:b.containedPermissionIds}),await this._adminProjectPermissionDefinitionsCache.refresh([])}async deleteProjectPermissionDefinition(a){await this._interface.deleteProjectPermissionDefinition(a),await this._adminProjectPermissionDefinitionsCache.refresh([])}async listProjectPermissionDefinitions(){return m.Result.orThrow(await this._adminProjectPermissionDefinitionsCache.getOrWait([],"write-only")).map(a=>this._serverProjectPermissionDefinitionFromCrud(a))}useProjectPermissionDefinitions(){let a=(0,n.useAsyncCache)(this._adminProjectPermissionDefinitionsCache,[],"adminApp.useProjectPermissionDefinitions()");return(0,i.useMemo)(()=>a.map(a=>this._serverProjectPermissionDefinitionFromCrud(a)),[a])}useSvixToken(){let a=(0,n.useAsyncCache)(this._svixTokenCache,[],"adminApp.useSvixToken()");return{token:a.token,url:a.url}}async _refreshProject(){await Promise.all([super._refreshProject(),this._adminProjectCache.refresh([])])}async _refreshProjectConfig(){await Promise.all([this._configOverridesCache.refresh([]),this._adminProjectCache.refresh([])])}async _refreshInternalApiKeys(){await this._internalApiKeysCache.refresh([])}async _refreshUsers(){await Promise.all([super._refreshUsers(),this._metricsCache.refreshWhere(()=>!0),this._metricsUserCountsCache.refresh([])])}get[R.hexclaveAppInternalsSymbol](){return{...super[R.hexclaveAppInternalsSymbol],useMetrics:(a=!1,b)=>{let c=(()=>{if(null==b)return"";let a=new URLSearchParams;for(let c of["browser","country_code","device","os","referrer","since","until"]){let d=b[c];null!=d&&a.set(c,d)}return a.toString()})();return(0,n.useAsyncCache)(this._metricsCache,[a,c],"adminApp.useMetrics()")},useUserActivity:a=>(0,n.useAsyncCache)(this._userActivityCache,[a],"adminApp.useUserActivity()"),useMetricsUserCounts:()=>(0,n.useAsyncCache)(this._metricsUserCountsCache,[],"adminApp.useMetricsUserCounts()")}}async sendTestEmail(a){let b;try{b=await this._interface.sendTestEmail({recipient_email:a.recipientEmail,email_config:{...(0,E.pick)(a.emailConfig,["host","port","username","password"]),sender_email:a.emailConfig.senderEmail,sender_name:a.emailConfig.senderName}})}catch(a){if(a instanceof k.KnownErrors.ItemQuantityInsufficientAmount)return m.Result.error({errorMessage:"Monthly email sending limit exceeded for your plan. Please upgrade your plan or wait until next month before sending more test emails."});throw a}return b.success?m.Result.ok(void 0):m.Result.error({errorMessage:b.error_message??(0,h.throwErr)("Email test error not specified")})}async sendTestWebhook(a){let b=await this._interface.sendTestWebhook({endpoint_id:a.endpointId});return b.success?m.Result.ok(void 0):m.Result.error({errorMessage:b.error_message??(0,h.throwErr)("Webhook test error not specified")})}async listSentEmails(){return(await this._interface.listSentEmails()).items.map(a=>({id:a.id,to:a.to??[],subject:a.subject,recipient:a.to?.[0]??"",sentAt:new Date(a.sent_at_millis),error:a.error}))}async setupManagedEmailProvider(a){let b=await this._interface.setupManagedEmailProvider({subdomain:a.subdomain,sender_local_part:a.senderLocalPart});return{domainId:b.domain_id,subdomain:b.subdomain,senderLocalPart:b.sender_local_part,nameServerRecords:b.name_server_records,status:b.status}}async checkManagedEmailStatus(a){return{status:(await this._interface.checkManagedEmailStatus({domain_id:a.domainId,subdomain:a.subdomain,sender_local_part:a.senderLocalPart})).status}}async listManagedEmailDomains(){return(await this._interface.listManagedEmailDomains()).items.map(a=>({domainId:a.domain_id,subdomain:a.subdomain,senderLocalPart:a.sender_local_part,status:a.status,nameServerRecords:a.name_server_records}))}async applyManagedEmailProvider(a){let b=await this._interface.applyManagedEmailProvider({domain_id:a.domainId});return await this._refreshProjectConfig(),b}async deleteManagedEmailDomain(a){return await this._interface.deleteManagedEmailDomain({resend_domain_id:a.resendDomainId})}async sendSignInInvitationEmail(a,b){await this._interface.sendSignInInvitationEmail(a,b)}async createEmailTemplate(a){let b=await this._interface.createEmailTemplate(a);return await this._adminEmailTemplatesCache.refresh([]),b}async deleteEmailTemplate(a){await this._interface.deleteEmailTemplate(a),await this._adminEmailTemplatesCache.refresh([])}async createEmailDraft(a){let b=await this._interface.createEmailDraft({display_name:a.displayName,theme_id:a.themeId,tsx_source:a.tsxSource});return await this._adminEmailDraftsCache.refresh([]),b}async updateEmailDraft(a,b){await this._interface.updateEmailDraft(a,{display_name:b.displayName,theme_id:b.themeId,tsx_source:b.tsxSource}),await this._adminEmailDraftsCache.refresh([])}async deleteEmailDraft(a){await this._interface.deleteEmailDraft(a);let b=this._adminEmailDraftsCache.getIfCached([]);"ok"===b.status&&"ok"===b.data.status&&this._adminEmailDraftsCache.forceSetCachedValue([],m.Result.ok(b.data.data.filter(b=>b.id!==a))),await this._adminEmailDraftsCache.refresh([])}async refreshEmailDrafts(){await this._adminEmailDraftsCache.refresh([])}async saveChatMessage(a,b){await this._interface.saveChatMessage(a,b)}async listChatMessages(a){return await this._interface.listChatMessages(a)}async rewriteTemplateSourceWithAI(a){return{tsxSource:(await this._interface.rewriteTemplateSourceWithAI(a)).tsx_source}}async createEmailTheme(a){let b=await this._interface.createEmailTheme(a);return await this._adminEmailThemesCache.refresh([]),b}async getEmailPreview(a){return(await this._interface.renderEmailPreview(a)).html}useEmailPreview(a){return(0,n.useAsyncCache)(this._emailPreviewCache,[a.themeId,a.themeTsxSource,a.templateId,a.templateTsxSource],"adminApp.useEmailPreview()").html}async getEmailPreviewWithEditableMarkers(a){let b=await this._interface.renderEmailPreview({...a,editableMarkers:!0,editableSource:a.editableSource});return{html:b.html,editableRegions:b.editable_regions}}useEmailPreviewWithEditableMarkers(a){let b=(0,n.useAsyncCache)(this._emailPreviewWithEditableMarkersCache,[a.themeId,a.themeTsxSource,a.templateId,a.templateTsxSource,a.editableSource],"adminApp.useEmailPreviewWithEditableMarkers()");return{html:b.html,editableRegions:b.editable_regions}}useEmailTheme(a){let b=(0,n.useAsyncCache)(this._adminEmailThemeCache,[a],"adminApp.useEmailTheme()");return{displayName:b.display_name,tsxSource:b.tsx_source}}async updateEmailTheme(a,b){await this._interface.updateEmailTheme(a,b),await this._adminEmailThemesCache.refresh([]),await this._adminEmailThemeCache.invalidate([a])}async deleteEmailTheme(a){await this._interface.deleteEmailTheme(a),await this._adminEmailThemesCache.refresh([]),await this._adminEmailThemeCache.invalidate([a])}async updateEmailTemplate(a,b,c){let d=await this._interface.updateEmailTemplate(a,b,c);return await this._adminEmailTemplatesCache.refresh([]),{renderedHtml:d.rendered_html}}async setupPayments(){let a=await this._interface.setupPayments();return await this._stripeAccountInfoCache.refresh([]),a}async createStripeWidgetAccountSession(){return await this._interface.createStripeWidgetAccountSession()}async getPaymentMethodConfigs(){return await this._interface.getPaymentMethodConfigs()}async updatePaymentMethodConfigs(a,b){await this._interface.updatePaymentMethodConfigs(a,b)}async createItemQuantityChange(a){await this._interface.updateItemQuantity({itemId:a.itemId,..."userId"in a?{userId:a.userId}:"teamId"in a?{teamId:a.teamId}:{customCustomerId:a.customCustomerId}},{delta:a.quantity,expires_at:a.expiresAt,description:a.description,allow_negative:!0})}async refundTransaction(a){let b=await this._interface.refundTransaction({type:a.type,id:a.id,invoiceId:a.invoiceId,amountUsd:a.amountUsd,endAction:a.endAction});return await this._transactionsCache.invalidateWhere(()=>!0),{refundTransactionId:b.refundTransactionId}}async listTransactions(a){return m.Result.orThrow(await this._transactionsCache.getOrWait([a.cursor,a.limit,a.type,a.customerType,a.customerId],"write-only"))}_emailOutboxCrudToAdmin(a){let b,c=a.to;b="user-primary-email"===c.type?{type:"user-primary-email",userId:c.user_id}:"user-custom-emails"===c.type?{type:"user-custom-emails",userId:c.user_id,emails:c.emails}:{type:"custom-emails",emails:c.emails};let d={id:a.id,createdAt:new Date(a.created_at_millis),updatedAt:new Date(a.updated_at_millis),tsxSource:a.tsx_source,themeId:a.theme_id??null,to:b,scheduledAt:new Date(a.scheduled_at_millis),createdWith:a.created_with,emailDraftId:a.email_draft_id,emailProgrammaticCallTemplateId:a.email_programmatic_call_template_id,variables:a.variables??{},isPaused:!1,hasRendered:!1,hasDelivered:!1,sendRetries:a.send_retries,nextSendRetryAt:a.next_send_retry_at_millis?new Date(a.next_send_retry_at_millis):null,sendAttemptErrors:a.send_attempt_errors?a.send_attempt_errors.map(a=>({attemptNumber:a.attempt_number,timestamp:a.timestamp,externalMessage:a.external_message,externalDetails:a.external_details,internalMessage:a.internal_message,internalDetails:a.internal_details})):null},e=a.has_rendered?{...d,startedRenderingAt:new Date(a.started_rendering_at_millis),renderedAt:new Date(a.rendered_at_millis),subject:a.subject,html:a.html,text:a.text,isTransactional:a.is_transactional,isHighPriority:a.is_high_priority,notificationCategoryId:a.notification_category_id,hasRendered:!0}:null,f=e&&a.started_sending_at_millis?{...e,startedSendingAt:new Date(a.started_sending_at_millis)}:null,g=f&&a.has_delivered?{...f,deliveredAt:new Date(a.delivered_at_millis),hasDelivered:!0}:null;switch(a.status){case"paused":return{...d,status:"paused",simpleStatus:"in-progress",isPaused:!0};case"preparing":return{...d,status:"preparing",simpleStatus:"in-progress"};case"rendering":return{...d,status:"rendering",simpleStatus:"in-progress",startedRenderingAt:new Date(a.started_rendering_at_millis)};case"render-error":return{...d,status:"render-error",simpleStatus:"error",startedRenderingAt:new Date(a.started_rendering_at_millis),renderedAt:new Date(a.rendered_at_millis),renderError:a.render_error};case"scheduled":return{...e,status:"scheduled",simpleStatus:"in-progress"};case"queued":return{...e,status:"queued",simpleStatus:"in-progress"};case"sending":return{...f,status:"sending",simpleStatus:"in-progress"};case"server-error":return{...f,status:"server-error",simpleStatus:"error",errorAt:new Date(a.error_at_millis),serverError:a.server_error};case"skipped":return{...d,status:"skipped",simpleStatus:"ok",skippedAt:new Date(a.skipped_at_millis),skippedReason:a.skipped_reason,skippedDetails:a.skipped_details??{},hasRendered:a.has_rendered,startedRenderingAt:a.started_rendering_at_millis?new Date(a.started_rendering_at_millis):void 0,renderedAt:a.rendered_at_millis?new Date(a.rendered_at_millis):void 0,subject:a.subject,html:a.html,text:a.text,isTransactional:a.is_transactional,isHighPriority:a.is_high_priority,notificationCategoryId:a.notification_category_id,startedSendingAt:a.started_sending_at_millis?new Date(a.started_sending_at_millis):void 0};case"bounced":return{...f,status:"bounced",simpleStatus:"error",bouncedAt:new Date(a.bounced_at_millis)};case"delivery-delayed":return{...f,status:"delivery-delayed",simpleStatus:"ok",deliveryDelayedAt:new Date(a.delivery_delayed_at_millis)};case"sent":return{...g,status:"sent",simpleStatus:"ok",canHaveDeliveryInfo:a.can_have_delivery_info};case"opened":return{...g,status:"opened",simpleStatus:"ok",openedAt:new Date(a.opened_at_millis),canHaveDeliveryInfo:!0};case"clicked":return{...g,status:"clicked",simpleStatus:"ok",clickedAt:new Date(a.clicked_at_millis),canHaveDeliveryInfo:!0};case"marked-as-spam":return{...g,status:"marked-as-spam",simpleStatus:"ok",markedAsSpamAt:new Date(a.marked_as_spam_at_millis),canHaveDeliveryInfo:!0};default:throw new h.HexclaveAssertionError(`Unknown email outbox status: ${a.status}`,{status:a.status})}}async listOutboxEmails(a){let b=await this._interface.listOutboxEmails({status:a?.status,simple_status:a?.simpleStatus,limit:a?.limit,cursor:a?.cursor});return{items:b.items.map(a=>this._emailOutboxCrudToAdmin(a)),nextCursor:b.pagination?.next_cursor??null}}async getOutboxEmail(a){let b=await this._interface.getOutboxEmail(a);return this._emailOutboxCrudToAdmin(b)}async updateOutboxEmail(a,b){let c=await this._interface.updateOutboxEmail(a,{is_paused:b.isPaused,scheduled_at_millis:b.scheduledAtMillis,cancel:b.cancel,tsx_source:b.tsxSource,theme_id:b.themeId});return this._emailOutboxCrudToAdmin(c)}async pauseOutboxEmail(a){return await this.updateOutboxEmail(a,{isPaused:!0})}async unpauseOutboxEmail(a){return await this.updateOutboxEmail(a,{isPaused:!1})}async cancelOutboxEmail(a){return await this.updateOutboxEmail(a,{cancel:!0})}useTransactions(a){return(0,n.useAsyncCache)(this._transactionsCache,[a.cursor,a.limit,a.type,a.customerType,a.customerId],"adminApp.useTransactions()")}async getStripeAccountInfo(){return await this._interface.getStripeAccountInfo()}useStripeAccountInfo(){return(0,n.useAsyncCache)(this._stripeAccountInfoCache,[],"adminApp.useStripeAccountInfo()")}async queryAnalytics(a){return await this._interface.queryAnalytics(a)}async getAnalyticsClickmap(a){return await this._interface.getAnalyticsClickmap({kind:a.kind,member_user_ids:a.memberUserIds,route_path:a.routePath,route_regex:a.routeRegex,url_pattern:a.urlPattern,user_id:a.userId,replay_id:a.replayId,device:a.device,viewport_width_min:a.viewportWidthMin,viewport_width_max:a.viewportWidthMax,sampling:a.sampling,since:a.since,until:a.until})}async createAnalyticsClickmapToken(a){return await this._interface.createAnalyticsClickmapToken(a)}async listSessionReplays(a){let b=await this._interface.listSessionReplays({cursor:a?.cursor,limit:a?.limit,user_ids:a?.userIds,team_ids:a?.teamIds,duration_ms_min:a?.durationMsMin,duration_ms_max:a?.durationMsMax,last_event_at_from_millis:a?.lastEventAtFromMillis,last_event_at_to_millis:a?.lastEventAtToMillis,click_count_min:a?.clickCountMin});return{items:b.items.map(a=>({id:a.id,projectUser:{id:a.project_user.id,displayName:a.project_user.display_name,primaryEmail:a.project_user.primary_email},startedAt:new Date(a.started_at_millis),lastEventAt:new Date(a.last_event_at_millis),chunkCount:a.chunk_count,eventCount:a.event_count})),nextCursor:b.pagination.next_cursor}}async getSessionReplay(a){let b=await this._interface.getSessionReplay(a);return{id:b.id,projectUser:{id:b.project_user.id,displayName:b.project_user.display_name,primaryEmail:b.project_user.primary_email},startedAt:new Date(b.started_at_millis),lastEventAt:new Date(b.last_event_at_millis),chunkCount:b.chunk_count,eventCount:b.event_count}}async listSessionReplayChunks(a,b){let c=await this._interface.listSessionReplayChunks(a,{cursor:b?.cursor,limit:b?.limit});return{items:c.items.map(a=>({id:a.id,batchId:a.batch_id,sessionReplaySegmentId:a.session_replay_segment_id,browserSessionId:a.browser_session_id,eventCount:a.event_count,byteLength:a.byte_length,firstEventAt:new Date(a.first_event_at_millis),lastEventAt:new Date(a.last_event_at_millis),createdAt:new Date(a.created_at_millis)})),nextCursor:c.pagination.next_cursor}}async getSessionReplayChunkEvents(a,b){return await this._interface.getSessionReplayChunkEvents(a,b)}async getSessionReplayEvents(a,b){let c=await this._interface.getSessionReplayEvents(a,b);return{chunks:c.chunks.map(a=>({id:a.id,batchId:a.batch_id,sessionReplaySegmentId:a.session_replay_segment_id,eventCount:a.event_count,byteLength:a.byte_length,firstEventAt:new Date(a.first_event_at_millis),lastEventAt:new Date(a.last_event_at_millis),createdAt:new Date(a.created_at_millis)})),chunkEvents:c.chunk_events.map(a=>({chunkId:a.chunk_id,events:a.events}))}}async previewAffectedUsersByOnboardingChange(a,b){let c=await this._interface.previewAffectedUsersByOnboardingChange({require_email_verification:a.requireEmailVerification},b);return{affectedUsers:c.affected_users.map(a=>({id:a.id,displayName:a.display_name,primaryEmail:a.primary_email,restrictedReason:a.restricted_reason})),totalAffectedCount:c.total_affected_count}}};let{_HexclaveAdminAppImpl:bq,_HexclaveClientAppImpl:br,_HexclaveServerAppImpl:bs}=(bl.LazyStackAdminAppImpl.value=bp,{_HexclaveAdminAppImpl:U(bp),_HexclaveClientAppImpl:U(bl),_HexclaveServerAppImpl:U(bm)});var bt=a.i(91775);if(a.i(861159),"internal"!==(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_PROJECT_ID"))throw Error("This project is not configured correctly. stack-dashboard must always use the internal project.");let bu="true"===(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_IS_PREVIEW"),bv="true"===(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_IS_REMOTE_DEVELOPMENT_ENVIRONMENT"),bw=new br({baseUrl:{browser:(0,bt.getPublicEnvVar)("NEXT_PUBLIC_BROWSER_STACK_API_URL")??(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_API_URL")??(0,h.throwErr)("NEXT_PUBLIC_BROWSER_STACK_API_URL is not set"),server:(0,bt.getPublicEnvVar)("NEXT_PUBLIC_SERVER_STACK_API_URL")??(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_API_URL")??(0,h.throwErr)("NEXT_PUBLIC_SERVER_STACK_API_URL is not set")},projectId:"internal",publishableClientKey:(0,bt.getPublicEnvVar)("NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY"),tokenStore:bu||bv?"memory":"nextjs-cookie",urls:{afterSignIn:"/projects",afterSignUp:"/new-project",afterSignOut:"/"},analytics:{enabled:!bv,replays:{maskAllInputs:!1,enabled:!bu&&!bv}}});a.s(["getHexclaveServerApp",0,function(){if(!d){if((0,f.isRemoteDevelopmentEnvironmentEnabled)())throw new h.HexclaveAssertionError("hexclaveServerApp is not available in the local remote development environment dashboard.");d=new bs({inheritsFrom:bw})}return d}],485689)}];
6
+ `);let b=await aH(this._interface,{provider:a.providerId,redirectUrl:this._getOAuthCallbackRedirectUri(),errorRedirectUrl:this.urls.error,providerScope:(0,K.mergeScopeStrings)(a.scope||"",(this._oauthScopesOnSignIn[a.providerId]??[]).join(" "))},a.session);return await this._redirectTo({url:b}),await (0,g.neverResolve)()}if(!c)return null;let d=b.oauth_providers.find(b=>b.id===a.providerId)?.account_id??"";return{id:a.providerId,provider:a.providerId,providerAccountId:d,async getAccessToken(){let b=await a.getOrWaitOAuthToken();if(!b)throw new h.HexclaveAssertionError(`Failed to retrieve an access token for this connected account (provider: ${a.providerId}). This usually means the OAuth refresh token has been revoked or expired. The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`);return b},useAccessToken(){let b=a.useOAuthToken();if(!b)throw new h.HexclaveAssertionError(`Failed to retrieve an access token for this connected account (provider: ${a.providerId}). This usually means the OAuth refresh token has been revoked or expired. The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`);return b}}}_createOAuthConnectionFromCrudItem(a,b){let c=this,d=a.provider,e=a.provider_account_id;return{id:d,provider:d,providerAccountId:e,async getAccessToken(a){let f=a?.scopes?.join(" ")??"",g=m.Result.orThrow(await c._currentUserOAuthConnectionAccessTokensByAccountCache.getOrWait([b,d,e,f],"write-only"));if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)},useAccessToken(a){let f=a?.scopes?.join(" ")??"",g=(0,n.useAsyncCache)(c._currentUserOAuthConnectionAccessTokensByAccountCache,[b,d,e,f],"connection.useAccessToken()");if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)}}}constructor(c,d){this._uniqueIdentifier=void 0,this._sessionRecorder=null,this._eventTracker=null,this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY=!1,this._ownedAdminApps=new W.DependenciesMap,this._currentUserCache=(0,n.createCacheBySession)(async a=>(this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY&&await (0,g.wait)(2e3),a.isKnownToBeInvalid())?null:await this._interface.getClientUserByToken(a)),this._currentProjectCache=(0,n.createCache)(async()=>m.Result.orThrow(await this._interface.getClientProject())),this._ownedProjectsCache=(0,n.createCacheBySession)(async a=>await this._interface.listProjects(a)),this._currentUserPermissionsCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.listCurrentUserTeamPermissions({teamId:b,recursive:c},a)),this._currentUserProjectPermissionsCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listCurrentUserProjectPermissions({recursive:b},a)),this._currentUserTeamsCache=(0,n.createCacheBySession)(async a=>await this._interface.listCurrentUserTeams(a)),this._currentUserOAuthConnectionAccessTokensCache=(0,n.createCacheBySession)(async(a,[b,c])=>{try{return{accessToken:(await this._interface.createProviderAccessToken(b,c||"",a)).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._currentUserOAuthConnectionCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._getUserOAuthConnectionCacheFn({getUser:async()=>m.Result.orThrow(await this._currentUserCache.getOrWait([a],"write-only")),getOrWaitOAuthToken:async()=>m.Result.orThrow(await this._currentUserOAuthConnectionAccessTokensCache.getOrWait([a,b,c||""],"write-only")),useOAuthToken:()=>(0,n.useAsyncCache)(this._currentUserOAuthConnectionAccessTokensCache,[a,b,c||""],"connection.useAccessToken()"),providerId:b,scope:c,redirect:d,session:a})),this._currentUserConnectedAccountsCache=(0,n.createCacheBySession)(async a=>(await this._interface.listConnectedAccounts(a)).items.map(b=>this._createOAuthConnectionFromCrudItem(b,a))),this._currentUserOAuthConnectionAccessTokensByAccountCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>{try{return{accessToken:(await this._interface.createProviderAccessTokenByAccount(b,c,d,a)).access_token}}catch(a){if(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a))return null;throw a}}),this._currentUserValidConnectedAccountForProviderCache=(0,n.createCacheBySession)(async(a,[b,c])=>{let d=m.Result.orThrow(await this._currentUserConnectedAccountsCache.getOrWait([a],"write-only")).filter(a=>a.provider===b),e=c?c.split(" "):void 0;for(let a of d)if("ok"===(await a.getAccessToken({scopes:e})).status)return a;let f=await aH(this._interface,{provider:b,redirectUrl:this._getOAuthCallbackRedirectUri(),errorRedirectUrl:this.urls.error,providerScope:(0,K.mergeScopeStrings)(c,(this._oauthScopesOnSignIn[b]??[]).join(" "))},a);return await this._redirectTo({url:f}),await (0,g.neverResolve)()}),this._teamMemberProfilesCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listTeamMemberProfiles({teamId:b},a)),this._teamInvitationsCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listTeamInvitations({teamId:b},a)),this._currentUserTeamProfileCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.getTeamMemberProfile({teamId:b,userId:"me"},a)),this._currentUserTeamInvitationsCache=(0,n.createCacheBySession)(async a=>await this._interface.listCurrentUserTeamInvitations(a)),this._clientContactChannelsCache=(0,n.createCacheBySession)(async a=>await this._interface.listClientContactChannels(a)),this._userApiKeysCache=(0,n.createCacheBySession)(async a=>await this._interface.listProjectApiKeys({user_id:"me"},a,"client")),this._teamApiKeysCache=(0,n.createCacheBySession)(async(a,[b])=>await this._interface.listProjectApiKeys({team_id:b},a,"client")),this._notificationCategoriesCache=(0,n.createCacheBySession)(async a=>await this._interface.listNotificationCategories(a)),this._currentUserOAuthProvidersCache=(0,n.createCacheBySession)(async a=>await this._interface.listOAuthProviders({user_id:"me"},a)),this._userItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({userId:b,itemId:c},a)),this._teamItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({teamId:b,itemId:c},a)),this._customItemCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getItem({customCustomerId:b,itemId:c},a)),this._userProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"user",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._teamProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"team",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._customProductsCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listProducts({customer_type:"custom",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._userInvoicesCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listInvoices({customer_type:"user",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._teamInvoicesCache=(0,n.createCacheBySession)(async(a,[b,c,d])=>await this._interface.listInvoices({customer_type:"team",customer_id:b,cursor:c??void 0,limit:d??void 0},a)),this._customerBillingCache=(0,n.createCacheBySession)(async(a,[b,c])=>await this._interface.getCustomerBilling(b,c,a)),this._convexPartialUserCache=(0,n.createCache)(async([a])=>await this._getPartialUserFromConvex(a)),this._trustedParentDomainCache=(0,n.createCache)(async([a])=>await this._getTrustedParentDomain(a)),this._anonymousSignUpInProgress=null,this._prefetchedCrossDomainHandoffParams=null,this._prefetchedCrossDomainHandoffParamsFetchedAt=0,this._isPrefetchingCrossDomainHandoffParams=!1,this._pendingAuthResolutionPromises=[],this._memoryTokenStore=(0,n.createEmptyTokenStore)(),this._nextServerCookiesTokenStores=new WeakMap,this._requestTokenStores=new WeakMap,this._storedBrowserCookieTokenStore=null,this._mostRecentQueuedCookieRefreshIndex=0,this._sessionsByTokenStoreAndSessionKey=new WeakMap,this._botChallengeSiteKeysWarned=!1;const e=(0,n.resolveConstructorOptions)(c);if(!b.LazyStackAdminAppImpl.value)throw new h.HexclaveAssertionError("Admin app implementation not initialized. Did you import the _HexclaveClientApp from hexclave-app/apps/implementations/index.ts? You can't import it directly from ./apps/implementations/client-app-impl.ts as that causes a circular dependency (see the comment at _LazyHexclaveAdminAppImpl for more details).");this._options=e,this._extraOptions=d;const f=e.projectId??(0,n.getDefaultProjectId)();if("internal"!==f&&!f.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i))throw Error(`Invalid project ID: ${f}. Project IDs must be UUIDs. Please check your environment variables and/or your StackApp.`);const i=e.publishableClientKey??(0,n.getDefaultPublishableClientKey)();if(d&&d.interface)this._interface=d.interface;else{const a=(0,n.resolveApiUrls)(e.baseUrl);this._interface=new L.HexclaveClientInterface({getBaseUrl:()=>a()[0],getAnalyticsBaseUrl:()=>(0,n.getAnalyticsBaseUrl)(a()[0]),getApiUrls:a,extraRequestHeaders:e.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),projectId:f,clientVersion:n.clientVersion,...null!=i?{publishableClientKey:i}:{},prepareRequest:async()=>{await ab?.()}})}this._tokenStoreInit=e.tokenStore,this._redirectMethod=e.redirectMethod||((0,P.isBrowserLike)()?"window":"none"),this._redirectMethod=e.redirectMethod||"nextjs",this._urlOptions=e.urls??{},this._oauthScopesOnSignIn=e.oauthScopesOnSignIn??{},(0,P.isBrowserLike)()&&("cookie"===e.tokenStore||"nextjs-cookie"===e.tokenStore)&&((0,g.runAsynchronously)(this._trustedParentDomainCache.getOrWait([window.location.hostname],"write-only")),this._ensureCrossSubdomainCookieExists()),d&&d.uniqueIdentifier&&(this._uniqueIdentifier=d.uniqueIdentifier,this._initUniqueIdentifier()),this._analyticsOptions=e.analytics;const j=async()=>(this._ensurePersistentTokenStore(),await this.getPartialUser({from:"token",or:"anonymous-if-exists"}))?await this._getSession():(await this.getUser({or:"anonymous"}))._internalSession,l=this._analyticsOptions?.enabled!==!1,o=function(a){return{...a?.replays,enabled:a?.replays?.enabled??!0}}(this._analyticsOptions);if(l&&(0,P.isBrowserLike)()&&this._hasPersistentTokenStore()&&o.enabled&&(this._sessionRecorder=new aR({projectId:this.projectId,sendBatch:async(a,b)=>await this._interface.sendSessionReplayBatch(a,await j(),b)},o),this._sessionRecorder.start()),l&&(0,P.isBrowserLike)()&&this._hasPersistentTokenStore()&&(this._eventTracker=new aV({projectId:this.projectId,sendBatch:async(a,b)=>await this._interface.sendAnalyticsEventBatch(a,await j(),b)}),this._eventTracker.start()),(0,P.isBrowserLike)()&&(this._isOAuthCallbackUrlHosted()||this._currentUrlLooksLikeNestedCrossDomainOAuthCallback())&&this._currentUrlLooksLikeHexclaveOAuthCallback()&&this._trackPendingAuthResolution(async()=>{(0,P.isBrowserLike)()&&await this.callOAuthCallback({dontWarnAboutMissingQueryParams:!0})}),(0,P.isBrowserLike)()){const a=new URL(window.location.href);this._trackPendingAuthResolution(async()=>{await this._maybeHandleNestedCrossDomainAuth(a)})}(0,P.isBrowserLike)()&&!1!==e.devTool&&function(b){bb=b,function(){if(ba&&(ba(),ba=null),!a9()||!bb||!(0,a4.canMountIntoDom)())return;let b=++bc,c=bb;(0,g.runAsynchronously)(async()=>{let d=await (!bd&&(bd=a.A(913572).then(a=>a.createDevTool).catch(a=>{throw bd=null,a})),bd);b!==bc||a9()&&bb===c&&(0,a4.canMountIntoDom)()&&(ba=d(c))},{noErrorLogging:!0,onError:a=>{(0,h.captureError)("dev-tool-mount",a)}})}()}(this),(0,P.isBrowserLike)()&&function(b){a5=b,(0,a4.canMountIntoDom)()&&function(){try{if("1"!==sessionStorage.getItem(a3.CLICKMAP_OVERLAY_RESUME_STORAGE_KEY))return!1;return sessionStorage.removeItem(a3.CLICKMAP_OVERLAY_RESUME_STORAGE_KEY),!0}catch{return!1}}()&&function(){if(a6||!a5||!(0,a4.canMountIntoDom)())return;let b=++a7,c=a5;(0,g.runAsynchronously)(async()=>{let d=await (!a8&&(a8=a.A(728584).then(a=>a.openClickmapOverlay).catch(a=>{throw a8=null,a})),a8);b!==a7||!a6&&a5===c&&(0,a4.canMountIntoDom)()&&(a6=d(c,()=>{a6=null}))},{noErrorLogging:!0,onError:a=>{(0,h.captureError)("clickmap-mount",a)}})}()}(this)}_initUniqueIdentifier(){if(!this._uniqueIdentifier)throw new h.HexclaveAssertionError("Unique identifier not initialized");if(bg.has(this._uniqueIdentifier))throw new h.HexclaveAssertionError("A Stack client app with the same unique identifier already exists");bg.set(this._uniqueIdentifier,[this._extraOptions?.checkString??void 0,this])}_trackPendingAuthResolution(a){let b=(async()=>{await Promise.resolve();try{await a()}catch(a){(0,h.captureError)("pending-auth-resolution-failed",a)}})();this._pendingAuthResolutionPromises.push(b),(0,g.runAsynchronously)(async()=>{try{await b}finally{this._pendingAuthResolutionPromises=this._pendingAuthResolutionPromises.filter(a=>a!==b)}})}async _awaitPendingAuthResolutions(a,b){b?.awaitPendingAuthResolutions!==!1&&void 0===a&&this._hasPersistentTokenStore()&&0!==this._pendingAuthResolutionPromises.length&&await Promise.all(this._pendingAuthResolutionPromises)}_usePendingAuthResolutions(a){void 0===a&&this._hasPersistentTokenStore()&&0!==this._pendingAuthResolutionPromises.length&&(0,l.use)(Promise.all(this._pendingAuthResolutionPromises))}_isOAuthCallbackUrlHosted(){let a=this._urlOptions.oauthCallback??this._urlOptions.default;return"string"!=typeof a&&a?.type==="hosted"}_currentUrlLooksLikeOAuthCallback(){return!1}_currentUrlLooksLikeHexclaveOAuthCallback(){return!1}_currentUrlLooksLikeNestedCrossDomainOAuthCallback(){return!1}_getOAuthCallbackRedirectUri(){if(!this._isOAuthCallbackUrlHosted())return this.urls.oauthCallback;throw new h.HexclaveAssertionError("Hosted OAuth callback URLs require a browser environment to use the current URL as the redirect URI")}async _fetchCurrentRefreshTokenIdIfSignedIn(a){let b=await (await this._getSession(a?.overrideTokenStoreInit,a)).fetchNewTokens();return b?.refreshToken==null?null:b.accessToken.payload.refresh_token_id}async _addNestedCrossDomainAuthParamsToRedirectUrl(a){let b=new URL(a.url,a.currentUrl);if(b.origin===a.currentUrl.origin)return a.url;let c=await this._fetchCurrentRefreshTokenIdIfSignedIn({awaitPendingAuthResolutions:a.awaitPendingAuthResolutions,overrideTokenStoreInit:a.overrideTokenStoreInit});return null==c?a.url:(b.searchParams.set("stack_nested_cross_domain_auth_refresh_token_id",c),b.searchParams.set("stack_nested_cross_domain_auth_callback_url",new URL(this._getOAuthCallbackRedirectUri(),a.currentUrl).toString()),b.toString())}async _maybeHandleNestedCrossDomainAuth(a){return!1}_getUniqueIdentifier(){return this._uniqueIdentifier||(this._uniqueIdentifier=(0,$.generateUuid)(),this._initUniqueIdentifier()),this._uniqueIdentifier}async _checkFeatureSupport(a,b){return await this._interface.checkFeatureSupport({...b,name:a})}_useCheckFeatureSupport(a,b){throw(0,g.runAsynchronously)(this._checkFeatureSupport(a,b)),new h.HexclaveAssertionError(`${a} is not currently supported. Please reach out to Stack support for more information.`)}get _legacyRefreshTokenCookieName(){return`stack-refresh-${this.projectId}`}get _refreshTokenCookieName(){return`hexclave-refresh-${this.projectId}`}_getRefreshTokenDefaultCookieNameForSecure(a){return`${a?"__Host-":""}${this._refreshTokenCookieName}--default`}_getCustomRefreshCookieName(a){let b=(0,I.encodeBase32)(new TextEncoder().encode(a.toLowerCase()));return`${this._refreshTokenCookieName}--custom-${b}`}_getDomainFromCustomRefreshCookieName(a){for(let b of[this._refreshTokenCookieName,this._legacyRefreshTokenCookieName]){let c=`${b}--custom-`;if(a.startsWith(c))try{return new TextDecoder().decode((0,I.decodeBase32)(a.slice(c.length)))}catch{break}}return null}_formatRefreshCookieValue(a,b){return JSON.stringify({refresh_token:a,updated_at_millis:b})}_formatAccessCookieValue(a,b){return a&&b?JSON.stringify([a,b]):null}_parseStructuredRefreshCookie(a){if(!a)return null;let b=(0,V.parseJson)(a);if("ok"!==b.status||"object"!=typeof b.data||null===b.data)return console.warn("Failed to parse structured refresh cookie"),null;let c=b.data,d="refresh_token"in c&&"string"==typeof c.refresh_token?c.refresh_token:null,e="updated_at_millis"in c&&"number"==typeof c.updated_at_millis?c.updated_at_millis:null;return d?{refreshToken:d,updatedAt:e}:(console.warn("Refresh token not found in structured refresh cookie"),null)}_extractRefreshTokenFromCookieMap(a){let{legacyNames:b,structuredPrefixes:c}=this._getRefreshTokenCookieNamePatterns(),d=[`${this._refreshTokenCookieName}--`,`__Host-${this._refreshTokenCookieName}--`],e=b=>{let c=null;for(let[d,e]of Object.entries(a)){if(!b.some(a=>d.startsWith(a)))continue;let a=this._parseStructuredRefreshCookie(e);if(!a)continue;let f=a.updatedAt??-1/0,g=c?.updatedAt??-1/0;(!c||f>g)&&(c=a)}return c},f=e(d);if(f)return{refreshToken:f.refreshToken,updatedAt:f.updatedAt??null};for(let c of b){let b=a[c];if(b)return{refreshToken:b,updatedAt:null}}let g=e(c);return g?{refreshToken:g.refreshToken,updatedAt:g.updatedAt??null}:{refreshToken:null,updatedAt:null}}_getTokensFromCookies(a){let{refreshToken:b}=this._extractRefreshTokenFromCookieMap(a),c=a[this._accessTokenCookieName]??a[this._legacyAccessTokenCookieName]??null,d=null;if(c&&c.startsWith('["')){let a=(0,V.parseJson)(c);"ok"===a.status&&"object"==typeof a.data&&null!==a.data&&Array.isArray(a.data)&&2===a.data.length&&"string"==typeof a.data[0]&&"string"==typeof a.data[1]?a.data[0]===b&&(d=a.data[1]):console.warn("Access token cookie has invalid format")}return{refreshToken:b,accessToken:d}}_getCurrentBrowserCookieTokenStoreValue(a){let b=this._getTokensFromCookies(this._getAllBrowserCookies());return{refreshToken:b.refreshToken,accessToken:b.accessToken??(a?.refreshToken===b.refreshToken?a.accessToken:null)}}get _accessTokenCookieName(){return"hexclave-access"}get _legacyAccessTokenCookieName(){return"stack-access"}_getAllBrowserCookies(){if(!(0,P.isBrowserLike)())throw new h.HexclaveAssertionError("Cannot get browser cookies on the server!");return _.parseCookie(document.cookie||"")}_getRefreshTokenCookieNamePatterns(){return{legacyNames:[this._legacyRefreshTokenCookieName,"stack-refresh"],structuredPrefixes:[`${this._refreshTokenCookieName}--`,`__Host-${this._refreshTokenCookieName}--`,`${this._legacyRefreshTokenCookieName}--`,`__Host-${this._legacyRefreshTokenCookieName}--`]}}_collectRefreshTokenCookieNames(a){let{legacyNames:b,structuredPrefixes:c}=this._getRefreshTokenCookieNamePatterns(),d=new Set;for(let c of b)a[c]&&d.add(c);for(let b of Object.keys(a))c.some(a=>b.startsWith(a))&&d.add(b);return d}_prepareRefreshCookieUpdate(a,b,c,d){let e=this._collectRefreshTokenCookieNames(a);e.delete(d);let f=b?Date.now():null;return{updatedAt:f,refreshCookieValue:b&&null!==f?this._formatRefreshCookieValue(b,f):null,accessTokenPayload:this._formatAccessCookieValue(b,c),cookieNamesToDelete:[...e]}}_ensureCrossSubdomainCookieExists(){(0,g.runAsynchronously)(async()=>{let a=window.location.hostname,b=await this._trustedParentDomainCache.getOrWait([a],"read-write");if("error"===b.status||!b.data)return;let c=this._getAllBrowserCookies(),d=this._getCustomRefreshCookieName(b.data);if(c[d])return;let{refreshToken:e,updatedAt:f}=this._extractRefreshTokenFromCookieMap(c);e&&f&&aA(d,this._formatRefreshCookieValue(e,f),{maxAge:31536e3,domain:b.data})})}_queueCustomRefreshCookieUpdate(a,b,c){(0,g.runAsynchronously)(async()=>{let d;this._mostRecentQueuedCookieRefreshIndex++;let e=this._mostRecentQueuedCookieRefreshIndex;if(!(d=(0,P.isBrowserLike)()?window.location.hostname:await bl()))return void console.warn("No hostname found when queueing custom refresh cookie update");let f=await this._trustedParentDomainCache.getOrWait([d],"read-write"),g={maxAge:31536e3,noOpIfServerComponent:!0},h=async(a,b)=>{let d=this._getCustomRefreshCookieName(a),e={...g,domain:a};"browser"===c?aA(d,b,e):await aB(d,b,e)};if("error"===f.status||!f.data||e!==this._mostRecentQueuedCookieRefreshIndex)return;let i=a&&b?this._formatRefreshCookieValue(a,b):null;await h(f.data,i);let j=await aw(),k=this._getRefreshTokenDefaultCookieNameForSecure(j);"browser"===c?aA(k,null,g):await aB(k,null,g)})}async _getTrustedRedirectConfig(){let a=m.Result.orThrow(await this._currentProjectCache.getOrWait([],"write-only"));return{allowLocalhost:a.config.allow_localhost,trustedDomains:[...a.config.domains.map(a=>a.domain),new URL((0,aJ.getHostedHandlerUrl)({projectId:this.projectId,pagePath:""})).origin]}}async _getTrustedParentDomain(a){return(0,Q.getTrustedParentDomain)(a,(await this._getTrustedRedirectConfig()).trustedDomains)}_getBrowserCookieTokenStore(){if(!(0,P.isBrowserLike)())throw Error("Cannot use cookie token store on the server!");if(null===this._storedBrowserCookieTokenStore){this._storedBrowserCookieTokenStore=new T.Store(this._getCurrentBrowserCookieTokenStoreValue(null));let a=!0;setInterval(()=>{if(a){let a=this._storedBrowserCookieTokenStore.get(),b=this._getCurrentBrowserCookieTokenStoreValue(a);(0,E.deepPlainEquals)(b,a)||this._storedBrowserCookieTokenStore.set(b)}},100),this._storedBrowserCookieTokenStore.onChange(b=>{try{let c=b.refreshToken,d="https:"===window.location.protocol,e=this._getRefreshTokenDefaultCookieNameForSecure(d),{updatedAt:f,refreshCookieValue:g,accessTokenPayload:h,cookieNamesToDelete:i}=this._prepareRefreshCookieUpdate(this._getAllBrowserCookies(),c,b.accessToken??null,e);aA(e,g,{maxAge:31536e3,secure:d}),aA(this._accessTokenCookieName,h,{maxAge:86400}),i.forEach(a=>{let b=this._getDomainFromCustomRefreshCookieName(a);aC(a,b?{domain:b}:{})}),this._queueCustomRefreshCookieUpdate(c,f,"browser"),a=!0}catch(b){if((0,P.isBrowserLike)())throw b;a=!1}})}else{let a=this._storedBrowserCookieTokenStore.get(),b=this._getCurrentBrowserCookieTokenStoreValue(a);(0,E.deepPlainEquals)(b,a)||this._storedBrowserCookieTokenStore.set(b)}return this._storedBrowserCookieTokenStore}_getOrCreateTokenStore(a,b){let c=void 0===b?this._tokenStoreInit:b;switch(c){case"cookie":return this._getBrowserCookieTokenStore();case"nextjs-cookie":if((0,P.isBrowserLike)())return this._getBrowserCookieTokenStore();{let b=new T.Store(this._getTokensFromCookies(a.getAll()));return b.onChange(b=>{(0,g.runAsynchronously)(async()=>{let c=b.refreshToken,d=await aw(),e=this._getRefreshTokenDefaultCookieNameForSecure(d),{updatedAt:f,refreshCookieValue:g,accessTokenPayload:h,cookieNamesToDelete:i}=this._prepareRefreshCookieUpdate(a.getAll(),c,b.accessToken??null,e);await Promise.all([aB(e,g,{maxAge:31536e3,noOpIfServerComponent:!0}),aB(this._accessTokenCookieName,h,{maxAge:86400,noOpIfServerComponent:!0})]),i.length>0&&await Promise.all(i.map(a=>{let b=this._getDomainFromCustomRefreshCookieName(a);return aD(a,{noOpIfServerComponent:!0,...b?{domain:b}:{}})})),this._queueCustomRefreshCookieUpdate(c,f,"server")})}),b}case"memory":return this._memoryTokenStore;default:if(null===c)return(0,n.createEmptyTokenStore)();if("object"==typeof c&&"headers"in c){if(this._requestTokenStores.has(c))return this._requestTokenStores.get(c);let b=bk(c.headers,"authorization");if(b){let a=function(a){let b,c=a.match(/^Bearer\s+(.+)$/i);if(null==c)return null;let d=c[1].trim(),e=d.startsWith(bi)?bi:d.startsWith(bh)?bh:null;if(null==e)return null;let f=d.slice(e.length);if(0===f.length)throw Error("Invalid Authorization header format. Expected `Bearer stackauth_<base64(getAuthJson())>`.");try{let a=new TextDecoder().decode((0,I.decodeBase64)(f));b=JSON.parse(a)}catch(a){throw Error("Invalid stackauth authorization header.",{cause:a})}if(null==b||"object"!=typeof b||Array.isArray(b))throw Error("Invalid stackauth authorization payload. Expected an object.");let g=Reflect.get(b,"accessToken"),h=Reflect.get(b,"refreshToken");if(null!=g&&"string"!=typeof g)throw Error("Invalid stackauth authorization payload. `accessToken` must be a string or null.");if(null!=h&&"string"!=typeof h)throw Error("Invalid stackauth authorization payload. `refreshToken` must be a string or null.");return{accessToken:g??null,refreshToken:h??null}}(b);if(null!=a){let b=new T.Store({accessToken:a.accessToken,refreshToken:a.refreshToken});return this._requestTokenStores.set(c,b),b}}let d=bk(c.headers,"x-stack-auth");if(d){let b;try{if(b=JSON.parse(d),"object"!=typeof b)throw Error("x-stack-auth header must be a JSON object");if(null===b)throw Error("x-stack-auth header must not be null")}catch(a){throw Error("Invalid x-stack-auth header.",{cause:a})}return this._getOrCreateTokenStore(a,{accessToken:b.accessToken??null,refreshToken:b.refreshToken??null})}let e=bk(c.headers,"cookie"),f=_.parseCookie(e||""),g=new T.Store(this._getTokensFromCookies(f));return this._requestTokenStores.set(c,g),g}if("accessToken"in c||"refreshToken"in c)return new T.Store({refreshToken:c.refreshToken,accessToken:c.accessToken});throw Error(`Invalid token store ${c}`)}}_useTokenStore(a){(0,l.suspendIfSsr)();let b=as();return this._getOrCreateTokenStore(b,a)}_getSessionFromTokenStore(a){let b=a.get(),c=o.InternalSession.calculateSessionKey(b),d=c?this._sessionsByTokenStoreAndSessionKey.get(a)?.get(c):null;if(d)return d;let e=this._interface.createSession({refreshToken:b.refreshToken,accessToken:b.accessToken});e.onAccessTokenChange(b=>{a.update(a=>o.InternalSession.calculateSessionKey(a)===c?{...a,accessToken:b?.token??null}:a)}),e.onInvalidate(()=>{a.update(a=>o.InternalSession.calculateSessionKey(a)===c?{...a,accessToken:null,refreshToken:null}:a)});let f=this._sessionsByTokenStoreAndSessionKey.get(a)??new Map;return this._sessionsByTokenStoreAndSessionKey.set(a,f),f.set(c,e),e}async _getSession(a,b){await this._awaitPendingAuthResolutions(a,b);let c=this._getOrCreateTokenStore(await this._createCookieHelper(a),a);return this._getSessionFromTokenStore(c)}_useSession(a){this._usePendingAuthResolutions(a);let b=this._useTokenStore(a),c=(0,i.useCallback)(a=>{var c;let d,e,f,g,h;return d=(c={tokenStore:b,getSession:()=>this._getSessionFromTokenStore(b),onTokenStoreChange:a}).minMillisUntilExpiration??3e4,e=c.maxMillisSinceIssued??6e4,g=(f=c.getSession()).startRefreshingAccessToken(d,e),h=c.tokenStore.onChange(()=>{let a=c.getSession();a.sessionKey!==f.sessionKey&&(g.unsubscribe(),g=(f=a).startRefreshingAccessToken(d,e)),c.onTokenStoreChange()}),()=>{h.unsubscribe(),g.unsubscribe()}},[b]),d=(0,i.useCallback)(()=>this._getSessionFromTokenStore(b),[b]);return i.default.useSyncExternalStore(c,d,d)}async _signInToAccountWithTokens(a){if(!("accessToken"in a)||!("refreshToken"in a))throw new h.HexclaveAssertionError("Invalid tokens object; can't sign in with this",{tokens:a});let b=this._getOrCreateTokenStore(await this._createCookieHelper());b.set(a);let c=this._getSessionFromTokenStore(b);c.updateAccessToken(a),(0,g.runAsynchronously)(this._currentUserCache.getOrWait([c],"write-only"))}_getTokenStoreInitForFreshTokens(a){if(null!=a.accessToken)return{accessToken:a.accessToken,refreshToken:a.refreshToken}}_hasPersistentTokenStore(a){return(void 0!==a?a:this._tokenStoreInit)!==null}_ensurePersistentTokenStore(a){if(!this._hasPersistentTokenStore(a))throw Error("Cannot call this function on a Stack app without a persistent token store. Make sure the tokenStore option on the constructor is set to a non-null value when initializing Stack.\n\nStack uses token stores to access access tokens of the current user. For example, on web frontends it is commonly the string value 'cookies' for cookie storage.")}_isInternalProject(){return"internal"===this.projectId}_ensureInternalProject(){if(!this._isInternalProject())throw Error("Cannot call this function on a Stack app with a project ID other than 'internal'.")}_clientProjectFromCrud(a){return{id:a.id,displayName:a.display_name,config:{signUpEnabled:a.config.sign_up_enabled,credentialEnabled:a.config.credential_enabled,magicLinkEnabled:a.config.magic_link_enabled,passkeyEnabled:a.config.passkey_enabled,clientTeamCreationEnabled:a.config.client_team_creation_enabled,clientUserDeletionEnabled:a.config.client_user_deletion_enabled,allowTeamApiKeys:a.config.allow_team_api_keys,allowUserApiKeys:a.config.allow_user_api_keys,oauthProviders:a.config.enabled_oauth_providers.map(a=>({id:a.id}))}}}_clientPermissionFromCrud(a){return{id:a.id}}_clientTeamUserFromCrud(a){return{id:a.user_id,teamProfile:{displayName:a.display_name,profileImageUrl:a.profile_image_url}}}_clientSentTeamInvitationFromCrud(a,b){return{id:b.id,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),revoke:async()=>{await this._interface.revokeTeamInvitation(b.id,b.team_id,a),await this._teamInvitationsCache.refresh([a,b.team_id])}}}_clientReceivedTeamInvitationFromCrud(a,b){let c=this;return{id:b.id,teamId:b.team_id,teamDisplayName:b.team_display_name,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),accept:async()=>{await c._interface.acceptTeamInvitationById(b.id,a),await Promise.all([c._currentUserTeamInvitationsCache.refresh([a]),c._currentUserTeamsCache.refresh([a]),c._teamInvitationsCache.refresh([a,b.team_id])])}}}_baseApiKeyFromCrud(a){return{id:a.id,description:a.description,expiresAt:a.expires_at_millis?new Date(a.expires_at_millis):void 0,manuallyRevokedAt:a.manually_revoked_at_millis?new Date(a.manually_revoked_at_millis):null,createdAt:new Date(a.created_at_millis),..."team"===a.type?{type:"team",teamId:a.team_id}:{type:"user",userId:a.user_id},value:"string"==typeof a.value?a.value:{lastFour:a.value.last_four},isValid:function(){return null===this.whyInvalid()},whyInvalid:function(){return this.manuallyRevokedAt?"manually-revoked":this.expiresAt&&this.expiresAt<new Date?"expired":null}}}_clientApiKeyFromCrud(a,b){return{...this._baseApiKeyFromCrud(b),async revoke(){await this.update({revoked:!0})},update:async c=>{await this._interface.updateProjectApiKey("team"===b.type?{team_id:b.team_id}:{user_id:b.user_id},b.id,c,a,"client"),"team"===b.type?await this._teamApiKeysCache.refresh([a,b.team_id]):await this._userApiKeysCache.refresh([a])}}}_clientTeamFromCrud(a,b){let c=this;return{id:a.id,displayName:a.display_name,profileImageUrl:a.profile_image_url,clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,...this._createCustomer(a.id,"team",b),async inviteUser(d){await c._interface.sendTeamInvitation({teamId:a.id,email:d.email,session:b,callbackUrl:d.callbackUrl??D(c._getUrls().teamInvitation,"callbackUrl")}),await c._teamInvitationsCache.refresh([b,a.id])},listUsers:async()=>m.Result.orThrow(await c._teamMemberProfilesCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientTeamUserFromCrud(a)),useUsers:()=>(0,n.useAsyncCache)(c._teamMemberProfilesCache,[b,a.id],"team.useUsers()").map(a=>c._clientTeamUserFromCrud(a)),listInvitations:async()=>m.Result.orThrow(await c._teamInvitationsCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientSentTeamInvitationFromCrud(b,a)),useInvitations:()=>(0,n.useAsyncCache)(c._teamInvitationsCache,[b,a.id],"team.useInvitations()").map(a=>c._clientSentTeamInvitationFromCrud(b,a)),async update(d){await c._interface.updateTeam({data:{display_name:d.displayName,profile_image_url:d.profileImageUrl,client_metadata:d.clientMetadata},teamId:a.id},b),await c._currentUserTeamsCache.refresh([b])},async delete(){await c._interface.deleteTeam(a.id,b),await c._currentUserTeamsCache.refresh([b])},useApiKeys:()=>(0,n.useAsyncCache)(c._teamApiKeysCache,[b,a.id],"team.useApiKeys()").map(a=>c._clientApiKeyFromCrud(b,a)),listApiKeys:async()=>m.Result.orThrow(await c._teamApiKeysCache.getOrWait([b,a.id],"write-only")).map(a=>c._clientApiKeyFromCrud(b,a)),async createApiKey(d){let e=await c._interface.createProjectApiKey(await F("team",a.id,d),b,"client");return await c._teamApiKeysCache.refresh([b,a.id]),c._clientApiKeyFromCrud(b,e)}}}_clientContactChannelFromCrud(a,b){let c=this;return{id:a.id,value:a.value,type:a.type,isVerified:a.is_verified,isPrimary:a.is_primary,usedForAuth:a.used_for_auth,async sendVerificationEmail(d){await c._interface.sendCurrentUserContactChannelVerificationEmail(a.id,d?.callbackUrl||D(c._getUrls().emailVerification,"callbackUrl"),b)},async update(d){await c._interface.updateClientContactChannel(a.id,{value:d.value,used_for_auth:d.usedForAuth,is_primary:d.isPrimary},b),await c._clientContactChannelsCache.refresh([b])},async delete(){await c._interface.deleteClientContactChannel(a.id,b),await c._clientContactChannelsCache.refresh([b])}}}_clientNotificationCategoryFromCrud(a,b){let c=this;return{id:a.notification_category_id,name:a.notification_category_name,enabled:a.enabled,canDisable:a.can_disable,async setEnabled(d){await c._interface.setNotificationsEnabled(a.notification_category_id,d,b),await c._notificationCategoriesCache.refresh([b])}}}_clientOAuthProviderFromCrud(a,b){let c=this;return{id:a.id,type:a.type,userId:a.user_id,email:a.email,allowSignIn:a.allow_sign_in,allowConnectedAccounts:a.allow_connected_accounts,async update(d){try{return await c._interface.updateOAuthProvider(a.user_id,a.id,{allow_sign_in:d.allowSignIn,allow_connected_accounts:d.allowConnectedAccounts},b),await Promise.all([c._currentUserOAuthProvidersCache.refresh([b]),c._currentUserConnectedAccountsCache.refresh([b])]),m.Result.ok(void 0)}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}},async delete(){await c._interface.deleteOAuthProvider(a.user_id,a.id,b),await Promise.all([c._currentUserOAuthProvidersCache.refresh([b]),c._currentUserConnectedAccountsCache.refresh([b])])}}}_clientItemFromCrud(a){return{displayName:a.display_name,quantity:a.quantity,nonNegativeQuantity:Math.max(0,a.quantity)}}_customerProductsFromResponse(a){return Object.assign(a.items.map(a=>({id:a.id,quantity:a.quantity,displayName:a.product.display_name,customerType:a.product.customer_type,isServerOnly:a.product.server_only,stackable:a.product.stackable,type:a.type,subscription:a.subscription?{subscriptionId:a.subscription.subscription_id,currentPeriodEnd:a.subscription.current_period_end?new Date(a.subscription.current_period_end):null,cancelAtPeriodEnd:a.subscription.cancel_at_period_end,isCancelable:a.subscription.is_cancelable}:null,switchOptions:a.switch_options?.map(a=>({productId:a.product_id,displayName:a.product.display_name,prices:a.product.prices}))})),{nextCursor:a.pagination.next_cursor??null})}_customerInvoicesFromResponse(a){return Object.assign(a.items.map(a=>({status:a.status,amountTotal:a.amount_total,hostedInvoiceUrl:a.hosted_invoice_url,createdAt:new Date(a.created_at_millis)})),{nextCursor:a.pagination.next_cursor??null})}_customerBillingFromResponse(a){return{hasCustomer:a.has_customer,defaultPaymentMethod:a.default_payment_method}}_createAuth(a){let b=this;return{_internalSession:a,currentSession:{async getTokens(){let b=await a.getOrFetchLikelyValidTokens(2e4,75e3);return{accessToken:b?.accessToken.token??null,refreshToken:b?.refreshToken?.token??null}},useTokens(){let b=(0,i.useCallback)(b=>{let{unsubscribe:c}=a.onInvalidate(b),{unsubscribe:d}=a.onAccessTokenChange(b);return()=>{c(),d()}},[a]),c=(0,i.useCallback)(()=>a.isKnownToBeInvalid()?null:a.getAccessTokenIfNotExpiredYet(2e4,75e3)?.token??null,[a]),d=i.default.useSyncExternalStore(b,c,c);return null!==d||a.isKnownToBeInvalid()||(d=(0,l.use)(a.getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??null),{accessToken:d,refreshToken:a.getRefreshToken()?.token??null}}},async getAccessToken(){return(await this.currentSession.getTokens()).accessToken},useAccessToken(){return this.currentSession.useTokens().accessToken},async getRefreshToken(){return(await this.currentSession.getTokens()).refreshToken},useRefreshToken(){return this.currentSession.useTokens().refreshToken},async getAuthorizationHeader(){return bj(await this.getAuthJson())},useAuthorizationHeader(){return bj(this.useAuthJson())},async getAuthHeaders(){return{"x-stack-auth":JSON.stringify(await this.getAuthJson())}},useAuthHeaders(){return{"x-stack-auth":JSON.stringify(this.useAuthJson())}},async getAuthJson(){return await this.currentSession.getTokens()},useAuthJson(){return this.currentSession.useTokens()},signOut:c=>b._signOut(a,c)}}_editableTeamProfileFromCrud(a,b){let c=this;return{displayName:a.display_name,profileImageUrl:a.profile_image_url,async update(d){await c._interface.updateTeamMemberProfile({teamId:a.team_id,userId:a.user_id,profile:{display_name:d.displayName,profile_image_url:d.profileImageUrl}},b),await c._currentUserTeamProfileCache.refresh([b,a.team_id])}}}_createBaseUser(a){return{id:a.id,displayName:a.display_name,primaryEmail:a.primary_email,primaryEmailVerified:a.primary_email_verified,profileImageUrl:a.profile_image_url,signedUpAt:new Date(a.signed_up_at_millis),clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,hasPassword:a.has_password,emailAuthEnabled:a.auth_with_email,otpAuthEnabled:a.otp_auth_enabled,oauthProviders:a.oauth_providers,passkeyAuthEnabled:a.passkey_auth_enabled,isMultiFactorRequired:a.requires_totp_mfa,isAnonymous:a.is_anonymous,isRestricted:a.is_restricted,restrictedReason:a.restricted_reason,toClientJson:()=>a}}_createUserExtraFromCurrent(a,b){let c=this;return{getActiveSessions:async()=>(await c._interface.listSessions(b)).items.map(a=>c._clientSessionFromCrud(a)),async revokeSession(a){await c._interface.deleteSession(a,b)},setDisplayName(a){return this.update({displayName:a})},setClientMetadata(a){return this.update({clientMetadata:a})},async setSelectedTeam(a){await this.update({selectedTeamId:"string"==typeof a?a:a?.id??null})},getConnectedAccount:async function a(a,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof a&&"provider"in a&&"providerAccountId"in a){let{provider:d,providerAccountId:e}=a,f=m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")).find(a=>a.provider===d&&a.providerAccountId===e);return f||null}return m.Result.orThrow(await c._currentUserOAuthConnectionCache.getOrWait([b,a,e,d?.or==="redirect"],"write-only"))},useConnectedAccount:function(a,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof a&&"provider"in a&&"providerAccountId"in a){let{provider:d,providerAccountId:e}=a;return(0,n.useAsyncCache)(c._currentUserConnectedAccountsCache,[b],"user.useConnectedAccount()").find(a=>a.provider===d&&a.providerAccountId===e)??null}return(0,n.useAsyncCache)(c._currentUserOAuthConnectionCache,[b,a,e,d?.or==="redirect"],"user.useConnectedAccount()")},listConnectedAccounts:async()=>m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")),useConnectedAccounts:()=>(0,n.useAsyncCache)(c._currentUserConnectedAccountsCache,[b],"user.useConnectedAccounts()"),async linkConnectedAccount(a,d){let e=d?.scopes?.join(" ")??"",f=await aH(c._interface,{provider:a,redirectUrl:c._getOAuthCallbackRedirectUri(),errorRedirectUrl:c._getUrls().error,providerScope:(0,K.mergeScopeStrings)(e,(c._oauthScopesOnSignIn[a]??[]).join(" "))},b);return await c._redirectTo({url:f}),await (0,g.neverResolve)()},async getOrLinkConnectedAccount(a,d){for(let e of m.Result.orThrow(await c._currentUserConnectedAccountsCache.getOrWait([b],"write-only")).filter(b=>b.provider===a))if("ok"===(await e.getAccessToken({scopes:d?.scopes})).status)return e;return await this.linkConnectedAccount(a,d),await (0,g.neverResolve)()},useOrLinkConnectedAccount(a,d){let e=d?.scopes?.join(" ")??"";return(0,n.useAsyncCache)(c._currentUserValidConnectedAccountForProviderCache,[b,a,e],"user.useOrLinkConnectedAccount()")},async getTeam(a){return(await this.listTeams()).find(b=>b.id===a)??null},useTeam(a){let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},listTeams:async()=>m.Result.orThrow(await c._currentUserTeamsCache.getOrWait([b],"write-only")).map(a=>c._clientTeamFromCrud(a,b)),useTeams(){let a=(0,n.useAsyncCache)(c._currentUserTeamsCache,[b],"user.useTeams()");return(0,i.useMemo)(()=>a.map(a=>c._clientTeamFromCrud(a,b)),[a])},async createTeam(a){let d=await c._interface.createClientTeam({display_name:a.displayName,profile_image_url:a.profileImageUrl,creator_user_id:"me"},b);return await c._currentUserTeamsCache.refresh([b]),await this.update({selectedTeamId:d.id}),c._clientTeamFromCrud(d,b)},async leaveTeam(a){await c._interface.leaveTeam(a.id,b)},listTeamInvitations:async()=>m.Result.orThrow(await c._currentUserTeamInvitationsCache.getOrWait([b],"write-only")).map(a=>c._clientReceivedTeamInvitationFromCrud(b,a)),useTeamInvitations(){let a=(0,n.useAsyncCache)(c._currentUserTeamInvitationsCache,[b],"user.useTeamInvitations()");return(0,i.useMemo)(()=>a.map(a=>c._clientReceivedTeamInvitationFromCrud(b,a)),[a])},async listPermissions(a,d){if(a&&"id"in a){let e=d?.recursive??!0;return m.Result.orThrow(await c._currentUserPermissionsCache.getOrWait([b,a.id,e],"write-only")).map(a=>c._clientPermissionFromCrud(a))}{let d=a?.recursive??!0;return m.Result.orThrow(await c._currentUserProjectPermissionsCache.getOrWait([b,d],"write-only")).map(a=>c._clientPermissionFromCrud(a))}},usePermissions(a,d){if(a&&"id"in a){let e=d?.recursive??!0,f=(0,n.useAsyncCache)(c._currentUserPermissionsCache,[b,a.id,e],"user.usePermissions()");return(0,i.useMemo)(()=>f.map(a=>c._clientPermissionFromCrud(a)),[f])}{let d=a?.recursive??!0,e=(0,n.useAsyncCache)(c._currentUserProjectPermissionsCache,[b,d],"user.usePermissions()");return(0,i.useMemo)(()=>e.map(a=>c._clientPermissionFromCrud(a)),[e])}},usePermission(a,b){if(a&&"string"!=typeof a){let c=this.usePermissions(a);return(0,i.useMemo)(()=>c.find(a=>a.id===b)??null,[c,b])}{let b=this.usePermissions();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}},async getPermission(a,b){return a&&"string"!=typeof a?(await this.listPermissions(a)).find(a=>a.id===b)??null:(await this.listPermissions()).find(b=>b.id===a)??null},async hasPermission(a,b){return a&&"string"!=typeof a?await this.getPermission(a,b)!==null:await this.getPermission(a)!==null},update:async a=>await c._updateClientUser(a,b),async sendVerificationEmail(d){if(!a.primary_email)throw new h.HexclaveAssertionError("User does not have a primary email");return await c._interface.sendVerificationEmail(a.primary_email,d?.callbackUrl??D(c._getUrls().emailVerification,"callbackUrl"),b)},async updatePassword(a){let d=await c._interface.updatePassword(a,b);return await c._currentUserCache.refresh([b]),d},async setPassword(a){let d=await c._interface.setPassword(a,b);return await c._currentUserCache.refresh([b]),d},selectedTeam:a.selected_team&&this._clientTeamFromCrud(a.selected_team,b),async getTeamProfile(a){let d=m.Result.orThrow(await c._currentUserTeamProfileCache.getOrWait([b,a.id],"write-only"));return c._editableTeamProfileFromCrud(d,b)},useTeamProfile(a){let d=(0,n.useAsyncCache)(c._currentUserTeamProfileCache,[b,a.id],"user.useTeamProfile()");return c._editableTeamProfileFromCrud(d,b)},async delete(){await c._interface.deleteCurrentUser(b),b.markInvalid()},listContactChannels:async()=>m.Result.orThrow(await c._clientContactChannelsCache.getOrWait([b],"write-only")).map(a=>c._clientContactChannelFromCrud(a,b)),useContactChannels:()=>(0,n.useAsyncCache)(c._clientContactChannelsCache,[b],"user.useContactChannels()").map(a=>c._clientContactChannelFromCrud(a,b)),async createContactChannel(a){let d=await c._interface.createClientContactChannel({value:a.value,type:a.type,used_for_auth:a.usedForAuth,is_primary:a.isPrimary,user_id:"me"},b);return await c._clientContactChannelsCache.refresh([b]),c._clientContactChannelFromCrud(d,b)},useNotificationCategories:()=>(0,n.useAsyncCache)(c._notificationCategoriesCache,[b],"user.useNotificationCategories()").map(a=>c._clientNotificationCategoryFromCrud(a,b)),listNotificationCategories:async()=>m.Result.orThrow(await c._notificationCategoriesCache.getOrWait([b],"write-only")).map(a=>c._clientNotificationCategoryFromCrud(a,b)),useApiKeys:()=>(0,n.useAsyncCache)(c._userApiKeysCache,[b],"user.useApiKeys()").map(a=>c._clientApiKeyFromCrud(b,a)),listApiKeys:async()=>(await c._interface.listProjectApiKeys({user_id:"me"},b,"client")).map(a=>c._clientApiKeyFromCrud(b,a)),async createApiKey(a){let d=await c._interface.createProjectApiKey(await F("user","me",a),b,"client");return await c._userApiKeysCache.refresh([b]),c._clientApiKeyFromCrud(b,d)},useOAuthProviders:()=>(0,n.useAsyncCache)(c._currentUserOAuthProvidersCache,[b],"user.useOAuthProviders()").map(a=>c._clientOAuthProviderFromCrud(a,b)),listOAuthProviders:async()=>m.Result.orThrow(await c._currentUserOAuthProvidersCache.getOrWait([b],"write-only")).map(a=>c._clientOAuthProviderFromCrud(a,b)),useOAuthProvider(a){let b=this.useOAuthProviders();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async getOAuthProvider(a){return(await this.listOAuthProviders()).find(b=>b.id===a)??null},async registerPasskey(a){let d,e=(await c._getCurrentUrl())?.hostname;if(!e)throw new h.HexclaveAssertionError("hostname must be provided if the Stack App does not have a redirect method");let f=await c._interface.initiatePasskeyRegistration({},b);if("ok"!==f.status)return m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to get initiation options for passkey registration"));let{options_json:g,code:i}=f.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==g.rp.id)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${g.rp.id}`);g.rp.id=e;try{d=await z({optionsJSON:g})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return(0,h.captureError)("passkey-registration-failed",a),m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to start passkey registration due to unknown error"))}let j=await c._interface.registerPasskey({credential:d,code:i},b);return await c._refreshUser(b),j}}}_createInternalUserExtra(a){let b=this;return this._ensureInternalProject(),{createProject:c=>b._createProject(a,c),async transferProject(c,d){await b._interface.transferProject(a,c,d),await b._refreshProject()},listOwnedProjects:()=>b._listOwnedProjects(a),useOwnedProjects:()=>b._useOwnedProjects(a)}}_createCustomer(a,b,c){let d=this,e=c??d._interface.createSession({refreshToken:null}),f="user"===b?{userId:a}:{teamId:a};return{async getBilling(){let c=m.Result.orThrow(await d._customerBillingCache.getOrWait([e,b,a],"write-only"));return d._customerBillingFromResponse(c)},useBilling(){let c=(0,n.useAsyncCache)(d._customerBillingCache,[e,b,a],"customer.useBilling()");return d._customerBillingFromResponse(c)},async createPaymentMethodSetupIntent(){let c=await d._interface.createCustomerPaymentMethodSetupIntent(b,a,e);return{clientSecret:c.client_secret,stripeAccountId:c.stripe_account_id}},async setDefaultPaymentMethodFromSetupIntent(c){let f=await d._interface.setDefaultCustomerPaymentMethodFromSetupIntent(b,a,c,e);return await d._customerBillingCache.refresh([e,b,a]),f.default_payment_method},getItem:async a=>await d.getItem({itemId:a,...f}),useItem:a=>d.useItem({itemId:a,...f}),listProducts:async a=>await d.listProducts({...a,...f}),useProducts:a=>d.useProducts({...a,...f}),listInvoices:async a=>await d.listInvoices({...a,...f}),useInvoices:a=>d.useInvoices({...a,...f}),createCheckoutUrl:async c=>await d._interface.createCheckoutUrl(b,a,c.productId,e,c.returnUrl,"client"),async switchSubscription(c){await d._interface.switchSubscription({customer_type:b,customer_id:a,from_product_id:c.fromProductId,to_product_id:c.toProductId,price_id:c.priceId,quantity:c.quantity},e),await d._customerBillingCache.refresh([e,b,a]),"user"===b?await d._userProductsCache.invalidateWhere(([b,c])=>b===e&&c===a):await d._teamProductsCache.invalidateWhere(([b,c])=>b===e&&c===a)}}}async getItem(a){let b,c=await this._getSession();return b="userId"in a?m.Result.orThrow(await this._userItemCache.getOrWait([c,a.userId,a.itemId],"write-only")):"teamId"in a?m.Result.orThrow(await this._teamItemCache.getOrWait([c,a.teamId,a.itemId],"write-only")):m.Result.orThrow(await this._customItemCache.getOrWait([c,a.customCustomerId,a.itemId],"write-only")),this._clientItemFromCrud(b)}useItem(a){let b=this._useSession(),[c,d]="userId"in a?[this._userItemCache,a.userId]:"teamId"in a?[this._teamItemCache,a.teamId]:[this._customItemCache,a.customCustomerId],e=(0,n.useAsyncCache)(c,[b,d,a.itemId],"app.useItem()");return this._clientItemFromCrud(e)}async listProducts(a){let b=(await this.getUser())?._internalSession??await this._getSession();if("userId"in a){let c=m.Result.orThrow(await this._userProductsCache.getOrWait([b,a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}if("teamId"in a){let c=m.Result.orThrow(await this._teamProductsCache.getOrWait([b,a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}let c=m.Result.orThrow(await this._customProductsCache.getOrWait([b,a.customCustomerId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(c)}async listInvoices(a){let b=await this._getSession();if("userId"in a){let c=m.Result.orThrow(await this._userInvoicesCache.getOrWait([b,a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerInvoicesFromResponse(c)}let c=m.Result.orThrow(await this._teamInvoicesCache.getOrWait([b,a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerInvoicesFromResponse(c)}async cancelSubscription(a){let b=await this._getSession(),c=await this.getUser();if(!c)throw new k.KnownErrors.UserAuthenticationRequired;let d="teamId"in a?"team":"user",e="teamId"in a?a.teamId:c.id;await this._interface.cancelSubscription({customer_type:d,customer_id:e,product_id:a.productId,subscription_id:a.subscriptionId},b),"user"===d?await this._userProductsCache.invalidateWhere(([a,c])=>a===b&&c===e):await this._teamProductsCache.invalidateWhere(([a,c])=>a===b&&c===e)}useProducts(a){let b=this._useSession(),c=(0,n.useAsyncCache)("userId"in a?this._userProductsCache:"teamId"in a?this._teamProductsCache:this._customProductsCache,[b,"userId"in a?a.userId:"teamId"in a?a.teamId:a.customCustomerId,a.cursor??null,a.limit??null],"clientApp.useProducts()");return this._customerProductsFromResponse(c)}useInvoices(a){let b=this._useSession(),c=(0,n.useAsyncCache)("userId"in a?this._userInvoicesCache:this._teamInvoicesCache,[b,"userId"in a?a.userId:a.teamId,a.cursor??null,a.limit??null],"clientApp.useInvoices()");return this._customerInvoicesFromResponse(c)}_currentUserFromCrud(a,b){return J({...this._createBaseUser(a),...this._createAuth(b),...this._createUserExtraFromCurrent(a,b),...this._isInternalProject()?this._createInternalUserExtra(b):{},...this._createCustomer(a.id,"user",b)})}_clientSessionFromCrud(a){return{id:a.id,userId:a.user_id,createdAt:new Date(a.created_at),isImpersonation:a.is_impersonation,lastUsedAt:a.last_used_at?new Date(a.last_used_at):void 0,isCurrentSession:a.is_current_session??!1,geoInfo:a.last_used_at_end_user_ip_info}}_getOwnedAdminApp(a,c){return this._ownedAdminApps.has([c,a])||this._ownedAdminApps.set([c,a],new b.LazyStackAdminAppImpl.value({baseUrl:this._interface.options.getBaseUrl(),projectId:a,tokenStore:null,projectOwnerSession:c,noAutomaticPrefetch:!0})),this._ownedAdminApps.get([c,a])}get projectId(){return this._interface.projectId}get version(){return n.clientVersion}_getBotChallengeSiteKeys(){if(!(0,P.isBrowserLike)())return null;let a=aI.envVars.HEXCLAVE_BOT_CHALLENGE_SITE_KEY;return a?{visibleSiteKey:a,invisibleSiteKey:aI.envVars.HEXCLAVE_BOT_CHALLENGE_INVISIBLE_SITE_KEY??a}:(this._botChallengeSiteKeysWarned||(this._botChallengeSiteKeysWarned=!0,console.warn("[stack-auth] HEXCLAVE_BOT_CHALLENGE_SITE_KEY is not set — bot challenge fraud protection is disabled. Set the env variable to enable it.")),null)}_getBotChallengeFlowFailure(a){return a instanceof X?{type:"cancelled",knownError:new k.KnownErrors.BotChallengeFailed("Bot challenge cancelled by user")}:a instanceof Y?{type:"failed",knownError:new k.KnownErrors.BotChallengeFailed(a.message)}:null}_normalizeBotChallengeResult(a){return"ok"===a.status?a:k.KnownErrors.BotChallengeRequired.isInstance(a.error)?((0,h.captureError)("bot-challenge-unexpected-after-flow",a.error),m.Result.error(new k.KnownErrors.BotChallengeFailed("Unexpected bot challenge after flow completion"))):m.Result.error(a.error)}_toInterfaceBotChallengeInput(a){return a.unavailable?{phase:"visible"}:{token:a.token,phase:a.phase}}async _executeResultWithBotChallengeFlow(a){let b,c=this._getBotChallengeSiteKeys();try{b=c?await Z({...c,action:a.action,execute:a.execute,isChallengeRequired:a=>"error"===a.status&&k.KnownErrors.BotChallengeRequired.isInstance(a.error)}):await a.execute({})}catch(b){let a=this._getBotChallengeFlowFailure(b);if(a)return m.Result.error(a.knownError);throw b}return this._normalizeBotChallengeResult(b)}async _isTrusted(a){if((0,M.isRelative)(a))return!0;let b=(0,M.createUrlIfValid)(a);if(null==b)return!1;if((0,aJ.isHostedHandlerUrlForProject)({url:a,projectId:this.projectId}))return!0;let c=await this._getTrustedRedirectConfig();return(0,Q.validateRedirectUrl)(b,{allowLocalhost:c.allowLocalhost,trustedDomains:c.trustedDomains})}get urls(){var a;let b;return b=new Set(Object.entries((a={urls:this._getUrls(),projectId:this.projectId}).urls).filter(([,b])=>(0,aJ.isHostedHandlerUrlForProject)({url:b,projectId:a.projectId})).map(([a])=>a)),new Proxy(a.urls,{get(a,c,d){if("string"==typeof c&&b.has(c))throw Error(`app.urls.${c} cannot be used when this app is configured to use hosted components. \`app.urls\` is static and does not include the runtime redirect-back, cross-domain auth, or sign-out state required by hosted components. `+("handler"===c?"Use a page-specific redirect helper such as app.redirectToSignIn() instead.":`Use app.redirectTo${c.slice(0,1).toUpperCase()}${c.slice(1)}() instead.`));return Reflect.get(a,c,d)}})}_getUrls(){return(0,n.getUrls)(this._urlOptions,{projectId:this.projectId})}_prefetchCrossDomainHandoffParamsIfNeeded(){let a="cookie"===this._tokenStoreInit||"nextjs-cookie"===this._tokenStoreInit;(0,P.isBrowserLike)()&&a&&!this._isPrefetchingCrossDomainHandoffParams&&null==this._getFreshPrefetchedCrossDomainHandoffParams()&&(this._isPrefetchingCrossDomainHandoffParams=!0,(0,g.runAsynchronously)(async()=>{try{if(!(0,P.isBrowserLike)())return;let{state:a,codeChallenge:b}=await aG();this._prefetchedCrossDomainHandoffParams={state:a,codeChallenge:b},this._prefetchedCrossDomainHandoffParamsFetchedAt=performance.now()}finally{this._isPrefetchingCrossDomainHandoffParams=!1}}))}_getCrossDomainHandoffParamsForUrlsGetter(a){let b=a$(a);if(null!=b)return b;let c=this._getFreshPrefetchedCrossDomainHandoffParams();return null!=c?c:(this._prefetchCrossDomainHandoffParamsIfNeeded(),null)}async _getCrossDomainHandoffParamsForRedirect(a){let b=a$(a);if(null!=b)return b;let c=this._getFreshPrefetchedCrossDomainHandoffParams();if(null!=c)return c;let{state:d,codeChallenge:e}=await aG();return this._prefetchedCrossDomainHandoffParams={state:d,codeChallenge:e},this._prefetchedCrossDomainHandoffParamsFetchedAt=performance.now(),{state:d,codeChallenge:e}}_getLocalOAuthCallbackHandlerUrl(){return this._isOAuthCallbackUrlHosted()?this._getOAuthCallbackRedirectUri():(0,aJ.resolveHandlerUrls)({urls:{...this._urlOptions,default:{type:"handler-component"},oauthCallback:{type:"handler-component"}},projectId:this.projectId}).oauthCallback}async _createCrossDomainAuthRedirectUrl(a){let b=await this._getSession(a.overrideTokenStoreInit,{awaitPendingAuthResolutions:a.awaitPendingAuthResolutions});await b.fetchNewTokens();let c=await this._interface.sendClientRequest("/auth/oauth/cross-domain/authorize",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({redirect_uri:a.redirectUri,state:a.state,code_challenge:a.codeChallenge,code_challenge_method:"S256",after_callback_redirect_url:a.afterCallbackRedirectUrl})},b);if(!c.ok){let a=await c.text();throw new h.HexclaveAssertionError(`Cross-domain authorization endpoint failed: ${c.status} ${a}`)}let d=await c.json();if(!("redirect_url"in d)||"string"!=typeof d.redirect_url)throw new h.HexclaveAssertionError("Cross-domain authorization endpoint returned an invalid payload",{result:d});return d.redirect_url}_getFreshPrefetchedCrossDomainHandoffParams(){return null==this._prefetchedCrossDomainHandoffParams?null:performance.now()-this._prefetchedCrossDomainHandoffParamsFetchedAt>33e5?(this._prefetchedCrossDomainHandoffParams=null,this._prefetchedCrossDomainHandoffParamsFetchedAt=0,null):this._prefetchedCrossDomainHandoffParams}async _getCurrentUrl(){return"none"===this._redirectMethod?null:new URL(window.location.href)}async _redirectTo(a){"none"!==this._redirectMethod&&(be&&"nextjs"===this._redirectMethod?bf.redirect(a.url.toString(),a.replace?bf.RedirectType.replace:bf.RedirectType.push):"object"==typeof this._redirectMethod&&this._redirectMethod.navigate?this._redirectMethod.navigate(a.url.toString()):a.replace?window.location.replace(a.url):window.location.assign(a.url),await (0,g.wait)(2e3))}useNavigate(){if("object"==typeof this._redirectMethod)return this._redirectMethod.useNavigate();if("window"===this._redirectMethod)return a=>window.location.assign(a);if("nextjs"!==this._redirectMethod)return a=>{};{let a=bf.useRouter();return b=>a.push(b)}}async _redirectIfTrusted(a,b){if(!await this._isTrusted(a))throw Error(`Redirect URL ${a} is not trusted; should be relative.`);return await this._redirectTo({url:a,...b})}async _redirectToHandler(a,b,c){let d=(0,n.getUrls)(this._urlOptions,{projectId:this.projectId})[a];if(!d)throw Error(`No URL for handler name ${a}`);let e=await a2({handlerName:a,rawHandlerUrl:d,noRedirectBack:b?.noRedirectBack===!0,currentUrl:null,localOAuthCallbackUrl:this._getLocalOAuthCallbackHandlerUrl(),getCrossDomainHandoffParams:async a=>await this._getCrossDomainHandoffParamsForRedirect(a)});if("cross-domain-authorize"===e.type){let a=await this._createCrossDomainAuthRedirectUrl({redirectUri:e.redirectUri,state:e.state,codeChallenge:e.codeChallenge,afterCallbackRedirectUrl:e.afterCallbackRedirectUrl,awaitPendingAuthResolutions:c?.awaitPendingAuthResolutions,overrideTokenStoreInit:c?.overrideTokenStoreInit});await this._redirectTo({url:a,...b});return}let f=e.url;await this._redirectIfTrusted(f,b)}_redirectToHandlerDuringRender(a,b){return!1}async redirectToSignIn(a){return await this._redirectToHandler("signIn",a)}async redirectToSignUp(a){return await this._redirectToHandler("signUp",a)}async redirectToSignOut(a){let b=this._urlOptions.signOut??this._urlOptions.default;return"string"!=typeof b&&b?.type==="hosted"?await this.signOut():await this._redirectToHandler("signOut",a)}async redirectToEmailVerification(a){return await this._redirectToHandler("emailVerification",a)}async redirectToPasswordReset(a){return await this._redirectToHandler("passwordReset",a)}async redirectToForgotPassword(a){return await this._redirectToHandler("forgotPassword",a)}async redirectToHome(a){return await this._redirectToHandler("home",a)}async redirectToOAuthCallback(a){return await this._redirectToHandler("oauthCallback",a)}async redirectToMagicLinkCallback(a){return await this._redirectToHandler("magicLinkCallback",a)}async redirectToAfterSignIn(a){return await this._redirectToHandler("afterSignIn",a)}async redirectToAfterSignUp(a){return await this._redirectToHandler("afterSignUp",a)}async redirectToOnboarding(a){return await this._redirectToHandler("onboarding",a)}async redirectToAfterSignOut(a){return await this._redirectToHandler("afterSignOut",a)}async redirectToAccountSettings(a){return await this._redirectToHandler("accountSettings",a)}async redirectToError(a){return await this._redirectToHandler("error",a)}async redirectToTeamInvitation(a){return await this._redirectToHandler("teamInvitation",a)}async redirectToCliAuthConfirm(a){return await this._redirectToHandler("cliAuthConfirm",a)}async redirectToMfa(a){return await this._redirectToHandler("mfa",a)}async sendForgotPasswordEmail(a,b){return await this._interface.sendForgotPasswordEmail(a,b?.callbackUrl??D(this.urls.passwordReset,"callbackUrl"))}async sendMagicLinkEmail(a,b){let c=b?.callbackUrl??D(this.urls.magicLinkCallback,"callbackUrl");return await this._executeResultWithBotChallengeFlow({action:"send_magic_link_email",execute:async b=>await this._interface.sendMagicLinkEmail(a,c,this._toInterfaceBotChallengeInput(b))})}async resetPassword(a){return await this._interface.resetPassword(a)}async verifyPasswordResetCode(a){return await this._interface.verifyPasswordResetCode(a)}async verifyTeamInvitationCode(a){return await this._interface.acceptTeamInvitation({type:"check",code:a,session:await this._getSession()})}async acceptTeamInvitation(a){let b=await this._interface.acceptTeamInvitation({type:"use",code:a,session:await this._getSession()});return"ok"===b.status?m.Result.ok(void 0):m.Result.error(b.error)}async getTeamInvitationDetails(a){let b=await this._interface.acceptTeamInvitation({type:"details",code:a,session:await this._getSession()});return"ok"===b.status?m.Result.ok({teamDisplayName:b.data.team_display_name}):m.Result.error(b.error)}async verifyEmail(a){let b=await this._interface.verifyEmail(a);return await this._currentUserCache.refresh([await this._getSession()]),await this._clientContactChannelsCache.refresh([await this._getSession()]),b}async getUser(a){if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=await this._getSession(a?.tokenStore),c=m.Result.orThrow(await this._currentUserCache.getOrWait([b],"write-only")),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":!c?.is_anonymous&&c?.is_restricted?await this.redirectToOnboarding({replace:!0}):await this.redirectToSignIn({replace:!0});break;case"throw":throw Error("User is not signed in but getUser was called with { or: 'throw' }");case"anonymous":{let a=await this._signUpAnonymously();return await this.getUser({tokenStore:a,or:"anonymous-if-exists[deprecated]",includeRestricted:!0})??(0,h.throwErr)("Something went wrong while signing up anonymously")}case void 0:case"anonymous-if-exists[deprecated]":case"return-null":return null}return c&&this._currentUserFromCrud(c,b)}useUser(a){if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=this._useSession(a?.tokenStore),c=(0,n.useAsyncCache)(this._currentUserCache,[b],"clientApp.useUser()"),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":throw!c?.is_anonymous&&c?.is_restricted?this._redirectToHandlerDuringRender("onboarding",{replace:!0})||(0,g.runAsynchronously)(this.redirectToOnboarding({replace:!0})):this._redirectToHandlerDuringRender("signIn",{replace:!0})||(0,g.runAsynchronously)(this.redirectToSignIn({replace:!0})),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case"throw":throw Error("User is not signed in but useUser was called with { or: 'throw' }");case"anonymous":throw(0,g.runAsynchronously)(async()=>{await this._signUpAnonymously()}),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case void 0:case"anonymous-if-exists[deprecated]":case"return-null":c=null}return(0,i.useMemo)(()=>c&&this._currentUserFromCrud(c,b),[c,b,a?.or])}_getTokenPartialUserFromSession(a,b){let c=a.getAccessTokenIfNotExpiredYet(0,null);if(!c)return null;let d=c.payload.is_anonymous;return d&&"anonymous-if-exists"!==b.or?null:{id:c.payload.sub,primaryEmail:c.payload.email,displayName:c.payload.name,primaryEmailVerified:c.payload.email_verified,isAnonymous:d,isMultiFactorRequired:c.payload.requires_totp_mfa,isRestricted:c.payload.is_restricted,restrictedReason:c.payload.restricted_reason}}async _getPartialUserFromConvex(a){let b=await a.auth.getUserIdentity();return b?{id:b.subject,displayName:b.name??null,primaryEmail:b.email??null,primaryEmailVerified:b.email_verified,isAnonymous:b.is_anonymous,isMultiFactorRequired:b.requires_totp_mfa,isRestricted:b.is_restricted,restrictedReason:b.restricted_reason??null}:null}async getPartialUser(a){switch(a.from){case"token":{this._ensurePersistentTokenStore(a.tokenStore??this._tokenStoreInit);let b=await this._getSession(a.tokenStore);return this._getTokenPartialUserFromSession(b,a)}case"convex":return await this._getPartialUserFromConvex(a.ctx);default:throw Error(`Invalid 'from' option: ${a.from}`)}}usePartialUser(a){switch(a.from){case"token":{this._ensurePersistentTokenStore(a.tokenStore??this._tokenStoreInit);let b=this._useSession(a.tokenStore);return this._getTokenPartialUserFromSession(b,a)}case"convex":return(0,n.useAsyncCache)(this._convexPartialUserCache,[a.ctx],"clientApp.usePartialUser()");default:throw Error(`Invalid 'from' option: ${a.from}`)}}getConvexClientAuth(a){return async b=>{let c=await this._getSession(a.tokenStore??this._tokenStoreInit);return b.forceRefreshToken?(await c.fetchNewTokens())?.accessToken.token??null:(await c.getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??null}}async getConvexHttpClientAuth(a){return(await (await this._getSession(a.tokenStore)).getOrFetchLikelyValidTokens(2e4,75e3))?.accessToken.token??""}async _updateClientUser(a,b){let c=await this._interface.updateClientUser({display_name:a.displayName,client_metadata:a.clientMetadata,selected_team_id:a.selectedTeamId,totp_secret_base64:null!=a.totpMultiFactorSecret?(0,I.encodeBase64)(a.totpMultiFactorSecret):a.totpMultiFactorSecret,profile_image_url:a.profileImageUrl,otp_auth_enabled:a.otpAuthEnabled,passkey_auth_enabled:a.passkeyAuthEnabled,primary_email:a.primaryEmail},b);return await this._refreshUser(b),c}async signInWithOAuth(a,b){throw Error("signInWithOAuth can currently only be called in a browser environment")}async _experimentalMfa(a,b){throw await this.redirectToMfa(),new h.HexclaveAssertionError("we should have redirected in redirectToMfa()")}async _catchMfaRequiredError(a){try{return await a()}catch(a){if(k.KnownErrors.MultiFactorAuthenticationRequired.isInstance(a))return m.Result.ok(await this._experimentalMfa(a,await this._getSession(void 0,{awaitPendingAuthResolutions:!1})));throw a}}async signInWithCredential(a){let b;this._ensurePersistentTokenStore();let c=await this._getSession();try{b=await this._catchMfaRequiredError(async()=>await this._interface.signInWithCredential(a.email,a.password,c))}catch(a){if(k.KnownErrors.InvalidTotpCode.isInstance(a))return m.Result.error(a);throw a}return"ok"===b.status?(await this._signInToAccountWithTokens(b.data),a.noRedirect||await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(b.data)}),m.Result.ok(void 0)):m.Result.error(b.error)}async signUpWithCredential(a){let b;if(a.noVerificationCallback&&a.verificationCallbackUrl)throw new h.HexclaveAssertionError("verificationCallbackUrl is not allowed when noVerificationCallback is true");this._ensurePersistentTokenStore();let c=await this._getSession(),d=a.noVerificationCallback?void 0:a.verificationCallbackUrl??D(this.urls.emailVerification,"verificationCallbackUrl"),e=async b=>{let e=await this._interface.signUpWithCredential(a.email,a.password,d,c,this._toInterfaceBotChallengeInput(b));return"error"===e.status&&e.error instanceof k.KnownErrors.RedirectUrlNotWhitelisted&&void 0!==d&&!a.verificationCallbackUrl&&((0,h.captureError)("signup-verification-url-not-whitelisted",new h.HexclaveAssertionError("The auto-constructed verification callback URL is not whitelisted; proceeding without email verification",{emailVerificationRedirectUrl:d})),e=await this._interface.signUpWithCredential(a.email,a.password,void 0,c,this._toInterfaceBotChallengeInput(b))),e};return"ok"===(b=await this._executeResultWithBotChallengeFlow({action:"sign_up_with_credential",execute:e})).status?(await this._signInToAccountWithTokens(b.data),a.noRedirect||await this._redirectToHandler("afterSignUp",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(b.data)}),m.Result.ok(void 0)):m.Result.error(b.error)}async _signUpAnonymously(){return this._ensurePersistentTokenStore(),this._anonymousSignUpInProgress||(this._anonymousSignUpInProgress=(async()=>{this._ensurePersistentTokenStore();let a=await this._getSession(),b=await this._interface.signUpAnonymously(a);if("ok"===b.status)await this._signInToAccountWithTokens(b.data);else throw new h.HexclaveAssertionError("signUpAnonymously() should never return an error");return this._anonymousSignUpInProgress=null,b.data})()),await this._anonymousSignUpInProgress}async signInWithMagicLink(a,b){let c;this._ensurePersistentTokenStore();let d=await this._getSession();try{c=await this._catchMfaRequiredError(async()=>await this._interface.signInWithMagicLink(a,d))}catch(a){if(k.KnownErrors.InvalidTotpCode.isInstance(a))return m.Result.error(a);throw a}return"ok"===c.status?(await this._signInToAccountWithTokens(c.data),b?.noRedirect||(c.data.newUser?await this._redirectToHandler("afterSignUp",{replace:!0},{awaitPendingAuthResolutions:!1,overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(c.data)}):await this._redirectToHandler("afterSignIn",{replace:!0},{awaitPendingAuthResolutions:!1,overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(c.data)})),m.Result.ok(void 0)):m.Result.error(c.error)}async promptCliLogin(a){let b=await this._interface.sendClientRequest("/auth/cli",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expires_in_millis:a.expiresInMillis,...null!=a.anonRefreshToken?{anon_refresh_token:a.anonRefreshToken}:{}})},null);if(!b.ok)return m.Result.error(new k.KnownErrors.CliAuthError(`Failed to initiate CLI auth: ${b.status} ${await b.text()}`));let c=await b.json(),d=c.polling_code,e=c.login_code,f=(0,aJ.buildCliAuthConfirmUrl)({cliAuthConfirmUrl:this.urls.cliAuthConfirm,appUrl:a.appUrl,loginCode:e});a.promptLink?a.promptLink(f,e):(console.log(`Your verification code: ${e}`),console.log(`Please visit the following URL to authenticate:
7
+ ${f}`));let h=0;for(;h<(a.maxAttempts??1/0);){h++;let b=await this._interface.sendClientRequest("/auth/cli/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({polling_code:d})},null);if(!b.ok)return m.Result.error(new k.KnownErrors.CliAuthError(`Failed to initiate CLI auth: ${b.status} ${await b.text()}`));let c=await b.json();if(201===b.status&&"success"===c.status)return m.Result.ok(c.refresh_token);if("waiting"===c.status){await (0,g.wait)(a.waitTimeMillis??2e3);continue}if("expired"===c.status)return m.Result.error(new k.KnownErrors.CliAuthExpiredError("CLI authentication request expired. Please try again."));if("used"===c.status)return m.Result.error(new k.KnownErrors.CliAuthUsedError("This authentication token has already been used."));return m.Result.error(new k.KnownErrors.CliAuthError(`Unexpected status from CLI auth polling: ${c.status}`))}return m.Result.error(new k.KnownErrors.CliAuthError("Timed out waiting for CLI authentication."))}async signInWithMfa(a,b,c){let d;this._ensurePersistentTokenStore();let e=await this._getSession();try{d=await this._catchMfaRequiredError(async()=>await this._interface.signInWithMfa(a,b,e))}catch(a){if(a instanceof k.KnownErrors.InvalidTotpCode)return m.Result.error(a);throw a}return"ok"===d.status?(await this._signInToAccountWithTokens(d.data),c?.noRedirect||(d.data.newUser?await this._redirectToHandler("afterSignUp",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(d.data)}):await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(d.data)})),m.Result.ok(void 0)):m.Result.error(d.error)}async signInWithPasskey(){let a;this._ensurePersistentTokenStore();let b=await this._getSession();try{a=await this._catchMfaRequiredError(async()=>{let a=await this._interface.initiatePasskeyAuthentication({},b);if("ok"!==a.status)return m.Result.error(new k.KnownErrors.PasskeyAuthenticationFailed("Failed to get initiation options for passkey authentication"));let{options_json:c,code:d}=a.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==c.rpId)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${c.rpId}`);c.rpId=window.location.hostname;let e=await C({optionsJSON:c});return await this._interface.signInWithPasskey({authentication_response:e,code:d},b)})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return m.Result.error(new k.KnownErrors.PasskeyAuthenticationFailed("Failed to sign in with passkey"))}return"ok"===a.status?(await this._signInToAccountWithTokens(a.data),await this._redirectToHandler("afterSignIn",{replace:!0},{overrideTokenStoreInit:this._getTokenStoreInitForFreshTokens(a.data)}),m.Result.ok(void 0)):m.Result.error(a.error)}async callOAuthCallback(a){throw Error("callOAuthCallback can currently only be called in a browser environment")}async _signOut(a,b){this._eventTracker?.clearBuffer(),this._sessionRecorder?.clearBuffer(),await T.storeLock.withWriteLock(async()=>{await this._interface.signOut(a),b?.redirectUrl?await this._redirectTo({url:b.redirectUrl,replace:!0}):await this._redirectToDefaultAfterSignOut()})}async _redirectToDefaultAfterSignOut(){null!=this._urlOptions.afterSignOut?await this.redirectToAfterSignOut({replace:!0}):null!=this._urlOptions.home?await this.redirectToHome({replace:!0}):(this._urlOptions.default?.type,await this.redirectToAfterSignOut({replace:!0}))}async signOut(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});b&&await b.signOut({redirectUrl:a?.redirectUrl})}async getAccessToken(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getAccessToken():null}useAccessToken(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useAccessToken():null}async getRefreshToken(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getRefreshToken():null}useRefreshToken(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useRefreshToken():null}async getAuthorizationHeader(a){return bj(await this.getAuthJson(a))}useAuthorizationHeader(a){return bj(this.useAuthJson(a))}async getAuthHeaders(a){return{"x-stack-auth":JSON.stringify(await this.getAuthJson(a))}}useAuthHeaders(a){return{"x-stack-auth":JSON.stringify(this.useAuthJson(a))}}async getAuthJson(a){let b=await this.getUser({tokenStore:a?.tokenStore??void 0});return b?await b.getAuthJson():{accessToken:null,refreshToken:null}}useAuthJson(a){let b=this.useUser({tokenStore:a?.tokenStore??void 0});return b?b.useAuthJson():{accessToken:null,refreshToken:null}}async getProject(){let a=m.Result.orThrow(await this._currentProjectCache.getOrWait([],"write-only"));return this._clientProjectFromCrud(a)}useProject(){let a=(0,n.useAsyncCache)(this._currentProjectCache,[],"clientApp.useProject()");return(0,i.useMemo)(()=>this._clientProjectFromCrud(a),[a])}async _listOwnedProjects(a){return this._ensureInternalProject(),m.Result.orThrow(await this._ownedProjectsCache.getOrWait([a],"write-only")).map(b=>this._getOwnedAdminApp(b.id,a)._adminOwnedProjectFromCrud(b,()=>this._refreshOwnedProjects(a)))}_useOwnedProjects(a){this._ensureInternalProject();let b=(0,n.useAsyncCache)(this._ownedProjectsCache,[a],"clientApp.useOwnedProjects()");return(0,i.useMemo)(()=>b.map(b=>this._getOwnedAdminApp(b.id,a)._adminOwnedProjectFromCrud(b,()=>this._refreshOwnedProjects(a))),[b])}async _createProject(a,b){this._ensureInternalProject();let c=await this._interface.createProject({...S(b),display_name:b.displayName,is_development_environment:b.isDevelopmentEnvironment,owner_team_id:b.teamId},a),d=this._getOwnedAdminApp(c.id,a)._adminOwnedProjectFromCrud(c,()=>this._refreshOwnedProjects(a));return await this._refreshOwnedProjects(a),d}async _refreshUser(a){await this._refreshSession(a)}async _refreshSession(a){await Promise.all([this._currentUserCache.refresh([a]),this._currentUserConnectedAccountsCache.refresh([a])]),a.suggestAccessTokenExpired()}async _refreshUsers(){}async _refreshProject(){await this._currentProjectCache.refresh([])}async _refreshOwnedProjects(a){await this._ownedProjectsCache.refresh([a])}static get[R.hexclaveAppInternalsSymbol](){return{fromClientJson:a=>{let c=JSON.stringify((0,E.omit)(a,[])),d=bg.get(a.uniqueIdentifier);if(d){let[b,e]=d;if(void 0!==b&&b!==c)throw new h.HexclaveAssertionError("The provided app JSON does not match the configuration of the existing client app with the same unique identifier",{providedObj:a,existingString:b});return e}let{analytics:e,...f}=(0,E.omit)(a,["uniqueIdentifier"]);return new b({...f,analytics:function(a){if(!a?.replays?.blockClass)return a;let{blockClass:b,...c}=a.replays;return"object"==typeof b&&"__regexp"in b?{...a,replays:{...c,blockClass:new RegExp(b.__regexp,b.__flags)}}:a}(e)},{uniqueIdentifier:a.uniqueIdentifier,checkString:c})}}}get[R.hexclaveAppInternalsSymbol](){return{toClientJson:()=>{if("string"!=typeof this._redirectMethod)throw new h.HexclaveAssertionError("Cannot serialize to JSON from an application with a non-string redirect method");let a="publishableClientKey"in this._interface.options?this._interface.options.publishableClientKey:void 0;return{baseUrl:this._options.baseUrl,projectId:this.projectId,...null!=a?{publishableClientKey:a}:{},tokenStore:this._tokenStoreInit,urls:this._urlOptions,oauthScopesOnSignIn:this._oauthScopesOnSignIn,uniqueIdentifier:this._getUniqueIdentifier(),redirectMethod:this._redirectMethod,extraRequestHeaders:this._options.extraRequestHeaders,devTool:this._options.devTool,analytics:function(a){if(!a?.replays?.blockClass)return a;let{blockClass:b,...c}=a.replays;return b instanceof RegExp?{...a,replays:{...c,blockClass:{__regexp:b.source,__flags:b.flags}}}:a}(this._analyticsOptions)}},setCurrentUser:a=>{(0,g.runAsynchronously)(async()=>{await this._currentUserCache.forceSetCachedValueAsync([await this._getSession()],m.Result.fromPromise(a))})},getConstructorOptions:()=>this._options,sendSessionReplayBatch:async(a,b)=>await this._interface.sendSessionReplayBatch(a,await this._getSession(),b),sendAnalyticsEventBatch:async(a,b)=>await this._interface.sendAnalyticsEventBatch(a,await this._getSession(),b),addRequestListener:a=>this._interface.addRequestListener(a),sendRequest:async(a,b,c="client")=>await this._interface.sendClientRequest(a,b,await this._getSession(),c),getRedirectMethod:()=>this._redirectMethod??(0,h.throwErr)("Redirect method should have been initialized in the Stack client app constructor"),redirectToUrl:async(a,b)=>{await this._redirectTo({url:a,...b})},redirectToHandler:async(a,b)=>{await this._redirectToHandler(a,b)},refreshOwnedProjects:async()=>{await this._refreshOwnedProjects(await this._getSession())},signInWithTokens:async a=>{await this._signInToAccountWithTokens(a)}}}},bn=class extends bm{async _refreshTeamMembership(a,b){await Promise.all([this._serverTeamMemberProfilesCache.refresh([a]),this._serverTeamsCache.refreshWhere(([a])=>a===b||void 0===a),this._serverUsersCache.refreshWhere(b=>b[8]===a)])}_createServerCustomer(a,b){let c=this,d="user"===b?c._serverUserProductsCache:c._serverTeamProductsCache,e="user"===b?{userId:a}:{teamId:a};return{...this._createCustomer(a,b,null),getItem:async a=>await c.getItem({itemId:a,...e}),useItem:a=>c.useItem({itemId:a,...e}),async grantProduct(e){"user"===b?"productId"in e?await c.grantProduct({userId:a,productId:e.productId,quantity:e.quantity}):await c.grantProduct({userId:a,product:e.product,quantity:e.quantity}):"productId"in e?await c.grantProduct({teamId:a,productId:e.productId,quantity:e.quantity}):await c.grantProduct({teamId:a,product:e.product,quantity:e.quantity}),await d.refresh([a,null,null])},async createCheckoutUrl(d){let e="productId"in d?d.productId:d.product;return await c._interface.createCheckoutUrl(b,a,e,null,d.returnUrl,"server")}}}async _updateServerUser(a,b){let c=await this._interface.updateServerUser(a,{display_name:b.displayName,primary_email:b.primaryEmail,client_metadata:b.clientMetadata,client_read_only_metadata:b.clientReadOnlyMetadata,server_metadata:b.serverMetadata,selected_team_id:b.selectedTeamId,primary_email_auth_enabled:b.primaryEmailAuthEnabled,primary_email_verified:b.primaryEmailVerified,password:b.password,profile_image_url:b.profileImageUrl,totp_secret_base64:null!=b.totpMultiFactorSecret?(0,I.encodeBase64)(b.totpMultiFactorSecret):b.totpMultiFactorSecret,restricted_by_admin:b.restrictedByAdmin,restricted_by_admin_reason:b.restrictedByAdminReason,restricted_by_admin_private_details:b.restrictedByAdminPrivateDetails,country_code:b.countryCode,risk_scores:b.riskScores?{sign_up:{bot:b.riskScores.signUp.bot,free_trial_abuse:b.riskScores.signUp.freeTrialAbuse}}:void 0});return await this._refreshUsers(),c}_serverEditableTeamProfileFromCrud(a){let b=this;return{displayName:a.display_name,profileImageUrl:a.profile_image_url,async update(c){await b._interface.updateServerTeamMemberProfile({teamId:a.team_id,userId:a.user_id,profile:{display_name:c.displayName,profile_image_url:c.profileImageUrl}}),await b._serverUserTeamProfileCache.refresh([a.team_id,a.user_id])}}}_serverContactChannelFromCrud(a,b){let c=this;return{id:b.id,value:b.value,type:b.type,isVerified:b.is_verified,isPrimary:b.is_primary,usedForAuth:b.used_for_auth,async sendVerificationEmail(d){await c._interface.sendServerContactChannelVerificationEmail(a,b.id,d?.callbackUrl??D(c._getUrls().emailVerification,"callbackUrl"))},async update(d){await c._interface.updateServerContactChannel(a,b.id,{value:d.value,is_verified:d.isVerified,used_for_auth:d.usedForAuth,is_primary:d.isPrimary}),await Promise.all([c._serverContactChannelsCache.refresh([a]),c._serverUserCache.refresh([a])])},async delete(){await c._interface.deleteServerContactChannel(a,b.id),await Promise.all([c._serverContactChannelsCache.refresh([a]),c._serverUserCache.refresh([a])])}}}_serverNotificationCategoryFromCrud(a,b){let c=this;return{id:b.notification_category_id,name:b.notification_category_name,enabled:b.enabled,canDisable:b.can_disable,async setEnabled(d){await c._interface.setServerNotificationsEnabled(a,b.notification_category_id,d),await c._serverNotificationCategoriesCache.refresh([a])}}}_serverOAuthProviderFromCrud(a){let b=this;return{id:a.id,type:a.type,userId:a.user_id,accountId:a.account_id,email:a.email,allowSignIn:a.allow_sign_in,allowConnectedAccounts:a.allow_connected_accounts,async update(c){try{return await b._interface.updateServerOAuthProvider(a.user_id,a.id,{account_id:c.accountId,email:c.email,allow_sign_in:c.allowSignIn,allow_connected_accounts:c.allowConnectedAccounts}),await Promise.all([b._serverOAuthProvidersCache.refresh([a.user_id]),b._serverUserConnectedAccountsCache.refresh([a.user_id])]),m.Result.ok(void 0)}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}},async delete(){await b._interface.deleteServerOAuthProvider(a.user_id,a.id),await Promise.all([b._serverOAuthProvidersCache.refresh([a.user_id]),b._serverUserConnectedAccountsCache.refresh([a.user_id])])}}}constructor(a,b){const c=(0,n.resolveConstructorOptions)(a),d=c.publishableClientKey??(0,n.getDefaultPublishableClientKey)();super(c,{...b,interface:b?.interface??(()=>{let a=(0,n.resolveApiUrls)(c.baseUrl);return new j.HexclaveServerInterface({getBaseUrl:()=>a()[0],getApiUrls:a,projectId:c.projectId??(0,n.getDefaultProjectId)(),extraRequestHeaders:c.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),clientVersion:n.clientVersion,...null!=d?{publishableClientKey:d}:{},secretServerKey:c.secretServerKey??(0,n.getDefaultSecretServerKey)()})})()}),this._currentServerUserCache=(0,n.createCacheBySession)(async a=>a.isKnownToBeInvalid()?null:await this._interface.getServerUserByToken(a)),this._serverUsersCache=(0,n.createCache)(async([a,b,c,d,e,f,g,i,j])=>{if(i&&!g)throw new h.HexclaveAssertionError("onlyAnonymous=true requires includeAnonymous=true");return i?await this._interface.listServerUsers({cursor:a,limit:b,orderBy:c,desc:d,query:e,includeRestricted:f,includeAnonymous:!0,onlyAnonymous:!0,teamId:j}):await this._interface.listServerUsers({cursor:a,limit:b,orderBy:c,desc:d,query:e,includeRestricted:f,includeAnonymous:g,teamId:j})}),this._serverUserCache=(0,n.createCache)(async([a])=>{let b=await this._interface.getServerUserById(a);return m.Result.or(b,null)}),this._serverTeamsCache=(0,n.createCache)(async([a,b,c,d,e,f])=>await this._interface.listServerTeamsPaginated({userId:a,orderBy:b,desc:c,cursor:d,limit:e,query:f})),this._serverUserTeamInvitationsCache=(0,n.createCache)(async([a])=>await this._interface.listServerUserTeamInvitations(a)),this._serverTeamUserPermissionsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listServerTeamPermissions({teamId:a,userId:b,recursive:c},null)),this._serverAllTeamMemberPermissionsCache=(0,n.createCache)(async([a,b])=>await this._interface.listServerTeamPermissions({teamId:a,recursive:b},null)),this._serverUserProjectPermissionsCache=(0,n.createCache)(async([a,b])=>await this._interface.listServerProjectPermissions({userId:a,recursive:b},null)),this._serverUserOAuthConnectionAccessTokensCache=(0,n.createCache)(async([a,b,c])=>{try{return{accessToken:(await this._interface.createServerProviderAccessToken(a,b,c||"")).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._serverUserOAuthConnectionCache=(0,n.createCache)(async([a,b,c,d])=>await this._getUserOAuthConnectionCacheFn({getUser:async()=>m.Result.orThrow(await this._serverUserCache.getOrWait([a],"write-only")),getOrWaitOAuthToken:async()=>m.Result.orThrow(await this._serverUserOAuthConnectionAccessTokensCache.getOrWait([a,b,c||""],"write-only")),useOAuthToken:()=>(0,n.useAsyncCache)(this._serverUserOAuthConnectionAccessTokensCache,[a,b,c||""],"user.useConnectedAccount()"),providerId:b,scope:c,redirect:d,session:null})),this._serverUserConnectedAccountsCache=(0,n.createCache)(async([a])=>(await this._interface.listServerConnectedAccounts(a)).items.map(b=>this._createServerOAuthConnectionFromCrudItem(a,b))),this._serverUserOAuthConnectionAccessTokensByAccountCache=(0,n.createCache)(async([a,b,c,d])=>{try{return{accessToken:(await this._interface.createServerProviderAccessTokenByAccount(a,b,c,d||"")).access_token}}catch(a){if(!(k.KnownErrors.OAuthAccessTokenNotAvailable.isInstance(a)||k.KnownErrors.OAuthConnectionDoesNotHaveRequiredScope.isInstance(a)||k.KnownErrors.OAuthConnectionNotConnectedToUser.isInstance(a)))throw a}return null}),this._serverTeamMemberProfilesCache=(0,n.createCache)(async([a])=>await this._interface.listServerTeamMemberProfiles({teamId:a})),this._serverTeamInvitationsCache=(0,n.createCache)(async([a])=>await this._interface.listServerTeamInvitations({teamId:a})),this._serverUserTeamProfileCache=(0,n.createCache)(async([a,b])=>await this._interface.getServerTeamMemberProfile({teamId:a,userId:b})),this._serverContactChannelsCache=(0,n.createCache)(async([a])=>await this._interface.listServerContactChannels(a)),this._serverNotificationCategoriesCache=(0,n.createCache)(async([a])=>await this._interface.listServerNotificationCategories(a)),this._serverDataVaultStoreValueCache=(0,n.createCache)(async([a,b,c])=>await this._interface.getDataVaultStoreValue(c,a,b)),this._emailDeliveryInfoCache=(0,n.createCache)(async()=>await this._interface.getEmailDeliveryInfo()),this._serverUserApiKeysCache=(0,n.createCache)(async([a])=>await this._interface.listProjectApiKeys({user_id:a},null,"server")),this._serverTeamApiKeysCache=(0,n.createCache)(async([a])=>await this._interface.listProjectApiKeys({team_id:a},null,"server")),this._convexIdentitySubjectCache=(0,n.createCache)(async([a])=>{let b=await a.auth.getUserIdentity();return b?b.subject:null}),this._serverCheckApiKeyCache=(0,n.createCache)(async([a,b])=>await this._interface.checkProjectApiKey(a,b,null,"server")),this._serverOAuthProvidersCache=(0,n.createCache)(async([a])=>await this._interface.listServerOAuthProviders({user_id:a})),this._serverTeamItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({teamId:a,itemId:b},null,"server")),this._serverUserItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({userId:a,itemId:b},null,"server")),this._serverCustomItemsCache=(0,n.createCache)(async([a,b])=>await this._interface.getItem({customCustomerId:a,itemId:b},null,"server")),this._serverUserProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"user",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server")),this._serverTeamProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"team",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server")),this._serverCustomProductsCache=(0,n.createCache)(async([a,b,c])=>await this._interface.listProducts({customer_type:"custom",customer_id:a,cursor:b??void 0,limit:c??void 0},null,"server"))}_serverApiKeyFromCrud(a){return{...this._baseApiKeyFromCrud(a),async revoke(){await this.update({revoked:!0})},update:async b=>{await this._interface.updateProjectApiKey("team"===a.type?{team_id:a.team_id}:{user_id:a.user_id},a.id,await G(a.type,b),null,"server"),"team"===a.type?await this._serverTeamApiKeysCache.refresh([a.team_id]):await this._serverUserApiKeysCache.refresh([a.user_id])}}}_createServerOAuthConnectionFromCrudItem(a,b){let c=this,d=b.provider,e=b.provider_account_id;return{id:d,provider:d,providerAccountId:e,async getAccessToken(b){let f=b?.scopes?.join(" ")??"",g=m.Result.orThrow(await c._serverUserOAuthConnectionAccessTokensByAccountCache.getOrWait([a,d,e,f],"write-only"));if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)},useAccessToken(b){let f=b?.scopes?.join(" ")??"",g=(0,n.useAsyncCache)(c._serverUserOAuthConnectionAccessTokensByAccountCache,[a,d,e,f],"connection.useAccessToken()");if(!g){let a=f?`The requested scopes [${f}] are not available on the existing token.`:"The OAuth refresh token has likely been revoked or expired.";return m.Result.error(new k.KnownErrors.OAuthAccessTokenNotAvailable(d,`${a} The user needs to re-authorize by calling \`linkConnectedAccount\` or using \`getOrLinkConnectedAccount\`.`))}return m.Result.ok(g)}}}_serverUserFromCrud(a){let b=this;async function c(c,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof c&&"provider"in c&&"providerAccountId"in c){let{provider:d,providerAccountId:e}=c,f=m.Result.orThrow(await b._serverUserConnectedAccountsCache.getOrWait([a.id],"write-only")).find(a=>a.provider===d&&a.providerAccountId===e);return f||null}return m.Result.orThrow(await b._serverUserOAuthConnectionCache.getOrWait([a.id,c,e,d?.or==="redirect"],"write-only"))}return J({...super._createBaseUser(a),lastActiveAt:new Date(a.last_active_at_millis),serverMetadata:a.server_metadata,restrictedByAdmin:a.restricted_by_admin,restrictedByAdminReason:a.restricted_by_admin_reason,restrictedByAdminPrivateDetails:a.restricted_by_admin_private_details,countryCode:a.country_code,riskScores:{signUp:{bot:a.risk_scores.sign_up.bot,freeTrialAbuse:a.risk_scores.sign_up.free_trial_abuse}},async setPrimaryEmail(c,d){await b._updateServerUser(a.id,{primaryEmail:c,primaryEmailVerified:d?.verified})},async grantPermission(c,d){if(c&&"string"!=typeof c&&d)for(let e of(await b._interface.grantServerTeamUserPermission(c.id,a.id,d),[!0,!1]))await b._serverTeamUserPermissionsCache.refresh([c.id,a.id,e]),await b._serverAllTeamMemberPermissionsCache.refresh([c.id,e]);else for(let d of(await b._interface.grantServerProjectPermission(a.id,c),[!0,!1]))await b._serverUserProjectPermissionsCache.refresh([a.id,d])},async revokePermission(c,d){if(c&&"string"!=typeof c&&d)for(let e of(await b._interface.revokeServerTeamUserPermission(c.id,a.id,d),[!0,!1]))await b._serverTeamUserPermissionsCache.refresh([c.id,a.id,e]),await b._serverAllTeamMemberPermissionsCache.refresh([c.id,e]);else for(let d of(await b._interface.revokeServerProjectPermission(a.id,c),[!0,!1]))await b._serverUserProjectPermissionsCache.refresh([a.id,d])},async delete(){let c=await b._interface.deleteServerUser(a.id);return await b._refreshUsers(),c},async createSession(c){let d=await b._interface.createServerUserSession(a.id,c.expiresInMillis??31536e6,c.isImpersonation??!1);return{getTokens:async()=>d}},getActiveSessions:async()=>(await b._interface.listServerSessions(a.id)).items.map(a=>b._clientSessionFromCrud(a)),async revokeSession(a){await b._interface.deleteServerSession(a)},async setDisplayName(a){return await this.update({displayName:a})},async setClientMetadata(a){return await this.update({clientMetadata:a})},async setClientReadOnlyMetadata(a){return await this.update({clientReadOnlyMetadata:a})},async setServerMetadata(a){return await this.update({serverMetadata:a})},async setSelectedTeam(a){return await this.update({selectedTeamId:"string"==typeof a?a:a?.id??null})},getConnectedAccount:c,useConnectedAccount:function(c,d){let e=d?.scopes?.join(" ")??"";if("object"==typeof c&&"provider"in c&&"providerAccountId"in c){let{provider:d,providerAccountId:e}=c;return(0,n.useAsyncCache)(b._serverUserConnectedAccountsCache,[a.id],"user.useConnectedAccount()").find(a=>a.provider===d&&a.providerAccountId===e)??null}return(0,n.useAsyncCache)(b._serverUserOAuthConnectionCache,[a.id,c,e,d?.or==="redirect"],"user.useConnectedAccount()")},listConnectedAccounts:async()=>m.Result.orThrow(await b._serverUserConnectedAccountsCache.getOrWait([a.id],"write-only")),useConnectedAccounts:()=>(0,n.useAsyncCache)(b._serverUserConnectedAccountsCache,[a.id],"user.useConnectedAccounts()"),async linkConnectedAccount(){throw new h.HexclaveAssertionError("linkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},async getOrLinkConnectedAccount(){throw new h.HexclaveAssertionError("getOrLinkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},useOrLinkConnectedAccount(){throw new h.HexclaveAssertionError("useOrLinkConnectedAccount is not available for server users. OAuth flows must be initiated on the client side.")},selectedTeam:a.selected_team?b._serverTeamFromCrud(a.selected_team):null,async getTeam(a){return(await this.listTeams()).find(b=>b.id===a)??null},useTeam(a){let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async listTeams(c){let d=m.Result.orThrow(await b._serverTeamsCache.getOrWait([a.id,c?.orderBy,c?.desc,c?.cursor,c?.limit,c?.query],"write-only")),e=d.items.map(a=>b._serverTeamFromCrud(a));return e.nextCursor=d.pagination?.next_cursor??null,e},useTeams(c){let d=(0,n.useAsyncCache)(b._serverTeamsCache,[a.id,c?.orderBy,c?.desc,c?.cursor,c?.limit,c?.query],"user.useTeams()");return(0,i.useMemo)(()=>{let a=d.items.map(a=>b._serverTeamFromCrud(a));return a.nextCursor=d.pagination?.next_cursor??null,a},[d])},createTeam:async c=>{let d=await b._interface.createServerTeam(H({creatorUserId:a.id,...c}));return await b._serverTeamsCache.refreshWhere(()=>!0),await b._updateServerUser(a.id,{selectedTeamId:d.id}),b._serverTeamFromCrud(d)},leaveTeam:async c=>{await b._interface.leaveServerTeam({teamId:c.id,userId:a.id}),await b._refreshTeamMembership(c.id,a.id)},listTeamInvitations:async()=>m.Result.orThrow(await b._serverUserTeamInvitationsCache.getOrWait([a.id],"write-only")).map(c=>b._serverReceivedTeamInvitationFromCrud(a.id,c)),useTeamInvitations(){let c=(0,n.useAsyncCache)(b._serverUserTeamInvitationsCache,[a.id],"user.useTeamInvitations()");return(0,i.useMemo)(()=>c.map(c=>b._serverReceivedTeamInvitationFromCrud(a.id,c)),[c])},async listPermissions(c,d){if(c&&"id"in c){let e=d?.recursive??!0;return m.Result.orThrow(await b._serverTeamUserPermissionsCache.getOrWait([c.id,a.id,e],"write-only")).map(a=>b._serverPermissionFromCrud(a))}{let d=c?.recursive??!0;return m.Result.orThrow(await b._serverUserProjectPermissionsCache.getOrWait([a.id,d],"write-only")).map(a=>b._serverPermissionFromCrud(a))}},usePermissions(c,d){if(c&&"id"in c){let e=d?.recursive??!0,f=(0,n.useAsyncCache)(b._serverTeamUserPermissionsCache,[c.id,a.id,e],"user.usePermissions()");return(0,i.useMemo)(()=>f.map(a=>b._serverPermissionFromCrud(a)),[f])}{let d=c?.recursive??!0,e=(0,n.useAsyncCache)(b._serverUserProjectPermissionsCache,[a.id,d],"user.usePermissions()");return(0,i.useMemo)(()=>e.map(a=>b._serverPermissionFromCrud(a)),[e])}},async getPermission(a,b){return a&&"string"!=typeof a?(await this.listPermissions(a)).find(a=>a.id===b)??null:(await this.listPermissions()).find(b=>b.id===a)??null},usePermission(a,b){if(a&&"string"!=typeof a){let c=this.usePermissions(a);return(0,i.useMemo)(()=>c.find(a=>a.id===b)??null,[c,b])}{let b=this.usePermissions();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}},async hasPermission(a,b){return a&&"string"!=typeof a?await this.getPermission(a,b)!==null:await this.getPermission(a)!==null},async update(c){await b._updateServerUser(a.id,c)},sendVerificationEmail:async()=>await b._checkFeatureSupport("sendVerificationEmail() on ServerUser",{}),async updatePassword(c){let d=await b._interface.updatePassword(c);return await b._serverUserCache.refresh([a.id]),d},async setPassword(c){let d=await this.update(c);return await b._serverUserCache.refresh([a.id]),d},async getTeamProfile(c){let d=m.Result.orThrow(await b._serverUserTeamProfileCache.getOrWait([c.id,a.id],"write-only"));return b._serverEditableTeamProfileFromCrud(d)},useTeamProfile(c){let d=(0,n.useAsyncCache)(b._serverUserTeamProfileCache,[c.id,a.id],"user.useTeamProfile()");return(0,i.useMemo)(()=>b._serverEditableTeamProfileFromCrud(d),[d])},listContactChannels:async()=>m.Result.orThrow(await b._serverContactChannelsCache.getOrWait([a.id],"write-only")).map(c=>b._serverContactChannelFromCrud(a.id,c)),useContactChannels(){let c=(0,n.useAsyncCache)(b._serverContactChannelsCache,[a.id],"user.useContactChannels()");return(0,i.useMemo)(()=>c.map(c=>b._serverContactChannelFromCrud(a.id,c)),[c])},createContactChannel:async c=>{var d;let e=await b._interface.createServerContactChannel((d=a.id,{type:c.type,value:c.value,is_verified:c.isVerified,user_id:d,used_for_auth:c.usedForAuth,is_primary:c.isPrimary}));return await Promise.all([b._serverContactChannelsCache.refresh([a.id]),b._serverUserCache.refresh([a.id])]),b._serverContactChannelFromCrud(a.id,e)},useNotificationCategories:()=>(0,n.useAsyncCache)(b._serverNotificationCategoriesCache,[a.id],"user.useNotificationCategories()").map(c=>b._serverNotificationCategoryFromCrud(a.id,c)),listNotificationCategories:async()=>m.Result.orThrow(await b._serverNotificationCategoriesCache.getOrWait([a.id],"write-only")).map(c=>b._serverNotificationCategoryFromCrud(a.id,c)),useApiKeys:()=>(0,n.useAsyncCache)(b._serverUserApiKeysCache,[a.id],"user.useApiKeys()").map(a=>b._serverApiKeyFromCrud(a)),listApiKeys:async()=>m.Result.orThrow(await b._serverUserApiKeysCache.getOrWait([a.id],"write-only")).map(a=>b._serverApiKeyFromCrud(a)),async createApiKey(c){let d=await b._interface.createProjectApiKey(await F("user",a.id,c),null,"server");return await b._serverUserApiKeysCache.refresh([a.id]),b._serverApiKeyFromCrud(d)},useOAuthProviders(){let c=(0,n.useAsyncCache)(b._serverOAuthProvidersCache,[a.id],"user.useOAuthProviders()");return(0,i.useMemo)(()=>c.map(a=>b._serverOAuthProviderFromCrud(a)),[c])},listOAuthProviders:async()=>m.Result.orThrow(await b._serverOAuthProvidersCache.getOrWait([a.id],"write-only")).map(a=>b._serverOAuthProviderFromCrud(a)),useOAuthProvider(a){let b=this.useOAuthProviders();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])},async getOAuthProvider(a){return(await this.listOAuthProviders()).find(b=>b.id===a)??null},async registerPasskey(c){let d,e=c?.hostname||(await b._getCurrentUrl())?.hostname;if(!e)throw new h.HexclaveAssertionError("hostname must be provided if the Stack App does not have a redirect method");let f=await b._interface.initiateServerPasskeyRegistration(a.id);if("ok"!==f.status)return m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to get initiation options for passkey registration"));let{options_json:g,code:i}=f.data;if("THIS_VALUE_WILL_BE_REPLACED.example.com"!==g.rp.id)throw new h.HexclaveAssertionError(`Expected returned RP ID from server to equal sentinel, but found ${g.rp.id}`);g.rp.id=e;try{d=await z({optionsJSON:g})}catch(a){if(a instanceof v)return m.Result.error(new k.KnownErrors.PasskeyWebAuthnError(a.message,a.name));return(0,h.captureError)("passkey-registration-failed",a),m.Result.error(new k.KnownErrors.PasskeyRegistrationFailed("Failed to start passkey registration due to unknown error"))}let{accessToken:j,refreshToken:l}=await b._interface.createServerUserSession(a.id,6e4*2,!1),n=new o.InternalSession({accessToken:j,refreshToken:l,refreshAccessTokenCallback:async()=>null}),p=await b._interface.registerPasskey({credential:d,code:i},n);return await b._serverUserCache.refresh([a.id]),p},...b._createServerCustomer(a.id,"user")})}_serverTeamUserFromCrud(a){return J({...this._serverUserFromCrud(a.user),teamProfile:{displayName:a.display_name,profileImageUrl:a.profile_image_url}})}_serverSentTeamInvitationFromCrud(a){return{id:a.id,recipientEmail:a.recipient_email,expiresAt:new Date(a.expires_at_millis),revoke:async()=>{await this._interface.revokeServerTeamInvitation(a.id,a.team_id),await this._serverTeamInvitationsCache.refresh([a.team_id])}}}_serverReceivedTeamInvitationFromCrud(a,b){let c=this;return{id:b.id,teamId:b.team_id,teamDisplayName:b.team_display_name,recipientEmail:b.recipient_email,expiresAt:new Date(b.expires_at_millis),accept:async()=>{await c._interface.acceptServerTeamInvitationById(b.id,a),await Promise.all([c._serverUserTeamInvitationsCache.refresh([a]),c._serverTeamInvitationsCache.refresh([b.team_id]),c._refreshTeamMembership(b.team_id,a)])}}}_currentUserFromCrud(a,b){return J({...this._serverUserFromCrud(a),...this._createAuth(b),...this._isInternalProject()?this._createInternalUserExtra(b):{}})}_serverTeamFromCrud(a){let b=this;return{id:a.id,displayName:a.display_name,profileImageUrl:a.profile_image_url,createdAt:new Date(a.created_at_millis),clientMetadata:a.client_metadata,clientReadOnlyMetadata:a.client_read_only_metadata,serverMetadata:a.server_metadata,async update(c){await b._interface.updateServerTeam(a.id,{display_name:c.displayName,profile_image_url:c.profileImageUrl,client_metadata:c.clientMetadata,client_read_only_metadata:c.clientReadOnlyMetadata,server_metadata:c.serverMetadata}),await Promise.all([b._serverTeamsCache.refreshWhere(()=>!0),b._serverUsersCache.refreshWhere(()=>!0)])},async delete(){await b._interface.deleteServerTeam(a.id),await Promise.all([b._serverTeamsCache.refreshWhere(()=>!0),b._serverUsersCache.refreshWhere(()=>!0)])},listUsers:async()=>m.Result.orThrow(await b._serverTeamMemberProfilesCache.getOrWait([a.id],"write-only")).map(a=>b._serverTeamUserFromCrud(a)),useUsers(){let c=(0,n.useAsyncCache)(b._serverTeamMemberProfilesCache,[a.id],"team.useUsers()");return(0,i.useMemo)(()=>c.map(a=>b._serverTeamUserFromCrud(a)),[c])},async addUser(c){await b._interface.addServerUserToTeam({teamId:a.id,userId:c}),await b._refreshTeamMembership(a.id,c)},async removeUser(c){await b._interface.removeServerUserFromTeam({teamId:a.id,userId:c}),await b._refreshTeamMembership(a.id,c)},async inviteUser(c){await b._interface.sendServerTeamInvitation({teamId:a.id,email:c.email,callbackUrl:c.callbackUrl??D(b._getUrls().teamInvitation,"callbackUrl")}),await b._serverTeamInvitationsCache.refresh([a.id])},listInvitations:async()=>m.Result.orThrow(await b._serverTeamInvitationsCache.getOrWait([a.id],"write-only")).map(a=>b._serverSentTeamInvitationFromCrud(a)),useInvitations(){let c=(0,n.useAsyncCache)(b._serverTeamInvitationsCache,[a.id],"team.useInvitations()");return(0,i.useMemo)(()=>c.map(a=>b._serverSentTeamInvitationFromCrud(a)),[c])},useApiKeys:()=>(0,n.useAsyncCache)(b._serverTeamApiKeysCache,[a.id],"team.useApiKeys()").map(a=>b._serverApiKeyFromCrud(a)),listApiKeys:async()=>m.Result.orThrow(await b._serverTeamApiKeysCache.getOrWait([a.id],"write-only")).map(a=>b._serverApiKeyFromCrud(a)),async createApiKey(c){let d=await b._interface.createProjectApiKey(await F("team",a.id,c),null,"server");return await b._serverTeamApiKeysCache.refresh([a.id]),b._serverApiKeyFromCrud(d)},...b._createServerCustomer(a.id,"team")}}_serverItemFromCrud(a,b){let c=this;return{displayName:b.display_name,quantity:b.quantity,nonNegativeQuantity:Math.max(0,b.quantity),increaseQuantity:async d=>{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};await c._interface.updateItemQuantity(e,{delta:d}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id])},decreaseQuantity:async d=>{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};await c._interface.updateItemQuantity(e,{delta:-d,allow_negative:!0}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id])},tryDecreaseQuantity:async d=>{try{let e="user"===a.type?{itemId:b.id,userId:a.id}:"team"===a.type?{itemId:b.id,teamId:a.id}:{itemId:b.id,customCustomerId:a.id};return await c._interface.updateItemQuantity(e,{delta:-d}),"user"===a.type?await c._serverUserItemsCache.refresh([a.id,b.id]):"team"===a.type?await c._serverTeamItemsCache.refresh([a.id,b.id]):await c._serverCustomItemsCache.refresh([a.id,b.id]),!0}catch(a){if(a instanceof k.KnownErrors.ItemQuantityInsufficientAmount)return!1;throw a}}}}async _getUserApiKey(a){let b=m.Result.orThrow(await this._serverCheckApiKeyCache.getOrWait(["user",a.apiKey],"write-only"));return b?this._serverApiKeyFromCrud(b):null}async _getTeamApiKey(a){let b=m.Result.orThrow(await this._serverCheckApiKeyCache.getOrWait(["team",a.apiKey],"write-only"));return b?this._serverApiKeyFromCrud(b):null}_useUserApiKey(a){let b=(0,n.useAsyncCache)(this._serverCheckApiKeyCache,["user",a.apiKey],"serverApp.useUserApiKey()");return(0,i.useMemo)(()=>b?this._serverApiKeyFromCrud(b):null,[b])}_useTeamApiKey(a){let b=(0,n.useAsyncCache)(this._serverCheckApiKeyCache,["team",a.apiKey],"serverApp.useTeamApiKey()");return(0,i.useMemo)(()=>b?this._serverApiKeyFromCrud(b):null,[b])}async _getUserByApiKey(a){let b=await this._getUserApiKey({apiKey:a});return null===b?null:await this.getServerUserById(b.userId)}async _getUserByConvex(a,b){let c=await a.auth.getUserIdentity();if(null===c)return null;let d=await this.getServerUserById(c.subject);return d?.isAnonymous&&!b?null:d}_useUserByConvex(a,b){let c=(0,n.useAsyncCache)(this._convexIdentitySubjectCache,[a],"serverApp.useUserByConvex()");if(null===c)return null;let d=this.useUserById(c);return d?.isAnonymous&&!b?null:d}_useUserByApiKey(a){let b=this._useUserApiKey({apiKey:a});return null===b?null:this.useUserById(b.userId)}async _getTeamByApiKey(a){let b=await this._getTeamApiKey({apiKey:a});return null===b?null:await this.getTeam(b.teamId)}_useTeamByApiKey(a){let b=this._useTeamApiKey({apiKey:a});return null===b?null:this.useTeam(b.teamId)}async createUser(a){let b=await this._interface.createServerUser({primary_email:a.primaryEmail,password:a.password,otp_auth_enabled:a.otpAuthEnabled,primary_email_auth_enabled:a.primaryEmailAuthEnabled,display_name:a.displayName,primary_email_verified:a.primaryEmailVerified,client_metadata:a.clientMetadata,client_read_only_metadata:a.clientReadOnlyMetadata,server_metadata:a.serverMetadata,country_code:a.countryCode,risk_scores:a.riskScores?{sign_up:{bot:a.riskScores.signUp.bot,free_trial_abuse:a.riskScores.signUp.freeTrialAbuse}}:void 0});return await this._refreshUsers(),this._serverUserFromCrud(b)}async getUser(a){if("string"==typeof a)return await this.getServerUserById(a);{if("object"==typeof a&&"apiKey"in a)return await this._getUserByApiKey(a.apiKey);if("object"==typeof a&&"from"in a&&"convex"===a.from)return await this._getUserByConvex(a.ctx,"or"in a&&"anonymous"===a.or);if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=await this._getSession(a?.tokenStore),c=m.Result.orThrow(await this._currentServerUserCache.getOrWait([b],"write-only")),d=a?.or==="anonymous"||a?.or==="anonymous-if-exists[deprecated]",e=a?.includeRestricted===!0||d;if(null===c||c.is_anonymous&&!d||c.is_restricted&&!e)switch(a?.or){case"redirect":!c?.is_anonymous&&c?.is_restricted?await this.redirectToOnboarding({replace:!0}):await this.redirectToSignIn({replace:!0});break;case"throw":throw Error("User is not signed in but getUser was called with { or: 'throw' }");case"anonymous":{let a=await this._signUpAnonymously();return await this.getUser({tokenStore:a,or:"anonymous-if-exists[deprecated]",includeRestricted:!0})??(0,h.throwErr)("Something went wrong while signing up anonymously")}case void 0:case"anonymous-if-exists[deprecated]":case"return-null":return null}return c&&this._currentUserFromCrud(c,b)}}async getServerUser(){return console.warn("hexclaveServerApp.getServerUser is deprecated; use hexclaveServerApp.getUser instead"),await this.getUser()}async getServerUserById(a){let b=m.Result.orThrow(await this._serverUserCache.getOrWait([a],"write-only"));return b&&this._serverUserFromCrud(b)}useUser(a){if("string"==typeof a)return this.useUserById(a);{if("object"==typeof a&&"apiKey"in a)return this._useUserByApiKey(a.apiKey);if("object"==typeof a&&"from"in a&&"convex"===a.from)return this._useUserByConvex(a.ctx,"or"in a&&"anonymous"===a.or);if(a?.or==="anonymous"&&!1===a.includeRestricted)throw Error("Cannot use { or: 'anonymous' } with { includeRestricted: false }. Anonymous users implicitly include restricted users.");this._ensurePersistentTokenStore(a?.tokenStore);let b=this._useSession(a?.tokenStore),c=(0,n.useAsyncCache)(this._currentServerUserCache,[b],"serverApp.useUser()");if(a?.or==="anonymous"||a?.or,a?.includeRestricted,null===c)switch(a?.or){case"redirect":throw(0,g.runAsynchronously)(this.redirectToSignIn({replace:!0})),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return");case"throw":throw Error("User is not signed in but useUser was called with { or: 'throw' }");case"anonymous":throw(0,g.runAsynchronously)(async()=>{await this._signUpAnonymously()}),(0,l.suspend)(),new h.HexclaveAssertionError("suspend should never return")}return(0,i.useMemo)(()=>c&&this._currentUserFromCrud(c,b),[c,b,a?.or])}}useUserById(a){let b=(0,n.useAsyncCache)(this._serverUserCache,[a],"serverApp.useUserById()");return(0,i.useMemo)(()=>b&&this._serverUserFromCrud(b),[b])}async listUsers(a){let b=m.Result.orThrow(await this._serverUsersCache.getOrWait([a?.cursor,a?.limit,a?.orderBy,a?.desc,a?.query,a?.includeRestricted,a?.includeAnonymous,a?.onlyAnonymous,a?.teamId],"write-only")),c=b.items.map(a=>this._serverUserFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}useUsers(a){let b=(0,n.useAsyncCache)(this._serverUsersCache,[a?.cursor,a?.limit,a?.orderBy,a?.desc,a?.query,a?.includeRestricted,a?.includeAnonymous,a?.onlyAnonymous,a?.teamId],"serverApp.useUsers()"),c=b.items.map(a=>this._serverUserFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}_serverPermissionFromCrud(a){return{id:a.id}}_serverTeamPermissionDefinitionFromCrud(a){return{id:a.id,description:a.description,containedPermissionIds:a.contained_permission_ids}}_serverProjectPermissionDefinitionFromCrud(a){return{id:a.id,description:a.description,containedPermissionIds:a.contained_permission_ids}}async getItem(a){if("userId"in a){let b=m.Result.orThrow(await this._serverUserItemsCache.getOrWait([a.userId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"user",id:a.userId},b)}if("teamId"in a){let b=m.Result.orThrow(await this._serverTeamItemsCache.getOrWait([a.teamId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"team",id:a.teamId},b)}{let b=m.Result.orThrow(await this._serverCustomItemsCache.getOrWait([a.customCustomerId,a.itemId],"write-only"));return this._serverItemFromCrud({type:"custom",id:a.customCustomerId},b)}}async listProducts(a){if("userId"in a){let b=m.Result.orThrow(await this._serverUserProductsCache.getOrWait([a.userId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}if("teamId"in a){let b=m.Result.orThrow(await this._serverTeamProductsCache.getOrWait([a.teamId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}let b=m.Result.orThrow(await this._serverCustomProductsCache.getOrWait([a.customCustomerId,a.cursor??null,a.limit??null],"write-only"));return this._customerProductsFromResponse(b)}useItem(a){let b,c,d;"userId"in a?(b="user",c=a.userId,d=this._serverUserItemsCache):"teamId"in a?(b="team",c=a.teamId,d=this._serverTeamItemsCache):(b="custom",c=a.customCustomerId,d=this._serverCustomItemsCache);let e=[c,a.itemId],f=(0,n.useAsyncCache)(d,e,"serverApp.useItem()");return(0,i.useMemo)(()=>this._serverItemFromCrud({type:b,id:c},f),[f])}async grantProduct(a){let b,c;"userId"in a?(b="user",c=a.userId):"teamId"in a?(b="team",c=a.teamId):(b="custom",c=a.customCustomerId),await this._interface.grantProduct({customerType:b,customerId:c,productId:"productId"in a?a.productId:void 0,product:"product"in a?a.product:void 0,quantity:a.quantity}),await ("user"===b?this._serverUserProductsCache:"team"===b?this._serverTeamProductsCache:this._serverCustomProductsCache).refresh([c,null,null])}async createTeam(a){let b=await this._interface.createServerTeam(H(a));return await this._serverTeamsCache.refreshWhere(()=>!0),this._serverTeamFromCrud(b)}async listTeams(a){let b=m.Result.orThrow(await this._serverTeamsCache.getOrWait([void 0,a?.orderBy,a?.desc,a?.cursor,a?.limit,a?.query],"write-only")),c=b.items.map(a=>this._serverTeamFromCrud(a));return c.nextCursor=b.pagination?.next_cursor??null,c}useTeams(a){let b=(0,n.useAsyncCache)(this._serverTeamsCache,[void 0,a?.orderBy,a?.desc,a?.cursor,a?.limit,a?.query],"serverApp.useTeams()");return(0,i.useMemo)(()=>{let a=b.items.map(a=>this._serverTeamFromCrud(a));return a.nextCursor=b.pagination?.next_cursor??null,a},[b])}async listTeamMemberPermissions(a,b){let c=b?.recursive??!1;return m.Result.orThrow(await this._serverAllTeamMemberPermissionsCache.getOrWait([a,c],"write-only")).map(a=>({userId:a.user_id,permissionId:a.id}))}useTeamMemberPermissions(a,b){let c=b?.recursive??!1,d=(0,n.useAsyncCache)(this._serverAllTeamMemberPermissionsCache,[a,c],"serverApp.useTeamMemberPermissions()");return(0,i.useMemo)(()=>d.map(a=>({userId:a.user_id,permissionId:a.id})),[d])}async getTeam(a){return"object"==typeof a&&"apiKey"in a?await this._getTeamByApiKey(a.apiKey):(await this.listTeams()).find(b=>b.id===a)??null}useTeam(a){if("object"==typeof a&&"apiKey"in a)return this._useTeamByApiKey(a.apiKey);{let b=this.useTeams();return(0,i.useMemo)(()=>b.find(b=>b.id===a)??null,[b,a])}}_createServerDataVaultStore(a){let b=a=>{if("string"!=typeof a.secret)throw Error("secret must be a string, got "+typeof a.secret)};return{id:a,setValue:async(c,d,e)=>{b(e),await this._interface.setDataVaultStoreValue(e.secret,a,c,d)},getValue:async(c,d)=>(b(d),m.Result.orThrow(await this._serverDataVaultStoreValueCache.getOrWait([a,c,d.secret],"write-only"))),useValue:(c,d)=>(b(d),(0,n.useAsyncCache)(this._serverDataVaultStoreValueCache,[a,c,d.secret],"store.useValue()"))}}async getDataVaultStore(a){return this._createServerDataVaultStore(a)}useDataVaultStore(a){return(0,i.useMemo)(()=>this._createServerDataVaultStore(a),[a])}async sendEmail(a){await this._interface.sendEmail(a),await this._emailDeliveryInfoCache.refresh([])}async getEmailDeliveryStats(){return m.Result.orThrow(await this._emailDeliveryInfoCache.getOrWait([],"write-only"))}useEmailDeliveryStats(){return(0,n.useAsyncCache)(this._emailDeliveryInfoCache,[],"hexclaveServerApp.useEmailDeliveryStats()")}async activateEmailCapacityBoost(){await this._interface.activateEmailCapacityBoost(),await this._emailDeliveryInfoCache.refresh([])}async _refreshSession(a){await Promise.all([super._refreshUser(a),this._currentServerUserCache.refresh([a])])}async _refreshUsers(){await Promise.all([super._refreshUsers(),this._serverUserCache.refreshWhere(()=>!0),this._serverUsersCache.refreshWhere(()=>!0),this._serverContactChannelsCache.refreshWhere(()=>!0),this._serverOAuthProvidersCache.refreshWhere(()=>!0),this._serverUserConnectedAccountsCache.refreshWhere(()=>!0)])}async createOAuthProvider(a){try{let b=await this._interface.createServerOAuthProvider({user_id:a.userId,provider_config_id:a.providerConfigId,account_id:a.accountId,email:a.email,allow_sign_in:a.allowSignIn,allow_connected_accounts:a.allowConnectedAccounts});return await Promise.all([this._serverOAuthProvidersCache.refresh([a.userId]),this._serverUserConnectedAccountsCache.refresh([a.userId])]),m.Result.ok(this._serverOAuthProviderFromCrud(b))}catch(a){if(k.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a))return m.Result.error(a);throw a}}},bo=a.i(664967);function bp(a){let b=[],c=`/projects/${a.id}/domains`;for(let{domain:d}of(a.config.allow_localhost&&b.push({message:"Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings",relativeFixUrl:c}),a.config.domains)){let e;try{let a=d.replace(/\*+/g,"wildcard-placeholder");e=new URL(a)}catch(e){(0,h.captureError)("production-mode-domain-not-valid",new h.HexclaveAssertionError("Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place",{domain:d,projectId:a})),b.push({message:"Trusted domain is not a valid URL: "+d,relativeFixUrl:c});continue}(0,M.isLocalhost)(e)?b.push({message:"Localhost domains are not allowed to be trusted in production mode: "+d,relativeFixUrl:c}):e.hostname.match(/^\d+(\.\d+)*$/)?b.push({message:"Direct IPs are not valid for trusted domains in production mode: "+d,relativeFixUrl:c}):"https:"!==e.protocol&&b.push({message:"Trusted domains should be HTTPS: "+d,relativeFixUrl:c})}return b}var bq=class extends bn{constructor(a,b){const c=(0,n.resolveConstructorOptions)(a),d=c.publishableClientKey??(0,n.getDefaultPublishableClientKey)();super(c,{...b,interface:b?.interface??(()=>{let a=(0,n.resolveApiUrls)(c.baseUrl);return new bo.HexclaveAdminInterface({getBaseUrl:()=>a()[0],getApiUrls:a,projectId:c.projectId??(0,n.getDefaultProjectId)(),extraRequestHeaders:c.extraRequestHeaders??(0,n.getDefaultExtraRequestHeaders)(),clientVersion:n.clientVersion,...c.projectOwnerSession?{projectOwnerSession:c.projectOwnerSession}:{...d?{publishableClientKey:d}:{},secretServerKey:c.secretServerKey??(0,n.getDefaultSecretServerKey)(),superSecretAdminKey:c.superSecretAdminKey??(0,n.getDefaultSuperSecretAdminKey)()}})})()}),this._adminProjectCache=(0,n.createCache)(async()=>await this._interface.getProject()),this._internalApiKeysCache=(0,n.createCache)(async()=>await this._interface.listInternalApiKeys()),this._adminEmailThemeCache=(0,n.createCache)(async([a])=>await this._interface.getEmailTheme(a)),this._adminEmailThemesCache=(0,n.createCache)(async()=>await this._interface.listEmailThemes()),this._adminEmailTemplatesCache=(0,n.createCache)(async()=>await this._interface.listInternalEmailTemplates()),this._adminEmailDraftsCache=(0,n.createCache)(async()=>await this._interface.listInternalEmailDrafts()),this._adminTeamPermissionDefinitionsCache=(0,n.createCache)(async()=>await this._interface.listTeamPermissionDefinitions()),this._adminProjectPermissionDefinitionsCache=(0,n.createCache)(async()=>await this._interface.listProjectPermissionDefinitions()),this._svixTokenCache=(0,n.createCache)(async()=>await this._interface.getSvixToken()),this._metricsCache=(0,n.createCache)(async([a,b])=>{let c=b?Object.fromEntries(new URLSearchParams(b)):void 0;return await this._interface.getMetrics(a,c)}),this._userActivityCache=(0,n.createCache)(async([a])=>await this._interface.getUserActivity(a)),this._metricsUserCountsCache=(0,n.createCache)(async()=>await this._interface.getMetricsUserCounts()),this._emailPreviewCache=(0,n.createCache)(async([a,b,c,d])=>await this._interface.renderEmailPreview({themeId:a,themeTsxSource:b,templateId:c,templateTsxSource:d})),this._emailPreviewWithEditableMarkersCache=(0,n.createCache)(async([a,b,c,d,e])=>await this._interface.renderEmailPreview({themeId:a,themeTsxSource:b,templateId:c,templateTsxSource:d,editableMarkers:!0,editableSource:e})),this._configOverridesCache=(0,n.createCache)(async()=>await this._interface.getConfig()),this._stripeAccountInfoCache=(0,n.createCache)(async()=>{try{return await this._interface.getStripeAccountInfo()}catch(a){if(a?.status===404)return null;throw a}}),this._transactionsCache=(0,n.createCache)(async([a,b,c,d,e])=>await this._interface.listTransactions({cursor:a,limit:b,type:c,customerType:d,customerId:e}))}_adminConfigFromCrud(a){return JSON.parse(a.config_string)}_adminOwnedProjectFromCrud(a,b){if(null!==this._tokenStoreInit)throw new h.HexclaveAssertionError("Owned apps must always have tokenStore === null — did you not create this project with app._createOwnedApp()?");return{...this._adminProjectFromCrud(a,b),app:this}}_adminProjectFromCrud(a,b){if(a.id!==this.projectId)throw new h.HexclaveAssertionError(`The project ID of the provided project JSON (${a.id}) does not match the project ID of the app (${this.projectId})!`);let c=this;return{id:a.id,displayName:a.display_name,description:a.description,createdAt:new Date(a.created_at_millis),isProductionMode:a.is_production_mode,isDevelopmentEnvironment:a.is_development_environment,ownerTeamId:a.owner_team_id,onboardingStatus:a.onboarding_status,logoUrl:a.logo_url,logoFullUrl:a.logo_full_url,logoDarkModeUrl:a.logo_dark_mode_url,logoFullDarkModeUrl:a.logo_full_dark_mode_url,config:{signUpEnabled:a.config.sign_up_enabled,credentialEnabled:a.config.credential_enabled,magicLinkEnabled:a.config.magic_link_enabled,passkeyEnabled:a.config.passkey_enabled,clientTeamCreationEnabled:a.config.client_team_creation_enabled,clientUserDeletionEnabled:a.config.client_user_deletion_enabled,allowLocalhost:a.config.allow_localhost,oauthAccountMergeStrategy:a.config.oauth_account_merge_strategy,allowUserApiKeys:a.config.allow_user_api_keys,allowTeamApiKeys:a.config.allow_team_api_keys,oauthProviders:a.config.oauth_providers.map(a=>"shared"===a.type?{id:a.id,type:"shared"}:{id:a.id,type:"standard",clientId:a.client_id??(0,h.throwErr)("Client ID is missing"),clientSecret:a.client_secret??(0,h.throwErr)("Client secret is missing"),facebookConfigId:a.facebook_config_id,microsoftTenantId:a.microsoft_tenant_id,appleBundleIds:a.apple_bundle_ids}),emailConfig:"shared"===a.config.email_config.type?{type:"shared"}:{type:"standard",host:a.config.email_config.host??(0,h.throwErr)("Email host is missing"),port:a.config.email_config.port??(0,h.throwErr)("Email port is missing"),username:a.config.email_config.username??(0,h.throwErr)("Email username is missing"),password:a.config.email_config.password??(0,h.throwErr)("Email password is missing"),senderName:a.config.email_config.sender_name??(0,h.throwErr)("Email sender name is missing"),senderEmail:a.config.email_config.sender_email??(0,h.throwErr)("Email sender email is missing")},emailTheme:a.config.email_theme,domains:a.config.domains.map(a=>({domain:a.domain,handlerPath:a.handler_path})),createTeamOnSignUp:a.config.create_team_on_sign_up,teamCreatorDefaultPermissions:a.config.team_creator_default_permissions,teamMemberDefaultPermissions:a.config.team_member_default_permissions,userDefaultPermissions:a.config.user_default_permissions},getConfig:async()=>c._adminConfigFromCrud(await c._interface.getConfig()),useConfig(){let a=(0,n.useAsyncCache)(c._configOverridesCache,[],"project.useConfig()");return(0,i.useMemo)(()=>c._adminConfigFromCrud(a),[a])},async updateConfig(a){await c._interface.updateConfigOverride("environment",a),await c._refreshProjectConfig()},async pushConfig(a,b){var d;await c._interface.setConfigOverride("branch",a,"pushed-from-github"===(d=b.source).type?{type:"pushed-from-github",owner:d.owner,repo:d.repo,branch:d.branch,commit_hash:d.commitHash,config_file_path:d.configFilePath,workflow_path:d.workflowPath}:d),await c._refreshProjectConfig()},async updatePushedConfig(a){await c._interface.updateConfigOverride("branch",a),await c._refreshProjectConfig()},getPushedConfigSource:async()=>{var a;return"pushed-from-github"===(a=await c._interface.getPushedConfigSource()).type?{type:"pushed-from-github",owner:a.owner,repo:a.repo,branch:a.branch,commitHash:a.commit_hash,configFilePath:a.config_file_path,workflowPath:a.workflow_path}:a},async unlinkPushedConfigSource(){await c._interface.unlinkPushedConfigSource(),await c._refreshProjectConfig()},async resetConfigOverrideKeys(a,b){await c._interface.resetConfigOverrideKeys(a,b),await c._refreshProjectConfig()},getConfigOverride:async a=>JSON.parse((await c._interface.getConfigOverride(a)).config_string),async replaceConfigOverride(a,b){if("branch"===a){let d=await c._interface.getPushedConfigSource();await c._interface.setConfigOverride(a,b,d)}else await c._interface.setConfigOverride(a,b);await c._refreshProjectConfig()},async update(a){let{requirePublishableClientKey:d,...e}=a,f=S(e),g=!!f.config&&(0,E.typedValues)(f.config).some(a=>void 0!==a);(0,E.typedEntries)(f).some(([a,b])=>"config"===a?g:void 0!==b)&&(await c._interface.updateProject(f),await b()),void 0!==d&&(await c._interface.updateConfigOverride("project",{"project.requirePublishableClientKey":d}),await c._refreshProjectConfig())},async delete(){await c._interface.deleteProject()},getProductionModeErrors:async()=>bp(a),useProductionModeErrors:()=>bp(a)}}_adminEmailTemplateFromCrud(a){return{type:a.type,subject:a.subject,content:a.content,isDefault:a.is_default}}async getProject(){return this._adminProjectFromCrud(m.Result.orThrow(await this._adminProjectCache.getOrWait([],"write-only")),()=>this._refreshProject())}useProject(){let a=(0,n.useAsyncCache)(this._adminProjectCache,[],"adminApp.useProject()");return(0,i.useMemo)(()=>this._adminProjectFromCrud(a,()=>this._refreshProject()),[a])}_createInternalApiKeyBaseFromCrud(a){let b=this;return{id:a.id,description:a.description,expiresAt:new Date(a.expires_at_millis),manuallyRevokedAt:a.manually_revoked_at_millis?new Date(a.manually_revoked_at_millis):null,createdAt:new Date(a.created_at_millis),isValid(){return null===this.whyInvalid()},whyInvalid(){return this.expiresAt.getTime()<Date.now()?"expired":this.manuallyRevokedAt?"manually-revoked":null},async revoke(){let c=await b._interface.revokeInternalApiKeyById(a.id);return await b._refreshInternalApiKeys(),c}}}_createInternalApiKeyFromCrud(a){return{...this._createInternalApiKeyBaseFromCrud(a),publishableClientKey:a.publishable_client_key?{lastFour:a.publishable_client_key.last_four}:null,secretServerKey:a.secret_server_key?{lastFour:a.secret_server_key.last_four}:null,superSecretAdminKey:a.super_secret_admin_key?{lastFour:a.super_secret_admin_key.last_four}:null}}_createInternalApiKeyFirstViewFromCrud(a){return{...this._createInternalApiKeyBaseFromCrud(a),publishableClientKey:a.publishable_client_key,secretServerKey:a.secret_server_key,superSecretAdminKey:a.super_secret_admin_key}}async listInternalApiKeys(){return m.Result.orThrow(await this._internalApiKeysCache.getOrWait([],"write-only")).map(a=>this._createInternalApiKeyFromCrud(a))}useInternalApiKeys(){let a=(0,n.useAsyncCache)(this._internalApiKeysCache,[],"adminApp.useInternalApiKeys()");return(0,i.useMemo)(()=>a.map(a=>this._createInternalApiKeyFromCrud(a)),[a])}async createInternalApiKey(a){let b=await this._interface.createInternalApiKey({description:a.description,expires_at_millis:a.expiresAt.getTime(),has_publishable_client_key:a.hasPublishableClientKey,has_secret_server_key:a.hasSecretServerKey,has_super_secret_admin_key:a.hasSuperSecretAdminKey});return await this._refreshInternalApiKeys(),this._createInternalApiKeyFirstViewFromCrud(b)}useEmailThemes(){let a=(0,n.useAsyncCache)(this._adminEmailThemesCache,[],"adminApp.useEmailThemes()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name})),[a])}useEmailTemplates(){let a=(0,n.useAsyncCache)(this._adminEmailTemplatesCache,[],"adminApp.useEmailTemplates()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source})),[a])}useEmailDrafts(){let a=(0,n.useAsyncCache)(this._adminEmailDraftsCache,[],"adminApp.useEmailDrafts()");return(0,i.useMemo)(()=>a.map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source,sentAt:a.sent_at_millis?new Date(a.sent_at_millis):null})),[a])}async listEmailThemes(){return m.Result.orThrow(await this._adminEmailThemesCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name}))}async listEmailTemplates(){return m.Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source}))}async listEmailDrafts(){return m.Result.orThrow(await this._adminEmailDraftsCache.getOrWait([],"write-only")).map(a=>({id:a.id,displayName:a.display_name,themeId:a.theme_id,tsxSource:a.tsx_source,sentAt:a.sent_at_millis?new Date(a.sent_at_millis):null}))}async createTeamPermissionDefinition(a){let b=await this._interface.createTeamPermissionDefinition({id:a.id,description:a.description,contained_permission_ids:a.containedPermissionIds});return await this._adminTeamPermissionDefinitionsCache.refresh([]),this._serverTeamPermissionDefinitionFromCrud(b)}async updateTeamPermissionDefinition(a,b){await this._interface.updateTeamPermissionDefinition(a,{description:b.description,contained_permission_ids:b.containedPermissionIds}),await this._adminTeamPermissionDefinitionsCache.refresh([])}async deleteTeamPermissionDefinition(a){await this._interface.deleteTeamPermissionDefinition(a),await this._adminTeamPermissionDefinitionsCache.refresh([])}async listTeamPermissionDefinitions(){return m.Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([],"write-only")).map(a=>this._serverTeamPermissionDefinitionFromCrud(a))}async listTeamPermissionDefinitionsPaginated(a){let b=await this._interface.listTeamPermissionDefinitionsPaginated(a);return{items:b.items.map(a=>this._serverTeamPermissionDefinitionFromCrud(a)),nextCursor:b.nextCursor}}useTeamPermissionDefinitions(){let a=(0,n.useAsyncCache)(this._adminTeamPermissionDefinitionsCache,[],"adminApp.useTeamPermissionDefinitions()");return(0,i.useMemo)(()=>a.map(a=>this._serverTeamPermissionDefinitionFromCrud(a)),[a])}async createProjectPermissionDefinition(a){let b=await this._interface.createProjectPermissionDefinition({id:a.id,description:a.description,contained_permission_ids:a.containedPermissionIds});return await this._adminProjectPermissionDefinitionsCache.refresh([]),this._serverProjectPermissionDefinitionFromCrud(b)}async updateProjectPermissionDefinition(a,b){await this._interface.updateProjectPermissionDefinition(a,{description:b.description,contained_permission_ids:b.containedPermissionIds}),await this._adminProjectPermissionDefinitionsCache.refresh([])}async deleteProjectPermissionDefinition(a){await this._interface.deleteProjectPermissionDefinition(a),await this._adminProjectPermissionDefinitionsCache.refresh([])}async listProjectPermissionDefinitions(){return m.Result.orThrow(await this._adminProjectPermissionDefinitionsCache.getOrWait([],"write-only")).map(a=>this._serverProjectPermissionDefinitionFromCrud(a))}useProjectPermissionDefinitions(){let a=(0,n.useAsyncCache)(this._adminProjectPermissionDefinitionsCache,[],"adminApp.useProjectPermissionDefinitions()");return(0,i.useMemo)(()=>a.map(a=>this._serverProjectPermissionDefinitionFromCrud(a)),[a])}useSvixToken(){let a=(0,n.useAsyncCache)(this._svixTokenCache,[],"adminApp.useSvixToken()");return{token:a.token,url:a.url}}async _refreshProject(){await Promise.all([super._refreshProject(),this._adminProjectCache.refresh([])])}async _refreshProjectConfig(){await Promise.all([this._configOverridesCache.refresh([]),this._adminProjectCache.refresh([])])}async _refreshInternalApiKeys(){await this._internalApiKeysCache.refresh([])}async _refreshUsers(){await Promise.all([super._refreshUsers(),this._metricsCache.refreshWhere(()=>!0),this._metricsUserCountsCache.refresh([])])}get[R.hexclaveAppInternalsSymbol](){return{...super[R.hexclaveAppInternalsSymbol],useMetrics:(a=!1,b)=>{let c=(()=>{if(null==b)return"";let a=new URLSearchParams;for(let c of["browser","country_code","device","os","referrer","since","until"]){let d=b[c];null!=d&&a.set(c,d)}return a.toString()})();return(0,n.useAsyncCache)(this._metricsCache,[a,c],"adminApp.useMetrics()")},useUserActivity:a=>(0,n.useAsyncCache)(this._userActivityCache,[a],"adminApp.useUserActivity()"),useMetricsUserCounts:()=>(0,n.useAsyncCache)(this._metricsUserCountsCache,[],"adminApp.useMetricsUserCounts()")}}async sendTestEmail(a){let b;try{b=await this._interface.sendTestEmail({recipient_email:a.recipientEmail,email_config:{...(0,E.pick)(a.emailConfig,["host","port","username","password"]),sender_email:a.emailConfig.senderEmail,sender_name:a.emailConfig.senderName}})}catch(a){if(a instanceof k.KnownErrors.ItemQuantityInsufficientAmount)return m.Result.error({errorMessage:"Monthly email sending limit exceeded for your plan. Please upgrade your plan or wait until next month before sending more test emails."});throw a}return b.success?m.Result.ok(void 0):m.Result.error({errorMessage:b.error_message??(0,h.throwErr)("Email test error not specified")})}async sendTestWebhook(a){let b=await this._interface.sendTestWebhook({endpoint_id:a.endpointId});return b.success?m.Result.ok(void 0):m.Result.error({errorMessage:b.error_message??(0,h.throwErr)("Webhook test error not specified")})}async listSentEmails(){return(await this._interface.listSentEmails()).items.map(a=>({id:a.id,to:a.to??[],subject:a.subject,recipient:a.to?.[0]??"",sentAt:new Date(a.sent_at_millis),error:a.error}))}async setupManagedEmailProvider(a){let b=await this._interface.setupManagedEmailProvider({subdomain:a.subdomain,sender_local_part:a.senderLocalPart});return{domainId:b.domain_id,subdomain:b.subdomain,senderLocalPart:b.sender_local_part,nameServerRecords:b.name_server_records,status:b.status}}async checkManagedEmailStatus(a){return{status:(await this._interface.checkManagedEmailStatus({domain_id:a.domainId,subdomain:a.subdomain,sender_local_part:a.senderLocalPart})).status}}async listManagedEmailDomains(){return(await this._interface.listManagedEmailDomains()).items.map(a=>({domainId:a.domain_id,subdomain:a.subdomain,senderLocalPart:a.sender_local_part,status:a.status,nameServerRecords:a.name_server_records}))}async applyManagedEmailProvider(a){let b=await this._interface.applyManagedEmailProvider({domain_id:a.domainId});return await this._refreshProjectConfig(),b}async deleteManagedEmailDomain(a){return await this._interface.deleteManagedEmailDomain({resend_domain_id:a.resendDomainId})}async sendSignInInvitationEmail(a,b){await this._interface.sendSignInInvitationEmail(a,b)}async createEmailTemplate(a){let b=await this._interface.createEmailTemplate(a);return await this._adminEmailTemplatesCache.refresh([]),b}async deleteEmailTemplate(a){await this._interface.deleteEmailTemplate(a),await this._adminEmailTemplatesCache.refresh([])}async createEmailDraft(a){let b=await this._interface.createEmailDraft({display_name:a.displayName,theme_id:a.themeId,tsx_source:a.tsxSource});return await this._adminEmailDraftsCache.refresh([]),b}async updateEmailDraft(a,b){await this._interface.updateEmailDraft(a,{display_name:b.displayName,theme_id:b.themeId,tsx_source:b.tsxSource}),await this._adminEmailDraftsCache.refresh([])}async deleteEmailDraft(a){await this._interface.deleteEmailDraft(a);let b=this._adminEmailDraftsCache.getIfCached([]);"ok"===b.status&&"ok"===b.data.status&&this._adminEmailDraftsCache.forceSetCachedValue([],m.Result.ok(b.data.data.filter(b=>b.id!==a))),await this._adminEmailDraftsCache.refresh([])}async refreshEmailDrafts(){await this._adminEmailDraftsCache.refresh([])}async saveChatMessage(a,b){await this._interface.saveChatMessage(a,b)}async listChatMessages(a){return await this._interface.listChatMessages(a)}async rewriteTemplateSourceWithAI(a){return{tsxSource:(await this._interface.rewriteTemplateSourceWithAI(a)).tsx_source}}async createEmailTheme(a){let b=await this._interface.createEmailTheme(a);return await this._adminEmailThemesCache.refresh([]),b}async getEmailPreview(a){return(await this._interface.renderEmailPreview(a)).html}useEmailPreview(a){return(0,n.useAsyncCache)(this._emailPreviewCache,[a.themeId,a.themeTsxSource,a.templateId,a.templateTsxSource],"adminApp.useEmailPreview()").html}async getEmailPreviewWithEditableMarkers(a){let b=await this._interface.renderEmailPreview({...a,editableMarkers:!0,editableSource:a.editableSource});return{html:b.html,editableRegions:b.editable_regions}}useEmailPreviewWithEditableMarkers(a){let b=(0,n.useAsyncCache)(this._emailPreviewWithEditableMarkersCache,[a.themeId,a.themeTsxSource,a.templateId,a.templateTsxSource,a.editableSource],"adminApp.useEmailPreviewWithEditableMarkers()");return{html:b.html,editableRegions:b.editable_regions}}useEmailTheme(a){let b=(0,n.useAsyncCache)(this._adminEmailThemeCache,[a],"adminApp.useEmailTheme()");return{displayName:b.display_name,tsxSource:b.tsx_source}}async updateEmailTheme(a,b){await this._interface.updateEmailTheme(a,b),await this._adminEmailThemesCache.refresh([]),await this._adminEmailThemeCache.invalidate([a])}async deleteEmailTheme(a){await this._interface.deleteEmailTheme(a),await this._adminEmailThemesCache.refresh([]),await this._adminEmailThemeCache.invalidate([a])}async updateEmailTemplate(a,b,c){let d=await this._interface.updateEmailTemplate(a,b,c);return await this._adminEmailTemplatesCache.refresh([]),{renderedHtml:d.rendered_html}}async setupPayments(){let a=await this._interface.setupPayments();return await this._stripeAccountInfoCache.refresh([]),a}async createStripeWidgetAccountSession(){return await this._interface.createStripeWidgetAccountSession()}async getPaymentMethodConfigs(){return await this._interface.getPaymentMethodConfigs()}async updatePaymentMethodConfigs(a,b){await this._interface.updatePaymentMethodConfigs(a,b)}async createItemQuantityChange(a){await this._interface.updateItemQuantity({itemId:a.itemId,..."userId"in a?{userId:a.userId}:"teamId"in a?{teamId:a.teamId}:{customCustomerId:a.customCustomerId}},{delta:a.quantity,expires_at:a.expiresAt,description:a.description,allow_negative:!0})}async refundTransaction(a){let b=await this._interface.refundTransaction({type:a.type,id:a.id,invoiceId:a.invoiceId,amountUsd:a.amountUsd,endAction:a.endAction});return await this._transactionsCache.invalidateWhere(()=>!0),{refundTransactionId:b.refundTransactionId}}async listTransactions(a){return m.Result.orThrow(await this._transactionsCache.getOrWait([a.cursor,a.limit,a.type,a.customerType,a.customerId],"write-only"))}_emailOutboxCrudToAdmin(a){let b,c=a.to;b="user-primary-email"===c.type?{type:"user-primary-email",userId:c.user_id}:"user-custom-emails"===c.type?{type:"user-custom-emails",userId:c.user_id,emails:c.emails}:{type:"custom-emails",emails:c.emails};let d={id:a.id,createdAt:new Date(a.created_at_millis),updatedAt:new Date(a.updated_at_millis),tsxSource:a.tsx_source,themeId:a.theme_id??null,to:b,scheduledAt:new Date(a.scheduled_at_millis),createdWith:a.created_with,emailDraftId:a.email_draft_id,emailProgrammaticCallTemplateId:a.email_programmatic_call_template_id,variables:a.variables??{},isPaused:!1,hasRendered:!1,hasDelivered:!1,sendRetries:a.send_retries,nextSendRetryAt:a.next_send_retry_at_millis?new Date(a.next_send_retry_at_millis):null,sendAttemptErrors:a.send_attempt_errors?a.send_attempt_errors.map(a=>({attemptNumber:a.attempt_number,timestamp:a.timestamp,externalMessage:a.external_message,externalDetails:a.external_details,internalMessage:a.internal_message,internalDetails:a.internal_details})):null},e=a.has_rendered?{...d,startedRenderingAt:new Date(a.started_rendering_at_millis),renderedAt:new Date(a.rendered_at_millis),subject:a.subject,html:a.html,text:a.text,isTransactional:a.is_transactional,isHighPriority:a.is_high_priority,notificationCategoryId:a.notification_category_id,hasRendered:!0}:null,f=e&&a.started_sending_at_millis?{...e,startedSendingAt:new Date(a.started_sending_at_millis)}:null,g=f&&a.has_delivered?{...f,deliveredAt:new Date(a.delivered_at_millis),hasDelivered:!0}:null;switch(a.status){case"paused":return{...d,status:"paused",simpleStatus:"in-progress",isPaused:!0};case"preparing":return{...d,status:"preparing",simpleStatus:"in-progress"};case"rendering":return{...d,status:"rendering",simpleStatus:"in-progress",startedRenderingAt:new Date(a.started_rendering_at_millis)};case"render-error":return{...d,status:"render-error",simpleStatus:"error",startedRenderingAt:new Date(a.started_rendering_at_millis),renderedAt:new Date(a.rendered_at_millis),renderError:a.render_error};case"scheduled":return{...e,status:"scheduled",simpleStatus:"in-progress"};case"queued":return{...e,status:"queued",simpleStatus:"in-progress"};case"sending":return{...f,status:"sending",simpleStatus:"in-progress"};case"server-error":return{...f,status:"server-error",simpleStatus:"error",errorAt:new Date(a.error_at_millis),serverError:a.server_error};case"skipped":return{...d,status:"skipped",simpleStatus:"ok",skippedAt:new Date(a.skipped_at_millis),skippedReason:a.skipped_reason,skippedDetails:a.skipped_details??{},hasRendered:a.has_rendered,startedRenderingAt:a.started_rendering_at_millis?new Date(a.started_rendering_at_millis):void 0,renderedAt:a.rendered_at_millis?new Date(a.rendered_at_millis):void 0,subject:a.subject,html:a.html,text:a.text,isTransactional:a.is_transactional,isHighPriority:a.is_high_priority,notificationCategoryId:a.notification_category_id,startedSendingAt:a.started_sending_at_millis?new Date(a.started_sending_at_millis):void 0};case"bounced":return{...f,status:"bounced",simpleStatus:"error",bouncedAt:new Date(a.bounced_at_millis)};case"delivery-delayed":return{...f,status:"delivery-delayed",simpleStatus:"ok",deliveryDelayedAt:new Date(a.delivery_delayed_at_millis)};case"sent":return{...g,status:"sent",simpleStatus:"ok",canHaveDeliveryInfo:a.can_have_delivery_info};case"opened":return{...g,status:"opened",simpleStatus:"ok",openedAt:new Date(a.opened_at_millis),canHaveDeliveryInfo:!0};case"clicked":return{...g,status:"clicked",simpleStatus:"ok",clickedAt:new Date(a.clicked_at_millis),canHaveDeliveryInfo:!0};case"marked-as-spam":return{...g,status:"marked-as-spam",simpleStatus:"ok",markedAsSpamAt:new Date(a.marked_as_spam_at_millis),canHaveDeliveryInfo:!0};default:throw new h.HexclaveAssertionError(`Unknown email outbox status: ${a.status}`,{status:a.status})}}async listOutboxEmails(a){let b=await this._interface.listOutboxEmails({status:a?.status,simple_status:a?.simpleStatus,limit:a?.limit,cursor:a?.cursor});return{items:b.items.map(a=>this._emailOutboxCrudToAdmin(a)),nextCursor:b.pagination?.next_cursor??null}}async getOutboxEmail(a){let b=await this._interface.getOutboxEmail(a);return this._emailOutboxCrudToAdmin(b)}async updateOutboxEmail(a,b){let c=await this._interface.updateOutboxEmail(a,{is_paused:b.isPaused,scheduled_at_millis:b.scheduledAtMillis,cancel:b.cancel,tsx_source:b.tsxSource,theme_id:b.themeId});return this._emailOutboxCrudToAdmin(c)}async pauseOutboxEmail(a){return await this.updateOutboxEmail(a,{isPaused:!0})}async unpauseOutboxEmail(a){return await this.updateOutboxEmail(a,{isPaused:!1})}async cancelOutboxEmail(a){return await this.updateOutboxEmail(a,{cancel:!0})}useTransactions(a){return(0,n.useAsyncCache)(this._transactionsCache,[a.cursor,a.limit,a.type,a.customerType,a.customerId],"adminApp.useTransactions()")}async getStripeAccountInfo(){return await this._interface.getStripeAccountInfo()}useStripeAccountInfo(){return(0,n.useAsyncCache)(this._stripeAccountInfoCache,[],"adminApp.useStripeAccountInfo()")}async queryAnalytics(a){return await this._interface.queryAnalytics(a)}async getAnalyticsClickmap(a){return await this._interface.getAnalyticsClickmap({kind:a.kind,member_user_ids:a.memberUserIds,route_path:a.routePath,route_regex:a.routeRegex,url_pattern:a.urlPattern,user_id:a.userId,replay_id:a.replayId,device:a.device,viewport_width_min:a.viewportWidthMin,viewport_width_max:a.viewportWidthMax,sampling:a.sampling,since:a.since,until:a.until})}async createAnalyticsClickmapToken(a){return await this._interface.createAnalyticsClickmapToken(a)}async listSessionReplays(a){let b=await this._interface.listSessionReplays({cursor:a?.cursor,limit:a?.limit,user_ids:a?.userIds,team_ids:a?.teamIds,duration_ms_min:a?.durationMsMin,duration_ms_max:a?.durationMsMax,last_event_at_from_millis:a?.lastEventAtFromMillis,last_event_at_to_millis:a?.lastEventAtToMillis,click_count_min:a?.clickCountMin});return{items:b.items.map(a=>({id:a.id,projectUser:{id:a.project_user.id,displayName:a.project_user.display_name,primaryEmail:a.project_user.primary_email},startedAt:new Date(a.started_at_millis),lastEventAt:new Date(a.last_event_at_millis),chunkCount:a.chunk_count,eventCount:a.event_count})),nextCursor:b.pagination.next_cursor}}async getSessionReplay(a){let b=await this._interface.getSessionReplay(a);return{id:b.id,projectUser:{id:b.project_user.id,displayName:b.project_user.display_name,primaryEmail:b.project_user.primary_email},startedAt:new Date(b.started_at_millis),lastEventAt:new Date(b.last_event_at_millis),chunkCount:b.chunk_count,eventCount:b.event_count}}async listSessionReplayChunks(a,b){let c=await this._interface.listSessionReplayChunks(a,{cursor:b?.cursor,limit:b?.limit});return{items:c.items.map(a=>({id:a.id,batchId:a.batch_id,sessionReplaySegmentId:a.session_replay_segment_id,browserSessionId:a.browser_session_id,eventCount:a.event_count,byteLength:a.byte_length,firstEventAt:new Date(a.first_event_at_millis),lastEventAt:new Date(a.last_event_at_millis),createdAt:new Date(a.created_at_millis)})),nextCursor:c.pagination.next_cursor}}async getSessionReplayChunkEvents(a,b){return await this._interface.getSessionReplayChunkEvents(a,b)}async getSessionReplayEvents(a,b){let c=await this._interface.getSessionReplayEvents(a,b);return{chunks:c.chunks.map(a=>({id:a.id,batchId:a.batch_id,sessionReplaySegmentId:a.session_replay_segment_id,eventCount:a.event_count,byteLength:a.byte_length,firstEventAt:new Date(a.first_event_at_millis),lastEventAt:new Date(a.last_event_at_millis),createdAt:new Date(a.created_at_millis)})),chunkEvents:c.chunk_events.map(a=>({chunkId:a.chunk_id,events:a.events}))}}async previewAffectedUsersByOnboardingChange(a,b){let c=await this._interface.previewAffectedUsersByOnboardingChange({require_email_verification:a.requireEmailVerification},b);return{affectedUsers:c.affected_users.map(a=>({id:a.id,displayName:a.display_name,primaryEmail:a.primary_email,restrictedReason:a.restricted_reason})),totalAffectedCount:c.total_affected_count}}};let{_HexclaveAdminAppImpl:br,_HexclaveClientAppImpl:bs,_HexclaveServerAppImpl:bt}=(bm.LazyStackAdminAppImpl.value=bq,{_HexclaveAdminAppImpl:U(bq),_HexclaveClientAppImpl:U(bm),_HexclaveServerAppImpl:U(bn)});var bu=a.i(91775);if(a.i(861159),"internal"!==(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_PROJECT_ID"))throw Error("This project is not configured correctly. stack-dashboard must always use the internal project.");let bv="true"===(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_IS_PREVIEW"),bw="true"===(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_IS_REMOTE_DEVELOPMENT_ENVIRONMENT"),bx=new bs({baseUrl:{browser:(0,bu.getPublicEnvVar)("NEXT_PUBLIC_BROWSER_STACK_API_URL")??(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_API_URL")??(0,h.throwErr)("NEXT_PUBLIC_BROWSER_STACK_API_URL is not set"),server:(0,bu.getPublicEnvVar)("NEXT_PUBLIC_SERVER_STACK_API_URL")??(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_API_URL")??(0,h.throwErr)("NEXT_PUBLIC_SERVER_STACK_API_URL is not set")},projectId:"internal",publishableClientKey:(0,bu.getPublicEnvVar)("NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY"),tokenStore:bv||bw?"memory":"nextjs-cookie",urls:{afterSignIn:"/projects",afterSignUp:"/new-project",afterSignOut:"/"},analytics:{enabled:!bw,replays:{maskAllInputs:!1,enabled:!bv&&!bw}}});a.s(["getHexclaveServerApp",0,function(){if(!d){if((0,f.isRemoteDevelopmentEnvironmentEnabled)())throw new h.HexclaveAssertionError("hexclaveServerApp is not available in the local remote development environment dashboard.");d=new bt({inheritsFrom:bx})}return d}],485689)}];
8
8
 
9
9
  //# sourceMappingURL=_0xl4mrg._.js.map