@coursebuilder/adapter-drizzle 2.1.1 → 3.0.0-canary.0.1de808999

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 (329) hide show
  1. package/dist/chunk-2CTSX6SR.js +145 -0
  2. package/dist/chunk-2M2XM4EQ.js +397 -0
  3. package/dist/chunk-2TFZWYLS.js +263 -0
  4. package/dist/chunk-3TRWZHL3.js +243 -0
  5. package/dist/chunk-4N2ECEUV.js +69 -0
  6. package/dist/{chunk-F56AI52P.js → chunk-63MYTNFA.js} +3 -3
  7. package/dist/{chunk-SIZFEXIS.js → chunk-6MRFUIH5.js} +2 -2
  8. package/dist/chunk-6WHKVXPL.js +109 -0
  9. package/dist/{chunk-WMCZWSAG.js → chunk-6YPHJWS2.js} +2 -2
  10. package/dist/{chunk-7FBSP3VD.js → chunk-AQKB7NUY.js} +4 -4
  11. package/dist/{chunk-PJORQUQP.js → chunk-BD3J6TQ5.js} +3 -3
  12. package/dist/{chunk-5NNBQJUP.js → chunk-BLDW3QUS.js} +2 -2
  13. package/dist/chunk-CN5LXLHU.js +252 -0
  14. package/dist/{chunk-M3WM5Q7W.js → chunk-CXNZM7MC.js} +3 -3
  15. package/dist/{chunk-DNBW5D64.js → chunk-DKJO4Y3K.js} +2 -2
  16. package/dist/chunk-DXAZKOCF.js +173 -0
  17. package/dist/{chunk-QKFITIXC.js → chunk-EHRARBRS.js} +2 -2
  18. package/dist/{chunk-CCXVDMTA.js → chunk-ET3QAIY7.js} +2 -2
  19. package/dist/chunk-H5REZLWW.js +63 -0
  20. package/dist/chunk-H736K5TN.js +7 -0
  21. package/dist/{chunk-WWBSNLRC.js → chunk-HJNM3PFW.js} +3 -3
  22. package/dist/chunk-JNPUM2MI.js +156 -0
  23. package/dist/{chunk-2I7NIOKI.js → chunk-KPBVZ44W.js} +2 -2
  24. package/dist/{chunk-OUJPUONP.js → chunk-LERR6HQ3.js} +2 -2
  25. package/dist/chunk-LSWGCJWO.js +328 -0
  26. package/dist/{chunk-UWUDJCJM.js → chunk-LZHZDFNZ.js} +2 -2
  27. package/dist/{chunk-PMCOC5PM.js → chunk-MGZMGDQ5.js} +2 -2
  28. package/dist/chunk-MINB3V5K.js +237 -0
  29. package/dist/{chunk-6SJORFGN.js → chunk-MP4CUWYC.js} +2 -2
  30. package/dist/{chunk-EZEQQJNH.js → chunk-MWYKBCT2.js} +3 -3
  31. package/dist/{chunk-SOOAUY4E.js → chunk-OCUEDXGE.js} +3 -3
  32. package/dist/{chunk-OFZECDCQ.js → chunk-ORRM7KVW.js} +2 -2
  33. package/dist/chunk-OWBFASNN.js +18 -0
  34. package/dist/chunk-P6G7UV6U.js +139 -0
  35. package/dist/{chunk-PNPTKVJ4.js → chunk-QGSAYLPA.js} +32 -23
  36. package/dist/chunk-QZ54UPHQ.js +300 -0
  37. package/dist/{chunk-NON5CXDH.js → chunk-RKGBBEVO.js} +2 -2
  38. package/dist/chunk-TCZZ6OTH.js +20 -0
  39. package/dist/{chunk-KIQLUFJX.js → chunk-U3YWHQZO.js} +3 -3
  40. package/dist/chunk-UKCW6T74.js +146 -0
  41. package/dist/chunk-UP5SZ5I4.js +55 -0
  42. package/dist/chunk-W5UWIWMA.js +74 -0
  43. package/dist/{chunk-65H5Y4PD.js → chunk-WJWJ6E5Y.js} +2 -2
  44. package/dist/chunk-WLL6VIPA.js +248 -0
  45. package/dist/chunk-XM6ULED3.js +210 -0
  46. package/dist/{chunk-2AW5KYAK.js → chunk-XYWXGVIK.js} +3 -3
  47. package/dist/{chunk-AP5HBIV4.js → chunk-Y7JBZEE3.js} +3 -3
  48. package/dist/chunk-YQS2KPYC.js +249 -0
  49. package/dist/chunk-ZDYVAW2C.js +133 -0
  50. package/dist/index.d.ts +5 -11
  51. package/dist/index.js +51 -29
  52. package/dist/lib/mysql/cms-resource-actions.cjs +15 -4490
  53. package/dist/lib/mysql/cms-resource-actions.cjs.map +1 -1
  54. package/dist/lib/mysql/cms-resource-actions.d.cts +8 -38
  55. package/dist/lib/mysql/cms-resource-actions.d.ts +8 -38
  56. package/dist/lib/mysql/cms-resource-actions.js +2 -2
  57. package/dist/lib/mysql/context.cjs +3380 -0
  58. package/dist/lib/mysql/context.cjs.map +1 -0
  59. package/dist/lib/mysql/context.d.cts +15 -0
  60. package/dist/lib/mysql/context.d.ts +15 -0
  61. package/dist/lib/mysql/context.js +34 -0
  62. package/dist/lib/mysql/context.js.map +1 -0
  63. package/dist/lib/mysql/index.cjs +3340 -12980
  64. package/dist/lib/mysql/index.cjs.map +1 -1
  65. package/dist/lib/mysql/index.d.cts +24 -14300
  66. package/dist/lib/mysql/index.d.ts +24 -14300
  67. package/dist/lib/mysql/index.js +54 -31
  68. package/dist/lib/mysql/ports/auth-storage.cjs +84 -0
  69. package/dist/lib/mysql/ports/auth-storage.cjs.map +1 -0
  70. package/dist/lib/mysql/ports/auth-storage.d.cts +22 -0
  71. package/dist/lib/mysql/ports/auth-storage.d.ts +22 -0
  72. package/dist/lib/mysql/ports/auth-storage.js +8 -0
  73. package/dist/lib/mysql/ports/auth-storage.js.map +1 -0
  74. package/dist/lib/mysql/ports/catalog.cjs +428 -0
  75. package/dist/lib/mysql/ports/catalog.cjs.map +1 -0
  76. package/dist/lib/mysql/ports/catalog.d.cts +24 -0
  77. package/dist/lib/mysql/ports/catalog.d.ts +24 -0
  78. package/dist/lib/mysql/ports/catalog.js +8 -0
  79. package/dist/lib/mysql/ports/catalog.js.map +1 -0
  80. package/dist/lib/mysql/ports/content-resource.cjs +321 -0
  81. package/dist/lib/mysql/ports/content-resource.cjs.map +1 -0
  82. package/dist/lib/mysql/ports/content-resource.d.cts +23 -0
  83. package/dist/lib/mysql/ports/content-resource.d.ts +23 -0
  84. package/dist/lib/mysql/ports/content-resource.js +8 -0
  85. package/dist/lib/mysql/ports/content-resource.js.map +1 -0
  86. package/dist/lib/mysql/ports/coupon.cjs +264 -0
  87. package/dist/lib/mysql/ports/coupon.cjs.map +1 -0
  88. package/dist/lib/mysql/ports/coupon.d.cts +22 -0
  89. package/dist/lib/mysql/ports/coupon.d.ts +22 -0
  90. package/dist/lib/mysql/ports/coupon.js +8 -0
  91. package/dist/lib/mysql/ports/coupon.js.map +1 -0
  92. package/dist/lib/mysql/ports/entitlement.cjs +90 -0
  93. package/dist/lib/mysql/ports/entitlement.cjs.map +1 -0
  94. package/dist/lib/mysql/ports/entitlement.d.cts +22 -0
  95. package/dist/lib/mysql/ports/entitlement.d.ts +22 -0
  96. package/dist/lib/mysql/ports/entitlement.js +8 -0
  97. package/dist/lib/mysql/ports/entitlement.js.map +1 -0
  98. package/dist/lib/mysql/ports/identity.cjs +154 -0
  99. package/dist/lib/mysql/ports/identity.cjs.map +1 -0
  100. package/dist/lib/mysql/ports/identity.d.cts +22 -0
  101. package/dist/lib/mysql/ports/identity.d.ts +22 -0
  102. package/dist/lib/mysql/ports/identity.js +8 -0
  103. package/dist/lib/mysql/ports/identity.js.map +1 -0
  104. package/dist/lib/mysql/ports/merchant.cjs +194 -0
  105. package/dist/lib/mysql/ports/merchant.cjs.map +1 -0
  106. package/dist/lib/mysql/ports/merchant.d.cts +22 -0
  107. package/dist/lib/mysql/ports/merchant.d.ts +22 -0
  108. package/dist/lib/mysql/ports/merchant.js +8 -0
  109. package/dist/lib/mysql/ports/merchant.js.map +1 -0
  110. package/dist/lib/mysql/ports/organization.cjs +166 -0
  111. package/dist/lib/mysql/ports/organization.cjs.map +1 -0
  112. package/dist/lib/mysql/ports/organization.d.cts +22 -0
  113. package/dist/lib/mysql/ports/organization.d.ts +22 -0
  114. package/dist/lib/mysql/ports/organization.js +8 -0
  115. package/dist/lib/mysql/ports/organization.js.map +1 -0
  116. package/dist/lib/mysql/ports/progress.cjs +284 -0
  117. package/dist/lib/mysql/ports/progress.cjs.map +1 -0
  118. package/dist/lib/mysql/ports/progress.d.cts +22 -0
  119. package/dist/lib/mysql/ports/progress.d.ts +22 -0
  120. package/dist/lib/mysql/ports/progress.js +8 -0
  121. package/dist/lib/mysql/ports/progress.js.map +1 -0
  122. package/dist/lib/mysql/ports/purchase.cjs +349 -0
  123. package/dist/lib/mysql/ports/purchase.cjs.map +1 -0
  124. package/dist/lib/mysql/ports/purchase.d.cts +23 -0
  125. package/dist/lib/mysql/ports/purchase.d.ts +23 -0
  126. package/dist/lib/mysql/ports/purchase.js +8 -0
  127. package/dist/lib/mysql/ports/purchase.js.map +1 -0
  128. package/dist/lib/mysql/ports/subscription.cjs +76 -0
  129. package/dist/lib/mysql/ports/subscription.cjs.map +1 -0
  130. package/dist/lib/mysql/ports/subscription.d.cts +22 -0
  131. package/dist/lib/mysql/ports/subscription.d.ts +22 -0
  132. package/dist/lib/mysql/ports/subscription.js +8 -0
  133. package/dist/lib/mysql/ports/subscription.js.map +1 -0
  134. package/dist/lib/mysql/schema.cjs +3373 -0
  135. package/dist/lib/mysql/schema.cjs.map +1 -0
  136. package/dist/lib/mysql/schema.d.cts +14385 -0
  137. package/dist/lib/mysql/schema.d.ts +14385 -0
  138. package/dist/lib/mysql/schema.js +35 -0
  139. package/dist/lib/mysql/schema.js.map +1 -0
  140. package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -1
  141. package/dist/lib/mysql/schemas/auth/accounts.js +12 -12
  142. package/dist/lib/mysql/schemas/auth/device-access-token.cjs.map +1 -1
  143. package/dist/lib/mysql/schemas/auth/device-access-token.js +13 -13
  144. package/dist/lib/mysql/schemas/auth/device-verification.cjs.map +1 -1
  145. package/dist/lib/mysql/schemas/auth/device-verification.js +13 -13
  146. package/dist/lib/mysql/schemas/auth/permissions.js +2 -2
  147. package/dist/lib/mysql/schemas/auth/personal-access-token.cjs.map +1 -1
  148. package/dist/lib/mysql/schemas/auth/personal-access-token.js +13 -13
  149. package/dist/lib/mysql/schemas/auth/profiles.cjs.map +1 -1
  150. package/dist/lib/mysql/schemas/auth/profiles.js +12 -12
  151. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -1
  152. package/dist/lib/mysql/schemas/auth/role-permissions.js +13 -13
  153. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -1
  154. package/dist/lib/mysql/schemas/auth/roles.js +12 -12
  155. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -1
  156. package/dist/lib/mysql/schemas/auth/sessions.js +13 -13
  157. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -1
  158. package/dist/lib/mysql/schemas/auth/user-permissions.js +12 -12
  159. package/dist/lib/mysql/schemas/auth/user-prefs.cjs.map +1 -1
  160. package/dist/lib/mysql/schemas/auth/user-prefs.js +12 -12
  161. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -1
  162. package/dist/lib/mysql/schemas/auth/user-roles.js +12 -12
  163. package/dist/lib/mysql/schemas/auth/users.cjs +5 -1
  164. package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -1
  165. package/dist/lib/mysql/schemas/auth/users.js +12 -12
  166. package/dist/lib/mysql/schemas/auth/verification-tokens.js +2 -2
  167. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -1
  168. package/dist/lib/mysql/schemas/commerce/coupon.js +12 -12
  169. package/dist/lib/mysql/schemas/commerce/merchant-account.js +2 -2
  170. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -1
  171. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +12 -12
  172. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js +2 -2
  173. package/dist/lib/mysql/schemas/commerce/merchant-customer.js +2 -2
  174. package/dist/lib/mysql/schemas/commerce/merchant-events.js +3 -3
  175. package/dist/lib/mysql/schemas/commerce/merchant-price.js +2 -2
  176. package/dist/lib/mysql/schemas/commerce/merchant-product.js +2 -2
  177. package/dist/lib/mysql/schemas/commerce/merchant-session.js +2 -2
  178. package/dist/lib/mysql/schemas/commerce/merchant-subscription.cjs.map +1 -1
  179. package/dist/lib/mysql/schemas/commerce/merchant-subscription.js +12 -12
  180. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -1
  181. package/dist/lib/mysql/schemas/commerce/price.js +12 -12
  182. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -1
  183. package/dist/lib/mysql/schemas/commerce/product.js +12 -12
  184. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -1
  185. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +13 -13
  186. package/dist/lib/mysql/schemas/commerce/purchase.cjs +11 -2
  187. package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -1
  188. package/dist/lib/mysql/schemas/commerce/purchase.js +12 -12
  189. package/dist/lib/mysql/schemas/commerce/subscription.cjs +6 -1
  190. package/dist/lib/mysql/schemas/commerce/subscription.cjs.map +1 -1
  191. package/dist/lib/mysql/schemas/commerce/subscription.js +12 -12
  192. package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs.map +1 -1
  193. package/dist/lib/mysql/schemas/commerce/upgradable-products.js +13 -13
  194. package/dist/lib/mysql/schemas/communication/comment.cjs +5 -1
  195. package/dist/lib/mysql/schemas/communication/comment.cjs.map +1 -1
  196. package/dist/lib/mysql/schemas/communication/comment.js +12 -12
  197. package/dist/lib/mysql/schemas/communication/communication-channel.js +2 -2
  198. package/dist/lib/mysql/schemas/communication/communication-preference-types.js +2 -2
  199. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +5 -1
  200. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -1
  201. package/dist/lib/mysql/schemas/communication/communication-preferences.js +12 -12
  202. package/dist/lib/mysql/schemas/communication/question-response.cjs.map +1 -1
  203. package/dist/lib/mysql/schemas/communication/question-response.js +13 -13
  204. package/dist/lib/mysql/schemas/content/content-contributions.cjs +5 -1
  205. package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -1
  206. package/dist/lib/mysql/schemas/content/content-contributions.js +12 -12
  207. package/dist/lib/mysql/schemas/content/content-resource-product.cjs.map +1 -1
  208. package/dist/lib/mysql/schemas/content/content-resource-product.js +12 -12
  209. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -1
  210. package/dist/lib/mysql/schemas/content/content-resource-resource.js +12 -12
  211. package/dist/lib/mysql/schemas/content/content-resource-tag.cjs.map +1 -1
  212. package/dist/lib/mysql/schemas/content/content-resource-tag.js +12 -12
  213. package/dist/lib/mysql/schemas/content/content-resource-version.cjs.map +1 -1
  214. package/dist/lib/mysql/schemas/content/content-resource-version.js +12 -12
  215. package/dist/lib/mysql/schemas/content/content-resource.cjs +5 -1
  216. package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -1
  217. package/dist/lib/mysql/schemas/content/content-resource.js +12 -12
  218. package/dist/lib/mysql/schemas/content/contribution-types.js +2 -2
  219. package/dist/lib/mysql/schemas/content/lesson-progress.js +2 -2
  220. package/dist/lib/mysql/schemas/content/resource-progress.js +2 -2
  221. package/dist/lib/mysql/schemas/content/tag-tag.cjs.map +1 -1
  222. package/dist/lib/mysql/schemas/content/tag-tag.js +12 -12
  223. package/dist/lib/mysql/schemas/content/tag.cjs.map +1 -1
  224. package/dist/lib/mysql/schemas/content/tag.js +12 -12
  225. package/dist/lib/mysql/schemas/entitlements/entitlement-type.js +2 -2
  226. package/dist/lib/mysql/schemas/entitlements/entitlement.cjs +11 -2
  227. package/dist/lib/mysql/schemas/entitlements/entitlement.cjs.map +1 -1
  228. package/dist/lib/mysql/schemas/entitlements/entitlement.js +13 -13
  229. package/dist/lib/mysql/schemas/org/organization-membership-roles.cjs +11 -2
  230. package/dist/lib/mysql/schemas/org/organization-membership-roles.cjs.map +1 -1
  231. package/dist/lib/mysql/schemas/org/organization-membership-roles.js +12 -12
  232. package/dist/lib/mysql/schemas/org/organization-memberships.cjs +11 -2
  233. package/dist/lib/mysql/schemas/org/organization-memberships.cjs.map +1 -1
  234. package/dist/lib/mysql/schemas/org/organization-memberships.d.cts +16 -0
  235. package/dist/lib/mysql/schemas/org/organization-memberships.d.ts +16 -0
  236. package/dist/lib/mysql/schemas/org/organization-memberships.js +12 -12
  237. package/dist/lib/mysql/schemas/org/organizations.cjs +11 -2
  238. package/dist/lib/mysql/schemas/org/organizations.cjs.map +1 -1
  239. package/dist/lib/mysql/schemas/org/organizations.d.cts +16 -0
  240. package/dist/lib/mysql/schemas/org/organizations.d.ts +16 -0
  241. package/dist/lib/mysql/schemas/org/organizations.js +12 -12
  242. package/dist/lib/mysql/utils.js +1 -1
  243. package/dist/lib/mysql/workflows/content-resource-workflow-utils.cjs +40 -0
  244. package/dist/lib/mysql/workflows/content-resource-workflow-utils.cjs.map +1 -0
  245. package/dist/lib/mysql/workflows/content-resource-workflow-utils.d.cts +4 -0
  246. package/dist/lib/mysql/workflows/content-resource-workflow-utils.d.ts +4 -0
  247. package/dist/lib/mysql/workflows/content-resource-workflow-utils.js +10 -0
  248. package/dist/lib/mysql/workflows/content-resource-workflow-utils.js.map +1 -0
  249. package/dist/lib/mysql/workflows/create-cohort.cjs +184 -0
  250. package/dist/lib/mysql/workflows/create-cohort.cjs.map +1 -0
  251. package/dist/lib/mysql/workflows/create-cohort.d.cts +24 -0
  252. package/dist/lib/mysql/workflows/create-cohort.d.ts +24 -0
  253. package/dist/lib/mysql/workflows/create-cohort.js +9 -0
  254. package/dist/lib/mysql/workflows/create-cohort.js.map +1 -0
  255. package/dist/lib/mysql/workflows/create-event-series.cjs +283 -0
  256. package/dist/lib/mysql/workflows/create-event-series.cjs.map +1 -0
  257. package/dist/lib/mysql/workflows/create-event-series.d.cts +24 -0
  258. package/dist/lib/mysql/workflows/create-event-series.d.ts +24 -0
  259. package/dist/lib/mysql/workflows/create-event-series.js +9 -0
  260. package/dist/lib/mysql/workflows/create-event-series.js.map +1 -0
  261. package/dist/lib/mysql/workflows/create-event.cjs +194 -0
  262. package/dist/lib/mysql/workflows/create-event.cjs.map +1 -0
  263. package/dist/lib/mysql/workflows/create-event.d.cts +24 -0
  264. package/dist/lib/mysql/workflows/create-event.d.ts +24 -0
  265. package/dist/lib/mysql/workflows/create-event.js +9 -0
  266. package/dist/lib/mysql/workflows/create-event.js.map +1 -0
  267. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.cjs +231 -0
  268. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.cjs.map +1 -0
  269. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.d.cts +22 -0
  270. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.d.ts +22 -0
  271. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.js +8 -0
  272. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.js.map +1 -0
  273. package/dist/lib/mysql/workflows/create-workshop.cjs +286 -0
  274. package/dist/lib/mysql/workflows/create-workshop.cjs.map +1 -0
  275. package/dist/lib/mysql/workflows/create-workshop.d.cts +24 -0
  276. package/dist/lib/mysql/workflows/create-workshop.d.ts +24 -0
  277. package/dist/lib/mysql/workflows/create-workshop.js +9 -0
  278. package/dist/lib/mysql/workflows/create-workshop.js.map +1 -0
  279. package/dist/lib/mysql/workflows/redeem-full-price-coupon.cjs +130 -0
  280. package/dist/lib/mysql/workflows/redeem-full-price-coupon.cjs.map +1 -0
  281. package/dist/lib/mysql/workflows/redeem-full-price-coupon.d.cts +24 -0
  282. package/dist/lib/mysql/workflows/redeem-full-price-coupon.d.ts +24 -0
  283. package/dist/lib/mysql/workflows/redeem-full-price-coupon.js +8 -0
  284. package/dist/lib/mysql/workflows/redeem-full-price-coupon.js.map +1 -0
  285. package/dist/lib/mysql/workflows/transfer-purchase-to-user.cjs +95 -0
  286. package/dist/lib/mysql/workflows/transfer-purchase-to-user.cjs.map +1 -0
  287. package/dist/lib/mysql/workflows/transfer-purchase-to-user.d.cts +30 -0
  288. package/dist/lib/mysql/workflows/transfer-purchase-to-user.d.ts +30 -0
  289. package/dist/lib/mysql/workflows/transfer-purchase-to-user.js +8 -0
  290. package/dist/lib/mysql/workflows/transfer-purchase-to-user.js.map +1 -0
  291. package/dist/lib/utils.d.cts +1 -10
  292. package/dist/lib/utils.d.ts +1 -10
  293. package/dist/lib/utils.js +1 -1
  294. package/dist/types.d.ts +14 -0
  295. package/dist/types.js +1 -0
  296. package/package.json +10 -6
  297. package/src/index.ts +3 -2
  298. package/src/lib/mysql/context.ts +20 -0
  299. package/src/lib/mysql/index.ts +118 -4873
  300. package/src/lib/mysql/ports/auth-storage.ts +139 -0
  301. package/src/lib/mysql/ports/catalog.ts +610 -0
  302. package/src/lib/mysql/ports/content-resource.ts +442 -0
  303. package/src/lib/mysql/ports/coupon.ts +387 -0
  304. package/src/lib/mysql/ports/entitlement.ts +96 -0
  305. package/src/lib/mysql/ports/identity.ts +160 -0
  306. package/src/lib/mysql/ports/merchant.ts +274 -0
  307. package/src/lib/mysql/ports/organization.ts +216 -0
  308. package/src/lib/mysql/ports/progress.ts +366 -0
  309. package/src/lib/mysql/ports/purchase.ts +517 -0
  310. package/src/lib/mysql/ports/subscription.ts +93 -0
  311. package/src/lib/mysql/schema.ts +374 -0
  312. package/src/lib/mysql/schemas/org/organization-memberships.ts +7 -0
  313. package/src/lib/mysql/schemas/org/organizations.ts +8 -0
  314. package/src/lib/mysql/workflows/content-resource-workflow-utils.ts +22 -0
  315. package/src/lib/mysql/workflows/create-cohort.ts +239 -0
  316. package/src/lib/mysql/workflows/create-event-series.ts +384 -0
  317. package/src/lib/mysql/workflows/create-event.ts +232 -0
  318. package/src/lib/mysql/workflows/create-merchant-charge-and-purchase.ts +365 -0
  319. package/src/lib/mysql/workflows/create-workshop.ts +372 -0
  320. package/src/lib/mysql/workflows/redeem-full-price-coupon.ts +179 -0
  321. package/src/lib/mysql/workflows/transfer-purchase-to-user.ts +142 -0
  322. package/src/types.ts +33 -0
  323. package/dist/authjs.d.ts +0 -27
  324. package/dist/authjs.js +0 -1
  325. package/dist/chunk-2X5XVNDN.js +0 -12
  326. package/dist/chunk-62VSIVME.js +0 -4714
  327. package/dist/chunk-RVXF3JZ7.js +0 -8732
  328. package/dist/chunk-WEJL5OFI.js +0 -8732
  329. package/src/authjs.ts +0 -34
