@soulbatical/tetra-core 0.10.4 → 0.11.0

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 (271) hide show
  1. package/README.md +78 -38
  2. package/dist/core/createApp.d.ts +1 -1
  3. package/dist/core/createApp.d.ts.map +1 -1
  4. package/dist/core/createApp.js +77 -2
  5. package/dist/core/createApp.js.map +1 -1
  6. package/dist/core/dualWriteProxy.d.ts +7 -2
  7. package/dist/core/dualWriteProxy.d.ts.map +1 -1
  8. package/dist/core/dualWriteProxy.js +16 -5
  9. package/dist/core/dualWriteProxy.js.map +1 -1
  10. package/dist/core/routeContext.d.ts +24 -0
  11. package/dist/core/routeContext.d.ts.map +1 -1
  12. package/dist/core/routeContext.js +31 -4
  13. package/dist/core/routeContext.js.map +1 -1
  14. package/dist/core/systemDb.d.ts +2 -2
  15. package/dist/core/systemDb.js +2 -2
  16. package/dist/generators/rls-checker.d.ts +1 -1
  17. package/dist/generators/rls-checker.js +1 -1
  18. package/dist/generators/rls-exec-sql.d.ts +1 -1
  19. package/dist/generators/rls-exec-sql.js +1 -1
  20. package/dist/generators/rpc/index.d.ts +1 -1
  21. package/dist/generators/rpc/index.js +1 -1
  22. package/dist/index.d.ts +3 -31
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -32
  25. package/dist/index.js.map +1 -1
  26. package/dist/middleware/securityMiddleware.d.ts +1 -1
  27. package/dist/middleware/securityMiddleware.d.ts.map +1 -1
  28. package/dist/middleware/validateBody.d.ts.map +1 -1
  29. package/dist/middleware/validateBody.js +51 -8
  30. package/dist/middleware/validateBody.js.map +1 -1
  31. package/dist/shared/rfc7807ErrorResponse.d.ts +7 -0
  32. package/dist/shared/rfc7807ErrorResponse.d.ts.map +1 -1
  33. package/dist/shared/rfc7807ErrorResponse.js +19 -5
  34. package/dist/shared/rfc7807ErrorResponse.js.map +1 -1
  35. package/dist/utils/logger.d.ts.map +1 -1
  36. package/dist/utils/logger.js +16 -1
  37. package/dist/utils/logger.js.map +1 -1
  38. package/package.json +33 -77
  39. package/dist/affiliate.d.ts +0 -11
  40. package/dist/affiliate.d.ts.map +0 -1
  41. package/dist/affiliate.js +0 -10
  42. package/dist/affiliate.js.map +0 -1
  43. package/dist/billing.d.ts +0 -8
  44. package/dist/billing.d.ts.map +0 -1
  45. package/dist/billing.js +0 -7
  46. package/dist/billing.js.map +0 -1
  47. package/dist/email.d.ts +0 -9
  48. package/dist/email.d.ts.map +0 -1
  49. package/dist/email.js +0 -8
  50. package/dist/email.js.map +0 -1
  51. package/dist/generators/rls-exec-sql.sql +0 -57
  52. package/dist/generators.d.ts +0 -15
  53. package/dist/generators.d.ts.map +0 -1
  54. package/dist/generators.js +0 -12
  55. package/dist/generators.js.map +0 -1
  56. package/dist/mcp.d.ts +0 -8
  57. package/dist/mcp.d.ts.map +0 -1
  58. package/dist/mcp.js +0 -7
  59. package/dist/mcp.js.map +0 -1
  60. package/dist/planner.d.ts +0 -8
  61. package/dist/planner.d.ts.map +0 -1
  62. package/dist/planner.js +0 -7
  63. package/dist/planner.js.map +0 -1
  64. package/dist/shared/affiliate/AffiliateAttributionService.d.ts +0 -47
  65. package/dist/shared/affiliate/AffiliateAttributionService.d.ts.map +0 -1
  66. package/dist/shared/affiliate/AffiliateAttributionService.js +0 -308
  67. package/dist/shared/affiliate/AffiliateAttributionService.js.map +0 -1
  68. package/dist/shared/affiliate/AffiliateClickService.d.ts +0 -35
  69. package/dist/shared/affiliate/AffiliateClickService.d.ts.map +0 -1
  70. package/dist/shared/affiliate/AffiliateClickService.js +0 -87
  71. package/dist/shared/affiliate/AffiliateClickService.js.map +0 -1
  72. package/dist/shared/affiliate/affiliateFeatureConfig.d.ts +0 -11
  73. package/dist/shared/affiliate/affiliateFeatureConfig.d.ts.map +0 -1
  74. package/dist/shared/affiliate/affiliateFeatureConfig.js +0 -242
  75. package/dist/shared/affiliate/affiliateFeatureConfig.js.map +0 -1
  76. package/dist/shared/affiliate/index.d.ts +0 -11
  77. package/dist/shared/affiliate/index.d.ts.map +0 -1
  78. package/dist/shared/affiliate/index.js +0 -13
  79. package/dist/shared/affiliate/index.js.map +0 -1
  80. package/dist/shared/affiliate/routes.d.ts +0 -87
  81. package/dist/shared/affiliate/routes.d.ts.map +0 -1
  82. package/dist/shared/affiliate/routes.js +0 -404
  83. package/dist/shared/affiliate/routes.js.map +0 -1
  84. package/dist/shared/affiliate/types.d.ts +0 -170
  85. package/dist/shared/affiliate/types.d.ts.map +0 -1
  86. package/dist/shared/affiliate/types.js +0 -11
  87. package/dist/shared/affiliate/types.js.map +0 -1
  88. package/dist/shared/billing/BillingService.d.ts +0 -56
  89. package/dist/shared/billing/BillingService.d.ts.map +0 -1
  90. package/dist/shared/billing/BillingService.js +0 -588
  91. package/dist/shared/billing/BillingService.js.map +0 -1
  92. package/dist/shared/billing/SeatBillingService.d.ts +0 -106
  93. package/dist/shared/billing/SeatBillingService.d.ts.map +0 -1
  94. package/dist/shared/billing/SeatBillingService.js +0 -292
  95. package/dist/shared/billing/SeatBillingService.js.map +0 -1
  96. package/dist/shared/billing/index.d.ts +0 -30
  97. package/dist/shared/billing/index.d.ts.map +0 -1
  98. package/dist/shared/billing/index.js +0 -27
  99. package/dist/shared/billing/index.js.map +0 -1
  100. package/dist/shared/billing/routes.d.ts +0 -45
  101. package/dist/shared/billing/routes.d.ts.map +0 -1
  102. package/dist/shared/billing/routes.js +0 -184
  103. package/dist/shared/billing/routes.js.map +0 -1
  104. package/dist/shared/billing/seat-pricing.d.ts +0 -53
  105. package/dist/shared/billing/seat-pricing.d.ts.map +0 -1
  106. package/dist/shared/billing/seat-pricing.js +0 -81
  107. package/dist/shared/billing/seat-pricing.js.map +0 -1
  108. package/dist/shared/billing/types.d.ts +0 -109
  109. package/dist/shared/billing/types.d.ts.map +0 -1
  110. package/dist/shared/billing/types.js +0 -8
  111. package/dist/shared/billing/types.js.map +0 -1
  112. package/dist/shared/email/EmailService.d.ts +0 -64
  113. package/dist/shared/email/EmailService.d.ts.map +0 -1
  114. package/dist/shared/email/EmailService.js +0 -300
  115. package/dist/shared/email/EmailService.js.map +0 -1
  116. package/dist/shared/email/adminRoutes.d.ts +0 -30
  117. package/dist/shared/email/adminRoutes.d.ts.map +0 -1
  118. package/dist/shared/email/adminRoutes.js +0 -227
  119. package/dist/shared/email/adminRoutes.js.map +0 -1
  120. package/dist/shared/email/gmail.d.ts +0 -208
  121. package/dist/shared/email/gmail.d.ts.map +0 -1
  122. package/dist/shared/email/gmail.js +0 -626
  123. package/dist/shared/email/gmail.js.map +0 -1
  124. package/dist/shared/email/index.d.ts +0 -15
  125. package/dist/shared/email/index.d.ts.map +0 -1
  126. package/dist/shared/email/index.js +0 -18
  127. package/dist/shared/email/index.js.map +0 -1
  128. package/dist/shared/email/mailgun.d.ts +0 -18
  129. package/dist/shared/email/mailgun.d.ts.map +0 -1
  130. package/dist/shared/email/mailgun.js +0 -76
  131. package/dist/shared/email/mailgun.js.map +0 -1
  132. package/dist/shared/email/sanitize.d.ts +0 -25
  133. package/dist/shared/email/sanitize.d.ts.map +0 -1
  134. package/dist/shared/email/sanitize.js +0 -39
  135. package/dist/shared/email/sanitize.js.map +0 -1
  136. package/dist/shared/email/smtp.d.ts +0 -20
  137. package/dist/shared/email/smtp.d.ts.map +0 -1
  138. package/dist/shared/email/smtp.js +0 -53
  139. package/dist/shared/email/smtp.js.map +0 -1
  140. package/dist/shared/email/types.d.ts +0 -113
  141. package/dist/shared/email/types.d.ts.map +0 -1
  142. package/dist/shared/email/types.js +0 -7
  143. package/dist/shared/email/types.js.map +0 -1
  144. package/dist/shared/email/webhookRoutes.d.ts +0 -29
  145. package/dist/shared/email/webhookRoutes.d.ts.map +0 -1
  146. package/dist/shared/email/webhookRoutes.js +0 -125
  147. package/dist/shared/email/webhookRoutes.js.map +0 -1
  148. package/dist/shared/mcp/index.d.ts +0 -51
  149. package/dist/shared/mcp/index.d.ts.map +0 -1
  150. package/dist/shared/mcp/index.js +0 -51
  151. package/dist/shared/mcp/index.js.map +0 -1
  152. package/dist/shared/mcp/mcp-auth-routes.d.ts +0 -26
  153. package/dist/shared/mcp/mcp-auth-routes.d.ts.map +0 -1
  154. package/dist/shared/mcp/mcp-auth-routes.js +0 -141
  155. package/dist/shared/mcp/mcp-auth-routes.js.map +0 -1
  156. package/dist/shared/mcp/mcp-db.d.ts +0 -99
  157. package/dist/shared/mcp/mcp-db.d.ts.map +0 -1
  158. package/dist/shared/mcp/mcp-db.js +0 -106
  159. package/dist/shared/mcp/mcp-db.js.map +0 -1
  160. package/dist/shared/mcp/mcp-routes.d.ts +0 -29
  161. package/dist/shared/mcp/mcp-routes.d.ts.map +0 -1
  162. package/dist/shared/mcp/mcp-routes.js +0 -171
  163. package/dist/shared/mcp/mcp-routes.js.map +0 -1
  164. package/dist/shared/mcp/mcp-tokens-routes.d.ts +0 -35
  165. package/dist/shared/mcp/mcp-tokens-routes.d.ts.map +0 -1
  166. package/dist/shared/mcp/mcp-tokens-routes.js +0 -94
  167. package/dist/shared/mcp/mcp-tokens-routes.js.map +0 -1
  168. package/dist/shared/mcp/mcp-usage-routes.d.ts +0 -17
  169. package/dist/shared/mcp/mcp-usage-routes.d.ts.map +0 -1
  170. package/dist/shared/mcp/mcp-usage-routes.js +0 -81
  171. package/dist/shared/mcp/mcp-usage-routes.js.map +0 -1
  172. package/dist/shared/mcp/tenant-context.d.ts +0 -59
  173. package/dist/shared/mcp/tenant-context.d.ts.map +0 -1
  174. package/dist/shared/mcp/tenant-context.js +0 -136
  175. package/dist/shared/mcp/tenant-context.js.map +0 -1
  176. package/dist/shared/mcp/types.d.ts +0 -74
  177. package/dist/shared/mcp/types.d.ts.map +0 -1
  178. package/dist/shared/mcp/types.js +0 -7
  179. package/dist/shared/mcp/types.js.map +0 -1
  180. package/dist/shared/planner/GoogleCalendarService.d.ts +0 -137
  181. package/dist/shared/planner/GoogleCalendarService.d.ts.map +0 -1
  182. package/dist/shared/planner/GoogleCalendarService.js +0 -525
  183. package/dist/shared/planner/GoogleCalendarService.js.map +0 -1
  184. package/dist/shared/planner/PlannerService.d.ts +0 -264
  185. package/dist/shared/planner/PlannerService.d.ts.map +0 -1
  186. package/dist/shared/planner/PlannerService.js +0 -1393
  187. package/dist/shared/planner/PlannerService.js.map +0 -1
  188. package/dist/shared/planner/index.d.ts +0 -37
  189. package/dist/shared/planner/index.d.ts.map +0 -1
  190. package/dist/shared/planner/index.js +0 -35
  191. package/dist/shared/planner/index.js.map +0 -1
  192. package/dist/shared/planner/intervals.d.ts +0 -60
  193. package/dist/shared/planner/intervals.d.ts.map +0 -1
  194. package/dist/shared/planner/intervals.js +0 -141
  195. package/dist/shared/planner/intervals.js.map +0 -1
  196. package/dist/shared/planner/routes.d.ts +0 -69
  197. package/dist/shared/planner/routes.d.ts.map +0 -1
  198. package/dist/shared/planner/routes.js +0 -770
  199. package/dist/shared/planner/routes.js.map +0 -1
  200. package/dist/shared/planner/types.d.ts +0 -328
  201. package/dist/shared/planner/types.d.ts.map +0 -1
  202. package/dist/shared/planner/types.js +0 -9
  203. package/dist/shared/planner/types.js.map +0 -1
  204. package/dist/shared/storage/ImageProcessingService.d.ts +0 -32
  205. package/dist/shared/storage/ImageProcessingService.d.ts.map +0 -1
  206. package/dist/shared/storage/ImageProcessingService.js +0 -127
  207. package/dist/shared/storage/ImageProcessingService.js.map +0 -1
  208. package/dist/shared/storage/StorageProxyService.d.ts +0 -47
  209. package/dist/shared/storage/StorageProxyService.d.ts.map +0 -1
  210. package/dist/shared/storage/StorageProxyService.js +0 -196
  211. package/dist/shared/storage/StorageProxyService.js.map +0 -1
  212. package/dist/shared/storage/StorageUploadService.d.ts +0 -126
  213. package/dist/shared/storage/StorageUploadService.d.ts.map +0 -1
  214. package/dist/shared/storage/StorageUploadService.js +0 -206
  215. package/dist/shared/storage/StorageUploadService.js.map +0 -1
  216. package/dist/shared/storage/creative-urls.d.ts +0 -14
  217. package/dist/shared/storage/creative-urls.d.ts.map +0 -1
  218. package/dist/shared/storage/creative-urls.js +0 -30
  219. package/dist/shared/storage/creative-urls.js.map +0 -1
  220. package/dist/shared/storage/index.d.ts +0 -28
  221. package/dist/shared/storage/index.d.ts.map +0 -1
  222. package/dist/shared/storage/index.js +0 -27
  223. package/dist/shared/storage/index.js.map +0 -1
  224. package/dist/shared/storage/routes.d.ts +0 -42
  225. package/dist/shared/storage/routes.d.ts.map +0 -1
  226. package/dist/shared/storage/routes.js +0 -160
  227. package/dist/shared/storage/routes.js.map +0 -1
  228. package/dist/shared/storage/types.d.ts +0 -53
  229. package/dist/shared/storage/types.d.ts.map +0 -1
  230. package/dist/shared/storage/types.js +0 -2
  231. package/dist/shared/storage/types.js.map +0 -1
  232. package/dist/shared/telegram/index.d.ts +0 -4
  233. package/dist/shared/telegram/index.d.ts.map +0 -1
  234. package/dist/shared/telegram/index.js +0 -3
  235. package/dist/shared/telegram/index.js.map +0 -1
  236. package/dist/shared/telegram/routes.d.ts +0 -43
  237. package/dist/shared/telegram/routes.d.ts.map +0 -1
  238. package/dist/shared/telegram/routes.js +0 -868
  239. package/dist/shared/telegram/routes.js.map +0 -1
  240. package/dist/shared/telegram/types.d.ts +0 -168
  241. package/dist/shared/telegram/types.d.ts.map +0 -1
  242. package/dist/shared/telegram/types.js +0 -7
  243. package/dist/shared/telegram/types.js.map +0 -1
  244. package/dist/shared/telegram/utils.d.ts +0 -44
  245. package/dist/shared/telegram/utils.d.ts.map +0 -1
  246. package/dist/shared/telegram/utils.js +0 -121
  247. package/dist/shared/telegram/utils.js.map +0 -1
  248. package/dist/storage.d.ts +0 -9
  249. package/dist/storage.d.ts.map +0 -1
  250. package/dist/storage.js +0 -8
  251. package/dist/storage.js.map +0 -1
  252. package/dist/telemetry.d.ts +0 -9
  253. package/dist/telemetry.d.ts.map +0 -1
  254. package/dist/telemetry.js +0 -8
  255. package/dist/telemetry.js.map +0 -1
  256. package/scripts/postinstall.js +0 -79
  257. package/src/shared/affiliate/migrations/001_create_affiliates.sql +0 -49
  258. package/src/shared/affiliate/migrations/002_create_affiliate_commissions.sql +0 -31
  259. package/src/shared/affiliate/migrations/003_create_affiliate_clicks.sql +0 -26
  260. package/src/shared/affiliate/migrations/004_create_affiliate_payments.sql +0 -34
  261. package/src/shared/affiliate/migrations/005_create_affiliate_tier_history.sql +0 -19
  262. package/src/shared/affiliate/migrations/006_create_affiliate_rpc_functions.sql +0 -209
  263. package/src/shared/affiliate/migrations/007_create_affiliate_rls_policies.sql +0 -123
  264. package/src/shared/billing/migrations/00000000000001_billing.sql +0 -114
  265. package/src/shared/email/migrations/000_create_email_logs.sql +0 -27
  266. package/src/shared/email/migrations/001_create_email_templates.sql +0 -27
  267. package/src/shared/email/migrations/002_add_rls_baseline_policies.sql +0 -37
  268. package/src/shared/email/migrations/003_create_gmail_accounts.sql +0 -82
  269. package/src/shared/email/migrations/004_add_email_logs_tracking_columns.sql +0 -15
  270. package/src/shared/mcp/migrations/001_mcp_api_tokens.sql +0 -21
  271. package/src/shared/mcp/migrations/002_mcp_audit_log.sql +0 -16
