@mdguggenbichler/slugbase-core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/backend/dist/app-factory.d.ts +17 -0
  2. package/backend/dist/app-factory.d.ts.map +1 -0
  3. package/backend/dist/app-factory.js +106 -0
  4. package/backend/dist/app-factory.js.map +1 -0
  5. package/backend/dist/auth/authorization.d.ts +25 -0
  6. package/backend/dist/auth/authorization.d.ts.map +1 -0
  7. package/backend/dist/auth/authorization.js +100 -0
  8. package/backend/dist/auth/authorization.js.map +1 -0
  9. package/backend/dist/auth/jwt.d.ts +5 -0
  10. package/backend/dist/auth/jwt.d.ts.map +1 -0
  11. package/backend/dist/auth/jwt.js +34 -0
  12. package/backend/dist/auth/jwt.js.map +1 -0
  13. package/backend/dist/auth/oidc.d.ts +4 -0
  14. package/backend/dist/auth/oidc.d.ts.map +1 -0
  15. package/backend/dist/auth/oidc.js +201 -0
  16. package/backend/dist/auth/oidc.js.map +1 -0
  17. package/backend/dist/config/cloud-providers.d.ts +18 -0
  18. package/backend/dist/config/cloud-providers.d.ts.map +1 -0
  19. package/backend/dist/config/cloud-providers.js +60 -0
  20. package/backend/dist/config/cloud-providers.js.map +1 -0
  21. package/backend/dist/config/cookies.d.ts +17 -0
  22. package/backend/dist/config/cookies.d.ts.map +1 -0
  23. package/backend/dist/config/cookies.js +26 -0
  24. package/backend/dist/config/cookies.js.map +1 -0
  25. package/backend/dist/config/mode.d.ts +7 -0
  26. package/backend/dist/config/mode.d.ts.map +1 -0
  27. package/backend/dist/config/mode.js +7 -0
  28. package/backend/dist/config/mode.js.map +1 -0
  29. package/backend/dist/config/swagger.d.ts +2 -0
  30. package/backend/dist/config/swagger.d.ts.map +1 -0
  31. package/backend/dist/config/swagger.js +76 -0
  32. package/backend/dist/config/swagger.js.map +1 -0
  33. package/backend/dist/config.d.ts +29 -0
  34. package/backend/dist/config.d.ts.map +1 -0
  35. package/backend/dist/config.js +41 -0
  36. package/backend/dist/config.js.map +1 -0
  37. package/backend/dist/db/index.d.ts +14 -0
  38. package/backend/dist/db/index.d.ts.map +1 -0
  39. package/backend/dist/db/index.js +114 -0
  40. package/backend/dist/db/index.js.map +1 -0
  41. package/backend/dist/db/migrate-slug-nullable.d.ts +10 -0
  42. package/backend/dist/db/migrate-slug-nullable.d.ts.map +1 -0
  43. package/backend/dist/db/migrate-slug-nullable.js +87 -0
  44. package/backend/dist/db/migrate-slug-nullable.js.map +1 -0
  45. package/backend/dist/db/migrations/001_migrate_slug_nullable.d.ts +10 -0
  46. package/backend/dist/db/migrations/001_migrate_slug_nullable.d.ts.map +1 -0
  47. package/backend/dist/db/migrations/001_migrate_slug_nullable.js +103 -0
  48. package/backend/dist/db/migrations/001_migrate_slug_nullable.js.map +1 -0
  49. package/backend/dist/db/migrations/002_add_oidc_custom_endpoints.d.ts +11 -0
  50. package/backend/dist/db/migrations/002_add_oidc_custom_endpoints.d.ts.map +1 -0
  51. package/backend/dist/db/migrations/002_add_oidc_custom_endpoints.js +92 -0
  52. package/backend/dist/db/migrations/002_add_oidc_custom_endpoints.js.map +1 -0
  53. package/backend/dist/db/migrations/003_add_bookmark_features.d.ts +5 -0
  54. package/backend/dist/db/migrations/003_add_bookmark_features.d.ts.map +1 -0
  55. package/backend/dist/db/migrations/003_add_bookmark_features.js +98 -0
  56. package/backend/dist/db/migrations/003_add_bookmark_features.js.map +1 -0
  57. package/backend/dist/db/migrations/004_make_slug_globally_unique.d.ts +12 -0
  58. package/backend/dist/db/migrations/004_make_slug_globally_unique.d.ts.map +1 -0
  59. package/backend/dist/db/migrations/004_make_slug_globally_unique.js +152 -0
  60. package/backend/dist/db/migrations/004_make_slug_globally_unique.js.map +1 -0
  61. package/backend/dist/db/migrations/005_add_email_verification.d.ts +5 -0
  62. package/backend/dist/db/migrations/005_add_email_verification.d.ts.map +1 -0
  63. package/backend/dist/db/migrations/005_add_email_verification.js +102 -0
  64. package/backend/dist/db/migrations/005_add_email_verification.js.map +1 -0
  65. package/backend/dist/db/migrations/006_refresh_tokens.d.ts +9 -0
  66. package/backend/dist/db/migrations/006_refresh_tokens.d.ts.map +1 -0
  67. package/backend/dist/db/migrations/006_refresh_tokens.js +61 -0
  68. package/backend/dist/db/migrations/006_refresh_tokens.js.map +1 -0
  69. package/backend/dist/db/migrations/007_password_reset_token_hash.d.ts +10 -0
  70. package/backend/dist/db/migrations/007_password_reset_token_hash.d.ts.map +1 -0
  71. package/backend/dist/db/migrations/007_password_reset_token_hash.js +40 -0
  72. package/backend/dist/db/migrations/007_password_reset_token_hash.js.map +1 -0
  73. package/backend/dist/db/migrations/008_slug_preferences.d.ts +8 -0
  74. package/backend/dist/db/migrations/008_slug_preferences.d.ts.map +1 -0
  75. package/backend/dist/db/migrations/008_slug_preferences.js +24 -0
  76. package/backend/dist/db/migrations/008_slug_preferences.js.map +1 -0
  77. package/backend/dist/db/migrations/009_signup_email_verified.d.ts +5 -0
  78. package/backend/dist/db/migrations/009_signup_email_verified.d.ts.map +1 -0
  79. package/backend/dist/db/migrations/009_signup_email_verified.js +79 -0
  80. package/backend/dist/db/migrations/009_signup_email_verified.js.map +1 -0
  81. package/backend/dist/db/migrations/010_organizations.d.ts +5 -0
  82. package/backend/dist/db/migrations/010_organizations.d.ts.map +1 -0
  83. package/backend/dist/db/migrations/010_organizations.js +113 -0
  84. package/backend/dist/db/migrations/010_organizations.js.map +1 -0
  85. package/backend/dist/db/migrations/011_org_scoped_teams.d.ts +11 -0
  86. package/backend/dist/db/migrations/011_org_scoped_teams.d.ts.map +1 -0
  87. package/backend/dist/db/migrations/011_org_scoped_teams.js +59 -0
  88. package/backend/dist/db/migrations/011_org_scoped_teams.js.map +1 -0
  89. package/backend/dist/db/migrations/012_org_invitations_token_hash.d.ts +10 -0
  90. package/backend/dist/db/migrations/012_org_invitations_token_hash.d.ts.map +1 -0
  91. package/backend/dist/db/migrations/012_org_invitations_token_hash.js +40 -0
  92. package/backend/dist/db/migrations/012_org_invitations_token_hash.js.map +1 -0
  93. package/backend/dist/db/migrations/013_signup_verification_token_hash.d.ts +10 -0
  94. package/backend/dist/db/migrations/013_signup_verification_token_hash.d.ts.map +1 -0
  95. package/backend/dist/db/migrations/013_signup_verification_token_hash.js +39 -0
  96. package/backend/dist/db/migrations/013_signup_verification_token_hash.js.map +1 -0
  97. package/backend/dist/db/migrations/014_stats_indexes.d.ts +8 -0
  98. package/backend/dist/db/migrations/014_stats_indexes.d.ts.map +1 -0
  99. package/backend/dist/db/migrations/014_stats_indexes.js +19 -0
  100. package/backend/dist/db/migrations/014_stats_indexes.js.map +1 -0
  101. package/backend/dist/db/migrations/015_api_tokens.d.ts +9 -0
  102. package/backend/dist/db/migrations/015_api_tokens.d.ts.map +1 -0
  103. package/backend/dist/db/migrations/015_api_tokens.js +48 -0
  104. package/backend/dist/db/migrations/015_api_tokens.js.map +1 -0
  105. package/backend/dist/db/migrations/016_free_plan_grace_ends_at.d.ts +9 -0
  106. package/backend/dist/db/migrations/016_free_plan_grace_ends_at.d.ts.map +1 -0
  107. package/backend/dist/db/migrations/016_free_plan_grace_ends_at.js +50 -0
  108. package/backend/dist/db/migrations/016_free_plan_grace_ends_at.js.map +1 -0
  109. package/backend/dist/db/migrations/017_ai_suggestions.d.ts +11 -0
  110. package/backend/dist/db/migrations/017_ai_suggestions.d.ts.map +1 -0
  111. package/backend/dist/db/migrations/017_ai_suggestions.js +78 -0
  112. package/backend/dist/db/migrations/017_ai_suggestions.js.map +1 -0
  113. package/backend/dist/db/migrations/018_ai_cache_output_language.d.ts +10 -0
  114. package/backend/dist/db/migrations/018_ai_cache_output_language.d.ts.map +1 -0
  115. package/backend/dist/db/migrations/018_ai_cache_output_language.js +89 -0
  116. package/backend/dist/db/migrations/018_ai_cache_output_language.js.map +1 -0
  117. package/backend/dist/db/migrations/019_ai_suggestion_usage.d.ts +10 -0
  118. package/backend/dist/db/migrations/019_ai_suggestion_usage.d.ts.map +1 -0
  119. package/backend/dist/db/migrations/019_ai_suggestion_usage.js +47 -0
  120. package/backend/dist/db/migrations/019_ai_suggestion_usage.js.map +1 -0
  121. package/backend/dist/db/migrations/020_tenant_scope.d.ts +5 -0
  122. package/backend/dist/db/migrations/020_tenant_scope.d.ts.map +1 -0
  123. package/backend/dist/db/migrations/020_tenant_scope.js +105 -0
  124. package/backend/dist/db/migrations/020_tenant_scope.js.map +1 -0
  125. package/backend/dist/db/migrations/_legacy_cloud_010_organizations.d.ts +5 -0
  126. package/backend/dist/db/migrations/_legacy_cloud_010_organizations.d.ts.map +1 -0
  127. package/backend/dist/db/migrations/_legacy_cloud_010_organizations.js +113 -0
  128. package/backend/dist/db/migrations/_legacy_cloud_010_organizations.js.map +1 -0
  129. package/backend/dist/db/migrations/_legacy_cloud_011_org_scoped_teams.d.ts +11 -0
  130. package/backend/dist/db/migrations/_legacy_cloud_011_org_scoped_teams.d.ts.map +1 -0
  131. package/backend/dist/db/migrations/_legacy_cloud_011_org_scoped_teams.js +59 -0
  132. package/backend/dist/db/migrations/_legacy_cloud_011_org_scoped_teams.js.map +1 -0
  133. package/backend/dist/db/migrations/_legacy_cloud_012_org_invitations_token_hash.d.ts +10 -0
  134. package/backend/dist/db/migrations/_legacy_cloud_012_org_invitations_token_hash.d.ts.map +1 -0
  135. package/backend/dist/db/migrations/_legacy_cloud_012_org_invitations_token_hash.js +40 -0
  136. package/backend/dist/db/migrations/_legacy_cloud_012_org_invitations_token_hash.js.map +1 -0
  137. package/backend/dist/db/migrations/_legacy_cloud_016_free_plan_grace_ends_at.d.ts +9 -0
  138. package/backend/dist/db/migrations/_legacy_cloud_016_free_plan_grace_ends_at.d.ts.map +1 -0
  139. package/backend/dist/db/migrations/_legacy_cloud_016_free_plan_grace_ends_at.js +50 -0
  140. package/backend/dist/db/migrations/_legacy_cloud_016_free_plan_grace_ends_at.js.map +1 -0
  141. package/backend/dist/db/migrations/_legacy_cloud_017_ai_suggestions.d.ts +11 -0
  142. package/backend/dist/db/migrations/_legacy_cloud_017_ai_suggestions.d.ts.map +1 -0
  143. package/backend/dist/db/migrations/_legacy_cloud_017_ai_suggestions.js +78 -0
  144. package/backend/dist/db/migrations/_legacy_cloud_017_ai_suggestions.js.map +1 -0
  145. package/backend/dist/db/migrations/index.d.ts +22 -0
  146. package/backend/dist/db/migrations/index.d.ts.map +1 -0
  147. package/backend/dist/db/migrations/index.js +194 -0
  148. package/backend/dist/db/migrations/index.js.map +1 -0
  149. package/backend/dist/db/pool.d.ts +13 -0
  150. package/backend/dist/db/pool.d.ts.map +1 -0
  151. package/backend/dist/db/pool.js +41 -0
  152. package/backend/dist/db/pool.js.map +1 -0
  153. package/backend/dist/db/seed-data.d.ts +66 -0
  154. package/backend/dist/db/seed-data.d.ts.map +1 -0
  155. package/backend/dist/db/seed-data.js +394 -0
  156. package/backend/dist/db/seed-data.js.map +1 -0
  157. package/backend/dist/db/seed.d.ts +19 -0
  158. package/backend/dist/db/seed.d.ts.map +1 -0
  159. package/backend/dist/db/seed.js +406 -0
  160. package/backend/dist/db/seed.js.map +1 -0
  161. package/backend/dist/index.d.ts +3 -0
  162. package/backend/dist/index.d.ts.map +1 -0
  163. package/backend/dist/index.js +64 -0
  164. package/backend/dist/index.js.map +1 -0
  165. package/backend/dist/instrument.d.ts +2 -0
  166. package/backend/dist/instrument.d.ts.map +1 -0
  167. package/backend/dist/instrument.js +16 -0
  168. package/backend/dist/instrument.js.map +1 -0
  169. package/backend/dist/load-env.d.ts +2 -0
  170. package/backend/dist/load-env.d.ts.map +1 -0
  171. package/backend/dist/load-env.js +33 -0
  172. package/backend/dist/load-env.js.map +1 -0
  173. package/backend/dist/middleware/auth.d.ts +23 -0
  174. package/backend/dist/middleware/auth.d.ts.map +1 -0
  175. package/backend/dist/middleware/auth.js +69 -0
  176. package/backend/dist/middleware/auth.js.map +1 -0
  177. package/backend/dist/middleware/error-handler.d.ts +11 -0
  178. package/backend/dist/middleware/error-handler.d.ts.map +1 -0
  179. package/backend/dist/middleware/error-handler.js +40 -0
  180. package/backend/dist/middleware/error-handler.js.map +1 -0
  181. package/backend/dist/middleware/security.d.ts +26 -0
  182. package/backend/dist/middleware/security.d.ts.map +1 -0
  183. package/backend/dist/middleware/security.js +162 -0
  184. package/backend/dist/middleware/security.js.map +1 -0
  185. package/backend/dist/middleware/stats-auth.d.ts +7 -0
  186. package/backend/dist/middleware/stats-auth.d.ts.map +1 -0
  187. package/backend/dist/middleware/stats-auth.js +20 -0
  188. package/backend/dist/middleware/stats-auth.js.map +1 -0
  189. package/backend/dist/middleware/tenant.d.ts +3 -0
  190. package/backend/dist/middleware/tenant.d.ts.map +1 -0
  191. package/backend/dist/middleware/tenant.js +13 -0
  192. package/backend/dist/middleware/tenant.js.map +1 -0
  193. package/backend/dist/register-routes.d.ts +12 -0
  194. package/backend/dist/register-routes.d.ts.map +1 -0
  195. package/backend/dist/register-routes.js +59 -0
  196. package/backend/dist/register-routes.js.map +1 -0
  197. package/backend/dist/routes/admin/demo-reset.d.ts +8 -0
  198. package/backend/dist/routes/admin/demo-reset.d.ts.map +1 -0
  199. package/backend/dist/routes/admin/demo-reset.js +66 -0
  200. package/backend/dist/routes/admin/demo-reset.js.map +1 -0
  201. package/backend/dist/routes/admin/settings.d.ts +3 -0
  202. package/backend/dist/routes/admin/settings.d.ts.map +1 -0
  203. package/backend/dist/routes/admin/settings.js +452 -0
  204. package/backend/dist/routes/admin/settings.js.map +1 -0
  205. package/backend/dist/routes/admin/stats.d.ts +7 -0
  206. package/backend/dist/routes/admin/stats.d.ts.map +1 -0
  207. package/backend/dist/routes/admin/stats.js +66 -0
  208. package/backend/dist/routes/admin/stats.js.map +1 -0
  209. package/backend/dist/routes/admin/teams.d.ts +3 -0
  210. package/backend/dist/routes/admin/teams.d.ts.map +1 -0
  211. package/backend/dist/routes/admin/teams.js +509 -0
  212. package/backend/dist/routes/admin/teams.js.map +1 -0
  213. package/backend/dist/routes/admin/users.d.ts +3 -0
  214. package/backend/dist/routes/admin/users.d.ts.map +1 -0
  215. package/backend/dist/routes/admin/users.js +525 -0
  216. package/backend/dist/routes/admin/users.js.map +1 -0
  217. package/backend/dist/routes/auth.d.ts +3 -0
  218. package/backend/dist/routes/auth.d.ts.map +1 -0
  219. package/backend/dist/routes/auth.js +992 -0
  220. package/backend/dist/routes/auth.js.map +1 -0
  221. package/backend/dist/routes/billing.d.ts +8 -0
  222. package/backend/dist/routes/billing.d.ts.map +1 -0
  223. package/backend/dist/routes/billing.js +481 -0
  224. package/backend/dist/routes/billing.js.map +1 -0
  225. package/backend/dist/routes/bookmarks.d.ts +3 -0
  226. package/backend/dist/routes/bookmarks.d.ts.map +1 -0
  227. package/backend/dist/routes/bookmarks.js +1593 -0
  228. package/backend/dist/routes/bookmarks.js.map +1 -0
  229. package/backend/dist/routes/config.d.ts +7 -0
  230. package/backend/dist/routes/config.d.ts.map +1 -0
  231. package/backend/dist/routes/config.js +52 -0
  232. package/backend/dist/routes/config.js.map +1 -0
  233. package/backend/dist/routes/contact.d.ts +9 -0
  234. package/backend/dist/routes/contact.d.ts.map +1 -0
  235. package/backend/dist/routes/contact.js +99 -0
  236. package/backend/dist/routes/contact.js.map +1 -0
  237. package/backend/dist/routes/csrf.d.ts +3 -0
  238. package/backend/dist/routes/csrf.d.ts.map +1 -0
  239. package/backend/dist/routes/csrf.js +39 -0
  240. package/backend/dist/routes/csrf.js.map +1 -0
  241. package/backend/dist/routes/dashboard.d.ts +3 -0
  242. package/backend/dist/routes/dashboard.d.ts.map +1 -0
  243. package/backend/dist/routes/dashboard.js +212 -0
  244. package/backend/dist/routes/dashboard.js.map +1 -0
  245. package/backend/dist/routes/email-verification.d.ts +3 -0
  246. package/backend/dist/routes/email-verification.d.ts.map +1 -0
  247. package/backend/dist/routes/email-verification.js +124 -0
  248. package/backend/dist/routes/email-verification.js.map +1 -0
  249. package/backend/dist/routes/folders.d.ts +3 -0
  250. package/backend/dist/routes/folders.d.ts.map +1 -0
  251. package/backend/dist/routes/folders.js +524 -0
  252. package/backend/dist/routes/folders.js.map +1 -0
  253. package/backend/dist/routes/go-helpers.d.ts +18 -0
  254. package/backend/dist/routes/go-helpers.d.ts.map +1 -0
  255. package/backend/dist/routes/go-helpers.js +64 -0
  256. package/backend/dist/routes/go-helpers.js.map +1 -0
  257. package/backend/dist/routes/go.d.ts +23 -0
  258. package/backend/dist/routes/go.d.ts.map +1 -0
  259. package/backend/dist/routes/go.js +361 -0
  260. package/backend/dist/routes/go.js.map +1 -0
  261. package/backend/dist/routes/health.d.ts +6 -0
  262. package/backend/dist/routes/health.d.ts.map +1 -0
  263. package/backend/dist/routes/health.js +79 -0
  264. package/backend/dist/routes/health.js.map +1 -0
  265. package/backend/dist/routes/invitations.d.ts +3 -0
  266. package/backend/dist/routes/invitations.d.ts.map +1 -0
  267. package/backend/dist/routes/invitations.js +172 -0
  268. package/backend/dist/routes/invitations.js.map +1 -0
  269. package/backend/dist/routes/oidc-providers.d.ts +3 -0
  270. package/backend/dist/routes/oidc-providers.d.ts.map +1 -0
  271. package/backend/dist/routes/oidc-providers.js +495 -0
  272. package/backend/dist/routes/oidc-providers.js.map +1 -0
  273. package/backend/dist/routes/organizations.d.ts +3 -0
  274. package/backend/dist/routes/organizations.d.ts.map +1 -0
  275. package/backend/dist/routes/organizations.js +538 -0
  276. package/backend/dist/routes/organizations.js.map +1 -0
  277. package/backend/dist/routes/password-reset.d.ts +3 -0
  278. package/backend/dist/routes/password-reset.d.ts.map +1 -0
  279. package/backend/dist/routes/password-reset.js +212 -0
  280. package/backend/dist/routes/password-reset.js.map +1 -0
  281. package/backend/dist/routes/redirect.d.ts +3 -0
  282. package/backend/dist/routes/redirect.d.ts.map +1 -0
  283. package/backend/dist/routes/redirect.js +124 -0
  284. package/backend/dist/routes/redirect.js.map +1 -0
  285. package/backend/dist/routes/tags.d.ts +3 -0
  286. package/backend/dist/routes/tags.d.ts.map +1 -0
  287. package/backend/dist/routes/tags.js +302 -0
  288. package/backend/dist/routes/tags.js.map +1 -0
  289. package/backend/dist/routes/teams.d.ts +3 -0
  290. package/backend/dist/routes/teams.d.ts.map +1 -0
  291. package/backend/dist/routes/teams.js +60 -0
  292. package/backend/dist/routes/teams.js.map +1 -0
  293. package/backend/dist/routes/tokens.d.ts +3 -0
  294. package/backend/dist/routes/tokens.d.ts.map +1 -0
  295. package/backend/dist/routes/tokens.js +157 -0
  296. package/backend/dist/routes/tokens.js.map +1 -0
  297. package/backend/dist/routes/users.d.ts +3 -0
  298. package/backend/dist/routes/users.d.ts.map +1 -0
  299. package/backend/dist/routes/users.js +199 -0
  300. package/backend/dist/routes/users.js.map +1 -0
  301. package/backend/dist/services/ai-suggestions.d.ts +29 -0
  302. package/backend/dist/services/ai-suggestions.d.ts.map +1 -0
  303. package/backend/dist/services/ai-suggestions.js +163 -0
  304. package/backend/dist/services/ai-suggestions.js.map +1 -0
  305. package/backend/dist/services/api-tokens.d.ts +66 -0
  306. package/backend/dist/services/api-tokens.d.ts.map +1 -0
  307. package/backend/dist/services/api-tokens.js +129 -0
  308. package/backend/dist/services/api-tokens.js.map +1 -0
  309. package/backend/dist/services/fetch-page-metadata.d.ts +15 -0
  310. package/backend/dist/services/fetch-page-metadata.d.ts.map +1 -0
  311. package/backend/dist/services/fetch-page-metadata.js +205 -0
  312. package/backend/dist/services/fetch-page-metadata.js.map +1 -0
  313. package/backend/dist/services/stats.d.ts +73 -0
  314. package/backend/dist/services/stats.d.ts.map +1 -0
  315. package/backend/dist/services/stats.js +145 -0
  316. package/backend/dist/services/stats.js.map +1 -0
  317. package/backend/dist/types/oidc-provider.d.ts +17 -0
  318. package/backend/dist/types/oidc-provider.d.ts.map +1 -0
  319. package/backend/dist/types/oidc-provider.js +2 -0
  320. package/backend/dist/types/oidc-provider.js.map +1 -0
  321. package/backend/dist/types.d.ts +86 -0
  322. package/backend/dist/types.d.ts.map +1 -0
  323. package/backend/dist/types.js +2 -0
  324. package/backend/dist/types.js.map +1 -0
  325. package/backend/dist/utils/ai-feature.d.ts +23 -0
  326. package/backend/dist/utils/ai-feature.d.ts.map +1 -0
  327. package/backend/dist/utils/ai-feature.js +62 -0
  328. package/backend/dist/utils/ai-feature.js.map +1 -0
  329. package/backend/dist/utils/email.d.ts +40 -0
  330. package/backend/dist/utils/email.d.ts.map +1 -0
  331. package/backend/dist/utils/email.js +456 -0
  332. package/backend/dist/utils/email.js.map +1 -0
  333. package/backend/dist/utils/encryption.d.ts +18 -0
  334. package/backend/dist/utils/encryption.d.ts.map +1 -0
  335. package/backend/dist/utils/encryption.js +95 -0
  336. package/backend/dist/utils/encryption.js.map +1 -0
  337. package/backend/dist/utils/env-validation.d.ts +6 -0
  338. package/backend/dist/utils/env-validation.d.ts.map +1 -0
  339. package/backend/dist/utils/env-validation.js +51 -0
  340. package/backend/dist/utils/env-validation.js.map +1 -0
  341. package/backend/dist/utils/jwt.d.ts +20 -0
  342. package/backend/dist/utils/jwt.d.ts.map +1 -0
  343. package/backend/dist/utils/jwt.js +48 -0
  344. package/backend/dist/utils/jwt.js.map +1 -0
  345. package/backend/dist/utils/org-cleanup.d.ts +6 -0
  346. package/backend/dist/utils/org-cleanup.d.ts.map +1 -0
  347. package/backend/dist/utils/org-cleanup.js +37 -0
  348. package/backend/dist/utils/org-cleanup.js.map +1 -0
  349. package/backend/dist/utils/organizations.d.ts +12 -0
  350. package/backend/dist/utils/organizations.d.ts.map +1 -0
  351. package/backend/dist/utils/organizations.js +24 -0
  352. package/backend/dist/utils/organizations.js.map +1 -0
  353. package/backend/dist/utils/plan-errors.d.ts +18 -0
  354. package/backend/dist/utils/plan-errors.d.ts.map +1 -0
  355. package/backend/dist/utils/plan-errors.js +21 -0
  356. package/backend/dist/utils/plan-errors.js.map +1 -0
  357. package/backend/dist/utils/refresh-token.d.ts +31 -0
  358. package/backend/dist/utils/refresh-token.d.ts.map +1 -0
  359. package/backend/dist/utils/refresh-token.js +63 -0
  360. package/backend/dist/utils/refresh-token.js.map +1 -0
  361. package/backend/dist/utils/session-store.d.ts +46 -0
  362. package/backend/dist/utils/session-store.d.ts.map +1 -0
  363. package/backend/dist/utils/session-store.js +222 -0
  364. package/backend/dist/utils/session-store.js.map +1 -0
  365. package/backend/dist/utils/tenant.d.ts +5 -0
  366. package/backend/dist/utils/tenant.d.ts.map +1 -0
  367. package/backend/dist/utils/tenant.js +12 -0
  368. package/backend/dist/utils/tenant.js.map +1 -0
  369. package/backend/dist/utils/user-key.d.ts +24 -0
  370. package/backend/dist/utils/user-key.d.ts.map +1 -0
  371. package/backend/dist/utils/user-key.js +116 -0
  372. package/backend/dist/utils/user-key.js.map +1 -0
  373. package/backend/dist/utils/validation.d.ts +91 -0
  374. package/backend/dist/utils/validation.d.ts.map +1 -0
  375. package/backend/dist/utils/validation.js +337 -0
  376. package/backend/dist/utils/validation.js.map +1 -0
  377. package/backend/index.js +15 -0
  378. package/frontend/index.js +5 -0
  379. package/frontend/index.tsx +7 -0
  380. package/package.json +16 -0
  381. package/types/index.js +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc-providers.js","sourceRoot":"","sources":["../../src/routes/oidc-providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=organizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/routes/organizations.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA6lBxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,538 @@
