@unchainedshop/api 2.12.2 → 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 (469) 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 +2 -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 +7 -4
  46. package/lib/locale-context.d.ts.map +1 -1
  47. package/lib/locale-context.js +22 -23
  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/countries/updateCountry.d.ts +3 -1
  124. package/lib/resolvers/mutations/countries/updateCountry.d.ts.map +1 -1
  125. package/lib/resolvers/mutations/countries/updateCountry.js +5 -1
  126. package/lib/resolvers/mutations/countries/updateCountry.js.map +1 -1
  127. package/lib/resolvers/mutations/enrollments/createEnrollment.d.ts.map +1 -1
  128. package/lib/resolvers/mutations/enrollments/createEnrollment.js +2 -1
  129. package/lib/resolvers/mutations/enrollments/createEnrollment.js.map +1 -1
  130. package/lib/resolvers/mutations/filters/createFilter.d.ts +4 -5
  131. package/lib/resolvers/mutations/filters/createFilter.d.ts.map +1 -1
  132. package/lib/resolvers/mutations/filters/createFilter.js +7 -2
  133. package/lib/resolvers/mutations/filters/createFilter.js.map +1 -1
  134. package/lib/resolvers/mutations/filters/createFilterOption.d.ts +3 -4
  135. package/lib/resolvers/mutations/filters/createFilterOption.d.ts.map +1 -1
  136. package/lib/resolvers/mutations/filters/createFilterOption.js +5 -2
  137. package/lib/resolvers/mutations/filters/createFilterOption.js.map +1 -1
  138. package/lib/resolvers/mutations/index.d.ts +0 -12
  139. package/lib/resolvers/mutations/index.d.ts.map +1 -1
  140. package/lib/resolvers/mutations/index.js +0 -24
  141. package/lib/resolvers/mutations/index.js.map +1 -1
  142. package/lib/resolvers/mutations/orders/addCartDiscount.d.ts.map +1 -1
  143. package/lib/resolvers/mutations/orders/addCartDiscount.js +3 -1
  144. package/lib/resolvers/mutations/orders/addCartDiscount.js.map +1 -1
  145. package/lib/resolvers/mutations/orders/addCartProduct.js +1 -0
  146. package/lib/resolvers/mutations/orders/addCartProduct.js.map +1 -1
  147. package/lib/resolvers/mutations/orders/addCartQuotation.d.ts.map +1 -1
  148. package/lib/resolvers/mutations/orders/addCartQuotation.js +3 -1
  149. package/lib/resolvers/mutations/orders/addCartQuotation.js.map +1 -1
  150. package/lib/resolvers/mutations/orders/addMultipleCartProducts.d.ts.map +1 -1
  151. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js +3 -1
  152. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js.map +1 -1
  153. package/lib/resolvers/mutations/orders/emptyCart.js +2 -2
  154. package/lib/resolvers/mutations/orders/emptyCart.js.map +1 -1
  155. package/lib/resolvers/mutations/orders/removeCartDiscount.d.ts.map +1 -1
  156. package/lib/resolvers/mutations/orders/removeCartDiscount.js +3 -1
  157. package/lib/resolvers/mutations/orders/removeCartDiscount.js.map +1 -1
  158. package/lib/resolvers/mutations/orders/removeCartItem.d.ts.map +1 -1
  159. package/lib/resolvers/mutations/orders/removeCartItem.js +3 -1
  160. package/lib/resolvers/mutations/orders/removeCartItem.js.map +1 -1
  161. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.d.ts.map +1 -1
  162. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js +2 -2
  163. package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js.map +1 -1
  164. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.d.ts.map +1 -1
  165. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js +2 -1
  166. package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js.map +1 -1
  167. package/lib/resolvers/mutations/orders/updateCart.d.ts.map +1 -1
  168. package/lib/resolvers/mutations/orders/updateCart.js +5 -4
  169. package/lib/resolvers/mutations/orders/updateCart.js.map +1 -1
  170. package/lib/resolvers/mutations/orders/updateCartItem.d.ts.map +1 -1
  171. package/lib/resolvers/mutations/orders/updateCartItem.js +3 -1
  172. package/lib/resolvers/mutations/orders/updateCartItem.js.map +1 -1
  173. package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js +6 -2
  174. package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js.map +1 -1
  175. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.d.ts.map +1 -1
  176. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js +8 -1
  177. package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js.map +1 -1
  178. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.d.ts.map +1 -1
  179. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js +3 -1
  180. package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js.map +1 -1
  181. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.d.ts.map +1 -1
  182. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js +3 -1
  183. package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js.map +1 -1
  184. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.d.ts.map +1 -1
  185. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js +3 -1
  186. package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js.map +1 -1
  187. package/lib/resolvers/mutations/products/createProduct.d.ts +5 -6
  188. package/lib/resolvers/mutations/products/createProduct.d.ts.map +1 -1
  189. package/lib/resolvers/mutations/products/createProduct.js +6 -5
  190. package/lib/resolvers/mutations/products/createProduct.js.map +1 -1
  191. package/lib/resolvers/mutations/products/createProductVariation.d.ts +3 -3
  192. package/lib/resolvers/mutations/products/createProductVariation.d.ts.map +1 -1
  193. package/lib/resolvers/mutations/products/createProductVariation.js +7 -4
  194. package/lib/resolvers/mutations/products/createProductVariation.js.map +1 -1
  195. package/lib/resolvers/mutations/products/createProductVariationOption.d.ts +4 -5
  196. package/lib/resolvers/mutations/products/createProductVariationOption.d.ts.map +1 -1
  197. package/lib/resolvers/mutations/products/createProductVariationOption.js +8 -5
  198. package/lib/resolvers/mutations/products/createProductVariationOption.js.map +1 -1
  199. package/lib/resolvers/mutations/warehousing/exportToken.d.ts.map +1 -1
  200. package/lib/resolvers/mutations/warehousing/exportToken.js +20 -20
  201. package/lib/resolvers/mutations/warehousing/exportToken.js.map +1 -1
  202. package/lib/resolvers/queries/events/events.js +1 -1
  203. package/lib/resolvers/queries/events/events.js.map +1 -1
  204. package/lib/resolvers/queries/index.d.ts +0 -2
  205. package/lib/resolvers/queries/index.d.ts.map +1 -1
  206. package/lib/resolvers/queries/index.js +0 -2
  207. package/lib/resolvers/queries/index.js.map +1 -1
  208. package/lib/resolvers/queries/shopInfo.d.ts +0 -2
  209. package/lib/resolvers/queries/shopInfo.d.ts.map +1 -1
  210. package/lib/resolvers/queries/shopInfo.js +0 -3
  211. package/lib/resolvers/queries/shopInfo.js.map +1 -1
  212. package/lib/resolvers/queries/users/validateResetPasswordToken.js +1 -1
  213. package/lib/resolvers/queries/users/validateResetPasswordToken.js.map +1 -1
  214. package/lib/resolvers/queries/users/validateVerifyEmailToken.js +1 -1
  215. package/lib/resolvers/queries/users/validateVerifyEmailToken.js.map +1 -1
  216. package/lib/resolvers/type/assortment/assortment-types.d.ts.map +1 -1
  217. package/lib/resolvers/type/assortment/assortment-types.js +1 -0
  218. package/lib/resolvers/type/assortment/assortment-types.js.map +1 -1
  219. package/lib/resolvers/type/country-types.js +2 -2
  220. package/lib/resolvers/type/country-types.js.map +1 -1
  221. package/lib/resolvers/type/delivery-provider-types.d.ts.map +1 -1
  222. package/lib/resolvers/type/delivery-provider-types.js +2 -5
  223. package/lib/resolvers/type/delivery-provider-types.js.map +1 -1
  224. package/lib/resolvers/type/event-types.d.ts +1 -1
  225. package/lib/resolvers/type/event-types.d.ts.map +1 -1
  226. package/lib/resolvers/type/index.d.ts +4 -36
  227. package/lib/resolvers/type/index.d.ts.map +1 -1
  228. package/lib/resolvers/type/index.js +2 -6
  229. package/lib/resolvers/type/index.js.map +1 -1
  230. package/lib/resolvers/type/login-method-response-types.d.ts +3 -27
  231. package/lib/resolvers/type/login-method-response-types.d.ts.map +1 -1
  232. package/lib/resolvers/type/login-method-response-types.js +1 -6
  233. package/lib/resolvers/type/login-method-response-types.js.map +1 -1
  234. package/lib/resolvers/type/payment/payment-provider-types.d.ts.map +1 -1
  235. package/lib/resolvers/type/payment/payment-provider-types.js +2 -5
  236. package/lib/resolvers/type/payment/payment-provider-types.js.map +1 -1
  237. package/lib/resolvers/type/product/product-bundle-types.d.ts.map +1 -1
  238. package/lib/resolvers/type/product/product-configurable-types.d.ts.map +1 -1
  239. package/lib/resolvers/type/product/product-configurable-types.js +2 -8
  240. package/lib/resolvers/type/product/product-configurable-types.js.map +1 -1
  241. package/lib/resolvers/type/product/product-plan-types.d.ts.map +1 -1
  242. package/lib/resolvers/type/product/product-plan-types.js +4 -13
  243. package/lib/resolvers/type/product/product-plan-types.js.map +1 -1
  244. package/lib/resolvers/type/product/product-simple-types.d.ts.map +1 -1
  245. package/lib/resolvers/type/product/product-tokenized-types.d.ts.map +1 -1
  246. package/lib/resolvers/type/product/product-types.d.ts.map +1 -1
  247. package/lib/resolvers/type/product/product-types.js +1 -0
  248. package/lib/resolvers/type/product/product-types.js.map +1 -1
  249. package/lib/resolvers/type/user-types.d.ts +1 -3
  250. package/lib/resolvers/type/user-types.d.ts.map +1 -1
  251. package/lib/resolvers/type/user-types.js +0 -14
  252. package/lib/resolvers/type/user-types.js.map +1 -1
  253. package/lib/resolvers/type/webauthn-credentials-types.js +1 -1
  254. package/lib/resolvers/type/webauthn-credentials-types.js.map +1 -1
  255. package/lib/roles/all.d.ts.map +1 -1
  256. package/lib/roles/all.js +1 -7
  257. package/lib/roles/all.js.map +1 -1
  258. package/lib/roles/index.d.ts.map +1 -1
  259. package/lib/roles/index.js +0 -6
  260. package/lib/roles/index.js.map +1 -1
  261. package/lib/roles/loggedIn.d.ts.map +1 -1
  262. package/lib/roles/loggedIn.js +0 -4
  263. package/lib/roles/loggedIn.js.map +1 -1
  264. package/lib/schema/directives.d.ts.map +1 -1
  265. package/lib/schema/directives.js +1 -5
  266. package/lib/schema/directives.js.map +1 -1
  267. package/lib/schema/inputTypes.d.ts.map +1 -1
  268. package/lib/schema/inputTypes.js +13 -26
  269. package/lib/schema/inputTypes.js.map +1 -1
  270. package/lib/schema/mutation.d.ts.map +1 -1
  271. package/lib/schema/mutation.js +24 -83
  272. package/lib/schema/mutation.js.map +1 -1
  273. package/lib/schema/query.d.ts.map +1 -1
  274. package/lib/schema/query.js +0 -4
  275. package/lib/schema/query.js.map +1 -1
  276. package/lib/schema/scalars.d.ts.map +1 -1
  277. package/lib/schema/scalars.js +0 -1
  278. package/lib/schema/scalars.js.map +1 -1
  279. package/lib/schema/types/product/product.js +1 -1
  280. package/lib/schema/types/product/tokenized-product.js +1 -1
  281. package/lib/schema/types/shop.d.ts.map +1 -1
  282. package/lib/schema/types/shop.js +0 -1
  283. package/lib/schema/types/shop.js.map +1 -1
  284. package/lib/schema/types/user.d.ts.map +1 -1
  285. package/lib/schema/types/user.js +2 -21
  286. package/lib/schema/types/user.js.map +1 -1
  287. package/package.json +23 -17
  288. package/src/api-index.ts +19 -14
  289. package/src/context.ts +23 -10
  290. package/src/createGraphQLServer.ts +25 -36
  291. package/src/errors.ts +15 -21
  292. package/src/events.ts +8 -0
  293. package/src/express/createBulkImportMiddleware.ts +9 -4
  294. package/src/express/createERCMetadataMiddleware.ts +6 -4
  295. package/src/express/index.ts +127 -21
  296. package/src/express/passport/access-token-strategy.ts +39 -0
  297. package/src/express/passport/setup.ts +44 -0
  298. package/src/loaders/index.ts +2 -8
  299. package/src/locale-context.ts +60 -52
  300. package/src/resolvers/index.ts +0 -2
  301. package/src/resolvers/mutations/accounts/addEmail.ts +7 -2
  302. package/src/resolvers/mutations/accounts/addWebAuthnCredentials.ts +1 -1
  303. package/src/resolvers/mutations/accounts/changePassword.ts +18 -8
  304. package/src/resolvers/mutations/accounts/createUser.ts +30 -37
  305. package/src/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.ts +3 -3
  306. package/src/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.ts +4 -4
  307. package/src/resolvers/mutations/accounts/enrollUser.ts +18 -17
  308. package/src/resolvers/mutations/accounts/forgotPassword.ts +11 -7
  309. package/src/resolvers/mutations/accounts/loginAsGuest.ts +23 -4
  310. package/src/resolvers/mutations/accounts/loginWithPassword.ts +33 -36
  311. package/src/resolvers/mutations/accounts/loginWithWebAuthn.ts +22 -15
  312. package/src/resolvers/mutations/accounts/logout.ts +5 -21
  313. package/src/resolvers/mutations/accounts/removeEmail.ts +1 -1
  314. package/src/resolvers/mutations/accounts/resetPassword.ts +50 -53
  315. package/src/resolvers/mutations/accounts/sendEnrollmentEmail.ts +5 -1
  316. package/src/resolvers/mutations/accounts/sendVerificationEmail.ts +13 -4
  317. package/src/resolvers/mutations/accounts/setPassword.ts +9 -4
  318. package/src/resolvers/mutations/accounts/setUsername.ts +8 -2
  319. package/src/resolvers/mutations/accounts/verifyEmail.ts +15 -6
  320. package/src/resolvers/mutations/assortments/createAssortment.ts +16 -7
  321. package/src/resolvers/mutations/countries/updateCountry.ts +7 -2
  322. package/src/resolvers/mutations/enrollments/createEnrollment.ts +2 -1
  323. package/src/resolvers/mutations/filters/createFilter.ts +8 -3
  324. package/src/resolvers/mutations/filters/createFilterOption.ts +9 -7
  325. package/src/resolvers/mutations/index.ts +0 -24
  326. package/src/resolvers/mutations/orders/addCartDiscount.ts +3 -1
  327. package/src/resolvers/mutations/orders/addCartProduct.ts +1 -1
  328. package/src/resolvers/mutations/orders/addCartQuotation.ts +3 -1
  329. package/src/resolvers/mutations/orders/addMultipleCartProducts.ts +23 -19
  330. package/src/resolvers/mutations/orders/emptyCart.ts +2 -2
  331. package/src/resolvers/mutations/orders/removeCartDiscount.ts +3 -1
  332. package/src/resolvers/mutations/orders/removeCartItem.ts +3 -1
  333. package/src/resolvers/mutations/orders/setOrderDeliveryProvider.ts +2 -3
  334. package/src/resolvers/mutations/orders/setOrderPaymentProvider.ts +2 -1
  335. package/src/resolvers/mutations/orders/updateCart.ts +5 -4
  336. package/src/resolvers/mutations/orders/updateCartItem.ts +3 -1
  337. package/src/resolvers/mutations/orders/updateOrderDeliveryPickUp.ts +7 -7
  338. package/src/resolvers/mutations/orders/updateOrderDeliveryShipping.ts +8 -1
  339. package/src/resolvers/mutations/orders/updateOrderPaymentCard.ts +3 -1
  340. package/src/resolvers/mutations/orders/updateOrderPaymentGeneric.ts +3 -1
  341. package/src/resolvers/mutations/orders/updateOrderPaymentInvoice.ts +3 -1
  342. package/src/resolvers/mutations/products/createProduct.ts +9 -7
  343. package/src/resolvers/mutations/products/createProductVariation.ts +11 -6
  344. package/src/resolvers/mutations/products/createProductVariationOption.ts +13 -6
  345. package/src/resolvers/mutations/warehousing/exportToken.ts +19 -20
  346. package/src/resolvers/queries/events/events.ts +1 -1
  347. package/src/resolvers/queries/index.ts +0 -2
  348. package/src/resolvers/queries/shopInfo.ts +0 -5
  349. package/src/resolvers/queries/users/validateResetPasswordToken.ts +1 -1
  350. package/src/resolvers/queries/users/validateVerifyEmailToken.ts +1 -1
  351. package/src/resolvers/type/assortment/assortment-types.ts +1 -0
  352. package/src/resolvers/type/country-types.ts +2 -2
  353. package/src/resolvers/type/delivery-provider-types.ts +2 -10
  354. package/src/resolvers/type/event-types.ts +1 -1
  355. package/src/resolvers/type/index.ts +2 -6
  356. package/src/resolvers/type/login-method-response-types.ts +1 -12
  357. package/src/resolvers/type/payment/payment-provider-types.ts +2 -9
  358. package/src/resolvers/type/product/product-configurable-types.ts +3 -16
  359. package/src/resolvers/type/product/product-plan-types.ts +5 -25
  360. package/src/resolvers/type/product/product-types.ts +1 -0
  361. package/src/resolvers/type/user-types.ts +1 -17
  362. package/src/resolvers/type/webauthn-credentials-types.ts +1 -1
  363. package/src/roles/all.ts +1 -7
  364. package/src/roles/index.ts +0 -6
  365. package/src/roles/loggedIn.ts +0 -4
  366. package/src/schema/directives.ts +1 -5
  367. package/src/schema/inputTypes.ts +13 -26
  368. package/src/schema/mutation.ts +24 -83
  369. package/src/schema/query.ts +0 -4
  370. package/src/schema/scalars.ts +0 -1
  371. package/src/schema/types/product/product.ts +1 -1
  372. package/src/schema/types/product/tokenized-product.ts +1 -1
  373. package/src/schema/types/shop.ts +0 -1
  374. package/src/schema/types/user.ts +2 -21
  375. package/lib/express/createApolloMiddleware.d.ts +0 -4
  376. package/lib/express/createApolloMiddleware.d.ts.map +0 -1
  377. package/lib/express/createApolloMiddleware.js +0 -36
  378. package/lib/express/createApolloMiddleware.js.map +0 -1
  379. package/lib/express/createSingleSignOnMiddleware.d.ts +0 -5
  380. package/lib/express/createSingleSignOnMiddleware.d.ts.map +0 -1
  381. package/lib/express/createSingleSignOnMiddleware.js +0 -73
  382. package/lib/express/createSingleSignOnMiddleware.js.map +0 -1
  383. package/lib/hashPassword.d.ts +0 -2
  384. package/lib/hashPassword.d.ts.map +0 -1
  385. package/lib/hashPassword.js +0 -5
  386. package/lib/hashPassword.js.map +0 -1
  387. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts +0 -3
  388. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts.map +0 -1
  389. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js +0 -6
  390. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js.map +0 -1
  391. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts +0 -6
  392. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts.map +0 -1
  393. package/lib/resolvers/mutations/accounts/disableTOTP.js +0 -27
  394. package/lib/resolvers/mutations/accounts/disableTOTP.js.map +0 -1
  395. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts +0 -6
  396. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts.map +0 -1
  397. package/lib/resolvers/mutations/accounts/enableTOTP.js +0 -20
  398. package/lib/resolvers/mutations/accounts/enableTOTP.js.map +0 -1
  399. package/lib/resolvers/mutations/accounts/impersonate.d.ts +0 -10
  400. package/lib/resolvers/mutations/accounts/impersonate.d.ts.map +0 -1
  401. package/lib/resolvers/mutations/accounts/impersonate.js +0 -15
  402. package/lib/resolvers/mutations/accounts/impersonate.js.map +0 -1
  403. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts +0 -7
  404. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts.map +0 -1
  405. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js +0 -30
  406. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js.map +0 -1
  407. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts +0 -8
  408. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts.map +0 -1
  409. package/lib/resolvers/mutations/accounts/loginWithOAuth.js +0 -25
  410. package/lib/resolvers/mutations/accounts/loginWithOAuth.js.map +0 -1
  411. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts +0 -5
  412. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts.map +0 -1
  413. package/lib/resolvers/mutations/accounts/logoutAllSessions.js +0 -20
  414. package/lib/resolvers/mutations/accounts/logoutAllSessions.js.map +0 -1
  415. package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts +0 -7
  416. package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts.map +0 -1
  417. package/lib/resolvers/mutations/accounts/stopImpersonation.js +0 -21
  418. package/lib/resolvers/mutations/accounts/stopImpersonation.js.map +0 -1
  419. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts +0 -6
  420. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts.map +0 -1
  421. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js +0 -13
  422. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js.map +0 -1
  423. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts +0 -6
  424. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts.map +0 -1
  425. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js +0 -18
  426. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js.map +0 -1
  427. package/lib/resolvers/mutations/products/addProductMedia.d.ts +0 -6
  428. package/lib/resolvers/mutations/products/addProductMedia.d.ts.map +0 -1
  429. package/lib/resolvers/mutations/products/addProductMedia.js +0 -18
  430. package/lib/resolvers/mutations/products/addProductMedia.js.map +0 -1
  431. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts +0 -6
  432. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts.map +0 -1
  433. package/lib/resolvers/mutations/users/updateUserAvatar.js +0 -22
  434. package/lib/resolvers/mutations/users/updateUserAvatar.js.map +0 -1
  435. package/lib/resolvers/queries/users/impersonator.d.ts +0 -3
  436. package/lib/resolvers/queries/users/impersonator.d.ts.map +0 -1
  437. package/lib/resolvers/queries/users/impersonator.js +0 -12
  438. package/lib/resolvers/queries/users/impersonator.js.map +0 -1
  439. package/lib/resolvers/type/oauth-account.d.ts +0 -6
  440. package/lib/resolvers/type/oauth-account.d.ts.map +0 -1
  441. package/lib/resolvers/type/oauth-account.js +0 -7
  442. package/lib/resolvers/type/oauth-account.js.map +0 -1
  443. package/lib/resolvers/type/oauth-provider.d.ts +0 -6
  444. package/lib/resolvers/type/oauth-provider.d.ts.map +0 -1
  445. package/lib/resolvers/type/oauth-provider.js +0 -6
  446. package/lib/resolvers/type/oauth-provider.js.map +0 -1
  447. package/lib/user-context.d.ts +0 -7
  448. package/lib/user-context.d.ts.map +0 -1
  449. package/lib/user-context.js +0 -64
  450. package/lib/user-context.js.map +0 -1
  451. package/src/express/createApolloMiddleware.ts +0 -40
  452. package/src/express/createSingleSignOnMiddleware.ts +0 -92
  453. package/src/hashPassword.ts +0 -5
  454. package/src/resolvers/mutations/accounts/buildSecretTOTPAuthURL.ts +0 -8
  455. package/src/resolvers/mutations/accounts/disableTOTP.ts +0 -36
  456. package/src/resolvers/mutations/accounts/enableTOTP.ts +0 -23
  457. package/src/resolvers/mutations/accounts/impersonate.ts +0 -21
  458. package/src/resolvers/mutations/accounts/linkOAuthAccount.ts +0 -51
  459. package/src/resolvers/mutations/accounts/loginWithOAuth.ts +0 -38
  460. package/src/resolvers/mutations/accounts/logoutAllSessions.ts +0 -27
  461. package/src/resolvers/mutations/accounts/stopImpersonation.ts +0 -31
  462. package/src/resolvers/mutations/accounts/unlinkOAuthAccount.ts +0 -24
  463. package/src/resolvers/mutations/assortments/addAssortmentMedia.ts +0 -26
  464. package/src/resolvers/mutations/products/addProductMedia.ts +0 -24
  465. package/src/resolvers/mutations/users/updateUserAvatar.ts +0 -39
  466. package/src/resolvers/queries/users/impersonator.ts +0 -19
  467. package/src/resolvers/type/oauth-account.ts +0 -8
  468. package/src/resolvers/type/oauth-provider.ts +0 -5
  469. package/src/user-context.ts +0 -87