package/package.json CHANGED
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "name": "@soulbatical/tetra-core",
3
- "version": "0.10.4",
4
- "publishConfig": {
5
- "access": "public"
6
- },
3
+ "version": "0.11.0",
4
+ "private": false,
7
5
  "description": "The foundation framework for Tetra platform projects (Soulbatical BV) — config-driven Express + Supabase + TypeScript",
8
6
  "type": "module",
9
7
  "main": "dist/index.js",
@@ -15,61 +13,20 @@
15
13
  "require": "./dist/index.js",
16
14
  "default": "./dist/index.js"
17
15
  },
18
- "./frontend": {
19
- "types": "./dist/frontend/index.d.ts",
20
- "import": "./dist/frontend/index.js",
21
- "require": "./dist/frontend/index.js",
22
- "default": "./dist/frontend/index.js"
23
- },
24
- "./billing": {
25
- "types": "./dist/billing.d.ts",
26
- "import": "./dist/billing.js",
27
- "default": "./dist/billing.js"
28
- },
29
- "./storage": {
30
- "types": "./dist/storage.d.ts",
31
- "import": "./dist/storage.js",
32
- "default": "./dist/storage.js"
33
- },
34
- "./mcp": {
35
- "types": "./dist/mcp.d.ts",
36
- "import": "./dist/mcp.js",
37
- "default": "./dist/mcp.js"
38
- },
39
- "./email": {
40
- "types": "./dist/email.d.ts",
41
- "import": "./dist/email.js",
42
- "default": "./dist/email.js"
43
- },
44
- "./planner": {
45
- "types": "./dist/planner.d.ts",
46
- "import": "./dist/planner.js",
47
- "default": "./dist/planner.js"
48
- },
49
- "./affiliate": {
50
- "types": "./dist/affiliate.d.ts",
51
- "import": "./dist/affiliate.js",
52
- "default": "./dist/affiliate.js"
53
- },
54
16
  "./auth": {
55
17
  "types": "./dist/auth.d.ts",
56
18
  "import": "./dist/auth.js",
57
19
  "default": "./dist/auth.js"
58
20
  },
