@tapni/auth 0.0.169 → 1.0.3

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 (58) hide show
  1. package/dist/assets/Account-CElX1bG1.js +1 -0
  2. package/dist/assets/Apps-B-GkviQb.css +1 -0
  3. package/dist/assets/Apps-DH6XpQ6k.js +1 -0
  4. package/dist/assets/CustomApp-D-PMGrCn.js +1 -0
  5. package/dist/assets/CustomApp-x1ZBgKin.css +1 -0
  6. package/dist/assets/General-BD2qnORR.js +1 -0
  7. package/dist/assets/General-OSR9oXHj.css +1 -0
  8. package/dist/assets/Inter-ZO3WBJgw.ttf +0 -0
  9. package/dist/assets/QR-CpmQl6vr.js +1 -0
  10. package/dist/assets/fontawesome-webfont-CQDK8MU3.ttf +0 -0
  11. package/dist/assets/fontawesome-webfont-DXgy9qkh.svg +2671 -0
  12. package/dist/assets/fontawesome-webfont-G5YE5S7X.eot +0 -0
  13. package/dist/assets/index-CNOQuLc_.css +1 -0
  14. package/dist/assets/index-DXEfDC45.js +176 -0
  15. package/dist/assets/web-1uupGAU9.js +5 -0
  16. package/dist/assets/web-BMHaq5cV.js +1 -0
  17. package/dist/assets/web-CvQGphDR.js +1 -0
  18. package/dist/assets/web-DMittTOZ.js +1 -0
  19. package/dist/assets/web-DhQdITWf.js +1 -0
  20. package/dist/assets/web-EiIhTtxC.js +1 -0
  21. package/dist/assets/web-OwpPF4YF.js +1 -0
  22. package/dist/index.css +193 -0
  23. package/dist/index.html +36 -0
  24. package/package.json +3 -3
  25. package/src/App.vue +6 -20
  26. package/src/components/{Language.vue → DELETE_Language.vue} +1 -1
  27. package/src/components/{ModalOverlay.vue → DELETE_ModalOverlay.vue} +2 -2
  28. package/src/components/{OTP.vue → DELETE_OTP.vue} +3 -3
  29. package/src/main.js +1 -0
  30. package/src/mixins/DELETE_mfa-auth.mixin.js +53 -0
  31. package/src/mixins/auth.mixin.js +8 -1
  32. package/src/mixins/global.mixin.js +7 -0
  33. package/src/routes.js +27 -15
  34. package/src/store/auth.js +7 -1
  35. package/src/store/constants.js +2 -6
  36. package/src/store/locales/en.js +28 -3
  37. package/src/views/Account.vue +72 -110
  38. package/src/views/Apps.vue +106 -0
  39. package/src/views/CustomApp.vue +106 -0
  40. package/src/views/General.vue +192 -0
  41. package/src/views/Login.vue +27 -10
  42. package/src/views/QR.vue +1 -1
  43. package/src/views/Security.vue +322 -0
  44. package/src/views/Welcome.vue +10 -4
  45. package/dist/.vite/manifest.json +0 -58
  46. package/dist/Account-ja1hZJy5.js +0 -113
  47. package/dist/QR-ybXT1KGe.js +0 -41
  48. package/dist/TapniAuth.es.js +0 -4
  49. package/dist/TapniAuth.umd.js +0 -141
  50. package/dist/install-4aK3Wz63.js +0 -18458
  51. package/dist/style.css +0 -1
  52. package/dist/web-5VtGcKeU.js +0 -86
  53. package/dist/web-AImUTDQQ.js +0 -54
  54. package/dist/web-L3jORB19.js +0 -92
  55. package/dist/web-NrPZl3qD.js +0 -124
  56. package/src/mixins/mfa-auth.mixin.js +0 -76
  57. package/src/views/MFA.vue +0 -117
  58. /package/src/components/{LinkIcon.vue → DELETE_LinkIcon.vue} +0 -0
