From 2e7d8247e4e597a8874de02609f512019a8bdbde Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Wed, 29 Nov 2023 16:18:33 -0800 Subject: [PATCH 01/10] Update http-proxy-middleware --- packages/pwa-kit-runtime/package-lock.json | 38 +++++++-- packages/pwa-kit-runtime/package.json | 2 +- .../src/utils/ssr-server/configure-proxy.js | 4 +- .../package-lock.json | 85 +++++++++++++++++++ .../template-retail-react-app/package.json | 1 + 5 files changed, 118 insertions(+), 12 deletions(-) diff --git a/packages/pwa-kit-runtime/package-lock.json b/packages/pwa-kit-runtime/package-lock.json index c88fc856e5..9d5004a14b 100644 --- a/packages/pwa-kit-runtime/package-lock.json +++ b/packages/pwa-kit-runtime/package-lock.json @@ -16,7 +16,7 @@ "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", - "http-proxy-middleware": "0.21.0", + "http-proxy-middleware": "^2.0.6", "merge-descriptors": "^1.0.1", "morgan": "^1.10.0", "semver": "^7.5.2", @@ -1595,18 +1595,26 @@ } }, "node_modules/http-proxy-middleware": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.21.0.tgz", - "integrity": "sha512-4Arcl5QQ6pRMRJmtM1WVHKHkFAQn5uvw83XuNeqnMTOikDiCoTxv5/vdudhKQsF+1mtaAawrK2SEB1v2tYecdQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { - "@types/http-proxy": "^1.17.3", - "http-proxy": "^1.18.0", + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", "is-glob": "^4.0.1", - "lodash": "^4.17.15", + "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/iconv-lite": { @@ -1743,6 +1751,17 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", @@ -1852,7 +1871,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", diff --git a/packages/pwa-kit-runtime/package.json b/packages/pwa-kit-runtime/package.json index 69c3f1738d..7fe7b9c93d 100644 --- a/packages/pwa-kit-runtime/package.json +++ b/packages/pwa-kit-runtime/package.json @@ -37,7 +37,7 @@ "cross-env": "^5.2.1", "express": "^4.18.2", "header-case": "1.0.1", - "http-proxy-middleware": "0.21.0", + "http-proxy-middleware": "^2.0.6", "merge-descriptors": "^1.0.1", "morgan": "^1.10.0", "semver": "^7.5.2", diff --git a/packages/pwa-kit-runtime/src/utils/ssr-server/configure-proxy.js b/packages/pwa-kit-runtime/src/utils/ssr-server/configure-proxy.js index 3d25fe6b02..e5365988e9 100644 --- a/packages/pwa-kit-runtime/src/utils/ssr-server/configure-proxy.js +++ b/packages/pwa-kit-runtime/src/utils/ssr-server/configure-proxy.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-3-Clause * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -import proxy from 'http-proxy-middleware' +import {createProxyMiddleware} from 'http-proxy-middleware' import {rewriteProxyRequestHeaders, rewriteProxyResponseHeaders} from '../ssr-proxying' import {proxyConfigs} from '../ssr-shared' import {processExpressResponse} from './process-express-response' @@ -190,7 +190,7 @@ export const configureProxy = ({ target: targetOrigin } - const proxyFunc = proxy(config) + const proxyFunc = createProxyMiddleware(config) // For a standard proxy, we're done if (!caching) { diff --git a/packages/template-retail-react-app/package-lock.json b/packages/template-retail-react-app/package-lock.json index d3f686485e..772160a92e 100644 --- a/packages/template-retail-react-app/package-lock.json +++ b/packages/template-retail-react-app/package-lock.json @@ -34,6 +34,7 @@ "framer-motion": "^10.12.9", "full-icu": "^1.5.0", "helmet": "^4.6.0", + "http-proxy-middleware": "^2.0.6", "jest-fetch-mock": "^2.1.2", "js-cookie": "^3.0.1", "jsonwebtoken": "^9.0.0", @@ -2164,6 +2165,14 @@ "hoist-non-react-statics": "^3.3.0" } }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -3556,6 +3565,11 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -3807,6 +3821,25 @@ "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz", "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==" }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4172,6 +4205,42 @@ "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-0.8.0.tgz", "integrity": "sha512-qsh/wKe1Mk1vtYEFr+LpQBFWTO1gxZQBdii2D0Umj+IUQ23r5sT088Rhpq4XzpSyIpaX7vwjB8Rrtx8u9JTg+Q==" }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -4633,6 +4702,17 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6873,6 +6953,11 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", diff --git a/packages/template-retail-react-app/package.json b/packages/template-retail-react-app/package.json index 9aadc7427d..c232039c81 100644 --- a/packages/template-retail-react-app/package.json +++ b/packages/template-retail-react-app/package.json @@ -64,6 +64,7 @@ "framer-motion": "^10.12.9", "full-icu": "^1.5.0", "helmet": "^4.6.0", + "http-proxy-middleware": "^2.0.6", "jest-fetch-mock": "^2.1.2", "js-cookie": "^3.0.1", "jsonwebtoken": "^9.0.0", From d4a6f31c5a8281b13b1242c52db556b31b0f6f56 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Wed, 29 Nov 2023 16:18:43 -0800 Subject: [PATCH 02/10] Use test env --- packages/template-retail-react-app/config/default.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/template-retail-react-app/config/default.js b/packages/template-retail-react-app/config/default.js index 0181da007a..6a03ed2b30 100644 --- a/packages/template-retail-react-app/config/default.js +++ b/packages/template-retail-react-app/config/default.js @@ -15,7 +15,7 @@ module.exports = { showDefaults: true, interpretPlusSignAsSpace: false }, - defaultSite: 'RefArchGlobal', + defaultSite: 'RefArch', siteAliases: { RefArch: 'us', RefArchGlobal: 'global' @@ -24,10 +24,10 @@ module.exports = { commerceAPI: { proxyPath: `/mobify/proxy/api`, parameters: { - clientId: 'c9c45bfd-0ed3-4aa2-9971-40f88962b836', - organizationId: 'f_ecom_zzrf_001', + clientId: 'ee8a86c8-cd90-44b8-8bdf-61b096884e0c', + organizationId: 'f_ecom_zzrf_026', shortCode: '8o7m175y', - siteId: 'RefArchGlobal' + siteId: 'kv7kzm78' } }, einsteinAPI: { @@ -57,7 +57,7 @@ module.exports = { path: 'api' }, { - host: 'zzrf-001.dx.commercecloud.salesforce.com', + host: 'zzrf-026.dx.commercecloud.salesforce.com', path: 'ocapi' } ] From 7632c1e0edb9af86cdc47beb775191cf061866d2 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Wed, 29 Nov 2023 16:19:15 -0800 Subject: [PATCH 03/10] Consume local commerce-sdk-isomorphic changes --- packages/commerce-sdk-react/package-lock.json | 161 ++++++++++-------- packages/commerce-sdk-react/package.json | 2 +- packages/commerce-sdk-react/src/auth/index.ts | 5 +- 3 files changed, 94 insertions(+), 74 deletions(-) diff --git a/packages/commerce-sdk-react/package-lock.json b/packages/commerce-sdk-react/package-lock.json index 80f7146a74..350a1ccff5 100644 --- a/packages/commerce-sdk-react/package-lock.json +++ b/packages/commerce-sdk-react/package-lock.json @@ -9,7 +9,7 @@ "version": "1.2.0-dev", "license": "See license in LICENSE", "dependencies": { - "commerce-sdk-isomorphic": "^1.10.4", + "commerce-sdk-isomorphic": "/Users/vcua/Git/commerce-sdk-isomorphic", "js-cookie": "^3.0.1", "jwt-decode": "^4.0.0" }, @@ -53,6 +53,87 @@ "react-helmet": "^6.1.0" } }, + "../../../commerce-sdk-isomorphic": { + "version": "1.10.4", + "license": "BSD-3-Clause", + "dependencies": { + "nanoid": "^3.3.4", + "node-fetch": "2.6.12" + }, + "devDependencies": { + "@babel/cli": "7.18.6", + "@babel/core": "7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "7.18.6", + "@babel/preset-react": "7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@commerce-apps/raml-toolkit": "^0.5.11", + "@rollup/plugin-babel": "5.3.1", + "@rollup/plugin-commonjs": "13.0.2", + "@rollup/plugin-node-resolve": "8.4.0", + "@testing-library/jest-dom": "5.16.4", + "@testing-library/react": "10.4.9", + "@types/fs-extra": "^9.0.13", + "@types/handlebars-helpers": "^0.5.3", + "@types/node-fetch": "^2.6.2", + "@types/react-dom": "^16.9.16", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "autoprefixer": "9.8.8", + "bundlesize": "^0.18.1", + "depcheck": "^1.4.3", + "dotenv": "^16.0.3", + "eslint": "^7.32.0", + "eslint-config-airbnb": "18.2.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-header": "^3.1.1", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-jest": "^24.7.0", + "eslint-plugin-jsx-a11y": "6.6.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "7.30.1", + "eslint-plugin-react-hooks": "4.6.0", + "fs-extra": "^9.1.0", + "handlebars-helpers": "^0.10.0", + "husky": "4.3.8", + "jest-environment-jsdom-sixteen": "1.0.3", + "lint-staged": "10.5.4", + "nock": "^13.2.8", + "npm-pack-all": "^1.12.7", + "postcss-preset-env": "6.7.1", + "prettier": "^2.7.1", + "prop-types": "^15.8.1", + "react": "^16.14.0", + "react-dom": "^16.14.0", + "react-scripts": "4.0.3", + "rollup": "2.77.0", + "rollup-plugin-filesize": "9.1.2", + "rollup-plugin-includepaths": "0.2.4", + "rollup-plugin-peer-deps-external": "2.2.4", + "rollup-plugin-postcss": "3.1.8", + "rollup-plugin-stylelint": "1.0.0", + "rollup-plugin-terser": "6.1.0", + "rollup-plugin-ts": "^2.0.7", + "snyk": "^1.973.0", + "sort-package-json": "^1.57.0", + "stylelint": "13.13.1", + "stylelint-config-standard": "20.0.0", + "stylelint-order": "4.1.0", + "ts-node": "9.1.1", + "typedoc": "^0.17.7", + "typedoc-plugin-external-module-map": "1.2.1", + "typedoc-plugin-nojekyll": "^1.0.1", + "typescript": "^4.4.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@adobe/css-tools": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", @@ -861,20 +942,8 @@ "dev": true }, "node_modules/commerce-sdk-isomorphic": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/commerce-sdk-isomorphic/-/commerce-sdk-isomorphic-1.10.4.tgz", - "integrity": "sha512-CydwGcwo3C6+qZbQNnbEGTifArUnWFv5yhvDvBwx2p2X1yn41TESVKclzxzpGLS88jLEmkzgNvfg2GFtmZgPsQ==", - "dependencies": { - "nanoid": "^3.3.4", - "node-fetch": "2.6.12" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } + "resolved": "../../../commerce-sdk-isomorphic", + "link": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -1925,7 +1994,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "devOptional": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -2042,6 +2112,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "devOptional": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -2128,23 +2199,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -2165,25 +2219,6 @@ "node": ">= 10.13" } }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/nodemon": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", @@ -2452,6 +2487,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -2463,6 +2499,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -2658,6 +2695,7 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -2896,11 +2934,6 @@ "nodetouch": "bin/nodetouch.js" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/typedoc": { "version": "0.24.8", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", @@ -3001,20 +3034,6 @@ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/packages/commerce-sdk-react/package.json b/packages/commerce-sdk-react/package.json index 26d88f863c..7501d1a9b6 100644 --- a/packages/commerce-sdk-react/package.json +++ b/packages/commerce-sdk-react/package.json @@ -40,7 +40,7 @@ "version": "node ./scripts/version.js" }, "dependencies": { - "commerce-sdk-isomorphic": "^1.10.4", + "commerce-sdk-isomorphic": "/Users/vcua/Git/commerce-sdk-isomorphic", "js-cookie": "^3.0.1", "jwt-decode": "^4.0.0" }, diff --git a/packages/commerce-sdk-react/src/auth/index.ts b/packages/commerce-sdk-react/src/auth/index.ts index 57752e9e61..67d7880b4d 100644 --- a/packages/commerce-sdk-react/src/auth/index.ts +++ b/packages/commerce-sdk-react/src/auth/index.ts @@ -168,7 +168,7 @@ class Auth { constructor(config: AuthConfig) { this.client = new ShopperLogin({ - proxy: config.proxy, + proxy: 'http://localhost:3000', parameters: { clientId: config.clientId, organizationId: config.organizationId, @@ -405,7 +405,8 @@ class Auth { } } return await this.queueRequest( - () => helpers.loginGuestUser(this.client, {redirectURI: this.redirectURI}), + //() => helpers.loginGuestUser(this.client, {redirectURI: this.redirectURI}), + () => helpers.loginGuestUserPrivateClient(this.client,{redirectURI: this.redirectURI}), true ) } From 4ba2b8ccc216c680ed74b678743e4f5c1c5b1965 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Wed, 29 Nov 2023 16:19:29 -0800 Subject: [PATCH 04/10] Add a proxy in ssr.js --- packages/template-retail-react-app/app/ssr.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/packages/template-retail-react-app/app/ssr.js b/packages/template-retail-react-app/app/ssr.js index 7609d8598d..028b6a98a2 100644 --- a/packages/template-retail-react-app/app/ssr.js +++ b/packages/template-retail-react-app/app/ssr.js @@ -10,6 +10,7 @@ import path from 'path' import {getRuntime} from '@salesforce/pwa-kit-runtime/ssr/server/express' import {getConfig} from '@salesforce/pwa-kit-runtime/utils/ssr-config' +import {createProxyMiddleware} from 'http-proxy-middleware' import helmet from 'helmet' const options = { @@ -59,6 +60,38 @@ const {handler} = runtime.createHandler(options, (app) => { }) ) + const secret = 'vpD-oUncX6sqjL-9ZBFJxgd2pt9Ub81Cis4UA-oY0nE' + const clientId = 'ee8a86c8-cd90-44b8-8bdf-61b096884e0c' + const shortCode = 'kv7kzm78' + + const createSlasHandler = ({clientId, secret, shortCode}) => { + const proxy = createProxyMiddleware({ + target: `https://${shortCode}.api.commercecloud.salesforce.com`, + changeOrigin: true, + onProxyReq: (outGoingReq, incomingReq) => { + + if (incomingReq.path.includes('/token')) { + const encodedClientCredential = Buffer.from(`${clientId}:${secret}`).toString( + 'base64' + ) + + outGoingReq.setHeader('Authorization', `Basic ${encodedClientCredential}`) + } + } + }) + return (req, res, next) => { + if (!req.path.startsWith('/shopper/auth')) { + return next() + } + proxy(req, res, next) + } + } + + app.use( + // bodyParser.urlencoded({extended: true}), + createSlasHandler({clientId, secret, shortCode}) + ) + // Handle the redirect from SLAS as to avoid error app.get('/callback?*', (req, res) => { // This endpoint does nothing and is not expected to change From 04ffa7d958eff23a0df3a39e2b31957d6c4ca94b Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Thu, 30 Nov 2023 10:53:20 -0800 Subject: [PATCH 05/10] Read private client settings from a new file --- packages/template-retail-react-app/app/ssr.js | 5 +---- packages/template-retail-react-app/env-vars.json | 5 +++++ 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 packages/template-retail-react-app/env-vars.json diff --git a/packages/template-retail-react-app/app/ssr.js b/packages/template-retail-react-app/app/ssr.js index 028b6a98a2..cf96380d18 100644 --- a/packages/template-retail-react-app/app/ssr.js +++ b/packages/template-retail-react-app/app/ssr.js @@ -12,6 +12,7 @@ import {getRuntime} from '@salesforce/pwa-kit-runtime/ssr/server/express' import {getConfig} from '@salesforce/pwa-kit-runtime/utils/ssr-config' import {createProxyMiddleware} from 'http-proxy-middleware' import helmet from 'helmet' +import {secret, clientId, shortCode} from '../env-vars.json'; const options = { // The build directory (an absolute path) @@ -60,10 +61,6 @@ const {handler} = runtime.createHandler(options, (app) => { }) ) - const secret = 'vpD-oUncX6sqjL-9ZBFJxgd2pt9Ub81Cis4UA-oY0nE' - const clientId = 'ee8a86c8-cd90-44b8-8bdf-61b096884e0c' - const shortCode = 'kv7kzm78' - const createSlasHandler = ({clientId, secret, shortCode}) => { const proxy = createProxyMiddleware({ target: `https://${shortCode}.api.commercecloud.salesforce.com`, diff --git a/packages/template-retail-react-app/env-vars.json b/packages/template-retail-react-app/env-vars.json new file mode 100644 index 0000000000..27a64cebe6 --- /dev/null +++ b/packages/template-retail-react-app/env-vars.json @@ -0,0 +1,5 @@ +{ + "secret": "vpD-oUncX6sqjL-9ZBFJxgd2pt9Ub81Cis4UA-oY0nE", + "clientId": "ee8a86c8-cd90-44b8-8bdf-61b096884e0c", + "shortCode": "kv7kzm78" +} \ No newline at end of file From 75f10226f981e6e7eddc75ed0cf59742d99ff7a7 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Thu, 30 Nov 2023 17:39:45 -0800 Subject: [PATCH 06/10] Fix config --- packages/template-retail-react-app/config/default.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/template-retail-react-app/config/default.js b/packages/template-retail-react-app/config/default.js index 6a03ed2b30..0681983edb 100644 --- a/packages/template-retail-react-app/config/default.js +++ b/packages/template-retail-react-app/config/default.js @@ -26,8 +26,8 @@ module.exports = { parameters: { clientId: 'ee8a86c8-cd90-44b8-8bdf-61b096884e0c', organizationId: 'f_ecom_zzrf_026', - shortCode: '8o7m175y', - siteId: 'kv7kzm78' + shortCode: 'kv7kzm78', + siteId: 'RefArch' } }, einsteinAPI: { From 3da5b7c88e39405354fb350bb7f06907f63f255b Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Thu, 30 Nov 2023 17:40:10 -0800 Subject: [PATCH 07/10] Attempt to read config in runtime --- .../src/utils/ssr-config.server.js | 16 +++++++++++++++ packages/template-retail-react-app/app/ssr.js | 20 ++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/packages/pwa-kit-runtime/src/utils/ssr-config.server.js b/packages/pwa-kit-runtime/src/utils/ssr-config.server.js index 86847d25c9..c9035081c5 100644 --- a/packages/pwa-kit-runtime/src/utils/ssr-config.server.js +++ b/packages/pwa-kit-runtime/src/utils/ssr-config.server.js @@ -85,5 +85,21 @@ export const getConfig = (opts = {}) => { ) } + const {config: envVars} = explorerSync.load(process.cwd() + '/env-vars.json') + // console.log(process.cwd() + '/env-vars.json') + // console.log(envVars) + + // Get env variables + const SLAS_PRIVATE_CLIENT_ID = IS_REMOTE ? process?.env?.SLAS_PRIVATE_CLIENT_ID : envVars?.clientId + const SLAS_PRIVATE_CLIENT_SECRET = IS_REMOTE ? process?.env?.SLAS_PRIVATE_CLIENT_SECRET : envVars?.secret + + //console.log(SLAS_PRIVATE_CLIENT_ID) + config.slasClient = { + clientId: SLAS_PRIVATE_CLIENT_ID, + secret: SLAS_PRIVATE_CLIENT_SECRET + } + + //console.log(config) + return config } diff --git a/packages/template-retail-react-app/app/ssr.js b/packages/template-retail-react-app/app/ssr.js index cf96380d18..d16784c2a5 100644 --- a/packages/template-retail-react-app/app/ssr.js +++ b/packages/template-retail-react-app/app/ssr.js @@ -12,7 +12,7 @@ import {getRuntime} from '@salesforce/pwa-kit-runtime/ssr/server/express' import {getConfig} from '@salesforce/pwa-kit-runtime/utils/ssr-config' import {createProxyMiddleware} from 'http-proxy-middleware' import helmet from 'helmet' -import {secret, clientId, shortCode} from '../env-vars.json'; +//import {secret, clientId, shortCode} from '../env-vars.json'; const options = { // The build directory (an absolute path) @@ -35,6 +35,12 @@ const options = { const runtime = getRuntime() +const slasClientId = getConfig().app.commerceAPI.parameters.clientId +const slasClientSecret = getConfig().slasClient?.secret +const slasClientShortCode = getConfig().app.commerceAPI.parameters.shortCode + +console.log(slasClientShortCode) + const {handler} = runtime.createHandler(options, (app) => { // Set HTTP security headers app.use( @@ -62,11 +68,16 @@ const {handler} = runtime.createHandler(options, (app) => { ) const createSlasHandler = ({clientId, secret, shortCode}) => { + console.log(shortCode) + const target = `https://${shortCode}.api.commercecloud.salesforce.com` + + console.log(target) + const proxy = createProxyMiddleware({ - target: `https://${shortCode}.api.commercecloud.salesforce.com`, + target: target, changeOrigin: true, onProxyReq: (outGoingReq, incomingReq) => { - + console.log('In proxy') if (incomingReq.path.includes('/token')) { const encodedClientCredential = Buffer.from(`${clientId}:${secret}`).toString( 'base64' @@ -85,8 +96,7 @@ const {handler} = runtime.createHandler(options, (app) => { } app.use( - // bodyParser.urlencoded({extended: true}), - createSlasHandler({clientId, secret, shortCode}) + createSlasHandler({slasClientId, slasClientSecret, slasClientShortCode}) ) // Handle the redirect from SLAS as to avoid error From cbda6eea2ec7d64f49a98ab788f0cbd220dbaef2 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Fri, 1 Dec 2023 13:55:55 -0800 Subject: [PATCH 08/10] Add a separate slasProxy to commerce-sdk-react --- packages/commerce-sdk-react/src/auth/index.test.ts | 1 + packages/commerce-sdk-react/src/auth/index.ts | 3 ++- packages/commerce-sdk-react/src/provider.tsx | 13 ++++++++++--- packages/commerce-sdk-react/src/test-utils.tsx | 1 + .../app/components/_app-config/index.jsx | 1 + 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/commerce-sdk-react/src/auth/index.test.ts b/packages/commerce-sdk-react/src/auth/index.test.ts index a949a661df..649b230d20 100644 --- a/packages/commerce-sdk-react/src/auth/index.test.ts +++ b/packages/commerce-sdk-react/src/auth/index.test.ts @@ -48,6 +48,7 @@ const config = { shortCode: 'shortCode', siteId: 'siteId', proxy: 'proxy', + slasProxy: 'slasProxy', redirectURI: 'redirectURI' } diff --git a/packages/commerce-sdk-react/src/auth/index.ts b/packages/commerce-sdk-react/src/auth/index.ts index 67d7880b4d..08b1475ce7 100644 --- a/packages/commerce-sdk-react/src/auth/index.ts +++ b/packages/commerce-sdk-react/src/auth/index.ts @@ -22,6 +22,7 @@ type Helpers = typeof helpers interface AuthConfig extends ApiClientConfigParams { redirectURI: string proxy: string + slasProxy: string fetchOptions?: ShopperLoginTypes.FetchOptions fetchedToken?: string OCAPISessionsURL?: string @@ -168,7 +169,7 @@ class Auth { constructor(config: AuthConfig) { this.client = new ShopperLogin({ - proxy: 'http://localhost:3000', + proxy: config.slasProxy, parameters: { clientId: config.clientId, organizationId: config.organizationId, diff --git a/packages/commerce-sdk-react/src/provider.tsx b/packages/commerce-sdk-react/src/provider.tsx index 5590868527..ca3c3bf6bc 100644 --- a/packages/commerce-sdk-react/src/provider.tsx +++ b/packages/commerce-sdk-react/src/provider.tsx @@ -24,6 +24,7 @@ import {ApiClientConfigParams, ApiClients} from './hooks/types' export interface CommerceApiProviderProps extends ApiClientConfigParams { children: React.ReactNode proxy: string + slasProxy: string locale: string currency: string redirectURI: string @@ -52,7 +53,7 @@ export const AuthContext = React.createContext({} as Auth) * Initialize a set of Commerce API clients and make it available to all of descendant components * * @group Components - * + * * @example * ```js import {CommerceApiProvider} from '@salesforce/commerce-sdk-react' @@ -73,11 +74,11 @@ export const AuthContext = React.createContext({} as Auth) {children} ) - } + } export default App * ``` - * + * * @returns Provider to wrap your app with */ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { @@ -87,6 +88,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { headers = {}, organizationId, proxy, + slasProxy, redirectURI, fetchOptions, siteId, @@ -99,6 +101,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { const config = { proxy, + slasProxy, headers, parameters: { clientId, @@ -130,6 +133,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { shortCode, siteId, proxy, + slasProxy, fetchOptions, locale, currency, @@ -143,6 +147,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { shortCode, siteId, proxy, + slasProxy, redirectURI, fetchOptions, fetchedToken, @@ -154,6 +159,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { shortCode, siteId, proxy, + slasProxy, redirectURI, fetchOptions, fetchedToken, @@ -170,6 +176,7 @@ const CommerceApiProvider = (props: CommerceApiProviderProps): ReactElement => { headers, organizationId, proxy, + slasProxy, redirectURI, fetchOptions, siteId, diff --git a/packages/commerce-sdk-react/src/test-utils.tsx b/packages/commerce-sdk-react/src/test-utils.tsx index be878c270b..714045a743 100644 --- a/packages/commerce-sdk-react/src/test-utils.tsx +++ b/packages/commerce-sdk-react/src/test-utils.tsx @@ -23,6 +23,7 @@ export const DEFAULT_TEST_HOST = 'http://localhost:8888' export const DEFAULT_TEST_CONFIG = { proxy: `${DEFAULT_TEST_HOST}/mobify/proxy/api`, + slasProxy: `${DEFAULT_TEST_HOST}`, redirectURI: `${DEFAULT_TEST_HOST}/callback`, clientId: '12345678-1234-1234-1234-123412341234', organizationId: 'f_ecom_zzrmy_orgf_001', diff --git a/packages/template-retail-react-app/app/components/_app-config/index.jsx b/packages/template-retail-react-app/app/components/_app-config/index.jsx index 4abe51606f..7c6f1fa76b 100644 --- a/packages/template-retail-react-app/app/components/_app-config/index.jsx +++ b/packages/template-retail-react-app/app/components/_app-config/index.jsx @@ -54,6 +54,7 @@ const AppConfig = ({children, locals = {}}) => { currency={locals.locale?.preferredCurrency} redirectURI={`${appOrigin}/callback`} proxy={`${appOrigin}${commerceApiConfig.proxyPath}`} + slasProxy={`${appOrigin}`} headers={headers} OCAPISessionsURL={`${appOrigin}/mobify/proxy/ocapi/s/${locals.site?.id}/dw/shop/v22_8/sessions`} > From e2daa027125fd910863939fe06d3bf3de79a115b Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Fri, 1 Dec 2023 13:59:26 -0800 Subject: [PATCH 09/10] Use env vars instead of env file --- packages/template-retail-react-app/app/ssr.js | 18 +++++------------- .../template-retail-react-app/env-vars.json | 5 ----- 2 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 packages/template-retail-react-app/env-vars.json diff --git a/packages/template-retail-react-app/app/ssr.js b/packages/template-retail-react-app/app/ssr.js index d16784c2a5..46be201550 100644 --- a/packages/template-retail-react-app/app/ssr.js +++ b/packages/template-retail-react-app/app/ssr.js @@ -35,12 +35,6 @@ const options = { const runtime = getRuntime() -const slasClientId = getConfig().app.commerceAPI.parameters.clientId -const slasClientSecret = getConfig().slasClient?.secret -const slasClientShortCode = getConfig().app.commerceAPI.parameters.shortCode - -console.log(slasClientShortCode) - const {handler} = runtime.createHandler(options, (app) => { // Set HTTP security headers app.use( @@ -67,22 +61,20 @@ const {handler} = runtime.createHandler(options, (app) => { }) ) - const createSlasHandler = ({clientId, secret, shortCode}) => { - console.log(shortCode) + const createSlasHandler = () => { + const clientId = process?.env?.SLAS_PRIVATE_CLIENT_ID + const secret = process?.env?.SLAS_PRIVATE_CLIENT_SECRET + const shortCode = process?.env?.CC_SHORT_CODE const target = `https://${shortCode}.api.commercecloud.salesforce.com` - console.log(target) - const proxy = createProxyMiddleware({ target: target, changeOrigin: true, onProxyReq: (outGoingReq, incomingReq) => { - console.log('In proxy') if (incomingReq.path.includes('/token')) { const encodedClientCredential = Buffer.from(`${clientId}:${secret}`).toString( 'base64' ) - outGoingReq.setHeader('Authorization', `Basic ${encodedClientCredential}`) } } @@ -96,7 +88,7 @@ const {handler} = runtime.createHandler(options, (app) => { } app.use( - createSlasHandler({slasClientId, slasClientSecret, slasClientShortCode}) + createSlasHandler() ) // Handle the redirect from SLAS as to avoid error diff --git a/packages/template-retail-react-app/env-vars.json b/packages/template-retail-react-app/env-vars.json deleted file mode 100644 index 27a64cebe6..0000000000 --- a/packages/template-retail-react-app/env-vars.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "secret": "vpD-oUncX6sqjL-9ZBFJxgd2pt9Ub81Cis4UA-oY0nE", - "clientId": "ee8a86c8-cd90-44b8-8bdf-61b096884e0c", - "shortCode": "kv7kzm78" -} \ No newline at end of file From 087d1eaeae416284e8bad390c11aa958a5350759 Mon Sep 17 00:00:00 2001 From: vcua-mobify Date: Fri, 1 Dec 2023 14:05:29 -0800 Subject: [PATCH 10/10] Revert runtime changes --- .../src/utils/ssr-config.server.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/packages/pwa-kit-runtime/src/utils/ssr-config.server.js b/packages/pwa-kit-runtime/src/utils/ssr-config.server.js index c9035081c5..86847d25c9 100644 --- a/packages/pwa-kit-runtime/src/utils/ssr-config.server.js +++ b/packages/pwa-kit-runtime/src/utils/ssr-config.server.js @@ -85,21 +85,5 @@ export const getConfig = (opts = {}) => { ) } - const {config: envVars} = explorerSync.load(process.cwd() + '/env-vars.json') - // console.log(process.cwd() + '/env-vars.json') - // console.log(envVars) - - // Get env variables - const SLAS_PRIVATE_CLIENT_ID = IS_REMOTE ? process?.env?.SLAS_PRIVATE_CLIENT_ID : envVars?.clientId - const SLAS_PRIVATE_CLIENT_SECRET = IS_REMOTE ? process?.env?.SLAS_PRIVATE_CLIENT_SECRET : envVars?.secret - - //console.log(SLAS_PRIVATE_CLIENT_ID) - config.slasClient = { - clientId: SLAS_PRIVATE_CLIENT_ID, - secret: SLAS_PRIVATE_CLIENT_SECRET - } - - //console.log(config) - return config }