@tapni/auth 1.0.5 → 1.0.6-3.dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +2 -0
  2. package/dist/.vite/manifest.json +16 -43
  3. package/dist/.well-known/assetlinks.json +10 -12
  4. package/dist/.well-known/microsoft-identity-association.json +5 -5
  5. package/dist/{Apps-DMds3Dv-.js → Apps-XNA4_3B4.js} +34 -34
  6. package/dist/Billing-Br0-fHed.js +256 -0
  7. package/dist/CustomApp-CrlbYDOm.js +83 -0
  8. package/dist/QR-Bvqb60-E.js +41 -0
  9. package/dist/TapniAuth.es.js +1 -1
  10. package/dist/TapniAuth.umd.js +49 -23
  11. package/dist/{install-L-cxSovH.js → install-7FOVy8Ol.js} +6267 -4743
  12. package/dist/site.webmanifest +11 -1
  13. package/dist/style.css +1 -1
  14. package/dist/{web-IFGkBi0t.js → web-UrTMimK1.js} +2 -2
  15. package/package.json +65 -55
  16. package/src/.prettierrc.json +16 -0
  17. package/src/App.vue +326 -269
  18. package/src/eslint.config.js +15 -0
  19. package/src/index.js +4 -0
  20. package/src/install.js +9 -10
  21. package/src/main.js +54 -57
  22. package/src/mixins/apple.mixin.js +56 -54
  23. package/src/mixins/auth.mixin.js +3 -2
  24. package/src/mixins/global.mixin.js +3 -3
  25. package/src/mixins/google.mixin.js +53 -54
  26. package/src/mixins/microsoft.mixin.js +2 -5
  27. package/src/mixins/okta.mixin.js +1 -1
  28. package/src/mixins/qr-auth.mixin.js +111 -107
  29. package/src/mixins/saml.mixin.js +82 -45
  30. package/src/router/index.js +6 -6
  31. package/src/routes.js +1 -1
  32. package/src/services/Api.js +56 -58
  33. package/src/services/AuthService.js +7 -9
  34. package/src/services/CompanyService.js +10 -10
  35. package/src/services/DeviceService.js +3 -3
  36. package/src/services/UserService.js +48 -45
  37. package/src/services/UtilService.js +317 -225
  38. package/src/store/auth.js +485 -549
  39. package/src/store/constants.js +2 -2
  40. package/src/store/event-bus.js +22 -22
  41. package/src/store/locales/cn.js +476 -458
  42. package/src/store/locales/de.js +478 -517
  43. package/src/store/locales/en.js +454 -513
  44. package/src/store/locales/es.js +477 -524
  45. package/src/store/locales/fr.js +477 -516
  46. package/src/store/locales/it.js +477 -514
  47. package/src/store/locales/ja.js +488 -0
  48. package/src/store/locales/kr.js +477 -491
  49. package/src/store/locales/lang.js +51 -43
  50. package/src/store/locales/pt.js +488 -0
  51. package/src/store/locales/sr.js +477 -492
  52. package/src/store/locales/tr.js +477 -487
  53. package/src/store/store.js +6 -6
  54. package/src/views/Account.vue +36 -8
  55. package/src/views/Billing.vue +464 -34
  56. package/src/views/Callback.vue +36 -33
  57. package/src/views/General.vue +151 -185
  58. package/src/views/Login.vue +2 -25
  59. package/src/views/Register.vue +2 -12
  60. package/src/views/Reset.vue +132 -135
  61. package/src/views/Security.vue +13 -7
  62. package/src/views/Verify.vue +153 -151
  63. package/src/views/Welcome.vue +85 -71
  64. package/dist/Account-Cuz87g_8.js +0 -153
  65. package/dist/Billing-BXlQEuNy.js +0 -113
  66. package/dist/CustomApp-CLCMXmMO.js +0 -83
  67. package/dist/General-dW73bMoR.js +0 -479
  68. package/dist/QR-D6ZGcPM0.js +0 -41
  69. package/dist/index.css +0 -193
  70. package/dist/web-AXRKjAOB.js +0 -92
  71. package/src/components/DELETE_Language.vue +0 -168
  72. package/src/components/DELETE_LinkIcon.vue +0 -288
  73. package/src/components/DELETE_ModalOverlay.vue +0 -68
  74. package/src/components/DELETE_OTP.vue +0 -105
  75. package/src/components/DELETE_SSO.vue +0 -120
  76. package/src/components/DELETE_SSOPick.vue +0 -166
  77. package/src/mixins/DELETE_mfa-auth.mixin.js +0 -53
  78. package/src/mixins/facebook.mixin.js +0 -78
