@unchainedshop/api 3.0.0-rc1 → 3.0.0-rc11

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 (233) hide show
  1. package/lib/api-index.d.ts +1 -1
  2. package/lib/api-index.d.ts.map +1 -1
  3. package/lib/api-index.js +1 -1
  4. package/lib/api-index.js.map +1 -1
  5. package/lib/context.d.ts +0 -1
  6. package/lib/context.d.ts.map +1 -1
  7. package/lib/context.js +4 -19
  8. package/lib/context.js.map +1 -1
  9. package/lib/errors.d.ts +1 -0
  10. package/lib/errors.d.ts.map +1 -1
  11. package/lib/errors.js +1 -0
  12. package/lib/errors.js.map +1 -1
  13. package/lib/express/createBulkImportMiddleware.d.ts +1 -2
  14. package/lib/express/createBulkImportMiddleware.d.ts.map +1 -1
  15. package/lib/express/createBulkImportMiddleware.js.map +1 -1
  16. package/lib/express/createERCMetadataMiddleware.js +1 -1
  17. package/lib/express/createERCMetadataMiddleware.js.map +1 -1
  18. package/lib/express/index.d.ts.map +1 -1
  19. package/lib/express/index.js.map +1 -1
  20. package/lib/fastify/index.d.ts.map +1 -1
  21. package/lib/fastify/index.js.map +1 -1
  22. package/lib/loaders/index.d.ts.map +1 -1
  23. package/lib/loaders/index.js +120 -87
  24. package/lib/loaders/index.js.map +1 -1
  25. package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.d.ts.map +1 -1
  26. package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js +3 -0
  27. package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js.map +1 -1
  28. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts +4 -1
  29. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts.map +1 -1
  30. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts +4 -1
  31. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts.map +1 -1
  32. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js +2 -2
  33. package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js.map +1 -1
  34. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.d.ts.map +1 -1
  35. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js +4 -1
  36. package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js.map +1 -1
  37. package/lib/resolvers/mutations/accounts/resetPassword.d.ts.map +1 -1
  38. package/lib/resolvers/mutations/accounts/resetPassword.js +12 -43
  39. package/lib/resolvers/mutations/accounts/resetPassword.js.map +1 -1
  40. package/lib/resolvers/mutations/accounts/verifyWeb3Address.d.ts.map +1 -1
  41. package/lib/resolvers/mutations/accounts/verifyWeb3Address.js +3 -1
  42. package/lib/resolvers/mutations/accounts/verifyWeb3Address.js.map +1 -1
  43. package/lib/resolvers/mutations/countries/updateCountry.d.ts +1 -3
  44. package/lib/resolvers/mutations/countries/updateCountry.d.ts.map +1 -1
  45. package/lib/resolvers/mutations/countries/updateCountry.js +1 -5
  46. package/lib/resolvers/mutations/countries/updateCountry.js.map +1 -1
  47. package/lib/resolvers/mutations/orders/addCartDiscount.d.ts.map +1 -1
  48. package/lib/resolvers/mutations/orders/addCartDiscount.js +8 -3
  49. package/lib/resolvers/mutations/orders/addCartDiscount.js.map +1 -1
  50. package/lib/resolvers/mutations/orders/addCartProduct.d.ts.map +1 -1
  51. package/lib/resolvers/mutations/orders/addCartProduct.js +8 -3
  52. package/lib/resolvers/mutations/orders/addCartProduct.js.map +1 -1
  53. package/lib/resolvers/mutations/orders/addCartQuotation.d.ts.map +1 -1
  54. package/lib/resolvers/mutations/orders/addCartQuotation.js +8 -3
  55. package/lib/resolvers/mutations/orders/addCartQuotation.js.map +1 -1
  56. package/lib/resolvers/mutations/orders/addMultipleCartProducts.d.ts.map +1 -1
  57. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js +8 -3
  58. package/lib/resolvers/mutations/orders/addMultipleCartProducts.js.map +1 -1
  59. package/lib/resolvers/mutations/orders/checkoutCart.d.ts.map +1 -1
  60. package/lib/resolvers/mutations/orders/checkoutCart.js +10 -5
  61. package/lib/resolvers/mutations/orders/checkoutCart.js.map +1 -1
  62. package/lib/resolvers/mutations/orders/emptyCart.d.ts.map +1 -1
  63. package/lib/resolvers/mutations/orders/emptyCart.js +8 -3
  64. package/lib/resolvers/mutations/orders/emptyCart.js.map +1 -1
  65. package/lib/resolvers/mutations/orders/signPaymentProviderForCheckout.js +1 -1
  66. package/lib/resolvers/mutations/orders/signPaymentProviderForCheckout.js.map +1 -1
  67. package/lib/resolvers/mutations/orders/updateCart.d.ts.map +1 -1
  68. package/lib/resolvers/mutations/orders/updateCart.js +8 -3
  69. package/lib/resolvers/mutations/orders/updateCart.js.map +1 -1
  70. package/lib/resolvers/queries/users/validateResetPasswordToken.js +2 -2
  71. package/lib/resolvers/queries/users/validateResetPasswordToken.js.map +1 -1
  72. package/lib/resolvers/type/delivery-provider-types.d.ts +0 -1
  73. package/lib/resolvers/type/delivery-provider-types.d.ts.map +1 -1
  74. package/lib/resolvers/type/delivery-provider-types.js +0 -2
  75. package/lib/resolvers/type/delivery-provider-types.js.map +1 -1
  76. package/lib/resolvers/type/filter/loaded-filter-types.d.ts.map +1 -1
  77. package/lib/resolvers/type/filter/loaded-filter-types.js +1 -2
  78. package/lib/resolvers/type/filter/loaded-filter-types.js.map +1 -1
  79. package/lib/resolvers/type/index.d.ts +37 -46
  80. package/lib/resolvers/type/index.d.ts.map +1 -1
  81. package/lib/resolvers/type/index.js +0 -4
  82. package/lib/resolvers/type/index.js.map +1 -1
  83. package/lib/resolvers/type/order/order-delivery-discount-types.d.ts +2 -3
  84. package/lib/resolvers/type/order/order-delivery-discount-types.d.ts.map +1 -1
  85. package/lib/resolvers/type/order/order-delivery-discount-types.js +1 -3
  86. package/lib/resolvers/type/order/order-delivery-discount-types.js.map +1 -1
  87. package/lib/resolvers/type/order/order-global-discount-types.d.ts +2 -3
  88. package/lib/resolvers/type/order/order-global-discount-types.d.ts.map +1 -1
  89. package/lib/resolvers/type/order/order-global-discount-types.js +1 -3
  90. package/lib/resolvers/type/order/order-global-discount-types.js.map +1 -1
  91. package/lib/resolvers/type/order/order-item-discount-types.d.ts +2 -3
  92. package/lib/resolvers/type/order/order-item-discount-types.d.ts.map +1 -1
  93. package/lib/resolvers/type/order/order-item-discount-types.js +1 -3
  94. package/lib/resolvers/type/order/order-item-discount-types.js.map +1 -1
  95. package/lib/resolvers/type/order/order-item-types.d.ts.map +1 -1
  96. package/lib/resolvers/type/order/order-item-types.js +2 -11
  97. package/lib/resolvers/type/order/order-item-types.js.map +1 -1
  98. package/lib/resolvers/type/order/order-payment-discount-types.d.ts +2 -3
  99. package/lib/resolvers/type/order/order-payment-discount-types.d.ts.map +1 -1
  100. package/lib/resolvers/type/order/order-payment-discount-types.js +1 -7
  101. package/lib/resolvers/type/order/order-payment-discount-types.js.map +1 -1
  102. package/lib/resolvers/type/order/order-types.d.ts +1 -1
  103. package/lib/resolvers/type/order/order-types.d.ts.map +1 -1
  104. package/lib/resolvers/type/order/order-types.js +2 -7
  105. package/lib/resolvers/type/order/order-types.js.map +1 -1
  106. package/lib/resolvers/type/payment/payment-provider-types.d.ts +0 -1
  107. package/lib/resolvers/type/payment/payment-provider-types.d.ts.map +1 -1
  108. package/lib/resolvers/type/payment/payment-provider-types.js +0 -2
  109. package/lib/resolvers/type/payment/payment-provider-types.js.map +1 -1
  110. package/lib/resolvers/type/price-types.d.ts +0 -1
  111. package/lib/resolvers/type/price-types.d.ts.map +1 -1
  112. package/lib/resolvers/type/price-types.js.map +1 -1
  113. package/lib/resolvers/type/product/product-configurable-types.d.ts.map +1 -1
  114. package/lib/resolvers/type/product/product-configurable-types.js +5 -36
  115. package/lib/resolvers/type/product/product-configurable-types.js.map +1 -1
  116. package/lib/resolvers/type/product/product-discount.d.ts +2 -3
  117. package/lib/resolvers/type/product/product-discount.d.ts.map +1 -1
  118. package/lib/resolvers/type/product/product-discount.js +2 -4
  119. package/lib/resolvers/type/product/product-discount.js.map +1 -1
  120. package/lib/resolvers/type/product/product-plan-types.d.ts.map +1 -1
  121. package/lib/resolvers/type/product/product-plan-types.js +3 -7
  122. package/lib/resolvers/type/product/product-plan-types.js.map +1 -1
  123. package/lib/resolvers/type/product/product-simple-types.d.ts +0 -2
  124. package/lib/resolvers/type/product/product-simple-types.d.ts.map +1 -1
  125. package/lib/resolvers/type/product/product-simple-types.js +13 -50
  126. package/lib/resolvers/type/product/product-simple-types.js.map +1 -1
  127. package/lib/resolvers/type/product/product-tokenized-types.d.ts +0 -1
  128. package/lib/resolvers/type/product/product-tokenized-types.d.ts.map +1 -1
  129. package/lib/resolvers/type/product/product-tokenized-types.js +5 -23
  130. package/lib/resolvers/type/product/product-tokenized-types.js.map +1 -1
  131. package/lib/resolvers/type/user-types.d.ts +21 -2
  132. package/lib/resolvers/type/user-types.d.ts.map +1 -1
  133. package/lib/resolvers/type/user-types.js +2 -2
  134. package/lib/resolvers/type/user-types.js.map +1 -1
  135. package/lib/resolvers/type/webauthn-credentials-types.d.ts +26 -9
  136. package/lib/resolvers/type/webauthn-credentials-types.d.ts.map +1 -1
  137. package/lib/resolvers/type/webauthn-credentials-types.js.map +1 -1
  138. package/lib/schema/inputTypes.d.ts.map +1 -1
  139. package/lib/schema/inputTypes.js +0 -1
  140. package/lib/schema/inputTypes.js.map +1 -1
  141. package/lib/schema/mutation.js +2 -2
  142. package/lib/schema/types/dispatch.d.ts.map +1 -1
  143. package/lib/schema/types/dispatch.js +0 -1
  144. package/lib/schema/types/dispatch.js.map +1 -1
  145. package/lib/schema/types/price.d.ts.map +1 -1
  146. package/lib/schema/types/price.js +0 -2
  147. package/lib/schema/types/price.js.map +1 -1
  148. package/lib/schema/types/stock.d.ts.map +1 -1
  149. package/lib/schema/types/stock.js +0 -1
  150. package/lib/schema/types/stock.js.map +1 -1
  151. package/package.json +54 -17
  152. package/src/api-index.ts +1 -1
  153. package/src/context.ts +4 -20
  154. package/src/errors.ts +2 -0
  155. package/src/express/createBulkImportMiddleware.ts +1 -2
  156. package/src/express/createERCMetadataMiddleware.ts +1 -1
  157. package/src/express/index.ts +1 -2
  158. package/src/fastify/index.ts +2 -3
  159. package/src/loaders/index.ts +136 -105
  160. package/src/resolvers/mutations/accounts/addWebAuthnCredentials.ts +3 -0
  161. package/src/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.ts +2 -2
  162. package/src/resolvers/mutations/accounts/loginWithWebAuthn.ts +4 -1
  163. package/src/resolvers/mutations/accounts/resetPassword.ts +13 -46
  164. package/src/resolvers/mutations/accounts/verifyWeb3Address.ts +4 -1
  165. package/src/resolvers/mutations/countries/updateCountry.ts +2 -7
  166. package/src/resolvers/mutations/orders/addCartDiscount.ts +7 -2
  167. package/src/resolvers/mutations/orders/addCartProduct.ts +8 -2
  168. package/src/resolvers/mutations/orders/addCartQuotation.ts +7 -2
  169. package/src/resolvers/mutations/orders/addMultipleCartProducts.ts +7 -2
  170. package/src/resolvers/mutations/orders/checkoutCart.ts +9 -5
  171. package/src/resolvers/mutations/orders/emptyCart.ts +7 -3
  172. package/src/resolvers/mutations/orders/signPaymentProviderForCheckout.ts +1 -1
  173. package/src/resolvers/mutations/orders/updateCart.ts +7 -3
  174. package/src/resolvers/queries/users/validateResetPasswordToken.ts +2 -2
  175. package/src/resolvers/type/delivery-provider-types.ts +0 -3
  176. package/src/resolvers/type/filter/loaded-filter-types.ts +1 -2
  177. package/src/resolvers/type/index.ts +0 -4
  178. package/src/resolvers/type/order/order-delivery-discount-types.ts +1 -3
  179. package/src/resolvers/type/order/order-global-discount-types.ts +2 -3
  180. package/src/resolvers/type/order/order-item-discount-types.ts +1 -3
  181. package/src/resolvers/type/order/order-item-types.ts +3 -11
  182. package/src/resolvers/type/order/order-payment-discount-types.ts +2 -9
  183. package/src/resolvers/type/order/order-types.ts +3 -7
  184. package/src/resolvers/type/payment/payment-provider-types.ts +0 -2
  185. package/src/resolvers/type/price-types.ts +0 -1
  186. package/src/resolvers/type/product/product-configurable-types.ts +5 -49
  187. package/src/resolvers/type/product/product-discount.ts +2 -4
  188. package/src/resolvers/type/product/product-plan-types.ts +3 -11
  189. package/src/resolvers/type/product/product-simple-types.ts +14 -75
  190. package/src/resolvers/type/product/product-tokenized-types.ts +5 -35
  191. package/src/resolvers/type/user-types.ts +28 -12
  192. package/src/resolvers/type/webauthn-credentials-types.ts +29 -17
  193. package/src/schema/inputTypes.ts +0 -1
  194. package/src/schema/mutation.ts +2 -2
  195. package/src/schema/types/dispatch.ts +0 -1
  196. package/src/schema/types/price.ts +0 -2
  197. package/src/schema/types/stock.ts +0 -1
  198. package/tests/api-index.test.ts +4 -4
  199. package/lib/express/passport/access-token-strategy.d.ts +0 -10
  200. package/lib/express/passport/access-token-strategy.d.ts.map +0 -1
  201. package/lib/express/passport/access-token-strategy.js +0 -33
  202. package/lib/express/passport/access-token-strategy.js.map +0 -1
  203. package/lib/express/passport/setup.d.ts +0 -4
  204. package/lib/express/passport/setup.d.ts.map +0 -1
  205. package/lib/express/passport/setup.js +0 -30
  206. package/lib/express/passport/setup.js.map +0 -1
  207. package/lib/resolvers/mutations/products/deleteUserProductReviews.d.ts +0 -5
  208. package/lib/resolvers/mutations/products/deleteUserProductReviews.d.ts.map +0 -1
  209. package/lib/resolvers/mutations/products/deleteUserProductReviews.js +0 -15
  210. package/lib/resolvers/mutations/products/deleteUserProductReviews.js.map +0 -1
  211. package/lib/resolvers/mutations/users/deleteUser.d.ts +0 -6
  212. package/lib/resolvers/mutations/users/deleteUser.d.ts.map +0 -1
  213. package/lib/resolvers/mutations/users/deleteUser.js +0 -15
  214. package/lib/resolvers/mutations/users/deleteUser.js.map +0 -1
  215. package/lib/resolvers/mutations/users/deleteUserProductReviews.d.ts +0 -5
  216. package/lib/resolvers/mutations/users/deleteUserProductReviews.d.ts.map +0 -1
  217. package/lib/resolvers/mutations/users/deleteUserProductReviews.js +0 -15
  218. package/lib/resolvers/mutations/users/deleteUserProductReviews.js.map +0 -1
  219. package/lib/resolvers/mutations/utils/getOrderCart.d.ts +0 -7
  220. package/lib/resolvers/mutations/utils/getOrderCart.d.ts.map +0 -1
  221. package/lib/resolvers/mutations/utils/getOrderCart.js +0 -17
  222. package/lib/resolvers/mutations/utils/getOrderCart.js.map +0 -1
  223. package/lib/resolvers/type/dispatch-types.d.ts +0 -15
  224. package/lib/resolvers/type/dispatch-types.d.ts.map +0 -1
  225. package/lib/resolvers/type/dispatch-types.js +0 -13
  226. package/lib/resolvers/type/dispatch-types.js.map +0 -1
  227. package/lib/resolvers/type/stock-types.d.ts +0 -14
  228. package/lib/resolvers/type/stock-types.d.ts.map +0 -1
  229. package/lib/resolvers/type/stock-types.js +0 -12
  230. package/lib/resolvers/type/stock-types.js.map +0 -1
  231. package/src/resolvers/mutations/utils/getOrderCart.ts +0 -20
  232. package/src/resolvers/type/dispatch-types.ts +0 -27
  233. package/src/resolvers/type/stock-types.ts +0 -25