1
+ import { Router } from 'express';
2
+ import { query, queryOne, execute } from '../db/index.js';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import crypto from 'crypto';
5
+ import { requireAuth } from '../middleware/auth.js';
6
+ import { authRateLimiter } from '../middleware/security.js';
7
+ import { validateEmail, normalizeEmail } from '../utils/validation.js';
8
+ import { deleteOrganization, ensureOrgForUser, FREE_BOOKMARK_LIMIT, getCurrentOrgId, getFreePlanGraceEndsAt, setCurrentOrg, setFreePlanGraceIfOverLimit } from '../utils/organizations.js';
9
+ import { isCloud } from '../config/mode.js';
10
+ import { sendOrgInvitationEmail } from '../utils/email.js';
11
+ const router = Router();
12
+ /**
13
+ * @swagger
14
+ * /api/organizations:
15
+ * get:
16
+ * summary: List organizations
17
+ * description: Returns all organizations the authenticated user is a member of. Cloud mode only.
18
+ * tags: [Organizations]
19
+ * security:
20
+ * - cookieAuth: []
21
+ * - bearerAuth: []
22
+ * responses:
23
+ * 200:
24
+ * description: List of organizations
25
+ * content:
26
+ * application/json:
27
+ * schema:
28
+ * type: array
29
+ * items:
30
+ * type: object
31
+ * properties:
32
+ * id:
33
+ * type: string
34
+ * name:
35
+ * type: string
36
+ * plan:
37
+ * type: string
38
+ * role:
39
+ * type: string
40
+ * 401:
41
+ * description: Unauthorized
42
+ * 404:
43
+ * description: Not found (self-hosted mode)
44
+ */
45
+ router.get('/', requireAuth(), async (req, res) => {
46
+ if (!isCloud) {
47
+ return res.status(404).json({ error: 'Not found' });
48
+ }
49
+ const authReq = req;
50
+ const userId = authReq.user.id;
51
+ const orgs = await query(`SELECT o.*, om.role FROM organizations o
52
+ INNER JOIN org_members om ON o.id = om.org_id
53
+ WHERE om.user_id = ?
54
+ ORDER BY o.name`, [userId]);
55
+ const orgList = Array.isArray(orgs) ? orgs : orgs ? [orgs] : [];
56
+ res.json(orgList);
57
+ });
58
+ /**
59
+ * @swagger
60
+ * /api/organizations/me:
61
+ * get:
62
+ * summary: Get current organization
63
+ * description: Returns the current user's organization with members and usage. Creates org if user has none. Cloud mode only.
64
+ * tags: [Organizations]
65
+ * security:
66
+ * - cookieAuth: []
67
+ * - bearerAuth: []
68
+ * responses:
69
+ * 200:
70
+ * description: Current organization details
71
+ * content:
72
+ * application/json:
73
+ * schema:
74
+ * type: object
75
+ * properties:
76
+ * id:
77
+ * type: string
78
+ * name:
79
+ * type: string
80
+ * plan:
81
+ * type: string
82
+ * role:
83
+ * type: string
84
+ * member_count:
85
+ * type: number
86
+ * members:
87
+ * type: array
88
+ * 401:
89
+ * description: Unauthorized
90
+ * 404:
91
+ * description: Organization not found
92
+ */
93
+ router.get('/me', requireAuth(), async (req, res) => {
94
+ if (!isCloud) {
95
+ return res.status(404).json({ error: 'Not found' });
96
+ }
97
+ const authReq = req;
98
+ const userId = authReq.user.id;
99
+ const userName = authReq.user.name;
100
+ await ensureOrgForUser(userId, userName);
101
+ let orgId = await getCurrentOrgId(userId);
102
+ if (!orgId) {
103
+ const first = await queryOne('SELECT org_id FROM org_members WHERE user_id = ? ORDER BY joined_at ASC LIMIT 1', [userId]);
104
+ if (first) {
105
+ const firstOrgId = first.org_id;
106
+ if (firstOrgId) {
107
+ orgId = firstOrgId;
108
+ await setCurrentOrg(userId, firstOrgId);
109
+ }
110
+ }
111
+ }
112
+ if (!orgId) {
113
+ return res.status(404).json({ error: 'Organization not found' });
114
+ }
115
+ const userRow = await queryOne('SELECT current_org_id FROM users WHERE id = ?', [userId]);
116
+ const dbCurrentOrgId = userRow?.current_org_id;
117
+ if (orgId !== dbCurrentOrgId) {
118
+ await setCurrentOrg(userId, orgId);
119
+ }
120
+ const row = await queryOne(`SELECT o.*, om.role
121
+ FROM organizations o
122
+ INNER JOIN org_members om ON o.id = om.org_id
123
+ WHERE om.user_id = ? AND o.id = ?`, [userId, orgId]);
124
+ if (!row) {
125
+ return res.status(404).json({ error: 'Organization not found' });
126
+ }
127
+ const org = row;
128
+ const plan = org.plan || 'free';
129
+ const includedSeats = plan === 'team' ? (org.included_seats ?? 5) : 1;
130
+ const memberCount = await queryOne('SELECT COUNT(*) as count FROM org_members WHERE org_id = ?', [org.id]);
131
+ const members = await query(`SELECT u.id, u.email, u.name, om.role, om.joined_at
132
+ FROM org_members om
133
+ INNER JOIN users u ON u.id = om.user_id
134
+ WHERE om.org_id = ?
135
+ ORDER BY om.joined_at ASC`, [org.id]);
136
+ // Bookmark usage for Free plan (per-user)
137
+ let bookmark_count;
138
+ let bookmark_limit = null;
139
+ let free_plan_grace_ends_at = null;
140
+ if (plan === 'free') {
141
+ const countResult = await queryOne('SELECT COUNT(*) as count FROM bookmarks WHERE user_id = ?', [userId]);
142
+ bookmark_count = countResult ? parseInt(countResult.count) : 0;
143
+ bookmark_limit = FREE_BOOKMARK_LIMIT;
144
+ free_plan_grace_ends_at = await getFreePlanGraceEndsAt(userId);
145
+ }
146
+ res.json({
147
+ id: org.id,
148
+ name: org.name,
149
+ plan: org.plan,
150
+ stripe_customer_id: org.stripe_customer_id || null,
151
+ included_seats: includedSeats,
152
+ member_count: parseInt(memberCount?.count || '0'),
153
+ role: org.role,
154
+ members: Array.isArray(members) ? members : [members],
155
+ ai_enabled: org.ai_enabled === 1 || org.ai_enabled === true,
156
+ ...(bookmark_count !== undefined && { bookmark_count }),
157
+ bookmark_limit,
158
+ ...(free_plan_grace_ends_at && { free_plan_grace_ends_at }),
159
+ });
160
+ });
161
+ /**
162
+ * @swagger
163
+ * /api/organizations/me/ai:
164
+ * patch:
165
+ * summary: Update org AI settings
166
+ * description: Enable or disable AI suggestions for the organization. Org owner/admin only. Cloud mode only.
167
+ * tags: [Organizations]
168
+ * security:
169
+ * - cookieAuth: []
170
+ * - bearerAuth: []
171
+ * requestBody:
172
+ * content:
173
+ * application/json:
174
+ * schema:
175
+ * type: object
176
+ * properties:
177
+ * ai_enabled:
178
+ * type: boolean
179
+ * responses:
180
+ * 200:
181
+ * description: Updated
182
+ * 403:
183
+ * description: Only owners and admins can update
184
+ */
185
+ router.patch('/me/ai', requireAuth(), async (req, res) => {
186
+ if (!isCloud) {
187
+ return res.status(404).json({ error: 'Not found' });
188
+ }
189
+ const authReq = req;
190
+ const userId = authReq.user.id;
191
+ const orgId = await getCurrentOrgId(userId);
192
+ if (!orgId) {
193
+ return res.status(404).json({ error: 'No organization selected' });
194
+ }
195
+ const membership = await queryOne('SELECT role FROM org_members WHERE user_id = ? AND org_id = ?', [userId, orgId]);
196
+ if (!membership) {
197
+ return res.status(404).json({ error: 'Organization not found' });
198
+ }
199
+ const role = membership.role;
200
+ if (role !== 'owner' && role !== 'admin') {
201
+ return res.status(403).json({ error: 'Only owners and admins can update AI settings' });
202
+ }
203
+ const { ai_enabled } = req.body;
204
+ if (ai_enabled !== undefined) {
205
+ const DB_TYPE = process.env.DB_TYPE || 'sqlite';
206
+ const val = ai_enabled === true || ai_enabled === 'true';
207
+ await execute('UPDATE organizations SET ai_enabled = ? WHERE id = ?', [DB_TYPE === 'postgresql' ? val : (val ? 1 : 0), orgId]);
208
+ }
209
+ res.json({ message: 'AI settings updated' });
210
+ });
211
+ /**
212
+ * @swagger
213
+ * /api/organizations/me/switch:
214
+ * put:
215
+ * summary: Switch current organization
216
+ * description: Switches the user's current organization context. Cloud mode only.
217
+ * tags: [Organizations]
218
+ * security:
219
+ * - cookieAuth: []
220
+ * - bearerAuth: []
221
+ * requestBody:
222
+ * required: true
223
+ * content:
224
+ * application/json:
225
+ * schema:
226
+ * type: object
227
+ * required:
228
+ * - org_id
229
+ * properties:
230
+ * org_id:
231
+ * type: string
232
+ * description: Organization ID to switch to
233
+ * responses:
234
+ * 200:
235
+ * description: Organization switched successfully
236
+ * 400:
237
+ * description: org_id is required
238
+ * 401:
239
+ * description: Unauthorized
240
+ * 403:
241
+ * description: Not a member of this organization
242
+ */
243
+ router.put('/me/switch', requireAuth(), async (req, res) => {
244
+ if (!isCloud) {
245
+ return res.status(404).json({ error: 'Not found' });
246
+ }
247
+ const authReq = req;
248
+ const userId = authReq.user.id;
249
+ const { org_id } = req.body;
250
+ if (!org_id || typeof org_id !== 'string') {
251
+ return res.status(400).json({ error: 'org_id is required' });
252
+ }
253
+ const ok = await setCurrentOrg(userId, org_id);
254
+ if (!ok) {
255
+ return res.status(403).json({ error: 'You are not a member of this organization' });
256
+ }
257
+ res.json({ message: 'Organization switched', org_id });
258
+ });
259
+ /**
260
+ * @swagger
261
+ * /api/organizations/members:
262
+ * get:
263
+ * summary: List organization members
264
+ * description: Returns all members of the current organization. Cloud mode only.
265
+ * tags: [Organizations]
266
+ * security:
267
+ * - cookieAuth: []
268
+ * - bearerAuth: []
269
+ * responses:
270
+ * 200:
271
+ * description: List of organization members
272
+ * content:
273
+ * application/json:
274
+ * schema:
275
+ * type: array
276
+ * items:
277
+ * type: object
278
+ * properties:
279
+ * id:
280
+ * type: string
281
+ * email:
282
+ * type: string
283
+ * name:
284
+ * type: string
285
+ * 401:
286
+ * description: Unauthorized
287
+ * 404:
288
+ * description: No organization selected
289
+ */
290
+ router.get('/members', requireAuth(), async (req, res) => {
291
+ if (!isCloud) {
292
+ return res.status(404).json({ error: 'Not found' });
293
+ }
294
+ const authReq = req;
295
+ const userId = authReq.user.id;
296
+ const orgId = await getCurrentOrgId(userId);
297
+ if (!orgId) {
298
+ return res.status(404).json({ error: 'No organization selected' });
299
+ }
300
+ const members = await query(`SELECT u.id, u.email, u.name FROM users u
301
+ INNER JOIN org_members om ON u.id = om.user_id
302
+ WHERE om.org_id = ?
303
+ ORDER BY u.name`, [orgId]);
304
+ const list = Array.isArray(members) ? members : members ? [members] : [];
305
+ res.json(list);
306
+ });
307
+ /**
308
+ * @swagger
309
+ * /api/organizations/{id}/invite:
310
+ * post:
311
+ * summary: Invite user to organization
312
+ * description: Sends an invitation email to join the organization. Org admin/owner only. Cloud mode only.
313
+ * tags: [Organizations]
314
+ * security:
315
+ * - cookieAuth: []
316
+ * - bearerAuth: []
317
+ * parameters:
318
+ * - in: path
319
+ * name: id
320
+ * required: true
321
+ * schema:
322
+ * type: string
323
+ * description: Organization ID
324
+ * requestBody:
325
+ * required: true
326
+ * content:
327
+ * application/json:
328
+ * schema:
329
+ * type: object
330
+ * required:
331
+ * - email
332
+ * properties:
333
+ * email:
334
+ * type: string
335
+ * format: email
336
+ * responses:
337
+ * 201:
338
+ * description: Invitation sent
339
+ * 400:
340
+ * description: Invalid email or user already member
341
+ * 401:
342
+ * description: Unauthorized
343
+ * 403:
344
+ * description: Only owners and admins can invite
345
+ */
346
+ router.post('/:id/invite', requireAuth(), authRateLimiter, async (req, res) => {
347
+ if (!isCloud) {
348
+ return res.status(404).json({ error: 'Not found' });
349
+ }
350
+ const authReq = req;
351
+ const userId = authReq.user.id;
352
+ const orgId = req.params.id;
353
+ const { email } = req.body;
354
+ if (!email || typeof email !== 'string') {
355
+ return res.status(400).json({ error: 'Email is required' });
356
+ }
357
+ const emailValidation = validateEmail(email.trim());
358
+ if (!emailValidation.valid) {
359
+ return res.status(400).json({ error: emailValidation.error });
360
+ }
361
+ const normalizedEmail = normalizeEmail(email.trim());
362
+ const membership = await queryOne('SELECT role FROM org_members WHERE user_id = ? AND org_id = ?', [userId, orgId]);
363
+ if (!membership) {
364
+ return res.status(404).json({ error: 'Organization not found' });
365
+ }
366
+ const role = membership.role;
367
+ if (role !== 'owner' && role !== 'admin') {
368
+ return res.status(403).json({ error: 'Only owners and admins can invite members' });
369
+ }
370
+ const org = await queryOne('SELECT * FROM organizations WHERE id = ?', [orgId]);
371
+ if (!org) {
372
+ return res.status(404).json({ error: 'Organization not found' });
373
+ }
374
+ const existingMember = await queryOne('SELECT 1 FROM org_members om INNER JOIN users u ON u.id = om.user_id WHERE om.org_id = ? AND u.email = ?', [orgId, normalizedEmail]);
375
+ if (existingMember) {
376
+ return res.status(400).json({ error: 'User is already a member' });
377
+ }
378
+ const existingInvite = await queryOne('SELECT id FROM org_invitations WHERE org_id = ? AND email = ? AND status = ?', [orgId, normalizedEmail, 'pending']);
379
+ if (existingInvite) {
380
+ return res.status(400).json({ error: 'An invitation has already been sent to this email' });
381
+ }
382
+ const memberCountRow = await queryOne('SELECT COUNT(*) as count FROM org_members WHERE org_id = ?', [orgId]);
383
+ const memberCount = parseInt(memberCountRow?.count || '0');
384
+ const plan = org.plan || 'free';
385
+ const maxSeats = plan === 'team' ? 5 : 1;
386
+ if (memberCount >= maxSeats) {
387
+ return res.status(403).json({
388
+ error: plan === 'team'
389
+ ? 'Team plan includes 5 members. Upgrade your subscription for additional seats.'
390
+ : 'Your plan allows only 1 member. Upgrade to Team plan to invite more members.',
391
+ });
392
+ }
393
+ const inviteId = uuidv4();
394
+ const token = crypto.randomBytes(32).toString('hex');
395
+ const tokenHash = crypto.createHash('sha256').update(token).digest('hex');
396
+ const tokenPlaceholder = 'h:' + inviteId;
397
+ const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);
398
+ await execute(`INSERT INTO org_invitations (id, org_id, email, invited_by, token, token_hash, status, expires_at)
399
+ VALUES (?, ?, ?, ?, ?, ?, 'pending', ?)`, [inviteId, orgId, normalizedEmail, userId, tokenPlaceholder, tokenHash, expiresAt.toISOString()]);
400
+ const frontendUrl = (process.env.FRONTEND_URL || 'http://localhost:3000').replace(/\/$/, '');
401
+ const acceptUrl = `${frontendUrl}/app/accept-invite?token=${encodeURIComponent(token)}`;
402
+ await sendOrgInvitationEmail(normalizedEmail, acceptUrl, org.name);
403
+ res.status(201).json({ message: 'Invitation sent' });
404
+ });
405
+ /**
406
+ * @swagger
407
+ * /api/organizations/{id}/members/{userId}:
408
+ * delete:
409
+ * summary: Remove member from organization
410
+ * description: Owner or admin removes a member. Cannot remove yourself (use leave). Cannot remove the last owner. Cloud mode only.
411
+ * tags: [Organizations]
412
+ * security:
413
+ * - cookieAuth: []
414
+ * - bearerAuth: []
415
+ * parameters:
416
+ * - in: path
417
+ * name: id
418
+ * required: true
419
+ * schema:
420
+ * type: string
421
+ * description: Organization ID
422
+ * - in: path
423
+ * name: userId
424
+ * required: true
425
+ * schema:
426
+ * type: string
427
+ * description: User ID to remove
428
+ * responses:
429
+ * 200:
430
+ * description: Member removed
431
+ * 400:
432
+ * description: Cannot remove yourself; use leave
433
+ * 401:
434
+ * description: Unauthorized
435
+ * 403:
436
+ * description: Only owners and admins can remove members; cannot remove last owner
437
+ * 404:
438
+ * description: Organization or member not found
439
+ */
440
+ router.delete('/:id/members/:userId', requireAuth(), async (req, res) => {
441
+ if (!isCloud) {
442
+ return res.status(404).json({ error: 'Not found' });
443
+ }
444
+ const authReq = req;
445
+ const actorId = authReq.user.id;
446
+ const orgId = req.params.id;
447
+ const targetUserId = req.params.userId;
448
+ if (actorId === targetUserId) {
449
+ return res.status(400).json({ error: 'Cannot remove yourself; use leave organization instead' });
450
+ }
451
+ const actorMembership = await queryOne('SELECT role FROM org_members WHERE user_id = ? AND org_id = ?', [actorId, orgId]);
452
+ if (!actorMembership) {
453
+ return res.status(404).json({ error: 'Organization not found' });
454
+ }
455
+ const actorRole = actorMembership.role;
456
+ if (actorRole !== 'owner' && actorRole !== 'admin') {
457
+ return res.status(403).json({ error: 'Only owners and admins can remove members' });
458
+ }
459
+ const targetMembership = await queryOne('SELECT role FROM org_members WHERE user_id = ? AND org_id = ?', [targetUserId, orgId]);
460
+ if (!targetMembership) {
461
+ return res.status(404).json({ error: 'Member not found' });
462
+ }
463
+ const targetRole = targetMembership.role;
464
+ if (targetRole === 'owner') {
465
+ const ownerCountRow = await queryOne('SELECT COUNT(*) as count FROM org_members WHERE org_id = ? AND role = ?', [orgId, 'owner']);
466
+ const ownerCount = parseInt(ownerCountRow?.count || '0');
467
+ if (ownerCount <= 1) {
468
+ return res.status(403).json({ error: 'Cannot remove the last owner; transfer ownership first or they must leave' });
469
+ }
470
+ }
471
+ await execute('DELETE FROM org_members WHERE user_id = ? AND org_id = ?', [targetUserId, orgId]);
472
+ await execute('UPDATE users SET current_org_id = NULL WHERE id = ? AND current_org_id = ?', [targetUserId, orgId]);
473
+ await setFreePlanGraceIfOverLimit(targetUserId);
474
+ const remainingCountRow = await queryOne('SELECT COUNT(*) as count FROM org_members WHERE org_id = ?', [orgId]);
475
+ const remainingCount = parseInt(remainingCountRow?.count || '0');
476
+ if (remainingCount === 0) {
477
+ try {
478
+ await deleteOrganization(orgId);
479
+ }
480
+ catch (err) {
481
+ console.warn('Org cleanup after member remove failed:', err?.message);
482
+ }
483
+ }
484
+ res.json({ message: 'Member removed' });
485
+ });
486
+ /**
487
+ * @swagger
488
+ * /api/organizations/{id}/leave:
489
+ * post:
490
+ * summary: Leave organization
491
+ * description: Removes the current user from the organization. If sole member, the org is deleted. Cloud mode only.
492
+ * tags: [Organizations]
493
+ * security:
494
+ * - cookieAuth: []
495
+ * - bearerAuth: []
496
+ * parameters:
497
+ * - in: path
498
+ * name: id
499
+ * required: true
500
+ * schema:
501
+ * type: string
502
+ * description: Organization ID
503
+ * responses:
504
+ * 200:
505
+ * description: Left organization
506
+ * 401:
507
+ * description: Unauthorized
508
+ * 404:
509
+ * description: Organization not found or not a member
510
+ */
511
+ router.post('/:id/leave', requireAuth(), async (req, res) => {
512
+ if (!isCloud) {
513
+ return res.status(404).json({ error: 'Not found' });
514
+ }
515
+ const authReq = req;
516
+ const userId = authReq.user.id;
517
+ const orgId = req.params.id;
518
+ const membership = await queryOne('SELECT 1 FROM org_members WHERE user_id = ? AND org_id = ?', [userId, orgId]);
519
+ if (!membership) {
520
+ return res.status(404).json({ error: 'Organization not found or you are not a member' });
521
+ }
522
+ await execute('DELETE FROM org_members WHERE user_id = ? AND org_id = ?', [userId, orgId]);
523
+ await execute('UPDATE users SET current_org_id = NULL WHERE id = ? AND current_org_id = ?', [userId, orgId]);
524
+ await setFreePlanGraceIfOverLimit(userId);
525
+ const remainingCountRow = await queryOne('SELECT COUNT(*) as count FROM org_members WHERE org_id = ?', [orgId]);
526
+ const remainingCount = parseInt(remainingCountRow?.count || '0');
527
+ if (remainingCount === 0) {
528
+ try {
529
+ await deleteOrganization(orgId);
530
+ }
531
+ catch (err) {
532
+ console.warn('Org cleanup after leave failed:', err?.message);
533
+ }
534
+ }
535
+ res.json({ message: 'Left organization' });
536
+ });
537
+ export default router;
538
+ //# sourceMappingURL=organizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../src/routes/organizations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=password-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-reset.d.ts","sourceRoot":"","sources":["../../src/routes/password-reset.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAmPxB,eAAe,MAAM,CAAC"}