@@ -1,170 +1,172 @@
1
1
  <template>
2
- <form class="page-login content-boxed content-boxed-padding" @submit.prevent="submit" :style="isModal ? 'max-width: 500px;' : ''">
3
- <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right;">
4
- <i class="font-17 color-black">
5
- <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%;"/>
6
- </i>
7
- </a>
8
- <h1 class="bold no-bottom center-text" style="margin-top: 63px;">{{ssoLang[this.appLanguage].verify_account}}</h1>
9
- <p class="half-bottom half-top center-text color-black"></p>
10
- <div class="page-login-field half-top">
11
- <i style="padding-top: 15px; margin-left: 10px;">
12
- <img src="https://cdn.tapni.co/icons/mail.png" class="responsive-image" style="width: 80%;">
13
- </i>
14
- <input id="emailInput" v-model="email" @keydown.space.prevent type="email" :placeholder="ssoLang[this.appLanguage].email" required>
15
- <em></em>
16
- </div>
17
- <div class="page-login-field half-top">
18
- <i style="padding-top: 15px; margin-left: 10px;">
19
- <img src="https://cdn.tapni.co/icons/password2.png" class="responsive-image" style="width: 100%;">
20
- </i>
21
- <input id="codeInput" v-model="code" @keydown.space.prevent type="tel" :placeholder="ssoLang[this.appLanguage].code" required>
22
- <em></em>
23
- </div>
24
- <button type="submit" class="button black-button google-button bg-tapni-grey button-90 button-center uppercase bold full-top">
25
- <span v-if="!submitted" class="uppercase">{{ssoLang[this.appLanguage].verify_account}}</span>
26
- <span v-else class="button--loading button__loader"></span>
27
- </button>
28
- <div class="decoration decoration-lines-thin no-bottom"></div>
2
+ <form class="page-login content-boxed content-boxed-padding" @submit.prevent="submit" :style="isModal ? 'max-width: 500px;' : ''">
3
+ <a v-if="isModal" @click="close" class="color-black pull-right pointer" style="margin-top: 0px; position: absolute; right: -20px; text-align: right">
4
+ <i class="font-17 color-black">
5
+ <img src="https://cdn.tapni.co/icons/down-arrow.png" class="responsive-image" style="width: 35%" />
6
+ </i>
7
+ </a>
8
+ <h1 class="bold no-bottom center-text text-[24px]" style="margin-top: 63px">{{ ssoLang[this.appLanguage].verify_account }}</h1>
9
+ <p class="half-bottom half-top center-text color-black"></p>
10
+ <div class="page-login-field half-top">
11
+ <i style="padding-top: 15px; margin-left: 10px">
12
+ <img src="https://cdn.tapni.co/icons/mail.png" class="responsive-image" style="width: 80%" />
13
+ </i>
14
+ <input id="emailInput" v-model="email" @keydown.space.prevent type="email" :placeholder="ssoLang[this.appLanguage].email" required />
15
+ <em></em>
16
+ </div>
17
+ <div class="page-login-field half-top">
18
+ <i style="padding-top: 15px; margin-left: 10px">
19
+ <img src="https://cdn.tapni.co/icons/password2.png" class="responsive-image" style="width: 100%" />
20
+ </i>
21
+ <input id="codeInput" v-model="code" @keydown.space.prevent type="tel" :placeholder="ssoLang[this.appLanguage].code" required />
22
+ <em></em>
23
+ </div>
24
+ <button type="submit" class="button black-button google-button bg-tapni-grey button-90 button-center uppercase bold full-top">
25
+ <span v-if="!submitted" class="uppercase">{{ ssoLang[this.appLanguage].verify_account }}</span>
26
+ <span v-else class="button--loading button__loader"></span>
27
+ </button>
28
+ <div class="decoration decoration-lines-thin no-bottom"></div>
29
29
 
