@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
package/src/store/auth.js CHANGED
@@ -1,574 +1,510 @@
1
- import to from "await-to-js";
2
- import UserService from "../services/UserService";
3
- import DeviceService from "../services/DeviceService";
4
- import AuthService from "../services/AuthService";
5
- import CompanyService from "../services/CompanyService";
6
- import { Device } from "@capacitor/device";
7
- import axios from "axios";
8
- import en from "../store/locales/en.js";
9
- import de from "../store/locales/de.js";
10
- import es from "../store/locales/es.js";
11
- import fr from "../store/locales/fr.js";
12
- import it from "../store/locales/it.js";
13
- import sr from "../store/locales/sr.js";
14
- import tr from "../store/locales/tr.js";
15
- import cn from "../store/locales/cn.js";
16
- import kr from "../store/locales/kr.js";
17
- import {EventBus} from "@/store/event-bus.js";
1
+ import to from 'await-to-js';
2
+ import UserService from '../services/UserService';
3
+ import DeviceService from '../services/DeviceService';
4
+ import AuthService from '../services/AuthService';
5
+ import CompanyService from '../services/CompanyService';
6
+ import { Device } from '@capacitor/device';
7
+ import axios from 'axios';
8
+ import en from '../store/locales/en.js';
9
+ import de from '../store/locales/de.js';
10
+ import es from '../store/locales/es.js';
11
+ import fr from '../store/locales/fr.js';
12
+ import it from '../store/locales/it.js';
13
+ import sr from '../store/locales/sr.js';
14
+ import tr from '../store/locales/tr.js';
15
+ import cn from '../store/locales/cn.js';
16
+ import kr from '../store/locales/kr.js';
17
+ import ja from '../store/locales/ja.js';
18
+ import pt from '../store/locales/pt.js';
19
+ import { EventBus } from '@/store/event-bus.js';
18
20
  import router from '../router/index.js';
