@tapni/auth 1.0.4 → 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 (81) hide show
  1. package/README.md +2 -0
  2. package/dist/.vite/manifest.json +23 -40
  3. package/dist/.well-known/assetlinks.json +10 -12
  4. package/dist/.well-known/microsoft-identity-association.json +5 -5
  5. package/dist/Apps-XNA4_3B4.js +109 -0
  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-BzPu9V_c.js → install-7FOVy8Ol.js} +6328 -4767
  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 +329 -259
  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 -58
  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 -8
  27. package/src/mixins/okta.mixin.js +2 -2
  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 +7 -1
  32. package/src/services/Api.js +56 -58
  33. package/src/services/AuthService.js +13 -9
  34. package/src/services/CompanyService.js +10 -10
  35. package/src/services/DeviceService.js +3 -3
  36. package/src/services/MetadataService.js +10 -0
  37. package/src/services/UserService.js +48 -45
  38. package/src/services/UtilService.js +317 -225
  39. package/src/store/auth.js +485 -549
  40. package/src/store/constants.js +2 -2
  41. package/src/store/event-bus.js +22 -22
  42. package/src/store/locales/cn.js +476 -458
  43. package/src/store/locales/de.js +478 -517
  44. package/src/store/locales/en.js +454 -512
  45. package/src/store/locales/es.js +477 -524
  46. package/src/store/locales/fr.js +477 -516
  47. package/src/store/locales/it.js +477 -514
  48. package/src/store/locales/ja.js +488 -0
  49. package/src/store/locales/kr.js +477 -491
  50. package/src/store/locales/lang.js +51 -43
  51. package/src/store/locales/pt.js +488 -0
  52. package/src/store/locales/sr.js +477 -492
  53. package/src/store/locales/tr.js +477 -487
  54. package/src/store/store.js +6 -6
  55. package/src/views/Account.vue +36 -8
  56. package/src/views/Apps.vue +17 -30
  57. package/src/views/Billing.vue +538 -0
  58. package/src/views/Callback.vue +36 -33
  59. package/src/views/CustomApp.vue +14 -39
  60. package/src/views/General.vue +151 -184
  61. package/src/views/Login.vue +173 -161
  62. package/src/views/Register.vue +2 -12
  63. package/src/views/Reset.vue +132 -135
  64. package/src/views/Security.vue +13 -7
  65. package/src/views/Verify.vue +153 -151
  66. package/src/views/Welcome.vue +85 -71
  67. package/dist/Account-zep_QUuI.js +0 -153
  68. package/dist/Apps-B9XB7Z7q.js +0 -112
  69. package/dist/CustomApp-BzUsyycz.js +0 -112
  70. package/dist/General-DkcdjPYQ.js +0 -477
  71. package/dist/QR-PW6cAG5j.js +0 -41
  72. package/dist/index.css +0 -193
  73. package/dist/web-AXRKjAOB.js +0 -92
  74. package/src/components/DELETE_Language.vue +0 -168
  75. package/src/components/DELETE_LinkIcon.vue +0 -288
  76. package/src/components/DELETE_ModalOverlay.vue +0 -68
  77. package/src/components/DELETE_OTP.vue +0 -105
  78. package/src/components/SSO.vue +0 -126
  79. package/src/components/SSOPick.vue +0 -166
  80. package/src/mixins/DELETE_mfa-auth.mixin.js +0 -53
  81. 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-BzPu9V_c.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
- };