@digimuza/saas-core 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/CLAUDE.md +1165 -0
  2. package/LICENSE +21 -0
  3. package/README.md +234 -0
  4. package/dist/api-keys/index.d.ts +9 -0
  5. package/dist/api-keys/index.d.ts.map +1 -0
  6. package/dist/api-keys/index.js +37 -0
  7. package/dist/api-keys/index.js.map +1 -0
  8. package/dist/api-keys/keys.d.ts +55 -0
  9. package/dist/api-keys/keys.d.ts.map +1 -0
  10. package/dist/api-keys/keys.js +92 -0
  11. package/dist/api-keys/keys.js.map +1 -0
  12. package/dist/api-keys/service.d.ts +111 -0
  13. package/dist/api-keys/service.d.ts.map +1 -0
  14. package/dist/api-keys/service.js +210 -0
  15. package/dist/api-keys/service.js.map +1 -0
  16. package/dist/audit/index.d.ts +5 -0
  17. package/dist/audit/index.d.ts.map +1 -0
  18. package/dist/audit/index.js +44 -0
  19. package/dist/audit/index.js.map +1 -0
  20. package/dist/audit/service.d.ts +88 -0
  21. package/dist/audit/service.d.ts.map +1 -0
  22. package/dist/audit/service.js +128 -0
  23. package/dist/audit/service.js.map +1 -0
  24. package/dist/auth/client.d.ts +5 -0
  25. package/dist/auth/client.d.ts.map +1 -0
  26. package/dist/auth/client.js +26 -0
  27. package/dist/auth/client.js.map +1 -0
  28. package/dist/auth/cookies.d.ts +51 -0
  29. package/dist/auth/cookies.d.ts.map +1 -0
  30. package/dist/auth/cookies.js +58 -0
  31. package/dist/auth/cookies.js.map +1 -0
  32. package/dist/auth/index.d.ts +14 -0
  33. package/dist/auth/index.d.ts.map +1 -0
  34. package/dist/auth/index.js +46 -0
  35. package/dist/auth/index.js.map +1 -0
  36. package/dist/auth/service.d.ts +67 -0
  37. package/dist/auth/service.d.ts.map +1 -0
  38. package/dist/auth/service.js +275 -0
  39. package/dist/auth/service.js.map +1 -0
  40. package/dist/auth/types.d.ts +56 -0
  41. package/dist/auth/types.d.ts.map +1 -0
  42. package/dist/auth/types.js +2 -0
  43. package/dist/auth/types.js.map +1 -0
  44. package/dist/authorization/index.d.ts +4 -0
  45. package/dist/authorization/index.d.ts.map +1 -0
  46. package/dist/authorization/index.js +24 -0
  47. package/dist/authorization/index.js.map +1 -0
  48. package/dist/authorization/service.d.ts +92 -0
  49. package/dist/authorization/service.d.ts.map +1 -0
  50. package/dist/authorization/service.js +254 -0
  51. package/dist/authorization/service.js.map +1 -0
  52. package/dist/billing/index.d.ts +16 -0
  53. package/dist/billing/index.d.ts.map +1 -0
  54. package/dist/billing/index.js +47 -0
  55. package/dist/billing/index.js.map +1 -0
  56. package/dist/billing/provider.d.ts +114 -0
  57. package/dist/billing/provider.d.ts.map +1 -0
  58. package/dist/billing/provider.js +2 -0
  59. package/dist/billing/provider.js.map +1 -0
  60. package/dist/billing/revolut.d.ts +68 -0
  61. package/dist/billing/revolut.d.ts.map +1 -0
  62. package/dist/billing/revolut.js +181 -0
  63. package/dist/billing/revolut.js.map +1 -0
  64. package/dist/billing/service.d.ts +124 -0
  65. package/dist/billing/service.d.ts.map +1 -0
  66. package/dist/billing/service.js +470 -0
  67. package/dist/billing/service.js.map +1 -0
  68. package/dist/cli/commands/dev.d.ts +43 -0
  69. package/dist/cli/commands/dev.d.ts.map +1 -0
  70. package/dist/cli/commands/dev.js +212 -0
  71. package/dist/cli/commands/dev.js.map +1 -0
  72. package/dist/cli/commands/project.d.ts +12 -0
  73. package/dist/cli/commands/project.d.ts.map +1 -0
  74. package/dist/cli/commands/project.js +49 -0
  75. package/dist/cli/commands/project.js.map +1 -0
  76. package/dist/cli/docker.d.ts +50 -0
  77. package/dist/cli/docker.d.ts.map +1 -0
  78. package/dist/cli/docker.js +84 -0
  79. package/dist/cli/docker.js.map +1 -0
  80. package/dist/cli/index.d.ts +6 -0
  81. package/dist/cli/index.d.ts.map +1 -0
  82. package/dist/cli/index.js +198 -0
  83. package/dist/cli/index.js.map +1 -0
  84. package/dist/cli/output.d.ts +30 -0
  85. package/dist/cli/output.d.ts.map +1 -0
  86. package/dist/cli/output.js +66 -0
  87. package/dist/cli/output.js.map +1 -0
  88. package/dist/cli/templates.d.ts +52 -0
  89. package/dist/cli/templates.d.ts.map +1 -0
  90. package/dist/cli/templates.js +225 -0
  91. package/dist/cli/templates.js.map +1 -0
  92. package/dist/config/client.d.ts +60 -0
  93. package/dist/config/client.d.ts.map +1 -0
  94. package/dist/config/client.js +94 -0
  95. package/dist/config/client.js.map +1 -0
  96. package/dist/config/config-loader.d.ts +2 -0
  97. package/dist/config/config-loader.d.ts.map +1 -0
  98. package/dist/config/config-loader.js +2 -0
  99. package/dist/config/config-loader.js.map +1 -0
  100. package/dist/config/env.d.ts +24 -0
  101. package/dist/config/env.d.ts.map +1 -0
  102. package/dist/config/env.js +40 -0
  103. package/dist/config/env.js.map +1 -0
  104. package/dist/config/errors.d.ts +17 -0
  105. package/dist/config/errors.d.ts.map +1 -0
  106. package/dist/config/errors.js +26 -0
  107. package/dist/config/errors.js.map +1 -0
  108. package/dist/config/index.d.ts +72 -0
  109. package/dist/config/index.d.ts.map +1 -0
  110. package/dist/config/index.js +106 -0
  111. package/dist/config/index.js.map +1 -0
  112. package/dist/config/runtime.d.ts +15 -0
  113. package/dist/config/runtime.d.ts.map +1 -0
  114. package/dist/config/runtime.js +22 -0
  115. package/dist/config/runtime.js.map +1 -0
  116. package/dist/config/sections.d.ts +226 -0
  117. package/dist/config/sections.d.ts.map +1 -0
  118. package/dist/config/sections.js +141 -0
  119. package/dist/config/sections.js.map +1 -0
  120. package/dist/db/client.d.ts +43 -0
  121. package/dist/db/client.d.ts.map +1 -0
  122. package/dist/db/client.js +77 -0
  123. package/dist/db/client.js.map +1 -0
  124. package/dist/db/errors.d.ts +39 -0
  125. package/dist/db/errors.d.ts.map +1 -0
  126. package/dist/db/errors.js +67 -0
  127. package/dist/db/errors.js.map +1 -0
  128. package/dist/db/index.d.ts +10 -0
  129. package/dist/db/index.d.ts.map +1 -0
  130. package/dist/db/index.js +10 -0
  131. package/dist/db/index.js.map +1 -0
  132. package/dist/db/migrate.d.ts +21 -0
  133. package/dist/db/migrate.d.ts.map +1 -0
  134. package/dist/db/migrate.js +28 -0
  135. package/dist/db/migrate.js.map +1 -0
  136. package/dist/db/schema/_shared.d.ts +30 -0
  137. package/dist/db/schema/_shared.d.ts.map +1 -0
  138. package/dist/db/schema/_shared.js +36 -0
  139. package/dist/db/schema/_shared.js.map +1 -0
  140. package/dist/db/schema/apikeys.d.ts +263 -0
  141. package/dist/db/schema/apikeys.d.ts.map +1 -0
  142. package/dist/db/schema/apikeys.js +70 -0
  143. package/dist/db/schema/apikeys.js.map +1 -0
  144. package/dist/db/schema/authorization.d.ts +465 -0
  145. package/dist/db/schema/authorization.d.ts.map +1 -0
  146. package/dist/db/schema/authorization.js +134 -0
  147. package/dist/db/schema/authorization.js.map +1 -0
  148. package/dist/db/schema/billing.d.ts +1100 -0
  149. package/dist/db/schema/billing.d.ts.map +1 -0
  150. package/dist/db/schema/billing.js +223 -0
  151. package/dist/db/schema/billing.js.map +1 -0
  152. package/dist/db/schema/events.d.ts +161 -0
  153. package/dist/db/schema/events.d.ts.map +1 -0
  154. package/dist/db/schema/events.js +66 -0
  155. package/dist/db/schema/events.js.map +1 -0
  156. package/dist/db/schema/features.d.ts +243 -0
  157. package/dist/db/schema/features.d.ts.map +1 -0
  158. package/dist/db/schema/features.js +87 -0
  159. package/dist/db/schema/features.js.map +1 -0
  160. package/dist/db/schema/files.d.ts +253 -0
  161. package/dist/db/schema/files.d.ts.map +1 -0
  162. package/dist/db/schema/files.js +74 -0
  163. package/dist/db/schema/files.js.map +1 -0
  164. package/dist/db/schema/index.d.ts +38 -0
  165. package/dist/db/schema/index.d.ts.map +1 -0
  166. package/dist/db/schema/index.js +38 -0
  167. package/dist/db/schema/index.js.map +1 -0
  168. package/dist/db/schema/invitations.d.ts +214 -0
  169. package/dist/db/schema/invitations.d.ts.map +1 -0
  170. package/dist/db/schema/invitations.js +80 -0
  171. package/dist/db/schema/invitations.js.map +1 -0
  172. package/dist/db/schema/messaging.d.ts +442 -0
  173. package/dist/db/schema/messaging.d.ts.map +1 -0
  174. package/dist/db/schema/messaging.js +120 -0
  175. package/dist/db/schema/messaging.js.map +1 -0
  176. package/dist/db/schema/users.d.ts +246 -0
  177. package/dist/db/schema/users.d.ts.map +1 -0
  178. package/dist/db/schema/users.js +60 -0
  179. package/dist/db/schema/users.js.map +1 -0
  180. package/dist/db/schema/webhooks.d.ts +693 -0
  181. package/dist/db/schema/webhooks.d.ts.map +1 -0
  182. package/dist/db/schema/webhooks.js +147 -0
  183. package/dist/db/schema/webhooks.js.map +1 -0
  184. package/dist/db/schema/workspaces.d.ts +196 -0
  185. package/dist/db/schema/workspaces.d.ts.map +1 -0
  186. package/dist/db/schema/workspaces.js +57 -0
  187. package/dist/db/schema/workspaces.js.map +1 -0
  188. package/dist/db/types.d.ts +18 -0
  189. package/dist/db/types.d.ts.map +1 -0
  190. package/dist/db/types.js +2 -0
  191. package/dist/db/types.js.map +1 -0
  192. package/dist/email/adapters.d.ts +29 -0
  193. package/dist/email/adapters.d.ts.map +1 -0
  194. package/dist/email/adapters.js +60 -0
  195. package/dist/email/adapters.js.map +1 -0
  196. package/dist/email/index.d.ts +20 -0
  197. package/dist/email/index.d.ts.map +1 -0
  198. package/dist/email/index.js +79 -0
  199. package/dist/email/index.js.map +1 -0
  200. package/dist/email/provider.d.ts +47 -0
  201. package/dist/email/provider.d.ts.map +1 -0
  202. package/dist/email/provider.js +7 -0
  203. package/dist/email/provider.js.map +1 -0
  204. package/dist/email/resend.d.ts +22 -0
  205. package/dist/email/resend.d.ts.map +1 -0
  206. package/dist/email/resend.js +51 -0
  207. package/dist/email/resend.js.map +1 -0
  208. package/dist/email/service.d.ts +55 -0
  209. package/dist/email/service.d.ts.map +1 -0
  210. package/dist/email/service.js +87 -0
  211. package/dist/email/service.js.map +1 -0
  212. package/dist/email/templates.d.ts +81 -0
  213. package/dist/email/templates.d.ts.map +1 -0
  214. package/dist/email/templates.js +84 -0
  215. package/dist/email/templates.js.map +1 -0
  216. package/dist/entitlements/index.d.ts +10 -0
  217. package/dist/entitlements/index.d.ts.map +1 -0
  218. package/dist/entitlements/index.js +28 -0
  219. package/dist/entitlements/index.js.map +1 -0
  220. package/dist/entitlements/service.d.ts +83 -0
  221. package/dist/entitlements/service.d.ts.map +1 -0
  222. package/dist/entitlements/service.js +158 -0
  223. package/dist/entitlements/service.js.map +1 -0
  224. package/dist/errors.d.ts +85 -0
  225. package/dist/errors.d.ts.map +1 -0
  226. package/dist/errors.js +95 -0
  227. package/dist/errors.js.map +1 -0
  228. package/dist/events/core-events.d.ts +120 -0
  229. package/dist/events/core-events.d.ts.map +1 -0
  230. package/dist/events/core-events.js +109 -0
  231. package/dist/events/core-events.js.map +1 -0
  232. package/dist/events/index.d.ts +15 -0
  233. package/dist/events/index.d.ts.map +1 -0
  234. package/dist/events/index.js +58 -0
  235. package/dist/events/index.js.map +1 -0
  236. package/dist/events/publisher.d.ts +46 -0
  237. package/dist/events/publisher.d.ts.map +1 -0
  238. package/dist/events/publisher.js +54 -0
  239. package/dist/events/publisher.js.map +1 -0
  240. package/dist/events/registry.d.ts +87 -0
  241. package/dist/events/registry.d.ts.map +1 -0
  242. package/dist/events/registry.js +34 -0
  243. package/dist/events/registry.js.map +1 -0
  244. package/dist/events/service.d.ts +78 -0
  245. package/dist/events/service.d.ts.map +1 -0
  246. package/dist/events/service.js +182 -0
  247. package/dist/events/service.js.map +1 -0
  248. package/dist/features/bucket.d.ts +22 -0
  249. package/dist/features/bucket.d.ts.map +1 -0
  250. package/dist/features/bucket.js +42 -0
  251. package/dist/features/bucket.js.map +1 -0
  252. package/dist/features/index.d.ts +15 -0
  253. package/dist/features/index.d.ts.map +1 -0
  254. package/dist/features/index.js +78 -0
  255. package/dist/features/index.js.map +1 -0
  256. package/dist/features/registry.d.ts +51 -0
  257. package/dist/features/registry.d.ts.map +1 -0
  258. package/dist/features/registry.js +52 -0
  259. package/dist/features/registry.js.map +1 -0
  260. package/dist/features/service.d.ts +78 -0
  261. package/dist/features/service.d.ts.map +1 -0
  262. package/dist/features/service.js +207 -0
  263. package/dist/features/service.js.map +1 -0
  264. package/dist/files/index.d.ts +6 -0
  265. package/dist/files/index.d.ts.map +1 -0
  266. package/dist/files/index.js +64 -0
  267. package/dist/files/index.js.map +1 -0
  268. package/dist/files/service.d.ts +92 -0
  269. package/dist/files/service.d.ts.map +1 -0
  270. package/dist/files/service.js +303 -0
  271. package/dist/files/service.js.map +1 -0
  272. package/dist/index.d.ts +33 -0
  273. package/dist/index.d.ts.map +1 -0
  274. package/dist/index.js +33 -0
  275. package/dist/index.js.map +1 -0
  276. package/dist/jobs/backend.d.ts +23 -0
  277. package/dist/jobs/backend.d.ts.map +1 -0
  278. package/dist/jobs/backend.js +23 -0
  279. package/dist/jobs/backend.js.map +1 -0
  280. package/dist/jobs/index.d.ts +29 -0
  281. package/dist/jobs/index.d.ts.map +1 -0
  282. package/dist/jobs/index.js +114 -0
  283. package/dist/jobs/index.js.map +1 -0
  284. package/dist/jobs/service.d.ts +67 -0
  285. package/dist/jobs/service.d.ts.map +1 -0
  286. package/dist/jobs/service.js +139 -0
  287. package/dist/jobs/service.js.map +1 -0
  288. package/dist/jobs/types.d.ts +78 -0
  289. package/dist/jobs/types.d.ts.map +1 -0
  290. package/dist/jobs/types.js +4 -0
  291. package/dist/jobs/types.js.map +1 -0
  292. package/dist/logger/default.d.ts +7 -0
  293. package/dist/logger/default.d.ts.map +1 -0
  294. package/dist/logger/default.js +28 -0
  295. package/dist/logger/default.js.map +1 -0
  296. package/dist/logger/index.d.ts +24 -0
  297. package/dist/logger/index.d.ts.map +1 -0
  298. package/dist/logger/index.js +90 -0
  299. package/dist/logger/index.js.map +1 -0
  300. package/dist/logger/redact.d.ts +40 -0
  301. package/dist/logger/redact.d.ts.map +1 -0
  302. package/dist/logger/redact.js +178 -0
  303. package/dist/logger/redact.js.map +1 -0
  304. package/dist/logger/service.d.ts +14 -0
  305. package/dist/logger/service.d.ts.map +1 -0
  306. package/dist/logger/service.js +56 -0
  307. package/dist/logger/service.js.map +1 -0
  308. package/dist/logger/sinks.d.ts +37 -0
  309. package/dist/logger/sinks.d.ts.map +1 -0
  310. package/dist/logger/sinks.js +135 -0
  311. package/dist/logger/sinks.js.map +1 -0
  312. package/dist/logger/types.d.ts +47 -0
  313. package/dist/logger/types.d.ts.map +1 -0
  314. package/dist/logger/types.js +8 -0
  315. package/dist/logger/types.js.map +1 -0
  316. package/dist/notifications/index.d.ts +8 -0
  317. package/dist/notifications/index.d.ts.map +1 -0
  318. package/dist/notifications/index.js +72 -0
  319. package/dist/notifications/index.js.map +1 -0
  320. package/dist/notifications/service.d.ts +79 -0
  321. package/dist/notifications/service.d.ts.map +1 -0
  322. package/dist/notifications/service.js +164 -0
  323. package/dist/notifications/service.js.map +1 -0
  324. package/dist/realtime/channels.d.ts +37 -0
  325. package/dist/realtime/channels.d.ts.map +1 -0
  326. package/dist/realtime/channels.js +58 -0
  327. package/dist/realtime/channels.js.map +1 -0
  328. package/dist/realtime/index.d.ts +19 -0
  329. package/dist/realtime/index.d.ts.map +1 -0
  330. package/dist/realtime/index.js +118 -0
  331. package/dist/realtime/index.js.map +1 -0
  332. package/dist/realtime/postgres.d.ts +48 -0
  333. package/dist/realtime/postgres.d.ts.map +1 -0
  334. package/dist/realtime/postgres.js +151 -0
  335. package/dist/realtime/postgres.js.map +1 -0
  336. package/dist/realtime/service.d.ts +75 -0
  337. package/dist/realtime/service.d.ts.map +1 -0
  338. package/dist/realtime/service.js +103 -0
  339. package/dist/realtime/service.js.map +1 -0
  340. package/dist/realtime/sse.d.ts +55 -0
  341. package/dist/realtime/sse.d.ts.map +1 -0
  342. package/dist/realtime/sse.js +123 -0
  343. package/dist/realtime/sse.js.map +1 -0
  344. package/dist/realtime/transport.d.ts +52 -0
  345. package/dist/realtime/transport.d.ts.map +1 -0
  346. package/dist/realtime/transport.js +2 -0
  347. package/dist/realtime/transport.js.map +1 -0
  348. package/dist/storage/index.d.ts +18 -0
  349. package/dist/storage/index.d.ts.map +1 -0
  350. package/dist/storage/index.js +89 -0
  351. package/dist/storage/index.js.map +1 -0
  352. package/dist/storage/keys.d.ts +50 -0
  353. package/dist/storage/keys.d.ts.map +1 -0
  354. package/dist/storage/keys.js +120 -0
  355. package/dist/storage/keys.js.map +1 -0
  356. package/dist/storage/memory.d.ts +32 -0
  357. package/dist/storage/memory.d.ts.map +1 -0
  358. package/dist/storage/memory.js +84 -0
  359. package/dist/storage/memory.js.map +1 -0
  360. package/dist/storage/provider.d.ts +93 -0
  361. package/dist/storage/provider.d.ts.map +1 -0
  362. package/dist/storage/provider.js +2 -0
  363. package/dist/storage/provider.js.map +1 -0
  364. package/dist/storage/s3.d.ts +34 -0
  365. package/dist/storage/s3.d.ts.map +1 -0
  366. package/dist/storage/s3.js +175 -0
  367. package/dist/storage/s3.js.map +1 -0
  368. package/dist/storage/service.d.ts +86 -0
  369. package/dist/storage/service.d.ts.map +1 -0
  370. package/dist/storage/service.js +107 -0
  371. package/dist/storage/service.js.map +1 -0
  372. package/dist/storage/sigv4.d.ts +58 -0
  373. package/dist/storage/sigv4.d.ts.map +1 -0
  374. package/dist/storage/sigv4.js +114 -0
  375. package/dist/storage/sigv4.js.map +1 -0
  376. package/dist/streams/client.d.ts +91 -0
  377. package/dist/streams/client.d.ts.map +1 -0
  378. package/dist/streams/client.js +128 -0
  379. package/dist/streams/client.js.map +1 -0
  380. package/dist/streams/events.d.ts +68 -0
  381. package/dist/streams/events.d.ts.map +1 -0
  382. package/dist/streams/events.js +81 -0
  383. package/dist/streams/events.js.map +1 -0
  384. package/dist/streams/index.d.ts +47 -0
  385. package/dist/streams/index.d.ts.map +1 -0
  386. package/dist/streams/index.js +47 -0
  387. package/dist/streams/index.js.map +1 -0
  388. package/dist/streams/realtime.d.ts +27 -0
  389. package/dist/streams/realtime.d.ts.map +1 -0
  390. package/dist/streams/realtime.js +50 -0
  391. package/dist/streams/realtime.js.map +1 -0
  392. package/dist/streams/state.d.ts +26 -0
  393. package/dist/streams/state.d.ts.map +1 -0
  394. package/dist/streams/state.js +34 -0
  395. package/dist/streams/state.js.map +1 -0
  396. package/dist/users/index.d.ts +9 -0
  397. package/dist/users/index.d.ts.map +1 -0
  398. package/dist/users/index.js +23 -0
  399. package/dist/users/index.js.map +1 -0
  400. package/dist/users/service.d.ts +43 -0
  401. package/dist/users/service.d.ts.map +1 -0
  402. package/dist/users/service.js +113 -0
  403. package/dist/users/service.js.map +1 -0
  404. package/dist/webhooks/inbound.d.ts +70 -0
  405. package/dist/webhooks/inbound.d.ts.map +1 -0
  406. package/dist/webhooks/inbound.js +146 -0
  407. package/dist/webhooks/inbound.js.map +1 -0
  408. package/dist/webhooks/index.d.ts +12 -0
  409. package/dist/webhooks/index.d.ts.map +1 -0
  410. package/dist/webhooks/index.js +65 -0
  411. package/dist/webhooks/index.js.map +1 -0
  412. package/dist/webhooks/outgoing.d.ts +89 -0
  413. package/dist/webhooks/outgoing.d.ts.map +1 -0
  414. package/dist/webhooks/outgoing.js +375 -0
  415. package/dist/webhooks/outgoing.js.map +1 -0
  416. package/dist/webhooks/signature.d.ts +40 -0
  417. package/dist/webhooks/signature.d.ts.map +1 -0
  418. package/dist/webhooks/signature.js +77 -0
  419. package/dist/webhooks/signature.js.map +1 -0
  420. package/dist/workspaces/context.d.ts +30 -0
  421. package/dist/workspaces/context.d.ts.map +1 -0
  422. package/dist/workspaces/context.js +12 -0
  423. package/dist/workspaces/context.js.map +1 -0
  424. package/dist/workspaces/index.d.ts +5 -0
  425. package/dist/workspaces/index.d.ts.map +1 -0
  426. package/dist/workspaces/index.js +21 -0
  427. package/dist/workspaces/index.js.map +1 -0
  428. package/dist/workspaces/service.d.ts +126 -0
  429. package/dist/workspaces/service.d.ts.map +1 -0
  430. package/dist/workspaces/service.js +495 -0
  431. package/dist/workspaces/service.js.map +1 -0
  432. package/docs/README.md +71 -0
  433. package/docs/api-keys.md +184 -0
  434. package/docs/audit.md +198 -0
  435. package/docs/auth.md +196 -0
  436. package/docs/authorization.md +225 -0
  437. package/docs/billing.md +293 -0
  438. package/docs/cli.md +238 -0
  439. package/docs/config.md +163 -0
  440. package/docs/db.md +219 -0
  441. package/docs/email.md +222 -0
  442. package/docs/entitlements.md +194 -0
  443. package/docs/errors.md +158 -0
  444. package/docs/events.md +279 -0
  445. package/docs/feature-flags.md +237 -0
  446. package/docs/files.md +229 -0
  447. package/docs/jobs.md +288 -0
  448. package/docs/logger.md +269 -0
  449. package/docs/notifications.md +179 -0
  450. package/docs/publishing.md +128 -0
  451. package/docs/realtime.md +360 -0
  452. package/docs/storage.md +279 -0
  453. package/docs/streams.md +296 -0
  454. package/docs/users.md +117 -0
  455. package/docs/webhooks.md +272 -0
  456. package/docs/workspaces.md +269 -0
  457. package/drizzle/0000_init_users.sql +21 -0
  458. package/drizzle/0001_workspaces_roles_permissions.sql +86 -0
  459. package/drizzle/0002_billing_entitlements.sql +97 -0
  460. package/drizzle/0003_events.sql +17 -0
  461. package/drizzle/0004_notifications_audit.sql +64 -0
  462. package/drizzle/0005_api_keys_webhooks.sql +77 -0
  463. package/drizzle/0006_feature_flags.sql +22 -0
  464. package/drizzle/0007_files.sql +23 -0
  465. package/drizzle/meta/0000_snapshot.json +160 -0
  466. package/drizzle/meta/0001_snapshot.json +837 -0
  467. package/drizzle/meta/0002_snapshot.json +1580 -0
  468. package/drizzle/meta/0003_snapshot.json +1751 -0
  469. package/drizzle/meta/0004_snapshot.json +2109 -0
  470. package/drizzle/meta/0005_snapshot.json +2719 -0
  471. package/drizzle/meta/0006_snapshot.json +2909 -0
  472. package/drizzle/meta/0007_snapshot.json +3113 -0
  473. package/drizzle/meta/_journal.json +62 -0
  474. package/package.json +180 -0