30
- <p class="close-text center-text half-top color-black">
31
- <span v-html="ssoLang[this.appLanguage].verify_account_p1"></span>
32
- <a href="mailto:support@tapni.com?subject=Email Verification"> support@tapni.com</a>
33
- </p>
30
+ <p class="close-text center-text half-top color-black">
31
+ <span v-html="ssoLang[this.appLanguage].verify_account_p1"></span>
32
+ <a href="mailto:support@tapni.com?subject=Email Verification"> support@tapni.com</a>
33
+ </p>
34
34
 
35
- <div class="decoration decoration-lines-thin no-bottom"></div>
36
- <div v-if="!isModal" class="page-login-links">
37
- <router-link class="create float-right" to="/register">{{ssoLang[this.appLanguage].register}}</router-link>
38
- <router-link class="forgot float-left" to="/login">{{ssoLang[this.appLanguage].sign_in}}</router-link>
39
- <div class="clear"></div>
40
- </div>
41
- <div v-else class="page-login-links" @click="registerAccountModal">
42
- <a class="forgot center-text pointer small-top">{{ssoLang[this.appLanguage].or}} <br> {{ssoLang[this.appLanguage].create_new_account}}</a>
43
- <div class="clear"></div>
44
- </div>
45
- </form>
35
+ <div class="decoration decoration-lines-thin no-bottom"></div>
36
+ <div v-if="!isModal" class="page-login-links">
37
+ <router-link class="create float-right" to="/register">{{ ssoLang[this.appLanguage].register }}</router-link>
38
+ <router-link class="forgot float-left" to="/login">{{ ssoLang[this.appLanguage].sign_in }}</router-link>
39
+ <div class="clear"></div>
40
+ </div>
41
+ <div v-else class="page-login-links" @click="registerAccountModal">
42
+ <a class="forgot center-text pointer small-top"
43
+ >{{ ssoLang[this.appLanguage].or }} <br />
44
+ {{ ssoLang[this.appLanguage].create_new_account }}</a
45
+ >
46
+ <div class="clear"></div>
47
+ </div>
48
+ </form>
46
49
  </template>
47
50
 
48
51
  <script>
