@unchainedshop/api 2.13.0 → 3.0.0-alpha2

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 (451) hide show
  1. package/lib/api-index.d.ts +13 -4
  2. package/lib/api-index.d.ts.map +1 -1
  3. package/lib/api-index.js +4 -5
  4. package/lib/api-index.js.map +1 -1
  5. package/lib/context.d.ts +14 -1
  6. package/lib/context.d.ts.map +1 -1
  7. package/lib/context.js +10 -9
  8. package/lib/context.js.map +1 -1
  9. package/lib/createGraphQLServer.d.ts +1 -2
  10. package/lib/createGraphQLServer.d.ts.map +1 -1
  11. package/lib/createGraphQLServer.js +22 -31
  12. package/lib/createGraphQLServer.js.map +1 -1
  13. package/lib/errors.d.ts +3 -6
  14. package/lib/errors.d.ts.map +1 -1
  15. package/lib/errors.js +6 -9
  16. package/lib/errors.js.map +1 -1
  17. package/lib/events.d.ts +5 -0
  18. package/lib/events.d.ts.map +1 -0
  19. package/lib/events.js +8 -0
  20. package/lib/events.js.map +1 -0
  21. package/lib/express/createBulkImportMiddleware.d.ts +6 -1
  22. package/lib/express/createBulkImportMiddleware.d.ts.map +1 -1
  23. package/lib/express/createBulkImportMiddleware.js +1 -3
  24. package/lib/express/createBulkImportMiddleware.js.map +1 -1
  25. package/lib/express/createERCMetadataMiddleware.d.ts +4 -1
  26. package/lib/express/createERCMetadataMiddleware.d.ts.map +1 -1
  27. package/lib/express/createERCMetadataMiddleware.js +1 -3
  28. package/lib/express/createERCMetadataMiddleware.js.map +1 -1
  29. package/lib/express/index.d.ts +7 -6
  30. package/lib/express/index.d.ts.map +1 -1
  31. package/lib/express/index.js +98 -13
  32. package/lib/express/index.js.map +1 -1
  33. package/lib/express/passport/access-token-strategy.d.ts +10 -0
  34. package/lib/express/passport/access-token-strategy.d.ts.map +1 -0
  35. package/lib/express/passport/access-token-strategy.js +33 -0
  36. package/lib/express/passport/access-token-strategy.js.map +1 -0
  37. package/lib/express/passport/setup.d.ts +4 -0
  38. package/lib/express/passport/setup.d.ts.map +1 -0
  39. package/lib/express/passport/setup.js +30 -0
  40. package/lib/express/passport/setup.js.map +1 -0
  41. package/lib/loaders/index.d.ts +1 -2
  42. package/lib/loaders/index.d.ts.map +1 -1
  43. package/lib/loaders/index.js +2 -2
  44. package/lib/loaders/index.js.map +1 -1
  45. package/lib/locale-context.d.ts +6 -4
  46. package/lib/locale-context.d.ts.map +1 -1
  47. package/lib/locale-context.js +4 -6
  48. package/lib/locale-context.js.map +1 -1
  49. package/lib/resolvers/index.d.ts.map +1 -1
  50. package/lib/resolvers/index.js +0 -2
  51. package/lib/resolvers/index.js.map +1 -1
  52. package/lib/resolvers/mutations/accounts/addEmail.d.ts.map +1 -1
  53. package/lib/resolvers/mutations/accounts/addEmail.js +10 -2
  54. package/lib/resolvers/mutations/accounts/addEmail.js.map +1 -1
  55. package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js +1 -1
  56. package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js.map +1 -1
  57. package/lib/resolvers/mutations/accounts/changePassword.d.ts +2 -2
  58. package/lib/resolvers/mutations/accounts/changePassword.d.ts.map +1 -1
  59. package/lib/resolvers/mutations/accounts/changePassword.js +13 -7
  60. package/lib/resolvers/mutations/accounts/changePassword.js.map +1 -1
  61. package/lib/resolvers/mutations/accounts/createUser.d.ts +2 -3
  62. package/lib/resolvers/mutations/accounts/createUser.d.ts.map +1 -1
  63. package/lib/resolvers/mutations/accounts/createUser.js +21 -26
  64. package/lib/resolvers/mutations/accounts/createUser.js.map +1 -1
  65. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts +1 -1
  66. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts.map +1 -1
  67. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.js +2 -2
  68. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.js.map +1 -1
  69. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts +1 -1
  70. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts.map +1 -1
  71. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js +3 -3
  72. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js.map +1 -1
  73. package/lib/resolvers/mutations/accounts/enrollUser.d.ts +1 -1
  74. package/lib/resolvers/mutations/accounts/enrollUser.d.ts.map +1 -1
  75. package/lib/resolvers/mutations/accounts/enrollUser.js +13 -16
  76. package/lib/resolvers/mutations/accounts/enrollUser.js.map +1 -1
  77. package/lib/resolvers/mutations/accounts/forgotPassword.d.ts.map +1 -1
  78. package/lib/resolvers/mutations/accounts/forgotPassword.js +11 -8
  79. package/lib/resolvers/mutations/accounts/forgotPassword.js.map +1 -1
  80. package/lib/resolvers/mutations/accounts/loginAsGuest.d.ts +1 -2
  81. package/lib/resolvers/mutations/accounts/loginAsGuest.d.ts.map +1 -1
  82. package/lib/resolvers/mutations/accounts/loginAsGuest.js +18 -3
  83. package/lib/resolvers/mutations/accounts/loginAsGuest.js.map +1 -1
  84. package/lib/resolvers/mutations/accounts/loginWithPassword.d.ts +2 -4
  85. package/lib/resolvers/mutations/accounts/loginWithPassword.d.ts.map +1 -1
  86. package/lib/resolvers/mutations/accounts/loginWithPassword.js +23 -26
  87. package/lib/resolvers/mutations/accounts/loginWithPassword.js.map +1 -1
  88. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.d.ts +1 -2
  89. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.d.ts.map +1 -1
  90. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js +13 -14
  91. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js.map +1 -1
  92. package/lib/resolvers/mutations/accounts/logout.d.ts +1 -3
  93. package/lib/resolvers/mutations/accounts/logout.d.ts.map +1 -1
  94. package/lib/resolvers/mutations/accounts/logout.js +5 -18
  95. package/lib/resolvers/mutations/accounts/logout.js.map +1 -1
  96. package/lib/resolvers/mutations/accounts/removeEmail.js +1 -1
  97. package/lib/resolvers/mutations/accounts/removeEmail.js.map +1 -1
  98. package/lib/resolvers/mutations/accounts/resetPassword.d.ts +2 -3
  99. package/lib/resolvers/mutations/accounts/resetPassword.d.ts.map +1 -1
  100. package/lib/resolvers/mutations/accounts/resetPassword.js +48 -43
  101. package/lib/resolvers/mutations/accounts/resetPassword.js.map +1 -1
  102. package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.d.ts.map +1 -1
  103. package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.js +5 -1
  104. package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.js.map +1 -1
  105. package/lib/resolvers/mutations/accounts/sendVerificationEmail.d.ts.map +1 -1
  106. package/lib/resolvers/mutations/accounts/sendVerificationEmail.js +15 -4
  107. package/lib/resolvers/mutations/accounts/sendVerificationEmail.js.map +1 -1
  108. package/lib/resolvers/mutations/accounts/setPassword.d.ts +1 -1
  109. package/lib/resolvers/mutations/accounts/setPassword.d.ts.map +1 -1
  110. package/lib/resolvers/mutations/accounts/setPassword.js +11 -3
  111. package/lib/resolvers/mutations/accounts/setPassword.js.map +1 -1
  112. package/lib/resolvers/mutations/accounts/setUsername.d.ts.map +1 -1
  113. package/lib/resolvers/mutations/accounts/setUsername.js +10 -2
  114. package/lib/resolvers/mutations/accounts/setUsername.js.map +1 -1
  115. package/lib/resolvers/mutations/accounts/verifyEmail.d.ts +1 -2
  116. package/lib/resolvers/mutations/accounts/verifyEmail.d.ts.map +1 -1
  117. package/lib/resolvers/mutations/accounts/verifyEmail.js +14 -6
  118. package/lib/resolvers/mutations/accounts/verifyEmail.js.map +1 -1
  119. package/lib/resolvers/mutations/assortments/createAssortment.d.ts +5 -7
  120. package/lib/resolvers/mutations/assortments/createAssortment.d.ts.map +1 -1
  121. package/lib/resolvers/mutations/assortments/createAssortment.js +7 -5
  122. package/lib/resolvers/mutations/assortments/createAssortment.js.map +1 -1
  123. package/lib/resolvers/mutations/filters/createFilter.d.ts +4 -5
  124. package/lib/resolvers/mutations/filters/createFilter.d.ts.map +1 -1
  125. package/lib/resolvers/mutations/filters/createFilter.js +7 -2
  126. package/lib/resolvers/mutations/filters/createFilter.js.map +1 -1
  127. package/lib/resolvers/mutations/filters/createFilterOption.d.ts +3 -4
  128. package/lib/resolvers/mutations/filters/createFilterOption.d.ts.map +1 -1
  129. package/lib/resolvers/mutations/filters/createFilterOption.js +5 -2
  130. package/lib/resolvers/mutations/filters/createFilterOption.js.map +1 -1
  131. package/lib/resolvers/mutations/index.d.ts +0 -12
  132. package/lib/resolvers/mutations/index.d.ts.map +1 -1
  133. package/lib/resolvers/mutations/index.js +0 -24
  134. package/lib/resolvers/mutations/index.js.map +1 -1
  135. package/lib/resolvers/mutations/orders/addCartDiscount.d.ts.map +1 -1
  136. package/lib/resolvers/mutations/orders/addCartDiscount.js +3 -1
  137. package/lib/resolvers/mutations/orders/addCartDiscount.js.map +1 -1
  138. package/lib/resolvers/mutations/orders/addCartProduct.js +1 -0
  139. package/lib/resolvers/mutations/orders/addCartProduct.js.map +1 -1
  140. package/lib/resolvers/mutations/orders/addCartQuotation.d.ts.map +1 -1
  141. package/lib/resolvers/mutations/orders/addCartQuotation.js +3 -1
  142. package/lib/resolvers/mutations/orders/addCartQuotation.js.map +1 -1
  143. package/lib/resolvers/mutations/orders/addMultipleCartProducts.d.ts.map +1 -1
  144. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js +3 -1
  145. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js.map +1 -1
  146. package/lib/resolvers/mutations/orders/confirmOrder.d.ts +0 -1
  147. package/lib/resolvers/mutations/orders/confirmOrder.d.ts.map +1 -1
  148. package/lib/resolvers/mutations/orders/confirmOrder.js.map +1 -1
  149. package/lib/resolvers/mutations/orders/emptyCart.js +2 -2
  150. package/lib/resolvers/mutations/orders/emptyCart.js.map +1 -1
  151. package/lib/resolvers/mutations/orders/rejectOrder.d.ts +0 -1
  152. package/lib/resolvers/mutations/orders/rejectOrder.d.ts.map +1 -1
  153. package/lib/resolvers/mutations/orders/rejectOrder.js.map +1 -1
  154. package/lib/resolvers/mutations/orders/removeCartDiscount.d.ts.map +1 -1
  155. package/lib/resolvers/mutations/orders/removeCartDiscount.js +3 -1
  156. package/lib/resolvers/mutations/orders/removeCartDiscount.js.map +1 -1
  157. package/lib/resolvers/mutations/orders/removeCartItem.d.ts.map +1 -1
  158. package/lib/resolvers/mutations/orders/removeCartItem.js +3 -1
  159. package/lib/resolvers/mutations/orders/removeCartItem.js.map +1 -1
  160. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.d.ts.map +1 -1
  161. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js +2 -2
  162. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js.map +1 -1
  163. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.d.ts.map +1 -1
  164. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js +2 -1
  165. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js.map +1 -1
  166. package/lib/resolvers/mutations/orders/updateCart.d.ts.map +1 -1
  167. package/lib/resolvers/mutations/orders/updateCart.js +5 -4
  168. package/lib/resolvers/mutations/orders/updateCart.js.map +1 -1
  169. package/lib/resolvers/mutations/orders/updateCartItem.d.ts.map +1 -1
  170. package/lib/resolvers/mutations/orders/updateCartItem.js +3 -1
  171. package/lib/resolvers/mutations/orders/updateCartItem.js.map +1 -1
  172. package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js +6 -2
  173. package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js.map +1 -1
  174. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.d.ts.map +1 -1
  175. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js +8 -1
  176. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js.map +1 -1
  177. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.d.ts.map +1 -1
  178. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js +3 -1
  179. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js.map +1 -1
  180. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.d.ts.map +1 -1
  181. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js +3 -1
  182. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js.map +1 -1
  183. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.d.ts.map +1 -1
  184. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js +3 -1
  185. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js.map +1 -1
  186. package/lib/resolvers/mutations/products/createProduct.d.ts +5 -6
  187. package/lib/resolvers/mutations/products/createProduct.d.ts.map +1 -1
  188. package/lib/resolvers/mutations/products/createProduct.js +6 -5
  189. package/lib/resolvers/mutations/products/createProduct.js.map +1 -1
  190. package/lib/resolvers/mutations/products/createProductVariation.d.ts +3 -3
  191. package/lib/resolvers/mutations/products/createProductVariation.d.ts.map +1 -1
  192. package/lib/resolvers/mutations/products/createProductVariation.js +7 -4
  193. package/lib/resolvers/mutations/products/createProductVariation.js.map +1 -1
  194. package/lib/resolvers/mutations/products/createProductVariationOption.d.ts +4 -5
  195. package/lib/resolvers/mutations/products/createProductVariationOption.d.ts.map +1 -1
  196. package/lib/resolvers/mutations/products/createProductVariationOption.js +8 -5
  197. package/lib/resolvers/mutations/products/createProductVariationOption.js.map +1 -1
  198. package/lib/resolvers/mutations/warehousing/exportToken.d.ts.map +1 -1
  199. package/lib/resolvers/mutations/warehousing/exportToken.js +20 -20
  200. package/lib/resolvers/mutations/warehousing/exportToken.js.map +1 -1
  201. package/lib/resolvers/queries/events/events.js +1 -1
  202. package/lib/resolvers/queries/events/events.js.map +1 -1
  203. package/lib/resolvers/queries/index.d.ts +0 -2
  204. package/lib/resolvers/queries/index.d.ts.map +1 -1
  205. package/lib/resolvers/queries/index.js +0 -2
  206. package/lib/resolvers/queries/index.js.map +1 -1
  207. package/lib/resolvers/queries/shopInfo.d.ts +0 -2
  208. package/lib/resolvers/queries/shopInfo.d.ts.map +1 -1
  209. package/lib/resolvers/queries/shopInfo.js +0 -3
  210. package/lib/resolvers/queries/shopInfo.js.map +1 -1
  211. package/lib/resolvers/queries/users/validateResetPasswordToken.js +1 -1
  212. package/lib/resolvers/queries/users/validateResetPasswordToken.js.map +1 -1
  213. package/lib/resolvers/queries/users/validateVerifyEmailToken.js +1 -1
  214. package/lib/resolvers/queries/users/validateVerifyEmailToken.js.map +1 -1
  215. package/lib/resolvers/type/assortment/assortment-types.d.ts.map +1 -1
  216. package/lib/resolvers/type/assortment/assortment-types.js +1 -0
  217. package/lib/resolvers/type/assortment/assortment-types.js.map +1 -1
  218. package/lib/resolvers/type/event-types.d.ts +1 -1
  219. package/lib/resolvers/type/event-types.d.ts.map +1 -1
  220. package/lib/resolvers/type/index.d.ts +4 -36
  221. package/lib/resolvers/type/index.d.ts.map +1 -1
  222. package/lib/resolvers/type/index.js +2 -6
  223. package/lib/resolvers/type/index.js.map +1 -1
  224. package/lib/resolvers/type/login-method-response-types.d.ts +3 -27
  225. package/lib/resolvers/type/login-method-response-types.d.ts.map +1 -1
  226. package/lib/resolvers/type/login-method-response-types.js +1 -6
  227. package/lib/resolvers/type/login-method-response-types.js.map +1 -1
  228. package/lib/resolvers/type/product/product-bundle-types.d.ts.map +1 -1
  229. package/lib/resolvers/type/product/product-configurable-types.d.ts.map +1 -1
  230. package/lib/resolvers/type/product/product-plan-types.d.ts.map +1 -1
  231. package/lib/resolvers/type/product/product-simple-types.d.ts.map +1 -1
  232. package/lib/resolvers/type/product/product-tokenized-types.d.ts.map +1 -1
  233. package/lib/resolvers/type/product/product-types.d.ts.map +1 -1
  234. package/lib/resolvers/type/product/product-types.js +1 -0
  235. package/lib/resolvers/type/product/product-types.js.map +1 -1
  236. package/lib/resolvers/type/user-types.d.ts +1 -3
  237. package/lib/resolvers/type/user-types.d.ts.map +1 -1
  238. package/lib/resolvers/type/user-types.js +0 -14
  239. package/lib/resolvers/type/user-types.js.map +1 -1
  240. package/lib/resolvers/type/webauthn-credentials-types.js +1 -1
  241. package/lib/resolvers/type/webauthn-credentials-types.js.map +1 -1
  242. package/lib/roles/all.d.ts.map +1 -1
  243. package/lib/roles/all.js +1 -7
  244. package/lib/roles/all.js.map +1 -1
  245. package/lib/roles/index.d.ts.map +1 -1
  246. package/lib/roles/index.js +0 -6
  247. package/lib/roles/index.js.map +1 -1
  248. package/lib/roles/loggedIn.d.ts.map +1 -1
  249. package/lib/roles/loggedIn.js +0 -4
  250. package/lib/roles/loggedIn.js.map +1 -1
  251. package/lib/schema/directives.d.ts.map +1 -1
  252. package/lib/schema/directives.js +1 -5
  253. package/lib/schema/directives.js.map +1 -1
  254. package/lib/schema/inputTypes.d.ts.map +1 -1
  255. package/lib/schema/inputTypes.js +11 -25
  256. package/lib/schema/inputTypes.js.map +1 -1
  257. package/lib/schema/mutation.d.ts.map +1 -1
  258. package/lib/schema/mutation.js +26 -85
  259. package/lib/schema/mutation.js.map +1 -1
  260. package/lib/schema/query.d.ts.map +1 -1
  261. package/lib/schema/query.js +0 -4
  262. package/lib/schema/query.js.map +1 -1
  263. package/lib/schema/scalars.d.ts.map +1 -1
  264. package/lib/schema/scalars.js +0 -1
  265. package/lib/schema/scalars.js.map +1 -1
  266. package/lib/schema/types/product/product.js +1 -1
  267. package/lib/schema/types/product/tokenized-product.js +1 -1
  268. package/lib/schema/types/shop.d.ts.map +1 -1
  269. package/lib/schema/types/shop.js +0 -1
  270. package/lib/schema/types/shop.js.map +1 -1
  271. package/lib/schema/types/user.d.ts.map +1 -1
  272. package/lib/schema/types/user.js +2 -21
  273. package/lib/schema/types/user.js.map +1 -1
  274. package/package.json +18 -12
  275. package/src/api-index.ts +19 -14
  276. package/src/context.ts +23 -10
  277. package/src/createGraphQLServer.ts +25 -36
  278. package/src/errors.ts +15 -21
  279. package/src/events.ts +8 -0
  280. package/src/express/createBulkImportMiddleware.ts +8 -4
  281. package/src/express/createERCMetadataMiddleware.ts +6 -4
  282. package/src/express/index.ts +127 -21
  283. package/src/express/passport/access-token-strategy.ts +39 -0
  284. package/src/express/passport/setup.ts +44 -0
  285. package/src/loaders/index.ts +2 -8
  286. package/src/locale-context.ts +13 -9
  287. package/src/resolvers/index.ts +0 -2
  288. package/src/resolvers/mutations/accounts/addEmail.ts +7 -2
  289. package/src/resolvers/mutations/accounts/addWebAuthnCredentials.ts +1 -1
  290. package/src/resolvers/mutations/accounts/changePassword.ts +18 -8
  291. package/src/resolvers/mutations/accounts/createUser.ts +30 -37
  292. package/src/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.ts +3 -3
  293. package/src/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.ts +4 -4
  294. package/src/resolvers/mutations/accounts/enrollUser.ts +18 -17
  295. package/src/resolvers/mutations/accounts/forgotPassword.ts +11 -7
  296. package/src/resolvers/mutations/accounts/loginAsGuest.ts +23 -4
  297. package/src/resolvers/mutations/accounts/loginWithPassword.ts +33 -36
  298. package/src/resolvers/mutations/accounts/loginWithWebAuthn.ts +22 -15
  299. package/src/resolvers/mutations/accounts/logout.ts +5 -21
  300. package/src/resolvers/mutations/accounts/removeEmail.ts +1 -1
  301. package/src/resolvers/mutations/accounts/resetPassword.ts +50 -53
  302. package/src/resolvers/mutations/accounts/sendEnrollmentEmail.ts +5 -1
  303. package/src/resolvers/mutations/accounts/sendVerificationEmail.ts +13 -4
  304. package/src/resolvers/mutations/accounts/setPassword.ts +9 -4
  305. package/src/resolvers/mutations/accounts/setUsername.ts +8 -2
  306. package/src/resolvers/mutations/accounts/verifyEmail.ts +15 -6
  307. package/src/resolvers/mutations/assortments/createAssortment.ts +16 -7
  308. package/src/resolvers/mutations/filters/createFilter.ts +8 -3
  309. package/src/resolvers/mutations/filters/createFilterOption.ts +9 -7
  310. package/src/resolvers/mutations/index.ts +0 -24
  311. package/src/resolvers/mutations/orders/addCartDiscount.ts +3 -1
  312. package/src/resolvers/mutations/orders/addCartProduct.ts +1 -1
  313. package/src/resolvers/mutations/orders/addCartQuotation.ts +3 -1
  314. package/src/resolvers/mutations/orders/addMultipleCartProducts.ts +23 -19
  315. package/src/resolvers/mutations/orders/confirmOrder.ts +0 -1
  316. package/src/resolvers/mutations/orders/emptyCart.ts +2 -2
  317. package/src/resolvers/mutations/orders/rejectOrder.ts +0 -2
  318. package/src/resolvers/mutations/orders/removeCartDiscount.ts +3 -1
  319. package/src/resolvers/mutations/orders/removeCartItem.ts +3 -1
  320. package/src/resolvers/mutations/orders/setOrderDeliveryProvider.ts +2 -3
  321. package/src/resolvers/mutations/orders/setOrderPaymentProvider.ts +2 -1
  322. package/src/resolvers/mutations/orders/updateCart.ts +5 -4
  323. package/src/resolvers/mutations/orders/updateCartItem.ts +3 -1
  324. package/src/resolvers/mutations/orders/updateOrderDeliveryPickUp.ts +7 -7
  325. package/src/resolvers/mutations/orders/updateOrderDeliveryShipping.ts +8 -1
  326. package/src/resolvers/mutations/orders/updateOrderPaymentCard.ts +3 -1
  327. package/src/resolvers/mutations/orders/updateOrderPaymentGeneric.ts +3 -1
  328. package/src/resolvers/mutations/orders/updateOrderPaymentInvoice.ts +3 -1
  329. package/src/resolvers/mutations/products/createProduct.ts +9 -7
  330. package/src/resolvers/mutations/products/createProductVariation.ts +11 -6
  331. package/src/resolvers/mutations/products/createProductVariationOption.ts +13 -6
  332. package/src/resolvers/mutations/warehousing/exportToken.ts +19 -20
  333. package/src/resolvers/queries/events/events.ts +1 -1
  334. package/src/resolvers/queries/index.ts +0 -2
  335. package/src/resolvers/queries/shopInfo.ts +0 -5
  336. package/src/resolvers/queries/users/validateResetPasswordToken.ts +1 -1
  337. package/src/resolvers/queries/users/validateVerifyEmailToken.ts +1 -1
  338. package/src/resolvers/type/assortment/assortment-types.ts +1 -0
  339. package/src/resolvers/type/event-types.ts +1 -1
  340. package/src/resolvers/type/index.ts +2 -6
  341. package/src/resolvers/type/login-method-response-types.ts +1 -12
  342. package/src/resolvers/type/product/product-types.ts +1 -0
  343. package/src/resolvers/type/user-types.ts +1 -17
  344. package/src/resolvers/type/webauthn-credentials-types.ts +1 -1
  345. package/src/roles/all.ts +1 -7
  346. package/src/roles/index.ts +0 -6
  347. package/src/roles/loggedIn.ts +0 -4
  348. package/src/schema/directives.ts +1 -5
  349. package/src/schema/inputTypes.ts +11 -25
  350. package/src/schema/mutation.ts +26 -85
  351. package/src/schema/query.ts +0 -4
  352. package/src/schema/scalars.ts +0 -1
  353. package/src/schema/types/product/product.ts +1 -1
  354. package/src/schema/types/product/tokenized-product.ts +1 -1
  355. package/src/schema/types/shop.ts +0 -1
  356. package/src/schema/types/user.ts +2 -21
  357. package/lib/express/createApolloMiddleware.d.ts +0 -4
  358. package/lib/express/createApolloMiddleware.d.ts.map +0 -1
  359. package/lib/express/createApolloMiddleware.js +0 -36
  360. package/lib/express/createApolloMiddleware.js.map +0 -1
  361. package/lib/express/createSingleSignOnMiddleware.d.ts +0 -5
  362. package/lib/express/createSingleSignOnMiddleware.d.ts.map +0 -1
  363. package/lib/express/createSingleSignOnMiddleware.js +0 -73
  364. package/lib/express/createSingleSignOnMiddleware.js.map +0 -1
  365. package/lib/hashPassword.d.ts +0 -2
  366. package/lib/hashPassword.d.ts.map +0 -1
  367. package/lib/hashPassword.js +0 -5
  368. package/lib/hashPassword.js.map +0 -1
  369. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts +0 -3
  370. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts.map +0 -1
  371. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js +0 -6
  372. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js.map +0 -1
  373. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts +0 -6
  374. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts.map +0 -1
  375. package/lib/resolvers/mutations/accounts/disableTOTP.js +0 -27
  376. package/lib/resolvers/mutations/accounts/disableTOTP.js.map +0 -1
  377. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts +0 -6
  378. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts.map +0 -1
  379. package/lib/resolvers/mutations/accounts/enableTOTP.js +0 -20
  380. package/lib/resolvers/mutations/accounts/enableTOTP.js.map +0 -1
  381. package/lib/resolvers/mutations/accounts/impersonate.d.ts +0 -10
  382. package/lib/resolvers/mutations/accounts/impersonate.d.ts.map +0 -1
  383. package/lib/resolvers/mutations/accounts/impersonate.js +0 -15
  384. package/lib/resolvers/mutations/accounts/impersonate.js.map +0 -1
  385. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts +0 -7
  386. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts.map +0 -1
  387. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js +0 -30
  388. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js.map +0 -1
  389. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts +0 -8
  390. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts.map +0 -1
  391. package/lib/resolvers/mutations/accounts/loginWithOAuth.js +0 -25
  392. package/lib/resolvers/mutations/accounts/loginWithOAuth.js.map +0 -1
  393. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts +0 -5
  394. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts.map +0 -1
  395. package/lib/resolvers/mutations/accounts/logoutAllSessions.js +0 -20
  396. package/lib/resolvers/mutations/accounts/logoutAllSessions.js.map +0 -1
  397. package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts +0 -7
  398. package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts.map +0 -1
  399. package/lib/resolvers/mutations/accounts/stopImpersonation.js +0 -21
  400. package/lib/resolvers/mutations/accounts/stopImpersonation.js.map +0 -1
  401. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts +0 -6
  402. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts.map +0 -1
  403. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js +0 -13
  404. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js.map +0 -1
  405. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts +0 -6
  406. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts.map +0 -1
  407. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js +0 -18
  408. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js.map +0 -1
  409. package/lib/resolvers/mutations/products/addProductMedia.d.ts +0 -6
  410. package/lib/resolvers/mutations/products/addProductMedia.d.ts.map +0 -1
  411. package/lib/resolvers/mutations/products/addProductMedia.js +0 -18
  412. package/lib/resolvers/mutations/products/addProductMedia.js.map +0 -1
  413. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts +0 -6
  414. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts.map +0 -1
  415. package/lib/resolvers/mutations/users/updateUserAvatar.js +0 -22
  416. package/lib/resolvers/mutations/users/updateUserAvatar.js.map +0 -1
  417. package/lib/resolvers/queries/users/impersonator.d.ts +0 -3
  418. package/lib/resolvers/queries/users/impersonator.d.ts.map +0 -1
  419. package/lib/resolvers/queries/users/impersonator.js +0 -12
  420. package/lib/resolvers/queries/users/impersonator.js.map +0 -1
  421. package/lib/resolvers/type/oauth-account.d.ts +0 -6
  422. package/lib/resolvers/type/oauth-account.d.ts.map +0 -1
  423. package/lib/resolvers/type/oauth-account.js +0 -7
  424. package/lib/resolvers/type/oauth-account.js.map +0 -1
  425. package/lib/resolvers/type/oauth-provider.d.ts +0 -6
  426. package/lib/resolvers/type/oauth-provider.d.ts.map +0 -1
  427. package/lib/resolvers/type/oauth-provider.js +0 -6
  428. package/lib/resolvers/type/oauth-provider.js.map +0 -1
  429. package/lib/user-context.d.ts +0 -7
  430. package/lib/user-context.d.ts.map +0 -1
  431. package/lib/user-context.js +0 -64
  432. package/lib/user-context.js.map +0 -1
  433. package/src/express/createApolloMiddleware.ts +0 -40
  434. package/src/express/createSingleSignOnMiddleware.ts +0 -92
  435. package/src/hashPassword.ts +0 -5
  436. package/src/resolvers/mutations/accounts/buildSecretTOTPAuthURL.ts +0 -8
  437. package/src/resolvers/mutations/accounts/disableTOTP.ts +0 -36
  438. package/src/resolvers/mutations/accounts/enableTOTP.ts +0 -23
  439. package/src/resolvers/mutations/accounts/impersonate.ts +0 -21
  440. package/src/resolvers/mutations/accounts/linkOAuthAccount.ts +0 -51
  441. package/src/resolvers/mutations/accounts/loginWithOAuth.ts +0 -38
  442. package/src/resolvers/mutations/accounts/logoutAllSessions.ts +0 -27
  443. package/src/resolvers/mutations/accounts/stopImpersonation.ts +0 -31
  444. package/src/resolvers/mutations/accounts/unlinkOAuthAccount.ts +0 -24
  445. package/src/resolvers/mutations/assortments/addAssortmentMedia.ts +0 -26
  446. package/src/resolvers/mutations/products/addProductMedia.ts +0 -24
  447. package/src/resolvers/mutations/users/updateUserAvatar.ts +0 -39
  448. package/src/resolvers/queries/users/impersonator.ts +0 -19
  449. package/src/resolvers/type/oauth-account.ts +0 -8
  450. package/src/resolvers/type/oauth-provider.ts +0 -5
  451. package/src/user-context.ts +0 -87
