From 6117b28cb45eb4f9be45ad18c46a98d4387c27ab Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Tue, 26 Nov 2024 20:00:00 -0500 Subject: [PATCH 01/10] more scalable components --- .../dimo-network-login-with-dimo-0.0.9.tgz | Bin 21567 -> 21571 bytes example-dimo-auth/package-lock.json | 2 +- sdk/package-lock.json | 42 ++--- sdk/src/auth/embedAuth.ts | 34 +---- sdk/src/auth/popupAuth.ts | 40 +---- sdk/src/auth/redirectAuth.ts | 26 ++-- sdk/src/components/BaseDimoButton.tsx | 60 +++----- .../ExecuteAdvancedTransactionWithDimo.tsx | 2 +- sdk/src/components/LoginWithDimo.tsx | 4 +- sdk/src/components/ShareVehiclesWithDimo.tsx | 6 +- sdk/src/types/BasePayload.ts | 16 ++ sdk/src/utils/eventHandler.ts | 143 +++++++++--------- 12 files changed, 151 insertions(+), 224 deletions(-) create mode 100644 sdk/src/types/BasePayload.ts diff --git a/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz b/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz index 33d1c0d53645c7ad9696b7cda2dbaabb15321d98..fe13a8ec7fcc882f75ad60529457f04687ea9320 100644 GIT binary patch literal 21571 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 CAJB0C diff --git a/example-dimo-auth/package-lock.json b/example-dimo-auth/package-lock.json index 4de133b..b215273 100644 --- a/example-dimo-auth/package-lock.json +++ b/example-dimo-auth/package-lock.json @@ -2237,7 +2237,7 @@ "node_modules/@dimo-network/login-with-dimo": { "version": "0.0.9", "resolved": "file:dimo-network-login-with-dimo-0.0.9.tgz", - "integrity": "sha512-F2xCQOcB+QkMIN/4gbSr88m9+k1kGfF6lBaDUjxcdAqyYMO0lCHVRBLwAl8J5e8jA4aIWHDerDhX+JWu6Roc1Q==", + "integrity": "sha512-At+ooMzYggJZXruegcnpaqd1f/UN2TQWnh/QdG3BK8MxCTHyvWwESrZehrhBbYICefXCg+Ghvsb+Q3mn2Hc+8Q==", "license": "ISC", "peerDependencies": { "react": "^18.0.0", diff --git a/sdk/package-lock.json b/sdk/package-lock.json index 8bb2c8a..ec8e209 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "@dimo-network/login-with-dimo", - "version": "0.0.8", + "version": "0.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dimo-network/login-with-dimo", - "version": "0.0.8", + "version": "0.0.9", "license": "ISC", "devDependencies": { "@types/react": "^18.3.11", @@ -122,12 +122,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", - "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", + "version": "22.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz", + "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==", "dev": true, "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/prop-types": { @@ -443,9 +443,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001683", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", - "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "dev": true, "funding": [ { @@ -599,9 +599,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.64", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", - "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==", + "version": "1.5.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", + "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", "dev": true }, "node_modules/enhanced-resolve": { @@ -1014,9 +1014,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -1604,9 +1604,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1617,9 +1617,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true }, "node_modules/update-browserslist-db": { diff --git a/sdk/src/auth/embedAuth.ts b/sdk/src/auth/embedAuth.ts index be49361..c94840f 100644 --- a/sdk/src/auth/embedAuth.ts +++ b/sdk/src/auth/embedAuth.ts @@ -1,37 +1,11 @@ import { EntryState } from "../enums/globalEnums"; +import { BasePayload } from "../types/BasePayload"; import { TransactionData } from "../types/TransactionData"; import { handleMessageForEmbed } from "../utils/eventHandler"; export const embedAuth = ( - entryState: EntryState, - onSuccess: (data: { - token: string; - transactionHash?: string; - transactionReceipt?: any; - }) => void, - onError: (error: Error) => void, - setAuthenticated: React.Dispatch>, - dimoLogin: string, - clientId?: string, - redirectUri?: string, - apiKey?: string, - permissionTemplateId?: string, - vehicles?: string[], - vehicleMakes?: string[], - transactionData?: TransactionData + basePayload: BasePayload, + data?: Record ) => { - const cleanup = handleMessageForEmbed( - dimoLogin, - entryState, - onSuccess, - onError, - setAuthenticated, - clientId, - redirectUri, - apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData - ); + const cleanup = handleMessageForEmbed(basePayload, data); }; diff --git a/sdk/src/auth/popupAuth.ts b/sdk/src/auth/popupAuth.ts index b79263e..9dc47a1 100644 --- a/sdk/src/auth/popupAuth.ts +++ b/sdk/src/auth/popupAuth.ts @@ -1,26 +1,14 @@ import { EntryState } from "../enums/globalEnums"; +import { BasePayload } from "../types/BasePayload"; import { TransactionData } from "../types/TransactionData"; import { handleMessageForPopup } from "../utils/eventHandler"; export const popupAuth = ( - entryState: EntryState, - onSuccess: (data: { - token: string; - transactionHash?: string; - transactionReceipt?: any; - }) => void, - onError: (error: Error) => void, - setAuthenticated: React.Dispatch>, - dimoLogin: string, - clientId?: string, - redirectUri?: string, - apiKey?: string, - permissionTemplateId?: string, - vehicles?: string[], - vehicleMakes?: string[], - transactionData?: TransactionData + basePayload: BasePayload, + data?: Record // Component-specific data ) => { try { + const { entryState, onSuccess, onError, setAuthenticated, dimoLogin } = basePayload; const popup = window.open( dimoLogin, "_blank", @@ -32,26 +20,12 @@ export const popupAuth = ( } // Set up message handler for popup auth - const cleanup = handleMessageForPopup( - dimoLogin, - entryState, - onSuccess, - onError, - setAuthenticated, - popup, - clientId, - redirectUri, - apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData - ); + const cleanup = handleMessageForPopup(basePayload, data, dimoLogin, popup); } catch (error: unknown) { if (error instanceof Error) { - onError(error); + basePayload.onError(error); } else { - onError(new Error("An unknown error occurred")); + basePayload.onError(new Error("An unknown error occurred")); } } }; diff --git a/sdk/src/auth/redirectAuth.ts b/sdk/src/auth/redirectAuth.ts index 79e7505..0297393 100644 --- a/sdk/src/auth/redirectAuth.ts +++ b/sdk/src/auth/redirectAuth.ts @@ -1,33 +1,29 @@ import { EntryState } from "../enums/globalEnums"; +import { BasePayload } from "../types/BasePayload"; import { TransactionData } from "../types/TransactionData"; -export const redirectAuth = ( - entryState: EntryState, - onSuccess: (authData: { token: string }) => void, - onError: (error: Error) => void, - dimoLogin: string, - clientId?: string, - redirectUri?: string, - apiKey?: string, //We don't want to send an API key in the url - permissionTemplateId?: string, - vehicles?: string[], - vehicleMakes?: string[], - transactionData?: TransactionData // Add transactionData as a parameter -) => { +export const redirectAuth = (payload: BasePayload, data?: any) => { // Create URLSearchParams instance + + const { clientId, redirectUri, entryState, dimoLogin } = payload; + + const { permissionTemplateId, vehicles, vehicleMakes, transactionData } = data; + const params = new URLSearchParams(); + + if (clientId) params.append("clientId", clientId); if (redirectUri) params.append("redirectUri", redirectUri); if (permissionTemplateId) params.append("permissionTemplateId", permissionTemplateId); if (entryState) params.append("entryState", entryState); if (vehicles && vehicles.length > 0) { - vehicles.forEach((vehicle) => params.append("vehicles", vehicle)); + vehicles.forEach((vehicle: string) => params.append("vehicles", vehicle)); } if (vehicleMakes && vehicleMakes.length > 0) { - vehicleMakes.forEach((vehicleMake) => + vehicleMakes.forEach((vehicleMake: string) => params.append("vehicleMakes", vehicleMake) ); } diff --git a/sdk/src/components/BaseDimoButton.tsx b/sdk/src/components/BaseDimoButton.tsx index f3ec73a..ebeb5b2 100644 --- a/sdk/src/components/BaseDimoButton.tsx +++ b/sdk/src/components/BaseDimoButton.tsx @@ -10,7 +10,6 @@ import { useDimoAuthState, useDimoAuthUpdater, } from "../auth/context/DimoAuthContext"; -import { TransactionData } from "../types/TransactionData"; interface BaseDimoButtonProps { mode: "popup" | "embed" | "redirect"; @@ -23,10 +22,7 @@ interface BaseDimoButtonProps { onError: (error: Error) => void; // Error callback buttonLabel: (authenticated: boolean) => string; // Function to determine button label dynamically disableIfAuthenticated?: boolean; // Disable button if authenticated (default: false) - permissionTemplateId?: string; - vehicles?: string[]; - vehicleMakes?: string[]; - transactionData?: TransactionData; + payload: Record; // Dynamic payload object } const BaseDimoButton: React.FC = ({ @@ -36,10 +32,7 @@ const BaseDimoButton: React.FC = ({ onError, buttonLabel, disableIfAuthenticated = false, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData, + payload, }) => { const { clientId, redirectUri, apiKey, environment } = getDimoConfig(); @@ -53,37 +46,23 @@ const BaseDimoButton: React.FC = ({ : "https://login.dimo.org"; const handleButtonClick = () => { + const basePayload = { + entryState, + onSuccess, + onError, + setAuthenticated, + dimoLogin, + clientId, + redirectUri, + apiKey, + }; + switch (mode) { case "popup": - popupAuth( - entryState, - onSuccess, - onError, - setAuthenticated, - dimoLogin, - clientId, - redirectUri, - apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData - ); + popupAuth(basePayload, payload); break; case "redirect": - redirectAuth( - entryState, - onSuccess, - onError, - dimoLogin, - clientId, - redirectUri, - apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData - ); + redirectAuth(basePayload, payload); break; default: console.error("Unsupported mode for button click"); @@ -93,7 +72,7 @@ const BaseDimoButton: React.FC = ({ // Trigger embedAuth only once the iframe has fully loaded const handleIframeLoad = () => { if (mode === "embed") { - embedAuth( + embedAuth({ entryState, onSuccess, onError, @@ -102,11 +81,8 @@ const BaseDimoButton: React.FC = ({ clientId, redirectUri, apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData - ); + ...payload, // Include dynamic payload data + }); } }; diff --git a/sdk/src/components/ExecuteAdvancedTransactionWithDimo.tsx b/sdk/src/components/ExecuteAdvancedTransactionWithDimo.tsx index f6c9f9c..3fed1ba 100644 --- a/sdk/src/components/ExecuteAdvancedTransactionWithDimo.tsx +++ b/sdk/src/components/ExecuteAdvancedTransactionWithDimo.tsx @@ -39,7 +39,7 @@ const ExecuteAdvancedTransactionWithDimo: React.FC< onSuccess={onSuccess} onError={onError} buttonLabel={() => "Execute Advanced Transaction with Dimo"} - transactionData={transactionData} + payload={{ transactionData, eventType:"EXECUTE_ADVANCED_TRANSACTION"}} /> ); }; diff --git a/sdk/src/components/LoginWithDimo.tsx b/sdk/src/components/LoginWithDimo.tsx index 1a0ab28..78a4b64 100644 --- a/sdk/src/components/LoginWithDimo.tsx +++ b/sdk/src/components/LoginWithDimo.tsx @@ -29,9 +29,7 @@ const LoginWithDimo: React.FC = ({ authenticated ? "Connected with DIMO" : "Continue with DIMO" } // Dynamic label based on auth state disableIfAuthenticated={true} // Disable button when authenticated - permissionTemplateId={permissionTemplateId} // Pass permissionTemplateId if provided - vehicles={vehicles} // Pass vehicles if provided - vehicleMakes={vehicleMakes} + payload={{ permissionTemplateId, vehicles, vehicleMakes, eventType: "SHARE_VEHICLES_DATA" }} /> ); }; diff --git a/sdk/src/components/ShareVehiclesWithDimo.tsx b/sdk/src/components/ShareVehiclesWithDimo.tsx index 9445a99..7946dd5 100644 --- a/sdk/src/components/ShareVehiclesWithDimo.tsx +++ b/sdk/src/components/ShareVehiclesWithDimo.tsx @@ -17,7 +17,7 @@ const ShareVehiclesWithDimo: React.FC = ({ onError, permissionTemplateId, vehicles, - vehicleMakes + vehicleMakes, }) => { return ( = ({ onSuccess={onSuccess} onError={onError} buttonLabel={() => "Share Vehicles with DIMO"} - permissionTemplateId={permissionTemplateId} // Pass permissions template - vehicles={vehicles} // Pass vehicle IDs - vehicleMakes={vehicleMakes} + payload={{ permissionTemplateId, vehicles, vehicleMakes, eventType: "SHARE_VEHICLES_DATA" }} /> ); }; diff --git a/sdk/src/types/BasePayload.ts b/sdk/src/types/BasePayload.ts new file mode 100644 index 0000000..ac1c816 --- /dev/null +++ b/sdk/src/types/BasePayload.ts @@ -0,0 +1,16 @@ +import { EntryState } from "../enums/globalEnums"; + +export interface BasePayload { + entryState: EntryState; + onSuccess: (data: { + token: string; + transactionHash?: string; + transactionReceipt?: any; + }) => void; + onError: (error: Error) => void; + setAuthenticated: React.Dispatch>; + dimoLogin: string; + clientId?: string; + redirectUri?: string; + apiKey?: string; // Avoid sending API key in the URL +} diff --git a/sdk/src/utils/eventHandler.ts b/sdk/src/utils/eventHandler.ts index 01e1a6b..c1eb301 100644 --- a/sdk/src/utils/eventHandler.ts +++ b/sdk/src/utils/eventHandler.ts @@ -1,5 +1,6 @@ import { EntryState } from "../enums/globalEnums"; import { storeJWTInCookies } from "../storage/storageManager"; +import { BasePayload } from "../types/BasePayload"; import { TransactionData } from "../types/TransactionData"; /** @@ -20,24 +21,21 @@ function getDomain(url: string) { } export const handleMessageForPopup = ( + basePayload: BasePayload, // Accept dynamic payload, + data: any, expectedOrigin: string, - entryState: EntryState, - onSuccess: (data: { - token: string; - transactionHash?: string; - transactionReceipt?: any; - }) => void, - onError: (error: Error) => void, - setAuthenticated: React.Dispatch>, - popup?: Window | null, - clientId?: string, - redirectUri?: string, - apiKey?: string, - permissionTemplateId?: string, - vehicles?: string[], - vehicleMakes?: string[], - transactionData?: TransactionData + popup: Window | null ) => { + const { + entryState, + onSuccess, + onError, + setAuthenticated, + clientId, + redirectUri, + apiKey, + } = basePayload; + const popupListener = (event: MessageEvent) => { if (getDomain(event.origin) !== getDomain(expectedOrigin)) { console.warn("Received message from an unknown origin:", event.origin); @@ -46,44 +44,46 @@ export const handleMessageForPopup = ( const { eventType, token, authType, transactionHash, message } = event.data; - // Handle the "READY" message if (eventType === "READY") { - // Once the "READY" message is received, send the credentials - if (popup) { - //Temporary Fix - //Seems like on Safari, and Mobile Browsers - the popup is not ready to receive messages, even after sending a "READY" message - //The set timeout acts as a solution, by modifying the callback loop - setTimeout(() => { - popup.postMessage( - { - clientId, - redirectUri, - apiKey, - permissionTemplateId, - vehicles, - vehicleMakes, - transactionData, - entryState, - eventType: "AUTH_INIT", - }, - expectedOrigin - ); - }, 0); - } else { - onError(new Error("Popup window not available to send credentials")); - } + // Send only the relevant data based on the payload + const initialMessage = { + clientId, + redirectUri, + apiKey, + entryState, + eventType: "AUTH_INIT", + }; + + setTimeout(() => { + if (popup) { + popup.postMessage(initialMessage, expectedOrigin); + } else { + onError(new Error("Popup window not available to send credentials")); + } + }, 0); + + } + + if (eventType === data.eventType) { + //SEND DATA MESSAGE, WITH PAYLOAD AND EVENT TYPE + const dataMessage = { ...data, eventType: data.eventType }; + + setTimeout(() => { + if (popup) { + popup.postMessage(dataMessage, expectedOrigin); + } else { + onError(new Error("Popup window not available to send credentials")); + } + }, 0); } if (authType === "popup" && token) { - //TBD: Can store user object in DIMO State here, but then would need to handle clearing it out storeJWTInCookies(token); setAuthenticated(true); onSuccess({ token }); - // Close the popup after success if (popup && !popup.closed) { popup.close(); - console.log("Popup closed successfully."); } window.removeEventListener("message", popupListener); @@ -96,37 +96,29 @@ export const handleMessageForPopup = ( } if (eventType === "DIMO_ERROR") { - onError(message); + onError(new Error(message)); } }; - // Add event listener specifically for popup auth window.addEventListener("message", popupListener); - // Return a cleanup function to remove this listener return () => window.removeEventListener("message", popupListener); }; -export const handleMessageForEmbed = ( - expectedOrigin: string, - entryState: EntryState, - onSuccess: (data: { - token: string; - transactionHash?: string; - transactionReceipt?: any; - }) => void, - onError: (error: Error) => void, - setAuthenticated: React.Dispatch>, - clientId?: string, - redirectUri?: string, - apiKey?: string, - permissionTemplateId?: string, - vehicles?: string[], - vehicleMakes?: string[], - transactionData?: TransactionData -) => { +export const handleMessageForEmbed = (basePayload: BasePayload, data: any) => { const embedListener = (event: MessageEvent) => { - if (getDomain(event.origin) !== getDomain(expectedOrigin)) { + const { + entryState, + onSuccess, + onError, + setAuthenticated, + clientId, + redirectUri, + apiKey, + dimoLogin, + } = basePayload; + + if (getDomain(event.origin) !== getDomain(dimoLogin)) { console.warn("Received message from an unknown origin:", event.origin); return; } @@ -140,24 +132,27 @@ export const handleMessageForEmbed = ( const iframe = document.getElementById("dimo-iframe"); // Define the message data - const message = { + const initialMessage = { clientId, - apiKey, redirectUri, - permissionTemplateId, - vehicles, - vehicleMakes, + apiKey, entryState, - transactionData, eventType: "AUTH_INIT", }; // Send the message to the iframe - // Replace "https://example-iframe.com" with the actual origin of the iframe's URL //@ts-ignore - iframe.contentWindow.postMessage(message, expectedOrigin); + iframe.contentWindow.postMessage(initialMessage, dimoLogin); } + if (eventType === data.eventType) { + //SEND DATA MESSAGE, WITH PAYLOAD AND EVENT TYPE + const dataMessage = { ...data, eventType: data.eventType }; + + //@ts-ignore + iframe.contentWindow.postMessage(dataMessage, dimoLogin); + } + if (authType === "embed" && token) { storeJWTInCookies(token); setAuthenticated(true); From 1c78fb161c0d5837a58206bc37289eccba6c7f72 Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:44:06 -0500 Subject: [PATCH 02/10] send payload in embed auth --- sdk/src/components/BaseDimoButton.tsx | 34 ++++++++++----------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/sdk/src/components/BaseDimoButton.tsx b/sdk/src/components/BaseDimoButton.tsx index ebeb5b2..d787140 100644 --- a/sdk/src/components/BaseDimoButton.tsx +++ b/sdk/src/components/BaseDimoButton.tsx @@ -45,18 +45,18 @@ const BaseDimoButton: React.FC = ({ ? "https://login.dev.dimo.org" : "https://login.dimo.org"; - const handleButtonClick = () => { - const basePayload = { - entryState, - onSuccess, - onError, - setAuthenticated, - dimoLogin, - clientId, - redirectUri, - apiKey, - }; + const basePayload = { + entryState, + onSuccess, + onError, + setAuthenticated, + dimoLogin, + clientId, + redirectUri, + apiKey, + }; + const handleButtonClick = () => { switch (mode) { case "popup": popupAuth(basePayload, payload); @@ -72,17 +72,7 @@ const BaseDimoButton: React.FC = ({ // Trigger embedAuth only once the iframe has fully loaded const handleIframeLoad = () => { if (mode === "embed") { - embedAuth({ - entryState, - onSuccess, - onError, - setAuthenticated, - dimoLogin, - clientId, - redirectUri, - apiKey, - ...payload, // Include dynamic payload data - }); + embedAuth(basePayload, payload); } }; From 75af5f8bb9147227ae28b270c6627e9a4b04de3f Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:44:15 -0500 Subject: [PATCH 03/10] add storage functions --- sdk/src/storage/storageManager.ts | 35 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/sdk/src/storage/storageManager.ts b/sdk/src/storage/storageManager.ts index 585987f..ec1fb4f 100644 --- a/sdk/src/storage/storageManager.ts +++ b/sdk/src/storage/storageManager.ts @@ -9,13 +9,36 @@ */ export const storeJWTInCookies = (jwt: string): void => { - const expirationDate = new Date(); - expirationDate.setFullYear(expirationDate.getFullYear() + 10); // Set expiration to 10 years in the future - - document.cookie = `dimo_auth_token=${jwt}; expires=${expirationDate.toUTCString()}; path=/`; + const expirationDate = new Date(); + expirationDate.setFullYear(expirationDate.getFullYear() + 10); // Set expiration to 10 years in the future + + document.cookie = `dimo_auth_token=${jwt}; expires=${expirationDate.toUTCString()}; path=/`; +}; + +// Utility function to store user properties in localStorage for a given clientId +export const storeWalletAddressInLocalStorage = ( + walletAddress: string +): void => { + localStorage.setItem(`dimo_wallet_address`, walletAddress); +}; + +export const storeEmailInLocalStorage = (email: string): void => { + localStorage.setItem(`dimo_user_email`, email); }; export const getJWTFromCookies = (): string | null => { - const cookie = document.cookie.split('; ').find(row => row.startsWith(`dimo_auth_token=`)); - return cookie ? cookie.split('=')[1] : null; + const cookie = document.cookie + .split("; ") + .find((row) => row.startsWith(`dimo_auth_token=`)); + return cookie ? cookie.split("=")[1] : null; +}; + +export const getWalletAddressFromLocalStorage = (): string | null => { + const walletAddress = localStorage.getItem("dimo_wallet_address"); + return walletAddress; +}; + +export const getEmailFromLocalStorage = (): string | null => { + const email = localStorage.getItem("dimo_user_email"); + return email; }; From cefb51d063b62a031b4b8cad3ccef56eae28c8c1 Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:44:38 -0500 Subject: [PATCH 04/10] save data on auth response --- sdk/src/utils/eventHandler.ts | 91 ++++++++++++++++++++++++----------- 1 file changed, 64 insertions(+), 27 deletions(-) diff --git a/sdk/src/utils/eventHandler.ts b/sdk/src/utils/eventHandler.ts index c1eb301..1954a29 100644 --- a/sdk/src/utils/eventHandler.ts +++ b/sdk/src/utils/eventHandler.ts @@ -1,5 +1,9 @@ import { EntryState } from "../enums/globalEnums"; -import { storeJWTInCookies } from "../storage/storageManager"; +import { + storeEmailInLocalStorage, + storeJWTInCookies, + storeWalletAddressInLocalStorage, +} from "../storage/storageManager"; import { BasePayload } from "../types/BasePayload"; import { TransactionData } from "../types/TransactionData"; @@ -42,7 +46,15 @@ export const handleMessageForPopup = ( return; } - const { eventType, token, authType, transactionHash, message } = event.data; + const { + eventType, + token, + walletAddress, + email, + authType, + transactionHash, + message, + } = event.data; if (eventType === "READY") { // Send only the relevant data based on the payload @@ -61,7 +73,6 @@ export const handleMessageForPopup = ( onError(new Error("Popup window not available to send credentials")); } }, 0); - } if (eventType === data.eventType) { @@ -74,13 +85,23 @@ export const handleMessageForPopup = ( } else { onError(new Error("Popup window not available to send credentials")); } - }, 0); + }, 0); } - if (authType === "popup" && token) { - storeJWTInCookies(token); - setAuthenticated(true); - onSuccess({ token }); + if (authType === "popup") { + if (walletAddress) { + storeWalletAddressInLocalStorage(walletAddress); + } + + if (email) { + storeEmailInLocalStorage(email); + } + + if (token) { + storeJWTInCookies(token); + setAuthenticated(true); + onSuccess({ token }); + } if (popup && !popup.closed) { popup.close(); @@ -106,25 +127,31 @@ export const handleMessageForPopup = ( }; export const handleMessageForEmbed = (basePayload: BasePayload, data: any) => { + const { + entryState, + onSuccess, + onError, + setAuthenticated, + clientId, + redirectUri, + apiKey, + dimoLogin, + } = basePayload; const embedListener = (event: MessageEvent) => { - const { - entryState, - onSuccess, - onError, - setAuthenticated, - clientId, - redirectUri, - apiKey, - dimoLogin, - } = basePayload; - if (getDomain(event.origin) !== getDomain(dimoLogin)) { console.warn("Received message from an unknown origin:", event.origin); return; } - const { eventType, token, authType, transactionHash, transactionReceipt } = - event.data; + const { + eventType, + token, + walletAddress, + email, + authType, + transactionHash, + transactionReceipt, + } = event.data; if (eventType === "READY") { // Once the "READY" message is received, send the credentials @@ -150,13 +177,23 @@ export const handleMessageForEmbed = (basePayload: BasePayload, data: any) => { const dataMessage = { ...data, eventType: data.eventType }; //@ts-ignore - iframe.contentWindow.postMessage(dataMessage, dimoLogin); - } + iframe.contentWindow.postMessage(dataMessage, dimoLogin); + } + + if (authType === "embed") { + if (walletAddress) { + storeWalletAddressInLocalStorage(walletAddress); + } - if (authType === "embed" && token) { - storeJWTInCookies(token); - setAuthenticated(true); - onSuccess({ token }); + if (email) { + storeEmailInLocalStorage(email); + } + + if (token) { + storeJWTInCookies(token); + setAuthenticated(true); + onSuccess({ token }); + } } if (eventType === "transactionResponse") { From 392ed2ea892b47ba30843715a7f89fd0558d965a Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:44:48 -0500 Subject: [PATCH 05/10] expose data in state --- sdk/src/auth/context/DimoAuthContext.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/sdk/src/auth/context/DimoAuthContext.tsx b/sdk/src/auth/context/DimoAuthContext.tsx index c020e48..8418dba 100644 --- a/sdk/src/auth/context/DimoAuthContext.tsx +++ b/sdk/src/auth/context/DimoAuthContext.tsx @@ -1,12 +1,15 @@ // DimoAuthContext.tsx import React, { createContext, useContext, useEffect, useState } from "react"; -import { getJWTFromCookies } from "../../storage/storageManager"; +import { getEmailFromLocalStorage, getJWTFromCookies, getWalletAddressFromLocalStorage } from "../../storage/storageManager"; import { isTokenExpired } from "../../token/tokenManager"; // Define the type of the context type DimoAuthContextType = { isAuthenticated: boolean; // Read-only for app developers + walletAddress: string | null; + email: string | null; getValidJWT: () => string | null; + getEmail: () => string | null; }; // Create the context @@ -29,6 +32,18 @@ export const DimoAuthProvider = ({ children: React.ReactNode; }) => { const [isAuthenticated, setAuthenticated] = useState(false); + + const hasEmailPermission = !!getEmailFromLocalStorage(); + const email = hasEmailPermission ? getEmailFromLocalStorage() : ""; + const walletAddress = getWalletAddressFromLocalStorage(); + + const getEmail = () => { + if (hasEmailPermission) { + return email; + } else { + throw new Error("No permission to access email"); + } + }; const getValidJWT = () => { @@ -47,7 +62,7 @@ export const DimoAuthProvider = ({ }, []); return ( - + {children} From 9ae7cd56157a7e3c9e78ec04a3c931a03b98d6d7 Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:44:56 -0500 Subject: [PATCH 06/10] use data in app --- example-dimo-auth/src/App.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/example-dimo-auth/src/App.tsx b/example-dimo-auth/src/App.tsx index c09f1fc..31d96c7 100644 --- a/example-dimo-auth/src/App.tsx +++ b/example-dimo-auth/src/App.tsx @@ -11,7 +11,8 @@ import { function App() { const [permissionsEnabled, setPermissionsEnabled] = useState(false); - const { isAuthenticated, getValidJWT } = useDimoAuthState(); + const { isAuthenticated, getValidJWT, email, getEmail, walletAddress } = + useDimoAuthState(); const sampleAbi = [ { @@ -1120,6 +1121,14 @@ function App() { + {isAuthenticated && ( +
+

Connected User

+

Wallet Address:{walletAddress}

+ {email &&

{email}

} +
+ )} +

Popup Example

From 952d4c3109a1b0d6794362187194c05c1e1899dc Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Fri, 29 Nov 2024 22:45:09 -0500 Subject: [PATCH 07/10] package fixes --- .../dimo-network-login-with-dimo-0.0.9.tgz | Bin 21571 -> 22197 bytes example-dimo-auth/package-lock.json | 41 ++++++++++-------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz b/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz index fe13a8ec7fcc882f75ad60529457f04687ea9320..91bdd834b884a7b1303f8ecf89adaffd3ec18015 100644 GIT binary patch literal 22197 zcmV)AK*YZviwFP!00002|LuKwTiZzT@c!*j(b4V$(u|M~Y#=5|Rv2eOCL|e-War27 z5+Sv*23hh-GRG2s_xGvlZmD$`o7^*N&ojZ6`l!CD>#niwT-q139!E|+PHue~*LUog z?s}teXObjgU^sF7x6k`D8jX#1n^Zk-G#af&Ym@wKy|dA1Ha9jJZSuE9v%R?ifB*Ik zK9e}HqrWviyDv5vlK%aZd}=krnZ!vrT06((CU-SLu01yycFFo?XMD3=BVWCUKXv+U)Vzc3m&H=#q``4QX!3WxJ#~z9DhwdoKAqn<9AWdhyt| zZ@XmRQ!H)!-bJwHC3F;bi9>^gM)3HLNt}3t+chT)5*j4(s|$PFC0nd7XA;F>)FtE4 z6R!thkgUbte`z;`2p?VZA$1raPUu5L3AA(Dxx9$NN#L%DmjnEyO$_Xj=ihe8>T%#* z(I~cka%cxJ*=2)T)k$mz@mfqH4=W{+9mHPZg+aH}I%yc|F`;%$by9kO6$fE7A`PR- z9&XpB#g*&2UTmNH)WszfQxSy8n(h1HHFc}%1Yx446}9d#yrL1-uNwX){I^Z&KM~7? z6`?K}gb}fc4|7Q)oy3###HWNcLk9!uB;=>M7&{E1OJc|NsoFFeEe+c`#M=HXp@DBl z7c?fxkP^NdS^J~VrBOfzl={$Ic^I~ncvo~5;Isq(VQ0H`bV(x;4{euXCB%su# zF6%ryZ!Lb_ruh~VdXw-LrG2}N52`kI`4mWFZ(i`KC_zU-O@BQCi-`wmJ@Bijzv$4GYzs2X#U=lcRC#h6Vv^ym{|ARV-Vw%bA zn1%yFZ^mJi#49VMH>1#<`1Be3WAJijqDJ&T6EC8w5>eYp6iw?YqK~YyO9x&+S60|x z!ydWM*jM$0*E`h{tvd^xXZ)`Lbn2_{!V4I&dbs;*B?Pp(AT-^p%?2aHJ_@g zW@1J_LUux#Jp=aH@YxMdH^K?!&MXg&gw$>c&cHk$PCntMpM&6GcW=* z(sa)Z)b(at(`|g>X{x4%s-|t*#&{AB)e~xXuCDw$_;*mG!~Pu<2r+n&qr~7r6)6VK z%d}Wlx{4Tsw|Qy|o>Y-z@O&0M2JcdW41N?TGI&UfXCRLWU@*uJd zYJE|oEq2~D1$ckxq;^okbjgdW8)%0D$ng~oq(IfLJ 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 IGXUHH06o*<2LJ#7 literal 21571 zcmV)kK%l=LiwFP!00002|LuKwd)qeh@cyk&fpGVc$(E)LOFpD9Sy@&Rr*V?{NVh+) zUxy|ki#0`RNy^7M`tI*D1Aqh%*>d6>?Mi(bOC*lL02s`LnTcgzSm(4Bg?259Z#){+ zwylWnxZ_}Z8pnZe*irPiFZ&<#|gZyo+ytW!>tC9O(+DRb7M^}7EZ3c)Pcu-LS?aZ<-&ck5pJFDX55I;#1Lu>4MHyyHa zc(0`s1;G26dqv3VGxc< z-Dt3f-O4OKa~;QxtTT@~IE4Zgeh{x(o)=tEr>u@2#A;Ge>x_a+8e;vj;cviyT~hmr z^cX2a&5{r0%OB(7Vnx4fTC9D}b98x7*wz8o_HGFE zJu5t?5s62X@YTrL9|sN%eKMrfgXW6EuL~wo!^kVnxKK z)S(XRJl$_izTalq7GruH^A@Fb+r;*|IpjtmY@HP&xD`< zjvK`_*LUc(@kjK?ecXBex0=mXGk^X!);E^t|2O$O8BTp0&LoxUv39EjXMa#TR!lR# znb2TJ==CHBP7znYtlWm5^F?tY}(C5q+eU9XfPss;i$2G+v`C2Xr^JQ(Dc>ydPCC#(>HuI z)O6SM)wM=T(=B}BYO1CNs-|@M=E3M_2ys|J%>=VgL4Xj2Jw~aANSFj1`0D zMP4i|UB-;T+blN*Ps-Racs`FGgLer-20!u~89d7$M#(ez*uu(LrVIx#mn%zJc@SF$ zwH}o(`?o(UPNu|~$w-lTv+{c7?Abg-d@g^MAmNc1wDPeC9&HZv4`k9xVP2d|;~)|O z|7SThc(M?y#tLS5HFz}3H_O;HR$AuQ*pt$g{}7HX=~K}a zJkb?aEEHut>xPC>k@ktohMe@^+F*WPm=~F7| zPepylJU$WlpvTh_ts7RW*0FP3KRNmINlm8CtycLD(=?sqHoSC>8z%*9JM*yZWU!q+ zZJg+UOHGFYrmN|GwW>PD&6DS%gWQxm$&?ow(czuxYaRYq53sFP+E&R@bJC?&)?n+z z44}c*iK!%Y0$7#ooOU#AHq+zTOkb}z?$}d&-P7a7$!w-?ZZ$G2LkJ6xa}Ew2T2n7Z z{^4BWA2ymf_F=QxPT2=N0v4marRg?4i8Os``f7V!(;a*;)pQRYwCb8Z!6%-k4^3Zf zG}bhIj8BG|J~Dl^)mYc`OIU}O2CDuJt@A@cQq8fd>6b=C<6azx?%6b^k?G(w*N6&>3E|H_Ywl2ukHZtg zb*LY^Lzjl8X;SUhH^c5(NUe(*pFDq-G#si_57VYy^LD0N=JAQnHY+XJsq{EH(Who; zoLLclZXefAerDf0@LhLI_jr2p=~G?zq?I<+6(TK6tqX-r=jR44i;2l+@z#!_jt$Ee zcT2~HO%esu(58FVq+=hio#5GcyeNdbVx($+cf(5 zXC0qRCyo`O~X>G&TcusE1lNG|p~zK|VAiJvO3==h{?_^tyhVBDCY_yp7IS zPuuS_X4;H1yq+e|Y^7)pnDD`7FXk&qjWuzM_#8BqYPx*9O7WAJoSc+6Ov0j`K|gmfHSQdOJH%1DDAu<^NO zs8W-D`gDAv2WIf;)9ox7rc6k9nXXuRmRavwPhGL#EV1B#9=ONWiPnveBY9F+SCeDG zhCcNGNClh^Zprxojlj78gg-uZ!r0!Dw&(4vTZ#ss z^%!QTraMfJo%ooZh^62J_7rG_@t-LTZw{zO?KlWks=->ma(ySbGF~0-z1e*cT4O
Or{bhc$P&t_cQrzJ-h%=nzveC;-) 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 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15674,9 +15677,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", From d73bf35db84f9ce22d5fafbec417503e0a888df5 Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Sat, 30 Nov 2024 17:41:55 -0500 Subject: [PATCH 08/10] event handler cleanup --- sdk/src/utils/eventHandler.ts | 217 +++++++++++++++++----------------- 1 file changed, 106 insertions(+), 111 deletions(-) diff --git a/sdk/src/utils/eventHandler.ts b/sdk/src/utils/eventHandler.ts index 1954a29..770ea52 100644 --- a/sdk/src/utils/eventHandler.ts +++ b/sdk/src/utils/eventHandler.ts @@ -24,8 +24,50 @@ function getDomain(url: string) { return parsedUrl.hostname; } +const validateOrigin = (origin: string, expectedDomain: string): boolean => { + if (getDomain(origin) !== getDomain(expectedDomain)) { + console.warn("Received message from an unknown origin:", origin); + return false; + } + return true; +}; + +const sendMessageToTarget = ( + target: Window | null | undefined, + message: object, + origin: string, + onError: (error: Error) => void +) => { + if (target) { + setTimeout(() => { + target.postMessage(message, origin); + }, 0); + } else { + onError(new Error("Target window not available to send credentials")); + } +}; + +const processAuthResponse = ( + { token, walletAddress, email }: any, + setAuthenticated: (status: boolean) => void, + onSuccess: (data: { + token: string; + transactionHash?: string; + transactionReceipt?: any; + }) => void +) => { + if (walletAddress) storeWalletAddressInLocalStorage(walletAddress); + if (email) storeEmailInLocalStorage(email); + if (token) { + storeJWTInCookies(token); + setAuthenticated(true); + onSuccess({ token }); + } +}; + +// Popup Handler export const handleMessageForPopup = ( - basePayload: BasePayload, // Accept dynamic payload, + basePayload: BasePayload, data: any, expectedOrigin: string, popup: Window | null @@ -41,91 +83,59 @@ export const handleMessageForPopup = ( } = basePayload; const popupListener = (event: MessageEvent) => { - if (getDomain(event.origin) !== getDomain(expectedOrigin)) { - console.warn("Received message from an unknown origin:", event.origin); - return; - } + if (!validateOrigin(event.origin, expectedOrigin)) return; const { eventType, token, walletAddress, email, - authType, + mode, transactionHash, message, } = event.data; - if (eventType === "READY") { - // Send only the relevant data based on the payload - const initialMessage = { - clientId, - redirectUri, - apiKey, - entryState, - eventType: "AUTH_INIT", - }; - - setTimeout(() => { - if (popup) { - popup.postMessage(initialMessage, expectedOrigin); - } else { - onError(new Error("Popup window not available to send credentials")); - } - }, 0); - } - - if (eventType === data.eventType) { - //SEND DATA MESSAGE, WITH PAYLOAD AND EVENT TYPE - const dataMessage = { ...data, eventType: data.eventType }; - - setTimeout(() => { - if (popup) { - popup.postMessage(dataMessage, expectedOrigin); - } else { - onError(new Error("Popup window not available to send credentials")); - } - }, 0); - } - - if (authType === "popup") { - if (walletAddress) { - storeWalletAddressInLocalStorage(walletAddress); - } - - if (email) { - storeEmailInLocalStorage(email); + if (mode === "popup") { + if (eventType === "READY") { + const initialMessage = { + clientId, + redirectUri, + apiKey, + entryState, + eventType: "AUTH_INIT", + }; + sendMessageToTarget(popup, initialMessage, expectedOrigin, onError); } - if (token) { - storeJWTInCookies(token); - setAuthenticated(true); - onSuccess({ token }); + if (eventType === data.eventType) { + const dataMessage = { ...data, eventType: data.eventType }; + sendMessageToTarget(popup, dataMessage, expectedOrigin, onError); } - if (popup && !popup.closed) { - popup.close(); + if (eventType === "authResponse") { + processAuthResponse( + { token, walletAddress, email }, + setAuthenticated, + onSuccess + ); + if (popup && !popup.closed) popup.close(); } - window.removeEventListener("message", popupListener); - } - - if (eventType === "transactionResponse") { - if (transactionHash) { + if (eventType === "transactionResponse" && transactionHash) { onSuccess({ token: "", transactionHash }); } - } - if (eventType === "DIMO_ERROR") { - onError(new Error(message)); + if (eventType === "DIMO_ERROR") { + onError(new Error(message)); + } } }; window.addEventListener("message", popupListener); - return () => window.removeEventListener("message", popupListener); }; +// Embed Handler export const handleMessageForEmbed = (basePayload: BasePayload, data: any) => { const { entryState, @@ -137,77 +147,62 @@ export const handleMessageForEmbed = (basePayload: BasePayload, data: any) => { apiKey, dimoLogin, } = basePayload; + const embedListener = (event: MessageEvent) => { - if (getDomain(event.origin) !== getDomain(dimoLogin)) { - console.warn("Received message from an unknown origin:", event.origin); - return; - } + if (!validateOrigin(event.origin, dimoLogin)) return; + + const iframe = document.getElementById("dimo-iframe"); const { eventType, token, walletAddress, email, - authType, + mode, transactionHash, transactionReceipt, + message, } = event.data; - if (eventType === "READY") { - // Once the "READY" message is received, send the credentials - console.log("Ready Message received"); - const iframe = document.getElementById("dimo-iframe"); - - // Define the message data - const initialMessage = { - clientId, - redirectUri, - apiKey, - entryState, - eventType: "AUTH_INIT", - }; - - // Send the message to the iframe - //@ts-ignore - iframe.contentWindow.postMessage(initialMessage, dimoLogin); - } - - if (eventType === data.eventType) { - //SEND DATA MESSAGE, WITH PAYLOAD AND EVENT TYPE - const dataMessage = { ...data, eventType: data.eventType }; - - //@ts-ignore - iframe.contentWindow.postMessage(dataMessage, dimoLogin); - } - - if (authType === "embed") { - if (walletAddress) { - storeWalletAddressInLocalStorage(walletAddress); + if (mode === "embed") { + if (eventType === "READY") { + const initialMessage = { + clientId, + redirectUri, + apiKey, + entryState, + eventType: "AUTH_INIT", + }; + //@ts-ignore + sendMessageToTarget(iframe?.contentWindow, initialMessage, dimoLogin, onError); } - if (email) { - storeEmailInLocalStorage(email); + if (eventType === data.eventType) { + const dataMessage = { ...data, eventType: data.eventType }; + //@ts-ignore + sendMessageToTarget(iframe?.contentWindow, dataMessage, dimoLogin, onError); } - if (token) { - storeJWTInCookies(token); - setAuthenticated(true); - onSuccess({ token }); + processAuthResponse( + { token, walletAddress, email }, + setAuthenticated, + onSuccess + ); + + if (eventType === "transactionResponse") { + if (transactionHash || transactionReceipt) { + onSuccess({ token: "", transactionHash, transactionReceipt }); + } else { + onError(new Error("Could not execute transaction")); + } } - } - if (eventType === "transactionResponse") { - if (transactionHash || transactionReceipt) { - onSuccess({ token: "", transactionHash, transactionReceipt }); - } else { - onError(Error("Could not execute transaction")); + if (eventType === "DIMO_ERROR") { + onError(new Error(message)); } } }; - // Add event listener specifically for embed auth window.addEventListener("message", embedListener); - - // Return a cleanup function to remove this listener return () => window.removeEventListener("message", embedListener); -}; +}; \ No newline at end of file From 8bee188fe762ed41893ec771b0936038e224cf2a Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Sat, 30 Nov 2024 17:43:51 -0500 Subject: [PATCH 09/10] back to login.dev --- .../dimo-network-login-with-dimo-0.0.9.tgz | Bin 22197 -> 22212 bytes example-dimo-auth/package-lock.json | 25 +++++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz b/example-dimo-auth/dimo-network-login-with-dimo-0.0.9.tgz index 91bdd834b884a7b1303f8ecf89adaffd3ec18015..f0a2e91216972f541c9d453886d8984afbab3742 100644 GIT binary patch literal 22212 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%0D$ng~oq(IfLJ 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 IGXUHH06o*<2LJ#7 diff --git a/example-dimo-auth/package-lock.json b/example-dimo-auth/package-lock.json index be2c227..1218a4c 100644 --- a/example-dimo-auth/package-lock.json +++ b/example-dimo-auth/package-lock.json @@ -2237,7 +2237,7 @@ "node_modules/@dimo-network/login-with-dimo": { "version": "0.0.9", "resolved": "file:dimo-network-login-with-dimo-0.0.9.tgz", - "integrity": "sha512-lLdzBTfcNr5l8kkbt82PDJFyLoe+001Y1VlSifTfNAsEFS4ioU8zBwRk8g8OpQiZrK6kEswyaMjbVCzmVEr1Kw==", + "integrity": "sha512-RnluCr1ksYIWc7/lOmJZeSExYY/UiCYiBpCeRYl0r618ATqtdLPD83xTrPyW/FVqWQFfHK+FO13GQiBl04F4BQ==", "license": "ISC", "peerDependencies": { "react": "^18.0.0", @@ -8079,11 +8079,14 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", "dependencies": { - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8901,12 +8904,14 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" From b90539b09d019908c1d0c614d3994c7bfad27f73 Mon Sep 17 00:00:00 2001 From: moizahmedd Date: Sat, 30 Nov 2024 18:31:31 -0500 Subject: [PATCH 10/10] rebase --- .../dimo-network-login-with-dimo-0.0.10.tgz | Bin 0 -> 22213 bytes example-dimo-auth/package-lock.json | 8 ++++---- example-dimo-auth/package.json | 2 +- sdk/package.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 example-dimo-auth/dimo-network-login-with-dimo-0.0.10.tgz diff --git a/example-dimo-auth/dimo-network-login-with-dimo-0.0.10.tgz b/example-dimo-auth/dimo-network-login-with-dimo-0.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..dc2fbafbbb64a18b73e69efe2ca596e97a58ed33 GIT binary patch literal 22213 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

=K$cBp|1a}KDg&)*zMeN`%k1o7yI~O#0 z`TNoHC>&?QtIB*huX1i^&`bfChqQ&mS+b34DYr~yRyMxxYX6%<{y$p_u)zM;X_fB( zcN&|G75)Fq(0}qZ4uHIPTcZ3R;>x7Ii-a{Fb(Y>tyvXJXc*>1x@Rh|F&c8NdnmnKS z{=cXlsfAY;(kqSpOqva?C;XSPqTuJ$Y>-=ON3lraJe(%e2rZ9kyjM0%Q0Id({|va~ zGem>=kGnsvlUa{7Nn`ULcLg|-@c5{oD*Jn6VkaZB{vi$Kdz?UGklS2(3&b4UIEo;? z=7dI&I0V4+CBn`vAs5~i4N^@+#SGkYcyfok$^*1km>#)n!25ne$0|bytAEBr^L!|T z`_w8lAM;LM4Cb3VewPLUuyuxYKkxvfTD8h0e_W&5rI7HrkVsCo`+M5|;v-lC13YFR#Y;{rgR~}1^*xP# zv>IjmU%S~^#sB^G{C{EUzasa)LH4K*Tq_X|vZb;A|M|*~{OLiZr(B2FV0?J7O~23Wm)P*Cx;f4@wAUD9Gow zdCwh;{QwhH;0z4IXly6t8yF0`JZB+u^;Bc(gn^6DK*~UP_wx56Ee9woYL=!60X%7* z=JUXz9~kDo6aJiqYZ&uPjtc%^SmcYTOBC`mp(0&Y(Q=$S+JG4>pKVpB=Ti%ud49$; z`6dqD$p|nZ95GRnG=lJ2)kq!v(oiPkWk>>rynrxl#xgp1X9m5QkSB7Z<+~}xw0xAI z<#~FsCR=ongipSKBInx!!1jk39^qn6tP?wqrvPQL9&@47{j_T)tIwZ;|F81E{(KQ& z(fyyTlK)?))n3_uz9s*k*?NoayLaCx5^|*+QMD9TqQqC@|0}ouSC{`Q?7!`;&6WSh zkF)^VQD(?apTD{%>b% zYqkHs&Hk7CKXn#)axffH_%V%X{yuQ(7%DFFX2DdXYrOd=LUM6*3au=jzLAUPZu%B$ z$S>temEks_R`GI+T-M{z)TOT>q!hn(d6ss7t?scxq8)EYa?lW!y99U1(Dq}zvzy*=uLwoN+GJp)de`v$59%bK z{A6cueoaU&$`y;{sklocvH<6E;pTEOOBtCZ1nYBAK}-AE^T)unYo;^6;gb?5ebe)bJkTCFXA;!@(rY^Z2QRbYJ9*ATbqchToj=}J8 z9l`xx7qquFc~b1C{!|)@7v~WG@D{hfD%lzCN4^<79UK!Ak5k?oHP`6Y_6p(tCVi%=3m_I+2cOi7u(wV(y5@gKe z#1?no_ngbz#V11IYY$cFu+*hX<9191q3otN6Vf9sA4N*GSMX3y5w$OSxwcXQn>8mN zU=M0hkcV6EsSj@6e1{{IRKLBT2?St!6T%6MCRZJp_rxgl`~_QmUwmr#YwL=I_0?=F@zm4;{`3}D@ucg2-7t6rWdk>*PP zRthtsA^m04QKW=svt1{Ga;5nB>6&-N6J%{|&fz+fxeMIACEfyKeB4ZY&+!ufmPGVFQyM3@ zjpaPyNGiolNYryCm3x}2^CZ5y$UR7xU#p=MUWhf=+$p}f^62$$cw;IJ(jct{DVG>} zzHcf)7|`OIo3S6nCZ1N^dj0zP+PL0?gR0(YG#d5z>LOp^X`%WPaFs1QBg8e8*A3F# zG#ZU|^F_01G`6?<%}t}-Xt%^;((D+m)^>|Dn?`GUr<4AEY&5nzot?h;y=CldgRQH% zX>5Xg+cq9Q-tKe=HoLPee!u7#?Z-QHO`z~jt3#UG27(SP;ExxL_lS{J`#s0Z z|5Hi`W%GCL+s7B%as)b#n&7Rbuw%p*8I;)U9 z)5HRQQcp?3lX?}|$h-TBOMH25`cGjaFU5bGBV&G!3g~|QPp8>xl=Z*O=1TwbP5i&= zq++IPMYRy)Sa=Ck4awh^*BH(7%GS%y^7>*|b4fpf3Yn_wOLFf8=bwD_viGCHE=}yw zA;|r}Yk-ARxIFQVQp0Bj9AW}FCJGe@QC=5tKy7yek7~SMF_~lxS3K{oM0%@^klgJB z>G=gs-h*csdP7y-$Rp`Y%qhSxjPQtg@^~3*T^KMi^GoDO6+%9eY2YF<-KW4MrN3$# z>un#DSb^=6DU)%fdn!<09eJ)x12$^_l0BJddHi$XxI7I-8B^#$_Plrk?o?0M&qJEv z3bwG@Cw#7+K1GD&N1pGhgaAqPR{@lSirP~({m$`_sw|R_IaN~R&Anl=h>+xTDWaDO3APMXCd1~hfK)_=E4ePd38g3nDBCer zr*yAGNWJi_Mo11wvBL{+viE;nCv4n#nyN~!qEKXQjXcT|MR=^0M)k*al7Ul*s+YQv zf(*_n>&xGdQnyszgrGahAOy%8{F*>N2=6u9U&-L#ubvT}a#!+Z$y<~(+ z*diHJim`)uKX~fCh4C^3#Kq|scuJ2VjAO)+#*QUCdMZe9Sx5U&?Br*7X(WlbOBDbt ziLJ_TOESs^99yNen=&tld%v#Sg8wr1|HXL`A0QAey8quP%73lqc4H;~eRKPNwa}JV zY6y|3VE6tkYx<`}11rU8~20UG#})Y$wi;VR6#N=*T|xYsWDSCGc;Ew z#Ni{-**J87UeAH8Bd}za4`#@#VFW|0iQnvV5C6*b*^B5Rp38u|2L3#_KwUZVw$j9A zQK4fa<2V?u3Xz|?q#PGJ=UT64F7-Oh?yh&S54VIu5h8)R*Xt$EdOh{1&&;2BCOE%W zIlBN@H__N3Sk264Yu;s>*s%8ATW|V&>CnKiYr$W|l^`fO4E~#I!uAL=%&t zA6}=%9X`3{UHWyFzC%>Q8~h@kOX^(nj`2|nUr|IXDH*HC-ymg;GGGFnP7vpW)G?@jd z-5aX1_TW^tMZd3ko?ewXO{6jCCD3FauP=Er4PIOOug>=0ygNQ(#&1rLv*QSzmcG~- zlryGF2{=f>%>Ilh{V)iqlW?h<*8b+) z0}37h<{hZTW))tB=q-^0vV1~5ELTl-d=lmGg>^7Edp~%w-+whYJlnI5tkm7(o^!L1 z3V9`r|2XG=b%@zd