49
- import {EventBus} from "../store/event-bus";
50
- import AuthMixin from "../mixins/auth.mixin";
52
+ import { EventBus } from '../store/event-bus';
53
+ import AuthMixin from '../mixins/auth.mixin';
51
54
  export default {
52
- name: 'AuthVerify',
53
- mixins: [AuthMixin],
54
- props: {
55
- isModal: {
56
- type: Boolean,
57
- required: false,
58
- default: false
59
- },
60
- },
61
- data () {
62
- return {
63
- loading: true,
64
- submitted: false,
65
- action: 'verify',
66
- email: '',
67
- code: '',
68
- captcha: ''
69
- }
70
- },
71
- mounted () {
72
- if (this.$storex.verifyEmail) this.email = this.$storex.verifyEmail
73
- if (this.$route) this.init()
74
- },
75
- methods: {
76
- init() {
77
- if (this.isLoggedIn) {
78
- this.$router.push(this.home)
79
- } else {
80
- if (this.$storex.verifyEmail) {
81
- this.email = this.$storex.verifyEmail
82
- }
83
- if (this.$route.hash === '#reset') {
84
- this.action = 'reset'
85
- }
86
- if (this.$route.query.e) {
87
- this.email = this.$route.query.e
88
- }
89
- if (this.$route.query.c) {
90
- this.code = this.$route.query.c
91
- }
92
- EventBus.$emit('ssoEvent', {name: 'setLoading', data: false})
93
- }
94
- },
95
- async submit() {
96
- // if (this.captcha === '') return this._vm.errorHandler({ message: 'Please select recaptcha' });
97
- if (this.code.length !== 6) {
98
- return this.errorSnack(this.ssoLang[this.appLanguage].invalid_code);
99
- }
100
-
101
- this.email = this.email.trim()
102
- this.code = this.code.trim()
55
+ name: 'AuthVerify',
56
+ mixins: [AuthMixin],
57
+ props: {
58
+ isModal: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false
62
+ }
63
+ },
64
+ data() {
65
+ return {
66
+ loading: true,
67
+ submitted: false,
68
+ action: 'verify',
69
+ email: '',
70
+ code: '',
71
+ captcha: ''
72
+ };
73
+ },
74
+ mounted() {
75
+ if (this.$storex.verifyEmail) this.email = this.$storex.verifyEmail;
76
+ if (this.$route) this.init();
77
+ },
78
+ methods: {
79
+ init() {
80
+ // if (this.isLoggedIn) {
81
+ // this.$router.push(this.home);
82
+ // } else {
83
+ if (this.$storex.verifyEmail) {
84
+ this.email = this.$storex.verifyEmail;
85
+ }
86
+ if (this.$route.hash === '#reset') {
87
+ this.action = 'reset';
88
+ }
89
+ if (this.$route.query.e) {
90
+ this.email = this.$route.query.e;
91
+ }
92
+ if (this.$route.query.c) {
93
+ this.code = this.$route.query.c;
94
+ }
95
+ EventBus.$emit('ssoEvent', { name: 'setLoading', data: false });
96
+ // }
97
+ },
98
+ async submit() {
99
+ // if (this.captcha === '') return this._vm.errorHandler({ message: 'Please select recaptcha' });
100
+ if (this.code.length !== 6) {
101
+ return this.errorSnack(this.ssoLang[this.appLanguage].invalid_code);
102
+ }
103
103
 
104
- let data = {
105
- code: this.code,
106
- email: this.email,
107
- captchaToken: await this.getCaptchaToken('account_verify')
108
- }
104
+ this.email = this.email.trim();
105
+ this.code = this.code.trim();
109
106
 
110
- if(this.submitted) return false;
111
- this.submitted = true
107
+ let data = {
108
+ code: this.code,
109
+ email: this.email,
110
+ captchaToken: await this.getCaptchaToken('account_verify')
111
+ };
112
112
 
113
- let response = await this.verify(data);
114
- this.submitted = false
115
- if (response && response.data && response.data.success === true) {
116
- if (this.action === 'reset') {
117
- this.$router.push('/reset?c=' + this.code + '&e=' + this.email)
118
- this.successSnack(this.ssoLang[this.appLanguage].verify_account_success)
119
- }
120
- if (this.action === 'verify') {
121
- if (this.isModal) {
122
- this.email = ''
123
- this.code = ''
124
- EventBus.$emit('closeModal')
125
- }
126
- await this.loginSetup(response)
127
- await this.getLoggedInAccounts()
128
- this.$storex.verifyEmail = '';
129
- this.$router.push('/' + response.data.data.username + '#edit')
130
- this.successSnack(this.ssoLang[this.appLanguage].verify_account_success2)
131
- }
132
- } else this.submitted = false
113
+ if (this.submitted) return false;
114
+ this.submitted = true;
133
115
 
134
- },
135
- registerAccountModal () {
136
- EventBus.$emit('ssoEvent', {name: 'toggleAddAccountModalRegister', data: false})
137
- },
138
- close () {
139
- EventBus.$emit('ssoEvent', {name: 'toggleAddAccountModal', data: true})
140
- },
141
- },
142
- watch: {
143
- '$storage.verifyEmail' (nv) {
144
- if (nv) this.email = nv
116
+ let response = await this.verify(data);
117
+ this.submitted = false;
118
+ if (response && response.data && response.data.success === true) {
119
+ if (this.action === 'reset') {
120
+ this.$router.push('/reset?c=' + this.code + '&e=' + this.email);
121
+ this.successSnack(this.ssoLang[this.appLanguage].verify_account_success);
122
+ }
123
+ if (this.action === 'verify') {
124
+ if (this.isModal) {
125
+ this.email = '';
126
+ this.code = '';
127
+ EventBus.$emit('closeModal');
128
+ }
129
+ await this.loginSetup(response);
130
+ await this.getLoggedInAccounts();
131
+ this.$storex.verifyEmail = '';
132
+ this.$router.push('/' + response.data.data.username + '#edit');
133
+ this.successSnack(this.ssoLang[this.appLanguage].verify_account_success2);
134
+ }
135
+ } else this.submitted = false;
136
+ },
137
+ registerAccountModal() {
138
+ EventBus.$emit('ssoEvent', { name: 'toggleAddAccountModalRegister', data: false });
139
+ },
140
+ close() {
141
+ EventBus.$emit('ssoEvent', { name: 'toggleAddAccountModal', data: true });
142
+ }
145
143
  },
146
- 'route.name' (nv, ov) {
147
- if (!ov && nv) this.init()
148
- },
149
- 'route.query': {
150
- handler(nv) {
151
- if (!this.isEmpty(nv)) this.init()
152
- },
153
- deep: true,
154
- },
155
- }
156
- }
144
+ watch: {
145
+ '$storage.verifyEmail'(nv) {
146
+ if (nv) this.email = nv;
147
+ },
148
+ 'route.name'(nv, ov) {
149
+ if (!ov && nv) this.init();
150
+ },
151
+ 'route.query': {
152
+ handler(nv) {
153
+ if (!this.isEmpty(nv)) this.init();
154
+ },
155
+ deep: true
156
+ }
157
+ }
158
+ };
157
159
  </script>
