@c15t/backend 0.0.1-rc.10

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 (521) hide show
  1. package/.turbo/turbo-build.log +11 -0
  2. package/.turbo/turbo-check-types.log +5 -0
  3. package/.turbo/turbo-fmt.log +7 -0
  4. package/.turbo/turbo-lint.log +6 -0
  5. package/.turbo/turbo-test.log +26 -0
  6. package/README-next.md +223 -0
  7. package/README.md +164 -0
  8. package/dist/api/call.d.ts +176 -0
  9. package/dist/api/call.d.ts.map +1 -0
  10. package/dist/api/index.d.ts +935 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/middlewares/index.d.ts +39 -0
  13. package/dist/api/middlewares/index.d.ts.map +1 -0
  14. package/dist/api/middlewares/origin-check.d.ts +82 -0
  15. package/dist/api/middlewares/origin-check.d.ts.map +1 -0
  16. package/dist/api/middlewares/validate-context.d.ts +38 -0
  17. package/dist/api/middlewares/validate-context.d.ts.map +1 -0
  18. package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
  19. package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
  20. package/dist/api/routes/__tests__/status.test.d.ts +2 -0
  21. package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
  22. package/dist/api/routes/error.d.ts +57 -0
  23. package/dist/api/routes/error.d.ts.map +1 -0
  24. package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
  25. package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
  26. package/dist/api/routes/get-consent-history.d.ts +133 -0
  27. package/dist/api/routes/get-consent-history.d.ts.map +1 -0
  28. package/dist/api/routes/get-consent-policy.d.ts +164 -0
  29. package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
  30. package/dist/api/routes/get-consent.d.ts +148 -0
  31. package/dist/api/routes/get-consent.d.ts.map +1 -0
  32. package/dist/api/routes/index.d.ts +339 -0
  33. package/dist/api/routes/index.d.ts.map +1 -0
  34. package/dist/api/routes/ok.d.ts +87 -0
  35. package/dist/api/routes/ok.d.ts.map +1 -0
  36. package/dist/api/routes/set-consent.d.ts +245 -0
  37. package/dist/api/routes/set-consent.d.ts.map +1 -0
  38. package/dist/api/routes/show-consent-banner.d.ts +127 -0
  39. package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
  40. package/dist/api/routes/status.d.ts +61 -0
  41. package/dist/api/routes/status.d.ts.map +1 -0
  42. package/dist/api/routes/verify-consent.d.ts +179 -0
  43. package/dist/api/routes/verify-consent.d.ts.map +1 -0
  44. package/dist/api/routes/withdraw-consent.d.ts +194 -0
  45. package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
  46. package/dist/api/to-endpoints.d.ts +35 -0
  47. package/dist/api/to-endpoints.d.ts.map +1 -0
  48. package/dist/client/index.cjs +139 -0
  49. package/dist/client/index.d.ts +203 -0
  50. package/dist/client/index.d.ts.map +1 -0
  51. package/dist/client/index.js +106 -0
  52. package/dist/client/types.d.ts +431 -0
  53. package/dist/client/types.d.ts.map +1 -0
  54. package/dist/core.d.ts +124 -0
  55. package/dist/core.d.ts.map +1 -0
  56. package/dist/core.test.d.ts +2 -0
  57. package/dist/core.test.d.ts.map +1 -0
  58. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
  59. package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
  60. package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
  61. package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
  62. package/dist/db/adapters/drizzle.cjs +1531 -0
  63. package/dist/db/adapters/drizzle.js +1489 -0
  64. package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
  65. package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
  66. package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
  67. package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
  68. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
  69. package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
  70. package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
  71. package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
  72. package/dist/db/adapters/kysely.cjs +1551 -0
  73. package/dist/db/adapters/kysely.js +1508 -0
  74. package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
  75. package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
  76. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
  77. package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
  78. package/dist/db/adapters/memory.cjs +1391 -0
  79. package/dist/db/adapters/memory.js +1349 -0
  80. package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
  81. package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
  82. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
  83. package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
  84. package/dist/db/adapters/prisma.cjs +1503 -0
  85. package/dist/db/adapters/prisma.js +1461 -0
  86. package/dist/db/adapters/types.d.ts +154 -0
  87. package/dist/db/adapters/types.d.ts.map +1 -0
  88. package/dist/db/adapters/utils.d.ts +36 -0
  89. package/dist/db/adapters/utils.d.ts.map +1 -0
  90. package/dist/db/core/fields/field-factory.d.ts +383 -0
  91. package/dist/db/core/fields/field-factory.d.ts.map +1 -0
  92. package/dist/db/core/fields/field-inference.d.ts +218 -0
  93. package/dist/db/core/fields/field-inference.d.ts.map +1 -0
  94. package/dist/db/core/fields/field-options-integration.d.ts +90 -0
  95. package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
  96. package/dist/db/core/fields/field-types.d.ts +182 -0
  97. package/dist/db/core/fields/field-types.d.ts.map +1 -0
  98. package/dist/db/core/fields/id-generator.d.ts +19 -0
  99. package/dist/db/core/fields/id-generator.d.ts.map +1 -0
  100. package/dist/db/core/fields/index.d.ts +8 -0
  101. package/dist/db/core/fields/index.d.ts.map +1 -0
  102. package/dist/db/core/fields/superjson-utils.d.ts +34 -0
  103. package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
  104. package/dist/db/core/fields/zod-fields.d.ts +1011 -0
  105. package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
  106. package/dist/db/core/get-schema.d.ts +36 -0
  107. package/dist/db/core/get-schema.d.ts.map +1 -0
  108. package/dist/db/core/types.d.ts +41 -0
  109. package/dist/db/core/types.d.ts.map +1 -0
  110. package/dist/db/create-registry.d.ts +760 -0
  111. package/dist/db/create-registry.d.ts.map +1 -0
  112. package/dist/db/hooks/create-hooks.d.ts +32 -0
  113. package/dist/db/hooks/create-hooks.d.ts.map +1 -0
  114. package/dist/db/hooks/index.d.ts +40 -0
  115. package/dist/db/hooks/index.d.ts.map +1 -0
  116. package/dist/db/hooks/types.d.ts +133 -0
  117. package/dist/db/hooks/types.d.ts.map +1 -0
  118. package/dist/db/hooks/update-hooks.d.ts +33 -0
  119. package/dist/db/hooks/update-hooks.d.ts.map +1 -0
  120. package/dist/db/hooks/update-many-hooks.d.ts +55 -0
  121. package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
  122. package/dist/db/hooks/utils.d.ts +62 -0
  123. package/dist/db/hooks/utils.d.ts.map +1 -0
  124. package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
  125. package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
  126. package/dist/db/index.cjs +2458 -0
  127. package/dist/db/index.d.ts +11 -0
  128. package/dist/db/index.d.ts.map +1 -0
  129. package/dist/db/index.js +2404 -0
  130. package/dist/db/migration/get-migration.d.ts +32 -0
  131. package/dist/db/migration/get-migration.d.ts.map +1 -0
  132. package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
  133. package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
  134. package/dist/db/migration/get-schema/index.d.ts +21 -0
  135. package/dist/db/migration/get-schema/index.d.ts.map +1 -0
  136. package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
  137. package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
  138. package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
  139. package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
  140. package/dist/db/migration/get-schema/types.d.ts +17 -0
  141. package/dist/db/migration/get-schema/types.d.ts.map +1 -0
  142. package/dist/db/migration/index.cjs +1613 -0
  143. package/dist/db/migration/index.d.ts +14 -0
  144. package/dist/db/migration/index.d.ts.map +1 -0
  145. package/dist/db/migration/index.js +1571 -0
  146. package/dist/db/migration/migration-builders.d.ts +28 -0
  147. package/dist/db/migration/migration-builders.d.ts.map +1 -0
  148. package/dist/db/migration/migration-execution.d.ts +12 -0
  149. package/dist/db/migration/migration-execution.d.ts.map +1 -0
  150. package/dist/db/migration/schema-comparison.d.ts +54 -0
  151. package/dist/db/migration/schema-comparison.d.ts.map +1 -0
  152. package/dist/db/migration/type-mapping.d.ts +86 -0
  153. package/dist/db/migration/type-mapping.d.ts.map +1 -0
  154. package/dist/db/migration/types.d.ts +37 -0
  155. package/dist/db/migration/types.d.ts.map +1 -0
  156. package/dist/db/schema/audit-log/index.d.ts +4 -0
  157. package/dist/db/schema/audit-log/index.d.ts.map +1 -0
  158. package/dist/db/schema/audit-log/registry.d.ts +128 -0
  159. package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
  160. package/dist/db/schema/audit-log/schema.d.ts +67 -0
  161. package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
  162. package/dist/db/schema/audit-log/table.d.ts +175 -0
  163. package/dist/db/schema/audit-log/table.d.ts.map +1 -0
  164. package/dist/db/schema/audit-log/types.d.ts +29 -0
  165. package/dist/db/schema/audit-log/types.d.ts.map +1 -0
  166. package/dist/db/schema/consent/index.d.ts +4 -0
  167. package/dist/db/schema/consent/index.d.ts.map +1 -0
  168. package/dist/db/schema/consent/registry.d.ts +318 -0
  169. package/dist/db/schema/consent/registry.d.ts.map +1 -0
  170. package/dist/db/schema/consent/schema.d.ts +135 -0
  171. package/dist/db/schema/consent/schema.d.ts.map +1 -0
  172. package/dist/db/schema/consent/table.d.ts +245 -0
  173. package/dist/db/schema/consent/table.d.ts.map +1 -0
  174. package/dist/db/schema/consent/types.d.ts +37 -0
  175. package/dist/db/schema/consent/types.d.ts.map +1 -0
  176. package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
  177. package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
  178. package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
  179. package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
  180. package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
  181. package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
  182. package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
  183. package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
  184. package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
  185. package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
  186. package/dist/db/schema/consent-policy/index.d.ts +4 -0
  187. package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
  188. package/dist/db/schema/consent-policy/registry.d.ts +186 -0
  189. package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
  190. package/dist/db/schema/consent-policy/schema.d.ts +68 -0
  191. package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
  192. package/dist/db/schema/consent-policy/table.d.ts +147 -0
  193. package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
  194. package/dist/db/schema/consent-policy/types.d.ts +28 -0
  195. package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
  196. package/dist/db/schema/consent-purpose/index.d.ts +4 -0
  197. package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
  198. package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
  199. package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
  200. package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
  201. package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
  202. package/dist/db/schema/consent-purpose/table.d.ts +161 -0
  203. package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
  204. package/dist/db/schema/consent-purpose/types.d.ts +16 -0
  205. package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
  206. package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
  207. package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
  208. package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
  209. package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
  210. package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
  211. package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
  212. package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
  213. package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
  214. package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
  215. package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
  216. package/dist/db/schema/consent-record/index.d.ts +4 -0
  217. package/dist/db/schema/consent-record/index.d.ts.map +1 -0
  218. package/dist/db/schema/consent-record/registry.d.ts +119 -0
  219. package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
  220. package/dist/db/schema/consent-record/schema.d.ts +57 -0
  221. package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
  222. package/dist/db/schema/consent-record/table.d.ts +123 -0
  223. package/dist/db/schema/consent-record/table.d.ts.map +1 -0
  224. package/dist/db/schema/consent-record/types.d.ts +21 -0
  225. package/dist/db/schema/consent-record/types.d.ts.map +1 -0
  226. package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
  227. package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
  228. package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
  229. package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
  230. package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
  231. package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
  232. package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
  233. package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
  234. package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
  235. package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
  236. package/dist/db/schema/definition.d.ts +1100 -0
  237. package/dist/db/schema/definition.d.ts.map +1 -0
  238. package/dist/db/schema/domain/index.d.ts +4 -0
  239. package/dist/db/schema/domain/index.d.ts.map +1 -0
  240. package/dist/db/schema/domain/registry.d.ts +169 -0
  241. package/dist/db/schema/domain/registry.d.ts.map +1 -0
  242. package/dist/db/schema/domain/schema.d.ts +60 -0
  243. package/dist/db/schema/domain/schema.d.ts.map +1 -0
  244. package/dist/db/schema/domain/table.d.ts +140 -0
  245. package/dist/db/schema/domain/table.d.ts.map +1 -0
  246. package/dist/db/schema/domain/types.d.ts +27 -0
  247. package/dist/db/schema/domain/types.d.ts.map +1 -0
  248. package/dist/db/schema/geo-location/index.d.ts +4 -0
  249. package/dist/db/schema/geo-location/index.d.ts.map +1 -0
  250. package/dist/db/schema/geo-location/registry.d.ts +114 -0
  251. package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
  252. package/dist/db/schema/geo-location/schema.d.ts +58 -0
  253. package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
  254. package/dist/db/schema/geo-location/table.d.ts +132 -0
  255. package/dist/db/schema/geo-location/table.d.ts.map +1 -0
  256. package/dist/db/schema/geo-location/types.d.ts +17 -0
  257. package/dist/db/schema/geo-location/types.d.ts.map +1 -0
  258. package/dist/db/schema/index.d.ts +85 -0
  259. package/dist/db/schema/index.d.ts.map +1 -0
  260. package/dist/db/schema/parser.d.ts +183 -0
  261. package/dist/db/schema/parser.d.ts.map +1 -0
  262. package/dist/db/schema/schemas.d.ts +383 -0
  263. package/dist/db/schema/schemas.d.ts.map +1 -0
  264. package/dist/db/schema/subject/index.d.ts +4 -0
  265. package/dist/db/schema/subject/index.d.ts.map +1 -0
  266. package/dist/db/schema/subject/registry.d.ts +141 -0
  267. package/dist/db/schema/subject/registry.d.ts.map +1 -0
  268. package/dist/db/schema/subject/schema.d.ts +56 -0
  269. package/dist/db/schema/subject/schema.d.ts.map +1 -0
  270. package/dist/db/schema/subject/table.d.ts +136 -0
  271. package/dist/db/schema/subject/table.d.ts.map +1 -0
  272. package/dist/db/schema/subject/types.d.ts +22 -0
  273. package/dist/db/schema/subject/types.d.ts.map +1 -0
  274. package/dist/db/schema/types.d.ts +136 -0
  275. package/dist/db/schema/types.d.ts.map +1 -0
  276. package/dist/db/utils/adapter-factory.d.ts +21 -0
  277. package/dist/db/utils/adapter-factory.d.ts.map +1 -0
  278. package/dist/db/utils/index.d.ts +10 -0
  279. package/dist/db/utils/index.d.ts.map +1 -0
  280. package/dist/db/utils.d.ts +4 -0
  281. package/dist/db/utils.d.ts.map +1 -0
  282. package/dist/error/codes.cjs +68 -0
  283. package/dist/error/codes.d.ts +175 -0
  284. package/dist/error/codes.d.ts.map +1 -0
  285. package/dist/error/codes.js +35 -0
  286. package/dist/error/error.d.ts +79 -0
  287. package/dist/error/error.d.ts.map +1 -0
  288. package/dist/error/index.cjs +172 -0
  289. package/dist/error/index.d.ts +9 -0
  290. package/dist/error/index.d.ts.map +1 -0
  291. package/dist/error/index.js +129 -0
  292. package/dist/error/logging.d.ts +25 -0
  293. package/dist/error/logging.d.ts.map +1 -0
  294. package/dist/error/pipeline.d.ts +19 -0
  295. package/dist/error/pipeline.d.ts.map +1 -0
  296. package/dist/error/recovery.d.ts +22 -0
  297. package/dist/error/recovery.d.ts.map +1 -0
  298. package/dist/error/results.d.ts +56 -0
  299. package/dist/error/results.d.ts.map +1 -0
  300. package/dist/index.cjs +4777 -0
  301. package/dist/index.d.ts +46 -0
  302. package/dist/index.d.ts.map +1 -0
  303. package/dist/index.js +4708 -0
  304. package/dist/init.d.ts +52 -0
  305. package/dist/init.d.ts.map +1 -0
  306. package/dist/init.test.d.ts +2 -0
  307. package/dist/init.test.d.ts.map +1 -0
  308. package/dist/integrations/index.cjs +281 -0
  309. package/dist/integrations/index.d.ts +7 -0
  310. package/dist/integrations/index.d.ts.map +1 -0
  311. package/dist/integrations/index.js +248 -0
  312. package/dist/integrations/next.cjs +131 -0
  313. package/dist/integrations/next.d.ts +29 -0
  314. package/dist/integrations/next.d.ts.map +1 -0
  315. package/dist/integrations/next.js +99 -0
  316. package/dist/integrations/react.cjs +182 -0
  317. package/dist/integrations/react.d.ts +257 -0
  318. package/dist/integrations/react.d.ts.map +1 -0
  319. package/dist/integrations/react.js +150 -0
  320. package/dist/plugins/geo/index.d.ts +2 -0
  321. package/dist/plugins/geo/index.d.ts.map +1 -0
  322. package/dist/test/utils.d.ts +65 -0
  323. package/dist/test/utils.d.ts.map +1 -0
  324. package/dist/types/api.d.ts +89 -0
  325. package/dist/types/api.d.ts.map +1 -0
  326. package/dist/types/context.d.ts +205 -0
  327. package/dist/types/context.d.ts.map +1 -0
  328. package/dist/types/helper.d.ts +78 -0
  329. package/dist/types/helper.d.ts.map +1 -0
  330. package/dist/types/index.cjs +19 -0
  331. package/dist/types/index.d.ts +6 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +0 -0
  334. package/dist/types/options.d.ts +172 -0
  335. package/dist/types/options.d.ts.map +1 -0
  336. package/dist/types/plugins.d.ts +442 -0
  337. package/dist/types/plugins.d.ts.map +1 -0
  338. package/dist/utils/env.d.ts +77 -0
  339. package/dist/utils/env.d.ts.map +1 -0
  340. package/dist/utils/hide-metadata.d.ts +22 -0
  341. package/dist/utils/hide-metadata.d.ts.map +1 -0
  342. package/dist/utils/index.cjs +268 -0
  343. package/dist/utils/index.d.ts +18 -0
  344. package/dist/utils/index.d.ts.map +1 -0
  345. package/dist/utils/index.js +210 -0
  346. package/dist/utils/ip.d.ts +10 -0
  347. package/dist/utils/ip.d.ts.map +1 -0
  348. package/dist/utils/json.d.ts +14 -0
  349. package/dist/utils/json.d.ts.map +1 -0
  350. package/dist/utils/logger.d.ts +108 -0
  351. package/dist/utils/logger.d.ts.map +1 -0
  352. package/dist/utils/url.d.ts +87 -0
  353. package/dist/utils/url.d.ts.map +1 -0
  354. package/dist/utils/wildcard.d.ts +46 -0
  355. package/dist/utils/wildcard.d.ts.map +1 -0
  356. package/knip.json +37 -0
  357. package/package.json +146 -0
  358. package/rslib.config.ts +104 -0
  359. package/src/api/call.ts +177 -0
  360. package/src/api/index.ts +303 -0
  361. package/src/api/middlewares/index.ts +38 -0
  362. package/src/api/middlewares/origin-check.ts +260 -0
  363. package/src/api/middlewares/validate-context.ts +175 -0
  364. package/src/api/routes/__tests__/consent.test.ts +270 -0
  365. package/src/api/routes/__tests__/status.test.ts +36 -0
  366. package/src/api/routes/error.ts +130 -0
  367. package/src/api/routes/generate-consent-receipt.ts +244 -0
  368. package/src/api/routes/get-consent-history.ts +128 -0
  369. package/src/api/routes/get-consent-policy.ts +327 -0
  370. package/src/api/routes/get-consent.ts +230 -0
  371. package/src/api/routes/index.ts +12 -0
  372. package/src/api/routes/ok.ts +45 -0
  373. package/src/api/routes/set-consent.ts +328 -0
  374. package/src/api/routes/show-consent-banner.ts +149 -0
  375. package/src/api/routes/status.ts +62 -0
  376. package/src/api/routes/verify-consent.ts +272 -0
  377. package/src/api/routes/withdraw-consent.ts +293 -0
  378. package/src/api/to-endpoints.ts +371 -0
  379. package/src/client/index.ts +471 -0
  380. package/src/client/types.ts +458 -0
  381. package/src/core.test.ts +303 -0
  382. package/src/core.ts +267 -0
  383. package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
  384. package/src/db/adapters/drizzle-adapter/index.ts +1 -0
  385. package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
  386. package/src/db/adapters/kysely-adapter/index.ts +3 -0
  387. package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
  388. package/src/db/adapters/kysely-adapter/types.ts +307 -0
  389. package/src/db/adapters/memory-adapter/index.ts +1 -0
  390. package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
  391. package/src/db/adapters/prisma-adapter/index.ts +1 -0
  392. package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
  393. package/src/db/adapters/types.ts +203 -0
  394. package/src/db/adapters/utils.ts +51 -0
  395. package/src/db/core/fields/field-factory.ts +804 -0
  396. package/src/db/core/fields/field-inference.ts +298 -0
  397. package/src/db/core/fields/field-options-integration.ts +135 -0
  398. package/src/db/core/fields/field-types.ts +233 -0
  399. package/src/db/core/fields/id-generator.ts +57 -0
  400. package/src/db/core/fields/index.ts +56 -0
  401. package/src/db/core/fields/superjson-utils.ts +155 -0
  402. package/src/db/core/fields/zod-fields.ts +269 -0
  403. package/src/db/core/get-schema.ts +102 -0
  404. package/src/db/core/types.ts +52 -0
  405. package/src/db/create-registry.ts +31 -0
  406. package/src/db/hooks/create-hooks.ts +88 -0
  407. package/src/db/hooks/index.ts +39 -0
  408. package/src/db/hooks/types.ts +164 -0
  409. package/src/db/hooks/update-hooks.ts +91 -0
  410. package/src/db/hooks/update-many-hooks.ts +176 -0
  411. package/src/db/hooks/utils.ts +151 -0
  412. package/src/db/hooks/with-hooks-factory.ts +68 -0
  413. package/src/db/index.ts +32 -0
  414. package/src/db/migration/get-migration.ts +89 -0
  415. package/src/db/migration/get-schema/get-schema.ts +44 -0
  416. package/src/db/migration/get-schema/index.ts +20 -0
  417. package/src/db/migration/get-schema/process-fields.ts +66 -0
  418. package/src/db/migration/get-schema/process-tables.ts +68 -0
  419. package/src/db/migration/get-schema/types.ts +18 -0
  420. package/src/db/migration/index.ts +18 -0
  421. package/src/db/migration/migration-builders.ts +170 -0
  422. package/src/db/migration/migration-execution.ts +79 -0
  423. package/src/db/migration/schema-comparison.ts +216 -0
  424. package/src/db/migration/type-mapping.ts +255 -0
  425. package/src/db/migration/types.ts +46 -0
  426. package/src/db/schema/audit-log/index.ts +3 -0
  427. package/src/db/schema/audit-log/registry.ts +228 -0
  428. package/src/db/schema/audit-log/schema.ts +46 -0
  429. package/src/db/schema/audit-log/table.ts +185 -0
  430. package/src/db/schema/audit-log/types.ts +29 -0
  431. package/src/db/schema/consent/index.ts +3 -0
  432. package/src/db/schema/consent/registry.ts +381 -0
  433. package/src/db/schema/consent/schema.ts +65 -0
  434. package/src/db/schema/consent/table.ts +220 -0
  435. package/src/db/schema/consent/types.ts +39 -0
  436. package/src/db/schema/consent-geo-location/index.ts +3 -0
  437. package/src/db/schema/consent-geo-location/registry.ts +124 -0
  438. package/src/db/schema/consent-geo-location/schema.ts +51 -0
  439. package/src/db/schema/consent-geo-location/table.ts +169 -0
  440. package/src/db/schema/consent-geo-location/types.ts +21 -0
  441. package/src/db/schema/consent-policy/index.ts +3 -0
  442. package/src/db/schema/consent-policy/registry.ts +313 -0
  443. package/src/db/schema/consent-policy/schema.ts +47 -0
  444. package/src/db/schema/consent-policy/table.ts +141 -0
  445. package/src/db/schema/consent-policy/types.ts +28 -0
  446. package/src/db/schema/consent-purpose/index.ts +3 -0
  447. package/src/db/schema/consent-purpose/registry.ts +188 -0
  448. package/src/db/schema/consent-purpose/schema.ts +58 -0
  449. package/src/db/schema/consent-purpose/table.ts +154 -0
  450. package/src/db/schema/consent-purpose/types.ts +16 -0
  451. package/src/db/schema/consent-purpose-junction/index.ts +3 -0
  452. package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
  453. package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
  454. package/src/db/schema/consent-purpose-junction/table.ts +142 -0
  455. package/src/db/schema/consent-purpose-junction/types.ts +14 -0
  456. package/src/db/schema/consent-record/index.ts +3 -0
  457. package/src/db/schema/consent-record/registry.ts +209 -0
  458. package/src/db/schema/consent-record/schema.ts +42 -0
  459. package/src/db/schema/consent-record/table.ts +124 -0
  460. package/src/db/schema/consent-record/types.ts +21 -0
  461. package/src/db/schema/consent-withdrawal/index.ts +3 -0
  462. package/src/db/schema/consent-withdrawal/registry.ts +219 -0
  463. package/src/db/schema/consent-withdrawal/schema.ts +48 -0
  464. package/src/db/schema/consent-withdrawal/table.ts +181 -0
  465. package/src/db/schema/consent-withdrawal/types.ts +29 -0
  466. package/src/db/schema/definition.ts +196 -0
  467. package/src/db/schema/domain/index.ts +3 -0
  468. package/src/db/schema/domain/registry.ts +272 -0
  469. package/src/db/schema/domain/schema.ts +43 -0
  470. package/src/db/schema/domain/table.ts +137 -0
  471. package/src/db/schema/domain/types.ts +27 -0
  472. package/src/db/schema/geo-location/index.ts +3 -0
  473. package/src/db/schema/geo-location/registry.ts +159 -0
  474. package/src/db/schema/geo-location/schema.ts +45 -0
  475. package/src/db/schema/geo-location/table.ts +148 -0
  476. package/src/db/schema/geo-location/types.ts +18 -0
  477. package/src/db/schema/index.ts +96 -0
  478. package/src/db/schema/parser.ts +417 -0
  479. package/src/db/schema/schemas.ts +35 -0
  480. package/src/db/schema/subject/index.ts +3 -0
  481. package/src/db/schema/subject/registry.ts +371 -0
  482. package/src/db/schema/subject/schema.ts +41 -0
  483. package/src/db/schema/subject/table.ts +139 -0
  484. package/src/db/schema/subject/types.ts +22 -0
  485. package/src/db/schema/types.ts +154 -0
  486. package/src/db/utils/adapter-factory.ts +64 -0
  487. package/src/db/utils/index.ts +10 -0
  488. package/src/db/utils.ts +42 -0
  489. package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
  490. package/src/docs/neverthrow.md +171 -0
  491. package/src/error/codes.ts +201 -0
  492. package/src/error/error.ts +145 -0
  493. package/src/error/index.ts +23 -0
  494. package/src/error/logging.ts +52 -0
  495. package/src/error/pipeline.ts +57 -0
  496. package/src/error/recovery.ts +45 -0
  497. package/src/error/results.ts +100 -0
  498. package/src/index.ts +79 -0
  499. package/src/init.test.ts +235 -0
  500. package/src/init.ts +261 -0
  501. package/src/integrations/index.ts +10 -0
  502. package/src/integrations/next.ts +136 -0
  503. package/src/integrations/react.ts +567 -0
  504. package/src/plugins/geo/index.ts +563 -0
  505. package/src/test/utils.ts +244 -0
  506. package/src/types/api.ts +101 -0
  507. package/src/types/context.ts +235 -0
  508. package/src/types/helper.ts +87 -0
  509. package/src/types/index.ts +5 -0
  510. package/src/types/options.ts +189 -0
  511. package/src/types/plugins.ts +538 -0
  512. package/src/utils/env.ts +103 -0
  513. package/src/utils/hide-metadata.ts +21 -0
  514. package/src/utils/index.ts +17 -0
  515. package/src/utils/ip.ts +45 -0
  516. package/src/utils/json.ts +19 -0
  517. package/src/utils/logger.ts +252 -0
  518. package/src/utils/url.ts +194 -0
  519. package/src/utils/wildcard.ts +253 -0
  520. package/tsconfig.json +12 -0
  521. package/vitest.config.ts +14 -0