@@ -1,30 +1,40 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import { AuthOperationFailedError, InvalidCredentialsError } from '../../../errors.js';
3
+ import { InvalidCredentialsError, PasswordInvalidError } from '../../../errors.js';
4
4
 
5
5
  export default async function changePassword(
6
6
  root: Root,
7
7
  params: {
8
- oldPlainPassword?: string;
9
- newPlainPassword?: string;
8
+ oldPassword?: string;
9
+ newPassword?: string;
10
10
  },
11
11
  { modules, userId }: Context,
12
12
  ) {
13
13
  log('mutation changePassword', { userId });
14
14
 
15
- if (!params.newPlainPassword) {
15
+ if (!params.newPassword) {
16
16
  throw new Error('New password is required');
17
17
  }
18
- if (!params.oldPlainPassword) {
18
+ if (!params.oldPassword) {
19
19
  throw new Error('Old password is required');
20
20
  }
21
+
22
+ const user = await modules.users.findUserById(userId);
23
+
24
+ const isValidCurrentPassword =
25
+ user.services?.password &&
26
+ (await modules.users.verifyPassword(user.services?.password, params.oldPassword));
27
+ if (!isValidCurrentPassword) throw new InvalidCredentialsError({});
28
+
21
29
  let success = false;
30
+
22
31
  try {
23
- success = await modules.accounts.changePassword(userId, params);
32
+ await modules.users.setPassword(user._id, params.newPassword);
33
+ success = true;
24
34
  } catch (e) {
25
35
  success = false;
26
- if (e.code === 'InvalidCredentials') throw new InvalidCredentialsError({});
27
- else throw new AuthOperationFailedError({});
36
+ if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({ userId });
37
+ else throw e;
28
38
  }
29
39
 
30
40
  return { success };
@@ -1,12 +1,13 @@
1
- import { UserData } from '@unchainedshop/types/accounts.js';
1
+ import { UserData } from '@unchainedshop/types/user.js';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
3
  import { log } from '@unchainedshop/logger';
4
- import { hashPassword } from '../../../hashPassword.js';
5
4
  import {
6
5
  AuthOperationFailedError,
7
6
  EmailAlreadyExistsError,
8
7
  UsernameAlreadyExistsError,
9
8
  UsernameOrEmailRequiredError,
9
+ PasswordOrWebAuthnPublicKeyRequiredError,
10
+ PasswordInvalidError,
10
11
  } from '../../../errors.js';
11
12
 
12
13
  export default async function createUser(root: Root, params: UserData, context: Context) {
@@ -14,48 +15,40 @@ export default async function createUser(root: Root, params: UserData, context:
14
15
 
15
16
  log('mutation createUser', { email: params.email, username: params.username, userId });
16
17
 
17
- if (!params.plainPassword && !params.webAuthnPublicKeyCredentials) {
18
- throw new Error('Password or Public Key is required');
18
+ if (!params.username && !params.email) {
19
+ throw new UsernameOrEmailRequiredError({ username: params?.username });
19
20
  }
20
21
 
21
- const mappedUser = { ...params };
22
- if (mappedUser.plainPassword) {
23
- mappedUser.password = hashPassword(mappedUser.plainPassword);
24
- }
25
- delete mappedUser.plainPassword;
26
- delete mappedUser.webAuthnPublicKeyCredentials;
27
-
28
- const webAuthnService =
29
- params.webAuthnPublicKeyCredentials &&
30
- (await modules.accounts.webAuthn.verifyCredentialCreation(
31
- params.username,
32
- params.webAuthnPublicKeyCredentials,
33
- ));
34
- let newUserId;
35
- try {
36
- newUserId = await modules.accounts.createUser(mappedUser, {
37
- skipPasswordEnrollment: !!webAuthnService,
38
- });
39
- } catch (e) {
40
- if (e.code === 'EmailAlreadyExists') throw new EmailAlreadyExistsError({ email: params?.email });
41
- else if (e.code === 'UsernameAlreadyExists')
42
- throw new UsernameAlreadyExistsError({ username: params?.username });
43
- else if (e.code === 'UsernameOrEmailRequired')
44
- throw new UsernameOrEmailRequiredError({ username: params?.username });
45
- else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
22
+ if (!params.password && !params.webAuthnPublicKeyCredentials) {
23
+ throw new PasswordOrWebAuthnPublicKeyRequiredError({ username: params?.username });
46
24
  }
47
25
 
48
- if (newUserId && webAuthnService) {
49
- await modules.users.updateUser(
50
- { _id: newUserId },
26
+ try {
27
+ const newUserId = await modules.users.createUser(
51
28
  {
52
- $push: {
53
- 'services.webAuthn': webAuthnService,
54
- },
29
+ ...params,
30
+ initialPassword: false,
55
31
  },
56
32
  {},
57
33
  );
58
- }
59
34
 
60
- return modules.accounts.createLoginToken(newUserId, context);
35
+ let user = await modules.users.findUserById(newUserId);
36
+
37
+ user = await context.modules.users.updateHeartbeat(user._id, {
38
+ remoteAddress: context.remoteAddress,
39
+ remotePort: context.remotePort,
40
+ userAgent: context.userAgent,
41
+ locale: context.localeContext.normalized,
42
+ countryCode: context.countryContext,
43
+ });
44
+
45
+ return context.login(user);
46
+ } catch (e) {
47
+ if (e.cause === 'EMAIL_INVALID') throw new EmailAlreadyExistsError({ email: params?.email });
48
+ else if (e.cause === 'USERNAME_INVALID')
49
+ throw new UsernameAlreadyExistsError({ username: params?.username });
50
+ else if (e.cause === 'PASSWORD_INVALID')
51
+ throw new PasswordInvalidError({ username: params?.username });
52
+ else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
53
+ }
61
54
  }
@@ -4,14 +4,14 @@ import { Context, Root } from '@unchainedshop/types/api.js';
4
4
  export default async function createWebAuthnCredentialCreationOptions(
5
5
  root: Root,
6
6
  { extensionOptions, username }: { username: string; extensionOptions: any },
7
- { modules, userId, req }: Context,
7
+ { modules, userId, getHeader }: Context,
8
8
  ) {
9
9
  log(`mutation createWebAuthnCredentialCreationOptions ${username}`, {
10
10
  userId,
11
11
  });
12
12
 
13
- const options = await modules.accounts.webAuthn.createCredentialCreationOptions(
14
- req.headers.origin,
13
+ const options = await modules.users.webAuthn.createCredentialCreationOptions(
14
+ getHeader('origin') as string,
15
15
  username,
16
16
  extensionOptions,
17
17
  );
@@ -4,20 +4,20 @@ import { Context, Root } from '@unchainedshop/types/api.js';
4
4
  export default async function createWebAuthnCredentialRequestOptions(
5
5
  root: Root,
6
6
  { extensionOptions, username }: { username: string; extensionOptions: any },
7
- { modules, userId, req }: Context,
7
+ { modules, userId, getHeader }: Context,
8
8
  ) {
9
9
  log(`mutation createWebAuthnCredentialRequestOptions ${username}`, {
10
10
  userId,
11
11
  });
12
12
 
13
- const options = await modules.accounts.webAuthn.createCredentialRequestOptions(
14
- req.headers.origin,
13
+ const options = await modules.users.webAuthn.createCredentialRequestOptions(
14
+ getHeader('origin') as string,
15
15
  username,
16
16
  extensionOptions,
17
17
  );
18
18
 
19
19
  if (username) {
20
- const user = await modules.users.findUser({ username });
20
+ const user = await modules.users.findUserByUsername(username);
21
21
  options.allowCredentials = user?.services?.webAuthn?.map(({ id, type }) => ({
22
22
  id,
23
23
  type: type || options.type || 'public-key',
@@ -1,10 +1,10 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import { UserData } from '@unchainedshop/types/accounts.js';
4
- import { hashPassword } from '../../../hashPassword.js';
3
+ import { UserData } from '@unchainedshop/types/user.js';
5
4
  import {
6
5
  AuthOperationFailedError,
7
6
  EmailAlreadyExistsError,
7
+ PasswordInvalidError,
8
8
  UsernameAlreadyExistsError,
9
9
  UsernameOrEmailRequiredError,
10
10
  } from '../../../errors.js';
@@ -14,27 +14,28 @@ export default async function enrollUser(root: Root, params: UserData, context:
14
14
 
15
15
  log('mutation enrollUser', { email: params.email, userId: context.userId });
16
16
 
17
- const mappedUserData = params;
18
- mappedUserData.initialPassword = true;
19
- if (mappedUserData.plainPassword) {
20
- mappedUserData.password = hashPassword(mappedUserData.plainPassword);
17
+ if (!params.username && !params.email) {
18
+ throw new UsernameOrEmailRequiredError({});
21
19
  }
22
- delete mappedUserData.plainPassword;
23
20
 
24
- // Skip Messaging when password is set so we
25
- // don't send a verification e-mail after enrollment
26
21
  try {
27
- const userId = await modules.accounts.createUser(mappedUserData, {
28
- skipMessaging: !!mappedUserData.password,
29
- });
22
+ const userId = await modules.users.createUser(
23
+ {
24
+ ...params,
25
+ initialPassword: true,
26
+ },
27
+ {
28
+ skipMessaging: !!params.password,
29
+ },
30
+ );
30
31
 
31
32
  return modules.users.findUserById(userId);
32
33
  } catch (e) {
33
- if (e.code === 'EmailAlreadyExists') throw new EmailAlreadyExistsError({ email: params?.email });
34
- else if (e.code === 'UsernameAlreadyExists')
35
- throw new UsernameAlreadyExistsError({ username: params?.username, email: params.email });
36
- else if (e.code === 'UsernameOrEmailRequired')
37
- throw new UsernameOrEmailRequiredError({ username: params?.username, email: params.email });
34
+ if (e.cause === 'EMAIL_INVALID') throw new EmailAlreadyExistsError({ email: params?.email });
35
+ else if (e.cause === 'USERNAME_INVALID')
36
+ throw new UsernameAlreadyExistsError({ username: params?.username });
37
+ else if (e.cause === 'PASSWORD_INVALID')
38
+ throw new PasswordInvalidError({ username: params?.username });
38
39
  else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
39
40
  }
40
41
  }
@@ -1,6 +1,6 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import { AuthOperationFailedError, UserNotFoundError } from '../../../errors.js';
3
+ import { UserNotFoundError } from '../../../errors.js';
4
4
 
5
5
  export default async function forgotPassword(
6
6
  root: Root,
@@ -9,13 +9,17 @@ export default async function forgotPassword(
9
9
  ) {
10
10
  log('mutation forgotPassword', { email, userId });
11
11
 
12
- let success = false;
12
+ const user = await modules.users.findUserByEmail(email);
13
+ if (!user) throw new UserNotFoundError({ email });
14
+
13
15
  try {
14
- success = await modules.accounts.sendResetPasswordEmail(email);
16
+ await modules.users.sendResetPasswordEmail(user._id, email);
17
+ return {
18
+ success: true,
19
+ };
15
20
  } catch (e) {
16
- if (e.code === 'UserNotFound') throw new UserNotFoundError({ email });
17
- else throw new AuthOperationFailedError({ email });
21
+ return {
22
+ success: false,
23
+ };
18
24
  }
19
-
20
- return { success };
21
25
  }
@@ -1,12 +1,31 @@
1
1
  import { Context, Root } from '@unchainedshop/types/api.js';
2
2
  import { log } from '@unchainedshop/logger';
3
+ import moniker from 'moniker';
4
+ import { randomValueHex } from '@unchainedshop/utils';
3
5
 
4
6
  export default async function loginAsGuest(root: Root, _: any, context: Context) {
5
- const { modules } = context;
6
-
7
7
  log('mutation loginAsGuest');
8
8
 
9
- const loginToken = await modules.accounts.loginWithService({ service: 'guest' }, context);
9
+ const guestname = `${moniker.choose()}-${randomValueHex(5)}`;
10
+ const guestUserId = await context.modules.users.createUser(
11
+ {
12
+ email: `${guestname}@unchained.local`,
13
+ guest: true,
14
+ password: null,
15
+ initialPassword: true,
16
+ },
17
+ { skipMessaging: true },
18
+ );
19
+
20
+ let user = await context.modules.users.findUserById(guestUserId);
21
+
22
+ user = await context.modules.users.updateHeartbeat(user._id, {
23
+ remoteAddress: context.remoteAddress,
24
+ remotePort: context.remotePort,
25
+ userAgent: context.userAgent,
26
+ locale: context.localeContext.normalized,
27
+ countryCode: context.countryContext,
28
+ });
10
29
 
11
- return loginToken;
30
+ return context.login(user);
12
31
  }
@@ -1,54 +1,51 @@
1
1
  import { log } from '@unchainedshop/logger';
2
+
2
3
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import {
4
- AuthenticationFailedError,
5
- AuthOperationFailedError,
6
- InvalidCredentialsError,
7
- TwoFactorCodeDidNotMatchError,
8
- TwoFactorCodeRequiredError,
9
- UserDeactivatedError,
10
- } from '../../../errors.js';
11
- import { hashPassword } from '../../../hashPassword.js';
4
+ import { InvalidCredentialsError } from '../../../errors.js';
12
5
 
13
6
  export default async function loginWithPassword(
14
7
  root: Root,
15
8
  params: {
16
9
  username?: string;
17
10
  email?: string;
18
- plainPassword?: string;
19
- totpCode?: string;
11
+ password?: string;
20
12
  },
21
13
  context: Context,
22
14
  ) {
23
- const { modules } = context;
24
- const { username, email, plainPassword, totpCode } = params;
25
-
15
+ const { username, email, password } = params;
26
16
  log('mutation loginWithPassword', { username, email });
27
17
 
28
- if (!plainPassword) {
18
+ if (!password) {
29
19
  throw new Error('Password is required');
30
20
  }
31
21
 
32
- const mappedUserLoginParams = {
33
- user: email ? { email } : { username },
34
- password: hashPassword(plainPassword),
35
- code: totpCode,
36
- };
37
-
38
- try {
39
- const result = await modules.accounts.loginWithService(
40
- { service: 'password', ...mappedUserLoginParams },
41
- context,
42
- );
43
- return result;
44
- } catch (e) {
45
- if (e.code === 'AuthenticationFailed') throw new AuthenticationFailedError({ username, email });
46
- else if (e.code === 'UserDeactivated') throw new UserDeactivatedError({ username, email });
47
- else if (e.code === 'InvalidCredentials') throw new InvalidCredentialsError({ username, email });
48
- else if (e?.message?.includes('2FA code required'))
49
- throw new TwoFactorCodeRequiredError({ username, email });
50
- else if (e?.message?.includes("2FA code didn't match"))
51
- throw new TwoFactorCodeDidNotMatchError({ submittedCode: params.totpCode, username, email });
52
- else throw new AuthOperationFailedError({ submittedCode: params.totpCode, username, email });
22
+ let user = username
23
+ ? await context.modules.users.findUserByUsername(username)
24
+ : await context.modules.users.findUserByEmail(email);
25
+
26
+ const verified =
27
+ user.services?.password &&
28
+ (await context.modules.users.verifyPassword(user.services.password, password));
29
+
30
+ if (!verified) throw new InvalidCredentialsError({ username, email });
31
+
32
+ if (user.guest) {
33
+ await context.modules.users.updateGuest(user, false);
34
+ }
35
+
36
+ user = await context.modules.users.updateHeartbeat(user._id, {
37
+ remoteAddress: context.remoteAddress,
38
+ remotePort: context.remotePort,
39
+ userAgent: context.userAgent,
40
+ locale: context.localeContext.normalized,
41
+ countryCode: context.countryContext,
42
+ });
43
+
44
+ if (context.userId) {
45
+ await context.services.users.migrateUserData(context.userId, user._id, context);
53
46
  }
47
+
48
+ await context.services.orders.nextUserCart({ user, countryCode: context.countryContext }, context);
49
+
50
+ return context.login(user);
54
51
  }
@@ -1,10 +1,5 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import {
4
- AuthenticationFailedError,
5
- AuthOperationFailedError,
6
- UserDeactivatedError,
7
- } from '../../../errors.js';
8
3
 
9
4
  export default async function loginWithWebAuthn(
10
5
  root: Root,
@@ -13,15 +8,27 @@ export default async function loginWithWebAuthn(
13
8
  },
14
9
  context: Context,
15
10
  ) {
16
- const { modules } = context;
17
-
18
11
  log('mutation loginWithWebAuthn');
19
- try {
20
- const result = await modules.accounts.loginWithService({ service: 'webAuthn', ...params }, context);
21
- return result;
22
- } catch (e) {
23
- if (e.code === 'AuthenticationFailed') throw new AuthenticationFailedError({});
24
- else if (e.code === 'UserDeactivated') throw new UserDeactivatedError({});
25
- else throw new AuthOperationFailedError({});
26
- }
12
+
13
+ const username =
14
+ Buffer.from(params.webAuthnPublicKeyCredentials?.response?.userHandle, 'base64').toString() || '';
15
+
16
+ let user = await context.modules.users.findUserByUsername(username);
17
+ if (!user) throw new Error('User not found');
18
+
19
+ await context.modules.users.webAuthn.verifyCredentialRequest(
20
+ user.services?.webAuthn,
21
+ user.username,
22
+ params.webAuthnPublicKeyCredentials,
23
+ );
24
+
25
+ user = await context.modules.users.updateHeartbeat(user._id, {
26
+ remoteAddress: context.remoteAddress,
27
+ remotePort: context.remotePort,
28
+ userAgent: context.userAgent,
29
+ locale: context.localeContext.normalized,
30
+ countryCode: context.countryContext,
31
+ });
32
+
33
+ return context.login(user);
27
34
  }
@@ -1,28 +1,12 @@
1
1
  import { Context, Root } from '@unchainedshop/types/api.js';
2
- import { log, LogLevel } from '@unchainedshop/logger';
2
+ import { log } from '@unchainedshop/logger';
3
3
 
4
- export default async function logout(root: Root, { token }: { token: string }, context: Context) {
5
- const { modules, userId, setLoginToken } = context;
4
+ export default async function logout(root: Root, _: never, context: Context) {
5
+ const { userId } = context;
6
6
 
7
7
  log('mutation logout', { userId });
8
8
 
9
- const loggedOut = await modules.accounts.logout(
10
- {
11
- token,
12
- loginToken: context.loginToken,
13
- userId: context.userId,
14
- },
15
- context,
16
- );
9
+ const success = await context.logout();
17
10
 
18
- if (loggedOut.error) {
19
- log('Error while logging out', {
20
- logLevel: LogLevel.Error,
21
- ...loggedOut.error,
22
- });
23
- } else {
24
- setLoginToken(null);
25
- }
26
-
27
- return { success: loggedOut.success };
11
+ return { success };
28
12
  }
@@ -14,7 +14,7 @@ export default async function removeEmail(
14
14
  if (!(await modules.users.userExists({ userId: normalizedUserId })))
15
15
  throw new UserNotFoundError({ userId: normalizedUserId });
16
16
 
17
- await modules.accounts.removeEmail(normalizedUserId, params.email);
17
+ await modules.users.removeEmail(normalizedUserId, params.email);
18
18
 
19
19
  return modules.users.findUserById(normalizedUserId);
20
20
  }
@@ -1,71 +1,68 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
- import { emailRegexOperator } from '@unchainedshop/mongodb';
4
- import {
5
- AuthOperationFailedError,
6
- InvalidResetTokenError,
7
- NoEmailSetError,
8
- ResetPasswordLinkExpiredError,
9
- ResetPasswordLinkUnknownAddressError,
10
- } from '../../../errors.js';
3
+ import { InvalidResetTokenError, PasswordInvalidError } from '../../../errors.js';
11
4
 
12
5
  export default async function resetPassword(
13
6
  root: Root,
14
- params: { newPlainPassword?: string; token: string },
7
+ params: { newPassword?: string; token: string },
15
8
  context: Context,
16
9
  ) {
17
10
  const { modules, userId } = context;
18
11
 
19
12
  log('mutation resetPassword', { userId });
20
13
 
21
- if (!params.newPlainPassword) {
14
+ if (!params.newPassword) {
22
15
  throw new Error('Password is required');
23
16
  }
24
- try {
25
- const userWithNewPassword = await modules.accounts.resetPassword(params, context);
17
+ let user = await modules.users.findUserByResetToken(params.token);
18
+
19
+ if (!user) throw new InvalidResetTokenError({});
26
20
 
27
- const resetTicket = userWithNewPassword?.services?.password?.reset?.find(
28
- (t) => t.token === params.token,
29
- );
30
- if (resetTicket.address) {
31
- // Try verifying the E-Mail along the way
32
- try {
33
- const updatedUser = await modules.users.updateUser(
34
- {
35
- _id: userWithNewPassword.id,
36
- emails: {
37
- $elemMatch: {
38
- address: emailRegexOperator(resetTicket.address),
39
- verified: false,
40
- },
41
- },
42
- },
43
- {
44
- $set: {
45
- 'emails.$[email].verified': true,
46
- },
47
- },
48
- {
49
- arrayFilters: [{ 'email.address': resetTicket.address }],
50
- },
51
- );
52
- if (updatedUser) {
53
- await modules.accounts.emit('VerifyEmailSuccess', updatedUser);
54
- }
55
- } catch (e) {
56
- /* */
57
- }
58
- }
21
+ try {
22
+ await modules.users.setPassword(user._id, params.newPassword);
59
23
 
60
- const result = await modules.accounts.createLoginToken(userWithNewPassword.id, context);
61
- return result;
24
+ // TODO: Verify E-Mail after reset!
25
+ // if (resetTicket.address) {
26
+ // // Try verifying the E-Mail along the way
27
+ // try {
28
+ // const updatedUser = await modules.users.updateUser(
29
+ // {
30
+ // _id: userWithNewPassword.id,
31
+ // emails: {
32
+ // $elemMatch: {
33
+ // address: emailRegexOperator(resetTicket.address),
34
+ // verified: false,
35
+ // },
36
+ // },
37
+ // },
38
+ // {
39
+ // $set: {
40
+ // 'emails.$[email].verified': true,
41
+ // },
42
+ // },
43
+ // {
44
+ // arrayFilters: [{ 'email.address': resetTicket.address }],
45
+ // },
46
+ // );
47
+ // if (updatedUser) {
48
+ // await modules.accounts.emit('VerifyEmailSuccess', updatedUser);
49
+ // }
50
+ // } catch (e) {
51
+ // /* */
52
+ // }
53
+ // }
62
54
  } catch (e) {
63
- log(e);
64
- if (e.code === 'InvalidToken') throw new InvalidResetTokenError({});
65
- if (e.code === 'ResetPasswordLinkExpired') throw new ResetPasswordLinkExpiredError({});
66
- if (e.code === 'ResetPasswordLinkUnknownAddress​')
67
- throw new ResetPasswordLinkUnknownAddressError({});
68
- if (e.code === 'NoEmailSet') throw new NoEmailSetError({});
69
- throw new AuthOperationFailedError({});
55
+ if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({ userId: user._id });
56
+ else throw e;
70
57
  }
58
+
59
+ user = await context.modules.users.updateHeartbeat(user._id, {
60
+ remoteAddress: context.remoteAddress,
61
+ remotePort: context.remotePort,
62
+ userAgent: context.userAgent,
63
+ locale: context.localeContext.normalized,
64
+ countryCode: context.countryContext,
65
+ });
66
+
67
+ return context.login(user);
71
68
  }
@@ -1,5 +1,6 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context, Root } from '@unchainedshop/types/api.js';
3
+ import { UserNotFoundError } from '../../../errors.js';
3
4
 
4
5
  export default async function sendEnrollmentEmail(
5
6
  root: Root,
@@ -8,8 +9,11 @@ export default async function sendEnrollmentEmail(
8
9
  ) {
9
10
  log('mutation sendEnrollmentEmail', { email, userId });
10
11
 
12
+ const user = await modules.users.findUserByEmail(email);
13
+ if (!user) throw new UserNotFoundError({ email });
14
+
11
15
  try {
12
- await modules.accounts.sendEnrollmentEmail(email);
16
+ await modules.users.sendResetPasswordEmail(user._id, email, true);
13
17
  return {
14
18
  success: true,
15
19
  };
@@ -1,5 +1,6 @@
1
1
  import { Context, Root } from '@unchainedshop/types/api.js';
2
2
  import { log } from '@unchainedshop/logger';
3
+ import { UserNotFoundError } from '../../../errors.js';
3
4
 
4
5
  export default async function sendVerificationEmail(
5
6
  root: Root,
@@ -8,9 +9,17 @@ export default async function sendVerificationEmail(
8
9
  ) {
9
10
  log('mutation sendVerificationEmail', { email, userId });
10
11
 
11
- await modules.accounts.sendVerificationEmail(email);
12
+ const user = await modules.users.findUserByEmail(email);
13
+ if (!user) throw new UserNotFoundError({ email });
12
14
 
13
- return {
14
- success: true,
15
- };
15
+ try {
16
+ await modules.users.sendVerificationEmail(user._id, email);
17
+ return {
18
+ success: true,
19
+ };
20
+ } catch (e) {
21
+ return {
22
+ success: false,
23
+ };
24
+ }
16
25
  }