158
160
 
159
161
  <style scoped>
160
- #codeInput {
161
- text-align: center;
162
- padding-right: 15%;
163
- font-size: 17px;
164
- }
165
- #emailInput {
162
+ #codeInput {
163
+ text-align: center;
164
+ padding-right: 15%;
165
+ font-size: 17px;
166
+ }
167
+ #emailInput {
166
168
  text-align: center;
167
169
  padding-right: 15%;
168
170
  font-size: 17px;
169
- }
171
+ }
170
172
  </style>
@@ -1,84 +1,98 @@
1
1
  <template>
2
- <div class="page-login content-boxed content-boxed-padding center-text" style="margin-top: -1px; overflow: hidden; border: solid 0px #ffffff;">
3
- <video id="tapniVideo" muted loop playsinline width="350" style="margin: 0 auto; max-width: 100%; margin-top: 63px; overflow: hidden;" :autoplay="isNative">
4
- <source src="https://cdn.tapni.co/images/tapni-card-tap-video-white.mp4" type="video/mp4">
5
- </video>
6
- <h1 class="bold full-top no-bottom center-text">{{ssoLang[this.appLanguage].welcome}}</h1>
7
- <p class="full-bottom half-top center-text color-black font-16">{{ssoLang[this.appLanguage].welcome_p1}}</p>
8
- <router-link v-if="false" to="/help" class="button-center button button-90 google-button pointer edit-shadow full-top full-bottom">
9
- <span> {{ssoLang[this.appLanguage].how_it_works}}? </span>
10
- </router-link>
11
- <div v-if="false" class="decoration decoration-lines-thin full-top"></div>
12
- <router-link to="register" exact class="button-center button button-90 google-button bg-tapni-grey pointer">
13
- <span> {{ssoLang[this.appLanguage].create_account}} </span>
14
- </router-link>
15
- <!--
16
- <button @click="test" class="button-center button button-90 google-button bg-tapni-grey pointer">
17
- Test
18
- </button>
19
- -->
20
- <div class="page-login-links center-text">
21
- <router-link to="/login">{{ssoLang[this.appLanguage].already_registered}}? <b>{{ssoLang[this.appLanguage].sign_in}}</b></router-link>
22
- <div class="clear"></div>
23
- </div>
24
- <a v-if="display === 'redirect'"
25
- @click="toggleSSOLanguageModal"
26
- class="font-18 no-border pointer color-black"
27
- style="position: absolute; right: 20px; top: -10px; z-index: 1;">
28
- <span class="lang-icon">{{ appLanguage.toUpperCase() }}</span>
29
- </a>
30
- <div v-if=(!this.isNative) style="display: flex; flex-direction: row; justify-content: space-around; width: 90%; margin: 0 auto; margin-top: 40px;" >
31
- <a href="https://play.google.com/store/apps/details?id=co.tapni.app" target="_blank"><img src="https://cdn.tapni.co/images/playstore.png" class="app-store-icon pointer" style="width:55px"/></a>
32
- <a href="https://apps.apple.com/ag/app/tapni/id1552930233" target="_blank"><img src="https://cdn.tapni.co/images/appstore.png" class="app-store-icon pointer" style="width:55px"/></a>
33
- <a href="https://appgallery.huawei.com/#/app/C103931997" target="_blank"><img src="https://cdn.tapni.co/images/appgallery.png" class="app-store-icon pointer" style="width:55px"/></a>
34
- </div>
35
- </div>
2
+ <div class="page-login content-boxed content-boxed-padding center-text" style="margin-top: -1px; overflow: hidden; border: solid 0px #ffffff">
3
+ <video id="tapniVideo" muted loop playsinline width="350" style="margin: 0 auto; max-width: 100%; margin-top: 63px; overflow: hidden" :autoplay="isNative">
4
+ <source :src="videoSource" type="video/mp4" />
5
+ </video>
6
+ <h1 class="bold full-top no-bottom center-text text-[24px]">{{ welcomeTitle }}</h1>
7
+ <p class="full-bottom half-top center-text color-black font-16">{{ welcomeSubtitle }}</p>
8
+ <router-link v-if="false" to="/help" class="button-center button button-90 google-button pointer edit-shadow full-top full-bottom">
9
+ <span> {{ ssoLang[this.appLanguage].how_it_works }}? </span>
10
+ </router-link>
11
+ <div v-if="false" class="decoration decoration-lines-thin full-top"></div>
12
+ <router-link to="register" exact class="button-center button button-90 google-button bg-tapni-grey pointer">
13
+ <span> {{ ssoLang[this.appLanguage].create_account }} </span>
14
+ </router-link>
15
+ <div class="page-login-links center-text">
16
+ <router-link to="/login"
17
+ >{{ ssoLang[this.appLanguage].already_registered }}? <b>{{ ssoLang[this.appLanguage].sign_in }}</b></router-link
18
+ >
19
+ <div class="clear"></div>
20
+ </div>
21
+ <a v-if="false && display === 'redirect'" @click="toggleSSOLanguageModal" class="font-18 no-border pointer color-black" style="position: absolute; right: 20px; top: -10px; z-index: 1">
22
+ <span class="lang-icon">{{ appLanguage.toUpperCase() }}</span>
23
+ </a>
24
+ <div v-if="!this.isNative" style="display: flex; flex-direction: row; justify-content: space-around; width: 90%; margin: 0 auto; margin-top: 40px">
25
+ <a href="https://play.google.com/store/apps/details?id=co.tapni.app" target="_blank"><img src="https://cdn.tapni.co/images/playstore.png" class="app-store-icon pointer" style="width: 55px" /></a>
26
+ <a href="https://apps.apple.com/ag/app/tapni/id1552930233" target="_blank"><img src="https://cdn.tapni.co/images/appstore.png" class="app-store-icon pointer" style="width: 55px" /></a>
27
+ <a href="https://appgallery.huawei.com/#/app/C103931997" target="_blank"><img src="https://cdn.tapni.co/images/appgallery.png" class="app-store-icon pointer" style="width: 55px" /></a>
28
+ </div>
29
+ </div>
36
30
  </template>