@@ -16,11 +16,11 @@ export default async function createWebAuthnCredentialRequestOptions(
16
16
  extensionOptions,
17
17
  );
18
18
 
19
- if (username) {
19
+ if (username && options) {
20
20
  const user = await modules.users.findUserByUsername(username);
21
21
  options.allowCredentials = user?.services?.webAuthn?.map(({ id, type }) => ({
22
22
  id,
23
- type: type || options.type || 'public-key',
23
+ type: type || 'public-key',
24
24
  }));
25
25
  }
26
26
 
@@ -1,5 +1,6 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context } from '../../../context.js';
3
+ import { WebAuthnDisabledError } from '../../../errors.js';
3
4
 
4
5
  export default async function loginWithWebAuthn(
5
6
  root: never,
@@ -16,12 +17,14 @@ export default async function loginWithWebAuthn(
16
17
  let user = await context.modules.users.findUserByUsername(username);
17
18
  if (!user) throw new Error('User not found');
18
19
 
19
- await context.modules.users.webAuthn.verifyCredentialRequest(
20
+ const verification = await context.modules.users.webAuthn.verifyCredentialRequest(
20
21
  user.services?.webAuthn,
21
22
  user.username,
22
23
  params.webAuthnPublicKeyCredentials,
23
24
  );
24
25
 
26
+ if (!verification) throw new WebAuthnDisabledError();
27
+
25
28
  user = await context.modules.users.updateHeartbeat(user._id, {
26
29
  remoteAddress: context.remoteAddress,
27
30
  remotePort: context.remotePort,
@@ -14,55 +14,22 @@ export default async function resetPassword(
14
14
  if (!params.newPassword) {
15
15
  throw new Error('Password is required');
16
16
  }
17
- let user = await modules.users.findUserByResetToken(params.token);
18
-
19
- if (!user) throw new InvalidResetTokenError({});
20
17
 
21
18
  try {
22
- await modules.users.setPassword(user._id, params.newPassword);
23
-
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
- // }
19
+ let user = await modules.users.resetPassword(params.token, params.newPassword);
20
+ if (!user) throw new InvalidResetTokenError({});
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.baseName,
27
+ countryCode: context.countryContext,
28
+ });
29
+
30
+ return context.login(user);
54
31
  } catch (e) {
55
- if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({ userId: user._id });
32
+ if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({});
56
33
  else throw e;
57
34
  }
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.baseName,
64
- countryCode: context.countryContext,
65
- });
66
-
67
- return context.login(user);
68
35
  }
@@ -1,5 +1,4 @@
1
1
  import { log } from '@unchainedshop/logger';
2
- import { recoverPersonalSignature } from '@metamask/eth-sig-util';
3
2
  import { UserWeb3AddressNotFoundError, UserWeb3AddressSignatureError } from '../../../errors.js';
4
3
  import { Context } from '../../../context.js';
5
4
 
@@ -21,6 +20,10 @@ export default async function verifyWeb3Address(
21
20
 
22
21
  const msg = `0x${Buffer.from(foundCredentials.nonce, 'utf8').toString('hex')}`;
23
22
 
23
+ // eslint-disable-next-line
24
+ // @ts-ignore
25
+ const { recoverPersonalSignature } = await import('@metamask/eth-sig-util');
26
+
24
27
  const recoveredAddr = recoverPersonalSignature({
25
28
  data: msg,
26
29
  signature: hash,
@@ -5,7 +5,7 @@ import { Context } from '../../../context.js';
5
5
 
6
6
  export default async function updateCountry(
7
7
  root: never,
8
- { country, countryId }: { country: Country & { defaultCurrencyId: string }; countryId: string },
8
+ { country, countryId }: { country: Country; countryId: string },
9
9
  { userId, modules }: Context,
10
10
  ) {
11
11
  log(`mutation updateCountry ${countryId}`, { userId });
@@ -15,12 +15,7 @@ export default async function updateCountry(
15
15
  if (!(await modules.countries.countryExists({ countryId })))
16
16
  throw new CountryNotFoundError({ countryId });
17
17
 
18
- const currencyObject = await modules.currencies.findCurrency({
19
- currencyId: country.defaultCurrencyId,
20
- });
21
- const defaultCurrencyCode = country?.defaultCurrencyCode || currencyObject?.isoCode;
22
-
23
- await modules.countries.update(countryId, { ...country, defaultCurrencyCode });
18
+ await modules.countries.update(countryId, country);
24
19
 
25
20
  return modules.countries.findCountry({ countryId });
26
21
  }
@@ -1,10 +1,10 @@
1
1
  import { Context } from '../../../context.js';
2
2
  import { log } from '@unchainedshop/logger';
3
- import { getOrderCart } from '../utils/getOrderCart.js';
4
3
  import {
5
4
  OrderWrongStatusError,
6
5
  OrderDiscountCodeAlreadyPresentError,
7
6
  OrderDiscountCodeNotValidError,
7
+ OrderNotFoundError,
8
8
  } from '../../../errors.js';
9
9
 
10
10
  export default async function addCartDiscount(
@@ -16,7 +16,12 @@ export default async function addCartDiscount(
16
16
 
17
17
  log(`mutation addCartDiscount ${code} ${orderId}`, { userId, orderId });
18
18
 
19
- const order = await getOrderCart({ orderId, user }, context);
19
+ const order = await services.orders.findOrInitCart({
20
+ orderId,
21
+ user,
22
+ countryCode: context.countryContext,
23
+ });
24
+ if (!order) throw new OrderNotFoundError({ orderId });
20
25
 
21
26
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
22
27
 
@@ -5,8 +5,8 @@ import {
5
5
  OrderQuantityTooLowError,
6
6
  InvalidIdError,
7
7
  OrderWrongStatusError,
8
+ OrderNotFoundError,
8
9
  } from '../../../errors.js';
9
- import { getOrderCart } from '../utils/getOrderCart.js';
10
10
  import { ordersSettings } from '@unchainedshop/core-orders';
11
11
 
12
12
  export default async function addCartProduct(
@@ -29,7 +29,13 @@ export default async function addCartProduct(
29
29
  const originalProduct = await modules.products.findProduct({ productId: originalProductId });
30
30
  if (!originalProduct) throw new ProductNotFoundError({ productId: originalProductId });
31
31
 
32
- const order = await getOrderCart({ orderId, user }, context);
32
+ const order = await services.orders.findOrInitCart({
33
+ orderId,
34
+ user,
35
+ countryCode: context.countryContext,
36
+ });
37
+ if (!order) throw new OrderNotFoundError({ orderId });
38
+
33
39
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
34
40
 
35
41
  const product = await modules.products.resolveOrderableProduct(originalProduct, { configuration });
@@ -8,8 +8,8 @@ import {
8
8
  InvalidIdError,
9
9
  OrderWrongStatusError,
10
10
  ProductNotFoundError,
11
+ OrderNotFoundError,
11
12
  } from '../../../errors.js';
12
- import { getOrderCart } from '../utils/getOrderCart.js';
13
13
  import { QuotationDirector } from '@unchainedshop/core';
14
14
 
15
15
  export default async function addCartQuotation(
@@ -43,7 +43,12 @@ export default async function addCartQuotation(
43
43
  throw new QuotationWrongStatusError({ status: quotation.status });
44
44
  }
45
45
 
46
- const order = await getOrderCart({ orderId, user }, context);
46
+ const order = await services.orders.findOrInitCart({
47
+ orderId,
48
+ user,
49
+ countryCode: context.countryContext,
50
+ });
51
+ if (!order) throw new OrderNotFoundError({ orderId });
47
52
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
48
53
 
49
54
  if (
@@ -4,8 +4,8 @@ import {
4
4
  ProductNotFoundError,
5
5
  OrderQuantityTooLowError,
6
6
  OrderWrongStatusError,
7
+ OrderNotFoundError,
7
8
  } from '../../../errors.js';
8
- import { getOrderCart } from '../utils/getOrderCart.js';
9
9
  import { ordersSettings } from '@unchainedshop/core-orders';
10
10
 
11
11
  export default async function addMultipleCartProducts(
@@ -41,7 +41,12 @@ export default async function addMultipleCartProducts(
41
41
  }),
42
42
  );
43
43
 
44
- const order = await getOrderCart({ orderId, user }, context);
44
+ const order = await services.orders.findOrInitCart({
45
+ orderId,
46
+ user,
47
+ countryCode: context.countryContext,
48
+ });
49
+ if (!order) throw new OrderNotFoundError({ orderId });
45
50
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
46
51
 
47
52
  // Reduce is used to wait for each product to be added before processing the next (sequential processing)
@@ -1,6 +1,5 @@
1
1
  import { Context } from '../../../context.js';
2
- import { OrderCheckoutError } from '../../../errors.js';
3
- import { getOrderCart } from '../utils/getOrderCart.js';
2
+ import { OrderCheckoutError, OrderNotFoundError } from '../../../errors.js';
4
3
  import { createLogger, log } from '@unchainedshop/logger';
5
4
 
6
5
  const logger = createLogger('unchained:api');
@@ -20,11 +19,16 @@ export default async function checkoutCart(
20
19
  log('mutation checkoutCart', { orderId: forceOrderId, userId });
21
20
 
22
21
  // Do not check for order status here! The checkout method will act accordingly
23
- let order = await getOrderCart({ orderId: forceOrderId, user }, context);
22
+ const order = await services.orders.findOrInitCart({
23
+ orderId: forceOrderId,
24
+ user,
25
+ countryCode: context.countryContext,
26
+ });
27
+ if (!order) throw new OrderNotFoundError({ orderId: forceOrderId });
24
28
 
25
29
  try {
26
- order = await services.orders.checkoutOrder(order._id, transactionContext);
27
- return order;
30
+ const checkedOutOrder = await services.orders.checkoutOrder(order._id, transactionContext);
31
+ return checkedOutOrder;
28
32
  } catch (error) {
29
33
  logger.error(error.message, { userId, orderId: order._id });
30
34
  throw new OrderCheckoutError({
@@ -1,7 +1,6 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context } from '../../../context.js';
3
- import { getOrderCart } from '../utils/getOrderCart.js';
4
- import { OrderWrongStatusError } from '../../../errors.js';
3
+ import { OrderNotFoundError, OrderWrongStatusError } from '../../../errors.js';
5
4
 
6
5
  export default async function emptyCart(
7
6
  root: never,
@@ -12,7 +11,12 @@ export default async function emptyCart(
12
11
 
13
12
  log('mutation emptyCart', { userId, orderId });
14
13
 
15
- const order = await getOrderCart({ orderId, user }, context);
14
+ const order = await services.orders.findOrInitCart({
15
+ orderId,
16
+ user,
17
+ countryCode: context.countryContext,
18
+ });
19
+ if (!order) throw new OrderNotFoundError({ orderId });
16
20
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
17
21
 
18
22
  if (!order) return null;
@@ -32,7 +32,7 @@ export default async function signPaymentProviderForCheckout(
32
32
  if (!orderPayment) throw new OrderPaymentNotFoundError({ orderPaymentId });
33
33
  } else {
34
34
  const order = await modules.orders.cart({
35
- countryContext: context.countryContext || context.user.lastLogin?.countryCode,
35
+ countryCode: context.countryContext,
36
36
  userId,
37
37
  });
38
38
  if (!order) throw new UserNoCartError({ userId });
@@ -1,7 +1,6 @@
1
1
  import { log } from '@unchainedshop/logger';
2
2
  import { Context } from '../../../context.js';
3
- import { getOrderCart } from '../utils/getOrderCart.js';
4
- import { OrderWrongStatusError } from '../../../errors.js';
3
+ import { OrderNotFoundError, OrderWrongStatusError } from '../../../errors.js';
5
4
  import { Address, Contact } from '@unchainedshop/mongodb';
6
5
 
7
6
  interface UpdateCartParams {
@@ -20,7 +19,12 @@ export default async function updateCart(root: never, params: UpdateCartParams,
20
19
 
21
20
  log('mutation updateCart', { userId });
22
21
 
23
- let order = await getOrderCart({ orderId, user }, context);
22
+ let order = await services.orders.findOrInitCart({
23
+ orderId,
24
+ user,
25
+ countryCode: context.countryContext,
26
+ });
27
+ if (!order) throw new OrderNotFoundError({ orderId });
24
28
  if (!modules.orders.isCart(order)) throw new OrderWrongStatusError({ status: order.status });
25
29
 
26
30
  if (meta) {
@@ -10,7 +10,7 @@ export default async function validateResetPasswordToken(
10
10
 
11
11
  log('query validateResetPasswordToken', { userId, token: params.token });
12
12
 
13
- const user = await modules.users.findUserByResetToken(params.token);
13
+ const resetToken = await modules.users.findResetToken(params.token);
14
14
 
15
- return !!user;
15
+ return !!resetToken;
16
16
  }
@@ -1,7 +1,6 @@
1
1
  import { Context } from '../../context.js';
2
2
  import { DeliveryProvider as DeliveryProviderType } from '@unchainedshop/core-delivery';
3
3
  import { DeliveryDirector, DeliveryError, DeliveryPricingDirector } from '@unchainedshop/core';
4
- import { sha256 } from '@unchainedshop/utils';
5
4
 
6
5
  export type HelperType<P, T> = (provider: DeliveryProviderType, params: P, context: Context) => T;
7
6
 
@@ -24,7 +23,6 @@ export interface DeliveryProviderHelperTypes {
24
23
  context: any;
25
24
  },
26
25
  Promise<{
27
- _id: string;
28
26
  amount: number;
29
27
  currencyCode: string;
30
28
  countryCode: string;
@@ -84,7 +82,6 @@ export const DeliveryProvider: DeliveryProviderHelperTypes = {
84
82
  };
85
83
 
86
84
  return {
87
- _id: await sha256([deliveryProvider._id, country, useNetPrice, order ? order._id : ''].join('')),
88
85
  amount: orderPrice.amount,
89
86
  currencyCode: orderPrice.currency,
90
87
  countryCode: country,
@@ -1,7 +1,6 @@
1
1
  import { Context } from '../../../context.js';
2
2
  import { Filter, SearchQuery } from '@unchainedshop/core-filters';
3
3
  import { FilterDirector } from '@unchainedshop/core';
4
- import { intersectSet } from '@unchainedshop/utils';
5
4
 
6
5
  type LoadedFilterData = {
7
6
  forceLiveCollection: boolean;
@@ -26,7 +25,7 @@ export const LoadedFilter = {
26
25
  ) => {
27
26
  const filterActions = await FilterDirector.actions({ searchQuery }, context);
28
27
  return filterActions.aggregateProductIds({
29
- productIds: Array.from(intersectSet(filteredByOtherFiltersSet, filteredByThisFilterSet)),
28
+ productIds: Array.from(filteredByOtherFiltersSet.intersection(filteredByThisFilterSet)),
30
29
  }).length;
31
30
  },
32
31
  productsCount: async (
@@ -12,7 +12,6 @@ import { Country } from './country-types.js';
12
12
  import { Currency } from './currency-types.js';
13
13
  import { DeliveryProvider } from './delivery-provider-types.js';
14
14
  import { Dimensions } from './dimensions-types.js';
15
- import { Dispatch } from './dispatch-types.js';
16
15
  import { Enrollment } from './enrollment/enrollment-types.js';
17
16
  import { EnrollmentDelivery } from './enrollment/enrollment-delivery-types.js';
18
17
  import { EnrollmentPayment } from './enrollment/enrollment-payment-types.js';
@@ -57,7 +56,6 @@ import { Quotation } from './quotation-types.js';
57
56
  import { Shop } from './shop-types.js';
58
57
  import { SimpleProduct } from './product/product-simple-types.js';
59
58
  import { TokenizedProduct } from './product/product-tokenized-types.js';
60
- import { Stock } from './stock-types.js';
61
59
  import { User } from './user-types.js';
62
60
  import { WebAuthnCredentials } from './webauthn-credentials-types.js';
63
61
  import { WarehousingProvider } from './warehousing-provider-types.js';
@@ -84,7 +82,6 @@ const types = {
84
82
  Currency,
85
83
  DeliveryProvider,
86
84
  Dimensions,
87
- Dispatch,
88
85
  Enrollment,
89
86
  EnrollmentDelivery,
90
87
  EnrollmentPayment,
@@ -131,7 +128,6 @@ const types = {
131
128
  SimpleProduct,
132
129
  TokenizedProduct,
133
130
  Token,
134
- Stock,
135
131
  User,
136
132
  WebAuthnCredentials,
137
133
  WarehousingProvider,
@@ -1,6 +1,5 @@
1
1
  import { Context } from '../../../context.js';
2
2
  import { OrderDeliveryDiscount as OrderDeliveryDiscountType } from '@unchainedshop/core-orders';
3
- import { sha256 } from '@unchainedshop/utils';
4
3
 
5
4
  export const OrderDeliveryDiscount = {
6
5
  _id(obj: OrderDeliveryDiscountType) {
@@ -13,9 +12,8 @@ export const OrderDeliveryDiscount = {
13
12
  });
14
13
  },
15
14
 
16
- async total(obj: OrderDeliveryDiscountType) {
15
+ total(obj: OrderDeliveryDiscountType) {
17
16
  return {
18
- _id: await sha256([`${obj.item._id}:${obj.discountId}`, obj.amount, obj.currency].join('')),
19
17
  amount: obj.amount,
20
18
  currency: obj.currency,
21
19
  };
@@ -1,6 +1,6 @@
1
1
  import { Order } from '@unchainedshop/core-orders';
2
2
  import { Context } from '../../../context.js';
3
- import { Price, sha256 } from '@unchainedshop/utils';
3
+ import { Price } from '@unchainedshop/utils';
4
4
 
5
5
  export const OrderGlobalDiscount = {
6
6
  _id(
@@ -25,14 +25,13 @@ export const OrderGlobalDiscount = {
25
25
  });
26
26
  },
27
27
 
28
- async total(
28
+ total(
29
29
  obj: Price & {
30
30
  order: Order;
31
31
  discountId: string;
32
32
  },
33
33
  ) {
34
34
  return {
35
- _id: await sha256([`${obj.order._id}:${obj.discountId}`, obj.amount, obj.currency].join('')),
36
35
  amount: obj.amount,
37
36
  currency: obj.currency,
38
37
  };
@@ -1,4 +1,3 @@
1
- import { sha256 } from '@unchainedshop/utils';
2
1
  import { Context } from '../../../context.js';
3
2
  import { OrderPositionDiscount } from '@unchainedshop/core-orders';
4
3
 
@@ -13,9 +12,8 @@ export const OrderItemDiscount = {
13
12
  });
14
13
  },
15
14
 
16
- async total(obj: OrderPositionDiscount) {
15
+ total(obj: OrderPositionDiscount) {
17
16
  return {
18
- _id: await sha256([`${obj.item._id}:${obj.discountId}`, obj.amount, obj.currency].join('')),
19
17
  amount: obj.amount,
20
18
  currency: obj.currency,
21
19
  };
@@ -5,7 +5,7 @@ import { OrderPosition, OrderPositionDiscount } from '@unchainedshop/core-orders
5
5
  import { Product } from '@unchainedshop/core-products';
6
6
  import { Quotation } from '@unchainedshop/core-quotations';
7
7
  import { TokenSurrogate, WarehousingProvider } from '@unchainedshop/core-warehousing';
8
- import { Price, sha256 } from '@unchainedshop/utils';
8
+ import { Price } from '@unchainedshop/utils';
9
9
  import { ProductPricingSheet } from '@unchainedshop/core';
10
10
 
11
11
  const getPricingSheet = async (orderPosition: OrderPosition, context: Context) => {
@@ -120,11 +120,7 @@ export const OrderItem = {
120
120
  const pricing = await getPricingSheet(orderPosition, context);
121
121
 
122
122
  if (pricing.isValid()) {
123
- const price = pricing.total(params);
124
- return {
125
- _id: await sha256([orderPosition._id, JSON.stringify(params), JSON.stringify(price)].join('')),
126
- ...price,
127
- };
123
+ return pricing.total(params);
128
124
  }
129
125
  return null;
130
126
  },
@@ -137,11 +133,7 @@ export const OrderItem = {
137
133
  const pricing = await getPricingSheet(orderPosition, context);
138
134
 
139
135
  if (pricing.isValid()) {
140
- const price = pricing.unitPrice(params);
141
- return {
142
- _id: await sha256([`${orderPosition._id}-unit`, price.amount, pricing.currency].join('')),
143
- ...price,
144
- };
136
+ return pricing.unitPrice(params);
145
137
  }
146
138
  return null;
147
139
  },
@@ -1,6 +1,6 @@
1
1
  import { Context } from '../../../context.js';
2
2
  import { OrderPayment } from '@unchainedshop/core-orders';
3
- import { Price, sha256 } from '@unchainedshop/utils';
3
+ import { Price } from '@unchainedshop/utils';
4
4
 
5
5
  export const OrderPaymentDiscount = {
6
6
  _id: (orderDelivery: Price & { discountId: string; item: OrderPayment }) =>
@@ -15,15 +15,8 @@ export const OrderPaymentDiscount = {
15
15
  discountId: orderDelivery.discountId,
16
16
  }),
17
17
 
18
- async total(orderDelivery: Price & { discountId: string; item: OrderPayment }) {
18
+ total(orderDelivery: Price & { discountId: string; item: OrderPayment }) {
19
19
  return {
20
- _id: await sha256(
21
- [
22
- `${orderDelivery.item._id}-${orderDelivery.discountId}`,
23
- orderDelivery.amount,
24
- orderDelivery.currency,
25
- ].join(''),
26
- ),
27
20
  amount: orderDelivery.amount,
28
21
  currency: orderDelivery.currency,
29
22
  };
@@ -11,7 +11,7 @@ import {
11
11
  OrderDelivery,
12
12
  } from '@unchainedshop/core-orders';
13
13
  import { User } from '@unchainedshop/core-users';
14
- import { Price, sha256 } from '@unchainedshop/utils';
14
+ import { Price } from '@unchainedshop/utils';
15
15
  import { OrderPricingSheet } from '@unchainedshop/core';
16
16
 
17
17
  export const Order = {
@@ -74,18 +74,14 @@ export const Order = {
74
74
  return order.status;
75
75
  },
76
76
 
77
- async total(order: OrderType, params: { category: string; useNetPrice: boolean }): Promise<Price> {
77
+ total(order: OrderType, params: { category: string; useNetPrice: boolean }): Price {
78
78
  const pricing = OrderPricingSheet({
79
79
  calculation: order.calculation,
80
80
  currency: order.currency,
81
81
  });
82
82
 
83
83
  if (pricing.isValid()) {
84
- const price = pricing.total(params);
85
- return {
86
- _id: await sha256([order._id, JSON.stringify(params), JSON.stringify(price)].join('')),
87
- ...price,
88
- };
84
+ return pricing.total(params);
89
85
  }
90
86
  return null;
91
87
  },
@@ -1,7 +1,6 @@
1
1
  import { Context } from '../../../context.js';
2
2
  import { PaymentProvider as PaymentProviderType } from '@unchainedshop/core-payment';
3
3
  import { PaymentDirector, PaymentPricingDirector } from '@unchainedshop/core';
4
- import { sha256 } from '@unchainedshop/utils';
5
4
 
6
5
  export const PaymentProvider = {
7
6
  interface(provider: PaymentProviderType) {
@@ -53,7 +52,6 @@ export const PaymentProvider = {
53
52
  };
54
53
 
55
54
  return {
56
- _id: await sha256([paymentProvider._id, country, useNetPrice, order ? order._id : ''].join('')),
57
55
  amount: orderPrice.amount,
58
56
  currencyCode: orderPrice.currency,
59
57
  countryCode: country,
@@ -1,7 +1,6 @@
1
1
  import accounting from 'accounting';
2
2
 
3
3
  type PriceType = {
4
- _id?: string;
5
4
  isTaxable?: boolean;
6
5
  isNetPrice?: boolean;
7
6
  countryCode?: string;