59
- "./generators": {
60
- "types": "./dist/generators.d.ts",
61
- "import": "./dist/generators.js",
62
- "default": "./dist/generators.js"
21
+ "./meta-api": {
22
+ "types": "./dist/shared/meta-api/index.d.ts",
23
+ "import": "./dist/shared/meta-api/index.js",
24
+ "default": "./dist/shared/meta-api/index.js"
63
25
  },
64
26
  "./license": {
65
27
  "types": "./dist/license.d.ts",
66
28
  "import": "./dist/license.js",
67
29
  "default": "./dist/license.js"
68
- },
69
- "./telemetry": {
70
- "types": "./dist/telemetry.d.ts",
71
- "import": "./dist/telemetry.js",
72
- "default": "./dist/telemetry.js"
73
30
  }
74
31
  },
75
32
  "bin": {
@@ -78,15 +35,10 @@
78
35
  "files": [
79
36
  "dist",
80
37
  "scripts",
81
- "src/shared/auth/migrations",
82
- "src/shared/affiliate/migrations",
83
- "src/shared/email/migrations",
84
- "src/shared/mcp/migrations",
85
- "src/shared/billing/migrations"
38
+ "src/shared/auth/migrations"
86
39
  ],
87
40
  "scripts": {
88
- "build": "tsc",
89
- "postinstall": "node scripts/postinstall.js || true",
41
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc",
90
42
  "prepublishOnly": "npm run build && npm run typecheck && npx tetra-check-peers",
91
43
  "check:peers": "npx tetra-check-peers",
92
44
  "typecheck": "tsc --noEmit",
@@ -94,29 +46,26 @@
94
46
  "test:watch": "vitest",
95
47
  "enforce:api": "./scripts/enforce-api-standards.sh"
96
48
  },
97
- "optionalDependencies": {
98
- "@soulbatical/tetra-dev-toolkit": "^1.22.4"
99
- },
100
49
  "dependencies": {
101
- "express-rate-limit": "^8.2.1",
102
- "handlebars": "^4.7.8",
50
+ "express-rate-limit": "^8.3.2",
103
51
  "helmet": "^8.1.0",
104
52
  "node-cron": "^4.1.1",
105
- "nodemailer": "^8.0.2",
106
- "zod": "^3.22.4"
53
+ "zod": "^4.3.6"
107
54
  },
108
55
  "peerDependencies": {
109
56
  "@modelcontextprotocol/sdk": "^1.0.0",
110
57
  "@mollie/api-client": "^4.0.0",
111
- "@sentry/node": ">=8.0.0",
58
+ "@sentry/node": "^10.48.0",
59
+ "@soulbatical/tetra-contracts": "^0.1.0",
60
+ "@soulbatical/tetra-supabase": "^0.2.0",
112
61
  "@supabase/supabase-js": "^2.93.3",
113
62
  "@tanstack/react-table": "^8.0.0",
114
63
  "express": "^4.21.0 || ^5.0.0",
115
64
  "multer": "^1.4.5 || ^2.0.0",
116
- "pino": "^9.0.0 || ^10.0.0",
65
+ "pino": "^10.3.1",
117
66
  "react": "^18.0.0 || ^19.0.0",
118
67
  "sharp": ">=0.33.0",
119
- "stripe": "^17.0.0 || ^20.0.0"
68
+ "stripe": "^22.0.1"
120
69
  },
121
70
  "peerDependenciesMeta": {
122
71
  "pino": {
@@ -140,6 +89,9 @@
140
89
  "@mollie/api-client": {
141
90
  "optional": true
142
91
  },
92
+ "@soulbatical/tetra-contracts": {
93
+ "optional": false
94
+ },
143
95
  "multer": {
144
96
  "optional": true
145
97
  },
@@ -148,22 +100,23 @@
148
100
  }
149
101
  },
150
102
  "devDependencies": {
151
- "@modelcontextprotocol/sdk": "^1.27.1",
152
- "@mollie/api-client": "^4.4.0",
153
- "@sentry/node": "^8.55.1",
154
- "@supabase/supabase-js": "2.93.3",
103
+ "@modelcontextprotocol/sdk": "^1.29.0",
104
+ "@mollie/api-client": "^4.5.0",
105
+ "@sentry/node": "^10.48.0",
106
+ "@soulbatical/tetra-contracts": "^0.1.0",
107
+ "@soulbatical/tetra-supabase": "^0.2.0",
108
+ "@supabase/supabase-js": "^2.103.2",
155
109
  "@tanstack/react-table": "^8.21.3",
156
110
  "@types/express": "^5.0.0",
157
- "@types/node": "^20.11.0",
111
+ "@types/node": "^25.6.0",
158
112
  "@types/node-cron": "^3.0.11",
159
- "@types/nodemailer": "^7.0.11",
160
113
  "@types/react": "^19.2.14",
161
114
  "express": "^5.2.1",
162
- "pino": "^9.12.0",
163
- "react": "^19.2.4",
164
- "stripe": "^17.7.0",
165
- "typescript": "^5.7.3",
166
- "vitest": "^4.1.0"
115
+ "pino": "^10.3.1",
116
+ "react": "^19.2.5",
117
+ "stripe": "^22.0.1",
118
+ "typescript": "^6.0.2",
119
+ "vitest": "^4.1.4"
167
120
  },
168
121
  "keywords": [
169
122
  "tetra",
@@ -174,6 +127,9 @@
174
127
  "multi-tenant",
175
128
  "rls"
176
129
  ],
130
+ "publishConfig": {
131
+ "access": "public"
132
+ },
177
133
  "author": "Albert Barth",
178
134
  "license": "MIT"
179
135
  }