37
31
 
38
32
  <script>
39
- import AuthMixin from "../mixins/auth.mixin";
40
- import {EventBus} from "../store/event-bus";
33
+ import AuthMixin from '../mixins/auth.mixin';
34
+ import { EventBus } from '../store/event-bus';
41
35
 
42
36
  export default {
43
- name: 'AuthWelcome',
44
- mixins: [AuthMixin],
45
- data () {
46
- return {
47
- loading: true
48
- }
49
- },
50
- async mounted () {
51
- // Autoplay video - iOS 12 controls fix
52
- let videoElement = document.getElementById('tapniVideo');
53
- // Ensure the video is ready to play
54
- videoElement.addEventListener('canplay', function() {
55
- // Check if the video element is still in the DOM
56
- if (document.body.contains(videoElement)) {
57
- try {
58
- videoElement.play()
59
- } catch (error) {
60
- console.log('Play was interrupted:', error);
61
- }
62
- }
63
- });
37
+ name: 'AuthWelcome',
38
+ mixins: [AuthMixin],
39
+ data() {
40
+ return {
41
+ loading: true
42
+ };
43
+ },
44
+ computed: {
45
+ isTapstackOrigin() {
46
+ if (typeof window === 'undefined') return false;
47
+ try {
48
+ const hostname = new URL(window.location.origin).hostname;
49
+ return /(^|\.)tapstack\.com$/i.test(hostname);
50
+ } catch (e) {
51
+ return false;
52
+ }
53
+ },
54
+ videoSource() {
55
+ return this.isTapstackOrigin ? 'https://cdn.tapni.co/images/tapstack-video.mp4' : 'https://cdn.tapni.co/images/tapni-card-tap-video-white.mp4';
56
+ },
57
+ welcomeTitle() {
58
+ return this.isTapstackOrigin ? 'Welcome' : this.ssoLang[this.appLanguage].welcome;
59
+ },
60
+ welcomeSubtitle() {
61
+ // Custom tagline for tapstack.com (alternative to tanstack)
62
+ return this.isTapstackOrigin ? 'The modern stack for interactive docs and tools' : this.ssoLang[this.appLanguage].welcome_p1;
63
+ }
64
+ },
65
+ async mounted() {
66
+ // Autoplay video - iOS 12 controls fix
67
+ let videoElement = document.getElementById('tapniVideo');
68
+ // Ensure the video is ready to play
69
+ videoElement.addEventListener('canplay', function () {
70
+ // Check if the video element is still in the DOM
71
+ if (document.body.contains(videoElement)) {
72
+ try {
73
+ videoElement.play();
74
+ } catch (error) {
75
+ console.error('Play was interrupted:', error);
76
+ }
77
+ }
78
+ });
64
79
 
65
- setTimeout(() => {
66
- if (this.$storex && this.$storex.token) {
67
- if (import.meta.env.VITE_APP_MODE === 'npm') this.$router.push(this.home);
68
- else if (import.meta.env.VITE_APP_MODE === 'redirect') location.href = this.home
69
- } else {
70
- EventBus.$emit('ssoEvent', {name: 'setLoading', data: false})
71
- }
72
- }, 500)
73
- },
74
- methods: {
75
- }
76
- }
80
+ setTimeout(() => {
81
+ if (this.$storex && this.$storex.token) {
82
+ if (import.meta.env.VITE_APP_MODE === 'npm') this.$router.push(this.home);
83
+ else if (import.meta.env.VITE_APP_MODE === 'redirect') location.href = this.home;
84
+ } else {
85
+ EventBus.$emit('ssoEvent', { name: 'setLoading', data: false });
86
+ }
87
+ }, 500);
88
+ },
89
+ methods: {}
90
+ };
77
91
  </script>