@@ -0,0 +1,2458 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = function(exports1) {
25
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ booleanField: ()=>booleanField,
37
+ getConsentTables: ()=>getConsentTables,
38
+ numberField: ()=>numberField,
39
+ numberArrayField: ()=>numberArrayField,
40
+ parseEntityOutputData: ()=>parseEntityOutputData,
41
+ stringArrayField: ()=>stringArrayField,
42
+ parseInputData: ()=>parseInputData,
43
+ dateField: ()=>dateField,
44
+ getAllFields: ()=>getAllFields,
45
+ getMigrations: ()=>getMigrations,
46
+ getAdapter: ()=>getAdapter,
47
+ stringField: ()=>stringField
48
+ });
49
+ const getConsentTables = (options)=>{
50
+ const pluginSchema = options.plugins?.reduce((acc, plugin)=>{
51
+ const schema = plugin.schema;
52
+ if (!schema) return acc;
53
+ for (const [key, value] of Object.entries(schema))acc[key] = {
54
+ fields: {
55
+ ...acc[key]?.fields,
56
+ ...value.fields
57
+ },
58
+ entityName: value.entityName || key
59
+ };
60
+ return acc;
61
+ }, {});
62
+ const { subject, consentPurpose, consentPolicy, domain, geoLocation, consent, consentPurposeJunction, record, consentGeoLocation, consentWithdrawal, auditLog, ...pluginTables } = pluginSchema || {};
63
+ return {
64
+ subject: getSubjectTable(options, subject?.fields),
65
+ consentPurpose: getPurposeTable(options, consentPurpose?.fields),
66
+ consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
67
+ domain: getDomainTable(options, domain?.fields),
68
+ consent: getConsentTable(options, consent?.fields),
69
+ consentPurposeJunction: getPurposeJunctionTable(options, consentPurposeJunction?.fields),
70
+ consentRecord: getConsentRecordTable(options, record?.fields),
71
+ consentGeoLocation: getConsentGeoLocationTable(options, consentGeoLocation?.fields),
72
+ consentWithdrawal: getConsentWithdrawalTable(options, consentWithdrawal?.fields),
73
+ auditLog: getAuditLogTable(options, auditLog?.fields),
74
+ geoLocation: getGeoLocationTable(options, geoLocation?.fields),
75
+ ...pluginTables
76
+ };
77
+ };
78
+ const external_zod_namespaceObject = require("zod");
79
+ const auditLogSchema = external_zod_namespaceObject.z.object({
80
+ id: external_zod_namespaceObject.z.string(),
81
+ entityType: external_zod_namespaceObject.z.string(),
82
+ entityId: external_zod_namespaceObject.z.string(),
83
+ actionType: external_zod_namespaceObject.z.string(),
84
+ subjectId: external_zod_namespaceObject.z.string().optional(),
85
+ ipAddress: external_zod_namespaceObject.z.string().optional(),
86
+ userAgent: external_zod_namespaceObject.z.string().optional(),
87
+ changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
88
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
89
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date())
90
+ });
91
+ const external_superjson_namespaceObject = require("superjson");
92
+ var external_superjson_default = /*#__PURE__*/ __webpack_require__.n(external_superjson_namespaceObject);
93
+ const currentDatabaseType = 'unknown';
94
+ function getDatabaseType() {
95
+ return currentDatabaseType;
96
+ }
97
+ const fieldConfigSchema = external_zod_namespaceObject.z.object({
98
+ required: external_zod_namespaceObject.z.boolean().default(true),
99
+ returned: external_zod_namespaceObject.z.boolean().default(true),
100
+ input: external_zod_namespaceObject.z.boolean().default(true),
101
+ defaultValue: external_zod_namespaceObject.z.union([
102
+ external_zod_namespaceObject.z.any(),
103
+ external_zod_namespaceObject.z["function"]().returns(external_zod_namespaceObject.z.any())
104
+ ]).optional(),
105
+ transform: external_zod_namespaceObject.z.object({
106
+ input: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
107
+ external_zod_namespaceObject.z.any(),
108
+ external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
109
+ ])).optional(),
110
+ output: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
111
+ external_zod_namespaceObject.z.any(),
112
+ external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
113
+ ])).optional()
114
+ }).optional(),
115
+ validator: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
116
+ external_zod_namespaceObject.z.string(),
117
+ external_zod_namespaceObject.z["null"]()
118
+ ])).optional(),
119
+ unique: external_zod_namespaceObject.z.boolean().optional(),
120
+ indexed: external_zod_namespaceObject.z.boolean().optional(),
121
+ sortable: external_zod_namespaceObject.z.boolean().default(true),
122
+ fieldName: external_zod_namespaceObject.z.string().optional(),
123
+ bigint: external_zod_namespaceObject.z.boolean().default(false)
124
+ });
125
+ const stringFieldSchema = fieldConfigSchema.extend({
126
+ type: external_zod_namespaceObject.z.literal('string'),
127
+ minLength: external_zod_namespaceObject.z.number().optional(),
128
+ maxLength: external_zod_namespaceObject.z.number().optional(),
129
+ pattern: external_zod_namespaceObject.z.string().optional()
130
+ });
131
+ const numberFieldSchema = fieldConfigSchema.extend({
132
+ type: external_zod_namespaceObject.z.literal('number'),
133
+ min: external_zod_namespaceObject.z.number().optional(),
134
+ max: external_zod_namespaceObject.z.number().optional()
135
+ });
136
+ const booleanFieldSchema = fieldConfigSchema.extend({
137
+ type: external_zod_namespaceObject.z.literal('boolean')
138
+ });
139
+ const dateFieldSchema = fieldConfigSchema.extend({
140
+ type: external_zod_namespaceObject.z.literal('date'),
141
+ minDate: external_zod_namespaceObject.z.date().optional(),
142
+ maxDate: external_zod_namespaceObject.z.date().optional(),
143
+ dateOnly: external_zod_namespaceObject.z.boolean().default(false),
144
+ format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
145
+ });
146
+ const timezoneFieldSchema = fieldConfigSchema.extend({
147
+ type: external_zod_namespaceObject.z.literal('timezone'),
148
+ validateTimezone: external_zod_namespaceObject.z.boolean().default(true),
149
+ suggestedValues: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional(),
150
+ restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().default(false)
151
+ });
152
+ const jsonFieldSchema = fieldConfigSchema.extend({
153
+ type: external_zod_namespaceObject.z.literal('json'),
154
+ validateJson: external_zod_namespaceObject.z.boolean().default(true)
155
+ });
156
+ const stringArrayFieldSchema = fieldConfigSchema.extend({
157
+ type: external_zod_namespaceObject.z.literal('string[]')
158
+ });
159
+ const numberArrayFieldSchema = fieldConfigSchema.extend({
160
+ type: external_zod_namespaceObject.z.literal('number[]')
161
+ });
162
+ const fieldSchema = external_zod_namespaceObject.z.discriminatedUnion('type', [
163
+ stringFieldSchema,
164
+ numberFieldSchema,
165
+ booleanFieldSchema,
166
+ dateFieldSchema,
167
+ timezoneFieldSchema,
168
+ jsonFieldSchema,
169
+ stringArrayFieldSchema,
170
+ numberArrayFieldSchema
171
+ ]);
172
+ function validateField(field) {
173
+ return fieldSchema.parse(field);
174
+ }
175
+ const COMMON_TIMEZONES = {
176
+ UTC: 'UTC',
177
+ GMT: 'GMT',
178
+ EASTERN: 'America/New_York',
179
+ CENTRAL: 'America/Chicago',
180
+ MOUNTAIN: 'America/Denver',
181
+ PACIFIC: 'America/Los_Angeles',
182
+ LONDON: 'Europe/London',
183
+ PARIS: 'Europe/Paris',
184
+ BERLIN: 'Europe/Berlin',
185
+ TOKYO: 'Asia/Tokyo',
186
+ SHANGHAI: 'Asia/Shanghai',
187
+ SINGAPORE: 'Asia/Singapore',
188
+ SYDNEY: 'Australia/Sydney',
189
+ SAO_PAULO: 'America/Sao_Paulo'
190
+ };
191
+ function createField(type, config) {
192
+ const fieldConfig = {
193
+ type,
194
+ required: true,
195
+ returned: true,
196
+ input: true,
197
+ sortable: true,
198
+ bigint: false,
199
+ ...config
200
+ };
201
+ return validateField(fieldConfig);
202
+ }
203
+ function stringField(config = {}) {
204
+ return createField('string', config);
205
+ }
206
+ function numberField(config = {}) {
207
+ return createField('number', config);
208
+ }
209
+ function booleanField(config = {}) {
210
+ return createField('boolean', config);
211
+ }
212
+ function dateField(config = {}) {
213
+ const { transform = {}, minDate, maxDate, dateOnly = false, format, validator, ...restConfig } = config;
214
+ const originalInputTransform = transform.input;
215
+ const originalOutputTransform = transform.output;
216
+ const dbType = getDatabaseType();
217
+ const inputTransform = async (value)=>{
218
+ let transformedValue = value;
219
+ if (originalInputTransform) transformedValue = await originalInputTransform(value);
220
+ if (dateOnly && transformedValue instanceof Date) {
221
+ const dateOnlyValue = new Date(transformedValue);
222
+ dateOnlyValue.setHours(0, 0, 0, 0);
223
+ transformedValue = dateOnlyValue;
224
+ }
225
+ if ('sqlite' === dbType) return external_superjson_default().stringify({
226
+ date: transformedValue
227
+ });
228
+ return transformedValue;
229
+ };
230
+ const outputTransform = async (value)=>{
231
+ let parsedValue = value;
232
+ if ('sqlite' === dbType && 'string' == typeof value && value.includes('"date"')) try {
233
+ const parsed = external_superjson_default().parse(value);
234
+ parsedValue = parsed.date;
235
+ } catch {}
236
+ if (originalOutputTransform && parsedValue instanceof Date) return await originalOutputTransform(parsedValue);
237
+ if (!originalOutputTransform && format && parsedValue instanceof Date) return new Date(new Intl.DateTimeFormat(void 0, format).format(parsedValue));
238
+ return parsedValue;
239
+ };
240
+ let dateValidator = validator;
241
+ if ((minDate || maxDate) && !dateValidator) dateValidator = (value)=>{
242
+ if (!(value instanceof Date)) return 'Value must be a Date object';
243
+ if (minDate && value < minDate) return `Date must not be earlier than ${minDate.toISOString()}`;
244
+ if (maxDate && value > maxDate) return `Date must not be later than ${maxDate.toISOString()}`;
245
+ return null;
246
+ };
247
+ else if ((minDate || maxDate) && dateValidator && 'function' == typeof dateValidator) {
248
+ const originalValidator = dateValidator;
249
+ dateValidator = (value)=>{
250
+ if (!(value instanceof Date)) return 'Value must be a Date object';
251
+ if (minDate && value < minDate) return `Date must not be earlier than ${minDate.toISOString()}`;
252
+ if (maxDate && value > maxDate) return `Date must not be later than ${maxDate.toISOString()}`;
253
+ return originalValidator(value);
254
+ };
255
+ }
256
+ return createField('date', {
257
+ ...restConfig,
258
+ transform: {
259
+ input: inputTransform,
260
+ output: outputTransform
261
+ },
262
+ validator: dateValidator
263
+ });
264
+ }
265
+ function stringArrayField(config = {}) {
266
+ return createField('string[]', config);
267
+ }
268
+ function numberArrayField(config = {}) {
269
+ return createField('number[]', config);
270
+ }
271
+ const external_base_x_namespaceObject = require("base-x");
272
+ var external_base_x_default = /*#__PURE__*/ __webpack_require__.n(external_base_x_namespaceObject);
273
+ const b58 = external_base_x_default()('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
274
+ function generateId(prefix) {
275
+ const buf = crypto.getRandomValues(new Uint8Array(20));
276
+ const EPOCH_TIMESTAMP = 1700000000000;
277
+ const t = Date.now() - EPOCH_TIMESTAMP;
278
+ const high = Math.floor(t / 0x100000000);
279
+ const low = t >>> 0;
280
+ buf[0] = high >>> 24 & 255;
281
+ buf[1] = high >>> 16 & 255;
282
+ buf[2] = high >>> 8 & 255;
283
+ buf[3] = 255 & high;
284
+ buf[4] = low >>> 24 & 255;
285
+ buf[5] = low >>> 16 & 255;
286
+ buf[6] = low >>> 8 & 255;
287
+ buf[7] = 255 & low;
288
+ return `${prefix}_${b58.encode(buf)}`;
289
+ }
290
+ function getAuditLogTable(options, auditLogFields) {
291
+ const auditLogConfig = options.tables?.auditLog;
292
+ const subjectConfig = options.tables?.subject;
293
+ return {
294
+ entityName: auditLogConfig?.entityName || 'auditLog',
295
+ entityPrefix: auditLogConfig?.entityPrefix || 'log',
296
+ schema: auditLogSchema,
297
+ fields: {
298
+ entityType: {
299
+ type: 'string',
300
+ required: true,
301
+ fieldName: auditLogConfig?.fields?.entityType || 'entityType'
302
+ },
303
+ entityId: {
304
+ type: 'string',
305
+ required: true,
306
+ fieldName: auditLogConfig?.fields?.entityId || 'entityId'
307
+ },
308
+ actionType: {
309
+ type: 'string',
310
+ required: true,
311
+ fieldName: auditLogConfig?.fields?.actionType || 'actionType'
312
+ },
313
+ subjectId: {
314
+ type: 'string',
315
+ required: false,
316
+ fieldName: auditLogConfig?.fields?.subjectId || 'subjectId',
317
+ references: {
318
+ model: subjectConfig?.entityName || 'subject',
319
+ field: 'id'
320
+ }
321
+ },
322
+ ipAddress: {
323
+ type: 'string',
324
+ required: false,
325
+ fieldName: auditLogConfig?.fields?.ipAddress || 'ipAddress'
326
+ },
327
+ userAgent: {
328
+ type: 'string',
329
+ required: false,
330
+ fieldName: auditLogConfig?.fields?.userAgent || 'userAgent'
331
+ },
332
+ changes: {
333
+ type: 'json',
334
+ required: false,
335
+ fieldName: auditLogConfig?.fields?.changes || 'changes'
336
+ },
337
+ metadata: {
338
+ type: 'json',
339
+ required: false,
340
+ fieldName: auditLogConfig?.fields?.metadata || 'metadata'
341
+ },
342
+ createdAt: {
343
+ type: 'date',
344
+ defaultValue: ()=>new Date(),
345
+ required: true,
346
+ fieldName: auditLogConfig?.fields?.createdAt || 'createdAt'
347
+ },
348
+ eventTimezone: {
349
+ type: 'timezone',
350
+ required: true,
351
+ defaultValue: COMMON_TIMEZONES.UTC,
352
+ fieldName: auditLogConfig?.fields?.eventTimezone || 'eventTimezone'
353
+ },
354
+ ...auditLogFields || {},
355
+ ...auditLogConfig?.additionalFields || {}
356
+ },
357
+ indexes: [
358
+ {
359
+ name: 'entity_index',
360
+ fields: [
361
+ 'entityType',
362
+ 'entityId'
363
+ ]
364
+ },
365
+ {
366
+ name: 'action_type_index',
367
+ fields: [
368
+ 'actionType'
369
+ ]
370
+ },
371
+ {
372
+ name: 'subject_id_index',
373
+ fields: [
374
+ 'subjectId'
375
+ ]
376
+ },
377
+ {
378
+ name: 'created_at_index',
379
+ fields: [
380
+ 'createdAt'
381
+ ]
382
+ }
383
+ ],
384
+ order: 5
385
+ };
386
+ }
387
+ const consentGeoLocationSchema = external_zod_namespaceObject.z.object({
388
+ id: external_zod_namespaceObject.z.string(),
389
+ consentId: external_zod_namespaceObject.z.string(),
390
+ ip: external_zod_namespaceObject.z.string().ip(),
391
+ country: external_zod_namespaceObject.z.string().optional(),
392
+ region: external_zod_namespaceObject.z.string().optional(),
393
+ city: external_zod_namespaceObject.z.string().optional(),
394
+ latitude: external_zod_namespaceObject.z.number().min(-90).max(90).optional(),
395
+ longitude: external_zod_namespaceObject.z.number().min(-180).max(180).optional(),
396
+ timezone: external_zod_namespaceObject.z.string().regex(/^[A-Za-z_]+\/[A-Za-z_]+$/).optional(),
397
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
398
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
399
+ });
400
+ function getConsentGeoLocationTable(options, geoLocationFields) {
401
+ const consentGeoLocationConfig = options.tables?.consentGeoLocation;
402
+ const consentConfig = options.tables?.consent;
403
+ return {
404
+ entityName: consentGeoLocationConfig?.entityName || 'consentGeoLocation',
405
+ entityPrefix: consentGeoLocationConfig?.entityPrefix || 'cgl',
406
+ schema: consentGeoLocationSchema,
407
+ fields: {
408
+ consentId: {
409
+ type: 'string',
410
+ required: true,
411
+ fieldName: consentGeoLocationConfig?.fields?.consentId || 'consentId',
412
+ references: {
413
+ model: consentConfig?.entityName || 'consent',
414
+ field: 'id'
415
+ }
416
+ },
417
+ ip: {
418
+ type: 'string',
419
+ required: true,
420
+ fieldName: consentGeoLocationConfig?.fields?.ip || 'ip'
421
+ },
422
+ country: {
423
+ type: 'string',
424
+ required: false,
425
+ fieldName: consentGeoLocationConfig?.fields?.country || 'country'
426
+ },
427
+ region: {
428
+ type: 'string',
429
+ required: false,
430
+ fieldName: consentGeoLocationConfig?.fields?.region || 'region'
431
+ },
432
+ city: {
433
+ type: 'string',
434
+ required: false,
435
+ fieldName: consentGeoLocationConfig?.fields?.city || 'city'
436
+ },
437
+ latitude: {
438
+ type: 'number',
439
+ required: false,
440
+ fieldName: consentGeoLocationConfig?.fields?.latitude || 'latitude'
441
+ },
442
+ longitude: {
443
+ type: 'number',
444
+ required: false,
445
+ fieldName: consentGeoLocationConfig?.fields?.longitude || 'longitude'
446
+ },
447
+ timezone: {
448
+ type: 'string',
449
+ required: false,
450
+ fieldName: consentGeoLocationConfig?.fields?.timezone || 'timezone'
451
+ },
452
+ createdAt: {
453
+ type: 'date',
454
+ defaultValue: ()=>new Date(),
455
+ required: true,
456
+ fieldName: consentGeoLocationConfig?.fields?.createdAt || 'createdAt'
457
+ },
458
+ ...geoLocationFields || {},
459
+ ...consentGeoLocationConfig?.additionalFields || {}
460
+ },
461
+ indexes: [
462
+ {
463
+ name: 'consent_id_index',
464
+ fields: [
465
+ 'consentId'
466
+ ]
467
+ },
468
+ {
469
+ name: 'country_index',
470
+ fields: [
471
+ 'country'
472
+ ]
473
+ },
474
+ {
475
+ name: 'created_at_index',
476
+ fields: [
477
+ 'createdAt'
478
+ ]
479
+ }
480
+ ],
481
+ order: 4
482
+ };
483
+ }
484
+ require("node:crypto");
485
+ const consentPolicySchema = external_zod_namespaceObject.z.object({
486
+ id: external_zod_namespaceObject.z.string(),
487
+ version: external_zod_namespaceObject.z.string(),
488
+ name: external_zod_namespaceObject.z.string(),
489
+ effectiveDate: external_zod_namespaceObject.z.date(),
490
+ expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
491
+ content: external_zod_namespaceObject.z.string(),
492
+ contentHash: external_zod_namespaceObject.z.string(),
493
+ isActive: external_zod_namespaceObject.z.boolean().default(true),
494
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
495
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
496
+ });
497
+ function getConsentPolicyTable(options, policyFields) {
498
+ const consentPolicyConfig = options.tables?.consentPolicy;
499
+ return {
500
+ entityName: consentPolicyConfig?.entityName || 'consentPolicy',
501
+ entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
502
+ schema: consentPolicySchema,
503
+ fields: {
504
+ version: {
505
+ type: 'string',
506
+ required: true,
507
+ fieldName: consentPolicyConfig?.fields?.version || 'version'
508
+ },
509
+ name: {
510
+ type: 'string',
511
+ required: true,
512
+ fieldName: consentPolicyConfig?.fields?.name || 'name'
513
+ },
514
+ effectiveDate: {
515
+ type: 'date',
516
+ required: true,
517
+ fieldName: consentPolicyConfig?.fields?.effectiveDate || 'effectiveDate'
518
+ },
519
+ expirationDate: {
520
+ type: 'date',
521
+ required: false,
522
+ fieldName: consentPolicyConfig?.fields?.expirationDate || 'expirationDate'
523
+ },
524
+ content: {
525
+ type: 'string',
526
+ required: true,
527
+ fieldName: consentPolicyConfig?.fields?.content || 'content'
528
+ },
529
+ contentHash: {
530
+ type: 'string',
531
+ required: true,
532
+ fieldName: consentPolicyConfig?.fields?.contentHash || 'contentHash'
533
+ },
534
+ isActive: {
535
+ type: 'boolean',
536
+ defaultValue: true,
537
+ required: true,
538
+ fieldName: consentPolicyConfig?.fields?.isActive || 'isActive'
539
+ },
540
+ createdAt: {
541
+ type: 'date',
542
+ defaultValue: ()=>new Date(),
543
+ required: true,
544
+ fieldName: consentPolicyConfig?.fields?.createdAt || 'createdAt'
545
+ },
546
+ ...policyFields || {},
547
+ ...consentPolicyConfig?.additionalFields || {}
548
+ },
549
+ order: 2
550
+ };
551
+ }
552
+ const consentPurposeJunctionSchema = external_zod_namespaceObject.z.object({
553
+ id: external_zod_namespaceObject.z.string(),
554
+ consentId: external_zod_namespaceObject.z.string(),
555
+ consentPurposeId: external_zod_namespaceObject.z.string(),
556
+ status: external_zod_namespaceObject.z["enum"]([
557
+ 'active',
558
+ 'withdrawn'
559
+ ], {
560
+ errorMap: ()=>({
561
+ message: "Status must be either 'active' or 'withdrawn'"
562
+ })
563
+ }).default('active'),
564
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.union([
565
+ external_zod_namespaceObject.z.string(),
566
+ external_zod_namespaceObject.z.number(),
567
+ external_zod_namespaceObject.z.boolean()
568
+ ])).optional(),
569
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
570
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
571
+ });
572
+ function getPurposeJunctionTable(options, junctionFields) {
573
+ const purposeJunctionConfig = options.tables?.consentPurposeJunction;
574
+ const consentConfig = options.tables?.consent;
575
+ const purposeConfig = options.tables?.consentPurpose;
576
+ return {
577
+ entityName: purposeJunctionConfig?.entityName || 'consentPurposeJunction',
578
+ entityPrefix: purposeJunctionConfig?.entityPrefix || 'pjx',
579
+ schema: consentPurposeJunctionSchema,
580
+ fields: {
581
+ consentId: {
582
+ type: 'string',
583
+ required: true,
584
+ fieldName: purposeJunctionConfig?.fields?.consentId || 'consentId',
585
+ references: {
586
+ model: consentConfig?.entityName || 'consent',
587
+ field: 'id'
588
+ }
589
+ },
590
+ purposeId: {
591
+ type: 'string',
592
+ required: true,
593
+ fieldName: purposeJunctionConfig?.fields?.purposeId || 'purposeId',
594
+ references: {
595
+ model: purposeConfig?.entityName || 'consentPurpose',
596
+ field: 'id'
597
+ }
598
+ },
599
+ status: {
600
+ type: 'string',
601
+ defaultValue: ()=>'active',
602
+ required: true,
603
+ fieldName: purposeJunctionConfig?.fields?.status || 'status'
604
+ },
605
+ metadata: {
606
+ type: 'json',
607
+ required: false,
608
+ fieldName: purposeJunctionConfig?.fields?.metadata || 'metadata'
609
+ },
610
+ createdAt: {
611
+ type: 'date',
612
+ defaultValue: ()=>new Date(),
613
+ required: true,
614
+ fieldName: purposeJunctionConfig?.fields?.createdAt || 'createdAt'
615
+ },
616
+ updatedAt: {
617
+ type: 'date',
618
+ required: false,
619
+ fieldName: purposeJunctionConfig?.fields?.updatedAt || 'updatedAt'
620
+ },
621
+ ...junctionFields || {},
622
+ ...purposeJunctionConfig?.additionalFields || {}
623
+ },
624
+ uniqueConstraints: [
625
+ {
626
+ name: 'unique_consent_purpose',
627
+ fields: [
628
+ 'consentId',
629
+ 'purposeId'
630
+ ]
631
+ }
632
+ ],
633
+ order: 4
634
+ };
635
+ }
636
+ const purposeSchema = external_zod_namespaceObject.z.object({
637
+ id: external_zod_namespaceObject.z.string(),
638
+ code: external_zod_namespaceObject.z.string(),
639
+ name: external_zod_namespaceObject.z.string(),
640
+ description: external_zod_namespaceObject.z.string(),
641
+ isEssential: external_zod_namespaceObject.z.boolean().default(false),
642
+ dataCategory: external_zod_namespaceObject.z.string().optional(),
643
+ legalBasis: external_zod_namespaceObject.z.string().optional(),
644
+ isActive: external_zod_namespaceObject.z.boolean().default(true),
645
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
646
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
647
+ });
648
+ function getPurposeTable(options, purposeFields) {
649
+ const purposeConfig = options.tables?.consentPurpose;
650
+ return {
651
+ entityName: purposeConfig?.entityName || 'consentPurpose',
652
+ entityPrefix: purposeConfig?.entityPrefix || 'pur',
653
+ schema: purposeSchema,
654
+ fields: {
655
+ code: {
656
+ type: 'string',
657
+ required: true,
658
+ fieldName: purposeConfig?.fields?.code || 'code'
659
+ },
660
+ name: {
661
+ type: 'string',
662
+ required: true,
663
+ fieldName: purposeConfig?.fields?.name || 'name'
664
+ },
665
+ description: {
666
+ type: 'string',
667
+ required: true,
668
+ fieldName: purposeConfig?.fields?.description || "description"
669
+ },
670
+ isEssential: {
671
+ type: 'boolean',
672
+ defaultValue: ()=>false,
673
+ required: true,
674
+ fieldName: purposeConfig?.fields?.isEssential || 'isEssential'
675
+ },
676
+ dataCategory: {
677
+ type: 'string',
678
+ required: false,
679
+ fieldName: purposeConfig?.fields?.dataCategory || 'dataCategory'
680
+ },
681
+ legalBasis: {
682
+ type: 'string',
683
+ required: false,
684
+ fieldName: purposeConfig?.fields?.legalBasis || 'legalBasis'
685
+ },
686
+ isActive: {
687
+ type: 'boolean',
688
+ defaultValue: true,
689
+ required: true,
690
+ fieldName: purposeConfig?.fields?.isActive || 'isActive'
691
+ },
692
+ createdAt: {
693
+ type: 'date',
694
+ defaultValue: ()=>new Date(),
695
+ required: true,
696
+ fieldName: purposeConfig?.fields?.createdAt || 'createdAt'
697
+ },
698
+ updatedAt: {
699
+ type: 'date',
700
+ defaultValue: ()=>new Date(),
701
+ required: true,
702
+ fieldName: purposeConfig?.fields?.updatedAt || 'updatedAt'
703
+ },
704
+ ...purposeFields || {},
705
+ ...purposeConfig?.additionalFields || {}
706
+ },
707
+ order: 1
708
+ };
709
+ }
710
+ const consentRecordSchema = external_zod_namespaceObject.z.object({
711
+ id: external_zod_namespaceObject.z.string(),
712
+ subjectId: external_zod_namespaceObject.z.string(),
713
+ consentId: external_zod_namespaceObject.z.string().optional(),
714
+ actionType: external_zod_namespaceObject.z.string(),
715
+ details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
716
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
717
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
718
+ });
719
+ function getConsentRecordTable(options, recordFields) {
720
+ const recordConfig = options.tables?.record;
721
+ const subjectConfig = options.tables?.subject;
722
+ const consentConfig = options.tables?.consent;
723
+ return {
724
+ entityName: recordConfig?.entityName || 'consentRecord',
725
+ entityPrefix: recordConfig?.entityPrefix || 'rec',
726
+ schema: consentRecordSchema,
727
+ fields: {
728
+ subjectId: {
729
+ type: 'string',
730
+ required: true,
731
+ fieldName: recordConfig?.fields?.subjectId || 'subjectId',
732
+ references: {
733
+ model: subjectConfig?.entityName || 'subject',
734
+ field: 'id'
735
+ }
736
+ },
737
+ consentId: {
738
+ type: 'string',
739
+ required: false,
740
+ fieldName: recordConfig?.fields?.consentId || 'consentId',
741
+ references: {
742
+ model: consentConfig?.entityName || 'consent',
743
+ field: 'id'
744
+ }
745
+ },
746
+ actionType: {
747
+ type: 'string',
748
+ required: true,
749
+ fieldName: recordConfig?.fields?.actionType || 'actionType'
750
+ },
751
+ details: {
752
+ type: 'json',
753
+ required: false,
754
+ fieldName: recordConfig?.fields?.details || 'details'
755
+ },
756
+ createdAt: {
757
+ type: 'date',
758
+ defaultValue: ()=>new Date(),
759
+ required: true,
760
+ fieldName: recordConfig?.fields?.createdAt || 'createdAt'
761
+ },
762
+ ...recordFields || {},
763
+ ...recordConfig?.additionalFields || {}
764
+ },
765
+ order: 4
766
+ };
767
+ }
768
+ const consentWithdrawalSchema = external_zod_namespaceObject.z.object({
769
+ id: external_zod_namespaceObject.z.string(),
770
+ consentId: external_zod_namespaceObject.z.string(),
771
+ subjectId: external_zod_namespaceObject.z.string(),
772
+ withdrawalReason: external_zod_namespaceObject.z.string().optional(),
773
+ withdrawalMethod: external_zod_namespaceObject.z["enum"]([
774
+ 'subject-initiated',
775
+ 'automatic-expiry',
776
+ 'admin',
777
+ 'api',
778
+ 'other'
779
+ ]).default('subject-initiated'),
780
+ ipAddress: external_zod_namespaceObject.z.string().optional(),
781
+ userAgent: external_zod_namespaceObject.z.string().optional(),
782
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
783
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
784
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
785
+ });
786
+ function getConsentWithdrawalTable(options, withdrawalFields) {
787
+ const consentWithdrawalConfig = options.tables?.consentWithdrawal;
788
+ const consentConfig = options.tables?.consent;
789
+ const subjectConfig = options.tables?.subject;
790
+ return {
791
+ entityName: consentWithdrawalConfig?.entityName || 'consentWithdrawal',
792
+ entityPrefix: consentWithdrawalConfig?.entityPrefix || 'wdr',
793
+ schema: consentWithdrawalSchema,
794
+ fields: {
795
+ consentId: {
796
+ type: 'string',
797
+ required: true,
798
+ fieldName: consentWithdrawalConfig?.fields?.consentId || 'consentId',
799
+ references: {
800
+ model: consentConfig?.entityName || 'consent',
801
+ field: 'id'
802
+ }
803
+ },
804
+ subjectId: {
805
+ type: 'string',
806
+ required: true,
807
+ fieldName: consentWithdrawalConfig?.fields?.subjectId || 'subjectId',
808
+ references: {
809
+ model: subjectConfig?.entityName || 'subject',
810
+ field: 'id'
811
+ }
812
+ },
813
+ withdrawalReason: {
814
+ type: 'string',
815
+ required: false,
816
+ fieldName: consentWithdrawalConfig?.fields?.withdrawalReason || 'withdrawalReason'
817
+ },
818
+ withdrawalMethod: {
819
+ type: 'string',
820
+ defaultValue: ()=>'subject-initiated',
821
+ required: true,
822
+ fieldName: consentWithdrawalConfig?.fields?.withdrawalMethod || 'withdrawalMethod'
823
+ },
824
+ ipAddress: {
825
+ type: 'string',
826
+ required: false,
827
+ fieldName: consentWithdrawalConfig?.fields?.ipAddress || 'ipAddress'
828
+ },
829
+ userAgent: {
830
+ type: 'string',
831
+ required: false,
832
+ fieldName: consentWithdrawalConfig?.fields?.userAgent || 'userAgent'
833
+ },
834
+ metadata: {
835
+ type: 'json',
836
+ required: false,
837
+ fieldName: consentWithdrawalConfig?.fields?.metadata || 'metadata'
838
+ },
839
+ createdAt: {
840
+ type: 'date',
841
+ defaultValue: ()=>new Date(),
842
+ required: true,
843
+ fieldName: consentWithdrawalConfig?.fields?.createdAt || 'createdAt'
844
+ },
845
+ ...withdrawalFields || {},
846
+ ...consentWithdrawalConfig?.additionalFields || {}
847
+ },
848
+ uniqueConstraints: consentWithdrawalConfig?.preventMultipleWithdrawals !== false ? [
849
+ {
850
+ name: 'unique_consent_withdrawal',
851
+ fields: [
852
+ 'consentId'
853
+ ]
854
+ }
855
+ ] : [],
856
+ indexes: [
857
+ {
858
+ name: 'subject_id_index',
859
+ fields: [
860
+ 'subjectId'
861
+ ]
862
+ },
863
+ {
864
+ name: 'created_at_index',
865
+ fields: [
866
+ 'createdAt'
867
+ ]
868
+ }
869
+ ],
870
+ order: 4
871
+ };
872
+ }
873
+ const consentHistorySchema = external_zod_namespaceObject.z.object({
874
+ actionType: external_zod_namespaceObject.z["enum"]([
875
+ 'given',
876
+ 'withdrawn',
877
+ 'updated',
878
+ 'expired'
879
+ ]),
880
+ timestamp: external_zod_namespaceObject.z.date(),
881
+ details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
882
+ previousState: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
883
+ newState: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
884
+ });
885
+ const consentSchema = external_zod_namespaceObject.z.object({
886
+ id: external_zod_namespaceObject.z.string(),
887
+ subjectId: external_zod_namespaceObject.z.string(),
888
+ domainId: external_zod_namespaceObject.z.string(),
889
+ purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
890
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
891
+ policyId: external_zod_namespaceObject.z.string().optional(),
892
+ ipAddress: external_zod_namespaceObject.z.string().optional(),
893
+ userAgent: external_zod_namespaceObject.z.string().optional(),
894
+ status: external_zod_namespaceObject.z["enum"]([
895
+ 'active',
896
+ 'withdrawn',
897
+ 'expired'
898
+ ]).default('active'),
899
+ withdrawalReason: external_zod_namespaceObject.z.string().optional(),
900
+ givenAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
901
+ validUntil: external_zod_namespaceObject.z.date().optional(),
902
+ isActive: external_zod_namespaceObject.z.boolean().default(true),
903
+ history: external_zod_namespaceObject.z.array(consentHistorySchema).default([])
904
+ });
905
+ function getConsentTable(options, consentFields) {
906
+ const consentConfig = options.tables?.consent;
907
+ const subjectConfig = options.tables?.subject;
908
+ const domainConfig = options.tables?.domain;
909
+ const policyConfig = options.tables?.consentPolicy;
910
+ const purposeConfig = options.tables?.consentPurpose;
911
+ return {
912
+ entityName: consentConfig?.entityName || 'consent',
913
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
914
+ schema: consentSchema,
915
+ fields: {
916
+ subjectId: {
917
+ type: 'string',
918
+ required: true,
919
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
920
+ references: {
921
+ model: subjectConfig?.entityName || 'subject',
922
+ field: 'id'
923
+ }
924
+ },
925
+ domainId: {
926
+ type: 'string',
927
+ required: true,
928
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
929
+ references: {
930
+ model: domainConfig?.entityName || 'domain',
931
+ field: 'id'
932
+ }
933
+ },
934
+ purposeIds: {
935
+ type: 'json',
936
+ required: false,
937
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds',
938
+ references: {
939
+ model: purposeConfig?.entityName || 'consentPurpose',
940
+ field: 'id',
941
+ type: 'array'
942
+ }
943
+ },
944
+ metadata: {
945
+ type: 'json',
946
+ required: false,
947
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
948
+ },
949
+ policyId: {
950
+ type: 'string',
951
+ required: false,
952
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
953
+ references: {
954
+ model: policyConfig?.entityName || 'consentPolicy',
955
+ field: 'id'
956
+ }
957
+ },
958
+ ipAddress: {
959
+ type: 'string',
960
+ required: false,
961
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
962
+ },
963
+ userAgent: {
964
+ type: 'string',
965
+ required: false,
966
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
967
+ },
968
+ status: {
969
+ type: 'string',
970
+ defaultValue: ()=>'active',
971
+ required: true,
972
+ fieldName: consentConfig?.fields?.status || 'status'
973
+ },
974
+ withdrawalReason: {
975
+ type: 'string',
976
+ required: false,
977
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
978
+ },
979
+ givenAt: {
980
+ type: 'date',
981
+ defaultValue: ()=>new Date(),
982
+ required: true,
983
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
984
+ },
985
+ validUntil: {
986
+ type: 'date',
987
+ required: false,
988
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
989
+ transform: {
990
+ input: (val, data)=>{
991
+ if (val) return val;
992
+ const expiresIn = consentConfig?.expiresIn || 31536000;
993
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
994
+ if (expiresIn > 0) {
995
+ const validUntil = new Date(givenAt);
996
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
997
+ return validUntil;
998
+ }
999
+ }
1000
+ }
1001
+ },
1002
+ isActive: {
1003
+ type: 'boolean',
1004
+ defaultValue: true,
1005
+ required: true,
1006
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
1007
+ },
1008
+ ...consentFields || {},
1009
+ ...consentConfig?.additionalFields || {}
1010
+ },
1011
+ order: 3
1012
+ };
1013
+ }
1014
+ const codes_BASE_ERROR_CODES = {
1015
+ NOT_FOUND: 'Resource not found',
1016
+ BAD_REQUEST: 'Bad request',
1017
+ CONFLICT: 'Conflict with current state',
1018
+ CONSENT_NOT_FOUND: 'Consent not found',
1019
+ CONSENT_EXPIRED: 'Consent has expired',
1020
+ FAILED_TO_CREATE_CONSENT: 'Failed to create consent',
1021
+ FAILED_TO_UPDATE_CONSENT: 'Failed to update consent',
1022
+ FAILED_TO_GET_CONSENT: 'Failed to get consent',
1023
+ FAILED_TO_CREATE_PURPOSE: 'Failed to create consentPurpose',
1024
+ PURPOSE_NOT_FOUND: 'Consent Purpose not found',
1025
+ INVALID_CONFIGURATION: 'Invalid configuration',
1026
+ MISSING_REQUIRED_PARAMETER: 'Missing required parameter',
1027
+ UNAUTHORIZED: 'Unauthorized',
1028
+ FORBIDDEN: 'Forbidden',
1029
+ INTERNAL_SERVER_ERROR: 'Internal server error',
1030
+ INITIALIZATION_FAILED: 'Initialization failed',
1031
+ PLUGIN_INITIALIZATION_FAILED: 'Plugin initialization failed',
1032
+ DATABASE_CONNECTION_ERROR: 'Database connection error',
1033
+ DATABASE_QUERY_ERROR: 'Database query error',
1034
+ REQUEST_HANDLER_ERROR: 'Request handler error',
1035
+ API_RETRIEVAL_ERROR: 'API retrieval error',
1036
+ INVALID_REQUEST: 'Invalid request',
1037
+ UNKNOWN_ERROR: 'Unknown error'
1038
+ };
1039
+ class error_C15TError extends Error {
1040
+ code;
1041
+ status;
1042
+ data;
1043
+ category;
1044
+ constructor(message, options){
1045
+ super(message);
1046
+ this.name = 'C15TError';
1047
+ if (options) {
1048
+ this.code = options.code;
1049
+ this.status = options.status;
1050
+ this.data = options.data;
1051
+ this.category = options.category;
1052
+ }
1053
+ Object.setPrototypeOf(this, error_C15TError.prototype);
1054
+ }
1055
+ static fromResponse(response, data) {
1056
+ let message = `HTTP error ${response.status}`;
1057
+ let code;
1058
+ let errorData;
1059
+ if (data && 'object' == typeof data && null !== data) {
1060
+ const errorObj = data;
1061
+ if ('string' == typeof errorObj.message) message = errorObj.message;
1062
+ if ('string' == typeof errorObj.code) {
1063
+ const isKnownCode = Object.values(codes_BASE_ERROR_CODES).includes(errorObj.code);
1064
+ if (isKnownCode) code = errorObj.code;
1065
+ }
1066
+ if ('object' == typeof errorObj.data && null !== errorObj.data) errorData = errorObj.data;
1067
+ }
1068
+ return new error_C15TError(message, {
1069
+ code,
1070
+ status: response.status,
1071
+ data: errorData
1072
+ });
1073
+ }
1074
+ static isC15TError(error) {
1075
+ return error instanceof error_C15TError;
1076
+ }
1077
+ }
1078
+ require("neverthrow");
1079
+ const domainSchema = external_zod_namespaceObject.z.object({
1080
+ id: external_zod_namespaceObject.z.string(),
1081
+ name: external_zod_namespaceObject.z.string().min(1),
1082
+ description: external_zod_namespaceObject.z.string().optional(),
1083
+ allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().default([]),
1084
+ isVerified: external_zod_namespaceObject.z.boolean().default(true),
1085
+ isActive: external_zod_namespaceObject.z.boolean().default(true),
1086
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
1087
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
1088
+ });
1089
+ function getDomainTable(options, domainFields) {
1090
+ const domainConfig = options.tables?.domain;
1091
+ return {
1092
+ entityName: domainConfig?.entityName || 'domain',
1093
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
1094
+ schema: domainSchema,
1095
+ fields: {
1096
+ name: {
1097
+ type: 'string',
1098
+ required: true,
1099
+ unique: true,
1100
+ fieldName: domainConfig?.fields?.name || 'name'
1101
+ },
1102
+ description: {
1103
+ type: 'string',
1104
+ required: false,
1105
+ fieldName: domainConfig?.fields?.description || "description"
1106
+ },
1107
+ allowedOrigins: {
1108
+ type: 'json',
1109
+ defaultValue: ()=>[],
1110
+ required: false,
1111
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
1112
+ },
1113
+ isVerified: {
1114
+ type: 'boolean',
1115
+ defaultValue: true,
1116
+ required: true,
1117
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified'
1118
+ },
1119
+ isActive: {
1120
+ type: 'boolean',
1121
+ defaultValue: true,
1122
+ required: true,
1123
+ fieldName: domainConfig?.fields?.isActive || 'isActive'
1124
+ },
1125
+ createdAt: {
1126
+ type: 'date',
1127
+ defaultValue: ()=>new Date(),
1128
+ required: true,
1129
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt'
1130
+ },
1131
+ updatedAt: {
1132
+ type: 'date',
1133
+ required: false,
1134
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
1135
+ },
1136
+ ...domainFields || {},
1137
+ ...domainConfig?.additionalFields || {}
1138
+ },
1139
+ order: 1
1140
+ };
1141
+ }
1142
+ const geoLocationSchema = external_zod_namespaceObject.z.object({
1143
+ id: external_zod_namespaceObject.z.string(),
1144
+ countryCode: external_zod_namespaceObject.z.string().length(2).toUpperCase(),
1145
+ countryName: external_zod_namespaceObject.z.string(),
1146
+ regionCode: external_zod_namespaceObject.z.string().optional(),
1147
+ regionName: external_zod_namespaceObject.z.string().optional(),
1148
+ regulatoryZones: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z["enum"]([
1149
+ 'GDPR',
1150
+ 'CCPA',
1151
+ 'CPRA',
1152
+ 'LGPD',
1153
+ 'PIPEDA'
1154
+ ])).optional(),
1155
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date())
1156
+ });
1157
+ function getGeoLocationTable(options, geoLocationFields) {
1158
+ const geoLocationConfig = options.tables?.geoLocation;
1159
+ return {
1160
+ entityName: geoLocationConfig?.entityName || 'geoLocation',
1161
+ entityPrefix: geoLocationConfig?.entityPrefix || 'geo',
1162
+ schema: geoLocationSchema,
1163
+ fields: {
1164
+ countryCode: {
1165
+ type: 'string',
1166
+ required: true,
1167
+ fieldName: geoLocationConfig?.fields?.countryCode || 'countryCode'
1168
+ },
1169
+ countryName: {
1170
+ type: 'string',
1171
+ required: true,
1172
+ fieldName: geoLocationConfig?.fields?.countryName || 'countryName'
1173
+ },
1174
+ regionCode: {
1175
+ type: 'string',
1176
+ required: false,
1177
+ fieldName: geoLocationConfig?.fields?.regionCode || 'regionCode'
1178
+ },
1179
+ regionName: {
1180
+ type: 'string',
1181
+ required: false,
1182
+ fieldName: geoLocationConfig?.fields?.regionName || 'regionName'
1183
+ },
1184
+ regulatoryZones: {
1185
+ type: 'json',
1186
+ required: false,
1187
+ fieldName: geoLocationConfig?.fields?.regulatoryZones || 'regulatoryZones',
1188
+ transformer: {
1189
+ input: (value)=>JSON.stringify(value),
1190
+ output: (value)=>{
1191
+ try {
1192
+ return JSON.parse(value);
1193
+ } catch {
1194
+ return [];
1195
+ }
1196
+ }
1197
+ }
1198
+ },
1199
+ createdAt: {
1200
+ type: 'date',
1201
+ defaultValue: ()=>new Date(),
1202
+ required: true,
1203
+ fieldName: geoLocationConfig?.fields?.createdAt || 'createdAt'
1204
+ },
1205
+ ...geoLocationFields || {},
1206
+ ...geoLocationConfig?.additionalFields || {}
1207
+ },
1208
+ indexes: [
1209
+ {
1210
+ name: 'country_code_index',
1211
+ fields: [
1212
+ 'countryCode'
1213
+ ]
1214
+ },
1215
+ {
1216
+ name: 'region_code_index',
1217
+ fields: [
1218
+ 'regionCode'
1219
+ ]
1220
+ },
1221
+ {
1222
+ name: 'created_at_index',
1223
+ fields: [
1224
+ 'createdAt'
1225
+ ]
1226
+ }
1227
+ ],
1228
+ order: 1
1229
+ };
1230
+ }
1231
+ const subjectSchema = external_zod_namespaceObject.z.object({
1232
+ id: external_zod_namespaceObject.z.string(),
1233
+ isIdentified: external_zod_namespaceObject.z.boolean().default(false),
1234
+ externalId: external_zod_namespaceObject.z.string().nullable().optional(),
1235
+ identityProvider: external_zod_namespaceObject.z.string().optional(),
1236
+ lastIpAddress: external_zod_namespaceObject.z.string().optional(),
1237
+ createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
1238
+ updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
1239
+ });
1240
+ function getSubjectTable(options, subjectFields) {
1241
+ const subjectConfig = options.tables?.subject;
1242
+ return {
1243
+ entityName: subjectConfig?.entityName || 'subject',
1244
+ entityPrefix: subjectConfig?.entityPrefix || 'sub',
1245
+ schema: subjectSchema,
1246
+ fields: {
1247
+ isIdentified: {
1248
+ type: 'boolean',
1249
+ defaultValue: ()=>false,
1250
+ required: true,
1251
+ fieldName: subjectConfig?.fields?.isIdentified || 'isIdentified'
1252
+ },
1253
+ externalId: {
1254
+ type: 'string',
1255
+ required: false,
1256
+ fieldName: subjectConfig?.fields?.externalId || 'externalId'
1257
+ },
1258
+ identityProvider: {
1259
+ type: 'string',
1260
+ required: false,
1261
+ fieldName: subjectConfig?.fields?.identityProvider || 'identityProvider'
1262
+ },
1263
+ lastIpAddress: {
1264
+ type: 'string',
1265
+ required: false,
1266
+ fieldName: subjectConfig?.fields?.lastIpAddress || 'lastIpAddress'
1267
+ },
1268
+ createdAt: {
1269
+ type: 'date',
1270
+ defaultValue: ()=>new Date(),
1271
+ required: true,
1272
+ fieldName: subjectConfig?.fields?.createdAt || 'createdAt'
1273
+ },
1274
+ updatedAt: {
1275
+ type: 'date',
1276
+ defaultValue: ()=>new Date(),
1277
+ required: true,
1278
+ fieldName: subjectConfig?.fields?.updatedAt || 'updatedAt'
1279
+ },
1280
+ subjectTimezone: {
1281
+ type: 'timezone',
1282
+ required: false,
1283
+ defaultValue: COMMON_TIMEZONES.UTC,
1284
+ fieldName: subjectConfig?.fields?.subjectTimezone || 'subjectTimezone'
1285
+ },
1286
+ ...subjectFields || {},
1287
+ ...subjectConfig?.additionalFields || {}
1288
+ },
1289
+ order: 1
1290
+ };
1291
+ }
1292
+ function parseEntityOutputData(data, schema) {
1293
+ const fields = schema.fields;
1294
+ const parsedData = {};
1295
+ for(const key in data)if (Object.hasOwn(data, key)) {
1296
+ const field = fields[key];
1297
+ if (!field) {
1298
+ parsedData[key] = data[key];
1299
+ continue;
1300
+ }
1301
+ if (false === field.returned) continue;
1302
+ parsedData[key] = data[key];
1303
+ }
1304
+ return parsedData;
1305
+ }
1306
+ function getAllFields(options, table, conflictResolution = {
1307
+ strategy: 'error'
1308
+ }) {
1309
+ const schema = {};
1310
+ const fieldOrigins = new Map();
1311
+ const addFields = (fields, source)=>{
1312
+ for (const [key, field] of Object.entries(fields)){
1313
+ if (schema[key]) {
1314
+ const origins = fieldOrigins.get(key) || [];
1315
+ origins.push(source);
1316
+ fieldOrigins.set(key, origins);
1317
+ if ('error' === conflictResolution.strategy) throw new error_C15TError('A field conflict was detected in the schema. Multiple definitions exist for the same field.', {
1318
+ code: codes_BASE_ERROR_CODES.CONFLICT,
1319
+ status: 500,
1320
+ data: {
1321
+ field: key,
1322
+ table,
1323
+ definedIn: origins.join(', ')
1324
+ }
1325
+ });
1326
+ if ('warn' === conflictResolution.strategy && conflictResolution.onWarning) conflictResolution.onWarning(`Field conflict detected for '${key}' in table '${table}'. Using last definition from ${source}.`);
1327
+ }
1328
+ schema[key] = field;
1329
+ }
1330
+ };
1331
+ if (options.tables && table in options.tables) {
1332
+ const tableConfig = options.tables[table];
1333
+ if (tableConfig?.additionalFields) addFields(tableConfig.additionalFields, 'table configuration');
1334
+ }
1335
+ for (const plugin of options.plugins || []){
1336
+ const pluginSchema = plugin.schema;
1337
+ if (pluginSchema?.[table]) addFields(pluginSchema[table].fields, `plugin: ${plugin.name || 'unnamed'}`);
1338
+ }
1339
+ return schema;
1340
+ }
1341
+ function parseInputData(data, schema, extraFieldsConfig = {
1342
+ strategy: 'error'
1343
+ }) {
1344
+ const action = schema.action || 'create';
1345
+ const fields = schema.fields;
1346
+ const parsedData = {};
1347
+ const extraFields = new Set();
1348
+ for(const key in fields)if (Object.hasOwn(fields, key)) {
1349
+ if (key in data) {
1350
+ if (fields[key]?.input === false) {
1351
+ if (fields[key]?.defaultValue) parsedData[key] = fields[key]?.defaultValue;
1352
+ continue;
1353
+ }
1354
+ function isLegacyValidator(validator) {
1355
+ return 'object' == typeof validator && null !== validator && 'input' in validator;
1356
+ }
1357
+ if (fields[key]?.validator && isLegacyValidator(fields[key]?.validator) && fields[key]?.validator.input && void 0 !== data[key]) {
1358
+ parsedData[key] = fields[key]?.validator.input.parse(data[key]);
1359
+ continue;
1360
+ }
1361
+ if (fields[key]?.transform?.input && void 0 !== data[key]) {
1362
+ const inputValue = data[key];
1363
+ parsedData[key] = fields[key]?.transform?.input(inputValue);
1364
+ continue;
1365
+ }
1366
+ parsedData[key] = data[key];
1367
+ continue;
1368
+ }
1369
+ if (fields[key]?.defaultValue && 'create' === action) {
1370
+ parsedData[key] = fields[key]?.defaultValue;
1371
+ continue;
1372
+ }
1373
+ if (fields[key]?.required && 'create' === action) throw new error_C15TError('Missing required field', {
1374
+ code: codes_BASE_ERROR_CODES.BAD_REQUEST,
1375
+ status: 400,
1376
+ data: {
1377
+ message: `${key} is required`
1378
+ }
1379
+ });
1380
+ }
1381
+ for(const key in data)if (Object.hasOwn(data, key) && !(key in fields)) extraFields.add(key);
1382
+ if (extraFields.size > 0) {
1383
+ const allowedFields = new Set(extraFieldsConfig.allowedExtraFields || []);
1384
+ const unallowedFields = Array.from(extraFields).filter((field)=>!allowedFields.has(field));
1385
+ if (unallowedFields.length > 0) switch(extraFieldsConfig.strategy){
1386
+ case 'error':
1387
+ throw new error_C15TError('Unexpected fields found', {
1388
+ code: codes_BASE_ERROR_CODES.BAD_REQUEST,
1389
+ status: 400,
1390
+ data: {
1391
+ message: `Unexpected fields found: ${unallowedFields.join(', ')}`
1392
+ }
1393
+ });
1394
+ case 'warn':
1395
+ if (extraFieldsConfig.onWarning) extraFieldsConfig.onWarning(`Unexpected fields found: ${unallowedFields.join(', ')}`);
1396
+ for (const key of extraFields)parsedData[key] = data[key];
1397
+ break;
1398
+ case 'silent':
1399
+ for (const key of extraFields)parsedData[key] = data[key];
1400
+ break;
1401
+ case 'drop':
1402
+ break;
1403
+ default:
1404
+ throw new error_C15TError('Unexpected fields found', {
1405
+ code: codes_BASE_ERROR_CODES.BAD_REQUEST,
1406
+ status: 400,
1407
+ data: {
1408
+ message: `Unexpected fields found: ${unallowedFields.join(', ')}`
1409
+ }
1410
+ });
1411
+ }
1412
+ else for (const key of extraFields)parsedData[key] = data[key];
1413
+ }
1414
+ return parsedData;
1415
+ }
1416
+ const levels = [
1417
+ 'info',
1418
+ 'success',
1419
+ 'warn',
1420
+ 'error',
1421
+ 'debug'
1422
+ ];
1423
+ function shouldPublishLog(currentLogLevel, logLevel) {
1424
+ return levels.indexOf(logLevel) <= levels.indexOf(currentLogLevel);
1425
+ }
1426
+ const colors = {
1427
+ reset: '\x1b[0m',
1428
+ bright: '\x1b[1m',
1429
+ dim: '\x1b[2m',
1430
+ underscore: '\x1b[4m',
1431
+ blink: '\x1b[5m',
1432
+ reverse: '\x1b[7m',
1433
+ hidden: '\x1b[8m',
1434
+ fg: {
1435
+ black: '\x1b[30m',
1436
+ red: '\x1b[31m',
1437
+ green: '\x1b[32m',
1438
+ yellow: '\x1b[33m',
1439
+ blue: '\x1b[34m',
1440
+ magenta: '\x1b[35m',
1441
+ cyan: '\x1b[36m',
1442
+ white: '\x1b[37m'
1443
+ },
1444
+ bg: {
1445
+ black: '\x1b[40m',
1446
+ red: '\x1b[41m',
1447
+ green: '\x1b[42m',
1448
+ yellow: '\x1b[43m',
1449
+ blue: '\x1b[44m',
1450
+ magenta: '\x1b[45m',
1451
+ cyan: '\x1b[46m',
1452
+ white: '\x1b[47m'
1453
+ }
1454
+ };
1455
+ const levelColors = {
1456
+ info: colors.fg.blue,
1457
+ success: colors.fg.green,
1458
+ warn: colors.fg.yellow,
1459
+ error: colors.fg.red,
1460
+ debug: colors.fg.magenta
1461
+ };
1462
+ const formatMessage = (level, message)=>{
1463
+ const timestamp = new Date().toISOString();
1464
+ return `${colors.dim}${timestamp}${colors.reset} ${levelColors[level]}${level.toUpperCase()}${colors.reset} ${colors.bright}[c15t]:${colors.reset} ${message}`;
1465
+ };
1466
+ const createLogger = (options)=>{
1467
+ const enabled = options?.disabled !== true;
1468
+ const logLevel = options?.level ?? 'error';
1469
+ const LogFunc = (level, message, args = [])=>{
1470
+ if (!enabled || !shouldPublishLog(logLevel, level)) return;
1471
+ const formattedMessage = formatMessage(level, message);
1472
+ if (!options || 'function' != typeof options.log) {
1473
+ if ('error' === level) console.error(formattedMessage, ...args);
1474
+ else if ('warn' === level) console.warn(formattedMessage, ...args);
1475
+ else if ('info' === level) console.log(formattedMessage, ...args);
1476
+ else if ('debug' === level) console.debug(formattedMessage, ...args);
1477
+ else if ('success' === level) console.log(formattedMessage, ...args);
1478
+ return;
1479
+ }
1480
+ options.log('success' === level ? 'info' : level, message, ...args);
1481
+ };
1482
+ return Object.fromEntries(levels.map((level)=>[
1483
+ level,
1484
+ (...[message, ...args])=>LogFunc(level, message, args)
1485
+ ]));
1486
+ };
1487
+ createLogger();
1488
+ const external_kysely_namespaceObject = require("kysely");
1489
+ function dialect_getDatabaseType(db) {
1490
+ if (!db) return null;
1491
+ if ('dialect' in db) return dialect_getDatabaseType(db.dialect);
1492
+ if ('createDriver' in db) {
1493
+ if (db instanceof external_kysely_namespaceObject.SqliteDialect) return 'sqlite';
1494
+ if (db instanceof external_kysely_namespaceObject.MysqlDialect) return 'mysql';
1495
+ if (db instanceof external_kysely_namespaceObject.PostgresDialect) return 'postgres';
1496
+ if (db instanceof external_kysely_namespaceObject.MssqlDialect) return 'mssql';
1497
+ }
1498
+ if ('aggregate' in db) return 'sqlite';
1499
+ if ('getConnection' in db) return 'mysql';
1500
+ if ('connect' in db) return 'postgres';
1501
+ return null;
1502
+ }
1503
+ const createKyselyAdapter = async (config)=>{
1504
+ const db = config.database;
1505
+ if (!db) return {
1506
+ kysely: null,
1507
+ databaseType: null
1508
+ };
1509
+ if ('db' in db) {
1510
+ const kyselyConfig = db;
1511
+ return {
1512
+ kysely: kyselyConfig.db,
1513
+ databaseType: kyselyConfig.type
1514
+ };
1515
+ }
1516
+ if ('dialect' in db) {
1517
+ const dialectConfig = db;
1518
+ return {
1519
+ kysely: new external_kysely_namespaceObject.Kysely({
1520
+ dialect: dialectConfig.dialect
1521
+ }),
1522
+ databaseType: dialectConfig.type
1523
+ };
1524
+ }
1525
+ let dialect;
1526
+ const databaseType = dialect_getDatabaseType(db);
1527
+ if ('createDriver' in db) dialect = db;
1528
+ if ('aggregate' in db) dialect = new external_kysely_namespaceObject.SqliteDialect({
1529
+ database: db
1530
+ });
1531
+ if ('getConnection' in db) dialect = new external_kysely_namespaceObject.MysqlDialect({
1532
+ pool: db
1533
+ });
1534
+ if ('connect' in db) dialect = new external_kysely_namespaceObject.PostgresDialect({
1535
+ pool: db
1536
+ });
1537
+ return {
1538
+ kysely: dialect ? new external_kysely_namespaceObject.Kysely({
1539
+ dialect
1540
+ }) : null,
1541
+ databaseType
1542
+ };
1543
+ };
1544
+ const postgresMap = {
1545
+ string: [
1546
+ 'character varying',
1547
+ 'text'
1548
+ ],
1549
+ number: [
1550
+ 'int4',
1551
+ 'integer',
1552
+ 'bigint',
1553
+ 'smallint',
1554
+ 'numeric',
1555
+ 'real',
1556
+ 'double precision'
1557
+ ],
1558
+ boolean: [
1559
+ 'bool',
1560
+ 'boolean'
1561
+ ],
1562
+ date: [
1563
+ 'timestamp',
1564
+ 'date'
1565
+ ],
1566
+ json: [
1567
+ 'json',
1568
+ 'jsonb'
1569
+ ],
1570
+ timezone: [
1571
+ 'text',
1572
+ 'character varying'
1573
+ ]
1574
+ };
1575
+ const mysqlMap = {
1576
+ string: [
1577
+ 'varchar(255)',
1578
+ 'varchar(36)',
1579
+ 'text'
1580
+ ],
1581
+ number: [
1582
+ 'integer',
1583
+ 'int',
1584
+ 'bigint',
1585
+ 'smallint',
1586
+ 'decimal',
1587
+ 'float',
1588
+ 'double'
1589
+ ],
1590
+ boolean: [
1591
+ 'boolean',
1592
+ 'tinyint'
1593
+ ],
1594
+ date: [
1595
+ 'timestamp',
1596
+ 'datetime',
1597
+ 'date'
1598
+ ],
1599
+ json: [
1600
+ 'json'
1601
+ ],
1602
+ timezone: [
1603
+ 'varchar(50)'
1604
+ ]
1605
+ };
1606
+ const sqliteMap = {
1607
+ string: [
1608
+ 'TEXT'
1609
+ ],
1610
+ number: [
1611
+ 'INTEGER',
1612
+ 'REAL'
1613
+ ],
1614
+ boolean: [
1615
+ 'INTEGER',
1616
+ 'BOOLEAN'
1617
+ ],
1618
+ date: [
1619
+ 'DATE',
1620
+ 'INTEGER'
1621
+ ],
1622
+ json: [
1623
+ 'TEXT'
1624
+ ],
1625
+ timezone: [
1626
+ 'TEXT'
1627
+ ]
1628
+ };
1629
+ const mssqlMap = {
1630
+ string: [
1631
+ 'text',
1632
+ 'varchar'
1633
+ ],
1634
+ number: [
1635
+ 'int',
1636
+ 'bigint',
1637
+ 'smallint',
1638
+ 'decimal',
1639
+ 'float(53)',
1640
+ 'float(24)'
1641
+ ],
1642
+ boolean: [
1643
+ 'bit',
1644
+ 'smallint'
1645
+ ],
1646
+ date: [
1647
+ 'datetime',
1648
+ 'date'
1649
+ ],
1650
+ json: [
1651
+ 'nvarchar(max)'
1652
+ ],
1653
+ timezone: [
1654
+ 'varchar',
1655
+ 'text'
1656
+ ]
1657
+ };
1658
+ const map = {
1659
+ postgres: postgresMap,
1660
+ mysql: mysqlMap,
1661
+ sqlite: sqliteMap,
1662
+ mssql: mssqlMap
1663
+ };
1664
+ function getMySqlStringType(field) {
1665
+ if (field.unique) return 'varchar(255)';
1666
+ if (field.references) return 'varchar(36)';
1667
+ return 'text';
1668
+ }
1669
+ function matchType(columnDataType, fieldType, dbType) {
1670
+ if ('string[]' === fieldType || 'number[]' === fieldType) return columnDataType.toLowerCase().includes('json');
1671
+ const types = map[dbType];
1672
+ const type = Array.isArray(fieldType) ? types.string.map((t)=>t.toLowerCase()) : types[fieldType].map((t)=>t.toLowerCase());
1673
+ const matches = type.includes(columnDataType.toLowerCase());
1674
+ return matches;
1675
+ }
1676
+ function getType(field, dbType = 'sqlite') {
1677
+ const type = field.type;
1678
+ const typeMap = {
1679
+ string: {
1680
+ sqlite: 'text',
1681
+ postgres: 'text',
1682
+ mysql: getMySqlStringType(field),
1683
+ mssql: getMySqlStringType(field)
1684
+ },
1685
+ boolean: {
1686
+ sqlite: 'integer',
1687
+ postgres: 'boolean',
1688
+ mysql: 'boolean',
1689
+ mssql: 'smallint'
1690
+ },
1691
+ number: {
1692
+ sqlite: field.bigint ? 'bigint' : 'integer',
1693
+ postgres: field.bigint ? 'bigint' : 'integer',
1694
+ mysql: field.bigint ? 'bigint' : 'integer',
1695
+ mssql: field.bigint ? 'bigint' : 'integer'
1696
+ },
1697
+ date: {
1698
+ sqlite: 'date',
1699
+ postgres: 'timestamp',
1700
+ mysql: 'datetime',
1701
+ mssql: 'datetime'
1702
+ },
1703
+ timezone: {
1704
+ sqlite: 'text',
1705
+ postgres: 'text',
1706
+ mysql: 'varchar(50)',
1707
+ mssql: 'nvarchar(50)'
1708
+ },
1709
+ json: {
1710
+ sqlite: 'text',
1711
+ postgres: 'jsonb',
1712
+ mysql: 'json',
1713
+ mssql: 'nvarchar(max)'
1714
+ }
1715
+ };
1716
+ if ('sqlite' === dbType && ('string[]' === type || 'number[]' === type)) return 'text';
1717
+ if ('string[]' === type || 'number[]' === type) switch(dbType){
1718
+ case 'postgres':
1719
+ return 'jsonb';
1720
+ case 'mysql':
1721
+ case 'mssql':
1722
+ return 'json';
1723
+ default:
1724
+ return 'text';
1725
+ }
1726
+ if ('json' === type) return typeMap.json[dbType];
1727
+ return typeMap[type][dbType];
1728
+ }
1729
+ function buildColumnAddMigrations(db, toBeAdded, dbType) {
1730
+ const migrations = [];
1731
+ for (const table of toBeAdded)for (const [fieldName, field] of Object.entries(table.fields)){
1732
+ const type = getType(field, dbType);
1733
+ const exec = db.schema.alterTable(table.table).addColumn(fieldName, type, (col)=>{
1734
+ let column = false !== field.required ? col.notNull() : col;
1735
+ if (field.references) column = column.references(`${field.references.model}.${field.references.field}`);
1736
+ if (field.unique) column = column.unique();
1737
+ return column;
1738
+ });
1739
+ migrations.push(exec);
1740
+ }
1741
+ return migrations;
1742
+ }
1743
+ function buildTableCreateMigrations(db, toBeCreated, dbType) {
1744
+ const logger = createLogger();
1745
+ const migrations = [];
1746
+ for (const table of toBeCreated){
1747
+ const fieldNames = Object.keys(table.fields);
1748
+ logger.info(`Creating table ${table.table} with fields: ${fieldNames.join(', ')}`);
1749
+ if (fieldNames.includes('id')) logger.warn(`⚠️ Table ${table.table} already has an explicit 'id' field, which may conflict with the auto-generated primary key`);
1750
+ for (const [fieldName, field] of Object.entries(table.fields))if ('id' === field.fieldName && 'id' !== fieldName) logger.error(`❌ ERROR: Table ${table.table} has field '${fieldName}' with fieldName 'id' - this will cause a duplicate column error`);
1751
+ let dbT = db.schema.createTable(table.table).addColumn('id', 'mysql' === dbType || 'mssql' === dbType ? 'varchar(36)' : 'text', (col)=>col.primaryKey().notNull());
1752
+ for (const [fieldName, field] of Object.entries(table.fields)){
1753
+ const type = getType(field, dbType);
1754
+ logger.info(`Adding column ${fieldName} (fieldName: ${field.fieldName || fieldName}) to table ${table.table}`);
1755
+ dbT = dbT.addColumn(fieldName, type, (col)=>{
1756
+ let column = false !== field.required ? col.notNull() : col;
1757
+ if (field.references) column = column.references(`${field.references.model}.${field.references.field}`);
1758
+ if (field.unique) column = column.unique();
1759
+ return column;
1760
+ });
1761
+ }
1762
+ const sqlDebug = dbT.compile().sql;
1763
+ logger.info(`SQL for table ${table.table}:\n${sqlDebug}`);
1764
+ migrations.push(dbT);
1765
+ }
1766
+ return migrations;
1767
+ }
1768
+ function createMigrationExecutors(migrations) {
1769
+ const logger = createLogger();
1770
+ async function runMigrations() {
1771
+ for (const migration of migrations)try {
1772
+ await migration.execute();
1773
+ } catch (error) {
1774
+ const sql = migration.compile().sql;
1775
+ logger.error(`Migration failed! SQL:\n${sql}`);
1776
+ throw error;
1777
+ }
1778
+ }
1779
+ async function compileMigrations() {
1780
+ const compiled = migrations.map((m)=>m.compile().sql);
1781
+ return `${compiled.join(';\n\n')};`;
1782
+ }
1783
+ return {
1784
+ runMigrations,
1785
+ compileMigrations
1786
+ };
1787
+ }
1788
+ function applyDefaultValue(inputValue, field, operation) {
1789
+ if ('update' === operation) return inputValue;
1790
+ if (null == inputValue && field.defaultValue) {
1791
+ if ('function' == typeof field.defaultValue) return field.defaultValue();
1792
+ return field.defaultValue;
1793
+ }
1794
+ return inputValue;
1795
+ }
1796
+ const createEntityTransformer = (db, options, config)=>{
1797
+ const schema = getConsentTables(options);
1798
+ function getField(model, field) {
1799
+ if ('id' === field) return field;
1800
+ const modelFields = schema[model]?.fields;
1801
+ const f = modelFields ? modelFields[field] : void 0;
1802
+ if (!f) console.log('Field not found', model, field);
1803
+ return f?.fieldName || field;
1804
+ }
1805
+ function transformValueToDB(value, model, field) {
1806
+ if ('id' === field) return value;
1807
+ const { type = 'sqlite' } = config || {};
1808
+ const modelFields = schema[model]?.fields;
1809
+ const f = modelFields ? modelFields[field] : void 0;
1810
+ if (f?.type === 'boolean' && ('sqlite' === type || 'mssql' === type) && null != value) return value ? 1 : 0;
1811
+ if (f?.type === 'date' && value && value instanceof Date) return 'sqlite' === type ? value.toISOString() : value;
1812
+ if (f?.type === 'json' && null != value) {
1813
+ if ('postgres' === type || 'mysql' === type) return value;
1814
+ return external_superjson_default().stringify(value);
1815
+ }
1816
+ return value;
1817
+ }
1818
+ function transformValueFromDB(value, model, field) {
1819
+ const { type = 'sqlite' } = config || {};
1820
+ const modelFields = schema[model]?.fields;
1821
+ const f = modelFields ? modelFields[field] : void 0;
1822
+ if (f?.type === 'boolean' && ('sqlite' === type || 'mssql' === type) && null !== value) return 1 === value;
1823
+ if (f?.type === 'date' && value) return new Date(value);
1824
+ if (f?.type === 'json' && null != value) {
1825
+ if (('postgres' === type || 'mysql' === type) && 'object' == typeof value) return value;
1826
+ if ('string' == typeof value) try {
1827
+ return external_superjson_default().parse(value);
1828
+ } catch {
1829
+ try {
1830
+ return JSON.parse(value);
1831
+ } catch {}
1832
+ }
1833
+ }
1834
+ return value;
1835
+ }
1836
+ function getEntityName(model) {
1837
+ return schema[model].entityName;
1838
+ }
1839
+ return {
1840
+ transformInput (data, model, action) {
1841
+ const transformedData = {};
1842
+ if ('create' === action) transformedData.id = data.id || (options.advanced?.generateId ? options.advanced.generateId({
1843
+ model
1844
+ }) : generateId(schema[model].entityPrefix));
1845
+ const fields = schema[model].fields;
1846
+ for(const field in fields)if (Object.hasOwn(fields, field)) {
1847
+ const value = data[field];
1848
+ const fieldInfo = fields[field];
1849
+ const fieldName = fieldInfo?.fieldName || field;
1850
+ if (fieldInfo) transformedData[fieldName] = applyDefaultValue(transformValueToDB(value, model, field), fieldInfo, action);
1851
+ }
1852
+ return transformedData;
1853
+ },
1854
+ transformOutput (data, model, select = []) {
1855
+ if (!data) return null;
1856
+ const transformedData = {};
1857
+ if (data.id && (0 === select.length || select.includes('id'))) transformedData.id = data.id;
1858
+ const tableSchema = schema[model]?.fields;
1859
+ for(const key in tableSchema){
1860
+ if (select.length && !select.includes(key)) continue;
1861
+ const field = tableSchema[key];
1862
+ if (field) transformedData[key] = transformValueFromDB(data[field.fieldName || key], model, key);
1863
+ }
1864
+ return transformedData;
1865
+ },
1866
+ convertWhereClause (model, whereConditions) {
1867
+ if (!whereConditions || 0 === whereConditions.length) return {
1868
+ and: null,
1869
+ or: null
1870
+ };
1871
+ const conditions = {
1872
+ and: [],
1873
+ or: []
1874
+ };
1875
+ for (const condition of whereConditions){
1876
+ let { field: _field, value, operator = '=', connector = 'AND' } = condition;
1877
+ const fieldString = getField(model, _field);
1878
+ value = transformValueToDB(value, model, _field);
1879
+ const expr = (eb)=>{
1880
+ const dbField = fieldString;
1881
+ if ('in' === operator.toLowerCase()) return eb(dbField, 'in', Array.isArray(value) ? value : [
1882
+ value
1883
+ ]);
1884
+ if ('contains' === operator) return eb(dbField, 'like', `%${value}%`);
1885
+ if ('starts_with' === operator) return eb(dbField, 'like', `${value}%`);
1886
+ if ('ends_with' === operator) return eb(dbField, 'like', `%${value}`);
1887
+ if ('ilike' === operator) {
1888
+ const lowerField = eb.fn('lower', [
1889
+ dbField
1890
+ ]);
1891
+ const lowerValue = eb.fn('lower', [
1892
+ eb.val(value?.toString())
1893
+ ]);
1894
+ return eb(lowerField, 'like', lowerValue);
1895
+ }
1896
+ if ('eq' === operator) return eb(dbField, '=', value);
1897
+ if ('ne' === operator) return eb(dbField, '<>', value);
1898
+ if ('gt' === operator) return eb(dbField, '>', value);
1899
+ if ('gte' === operator) return eb(dbField, '>=', value);
1900
+ if ('lt' === operator) return eb(dbField, '<', value);
1901
+ if ('lte' === operator) return eb(dbField, '<=', value);
1902
+ return eb(dbField, operator, value);
1903
+ };
1904
+ if ('OR' === connector) conditions.or.push(expr);
1905
+ else conditions.and.push(expr);
1906
+ }
1907
+ return {
1908
+ and: conditions.and.length ? conditions.and : null,
1909
+ or: conditions.or.length ? conditions.or : null
1910
+ };
1911
+ },
1912
+ async withReturning (values, builder, model, where) {
1913
+ let res = null;
1914
+ if (config?.type === 'mysql') {
1915
+ await builder.execute();
1916
+ const whereCondition = where[0];
1917
+ const field = values.id ? 'id' : whereCondition?.field ?? 'id';
1918
+ const value = values[field] ?? whereCondition?.value;
1919
+ const fieldString = getField(model, field);
1920
+ res = await db.selectFrom(getEntityName(model)).selectAll().where((eb)=>eb(fieldString, '=', value)).executeTakeFirst();
1921
+ return res;
1922
+ }
1923
+ if (config?.type === 'mssql') {
1924
+ res = await builder.outputAll('inserted').executeTakeFirst();
1925
+ return res;
1926
+ }
1927
+ res = await builder.returningAll().executeTakeFirst();
1928
+ return res;
1929
+ },
1930
+ getEntityName,
1931
+ getField
1932
+ };
1933
+ };
1934
+ const kyselyAdapter = (db, config)=>(opts)=>{
1935
+ const { transformInput, withReturning, transformOutput, convertWhereClause, getEntityName, getField } = createEntityTransformer(db, opts, config);
1936
+ return {
1937
+ id: 'kysely',
1938
+ async create (data) {
1939
+ const { model, data: values, select } = data;
1940
+ const transformed = transformInput(values, model, 'create');
1941
+ const tableName = getEntityName(model);
1942
+ const builder = db.insertInto(tableName).values(transformed);
1943
+ const result = await withReturning(transformed, builder, model, []);
1944
+ const output = transformOutput(result, model, select);
1945
+ return output;
1946
+ },
1947
+ async findOne (data) {
1948
+ const { model, where, select } = data;
1949
+ const whereArray = Array.isArray(where) ? where : [
1950
+ where
1951
+ ];
1952
+ const { and, or } = convertWhereClause(model, whereArray);
1953
+ const tableName = getEntityName(model);
1954
+ let query = db.selectFrom(tableName).selectAll();
1955
+ if (and) query = query.where((eb)=>{
1956
+ const conditions = and.map((expr)=>expr(eb));
1957
+ return eb.and(conditions);
1958
+ });
1959
+ if (or) query = query.where((eb)=>{
1960
+ const conditions = or.map((expr)=>expr(eb));
1961
+ return eb.or(conditions);
1962
+ });
1963
+ const res = await query.executeTakeFirst();
1964
+ if (!res) return null;
1965
+ return transformOutput(res, model, select);
1966
+ },
1967
+ async findMany (data) {
1968
+ const { model, where, limit, offset, sortBy } = data;
1969
+ const whereArray = where ? Array.isArray(where) ? where : [
1970
+ where
1971
+ ] : void 0;
1972
+ const { and, or } = convertWhereClause(model, whereArray);
1973
+ const tableName = getEntityName(model);
1974
+ let query = db.selectFrom(tableName);
1975
+ if (and) query = query.where((eb)=>{
1976
+ const conditions = and.map((expr)=>expr(eb));
1977
+ return eb.and(conditions);
1978
+ });
1979
+ if (or) query = query.where((eb)=>{
1980
+ const conditions = or.map((expr)=>expr(eb));
1981
+ return eb.or(conditions);
1982
+ });
1983
+ if (config?.type === 'mssql') {
1984
+ if (!offset) query = query.top(limit || 100);
1985
+ } else query = query.limit(limit || 100);
1986
+ if (sortBy) {
1987
+ const sortFieldString = getField(model, sortBy.field);
1988
+ query = query.orderBy(sortFieldString, sortBy.direction);
1989
+ }
1990
+ if (offset) {
1991
+ if (config?.type === 'mssql') {
1992
+ if (!sortBy) query = query.orderBy('id');
1993
+ query = query.offset(offset).fetch(limit || 100);
1994
+ } else query = query.offset(offset);
1995
+ }
1996
+ const res = await query.selectAll().execute();
1997
+ if (!res) return [];
1998
+ return res.map((r)=>transformOutput(r, model));
1999
+ },
2000
+ async update (data) {
2001
+ const { model, where, update: values } = data;
2002
+ const whereArray = Array.isArray(where) ? where : [
2003
+ where
2004
+ ];
2005
+ const { and, or } = convertWhereClause(model, whereArray);
2006
+ const transformedData = transformInput(values, model, 'update');
2007
+ const tableName = getEntityName(model);
2008
+ let query = db.updateTable(tableName).set(transformedData);
2009
+ if (and) query = query.where((eb)=>{
2010
+ const conditions = and.map((expr)=>expr(eb));
2011
+ return eb.and(conditions);
2012
+ });
2013
+ if (or) query = query.where((eb)=>{
2014
+ const conditions = or.map((expr)=>expr(eb));
2015
+ return eb.or(conditions);
2016
+ });
2017
+ const result = await withReturning(transformedData, query, model, whereArray);
2018
+ return transformOutput(result, model);
2019
+ },
2020
+ async updateMany (data) {
2021
+ const { model, where, update: values } = data;
2022
+ const whereArray = Array.isArray(where) ? where : [
2023
+ where
2024
+ ];
2025
+ const { and, or } = convertWhereClause(model, whereArray);
2026
+ const transformedData = transformInput(values, model, 'update');
2027
+ const tableName = getEntityName(model);
2028
+ let query = db.updateTable(tableName).set(transformedData);
2029
+ if (and) query = query.where((eb)=>{
2030
+ const conditions = and.map((expr)=>expr(eb));
2031
+ return eb.and(conditions);
2032
+ });
2033
+ if (or) query = query.where((eb)=>{
2034
+ const conditions = or.map((expr)=>expr(eb));
2035
+ return eb.or(conditions);
2036
+ });
2037
+ await query.execute();
2038
+ let selectQuery = db.selectFrom(tableName).selectAll();
2039
+ if (and) selectQuery = selectQuery.where((eb)=>{
2040
+ const conditions = and.map((expr)=>expr(eb));
2041
+ return eb.and(conditions);
2042
+ });
2043
+ if (or) selectQuery = selectQuery.where((eb)=>{
2044
+ const conditions = or.map((expr)=>expr(eb));
2045
+ return eb.or(conditions);
2046
+ });
2047
+ const fetchedResults = await selectQuery.execute();
2048
+ if (!fetchedResults || 0 === fetchedResults.length) return [];
2049
+ return fetchedResults.map((record)=>transformOutput(record, model));
2050
+ },
2051
+ async count (data) {
2052
+ const { model, where } = data;
2053
+ const whereArray = where ? Array.isArray(where) ? where : [
2054
+ where
2055
+ ] : void 0;
2056
+ const { and, or } = convertWhereClause(model, whereArray);
2057
+ const tableName = getEntityName(model);
2058
+ let query = db.selectFrom(tableName).select((eb)=>eb.fn.count('id').as('count'));
2059
+ if (and) query = query.where((eb)=>{
2060
+ const conditions = and.map((expr)=>expr(eb));
2061
+ return eb.and(conditions);
2062
+ });
2063
+ if (or) query = query.where((eb)=>{
2064
+ const conditions = or.map((expr)=>expr(eb));
2065
+ return eb.or(conditions);
2066
+ });
2067
+ const res = await query.execute();
2068
+ const count = res[0]?.count;
2069
+ return 'number' == typeof count ? count : 0;
2070
+ },
2071
+ async delete (data) {
2072
+ const { model, where } = data;
2073
+ const whereArray = Array.isArray(where) ? where : [
2074
+ where
2075
+ ];
2076
+ const { and, or } = convertWhereClause(model, whereArray);
2077
+ const tableName = getEntityName(model);
2078
+ let query = db.deleteFrom(tableName);
2079
+ if (and) query = query.where((eb)=>{
2080
+ const conditions = and.map((expr)=>expr(eb));
2081
+ return eb.and(conditions);
2082
+ });
2083
+ if (or) query = query.where((eb)=>{
2084
+ const conditions = or.map((expr)=>expr(eb));
2085
+ return eb.or(conditions);
2086
+ });
2087
+ await query.execute();
2088
+ },
2089
+ async deleteMany (data) {
2090
+ const { model, where } = data;
2091
+ const whereArray = Array.isArray(where) ? where : [
2092
+ where
2093
+ ];
2094
+ const { and, or } = convertWhereClause(model, whereArray);
2095
+ const tableName = getEntityName(model);
2096
+ let query = db.deleteFrom(tableName);
2097
+ if (and) query = query.where((eb)=>{
2098
+ const conditions = and.map((expr)=>expr(eb));
2099
+ return eb.and(conditions);
2100
+ });
2101
+ if (or) query = query.where((eb)=>{
2102
+ const conditions = or.map((expr)=>expr(eb));
2103
+ return eb.or(conditions);
2104
+ });
2105
+ const result = await query.execute();
2106
+ const count = result.length;
2107
+ return count;
2108
+ },
2109
+ async transaction (data) {
2110
+ const { callback } = data;
2111
+ if (opts.advanced?.disableTransactions) {
2112
+ const regularAdapter = kyselyAdapter(db, config)(opts);
2113
+ return await callback(regularAdapter);
2114
+ }
2115
+ try {
2116
+ return await db.transaction().execute(async (trx)=>{
2117
+ const transactionAdapter = kyselyAdapter(trx, config)(opts);
2118
+ return await callback(transactionAdapter);
2119
+ });
2120
+ } catch (error) {
2121
+ if (error instanceof Error && (error.message.includes('transactions are not supported') || error.message.toLowerCase().includes('no transaction support'))) {
2122
+ console.warn("Warning: Database transaction failed. If your database does not support transactions, you can disable this warning by setting opts.advanced.disableTransactions to true.");
2123
+ const regularAdapter = kyselyAdapter(db, config)(opts);
2124
+ return await callback(regularAdapter);
2125
+ }
2126
+ throw error;
2127
+ }
2128
+ },
2129
+ options: config
2130
+ };
2131
+ };
2132
+ const memory_adapter_createEntityTransformer = (options)=>{
2133
+ const schema = getConsentTables(options);
2134
+ function getField(model, field) {
2135
+ if ('id' === field) return field;
2136
+ const modelFields = schema[model]?.fields;
2137
+ const f = modelFields ? modelFields[field] : void 0;
2138
+ return f?.fieldName || field;
2139
+ }
2140
+ return {
2141
+ transformInput (data, model, action) {
2142
+ const transformedData = 'update' === action ? {} : {
2143
+ id: options.advanced?.generateId ? options.advanced.generateId({
2144
+ model
2145
+ }) : data.id || generateId(schema[model].entityPrefix)
2146
+ };
2147
+ const fields = schema[model].fields;
2148
+ for(const field in fields)if (Object.hasOwn(fields, field)) {
2149
+ const value = data[field];
2150
+ const fieldInfo = fields[field];
2151
+ if (void 0 === value && !fieldInfo?.defaultValue) continue;
2152
+ const fieldName = fieldInfo?.fieldName || field;
2153
+ transformedData[fieldName] = applyDefaultValue(value, fieldInfo, action);
2154
+ }
2155
+ return transformedData;
2156
+ },
2157
+ transformOutput (data, model, select = []) {
2158
+ if (!data) return null;
2159
+ const transformedData = {};
2160
+ const hasId = data.id || data._id;
2161
+ if (hasId && (0 === select.length || select.includes('id'))) transformedData.id = data.id;
2162
+ const tableSchema = schema[model].fields;
2163
+ for(const key in tableSchema){
2164
+ if (select.length && !select.includes(key)) continue;
2165
+ const field = tableSchema[key];
2166
+ if (field) transformedData[key] = data[field.fieldName || key];
2167
+ }
2168
+ return transformedData;
2169
+ },
2170
+ convertWhereClause (where, table, model) {
2171
+ return table.filter((record)=>where.every((clause)=>{
2172
+ const { field: _field, value, operator = '=' } = clause;
2173
+ const field = getField(model, _field);
2174
+ if ('in' === operator) {
2175
+ if (!Array.isArray(value)) throw new Error('Value must be an array');
2176
+ return value.includes(record[field]);
2177
+ }
2178
+ if ('contains' === operator) {
2179
+ const fieldValue = record[field];
2180
+ return 'string' == typeof fieldValue && fieldValue.includes(value);
2181
+ }
2182
+ if ('starts_with' === operator) {
2183
+ const fieldValue = record[field];
2184
+ return 'string' == typeof fieldValue && fieldValue.startsWith(value);
2185
+ }
2186
+ if ('ends_with' === operator) {
2187
+ const fieldValue = record[field];
2188
+ return 'string' == typeof fieldValue && fieldValue.endsWith(value);
2189
+ }
2190
+ if ('eq' === operator) return record[field] === value;
2191
+ if ('ne' === operator) return record[field] !== value;
2192
+ return record[field] === value;
2193
+ }));
2194
+ },
2195
+ getField
2196
+ };
2197
+ };
2198
+ const memoryAdapter = (db)=>(options)=>{
2199
+ const { transformInput, transformOutput, convertWhereClause, getField } = memory_adapter_createEntityTransformer(options);
2200
+ return {
2201
+ id: 'memory',
2202
+ async create (data) {
2203
+ const { model, data: values, select } = data;
2204
+ const transformed = transformInput(values, model, 'create');
2205
+ if (!db[model]) db[model] = [];
2206
+ db[model].push(transformed);
2207
+ return transformOutput(transformed, model, select);
2208
+ },
2209
+ async findOne (data) {
2210
+ const { model, where, select } = data;
2211
+ const table = db[model] || [];
2212
+ const whereArray = Array.isArray(where) ? where : [
2213
+ where
2214
+ ];
2215
+ const res = convertWhereClause(whereArray, table, model);
2216
+ const record = res[0] || null;
2217
+ return transformOutput(record, model, select);
2218
+ },
2219
+ async findMany (data) {
2220
+ const { model, where, sortBy, limit, offset } = data;
2221
+ let table = db[model] || [];
2222
+ if (where) {
2223
+ const whereArray = Array.isArray(where) ? where : [
2224
+ where
2225
+ ];
2226
+ table = convertWhereClause(whereArray, table, model);
2227
+ }
2228
+ if (sortBy) {
2229
+ const field = getField(model, sortBy.field);
2230
+ table = [
2231
+ ...table
2232
+ ].sort((a, b)=>{
2233
+ if ('asc' === sortBy.direction) return a[field] > b[field] ? 1 : -1;
2234
+ return a[field] < b[field] ? 1 : -1;
2235
+ });
2236
+ }
2237
+ let result = table;
2238
+ if (void 0 !== offset) result = result.slice(offset);
2239
+ if (void 0 !== limit) result = result.slice(0, limit);
2240
+ return result.map((record)=>transformOutput(record, model));
2241
+ },
2242
+ async count (data) {
2243
+ const { model, where } = data;
2244
+ const table = db[model] || [];
2245
+ if (!where) return table.length;
2246
+ const whereArray = Array.isArray(where) ? where : [
2247
+ where
2248
+ ];
2249
+ const filtered = convertWhereClause(whereArray, table, model);
2250
+ return filtered.length;
2251
+ },
2252
+ async update (data) {
2253
+ const { model, where, update: values } = data;
2254
+ const table = db[model] || [];
2255
+ const whereArray = Array.isArray(where) ? where : [
2256
+ where
2257
+ ];
2258
+ const res = convertWhereClause(whereArray, table, model);
2259
+ for (const record of res)Object.assign(record, transformInput(values, model, 'update'));
2260
+ return transformOutput(res[0] || null, model);
2261
+ },
2262
+ async updateMany (data) {
2263
+ const { model, where, update: values } = data;
2264
+ const table = db[model] || [];
2265
+ const whereArray = Array.isArray(where) ? where : [
2266
+ where
2267
+ ];
2268
+ const res = convertWhereClause(whereArray, table, model);
2269
+ for (const record of res)Object.assign(record, transformInput(values, model, 'update'));
2270
+ return res.map((record)=>transformOutput(record, model));
2271
+ },
2272
+ async delete (data) {
2273
+ const { model, where } = data;
2274
+ const table = db[model] || [];
2275
+ const whereArray = Array.isArray(where) ? where : [
2276
+ where
2277
+ ];
2278
+ const res = convertWhereClause(whereArray, table, model);
2279
+ db[model] = table.filter((record)=>!res.includes(record));
2280
+ },
2281
+ async deleteMany (data) {
2282
+ const { model, where } = data;
2283
+ const table = db[model] || [];
2284
+ const whereArray = Array.isArray(where) ? where : [
2285
+ where
2286
+ ];
2287
+ const res = convertWhereClause(whereArray, table, model);
2288
+ let count = 0;
2289
+ db[model] = table.filter((record)=>{
2290
+ if (res.includes(record)) {
2291
+ count++;
2292
+ return false;
2293
+ }
2294
+ return true;
2295
+ });
2296
+ return count;
2297
+ },
2298
+ async transaction (data) {
2299
+ const { callback } = data;
2300
+ const tempDb = {};
2301
+ for(const key in db)if (Object.hasOwn(db, key)) tempDb[key] = JSON.parse(JSON.stringify(db[key]));
2302
+ const transactionAdapter = memoryAdapter(tempDb)(options);
2303
+ const result = await callback(transactionAdapter);
2304
+ for(const key in tempDb)if (Object.hasOwn(tempDb, key)) db[key] = tempDb[key];
2305
+ return result;
2306
+ }
2307
+ };
2308
+ };
2309
+ async function getAdapter(options) {
2310
+ const logger = createLogger();
2311
+ if (!options.database) {
2312
+ const tables = getConsentTables(options);
2313
+ const memoryDB = Object.keys(tables).reduce((acc, key)=>{
2314
+ acc[key] = [];
2315
+ return acc;
2316
+ }, {});
2317
+ logger.warn('No database configuration provided. Using memory adapter in development');
2318
+ return memoryAdapter(memoryDB)(options);
2319
+ }
2320
+ if ('function' == typeof options.database) return options.database(options);
2321
+ const { kysely, databaseType } = await createKyselyAdapter(options);
2322
+ if (!kysely) throw new error_C15TError('Failed to initialize database adapter', {
2323
+ code: codes_BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
2324
+ status: 500
2325
+ });
2326
+ return kyselyAdapter(kysely, {
2327
+ type: databaseType || 'sqlite'
2328
+ })(options);
2329
+ }
2330
+ function getSchema(config) {
2331
+ const entities = getConsentTables(config);
2332
+ const schema = {};
2333
+ for (const [key, entity] of Object.entries(entities)){
2334
+ if (!entity) continue;
2335
+ const fields = entity.fields || {};
2336
+ const processedFields = {};
2337
+ for (const [fieldKey, field] of Object.entries(fields)){
2338
+ if (!field) continue;
2339
+ const fieldName = field.fieldName || fieldKey;
2340
+ const typedField = field;
2341
+ processedFields[fieldName] = typedField;
2342
+ if (typedField && 'references' in typedField && typedField.references) {
2343
+ const entityName = typedField.references.model;
2344
+ const referencedEntity = entities[entityName];
2345
+ if (referencedEntity) processedFields[fieldName] = {
2346
+ ...typedField,
2347
+ references: {
2348
+ model: referencedEntity.entityName,
2349
+ entity: referencedEntity.entityName,
2350
+ field: typedField.references.field,
2351
+ onDelete: typedField.references.onDelete
2352
+ }
2353
+ };
2354
+ }
2355
+ }
2356
+ const entityName = entity.entityName || key;
2357
+ if (entityName in schema) {
2358
+ const existingEntry = schema[entityName];
2359
+ schema[entityName] = {
2360
+ ...existingEntry,
2361
+ order: existingEntry?.order ?? Number.POSITIVE_INFINITY,
2362
+ fields: {
2363
+ ...existingEntry?.fields,
2364
+ ...processedFields
2365
+ }
2366
+ };
2367
+ } else schema[entityName] = {
2368
+ fields: processedFields,
2369
+ order: entity.order ?? Number.POSITIVE_INFINITY
2370
+ };
2371
+ }
2372
+ return schema;
2373
+ }
2374
+ function analyzeSchemaChanges(config, tableMetadata, dbType) {
2375
+ const betterAuthSchema = getSchema(config);
2376
+ const logger = createLogger(config.logger);
2377
+ const toBeCreated = [];
2378
+ const toBeAdded = [];
2379
+ for (const [key, value] of Object.entries(betterAuthSchema)){
2380
+ const table = tableMetadata.find((t)=>t.name === key);
2381
+ if (!table) {
2382
+ handleNewTable(key, value, toBeCreated);
2383
+ continue;
2384
+ }
2385
+ handleExistingTable(key, value, table, toBeAdded, dbType, logger);
2386
+ }
2387
+ return {
2388
+ toBeCreated,
2389
+ toBeAdded
2390
+ };
2391
+ }
2392
+ function handleNewTable(tableName, value, toBeCreated) {
2393
+ const tIndex = toBeCreated.findIndex((t)=>t.table === tableName);
2394
+ const tableData = {
2395
+ table: tableName,
2396
+ fields: value.fields,
2397
+ order: value.order || Number.POSITIVE_INFINITY
2398
+ };
2399
+ const insertIndex = toBeCreated.findIndex((t)=>(t.order || Number.POSITIVE_INFINITY) > tableData.order);
2400
+ if (-1 === insertIndex) {
2401
+ if (-1 === tIndex) toBeCreated.push(tableData);
2402
+ else {
2403
+ const existingTable = toBeCreated[tIndex];
2404
+ if (existingTable) existingTable.fields = {
2405
+ ...existingTable.fields,
2406
+ ...value.fields
2407
+ };
2408
+ }
2409
+ } else toBeCreated.splice(insertIndex, 0, tableData);
2410
+ }
2411
+ function handleExistingTable(tableName, value, table, toBeAdded, dbType, logger) {
2412
+ const toBeAddedFields = {};
2413
+ for (const [fieldName, field] of Object.entries(value.fields)){
2414
+ const column = table.columns.find((c)=>c.name === fieldName);
2415
+ if (!column) {
2416
+ toBeAddedFields[fieldName] = field;
2417
+ continue;
2418
+ }
2419
+ if (!matchType(column.dataType, field.type, dbType)) logger.warn(`Field ${fieldName} in table ${tableName} has a different type in the database. Expected ${field.type} but got ${column.dataType}.`);
2420
+ }
2421
+ if (Object.keys(toBeAddedFields).length > 0) toBeAdded.push({
2422
+ table: tableName,
2423
+ fields: toBeAddedFields,
2424
+ order: value.order || Number.POSITIVE_INFINITY
2425
+ });
2426
+ }
2427
+ async function getMigrations(config) {
2428
+ const logger = createLogger(config.logger);
2429
+ let { kysely: db, databaseType: dbType } = await createKyselyAdapter(config);
2430
+ if (!dbType) {
2431
+ logger.warn('Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this.');
2432
+ dbType = 'sqlite';
2433
+ }
2434
+ if (!db) {
2435
+ logger.error("Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter.");
2436
+ process.exit(1);
2437
+ }
2438
+ const tableMetadata = await db.introspection.getTables();
2439
+ const { toBeCreated, toBeAdded } = analyzeSchemaChanges(config, tableMetadata, dbType);
2440
+ const columnMigrations = buildColumnAddMigrations(db, toBeAdded, dbType);
2441
+ const tableMigrations = buildTableCreateMigrations(db, toBeCreated, dbType);
2442
+ const migrations = [
2443
+ ...columnMigrations,
2444
+ ...tableMigrations
2445
+ ];
2446
+ const { runMigrations, compileMigrations } = createMigrationExecutors(migrations);
2447
+ return {
2448
+ toBeCreated,
2449
+ toBeAdded,
2450
+ runMigrations,
2451
+ compileMigrations
2452
+ };
2453
+ }
2454
+ var __webpack_export_target__ = exports;
2455
+ for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
2456
+ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
2457
+ value: true
2458
+ });