diff --git a/.env.example b/.env.example
index c364d03..25dbfc4 100644
--- a/.env.example
+++ b/.env.example
@@ -24,3 +24,13 @@ GEETEST_ID_RESET=your-gee-test-id
GEETEST_KEY_RESET=your-geetest-key
PUSHER_API_KEY=
PUSHER_API_CLUSTER=
+
+#SSO
+GOOGLE_CLIENT_ID=
+GOOGLE_CALLBACK_URL=http://localhost/v1/auth/google/callback
+
+FACEBOOK_APP_ID=
+FACEBOOK_CALLBACK_URL=http://localhost/v1/auth/facebook/callback
+
+GITHUB_CLIENT_ID=
+GITHUB_CALLBACK_URL=http://localhost/v1/auth/github/callback
diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml
new file mode 100644
index 0000000..7b62609
--- /dev/null
+++ b/.github/workflows/vercel-preview.yaml
@@ -0,0 +1,21 @@
+name: Vercel Preview Deployment
+env:
+ VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
+on:
+ push:
+ branches:
+ - develop
+jobs:
+ Deploy-Preview:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install Vercel CLI
+ run: npm install --global vercel@latest
+ - name: Pull Vercel Environment Information
+ run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Build Project Artifacts
+ run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Deploy Project Artifacts to Vercel
+ run: vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}
diff --git a/.github/workflows/vercel-prod.yaml b/.github/workflows/vercel-prod.yaml
new file mode 100644
index 0000000..5e86d1e
--- /dev/null
+++ b/.github/workflows/vercel-prod.yaml
@@ -0,0 +1,21 @@
+name: Vercel Production Deployment
+env:
+ VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
+ VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
+on:
+ push:
+ branches:
+ - master
+jobs:
+ Deploy-Production:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install Vercel CLI
+ run: npm install --global vercel@latest
+ - name: Pull Vercel Environment Information
+ run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Build Project Artifacts
+ run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
+ - name: Deploy Project Artifacts to Vercel
+ run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
diff --git a/components/buttons/social-button-large.vue b/components/buttons/social-button-large.vue
new file mode 100644
index 0000000..486e78f
--- /dev/null
+++ b/components/buttons/social-button-large.vue
@@ -0,0 +1,50 @@
+
+
+
+
diff --git a/components/commons/social-sign.vue b/components/commons/social-sign.vue
new file mode 100644
index 0000000..c6c217b
--- /dev/null
+++ b/components/commons/social-sign.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+ {{ $t("or_sign_in_with") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/modals/integration-info.vue b/components/modals/integration-info.vue
new file mode 100644
index 0000000..ea9d875
--- /dev/null
+++ b/components/modals/integration-info.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+ {{ $t("integration") }}
+
+
+
+ {{ getCurrent.provider }}
+ {{ $t("integration_description") }}
+
+
+ {{ $moment(getCurrent.createdDate).format("ll") }}
+
+
+
+
+
+
+
+
diff --git a/components/modals/login-modal.vue b/components/modals/login-modal.vue
index d88871b..48a76ae 100644
--- a/components/modals/login-modal.vue
+++ b/components/modals/login-modal.vue
@@ -55,6 +55,7 @@
+
@@ -95,8 +96,11 @@ import GeneralLoading from "~/components/loadings/general-loading";
import { ValidationObserver } from "vee-validate";
import BasicInput from "~/components/inputs/basic-input";
import { mapGetters } from "vuex";
+import SocialSign from "~/components/commons/social-sign.vue";
+
export default {
components: {
+ SocialSign,
BasicInput,
ValidationObserver,
GeneralLoading,
diff --git a/components/modals/user-registration-modal.vue b/components/modals/user-registration-modal.vue
index 28e9aac..fa61776 100644
--- a/components/modals/user-registration-modal.vue
+++ b/components/modals/user-registration-modal.vue
@@ -72,6 +72,7 @@
+
@@ -96,7 +97,8 @@
- {{ $t("registration_done") }}
+
+ {{ $t("registration_done") }}
{{ $t("please_check_email_inbox") }}
@@ -111,8 +113,11 @@ import TosRemind from "~/components/commons/tos-remind";
import { ValidationObserver } from "vee-validate";
import BasicInput from "~/components/inputs/basic-input";
import GeneralContentLoading from "~/components/loadings/general-content-loading";
+import SocialSign from "@/components/commons/social-sign.vue";
+
export default {
components: {
+ SocialSign,
GeneralContentLoading,
BasicInput,
ValidationObserver,
diff --git a/layouts/default.vue b/layouts/default.vue
index e705dc7..f14e617 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -17,6 +17,7 @@
+
@@ -31,9 +32,11 @@ import ForgotPasswordModal from "../components/modals/forgot-password-modal";
import PurchaseModal from "../components/modals/purchase-modal";
import { mapGetters } from "vuex";
import VerifyEmail from "@/components/announcements/verify-email";
+import IntegrationInfo from "@/components/modals/integration-info.vue";
export default {
components: {
+ IntegrationInfo,
VerifyEmail,
PurchaseModal,
ForgotPasswordModal,
diff --git a/locales/en-US.js b/locales/en-US.js
index 53fa347..7ee8c64 100644
--- a/locales/en-US.js
+++ b/locales/en-US.js
@@ -1,4 +1,5 @@
import en from "vee-validate/dist/locale/en.json";
+
const messages = {
name: "Name",
firstname: "First name",
@@ -136,6 +137,16 @@ const messages = {
"Your email is not verified! Please go to your email inbox or check in Spam folder to verify",
thanks_for_purchase: "Thanks For Your Purchase",
purchase_confirmation_done: "Purchase is Confirmed",
+ or_sign_in_with: "or sign in with",
+ continue_with: "Continue with",
+ hey: "Hey",
+ we_found_that_your_email: "We found that your email address",
+ already_registered_using: "is already registered using",
+ please_sign_using: "Please sign in using",
+ then_you_can_link: "then you can link to account with other social services.",
+ integration: "Integration",
+ integration_description:
+ "account was integrated and can be used for Single Sign-On",
fields: {
firstname: "Firstname",
lastname: "Lastname",
diff --git a/locales/kh-KH.js b/locales/kh-KH.js
index 7ffcac5..e309099 100644
--- a/locales/kh-KH.js
+++ b/locales/kh-KH.js
@@ -1,4 +1,5 @@
import kh from "../static/json/kh.json";
+
const messages = {
name: "ឈ្មោះ",
firstname: "ឈ្មោះ",
@@ -138,6 +139,17 @@ const messages = {
"អ៊ីមែលរបស់អ្នកមិនត្រូវបានផ្ទៀងផ្ទាត់ទេ! សូមចូលទៅកាន់ប្រអប់សំបុត្រអ៊ីមែលរបស់អ្នក ឬពិនិត្យមើលក្នុងថតសារ Spam ដើម្បីផ្ទៀងផ្ទាត់",
thanks_for_purchase: "សូមអរគុណសំរាប់ការជាវ",
purchase_confirmation_done: "ការបញ្ជាក់រួចរាល់",
+ or_sign_in_with: "រឺ ចូលជាមួយ",
+ continue_with: "បន្តជាមួយ",
+ hey: "សួស្តី",
+ we_found_that_your_email: "យើងរកឃើញថាអ៉ីមែលរបស់អ្នក",
+ already_registered_using: "ត្រូវបានយកទៅចុះឈ្មោះម្តងហើយដោយប្រើ",
+ please_sign_using: "សូមចូលដោយប្រើ",
+ then_you_can_link:
+ "បន្ទាប់មកអ្នកអាចភ្ជាប់គណនីរបស់អ្នកទៅកាន់សេវាផ្សេងៗទៀតតាមក្រោយ។",
+ integration: "ការភ្ជាប់ជាមួយបណ្តាញផ្សេងៗ",
+ integration_description:
+ "ត្រូវបានភ្ជាប់ដើម្បីចូលគណនីនេះដោយមិនបាច់ប្រើប្រាស់លេខសំងាត់",
fields: {
firstname: "ឈ្មោះ",
lastname: "ត្រកូល",
diff --git a/middleware/check-params.js b/middleware/check-params.js
new file mode 100644
index 0000000..347bc58
--- /dev/null
+++ b/middleware/check-params.js
@@ -0,0 +1,7 @@
+export default function ({ query, redirect }) {
+ const requiredParams = ["previous", "prefer", "name", "email"];
+ const missingParams = requiredParams.filter((param) => !query[param]);
+ if (missingParams.length > 0) {
+ redirect("/");
+ }
+}
diff --git a/nuxt.config.js b/nuxt.config.js
index fa06a13..dbfb72a 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -21,8 +21,8 @@ export default {
link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }],
},
server: {
- host: "0.0.0.0",
- port: 7000,
+ // host: "0.0.0.0",
+ port: 3000,
},
// Global CSS: https://go.nuxtjs.dev/config-css
@@ -153,6 +153,7 @@ export default {
"@nuxtjs/axios",
"@nuxtjs/toast",
"@nuxtjs/auth-next",
+ // "@yashx/nuxt-auth-popup",
// [
// "@nuxtjs/google-adsense",
// {
@@ -251,10 +252,10 @@ export default {
// Nuxt Auth Plugin
auth: {
redirect: {
- login: "/",
+ login: "/login",
logout: "/",
- callback: "/",
- home: false,
+ callback: "/login",
+ home: "/",
},
resetOnError: false,
rewriteRedirects: false,
@@ -288,6 +289,59 @@ export default {
},
autoLogout: true,
},
+ google: {
+ clientId: process.env.GOOGLE_CLIENT_ID,
+ redirectUri: process.env.GOOGLE_CALLBACK_URL,
+ token: {
+ property: "accessToken",
+ type: "Bearer",
+ },
+ refreshToken: {
+ property: "refreshToken",
+ },
+ codeChallengeMethod: "",
+ responseType: "code",
+ accessType: "offline",
+ endpoints: {
+ token: `${process.env.BASE_URL}/v1/auth/google/callback`,
+ userInfo: `${process.env.BASE_URL}/v1/auth/me`,
+ },
+ },
+ github: {
+ clientId: process.env.GITHUB_CLIENT_ID,
+ // clientSecret: process.env.GITHUB_CLIENT_SECRET,
+ redirectUri: process.env.GITHUB_CALLBACK_URL,
+ token: {
+ property: "accessToken",
+ type: "Bearer",
+ },
+ refreshToken: {
+ property: "refreshToken",
+ data: "refreshToken",
+ },
+ endpoints: {
+ token: `${process.env.BASE_URL}/v1/auth/github/callback`,
+ userInfo: `${process.env.BASE_URL}/v1/auth/me`,
+ },
+ },
+ facebook: {
+ clientId: process.env.FACEBOOK_APP_ID,
+ // clientSecret: process.env.GITHUB_CLIENT_SECRET,
+ redirectUri: process.env.FACEBOOK_CALLBACK_URL,
+ token: {
+ property: "accessToken",
+ type: "Bearer",
+ },
+ refreshToken: {
+ property: "refreshToken",
+ data: "refreshToken",
+ },
+ responseType: "code",
+ endpoints: {
+ token: `${process.env.BASE_URL}/v1/auth/facebook/callback`,
+ userInfo: `${process.env.BASE_URL}/v1/auth/me`,
+ },
+ },
},
},
@@ -312,7 +366,7 @@ export default {
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
- analyze: true,
+ // analyze: true,
// Add exception
transpile: ["vee-validate/dist/rules"],
html: {
diff --git a/package.json b/package.json
index 522ad77..1050335 100644
--- a/package.json
+++ b/package.json
@@ -11,13 +11,14 @@
"dependencies": {
"@nestjsx/crud-request": "^5.0.0-alpha.3",
"@nuxt/content": "^1.15.1",
- "@nuxtjs/auth-next": "5.0.0-1624817847.21691f1",
+ "@nuxtjs/auth-next": "5.0.0-1648802546.c9880dc",
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/feed": "^2.0.0",
"@nuxtjs/sitemap": "^2.4.0",
"@nuxtjs/toast": "^3.3.1",
"@tailwindcss/forms": "^0.5.0",
"@tailwindcss/typography": "^0.5.2",
+ "@yashx/nuxt-auth-popup": "^6.0.1",
"axios": "^0.27.2",
"cookie-universal-nuxt": "^2.1.5",
"core-js": "^3.19.3",
diff --git a/pages/index.vue b/pages/index.vue
index e8ed447..b762c79 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -23,6 +23,7 @@
diff --git a/pages/login.vue b/pages/login.vue
new file mode 100644
index 0000000..0b79969
--- /dev/null
+++ b/pages/login.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pages/user/index.vue b/pages/user/index.vue
index bf7827d..e42099c 100644
--- a/pages/user/index.vue
+++ b/pages/user/index.vue
@@ -119,6 +119,111 @@
{{ getAuth.email }}
+
+
+
+ {{ $t("integration") }}
+
+
+
+
+
+
@@ -230,7 +335,7 @@
diff --git a/plugins/axios.js b/plugins/axios.js
index 2a0924f..1665d49 100644
--- a/plugins/axios.js
+++ b/plugins/axios.js
@@ -3,60 +3,92 @@ export default ({ app, store, $axios, redirect }) => {
config.headers.common["Accept-Language"] = app.i18n.locale;
// console.log(app.$auth.$storage.getState("_token.local"));
});
- /**
- * Refresh Token Upon Error
- */
$axios.onError((error) => {
- console.log("Request Error Occurred!");
const code = parseInt(error.response && error.response.status);
-
- let originalRequest = error.config;
+ console.log(error.response.data);
console.log(code);
- console.log(originalRequest.url);
- if (originalRequest.url !== "v1/auth/login") {
- // console.log("True");
- if (!app.$auth.strategy.token.get()) {
- if ([403, 401].includes(code)) {
- /**
- * Retrieve and set access and refresh token from universal storage as they are become 'false'
- */
- app.$auth.strategy.token.set(
- app.$auth.$storage.getUniversal("access")
- );
- app.$auth.strategy.refreshToken.set(
- app.$auth.$storage.getUniversal("refresh")
- );
- return new Promise((resolve, reject) => {
- app.$auth.refreshTokens().then((response) => {
- // console.log(response.status);
- if (response.status === 200) {
- /**
- * Update both tokens in universal storage
- */
- app.$auth.$storage.setUniversal(
- "access",
- `Bearer ${response.data.accessToken}`
- );
- app.$auth.$storage.setUniversal(
- "refresh",
- response.data.refreshToken
- );
- }
- resolve(response);
- });
- })
- .then((res) => {
- return $axios(originalRequest);
- })
- .catch((e) => {
- app.$auth.logout();
- setTimeout(() => {
- app.router.push("/");
- });
- });
- }
+ if (code === 400) {
+ const prefer = store.getters["setting/getLoginType"];
+ let previousRegistration = "";
+ if (error.response.data.integration.length === 0) {
+ previousRegistration = "email";
+ } else {
+ previousRegistration =
+ error.response.data.integration[0].provider.toLowerCase();
}
+
+ const name = error.response.data.user.firstname;
+ const email = error.response.data.user.email;
+ setTimeout(() => {
+ app.router.push(
+ app.localePath(
+ `/integration?previous=${previousRegistration}&prefer=${prefer}&name=${name}&email=${email}`
+ )
+ );
+ });
}
+ // console.log(prefer);
+ // console.log(code);
+ // console.log(originalRequest.url);
+ // console.log(redirect);
+ // console.log(previousRegistration);
+ // console.log(app);
});
+ /**
+ * Refresh Token Upon Error
+ */
+ // $axios.onError((error) => {
+ // console.log("Request Error Occurred!");
+ // const code = parseInt(error.response && error.response.status);
+ //
+ // let originalRequest = error.config;
+ // console.log(code);
+ // console.log(originalRequest.url);
+ // if (originalRequest.url !== "v1/auth/login") {
+ // // console.log("True");
+ // if (!app.$auth.strategy.token.get()) {
+ // if ([403, 401].includes(code)) {
+ // /**
+ // * Retrieve and set access and refresh token from universal storage as they are become 'false'
+ // */
+ // app.$auth.strategy.token.set(
+ // app.$auth.$storage.getUniversal("access")
+ // );
+ // app.$auth.strategy.refreshToken.set(
+ // app.$auth.$storage.getUniversal("refresh")
+ // );
+ // return new Promise((resolve, reject) => {
+ // app.$auth.refreshTokens().then((response) => {
+ // // console.log(response.status);
+ // if (response.status === 200) {
+ // /**
+ // * Update both tokens in universal storage
+ // */
+ // app.$auth.$storage.setUniversal(
+ // "access",
+ // `Bearer ${response.data.accessToken}`
+ // );
+ // app.$auth.$storage.setUniversal(
+ // "refresh",
+ // response.data.refreshToken
+ // );
+ // }
+ // resolve(response);
+ // });
+ // })
+ // .then((res) => {
+ // return $axios(originalRequest);
+ // })
+ // .catch((e) => {
+ // app.$auth.logout();
+ //
+ // setTimeout(() => {
+ // app.router.push("/");
+ // });
+ // });
+ // }
+ // }
+ // }
+ // });
};
diff --git a/plugins/vuex-persist.client.js b/plugins/vuex-persist.client.js
index 972fcbd..bc53e83 100644
--- a/plugins/vuex-persist.client.js
+++ b/plugins/vuex-persist.client.js
@@ -4,6 +4,6 @@ import VuexPersistence from "vuex-persist";
export default ({ store }) => {
new VuexPersistence({
/* your options */
- modules: ["auth"],
+ modules: ["auth", "setting"],
}).plugin(store);
};
diff --git a/store/integration/actions.js b/store/integration/actions.js
new file mode 100644
index 0000000..896a740
--- /dev/null
+++ b/store/integration/actions.js
@@ -0,0 +1,8 @@
+export default {
+ async fetchIntegration({ commit }, id) {
+ const integrations = await this.$axios.$get(
+ `v1/user-own-management/${id}/integrations`
+ );
+ commit("SET_INTEGRATION", integrations);
+ },
+};
diff --git a/store/integration/getters.js b/store/integration/getters.js
new file mode 100644
index 0000000..14aa10f
--- /dev/null
+++ b/store/integration/getters.js
@@ -0,0 +1,4 @@
+export default {
+ getIntegration: (state) => state.integration,
+ getCurrent: (state) => state.current,
+};
diff --git a/store/integration/mutations.js b/store/integration/mutations.js
new file mode 100644
index 0000000..e251487
--- /dev/null
+++ b/store/integration/mutations.js
@@ -0,0 +1,8 @@
+export default {
+ SET_INTEGRATION(state, integration) {
+ state.integration = integration;
+ },
+ SET_CURRENT(state, current) {
+ state.current = current;
+ },
+};
diff --git a/store/integration/state.js b/store/integration/state.js
new file mode 100644
index 0000000..bb873df
--- /dev/null
+++ b/store/integration/state.js
@@ -0,0 +1,5 @@
+export default () => ({
+ integration: [],
+ current: {},
+ target: "",
+});
diff --git a/store/setting/getters.js b/store/setting/getters.js
index f5d9f96..423ac49 100644
--- a/store/setting/getters.js
+++ b/store/setting/getters.js
@@ -1,3 +1,4 @@
export default {
getBannerCookie: (state) => state.cookieBanner,
+ getLoginType: (state) => state.loginType,
};
diff --git a/store/setting/mutations.js b/store/setting/mutations.js
index cf7f4dd..b836074 100644
--- a/store/setting/mutations.js
+++ b/store/setting/mutations.js
@@ -2,4 +2,7 @@ export default {
SET_BANNER_SETTING(state, cookie) {
state.cookieBanner = cookie;
},
+ SET_LOGIN_TYPE(state, type) {
+ state.loginType = type;
+ },
};
diff --git a/store/setting/state.js b/store/setting/state.js
index 533649e..7b24f4c 100644
--- a/store/setting/state.js
+++ b/store/setting/state.js
@@ -1,3 +1,4 @@
export default () => ({
cookieBanner: true,
+ loginType: "",
});
diff --git a/yarn.lock b/yarn.lock
index ff8fd09..16126f8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1518,22 +1518,22 @@
webpack-node-externals "^3.0.0"
webpackbar "^4.0.0"
-"@nuxtjs/auth-next@5.0.0-1624817847.21691f1":
- version "5.0.0-1624817847.21691f1"
- resolved "https://registry.yarnpkg.com/@nuxtjs/auth-next/-/auth-next-5.0.0-1624817847.21691f1.tgz#28b92625ac5817d8083f8b42dd184a88caefbe96"
- integrity sha512-PsHhLtzglMnwM2o16mgM7zQ3KwTI7AIg2ja3IFYujbs9s1w8HvnRD3byMRj1WZo0vXEBRh3u3nHxKEBIbFe1Xg==
- dependencies:
- "@nuxtjs/axios" "^5.13.0"
- axios "^0.21.1"
- body-parser "^1.19.0"
+"@nuxtjs/auth-next@5.0.0-1648802546.c9880dc":
+ version "5.0.0-1648802546.c9880dc"
+ resolved "https://registry.yarnpkg.com/@nuxtjs/auth-next/-/auth-next-5.0.0-1648802546.c9880dc.tgz#fe01e44c9ccbcfa876a19104e0c977f42ac69be3"
+ integrity sha512-L4IxKQDEP2Z85TZRyz+jNl9lWFjj/AmPWMwKjJLrcGz3Ubh1dGV4aXGfmtqeZmwGSr4vOqSd7MYCYwXTbk1cPA==
+ dependencies:
+ "@nuxtjs/axios" "^5.13.6"
+ axios "^0.26.1"
+ body-parser "^1.19.2"
consola "^2.15.3"
- cookie "^0.4.1"
- defu "^3.2.2"
+ cookie "^0.4.2"
+ defu "^5.0.1"
hasha "^5.2.2"
jwt-decode "^3.1.2"
requrl "^3.0.2"
-"@nuxtjs/axios@^5.13.0", "@nuxtjs/axios@^5.13.6":
+"@nuxtjs/axios@^5.13.6":
version "5.13.6"
resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.13.6.tgz#6f4bbd98a3a7799a5d2c0726c6ad2a98aa111881"
integrity sha512-XS+pOE0xsDODs1zAIbo95A0LKlilvJi8YW0NoXYuq3/jjxGgWDxizZ6Yx0AIIjZOoGsXJOPc0/BcnSEUQ2mFBA==
@@ -2461,6 +2461,21 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+"@yashx/nuxt-auth-popup@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@yashx/nuxt-auth-popup/-/nuxt-auth-popup-6.0.1.tgz#560296879b5532765f310f251df905e8d2416948"
+ integrity sha512-bUGzQL8uMVZ8eT/yUrFv5DMn9EBl8BV5W6/8QKwNYo+drKVyVPet/qTke6Yv+Qph4Fsnjh7RjktDd/OqRI/B/Q==
+ dependencies:
+ "@nuxtjs/axios" "^5.13.6"
+ axios "^0.26.1"
+ body-parser "^1.19.2"
+ consola "^2.15.3"
+ cookie "^0.4.2"
+ defu "^5.0.1"
+ hasha "^5.2.2"
+ jwt-decode "^3.1.2"
+ requrl "^3.0.2"
+
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -2861,6 +2876,13 @@ axios@^0.21.1:
dependencies:
follow-redirects "^1.14.0"
+axios@^0.26.1:
+ version "0.26.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
+ integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
+ dependencies:
+ follow-redirects "^1.14.8"
+
axios@^0.27.2:
version "0.27.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
@@ -3043,7 +3065,7 @@ bn.js@^5.0.0, bn.js@^5.1.1:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
-body-parser@1.20.0, body-parser@^1.19.0:
+body-parser@1.20.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5"
integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==
@@ -3061,6 +3083,24 @@ body-parser@1.20.0, body-parser@^1.19.0:
type-is "~1.6.18"
unpipe "1.0.0"
+body-parser@^1.19.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.5"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ on-finished "2.4.1"
+ qs "6.11.0"
+ raw-body "2.5.2"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
+
boolbase@^1.0.0, boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -3470,9 +3510,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001317:
- version "1.0.30001464"
- resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz"
- integrity sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==
+ version "1.0.30001571"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz"
+ integrity sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==
capital-case@^1.0.4:
version "1.0.4"
@@ -3955,6 +3995,11 @@ content-type@^1.0.4, content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+content-type@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
convert-source-map@^1.7.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
@@ -3993,7 +4038,7 @@ cookie@^0.3.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
-cookie@^0.4.0, cookie@^0.4.1:
+cookie@^0.4.0, cookie@^0.4.1, cookie@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
@@ -4635,7 +4680,7 @@ defu@^4.0.1:
resolved "https://registry.yarnpkg.com/defu/-/defu-4.0.1.tgz#9d7d7a48f9295f08285d153dcff174c89b9bcb22"
integrity sha512-lC+G0KvvWRbisQa50+iFelm3/eMmwo4IlBmfASOVlw9MZpHHyQeVsZxc5j23+TQy5ydgEoTVSrWl7ptou1kzJQ==
-defu@^5.0.0:
+defu@^5.0.0, defu@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/defu/-/defu-5.0.1.tgz#a034278f9b032bf0845d261aa75e9ad98da878ac"
integrity sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ==
@@ -5883,6 +5928,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9:
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
+follow-redirects@^1.14.8:
+ version "1.15.3"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
+ integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
+
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -10817,7 +10867,7 @@ qs@6.10.3, qs@^6.5.2, qs@^6.9.4:
dependencies:
side-channel "^1.0.4"
-qs@^6.8.0:
+qs@6.11.0, qs@^6.8.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
@@ -10916,6 +10966,16 @@ raw-body@2.5.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
raw-loader@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"