19
21
  export default {
20
- namespaced: true,
21
- state: {
22
- $storex: {},
23
- view: "",
24
- lang: "en",
25
- realm: "app",
26
- refreshing: false,
27
- loggedInUserId: "",
28
- apiRoot: "",
29
- account: {},
30
- device: {},
31
- loggedInAccounts: {},
32
- ssoLang: {
33
- en: en.state,
34
- de: de.state,
35
- es: es.state,
36
- fr: fr.state,
37
- it: it.state,
38
- sr: sr.state,
39
- tr: tr.state,
40
- cn: cn.state,
41
- kr: kr.state,
42
- },
43
- display: import.meta.env.VITE_APP_MODE,
44
- redirect_uri: import.meta.env.VITE_APP_APP_ROOT + "/callback/auth",
45
- response_type: "token",
46
- state: "",
47
- allowedOriginsAuth: [
48
- "https://business.tapni.com",
49
- "https://business-dev.tapni.com",
50
- "https://tapni.com",
51
- "https://tapni.co",
52
- "https://t.link",
53
- "https://my.tapni.com",
54
- "https://my.tapni.co",
55
- "https://dev.tapni.co",
56
- "https://dev.tapni.com",
57
- "https://auth.tapni.com",
58
- "https://auth.tapni.co",
59
- "https://mailsign.link",
60
- "https://sign.tapni.com",
61
- "https://qrcodetoolkit.com",
62
- "https://qr.tapni.com",
63
- "https://designer.tapni.com",
64
- "https://designer-dev.tapni.com",
65
- "http://localhost:8082",
66
- "http://localhost:7777",
67
- "http://localhost:8086",
68
- "https://localhost:8085",
69
- "http://localhost:8085"
70
- ],
71
- },
72
- mutations: {
73
- setAccountSettings(state, account) {
74
- state.account = account;
75
- },
76
- setStorageItem(state, item) {
77
- state.$storex[item.name] = item.data;
78
- },
79
- setStorage(state, storage) {
80
- state.$storex = {
81
- ...state.$storex,
82
- ...storage
83
- };
84
- },
85
- setLoggedInAccounts(state, accounts) {
86
- state.loggedInAccounts = {};
87
- accounts.forEach((account) => {
88
- state.loggedInAccounts[account.username] = account;
89
- });
90
- },
91
- setLoggedInUserId(state, id) {
92
- state.loggedInUserId = id;
93
- },
94
- setRefreshTokens(state, refreshTokens) {
95
- state.$storex.refreshTokens = refreshTokens;
96
- },
97
- setRefreshToken(state, token) {
98
- if(!token) return;
99
- let refreshTokens = state.$storex.refreshTokens ? state.$storex.refreshTokens.split(",") : [];
100
- refreshTokens = [token, ...refreshTokens.filter(t => t !== token)];
101
- state.$storex.refreshTokens = refreshTokens.join(",");
102
- },
103
- setToken(state, token) {
104
- state.$storex.token = token;
105
- },
106
- updateLang(state, lang) {
107
- state.lang = lang;
108
- },
109
- setView(state, view) {
110
- state.view = view;
111
- },
112
- setRedirectUri(state, uri) {
113
- state.redirect_uri = uri;
114
- },
115
- setDisplay(state, display) {
116
- state.display = display;
117
- },
118
- setState(state, stateValue) {
119
- state.state = stateValue;
120
- },
121
- setResponseType(state, responseType) {
122
- state.response_type = responseType;
123
- },
124
- setRealm(state, realm) {
125
- state.realm = realm;
126
- },
127
- setApiRoot(state, apiRoot) {
128
- state.apiRoot = apiRoot;
129
- },
130
- },
131
- actions: {
132
- async getAccountSettings({ state, commit, dispatch }) {
133
- const [err, response] = await to(
134
- AuthService.getAccountSettings()
135
- );
136
- if (err) return dispatch('errorHandler', err);
137
- if (response.data.success) {
138
- commit('setAccountSettings', response.data.data);
139
- }
140
- },
141
- setStorageItem({ commit }, item) {
142
- commit('setStorageItem', item);
143
- },
144
- setStorage({ commit }, storage) {
145
- commit('setStorage', storage);
146
- },
147
- errorHandler({ dispatch }, error) {
148
- if (
149
- error &&
150
- error.response &&
151
- error.response.data &&
152
- error.response.data.error
153
- ) {
154
- if (error.response.data.error === "ACCESS_DENIED") {
155
- return dispatch('logout');
156
- }
22
+ namespaced: true,
23
+ state: {
24
+ $storex: {},
25
+ view: '',
26
+ lang: 'en',
27
+ realm: 'app',
28
+ refreshing: false,
29
+ loggedInUserId: '',
30
+ apiRoot: '',
31
+ account: {},
32
+ device: {},
33
+ loggedInAccounts: {},
34
+ ssoLang: {
35
+ en: en.state,
36
+ de: de.state,
37
+ es: es.state,
38
+ fr: fr.state,
39
+ it: it.state,
40
+ sr: sr.state,
41
+ tr: tr.state,
42
+ cn: cn.state,
43
+ kr: kr.state,
44
+ pt: pt.state,
45
+ ja: ja.state
46
+ },
47
+ display: import.meta.env.VITE_APP_MODE,
48
+ redirect_uri: import.meta.env.VITE_APP_APP_ROOT + '/app/callback/auth',
49
+ response_type: 'token',
50
+ state: '',
51
+ allowedOriginsAuth: ['https://business.tapni.com', 'https://business-dev.tapni.com', 'https://tapni.com', 'https://tapni.co', 'https://t.link', 'https://my.tapni.com', 'https://my.tapni.co', 'https://dev.tapni.co', 'https://dev.tapni.com', 'https://auth.tapni.com', 'https://auth.tapni.co', 'https://dev.mailsign.link', 'https://mailsign.link', 'https://sign.tapni.com', 'https://qrcodetoolkit.com', 'https://qr.tapni.com', 'https://designer.tapni.com', 'https://designer-dev.tapni.com', 'http://localhost:8080', 'https://localhost:8080', 'http://localhost:8081', 'http://localhost:7777', 'https://localhost:7777', 'http://localhost:8086', 'https://localhost:8085', 'http://localhost:8085', 'http://localhost', 'https://localhost', 'https://bigeye.tapni.com', 'https://bigeye-dev.tapni.com']
52
+ },
53
+ mutations: {
54
+ setAccountSettings(state, account) {
55
+ state.account = account;
56
+ },
57
+ setStorageItem(state, item) {
58
+ state.$storex[item.name] = item.data;
59
+ },
60
+ setStorage(state, storage) {
61
+ state.$storex = {
62
+ ...state.$storex,
63
+ ...storage
64
+ };
65
+ },
66
+ setLoggedInAccounts(state, accounts) {
67
+ state.loggedInAccounts = {};
68
+ accounts.forEach((account) => {
69
+ state.loggedInAccounts[account.username] = account;
70
+ });
71
+ },
72
+ setLoggedInUserId(state, id) {
73
+ state.loggedInUserId = id;
74
+ },
75
+ setRefreshTokens(state, refreshTokens) {
76
+ state.$storex.refreshTokens = refreshTokens;
77
+ },
78
+ setRefreshToken(state, token) {
79
+ if (!token) return;
80
+ let refreshTokens = state.$storex.refreshTokens ? state.$storex.refreshTokens.split(',') : [];
81
+ refreshTokens = [token, ...refreshTokens.filter((t) => t !== token)];
82
+ state.$storex.refreshTokens = refreshTokens.join(',');
83
+ },
84
+ setToken(state, token) {
85
+ state.$storex.token = token;
86
+ },
87
+ updateLang(state, lang) {
88
+ state.lang = lang;
89
+ },
90
+ setView(state, view) {
91
+ state.view = view;
92
+ },
93
+ setRedirectUri(state, uri) {
94
+ state.redirect_uri = uri;
95
+ },
96
+ setDisplay(state, display) {
97
+ state.display = display;
98
+ },
99
+ setState(state, stateValue) {
100
+ state.state = stateValue;
101
+ },
102
+ setResponseType(state, responseType) {
103
+ state.response_type = responseType;
104
+ },
105
+ setRealm(state, realm) {
106
+ state.realm = realm;
107
+ },
108
+ setApiRoot(state, apiRoot) {
109
+ state.apiRoot = apiRoot;
110
+ }
111
+ },
112
+ actions: {
113
+ async getAccountSettings({ state, commit, dispatch }) {
114
+ const [err, response] = await to(AuthService.getAccountSettings());
115
+ if (err) return dispatch('errorHandler', err);
116
+ if (response.data.success) {
117
+ commit('setAccountSettings', response.data.data);
118
+ }
119
+ },
120
+ setStorageItem({ commit }, item) {
121
+ commit('setStorageItem', item);
122
+ },
123
+ setStorage({ commit }, storage) {
124
+ commit('setStorage', storage);
125
+ },
126
+ errorHandler({ dispatch }, error) {
127
+ if (error && error.response && error.response.data && error.response.data.error) {
128
+ if (error.response.data.error === 'ACCESS_DENIED') {
129
+ return dispatch('logout');
130
+ }
157
131
 
158
- if (error.response.data.error === 'OTP_REQUIRED') {
159
- return EventBus.$emit('toggleOTPField', true);
160
- }
132
+ if (error.response.data.error === 'OTP_REQUIRED') {
133
+ return EventBus.$emit('toggleOTPField', true);
134
+ }
161
135
 
162
- // Link click network error bug fix
163
- if (
164
- !error.response.data.error.includes("Network Error") &&
165
- !error.response.data.error.includes("TOKEN_EXPIRED") &&
166
- !error.response.data.error.includes("Cannot read properties")
167
- ) {
168
- dispatch('errorSnack', error.response.data.error);
169
- }
170
- }
171
- return error;
172
- },
173
- errorSnack({ commit }, message) {
174
- let snackbar = document.getElementById("snackbar");
175
- let errMessage = document.getElementById("errorMessage");
176
- let errorSnack = document.getElementById("errorSnack");
177
- errMessage.innerHTML = message;
178
- snackbar.classList.add("show-snack");
179
- errorSnack.classList.add("active-snack");
180
- setTimeout(function () {
181
- errorSnack.classList.remove("active-snack");
182
- snackbar.classList.remove("show-snack");
183
- }, 3000);
184
- },
185
- successSnack({ commit }, message) {
186
- let snackbar = document.getElementById("snackbar");
187
- let successMessage = document.getElementById("successMessage");
188
- let successSnack = document.getElementById("successSnack");
189
- successMessage.innerHTML = message;
190
- snackbar.classList.add("show-snack");
191
- successSnack.classList.add("active-snack");
192
- setTimeout(function () {
193
- successSnack.classList.remove("active-snack");
194
- snackbar.classList.remove("show-snack");
195
- }, 3000);
196
- },
197
- closeSnacks({ commit }) {
198
- document.getElementById("snackbar").classList.remove("show-snack");
199
- document.getElementById("successSnack").classList.remove("active-snack");
200
- document.getElementById("errorSnack").classList.remove("active-snack");
201
- },
202
- async eventLog({ commit, dispatch }, data) {
203
- const [err, response] = await to(
204
- UserService.eventLog(data)
205
- );
206
- if (err) return dispatch('errorHandler', err);
207
- return response;
208
- },
209
- async maintenance({ commit }) {
210
- const [err, response] = await to(
211
- axios.get("https://status.tapni.co/data/maintenance.json")
212
- );
213
- if (err) return console.error(err);
214
- if (response) {
215
- let maintenanceState = response.data;
216
- if (typeof response.data === "string") {
217
- maintenanceState = JSON.parse(response.data);
218
- }
136
+ // Link click network error bug fix
137
+ if (!error.response.data.error.includes('Network Error') && !error.response.data.error.includes('TOKEN_EXPIRED') && !error.response.data.error.includes('Cannot read properties')) {
138
+ dispatch('errorSnack', error.response.data.error);
139
+ }
140
+ }
141
+ return error;
142
+ },
143
+ errorSnack({ commit }, message) {
144
+ let snackbar = document.getElementById('snackbar');
145
+ let errMessage = document.getElementById('errorMessage');
146
+ let errorSnack = document.getElementById('errorSnack');
147
+ errMessage.innerHTML = message;
148
+ snackbar.classList.add('show-snack');
149
+ errorSnack.classList.add('active-snack');
150
+ setTimeout(function () {
151
+ errorSnack.classList.remove('active-snack');
152
+ snackbar.classList.remove('show-snack');
153
+ }, 3000);
154
+ },
155
+ successSnack({ commit }, message) {
156
+ let snackbar = document.getElementById('snackbar');
157
+ let successMessage = document.getElementById('successMessage');
158
+ let successSnack = document.getElementById('successSnack');
159
+ successMessage.innerHTML = message;
160
+ snackbar.classList.add('show-snack');
161
+ successSnack.classList.add('active-snack');
162
+ setTimeout(function () {
163
+ successSnack.classList.remove('active-snack');
164
+ snackbar.classList.remove('show-snack');
165
+ }, 3000);
166
+ },
167
+ closeSnacks({ commit }) {
168
+ document.getElementById('snackbar').classList.remove('show-snack');
169
+ document.getElementById('successSnack').classList.remove('active-snack');
170
+ document.getElementById('errorSnack').classList.remove('active-snack');
171
+ },
172
+ async eventLog({ commit, dispatch }, data) {
173
+ const [err, response] = await to(UserService.eventLog(data));
174
+ if (err) return dispatch('errorHandler', err);
175
+ return response;
176
+ },
177
+ async maintenance({ commit }) {
178
+ const [err, response] = await to(axios.get('https://status.tapni.co/data/maintenance.json'));
179
+ if (err) return console.error(err);
180
+ if (response) {
181
+ let maintenanceState = response.data;
182
+ if (typeof response.data === 'string') {
183
+ maintenanceState = JSON.parse(response.data);
184
+ }
219
185
 
220
- if (maintenanceState.api && maintenanceState.api.maintenanceActive) {
221
- location.href =
222
- "https://t.link/maintenance?msg=" + maintenanceState.api.msg;
223
- }
224
- }
225
- },
226
- async loginSetup({ commit, dispatch }, response) {
227
- // Save Refresh Token
228
- if (response.data.refreshToken) commit('setRefreshToken', response.data.refreshToken);
186
+ if (maintenanceState.api && maintenanceState.api.maintenanceActive) {
187
+ location.href = 'https://t.link/maintenance?msg=' + maintenanceState.api.msg;
188
+ }
189
+ }
190
+ },
191
+ async loginSetup({ commit, dispatch }, response) {
192
+ // Save Refresh Token
193
+ if (response.data.refreshToken) commit('setRefreshToken', response.data.refreshToken);
229
194
 
230
- // Save Access Token
231
- if (response.data.token) commit('setToken', response.data.token);
195
+ // Save Access Token
196
+ if (response.data.token) commit('setToken', response.data.token);
232
197
 
233
- commit('setLoggedInUserId', response.data.data.id);
198
+ commit('setLoggedInUserId', response.data.data.id);
234
199
 
235
- commit('setStorage', {
236
- UserId: response.data.data.id,
237
- username: response.data.data.username,
238
- localUser: response.data.data
239
- })
200
+ commit('setStorage', {
201
+ UserId: response.data.data.id,
202
+ username: response.data.data.username,
203
+ localUser: response.data.data
204
+ });
240
205
 
241
- if (response.isModal === true) {
242
- dispatch('setLoggedInAccounts', [
243
- {
244
- id: response.data.data.id,
245
- username: response.data.data.username,
246
- name: response.data.data.name,
247
- refreshToken: response.data.refreshToken,
248
- photo: response.data.data.photo,
249
- },
250
- ]);
251
- }
252
- },
253
- async switchAccount({ commit, dispatch, state }, username) {
254
- if (state.loggedInAccounts[username]) {
255
- commit('setStorage', {
256
- username: username,
257
- UserId: state.loggedInAccounts[username].id,
258
- localUser: state.loggedInAccounts[username]
259
- })
260
- commit('setLoggedInUserId', state.loggedInAccounts[username].id);
261
- commit('setRefreshToken', state.loggedInAccounts[username].refreshToken);
262
- await dispatch('refreshTokenAction', state.loggedInAccounts[username]);
263
- }
264
- EventBus.$emit("ssoEvent", { name: "switchAccount", data: { username }, });
265
- },
266
- async refreshTokenAction({ dispatch, commit, state, getters }, data) {
267
- if (state.refreshing) {
268
- return null;
269
- }
206
+ if (response.isModal === true) {
207
+ dispatch('setLoggedInAccounts', [
208
+ {
209
+ id: response.data.data.id,
210
+ username: response.data.data.username,
211
+ name: response.data.data.name,
212
+ refreshToken: response.data.refreshToken,
213
+ photo: response.data.data.photo
214
+ }
215
+ ]);
216
+ }
217
+ },
218
+ async switchAccount({ commit, dispatch, state }, username) {
219
+ if (state.loggedInAccounts[username]) {
220
+ commit('setStorage', {
221
+ username: username,
222
+ UserId: state.loggedInAccounts[username].id,
223
+ localUser: state.loggedInAccounts[username]
224
+ });
225
+ commit('setLoggedInUserId', state.loggedInAccounts[username].id);
226
+ commit('setRefreshToken', state.loggedInAccounts[username].refreshToken);
227
+ await dispatch('refreshTokenAction', state.loggedInAccounts[username]);
228
+ }
229
+ EventBus.$emit('ssoEvent', { name: 'switchAccount', data: { username } });
230
+ },
231
+ async refreshTokenAction({ dispatch, commit, state, getters }, data) {
232
+ if (state.refreshing) {
233
+ return null;
234
+ }
270
235
 
271
- state.refreshing = true;
272
- const [err, response] = await to(
273
- AuthService.refreshToken({
274
- id: data.id,
275
- refreshToken: getters.refreshTokens[0],
276
- refreshTokenAction: true
277
- })
278
- );
279
- if (err && err.response && err.response.data.error === "ACCESS_DENIED") {
280
- dispatch('logout', { refreshToken: data.refreshToken, sendRequest: false });
281
- return location.reload();
282
- }
236
+ state.refreshing = true;
237
+ const [err, response] = await to(
238
+ AuthService.refreshToken({
239
+ id: data.id,
240
+ refreshToken: getters.refreshTokens[0],
241
+ refreshTokenAction: true
242
+ })
243
+ );
244
+ if (err && err.response && err.response.data.error === 'ACCESS_DENIED') {
245
+ dispatch('logout', { refreshToken: getters.refreshTokens[0] });
283
246
 
284
- // Set new access token
285
- if (response && response.data) {
286
- commit('setToken', response.data.token);
287
- EventBus.$emit("ssoEvent", { name: "setStorage", data: state.$storex });
288
- }
289
- state.refreshing = false;
290
- },
291
- async login({ commit, state, dispatch }, data) {
292
- const [err, response] = await to(AuthService.login(data));
293
- if (err) return dispatch('errorHandler', err);
294
- if (response.data.success) {
295
- if (state.display !== 'popup') {
296
- dispatch('loginSetup', { ...response, isModal: data.isModal });
297
- await dispatch('getLoggedInAccounts');
298
- }
247
+ setTimeout(() => {
248
+ return location.reload();
249
+ }, 1500);
250
+ }
299
251
 
300
- dispatch('loginSuccess', { ...response, isModal: data.isModal });
252
+ // Set new access token
253
+ if (response && response.data) {
254
+ commit('setToken', response.data.token);
255
+ EventBus.$emit('ssoEvent', { name: 'setStorage', data: state.$storex });
256
+ }
257
+ state.refreshing = false;
258
+ },
259
+ async login({ commit, state, dispatch }, data) {
260
+ const [err, response] = await to(AuthService.login(data));
301
261
 
302
- return true;
303
- }
304
- },
305
- loginSuccess({ commit, state, dispatch, getters }, response) {
306
- if (state.display === "redirect") {
307
- if (state.redirect_uri &&
308
- !state.allowedOriginsAuth.some((domain) =>
309
- state.redirect_uri.startsWith(domain)
310
- )
311
- ) {
312
- return console.error("Redirect URI not allowed");
313
- }
262
+ if (err) return dispatch('errorHandler', err);
263
+ if (response.data.success) {
264
+ if (state.display !== 'popup') {
265
+ dispatch('loginSetup', { ...response, isModal: data.isModal });
266
+ await dispatch('getLoggedInAccounts');
267
+ }
314
268
 
315
- return router.push('/account');
269
+ dispatch('loginSuccess', { ...response, isModal: data.isModal });
316
270
 
317
- location.href = state.redirect_uri +
318
- "?code=" +
319
- response.data.auth_code +
320
- "&state=" +
321
- state.state;
322
- } else if (state.display === "popup") {
323
- state.allowedOriginsAuth.forEach((domain) => {
324
- window.parent?.postMessage(
325
- { code: response.data.auth_code, state: state.state },
326
- domain
327
- );
328
- });
329
- } else if (state.display === 'npm') {
330
- EventBus.$emit('ssoEvent', {name: 'setLoading', data: true})
331
- EventBus.$emit("ssoEvent", { name: "setStorage", data: state.$storex });
332
- EventBus.$emit("ssoEvent", { name: "getUser", data: {username: response.data.data.username} });
271
+ return true;
272
+ }
273
+ },
274
+ loginSuccess({ commit, state, dispatch, getters }, response) {
275
+ if (state.display === 'redirect') {
276
+ if (state.redirect_uri && !state.allowedOriginsAuth.some((domain) => state.redirect_uri.startsWith(domain))) {
277
+ return console.error('Redirect URI not allowed');
278
+ }
333
279
 
334
- dispatch('setLoggedInAccounts', [
335
- {
336
- id: response.data.data.id,
337
- username: response.data.data.username,
338
- name: response.data.data.name,
339
- refreshToken: response.data.refreshToken,
340
- photo: response.data.data.photo,
341
- },
342
- ]);
280
+ return router.push('/account');
343
281
 
344
- if (response.isModal) {
345
- dispatch('successSnack', state.ssoLang[getters.appLanguage].success_login);
346
- setTimeout(() => {
347
- location.reload();
348
- }, 1500);
349
- }
282
+ location.href = state.redirect_uri + '?code=' + response.data.auth_code + '&state=' + state.state;
283
+ } else if (state.display === 'popup') {
284
+ state.allowedOriginsAuth.forEach((domain) => {
285
+ window.parent?.postMessage({ code: response.data.auth_code, state: state.state }, domain);
286
+ });
287
+ } else if (state.display === 'npm') {
288
+ EventBus.$emit('ssoEvent', { name: 'setLoading', data: true });
289
+ EventBus.$emit('ssoEvent', { name: 'setStorage', data: state.$storex });
290
+ EventBus.$emit('ssoEvent', { name: 'getUser', data: { username: response.data.data.username } });
350
291
 
351
- EventBus.$emit("ssoEvent", { name: "redirect", data: "/" + response.data.data.username + "#edit" });
352
- }
353
- },
354
- async register({ commit, dispatch }, data) {
355
- const [err, response] = await to(
356
- AuthService.register(data)
357
- );
358
- if (err) return dispatch('errorHandler', err);
359
- return response;
360
- },
361
- async verify({ commit, dispatch }, data) {
362
- const [err, response] = await to(AuthService.verify(data));
363
- if (err) return dispatch('errorHandler', err);
364
- return response;
365
- },
366
- async reset({ commit, state, getters, dispatch }, data) {
367
- const [err, response] = await to(
368
- AuthService.sendResetEmail(data)
369
- );
370
- if (err) return dispatch('errorHandler', err);
371
- if (response.data.success) {
372
- dispatch('successSnack', state.ssoLang[getters.appLanguage].password_reset_success);
373
- }
374
- },
375
- async exchangeAuthCode({ commit, dispatch }, data) {
376
- const [err, response] = await to(AuthService.exchangeAuthCode(data));
377
- if (err) return dispatch('errorHandler', err);
378
- await dispatch('loginSetup', response);
379
- await dispatch('getLoggedInAccounts');
380
- dispatch('loginSuccess', response);
381
- },
382
- async changePassword({ commit, dispatch }, data) {
383
- const [err, response] = await to(
384
- AuthService.changePassword(data)
385
- );
386
- if (err) return dispatch('errorHandler', err);
387
- return response.data.success;
388
- },
389
- async newPassword({ commit, dispatch }, data) {
390
- const [err, response] = await to(
391
- UserService.newPassword(data)
392
- );
393
- if (err) return dispatch('errorHandler', err);
394
- return response.data.success;
395
- },
396
- async deleteAccount({ commit, dispatch }, data) {
397
- const [err, response] = await to(
398
- UserService.deleteAccount(data)
399
- );
400
- if (err) return dispatch('errorHandler', err);
401
- return response.data.success;
402
- },
403
- async registerDevice({ commit, dispatch }) {
404
- const deviceID = await Device.getId();
405
- const deviceInfo = await Device.getInfo();
406
- let deviceData = {
407
- device_id: deviceID.uuid,
408
- platform: deviceInfo.platform,
409
- device_info: {
410
- model: deviceInfo.model,
411
- manufacturer: deviceInfo.manufacturer,
412
- operatingSystem: deviceInfo.operatingSystem,
413
- osVersion: deviceInfo.osVersion,
414
- isVirtual: deviceInfo.isVirtual,
415
- webViewVersion: deviceInfo.webViewVersion,
416
- },
417
- };
418
- const [err, response] = await to(
419
- DeviceService.registerDevice(deviceData)
420
- );
421
- if (err) return dispatch('errorHandler', err);
422
- return response;
423
- },
424
- async addFcmToken({ commit, dispatch }, data) {
425
- const [err, response] = await to(
426
- DeviceService.addFcmToken(data)
427
- );
428
- if (err) return dispatch('errorHandler', err);
429
- return response;
430
- },
431
- async acceptCompanyInvitation({ commit, dispatch }, code) {
432
- const [err, response] = await to(
433
- CompanyService.acceptCompanyInvitation(code)
434
- );
435
- if (err) return dispatch('errorHandler', err);
436
- return response;
437
- },
438
- async logout({ commit, dispatch, state }, { refreshToken, sendRequest = true }) {
439
- if (sendRequest && refreshToken) {
440
- AuthService.logout({ token: refreshToken });
441
- }
292
+ dispatch('setLoggedInAccounts', [
293
+ {
294
+ id: response.data.data.id,
295
+ username: response.data.data.username,
296
+ name: response.data.data.name,
297
+ refreshToken: response.data.refreshToken,
298
+ photo: response.data.data.photo
299
+ }
300
+ ]);
442
301
 
443
- if (state.$storex) {
444
- state.$storex.username = '';
445
- state.$storex.UserId = '';
446
- state.$storex.localUser = '';
447
- commit('setToken', '');
448
- }
449
- commit('setLoggedInUserId', '');
302
+ if (response.isModal) {
303
+ dispatch('successSnack', state.ssoLang[getters.appLanguage].success_login);
304
+ setTimeout(() => {
305
+ location.reload();
306
+ }, 1500);
307
+ }
450
308
 
451
- const remainingRefreshTokens = await dispatch('unsetRefreshToken', refreshToken);
309
+ EventBus.$emit('ssoEvent', { name: 'redirect', data: '/' + response.data.data.username + '#edit' });
310
+ }
311
+ },
312
+ async register({ commit, dispatch }, data) {
313
+ const [err, response] = await to(AuthService.register(data));
314
+ if (err) return dispatch('errorHandler', err);
315
+ return response;
316
+ },
317
+ async verify({ commit, dispatch }, data) {
318
+ const [err, response] = await to(AuthService.verify(data));
319
+ if (err) return dispatch('errorHandler', err);
320
+ return response;
321
+ },
322
+ async reset({ commit, state, getters, dispatch }, data) {
323
+ const [err, response] = await to(AuthService.sendResetEmail(data));
324
+ if (err) return dispatch('errorHandler', err);
325
+ if (response.data.success) {
326
+ dispatch('successSnack', state.ssoLang[getters.appLanguage].password_reset_success);
327
+ }
328
+ },
329
+ async exchangeAuthCode({ commit, dispatch }, data) {
330
+ const [err, response] = await to(AuthService.exchangeAuthCode(data));
331
+ if (err) return dispatch('errorHandler', err);
332
+ await dispatch('loginSetup', response);
333
+ await dispatch('getLoggedInAccounts');
334
+ dispatch('loginSuccess', response);
335
+ },
336
+ async changePassword({ commit, dispatch }, data) {
337
+ const [err, response] = await to(AuthService.changePassword(data));
338
+ if (err) return dispatch('errorHandler', err);
339
+ return response.data.success;
340
+ },
341
+ async newPassword({ commit, dispatch }, data) {
342
+ const [err, response] = await to(UserService.newPassword(data));
343
+ if (err) return dispatch('errorHandler', err);
344
+ return response.data.success;
345
+ },
346
+ async deleteAccount({ commit, dispatch }, data) {
347
+ const [err, response] = await to(UserService.deleteAccount(data));
348
+ if (err) return dispatch('errorHandler', err);
349
+ return response.data.success;
350
+ },
351
+ async registerDevice({ commit, dispatch }) {
352
+ const deviceID = await Device.getId();
353
+ const deviceInfo = await Device.getInfo();
354
+ let deviceData = {
355
+ device_id: deviceID.uuid,
356
+ platform: deviceInfo.platform,
357
+ device_info: {
358
+ model: deviceInfo.model,
359
+ manufacturer: deviceInfo.manufacturer,
360
+ operatingSystem: deviceInfo.operatingSystem,
361
+ osVersion: deviceInfo.osVersion,
362
+ isVirtual: deviceInfo.isVirtual,
363
+ webViewVersion: deviceInfo.webViewVersion
364
+ }
365
+ };
366
+ const [err, response] = await to(DeviceService.registerDevice(deviceData));
367
+ if (err) return dispatch('errorHandler', err);
368
+ return response;
369
+ },
370
+ async addFcmToken({ commit, dispatch }, data) {
371
+ const [err, response] = await to(DeviceService.addFcmToken(data));
372
+ if (err) return dispatch('errorHandler', err);
373
+ return response;
374
+ },
375
+ async acceptCompanyInvitation({ commit, dispatch }, code) {
376
+ const [err, response] = await to(CompanyService.acceptCompanyInvitation(code));
377
+ if (err) return dispatch('errorHandler', err);
378
+ return response;
379
+ },
380
+ async logout({ commit, dispatch, state }, { refreshToken, sendRequest = true }) {
381
+ if (sendRequest && refreshToken) {
382
+ AuthService.logout({ token: refreshToken });
383
+ }
452
384
 
453
- if (remainingRefreshTokens.length >= 1) {
454
- Object.keys(state.loggedInAccounts).forEach((username) => {
455
- if (state.loggedInAccounts[username].refreshToken === remainingRefreshTokens[0]) {
456
- commit('setStorage', {
457
- username: username,
458
- UserId: state.loggedInAccounts[username].id,
459
- localUser: state.loggedInAccounts[username]
460
- })
461
- commit('setRefreshToken', remainingRefreshTokens[0]);
462
- commit('setLoggedInUserId', state.loggedInAccounts[username].id);
463
- dispatch('refreshTokenAction', state.loggedInAccounts[username]).then(() => {
464
- EventBus.$emit("ssoEvent", { name: "switchAccount", data: { username }, });
465
- });
466
- }
467
- });
468
- } else {
469
- if (state.display === "redirect") {
470
- return router.push('/welcome');
471
- } else if (state.display === "npm") {
472
- EventBus.$emit("ssoEvent", { name: "redirect", data: "/welcome" });
473
- }
474
- }
475
- },
476
- async getCompanyBySSOEmail({ commit, dispatch }, data) {
477
- const [err, response] = await to(
478
- CompanyService.getBySSOEmail(data.email)
479
- );
480
- if (err) return dispatch('errorHandler', err);
481
- if (response.data.success) {
482
- return response.data;
483
- }
484
- },
485
- async getLoggedInAccounts({ getters, dispatch }) {
486
- if (getters.refreshTokens && getters.refreshTokens.length >= 1) {
487
- const [err, response] = await to(
488
- AuthService.getLoggedInAccounts({ refreshTokens: getters.refreshTokens })
489
- );
490
- if (err) return dispatch('errorHandler', err);
491
- if (response && response.data && response.data.success) {
492
- dispatch('setLoggedInAccounts', response.data.accounts);
493
- }
494
- }
495
- },
496
- async loginUsingQR({ commit, dispatch }, data) {
497
- const [err, response] = await to(
498
- UserService.loginUsingQR(data)
499
- );
500
- if (err) return dispatch('errorHandler', err);
501
- return response.data.success;
502
- },
503
- setLoggedInAccounts({ commit }, accounts) {
504
- commit('setLoggedInAccounts', accounts);
505
- EventBus.$emit("ssoEvent", { name: "setLoggedInAccounts", data: accounts });
506
- },
507
- setLoggedInUserId({ commit }, id) {
508
- commit('setLoggedInUserId', id);
509
- },
510
- setRefreshToken({ commit }, token) {
511
- commit('setRefreshToken', token);
512
- },
513
- async unsetRefreshToken({ commit, state, dispatch, getters }, refreshToken) {
514
- let refreshTokens = getters.refreshTokens;
385
+ if (state.$storex) {
386
+ state.$storex.username = '';
387
+ state.$storex.UserId = '';
388
+ state.$storex.localUser = '';
389
+ commit('setToken', '');
390
+ }
391
+ commit('setLoggedInUserId', '');
515
392
 
516
- // Remove the specified refresh token from the list
517
- refreshTokens = refreshTokens?.filter((t) => t !== refreshToken);
393
+ const remainingRefreshTokens = await dispatch('unsetRefreshToken', refreshToken);
518
394
 
519
- // Update the refresh tokens in the state
520
- commit('setRefreshTokens', refreshTokens.join(","));
395
+ if (remainingRefreshTokens.length >= 1) {
396
+ Object.keys(state.loggedInAccounts).forEach((username) => {
397
+ if (state.loggedInAccounts[username].refreshToken === remainingRefreshTokens[0]) {
398
+ commit('setStorage', {
399
+ username: username,
400
+ UserId: state.loggedInAccounts[username].id,
401
+ localUser: state.loggedInAccounts[username]
402
+ });
403
+ commit('setRefreshToken', remainingRefreshTokens[0]);
404
+ commit('setLoggedInUserId', state.loggedInAccounts[username].id);
405
+ dispatch('refreshTokenAction', state.loggedInAccounts[username]).then(() => {
406
+ EventBus.$emit('ssoEvent', { name: 'switchAccount', data: { username } });
407
+ });
408
+ }
409
+ });
410
+ } else {
411
+ if (state.display === 'redirect') {
412
+ return router.push('/welcome');
413
+ } else if (state.display === 'npm') {
414
+ EventBus.$emit('ssoEvent', { name: 'redirect', data: '/welcome' });
415
+ }
416
+ }
417
+ },
418
+ async getCompanyBySSOEmail({ commit, dispatch }, data) {
419
+ const [err, response] = await to(CompanyService.getBySSOEmail(data.email));
420
+ if (err) return dispatch('errorHandler', err);
421
+ if (response.data.success) {
422
+ return response.data;
423
+ }
424
+ },
425
+ async getLoggedInAccounts({ getters, dispatch }) {
426
+ if (getters.refreshTokens && getters.refreshTokens.length >= 1) {
427
+ const [err, response] = await to(AuthService.getLoggedInAccounts({ refreshTokens: getters.refreshTokens }));
428
+ if (err) return dispatch('errorHandler', err);
429
+ if (response && response.data && response.data.success) {
430
+ dispatch('setLoggedInAccounts', response.data.accounts);
431
+ }
432
+ }
433
+ },
434
+ async loginUsingQR({ commit, dispatch }, data) {
435
+ const [err, response] = await to(UserService.loginUsingQR(data));
436
+ if (err) return dispatch('errorHandler', err);
437
+ return response.data.success;
438
+ },
439
+ setLoggedInAccounts({ commit }, accounts) {
440
+ commit('setLoggedInAccounts', accounts);
441
+ EventBus.$emit('ssoEvent', { name: 'setLoggedInAccounts', data: accounts });
442
+ },
443
+ setLoggedInUserId({ commit }, id) {
444
+ commit('setLoggedInUserId', id);
445
+ },
446
+ setRefreshToken({ commit }, token) {
447
+ commit('setRefreshToken', token);
448
+ },
449
+ async unsetRefreshToken({ commit, state, dispatch, getters }, refreshToken) {
450
+ let refreshTokens = getters.refreshTokens;
521
451
 
522
- return refreshTokens;
523
- },
524
- setToken({ commit }, token) {
525
- commit('setToken', token);
526
- },
527
- updateLang({ commit }, lang) {
528
- commit('updateLang', lang);
529
- },
530
- setView({ commit }, view) {
531
- commit('setView', view);
532
- },
533
- setRedirectUri({ commit }, uri) {
534
- commit('setRedirectUri', uri);
535
- },
536
- setDisplay({ commit }, display) {
537
- commit('setDisplay', display);
538
- },
539
- setState({ commit }, stateValue) {
540
- commit('setState', stateValue);
541
- },
542
- setResponseType({ commit }, responseType) {
543
- commit('setResponseType', responseType);
544
- },
545
- setRealm({ commit }, realm) {
546
- commit('setRealm', realm);
547
- },
548
- },
549
- getters: {
550
- isLoggedIn: state => {
551
- return !!state.$storex.token && state.$storex.token !== "" && state.$storex.token !== "null";
552
- },
553
- renderView: (state, getters, rootState) => {
554
- if (state.display !== "npm") {
555
- return rootState.route?.name;
556
- } else return state.view;
557
- },
558
- appRealm: state => {
559
- return state.realm;
560
- },
561
- appLanguage: state => {
562
- return state.lang;
563
- },
564
- accessToken: state => {
565
- return state.$storex.token;
566
- },
567
- refreshTokens: state => {
568
- return state.$storex.refreshTokens.split(',')
569
- },
570
- apiRoot: state => {
571
- return state.apiRoot;
572
- }
573
- }
452
+ // Remove the specified refresh token from the list
453
+ refreshTokens = refreshTokens?.filter((t) => t !== refreshToken);
454
+
455
+ // Update the refresh tokens in the state
456
+ commit('setRefreshTokens', refreshTokens.join(','));
457
+
458
+ return refreshTokens;
459
+ },
460
+ setToken({ commit }, token) {
461
+ commit('setToken', token);
462
+ },
463
+ updateLang({ commit }, lang) {
464
+ commit('updateLang', lang);
465
+ },
466
+ setView({ commit }, view) {
467
+ commit('setView', view);
468
+ },
469
+ setRedirectUri({ commit }, uri) {
470
+ commit('setRedirectUri', uri);
471
+ },
472
+ setDisplay({ commit }, display) {
473
+ commit('setDisplay', display);
474
+ },
475
+ setState({ commit }, stateValue) {
476
+ commit('setState', stateValue);
477
+ },
478
+ setResponseType({ commit }, responseType) {
479
+ commit('setResponseType', responseType);
480
+ },
481
+ setRealm({ commit }, realm) {
482
+ commit('setRealm', realm);
483
+ }
484
+ },
485
+ getters: {
486
+ isLoggedIn: (state) => {
487
+ return !!state.$storex.token && state.$storex.token !== '' && state.$storex.token !== 'null';
488
+ },
489
+ renderView: (state, getters, rootState) => {
490
+ if (state.display !== 'npm') {
491
+ return rootState.route?.name;
492
+ } else return state.view;
493
+ },
494
+ appRealm: (state) => {
495
+ return state.realm;
496
+ },
497
+ appLanguage: (state) => {
498
+ return state.lang;
499
+ },
500
+ accessToken: (state) => {
501
+ return state.$storex.token;
502
+ },
503
+ refreshTokens: (state) => {
504
+ return state.$storex.refreshTokens.split(',');
505
+ },
506
+ apiRoot: (state) => {
507
+ return state.apiRoot;
508
+ }
509
+ }
574
510
  };