wenliming 3 rokov pred
rodič
commit
dcc99ea96e

+ 42 - 18
library/paypal.html

@@ -8,8 +8,7 @@
         <style>
             html,
             body,
-            iframe,
-            h2 {
+            iframe{
                 margin: 0;
                 border: 0;
                 padding: 0;
@@ -20,25 +19,50 @@
                 color: black;
                 overflow: hidden;
             }
-
-            h2 {
-                height: 50px;
-                font-size: 20px;
-            }
         </style>
     </head>
 
     <body>
         <!-- Include the PayPal JavaScript SDK; replace "test" with your own sandbox Business account app client ID -->
-        <script src="https://www.paypal.com/sdk/js?client-id=ASn7k0zqyS5AWYikVSfmamR-RFpjyU_QFJWSxOHHoWE04-RgHNO6nahn0GyHUaUAEBxj-aKgtSrq4O4G&currency=USD"></script>
         <!-- Set up a container element for the button -->
         <div id="paypal-button-container"></div>
         <script>
-            // let amount = window.location.search.split('=')[1];
-            let amount = 0;
-            document.addEventListener("DOMContentLoaded", function () {
-                window.parent.postMessage({ actionType: "iframeLoaded" }, "*");
+            function loadAsyncScript(src, callback = function () {}) { // 同步加载js
+                const head = document.getElementsByTagName('head')[0];
+                const script = document.createElement('script');
+                script.setAttribute('type', 'text/javascript');
+                script.setAttribute('src', src);
+                script.setAttribute('async', true);
+                script.setAttribute('defer', true);
+                head.appendChild(script);
+        
+                if (script.readyState) { // ie
+                    script.onreadystatechange = function () {
+                        var state = this.readyState;
+                        if (state === 'loaded' || state === 'complete') {
+                            callback();
+                        }
+                    }
+                } else {
+                    script.onload = function () {
+                        callback();
+                    }
+                }
+            }
 
+            function getQueryString(name) {
+                let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+                let r = window.location.search.substr(1).match(reg);
+                if (r != null) {
+                    return decodeURIComponent(r[2]);
+                };
+                return null;
+            }
+            let paypalClientId = getQueryString('paypalClientId');
+            let src = `https://www.paypal.com/sdk/js?client-id=${paypalClientId}&currency=USD`;
+            loadAsyncScript(src, () => {
+                let amount = 0;
+                window.parent.postMessage({ actionType: "iframeLoaded" }, "*");
                 window.addEventListener("message", function (event) {
                     if (event.data && event.data.actionType) {
                         switch (event.data.actionType) {
@@ -46,15 +70,15 @@
                                 amount = event.data.amount;
                                 initPaypal(amount);
                                 break;
-                        }
+                            }
                     }
                 });
-            });
+            })
 
             function initPaypal(amount) {
                 let dom = document.getElementById('paypal-button-container');
                 if(dom.children && dom.children.length) {
-                  empty(dom)
+                    empty(dom)
                 }
                 paypal
                     .Buttons({
@@ -112,9 +136,9 @@
                     .render("#paypal-button-container");
             }
             function empty (e) {
-              while (e.firstChild) {
-                  e.removeChild (e.firstChild);
-              }
+                while (e.firstChild) {
+                    e.removeChild (e.firstChild);
+                }
             }
         </script>
     </body>

+ 0 - 2
package.json

@@ -9,7 +9,6 @@
     "build-watch": "vue-cli-service  --env.NODE_ENV=development build-watch --mode development"
   },
   "dependencies": {
-    "@paypal/paypal-js": "^5.0.2",
     "axios": "^0.26.1",
     "core-js": "^3.8.3",
     "element-plus": "^2.1.4",
@@ -18,7 +17,6 @@
     "postcss-import": "^14.0.2",
     "postcss-url": "^10.1.3",
     "sass-loader": "^12.6.0",
-    "tinymce": "^6.0.1",
     "vue": "^3.2.13"
   },
   "devDependencies": {

+ 7 - 4
src/entry/background.js

@@ -5,16 +5,19 @@ import {
     backTwitterPinLoginCode,
 } from "../logic/twitter.js";
 
-import { setChromeStorage, getChromeCookie, LANDING_PAGE } from "../uilts/chromeExtension";
+import { setChromeStorage, getChromeCookie } from "../uilts/chromeExtension";
 
 chrome.runtime.onInstalled.addListener(onInstalledMethod);
 
 chrome.runtime.onMessage.addListener(onMessageMethod);
 
 function onInstalledMethod() {
-    getChromeCookie(LANDING_PAGE, (res_arr) => {
-        if(res_arr && res_arr.length) {
-            let {postNickName, srcContentId} = res_arr[res_arr.length-1];
+    getChromeCookie({
+        name: 'pickup_info',
+        url: 'https://de-net-test.piaoquantv.com'
+    }, (res) => {
+        if(res) {
+            let {postNickName, srcContentId} = res;
             if(postNickName && srcContentId) {
                 let url = `https://twitter.com/${postNickName}/status/${srcContentId}`
                 chrome.tabs.create({

+ 8 - 0
src/http/account.js

@@ -43,3 +43,11 @@ export function getMineLuckdropRecords(params) {
     data: params
   })
 }
+
+export function getFrontConfig(params) {
+  return service({
+    url: `/base/config/getFrontConfig`,
+    method: 'post',
+    data: params
+  })
+}

+ 8 - 0
src/http/pay.js

@@ -16,3 +16,11 @@ export function payCalcFee(params) {
     });
 }
 
+export function getPayConfig(params) {
+    return service({
+        url: `/wallet/pay/getConfig`,
+        method: "post",
+        data: params,
+    });
+}
+

+ 4 - 0
src/iframe/home.js

@@ -0,0 +1,4 @@
+import { createApp } from 'vue'
+import App from '../view/home.vue'
+
+createApp(App).mount('#app')

+ 20 - 17
src/logic/twitter.js

@@ -76,6 +76,7 @@ export function renderDom(port) {
         onWindowResize();
         checkHasDeBtn();
         setTimeout(() => {
+            console.log('home', chrome.runtime.getURL('/iframe/home.html'));
             _addIframe();
             _addDeNetBtn();
             _getSliderTwitterBtn();
@@ -251,24 +252,25 @@ function _addIframe() {
  * @private
  */
 function _getTwitterArtId(contentStr, cb) {
-    // let firstTwitterArtId = document.querySelector('article[data-testid="tweet"]').querySelector('a[dir="auto"]').getAttribute('href');
-    // return firstTwitterArtId.split('/status/')[1];
     let id = '';
 
     let timer = setInterval(() => {
-        let artDomList = document.querySelectorAll('article[data-testid="tweet"]');
-        for (let i = 0; i < artDomList.length; i++) {
-            let itemChild = artDomList[i].querySelector('.css-1dbjc4n');
-            if (itemChild && itemChild.querySelector('div[lang="und"]')) {
-                let innerText = itemChild.querySelector('div[lang="und"]').innerText;
-                let regex = new RegExp(contentStr);
-                if (regex.test(innerText)) {
-                    id = itemChild.parentNode.querySelector('a[dir="auto"]').getAttribute('href').split('/status/')[1];
-                    clearInterval(timer);
-                    if (id) {
-                        cb && cb(id);
+        let arr = document.querySelectorAll('a') || [];
+        for (let i = 0; i < arr.length; i++) {
+            let item = arr[i];
+            if (item.innerText == '#DeNet') {
+                if (item.parentNode && item.parentNode.parentNode && item.parentNode.parentNode.innerText.length > 5) {
+                    let _postId = item.parentNode.parentNode.innerText || ''
+                    let _dom = item.parentNode.parentNode.parentNode.parentNode.parentNode
+                    let regex = new RegExp(contentStr);
+                    if (regex.test(_postId)) {
+                        id = _dom.children[0].querySelector('a[dir="auto"]').getAttribute('href').split('/status/')[1];
+                        clearInterval(timer);
+                        if (id) {
+                            cb && cb(id);
+                        }
+                        break;
                     }
-                    break;
                 }
             }
         }
@@ -310,9 +312,10 @@ function _deNetBtnClick(port) {
  */
 function _setPublishContent(content) {
     setTimeout(() => {
-        document.execCommand("insertText", false, '');
+        // document.execCommand('selectAll')
+        // document.execCommand("Delete","false",null); 
         document.execCommand("insertText", false, content);
-    }, 1300);
+    }, 1000);
 }
 
 /**
@@ -454,7 +457,7 @@ function parseDOMRedPacket() {
                 let _tweetId = _dom.children[0].querySelector('a[dir="auto"]').getAttribute('href').split('/status/')[1];
                 replaceDOMRedPacket(_dom.children[1], _postId,_tweetId)
             }
-
+            
         }
     })
 }

+ 51 - 13
src/view/components/give-dialog.vue

@@ -122,7 +122,13 @@
                         <preview-card :postData="publishRes" :baseFormData="baseFormData"></preview-card>
                     </template>
                     <div v-show="showPreview">
-                        <paypal-button :finalAmountData="finalAmountData" @payPalFinsh="payPalFinsh"></paypal-button>
+                        <paypal-button 
+                            :finalAmountData="finalAmountData" 
+                            :payConfig="{
+                                paypalClientId,
+                                paypalHtml
+                            }"
+                            @payPalFinsh="payPalFinsh"></paypal-button>
                     </div>
                 </div>
             </div>
@@ -133,15 +139,17 @@
 <script setup>
 import { ref, watch, reactive, defineProps, defineEmits, onMounted } from "vue";
 import {postPublish, verifyPaypalResult} from "../../http/publishApi"
-import {payCalcFee} from "../../http/pay"
-import { ElMessage } from 'element-plus';
+import {payCalcFee, getPayConfig} from "../../http/pay"
+import {getFrontConfig} from "../../http/account"
+import { ElMessage, ElLoading} from 'element-plus';
 import 'element-plus/es/components/message/style/css'
 
 import previewCard from "./preview-card";
 import paypalButton from "./paypal-button";
 import followInput from "./follow-input";
 
-const paypalClientId = 'ASn7k0zqyS5AWYikVSfmamR-RFpjyU_QFJWSxOHHoWE04-RgHNO6nahn0GyHUaUAEBxj-aKgtSrq4O4G';
+let paypalClientId = ref('');
+let paypalHtml = ref('');
 
 let publishRes = reactive({})
 
@@ -220,14 +228,14 @@ const close = () => {
     }
 };
 
-const setPreviewDialogHeight = () => {
-    let clientHeight = document.documentElement.clientHeight;
-    let gapSafe = 40;
+// const setPreviewDialogHeight = () => {
+//     let clientHeight = document.documentElement.clientHeight;
+//     let gapSafe = 40;
 
-    if(previewDialogHeight.value > clientHeight - gapSafe) {
-        previewDialogHeight.value = clientHeight - gapSafe;
-    }
-};
+//     if(previewDialogHeight.value > clientHeight - gapSafe) {
+//         previewDialogHeight.value = clientHeight - gapSafe;
+//     }
+// };
 
 const getPayAmount = (amountValue, cb) => {
     payCalcFee({
@@ -333,18 +341,24 @@ const initParams = () => {
     baseFormData.totalCount = '';
     formList[0].text = [];
     atUserList.value = [];
+    submitIng.value = false;
+    isBack.value = false;
 }
 
 const payPalFinsh = (params) => {
     let transaction = params.transaction;
     console.log('transaction', transaction)
+    let loadingInstance = ElLoading.service({
+            background: 'rgba(0,0,0,.3)'
+        })
     verifyPaypalResult({
         params: {
             paypalTransactionId: transaction.id,
             postId: publishRes.postId,
-            paypalClientId: paypalClientId
+            paypalClientId: paypalClientId.value
         }
     }).then((res) => {
+        loadingInstance.close();
         if(res.code == 0) {
             //支付状态 0:未支付,1:支付成功,2:支付失败,3:已关闭,4:已退款
             if(res.data && res.data.payStatus == 1) {
@@ -358,6 +372,8 @@ const payPalFinsh = (params) => {
                 })
             }
         }
+    }).catch(() => {
+        loadingInstance.close();
     })
 }
 
@@ -429,8 +445,30 @@ const setIptAmountErrorMsg = (cb) => {
     cb && cb(res);
 }
 
+const setPayConfig = () => {
+    getPayConfig({
+        params: {}
+    }).then(res => {
+        if(res.code ==0) {
+            paypalClientId.value = res.data.paypalClientId
+        }
+    })
+}
+
+const setFrontConfig = () => {
+    getFrontConfig({
+        params : {}
+    }).then(res => {
+        if(res.code == 0) {
+            paypalHtml.value = res.data.paypalHtml
+        }
+    })
+}
+
 onMounted(() => {
-    setPreviewDialogHeight();
+    // setPreviewDialogHeight();
+    setFrontConfig();
+    setPayConfig();
     document.onkeydown = function(e){    
         var keyNum=window.event ? e.keyCode :e.which;
         let escKey = 27;

+ 2 - 8
src/view/components/option-withdraw.vue

@@ -65,10 +65,10 @@
 
                     <div class="error-msg">
                         <template  v-if="showWithdrawError">
-                            The minimum withdrawal amount is ${{walletWithdrawConfig.withdrawUSDPreMinAmount}} USD
+                            The minimum withdrawal amount is ${{walletWithdrawConfig.withdrawUSDPreMinAmount/100}} USD
                         </template>
                         <template  v-if="showWithdrawIptError">
-                            The withdrawal amount exceeds the total account balance of ${{canWithdrawBalance}} USD
+                            The withdrawal amount exceeds the total account balance of ${{canWithdrawBalance/100}} USD
                         </template>
                     </div>
                 </div>
@@ -76,7 +76,6 @@
                 <div class="bottom-msg">
                     <div class="top">
                         <template v-if="!calcReq">
-                            <template v-if="finalWithdrawalAmount">
                                 final amount
                                 <span>${{
                                         finalWithdrawalAmount > 0
@@ -84,7 +83,6 @@
                                             : 0
                                     }}
                                 </span>
-                            </template>
                         </template>
                         <template v-else>
                             计算中
@@ -196,10 +194,6 @@ const withdrawalAll = () => {
 };
 
 const withdrawCalcAmount = () => {
-    if(showWithdrawIptError.value || showWithdrawError.value || !requestWithdrawParams.value.amountValue) {
-        return;
-    }
-    
     calcReq.value = true;
     withdrawCalcFee({
         params: {

+ 26 - 8
src/view/components/paypal-button.vue

@@ -8,13 +8,13 @@
             <iframe
                 class="iframe-pay"
                 ref="iframe"
-                :src="`https://art-weapp.oss-cn-hangzhou.aliyuncs.com/chromeExtension/paypal.html?amount=${finalAmountData.finalAmountValue}`"></iframe>
+                :src="`${payConfig.paypalHtml}?paypalClientId=${payConfig.paypalClientId}`"></iframe>
         </div>
     </div>
 </template>
 
 <script setup>
-import { onMounted, ref, defineProps, defineEmits } from "vue";
+import { onMounted, ref, defineProps, defineEmits, watch } from "vue";
 
 let iframe = ref(null);
 
@@ -30,8 +30,31 @@ const props = defineProps({
             }
         },
     },
+    payConfig: {
+        type: Object,
+        default: () => {
+            return {
+                paypalClientId: '',
+                paypalHtml: ''
+            }
+        }
+    }
 });
 
+watch(
+    () => props.finalAmountData.finalAmountValue,
+    (newVal) => {
+        iframe.value.contentWindow.postMessage({ 
+            actionType: "setAmount", amount: newVal
+        },
+            "*"
+        );
+    },
+    {
+        deep: true
+    }
+);
+
 const emits = defineEmits(["payPalFinsh"]);
 
 onMounted(() => {
@@ -46,16 +69,11 @@ onMounted(() => {
                     );
                     emits("payPalFinsh", event.data);
                     break;
-                case "iframeLoaded":
-                    iframe.value.contentWindow.postMessage(
-                        { actionType: "setAmount", amount: props.finalAmountData.finalAmountValue },
-                        "*"
-                    );
-                    break;
             }
         }
     });
 });
+
 </script>
 
 <style lang="scss" scoped>

+ 48 - 0
src/view/home.vue

@@ -0,0 +1,48 @@
+<template>
+    <div class="main_app">
+        <div class="content" :style="contentStyle">
+            <popup></popup>
+        </div>
+    </div>
+</template>
+
+
+<script setup>
+import { onMounted, ref } from "vue";
+
+import popup from './popup.vue'
+
+let contentStyle = ref({});
+
+const setDomStyle = () => {
+    let radio = 600 / 375;
+    let height = window.innerHeight - 80;
+    let width = height / radio;
+
+    contentStyle.value = {width: width + 'px', height: height + 'px'};
+}
+
+onMounted(() => {
+    setDomStyle();
+});
+
+</script>
+
+<style lang='scss' scoped>
+.main_app {
+    height: 97vh;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    overflow: hidden;
+    .content {
+        box-sizing: border-box;
+        box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.2);
+        border-radius: 15px;
+    }
+}
+/deep/ .page-wrapper {
+    width: 100% !important;
+    height: 100% !important;
+}
+</style>

+ 8 - 3
src/view/popup.vue

@@ -18,7 +18,7 @@
                 />
                 <div class="amount">${{ canWithdrawBalance / 100 }}</div>
                 <div class="withdraw-btn" @click="clickWithdraw">Withdraw</div>
-                <div class="msg">({{walletWithdrawConfig.withdrawUSDPaypalFeeDesc}})</div>
+                <div class="msg" v-show="walletWithdrawConfig.withdrawUSDPaypalFeeDesc">({{walletWithdrawConfig.withdrawUSDPaypalFeeDesc}})</div>
             </div>
             <div class="tab-bar">
                 <div
@@ -246,6 +246,7 @@ let withdrawVisibility = ref(false);
 
 let userInfo = ref({});
 let canWithdrawBalance = ref(0);
+let isRequestWithdrawBalance = ref(false);
 
 let currentTabIndex = ref(0);
 let giveList = ref([]);
@@ -316,11 +317,13 @@ const queryWithdrawConfig = () => {
  * 获取账户余额
  */
 const getAccountBalance = () => {
+    isRequestWithdrawBalance.value = false;
     getBalance({
         params: {
             currencyCode: "USD",
         },
     }).then((res) => {
+        isRequestWithdrawBalance.value = true;
         if (res.code == 0) {
             if (res.data) {
                 canWithdrawBalance.value = res.data.canWithdrawBalance;
@@ -450,8 +453,10 @@ const showTransactions = () => {
 };
 
 const clickWithdraw = () => {
-    homeVisibility.value = false;
-    withdrawVisibility.value = true;
+    if(isRequestWithdrawBalance.value) {
+        homeVisibility.value = false;
+        withdrawVisibility.value = true;
+    }
 };
 
 const loginAction = () => {

+ 35 - 18
yarn.lock

@@ -1064,13 +1064,6 @@
     mkdirp "^1.0.4"
     rimraf "^3.0.2"
 
-"@paypal/paypal-js@^5.0.2":
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/@paypal/paypal-js/-/paypal-js-5.0.2.tgz#bf07d7ae3f397070f67b4727982365a44faa836e"
-  integrity sha512-bRQ6P0sftCkunQXKjujDjxCbfCdIZpn29JoQU5HTW50lV1yFGKf8q9DJIAnzHPgDDc0CTJ27dlkLD94oKEd6Jg==
-  dependencies:
-    promise-polyfill "^8.2.1"
-
 "@polka/url@^1.0.0-next.20":
   version "1.0.0-next.21"
   resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
@@ -2021,6 +2014,11 @@ array-union@^2.1.0:
   resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
+array-union@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975"
+  integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==
+
 arrify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -2641,6 +2639,18 @@ cookie@0.4.2:
   resolved "https://registry.npmmirror.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
   integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
 
+copy-webpack-plugin@^10.2.4:
+  version "10.2.4"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe"
+  integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==
+  dependencies:
+    fast-glob "^3.2.7"
+    glob-parent "^6.0.1"
+    globby "^12.0.2"
+    normalize-path "^3.0.0"
+    schema-utils "^4.0.0"
+    serialize-javascript "^6.0.0"
+
 copy-webpack-plugin@^9.0.1:
   version "9.1.0"
   resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b"
@@ -3829,6 +3839,18 @@ globby@^11.0.1, globby@^11.0.2, globby@^11.0.3:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
+globby@^12.0.2:
+  version "12.2.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22"
+  integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==
+  dependencies:
+    array-union "^3.0.1"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.7"
+    ignore "^5.1.9"
+    merge2 "^1.4.1"
+    slash "^4.0.0"
+
 globule@^1.0.0:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2"
@@ -4121,7 +4143,7 @@ ignore@^4.0.6:
   resolved "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
-ignore@^5.2.0:
+ignore@^5.1.9, ignore@^5.2.0:
   version "5.2.0"
   resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
   integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
@@ -5794,11 +5816,6 @@ promise-inflight@^1.0.1:
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
   integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
 
-promise-polyfill@^8.2.1:
-  version "8.2.3"
-  resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.3.tgz#2edc7e4b81aff781c88a0d577e5fe9da822107c6"
-  integrity sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg==
-
 promise-retry@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
@@ -6342,6 +6359,11 @@ slash@^3.0.0:
   resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
   integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
 
+slash@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
 slice-ansi@^4.0.0:
   version "4.0.0"
   resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@@ -6733,11 +6755,6 @@ timsort@^0.3.0:
   resolved "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
   integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
 
-tinymce@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-6.0.1.tgz#ec832632e398661507cc51b2a7574d17655fb9c8"
-  integrity sha512-+y3Lhm65GFs87gUfKuSWm2JA6ULHCC29trof4umIk2+TT+ql2poSsqsmRCSPN4elEo4EssIgEPFVRyPvrS/pDg==
-
 to-fast-properties@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"