@@ -0,0 +1,5 @@
1
+ import{W as j}from"./index-DXEfDC45.js";var w={exports:{}};/*!
2
+ * $script.js JS loader & dependency manager
3
+ * https://github.com/ded/script.js
4
+ * (c) Dustin Diaz 2014 | License MIT
5
+ */(function(y){(function(i,p){y.exports?y.exports=p():this[i]=p()})("$script",function(){var i=document,p=i.getElementsByTagName("head")[0],I=!1,m="push",S="readyState",A="onreadystatechange",s={},o={},d={},f,v;function g(e,t){for(var n=0,u=e.length;n<u;++n)if(!t(e[n]))return I;return 1}function h(e,t){g(e,function(n){return t(n),1})}function l(e,t,n){e=e[m]?e:[e];var u=t&&t.call,r=u?t:n,W=u?e.join(""):t,N=e.length;function b(c){return c.call?c():s[c]}function _(){if(!--N){s[W]=1,r&&r();for(var c in o)g(c.split("|"),b)&&!h(o[c],b)&&(o[c]=[])}}return setTimeout(function(){h(e,function c(a,U){if(a===null)return _();if(!U&&!/^https?:\/\//.test(a)&&f&&(a=a.indexOf(".js")===-1?f+a+".js":f+a),d[a])return d[a]==2?_():setTimeout(function(){c(a,!0)},0);d[a]=1,x(a,_)})},0),l}function x(e,t){var n=i.createElement("script"),u;n.onload=n.onerror=n[A]=function(){n[S]&&!/^c|loade/.test(n[S])||u||(n.onload=n[A]=null,u=1,d[e]=2,t())},n.async=1,n.src=v?e+(e.indexOf("?")===-1?"?":"&")+v:e,p.insertBefore(n,p.lastChild)}return l.get=x,l.order=function(e,t,n){(function u(r){r=e.shift(),e.length?l(r,u):l(r,t,n)})()},l.path=function(e){f=e},l.urlArgs=function(e){v=e},l.ready=function(e,t,n){e=e[m]?e:[e];var u=[];return!h(e,function(r){s[r]||u[m](r)})&&g(e,function(r){return s[r]})?t():function(r){o[r]=o[r]||[],o[r][m](t),n&&n(u)}(e.join("|")),l},l.done=function(e){l([null],e)},l})})(w);var z=w.exports;class P extends j{constructor(){super({name:"SignInWithApple",platforms:["web"]}),this.appleScriptUrl="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js",this.isAppleScriptLoaded=!1}async authorize(i){return new Promise((p,I)=>{i?this.loadSignInWithAppleJS().then(m=>{var S,A,s;this.isAppleScriptLoaded=m,this.isAppleScriptLoaded?(AppleID.auth.init({clientId:i.clientId,redirectURI:i.redirectURI,scope:(S=i.scopes)!==null&&S!==void 0?S:void 0,state:(A=i.state)!==null&&A!==void 0?A:void 0,nonce:(s=i.nonce)!==null&&s!==void 0?s:void 0,usePopup:!0}),AppleID.auth.signIn().then(o=>{var d,f,v,g,h;const l={response:{user:null,email:(d=o.user)===null||d===void 0?void 0:d.email,givenName:(v=(f=o.user)===null||f===void 0?void 0:f.name)===null||v===void 0?void 0:v.firstName,familyName:(h=(g=o.user)===null||g===void 0?void 0:g.name)===null||h===void 0?void 0:h.lastName,identityToken:o.authorization.id_token,authorizationCode:o.authorization.code}};p(l)}).catch(o=>{I(o)})):I("Unable to load Sign in with Apple JS framework.")}):I("No options were provided.")})}loadSignInWithAppleJS(){return new Promise(i=>{this.isAppleScriptLoaded?i(!0):typeof window!==void 0?z.get(this.appleScriptUrl,()=>i(!0)):i(!1)})}}export{P as SignInWithAppleWeb};
@@ -0,0 +1 @@
1
+ import{W as w}from"./index-DXEfDC45.js";class y extends w{async getId(){return{identifier:this.getUid()}}async getInfo(){if(typeof navigator>"u"||!navigator.userAgent)throw this.unavailable("Device API not available in this browser");const e=navigator.userAgent,i=this.parseUa(e);return{model:i.model,platform:"web",operatingSystem:i.operatingSystem,osVersion:i.osVersion,manufacturer:navigator.vendor,isVirtual:!1,webViewVersion:i.browserVersion}}async getBatteryInfo(){if(typeof navigator>"u"||!navigator.getBattery)throw this.unavailable("Device API not available in this browser");let e={};try{e=await navigator.getBattery()}catch{}return{batteryLevel:e.level,isCharging:e.charging}}async getLanguageCode(){return{value:navigator.language.split("-")[0].toLowerCase()}}async getLanguageTag(){return{value:navigator.language}}parseUa(e){const i={},r=e.indexOf("(")+1;let a=e.indexOf(") AppleWebKit");e.indexOf(") Gecko")!==-1&&(a=e.indexOf(") Gecko"));const s=e.substring(r,a);if(e.indexOf("Android")!==-1){const t=s.replace("; wv","").split("; ").pop();t&&(i.model=t.split(" Build")[0]),i.osVersion=s.split("; ")[1]}else if(i.model=s.split("; ")[0],typeof navigator<"u"&&navigator.oscpu)i.osVersion=navigator.oscpu;else if(e.indexOf("Windows")!==-1)i.osVersion=s;else{const t=s.split("; ").pop();if(t){const n=t.replace(" like Mac OS X","").split(" ");i.osVersion=n[n.length-1].replace(/_/g,".")}}/android/i.test(e)?i.operatingSystem="android":/iPad|iPhone|iPod/.test(e)&&!window.MSStream?i.operatingSystem="ios":/Win/.test(e)?i.operatingSystem="windows":/Mac/i.test(e)?i.operatingSystem="mac":i.operatingSystem="unknown";const l=!!window.ApplePaySession,x=!!window.chrome,p=/Firefox/.test(e),d=/Edg/.test(e),g=/FxiOS/.test(e),c=/CriOS/.test(e),f=/EdgiOS/.test(e);if(l||x&&!d||g||c||f){let t;g?t="FxiOS":c?t="CriOS":f?t="EdgiOS":l?t="Version":t="Chrome";const n=e.split(" ");for(const o of n)if(o.includes(t)){const v=o.split("/")[1];i.browserVersion=v}}else if(p||d){const o=e.split("").reverse().join("").split("/")[0].split("").reverse().join("");i.browserVersion=o}return i}getUid(){if(typeof window<"u"&&window.localStorage){let e=window.localStorage.getItem("_capuid");return e||(e=this.uuid4(),window.localStorage.setItem("_capuid",e),e)}return this.uuid4()}uuid4(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const i=Math.random()*16|0;return(e==="x"?i:i&3|8).toString(16)})}}export{y as DeviceWeb};
@@ -0,0 +1 @@
1
+ import{W as t}from"./index-DXEfDC45.js";class s extends t{constructor(){super(),this.handleVisibilityChange=()=>{const e={isActive:document.hidden!==!0};this.notifyListeners("appStateChange",e),document.hidden?this.notifyListeners("pause",null):this.notifyListeners("resume",null)},document.addEventListener("visibilitychange",this.handleVisibilityChange,!1)}exitApp(){throw this.unimplemented("Not implemented on web.")}async getInfo(){throw this.unimplemented("Not implemented on web.")}async getLaunchUrl(){return{url:""}}async getState(){return{isActive:document.hidden!==!0}}async minimizeApp(){throw this.unimplemented("Not implemented on web.")}}export{s as AppWeb};
@@ -0,0 +1 @@
1
+ import{W as i}from"./index-DXEfDC45.js";class u extends i{async initialize(e){const n={version:"v17.0"};return await this.loadScript(e.locale),FB.init(Object.assign(Object.assign({},n),e))}loadScript(e){if(typeof document>"u")return Promise.reject("document global not found");const n="fb";if(document.getElementById(n))return Promise.resolve();const r=document.getElementsByTagName("head")[0],s=document.createElement("script");return new Promise(o=>{s.onload=()=>o(),s.defer=!0,s.async=!0,s.id=n,s.src=`https://connect.facebook.net/${e??"en_US"}/sdk.js`,r.appendChild(s)})}async login(e){return new Promise((n,t)=>{FB.login(r=>{r.status==="connected"?n({accessToken:{token:r.authResponse.accessToken}}):t({accessToken:{token:null}})},{scope:e.permissions.join(",")})})}async logout(){return new Promise(e=>FB.logout(()=>e()))}async reauthorize(){return new Promise(e=>FB.reauthorize(n=>e(n)))}async getCurrentAccessToken(){return new Promise((e,n)=>{FB.getLoginStatus(t=>{if(t.status==="connected"){const r={accessToken:{applicationId:void 0,declinedPermissions:[],expires:void 0,isExpired:void 0,lastRefresh:void 0,permissions:[],token:t.authResponse.accessToken,userId:t.authResponse.userID}};e(r)}else n({accessToken:{token:null}})})})}async getProfile(e){const n=e.fields.join(",");return new Promise((t,r)=>{FB.api("/me",{fields:n},s=>{if(s.error){r(s.error.message);return}t(s)})})}async logEvent(){return Promise.resolve()}async setAutoLogAppEventsEnabled(){return Promise.resolve()}async setAdvertiserTrackingEnabled(){return Promise.resolve()}async setAdvertiserIDCollectionEnabled(){return Promise.resolve()}}export{u as FacebookLoginWeb};
@@ -0,0 +1 @@
1
+ import{W as c}from"./index-DXEfDC45.js";class g extends c{constructor(){super()}loadScript(){if(typeof document>"u")return;const e="gapi";if(document==null?void 0:document.getElementById(e))return;const n=document.getElementsByTagName("head")[0],t=document.createElement("script");t.type="text/javascript",t.defer=!0,t.async=!0,t.id=e,t.onload=this.platformJsLoaded.bind(this),t.src="https://apis.google.com/js/platform.js",n.appendChild(t)}initialize(e={clientId:"",scopes:[],grantOfflineAccess:!1}){var s,n;if(typeof window>"u")return;const t=(s=document.getElementsByName("google-signin-client_id")[0])===null||s===void 0?void 0:s.content,i=e.clientId||t||"";i||console.warn("GoogleAuthPlugin - clientId is empty"),this.options={clientId:i,grantOfflineAccess:(n=e.grantOfflineAccess)!==null&&n!==void 0?n:!1,scopes:e.scopes||[]},this.gapiLoaded=new Promise(o=>{window.gapiResolve=o,this.loadScript()}),this.addUserChangeListener()}platformJsLoaded(){gapi.load("auth2",()=>{const e={client_id:this.options.clientId,plugin_name:"CodetrixStudioCapacitorGoogleAuth"};this.options.scopes.length&&(e.scope=this.options.scopes.join(" ")),gapi.auth2.init(e),window.gapiResolve()})}async signIn(){return new Promise(async(e,s)=>{var n;try{let t;const i=(n=this.options.grantOfflineAccess)!==null&&n!==void 0?n:!1;i?t=(await gapi.auth2.getAuthInstance().grantOfflineAccess()).code:await gapi.auth2.getAuthInstance().signIn();const o=gapi.auth2.getAuthInstance().currentUser.get();i&&await o.reloadAuthResponse();const a=this.getUserFrom(o);a.serverAuthCode=t,e(a)}catch(t){s(t)}})}async refresh(){const e=await gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse();return{accessToken:e.access_token,idToken:e.id_token,refreshToken:""}}async signOut(){return gapi.auth2.getAuthInstance().signOut()}async addUserChangeListener(){await this.gapiLoaded,gapi.auth2.getAuthInstance().currentUser.listen(e=>{this.notifyListeners("userChange",e.isSignedIn()?this.getUserFrom(e):null)})}getUserFrom(e){const s={},n=e.getBasicProfile();s.email=n.getEmail(),s.familyName=n.getFamilyName(),s.givenName=n.getGivenName(),s.id=n.getId(),s.imageUrl=n.getImageUrl(),s.name=n.getName();const t=e.getAuthResponse(!0);return s.authentication={accessToken:t.access_token,idToken:t.id_token,refreshToken:""},s}}export{g as GoogleAuthWeb};
@@ -0,0 +1 @@
1
+ import{W as o}from"./index-DXEfDC45.js";class e extends o{constructor(){super(),this._lastWindow=null}async open(s){this._lastWindow=window.open(s.url,s.windowName||"_blank")}async close(){return new Promise((s,n)=>{this._lastWindow!=null?(this._lastWindow.close(),this._lastWindow=null,s()):n("No active window to close!")})}}const i=new e;export{i as Browser,e as BrowserWeb};
@@ -0,0 +1 @@
1
+ import{W as p}from"./index-DXEfDC45.js";class f extends p{constructor(){super(...arguments),this.group="CapacitorStorage"}async configure({group:e}){typeof e=="string"&&(this.group=e)}async get(e){return{value:this.impl.getItem(this.applyPrefix(e.key))}}async set(e){this.impl.setItem(this.applyPrefix(e.key),e.value)}async remove(e){this.impl.removeItem(this.applyPrefix(e.key))}async keys(){return{keys:this.rawKeys().map(t=>t.substring(this.prefix.length))}}async clear(){for(const e of this.rawKeys())this.impl.removeItem(e)}async migrate(){var e;const t=[],s=[],n="_cap_",o=Object.keys(this.impl).filter(i=>i.indexOf(n)===0);for(const i of o){const r=i.substring(n.length),a=(e=this.impl.getItem(i))!==null&&e!==void 0?e:"",{value:l}=await this.get({key:r});typeof l=="string"?s.push(r):(await this.set({key:r,value:a}),t.push(r))}return{migrated:t,existing:s}}async removeOld(){const e="_cap_",t=Object.keys(this.impl).filter(s=>s.indexOf(e)===0);for(const s of t)this.impl.removeItem(s)}get impl(){return window.localStorage}get prefix(){return this.group==="NativeStorage"?"":`${this.group}.`}rawKeys(){return Object.keys(this.impl).filter(e=>e.indexOf(this.prefix)===0)}applyPrefix(e){return this.prefix+e}}export{f as PreferencesWeb};
package/dist/index.css ADDED
@@ -0,0 +1,193 @@
1
+ .container {
2
+ padding: 10px 0!important;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 10px;
6
+ padding-bottom: 100px !important;
7
+ }
8
+ .settingsCard {
9
+ background-color: white;
10
+ padding: 20px;
11
+ border-radius: 26px;
12
+ align-items: center;
13
+ }
14
+
15
+ .device {
16
+ display: flex;
17
+ align-items: center;
18
+ }
19
+
20
+ h4 {
21
+ margin-left: 20px;
22
+ font-weight: bold;
23
+ }
24
+
25
+ .middle {
26
+ flex: 1;
27
+ }
28
+
29
+ .left img {
30
+ background-color: #f7f8f9;
31
+ border-radius: 20px;
32
+ padding: 10px;
33
+ }
34
+
35
+ .divider {
36
+ height: 1px;
37
+ background-color: #f0f0f0;
38
+ margin: 20px 0;
39
+ }
40
+
41
+ .moreFooter {
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: space-between;
45
+ padding: 0 10px;
46
+ }
47
+
48
+ .settingRow{
49
+ background-color: #F4F4F4;
50
+ padding: 10px 9px;
51
+ border-radius: 15px;
52
+ cursor: pointer;
53
+ }
54
+
55
+ .settingRow .firstRow,
56
+ .settingRow .secondRow {
57
+ display: flex;
58
+ align-items: center;
59
+ min-height: 35px;
60
+ }
61
+
62
+ .settingRow .firstRow h4 {
63
+ text-align: left;
64
+ flex: 1;
65
+ margin-left: 20px;
66
+ font-weight: 600;
67
+ margin-bottom: 0;
68
+ }
69
+
70
+ .settingRow .secondRow {
71
+ font-size: 8px;
72
+ margin-top: 20px;
73
+ }
74
+
75
+ .settingRow .secondRow p {
76
+ flex: 1;
77
+ color: #999999;
78
+ }
79
+
80
+ .withBackground {
81
+ background-color: #ffffff;
82
+ border-radius: 10px;
83
+ padding: 10px;
84
+ width: 50px;
85
+ }
86
+
87
+
88
+ .ios-switch {
89
+ position: relative;
90
+ width: 60px;
91
+ padding-top: 4px;
92
+ padding-right: 4px;
93
+ margin-left: 4px;
94
+ -webkit-user-select: none;
95
+ -moz-user-select: none;
96
+ -ms-user-select: none;
97
+ }
98
+ .ios-switch-checkbox {
99
+ display: none;
100
+ }
101
+ .ios-switch-label {
102
+ background-color: #e3e3e3;
103
+ display: block;
104
+ overflow: initial;
105
+ cursor: pointer;
106
+ height: 30px;
107
+ padding: 0;
108
+ line-height: 20px;
109
+ border: 1px solid #e3e3e3;
110
+ border-radius: 25px;
111
+ transition: all 250ms ease;
112
+ }
113
+ .ios-switch-label:before {
114
+ content: "";
115
+ display: block;
116
+ width: 30px;
117
+ margin: 0px;
118
+ position: absolute;
119
+ top: 0;
120
+ bottom: 0;
121
+ right: 24px;
122
+ background-size: 15px;
123
+ background-repeat: no-repeat;
124
+ background-position: center;
125
+ border: 2px solid #e3e3e3;
126
+ border-radius: 25px;
127
+ transition: all 250ms ease;
128
+ }
129
+
130
+ .ios-switch-checkbox:checked + .ios-switch-label {
131
+ background-color: #151515;
132
+ }
133
+ .ios-switch-checkbox:checked + .ios-switch-label,
134
+ .ios-switch-checkbox:checked + .ios-switch-label:before {
135
+ border-color: #151515;
136
+ }
137
+ .ios-switch-checkbox:checked + .ios-switch-label:before {
138
+ right: -1px;
139
+ }
140
+
141
+
142
+ .subheaderContainer {
143
+ display: flex;
144
+ align-items: center;
145
+ position: relative;
146
+ padding: 15px 25px;
147
+ }
148
+
149
+ .subheaderContainer .left-button {
150
+ width: 40px!important;
151
+ height: 40px!important;
152
+ margin: 0;
153
+ border-radius: 50%;
154
+ background: #f4f4f4;
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ position: absolute;
159
+ left: 20px;
160
+ }
161
+
162
+ .subheaderContainer .button {
163
+ width: 40px!important;
164
+ height: 40px!important;
165
+ margin: 0;
166
+ border-radius: 50%;
167
+ background: #f4f4f4;
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+ position: absolute;
172
+ }
173
+
174
+ .subheaderContainer .button img {
175
+ top: 0!important;
176
+ margin-right: 3px!important;
177
+ }
178
+
179
+ .subheaderContainer .left-button {
180
+ left: 20px;
181
+ }
182
+
183
+ .subheaderContainer .right-button {
184
+ right: 20px;
185
+ }
186
+
187
+ .transition-icon {
188
+ transition: 0.5s;
189
+ }
190
+
191
+ .rotate-icon {
192
+ transform: translate(-50%, -50%) rotate(180deg)!important;
193
+ }
@@ -0,0 +1,36 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="google-signin-client_id" content="977665455842-5d5ar2comte3muk65oaf4g5jrmcsvu1m.apps.googleusercontent.com">
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
7
+ <meta name="format-detection" content="telephone=no">
8
+ <meta name="msapplication-tap-highlight" content="no">
9
+ <meta name="format-detection" content="telephone=no">
10
+ <link rel="icon" href="/favicon.ico" class="next-head"/>
11
+ <title>Tapni - Share everything with just a tap</title>
12
+ <meta name="description" content="Your new connecting experience. Tapni allows you to share all your socials and contact information in a smart, contactless, and sustainable way. One TAP is all it takes. Keep all your links in one place. Bring your business card to life. Impress anyone you meet. Connecting made effortless with just a simple tap!">
13
+ <!-- Open Graph / Facebook -->
14
+ <meta property="og:type" content="website">
15
+ <meta property="og:title" content="Tapni - Share with just a tap">
16
+ <meta property="og:description" content="Share everything in a smart, contactless,and sustainable way">
17
+ <meta property="og:image" content="https://cdn.tapni.co/images/banner-sticker.png">
18
+ <meta property="og:url" content="https://tapni.com">
19
+
20
+ <!-- Twitter -->
21
+ <meta property="twitter:url" content="https://tapni.com">
22
+ <meta property="twitter:card" content="summary_large_image">
23
+ <meta property="twitter:site" content="@tapni_co">
24
+ <meta property="twitter:title" content="Tapni - Share everything with just a tap">
25
+ <meta property="twitter:description" content="Your new connecting experience. Tapni allows you to share all your socials and contact information in a smart, contactless, and sustainable way. One TAP is all it takes. Keep all your links in one place. Bring your business card to life. Impress anyone you meet. Connecting made effortless with just a simple tap!">
26
+ <meta property="twitter:image" content="https://cdn.tapni.co/images/banner-sticker.png">
27
+
28
+ <link rel="apple-touch-icon" href="/icon.png">
29
+ <link rel="android-touch-icon" href="/icon.png" />
30
+ <script type="module" crossorigin src="/assets/index-DXEfDC45.js"></script>
31
+ <link rel="stylesheet" crossorigin href="/assets/index-CNOQuLc_.css">
32
+ </head>
33
+ <body id="bodyId" class="lazy-scroll no-select">
34
+ <div id="app"></div>
35
+ </body>
36
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tapni/auth",
3
- "version": "0.0.169",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/TapniAuth.umd.js",
6
6
  "module": "./dist/TapniAuth.es.js",
@@ -34,7 +34,7 @@
34
34
  "@otplib/preset-browser": "^12.0.1",
35
35
  "@recognizebv/capacitor-plugin-msauth": "^3.5.1",
36
36
  "@tapni/capacitor-reactive-localstorage-vue3": "^0.0.17",
37
- "@tapni/styles": "^0.0.3",
37
+ "@tapni/styles": "^0.0.8",
38
38
  "await-to-js": "^3.0.0",
39
39
  "axios": "^1.6.5",
40
40
  "buffer": "^6.0.3",
@@ -43,9 +43,9 @@
43
43
  "vue": "^3.3.11",
44
44
  "vue-cookies": "^1.8.3",
45
45
  "vue-router": "^4.2.5",
46
+ "vue3-select-component": "^0.5.2",
46
47
  "vuex": "^4.0.2",
47
48
  "vuex-router-sync": "v6.0.0-rc.1"
48
-
49
49
  },
50
50
  "devDependencies": {
51
51
  "@rollup/plugin-inject": "^5.0.5",
package/src/App.vue CHANGED
@@ -14,26 +14,16 @@ document.addEventListener('DOMContentLoaded', function() {
14
14
  <template>
15
15
  <div id="ssoapp">
16
16
  <a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="data:image/png;base64,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" onerror="this.onerror=null;this.src='https://cdn.tapni.co/images/logo-dark.png';" class="header-logo-img"></a>
17
-
18
- <a v-if="display === 'redirect'"
19
- @click="toggleSSOLanguageModal"
20
- class="font-18 no-border pointer color-black"
21
- style="position: absolute; right: 20px; top: -10px; z-index: 1;">
22
- <span class="lang-icon">{{ appLanguage.toUpperCase() }}</span>
23
- </a>
24
-
25
-
26
17
  <ModalOverlay />
27
18
  <Language v-if="!isModal" />
28
19
  <SSO v-if="!isModal" />
29
20
  <SSOPick v-if="!isModal" />
30
- <OTP />
31
21
 
32
22
  <AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
33
23
  <AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
34
24
  <AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
35
25
  <AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
36
- <AuthMFA v-else-if="initialized && renderView === 'AuthMFA'" :isModal="isModal" :payload="payload" />
26
+ <AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" />
37
27
  <AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
38
28
  <AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
39
29
  <RouterView v-else-if="display !== 'npm'" />
@@ -84,16 +74,15 @@ import AuthWelcome from "@/views/Welcome.vue";
84
74
  import AuthLogin from "@/views/Login.vue";
85
75
  import AuthRegister from "@/views/Register.vue";
86
76
  import AuthVerify from "@/views/Verify.vue";
87
- import AuthMFA from "@/views/MFA.vue";
77
+ import AuthSecurity from "@/views/Security.vue";
88
78
  import AuthReset from "@/views/Reset.vue";
89
79
  import AuthCallback from "@/views/Callback.vue";
90
- import ModalOverlay from "@/components/ModalOverlay.vue";
80
+ import ModalOverlay from "@/components/DELETE_ModalOverlay.vue";
91
81
  import SSO from "@/components/SSO.vue";
92
- import OTP from "@/components/OTP.vue";
93
82
  import SSOPick from "@/components/SSOPick.vue";
94
83
  import {EventBus} from "./store/event-bus.js";
95
84
  import AuthMixin from "@/mixins/auth.mixin.js";
96
- import Language from "@/components/Language.vue";
85
+ import Language from "@/components/DELETE_Language.vue";
97
86
  import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3'
98
87
  import store from './store/auth.js';
99
88
 
@@ -109,9 +98,8 @@ export default {
109
98
  },
110
99
  components: {
111
100
  Language,
112
- OTP,
113
101
  SSOPick,
114
- SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify, AuthMFA, AuthRegister, AuthLogin, AuthWelcome
102
+ SSO, ModalOverlay, AuthCallback, AuthReset, AuthVerify, AuthSecurity, AuthRegister, AuthLogin, AuthWelcome
115
103
  },
116
104
  props: {
117
105
  viewProp: {
@@ -154,6 +142,7 @@ export default {
154
142
  EventBus.$on('refreshTokenAction',(data) => this.refreshTokenAction({...data, storage: this.$storex}))
155
143
  EventBus.$on('switchAccount',(data) => this.switchAccount(data))
156
144
  EventBus.$on('setToken',(data) => this.setToken(data))
145
+ EventBus.$on('setStorageItem',(data) => this.setStorageItem(data))
157
146
  },
158
147
  methods: {
159
148
  async init () {
@@ -184,9 +173,6 @@ export default {
184
173
  document.getElementsByTagName("html")[0].style = ""
185
174
  }
186
175
  },
187
- toggleSSOLanguageModal () {
188
- EventBus.$emit('toggleSSOLanguageModal', true)
189
- }
190
176
  },
191
177
  watch: {
192
178
  viewProp (nv) {
@@ -106,7 +106,7 @@
106
106
 
107
107
  <script>
108
108
  import { EventBus } from "../store/event-bus.js";
109
- import LinkIcon from "./LinkIcon.vue";
109
+ import LinkIcon from "./DELETE_LinkIcon.vue";
110
110
  import UtilService from "../services/UtilService.js";
111
111
  import CONSTANTS from "../store/constants.js";
112
112
  import { Device } from "@capacitor/device";
@@ -35,8 +35,8 @@ export default {
35
35
  // EventBus.$on('togglePasswordModal', this.toggleModal)
36
36
  // EventBus.$on('toggleAddAccountModal', this.toggleModal)
37
37
  // EventBus.$on("toggleAccountSettingsModal", this.toggleModal);
38
- EventBus.$on("toggleSSOLanguageModal", this.toggleModal);
39
- EventBus.$on("toggleOTPModal", this.toggleModal);
38
+ // EventBus.$on("toggleSSOLanguageModal", this.toggleModal);
39
+ // EventBus.$on("toggleOTPField", this.toggleModal);
40
40
  EventBus.$on("toggleSSOModal", this.toggleModal);
41
41
  EventBus.$on("toggleSSOPickModal", this.toggleModal);
42
42
  },
@@ -69,13 +69,13 @@ export default {
69
69
  };
70
70
  },
71
71
  mounted() {
72
- EventBus.$on("toggleOTPModal", this.toggleModal);
72
+ EventBus.$on("toggleOTPField", this.toggleModal);
73
73
  EventBus.$on("closeModal", () => {
74
74
  this.toggle = false;
75
75
  });
76
76
  },
77
77
  beforeDestroy() {
78
- EventBus["_events"]["toggleOTPModal"].pop();
78
+ EventBus["_events"]["toggleOTPField"].pop();
79
79
  },
80
80
  methods: {
81
81
  forceClose() {
@@ -91,7 +91,7 @@ export default {
91
91
 
92
92
  this.loading = true;
93
93
  EventBus.$emit('otpSubmitted', this.otp);
94
- EventBus.$emit("toggleOTPModal")
94
+ EventBus.$emit("toggleOTPField")
95
95
  this.loading = false;
96
96
  },
97
97
  toggleModal() {
package/src/main.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import "@tapni/styles/dist/index.css";
2
+ import "../public/index.css";
2
3
  import { createApp } from 'vue'
3
4
  import RootApp from './App.vue'
4
5
  import router from './router'
@@ -0,0 +1,53 @@
1
+ import QRCodeStyling from "qr-code-styling";
2
+ import { authenticator } from "@otplib/preset-browser";
3
+ import {EventBus} from "@/store/event-bus.js";
4
+
5
+ export default {
6
+ data () {
7
+ return {
8
+ accountDelete: false,
9
+
10
+ changePassword: false,
11
+ password: '',
12
+ passwordRepeat: '',
13
+ currentPassword: '',
14
+
15
+ otpToken: null,
16
+ otpSecret: null,
17
+ mfaEnable: false,
18
+ otp: "",
19
+ qrCodeHash: null,
20
+ qrCodeRefreshInterval: null,
21
+ poolingInterval: null,
22
+ loading: false,
23
+ }
24
+ },
25
+ props: {
26
+ isModal: {
27
+ type: Boolean,
28
+ required: false,
29
+ default: false,
30
+ },
31
+ },
32
+ computed: {
33
+ promptMFA () {
34
+ return false;
35
+ }
36
+ },
37
+ async mounted () {
38
+ if (this.renderView === 'AuthSecurity') {
39
+ await this.getAccountSettings();
40
+ this.generateOTPQrCode();
41
+ }
42
+
43
+ EventBus.$on('otpSubmitted', this.otpSubmitted)
44
+ },
45
+ methods: {
46
+ otpSubmitted(code) {
47
+ this.otpToken = code;
48
+
49
+ // Assuming that the parent component had a method called submit
50
+ this.submit();
51
+ },
52
+ },
53
+ }
@@ -4,6 +4,13 @@ import GlobalMixin from './global.mixin'
4
4
 
5
5
  export default {
6
6
  mixins: [GlobalMixin],
7
+ props: {
8
+ isModal: {
9
+ type: Boolean,
10
+ required: false,
11
+ default: false,
12
+ },
13
+ },
7
14
  computed: {
8
15
  ...mapState([
9
16
  '$storex',
@@ -31,12 +38,12 @@ export default {
31
38
  ...mapActions([
32
39
  'setLoggedInAccounts',
33
40
  'setLoggedInUserId',
34
- 'getRefreshTokens',
35
41
  'setRefreshToken',
36
42
  'unsetRefreshToken',
37
43
  'setToken',
38
44
  'setView',
39
45
  'setStorage',
46
+ 'setStorageItem',
40
47
  'updateLang',
41
48
  'login',
42
49
  'register',
@@ -29,6 +29,13 @@ export default {
29
29
  },
30
30
  },
31
31
  methods: {
32
+ getIcon(icon) {
33
+ if (!this.isNative && false) {
34
+ return 'https://cdn.tapni.co/icons/' + icon;
35
+ } else {
36
+ return `http://localhost:7777/icons/${icon}`;
37
+ }
38
+ },
32
39
  errorHandler(error) {
33
40
  if (error && error.response && error.response.data && error.response.data.error) {
34
41
  if (
package/src/routes.js CHANGED
@@ -1,18 +1,15 @@
1
- const Welcome = () =>
2
- import("./views/Welcome.vue");
1
+ const Welcome = () => import("./views/Welcome.vue");
3
2
  const Login = () => import("./views/Login.vue");
4
- const Register = () =>
5
- import("./views/Register.vue");
3
+ const Register = () => import("./views/Register.vue");
6
4
  const Reset = () => import("./views/Reset.vue");
7
5
  const Account = () => import("./views/Account.vue");
8
- const Verify = () =>
9
- import("./views/Verify.vue");
10
- const Callback = () =>
11
- import("./views/Callback.vue");
12
- const QR = () =>
13
- import("./views/QR.vue");
14
- const MFA = () =>
15
- import("./views/MFA.vue");
6
+ const Verify = () => import("./views/Verify.vue");
7
+ const Callback = () => import("./views/Callback.vue");
8
+ const QR = () => import("./views/QR.vue");
9
+ const Security = () => import("./views/Security.vue");
10
+ const Apps = () => import("./views/Apps.vue");
11
+ const CustomApp = () => import("./views/CustomApp.vue");
12
+ const General = () => import("./views/General.vue");
16
13
 
17
14
  export default [
18
15
  {
@@ -37,9 +34,24 @@ export default [
37
34
  component: QR,
38
35
  },
39
36
  {
40
- path: "/mfa",
41
- name: "AuthMFA",
42
- component: MFA,
37
+ path: "/security",
38
+ name: "AuthSecurity",
39
+ component: Security,
40
+ },
41
+ {
42
+ path: "/apps",
43
+ name: "AuthApps",
44
+ component: Apps,
45
+ },
46
+ {
47
+ path: "/apps/:app",
48
+ name: "AuthApp",
49
+ component: CustomApp,
50
+ },
51
+ {
52
+ path: "/general",
53
+ name: "AuthGeneral",
54
+ component: General,
43
55
  },
44
56
  {
45
57
  path: "/account",
package/src/store/auth.js CHANGED
@@ -73,6 +73,9 @@ export default {
73
73
  setAccountSettings(state, account) {
74
74
  state.account = account;
75
75
  },
76
+ setStorageItem(state, item) {
77
+ state.$storex[item.name] = item.data;
78
+ },
76
79
  setStorage(state, storage) {
77
80
  state.$storex = {
78
81
  ...state.$storex,
@@ -135,6 +138,9 @@ export default {
135
138
  commit('setAccountSettings', response.data.data);
136
139
  }
137
140
  },
141
+ setStorageItem({ commit }, item) {
142
+ commit('setStorageItem', item);
143
+ },
138
144
  setStorage({ commit }, storage) {
139
145
  commit('setStorage', storage);
140
146
  },
@@ -150,7 +156,7 @@ export default {
150
156
  }
151
157
 
152
158
  if (error.response.data.error === 'OTP_REQUIRED') {
153
- return EventBus.$emit('toggleOTPModal', true);
159
+ return EventBus.$emit('toggleOTPField', true);
154
160
  }
155
161
 
156
162
  // Link click network error bug fix
@@ -1,8 +1,4 @@
1
1
  export default {
2
- ANDROID_VERSION: '5.6',
3
- IOS_VERSION: '5.6',
4
- WEB_VERSION: '5.6.0',
5
- SUPPORTED_LANGUAGES: ['en', 'de', 'es', 'kr', 'it', 'fr'],
6
- METAPIXEL_ID: '1203678696914368',
7
- GOOGLE_ANALYTICS_ID: ''
2
+ WEB_VERSION: '1.0.1',
3
+ SUPPORTED_LANGUAGES: ['en', 'de', 'es', 'kr', 'it', 'fr', 'sr', 'tr', 'cn'],
8
4
  }