@@ -7,14 +7,9 @@ export default [
7
7
  """
8
8
  type LoginMethodResponse @cacheControl(maxAge: 0, scope: PRIVATE) {
9
9
  """
10
- Id of the user logged in user
10
+ Session ID
11
11
  """
12
- id: String!
13
-
14
- """
15
- Token of the connection
16
- """
17
- token: String!
12
+ _id: String!
18
13
 
19
14
  """
20
15
  Expiration date for the token
@@ -91,18 +86,6 @@ export default [
91
86
  verified: Boolean!
92
87
  }
93
88
 
94
- type OAuthProvider {
95
- _id: String!
96
- clientId: String!
97
- scopes: [String!]!
98
- }
99
-
100
- type OAuthAccount {
101
- _id: ID!
102
- provider: OAuthProvider!
103
- authorizationCode: String!
104
- }
105
-
106
89
  type User {
107
90
  _id: ID!
108
91
  created: DateTime!
@@ -110,7 +93,6 @@ export default [
110
93
  deleted: DateTime
111
94
  username: String
112
95
  isGuest: Boolean!
113
- isTwoFactorEnabled: Boolean!
114
96
  isInitialPassword: Boolean!
115
97
  webAuthnCredentials: [WebAuthnCredentials!]!
116
98
  web3Addresses: [Web3Address!]!
@@ -152,7 +134,6 @@ export default [
152
134
  ): [Enrollment!]!
153
135
  allowedActions: [RoleAction!]!
154
136
  tokens: [Token!]!
155
- oAuthAccounts: [OAuthAccount!]!
156
137
  reviews(limit: Int = 10, offset: Int = 0, sort: [SortOptionInput!]): [ProductReview!]!
157
138
  reviewsCount: Int!
158
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/schema/types/user.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6Jb;CACF,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/schema/types/user.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0Ib;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/api",
3
- "version": "2.12.2",
3
+ "version": "3.0.0-alpha2",
4
4
  "main": "lib/api-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/api-index.js",
@@ -40,35 +40,41 @@
40
40
  },
41
41
  "homepage": "https://github.com/unchainedshop/unchained#readme",
42
42
  "peerDependencies": {
43
- "@apollo/server": "^4.10.4",
44
- "cookie": "~0.6"
43
+ "graphql-yoga": "^5.6.1"
45
44
  },
46
45
  "optionalDependencies": {
47
- "express": "~4"
46
+ "connect-mongo": "~5",
47
+ "cookie-parser": "^1.4.6",
48
+ "express": "~4",
49
+ "express-session": "~1",
50
+ "passport": "^0.7.0",
51
+ "passport-strategy": "^1.0.0"
48
52
  },
49
53
  "dependencies": {
50
- "@metamask/eth-sig-util": "^7.0.2",
51
- "@unchainedshop/core": "^2.12.2",
52
- "@unchainedshop/events": "^2.12.2",
53
- "@unchainedshop/logger": "^2.12.2",
54
- "@unchainedshop/roles": "^2.12.2",
55
- "@unchainedshop/utils": "^2.12.2",
54
+ "@metamask/eth-sig-util": "^7.0.3",
55
+ "@unchainedshop/core": "^3.0.0-alpha2",
56
+ "@unchainedshop/events": "^3.0.0-alpha2",
57
+ "@unchainedshop/logger": "^3.0.0-alpha2",
58
+ "@unchainedshop/roles": "^3.0.0-alpha2",
59
+ "@unchainedshop/utils": "^3.0.0-alpha2",
56
60
  "accounting": "0.4.1",
57
61
  "dataloader": "^2.2.2",
58
62
  "graphql-scalars": "^1.23.0",
59
- "graphql-upload": "^16.0.2",
60
63
  "locale": "0.1.0",
61
64
  "lodash.isnumber": "3.0.3",
62
- "lru-cache": "^11.0.0"
65
+ "memoizee": "^0.4.17"
63
66
  },
64
67
  "devDependencies": {
65
- "@types/graphql-upload": "^16.0.7",
66
68
  "@types/locale": "^0.1.4",
67
- "@types/node": "^20.14.10",
68
- "@unchainedshop/types": "^2.12.2",
69
+ "@types/node": "^20.14.12",
70
+ "@unchainedshop/types": "^3.0.0-alpha2",
71
+ "connect-mongo": "^5.1.0",
69
72
  "express": "^4.19.2",
73
+ "express-session": "^1.18.0",
70
74
  "jest": "^29.7.0",
71
- "ts-jest": "^29.2.2",
72
- "typescript": "^5.5.3"
75
+ "passport": "^0.7.0",
76
+ "passport-strategy": "^1.0.0",
77
+ "ts-jest": "^29.2.3",
78
+ "typescript": "^5.5.4"
73
79
  }
74
80
  }
package/src/api-index.ts CHANGED
@@ -1,19 +1,19 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { UnchainedServerOptions } from '@unchainedshop/types/api.js';
4
- import type { ApolloServer } from '@apollo/server';
3
+ import { AdminUiConfig } from '@unchainedshop/types/api.js';
5
4
  import createGraphQLServer from './createGraphQLServer.js';
6
5
  import {
7
6
  createContextResolver,
8
7
  setCurrentContextResolver,
9
8
  getCurrentContextResolver,
10
9
  } from './context.js';
10
+ import { YogaServerOptions } from 'graphql-yoga';
11
+ import { UnchainedCore } from '@unchainedshop/types/core.js';
11
12
 
12
13
  export * from './context.js';
13
14
  export * as acl from './acl.js';
14
15
  export * as errors from './errors.js';
15
16
  export * as express from './express/index.js';
16
- export { hashPassword } from './hashPassword.js';
17
17
  export * as roles from './roles/index.js';
18
18
  export { createContextResolver, getCurrentContextResolver, setCurrentContextResolver };
19
19
 
@@ -35,14 +35,19 @@ const packageJson = loadJSON('../package.json');
35
35
 
36
36
  const { UNCHAINED_API_VERSION = packageJson?.version || '2.x' } = process.env;
37
37
 
38
- export const startAPIServer = async (options: UnchainedServerOptions): Promise<ApolloServer> => {
39
- const {
40
- unchainedAPI,
41
- roles,
42
- context: customContext,
43
- adminUiConfig,
44
- ...apolloServerOptions
45
- } = options || {};
38
+ export type GraphQLServerOptions = YogaServerOptions<any, any>;
39
+
40
+ export type UnchainedServerOptions = GraphQLServerOptions & {
41
+ unchainedAPI: UnchainedCore;
42
+ roles?: any;
43
+ context?: any;
44
+ events: Array<string>;
45
+ workTypes: Array<string>;
46
+ adminUiConfig?: AdminUiConfig;
47
+ };
48
+
49
+ export const startAPIServer = async (options: UnchainedServerOptions) => {
50
+ const { unchainedAPI, roles, context: customContext, adminUiConfig, ...serverOptions } = options || {};
46
51
 
47
52
  const contextResolver = createContextResolver(
48
53
  unchainedAPI,
@@ -53,11 +58,11 @@ export const startAPIServer = async (options: UnchainedServerOptions): Promise<A
53
58
 
54
59
  setCurrentContextResolver(
55
60
  customContext
56
- ? ({ req, res }) => {
57
- return customContext({ req, res }, contextResolver);
61
+ ? (props) => {
62
+ return customContext(props, contextResolver);
58
63
  }
59
64
  : contextResolver,
60
65
  );
61
66
 
62
- return createGraphQLServer(apolloServerOptions);
67
+ return createGraphQLServer(serverOptions);
63
68
  };
package/src/context.ts CHANGED
@@ -1,8 +1,7 @@
1
- import { UnchainedContextResolver, AdminUiConfig } from '@unchainedshop/types/api.js';
1
+ import { AdminUiConfig, Context, UnchainedHTTPServerContext } from '@unchainedshop/types/api.js';
2
2
  import { UnchainedCore } from '@unchainedshop/types/core.js';
3
3
  import instantiateLoaders from './loaders/index.js';
4
4
  import { getLocaleContext } from './locale-context.js';
5
- import { getUserContext } from './user-context.js';
6
5
 
7
6
  let context;
8
7
 
@@ -12,6 +11,18 @@ export const setCurrentContextResolver = (newContext: UnchainedContextResolver)
12
11
  context = newContext;
13
12
  };
14
13
 
14
+ export type UnchainedContextResolver = (
15
+ params: UnchainedHTTPServerContext & {
16
+ cookies?: Record<string, string>;
17
+ remoteAddress?: string;
18
+ remotePort?: number;
19
+ user?: any;
20
+ userId?: string;
21
+ login: (user: any) => Promise<{ _id: string; user: any; tokenExpires: Date }>;
22
+ logout: () => Promise<boolean>;
23
+ },
24
+ ) => Promise<Context>;
25
+
15
26
  export const createContextResolver =
16
27
  (
17
28
  unchainedAPI: UnchainedCore,
@@ -19,21 +30,23 @@ export const createContextResolver =
19
30
  version: string,
20
31
  adminUiConfig?: AdminUiConfig,
21
32
  ): UnchainedContextResolver =>
22
- async ({ req, res, ...apolloContext }) => {
23
- const loaders = await instantiateLoaders(req, res, unchainedAPI);
24
- const userContext = await getUserContext(req, res, unchainedAPI);
25
- const localeContext = await getLocaleContext(req, res, unchainedAPI);
33
+ async ({ getHeader, setHeader, cookies, remoteAddress, remotePort, user, userId, login, logout }) => {
34
+ const abstractHttpServerContext = { remoteAddress, remotePort, getHeader, setHeader, cookies };
35
+ const loaders = await instantiateLoaders(unchainedAPI);
36
+ const localeContext = await getLocaleContext(abstractHttpServerContext, unchainedAPI);
26
37
 
27
38
  return {
28
- req,
29
- res,
30
- ...apolloContext,
31
39
  ...unchainedAPI,
32
- ...userContext,
33
40
  ...localeContext,
41
+ user,
42
+ userId,
43
+ login,
44
+ logout,
34
45
  loaders,
35
46
  roles,
36
47
  version,
37
48
  adminUiConfig,
49
+ setHeader,
50
+ getHeader,
38
51
  };
39
52
  };
@@ -1,28 +1,10 @@
1
- import { ApolloServer } from '@apollo/server';
2
- import { log, LogLevel } from '@unchainedshop/logger';
3
- import { GraphQLFormattedError } from 'graphql';
1
+ import { createLogger } from '@unchainedshop/logger';
4
2
  import { buildDefaultTypeDefs } from './schema/index.js';
5
3
  import resolvers from './resolvers/index.js';
6
4
  import { actions } from './roles/index.js';
5
+ import { createYoga, createSchema } from 'graphql-yoga';
7
6
 
8
- const logGraphQLServerError = (error: GraphQLFormattedError) => {
9
- try {
10
- const {
11
- message,
12
- extensions: { stacktrace, ...parameters },
13
- ...rest
14
- } = error;
15
-
16
- const nativeError = new Error(message);
17
- nativeError.stack = (stacktrace as string[]).join('\n');
18
- nativeError.name = parameters.code as string;
19
- log(nativeError, {
20
- level: LogLevel.Error,
21
- ...parameters,
22
- ...rest,
23
- });
24
- } catch (e) {} // eslint-disable-line
25
- };
7
+ const logger = createLogger('unchained:api');
26
8
 
27
9
  export default async (options) => {
28
10
  const {
@@ -30,24 +12,31 @@ export default async (options) => {
30
12
  resolvers: additionalResolvers = [],
31
13
  events = [],
32
14
  workTypes = [],
33
- ...apolloServerOptions
15
+ schema: customSchema,
16
+ ...graphQLServerOptions
34
17
  } = options || {};
35
18
 
36
- const server = new ApolloServer({
37
- typeDefs: [
38
- ...buildDefaultTypeDefs({
39
- actions: Object.keys(actions),
40
- events,
41
- workTypes,
42
- }),
43
- ...additionalTypeDefs,
44
- ],
45
- resolvers: [resolvers, ...additionalResolvers],
46
- formatError: (error) => {
47
- logGraphQLServerError(error);
48
- return error;
19
+ const schema =
20
+ customSchema ||
21
+ createSchema({
22
+ typeDefs: [
23
+ ...buildDefaultTypeDefs({
24
+ actions: Object.keys(actions),
25
+ events,
26
+ workTypes,
27
+ }),
28
+ ...additionalTypeDefs,
29
+ ],
30
+ resolvers: [resolvers, ...additionalResolvers],
31
+ });
32
+
33
+ const server = createYoga({
34
+ schema,
35
+ logging: logger,
36
+ context: async (ctx: any) => {
37
+ return (ctx.req as any)?.unchainedContext;
49
38
  },
50
- ...apolloServerOptions,
39
+ ...graphQLServerOptions,
51
40
  });
52
41
 
53
42
  return server;
package/src/errors.ts CHANGED
@@ -217,12 +217,12 @@ export const CyclicAssortmentLinkNotSupportedError = createError(
217
217
 
218
218
  export const EmailAlreadyExistsError = createError(
219
219
  'EmailAlreadyExists',
220
- 'Email already exist in the database',
220
+ 'Email already exists or is invalid',
221
221
  );
222
222
 
223
223
  export const UsernameAlreadyExistsError = createError(
224
224
  'UsernameAlreadyExists',
225
- 'Username already exist in the database',
225
+ 'Username already exists or is invalid',
226
226
  );
227
227
 
228
228
  export const UsernameOrEmailRequiredError = createError(
@@ -230,28 +230,27 @@ export const UsernameOrEmailRequiredError = createError(
230
230
  'No username or email is provided.',
231
231
  );
232
232
 
233
- export const TwoFactorCodeDidNotMatchError = createError(
234
- 'TwoFactorCodeDidNotMatch',
235
- "2FA code didn't match",
233
+ export const PasswordInvalidError = createError(
234
+ 'PasswordInvalidError',
235
+ 'The provided password is invalid, maybe too insecure',
236
236
  );
237
237
 
238
- export const TwoFactorCodeRequiredError = createError('TwoFactorCodeRequired', '2FA code required');
239
-
240
- export const TwoFactorAlreadySetError = createError('TwoFactorAlreadySet', '2FA already set for user');
241
-
242
- export const TwoFactorNotSetError = createError('TwoFactorNotSet', '2FA not set for user');
238
+ export const PasswordOrWebAuthnPublicKeyRequiredError = createError(
239
+ 'PasswordOrWebAuthnPublicKeyRequired',
240
+ 'A password or a WebAuthn public key is required',
241
+ );
243
242
 
244
243
  export const InvalidCredentialsError = createError('InvalidCredentials', 'Invalid credentials provided');
245
244
 
246
- export const InvalidResetTokenError = createError('InvalidResetTokenError', 'Token validation failed');
247
-
248
- export const NoEmailSetError = createError('NoEmailSet', 'User has no email set');
245
+ export const InvalidResetTokenError = createError('InvalidResetTokenError', 'Token invalid or expired');
249
246
 
250
- export const ResetPasswordLinkExpiredError = createError(
251
- 'ResetPasswordLinkExpired',
252
- 'Token does not exist or is expired',
247
+ export const InvalidEmailVerificationTokenError = createError(
248
+ 'InvalidEmailVerificationTokenError',
249
+ 'Token invalid or expired',
253
250
  );
254
251
 
252
+ export const NoEmailSetError = createError('NoEmailSet', 'User has no email set');
253
+
255
254
  export const ResetPasswordLinkUnknownAddressError = createError(
256
255
  'ResetPasswordLinkUnknownAddress',
257
256
  'Valid token but no email address found for the entry',
@@ -292,11 +291,6 @@ export const ProductLinkedToQuotationError = createError(
292
291
  'Product is part of a requested/proposed quotations item, remove it from any requested/proposed quotations item before deleting',
293
292
  );
294
293
 
295
- export const ImpersonatingAdminUserError = createError(
296
- 'ImpersonatingAdminUserError',
297
- 'Can not impersonate a admin user account',
298
- );
299
-
300
294
  export const FileNotFoundError = createError('FileNotFoundError', 'File not found');
301
295
 
302
296
  export const FileUploadExpiredError = createError('FileUploadExpired', 'File upload has expired');
package/src/events.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { registerEvents } from '@unchainedshop/events';
2
+
3
+ export enum API_EVENTS {
4
+ API_LOGIN_TOKEN_CREATED = 'API_LOGIN_TOKEN_CREATED',
5
+ API_LOGOUT = 'API_LOGOUT',
6
+ }
7
+
8
+ registerEvents(Object.keys(API_EVENTS));
@@ -1,7 +1,8 @@
1
1
  import { createLogger } from '@unchainedshop/logger';
2
2
  import { checkAction } from '../acl.js';
3
3
  import { actions } from '../roles/index.js';
4
- import { getCurrentContextResolver } from '../context.js';
4
+ import { IncomingMessage } from 'http';
5
+ import { Context } from '@unchainedshop/types/api.js';
5
6
 
6
7
  const logger = createLogger('unchained:bulk-import');
7
8
 
@@ -17,19 +18,23 @@ const methodWrongHandler = (res) => () => {
17
18
  res.end();
18
19
  };
19
20
 
20
- export default async function bulkImportMiddleware(req, res) {
21
+ export default async function bulkImportMiddleware(
22
+ req: IncomingMessage & { query?: any; unchainedContext: Context },
23
+ res,
24
+ ) {
21
25
  try {
26
+ const context = req.unchainedContext;
27
+
22
28
  if (req.method !== 'POST') {
23
29
  methodWrongHandler(res)();
24
30
  return;
25
31
  }
26
32
 
27
- const contextResolver = getCurrentContextResolver();
28
- const context = await contextResolver({ req, res });
29
33
  await checkAction(context, (actions as any).bulkImport);
30
34
 
31
35
  const input: any = {
32
36
  createShouldUpsertIfIDExists: !!req.query?.createShouldUpsertIfIDExists,
37
+ updateShouldUpsertIfIDNotExists: !!req.query?.updateShouldUpsertIfIDNotExists,
33
38
  skipCacheInvalidation: !!req.query?.skipCacheInvalidation,
34
39
  remoteAddress: context.remoteAddress,
35
40
  };
@@ -3,7 +3,7 @@ import path from 'path';
3
3
  import { createLogger } from '@unchainedshop/logger';
4
4
  import { systemLocale } from '@unchainedshop/utils';
5
5
  import localePkg from 'locale';
6
- import { getCurrentContextResolver } from '../context.js';
6
+ import { Context } from '@unchainedshop/types/api.js';
7
7
 
8
8
  const { Locale } = localePkg;
9
9
 
@@ -21,15 +21,17 @@ const methodWrongHandler = (res) => () => {
21
21
  res.end();
22
22
  };
23
23
 
24
- export default async function ercMetadataMiddleware(req: IncomingMessage, res) {
24
+ export default async function ercMetadataMiddleware(
25
+ req: IncomingMessage & { unchainedContext: Context },
26
+ res,
27
+ ) {
25
28
  try {
26
29
  if (req.method !== 'GET') {
27
30
  methodWrongHandler(res)();
28
31
  return;
29
32
  }
30
33
 
31
- const contextResolver = getCurrentContextResolver();
32
- const context = await contextResolver({ req, res });
34
+ const context = req.unchainedContext;
33
35
  const url = new URL(req.url, process.env.ROOT_URL);
34
36
  const parsedPath = path.parse(url.pathname);
35
37
 
@@ -1,48 +1,154 @@
1
- import { IncomingMessage, OutgoingMessage } from 'http';
2
- import { UnchainedCore } from '@unchainedshop/types/core.js';
3
- import { ApolloServer } from '@apollo/server';
4
1
  import type e from 'express';
5
2
  import { getCurrentContextResolver } from '../context.js';
6
3
  import createBulkImportMiddleware from './createBulkImportMiddleware.js';
7
4
  import createERCMetadataMiddleware from './createERCMetadataMiddleware.js';
8
- import createApolloMiddleware from './createApolloMiddleware.js';
9
- import createSingleSignOnMiddleware from './createSingleSignOnMiddleware.js';
5
+ import cookieParser from 'cookie-parser';
6
+ import session from 'express-session';
7
+ import MongoStore from 'connect-mongo';
8
+ import { YogaServer } from 'graphql-yoga';
9
+ import setupPassport from './passport/setup.js';
10
+ import { mongodb } from '@unchainedshop/mongodb';
11
+ import { UnchainedCore } from '@unchainedshop/types/core.js';
12
+ import { emit } from '@unchainedshop/events';
13
+ import { API_EVENTS } from '../events.js';
14
+
15
+ const resolveUserRemoteAddress = (req) => {
16
+ const remoteAddress =
17
+ req.headers['x-real-ip'] ||
18
+ req.headers['x-forwarded-for'] ||
19
+ req.connection?.remoteAddress ||
20
+ req.socket?.remoteAddress ||
21
+ req.connection?.socket?.remoteAddress;
22
+
23
+ const remotePort =
24
+ req.connection?.remotePort || req.socket?.remotePort || req.connection?.socket?.remotePort;
25
+
26
+ return { remoteAddress, remotePort };
27
+ };
10
28
 
11
29
  const {
12
30
  BULK_IMPORT_API_PATH = '/bulk-import',
13
31
  ERC_METADATA_API_PATH = '/erc-metadata',
14
32
  GRAPHQL_API_PATH = '/graphql',
33
+ UNCHAINED_COOKIE_NAME = 'unchained_token',
34
+ UNCHAINED_COOKIE_PATH = '/',
35
+ UNCHAINED_COOKIE_DOMAIN,
36
+ NODE_ENV,
15
37
  } = process.env;
16
38
 
17
39
  const addContext = async function middlewareWithContext(
18
- req: IncomingMessage & { unchainedContext: UnchainedCore },
19
- res: OutgoingMessage,
20
- next,
40
+ req: e.Request & { cookies: any },
41
+ res: e.Response,
42
+ next: e.NextFunction,
21
43
  ) {
22
44
  try {
45
+ const setHeader = (key, value) => res.setHeader(key, value);
46
+ const getHeader = (key) => req.headers[key];
47
+ const cookies = req.cookies;
48
+ const { remoteAddress, remotePort } = resolveUserRemoteAddress(req);
49
+
23
50
  const context = getCurrentContextResolver();
24
- req.unchainedContext = await context({ req, res });
51
+
52
+ const login = async (user) => {
53
+ await new Promise((resolve, reject) => {
54
+ (req as any).login(user, (error, result) => {
55
+ if (error) {
56
+ return reject(error);
57
+ }
58
+ return resolve(result);
59
+ });
60
+ });
61
+
62
+ const tokenObject = {
63
+ _id: (req as any).sessionID,
64
+ /* eslint-disable-next-line */
65
+ tokenExpires: new Date((req as any).session?.cookie._expires),
66
+ };
67
+
68
+ await emit(API_EVENTS.API_LOGIN_TOKEN_CREATED, { userId: user._id, ...tokenObject });
69
+
70
+ /* eslint-disable-next-line */
71
+ (user as any)._inLoginMethodResponse = true;
72
+ return { user, ...tokenObject };
73
+ };
74
+
75
+ const logout = async (sessionId?: string) => { /* eslint-disable-line */
76
+ // TODO: this should only logout an explicitly provided session if sessionID
77
+ // has been provided
78
+ // express-session destroy
79
+ const { user } = req as any;
80
+ if (!user) return false;
81
+
82
+ const tokenObject = {
83
+ _id: sessionId || (req as any).sessionID,
84
+ userId: user._id,
85
+ };
86
+
87
+ await new Promise((resolve, reject) => {
88
+ (req as any).logout((error, result) => {
89
+ if (error) {
90
+ return reject(error);
91
+ }
92
+ return resolve(result);
93
+ });
94
+ });
95
+
96
+ await emit(API_EVENTS.API_LOGOUT, tokenObject);
97
+ return true;
98
+ };
99
+
100
+ (req as any).unchainedContext = await context({
101
+ setHeader,
102
+ getHeader,
103
+ cookies,
104
+ remoteAddress,
105
+ remotePort,
106
+ login,
107
+ logout,
108
+ user: (req as any).user,
109
+ userId: (req as any).user?._id,
110
+ });
25
111
  next();
26
112
  } catch (error) {
27
113
  next(error);
28
114
  }
29
115
  };
30
116
 
31
- export const useMiddlewareWithCurrentContext = (expressApp, path, ...middleware) => {
32
- if (!path) {
33
- throw new Error('Path is required for useMiddlewareWithCurrentContext');
34
- }
35
-
36
- expressApp.use(path, addContext, ...middleware);
37
- };
38
-
39
117
  export const connect = (
40
118
  expressApp: e.Express,
41
- { apolloGraphQLServer }: { apolloGraphQLServer: ApolloServer },
42
- options?: { corsOrigins?: any },
119
+ {
120
+ yogaServer,
121
+ db,
122
+ unchainedAPI,
123
+ }: { yogaServer: YogaServer<any, any>; db: mongodb.Db; unchainedAPI: UnchainedCore },
43
124
  ) => {
44
- expressApp.use(GRAPHQL_API_PATH, createApolloMiddleware(apolloGraphQLServer, options));
125
+ expressApp.use(cookieParser(), addContext);
126
+ const passport = setupPassport(unchainedAPI);
127
+ expressApp.use(passport.initialize());
128
+ expressApp.use(
129
+ session({
130
+ secret: process.env.UNCHAINED_TOKEN_SECRET,
131
+ store: MongoStore.create({
132
+ client: (db as any).client,
133
+ dbName: db.databaseName,
134
+ collectionName: 'sessions',
135
+ }),
136
+ name: UNCHAINED_COOKIE_NAME,
137
+ saveUninitialized: false,
138
+ resave: false,
139
+ cookie: {
140
+ domain: UNCHAINED_COOKIE_DOMAIN,
141
+ httpOnly: true,
142
+ path: UNCHAINED_COOKIE_PATH,
143
+ sameSite: NODE_ENV === 'production' ? 'lax' : 'none',
144
+ secure: NODE_ENV === 'production',
145
+ maxAge: 1000 * 60 * 60 * 24 * 7,
146
+ },
147
+ }),
148
+ );
149
+ expressApp.use(passport.session());
150
+ expressApp.use(passport.authenticate('access-token', { session: false }));
151
+ expressApp.use(GRAPHQL_API_PATH, yogaServer.handle);
45
152
  expressApp.use(ERC_METADATA_API_PATH, createERCMetadataMiddleware);
46
153
  expressApp.use(BULK_IMPORT_API_PATH, createBulkImportMiddleware);
47
- expressApp.use(['/', '/.well-known/unchained/cloud-sso'], createSingleSignOnMiddleware);
48
154
  };