Explorar el Código

Merge branch 'master' into minor

Michael Bromley hace 3 años
padre
commit
dc3220d0d8

+ 13 - 0
CHANGELOG.md

@@ -1,3 +1,16 @@
+## <small>1.9.2 (2023-01-18)</small>
+
+
+#### Fixes
+
+* **core** Fix collection delete for big collection (#1966) ([6541975](https://github.com/vendure-ecommerce/vendure/commit/6541975)), closes [#1966](https://github.com/vendure-ecommerce/vendure/issues/1966) [#1961](https://github.com/vendure-ecommerce/vendure/issues/1961)
+* **core** Fix deletion of guest Customers ([cbc500f](https://github.com/vendure-ecommerce/vendure/commit/cbc500f)), closes [#1960](https://github.com/vendure-ecommerce/vendure/issues/1960)
+* **core** Fix interop issues between native and external auth (#1968) ([82f6b61](https://github.com/vendure-ecommerce/vendure/commit/82f6b61)), closes [#1968](https://github.com/vendure-ecommerce/vendure/issues/1968)
+* **core** Validate OrderLine custom fields in ShopAPI mutations ([d272255](https://github.com/vendure-ecommerce/vendure/commit/d272255)), closes [#1953](https://github.com/vendure-ecommerce/vendure/issues/1953)
+* **create** Improve example dockerfile & docs ([86770d1](https://github.com/vendure-ecommerce/vendure/commit/86770d1))
+* **email-plugin** Fix generation of test emails ([80da8e0](https://github.com/vendure-ecommerce/vendure/commit/80da8e0)), closes [#1931](https://github.com/vendure-ecommerce/vendure/issues/1931)
+* **payments-plugin** Calculate tax per order line instead of per unit for Mollie (#1958) ([16b17b6](https://github.com/vendure-ecommerce/vendure/commit/16b17b6)), closes [#1958](https://github.com/vendure-ecommerce/vendure/issues/1958) [#1939](https://github.com/vendure-ecommerce/vendure/issues/1939)
+
 ## <small>1.9.1 (2022-12-08)</small>
 ## <small>1.9.1 (2022-12-08)</small>
 
 
 
 

+ 2 - 2
docs/content/developer-guide/customizing-the-order-process/index.md

@@ -80,9 +80,9 @@ This way multiple custom states gets defined.
 
 
 ### Example: Intercepting a state transition
 ### Example: Intercepting a state transition
 
 
-Now we have defined out new `ValidatingCustomer` state, but there is as yet nothing to enforce that the tax ID is valid. To add this constraint, we'll use the [`onTransitionStart` state transition hook]({{< relref "state-machine-config" >}}#ontransitionstart).
+Now we have defined our new `ValidatingCustomer` state, but there is as yet nothing to enforce that the tax ID is valid. To add this constraint, we'll use the [`onTransitionStart` state transition hook]({{< relref "state-machine-config" >}}#ontransitionstart).
 
 
-This allows us to perform our custom logic and potentially prevent the transition from occurring. We will also assume that we have available a provider named `TaxIdService` which contains the logic to validate a tax ID.
+This allows us to perform our custom logic and potentially prevent the transition from occurring. We will also assume that we have a provider named `TaxIdService` available which contains the logic to validate a tax ID.
 
 
 ```TypeScript
 ```TypeScript
 // customer-validation-process.ts
 // customer-validation-process.ts

+ 1 - 1
docs/content/plugins/writing-a-vendure-plugin.md

@@ -141,7 +141,7 @@ export class RandomCatPlugin {}
 
 
 ### Step 6: Declare any providers used in the resolver
 ### Step 6: Declare any providers used in the resolver
 
 
-In order that out resolver is able to use Nest's dependency injection to inject and instance of `CatFetcher`, we must add it to the `providers` array in our plugin:
+In order that our resolver is able to use Nest's dependency injection to inject an instance of `CatFetcher`, we must add it to the `providers` array in our plugin:
 
 
 ```TypeScript
 ```TypeScript
 @VendurePlugin({
 @VendurePlugin({

+ 16 - 2
docs/content/user-guide/localization/index.md

@@ -5,13 +5,27 @@ weight: 10
 
 
 # Localization
 # Localization
 
 
-Vendure supports localization by allowing you to define translations for the following objects:
+Vendure supports **customer-facing** (Shop API) localization by allowing you to define translations for the following objects:
 
 
 * Collections
 * Collections
 * Countries
 * Countries
 * Facets
 * Facets
+* FacetValue
 * Products
 * Products
-* Shipping methods
+* ProductOptions
+* ProductOptionGroups
+* ProductVariants
+* ShippingMethods  
+
+Vendure supports **admin-facing** (Admin API and Admin UI) localization by allowing you to define translations for labels and descriptions of the following objects:
+  
+* CustomFields
+* CollectionFilters
+* PaymentMethodHandlers
+* PromotionActions
+* PromotionConditions
+* ShippingCalculators
+* ShippingEligibilityCheckers
 
 
 ## How to enable languages
 ## How to enable languages
 
 

+ 2 - 2
docs/content/user-guide/settings/shipping-methods.md

@@ -36,13 +36,13 @@ By default, Vendure comes with a simple flat-rate shipping calculator. Your deve
 
 
 ## Fulfillment handler
 ## Fulfillment handler
 
 
-By "fulfillment" we mean how do we physically get the goods into the hands of the customer? Common fulfillment methods include:
+By "fulfillment" we mean how do we physically get the goods into the hands of the customer. Common fulfillment methods include:
 
 
 * Courier services such as FedEx, DPD, DHL, etc.
 * Courier services such as FedEx, DPD, DHL, etc.
 * Collection by customer
 * Collection by customer
 * Delivery via email for digital goods or licenses
 * Delivery via email for digital goods or licenses
 
 
-By default, Vendure comes with a "manual fulfillment handler", which allows you to manually enter the details of whatever actual method is used. For example, if you send the order by via courier, you can enter the courier name and parcel number manually when creating an order.
+By default, Vendure comes with a "manual fulfillment handler", which allows you to manually enter the details of whatever actual method is used. For example, if you send the order by courier, you can enter the courier name and parcel number manually when creating an order.
 
 
 Your developers can however create much more sophisticated fulfillment handlers, which can enable things like automated calls to courier APIs, automated label generation, and so on.
 Your developers can however create much more sophisticated fulfillment handlers, which can enable things like automated calls to courier APIs, automated label generation, and so on.
 
 

+ 1 - 1
lerna.json

@@ -2,7 +2,7 @@
   "packages": [
   "packages": [
     "packages/*"
     "packages/*"
   ],
   ],
-  "version": "1.9.1",
+  "version": "1.9.2",
   "npmClient": "yarn",
   "npmClient": "yarn",
   "useWorkspaces": true,
   "useWorkspaces": true,
   "command": {
   "command": {

+ 3 - 3
packages/admin-ui-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/admin-ui-plugin",
   "name": "@vendure/admin-ui-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "types": "lib/index.d.ts",
   "types": "lib/index.d.ts",
   "files": [
   "files": [
@@ -21,8 +21,8 @@
   "devDependencies": {
   "devDependencies": {
     "@types/express": "^4.17.8",
     "@types/express": "^4.17.8",
     "@types/fs-extra": "^9.0.1",
     "@types/fs-extra": "^9.0.1",
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
     "express": "^4.17.1",
     "express": "^4.17.1",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "typescript": "4.3.5"
     "typescript": "4.3.5"

+ 2 - 2
packages/admin-ui/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/admin-ui",
   "name": "@vendure/admin-ui",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "scripts": {
   "scripts": {
     "ng": "ng",
     "ng": "ng",
@@ -39,7 +39,7 @@
     "@ng-select/ng-select": "^7.2.0",
     "@ng-select/ng-select": "^7.2.0",
     "@ngx-translate/core": "^13.0.0",
     "@ngx-translate/core": "^13.0.0",
     "@ngx-translate/http-loader": "^6.0.0",
     "@ngx-translate/http-loader": "^6.0.0",
-    "@vendure/common": "^1.9.1",
+    "@vendure/common": "^1.9.2",
     "@webcomponents/custom-elements": "^1.4.3",
     "@webcomponents/custom-elements": "^1.4.3",
     "apollo-angular": "^2.6.0",
     "apollo-angular": "^2.6.0",
     "apollo-upload-client": "^16.0.0",
     "apollo-upload-client": "^16.0.0",

+ 1 - 1
packages/admin-ui/src/lib/core/src/common/version.ts

@@ -1,2 +1,2 @@
 // Auto-generated by the set-version.js script.
 // Auto-generated by the set-version.js script.
-export const ADMIN_UI_VERSION = '1.9.1';
+export const ADMIN_UI_VERSION = '1.9.2';

+ 3 - 3
packages/asset-server-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/asset-server-plugin",
   "name": "@vendure/asset-server-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "types": "lib/index.d.ts",
   "types": "lib/index.d.ts",
   "files": [
   "files": [
@@ -24,8 +24,8 @@
     "@types/fs-extra": "^9.0.8",
     "@types/fs-extra": "^9.0.8",
     "@types/node-fetch": "^2.5.8",
     "@types/node-fetch": "^2.5.8",
     "@types/sharp": "^0.30.4",
     "@types/sharp": "^0.30.4",
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
     "aws-sdk": "^2.856.0",
     "aws-sdk": "^2.856.0",
     "express": "^4.17.1",
     "express": "^4.17.1",
     "node-fetch": "^2.6.1",
     "node-fetch": "^2.6.1",

+ 1 - 1
packages/common/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/common",
   "name": "@vendure/common",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "main": "index.js",
   "main": "index.js",
   "license": "MIT",
   "license": "MIT",
   "scripts": {
   "scripts": {

+ 4 - 4
packages/common/src/shared-types.ts

@@ -214,7 +214,7 @@ export type CustomFieldsObject = { [key: string]: any };
 export interface AdminUiConfig {
 export interface AdminUiConfig {
     /**
     /**
      * @description
      * @description
-     * The hostname of the Vendure server which the admin ui will be making API calls
+     * The hostname of the Vendure server which the admin UI will be making API calls
      * to. If set to "auto", the Admin UI app will determine the hostname from the
      * to. If set to "auto", the Admin UI app will determine the hostname from the
      * current location (i.e. `window.location.hostname`).
      * current location (i.e. `window.location.hostname`).
      *
      *
@@ -223,7 +223,7 @@ export interface AdminUiConfig {
     apiHost: string | 'auto';
     apiHost: string | 'auto';
     /**
     /**
      * @description
      * @description
-     * The port of the Vendure server which the admin ui will be making API calls
+     * The port of the Vendure server which the admin UI will be making API calls
      * to. If set to "auto", the Admin UI app will determine the port from the
      * to. If set to "auto", the Admin UI app will determine the port from the
      * current location (i.e. `window.location.port`).
      * current location (i.e. `window.location.port`).
      *
      *
@@ -331,7 +331,7 @@ export interface AdminUiConfig {
 export interface AdminUiAppConfig {
 export interface AdminUiAppConfig {
     /**
     /**
      * @description
      * @description
-     * The path to the compiled admin ui app files. If not specified, an internal
+     * The path to the compiled admin UI app files. If not specified, an internal
      * default build is used. This path should contain the `vendure-ui-config.json` file,
      * default build is used. This path should contain the `vendure-ui-config.json` file,
      * index.html, the compiled js bundles etc.
      * index.html, the compiled js bundles etc.
      */
      */
@@ -359,7 +359,7 @@ export interface AdminUiAppConfig {
 export interface AdminUiAppDevModeConfig {
 export interface AdminUiAppDevModeConfig {
     /**
     /**
      * @description
      * @description
-     * The path to the uncompiled ui app source files. This path should contain the `vendure-ui-config.json` file.
+     * The path to the uncompiled UI app source files. This path should contain the `vendure-ui-config.json` file.
      */
      */
     sourcePath: string;
     sourcePath: string;
     /**
     /**

+ 2 - 2
packages/core/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/core",
   "name": "@vendure/core",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "description": "A modern, headless ecommerce framework",
   "description": "A modern, headless ecommerce framework",
   "repository": {
   "repository": {
     "type": "git",
     "type": "git",
@@ -49,7 +49,7 @@
     "@nestjs/testing": "7.6.17",
     "@nestjs/testing": "7.6.17",
     "@nestjs/typeorm": "7.1.5",
     "@nestjs/typeorm": "7.1.5",
     "@types/fs-extra": "^9.0.1",
     "@types/fs-extra": "^9.0.1",
-    "@vendure/common": "^1.9.1",
+    "@vendure/common": "^1.9.2",
     "apollo-server-express": "2.24.1",
     "apollo-server-express": "2.24.1",
     "bcrypt": "^5.1.0",
     "bcrypt": "^5.1.0",
     "body-parser": "^1.19.0",
     "body-parser": "^1.19.0",

+ 5 - 2
packages/core/src/config/auth/native-authentication-strategy.ts

@@ -62,7 +62,7 @@ export class NativeAuthenticationStrategy implements AuthenticationStrategy<Nati
     private getUserFromIdentifier(ctx: RequestContext, identifier: string): Promise<User | undefined> {
     private getUserFromIdentifier(ctx: RequestContext, identifier: string): Promise<User | undefined> {
         return this.connection.getRepository(ctx, User).findOne({
         return this.connection.getRepository(ctx, User).findOne({
             where: { identifier, deletedAt: null },
             where: { identifier, deletedAt: null },
-            relations: ['roles', 'roles.channels'],
+            relations: ['roles', 'roles.channels', 'authenticationMethods'],
         });
         });
     }
     }
 
 
@@ -76,7 +76,10 @@ export class NativeAuthenticationStrategy implements AuthenticationStrategy<Nati
         if (!user) {
         if (!user) {
             return false;
             return false;
         }
         }
-        const nativeAuthMethod = user.getNativeAuthenticationMethod();
+        const nativeAuthMethod = user.getNativeAuthenticationMethod(false);
+        if (!nativeAuthMethod) {
+            return false;
+        }
         const pw =
         const pw =
             (
             (
                 await this.connection
                 await this.connection

+ 1 - 1
packages/core/src/config/payment/payment-method-handler.ts

@@ -298,7 +298,7 @@ export interface PaymentMethodConfigOptions<T extends ConfigArgs> extends Config
 /**
 /**
  * @description
  * @description
  * A PaymentMethodHandler contains the code which is used to generate a Payment when a call to the
  * A PaymentMethodHandler contains the code which is used to generate a Payment when a call to the
- * `addPaymentToOrder` mutation is made. If contains any necessary steps of interfacing with a
+ * `addPaymentToOrder` mutation is made. It contains any necessary steps of interfacing with a
  * third-party payment gateway before the Payment is created and can also define actions to fire
  * third-party payment gateway before the Payment is created and can also define actions to fire
  * when the state of the payment is changed.
  * when the state of the payment is changed.
  *
  *

+ 5 - 2
packages/core/src/entity/user/user.entity.ts

@@ -48,14 +48,17 @@ export class User extends VendureEntity implements HasCustomFields, SoftDeletabl
     @Column(type => CustomUserFields)
     @Column(type => CustomUserFields)
     customFields: CustomUserFields;
     customFields: CustomUserFields;
 
 
-    getNativeAuthenticationMethod(): NativeAuthenticationMethod {
+    getNativeAuthenticationMethod(): NativeAuthenticationMethod;
+    getNativeAuthenticationMethod(strict? : boolean): NativeAuthenticationMethod | undefined;
+
+    getNativeAuthenticationMethod(strict? : boolean): NativeAuthenticationMethod | undefined {
         if (!this.authenticationMethods) {
         if (!this.authenticationMethods) {
             throw new InternalServerError('error.user-authentication-methods-not-loaded');
             throw new InternalServerError('error.user-authentication-methods-not-loaded');
         }
         }
         const match = this.authenticationMethods.find(
         const match = this.authenticationMethods.find(
             (m): m is NativeAuthenticationMethod => m instanceof NativeAuthenticationMethod,
             (m): m is NativeAuthenticationMethod => m instanceof NativeAuthenticationMethod,
         );
         );
-        if (!match) {
+        if (!match && (strict === undefined || strict)) {
             throw new InternalServerError('error.native-authentication-methods-not-found');
             throw new InternalServerError('error.native-authentication-methods-not-found');
         }
         }
         return match;
         return match;

+ 6 - 11
packages/core/src/service/helpers/external-authentication/external-authentication.service.ts

@@ -214,21 +214,16 @@ export class ExternalAuthenticationService {
         strategy: string,
         strategy: string,
         externalIdentifier: string,
         externalIdentifier: string,
     ): Promise<User | undefined> {
     ): Promise<User | undefined> {
-        const usersWithMatchingIdentifier = await this.connection
+        const user = await this.connection
             .getRepository(ctx, User)
             .getRepository(ctx, User)
             .createQueryBuilder('user')
             .createQueryBuilder('user')
-            .leftJoinAndSelect('user.authenticationMethods', 'authMethod')
+            .leftJoinAndSelect('user.authenticationMethods', 'aums')
+            .leftJoin('user.authenticationMethods', 'authMethod')
             .andWhere('authMethod.externalIdentifier = :externalIdentifier', { externalIdentifier })
             .andWhere('authMethod.externalIdentifier = :externalIdentifier', { externalIdentifier })
+            .andWhere('authMethod.strategy = :strategy', { strategy })
             .andWhere('user.deletedAt IS NULL')
             .andWhere('user.deletedAt IS NULL')
-            .getMany();
-
-        const matchingUser = usersWithMatchingIdentifier.find(user =>
-            user.authenticationMethods.find(
-                m => m instanceof ExternalAuthenticationMethod && m.strategy === strategy,
-            ),
-        );
-
-        return matchingUser;
+            .getOne();
+        return user;
     }
     }
 
 
     private async findExistingCustomerUserByEmailAddress(ctx: RequestContext, emailAddress: string) {
     private async findExistingCustomerUserByEmailAddress(ctx: RequestContext, emailAddress: string) {

+ 3 - 1
packages/core/src/service/services/auth.service.ts

@@ -19,6 +19,7 @@ import { ConfigService } from '../../config/config.service';
 import { TransactionalConnection } from '../../connection/transactional-connection';
 import { TransactionalConnection } from '../../connection/transactional-connection';
 import { AuthenticatedSession } from '../../entity/session/authenticated-session.entity';
 import { AuthenticatedSession } from '../../entity/session/authenticated-session.entity';
 import { User } from '../../entity/user/user.entity';
 import { User } from '../../entity/user/user.entity';
+import { ExternalAuthenticationMethod } from '../../entity/authentication-method/external-authentication-method.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { EventBus } from '../../event-bus/event-bus';
 import { AttemptedLoginEvent } from '../../event-bus/events/attempted-login-event';
 import { AttemptedLoginEvent } from '../../event-bus/events/attempted-login-event';
 import { LoginEvent } from '../../event-bus/events/login-event';
 import { LoginEvent } from '../../event-bus/events/login-event';
@@ -87,7 +88,8 @@ export class AuthService {
             user.roles = userWithRoles?.roles || [];
             user.roles = userWithRoles?.roles || [];
         }
         }
 
 
-        if (this.configService.authOptions.requireVerification && !user.verified) {
+        const extAuths = (user.authenticationMethods ?? []).filter(am => am instanceof ExternalAuthenticationMethod);
+        if (!extAuths.length && this.configService.authOptions.requireVerification && !user.verified) {
             return new NotVerifiedError();
             return new NotVerifiedError();
         }
         }
         if (ctx.session && ctx.session.activeOrderId) {
         if (ctx.session && ctx.session.activeOrderId) {

+ 11 - 5
packages/core/src/service/services/user.service.ts

@@ -179,8 +179,9 @@ export class UserService {
         const user = await this.connection
         const user = await this.connection
             .getRepository(ctx, User)
             .getRepository(ctx, User)
             .createQueryBuilder('user')
             .createQueryBuilder('user')
-            .leftJoinAndSelect('user.authenticationMethods', 'authenticationMethod')
-            .addSelect('authenticationMethod.passwordHash')
+            .leftJoinAndSelect('user.authenticationMethods', 'aums')
+            .leftJoin('user.authenticationMethods', 'authenticationMethod')
+            .addSelect('aums.passwordHash')
             .where('authenticationMethod.verificationToken = :verificationToken', { verificationToken })
             .where('authenticationMethod.verificationToken = :verificationToken', { verificationToken })
             .getOne();
             .getOne();
         if (user) {
         if (user) {
@@ -222,7 +223,10 @@ export class UserService {
         if (!user) {
         if (!user) {
             return;
             return;
         }
         }
-        const nativeAuthMethod = user.getNativeAuthenticationMethod();
+        const nativeAuthMethod = user.getNativeAuthenticationMethod(false);
+        if (!nativeAuthMethod) {
+            return undefined;
+        }
         nativeAuthMethod.passwordResetToken = this.verificationTokenGenerator.generateVerificationToken();
         nativeAuthMethod.passwordResetToken = this.verificationTokenGenerator.generateVerificationToken();
         await this.connection.getRepository(ctx, NativeAuthenticationMethod).save(nativeAuthMethod);
         await this.connection.getRepository(ctx, NativeAuthenticationMethod).save(nativeAuthMethod);
         return user;
         return user;
@@ -245,7 +249,8 @@ export class UserService {
         const user = await this.connection
         const user = await this.connection
             .getRepository(ctx, User)
             .getRepository(ctx, User)
             .createQueryBuilder('user')
             .createQueryBuilder('user')
-            .leftJoinAndSelect('user.authenticationMethods', 'authenticationMethod')
+            .leftJoinAndSelect('user.authenticationMethods', 'aums')
+            .leftJoin('user.authenticationMethods', 'authenticationMethod')
             .where('authenticationMethod.passwordResetToken = :passwordResetToken', { passwordResetToken })
             .where('authenticationMethod.passwordResetToken = :passwordResetToken', { passwordResetToken })
             .getOne();
             .getOne();
         if (!user) {
         if (!user) {
@@ -330,7 +335,8 @@ export class UserService {
         const user = await this.connection
         const user = await this.connection
             .getRepository(ctx, User)
             .getRepository(ctx, User)
             .createQueryBuilder('user')
             .createQueryBuilder('user')
-            .leftJoinAndSelect('user.authenticationMethods', 'authenticationMethod')
+            .leftJoinAndSelect('user.authenticationMethods', 'aums')
+            .leftJoin('user.authenticationMethods', 'authenticationMethod')
             .where('authenticationMethod.identifierChangeToken = :identifierChangeToken', {
             .where('authenticationMethod.identifierChangeToken = :identifierChangeToken', {
                 identifierChangeToken: token,
                 identifierChangeToken: token,
             })
             })

+ 3 - 3
packages/create/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/create",
   "name": "@vendure/create",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "bin": {
   "bin": {
     "create": "./index.js"
     "create": "./index.js"
@@ -28,13 +28,13 @@
     "@types/handlebars": "^4.1.0",
     "@types/handlebars": "^4.1.0",
     "@types/listr": "^0.14.2",
     "@types/listr": "^0.14.2",
     "@types/semver": "^6.2.2",
     "@types/semver": "^6.2.2",
-    "@vendure/core": "^1.9.1",
+    "@vendure/core": "^1.9.2",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "ts-node": "^10.2.1",
     "ts-node": "^10.2.1",
     "typescript": "4.3.5"
     "typescript": "4.3.5"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@vendure/common": "^1.9.1",
+    "@vendure/common": "^1.9.2",
     "chalk": "^4.1.0",
     "chalk": "^4.1.0",
     "commander": "^7.1.0",
     "commander": "^7.1.0",
     "cross-spawn": "^7.0.3",
     "cross-spawn": "^7.0.3",

+ 9 - 9
packages/dev-server/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "dev-server",
   "name": "dev-server",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "main": "index.js",
   "main": "index.js",
   "license": "MIT",
   "license": "MIT",
   "private": true,
   "private": true,
@@ -14,18 +14,18 @@
     "load-test:100k": "node -r ts-node/register load-testing/run-load-test.ts 100000"
     "load-test:100k": "node -r ts-node/register load-testing/run-load-test.ts 100000"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@vendure/admin-ui-plugin": "^1.9.1",
-    "@vendure/asset-server-plugin": "^1.9.1",
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
-    "@vendure/elasticsearch-plugin": "^1.9.1",
-    "@vendure/email-plugin": "^1.9.1",
+    "@vendure/admin-ui-plugin": "^1.9.2",
+    "@vendure/asset-server-plugin": "^1.9.2",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
+    "@vendure/elasticsearch-plugin": "^1.9.2",
+    "@vendure/email-plugin": "^1.9.2",
     "typescript": "4.3.5"
     "typescript": "4.3.5"
   },
   },
   "devDependencies": {
   "devDependencies": {
     "@types/csv-stringify": "^3.1.0",
     "@types/csv-stringify": "^3.1.0",
-    "@vendure/testing": "^1.9.1",
-    "@vendure/ui-devkit": "^1.9.1",
+    "@vendure/testing": "^1.9.2",
+    "@vendure/ui-devkit": "^1.9.2",
     "commander": "^7.1.0",
     "commander": "^7.1.0",
     "concurrently": "^5.0.0",
     "concurrently": "^5.0.0",
     "csv-stringify": "^5.3.3",
     "csv-stringify": "^5.3.3",

+ 3 - 3
packages/elasticsearch-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/elasticsearch-plugin",
   "name": "@vendure/elasticsearch-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "types": "lib/index.d.ts",
   "types": "lib/index.d.ts",
@@ -25,8 +25,8 @@
     "fast-deep-equal": "^3.1.3"
     "fast-deep-equal": "^3.1.3"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "typescript": "4.3.5"
     "typescript": "4.3.5"
   }
   }

+ 3 - 3
packages/email-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/email-plugin",
   "name": "@vendure/email-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "types": "lib/index.d.ts",
   "types": "lib/index.d.ts",
@@ -35,8 +35,8 @@
     "@types/fs-extra": "^9.0.1",
     "@types/fs-extra": "^9.0.1",
     "@types/handlebars": "^4.1.0",
     "@types/handlebars": "^4.1.0",
     "@types/mjml": "^4.0.4",
     "@types/mjml": "^4.0.4",
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "typescript": "4.3.5"
     "typescript": "4.3.5"
   }
   }

+ 3 - 3
packages/harden-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/harden-plugin",
   "name": "@vendure/harden-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "types": "lib/index.d.ts",
   "types": "lib/index.d.ts",
@@ -21,7 +21,7 @@
     "graphql-query-complexity": "^0.12.0"
     "graphql-query-complexity": "^0.12.0"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1"
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2"
   }
   }
 }
 }

+ 3 - 3
packages/job-queue-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/job-queue-plugin",
   "name": "@vendure/job-queue-plugin",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "license": "MIT",
   "license": "MIT",
   "main": "package/index.js",
   "main": "package/index.js",
   "types": "package/index.d.ts",
   "types": "package/index.d.ts",
@@ -24,8 +24,8 @@
   "devDependencies": {
   "devDependencies": {
     "@google-cloud/pubsub": "^2.8.0",
     "@google-cloud/pubsub": "^2.8.0",
     "@types/ioredis": "^4.28.10",
     "@types/ioredis": "^4.28.10",
-    "@vendure/common": "^1.9.1",
-    "@vendure/core": "^1.9.1",
+    "@vendure/common": "^1.9.2",
+    "@vendure/core": "^1.9.2",
     "bullmq": "^1.86.7",
     "bullmq": "^1.86.7",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "typescript": "4.3.5"
     "typescript": "4.3.5"

+ 4 - 4
packages/payments-plugin/package.json

@@ -1,6 +1,6 @@
 {
 {
     "name": "@vendure/payments-plugin",
     "name": "@vendure/payments-plugin",
-    "version": "1.9.1",
+    "version": "1.9.2",
     "license": "MIT",
     "license": "MIT",
     "main": "package/index.js",
     "main": "package/index.js",
     "types": "package/index.d.ts",
     "types": "package/index.d.ts",
@@ -29,9 +29,9 @@
     "devDependencies": {
     "devDependencies": {
         "@mollie/api-client": "^3.6.0",
         "@mollie/api-client": "^3.6.0",
         "@types/braintree": "^2.22.15",
         "@types/braintree": "^2.22.15",
-        "@vendure/common": "^1.9.1",
-        "@vendure/core": "^1.9.1",
-        "@vendure/testing": "^1.9.1",
+        "@vendure/common": "^1.9.2",
+        "@vendure/core": "^1.9.2",
+        "@vendure/testing": "^1.9.2",
         "braintree": "^3.0.0",
         "braintree": "^3.0.0",
         "nock": "^13.1.4",
         "nock": "^13.1.4",
         "rimraf": "^3.0.2",
         "rimraf": "^3.0.2",

+ 3 - 3
packages/testing/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/testing",
   "name": "@vendure/testing",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "description": "End-to-end testing tools for Vendure projects",
   "description": "End-to-end testing tools for Vendure projects",
   "keywords": [
   "keywords": [
     "vendure",
     "vendure",
@@ -34,7 +34,7 @@
   },
   },
   "dependencies": {
   "dependencies": {
     "@types/node-fetch": "^2.5.4",
     "@types/node-fetch": "^2.5.4",
-    "@vendure/common": "^1.9.1",
+    "@vendure/common": "^1.9.2",
     "faker": "^4.1.0",
     "faker": "^4.1.0",
     "form-data": "^3.0.0",
     "form-data": "^3.0.0",
     "graphql": "15.5.1",
     "graphql": "15.5.1",
@@ -45,7 +45,7 @@
   "devDependencies": {
   "devDependencies": {
     "@types/mysql": "^2.15.15",
     "@types/mysql": "^2.15.15",
     "@types/pg": "^7.14.5",
     "@types/pg": "^7.14.5",
-    "@vendure/core": "^1.9.1",
+    "@vendure/core": "^1.9.2",
     "mysql": "^2.18.1",
     "mysql": "^2.18.1",
     "pg": "^8.4.0",
     "pg": "^8.4.0",
     "rimraf": "^3.0.0",
     "rimraf": "^3.0.0",

+ 4 - 4
packages/ui-devkit/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@vendure/ui-devkit",
   "name": "@vendure/ui-devkit",
-  "version": "1.9.1",
+  "version": "1.9.2",
   "description": "A library for authoring Vendure Admin UI extensions",
   "description": "A library for authoring Vendure Admin UI extensions",
   "keywords": [
   "keywords": [
     "vendure",
     "vendure",
@@ -40,8 +40,8 @@
     "@angular/cli": "12.2.16",
     "@angular/cli": "12.2.16",
     "@angular/compiler": "12.2.16",
     "@angular/compiler": "12.2.16",
     "@angular/compiler-cli": "12.2.16",
     "@angular/compiler-cli": "12.2.16",
-    "@vendure/admin-ui": "^1.9.1",
-    "@vendure/common": "^1.9.1",
+    "@vendure/admin-ui": "^1.9.2",
+    "@vendure/common": "^1.9.2",
     "chalk": "^4.1.0",
     "chalk": "^4.1.0",
     "chokidar": "^3.5.1",
     "chokidar": "^3.5.1",
     "fs-extra": "^10.0.0",
     "fs-extra": "^10.0.0",
@@ -52,7 +52,7 @@
     "@rollup/plugin-node-resolve": "^11.2.0",
     "@rollup/plugin-node-resolve": "^11.2.0",
     "@types/fs-extra": "^9.0.8",
     "@types/fs-extra": "^9.0.8",
     "@types/glob": "^7.1.3",
     "@types/glob": "^7.1.3",
-    "@vendure/core": "^1.9.1",
+    "@vendure/core": "^1.9.2",
     "rimraf": "^3.0.2",
     "rimraf": "^3.0.2",
     "rollup": "^2.40.0",
     "rollup": "^2.40.0",
     "rollup-plugin-terser": "^7.0.2",
     "rollup-plugin-terser": "^7.0.2",