From f3d681304c41711359a515fae625b195bbcf3855 Mon Sep 17 00:00:00 2001 From: matticbot Date: Mon, 24 Jun 2024 23:21:47 +0000 Subject: [PATCH 01/31] chore(release): 4.4.0-alpha.1 [skip ci] # [4.4.0-alpha.1](https://github.com/Automattic/newspack-plugin/compare/v4.3.3...v4.4.0-alpha.1) (2024-06-24) ### Bug Fixes * add modified check before updating donation product ([#3183](https://github.com/Automattic/newspack-plugin/issues/3183)) ([208c55e](https://github.com/Automattic/newspack-plugin/commit/208c55e21ac8f6a4b6736f89c25cf12994f2cbaf)) * allow `exact` prop on Wizard Route ([9da6da9](https://github.com/Automattic/newspack-plugin/commit/9da6da9b755321ec44c01f1f48ab579a1035ab56)) * ci / eslint ([1d6adcd](https://github.com/Automattic/newspack-plugin/commit/1d6adcd1d3ef3a47f1fe3e4e4651e838b77cff62)) * ci / eslint ([b95580a](https://github.com/Automattic/newspack-plugin/commit/b95580a73ab559bd1b3c7d599c4479eb26c8c93d)) * ci / eslint ([beadc45](https://github.com/Automattic/newspack-plugin/commit/beadc456c8b427124b74ac0dca5fccb324d7bd17)) * ci / typescript ([2c1e092](https://github.com/Automattic/newspack-plugin/commit/2c1e0926784d7682dfcfc57b3b8235833e684361)) * circle ci / eslint ([ab74e90](https://github.com/Automattic/newspack-plugin/commit/ab74e90e6c4a7151b2ae2ffc2f94e9a8f20212fd)) * circle ci / eslint ([4d383da](https://github.com/Automattic/newspack-plugin/commit/4d383dab162e74ef185d1a8951066ab221c4e902)) * circle ci / eslint ([6389972](https://github.com/Automattic/newspack-plugin/commit/638997213fa962474cb2eeb1fc80e9d5457741c0)) * load optional modules after settings ([#3165](https://github.com/Automattic/newspack-plugin/issues/3165)) ([69cc5ac](https://github.com/Automattic/newspack-plugin/commit/69cc5ac4c7a88201143f23b9d1bdffb219228b6e)) * merge conflicts and various minor refactoring ([ca4fea8](https://github.com/Automattic/newspack-plugin/commit/ca4fea81fb72326b1d18c2008b99519256d2a4d0)) * **pwa:** disable post request interception ([1587232](https://github.com/Automattic/newspack-plugin/commit/158723235ee4e3d23e1f21d4ec09aeb8b07c13e3)) * **reader-revenue-wizard:** separate billing fields section ([#3140](https://github.com/Automattic/newspack-plugin/issues/3140)) ([41fb347](https://github.com/Automattic/newspack-plugin/commit/41fb347d4c2e81030bf8409ca85d8e74a559d279)) * remove icons import ([136a19a](https://github.com/Automattic/newspack-plugin/commit/136a19a155b4817e4617fc3e1031e25d2487c40f)) * small tweaks to migrate-co-authors-guest-authors command ([2baa524](https://github.com/Automattic/newspack-plugin/commit/2baa524cca1ad4d3387faf69a6dde274f66e89d4)) * text overflow ellipse ([d35df0b](https://github.com/Automattic/newspack-plugin/commit/d35df0bfa77e25fd533ad23b2b0e13f11b4eecdd)) ### Features * add BoxContrast to components-demo ([23a8e5f](https://github.com/Automattic/newspack-plugin/commit/23a8e5f6ea55e3511accdf0e5b1cd4839e2d54ed)) * add spinner to registration block submit button ([#3180](https://github.com/Automattic/newspack-plugin/issues/3180)) ([ff1278f](https://github.com/Automattic/newspack-plugin/commit/ff1278f4e5c5d56c3e90441e328f1f26e0fb417b)) * added `
` between site status and quick action components ([982f67b](https://github.com/Automattic/newspack-plugin/commit/982f67b449654076f22e05e7dbb446aad0b628ec)) * added correct icon type to window.newspack_dashboard ([b5a5130](https://github.com/Automattic/newspack-plugin/commit/b5a5130cac594002d07f77448f25637592ee747c)) * added dash card section components ([f9f3992](https://github.com/Automattic/newspack-plugin/commit/f9f3992967763467a35ab668f63971b86e215585)) * added quick actions component ([d37e3f3](https://github.com/Automattic/newspack-plugin/commit/d37e3f33f1c4b3ddfc0d39b8a0be9efe5a768056)) * adding brand header and box-contrast component ([afb2e08](https://github.com/Automattic/newspack-plugin/commit/afb2e0864ad1e12c1f458c9b1a5faffbd8bf6687)) * adding site status component ([ee01d09](https://github.com/Automattic/newspack-plugin/commit/ee01d0987347b2ad6be8c5b2a3509ea02848d69a)) * applied PR feedback, error configuration ([7ef613e](https://github.com/Automattic/newspack-plugin/commit/7ef613ea283a415967b9b65a2fe6839167ee7287)) * boilerplate stylesheet for settings ([5f3f640](https://github.com/Automattic/newspack-plugin/commit/5f3f6404148daefbef2fa2503207d90c5b53a4a6)) * centralized wizards script initial ([6faf3d2](https://github.com/Automattic/newspack-plugin/commit/6faf3d26211105f7e59cd87eb131b00c4be35965)) * dashboard & section initial ([eb3d1e6](https://github.com/Automattic/newspack-plugin/commit/eb3d1e6943e39431e012ca40bc8edad6fa785fbc)) * dynamic component root loader ([389646a](https://github.com/Automattic/newspack-plugin/commit/389646aef71652fb52e0c29abb29b697cd4aa355)) * icons ([5f3c740](https://github.com/Automattic/newspack-plugin/commit/5f3c740e955f25f15403be64f8fc949003176069)) * initial app boilerplate ([9a3740c](https://github.com/Automattic/newspack-plugin/commit/9a3740cd215763ead1a187f972d63b5b7fedf807)) * initial settings and refactor ([d7d7da8](https://github.com/Automattic/newspack-plugin/commit/d7d7da8eacefc405b8aff1b0adb76b1670758ca0)) * **pwa:** pr feedback. moved anonymous function to static method ([1143a11](https://github.com/Automattic/newspack-plugin/commit/1143a11761546df37c10c04ed097456980a04ae4)) * RSS & WC Memberships ([#3146](https://github.com/Automattic/newspack-plugin/issues/3146)) ([e649199](https://github.com/Automattic/newspack-plugin/commit/e6491995ab1ce6fa826146e6391c964164f4ee65)) * settings php initial ([e039c4b](https://github.com/Automattic/newspack-plugin/commit/e039c4b48e29f40bfd7f9e06ab5328fd7951c870)) * **wizards:** new dashboard config and localize script ([2938b32](https://github.com/Automattic/newspack-plugin/commit/2938b329b518ae9b4c396fef0330946d5ef48ee2)) ### Reverts * **ia:** back to `trunk` ([69b2ba0](https://github.com/Automattic/newspack-plugin/commit/69b2ba09a222e7c1b84b9cba0b97c36881cda63f)) --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ newspack.php | 4 ++-- package.json | 2 +- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c141e16e5..812c87b403 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,54 @@ +# [4.4.0-alpha.1](https://github.com/Automattic/newspack-plugin/compare/v4.3.3...v4.4.0-alpha.1) (2024-06-24) + + +### Bug Fixes + +* add modified check before updating donation product ([#3183](https://github.com/Automattic/newspack-plugin/issues/3183)) ([208c55e](https://github.com/Automattic/newspack-plugin/commit/208c55e21ac8f6a4b6736f89c25cf12994f2cbaf)) +* allow `exact` prop on Wizard Route ([9da6da9](https://github.com/Automattic/newspack-plugin/commit/9da6da9b755321ec44c01f1f48ab579a1035ab56)) +* ci / eslint ([1d6adcd](https://github.com/Automattic/newspack-plugin/commit/1d6adcd1d3ef3a47f1fe3e4e4651e838b77cff62)) +* ci / eslint ([b95580a](https://github.com/Automattic/newspack-plugin/commit/b95580a73ab559bd1b3c7d599c4479eb26c8c93d)) +* ci / eslint ([beadc45](https://github.com/Automattic/newspack-plugin/commit/beadc456c8b427124b74ac0dca5fccb324d7bd17)) +* ci / typescript ([2c1e092](https://github.com/Automattic/newspack-plugin/commit/2c1e0926784d7682dfcfc57b3b8235833e684361)) +* circle ci / eslint ([ab74e90](https://github.com/Automattic/newspack-plugin/commit/ab74e90e6c4a7151b2ae2ffc2f94e9a8f20212fd)) +* circle ci / eslint ([4d383da](https://github.com/Automattic/newspack-plugin/commit/4d383dab162e74ef185d1a8951066ab221c4e902)) +* circle ci / eslint ([6389972](https://github.com/Automattic/newspack-plugin/commit/638997213fa962474cb2eeb1fc80e9d5457741c0)) +* load optional modules after settings ([#3165](https://github.com/Automattic/newspack-plugin/issues/3165)) ([69cc5ac](https://github.com/Automattic/newspack-plugin/commit/69cc5ac4c7a88201143f23b9d1bdffb219228b6e)) +* merge conflicts and various minor refactoring ([ca4fea8](https://github.com/Automattic/newspack-plugin/commit/ca4fea81fb72326b1d18c2008b99519256d2a4d0)) +* **pwa:** disable post request interception ([1587232](https://github.com/Automattic/newspack-plugin/commit/158723235ee4e3d23e1f21d4ec09aeb8b07c13e3)) +* **reader-revenue-wizard:** separate billing fields section ([#3140](https://github.com/Automattic/newspack-plugin/issues/3140)) ([41fb347](https://github.com/Automattic/newspack-plugin/commit/41fb347d4c2e81030bf8409ca85d8e74a559d279)) +* remove icons import ([136a19a](https://github.com/Automattic/newspack-plugin/commit/136a19a155b4817e4617fc3e1031e25d2487c40f)) +* small tweaks to migrate-co-authors-guest-authors command ([2baa524](https://github.com/Automattic/newspack-plugin/commit/2baa524cca1ad4d3387faf69a6dde274f66e89d4)) +* text overflow ellipse ([d35df0b](https://github.com/Automattic/newspack-plugin/commit/d35df0bfa77e25fd533ad23b2b0e13f11b4eecdd)) + + +### Features + +* add BoxContrast to components-demo ([23a8e5f](https://github.com/Automattic/newspack-plugin/commit/23a8e5f6ea55e3511accdf0e5b1cd4839e2d54ed)) +* add spinner to registration block submit button ([#3180](https://github.com/Automattic/newspack-plugin/issues/3180)) ([ff1278f](https://github.com/Automattic/newspack-plugin/commit/ff1278f4e5c5d56c3e90441e328f1f26e0fb417b)) +* added `
` between site status and quick action components ([982f67b](https://github.com/Automattic/newspack-plugin/commit/982f67b449654076f22e05e7dbb446aad0b628ec)) +* added correct icon type to window.newspack_dashboard ([b5a5130](https://github.com/Automattic/newspack-plugin/commit/b5a5130cac594002d07f77448f25637592ee747c)) +* added dash card section components ([f9f3992](https://github.com/Automattic/newspack-plugin/commit/f9f3992967763467a35ab668f63971b86e215585)) +* added quick actions component ([d37e3f3](https://github.com/Automattic/newspack-plugin/commit/d37e3f33f1c4b3ddfc0d39b8a0be9efe5a768056)) +* adding brand header and box-contrast component ([afb2e08](https://github.com/Automattic/newspack-plugin/commit/afb2e0864ad1e12c1f458c9b1a5faffbd8bf6687)) +* adding site status component ([ee01d09](https://github.com/Automattic/newspack-plugin/commit/ee01d0987347b2ad6be8c5b2a3509ea02848d69a)) +* applied PR feedback, error configuration ([7ef613e](https://github.com/Automattic/newspack-plugin/commit/7ef613ea283a415967b9b65a2fe6839167ee7287)) +* boilerplate stylesheet for settings ([5f3f640](https://github.com/Automattic/newspack-plugin/commit/5f3f6404148daefbef2fa2503207d90c5b53a4a6)) +* centralized wizards script initial ([6faf3d2](https://github.com/Automattic/newspack-plugin/commit/6faf3d26211105f7e59cd87eb131b00c4be35965)) +* dashboard & section initial ([eb3d1e6](https://github.com/Automattic/newspack-plugin/commit/eb3d1e6943e39431e012ca40bc8edad6fa785fbc)) +* dynamic component root loader ([389646a](https://github.com/Automattic/newspack-plugin/commit/389646aef71652fb52e0c29abb29b697cd4aa355)) +* icons ([5f3c740](https://github.com/Automattic/newspack-plugin/commit/5f3c740e955f25f15403be64f8fc949003176069)) +* initial app boilerplate ([9a3740c](https://github.com/Automattic/newspack-plugin/commit/9a3740cd215763ead1a187f972d63b5b7fedf807)) +* initial settings and refactor ([d7d7da8](https://github.com/Automattic/newspack-plugin/commit/d7d7da8eacefc405b8aff1b0adb76b1670758ca0)) +* **pwa:** pr feedback. moved anonymous function to static method ([1143a11](https://github.com/Automattic/newspack-plugin/commit/1143a11761546df37c10c04ed097456980a04ae4)) +* RSS & WC Memberships ([#3146](https://github.com/Automattic/newspack-plugin/issues/3146)) ([e649199](https://github.com/Automattic/newspack-plugin/commit/e6491995ab1ce6fa826146e6391c964164f4ee65)) +* settings php initial ([e039c4b](https://github.com/Automattic/newspack-plugin/commit/e039c4b48e29f40bfd7f9e06ab5328fd7951c870)) +* **wizards:** new dashboard config and localize script ([2938b32](https://github.com/Automattic/newspack-plugin/commit/2938b329b518ae9b4c396fef0330946d5ef48ee2)) + + +### Reverts + +* **ia:** back to `trunk` ([69b2ba0](https://github.com/Automattic/newspack-plugin/commit/69b2ba09a222e7c1b84b9cba0b97c36881cda63f)) + ## [4.3.3](https://github.com/Automattic/newspack-plugin/compare/v4.3.2...v4.3.3) (2024-06-24) diff --git a/newspack.php b/newspack.php index 63f196ca32..12486a8cf7 100644 --- a/newspack.php +++ b/newspack.php @@ -2,7 +2,7 @@ /** * Plugin Name: Newspack * Description: An advanced open-source publishing and revenue-generating platform for news organizations. - * Version: 4.3.3 + * Version: 4.4.0-alpha.1 * Author: Automattic * Author URI: https://newspack.com/ * License: GPL2 @@ -14,7 +14,7 @@ defined( 'ABSPATH' ) || exit; -define( 'NEWSPACK_PLUGIN_VERSION', '4.3.3' ); +define( 'NEWSPACK_PLUGIN_VERSION', '4.4.0-alpha.1' ); // Load language files. load_plugin_textdomain( 'newspack-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); diff --git a/package.json b/package.json index 04d31458ec..795ef97001 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "newspack", - "version": "4.3.3", + "version": "4.4.0-alpha.1", "description": "The Newspack plugin. https://newspack.com", "bugs": { "url": "https://github.com/Automattic/newspack-plugin/issues" From 896caab814fb3b1dcc54d278874e29c1667cbdc4 Mon Sep 17 00:00:00 2001 From: Laurel Fulford Date: Tue, 25 Jun 2024 10:59:33 -0700 Subject: [PATCH 02/31] fix: update newspack-scripts to v5.5.1 --- package-lock.json | 1153 ++++----------------------------------------- package.json | 2 +- 2 files changed, 85 insertions(+), 1070 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28cb5a404b..682463159a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "newspack", - "version": "3.8.8", + "version": "4.4.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "newspack", - "version": "3.8.8", + "version": "4.4.0-alpha.1", "hasInstallScript": true, "dependencies": { "@babel/plugin-transform-runtime": "^7.24.3", @@ -33,14 +33,10 @@ "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.14", "@types/wordpress__components": "^23.0.12", -<<<<<<< HEAD "@wordpress/browserslist-config": "^5.40.0", -======= - "@wordpress/browserslist-config": "^5.39.0", ->>>>>>> origin/release "eslint": "^7.32.0", "lint-staged": "^15.2.2", - "newspack-scripts": "^5.3.0", + "newspack-scripts": "^5.5.1", "postcss-scss": "^4.0.9", "prettier": "npm:wp-prettier@^2.6.2-beta-1", "stylelint": "^16.5.0" @@ -223,6 +219,7 @@ }, "node_modules/@babel/core": { "version": "7.16.7", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.7", @@ -251,6 +248,7 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -260,6 +258,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -591,6 +590,7 @@ }, "node_modules/@babel/helpers": { "version": "7.16.7", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.16.7", @@ -1984,6 +1984,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.5", @@ -3848,6 +3849,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3861,6 +3863,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3869,6 +3872,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3876,12 +3880,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -7528,15 +7534,9 @@ "dev": true }, "node_modules/@wordpress/browserslist-config": { -<<<<<<< HEAD "version": "5.40.0", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.40.0.tgz", "integrity": "sha512-DkTk/B5Qf32ZQ8HfWZWqC85w8VEv/YoAc+BZyXty/FIFJ5QCy6ddIwuysJtCRghyLPjTI+BOSaRo8poiQvyYfg==", -======= - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz", - "integrity": "sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ==", ->>>>>>> origin/release "dev": true, "engines": { "node": ">=14" @@ -9813,26 +9813,6 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.find": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", @@ -10739,188 +10719,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "peer": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "peer": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "peer": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio-select/node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio-select/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/cheerio-select/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true - }, - "node_modules/cheerio-select/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/cheerio-select/node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "peer": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "peer": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/chokidar": { "version": "3.5.2", "dev": true, @@ -11605,6 +11403,7 @@ }, "node_modules/convert-source-map": { "version": "1.8.0", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" @@ -12612,13 +12411,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", - "dev": true, - "peer": true - }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, @@ -12705,35 +12497,6 @@ "node": ">=8" } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domhandler/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true - }, "node_modules/domutils": { "version": "1.7.0", "dev": true, @@ -12891,19 +12654,6 @@ "node": ">=8.6" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/env-ci": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", @@ -12938,40 +12688,6 @@ "node": ">=4" } }, - "node_modules/enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "peer": true, - "dependencies": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/enzyme-matchers": { "version": "7.1.2", "dev": true, @@ -13017,13 +12733,6 @@ "dev": true, "license": "MIT" }, - "node_modules/enzyme/node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true, - "peer": true - }, "node_modules/equivalent-key-map": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", @@ -13101,13 +12810,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true, - "peer": true - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -14647,6 +14349,7 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -15307,20 +15010,6 @@ "dev": true, "license": "MIT" }, - "node_modules/html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "peer": true, - "dependencies": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "dev": true, @@ -15349,69 +15038,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "peer": true - }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/http-proxy-agent": { "version": "4.0.1", "dev": true, @@ -16115,13 +15741,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true, - "peer": true - }, "node_modules/is-symbol": { "version": "1.0.4", "dev": true, @@ -19108,6 +18727,7 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -19158,6 +18778,7 @@ }, "node_modules/json5": { "version": "2.2.0", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5" @@ -19745,26 +19366,12 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true, - "peer": true - }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true, - "peer": true - }, "node_modules/lodash.isarguments": { "version": "3.1.0", "dev": true, @@ -20584,13 +20191,6 @@ "node": "*" } }, - "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true, - "peer": true - }, "node_modules/mousetrap": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", @@ -20656,36 +20256,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "peer": true, - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/nearley/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - }, "node_modules/neo-async": { "version": "2.6.2", "dev": true, @@ -20698,9 +20268,9 @@ "dev": true }, "node_modules/newspack-scripts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/newspack-scripts/-/newspack-scripts-5.3.0.tgz", - "integrity": "sha512-rzvctV0e2QCRZOlRNyudCIGOkcK5XiqXZODuqtICDIh+bNyARxCDfpjJZPT1UUTdDXIsM/McH68ItHy3aa08aQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/newspack-scripts/-/newspack-scripts-5.5.1.tgz", + "integrity": "sha512-0M6P1XNpHJ7tRVD3hLpOK8rFEzDzB93EkGweA7Q+HOb4ke+ZjoUmqDl0aBMesvtPA019KsYExIiOWlzs4S6kNg==", "dev": true, "dependencies": { "@automattic/calypso-build": "^10.0.0", @@ -21687,43 +21257,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/newspack-scripts/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/newspack-scripts/node_modules/react-dom": { - "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, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/newspack-scripts/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/newspack-scripts/node_modules/semver": { "version": "6.3.0", "dev": true, @@ -25025,33 +24558,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "peer": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "peer": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", @@ -27015,27 +26521,6 @@ "performance-now": "^2.1.0" } }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true, - "peer": true - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "peer": true, - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/randombytes": { "version": "2.1.0", "dev": true, @@ -27177,6 +26662,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -28213,17 +27699,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "peer": true, - "dependencies": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "node_modules/rsvp": { "version": "4.8.5", "dev": true, @@ -28335,6 +27810,7 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", + "dev": true, "license": "MIT" }, "node_modules/safe-regex": { @@ -28711,6 +28187,7 @@ }, "node_modules/scheduler": { "version": "0.20.2", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -29535,6 +29012,7 @@ }, "node_modules/source-map": { "version": "0.5.7", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -30549,21 +30027,6 @@ "node": ">=14.18" } }, - "node_modules/stylelint/node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "dev": true, @@ -32751,6 +32214,7 @@ }, "@babel/core": { "version": "7.16.7", + "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.16.7", @@ -32770,7 +32234,8 @@ }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "dev": true } } }, @@ -32778,6 +32243,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, "requires": { "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -33019,6 +32485,7 @@ }, "@babel/helpers": { "version": "7.16.7", + "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.16.7", @@ -33090,8 +32557,7 @@ "@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "requires": {} + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -33903,6 +33369,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, "requires": { "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.5", @@ -34331,8 +33798,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", - "dev": true, - "requires": {} + "dev": true }, "@csstools/css-tokenizer": { "version": "2.2.4", @@ -34344,15 +33810,13 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", - "dev": true, - "requires": {} + "dev": true }, "@csstools/selector-specificity": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "requires": {} + "dev": true }, "@discoveryjs/json-ext": { "version": "0.5.5", @@ -34530,8 +33994,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "dev": true, - "requires": {} + "dev": true }, "@emotion/utils": { "version": "1.0.0", @@ -35197,6 +34660,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -35206,22 +34670,26 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -35397,8 +34865,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} + "dev": true }, "@octokit/plugin-rest-endpoint-methods": { "version": "6.7.0", @@ -37507,8 +36974,7 @@ }, "@webpack-cli/configtest": { "version": "1.1.0", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.4.0", @@ -37519,8 +36985,7 @@ }, "@webpack-cli/serve": { "version": "1.6.0", - "dev": true, - "requires": {} + "dev": true }, "@wojtekmaj/enzyme-adapter-react-17": { "version": "0.6.5", @@ -37580,8 +37045,7 @@ }, "@wordpress/babel-plugin-import-jsx-pragma": { "version": "3.1.0", - "dev": true, - "requires": {} + "dev": true }, "@wordpress/babel-preset-default": { "version": "6.5.0", @@ -38053,15 +37517,9 @@ } }, "@wordpress/browserslist-config": { -<<<<<<< HEAD "version": "5.40.0", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.40.0.tgz", "integrity": "sha512-DkTk/B5Qf32ZQ8HfWZWqC85w8VEv/YoAc+BZyXty/FIFJ5QCy6ddIwuysJtCRghyLPjTI+BOSaRo8poiQvyYfg==", -======= - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz", - "integrity": "sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ==", ->>>>>>> origin/release "dev": true }, "@wordpress/components": { @@ -39689,13 +39147,11 @@ }, "acorn-import-assertions": { "version": "1.8.0", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -39753,8 +39209,7 @@ }, "ajv-keywords": { "version": "3.5.2", - "dev": true, - "requires": {} + "dev": true }, "alphanum-sort": { "version": "1.0.2", @@ -39882,20 +39337,6 @@ "version": "0.3.2", "dev": true }, - "array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, "array.prototype.find": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", @@ -40507,144 +39948,6 @@ "version": "0.7.0", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "peer": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "dependencies": { - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "peer": true - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "peer": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "peer": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "dependencies": { - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "peer": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "peer": true - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "peer": true - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "peer": true, - "requires": { - "boolbase": "^1.0.0" - } - } - } - }, "chokidar": { "version": "3.5.2", "dev": true, @@ -41156,6 +40459,7 @@ }, "convert-source-map": { "version": "1.8.0", + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -41202,8 +40506,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.2.0.tgz", "integrity": "sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==", - "dev": true, - "requires": {} + "dev": true }, "create-react-class": { "version": "15.6.3", @@ -41823,13 +41126,6 @@ "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==", "dev": true }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", - "dev": true, - "peer": true - }, "doctrine": { "version": "3.0.0", "dev": true, @@ -41891,25 +41187,6 @@ } } }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "peer": true - } - } - }, "domutils": { "version": "1.7.0", "dev": true, @@ -42034,13 +41311,6 @@ "ansi-colors": "^4.1.1" } }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "peer": true - }, "env-ci": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", @@ -42062,46 +41332,6 @@ "version": "7.8.1", "dev": true }, - "enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "peer": true, - "requires": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - }, - "dependencies": { - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true, - "peer": true - } - } - }, "enzyme-matchers": { "version": "7.1.2", "dev": true, @@ -42199,13 +41429,6 @@ "which-typed-array": "^1.1.11" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true, - "peer": true - }, "es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -42472,8 +41695,7 @@ }, "eslint-config-prettier": { "version": "8.3.0", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -43244,7 +42466,8 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.2" + "version": "1.0.0-beta.2", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -43707,17 +42930,6 @@ "version": "1.0.0", "dev": true }, - "html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "peer": true, - "requires": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - } - }, "html-encoding-sniffer": { "version": "2.0.1", "dev": true, @@ -43735,52 +42947,6 @@ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - }, - "dependencies": { - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "peer": true - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "peer": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - } - } - }, "http-proxy-agent": { "version": "4.0.1", "dev": true, @@ -43819,8 +42985,7 @@ }, "icss-utils": { "version": "5.1.0", - "dev": true, - "requires": {} + "dev": true }, "ignore": { "version": "5.3.1", @@ -44221,13 +43386,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true, - "peer": true - }, "is-symbol": { "version": "1.0.4", "dev": true, @@ -45638,8 +44796,7 @@ }, "jest-pnp-resolver": { "version": "1.2.2", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "27.4.0", @@ -46229,7 +45386,8 @@ } }, "jsesc": { - "version": "2.5.2" + "version": "2.5.2", + "dev": true }, "json-buffer": { "version": "3.0.1", @@ -46267,6 +45425,7 @@ }, "json5": { "version": "2.2.0", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -46651,26 +45810,12 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true, - "peer": true - }, "lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true, - "peer": true - }, "lodash.isarguments": { "version": "3.1.0", "dev": true @@ -47208,13 +46353,6 @@ "moment": "^2.29.4" } }, - "moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true, - "peer": true - }, "mousetrap": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", @@ -47260,28 +46398,6 @@ "version": "1.4.0", "dev": true }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "peer": true, - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - } - } - }, "neo-async": { "version": "2.6.2", "dev": true @@ -47293,9 +46409,9 @@ "dev": true }, "newspack-scripts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/newspack-scripts/-/newspack-scripts-5.3.0.tgz", - "integrity": "sha512-rzvctV0e2QCRZOlRNyudCIGOkcK5XiqXZODuqtICDIh+bNyARxCDfpjJZPT1UUTdDXIsM/McH68ItHy3aa08aQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/newspack-scripts/-/newspack-scripts-5.5.1.tgz", + "integrity": "sha512-0M6P1XNpHJ7tRVD3hLpOK8rFEzDzB93EkGweA7Q+HOb4ke+ZjoUmqDl0aBMesvtPA019KsYExIiOWlzs4S6kNg==", "dev": true, "requires": { "@automattic/calypso-build": "^10.0.0", @@ -47808,8 +46924,7 @@ }, "eslint-plugin-react-hooks": { "version": "4.3.0", - "dev": true, - "requires": {} + "dev": true }, "espree": { "version": "9.3.0", @@ -47970,37 +47085,6 @@ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "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, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { "version": "6.3.0", "dev": true @@ -48085,8 +47169,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-10.0.1.tgz", "integrity": "sha512-TQ4xQ48tW4QSlODcti7pgSRqBZcUaBzuh0jPpfiMhwJKBPkqzTIAU+IrSWL/7BgXlOM90DjB7YaNgFpx8QWhuA==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -50288,29 +49371,6 @@ "version": "6.0.1", "dev": true }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "peer": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "peer": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, "pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", @@ -50925,8 +49985,7 @@ }, "postcss-modules-extract-imports": { "version": "3.0.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -51323,15 +50382,13 @@ }, "postcss-safe-parser": { "version": "6.0.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-scss": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-selector-parser": { "version": "6.0.16", @@ -51573,24 +50630,6 @@ "performance-now": "^2.1.0" } }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true, - "peer": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "peer": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, "randombytes": { "version": "2.1.0", "dev": true, @@ -51622,8 +50661,7 @@ "version": "6.9.9", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", "integrity": "sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA==", - "dev": true, - "requires": {} + "dev": true }, "react": { "version": "17.0.2", @@ -51655,8 +50693,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, - "requires": {} + "dev": true }, "react-daterange-picker": { "version": "2.0.1", @@ -51696,6 +50733,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -52031,8 +51069,7 @@ "version": "0.15.2", "resolved": "https://registry.npmjs.org/reakit-utils/-/reakit-utils-0.15.2.tgz", "integrity": "sha512-i/RYkq+W6hvfFmXw5QW7zvfJJT/K8a4qZ0hjA79T61JAFPGt23DsfxwyBbyK91GZrJ9HMrXFVXWMovsKBc1qEQ==", - "dev": true, - "requires": {} + "dev": true }, "reakit-warning": { "version": "0.6.2", @@ -52438,17 +51475,6 @@ "glob": "^7.1.3" } }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "peer": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "rsvp": { "version": "4.8.5", "dev": true @@ -52520,7 +51546,8 @@ } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -52774,6 +51801,7 @@ }, "scheduler": { "version": "0.20.2", + "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -53401,7 +52429,8 @@ "dev": true }, "source-map": { - "version": "0.5.7" + "version": "0.5.7", + "dev": true }, "source-map-js": { "version": "1.2.0", @@ -53882,8 +52911,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", - "dev": true, - "requires": {} + "dev": true }, "argparse": { "version": "2.0.1", @@ -54039,8 +53067,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", - "dev": true, - "requires": {} + "dev": true }, "rimraf": { "version": "5.0.5", @@ -54113,14 +53140,6 @@ "supports-color": "^7.0.0" } }, - "typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "optional": true, - "peer": true - }, "which": { "version": "1.3.1", "dev": true, @@ -54970,8 +53989,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true, - "requires": {} + "dev": true }, "use-lilius": { "version": "2.0.5", @@ -54994,15 +54012,13 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", - "dev": true, - "requires": {} + "dev": true }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "dev": true, - "requires": {} + "dev": true }, "util-deprecate": { "version": "1.0.2", @@ -55409,8 +54425,7 @@ }, "ws": { "version": "7.5.5", - "dev": true, - "requires": {} + "dev": true }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index 795ef97001..3b6a066699 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "@wordpress/browserslist-config": "^5.40.0", "eslint": "^7.32.0", "lint-staged": "^15.2.2", - "newspack-scripts": "^5.3.0", + "newspack-scripts": "^5.5.1", "postcss-scss": "^4.0.9", "prettier": "npm:wp-prettier@^2.6.2-beta-1", "stylelint": "^16.5.0" From 42f62749691a728c9f7108503158fd4db05ecb46 Mon Sep 17 00:00:00 2001 From: matticbot Date: Tue, 25 Jun 2024 18:06:47 +0000 Subject: [PATCH 03/31] chore(release): 4.4.0-alpha.2 [skip ci] # [4.4.0-alpha.2](https://github.com/Automattic/newspack-plugin/compare/v4.4.0-alpha.1...v4.4.0-alpha.2) (2024-06-25) ### Bug Fixes * update newspack-scripts to v5.5.1 ([896caab](https://github.com/Automattic/newspack-plugin/commit/896caab814fb3b1dcc54d278874e29c1667cbdc4)) --- newspack.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newspack.php b/newspack.php index 12486a8cf7..d2b96b332e 100644 --- a/newspack.php +++ b/newspack.php @@ -2,7 +2,7 @@ /** * Plugin Name: Newspack * Description: An advanced open-source publishing and revenue-generating platform for news organizations. - * Version: 4.4.0-alpha.1 + * Version: 4.4.0-alpha.2 * Author: Automattic * Author URI: https://newspack.com/ * License: GPL2 @@ -14,7 +14,7 @@ defined( 'ABSPATH' ) || exit; -define( 'NEWSPACK_PLUGIN_VERSION', '4.4.0-alpha.1' ); +define( 'NEWSPACK_PLUGIN_VERSION', '4.4.0-alpha.2' ); // Load language files. load_plugin_textdomain( 'newspack-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); From acb86f4818c3aa77b67700a40e824a279b4c8e09 Mon Sep 17 00:00:00 2001 From: matticbot Date: Tue, 25 Jun 2024 20:27:46 +0000 Subject: [PATCH 04/31] chore(release): 4.4.0-alpha.3 [skip ci] # [4.4.0-alpha.3](https://github.com/Automattic/newspack-plugin/compare/v4.4.0-alpha.2...v4.4.0-alpha.3) (2024-06-25) ### Bug Fixes * **cli/migrate-co-authors-guest-authors:** handle existing email address ([#3172](https://github.com/Automattic/newspack-plugin/issues/3172)) ([1946bd0](https://github.com/Automattic/newspack-plugin/commit/1946bd0b31d86f56503cdd7a2cc303b55d45d9ec)) * udpate package-lock.json ([0054142](https://github.com/Automattic/newspack-plugin/commit/00541424fe562bd208c561a471817eebe878f6e4)) * update newspack-scripts to v5.5.1 ([be81e62](https://github.com/Automattic/newspack-plugin/commit/be81e62308ff8a20715ebadd68c78312d7bf992c)) ### Features * ensure regenerator-runtime is available (for WP 6.6) ([#3196](https://github.com/Automattic/newspack-plugin/issues/3196)) ([9693e37](https://github.com/Automattic/newspack-plugin/commit/9693e374f1fdc26f458ad7668961f39c11f634cd)) * **everlit:** added Everlit to plugins + refactor plugins in connections wizard ([#3188](https://github.com/Automattic/newspack-plugin/issues/3188)) ([88124f8](https://github.com/Automattic/newspack-plugin/commit/88124f8f98fa582c5f7f9ef25de1c747802ab7d4)) --- newspack.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newspack.php b/newspack.php index d2b96b332e..746cd4dec6 100644 --- a/newspack.php +++ b/newspack.php @@ -2,7 +2,7 @@ /** * Plugin Name: Newspack * Description: An advanced open-source publishing and revenue-generating platform for news organizations. - * Version: 4.4.0-alpha.2 + * Version: 4.4.0-alpha.3 * Author: Automattic * Author URI: https://newspack.com/ * License: GPL2 @@ -14,7 +14,7 @@ defined( 'ABSPATH' ) || exit; -define( 'NEWSPACK_PLUGIN_VERSION', '4.4.0-alpha.2' ); +define( 'NEWSPACK_PLUGIN_VERSION', '4.4.0-alpha.3' ); // Load language files. load_plugin_textdomain( 'newspack-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); From 46c5651cf48e88abef3b8f3855b8fd3f5860c2a3 Mon Sep 17 00:00:00 2001 From: Derrick Koo Date: Thu, 27 Jun 2024 09:16:35 -0600 Subject: [PATCH 05/31] fix: variable name > constant (#3203) --- includes/reader-activation/class-reader-data.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/reader-activation/class-reader-data.php b/includes/reader-activation/class-reader-data.php index 33c70684d7..40cfb10b8c 100644 --- a/includes/reader-activation/class-reader-data.php +++ b/includes/reader-activation/class-reader-data.php @@ -433,7 +433,7 @@ public static function check_product_subscriptions( $timestamp, $data ) { $active_subscriptions = \wcs_get_subscriptions( [ 'customer_id' => $data['user_id'], - 'subscription_status' => WooCommerce_Connection::$active_subscription_statuses, + 'subscription_status' => WooCommerce_Connection::ACTIVE_SUBSCRIPTION_STATUSES, ] ); From 2763e5202a0accbdea47d61678e24a89d0356d61 Mon Sep 17 00:00:00 2001 From: matticbot Date: Thu, 27 Jun 2024 15:21:18 +0000 Subject: [PATCH 06/31] chore(release): 4.3.4 [skip ci] ## [4.3.4](https://github.com/Automattic/newspack-plugin/compare/v4.3.3...v4.3.4) (2024-06-27) ### Bug Fixes * variable name > constant ([#3203](https://github.com/Automattic/newspack-plugin/issues/3203)) ([46c5651](https://github.com/Automattic/newspack-plugin/commit/46c5651cf48e88abef3b8f3855b8fd3f5860c2a3)) --- CHANGELOG.md | 7 +++++++ newspack.php | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c141e16e5..61365d4cb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [4.3.4](https://github.com/Automattic/newspack-plugin/compare/v4.3.3...v4.3.4) (2024-06-27) + + +### Bug Fixes + +* variable name > constant ([#3203](https://github.com/Automattic/newspack-plugin/issues/3203)) ([46c5651](https://github.com/Automattic/newspack-plugin/commit/46c5651cf48e88abef3b8f3855b8fd3f5860c2a3)) + ## [4.3.3](https://github.com/Automattic/newspack-plugin/compare/v4.3.2...v4.3.3) (2024-06-24) diff --git a/newspack.php b/newspack.php index 63f196ca32..360fca4794 100644 --- a/newspack.php +++ b/newspack.php @@ -2,7 +2,7 @@ /** * Plugin Name: Newspack * Description: An advanced open-source publishing and revenue-generating platform for news organizations. - * Version: 4.3.3 + * Version: 4.3.4 * Author: Automattic * Author URI: https://newspack.com/ * License: GPL2 @@ -14,7 +14,7 @@ defined( 'ABSPATH' ) || exit; -define( 'NEWSPACK_PLUGIN_VERSION', '4.3.3' ); +define( 'NEWSPACK_PLUGIN_VERSION', '4.3.4' ); // Load language files. load_plugin_textdomain( 'newspack-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); diff --git a/package.json b/package.json index 04d31458ec..0e53657454 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "newspack", - "version": "4.3.3", + "version": "4.3.4", "description": "The Newspack plugin. https://newspack.com", "bugs": { "url": "https://github.com/Automattic/newspack-plugin/issues" From 1a1bd30682366c2546789bba94c0b8a8de1cb608 Mon Sep 17 00:00:00 2001 From: Derrick Koo Date: Thu, 27 Jun 2024 09:24:14 -0600 Subject: [PATCH 07/31] feat: add support for reCAPTCHA v2 (#3126) * feat: add support for reCAPTCHA v2 * feat: integrate v2 reCAPTCHA into newsletters & woo checkout * feat: add support for reCAPTCHA v2 (invisible) * fix: remove references to reCAPTCHA v3 (because we now support v2 too) * test: fix failing test * feat: remove support for v2 checkbox * chore: remove console.log * fix: change select to dropdown * chore: clarify use of getCaptchaV3Token function * fix: avoid notoptions cache error when updating reCAPTCHA settings * fix: update options label to match Google terms * fix: just in case * fix: account for multiple submit buttons per form * fix: race conditions with reCAPTCHA API * chore: undo unintended semver change * docs: add explanation of how to reenable support for v2_checkbox --- assets/blocks/reader-registration/edit.js | 4 +- assets/blocks/reader-registration/index.php | 6 +- assets/blocks/reader-registration/view.js | 7 +- assets/images/recaptcha-v2-checkbox.gif | Bin 0 -> 59883 bytes assets/images/recaptcha-v2-invisible.png | Bin 0 -> 4862 bytes assets/other-scripts/recaptcha/index.js | 122 +++++++++++ assets/other-scripts/recaptcha/style.scss | 9 + assets/reader-activation/auth.js | 8 +- assets/reader-activation/auth.scss | 10 +- assets/reader-activation/index.js | 35 +--- .../connections/views/main/recaptcha.js | 99 +++++++-- includes/class-recaptcha.php | 195 ++++++++++++++---- .../class-reader-activation.php | 23 ++- includes/wizards/class-connections-wizard.php | 2 +- 14 files changed, 401 insertions(+), 119 deletions(-) create mode 100644 assets/images/recaptcha-v2-checkbox.gif create mode 100644 assets/images/recaptcha-v2-invisible.png create mode 100644 assets/other-scripts/recaptcha/index.js create mode 100644 assets/other-scripts/recaptcha/style.scss diff --git a/assets/blocks/reader-registration/edit.js b/assets/blocks/reader-registration/edit.js index 58d4442fcc..9d1e2620b7 100644 --- a/assets/blocks/reader-registration/edit.js +++ b/assets/blocks/reader-registration/edit.js @@ -219,7 +219,7 @@ export default function ReaderRegistrationEdit( {

{ sprintf( // translators: %s is either 'enabled' or 'disabled'. - __( 'reCAPTCHA v3 is currently %s.', 'newspack-plugin' ), + __( 'reCAPTCHA is currently %s.', 'newspack-plugin' ), newspack_blocks.has_recaptcha ? __( 'enabled', 'newspack-plugin' ) : __( 'disabled', 'newspack-plugin' ) @@ -228,7 +228,7 @@ export default function ReaderRegistrationEdit( { { ! newspack_blocks.has_recaptcha && (

{ __( - "It's highly recommended that you enable reCAPTCHA v3 protection to prevent spambots from using this form!", + "It's highly recommended that you enable reCAPTCHA protection to prevent spambots from using this form!", 'newspack-plugin' ) }

diff --git a/assets/blocks/reader-registration/index.php b/assets/blocks/reader-registration/index.php index 3dd4ed8a02..7cccc991cd 100644 --- a/assets/blocks/reader-registration/index.php +++ b/assets/blocks/reader-registration/index.php @@ -260,6 +260,9 @@ function render_block( $attrs, $content ) { ?>
+ + +
{ + // If there's no token, we don't need to do anything. if ( ! captchaToken ) { return; } - let tokenField = form.captcha_token; + let tokenField = form[ 'g-recaptcha-response' ]; if ( ! tokenField ) { tokenField = document.createElement( 'input' ); tokenField.setAttribute( 'type', 'hidden' ); - tokenField.setAttribute( 'name', 'captcha_token' ); + tokenField.setAttribute( 'name', 'g-recaptcha-response' ); tokenField.setAttribute( 'autocomplete', 'off' ); form.appendChild( tokenField ); } diff --git a/assets/images/recaptcha-v2-checkbox.gif b/assets/images/recaptcha-v2-checkbox.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3d21bce5b93979fd3fcd270d757548feb0b057d GIT binary patch literal 59883 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

l-$qC7Mpy4f&(=oY zpN)R9%|W5fVS~-lS|ri`8?1u+Cs;)R-~sTz(SHZ4K3C6J4%#cGFfF^t){-aB*8F5> z^yy7n_Ndva={q%zm}U`JFxqNT@XXs)&nletbhP%8wDSv*4+s>a3ysEg3Ji`3jZcgr zapq4+Of%wi%Z#QlO305kDoOFwh$>Iitf^2pt*@0r$ZHN&mFmcnV(e*=Xz%xvY#Wa5 z5+9GY5+fIz4$b~ZHoxFUg76UlSzVLd@m>Eo_if)Hd*$TRoM{6xcJ*Cy=uXi+R0f))6Fx{auV4{)byk)ITu#0v;AZlc~ny z2ZL(?+S463`xJ3x2Pm-ri4gv0(cb|$0m1;G|5^0Vs5u)B6UDrl#R-=h-FmGpoXIO! z9>f?-IhI#-#d_Udw(i)|heLX&zO7KsU$ur?jf{q$A%-Lf!IBgP5fTO@{4rv5(TTD8 z>JdJv8U~2L$;#PU`U#GlQH4$pp86n1#82i9&0;N<%GDN)TAdP|ZJPRY7B}w z&~GCp^h*)pIzeU)#?2X3R}7y`n@5fz+{Q~ZvJ~`38RQXRQdS8W&6DNERa!4px|R1$%@r?VF1u>T z3e`b;>56GxZCFTwQ)Sap-d39!94x5w)=%uVGo-QIhwZhUHaWVHu0BPu3mNbD=1|Bs zJ$@LUV5pP33^`aKc}YgFX7R6Qh9eM$ zvj*p@^_ZmVevBfc$oqU^klbis`x_q{FZ|G9g;1-C4-y7M+dt0mz45X{b%tqr2xsNo zEQF&ex+mPn=R^!2CrrKWkRkjmQG^uf=!Gp7|1pNQFr-6%nJU^Yp-~bUbclR}#q?e$ zoRp;E(E=M`nC+POPmXtJmYL&RS++&Qbuc_rNaYDCBd?lB2o#5H2s0Qc8=}NF?F?5K z%6NQ=9{JZ9QW%10D*+_>J12^i5tMFI00<$rmC44TIL9w4la<8!A1fvSumB|9=nXnV z{%@Qc5+#avlE77SqRxEYCUK2az>AN7YZFWzGWx-{wUsg z^`H~<)dbN6M0g;Es8K}5JG>b(L{Jdm9-(V&l%R*G66_kxArx<1VN_8a$t1*)W|=O8 zlVyyr+da{iU*}rn^1IlVoUQOmK3#yMK13^K1XWo0kYR zs-|(EELZ;%=RVY5X&9AED+|2)^S9DLzjSJ>7{1r#6=$-Usu0vCD@fX?BHfsui-Q@N z5~1E`*25jd{=DmAT{QUqRaw{kK%@jF?oPcgnZZp%LDNfoA=z`$tmie$o&ev)c%fXy z3pe(%#rvLKjuJjfvu2GWUX0r(O!|GgE92Kx!-)5xTCJ5|3LquK%omuaSv4QNo$}lK zwCAIs>6{gmP2I2OG8?D4oM?Ne*Anz;*?ozNQ&}(z-bg0O&=pzQvE*VY&(NTOewK5>v;T&0+ zgfT&8T0~qM79e2fy14YtFNrTW9txWP!8G5tk&}p^=8wq?5W}+onkPLSF}R)WlYx(+ zSpmsFvdrV+T!P(+>dKKbD_}+xb;w&BDIpj!!3VXP4gva%TI;s%b3xO2o;B3O0}42) z*9%b=19H6YuF0%a4YX?_gLc<6&*AU}BYpFTc4%7zlkgpN9`YxAt2g1bbxgVEH^0PA zJM4Doh3|N==QHJ1ukU^SUif3+>9{Hw2x3)PMxi(r>6b><@^$)`H-P|50Qooimp4I9 zTWt7w%GIR9-`)wU#gt1qUSD>v;m^mjzG~EY&HT-qJblD>v)#BN3HDW5TK*B>Ktkc` zN)e!>5+!foN#Y!;1tjr`PD@vbwWkwIv6EX*>A&yx^Lu~ROpEw=Y57f!COYb&x3 z$pf~w_Z8aFB??w6GAWFaOejr`&W z7>O^Ej-3d?CK^vJYzVyxr`{)o(wphx@CAzCo0evcZ%&AlfnGhN{=)wrRXgryO?W

c^d>!&v% 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/other-scripts/recaptcha/index.js b/assets/other-scripts/recaptcha/index.js new file mode 100644 index 0000000000..8328335ea5 --- /dev/null +++ b/assets/other-scripts/recaptcha/index.js @@ -0,0 +1,122 @@ +/* globals jQuery, grecaptcha, newspack_recaptcha_data, newspack_grecaptcha */ + +import './style.scss'; + +window.newspack_grecaptcha = window.newspack_grecaptcha || { + widgets: {}, + getCaptchaV3Token, +}; + +const isV2 = 'v2' === newspack_recaptcha_data.version.substring( 0, 2 ); +const isV3 = 'v3' === newspack_recaptcha_data.version; +const siteKey = newspack_recaptcha_data.site_key; +const isInvisible = 'v2_invisible' === newspack_recaptcha_data.version; + +/** + * Specify a function to execute when the DOM is fully loaded. + * + * @see https://github.com/WordPress/gutenberg/blob/trunk/packages/dom-ready/ + * + * @param {Function} callback A function to execute after the DOM is ready. + * @return {void} + */ +function domReady( callback ) { + if ( typeof document === 'undefined' ) { + return; + } + if ( + document.readyState === 'complete' || // DOMContentLoaded + Images/Styles/etc loaded, so we call directly. + document.readyState === 'interactive' // DOMContentLoaded fires at this point, so we call directly. + ) { + return void callback(); + } + // DOMContentLoaded has not fired yet, delay callback until then. + document.addEventListener( 'DOMContentLoaded', callback ); +} + +/** + * We need to chain these callbacks to avoid two potential race conditions. + */ +if ( isV2 ) { + domReady( function () { + grecaptcha.ready( function () { + renderCaptchas(); + } ); + } ); +} + +/** + * Render reCAPTCHA v2 widgets. + */ +function renderCaptchas() { + const widgetContainers = [ ...document.querySelectorAll( '.grecaptcha-container' ) ]; + widgetContainers.forEach( container => { + const containerId = container.id; + const form = container.closest( 'form' ); + const submitButtons = isInvisible && + form && [ ...form.querySelectorAll( 'input[type="submit"], button[type="submit"]' ) ]; // If using the invisible widget, the target element must be the form's submit button. + const options = { + sitekey: siteKey, + size: isInvisible ? 'invisible' : 'normal', + }; + + if ( isV2 && isInvisible && 0 < submitButtons.length ) { + submitButtons.forEach( submitButton => { + submitButton.addEventListener( 'click', e => e.preventDefault() ); // Prevent the submit button from submitting the form so reCAPTCHA can intervene. + options.callback = () => form.requestSubmit( submitButton ); // If reCAPTCHA passes the action with a token, submit the form. + + const widgetId = grecaptcha.render( submitButton || container, options ); + newspack_grecaptcha.widgets[ containerId ] = widgetId; + } ); + } + } ); +} + +/** + * Refresh all reCAPTCHA tokens. + */ +function refreshCaptchas() { + if ( isV2 ) { + const { widgets } = newspack_grecaptcha; + for ( const containerId in widgets ) { + grecaptcha.reset( newspack_grecaptcha.widgets[ containerId ] ); + } + } +} + +/** + * Fetch a reCAPTCHA token via the v3 JS API. Only needed for reCAPTCHA v3. + * v2 automatically generates a token on form submission, so if using v2 the + * promise can be silently resolved. + * + * See: https://developers.google.com/recaptcha/docs/v3#programmatically_invoke_the_challenge + * + * @return {Promise} The reCAPTCHA token, if needed, or an empty string. + */ +function getCaptchaV3Token() { + return new Promise( ( res, rej ) => { + if ( ! grecaptcha || ! isV3 ) { + return res( '' ); + } + + if ( ! grecaptcha?.ready ) { + rej( 'Error loading the reCAPTCHA library.' ); + } + + grecaptcha.ready( () => { + grecaptcha + .execute( siteKey, { action: 'submit' } ) + .then( token => res( token ) ) + .catch( e => rej( e ) ); + } ); + } ); +} + +// Refresh reCAPTCHAs on Woo checkout update and error. +( function ( $ ) { + if ( ! $ ) { + return; + } + $( document ).on( 'updated_checkout', renderCaptchas ); + $( document.body ).on( 'checkout_error', refreshCaptchas ); +} )( jQuery ); diff --git a/assets/other-scripts/recaptcha/style.scss b/assets/other-scripts/recaptcha/style.scss new file mode 100644 index 0000000000..8571f2b070 --- /dev/null +++ b/assets/other-scripts/recaptcha/style.scss @@ -0,0 +1,9 @@ +.grecaptcha-container { + display: flex; + justify-content: center; + width: 100%; + + & > * { + margin: 16px 0; + } +} \ No newline at end of file diff --git a/assets/reader-activation/auth.js b/assets/reader-activation/auth.js index bad04490fb..441cce90c3 100644 --- a/assets/reader-activation/auth.js +++ b/assets/reader-activation/auth.js @@ -246,6 +246,7 @@ window.newspackRAS.push( function ( readerActivation ) { * Handle auth form action selection. */ function setFormAction( action, shouldFocus = false ) { + container.setAttribute( 'data-action', action ); if ( 'otp' === action ) { if ( ! readerActivation.getOTPHash() ) { return; @@ -361,16 +362,17 @@ window.newspackRAS.push( function ( readerActivation ) { } readerActivation - .getCaptchaToken() + .getCaptchaV3Token() // Get a token for reCAPTCHA v3, if needed. .then( captchaToken => { + // If there's no token, we don't need to do anything. if ( ! captchaToken ) { return; } - let tokenField = form.captcha_token; + let tokenField = form[ 'g-recaptcha-response' ]; if ( ! tokenField ) { tokenField = document.createElement( 'input' ); tokenField.setAttribute( 'type', 'hidden' ); - tokenField.setAttribute( 'name', 'captcha_token' ); + tokenField.setAttribute( 'name', 'g-recaptcha-response' ); tokenField.setAttribute( 'autocomplete', 'off' ); form.appendChild( tokenField ); } diff --git a/assets/reader-activation/auth.scss b/assets/reader-activation/auth.scss index 35a0036ad3..96df25885d 100644 --- a/assets/reader-activation/auth.scss +++ b/assets/reader-activation/auth.scss @@ -62,9 +62,17 @@ inset: 0; justify-content: center; align-items: center; - z-index: 9999999999; + z-index: 2000000000; font-size: 0.8888em; + .grecaptcha-container { + display: none; + } + + &[data-action='register'] .grecaptcha-container { + display: flex; + } + @media screen and ( min-width: 600px ) { font-size: 0.8em; } diff --git a/assets/reader-activation/index.js b/assets/reader-activation/index.js index ffd245c91e..7036516b01 100644 --- a/assets/reader-activation/index.js +++ b/assets/reader-activation/index.js @@ -1,4 +1,5 @@ /* globals newspack_ras_config, newspack_reader_data */ + window.newspack_ras_config = window.newspack_ras_config || {}; import Store from './store.js'; @@ -221,36 +222,6 @@ export function getAuthStrategy() { return getCookie( 'np_auth_strategy' ); } -/** - * Get a captcha token based on user input - */ -export function getCaptchaToken( action = 'submit' ) { - return new Promise( ( res, rej ) => { - const { grecaptcha } = window; - if ( ! grecaptcha || ! newspack_ras_config ) { - return res( '' ); - } - - const { captcha_site_key: captchaSiteKey } = newspack_ras_config; - - // If the site key is not set, bail with an empty token. - if ( ! captchaSiteKey ) { - return res( '' ); - } - - if ( ! grecaptcha?.ready ) { - rej( 'Error loading the reCaptcha library.' ); - } - - grecaptcha.ready( () => { - grecaptcha - .execute( captchaSiteKey, { action } ) - .then( token => res( token ) ) - .catch( e => rej( e ) ); - } ); - } ); -} - /** * Ensure the client ID cookie is set. */ @@ -343,7 +314,9 @@ const readerActivation = { authenticateOTP, setAuthStrategy, getAuthStrategy, - getCaptchaToken, + getCaptchaV3Token: window.newspack_grecaptcha + ? window.newspack_grecaptcha?.getCaptchaV3Token + : () => new Promise( res => res( '' ) ), // Empty promise. }; /** diff --git a/assets/wizards/connections/views/main/recaptcha.js b/assets/wizards/connections/views/main/recaptcha.js index 57ad81c52f..0a36d155f4 100644 --- a/assets/wizards/connections/views/main/recaptcha.js +++ b/assets/wizards/connections/views/main/recaptcha.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { ExternalLink } from '@wordpress/components'; +import { BaseControl, ExternalLink } from '@wordpress/components'; import { useEffect, useState } from '@wordpress/element'; import apiFetch from '@wordpress/api-fetch'; @@ -15,6 +15,7 @@ import { Grid, Notice, SectionHeader, + SelectControl, TextControl, } from '../../../../components/src'; @@ -41,6 +42,27 @@ const Recaptcha = () => { fetchSettings(); }, [] ); + // Clear out site key + secret if changing the version. + useEffect( () => { + if ( settingsToUpdate?.version !== settings?.version ) { + setSettingsToUpdate( { ...settingsToUpdate, site_key: '', site_secret: '' } ); + setError( + __( + 'Your site key and secret must match the selected reCAPTCHA version. Please enter new credentials.', + 'newspack-plugin' + ) + ); + } else { + // If changing back to the current version, restore the settings. + setSettingsToUpdate( { + ...settingsToUpdate, + site_key: settings?.site_key || '', + site_secret: settings?.site_secret || '', + } ); + setError( null ); + } + }, [ settingsToUpdate?.version ] ); + const updateSettings = async data => { setError( null ); setIsLoading( true ); @@ -59,16 +81,19 @@ const Recaptcha = () => { } }; + const isV3 = 'v3' === settingsToUpdate?.version; + const hasRequiredSettings = settings.site_key && settings.site_secret; + return ( <> - + ( <> { __( - 'Enabling reCAPTCHA v3 can help protect your site against bot attacks and credit card testing.', + 'Enabling reCAPTCHA can help protect your site against bot attacks and credit card testing.', 'newspack-plugin' ) }{ ' ' } @@ -95,7 +120,7 @@ const Recaptcha = () => { { settings.use_captcha && ( <> { error && } - { settings.use_captcha && ( ! settings.site_key || ! settings.site_secret ) && ( + { ! hasRequiredSettings && ( { ) } /> ) } + + + { __( 'Learn more about reCAPTCHA versions', 'newspack-plugin' ) } + + } + > + + setSettingsToUpdate( { ...settingsToUpdate, version: value } ) + } + // Note: add 'v2_checkbox' here and in Recaptcha::SUPPORTED_VERSIONS to add support for the Checkbox flavor of reCAPTCHA v2. + options={ [ + { value: 'v3', label: __( 'Score based (v3)', 'newspack-plugin' ) }, + { + value: 'v2_invisible', + label: __( 'Challenge (v2) - invisible reCAPTCHA badge', 'newspack-plugin' ), + }, + ] } + /> + + { disabled={ isLoading } autoComplete="off" /> - - setSettingsToUpdate( { ...settingsToUpdate, threshold: value } ) - } - disabled={ isLoading } - help={ - - { __( 'Learn more about the threshold value', 'newspack-plugin' ) } - - } - /> + { isV3 && ( + + setSettingsToUpdate( { ...settingsToUpdate, threshold: value } ) + } + disabled={ isLoading } + help={ + + { __( 'Learn more about the threshold value', 'newspack-plugin' ) } + + } + /> + ) } ) } diff --git a/includes/class-recaptcha.php b/includes/class-recaptcha.php index 8268a655b8..171b42ba86 100644 --- a/includes/class-recaptcha.php +++ b/includes/class-recaptcha.php @@ -7,22 +7,33 @@ namespace Newspack; +use Error; + defined( 'ABSPATH' ) || exit; /** * Class for reCAPTCHA integration. */ final class Recaptcha { - const SCRIPT_HANDLE = 'newspack-recaptcha'; - const OPTIONS_PREFIX = 'newspack_recaptcha_'; + const SCRIPT_HANDLE = 'newspack-recaptcha'; + const SCRIPT_HANDLE_API = 'newspack-recaptcha-api'; + const OPTIONS_PREFIX = 'newspack_recaptcha_'; + const SUPPORTED_VERSIONS = [ 'v3', 'v2_invisible' ]; // Note: add 'v2_checkbox' here and in the Connections UI to add support for the Checkbox flavor of reCAPTCHA v2. /** * Initialize hooks. */ public static function init() { \add_action( 'rest_api_init', [ __CLASS__, 'register_api_endpoints' ] ); - \add_action( 'wp_enqueue_scripts', [ __CLASS__, 'register_script' ] ); - \add_action( 'init', [ __CLASS__, 'woocommerce_hooks' ] ); + \add_action( 'wp_enqueue_scripts', [ __CLASS__, 'register_scripts' ] ); + \add_action( 'newspack_newsletters_subscribe_block_before_email_field', [ __CLASS__, 'render_recaptcha_v2_container' ] ); + + // Add reCAPTCHA to the Woo checkout form. + \add_action( 'woocommerce_review_order_before_submit', [ __CLASS__, 'add_recaptcha_v2_to_checkout' ] ); + \add_action( 'woocommerce_checkout_after_customer_details', [ __CLASS__, 'add_recaptcha_v3_to_checkout' ] ); + + // Verify reCAPTCHA on checkout submission. + \add_action( 'woocommerce_checkout_process', [ __CLASS__, 'verify_recaptcha_on_checkout' ] ); } /** @@ -59,39 +70,89 @@ public static function register_api_endpoints() { 'required' => false, 'sanitize_callback' => 'sanitize_text_field', ], + 'version' => [ + 'required' => false, + 'sanitize_callback' => 'sanitize_text_field', + ], + 'threshold' => [ + 'required' => false, + 'sanitize_callback' => 'sanitize_text_field', + ], ], ] ); } /** - * Get the reCAPTCHA v3 script URL. + * Get the reCAPTCHA script URL. * * @return string */ - private static function get_script_url() { - if ( ! self::can_use_captcha() ) { - return ''; + public static function get_script_url() { + $base_url = 'https://www.google.com/recaptcha/api.js'; + if ( self::can_use_captcha( 'v2' ) ) { + return \add_query_arg( + [ + 'render' => 'explicit', + ], + $base_url + ); } - $captcha_site_key = self::get_setting( 'site_key' ); - return 'https://www.google.com/recaptcha/api.js?render=' . $captcha_site_key; + if ( self::can_use_captcha( 'v3' ) ) { + return \add_query_arg( + [ 'render' => self::get_site_key() ], + $base_url + ); + } + return ''; } /** - * Register the reCAPTCHA v3 script. + * Register the reCAPTCHA script. */ - public static function register_script() { + public static function register_scripts() { + // Styles only apply to the visible v2 widgets. + if ( self::can_use_captcha( 'v2' ) ) { + \wp_enqueue_style( + self::SCRIPT_HANDLE, + Newspack::plugin_url() . '/dist/other-scripts/recaptcha.css', + [], + NEWSPACK_PLUGIN_VERSION + ); + } + if ( self::can_use_captcha() ) { - // Note: version arg Must be null to avoid the &ver param being read as part of the reCAPTCHA site key . + // Enqueue the reCAPTCHA API from Google's servers. + // Note: version arg Must be null to avoid the &ver param being read as part of the reCAPTCHA site key. \wp_register_script( - self::SCRIPT_HANDLE, - \esc_url( self::get_script_url() ), - null, + self::SCRIPT_HANDLE_API, + \esc_url( self::get_script_url() ), // The Google API script. + [], null, // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion + false + ); + \wp_script_add_data( self::SCRIPT_HANDLE_API, 'async', true ); + \wp_script_add_data( self::SCRIPT_HANDLE_API, 'defer', true ); + + \wp_enqueue_script( + self::SCRIPT_HANDLE, + Newspack::plugin_url() . '/dist/other-scripts/recaptcha.js', + [ self::SCRIPT_HANDLE_API ], + NEWSPACK_PLUGIN_VERSION, true ); \wp_script_add_data( self::SCRIPT_HANDLE, 'async', true ); - \wp_script_add_data( self::SCRIPT_HANDLE, 'amp-plus', true ); + \wp_script_add_data( self::SCRIPT_HANDLE, 'defer', true ); + + \wp_localize_script( + self::SCRIPT_HANDLE, + 'newspack_recaptcha_data', + [ + 'site_key' => self::get_site_key(), + 'version' => self::get_setting( 'version' ), + 'api_url' => \esc_url( self::get_script_url() ), // The Google API script. + ] + ); } } @@ -124,6 +185,7 @@ public static function get_settings_config() { 'site_key' => '', 'site_secret' => '', 'threshold' => 0.5, + 'version' => 'v3', ]; } @@ -206,6 +268,20 @@ public static function get_setting( $key ) { return $value; } + /** + * Get the reCAPTCHA site key. + */ + public static function get_site_key() { + return self::get_setting( 'site_key' ); + } + + /** + * Get the reCAPTCHA site secret. + */ + public static function get_site_secret() { + return self::get_setting( 'site_secret' ); + } + /** * Update settings values. * @@ -214,6 +290,10 @@ public static function get_setting( $key ) { * @return mixed[] Updated settings, or WP_Error. */ public static function update_settings( $settings ) { + // Avoid notoptions cache issue. + wp_cache_delete( 'notoptions', 'options' ); + wp_cache_delete( 'alloptions', 'options' ); + foreach ( $settings as $key => $value ) { if ( in_array( $key, array_keys( self::get_settings_config() ), true ) ) { \update_option( self::OPTIONS_PREFIX . $key, $value ); @@ -226,11 +306,27 @@ public static function update_settings( $settings ) { /** * Check whether reCaptcha is enabled and that we have all required settings. * + * @param string $version If specified, chedk whether the given version of reCaptcha is enabled. + * * @return boolean True if we can use reCaptcha to secure checkout requests. */ - public static function can_use_captcha() { + public static function can_use_captcha( $version = null ) { $settings = self::get_settings(); - if ( empty( $settings['use_captcha'] ) || empty( $settings['site_key'] ) || empty( $settings['site_secret'] ) ) { + if ( empty( $settings['use_captcha'] ) ) { + return false; + } + + if ( + $version && + ( + ( 'v3' === $version && $version !== $settings['version'] ) || + ( 'v2' === $version && $version !== substr( $settings['version'], 0, 2 ) ) + ) + ) { + return false; + } + + if ( empty( self::get_site_key() ) || empty( self::get_site_secret() ) ) { return false; } @@ -238,30 +334,31 @@ public static function can_use_captcha() { } /** - * Verify a REST API request using reCAPTCHA v3. - * - * @param string $captcha_token Token to verify. + * Verify a REST API request using reCAPTCHA. + * Should work for all versions of reCAPTCHA. * * @return boolean|WP_Error True if the request passes the CAPTCHA test, or WP_Error. */ - public static function verify_captcha( $captcha_token ) { + public static function verify_captcha() { if ( ! self::can_use_captcha() ) { return true; } - if ( empty( $captcha_token ) ) { + $version = self::get_setting( 'version' ); + $generic_error = 'v3' === $version ? __( 'Could not complete this request. Please try again later.', 'newspack-plugin' ) : __( 'Please complete the challenge to continue.', 'newspack-plugin' ); + $token = isset( $_POST['g-recaptcha-response'] ) ? sanitize_text_field( wp_unslash( $_POST['g-recaptcha-response'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing + if ( empty( $token ) ) { return new \WP_Error( 'newspack_recaptcha_invalid_token', - __( 'Missing or invalid captcha token.', 'newspack' ) + $generic_error ); } - $captcha_secret = self::get_setting( 'site_secret' ); $captcha_verify = \wp_safe_remote_post( \add_query_arg( [ - 'secret' => $captcha_secret, - 'response' => $captcha_token, + 'secret' => self::get_site_secret(), + 'response' => $token, ], 'https://www.google.com/recaptcha/api/siteverify' ) @@ -276,22 +373,23 @@ public static function verify_captcha( $captcha_token ) { // If the reCaptcha verification request succeeds, but with error. if ( ! boolval( $captcha_verify['success'] ) ) { - $error = isset( $captcha_verify['error-codes'] ) ? reset( $captcha_verify['error-codes'] ) : __( 'Error validating captcha.', 'newspack' ); + $error = isset( $captcha_verify['error-codes'] ) ? reset( $captcha_verify['error-codes'] ) : $generic_error; return new \WP_Error( 'newspack_recaptcha_error', // Translators: error message for reCaptcha. - sprintf( __( 'reCaptcha error: %s', 'newspack' ), $error ) + sprintf( __( 'Error: %s', 'newspack-plugin' ), $error ) ); } - // If the reCaptcha verification score is below our threshold for valid user input. + // If the reCAPTCHA verification score is below our threshold for valid user input (v3 only). if ( + 'v3' === $version && isset( $captcha_verify['score'] ) && floatval( self::get_setting( 'threshold' ) ) > floatval( $captcha_verify['score'] ) ) { return new \WP_Error( 'newspack_recaptcha_failure', - __( 'User action failed captcha challenge.', 'newspack' ) + $generic_error ); } @@ -299,24 +397,32 @@ public static function verify_captcha( $captcha_token ) { } /** - * Hook reCAPTCHA v3 to WooCommerce. + * Render a container for the reCAPTCHA v2 checkbox widget. */ - public static function woocommerce_hooks() { - // Add reCAPTCHA v3 to the checkout form. - \add_action( 'woocommerce_after_checkout_form', [ __CLASS__, 'add_recaptcha_to_checkout' ] ); + public static function render_recaptcha_v2_container() { + if ( ! self::can_use_captcha( 'v2' ) ) { + return; + } + ?> +

+