@@ -0,0 +1,94 @@
1
+ import { z } from "zod";
2
+ import { ConfigError } from "./errors.js";
3
+ /**
4
+ * Public configuration safe to ship in a browser bundle.
5
+ *
6
+ * This module is deliberately standalone: it does not import `./sections.js` or
7
+ * any other server configuration code, so nothing that describes or reads a
8
+ * secret can be pulled into a client bundle through it.
9
+ *
10
+ * Every variable is read as a **literal** `process.env.NEXT_PUBLIC_*` access.
11
+ * Next.js performs a textual substitution of those expressions at build time; a
12
+ * dynamic lookup such as `process.env[key]` is not substituted and would be
13
+ * `undefined` in the browser. Do not refactor these into a loop.
14
+ */
15
+ const clientEnvSchema = z
16
+ .object({
17
+ NEXT_PUBLIC_APP_NAME: z.string().min(1),
18
+ NEXT_PUBLIC_APP_URL: z.url(),
19
+ NEXT_PUBLIC_APP_ENV: z
20
+ .enum(["development", "test", "staging", "production"])
21
+ .default("development"),
22
+ /** Public WorkOS client identifier. Not a secret. */
23
+ NEXT_PUBLIC_WORKOS_CLIENT_ID: z.string().min(1),
24
+ /** Browser-facing realtime endpoint. */
25
+ NEXT_PUBLIC_REALTIME_URL: z.url().optional(),
26
+ })
27
+ .transform((env) => ({
28
+ appName: env.NEXT_PUBLIC_APP_NAME,
29
+ appUrl: env.NEXT_PUBLIC_APP_URL,
30
+ environment: env.NEXT_PUBLIC_APP_ENV,
31
+ isProduction: env.NEXT_PUBLIC_APP_ENV === "production",
32
+ workosClientId: env.NEXT_PUBLIC_WORKOS_CLIENT_ID,
33
+ realtimeUrl: env.NEXT_PUBLIC_REALTIME_URL,
34
+ }));
35
+ function readPublicEnv() {
36
+ if (typeof process === "undefined" || !process.env) {
37
+ return {};
38
+ }
39
+ const raw = {
40
+ NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME,
41
+ NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
42
+ NEXT_PUBLIC_APP_ENV: process.env.NEXT_PUBLIC_APP_ENV,
43
+ NEXT_PUBLIC_WORKOS_CLIENT_ID: process.env.NEXT_PUBLIC_WORKOS_CLIENT_ID,
44
+ NEXT_PUBLIC_REALTIME_URL: process.env.NEXT_PUBLIC_REALTIME_URL,
45
+ };
46
+ const result = {};
47
+ for (const [key, value] of Object.entries(raw)) {
48
+ // Empty strings are treated as absent so Zod defaults and optionals apply.
49
+ if (value !== undefined && value !== "") {
50
+ result[key] = value;
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ let cached;
56
+ function load() {
57
+ if (cached !== undefined) {
58
+ return cached;
59
+ }
60
+ const parsed = clientEnvSchema.safeParse(readPublicEnv());
61
+ if (!parsed.success) {
62
+ throw new ConfigError("client", parsed.error);
63
+ }
64
+ cached = parsed.data;
65
+ return cached;
66
+ }
67
+ /** Typed, validated public configuration. Safe for client components. */
68
+ export const clientConfig = {
69
+ get app() {
70
+ const value = load();
71
+ return {
72
+ name: value.appName,
73
+ url: value.appUrl,
74
+ environment: value.environment,
75
+ isProduction: value.isProduction,
76
+ };
77
+ },
78
+ get auth() {
79
+ return { workosClientId: load().workosClientId };
80
+ },
81
+ get realtime() {
82
+ return { url: load().realtimeUrl };
83
+ },
84
+ };
85
+ /** Eagerly validate public configuration. Call from a client entry point. */
86
+ export function assertClientConfig() {
87
+ load();
88
+ }
89
+ /** Clear memoised public configuration. Test-only. */
90
+ export function resetClientConfigCache() {
91
+ cached = undefined;
92
+ }
93
+ export { ConfigError } from "./errors.js";
94
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/config/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The single point in @digimuza/saas-core that reads `process.env`.
3
+ *
4
+ * Nothing else in the package — and no application code — may access
5
+ * `process.env` directly. Values arrive here from Infisical, which injects
6
+ * secrets into the process environment at runtime.
7
+ */
8
+ /** Raw environment source. Indirected so tests can substitute a fixture. */
9
+ export type EnvSource = Record<string, string | undefined>;
10
+ /**
11
+ * Replace the environment source. Test-only; calling this in production code
12
+ * defeats the purpose of centralising environment access.
13
+ */
14
+ export declare function setEnvSource(source: EnvSource | undefined): void;
15
+ /**
16
+ * Read the given variables from the environment.
17
+ *
18
+ * Empty strings are treated as absent. Secret managers and CI systems routinely
19
+ * inject `FOO=` for unset values; without this, Zod `.default()` and
20
+ * `.optional()` would never apply and every deployment would need every
21
+ * variable set to a non-empty placeholder.
22
+ */
23
+ export declare function readEnv(keys: readonly string[]): Record<string, string>;
24
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAI3D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAEhE;AAOD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The single point in @digimuza/saas-core that reads `process.env`.
3
+ *
4
+ * Nothing else in the package — and no application code — may access
5
+ * `process.env` directly. Values arrive here from Infisical, which injects
6
+ * secrets into the process environment at runtime.
7
+ */
8
+ let override;
9
+ /**
10
+ * Replace the environment source. Test-only; calling this in production code
11
+ * defeats the purpose of centralising environment access.
12
+ */
13
+ export function setEnvSource(source) {
14
+ override = source;
15
+ }
16
+ function source() {
17
+ if (override !== undefined)
18
+ return override;
19
+ return typeof process !== "undefined" && process.env ? process.env : {};
20
+ }
21
+ /**
22
+ * Read the given variables from the environment.
23
+ *
24
+ * Empty strings are treated as absent. Secret managers and CI systems routinely
25
+ * inject `FOO=` for unset values; without this, Zod `.default()` and
26
+ * `.optional()` would never apply and every deployment would need every
27
+ * variable set to a non-empty placeholder.
28
+ */
29
+ export function readEnv(keys) {
30
+ const env = source();
31
+ const result = {};
32
+ for (const key of keys) {
33
+ const value = env[key];
34
+ if (value !== undefined && value !== "") {
35
+ result[key] = value;
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,IAAI,QAA+B,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA6B;IACxD,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC;AAED,SAAS,MAAM;IACb,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAuB;IAC7C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ZodError } from "zod";
2
+ /**
3
+ * Thrown when a configuration section is missing or invalid.
4
+ *
5
+ * Security: the message is built from the failing variable *names* and Zod's
6
+ * structural messages only. Configuration values are never interpolated, so a
7
+ * bad secret can never be leaked into logs, stack traces or error trackers.
8
+ */
9
+ export declare class ConfigError extends Error {
10
+ readonly name = "ConfigError";
11
+ /** The configuration section that failed, e.g. `"database"`. */
12
+ readonly section: string;
13
+ /** Environment variable names that failed validation. */
14
+ readonly variables: readonly string[];
15
+ constructor(section: string, error: ZodError);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAEpC;;;;;;GAMG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAkB,IAAI,iBAAiB;IAEvC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAEtC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAc3C;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Thrown when a configuration section is missing or invalid.
3
+ *
4
+ * Security: the message is built from the failing variable *names* and Zod's
5
+ * structural messages only. Configuration values are never interpolated, so a
6
+ * bad secret can never be leaked into logs, stack traces or error trackers.
7
+ */
8
+ export class ConfigError extends Error {
9
+ name = "ConfigError";
10
+ /** The configuration section that failed, e.g. `"database"`. */
11
+ section;
12
+ /** Environment variable names that failed validation. */
13
+ variables;
14
+ constructor(section, error) {
15
+ const problems = error.issues.map((issue) => {
16
+ const variable = issue.path.join(".") || "(section)";
17
+ return ` - ${variable}: ${issue.message}`;
18
+ });
19
+ super(`Invalid configuration for section "${section}":\n${problems.join("\n")}\n\n` +
20
+ `These values are injected by Infisical at runtime. Verify the Infisical ` +
21
+ `project/environment for this deployment.`);
22
+ this.section = section;
23
+ this.variables = error.issues.map((issue) => issue.path.join("."));
24
+ }
25
+ }
26
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClB,IAAI,GAAG,aAAa,CAAC;IAEvC,gEAAgE;IACvD,OAAO,CAAS;IAEzB,yDAAyD;IAChD,SAAS,CAAoB;IAEtC,YAAY,OAAe,EAAE,KAAe;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;YACrD,OAAO,OAAO,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,KAAK,CACH,sCAAsC,OAAO,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAC3E,0EAA0E;YAC1E,0CAA0C,CAC7C,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;CACF"}
@@ -0,0 +1,72 @@
1
+ import { type SectionName } from "./sections.ts";
2
+ export { ConfigError } from "./errors.ts";
3
+ export { setEnvSource, type EnvSource } from "./env.ts";
4
+ export { sectionNames, type SectionName } from "./sections.ts";
5
+ /**
6
+ * Typed, validated server configuration.
7
+ *
8
+ * Values originate from the process environment, which Infisical populates at
9
+ * runtime. Never read `process.env` outside this module.
10
+ */
11
+ export declare const config: {
12
+ readonly app: {
13
+ name: string;
14
+ url: string;
15
+ environment: "development" | "production" | "staging" | "test";
16
+ logLevel: "debug" | "error" | "info" | "warn";
17
+ isProduction: boolean;
18
+ };
19
+ readonly database: {
20
+ url: string;
21
+ maxConnections: number;
22
+ ssl: boolean;
23
+ statementTimeoutMs: number;
24
+ preparedStatements: boolean;
25
+ };
26
+ readonly auth: {
27
+ workosApiKey: string;
28
+ workosClientId: string;
29
+ cookiePassword: string;
30
+ redirectUri: string;
31
+ };
32
+ readonly billing: {
33
+ apiKey: string;
34
+ webhookSecret: string;
35
+ apiUrl: string;
36
+ };
37
+ readonly email: {
38
+ apiKey: string;
39
+ fromAddress: string;
40
+ fromName: string | undefined;
41
+ };
42
+ readonly storage: {
43
+ bucket: string;
44
+ region: string;
45
+ accessKeyId: string;
46
+ secretAccessKey: string;
47
+ endpoint: string | undefined;
48
+ publicUrl: string | undefined;
49
+ };
50
+ readonly realtime: {
51
+ url: string;
52
+ apiKey: string;
53
+ };
54
+ readonly jobs: {
55
+ secretKey: string;
56
+ apiUrl: string;
57
+ };
58
+ };
59
+ /**
60
+ * Eagerly validate configuration sections and fail fast.
61
+ *
62
+ * Call this once during application startup with the sections the application
63
+ * depends on, so misconfiguration surfaces at boot rather than mid-request.
64
+ *
65
+ * @param names Sections to validate. Defaults to every section.
66
+ * @throws ConfigError when a single section is invalid.
67
+ * @throws AggregateError of ConfigError when several sections are invalid.
68
+ */
69
+ export declare function assertConfig(names?: readonly SectionName[]): void;
70
+ /** Clear memoised configuration. Test-only. */
71
+ export declare function resetConfigCache(): void;
72
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAIzE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAsC/D;;;;;GAKG;AACH,eAAO,MAAM,MAAM;aACb,GAAG;;;;;;;aAGH,QAAQ;;;;;;;aAGR,IAAI;;;;;;aAGJ,OAAO;;;;;aAGP,KAAK;;;;;aAGL,OAAO;;;;;;;;aAGP,QAAQ;;;;aAGR,IAAI;;;;CAGT,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,SAAS,WAAW,EAAiB,GAAG,IAAI,CA0B/E;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,106 @@
1
+ import { ConfigError } from "./errors.js";
2
+ import { readEnv } from "./env.js";
3
+ import { assertServerRuntime } from "./runtime.js";
4
+ import { sectionNames, sections } from "./sections.js";
5
+ assertServerRuntime("@digimuza/saas-core/config");
6
+ export { ConfigError } from "./errors.js";
7
+ export { setEnvSource } from "./env.js";
8
+ export { sectionNames } from "./sections.js";
9
+ const cache = new Map();
10
+ /**
11
+ * Validate and memoise one section.
12
+ *
13
+ * Sections are validated on first access rather than at import time. A core
14
+ * package is consumed by many runtimes — a migration script, a Trigger.dev
15
+ * task, a Next.js route handler — and few of them need every integration
16
+ * configured. Eager whole-config validation would force every deployment to set
17
+ * Revolut and storage credentials just to run a migration. Use `assertConfig()`
18
+ * at application startup to get fail-fast behaviour for the sections an
19
+ * application actually depends on.
20
+ */
21
+ function loadSection(name) {
22
+ const cached = cache.get(name);
23
+ if (cached !== undefined) {
24
+ return cached;
25
+ }
26
+ const definition = sections[name];
27
+ const raw = readEnv(Object.keys(definition.env.shape));
28
+ const parsed = definition.env.safeParse(raw);
29
+ if (!parsed.success) {
30
+ throw new ConfigError(name, parsed.error);
31
+ }
32
+ // `definition` is narrowed to a union member per `K`; the parsed output and
33
+ // the mapper agree by construction in `sections.ts`.
34
+ const value = definition.map(parsed.data);
35
+ cache.set(name, value);
36
+ return value;
37
+ }
38
+ /**
39
+ * Typed, validated server configuration.
40
+ *
41
+ * Values originate from the process environment, which Infisical populates at
42
+ * runtime. Never read `process.env` outside this module.
43
+ */
44
+ export const config = {
45
+ get app() {
46
+ return loadSection("app");
47
+ },
48
+ get database() {
49
+ return loadSection("database");
50
+ },
51
+ get auth() {
52
+ return loadSection("auth");
53
+ },
54
+ get billing() {
55
+ return loadSection("billing");
56
+ },
57
+ get email() {
58
+ return loadSection("email");
59
+ },
60
+ get storage() {
61
+ return loadSection("storage");
62
+ },
63
+ get realtime() {
64
+ return loadSection("realtime");
65
+ },
66
+ get jobs() {
67
+ return loadSection("jobs");
68
+ },
69
+ };
70
+ /**
71
+ * Eagerly validate configuration sections and fail fast.
72
+ *
73
+ * Call this once during application startup with the sections the application
74
+ * depends on, so misconfiguration surfaces at boot rather than mid-request.
75
+ *
76
+ * @param names Sections to validate. Defaults to every section.
77
+ * @throws ConfigError when a single section is invalid.
78
+ * @throws AggregateError of ConfigError when several sections are invalid.
79
+ */
80
+ export function assertConfig(names = sectionNames) {
81
+ const errors = [];
82
+ for (const name of names) {
83
+ try {
84
+ loadSection(name);
85
+ }
86
+ catch (error) {
87
+ if (error instanceof ConfigError) {
88
+ errors.push(error);
89
+ continue;
90
+ }
91
+ throw error;
92
+ }
93
+ }
94
+ if (errors.length === 1) {
95
+ throw errors[0];
96
+ }
97
+ if (errors.length > 1) {
98
+ throw new AggregateError(errors, `Invalid configuration in ${errors.length} sections: ` +
99
+ errors.map((error) => error.section).join(", "));
100
+ }
101
+ }
102
+ /** Clear memoised configuration. Test-only. */
103
+ export function resetConfigCache() {
104
+ cache.clear();
105
+ }
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Guards server-only modules against being evaluated in a browser bundle.
3
+ *
4
+ * Why not the `server-only` package: it resolves to a module that throws unless
5
+ * the bundler sets the `react-server` export condition. This core package must
6
+ * also run in plain Node (migration scripts, Trigger.dev tasks, Vitest), where
7
+ * that condition is absent — importing it would break every non-Next consumer.
8
+ *
9
+ * This is a runtime guard, not a build-time one. It fires on the first import in
10
+ * a browser, which surfaces immediately in development. The build-time guarantee
11
+ * comes from the package layout: clients import `@digimuza/saas-core/config/client`,
12
+ * which never imports server configuration code.
13
+ */
14
+ export declare function assertServerRuntime(moduleName: string): void;
15
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAS5D"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Guards server-only modules against being evaluated in a browser bundle.
3
+ *
4
+ * Why not the `server-only` package: it resolves to a module that throws unless
5
+ * the bundler sets the `react-server` export condition. This core package must
6
+ * also run in plain Node (migration scripts, Trigger.dev tasks, Vitest), where
7
+ * that condition is absent — importing it would break every non-Next consumer.
8
+ *
9
+ * This is a runtime guard, not a build-time one. It fires on the first import in
10
+ * a browser, which surfaces immediately in development. The build-time guarantee
11
+ * comes from the package layout: clients import `@digimuza/saas-core/config/client`,
12
+ * which never imports server configuration code.
13
+ */
14
+ export function assertServerRuntime(moduleName) {
15
+ // Checked via globalThis so this module needs no DOM lib types.
16
+ if (typeof globalThis.window !== "undefined") {
17
+ throw new Error(`${moduleName} is server-only and was loaded in a browser. ` +
18
+ `Import "@digimuza/saas-core/config/client" from client components; ` +
19
+ `server configuration contains secrets and must never reach the client bundle.`);
20
+ }
21
+ }
22
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,gEAAgE;IAChE,IAAI,OAAQ,UAAmC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,+CAA+C;YAC1D,qEAAqE;YACrE,+EAA+E,CAClF,CAAC;IACJ,CAAC;AACH,CAAC"}