Browse Source

Merge branch 'master' into minor

Michael Bromley 2 years ago
parent
commit
006640d14d

+ 1 - 1
.github/CODE_OF_CONDUCT.md

@@ -1,7 +1,7 @@
 # Vendure Code of Conduct
 
 ## Scope
-This code of conduct applies to those who wish to contribute to the Vendure project (any repo under the [vendure-ecommerce](https://github.com/vendure-ecommerce) organization) by way of issues and pull requests. It also applies to official project communications channels such as Slack.
+This code of conduct applies to those who wish to contribute to the Vendure project (any repo under the [vendure-ecommerce](https://github.com/vendure-ecommerce) organization) by way of issues and pull requests. It also applies to official project communications channels such as Discord.
 
 ## Standards
 

+ 24 - 0
CHANGELOG.md

@@ -1,3 +1,27 @@
+## <small>1.9.7 (2023-05-19)</small>
+
+#### Fixes
+
+* **create** Update community link to point to new Discord server
+
+#### Features
+
+* **payments-plugin** Add metadata field to StripePluginOptions (#2157) ([21baa0a](https://github.com/vendure-ecommerce/vendure/commit/21baa0a)), closes [#2157](https://github.com/vendure-ecommerce/vendure/issues/2157) [#1935](https://github.com/vendure-ecommerce/vendure/issues/1935)
+
+## <small>1.9.6 (2023-04-28)</small>
+
+
+#### Fixes
+
+* **admin-ui** Add branding to welcome page (#2115) ([f0f8769](https://github.com/vendure-ecommerce/vendure/commit/f0f8769)), closes [#2115](https://github.com/vendure-ecommerce/vendure/issues/2115) [#2040](https://github.com/vendure-ecommerce/vendure/issues/2040)
+* **asset-server-plugin** Change image format with no other transforms (#2104) ([6cf1608](https://github.com/vendure-ecommerce/vendure/commit/6cf1608)), closes [#2104](https://github.com/vendure-ecommerce/vendure/issues/2104)
+* **core** Fix error messages containing colon char ([2cfc874](https://github.com/vendure-ecommerce/vendure/commit/2cfc874)), closes [#2153](https://github.com/vendure-ecommerce/vendure/issues/2153)
+
+#### Features
+
+* **admin-ui** Implement custom fields updating of ProductOptionGroup and ProductOption entities ([d2a0824](https://github.com/vendure-ecommerce/vendure/commit/d2a0824))
+* **admin-ui** Search field added on administrators list on dashboard -> administrator. (#2130) ([0cc20f2](https://github.com/vendure-ecommerce/vendure/commit/0cc20f2)), closes [#2130](https://github.com/vendure-ecommerce/vendure/issues/2130)
+
 ## <small>1.9.5 (2023-03-24)</small>
 
 #### Fixes 

+ 4 - 1
README.md

@@ -10,7 +10,7 @@ A headless [GraphQL](https://graphql.org/) ecommerce framework built on [Node.js
 
 * [Getting Started](https://www.vendure.io/docs/getting-started/): Get Vendure up and running locally in a matter of minutes with a single command
 * [Live Demo](https://demo.vendure.io/)
-* [Vendure Slack](https://join.slack.com/t/vendure-ecommerce/shared_invite/zt-1exzio25w-vjL5TYkyJZjK52d6jkOsIA) Join us on Slack for support and answers to your questions
+* [Vendure Discord](https://www.vendure.io/community) Join us on Discord for support and answers to your questions
 
 ## Structure
 
@@ -41,6 +41,9 @@ The root directory has a `package.json` which contains build-related dependencie
 * Generating TypeScript types from the GraphQL schema
 * Linting, formatting & testing tasks to run on git commit & push
 
+> Note:
+> When you do `yarn` for the first time, you will need to manually create the `package` folder under [/packages/admin-ui](/packages/admin-ui).
+
 ### 2. Bootstrap the packages
 
 `yarn bootstrap`

+ 1 - 1
lerna.json

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

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

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

+ 1 - 1
packages/admin-ui/package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "@vendure/admin-ui",
-  "version": "1.9.5",
+  "version": "1.9.7",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {

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

@@ -1,6 +1,6 @@
 {
   "name": "@vendure/admin-ui",
-  "version": "1.9.5",
+  "version": "1.9.7",
   "license": "MIT",
   "scripts": {
     "ng": "ng",
@@ -39,7 +39,7 @@
     "@ng-select/ng-select": "^7.2.0",
     "@ngx-translate/core": "^13.0.0",
     "@ngx-translate/http-loader": "^6.0.0",
-    "@vendure/common": "^1.9.5",
+    "@vendure/common": "^1.9.7",
     "@webcomponents/custom-elements": "^1.4.3",
     "apollo-angular": "^2.6.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.
-export const ADMIN_UI_VERSION = '1.9.5';
+export const ADMIN_UI_VERSION = '1.9.7';

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

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

+ 1 - 1
packages/common/package.json

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

+ 2 - 2
packages/core/package.json

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

+ 3 - 3
packages/create/package.json

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

+ 1 - 1
packages/create/templates/readme.hbs

@@ -5,7 +5,7 @@ This project was generated with [`@vendure/create`](https://github.com/vendure-e
 Useful links:
 
 - [Vendure docs](https://www.vendure.io/docs)
-- [Vendure Slack community](https://join.slack.com/t/vendure-ecommerce/shared_invite/zt-1exzio25w-vjL5TYkyJZjK52d6jkOsIA)
+- [Vendure Discord community](https://www.vendure.io/community)
 - [Vendure on GitHub](https://github.com/vendure-ecommerce/vendure)
 - [Vendure plugin template](https://github.com/vendure-ecommerce/plugin-template)
 

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

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

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

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

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

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

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

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

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

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

+ 39 - 0
packages/payments-plugin/e2e/stripe-metadata-sanitize.e2e-spec.ts

@@ -0,0 +1,39 @@
+import { sanitizeMetadata } from '../src/stripe/metadata-sanitize';
+
+describe('Stripe Metadata Sanitize', () => {
+    const metadata = {
+        customerEmail: 'test@gmail.com',
+    };
+    it('should sanitize and create new object metadata', () => {
+        const newMetadata = sanitizeMetadata(metadata);
+        expect(newMetadata).toEqual(metadata);
+        expect(newMetadata).not.toBe(metadata);
+    });
+    it('should omit fields that have key length exceed 40 characters', () => {
+        const newMetadata = sanitizeMetadata({
+            ...metadata,
+            reallylongkey_reallylongkey_reallylongkey_reallylongkey_reallylongkey: 1,
+        });
+        expect(newMetadata).toEqual(metadata);
+    });
+    it('should omit fields that have value length exceed 500 characters', () => {
+        const reallyLongText = Array(501).fill('a').join();
+        const newMetadata = sanitizeMetadata({
+            ...metadata,
+            complexField: reallyLongText,
+        });
+        expect(newMetadata).toEqual(metadata);
+    });
+    it('should truncate metadata that have more than 50 keys', () => {
+        const moreThan50KeysMetadata = Array(51)
+            .fill('a')
+            .reduce((obj, val, idx) => {
+                obj[idx] = val;
+                return obj;
+            }, {});
+        const newMetadata = sanitizeMetadata(moreThan50KeysMetadata);
+        expect(Object.keys(newMetadata).length).toEqual(50);
+        delete moreThan50KeysMetadata['50'];
+        expect(newMetadata).toEqual(moreThan50KeysMetadata);
+    });
+});

+ 35 - 1
packages/payments-plugin/e2e/stripe-payment.e2e-spec.ts

@@ -1,5 +1,5 @@
 /* tslint:disable:no-non-null-assertion */
-import { mergeConfig } from '@vendure/core';
+import { EntityHydrator, mergeConfig } from '@vendure/core';
 import { CreateProduct, CreateProductVariants } from '@vendure/core/e2e/graphql/generated-e2e-admin-types';
 import { CREATE_PRODUCT, CREATE_PRODUCT_VARIANTS } from '@vendure/core/e2e/graphql/shared-definitions';
 import { createTestEnvironment, E2E_DEFAULT_CHANNEL_TOKEN } from '@vendure/testing';
@@ -162,6 +162,40 @@ describe('Stripe payments', () => {
         expect(createStripePaymentIntent).toEqual('test-client-secret');
     });
 
+    // https://github.com/vendure-ecommerce/vendure/issues/1935
+    it('should attach metadata to stripe payment intent', async () => {
+        StripePlugin.options.metadata = async (injector, ctx, currentOrder) => {
+            const hydrator = await injector.get(EntityHydrator);
+            await hydrator.hydrate(ctx, currentOrder, { relations: ['customer'] });
+            return {
+                customerEmail: currentOrder.customer?.emailAddress ?? 'demo',
+            };
+        };
+        let createPaymentIntentPayload: any;
+        const { activeOrder } = await shopClient.query<GetActiveOrderQuery>(GET_ACTIVE_ORDER);
+        nock('https://api.stripe.com/')
+            .post('/v1/payment_intents', body => {
+                createPaymentIntentPayload = body;
+                return true;
+            })
+            .reply(200, {
+                client_secret: 'test-client-secret',
+            });
+        const { createStripePaymentIntent } = await shopClient.query(CREATE_STRIPE_PAYMENT_INTENT);
+        expect(createPaymentIntentPayload).toEqual({
+            amount: activeOrder?.totalWithTax.toString(),
+            currency: activeOrder?.currencyCode?.toLowerCase(),
+            customer: 'new-customer-id',
+            'automatic_payment_methods[enabled]': 'true',
+            'metadata[channelToken]': E2E_DEFAULT_CHANNEL_TOKEN,
+            'metadata[orderId]': '1',
+            'metadata[orderCode]': activeOrder?.code,
+            'metadata[customerEmail]': customers[0].emailAddress,
+        });
+        expect(createStripePaymentIntent).toEqual('test-client-secret');
+        StripePlugin.options.metadata = undefined;
+    });
+
     // https://github.com/vendure-ecommerce/vendure/issues/1630
     describe('currencies with no fractional units', () => {
         let japanProductId: string;

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

@@ -1,6 +1,6 @@
 {
     "name": "@vendure/payments-plugin",
-    "version": "1.9.5",
+    "version": "1.9.7",
     "license": "MIT",
     "main": "package/index.js",
     "types": "package/index.d.ts",
@@ -33,9 +33,9 @@
         "@mollie/api-client": "^3.6.0",
         "@types/braintree": "^2.22.15",
         "@types/localtunnel": "2.0.1",
-        "@vendure/common": "^1.9.5",
-        "@vendure/core": "^1.9.5",
-        "@vendure/testing": "^1.9.5",
+        "@vendure/common": "^1.9.7",
+        "@vendure/core": "^1.9.7",
+        "@vendure/testing": "^1.9.7",
         "braintree": "^3.0.0",
         "localtunnel": "2.0.1",
         "nock": "^13.1.4",

+ 35 - 0
packages/payments-plugin/src/stripe/metadata-sanitize.ts

@@ -0,0 +1,35 @@
+import Stripe from 'stripe';
+
+const MAX_KEYS = 50;
+const MAX_KEY_NAME_LENGTH = 40;
+const MAX_VALUE_LENGTH = 500;
+/**
+ * @description
+ * Santitize metadata to ensure it follow Stripe's instructions
+ *
+ * @link
+ * https://stripe.com/docs/api/metadata
+ *
+ * @Restriction
+ * You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long.
+ *
+ */
+export function sanitizeMetadata(metadata: Stripe.MetadataParam) {
+    if (typeof metadata !== 'object' && metadata !== null) return {};
+
+    const keys = Object.keys(metadata)
+        .filter(keyName => keyName.length <= MAX_KEY_NAME_LENGTH)
+        .filter(
+            keyName =>
+                typeof metadata[keyName] !== 'string' ||
+                (metadata[keyName] as string).length <= MAX_VALUE_LENGTH,
+        )
+        .slice(0, MAX_KEYS) as Array<keyof Stripe.MetadataParam>;
+
+    const sanitizedMetadata = keys.reduce((obj, keyName) => {
+        obj[keyName] = metadata[keyName];
+        return obj;
+    }, {} as Stripe.MetadataParam);
+
+    return sanitizedMetadata;
+}

+ 15 - 6
packages/payments-plugin/src/stripe/stripe.service.ts

@@ -1,8 +1,10 @@
 import { Inject, Injectable } from '@nestjs/common';
-import { Customer, Logger, Order, RequestContext, TransactionalConnection } from '@vendure/core';
+import { ModuleRef } from '@nestjs/core';
+import { Customer, Injector, Logger, Order, RequestContext, TransactionalConnection } from '@vendure/core';
 import Stripe from 'stripe';
 
 import { loggerCtx, STRIPE_PLUGIN_OPTIONS } from './constants';
+import { sanitizeMetadata } from './metadata-sanitize';
 import { getAmountInStripeMinorUnits } from './stripe-utils';
 import { StripePluginOptions } from './types';
 
@@ -13,6 +15,7 @@ export class StripeService {
     constructor(
         private connection: TransactionalConnection,
         @Inject(STRIPE_PLUGIN_OPTIONS) private options: StripePluginOptions,
+        private moduleRef: ModuleRef,
     ) {
         this.stripe = new Stripe(this.options.apiKey, {
             apiVersion: '2020-08-27',
@@ -26,6 +29,16 @@ export class StripeService {
             customerId = await this.getStripeCustomerId(ctx, order);
         }
         const amountInMinorUnits = getAmountInStripeMinorUnits(order);
+
+        const metadata = sanitizeMetadata({
+            ...(typeof this.options.metadata === 'function'
+                ? await this.options.metadata(new Injector(this.moduleRef), ctx, order)
+                : {}),
+            channelToken: ctx.channel.token,
+            orderId: order.id,
+            orderCode: order.code,
+        });
+
         const { client_secret } = await this.stripe.paymentIntents.create(
             {
                 amount: amountInMinorUnits,
@@ -34,11 +47,7 @@ export class StripeService {
                 automatic_payment_methods: {
                     enabled: true,
                 },
-                metadata: {
-                    channelToken: ctx.channel.token,
-                    orderId: order.id,
-                    orderCode: order.code,
-                },
+                metadata,
             },
             { idempotencyKey: `${order.code}_${amountInMinorUnits}` },
         );

+ 14 - 0
packages/payments-plugin/src/stripe/types.ts

@@ -1,5 +1,7 @@
+import { Injector, Order, RequestContext } from '@vendure/core';
 import '@vendure/core/dist/entity/custom-entity-fields';
 import { Request } from 'express';
+import Stripe from 'stripe';
 
 // Note: deep import is necessary here because CustomCustomerFields is also extended in the Braintree
 // plugin. Reference: https://github.com/microsoft/TypeScript/issues/46617
@@ -37,6 +39,18 @@ export interface StripePluginOptions {
      * @default false
      */
     storeCustomersInStripe?: boolean;
+
+    /**
+     * @description
+     * Attach extra metadata to Stripe payment intent
+     *
+     * @since 1.9.7
+     */
+    metadata?: (
+        injector: Injector,
+        ctx: RequestContext,
+        order: Order,
+    ) => Stripe.MetadataParam | Promise<Stripe.MetadataParam>;
 }
 
 export interface RequestWithRawBody extends Request {

+ 3 - 3
packages/testing/package.json

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

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

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