diff --git a/.gitignore b/.gitignore index 0c6820f5..0838b357 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,6 @@ dist .DS_Store -.rollup* \ No newline at end of file +.rollup* + +.npmrc diff --git a/examples/vue-example/package-lock.json b/examples/vue-example/package-lock.json index fc5c7913..03172375 100644 --- a/examples/vue-example/package-lock.json +++ b/examples/vue-example/package-lock.json @@ -17,7 +17,7 @@ "bs58": "^6.0.0", "core-js": "^3.49.0", "viem": "^2.47.6", - "vue": "^3.5.30" + "vue": "^3.5.31" }, "devDependencies": { "@tailwindcss/vite": "^4.2.2", @@ -37,11 +37,11 @@ }, "../..": { "name": "@web3auth/auth", - "version": "11.4.0", + "version": "11.4.2", "license": "MIT", "dependencies": { "@toruslabs/constants": "^16.1.1", - "@toruslabs/customauth": "^22.3.1", + "@toruslabs/customauth": "^22.3.3", "@toruslabs/ffjavascript": "^6.0.0", "@toruslabs/metadata-helpers": "^8.2.0", "@toruslabs/secure-pub-sub": "^4.3.0", @@ -13694,13 +13694,13 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", - "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.31.tgz", + "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/shared": "3.5.30", + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.31", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" @@ -13719,26 +13719,26 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", - "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", + "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-core": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", - "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", + "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/compiler-core": "3.5.30", - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30", + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.31", + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.8", @@ -13746,13 +13746,13 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", - "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", + "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-dom": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/eslint-config-typescript": { @@ -13780,53 +13780,53 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", - "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.31.tgz", + "integrity": "sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.30" + "@vue/shared": "3.5.31" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", - "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.31.tgz", + "integrity": "sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/reactivity": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", - "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.31.tgz", + "integrity": "sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/runtime-core": "3.5.30", - "@vue/shared": "3.5.30", + "@vue/reactivity": "3.5.31", + "@vue/runtime-core": "3.5.31", + "@vue/shared": "3.5.31", "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", - "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.31.tgz", + "integrity": "sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31" }, "peerDependencies": { - "vue": "3.5.30" + "vue": "3.5.31" } }, "node_modules/@vue/shared": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", - "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.31.tgz", + "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", "license": "MIT" }, "node_modules/@vuelidate/core": { @@ -18965,16 +18965,16 @@ } }, "node_modules/vue": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", - "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.31.tgz", + "integrity": "sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-sfc": "3.5.30", - "@vue/runtime-dom": "3.5.30", - "@vue/server-renderer": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-sfc": "3.5.31", + "@vue/runtime-dom": "3.5.31", + "@vue/server-renderer": "3.5.31", + "@vue/shared": "3.5.31" }, "peerDependencies": { "typescript": "*" diff --git a/examples/vue-example/package.json b/examples/vue-example/package.json index 658cf3b0..f4092a15 100644 --- a/examples/vue-example/package.json +++ b/examples/vue-example/package.json @@ -19,7 +19,7 @@ "bs58": "^6.0.0", "core-js": "^3.49.0", "viem": "^2.47.6", - "vue": "^3.5.30" + "vue": "^3.5.31" }, "devDependencies": { "@tailwindcss/vite": "^4.2.2", diff --git a/package-lock.json b/package-lock.json index 1a846aca..7ee4c15a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@toruslabs/constants": "^16.1.1", - "@toruslabs/customauth": "^22.3.2", + "@toruslabs/customauth": "^22.3.3", "@toruslabs/ffjavascript": "^6.0.0", "@toruslabs/metadata-helpers": "^8.2.0", "@toruslabs/secure-pub-sub": "^4.3.0", @@ -4290,9 +4290,9 @@ } }, "node_modules/@toruslabs/customauth": { - "version": "22.3.2", - "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-22.3.2.tgz", - "integrity": "sha512-acrJwNdKLkiO2pJ8ub47WP/cwUyVFr2JZ5iK/qFgItKq1a/4L8jTeHYjGEiAGjgn/wPnp7HyePxewHTrVPjcVA==", + "version": "22.3.3", + "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-22.3.3.tgz", + "integrity": "sha512-BlH6ENqg3mqCSrPXj442XK4xFpE0aorIm3vQtSKEZZcO7POAWTbcPQ9+oqnvlTrUODqJeymgEITGi4KSfv0xHQ==", "license": "MIT", "dependencies": { "@chaitanyapotti/register-service-worker": "^1.7.4", @@ -4303,7 +4303,7 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.2.0", "@toruslabs/session-manager": "^5.6.0", - "@toruslabs/torus.js": "^17.2.2", + "@toruslabs/torus.js": "^17.2.3", "bowser": "^2.14.1", "deepmerge": "^4.3.1", "events": "^3.3.0", @@ -4546,9 +4546,9 @@ } }, "node_modules/@toruslabs/torus.js": { - "version": "17.2.2", - "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-17.2.2.tgz", - "integrity": "sha512-u1r3DYwW7Bt/APlwcBw1jVBuKRfhmYXwY0iA9DDIhHTZ6IW6RTb7Q7nfoy7IXPrPKoj70Iq2DmfNhVV9kFfI5Q==", + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-17.2.3.tgz", + "integrity": "sha512-CmE2xm3LRZh36UySDXNZOeO/pqf7hbvuT5KRUzmgJI4r+Q//HrJ1xOW2zJ9UZl9bym1Il0031r+Mv+N1krbWpQ==", "license": "MIT", "dependencies": { "@toruslabs/constants": "^16.1.1", diff --git a/package.json b/package.json index f3b828a0..a222850b 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ }, "dependencies": { "@toruslabs/constants": "^16.1.1", - "@toruslabs/customauth": "^22.3.2", + "@toruslabs/customauth": "^22.3.3", "@toruslabs/ffjavascript": "^6.0.0", "@toruslabs/metadata-helpers": "^8.2.0", "@toruslabs/secure-pub-sub": "^4.3.0", diff --git a/src/core/auth.ts b/src/core/auth.ts index 46cf8b14..ffbf2755 100644 --- a/src/core/auth.ts +++ b/src/core/auth.ts @@ -23,6 +23,7 @@ import { BaseLoginParams, BUILD_ENV, DEFAULT_SESSION_TIME, + generateRecordId, jsonToBase64, LoginParams, POPUP_TIMEOUT, @@ -323,6 +324,7 @@ export class Auth { }; const loginId = StorageManager.generateRandomSessionKey(); + const recordId = generateRecordId(); const dataObject: AuthRequestPayload = { actionType: AUTH_ACTIONS.MANAGE_MFA, @@ -342,7 +344,7 @@ export class Auth { extraLoginOptions: { login_hint: this.state.userInfo.userId, }, - appState: jsonToBase64({ loginId }), + appState: jsonToBase64({ loginId, recordId }), }, sessionId: this.sessionId, accessToken: await this.getAccessToken(), @@ -351,6 +353,7 @@ export class Auth { this.storeAuthPayload(loginId, dataObject, dataObject.options.sessionTime, true); const configParams: BaseLoginParams = { loginId, + recordId, sessionNamespace: this.options.sessionNamespace, storageServerUrl: this.options.storageServerUrl, }; @@ -528,9 +531,11 @@ export class Auth { private async authHandler(url: string, dataObject: AuthRequestPayload, popupTimeout = 1000 * 10): Promise { const loginId = StorageManager.generateRandomSessionKey(); + const recordId = generateRecordId(); await this.storeAuthPayload(loginId, dataObject); const configParams: BaseLoginParams = { loginId, + recordId, sessionNamespace: this.options.sessionNamespace, storageServerUrl: this.options.storageServerUrl, }; diff --git a/src/utils/interfaces.ts b/src/utils/interfaces.ts index 19074590..5758a696 100644 --- a/src/utils/interfaces.ts +++ b/src/utils/interfaces.ts @@ -539,6 +539,11 @@ export interface BaseLoginParams { loginId?: string; sessionNamespace?: string; storageServerUrl?: string; + + /** + * Optional record id to be used for analytics purposes. + */ + recordId?: string; } export interface AuthRequestPayload { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 46d0000e..6f30cbe3 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -31,3 +31,9 @@ export function isObject(value: unknown): value is Record export function hasProperty(value: unknown, key: Key): value is Record { return isObject(value) && key in value; } + +export function generateRecordId(): string { + const cr = typeof globalThis === "object" ? globalThis.crypto : null; + if (typeof cr?.randomUUID !== "function") throw new Error("crypto.randomUUID must be defined"); + return cr.randomUUID(); +}