78
92
 
79
93
  <style scoped>
80
94
  .app-store-icon {
81
- box-shadow: 0px 4px 10px 0px rgb(0 0 0 / 9%);
82
- border-radius: 12px;
95
+ box-shadow: 0px 4px 10px 0px rgb(0 0 0 / 9%);
96
+ border-radius: 12px;
83
97
  }
84
98
  </style>
@@ -1,153 +0,0 @@
1
- import { _ as g, A as d, C as u, E as h } from "./install-L-cxSovH.js";
2
- import { resolveComponent as p, openBlock as _, createElementBlock as m, createCommentVNode as n, createElementVNode as o, toDisplayString as t, createVNode as a, withCtx as c } from "vue";
3
- const f = {
4
- mixins: [d],
5
- data() {
6
- return {
7
- expanded: !1,
8
- addAccountReady: !1
9
- };
10
- },
11
- computed: {
12
- appVersion() {
13
- return u.WEB_VERSION;
14
- }
15
- },
16
- async mounted() {
17
- if (!this.isLoggedIn)
18
- return this.$router.push("/");
19
- this.getAccountSettings();
20
- },
21
- methods: {
22
- continueTo(e) {
23
- console.log("continue to " + e);
24
- },
25
- addAccount() {
26
- this.$router.push("/login");
27
- },
28
- switchAccount(e) {
29
- console.log("switch", e);
30
- },
31
- toggleLanguageModal() {
32
- h.$emit("toggleSSOLanguageModal");
33
- },
34
- logoutAccount() {
35
- this.logout({ refreshToken: this.refreshTokens[0], sendRequest: !0 });
36
- }
37
- }
38
- }, v = {
39
- class: "page-login content-boxed content-boxed-padding center-text",
40
- style: { "margin-top": "-1px", overflow: "hidden", border: "solid 0px #ffffff" }
41
- }, w = /* @__PURE__ */ o("br", null, null, -1), k = { class: "bold full-top no-bottom center-text" }, b = { class: "full-bottom half-top center-text font-16" };
42
- const L = { class: "container left-text" }, y = { class: "firstRow" }, N = ["src"], R = ["src"], V = { class: "firstRow" }, A = ["src"], E = ["src"], I = { class: "firstRow" }, B = ["src"], S = ["src"], T = { class: "firstRow" }, C = ["src"], $ = ["src"], D = { class: "firstRow" }, M = ["src"], O = { class: "red-text" }, q = ["src"], F = { class: "moreFooter" }, W = {
43
- class: "app-version",
44
- style: { "margin-top": "10px" }
45
- };
46
- function j(e, r, z, G, H, l) {
47
- const s = p("router-link");
48
- return _(), m("div", v, [
49
- w,
50
- n("", !0),
51
- o("h1", k, t(e.ssoLang[e.appLanguage].welcome_account), 1),
52
- o("p", b, t(e.account.email), 1),
53
- (e.display, n("", !0)),
54
- o("div", L, [
55
- n("", !0),
56
- a(s, {
57
- to: "/general",
58
- class: "settingRow"
59
- }, {
60
- default: c(() => [
61
- o("div", y, [
62
- o("img", {
63
- src: e.getIcon("user-black.svg"),
64
- class: "withBackground"
65
- }, null, 8, N),
66
- o("h4", null, t(e.ssoLang[e.appLanguage].general), 1),
67
- o("img", {
68
- src: e.getIcon("arrow-gray-right.svg")
69
- }, null, 8, R)
70
- ])
71
- ]),
72
- _: 1
73
- }),
74
- a(s, {
75
- to: "/security",
76
- class: "settingRow"
77
- }, {
78
- default: c(() => [
79
- o("div", V, [
80
- o("img", {
81
- src: e.getIcon("shield-black.svg"),
82
- class: "withBackground"
83
- }, null, 8, A),
84
- o("h4", null, t(e.ssoLang[e.appLanguage].security), 1),
85
- o("img", {
86
- src: e.getIcon("arrow-gray-right.svg")
87
- }, null, 8, E)
88
- ])
89
- ]),
90
- _: 1
91
- }),
92
- a(s, {
93
- to: "/apps",
94
- class: "settingRow"
95
- }, {
96
- default: c(() => [
97
- o("div", I, [
98
- o("img", {
99
- src: e.getIcon("apps-black.svg"),
100
- class: "withBackground"
101
- }, null, 8, B),
102
- o("h4", null, t(e.ssoLang[e.appLanguage].apps), 1),
103
- o("img", {
104
- src: e.getIcon("arrow-gray-right.svg")
105
- }, null, 8, S)
106
- ])
107
- ]),
108
- _: 1
109
- }),
110
- a(s, {
111
- to: "/billing",
112
- class: "settingRow"
113
- }, {
114
- default: c(() => [
115
- o("div", T, [
116
- o("img", {
117
- src: e.getIcon("billing-card-black.svg"),
118
- class: "withBackground"
119
- }, null, 8, C),
120
- o("h4", null, t(e.ssoLang[e.appLanguage].billing), 1),
121
- o("img", {
122
- src: e.getIcon("arrow-gray-right.svg")
123
- }, null, 8, $)
124
- ])
125
- ]),
126
- _: 1
127
- }),
128
- o("div", {
129
- class: "settingRow",
130
- onClick: r[4] || (r[4] = (...i) => l.logoutAccount && l.logoutAccount(...i))
131
- }, [
132
- o("div", D, [
133
- o("img", {
134
- src: e.getIcon("logout-red.svg"),
135
- class: "withBackground"
136
- }, null, 8, M),
137
- o("h4", O, t(e.ssoLang[e.appLanguage].logout), 1),
138
- o("img", {
139
- src: e.getIcon("arrow-gray-right.svg")
140
- }, null, 8, q)
141
- ])
142
- ]),
143
- o("div", F, [
144
- o("p", W, t(e.ssoLang[e.appLanguage].version) + ": " + t(l.appVersion), 1),
145
- n("", !0)
146
- ])
147
- ])
148
- ]);
149
- }
150
- const Q = /* @__PURE__ */ g(f, [["render", j]]);
151
- export {
152
- Q as default
153
- };