@@ -0,0 +1,145 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-H736K5TN.js";
4
+
5
+ // src/lib/mysql/ports/organization.ts
6
+ import { and, eq } from "drizzle-orm";
7
+ import { z } from "zod";
8
+ import { OrganizationMemberSchema } from "@coursebuilder/core/schemas/organization-member";
9
+ import { OrganizationSchema } from "@coursebuilder/core/schemas/organization-schema";
10
+ function createOrganizationPort({ client, tables }) {
11
+ const { organization: organizationTable, organizationMemberships: organizationMembershipTable, organizationMembershipRoles: organizationMembershipRoleTable, roles: roleTable } = tables;
12
+ const getOrganization = /* @__PURE__ */ __name(async (organizationId) => {
13
+ return OrganizationSchema.parse(await client.query.organization.findFirst({
14
+ where: eq(organizationTable.id, organizationId)
15
+ }));
16
+ }, "getOrganization");
17
+ const getPersonalOrganization = /* @__PURE__ */ __name(async (userId) => {
18
+ return OrganizationSchema.nullable().parse(await client.query.organization.findFirst({
19
+ where: eq(organizationTable.personalOrganizationUserId, userId)
20
+ }) ?? null);
21
+ }, "getPersonalOrganization");
22
+ return {
23
+ createOrganization: async (options) => {
24
+ const organizationId = crypto.randomUUID();
25
+ await client.insert(organizationTable).values({
26
+ ...options,
27
+ id: organizationId
28
+ });
29
+ return getOrganization(organizationId);
30
+ },
31
+ getOrganization,
32
+ getPersonalOrganization,
33
+ createPersonalOrganization: async ({ userId, name }) => {
34
+ await client.insert(organizationTable).values({
35
+ id: crypto.randomUUID(),
36
+ name,
37
+ personalOrganizationUserId: userId
38
+ }).onDuplicateKeyUpdate({
39
+ set: {
40
+ personalOrganizationUserId: userId
41
+ }
42
+ });
43
+ const organization = await getPersonalOrganization(userId);
44
+ if (!organization) {
45
+ throw new Error("Failed to create durable personal organization");
46
+ }
47
+ return organization;
48
+ },
49
+ addMemberToOrganization: async (options) => {
50
+ const membershipWhere = options.personalOrganizationUserId ? eq(organizationMembershipTable.personalOrganizationUserId, options.personalOrganizationUserId) : and(eq(organizationMembershipTable.organizationId, options.organizationId), eq(organizationMembershipTable.userId, options.userId));
51
+ const currentMembership = await client.query.organizationMemberships.findFirst({
52
+ where: membershipWhere,
53
+ with: {
54
+ organization: true,
55
+ user: true
56
+ }
57
+ });
58
+ if (!currentMembership) {
59
+ const insert = client.insert(organizationMembershipTable).values({
60
+ ...options,
61
+ id: crypto.randomUUID()
62
+ });
63
+ if (options.personalOrganizationUserId) {
64
+ await insert.onDuplicateKeyUpdate({
65
+ set: {
66
+ userId: options.userId
67
+ }
68
+ });
69
+ } else {
70
+ await insert;
71
+ }
72
+ }
73
+ return OrganizationMemberSchema.parse(await client.query.organizationMemberships.findFirst({
74
+ where: membershipWhere,
75
+ with: {
76
+ organization: true,
77
+ user: true
78
+ }
79
+ }));
80
+ },
81
+ removeMemberFromOrganization: async (options) => {
82
+ await client.delete(organizationMembershipTable).where(and(eq(organizationMembershipTable.organizationId, options.organizationId), eq(organizationMembershipTable.userId, options.userId)));
83
+ },
84
+ addRoleForMember: async (options) => {
85
+ await client.insert(roleTable).values({
86
+ name: options.role,
87
+ organizationId: options.organizationId,
88
+ id: crypto.randomUUID()
89
+ }).onDuplicateKeyUpdate({
90
+ set: {
91
+ name: options.role
92
+ }
93
+ });
94
+ const role = z.object({
95
+ id: z.string()
96
+ }).parse(await client.query.roles.findFirst({
97
+ where: and(eq(roleTable.organizationId, options.organizationId), eq(roleTable.name, options.role))
98
+ }));
99
+ await client.insert(organizationMembershipRoleTable).values({
100
+ organizationId: options.organizationId,
101
+ organizationMembershipId: options.memberId,
102
+ roleId: role.id
103
+ }).onDuplicateKeyUpdate({
104
+ set: {
105
+ roleId: role.id
106
+ }
107
+ });
108
+ },
109
+ removeRoleForMember: async (options) => {
110
+ const existingRole = z.object({
111
+ id: z.string()
112
+ }).nullable().parse(await client.query.roles.findFirst({
113
+ where: and(eq(roleTable.organizationId, options.organizationId), eq(roleTable.name, options.role))
114
+ }));
115
+ const roleId = existingRole?.id;
116
+ if (roleId) {
117
+ await client.delete(organizationMembershipRoleTable).where(and(eq(organizationMembershipRoleTable.roleId, roleId), eq(organizationMembershipRoleTable.organizationMembershipId, options.memberId)));
118
+ }
119
+ },
120
+ getMembershipsForUser: async (userId) => {
121
+ return OrganizationMemberSchema.array().parse(await client.query.organizationMemberships.findMany({
122
+ where: eq(organizationMembershipTable.userId, userId),
123
+ with: {
124
+ organization: true,
125
+ user: true
126
+ }
127
+ }) || []);
128
+ },
129
+ getOrganizationMembers: async (organizationId) => {
130
+ return OrganizationMemberSchema.array().parse(await client.query.organizationMemberships.findMany({
131
+ where: eq(organizationMembershipTable.organizationId, organizationId),
132
+ with: {
133
+ organization: true,
134
+ user: true
135
+ }
136
+ }) || []);
137
+ }
138
+ };
139
+ }
140
+ __name(createOrganizationPort, "createOrganizationPort");
141
+
142
+ export {
143
+ createOrganizationPort
144
+ };
145
+ //# sourceMappingURL=chunk-2CTSX6SR.js.map
@@ -0,0 +1,397 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-H736K5TN.js";
4
+
5
+ // src/lib/mysql/ports/catalog.ts
6
+ import slugify from "@sindresorhus/slugify";
7
+ import { and, eq, inArray, or, sql } from "drizzle-orm";
8
+ import { customAlphabet } from "nanoid";
9
+ import { v4 } from "uuid";
10
+ import { z } from "zod";
11
+ import { merchantPriceSchema, merchantProductSchema, priceSchema, productSchema, upgradableProductSchema } from "@coursebuilder/core/schemas";
12
+ import { ContentResourceProductSchema, ContentResourceSchema } from "@coursebuilder/core/schemas/content-resource-schema";
13
+ import { merchantAccountSchema } from "@coursebuilder/core/schemas/merchant-account-schema";
14
+ import { logger as baseLogger } from "@coursebuilder/utils/logger";
15
+ var guid = customAlphabet("1234567890abcdefghijklmnopqrstuvwxyz", 5);
16
+ function toError(error) {
17
+ return error instanceof Error ? error : new Error(String(error));
18
+ }
19
+ __name(toError, "toError");
20
+ var logger = baseLogger;
21
+ function createCatalogPort({ client, tables }, paymentProvider) {
22
+ const { contentResource, contentResourceProduct, merchantAccount, merchantPrice, merchantProduct, prices, products, purchases: purchaseTable, upgradableProducts } = tables;
23
+ const getProduct = /* @__PURE__ */ __name(async (productSlugOrId, withResources = true) => {
24
+ if (!productSlugOrId) {
25
+ return null;
26
+ }
27
+ try {
28
+ const productData = await client.query.products.findFirst({
29
+ where: and(or(eq(sql`JSON_EXTRACT (${products.fields}, "$.slug")`, `${productSlugOrId}`), eq(products.id, productSlugOrId))),
30
+ with: {
31
+ price: true,
32
+ ...withResources && {
33
+ resources: {
34
+ with: {
35
+ resource: {
36
+ with: {
37
+ resources: true
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ });
45
+ const parsedProduct = productSchema.safeParse(productData);
46
+ if (!parsedProduct.success) {
47
+ logger.error(parsedProduct.error, {
48
+ event: "adapter.product.parse_failed",
49
+ productId: productData?.id,
50
+ productSlugOrId
51
+ });
52
+ return null;
53
+ }
54
+ return parsedProduct.data;
55
+ } catch (e) {
56
+ logger.error(toError(e), {
57
+ event: "adapter.product.lookup.failed",
58
+ productSlugOrId,
59
+ withResources
60
+ });
61
+ return null;
62
+ }
63
+ }, "getProduct");
64
+ return {
65
+ getProduct,
66
+ getUpgradableProducts: async (options) => {
67
+ const { upgradableFromId, upgradableToId } = options;
68
+ return z.array(upgradableProductSchema).parse(await client.query.upgradableProducts.findMany({
69
+ where: and(eq(upgradableProducts.upgradableFromId, upgradableFromId), eq(upgradableProducts.upgradableToId, upgradableToId))
70
+ }));
71
+ },
72
+ async availableUpgradesForProduct(purchases, productId) {
73
+ const previousPurchaseProductIds = purchases.map(({ productId: productId2 }) => productId2);
74
+ if (previousPurchaseProductIds.length > 0) {
75
+ return client.query.upgradableProducts.findMany({
76
+ where: and(eq(upgradableProducts.upgradableToId, productId), inArray(upgradableProducts.upgradableFromId, previousPurchaseProductIds))
77
+ });
78
+ }
79
+ return [];
80
+ },
81
+ async getPrice(productId) {
82
+ return priceSchema.nullable().parse(await client.query.prices.findFirst({
83
+ where: eq(prices.productId, productId)
84
+ }));
85
+ },
86
+ async getPriceForProduct(productId) {
87
+ return priceSchema.nullable().parse(await client.query.prices.findFirst({
88
+ where: eq(prices.productId, productId)
89
+ }));
90
+ },
91
+ async archiveProduct(productId) {
92
+ if (!paymentProvider)
93
+ throw new Error("Payment provider not found");
94
+ const product = await getProduct(productId);
95
+ if (!product) {
96
+ throw new Error(`Product not found for id (${productId})`);
97
+ }
98
+ if (!product.price) {
99
+ throw new Error(`Product has no price`);
100
+ }
101
+ await client.update(products).set({
102
+ status: 0,
103
+ name: `${product.name} (Archived)`
104
+ }).where(eq(products.id, productId));
105
+ await client.update(prices).set({
106
+ status: 0,
107
+ nickname: `${product.name} (Archived)`
108
+ }).where(eq(prices.productId, productId));
109
+ await client.update(merchantProduct).set({
110
+ status: 0
111
+ }).where(eq(merchantProduct.productId, productId));
112
+ await client.update(merchantPrice).set({
113
+ status: 0
114
+ }).where(eq(merchantPrice.priceId, product.price.id));
115
+ const currentMerchantProduct = merchantProductSchema.nullish().parse(await client.query.merchantProduct.findFirst({
116
+ where: eq(merchantProduct.productId, productId)
117
+ }));
118
+ if (!currentMerchantProduct || !currentMerchantProduct.identifier) {
119
+ throw new Error(`Merchant product not found for id (${productId})`);
120
+ }
121
+ await paymentProvider.updateProduct(currentMerchantProduct.identifier, {
122
+ active: false
123
+ });
124
+ const currentMerchantPrice = merchantPriceSchema.nullish().parse(await client.query.merchantPrice.findFirst({
125
+ where: eq(merchantPrice.priceId, product.price.id)
126
+ }));
127
+ if (!currentMerchantPrice || !currentMerchantPrice.identifier) {
128
+ throw new Error(`Merchant price not found for id (${productId})`);
129
+ }
130
+ await paymentProvider.updatePrice(currentMerchantPrice.identifier, {
131
+ active: false
132
+ });
133
+ return getProduct(productId);
134
+ },
135
+ async updateProduct(input) {
136
+ if (!paymentProvider)
137
+ throw new Error("Payment provider not found");
138
+ const currentProduct = await getProduct(input.id);
139
+ if (!currentProduct) {
140
+ throw new Error(`Product not found`);
141
+ }
142
+ if (!currentProduct.price) {
143
+ throw new Error(`Product has no price`);
144
+ }
145
+ const merchantProduct2 = merchantProductSchema.nullish().parse(await client.query.merchantProduct.findFirst({
146
+ where: (merchantProduct3, { eq: eq2 }) => eq2(merchantProduct3.productId, input.id)
147
+ }));
148
+ if (!merchantProduct2 || !merchantProduct2.identifier) {
149
+ throw new Error(`Merchant product not found`);
150
+ }
151
+ const stripeProduct = await paymentProvider.getProduct(merchantProduct2.identifier);
152
+ const priceChanged = currentProduct.price.unitAmount.toString() !== input.price?.unitAmount.toString();
153
+ const currentMerchantPrice = merchantPriceSchema.nullish().parse(await client.query.merchantPrice.findFirst({
154
+ where: (merchantPrice2, { eq: eq2, and: and2 }) => and2(eq2(merchantPrice2.merchantProductId, merchantProduct2.id), eq2(merchantPrice2.status, 1))
155
+ }));
156
+ if (!currentMerchantPrice || !currentMerchantPrice.identifier) {
157
+ throw new Error(`Merchant price not found`);
158
+ }
159
+ const currentStripePrice = await paymentProvider.getPrice(currentMerchantPrice.identifier);
160
+ const membershipTypeChanged = currentProduct.type !== input.type && (input.type === "membership" || currentProduct.type === "membership");
161
+ const billingIntervalChanged = input.type === "membership" && currentProduct.type === "membership" && currentProduct.fields?.billingInterval !== input.fields?.billingInterval;
162
+ const isMembership = input.type === "membership";
163
+ const stripePriceMismatch = isMembership !== !!currentStripePrice.recurring;
164
+ const needsPriceRecreation = priceChanged || membershipTypeChanged || billingIntervalChanged || stripePriceMismatch;
165
+ if (needsPriceRecreation) {
166
+ const billingInterval = input.fields?.billingInterval || "year";
167
+ const priceParams = {
168
+ product: stripeProduct.id,
169
+ unit_amount: Math.floor(Number(input.price?.unitAmount || 0) * 100),
170
+ currency: "usd",
171
+ metadata: {
172
+ slug: input.fields.slug
173
+ },
174
+ active: true,
175
+ // Membership products get recurring billing
176
+ ...input.type === "membership" && {
177
+ recurring: {
178
+ interval: billingInterval
179
+ }
180
+ }
181
+ };
182
+ logger.debug("adapter.product.price_recreation.started", {
183
+ billingInterval,
184
+ currency: priceParams.currency,
185
+ currentMerchantPriceId: currentMerchantPrice.id,
186
+ isMembership: input.type === "membership",
187
+ merchantProductId: merchantProduct2.id,
188
+ productId: input.id,
189
+ productSlug: input.fields.slug,
190
+ stripeProductId: stripeProduct.id,
191
+ unitAmount: priceParams.unit_amount
192
+ });
193
+ const newStripePrice = await paymentProvider.createPrice(priceParams);
194
+ await paymentProvider.updateProduct(stripeProduct.id, {
195
+ default_price: newStripePrice.id
196
+ });
197
+ const newMerchantPriceId = `mprice_${v4()}`;
198
+ await client.insert(merchantPrice).values({
199
+ id: newMerchantPriceId,
200
+ merchantProductId: merchantProduct2.id,
201
+ merchantAccountId: merchantProduct2.merchantAccountId,
202
+ priceId: currentProduct.price.id,
203
+ status: 1,
204
+ identifier: newStripePrice.id
205
+ });
206
+ if (currentMerchantPrice) {
207
+ await client.update(merchantPrice).set({
208
+ status: 0
209
+ }).where(eq(merchantPrice.id, currentMerchantPrice.id));
210
+ }
211
+ await client.update(prices).set({
212
+ unitAmount: Math.floor(Number(input.price?.unitAmount || 0)).toString(),
213
+ nickname: input.name
214
+ }).where(eq(prices.id, currentProduct.price.id));
215
+ if (currentStripePrice) {
216
+ await paymentProvider.updatePrice(currentStripePrice.id, {
217
+ active: false
218
+ });
219
+ }
220
+ }
221
+ await paymentProvider.updateProduct(stripeProduct.id, {
222
+ name: input.name,
223
+ active: true,
224
+ images: input.fields.image?.url ? [
225
+ input.fields.image.url
226
+ ] : void 0,
227
+ description: input.fields.description || "",
228
+ metadata: {
229
+ slug: input.fields.slug
230
+ }
231
+ });
232
+ const { image, ...fieldsNoImage } = input.fields;
233
+ await client.update(products).set({
234
+ name: input.name,
235
+ quantityAvailable: input.quantityAvailable,
236
+ status: 1,
237
+ fields: {
238
+ ...fieldsNoImage,
239
+ ...image?.url && {
240
+ image
241
+ }
242
+ },
243
+ type: input.type
244
+ }).where(eq(products.id, currentProduct.id));
245
+ return getProduct(currentProduct.id);
246
+ },
247
+ async createProduct(input) {
248
+ if (!paymentProvider)
249
+ throw new Error("Payment provider not found");
250
+ const merchantAccount2 = merchantAccountSchema.nullish().parse(await client.query.merchantAccount.findFirst({
251
+ where: (merchantAccount3, { eq: eq2 }) => eq2(merchantAccount3.label, "stripe")
252
+ }));
253
+ if (!merchantAccount2) {
254
+ throw new Error("Merchant account not found");
255
+ }
256
+ const hash = guid();
257
+ const newProductId = slugify(`product-${hash}`);
258
+ const newProduct = {
259
+ id: newProductId,
260
+ name: input.name,
261
+ status: 1,
262
+ type: input.type || "self-paced",
263
+ quantityAvailable: input.quantityAvailable,
264
+ fields: {
265
+ state: input.state || "draft",
266
+ visibility: input.visibility || "unlisted",
267
+ slug: slugify(`${input.name}-${hash}`),
268
+ ...input.openEnrollment && {
269
+ openEnrollment: input.openEnrollment
270
+ },
271
+ ...input.closeEnrollment && {
272
+ closeEnrollment: input.closeEnrollment
273
+ },
274
+ ...typeof input.availableAfterDays === "number" && {
275
+ availableAfterDays: input.availableAfterDays
276
+ },
277
+ ...typeof input.accessDurationDays === "number" && {
278
+ accessDurationDays: input.accessDurationDays
279
+ }
280
+ }
281
+ };
282
+ await client.insert(products).values(newProduct);
283
+ const priceHash = guid();
284
+ const newPriceId = `price-${priceHash}`;
285
+ await client.insert(prices).values({
286
+ id: newPriceId,
287
+ productId: newProductId,
288
+ unitAmount: input.price.toString(),
289
+ status: 1
290
+ });
291
+ const product = await getProduct(newProductId);
292
+ const stripeProduct = await paymentProvider.createProduct({
293
+ name: input.name,
294
+ metadata: {
295
+ slug: product?.fields?.slug || null
296
+ }
297
+ });
298
+ const stripePrice = await paymentProvider.createPrice({
299
+ product: stripeProduct.id,
300
+ unit_amount: Math.floor(Number(input.price) * 100),
301
+ currency: "usd",
302
+ nickname: input.name,
303
+ metadata: {
304
+ slug: product?.fields?.slug || null
305
+ },
306
+ // Membership products get recurring billing
307
+ ...input.type === "membership" && {
308
+ recurring: {
309
+ interval: input.billingInterval || "year"
310
+ }
311
+ }
312
+ });
313
+ const newMerchantProductId = `mproduct_${v4()}`;
314
+ await client.insert(merchantProduct).values({
315
+ id: newMerchantProductId,
316
+ merchantAccountId: merchantAccount2.id,
317
+ productId: newProductId,
318
+ identifier: stripeProduct.id,
319
+ status: 1
320
+ });
321
+ const newMerchantPriceId = `mprice_${v4()}`;
322
+ await client.insert(merchantPrice).values({
323
+ id: newMerchantPriceId,
324
+ merchantAccountId: merchantAccount2.id,
325
+ merchantProductId: newMerchantProductId,
326
+ priceId: newPriceId,
327
+ identifier: stripePrice.id,
328
+ status: 1
329
+ });
330
+ return product;
331
+ },
332
+ async getProductResources(productId) {
333
+ const contentResourceProductsForProduct = z.array(ContentResourceProductSchema).nullable().parse(await client.query.contentResourceProduct.findMany({
334
+ where: eq(contentResourceProduct.productId, productId)
335
+ }));
336
+ if (!contentResourceProductsForProduct) {
337
+ return null;
338
+ } else {
339
+ const contentResources = z.array(ContentResourceSchema).parse(await client.query.contentResource.findMany({
340
+ where: inArray(contentResource.id, contentResourceProductsForProduct.map((crp) => crp.resourceId))
341
+ }));
342
+ return contentResources;
343
+ }
344
+ },
345
+ async pricesOfPurchasesTowardOneBundle({ userId, bundleId }) {
346
+ if (userId === void 0)
347
+ return [];
348
+ const canUpgradeProducts = await client.query.upgradableProducts.findMany({
349
+ where: eq(upgradableProducts.upgradableToId, bundleId)
350
+ });
351
+ const upgradableFrom = z.array(z.string()).parse(canUpgradeProducts.map((product) => {
352
+ return product.upgradableFromId;
353
+ }));
354
+ const purchases = await client.query.purchases.findMany({
355
+ where: and(eq(purchaseTable.userId, userId), inArray(purchaseTable.productId, upgradableFrom))
356
+ });
357
+ const productsPurchased = z.array(z.string()).parse(purchases.map((purchase) => {
358
+ return purchase.productId;
359
+ }));
360
+ if (productsPurchased.length === 0)
361
+ return [];
362
+ const foundPrices = await client.query.prices.findMany({
363
+ where: inArray(prices.productId, productsPurchased)
364
+ });
365
+ return z.array(priceSchema).parse(foundPrices);
366
+ },
367
+ async addResourceToProduct(options) {
368
+ const { resource, productId, userId } = options;
369
+ const product = await getProduct(productId);
370
+ if (!product) {
371
+ throw new Error(`Product not found for id (${productId})`);
372
+ }
373
+ await client.insert(contentResourceProduct).values({
374
+ resourceId: resource.id,
375
+ productId,
376
+ position: product.resources?.length || 0,
377
+ metadata: {
378
+ addedBy: userId
379
+ }
380
+ });
381
+ const resourceProduct = await client.query.contentResourceProduct.findFirst({
382
+ where: eq(contentResourceProduct.resourceId, resource.id),
383
+ with: {
384
+ resource: true,
385
+ product: true
386
+ }
387
+ });
388
+ return ContentResourceProductSchema.safeParse(resourceProduct).data || null;
389
+ }
390
+ };
391
+ }
392
+ __name(createCatalogPort, "createCatalogPort");
393
+
394
+ export {
395
+ createCatalogPort
396
+ };
397
+ //# sourceMappingURL=chunk-2M2XM4EQ.js.map