@@ -1,11 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/affiliate
3
- *
4
- * Affiliate module (attribution, tracking, commissions).
5
- */
6
- export { AffiliateAttributionService } from './shared/affiliate/AffiliateAttributionService.js';
7
- export { AffiliateClickService } from './shared/affiliate/AffiliateClickService.js';
8
- export { defaultAffiliateFeatureConfig } from './shared/affiliate/affiliateFeatureConfig.js';
9
- export { addAffiliateAdminRoutes, addAffiliateUserRoutes, addAffiliatePublicRoutes } from './shared/affiliate/routes.js';
10
- export type { AffiliateConfig, AffiliateTierConfig, AffiliateAttribution, AffiliateOrder, Affiliate, AffiliateCommission, AffiliateClick, AffiliatePayment, AffiliateTierHistory, AffiliateFilters, AffiliateDashboard, AffiliateDashboardStats, AffiliateDashboardCommission, AffiliateTierProgress } from './shared/affiliate/types.js';
11
- //# sourceMappingURL=affiliate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"affiliate.d.ts","sourceRoot":"","sources":["../src/affiliate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACzH,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/affiliate.js DELETED
@@ -1,10 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/affiliate
3
- *
4
- * Affiliate module (attribution, tracking, commissions).
5
- */
6
- export { AffiliateAttributionService } from './shared/affiliate/AffiliateAttributionService.js';
7
- export { AffiliateClickService } from './shared/affiliate/AffiliateClickService.js';
8
- export { defaultAffiliateFeatureConfig } from './shared/affiliate/affiliateFeatureConfig.js';
9
- export { addAffiliateAdminRoutes, addAffiliateUserRoutes, addAffiliatePublicRoutes } from './shared/affiliate/routes.js';
10
- //# sourceMappingURL=affiliate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"affiliate.js","sourceRoot":"","sources":["../src/affiliate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC"}
package/dist/billing.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/billing
3
- *
4
- * Billing module (Stripe + Mollie). Requires stripe and/or @mollie/api-client.
5
- */
6
- export { BillingService, addBillingRoutes, addBillingWebhookRoutes } from './shared/billing/index.js';
7
- export type { PlanConfig, BillingConfig, BillingCycle, BillingProvider, SubscriptionStatus, SubscriptionRecord, BillingStatusResponse, BillingRouteOptions } from './shared/billing/index.js';
8
- //# sourceMappingURL=billing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACtG,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/billing.js DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/billing
3
- *
4
- * Billing module (Stripe + Mollie). Requires stripe and/or @mollie/api-client.
5
- */
6
- export { BillingService, addBillingRoutes, addBillingWebhookRoutes } from './shared/billing/index.js';
7
- //# sourceMappingURL=billing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/email.d.ts DELETED
@@ -1,9 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/email
3
- *
4
- * Email module (Mailgun, SMTP, Gmail). Requires nodemailer (included as dep).
5
- */
6
- export { EmailService, sendMailgunEmail, sendSmtpEmail, escapeHtml, addEmailAdminRoutes, addMailgunWebhookRoutes } from './shared/email/index.js';
7
- export { GmailClient, getGmailClient, listGmailAccounts, clearGmailClientCache, disconnectGmail, getGmailAuthUrl, startGmailOAuth, getGmailAuthServerStatus, resetGmailAuthServerState, exchangeGmailCode, addGmailOAuthRoutes } from './shared/email/index.js';
8
- export type { EmailAttachment, EmailConfig, SendEmailOpts, EmailTemplate, EmailLogEntry, MailgunResponse, SmtpResponse, EmailSendResponse, GmailOAuthConfig, GmailAuthServerStatus, GmailOAuthRoutesConfig, GmailSendResult, GmailSearchResult, GmailMessage, GmailAttachmentInfo, GmailProfile } from './shared/email/index.js';
9
- //# sourceMappingURL=email.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../src/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAChQ,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/email.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/email
3
- *
4
- * Email module (Mailgun, SMTP, Gmail). Requires nodemailer (included as dep).
5
- */
6
- export { EmailService, sendMailgunEmail, sendSmtpEmail, escapeHtml, addEmailAdminRoutes, addMailgunWebhookRoutes } from './shared/email/index.js';
7
- export { GmailClient, getGmailClient, listGmailAccounts, clearGmailClientCache, disconnectGmail, getGmailAuthUrl, startGmailOAuth, getGmailAuthServerStatus, resetGmailAuthServerState, exchangeGmailCode, addGmailOAuthRoutes } from './shared/email/index.js';
8
- //# sourceMappingURL=email.js.map
package/dist/email.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../src/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,57 +0,0 @@
1
- -- ============================================================================
2
- -- Tetra Core: exec_sql — Secure SQL Execution for RLS Checker
3
- -- ============================================================================
4
- -- This function allows the RLS checker to run audit queries against the DB.
5
- --
6
- -- SECURITY MODEL:
7
- -- - SECURITY INVOKER (NOT definer) — runs as the calling role
8
- -- - Only service_role should call this (via backend service client)
9
- -- - anon and authenticated are explicitly REVOKED from EXECUTE
10
- -- - search_path set to '' to prevent search_path injection
11
- -- - Returns JSONB array so it works with any query shape
12
- --
13
- -- WHY THIS IS SAFE:
14
- -- 1. service_role already bypasses RLS — this adds no new capability
15
- -- 2. anon/authenticated CANNOT call it (REVOKE + no GRANT)
16
- -- 3. Even if somehow called by authenticated, it runs as THAT role
17
- -- (SECURITY INVOKER), so RLS still applies to their queries
18
- -- 4. The function is just a thin wrapper around EXECUTE — it doesn't
19
- -- escalate privileges
20
- --
21
- -- PREREQUISITE: Must be deployed BEFORE runRLSCheck() can work.
22
- -- ============================================================================
23
-
24
- -- Drop old versions if they exist
25
- DROP FUNCTION IF EXISTS public.exec_sql(text);
26
- DROP FUNCTION IF EXISTS public.execute_sql(text);
27
-
28
- -- Create the function
29
- CREATE OR REPLACE FUNCTION public.exec_sql(query text)
30
- RETURNS jsonb
31
- LANGUAGE plpgsql
32
- VOLATILE
33
- SECURITY INVOKER
34
- SET search_path = ''
35
- AS $$
36
- DECLARE
37
- result jsonb;
38
- BEGIN
39
- EXECUTE 'SELECT COALESCE(jsonb_agg(row_to_json(t)), ''[]''::jsonb) FROM (' || query || ') t'
40
- INTO result;
41
- RETURN result;
42
- END;
43
- $$;
44
-
45
- -- CRITICAL: Revoke from all public-facing roles
46
- REVOKE ALL ON FUNCTION public.exec_sql(text) FROM PUBLIC;
47
- REVOKE ALL ON FUNCTION public.exec_sql(text) FROM anon;
48
- REVOKE ALL ON FUNCTION public.exec_sql(text) FROM authenticated;
49
-
50
- -- Only service_role (backend) and postgres (migrations) can use it
51
- GRANT EXECUTE ON FUNCTION public.exec_sql(text) TO service_role;
52
- GRANT EXECUTE ON FUNCTION public.exec_sql(text) TO postgres;
53
-
54
- -- Add a comment explaining the security model
55
- COMMENT ON FUNCTION public.exec_sql(text) IS
56
- 'Tetra RLS Checker: executes audit SQL. SECURITY INVOKER + only service_role can call. '
57
- 'anon/authenticated are explicitly revoked. Does NOT escalate privileges.';
@@ -1,15 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/generators
3
- *
4
- * RLS + RPC generators (SQL generation from config). No heavy external deps.
5
- */
6
- export { generateRLS, generateRLSBatch } from './generators/rls-generator.js';
7
- export type { RLSConfig, RLSTableType, RLSGeneratorResult } from './generators/rls-generator.js';
8
- export { getAuditChecks, generateAuditSQL } from './generators/rls-auditor.js';
9
- export type { AuditCheck } from './generators/rls-auditor.js';
10
- export { runRLSCheck, runRLSCheckDebug } from './generators/rls-checker.js';
11
- export type { RLSReport, RLSCheckResult, RLSViolation, RLSCategorySummary } from './generators/rls-checker.js';
12
- export { generateExecSQL, checkExecSQLExists } from './generators/rls-exec-sql.js';
13
- export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig, generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations, generateTimestamp, getTableAlias, escapeIdentifier } from './generators/rpc/index.js';
14
- export type { GeneratedSQL, FilterDefinition, RPCGeneratorOptions, DetailRPCGeneratorOptions, ValidationResult as RPCValidationResult, ValidationError as RPCValidationError, AccessLevel, CreatorVisibilityConfig as RPCCreatorVisibilityConfig } from './generators/rpc/index.js';
15
- //# sourceMappingURL=generators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../src/generators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,IAAI,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5O,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,eAAe,IAAI,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,IAAI,0BAA0B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/generators
3
- *
4
- * RLS + RPC generators (SQL generation from config). No heavy external deps.
5
- */
6
- export { generateRLS, generateRLSBatch } from './generators/rls-generator.js';
7
- export { getAuditChecks, generateAuditSQL } from './generators/rls-auditor.js';
8
- export { runRLSCheck, runRLSCheckDebug } from './generators/rls-checker.js';
9
- export { generateExecSQL, checkExecSQLExists } from './generators/rls-exec-sql.js';
10
- // RPC Generator
11
- export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig, generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations, generateTimestamp, getTableAlias, escapeIdentifier } from './generators/rpc/index.js';
12
- //# sourceMappingURL=generators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../src/generators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,IAAI,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/mcp.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/mcp
3
- *
4
- * MCP Online module. Requires @modelcontextprotocol/sdk.
5
- */
6
- export { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes, getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken, mcpDB, mcpScopedDB } from './shared/mcp/index.js';
7
- export type { McpRoutesConfig, McpAuthRoutesConfig, McpToolDefinition, McpToolResult, McpToolHandler, TenantContext, TenantContext as McpTenantContext, McpDBResult, McpDBLocalResult, McpDBOptions, GenerateMcpApiTokenOptions } from './shared/mcp/index.js';
8
- //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxO,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,IAAI,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/mcp.js DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/mcp
3
- *
4
- * MCP Online module. Requires @modelcontextprotocol/sdk.
5
- */
6
- export { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes, getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken, mcpDB, mcpScopedDB } from './shared/mcp/index.js';
7
- //# sourceMappingURL=mcp.js.map
package/dist/mcp.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/planner.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/planner
3
- *
4
- * Planner module (scheduling, availability, Google Calendar).
5
- */
6
- export { PlannerService, GoogleCalendarService, addPlannerRoutes, addPlannerPublicRoutes, addPlannerCalendarRoutes, computeAvailableSlots, timeToMinutes, minutesToTime } from './shared/planner/index.js';
7
- export type { PlannerConfig, PlannerCalendarConfig, PlannerRouteOptions, PlannerCallbackContext, AvailabilitySlotRecord, AvailabilitySlotInput, AppointmentRecord, AppointmentInput, SchedulerSettingsRecord, VacationRecord, CalendarTokenRecord, PublicBookingInput, PublicBookingVisitor, TimeSlot, DayAvailability, TeamAvailability, PublicSchedulerData } from './shared/planner/index.js';
8
- //# sourceMappingURL=planner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3M,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/planner.js DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * @soulbatical/tetra-core/planner
3
- *
4
- * Planner module (scheduling, availability, Google Calendar).
5
- */
6
- export { PlannerService, GoogleCalendarService, addPlannerRoutes, addPlannerPublicRoutes, addPlannerCalendarRoutes, computeAvailableSlots, timeToMinutes, minutesToTime } from './shared/planner/index.js';
7
- //# sourceMappingURL=planner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * AffiliateAttributionService
3
- *
4
- * Generic affiliate attribution and commission engine.
5
- * Internal referral only (voucher > URL > cookie).
6
- * Config-driven tier upgrades.
7
- *
8
- * @module @soulbatical/tetra-core/affiliate
9
- */
10
- import type { SupabaseClient } from '@supabase/supabase-js';
11
- import type { Request } from 'express';
12
- import type { AffiliateAttribution, AffiliateConfig, AffiliateOrder } from './types.js';
13
- export declare class AffiliateAttributionService {
14
- private supabase;
15
- private organizationId?;
16
- private config;
17
- constructor(supabase: SupabaseClient, config?: Partial<AffiliateConfig>, organizationId?: string);
18
- /**
19
- * Determine affiliate attribution for an order.
20
- * Priority: Voucher > URL (?ref=) > Cookie
21
- */
22
- determineAttribution(req: Request, voucherCode?: string): Promise<AffiliateAttribution | null>;
23
- /**
24
- * Create a commission record for an affiliate sale.
25
- * Updates affiliate stats and checks for tier upgrade.
26
- */
27
- createCommission(order: AffiliateOrder, attribution: AffiliateAttribution): Promise<void>;
28
- /**
29
- * Generate a referral code for a new affiliate.
30
- * Uses custom generator from config or default format.
31
- */
32
- generateReferralCode(contactName: string): string;
33
- private checkVoucherAttribution;
34
- private checkUrlParameter;
35
- private checkCookie;
36
- /**
37
- * Resolve an affiliate from referral code or ID.
38
- */
39
- resolveAffiliate(reference: string, affiliateId: string | null): Promise<any>;
40
- private updateAffiliateStats;
41
- /**
42
- * Check if affiliate qualifies for tier upgrade (config-driven).
43
- */
44
- checkTierUpgrade(affiliateId: string, totalSales: number): Promise<void>;
45
- private upgradeAffiliateTier;
46
- }
47
- //# sourceMappingURL=AffiliateAttributionService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AffiliateAttributionService.d.ts","sourceRoot":"","sources":["../../../src/shared/affiliate/AffiliateAttributionService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA0BxF,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,MAAM,CAAkB;gBAG9B,QAAQ,EAAE,cAAc,EACxB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,cAAc,CAAC,EAAE,MAAM;IASzB;;;OAGG;IACG,oBAAoB,CACxB,GAAG,EAAE,OAAO,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAgCvC;;;OAGG;IACG,gBAAgB,CACpB,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,oBAAoB,GAChC,OAAO,CAAC,IAAI,CAAC;IA6DhB;;;OAGG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;YAOnC,uBAAuB;IAwBrC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CAAC,GAAG,CAAC;YAkCD,oBAAoB;IAgBlC;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA8ChE,oBAAoB;CAkDnC"}