@unchainedshop/api 2.13.0 → 3.0.0-alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api-index.d.ts +13 -4
- package/lib/api-index.d.ts.map +1 -1
- package/lib/api-index.js +4 -5
- package/lib/api-index.js.map +1 -1
- package/lib/context.d.ts +14 -1
- package/lib/context.d.ts.map +1 -1
- package/lib/context.js +10 -9
- package/lib/context.js.map +1 -1
- package/lib/createGraphQLServer.d.ts +1 -2
- package/lib/createGraphQLServer.d.ts.map +1 -1
- package/lib/createGraphQLServer.js +22 -31
- package/lib/createGraphQLServer.js.map +1 -1
- package/lib/errors.d.ts +3 -6
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +6 -9
- package/lib/errors.js.map +1 -1
- package/lib/events.d.ts +5 -0
- package/lib/events.d.ts.map +1 -0
- package/lib/events.js +8 -0
- package/lib/events.js.map +1 -0
- package/lib/express/createBulkImportMiddleware.d.ts +6 -1
- package/lib/express/createBulkImportMiddleware.d.ts.map +1 -1
- package/lib/express/createBulkImportMiddleware.js +1 -3
- package/lib/express/createBulkImportMiddleware.js.map +1 -1
- package/lib/express/createERCMetadataMiddleware.d.ts +4 -1
- package/lib/express/createERCMetadataMiddleware.d.ts.map +1 -1
- package/lib/express/createERCMetadataMiddleware.js +1 -3
- package/lib/express/createERCMetadataMiddleware.js.map +1 -1
- package/lib/express/index.d.ts +7 -6
- package/lib/express/index.d.ts.map +1 -1
- package/lib/express/index.js +98 -13
- package/lib/express/index.js.map +1 -1
- package/lib/express/passport/access-token-strategy.d.ts +10 -0
- package/lib/express/passport/access-token-strategy.d.ts.map +1 -0
- package/lib/express/passport/access-token-strategy.js +33 -0
- package/lib/express/passport/access-token-strategy.js.map +1 -0
- package/lib/express/passport/setup.d.ts +4 -0
- package/lib/express/passport/setup.d.ts.map +1 -0
- package/lib/express/passport/setup.js +30 -0
- package/lib/express/passport/setup.js.map +1 -0
- package/lib/loaders/index.d.ts +1 -2
- package/lib/loaders/index.d.ts.map +1 -1
- package/lib/loaders/index.js +2 -2
- package/lib/loaders/index.js.map +1 -1
- package/lib/locale-context.d.ts +6 -4
- package/lib/locale-context.d.ts.map +1 -1
- package/lib/locale-context.js +4 -6
- package/lib/locale-context.js.map +1 -1
- package/lib/resolvers/index.d.ts.map +1 -1
- package/lib/resolvers/index.js +0 -2
- package/lib/resolvers/index.js.map +1 -1
- package/lib/resolvers/mutations/accounts/addEmail.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/addEmail.js +10 -2
- package/lib/resolvers/mutations/accounts/addEmail.js.map +1 -1
- package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js +1 -1
- package/lib/resolvers/mutations/accounts/addWebAuthnCredentials.js.map +1 -1
- package/lib/resolvers/mutations/accounts/changePassword.d.ts +2 -2
- package/lib/resolvers/mutations/accounts/changePassword.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/changePassword.js +13 -7
- package/lib/resolvers/mutations/accounts/changePassword.js.map +1 -1
- package/lib/resolvers/mutations/accounts/createUser.d.ts +2 -3
- package/lib/resolvers/mutations/accounts/createUser.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/createUser.js +21 -26
- package/lib/resolvers/mutations/accounts/createUser.js.map +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.js +2 -2
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.js.map +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js +3 -3
- package/lib/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.js.map +1 -1
- package/lib/resolvers/mutations/accounts/enrollUser.d.ts +1 -1
- package/lib/resolvers/mutations/accounts/enrollUser.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/enrollUser.js +13 -16
- package/lib/resolvers/mutations/accounts/enrollUser.js.map +1 -1
- package/lib/resolvers/mutations/accounts/forgotPassword.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/forgotPassword.js +11 -8
- package/lib/resolvers/mutations/accounts/forgotPassword.js.map +1 -1
- package/lib/resolvers/mutations/accounts/loginAsGuest.d.ts +1 -2
- package/lib/resolvers/mutations/accounts/loginAsGuest.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/loginAsGuest.js +18 -3
- package/lib/resolvers/mutations/accounts/loginAsGuest.js.map +1 -1
- package/lib/resolvers/mutations/accounts/loginWithPassword.d.ts +2 -4
- package/lib/resolvers/mutations/accounts/loginWithPassword.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/loginWithPassword.js +23 -26
- package/lib/resolvers/mutations/accounts/loginWithPassword.js.map +1 -1
- package/lib/resolvers/mutations/accounts/loginWithWebAuthn.d.ts +1 -2
- package/lib/resolvers/mutations/accounts/loginWithWebAuthn.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js +13 -14
- package/lib/resolvers/mutations/accounts/loginWithWebAuthn.js.map +1 -1
- package/lib/resolvers/mutations/accounts/logout.d.ts +1 -3
- package/lib/resolvers/mutations/accounts/logout.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/logout.js +5 -18
- package/lib/resolvers/mutations/accounts/logout.js.map +1 -1
- package/lib/resolvers/mutations/accounts/removeEmail.js +1 -1
- package/lib/resolvers/mutations/accounts/removeEmail.js.map +1 -1
- package/lib/resolvers/mutations/accounts/resetPassword.d.ts +2 -3
- package/lib/resolvers/mutations/accounts/resetPassword.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/resetPassword.js +48 -43
- package/lib/resolvers/mutations/accounts/resetPassword.js.map +1 -1
- package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.js +5 -1
- package/lib/resolvers/mutations/accounts/sendEnrollmentEmail.js.map +1 -1
- package/lib/resolvers/mutations/accounts/sendVerificationEmail.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/sendVerificationEmail.js +15 -4
- package/lib/resolvers/mutations/accounts/sendVerificationEmail.js.map +1 -1
- package/lib/resolvers/mutations/accounts/setPassword.d.ts +1 -1
- package/lib/resolvers/mutations/accounts/setPassword.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/setPassword.js +11 -3
- package/lib/resolvers/mutations/accounts/setPassword.js.map +1 -1
- package/lib/resolvers/mutations/accounts/setUsername.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/setUsername.js +10 -2
- package/lib/resolvers/mutations/accounts/setUsername.js.map +1 -1
- package/lib/resolvers/mutations/accounts/verifyEmail.d.ts +1 -2
- package/lib/resolvers/mutations/accounts/verifyEmail.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/verifyEmail.js +14 -6
- package/lib/resolvers/mutations/accounts/verifyEmail.js.map +1 -1
- package/lib/resolvers/mutations/assortments/createAssortment.d.ts +5 -7
- package/lib/resolvers/mutations/assortments/createAssortment.d.ts.map +1 -1
- package/lib/resolvers/mutations/assortments/createAssortment.js +7 -5
- package/lib/resolvers/mutations/assortments/createAssortment.js.map +1 -1
- package/lib/resolvers/mutations/filters/createFilter.d.ts +4 -5
- package/lib/resolvers/mutations/filters/createFilter.d.ts.map +1 -1
- package/lib/resolvers/mutations/filters/createFilter.js +7 -2
- package/lib/resolvers/mutations/filters/createFilter.js.map +1 -1
- package/lib/resolvers/mutations/filters/createFilterOption.d.ts +3 -4
- package/lib/resolvers/mutations/filters/createFilterOption.d.ts.map +1 -1
- package/lib/resolvers/mutations/filters/createFilterOption.js +5 -2
- package/lib/resolvers/mutations/filters/createFilterOption.js.map +1 -1
- package/lib/resolvers/mutations/index.d.ts +0 -12
- package/lib/resolvers/mutations/index.d.ts.map +1 -1
- package/lib/resolvers/mutations/index.js +0 -24
- package/lib/resolvers/mutations/index.js.map +1 -1
- package/lib/resolvers/mutations/orders/addCartDiscount.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/addCartDiscount.js +3 -1
- package/lib/resolvers/mutations/orders/addCartDiscount.js.map +1 -1
- package/lib/resolvers/mutations/orders/addCartProduct.js +1 -0
- package/lib/resolvers/mutations/orders/addCartProduct.js.map +1 -1
- package/lib/resolvers/mutations/orders/addCartQuotation.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/addCartQuotation.js +3 -1
- package/lib/resolvers/mutations/orders/addCartQuotation.js.map +1 -1
- package/lib/resolvers/mutations/orders/addMultipleCartProducts.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/addMultipleCartProducts.js +3 -1
- package/lib/resolvers/mutations/orders/addMultipleCartProducts.js.map +1 -1
- package/lib/resolvers/mutations/orders/confirmOrder.d.ts +0 -1
- package/lib/resolvers/mutations/orders/confirmOrder.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/confirmOrder.js.map +1 -1
- package/lib/resolvers/mutations/orders/emptyCart.js +2 -2
- package/lib/resolvers/mutations/orders/emptyCart.js.map +1 -1
- package/lib/resolvers/mutations/orders/rejectOrder.d.ts +0 -1
- package/lib/resolvers/mutations/orders/rejectOrder.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/rejectOrder.js.map +1 -1
- package/lib/resolvers/mutations/orders/removeCartDiscount.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/removeCartDiscount.js +3 -1
- package/lib/resolvers/mutations/orders/removeCartDiscount.js.map +1 -1
- package/lib/resolvers/mutations/orders/removeCartItem.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/removeCartItem.js +3 -1
- package/lib/resolvers/mutations/orders/removeCartItem.js.map +1 -1
- package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js +2 -2
- package/lib/resolvers/mutations/orders/setOrderDeliveryProvider.js.map +1 -1
- package/lib/resolvers/mutations/orders/setOrderPaymentProvider.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js +2 -1
- package/lib/resolvers/mutations/orders/setOrderPaymentProvider.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateCart.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateCart.js +5 -4
- package/lib/resolvers/mutations/orders/updateCart.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateCartItem.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateCartItem.js +3 -1
- package/lib/resolvers/mutations/orders/updateCartItem.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js +6 -2
- package/lib/resolvers/mutations/orders/updateOrderDeliveryPickUp.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js +8 -1
- package/lib/resolvers/mutations/orders/updateOrderDeliveryShipping.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentCard.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js +3 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentCard.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js +3 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentGeneric.js.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.d.ts.map +1 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js +3 -1
- package/lib/resolvers/mutations/orders/updateOrderPaymentInvoice.js.map +1 -1
- package/lib/resolvers/mutations/products/createProduct.d.ts +5 -6
- package/lib/resolvers/mutations/products/createProduct.d.ts.map +1 -1
- package/lib/resolvers/mutations/products/createProduct.js +6 -5
- package/lib/resolvers/mutations/products/createProduct.js.map +1 -1
- package/lib/resolvers/mutations/products/createProductVariation.d.ts +3 -3
- package/lib/resolvers/mutations/products/createProductVariation.d.ts.map +1 -1
- package/lib/resolvers/mutations/products/createProductVariation.js +7 -4
- package/lib/resolvers/mutations/products/createProductVariation.js.map +1 -1
- package/lib/resolvers/mutations/products/createProductVariationOption.d.ts +4 -5
- package/lib/resolvers/mutations/products/createProductVariationOption.d.ts.map +1 -1
- package/lib/resolvers/mutations/products/createProductVariationOption.js +8 -5
- package/lib/resolvers/mutations/products/createProductVariationOption.js.map +1 -1
- package/lib/resolvers/mutations/warehousing/exportToken.d.ts.map +1 -1
- package/lib/resolvers/mutations/warehousing/exportToken.js +20 -20
- package/lib/resolvers/mutations/warehousing/exportToken.js.map +1 -1
- package/lib/resolvers/queries/events/events.js +1 -1
- package/lib/resolvers/queries/events/events.js.map +1 -1
- package/lib/resolvers/queries/index.d.ts +0 -2
- package/lib/resolvers/queries/index.d.ts.map +1 -1
- package/lib/resolvers/queries/index.js +0 -2
- package/lib/resolvers/queries/index.js.map +1 -1
- package/lib/resolvers/queries/shopInfo.d.ts +0 -2
- package/lib/resolvers/queries/shopInfo.d.ts.map +1 -1
- package/lib/resolvers/queries/shopInfo.js +0 -3
- package/lib/resolvers/queries/shopInfo.js.map +1 -1
- package/lib/resolvers/queries/users/validateResetPasswordToken.js +1 -1
- package/lib/resolvers/queries/users/validateResetPasswordToken.js.map +1 -1
- package/lib/resolvers/queries/users/validateVerifyEmailToken.js +1 -1
- package/lib/resolvers/queries/users/validateVerifyEmailToken.js.map +1 -1
- package/lib/resolvers/type/assortment/assortment-types.d.ts.map +1 -1
- package/lib/resolvers/type/assortment/assortment-types.js +1 -0
- package/lib/resolvers/type/assortment/assortment-types.js.map +1 -1
- package/lib/resolvers/type/event-types.d.ts +1 -1
- package/lib/resolvers/type/event-types.d.ts.map +1 -1
- package/lib/resolvers/type/index.d.ts +4 -36
- package/lib/resolvers/type/index.d.ts.map +1 -1
- package/lib/resolvers/type/index.js +2 -6
- package/lib/resolvers/type/index.js.map +1 -1
- package/lib/resolvers/type/login-method-response-types.d.ts +3 -27
- package/lib/resolvers/type/login-method-response-types.d.ts.map +1 -1
- package/lib/resolvers/type/login-method-response-types.js +1 -6
- package/lib/resolvers/type/login-method-response-types.js.map +1 -1
- package/lib/resolvers/type/product/product-bundle-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-configurable-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-plan-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-simple-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-tokenized-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-types.d.ts.map +1 -1
- package/lib/resolvers/type/product/product-types.js +1 -0
- package/lib/resolvers/type/product/product-types.js.map +1 -1
- package/lib/resolvers/type/user-types.d.ts +1 -3
- package/lib/resolvers/type/user-types.d.ts.map +1 -1
- package/lib/resolvers/type/user-types.js +0 -14
- package/lib/resolvers/type/user-types.js.map +1 -1
- package/lib/resolvers/type/webauthn-credentials-types.js +1 -1
- package/lib/resolvers/type/webauthn-credentials-types.js.map +1 -1
- package/lib/roles/all.d.ts.map +1 -1
- package/lib/roles/all.js +1 -7
- package/lib/roles/all.js.map +1 -1
- package/lib/roles/index.d.ts.map +1 -1
- package/lib/roles/index.js +0 -6
- package/lib/roles/index.js.map +1 -1
- package/lib/roles/loggedIn.d.ts.map +1 -1
- package/lib/roles/loggedIn.js +0 -4
- package/lib/roles/loggedIn.js.map +1 -1
- package/lib/schema/directives.d.ts.map +1 -1
- package/lib/schema/directives.js +1 -5
- package/lib/schema/directives.js.map +1 -1
- package/lib/schema/inputTypes.d.ts.map +1 -1
- package/lib/schema/inputTypes.js +11 -25
- package/lib/schema/inputTypes.js.map +1 -1
- package/lib/schema/mutation.d.ts.map +1 -1
- package/lib/schema/mutation.js +26 -85
- package/lib/schema/mutation.js.map +1 -1
- package/lib/schema/query.d.ts.map +1 -1
- package/lib/schema/query.js +0 -4
- package/lib/schema/query.js.map +1 -1
- package/lib/schema/scalars.d.ts.map +1 -1
- package/lib/schema/scalars.js +0 -1
- package/lib/schema/scalars.js.map +1 -1
- package/lib/schema/types/product/product.js +1 -1
- package/lib/schema/types/product/tokenized-product.js +1 -1
- package/lib/schema/types/shop.d.ts.map +1 -1
- package/lib/schema/types/shop.js +0 -1
- package/lib/schema/types/shop.js.map +1 -1
- package/lib/schema/types/user.d.ts.map +1 -1
- package/lib/schema/types/user.js +2 -21
- package/lib/schema/types/user.js.map +1 -1
- package/package.json +18 -12
- package/src/api-index.ts +19 -14
- package/src/context.ts +23 -10
- package/src/createGraphQLServer.ts +25 -36
- package/src/errors.ts +15 -21
- package/src/events.ts +8 -0
- package/src/express/createBulkImportMiddleware.ts +8 -4
- package/src/express/createERCMetadataMiddleware.ts +6 -4
- package/src/express/index.ts +127 -21
- package/src/express/passport/access-token-strategy.ts +39 -0
- package/src/express/passport/setup.ts +44 -0
- package/src/loaders/index.ts +2 -8
- package/src/locale-context.ts +13 -9
- package/src/resolvers/index.ts +0 -2
- package/src/resolvers/mutations/accounts/addEmail.ts +7 -2
- package/src/resolvers/mutations/accounts/addWebAuthnCredentials.ts +1 -1
- package/src/resolvers/mutations/accounts/changePassword.ts +18 -8
- package/src/resolvers/mutations/accounts/createUser.ts +30 -37
- package/src/resolvers/mutations/accounts/createWebAuthnCredentialCreationOptions.ts +3 -3
- package/src/resolvers/mutations/accounts/createWebAuthnCredentialRequestOptions.ts +4 -4
- package/src/resolvers/mutations/accounts/enrollUser.ts +18 -17
- package/src/resolvers/mutations/accounts/forgotPassword.ts +11 -7
- package/src/resolvers/mutations/accounts/loginAsGuest.ts +23 -4
- package/src/resolvers/mutations/accounts/loginWithPassword.ts +33 -36
- package/src/resolvers/mutations/accounts/loginWithWebAuthn.ts +22 -15
- package/src/resolvers/mutations/accounts/logout.ts +5 -21
- package/src/resolvers/mutations/accounts/removeEmail.ts +1 -1
- package/src/resolvers/mutations/accounts/resetPassword.ts +50 -53
- package/src/resolvers/mutations/accounts/sendEnrollmentEmail.ts +5 -1
- package/src/resolvers/mutations/accounts/sendVerificationEmail.ts +13 -4
- package/src/resolvers/mutations/accounts/setPassword.ts +9 -4
- package/src/resolvers/mutations/accounts/setUsername.ts +8 -2
- package/src/resolvers/mutations/accounts/verifyEmail.ts +15 -6
- package/src/resolvers/mutations/assortments/createAssortment.ts +16 -7
- package/src/resolvers/mutations/filters/createFilter.ts +8 -3
- package/src/resolvers/mutations/filters/createFilterOption.ts +9 -7
- package/src/resolvers/mutations/index.ts +0 -24
- package/src/resolvers/mutations/orders/addCartDiscount.ts +3 -1
- package/src/resolvers/mutations/orders/addCartProduct.ts +1 -1
- package/src/resolvers/mutations/orders/addCartQuotation.ts +3 -1
- package/src/resolvers/mutations/orders/addMultipleCartProducts.ts +23 -19
- package/src/resolvers/mutations/orders/confirmOrder.ts +0 -1
- package/src/resolvers/mutations/orders/emptyCart.ts +2 -2
- package/src/resolvers/mutations/orders/rejectOrder.ts +0 -2
- package/src/resolvers/mutations/orders/removeCartDiscount.ts +3 -1
- package/src/resolvers/mutations/orders/removeCartItem.ts +3 -1
- package/src/resolvers/mutations/orders/setOrderDeliveryProvider.ts +2 -3
- package/src/resolvers/mutations/orders/setOrderPaymentProvider.ts +2 -1
- package/src/resolvers/mutations/orders/updateCart.ts +5 -4
- package/src/resolvers/mutations/orders/updateCartItem.ts +3 -1
- package/src/resolvers/mutations/orders/updateOrderDeliveryPickUp.ts +7 -7
- package/src/resolvers/mutations/orders/updateOrderDeliveryShipping.ts +8 -1
- package/src/resolvers/mutations/orders/updateOrderPaymentCard.ts +3 -1
- package/src/resolvers/mutations/orders/updateOrderPaymentGeneric.ts +3 -1
- package/src/resolvers/mutations/orders/updateOrderPaymentInvoice.ts +3 -1
- package/src/resolvers/mutations/products/createProduct.ts +9 -7
- package/src/resolvers/mutations/products/createProductVariation.ts +11 -6
- package/src/resolvers/mutations/products/createProductVariationOption.ts +13 -6
- package/src/resolvers/mutations/warehousing/exportToken.ts +19 -20
- package/src/resolvers/queries/events/events.ts +1 -1
- package/src/resolvers/queries/index.ts +0 -2
- package/src/resolvers/queries/shopInfo.ts +0 -5
- package/src/resolvers/queries/users/validateResetPasswordToken.ts +1 -1
- package/src/resolvers/queries/users/validateVerifyEmailToken.ts +1 -1
- package/src/resolvers/type/assortment/assortment-types.ts +1 -0
- package/src/resolvers/type/event-types.ts +1 -1
- package/src/resolvers/type/index.ts +2 -6
- package/src/resolvers/type/login-method-response-types.ts +1 -12
- package/src/resolvers/type/product/product-types.ts +1 -0
- package/src/resolvers/type/user-types.ts +1 -17
- package/src/resolvers/type/webauthn-credentials-types.ts +1 -1
- package/src/roles/all.ts +1 -7
- package/src/roles/index.ts +0 -6
- package/src/roles/loggedIn.ts +0 -4
- package/src/schema/directives.ts +1 -5
- package/src/schema/inputTypes.ts +11 -25
- package/src/schema/mutation.ts +26 -85
- package/src/schema/query.ts +0 -4
- package/src/schema/scalars.ts +0 -1
- package/src/schema/types/product/product.ts +1 -1
- package/src/schema/types/product/tokenized-product.ts +1 -1
- package/src/schema/types/shop.ts +0 -1
- package/src/schema/types/user.ts +2 -21
- package/lib/express/createApolloMiddleware.d.ts +0 -4
- package/lib/express/createApolloMiddleware.d.ts.map +0 -1
- package/lib/express/createApolloMiddleware.js +0 -36
- package/lib/express/createApolloMiddleware.js.map +0 -1
- package/lib/express/createSingleSignOnMiddleware.d.ts +0 -5
- package/lib/express/createSingleSignOnMiddleware.d.ts.map +0 -1
- package/lib/express/createSingleSignOnMiddleware.js +0 -73
- package/lib/express/createSingleSignOnMiddleware.js.map +0 -1
- package/lib/hashPassword.d.ts +0 -2
- package/lib/hashPassword.d.ts.map +0 -1
- package/lib/hashPassword.js +0 -5
- package/lib/hashPassword.js.map +0 -1
- package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts +0 -3
- package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js +0 -6
- package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js.map +0 -1
- package/lib/resolvers/mutations/accounts/disableTOTP.d.ts +0 -6
- package/lib/resolvers/mutations/accounts/disableTOTP.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/disableTOTP.js +0 -27
- package/lib/resolvers/mutations/accounts/disableTOTP.js.map +0 -1
- package/lib/resolvers/mutations/accounts/enableTOTP.d.ts +0 -6
- package/lib/resolvers/mutations/accounts/enableTOTP.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/enableTOTP.js +0 -20
- package/lib/resolvers/mutations/accounts/enableTOTP.js.map +0 -1
- package/lib/resolvers/mutations/accounts/impersonate.d.ts +0 -10
- package/lib/resolvers/mutations/accounts/impersonate.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/impersonate.js +0 -15
- package/lib/resolvers/mutations/accounts/impersonate.js.map +0 -1
- package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts +0 -7
- package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/linkOAuthAccount.js +0 -30
- package/lib/resolvers/mutations/accounts/linkOAuthAccount.js.map +0 -1
- package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts +0 -8
- package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/loginWithOAuth.js +0 -25
- package/lib/resolvers/mutations/accounts/loginWithOAuth.js.map +0 -1
- package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts +0 -5
- package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/logoutAllSessions.js +0 -20
- package/lib/resolvers/mutations/accounts/logoutAllSessions.js.map +0 -1
- package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts +0 -7
- package/lib/resolvers/mutations/accounts/stopImpersonation.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/stopImpersonation.js +0 -21
- package/lib/resolvers/mutations/accounts/stopImpersonation.js.map +0 -1
- package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts +0 -6
- package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts.map +0 -1
- package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js +0 -13
- package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js.map +0 -1
- package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts +0 -6
- package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts.map +0 -1
- package/lib/resolvers/mutations/assortments/addAssortmentMedia.js +0 -18
- package/lib/resolvers/mutations/assortments/addAssortmentMedia.js.map +0 -1
- package/lib/resolvers/mutations/products/addProductMedia.d.ts +0 -6
- package/lib/resolvers/mutations/products/addProductMedia.d.ts.map +0 -1
- package/lib/resolvers/mutations/products/addProductMedia.js +0 -18
- package/lib/resolvers/mutations/products/addProductMedia.js.map +0 -1
- package/lib/resolvers/mutations/users/updateUserAvatar.d.ts +0 -6
- package/lib/resolvers/mutations/users/updateUserAvatar.d.ts.map +0 -1
- package/lib/resolvers/mutations/users/updateUserAvatar.js +0 -22
- package/lib/resolvers/mutations/users/updateUserAvatar.js.map +0 -1
- package/lib/resolvers/queries/users/impersonator.d.ts +0 -3
- package/lib/resolvers/queries/users/impersonator.d.ts.map +0 -1
- package/lib/resolvers/queries/users/impersonator.js +0 -12
- package/lib/resolvers/queries/users/impersonator.js.map +0 -1
- package/lib/resolvers/type/oauth-account.d.ts +0 -6
- package/lib/resolvers/type/oauth-account.d.ts.map +0 -1
- package/lib/resolvers/type/oauth-account.js +0 -7
- package/lib/resolvers/type/oauth-account.js.map +0 -1
- package/lib/resolvers/type/oauth-provider.d.ts +0 -6
- package/lib/resolvers/type/oauth-provider.d.ts.map +0 -1
- package/lib/resolvers/type/oauth-provider.js +0 -6
- package/lib/resolvers/type/oauth-provider.js.map +0 -1
- package/lib/user-context.d.ts +0 -7
- package/lib/user-context.d.ts.map +0 -1
- package/lib/user-context.js +0 -64
- package/lib/user-context.js.map +0 -1
- package/src/express/createApolloMiddleware.ts +0 -40
- package/src/express/createSingleSignOnMiddleware.ts +0 -92
- package/src/hashPassword.ts +0 -5
- package/src/resolvers/mutations/accounts/buildSecretTOTPAuthURL.ts +0 -8
- package/src/resolvers/mutations/accounts/disableTOTP.ts +0 -36
- package/src/resolvers/mutations/accounts/enableTOTP.ts +0 -23
- package/src/resolvers/mutations/accounts/impersonate.ts +0 -21
- package/src/resolvers/mutations/accounts/linkOAuthAccount.ts +0 -51
- package/src/resolvers/mutations/accounts/loginWithOAuth.ts +0 -38
- package/src/resolvers/mutations/accounts/logoutAllSessions.ts +0 -27
- package/src/resolvers/mutations/accounts/stopImpersonation.ts +0 -31
- package/src/resolvers/mutations/accounts/unlinkOAuthAccount.ts +0 -24
- package/src/resolvers/mutations/assortments/addAssortmentMedia.ts +0 -26
- package/src/resolvers/mutations/products/addProductMedia.ts +0 -24
- package/src/resolvers/mutations/users/updateUserAvatar.ts +0 -39
- package/src/resolvers/queries/users/impersonator.ts +0 -19
- package/src/resolvers/type/oauth-account.ts +0 -8
- package/src/resolvers/type/oauth-provider.ts +0 -5
- package/src/user-context.ts +0 -87
|
@@ -1,30 +1,40 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import {
|
|
3
|
+
import { InvalidCredentialsError, PasswordInvalidError } from '../../../errors.js';
|
|
4
4
|
|
|
5
5
|
export default async function changePassword(
|
|
6
6
|
root: Root,
|
|
7
7
|
params: {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
oldPassword?: string;
|
|
9
|
+
newPassword?: string;
|
|
10
10
|
},
|
|
11
11
|
{ modules, userId }: Context,
|
|
12
12
|
) {
|
|
13
13
|
log('mutation changePassword', { userId });
|
|
14
14
|
|
|
15
|
-
if (!params.
|
|
15
|
+
if (!params.newPassword) {
|
|
16
16
|
throw new Error('New password is required');
|
|
17
17
|
}
|
|
18
|
-
if (!params.
|
|
18
|
+
if (!params.oldPassword) {
|
|
19
19
|
throw new Error('Old password is required');
|
|
20
20
|
}
|
|
21
|
+
|
|
22
|
+
const user = await modules.users.findUserById(userId);
|
|
23
|
+
|
|
24
|
+
const isValidCurrentPassword =
|
|
25
|
+
user.services?.password &&
|
|
26
|
+
(await modules.users.verifyPassword(user.services?.password, params.oldPassword));
|
|
27
|
+
if (!isValidCurrentPassword) throw new InvalidCredentialsError({});
|
|
28
|
+
|
|
21
29
|
let success = false;
|
|
30
|
+
|
|
22
31
|
try {
|
|
23
|
-
|
|
32
|
+
await modules.users.setPassword(user._id, params.newPassword);
|
|
33
|
+
success = true;
|
|
24
34
|
} catch (e) {
|
|
25
35
|
success = false;
|
|
26
|
-
if (e.
|
|
27
|
-
else throw
|
|
36
|
+
if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({ userId });
|
|
37
|
+
else throw e;
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
return { success };
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { UserData } from '@unchainedshop/types/
|
|
1
|
+
import { UserData } from '@unchainedshop/types/user.js';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
3
|
import { log } from '@unchainedshop/logger';
|
|
4
|
-
import { hashPassword } from '../../../hashPassword.js';
|
|
5
4
|
import {
|
|
6
5
|
AuthOperationFailedError,
|
|
7
6
|
EmailAlreadyExistsError,
|
|
8
7
|
UsernameAlreadyExistsError,
|
|
9
8
|
UsernameOrEmailRequiredError,
|
|
9
|
+
PasswordOrWebAuthnPublicKeyRequiredError,
|
|
10
|
+
PasswordInvalidError,
|
|
10
11
|
} from '../../../errors.js';
|
|
11
12
|
|
|
12
13
|
export default async function createUser(root: Root, params: UserData, context: Context) {
|
|
@@ -14,48 +15,40 @@ export default async function createUser(root: Root, params: UserData, context:
|
|
|
14
15
|
|
|
15
16
|
log('mutation createUser', { email: params.email, username: params.username, userId });
|
|
16
17
|
|
|
17
|
-
if (!params.
|
|
18
|
-
throw new
|
|
18
|
+
if (!params.username && !params.email) {
|
|
19
|
+
throw new UsernameOrEmailRequiredError({ username: params?.username });
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
mappedUser.password = hashPassword(mappedUser.plainPassword);
|
|
24
|
-
}
|
|
25
|
-
delete mappedUser.plainPassword;
|
|
26
|
-
delete mappedUser.webAuthnPublicKeyCredentials;
|
|
27
|
-
|
|
28
|
-
const webAuthnService =
|
|
29
|
-
params.webAuthnPublicKeyCredentials &&
|
|
30
|
-
(await modules.accounts.webAuthn.verifyCredentialCreation(
|
|
31
|
-
params.username,
|
|
32
|
-
params.webAuthnPublicKeyCredentials,
|
|
33
|
-
));
|
|
34
|
-
let newUserId;
|
|
35
|
-
try {
|
|
36
|
-
newUserId = await modules.accounts.createUser(mappedUser, {
|
|
37
|
-
skipPasswordEnrollment: !!webAuthnService,
|
|
38
|
-
});
|
|
39
|
-
} catch (e) {
|
|
40
|
-
if (e.code === 'EmailAlreadyExists') throw new EmailAlreadyExistsError({ email: params?.email });
|
|
41
|
-
else if (e.code === 'UsernameAlreadyExists')
|
|
42
|
-
throw new UsernameAlreadyExistsError({ username: params?.username });
|
|
43
|
-
else if (e.code === 'UsernameOrEmailRequired')
|
|
44
|
-
throw new UsernameOrEmailRequiredError({ username: params?.username });
|
|
45
|
-
else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
|
|
22
|
+
if (!params.password && !params.webAuthnPublicKeyCredentials) {
|
|
23
|
+
throw new PasswordOrWebAuthnPublicKeyRequiredError({ username: params?.username });
|
|
46
24
|
}
|
|
47
25
|
|
|
48
|
-
|
|
49
|
-
await modules.users.
|
|
50
|
-
{ _id: newUserId },
|
|
26
|
+
try {
|
|
27
|
+
const newUserId = await modules.users.createUser(
|
|
51
28
|
{
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
},
|
|
29
|
+
...params,
|
|
30
|
+
initialPassword: false,
|
|
55
31
|
},
|
|
56
32
|
{},
|
|
57
33
|
);
|
|
58
|
-
}
|
|
59
34
|
|
|
60
|
-
|
|
35
|
+
let user = await modules.users.findUserById(newUserId);
|
|
36
|
+
|
|
37
|
+
user = await context.modules.users.updateHeartbeat(user._id, {
|
|
38
|
+
remoteAddress: context.remoteAddress,
|
|
39
|
+
remotePort: context.remotePort,
|
|
40
|
+
userAgent: context.userAgent,
|
|
41
|
+
locale: context.localeContext.normalized,
|
|
42
|
+
countryCode: context.countryContext,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
return context.login(user);
|
|
46
|
+
} catch (e) {
|
|
47
|
+
if (e.cause === 'EMAIL_INVALID') throw new EmailAlreadyExistsError({ email: params?.email });
|
|
48
|
+
else if (e.cause === 'USERNAME_INVALID')
|
|
49
|
+
throw new UsernameAlreadyExistsError({ username: params?.username });
|
|
50
|
+
else if (e.cause === 'PASSWORD_INVALID')
|
|
51
|
+
throw new PasswordInvalidError({ username: params?.username });
|
|
52
|
+
else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
|
|
53
|
+
}
|
|
61
54
|
}
|
|
@@ -4,14 +4,14 @@ import { Context, Root } from '@unchainedshop/types/api.js';
|
|
|
4
4
|
export default async function createWebAuthnCredentialCreationOptions(
|
|
5
5
|
root: Root,
|
|
6
6
|
{ extensionOptions, username }: { username: string; extensionOptions: any },
|
|
7
|
-
{ modules, userId,
|
|
7
|
+
{ modules, userId, getHeader }: Context,
|
|
8
8
|
) {
|
|
9
9
|
log(`mutation createWebAuthnCredentialCreationOptions ${username}`, {
|
|
10
10
|
userId,
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
const options = await modules.
|
|
14
|
-
|
|
13
|
+
const options = await modules.users.webAuthn.createCredentialCreationOptions(
|
|
14
|
+
getHeader('origin') as string,
|
|
15
15
|
username,
|
|
16
16
|
extensionOptions,
|
|
17
17
|
);
|
|
@@ -4,20 +4,20 @@ import { Context, Root } from '@unchainedshop/types/api.js';
|
|
|
4
4
|
export default async function createWebAuthnCredentialRequestOptions(
|
|
5
5
|
root: Root,
|
|
6
6
|
{ extensionOptions, username }: { username: string; extensionOptions: any },
|
|
7
|
-
{ modules, userId,
|
|
7
|
+
{ modules, userId, getHeader }: Context,
|
|
8
8
|
) {
|
|
9
9
|
log(`mutation createWebAuthnCredentialRequestOptions ${username}`, {
|
|
10
10
|
userId,
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
const options = await modules.
|
|
14
|
-
|
|
13
|
+
const options = await modules.users.webAuthn.createCredentialRequestOptions(
|
|
14
|
+
getHeader('origin') as string,
|
|
15
15
|
username,
|
|
16
16
|
extensionOptions,
|
|
17
17
|
);
|
|
18
18
|
|
|
19
19
|
if (username) {
|
|
20
|
-
const user = await modules.users.
|
|
20
|
+
const user = await modules.users.findUserByUsername(username);
|
|
21
21
|
options.allowCredentials = user?.services?.webAuthn?.map(({ id, type }) => ({
|
|
22
22
|
id,
|
|
23
23
|
type: type || options.type || 'public-key',
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import { UserData } from '@unchainedshop/types/
|
|
4
|
-
import { hashPassword } from '../../../hashPassword.js';
|
|
3
|
+
import { UserData } from '@unchainedshop/types/user.js';
|
|
5
4
|
import {
|
|
6
5
|
AuthOperationFailedError,
|
|
7
6
|
EmailAlreadyExistsError,
|
|
7
|
+
PasswordInvalidError,
|
|
8
8
|
UsernameAlreadyExistsError,
|
|
9
9
|
UsernameOrEmailRequiredError,
|
|
10
10
|
} from '../../../errors.js';
|
|
@@ -14,27 +14,28 @@ export default async function enrollUser(root: Root, params: UserData, context:
|
|
|
14
14
|
|
|
15
15
|
log('mutation enrollUser', { email: params.email, userId: context.userId });
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (mappedUserData.plainPassword) {
|
|
20
|
-
mappedUserData.password = hashPassword(mappedUserData.plainPassword);
|
|
17
|
+
if (!params.username && !params.email) {
|
|
18
|
+
throw new UsernameOrEmailRequiredError({});
|
|
21
19
|
}
|
|
22
|
-
delete mappedUserData.plainPassword;
|
|
23
20
|
|
|
24
|
-
// Skip Messaging when password is set so we
|
|
25
|
-
// don't send a verification e-mail after enrollment
|
|
26
21
|
try {
|
|
27
|
-
const userId = await modules.
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
const userId = await modules.users.createUser(
|
|
23
|
+
{
|
|
24
|
+
...params,
|
|
25
|
+
initialPassword: true,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
skipMessaging: !!params.password,
|
|
29
|
+
},
|
|
30
|
+
);
|
|
30
31
|
|
|
31
32
|
return modules.users.findUserById(userId);
|
|
32
33
|
} catch (e) {
|
|
33
|
-
if (e.
|
|
34
|
-
else if (e.
|
|
35
|
-
throw new UsernameAlreadyExistsError({ username: params?.username
|
|
36
|
-
else if (e.
|
|
37
|
-
throw new
|
|
34
|
+
if (e.cause === 'EMAIL_INVALID') throw new EmailAlreadyExistsError({ email: params?.email });
|
|
35
|
+
else if (e.cause === 'USERNAME_INVALID')
|
|
36
|
+
throw new UsernameAlreadyExistsError({ username: params?.username });
|
|
37
|
+
else if (e.cause === 'PASSWORD_INVALID')
|
|
38
|
+
throw new PasswordInvalidError({ username: params?.username });
|
|
38
39
|
else throw new AuthOperationFailedError({ username: params?.username, email: params.email });
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import {
|
|
3
|
+
import { UserNotFoundError } from '../../../errors.js';
|
|
4
4
|
|
|
5
5
|
export default async function forgotPassword(
|
|
6
6
|
root: Root,
|
|
@@ -9,13 +9,17 @@ export default async function forgotPassword(
|
|
|
9
9
|
) {
|
|
10
10
|
log('mutation forgotPassword', { email, userId });
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const user = await modules.users.findUserByEmail(email);
|
|
13
|
+
if (!user) throw new UserNotFoundError({ email });
|
|
14
|
+
|
|
13
15
|
try {
|
|
14
|
-
|
|
16
|
+
await modules.users.sendResetPasswordEmail(user._id, email);
|
|
17
|
+
return {
|
|
18
|
+
success: true,
|
|
19
|
+
};
|
|
15
20
|
} catch (e) {
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
};
|
|
18
24
|
}
|
|
19
|
-
|
|
20
|
-
return { success };
|
|
21
25
|
}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
2
2
|
import { log } from '@unchainedshop/logger';
|
|
3
|
+
import moniker from 'moniker';
|
|
4
|
+
import { randomValueHex } from '@unchainedshop/utils';
|
|
3
5
|
|
|
4
6
|
export default async function loginAsGuest(root: Root, _: any, context: Context) {
|
|
5
|
-
const { modules } = context;
|
|
6
|
-
|
|
7
7
|
log('mutation loginAsGuest');
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const guestname = `${moniker.choose()}-${randomValueHex(5)}`;
|
|
10
|
+
const guestUserId = await context.modules.users.createUser(
|
|
11
|
+
{
|
|
12
|
+
email: `${guestname}@unchained.local`,
|
|
13
|
+
guest: true,
|
|
14
|
+
password: null,
|
|
15
|
+
initialPassword: true,
|
|
16
|
+
},
|
|
17
|
+
{ skipMessaging: true },
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
let user = await context.modules.users.findUserById(guestUserId);
|
|
21
|
+
|
|
22
|
+
user = await context.modules.users.updateHeartbeat(user._id, {
|
|
23
|
+
remoteAddress: context.remoteAddress,
|
|
24
|
+
remotePort: context.remotePort,
|
|
25
|
+
userAgent: context.userAgent,
|
|
26
|
+
locale: context.localeContext.normalized,
|
|
27
|
+
countryCode: context.countryContext,
|
|
28
|
+
});
|
|
10
29
|
|
|
11
|
-
return
|
|
30
|
+
return context.login(user);
|
|
12
31
|
}
|
|
@@ -1,54 +1,51 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
|
+
|
|
2
3
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import {
|
|
4
|
-
AuthenticationFailedError,
|
|
5
|
-
AuthOperationFailedError,
|
|
6
|
-
InvalidCredentialsError,
|
|
7
|
-
TwoFactorCodeDidNotMatchError,
|
|
8
|
-
TwoFactorCodeRequiredError,
|
|
9
|
-
UserDeactivatedError,
|
|
10
|
-
} from '../../../errors.js';
|
|
11
|
-
import { hashPassword } from '../../../hashPassword.js';
|
|
4
|
+
import { InvalidCredentialsError } from '../../../errors.js';
|
|
12
5
|
|
|
13
6
|
export default async function loginWithPassword(
|
|
14
7
|
root: Root,
|
|
15
8
|
params: {
|
|
16
9
|
username?: string;
|
|
17
10
|
email?: string;
|
|
18
|
-
|
|
19
|
-
totpCode?: string;
|
|
11
|
+
password?: string;
|
|
20
12
|
},
|
|
21
13
|
context: Context,
|
|
22
14
|
) {
|
|
23
|
-
const {
|
|
24
|
-
const { username, email, plainPassword, totpCode } = params;
|
|
25
|
-
|
|
15
|
+
const { username, email, password } = params;
|
|
26
16
|
log('mutation loginWithPassword', { username, email });
|
|
27
17
|
|
|
28
|
-
if (!
|
|
18
|
+
if (!password) {
|
|
29
19
|
throw new Error('Password is required');
|
|
30
20
|
}
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
22
|
+
let user = username
|
|
23
|
+
? await context.modules.users.findUserByUsername(username)
|
|
24
|
+
: await context.modules.users.findUserByEmail(email);
|
|
25
|
+
|
|
26
|
+
const verified =
|
|
27
|
+
user.services?.password &&
|
|
28
|
+
(await context.modules.users.verifyPassword(user.services.password, password));
|
|
29
|
+
|
|
30
|
+
if (!verified) throw new InvalidCredentialsError({ username, email });
|
|
31
|
+
|
|
32
|
+
if (user.guest) {
|
|
33
|
+
await context.modules.users.updateGuest(user, false);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
user = await context.modules.users.updateHeartbeat(user._id, {
|
|
37
|
+
remoteAddress: context.remoteAddress,
|
|
38
|
+
remotePort: context.remotePort,
|
|
39
|
+
userAgent: context.userAgent,
|
|
40
|
+
locale: context.localeContext.normalized,
|
|
41
|
+
countryCode: context.countryContext,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
if (context.userId) {
|
|
45
|
+
await context.services.users.migrateUserData(context.userId, user._id, context);
|
|
53
46
|
}
|
|
47
|
+
|
|
48
|
+
await context.services.orders.nextUserCart({ user, countryCode: context.countryContext }, context);
|
|
49
|
+
|
|
50
|
+
return context.login(user);
|
|
54
51
|
}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import {
|
|
4
|
-
AuthenticationFailedError,
|
|
5
|
-
AuthOperationFailedError,
|
|
6
|
-
UserDeactivatedError,
|
|
7
|
-
} from '../../../errors.js';
|
|
8
3
|
|
|
9
4
|
export default async function loginWithWebAuthn(
|
|
10
5
|
root: Root,
|
|
@@ -13,15 +8,27 @@ export default async function loginWithWebAuthn(
|
|
|
13
8
|
},
|
|
14
9
|
context: Context,
|
|
15
10
|
) {
|
|
16
|
-
const { modules } = context;
|
|
17
|
-
|
|
18
11
|
log('mutation loginWithWebAuthn');
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
|
|
13
|
+
const username =
|
|
14
|
+
Buffer.from(params.webAuthnPublicKeyCredentials?.response?.userHandle, 'base64').toString() || '';
|
|
15
|
+
|
|
16
|
+
let user = await context.modules.users.findUserByUsername(username);
|
|
17
|
+
if (!user) throw new Error('User not found');
|
|
18
|
+
|
|
19
|
+
await context.modules.users.webAuthn.verifyCredentialRequest(
|
|
20
|
+
user.services?.webAuthn,
|
|
21
|
+
user.username,
|
|
22
|
+
params.webAuthnPublicKeyCredentials,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
user = await context.modules.users.updateHeartbeat(user._id, {
|
|
26
|
+
remoteAddress: context.remoteAddress,
|
|
27
|
+
remotePort: context.remotePort,
|
|
28
|
+
userAgent: context.userAgent,
|
|
29
|
+
locale: context.localeContext.normalized,
|
|
30
|
+
countryCode: context.countryContext,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return context.login(user);
|
|
27
34
|
}
|
|
@@ -1,28 +1,12 @@
|
|
|
1
1
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
2
|
-
import { log
|
|
2
|
+
import { log } from '@unchainedshop/logger';
|
|
3
3
|
|
|
4
|
-
export default async function logout(root: Root,
|
|
5
|
-
const {
|
|
4
|
+
export default async function logout(root: Root, _: never, context: Context) {
|
|
5
|
+
const { userId } = context;
|
|
6
6
|
|
|
7
7
|
log('mutation logout', { userId });
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
{
|
|
11
|
-
token,
|
|
12
|
-
loginToken: context.loginToken,
|
|
13
|
-
userId: context.userId,
|
|
14
|
-
},
|
|
15
|
-
context,
|
|
16
|
-
);
|
|
9
|
+
const success = await context.logout();
|
|
17
10
|
|
|
18
|
-
|
|
19
|
-
log('Error while logging out', {
|
|
20
|
-
logLevel: LogLevel.Error,
|
|
21
|
-
...loggedOut.error,
|
|
22
|
-
});
|
|
23
|
-
} else {
|
|
24
|
-
setLoginToken(null);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return { success: loggedOut.success };
|
|
11
|
+
return { success };
|
|
28
12
|
}
|
|
@@ -14,7 +14,7 @@ export default async function removeEmail(
|
|
|
14
14
|
if (!(await modules.users.userExists({ userId: normalizedUserId })))
|
|
15
15
|
throw new UserNotFoundError({ userId: normalizedUserId });
|
|
16
16
|
|
|
17
|
-
await modules.
|
|
17
|
+
await modules.users.removeEmail(normalizedUserId, params.email);
|
|
18
18
|
|
|
19
19
|
return modules.users.findUserById(normalizedUserId);
|
|
20
20
|
}
|
|
@@ -1,71 +1,68 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
AuthOperationFailedError,
|
|
6
|
-
InvalidResetTokenError,
|
|
7
|
-
NoEmailSetError,
|
|
8
|
-
ResetPasswordLinkExpiredError,
|
|
9
|
-
ResetPasswordLinkUnknownAddressError,
|
|
10
|
-
} from '../../../errors.js';
|
|
3
|
+
import { InvalidResetTokenError, PasswordInvalidError } from '../../../errors.js';
|
|
11
4
|
|
|
12
5
|
export default async function resetPassword(
|
|
13
6
|
root: Root,
|
|
14
|
-
params: {
|
|
7
|
+
params: { newPassword?: string; token: string },
|
|
15
8
|
context: Context,
|
|
16
9
|
) {
|
|
17
10
|
const { modules, userId } = context;
|
|
18
11
|
|
|
19
12
|
log('mutation resetPassword', { userId });
|
|
20
13
|
|
|
21
|
-
if (!params.
|
|
14
|
+
if (!params.newPassword) {
|
|
22
15
|
throw new Error('Password is required');
|
|
23
16
|
}
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
let user = await modules.users.findUserByResetToken(params.token);
|
|
18
|
+
|
|
19
|
+
if (!user) throw new InvalidResetTokenError({});
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
);
|
|
30
|
-
if (resetTicket.address) {
|
|
31
|
-
// Try verifying the E-Mail along the way
|
|
32
|
-
try {
|
|
33
|
-
const updatedUser = await modules.users.updateUser(
|
|
34
|
-
{
|
|
35
|
-
_id: userWithNewPassword.id,
|
|
36
|
-
emails: {
|
|
37
|
-
$elemMatch: {
|
|
38
|
-
address: emailRegexOperator(resetTicket.address),
|
|
39
|
-
verified: false,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
$set: {
|
|
45
|
-
'emails.$[email].verified': true,
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
arrayFilters: [{ 'email.address': resetTicket.address }],
|
|
50
|
-
},
|
|
51
|
-
);
|
|
52
|
-
if (updatedUser) {
|
|
53
|
-
await modules.accounts.emit('VerifyEmailSuccess', updatedUser);
|
|
54
|
-
}
|
|
55
|
-
} catch (e) {
|
|
56
|
-
/* */
|
|
57
|
-
}
|
|
58
|
-
}
|
|
21
|
+
try {
|
|
22
|
+
await modules.users.setPassword(user._id, params.newPassword);
|
|
59
23
|
|
|
60
|
-
|
|
61
|
-
|
|
24
|
+
// TODO: Verify E-Mail after reset!
|
|
25
|
+
// if (resetTicket.address) {
|
|
26
|
+
// // Try verifying the E-Mail along the way
|
|
27
|
+
// try {
|
|
28
|
+
// const updatedUser = await modules.users.updateUser(
|
|
29
|
+
// {
|
|
30
|
+
// _id: userWithNewPassword.id,
|
|
31
|
+
// emails: {
|
|
32
|
+
// $elemMatch: {
|
|
33
|
+
// address: emailRegexOperator(resetTicket.address),
|
|
34
|
+
// verified: false,
|
|
35
|
+
// },
|
|
36
|
+
// },
|
|
37
|
+
// },
|
|
38
|
+
// {
|
|
39
|
+
// $set: {
|
|
40
|
+
// 'emails.$[email].verified': true,
|
|
41
|
+
// },
|
|
42
|
+
// },
|
|
43
|
+
// {
|
|
44
|
+
// arrayFilters: [{ 'email.address': resetTicket.address }],
|
|
45
|
+
// },
|
|
46
|
+
// );
|
|
47
|
+
// if (updatedUser) {
|
|
48
|
+
// await modules.accounts.emit('VerifyEmailSuccess', updatedUser);
|
|
49
|
+
// }
|
|
50
|
+
// } catch (e) {
|
|
51
|
+
// /* */
|
|
52
|
+
// }
|
|
53
|
+
// }
|
|
62
54
|
} catch (e) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (e.code === 'ResetPasswordLinkExpired') throw new ResetPasswordLinkExpiredError({});
|
|
66
|
-
if (e.code === 'ResetPasswordLinkUnknownAddress')
|
|
67
|
-
throw new ResetPasswordLinkUnknownAddressError({});
|
|
68
|
-
if (e.code === 'NoEmailSet') throw new NoEmailSetError({});
|
|
69
|
-
throw new AuthOperationFailedError({});
|
|
55
|
+
if (e.cause === 'PASSWORD_INVALID') throw new PasswordInvalidError({ userId: user._id });
|
|
56
|
+
else throw e;
|
|
70
57
|
}
|
|
58
|
+
|
|
59
|
+
user = await context.modules.users.updateHeartbeat(user._id, {
|
|
60
|
+
remoteAddress: context.remoteAddress,
|
|
61
|
+
remotePort: context.remotePort,
|
|
62
|
+
userAgent: context.userAgent,
|
|
63
|
+
locale: context.localeContext.normalized,
|
|
64
|
+
countryCode: context.countryContext,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return context.login(user);
|
|
71
68
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { log } from '@unchainedshop/logger';
|
|
2
2
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
3
|
+
import { UserNotFoundError } from '../../../errors.js';
|
|
3
4
|
|
|
4
5
|
export default async function sendEnrollmentEmail(
|
|
5
6
|
root: Root,
|
|
@@ -8,8 +9,11 @@ export default async function sendEnrollmentEmail(
|
|
|
8
9
|
) {
|
|
9
10
|
log('mutation sendEnrollmentEmail', { email, userId });
|
|
10
11
|
|
|
12
|
+
const user = await modules.users.findUserByEmail(email);
|
|
13
|
+
if (!user) throw new UserNotFoundError({ email });
|
|
14
|
+
|
|
11
15
|
try {
|
|
12
|
-
await modules.
|
|
16
|
+
await modules.users.sendResetPasswordEmail(user._id, email, true);
|
|
13
17
|
return {
|
|
14
18
|
success: true,
|
|
15
19
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Context, Root } from '@unchainedshop/types/api.js';
|
|
2
2
|
import { log } from '@unchainedshop/logger';
|
|
3
|
+
import { UserNotFoundError } from '../../../errors.js';
|
|
3
4
|
|
|
4
5
|
export default async function sendVerificationEmail(
|
|
5
6
|
root: Root,
|
|
@@ -8,9 +9,17 @@ export default async function sendVerificationEmail(
|
|
|
8
9
|
) {
|
|
9
10
|
log('mutation sendVerificationEmail', { email, userId });
|
|
10
11
|
|
|
11
|
-
await modules.
|
|
12
|
+
const user = await modules.users.findUserByEmail(email);
|
|
13
|
+
if (!user) throw new UserNotFoundError({ email });
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
try {
|
|
16
|
+
await modules.users.sendVerificationEmail(user._id, email);
|
|
17
|
+
return {
|
|
18
|
+
success: true,
|
|
19
|
+
};
|
|
20
|
+
} catch (e) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
16
25
|
}
|