diff --git a/infrastructure/eVoting/src/components/signing-interface.tsx b/infrastructure/eVoting/src/components/signing-interface.tsx deleted file mode 100644 index 0519ecba..00000000 --- a/infrastructure/eVoting/src/components/signing-interface.tsx +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.pbxproj b/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.pbxproj index 5498f253..3a4c3da0 100644 --- a/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.pbxproj +++ b/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.pbxproj @@ -416,7 +416,7 @@ "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", ); MARKETING_VERSION = 0.3.0; - PRODUCT_BUNDLE_IDENTIFIER = "foundation.metastate.eid-wallet"; + PRODUCT_BUNDLE_IDENTIFIER = foundation.metastate.eid-wallet; PRODUCT_NAME = "eID for W3DS"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -464,7 +464,7 @@ "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", ); MARKETING_VERSION = 0.3.0; - PRODUCT_BUNDLE_IDENTIFIER = "foundation.metastate.eid-wallet"; + PRODUCT_BUNDLE_IDENTIFIER = foundation.metastate.eid-wallet; PRODUCT_NAME = "eID for W3DS"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/Info.plist b/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/Info.plist index 3d66f17a..050597dd 100644 --- a/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/Info.plist +++ b/infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/Info.plist @@ -61,4 +61,4 @@ UIInterfaceOrientationLandscapeRight - + \ No newline at end of file diff --git a/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte b/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte index 538bc7b7..547233db 100644 --- a/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte +++ b/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte @@ -1,1292 +1,1406 @@ diff --git a/infrastructure/web3-adapter/src/db/index.js b/infrastructure/web3-adapter/src/db/index.js index 1b7d0ad0..c8fda5d5 100644 --- a/infrastructure/web3-adapter/src/db/index.js +++ b/infrastructure/web3-adapter/src/db/index.js @@ -1,39 +1,18 @@ "use strict"; -var __createBinding = - (this && this.__createBinding) || - (Object.create - ? function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if ( - !desc || - ("get" in desc - ? !m.__esModule - : desc.writable || desc.configurable) - ) { - desc = { - enumerable: true, - get: function () { - return m[k]; - }, - }; - } - Object.defineProperty(o, k2, desc); - } - : function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - }); -var __exportStar = - (this && this.__exportStar) || - function (m, exports) { - for (var p in m) - if ( - p !== "default" && - !Object.prototype.hasOwnProperty.call(exports, p) - ) - __createBinding(exports, m, p); - }; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); __exportStar(require("./mapping.db"), exports); -//# sourceMappingURL=index.js.map +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/db/mapping.db.js b/infrastructure/web3-adapter/src/db/mapping.db.js index 3866ae0a..74e34eca 100644 --- a/infrastructure/web3-adapter/src/db/mapping.db.js +++ b/infrastructure/web3-adapter/src/db/mapping.db.js @@ -1,9 +1,7 @@ "use strict"; -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.MappingDatabase = void 0; const node_path_1 = require("node:path"); @@ -40,9 +38,7 @@ class MappingDatabase { async storeMapping(params) { // Validate inputs if (!params.localId || !params.globalId) { - throw new Error( - "Invalid mapping parameters: all fields are required", - ); + throw new Error("Invalid mapping parameters: all fields are required"); } console.log("storing mapping g:l", params.globalId, params.localId); // Check if mapping already exists @@ -50,11 +46,8 @@ class MappingDatabase { if (existingMapping) { return; } - await this.runAsync( - `INSERT INTO id_mappings (local_id, global_id) - VALUES (?, ?)`, - [params.localId, params.globalId], - ); + await this.runAsync(`INSERT INTO id_mappings (local_id, global_id) + VALUES (?, ?)`, [params.localId, params.globalId]); const storedMapping = await this.getGlobalId(params.localId); if (storedMapping !== params.globalId) { console.log("storedMappingError", storedMapping, params.globalId); @@ -70,14 +63,12 @@ class MappingDatabase { return null; } try { - const result = await this.getAsync( - `SELECT global_id + const result = await this.getAsync(`SELECT global_id FROM id_mappings - WHERE local_id = ?`, - [localId], - ); + WHERE local_id = ?`, [localId]); return result?.global_id ?? null; - } catch (error) { + } + catch (error) { console.error("Error getting global ID:", error); return null; } @@ -90,14 +81,12 @@ class MappingDatabase { return null; } try { - const result = await this.getAsync( - `SELECT local_id + const result = await this.getAsync(`SELECT local_id FROM id_mappings - WHERE global_id = ?`, - [globalId], - ); + WHERE global_id = ?`, [globalId]); return result?.local_id ?? null; - } catch (error) { + } + catch (error) { return null; } } @@ -108,11 +97,8 @@ class MappingDatabase { if (!localId) { return; } - await this.runAsync( - `DELETE FROM id_mappings - WHERE local_id = ?`, - [localId], - ); + await this.runAsync(`DELETE FROM id_mappings + WHERE local_id = ?`, [localId]); } /** * Get all mappings @@ -125,7 +111,8 @@ class MappingDatabase { localId: local_id, globalId: global_id, })); - } catch (error) { + } + catch (error) { return []; } } @@ -135,10 +122,11 @@ class MappingDatabase { close() { try { this.db.close(); - } catch (error) { + } + catch (error) { console.error("Error closing database connection:", error); } } } exports.MappingDatabase = MappingDatabase; -//# sourceMappingURL=mapping.db.js.map +//# sourceMappingURL=mapping.db.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/evault/evault.js b/infrastructure/web3-adapter/src/evault/evault.js index 034b30e4..334b9825 100644 --- a/infrastructure/web3-adapter/src/evault/evault.js +++ b/infrastructure/web3-adapter/src/evault/evault.js @@ -68,7 +68,8 @@ class EVaultClient { * Cleanup method to properly dispose of resources */ dispose() { - if (this.isDisposed) return; + if (this.isDisposed) + return; this.isDisposed = true; this.clients.clear(); this.endpoints.clear(); @@ -84,18 +85,19 @@ class EVaultClient { for (let attempt = 0; attempt <= maxRetries; attempt++) { try { return await operation(); - } catch (error) { + } + catch (error) { lastError = error; // Don't retry on the last attempt - if (attempt === maxRetries) break; + if (attempt === maxRetries) + break; // Don't retry on certain errors if (error instanceof Error) { - const isRetryable = !( - error.message.includes("401") || + const isRetryable = !(error.message.includes("401") || error.message.includes("403") || - error.message.includes("404") - ); - if (!isRetryable) break; + error.message.includes("404")); + if (!isRetryable) + break; } // Exponential backoff const delay = CONFIG.RETRY_DELAY * 2 ** attempt; @@ -111,23 +113,17 @@ class EVaultClient { */ async requestPlatformToken() { try { - const response = await fetch( - new URL( - "/platforms/certification", - this.registryUrl, - ).toString(), - { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ platform: this.platform }), + const response = await fetch(new URL("/platforms/certification", this.registryUrl).toString(), { + method: "POST", + headers: { + "Content-Type": "application/json", }, - ); + body: JSON.stringify({ platform: this.platform }), + }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } - const data = await response.json(); + const data = (await response.json()); const now = Date.now(); const expiresAt = data.expiresAt || now + 3600000; // Default 1 hour return { @@ -135,7 +131,8 @@ class EVaultClient { expiresAt, obtainedAt: now, }; - } catch (error) { + } + catch (error) { console.error("Error requesting platform token:", error); throw new Error("Failed to request platform token"); } @@ -144,7 +141,8 @@ class EVaultClient { * Checks if token needs refresh */ isTokenExpired() { - if (!this.tokenInfo) return true; + if (!this.tokenInfo) + return true; const now = Date.now(); const timeUntilExpiry = this.tokenInfo.expiresAt - now; return timeUntilExpiry <= CONFIG.TOKEN_REFRESH_THRESHOLD; @@ -163,18 +161,14 @@ class EVaultClient { try { const enrichedW3id = w3id.startsWith("@") ? w3id : `@${w3id}`; console.log("fetching endpoint for :", enrichedW3id); - const response = await fetch( - new URL( - `/resolve?w3id=${enrichedW3id}`, - this.registryUrl, - ).toString(), - ); + const response = await fetch(new URL(`/resolve?w3id=${enrichedW3id}`, this.registryUrl).toString()); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return new URL("/graphql", data.uri).toString(); - } catch (error) { + } + catch (error) { console.error("Error resolving eVault endpoint:", error); throw new Error("Failed to resolve eVault endpoint"); } @@ -189,24 +183,18 @@ class EVaultClient { const endpoint = this.endpoints.get(w3id); // Check if the cached endpoint is still healthy if (await this.isEndpointHealthy(w3id, endpoint)) { - console.log( - "reusing existing client for w3id:", - w3id, - "endpoint:", - endpoint, - ); + console.log("reusing existing client for w3id:", w3id, "endpoint:", endpoint); return client; - } else { - console.log( - "cached endpoint is unhealthy, removing and re-resolving for w3id:", - w3id, - ); + } + else { + console.log("cached endpoint is unhealthy, removing and re-resolving for w3id:", w3id); this.removeCachedClient(w3id); } } // Resolve endpoint for this specific w3id const endpoint = await this.resolveEndpoint(w3id).catch(() => null); - if (!endpoint) throw new Error("Failed to resolve endpoint"); + if (!endpoint) + throw new Error("Failed to resolve endpoint"); // Get platform token and create client with authorization header const token = await this.ensurePlatformToken(); const client = new graphql_request_1.GraphQLClient(endpoint, { @@ -220,12 +208,7 @@ class EVaultClient { // Initialize health check tracking this.healthCheckFailures.set(w3id, 0); this.lastHealthCheck.set(w3id, Date.now()); - console.log( - "created new client for w3id:", - w3id, - "endpoint:", - endpoint, - ); + console.log("created new client for w3id:", w3id, "endpoint:", endpoint); return client; } /** @@ -245,14 +228,9 @@ class EVaultClient { } // Perform health check on the whois endpoint const healthCheckUrl = `${baseUrl}/whois`; - console.log( - `Health checking endpoint for ${w3id}: ${healthCheckUrl}`, - ); + console.log(`Health checking endpoint for ${w3id}: ${healthCheckUrl}`); const controller = new AbortController(); - const timeoutId = setTimeout( - () => controller.abort(), - CONFIG.HEALTH_CHECK_TIMEOUT, - ); + const timeoutId = setTimeout(() => controller.abort(), CONFIG.HEALTH_CHECK_TIMEOUT); const response = await fetch(healthCheckUrl, { method: "HEAD", signal: controller.signal, @@ -263,16 +241,13 @@ class EVaultClient { this.healthCheckFailures.set(w3id, 0); this.lastHealthCheck.set(w3id, now); return true; - } else { - throw new Error( - `Health check failed with status: ${response.status}`, - ); } - } catch (error) { - console.log( - `Health check failed for ${w3id}:`, - error instanceof Error ? error.message : "Unknown error", - ); + else { + throw new Error(`Health check failed with status: ${response.status}`); + } + } + catch (error) { + console.log(`Health check failed for ${w3id}:`, error instanceof Error ? error.message : "Unknown error"); // Increment failure count const currentFailures = this.healthCheckFailures.get(w3id) || 0; const newFailures = currentFailures + 1; @@ -280,9 +255,7 @@ class EVaultClient { this.lastHealthCheck.set(w3id, Date.now()); // If we've had too many consecutive failures, mark as unhealthy if (newFailures >= CONFIG.MAX_HEALTH_CHECK_FAILURES) { - console.log( - `Endpoint for ${w3id} marked as unhealthy after ${newFailures} consecutive failures`, - ); + console.log(`Endpoint for ${w3id} marked as unhealthy after ${newFailures} consecutive failures`); return false; } // Still allow some failures before marking as unhealthy @@ -306,21 +279,18 @@ class EVaultClient { const controller = new AbortController(); const timeoutId = setTimeout(() => { controller.abort(); - console.log( - `GraphQL request timeout for ${w3id}, marking endpoint as unhealthy`, - ); + console.log(`GraphQL request timeout for ${w3id}, marking endpoint as unhealthy`); this.removeCachedClient(w3id); }, CONFIG.GRAPHQL_TIMEOUT); try { const result = await operation(); clearTimeout(timeoutId); return result; - } catch (error) { + } + catch (error) { clearTimeout(timeoutId); if (error instanceof Error && error.name === "AbortError") { - throw new Error( - `Request timeout after ${CONFIG.GRAPHQL_TIMEOUT}ms`, - ); + throw new Error(`Request timeout after ${CONFIG.GRAPHQL_TIMEOUT}ms`); } throw error; } @@ -343,9 +313,7 @@ class EVaultClient { this.lastHealthCheck.set(w3id, 0); const isHealthy = await this.isEndpointHealthy(w3id, endpoint); if (!isHealthy) { - console.log( - `Forced health check failed for ${w3id}, removing cached client`, - ); + console.log(`Forced health check failed for ${w3id}, removing cached client`); this.removeCachedClient(w3id); } return isHealthy; @@ -383,19 +351,19 @@ class EVaultClient { const client = await this.ensureClient(envelope.w3id).catch(() => { return null; }); - if (!client) return (0, uuid_1.v4)(); + if (!client) + return (0, uuid_1.v4)(); console.log("sending to eVault: ", envelope.w3id); console.log("sending payload", envelope); - const response = await this.withTimeout(envelope.w3id, () => - client.request(STORE_META_ENVELOPE, { - input: { - ontology: envelope.schemaId, - payload: envelope.data, - acl: ["*"], - }, - }), - ).catch(() => null); - if (!response) return (0, uuid_1.v4)(); + const response = await this.withTimeout(envelope.w3id, () => client.request(STORE_META_ENVELOPE, { + input: { + ontology: envelope.schemaId, + payload: envelope.data, + acl: ["*"], + }, + })).catch(() => null); + if (!response) + return (0, uuid_1.v4)(); return response.storeMetaEnvelope.metaEnvelope.id; }); } @@ -404,14 +372,14 @@ class EVaultClient { const client = await this.ensureClient(w3id); const response = await client .request(STORE_META_ENVELOPE, { - input: { - ontology: "reference", - payload: { - _by_reference: referenceId, - }, - acl: ["*"], + input: { + ontology: "reference", + payload: { + _by_reference: referenceId, }, - }) + acl: ["*"], + }, + }) .catch(() => null); if (!response) { console.error("Failed to store reference"); @@ -428,7 +396,8 @@ class EVaultClient { w3id, }); return response.metaEnvelope; - } catch (error) { + } + catch (error) { console.error("Error fetching meta envelope:", error); throw error; } @@ -437,9 +406,7 @@ class EVaultClient { async updateMetaEnvelopeById(id, envelope) { return this.withRetry(async () => { console.log("sending to eVault", envelope.w3id); - const client = await this.ensureClient(envelope.w3id).catch( - () => null, - ); + const client = await this.ensureClient(envelope.w3id).catch(() => null); if (!client) throw new Error("Failed to establish client connection"); try { @@ -451,11 +418,9 @@ class EVaultClient { acl: ["*"], }, }; - const response = await client.request( - UPDATE_META_ENVELOPE, - variables, - ); - } catch (error) { + const response = await client.request(UPDATE_META_ENVELOPE, variables); + } + catch (error) { console.error("Error updating meta envelope:", error); throw error; } @@ -463,4 +428,4 @@ class EVaultClient { } } exports.EVaultClient = EVaultClient; -//# sourceMappingURL=evault.js.map +//# sourceMappingURL=evault.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/evault/evault.js.map b/infrastructure/web3-adapter/src/evault/evault.js.map index 27048f44..da63e43e 100644 --- a/infrastructure/web3-adapter/src/evault/evault.js.map +++ b/infrastructure/web3-adapter/src/evault/evault.js.map @@ -1 +1 @@ -{"version":3,"file":"evault.js","sourceRoot":"","sources":["evault.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"evault.js","sourceRoot":"","sources":["evault.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/index.js b/infrastructure/web3-adapter/src/index.js index bc0148a7..313a71d0 100644 --- a/infrastructure/web3-adapter/src/index.js +++ b/infrastructure/web3-adapter/src/index.js @@ -1,71 +1,40 @@ "use strict"; -var __createBinding = - (this && this.__createBinding) || - (Object.create - ? function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if ( - !desc || - ("get" in desc - ? !m.__esModule - : desc.writable || desc.configurable) - ) { - desc = { - enumerable: true, - get: function () { - return m[k]; - }, - }; - } - Object.defineProperty(o, k2, desc); - } - : function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - }); -var __setModuleDefault = - (this && this.__setModuleDefault) || - (Object.create - ? function (o, v) { - Object.defineProperty(o, "default", { - enumerable: true, - value: v, - }); - } - : function (o, v) { - o["default"] = v; - }); -var __importStar = - (this && this.__importStar) || - (function () { - var ownKeys = function (o) { - ownKeys = - Object.getOwnPropertyNames || - function (o) { - var ar = []; - for (var k in o) - if (Object.prototype.hasOwnProperty.call(o, k)) - ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) - for (var k = ownKeys(mod), i = 0; i < k.length; i++) - if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; }; - })(); -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; + return ownKeys(o); }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.Web3Adapter = void 0; exports.spinUpEVault = spinUpEVault; @@ -89,38 +58,28 @@ async function spinUpEVault(registryUrl, provisionerUrl, verificationCode) { const DEMO_CODE_W3DS = "d66b7138-538a-465f-a6ce-f6985854c3f4"; const finalVerificationCode = verificationCode || DEMO_CODE_W3DS; try { - const entropyResponse = await axios_1.default.get( - new URL("/entropy", registryUrl).toString(), - ); + const entropyResponse = await axios_1.default.get(new URL("/entropy", registryUrl).toString()); const registryEntropy = entropyResponse.data.token; const namespace = (0, uuid_1.v4)(); - const provisionResponse = await axios_1.default.post( - new URL("/provision", provisionerUrl).toString(), - { - registryEntropy, - namespace, - verificationId: finalVerificationCode, - publicKey: "0x0000000000000000000000000000000000000000", - }, - ); + const provisionResponse = await axios_1.default.post(new URL("/provision", provisionerUrl).toString(), { + registryEntropy, + namespace, + verificationId: finalVerificationCode, + publicKey: "0x0000000000000000000000000000000000000000", + }); if (!provisionResponse.data.success) { - throw new Error( - `Failed to provision eVault: ${provisionResponse.data.message || "Unknown error"}`, - ); + throw new Error(`Failed to provision eVault: ${provisionResponse.data.message || "Unknown error"}`); } return { w3id: provisionResponse.data.w3id, uri: provisionResponse.data.uri, }; - } catch (error) { + } + catch (error) { if (axios_1.default.isAxiosError(error)) { - throw new Error( - `Failed to spin up eVault: ${error.response?.data?.message || error.message}`, - ); + throw new Error(`Failed to spin up eVault: ${error.response?.data?.message || error.message}`); } - throw new Error( - `Failed to spin up eVault: ${error instanceof Error ? error.message : "Unknown error"}`, - ); + throw new Error(`Failed to spin up eVault: ${error instanceof Error ? error.message : "Unknown error"}`); } } /** @@ -131,52 +90,31 @@ async function spinUpEVault(registryUrl, provisionerUrl, verificationCode) { * @param verificationCode - Optional verification code, defaults to demo code * @returns Promise with eVault details (w3id, uri, manifestId) */ -async function createGroupEVault( - registryUrl, - provisionerUrl, - groupData, - verificationCode, -) { +async function createGroupEVault(registryUrl, provisionerUrl, groupData, verificationCode) { const DEMO_CODE_W3DS = "d66b7138-538a-465f-a6ce-f6985854c3f4"; const finalVerificationCode = verificationCode || DEMO_CODE_W3DS; try { // Step 1: Spin up the eVault - const evault = await spinUpEVault( - registryUrl, - provisionerUrl, - finalVerificationCode, - ); + const evault = await spinUpEVault(registryUrl, provisionerUrl, finalVerificationCode); // Step 2: Create GroupManifest with exponential backoff - const manifestId = await createGroupManifestWithRetry( - registryUrl, - evault.w3id, - groupData, - ); + const manifestId = await createGroupManifestWithRetry(registryUrl, evault.w3id, groupData); return { w3id: evault.w3id, uri: evault.uri, manifestId, }; - } catch (error) { + } + catch (error) { if (axios_1.default.isAxiosError(error)) { - throw new Error( - `Failed to create group eVault: ${error.response?.data?.message || error.message}`, - ); + throw new Error(`Failed to create group eVault: ${error.response?.data?.message || error.message}`); } - throw new Error( - `Failed to create group eVault: ${error instanceof Error ? error.message : "Unknown error"}`, - ); + throw new Error(`Failed to create group eVault: ${error instanceof Error ? error.message : "Unknown error"}`); } } /** * Create GroupManifest in eVault with exponential backoff retry mechanism */ -async function createGroupManifestWithRetry( - registryUrl, - w3id, - groupData, - maxRetries = 10, -) { +async function createGroupManifestWithRetry(registryUrl, w3id, groupData, maxRetries = 10) { const now = new Date().toISOString(); const groupManifest = { eName: w3id, @@ -192,16 +130,10 @@ async function createGroupManifestWithRetry( }; for (let attempt = 1; attempt <= maxRetries; attempt++) { try { - console.log( - `Attempting to create GroupManifest in eVault (attempt ${attempt}/${maxRetries})`, - ); - const response = await axios_1.default.get( - new URL(`resolve?w3id=${w3id}`, registryUrl).toString(), - ); + console.log(`Attempting to create GroupManifest in eVault (attempt ${attempt}/${maxRetries})`); + const response = await axios_1.default.get(new URL(`resolve?w3id=${w3id}`, registryUrl).toString()); const endpoint = new URL("/graphql", response.data.uri).toString(); - const { GraphQLClient } = await Promise.resolve().then(() => - __importStar(require("graphql-request")), - ); + const { GraphQLClient } = await Promise.resolve().then(() => __importStar(require("graphql-request"))); const client = new GraphQLClient(endpoint); const STORE_META_ENVELOPE = ` mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) { @@ -222,20 +154,13 @@ async function createGroupManifestWithRetry( }, }); const manifestId = result.storeMetaEnvelope.metaEnvelope.id; - console.log( - "GroupManifest created successfully in eVault:", - manifestId, - ); + console.log("GroupManifest created successfully in eVault:", manifestId); return manifestId; - } catch (error) { - console.error( - `Failed to create GroupManifest in eVault (attempt ${attempt}/${maxRetries}):`, - error, - ); + } + catch (error) { + console.error(`Failed to create GroupManifest in eVault (attempt ${attempt}/${maxRetries}):`, error); if (attempt === maxRetries) { - console.error( - "Max retries reached, giving up on GroupManifest creation", - ); + console.error("Max retries reached, giving up on GroupManifest creation"); throw error; } // Wait before retrying (exponential backoff) @@ -253,19 +178,14 @@ class Web3Adapter { this.lockedIds = []; this.readPaths(); this.mappingDb = new db_1.MappingDatabase(config.dbPath); - this.evaultClient = new evault_1.EVaultClient( - config.registryUrl, - config.platform, - ); + this.evaultClient = new evault_1.EVaultClient(config.registryUrl, config.platform); this.platform = config.platform; } async readPaths() { const allRawFiles = await fs.readdir(this.config.schemasPath); const mappingFiles = allRawFiles.filter((p) => p.endsWith(".json")); for (const mappingFile of mappingFiles) { - const mappingFileContent = await fs.readFile( - node_path_1.default.join(this.config.schemasPath, mappingFile), - ); + const mappingFileContent = await fs.readFile(node_path_1.default.join(this.config.schemasPath, mappingFile)); const mappingParsed = JSON.parse(mappingFileContent.toString()); this.mapping[mappingParsed.tableName] = mappingParsed; } @@ -280,14 +200,16 @@ class Web3Adapter { async handleChange(props) { const { data, tableName, participants } = props; const existingGlobalId = await this.mappingDb.getGlobalId(data.id); - if (!this.mapping[tableName]) return; + if (!this.mapping[tableName]) + return; if (this.mapping[tableName].readOnly) { // early return on mappings which are readonly so as to not // sync any update to the eVault which is not warranted return; } if (existingGlobalId) { - if (this.lockedIds.includes(existingGlobalId)) return; + if (this.lockedIds.includes(existingGlobalId)) + return; const global = await (0, mapper_1.toGlobal)({ data, mapping: this.mapping[tableName], @@ -295,11 +217,11 @@ class Web3Adapter { }); this.evaultClient .updateMetaEnvelopeById(existingGlobalId, { - id: existingGlobalId, - w3id: global.ownerEvault, - data: global.data, - schemaId: this.mapping[tableName].schemaId, - }) + id: existingGlobalId, + w3id: global.ownerEvault, + data: global.data, + schemaId: this.mapping[tableName].schemaId, + }) .catch(() => console.error("failed to sync update")); logging_1.logger.info({ tableName, @@ -327,7 +249,8 @@ class Web3Adapter { schemaId: this.mapping[tableName].schemaId, }); console.log("created new meta-env", globalId); - } else { + } + else { return; } // Store the mapping @@ -336,14 +259,9 @@ class Web3Adapter { globalId, }); // Handle references for other participants - const otherEvaults = (participants ?? []).filter( - (i) => i !== global.ownerEvault, - ); + const otherEvaults = (participants ?? []).filter((i) => i !== global.ownerEvault); for (const evault of otherEvaults) { - await this.evaultClient.storeReference( - `${global.ownerEvault}/${globalId}`, - evault, - ); + await this.evaultClient.storeReference(`${global.ownerEvault}/${globalId}`, evault); } logging_1.logger.info({ tableName, @@ -374,18 +292,11 @@ class Web3Adapter { * @returns Promise with eVault details (w3id, uri) */ async spinUpEVault(verificationCode, provisionerUrl) { - const finalProvisionerUrl = - provisionerUrl || this.config.provisionerUrl; + const finalProvisionerUrl = provisionerUrl || this.config.provisionerUrl; if (!finalProvisionerUrl) { - throw new Error( - "Provisioner URL is required. Please provide it in config or as parameter.", - ); + throw new Error("Provisioner URL is required. Please provide it in config or as parameter."); } - return spinUpEVault( - this.config.registryUrl, - finalProvisionerUrl, - verificationCode, - ); + return spinUpEVault(this.config.registryUrl, finalProvisionerUrl, verificationCode); } /** * Creates a group eVault with GroupManifest @@ -395,20 +306,12 @@ class Web3Adapter { * @returns Promise with eVault details (w3id, uri, manifestId) */ async createGroupEVault(groupData, verificationCode, provisionerUrl) { - const finalProvisionerUrl = - provisionerUrl || this.config.provisionerUrl; + const finalProvisionerUrl = provisionerUrl || this.config.provisionerUrl; if (!finalProvisionerUrl) { - throw new Error( - "Provisioner URL is required. Please provide it in config or as parameter.", - ); + throw new Error("Provisioner URL is required. Please provide it in config or as parameter."); } - return createGroupEVault( - this.config.registryUrl, - finalProvisionerUrl, - groupData, - verificationCode, - ); + return createGroupEVault(this.config.registryUrl, finalProvisionerUrl, groupData, verificationCode); } } exports.Web3Adapter = Web3Adapter; -//# sourceMappingURL=index.js.map +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/index.js.map b/infrastructure/web3-adapter/src/index.js.map index cc83389c..1a7fdbf7 100644 --- a/infrastructure/web3-adapter/src/index.js.map +++ b/infrastructure/web3-adapter/src/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,oCA8CC;AA0BD,8CA+CC;AAxID,qDAAuC;AACvC,0DAA6B;AAC7B,kDAA0B;AAC1B,+BAAoC;AACpC,6BAAuC;AACvC,4CAA+C;AAC/C,uCAAmC;AACnC,4CAAuD;AAGvD;;;;;;GAMG;AACI,KAAK,UAAU,YAAY,CAC9B,WAAmB,EACnB,cAAsB,EACtB,gBAAyB;IAEzB,MAAM,cAAc,GAAG,sCAAsC,CAAC;IAC9D,MAAM,qBAAqB,GAAG,gBAAgB,IAAI,cAAc,CAAC;IAEjE,IAAI,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,eAAK,CAAC,GAAG,CACnC,IAAI,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAC9C,CAAC;QACF,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAEnD,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;QAE3B,MAAM,iBAAiB,GAAG,MAAM,eAAK,CAAC,IAAI,CACtC,IAAI,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,EAChD;YACI,eAAe;YACf,SAAS;YACT,cAAc,EAAE,qBAAqB;YACrC,SAAS,EAAE,4CAA4C;SAC1D,CACJ,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACX,+BAA+B,iBAAiB,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE,CACrF,CAAC;QACN,CAAC;QAED,OAAO;YACH,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI;YACjC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG;SAClC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACX,6BAA6B,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAChF,CAAC;QACN,CAAC;QACD,MAAM,IAAI,KAAK,CACX,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC1F,CAAC;IACN,CAAC;AACL,CAAC;AAkBD;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACnC,WAAmB,EACnB,cAAsB,EACtB,SAQC,EACD,gBAAyB;IAEzB,MAAM,cAAc,GAAG,sCAAsC,CAAC;IAC9D,MAAM,qBAAqB,GAAG,gBAAgB,IAAI,cAAc,CAAC;IAEjE,IAAI,CAAC;QACD,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,YAAY,CAC7B,WAAW,EACX,cAAc,EACd,qBAAqB,CACxB,CAAC;QAEF,wDAAwD;QACxD,MAAM,UAAU,GAAG,MAAM,4BAA4B,CACjD,WAAW,EACX,MAAM,CAAC,IAAI,EACX,SAAS,CACZ,CAAC;QAEF,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU;SACb,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACX,kCAAkC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CACrF,CAAC;QACN,CAAC;QACD,MAAM,IAAI,KAAK,CACX,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC/F,CAAC;IACN,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,4BAA4B,CACvC,WAAmB,EACnB,IAAY,EACZ,SAQC,EACD,UAAU,GAAG,EAAE;IAEf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,aAAa,GAAkB;QACjC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACjB,CAAC;IAEF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CACP,yDAAyD,OAAO,IAAI,UAAU,GAAG,CACpF,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC5B,IAAI,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAC1D,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEnE,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE3C,MAAM,mBAAmB,GAAG;;;;;;;;;;aAU3B,CAAC;YAYF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,mBAAmB,EACnB;gBACI,KAAK,EAAE;oBACH,QAAQ,EAAE,sCAAsC,EAAE,0BAA0B;oBAC5E,OAAO,EAAE,aAAa;oBACtB,GAAG,EAAE,CAAC,GAAG,CAAC;iBACb;aACJ,CACJ,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CACP,+CAA+C,EAC/C,UAAU,CACb,CAAC;YACF,OAAO,UAAU,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACT,qDAAqD,OAAO,IAAI,UAAU,IAAI,EAC9E,KAAK,CACR,CAAC;YAEF,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CACT,0DAA0D,CAC7D,CAAC;gBACF,MAAM,KAAK,CAAC;YAChB,CAAC;YAED,6CAA6C;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,oBAAoB,CAAC,CAAC;YAClD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACxE,CAAC;AAED,MAAa,WAAW;IAOpB,YACqB,MAMhB;QANgB,WAAM,GAAN,MAAM,CAMtB;QAbL,YAAO,GAA6B,EAAE,CAAC;QAGvC,cAAS,GAAa,EAAE,CAAC;QAYrB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAY,CAChC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,QAAQ,CAClB,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAClD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACtB,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,QAAQ,CACxC,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAClD,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC5B,kBAAkB,CAAC,QAAQ,EAAE,CACpB,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;QAC1D,CAAC;IACL,CAAC;IAED,cAAc,CAAC,EAAU;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,KAAM,CAAC,CAAC;IACf,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAIlB;QACG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAEhD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CACrD,IAAI,CAAC,EAAY,CACpB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO;QAErC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnC,4DAA4D;YAC5D,uDAAuD;YACvD,OAAO;QACX,CAAC;QAID,IAAI,gBAAgB,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAAE,OAAO;YACtD,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAQ,EAAC;gBAC1B,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAChC,YAAY,EAAE,IAAI,CAAC,SAAS;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY;iBACZ,sBAAsB,CAAC,gBAAgB,EAAE;gBACtC,EAAE,EAAE,gBAAgB;gBACpB,IAAI,EAAE,MAAM,CAAC,WAAqB;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ;aAC7C,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAEzD,gBAAM,CAAC,IAAI,CAAC;gBACR,SAAS;gBACT,EAAE,EAAE,gBAAgB;gBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,MAAM,CAAC,WAAW;aAC3B,CAAC,CAAC;YAGH,OAAO;gBACH,EAAE,EAAE,gBAAgB;gBACpB,IAAI,EAAE,MAAM,CAAC,WAAqB;gBAClC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS;aAC9C,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAQ,EAAC;YAC1B,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAChC,YAAY,EAAE,IAAI,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,IAAI,QAAgB,CAAC;QACrB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBACjD,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,MAAM,CAAC,WAAqB;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ;aAC7C,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,OAAO;QACX,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,EAAY;YAC1B,QAAQ;SACX,CAAC,CAAC;QAEH,2CAA2C;QAC3C,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,CAC1C,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAClC,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,EAAE,EACnC,MAAM,CACT,CAAC;QACN,CAAC;QAED,gBAAM,CAAC,IAAI,CAAC;YACR,SAAS;YACT,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,OAAO;YACH,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM,CAAC,WAAqB;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ;SAC7C,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAGhB;QACG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAEhC,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAU,EAAC;YAC3B,IAAI;YACJ,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CACd,gBAAyB,EACzB,cAAuB;QAEvB,MAAM,mBAAmB,GACrB,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAEjD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACX,2EAA2E,CAC9E,CAAC;QACN,CAAC;QAED,OAAO,YAAY,CACf,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,mBAAmB,EACnB,gBAAgB,CACnB,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CACnB,SAQC,EACD,gBAAyB,EACzB,cAAuB;QAEvB,MAAM,mBAAmB,GACrB,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAEjD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACX,2EAA2E,CAC9E,CAAC;QACN,CAAC;QAED,OAAO,iBAAiB,CACpB,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,CACnB,CAAC;IACN,CAAC;CACJ;AAvOD,kCAuOC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/logging/index.js b/infrastructure/web3-adapter/src/logging/index.js index d8aecc9b..06388ce6 100644 --- a/infrastructure/web3-adapter/src/logging/index.js +++ b/infrastructure/web3-adapter/src/logging/index.js @@ -1,40 +1,19 @@ "use strict"; -var __createBinding = - (this && this.__createBinding) || - (Object.create - ? function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if ( - !desc || - ("get" in desc - ? !m.__esModule - : desc.writable || desc.configurable) - ) { - desc = { - enumerable: true, - get: function () { - return m[k]; - }, - }; - } - Object.defineProperty(o, k2, desc); - } - : function (o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - }); -var __exportStar = - (this && this.__exportStar) || - function (m, exports) { - for (var p in m) - if ( - p !== "default" && - !Object.prototype.hasOwnProperty.call(exports, p) - ) - __createBinding(exports, m, p); - }; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); __exportStar(require("./transport"), exports); __exportStar(require("./logger"), exports); -//# sourceMappingURL=index.js.map +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/logging/logger.js b/infrastructure/web3-adapter/src/logging/logger.js index 7f90651b..71ce7443 100644 --- a/infrastructure/web3-adapter/src/logging/logger.js +++ b/infrastructure/web3-adapter/src/logging/logger.js @@ -1,12 +1,10 @@ "use strict"; -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.logger = void 0; const pino_1 = __importDefault(require("pino")); const transport_1 = require("./transport"); exports.logger = (0, pino_1.default)(transport_1.transport); -//# sourceMappingURL=logger.js.map +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/logging/transport.js b/infrastructure/web3-adapter/src/logging/transport.js index 3ec044a1..f7d515ac 100644 --- a/infrastructure/web3-adapter/src/logging/transport.js +++ b/infrastructure/web3-adapter/src/logging/transport.js @@ -1,9 +1,7 @@ "use strict"; -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.transport = void 0; const pino_1 = require("pino"); @@ -24,4 +22,4 @@ exports.transport = (0, pino_1.transport)({ }, }, }); -//# sourceMappingURL=transport.js.map +//# sourceMappingURL=transport.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/logging/transport.js.map b/infrastructure/web3-adapter/src/logging/transport.js.map index a3ad2ac0..53d3af89 100644 --- a/infrastructure/web3-adapter/src/logging/transport.js.map +++ b/infrastructure/web3-adapter/src/logging/transport.js.map @@ -1 +1 @@ -{"version":3,"file":"transport.js","sourceRoot":"","sources":["transport.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAkD;AAElD,oDAA4B;AAC5B,gDAAwB;AAExB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;AAC3D,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAC,CAAC,CAAA;AAElB,QAAA,SAAS,GAAG,IAAA,gBAAa,EAAc;IAChD,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAkB;QACpC,MAAM,EAAE;YACJ,GAAG,EAAE,cAAc;SACtB;QACD,SAAS,EAAE;YACP,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO;YAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO;SACjD;KACJ;CACJ,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"transport.js","sourceRoot":"","sources":["transport.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAkD;AAElD,oDAA4B;AAC5B,gDAAwB;AAExB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC5D,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEpB,QAAA,SAAS,GAAG,IAAA,gBAAa,EAAc;IAChD,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAkB;QACpC,MAAM,EAAE;YACJ,GAAG,EAAE,cAAc;SACtB;QACD,SAAS,EAAE;YACP,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO;YAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO;SACjD;KACJ;CACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/mapper/mapper.js b/infrastructure/web3-adapter/src/mapper/mapper.js index 59592cbe..5f6af11e 100644 --- a/infrastructure/web3-adapter/src/mapper/mapper.js +++ b/infrastructure/web3-adapter/src/mapper/mapper.js @@ -14,9 +14,7 @@ function getValueByPath(obj, path) { } // If there's a field path after [], map through the array if (fieldPath) { - return array.map((item) => - getValueByPath(item, fieldPath.slice(1)), - ); // Remove the leading dot + return array.map((item) => getValueByPath(item, fieldPath.slice(1))); // Remove the leading dot } return array; } @@ -24,7 +22,8 @@ function getValueByPath(obj, path) { const parts = path.split("."); // biome-ignore lint/suspicious/noExplicitAny: return parts.reduce((acc, part) => { - if (acc === null || acc === undefined) return undefined; + if (acc === null || acc === undefined) + return undefined; return acc[part]; }, obj); } @@ -51,28 +50,20 @@ async function extractOwnerEvault(data, ownerEnamePath) { .map((path) => path.trim()) .filter((path) => path.length > 0); if (paths.length < 2) { - console.warn( - "Invalid fallback path format. Expected 'path1||path2' but got:", - ownerEnamePath, - ); + console.warn("Invalid fallback path format. Expected 'path1||path2' but got:", ownerEnamePath); return null; } - console.log( - `Processing fallback paths for owner eVault: [${paths.join(", ")}]`, - ); + console.log(`Processing fallback paths for owner eVault: [${paths.join(", ")}]`); // Try each path in order until one succeeds for (let i = 0; i < paths.length; i++) { const path = paths[i]; - console.log( - `Trying fallback path ${i + 1}/${paths.length}: ${path}`, - ); + console.log(`Trying fallback path ${i + 1}/${paths.length}: ${path}`); const result = await extractOwnerEvaultSinglePath(data, path); if (result !== null) { - console.log( - `✅ Owner eVault found using fallback path ${i + 1}: ${path}`, - ); + console.log(`✅ Owner eVault found using fallback path ${i + 1}: ${path}`); return result; - } else { + } + else { console.log(`❌ Fallback path ${i + 1} failed: ${path}`); } } @@ -94,23 +85,20 @@ async function extractOwnerEvaultSinglePath(data, ownerEnamePath) { const [_, fieldPathRaw] = ownerEnamePath.split("("); const fieldPath = fieldPathRaw.replace(")", ""); let value = getValueByPath(data, fieldPath); - if (Array.isArray(value)) return value[0]; + if (Array.isArray(value)) + return value[0]; console.log("OWNER PATH", value); // Check if value is a string before calling .includes() - if ( - typeof value === "string" && + if (typeof value === "string" && value.includes("(") && - value.includes(")") - ) { + value.includes(")")) { value = value.split("(")[1].split(")")[0]; } return value || null; } -async function fromGlobal({ data, mapping, mappingStore }) { +async function fromGlobal({ data, mapping, mappingStore, }) { const result = {}; - for (const [localKey, globalPathRaw] of Object.entries( - mapping.localToUniversalMap, - )) { + for (const [localKey, globalPathRaw] of Object.entries(mapping.localToUniversalMap)) { let value; const targetKey = localKey; let tableRef = null; @@ -120,43 +108,44 @@ async function fromGlobal({ data, mapping, mappingStore }) { if (outerFn === "date") { const calcMatch = innerExpr.match(/^calc\((.+)\)$/); if (calcMatch) { - const calcResult = evaluateCalcExpression( - calcMatch[1], - data, - ); + const calcResult = evaluateCalcExpression(calcMatch[1], data); value = calcResult !== undefined ? new Date(calcResult).toISOString() : undefined; - } else { + } + else { const rawVal = getValueByPath(data, innerExpr); if (typeof rawVal === "number") { value = new Date(rawVal).toISOString(); - } else if (rawVal?._seconds) { + } + else if (rawVal?._seconds) { // Handle Firebase v8 timestamp format value = new Date(rawVal._seconds * 1000).toISOString(); - } else if (rawVal?.seconds) { + } + else if (rawVal?.seconds) { // Handle Firebase v9+ timestamp format value = new Date(rawVal.seconds * 1000).toISOString(); - } else if ( - rawVal?.toDate && - typeof rawVal.toDate === "function" - ) { + } + else if (rawVal?.toDate && + typeof rawVal.toDate === "function") { // Handle Firebase Timestamp objects value = rawVal.toDate().toISOString(); - } else if (rawVal instanceof Date) { + } + else if (rawVal instanceof Date) { value = rawVal.toISOString(); - } else if ( - typeof rawVal === "string" && - rawVal.includes("UTC") - ) { + } + else if (typeof rawVal === "string" && + rawVal.includes("UTC")) { // Handle Firebase timestamp strings like "August 18, 2025 at 10:03:19 AM UTC+5:30" value = new Date(rawVal).toISOString(); - } else { + } + else { value = undefined; } } - } else if (outerFn === "calc") { + } + else if (outerFn === "calc") { value = evaluateCalcExpression(innerExpr, data); } result[targetKey] = value; @@ -172,13 +161,12 @@ async function fromGlobal({ data, mapping, mappingStore }) { value = getValueByPath(data, pathRef); if (tableRef) { if (Array.isArray(value)) { - value = await Promise.all( - value.map(async (v) => { - const localId = await mappingStore.getLocalId(v); - return localId ? `${tableRef}(${localId})` : null; - }), - ); - } else { + value = await Promise.all(value.map(async (v) => { + const localId = await mappingStore.getLocalId(v); + return localId ? `${tableRef}(${localId})` : null; + })); + } + else { value = await mappingStore.getLocalId(value); value = value ? `${tableRef}(${value})` : null; } @@ -189,11 +177,9 @@ async function fromGlobal({ data, mapping, mappingStore }) { data: result, }; } -function evaluateCalcExpression( - expr, - // biome-ignore lint/suspicious/noExplicitAny: - context, -) { +function evaluateCalcExpression(expr, +// biome-ignore lint/suspicious/noExplicitAny: +context) { const tokens = expr .split(/[^\w.]+/) .map((t) => t.trim()) @@ -202,23 +188,19 @@ function evaluateCalcExpression( for (const token of tokens) { const value = getValueByPath(context, token); if (typeof value !== "undefined") { - resolvedExpr = resolvedExpr.replace( - new RegExp(`\\b${token.replace(".", "\\.")}\\b`, "g"), - value, - ); + resolvedExpr = resolvedExpr.replace(new RegExp(`\\b${token.replace(".", "\\.")}\\b`, "g"), value); } } try { return Function(`use strict"; return (${resolvedExpr})`)(); - } catch { + } + catch { return undefined; } } -async function toGlobal({ data, mapping, mappingStore }) { +async function toGlobal({ data, mapping, mappingStore, }) { const result = {}; - for (const [localKey, globalPathRaw] of Object.entries( - mapping.localToUniversalMap, - )) { + for (const [localKey, globalPathRaw] of Object.entries(mapping.localToUniversalMap)) { // biome-ignore lint/suspicious/noExplicitAny: let value; let targetKey = globalPathRaw; @@ -244,43 +226,44 @@ async function toGlobal({ data, mapping, mappingStore }) { if (outerFn === "date") { const calcMatch = innerExpr.match(/^calc\((.+)\)$/); if (calcMatch) { - const calcResult = evaluateCalcExpression( - calcMatch[1], - data, - ); + const calcResult = evaluateCalcExpression(calcMatch[1], data); value = calcResult !== undefined ? new Date(calcResult).toISOString() : undefined; - } else { + } + else { const rawVal = getValueByPath(data, innerExpr); if (typeof rawVal === "number") { value = new Date(rawVal).toISOString(); - } else if (rawVal?._seconds) { + } + else if (rawVal?._seconds) { // Handle Firebase v8 timestamp format value = new Date(rawVal._seconds * 1000).toISOString(); - } else if (rawVal?.seconds) { + } + else if (rawVal?.seconds) { // Handle Firebase v9+ timestamp format value = new Date(rawVal.seconds * 1000).toISOString(); - } else if ( - rawVal?.toDate && - typeof rawVal.toDate === "function" - ) { + } + else if (rawVal?.toDate && + typeof rawVal.toDate === "function") { // Handle Firebase Timestamp objects value = rawVal.toDate().toISOString(); - } else if (rawVal instanceof Date) { + } + else if (rawVal instanceof Date) { value = rawVal.toISOString(); - } else if ( - typeof rawVal === "string" && - rawVal.includes("UTC") - ) { + } + else if (typeof rawVal === "string" && + rawVal.includes("UTC")) { // Handle Firebase timestamp strings like "August 18, 2025 at 10:03:19 AM UTC+5:30" value = new Date(rawVal).toISOString(); - } else { + } + else { value = undefined; } } - } else if (outerFn === "calc") { + } + else if (outerFn === "calc") { value = evaluateCalcExpression(innerExpr, data); } result[targetKey] = value; @@ -294,13 +277,16 @@ async function toGlobal({ data, mapping, mappingStore }) { value = Array.isArray(refValue) ? refValue.map((v) => `@${v}`) : []; - } else { + } + else { value = refValue ? `@${refValue}` : undefined; } result[targetKey] = value; continue; } - let pathRef = globalPathRaw.includes(",") ? globalPathRaw : localKey; + let pathRef = globalPathRaw.includes(",") + ? globalPathRaw + : localKey; let tableRef = null; if (globalPathRaw.includes("(") && globalPathRaw.includes(")")) { pathRef = globalPathRaw.split("(")[1].split(")")[0]; @@ -312,13 +298,9 @@ async function toGlobal({ data, mapping, mappingStore }) { value = getValueByPath(data, pathRef); if (tableRef) { if (Array.isArray(value)) { - value = await Promise.all( - value.map( - async (v) => - (await mappingStore.getGlobalId(v)) ?? undefined, - ), - ); - } else { + value = await Promise.all(value.map(async (v) => (await mappingStore.getGlobalId(v)) ?? undefined)); + } + else { value = (await mappingStore.getGlobalId(value)) ?? undefined; } } @@ -330,4 +312,4 @@ async function toGlobal({ data, mapping, mappingStore }) { data: result, }; } -//# sourceMappingURL=mapper.js.map +//# sourceMappingURL=mapper.js.map \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/mapper/mapper.js.map b/infrastructure/web3-adapter/src/mapper/mapper.js.map index 755559d3..e2c7ddac 100644 --- a/infrastructure/web3-adapter/src/mapper/mapper.js.map +++ b/infrastructure/web3-adapter/src/mapper/mapper.js.map @@ -1 +1 @@ -{"version":3,"file":"mapper.js","sourceRoot":"","sources":["mapper.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mapper.js","sourceRoot":"","sources":["mapper.ts"],"names":[],"mappings":";;AAMA,wCA2BC;AAkGD,gCAgGC;AA8BD,4BAkIC;AA9XD,4DAA4D;AAC5D,SAAgB,cAAc,CAAC,GAAwB,EAAE,IAAY;IACjE,mDAAmD;IACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,0DAA0D;QAC1D,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAC,CAAC,yBAAyB;QAChC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,4DAA4D;IAC5D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAY,EAAE,EAAE;QAC3C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACxD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,GAAG,CAAC,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kBAAkB,CAC7B,IAA6B,EAC7B,cAAsB;IAEtB,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,cAAc;aACvB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACR,gEAAgE,EAChE,cAAc,CACjB,CAAC;YACF,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,CACP,gDAAgD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtE,CAAC;QAEF,4CAA4C;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CACP,wBAAwB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAC3D,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CACP,4CAA4C,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAC/D,CAAC;gBACF,OAAO,MAAM,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC;QAED,iCAAiC;QACjC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mCAAmC;IACnC,OAAO,MAAM,4BAA4B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,4BAA4B,CACvC,IAA6B,EAC7B,cAAsB;IAEtB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAQ,IAAI,CAAC,cAAc,CAAY,IAAI,IAAI,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAEjC,wDAAwD;IACxD,IACI,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrB,CAAC;QACC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAQ,KAAgB,IAAI,IAAI,CAAC;AACrC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,YAAY,GACY;IACxB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAClD,OAAO,CAAC,mBAAmB,CAC9B,EAAE,CAAC;QACA,IAAI,KAA6D,CAAC;QAClE,MAAM,SAAS,GAAW,QAAQ,CAAC;QACnC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjE,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC;YAE/C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,SAAS,EAAE,CAAC;oBACZ,MAAM,UAAU,GAAG,sBAAsB,CACrC,SAAS,CAAC,CAAC,CAAC,EACZ,IAAI,CACP,CAAC;oBACF,KAAK;wBACD,UAAU,KAAK,SAAS;4BACpB,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;4BACpC,CAAC,CAAC,SAAS,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACJ,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC7B,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3C,CAAC;yBAAM,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;wBAC1B,sCAAsC;wBACtC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3D,CAAC;yBAAM,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBACzB,uCAAuC;wBACvC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC1D,CAAC;yBAAM,IACH,MAAM,EAAE,MAAM;wBACd,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EACrC,CAAC;wBACC,oCAAoC;wBACpC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;oBAC1C,CAAC;yBAAM,IAAI,MAAM,YAAY,IAAI,EAAE,CAAC;wBAChC,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACjC,CAAC;yBAAM,IACH,OAAO,MAAM,KAAK,QAAQ;wBAC1B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACxB,CAAC;wBACC,mFAAmF;wBACnF,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACJ,KAAK,GAAG,SAAS,CAAC;oBACtB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC5B,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC1B,SAAS;QACb,CAAC;QACD,IAAI,OAAO,GAAG,aAAa,CAAC;QAC5B,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBAClB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CACzC,CAAW,CACd,CAAC;oBAEF,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,CAAC,CAAC,CACL,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,KAAe,CAAC,CAAC;gBACvD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,CAAC;QACL,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,IAAI,EAAE,MAAM;KACf,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAC3B,IAAY;AACZ,4DAA4D;AAC5D,OAA4B;IAE5B,MAAM,MAAM,GAAG,IAAI;SACd,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAErB,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,YAAY,GAAG,YAAY,CAAC,OAAO,CAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EACrD,KAAK,CACR,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,wBAAwB,YAAY,GAAG,CAAC,EAAE,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,EAC3B,IAAI,EACJ,OAAO,EACP,YAAY,GACY;IACxB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAClD,OAAO,CAAC,mBAAmB,CAC9B,EAAE,CAAC;QACA,4DAA4D;QAC5D,IAAI,KAAU,CAAC;QACf,IAAI,SAAS,GAAW,aAAa,CAAC;QAEtC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC/C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvB,CAAC,CAAC,YAAY,CAAC;YACnB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9C,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACxB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBAC3D,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC1B,SAAS;QACb,CAAC;QAED,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjE,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC;YAE/C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,SAAS,EAAE,CAAC;oBACZ,MAAM,UAAU,GAAG,sBAAsB,CACrC,SAAS,CAAC,CAAC,CAAC,EACZ,IAAI,CACP,CAAC;oBACF,KAAK;wBACD,UAAU,KAAK,SAAS;4BACpB,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;4BACpC,CAAC,CAAC,SAAS,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACJ,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC7B,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3C,CAAC;yBAAM,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;wBAC1B,sCAAsC;wBACtC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3D,CAAC;yBAAM,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBACzB,uCAAuC;wBACvC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC1D,CAAC;yBAAM,IACH,MAAM,EAAE,MAAM;wBACd,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EACrC,CAAC;wBACC,oCAAoC;wBACpC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;oBAC1C,CAAC;yBAAM,IAAI,MAAM,YAAY,IAAI,EAAE,CAAC;wBAChC,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACjC,CAAC;yBAAM,IACH,OAAO,MAAM,KAAK,QAAQ;wBAC1B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACxB,CAAC;wBACC,mFAAmF;wBACnF,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACJ,KAAK,GAAG,SAAS,CAAC;oBACtB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC5B,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC1B,SAAS;QACb,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrE,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC;YACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACV,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAC3B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,CAAC,CAAC,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAClD,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC1B,SAAS;QACb,CAAC;QAED,IAAI,OAAO,GAAW,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7C,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,QAAQ,CAAC;QACf,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CACrB,KAAK,CAAC,GAAG,CACL,KAAK,EAAE,CAAC,EAAE,EAAE,CACR,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CACvD,CACJ,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;YACjE,CAAC;QACL,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3E,OAAO;QACH,WAAW;QACX,IAAI,EAAE,MAAM;KACf,CAAC;AACN,CAAC"} \ No newline at end of file diff --git a/infrastructure/web3-adapter/src/mapper/mapper.types.js b/infrastructure/web3-adapter/src/mapper/mapper.types.js index 5e6cd2c9..ea11c714 100644 --- a/infrastructure/web3-adapter/src/mapper/mapper.types.js +++ b/infrastructure/web3-adapter/src/mapper/mapper.types.js @@ -1,3 +1,3 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=mapper.types.js.map +//# sourceMappingURL=mapper.types.js.map \ No newline at end of file diff --git a/platforms/blabsy-w3ds-auth-api/src/controllers/AuthController.ts b/platforms/blabsy-w3ds-auth-api/src/controllers/AuthController.ts index 0d1365e8..a2463acc 100644 --- a/platforms/blabsy-w3ds-auth-api/src/controllers/AuthController.ts +++ b/platforms/blabsy-w3ds-auth-api/src/controllers/AuthController.ts @@ -53,6 +53,8 @@ export class AuthController { try { const { ename, session } = req.body; + console.log(req.body) + if (!ename) { return res.status(400).json({ error: "ename is required" }); } diff --git a/platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts b/platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts index 7eb70941..c5f9aa73 100644 --- a/platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts +++ b/platforms/blabsy-w3ds-auth-api/src/controllers/WebhookController.ts @@ -46,6 +46,7 @@ type Chat = { type: "direct" | "group"; // Always set by webhook based on participant count name?: string; participants: string[]; + admins: string[]; ename?: string; // eVault identifier (w3id) createdAt: Timestamp; updatedAt: Timestamp; @@ -287,6 +288,10 @@ export class WebhookController { const participants = data.participants.map( (p: string) => p.split("(")[1].split(")")[0], ) || []; + const admins = (data.admins ?? []).map( + (p: string) => p.split("(")[1].split(")")[0], + ) || []; + // Derive type from participant count const type = participants.length > 2 ? "group" : "direct"; @@ -301,6 +306,7 @@ export class WebhookController { name: data.name, participants, ename: data.ename || null, // Include eVault identifier if available + admins: admins, createdAt: data.createdAt ? Timestamp.fromDate(new Date(data.createdAt)) : now, diff --git a/platforms/dreamSync/client/public/W3DS.svg b/platforms/dreamSync/client/public/W3DS.svg new file mode 100644 index 00000000..92e73a91 --- /dev/null +++ b/platforms/dreamSync/client/public/W3DS.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/platforms/dreamSync/client/src/App.tsx b/platforms/dreamSync/client/src/App.tsx index 4929bc6f..a2117dc6 100644 --- a/platforms/dreamSync/client/src/App.tsx +++ b/platforms/dreamSync/client/src/App.tsx @@ -1,18 +1,14 @@ import { Switch, Route } from "wouter"; import { queryClient } from "./lib/queryClient"; import { QueryClientProvider } from "@tanstack/react-query"; +import { AuthProvider } from "./lib/auth-context"; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; import { useAuth } from "@/hooks/useAuth"; import { Heart } from "lucide-react"; import NotFound from "@/pages/not-found"; import Login from "@/pages/login"; -import Dashboard from "@/pages/dashboard"; -import Profile from "@/pages/profile"; -import MatchesNew from "@/pages/matches-new"; -import Suggestions from "@/pages/suggestions"; -import Wishlist from "@/pages/wishlist"; -import WishlistItem from "@/pages/wishlist-item"; +import WishlistEditor from "@/pages/wishlist-editor"; function Router() { const { isAuthenticated, isLoading } = useAuth(); @@ -35,14 +31,7 @@ function Router() { {!isAuthenticated ? ( ) : ( - <> - - - - - - - + )} @@ -52,10 +41,12 @@ function Router() { function App() { return ( - - - - + + + + + + ); } diff --git a/platforms/dreamSync/client/src/components/auth/login-screen.tsx b/platforms/dreamSync/client/src/components/auth/login-screen.tsx new file mode 100644 index 00000000..1289f94d --- /dev/null +++ b/platforms/dreamSync/client/src/components/auth/login-screen.tsx @@ -0,0 +1,163 @@ +import React, { useEffect, useState } from "react"; +import { QRCodeSVG } from "qrcode.react"; +import { useAuth } from "@/hooks/useAuth"; +import { apiClient } from "@/lib/apiClient"; +import { isMobileDevice, getDeepLinkUrl, getAppStoreLink } from "@/lib/utils/mobile-detection"; +import { Heart } from "lucide-react"; + +export function LoginScreen() { + const { login } = useAuth(); + const [qrCode, setQrCode] = useState(""); + const [sessionId, setSessionId] = useState(""); + const [isConnecting, setIsConnecting] = useState(false); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + const getAuthOffer = async () => { + try { + console.log("🔍 Getting auth offer from:", apiClient.defaults.baseURL); + const response = await apiClient.get("/api/auth/offer"); + console.log("✅ Auth offer response:", response.data); + setQrCode(response.data.offer); + setSessionId(response.data.sessionId); + setIsLoading(false); + } catch (error) { + console.error("❌ Failed to get auth offer:", error); + console.error("❌ Error details:", error.response?.data); + console.error("❌ Error status:", error.response?.status); + setIsLoading(false); + } + }; + + getAuthOffer(); + }, []); + + useEffect(() => { + if (!sessionId) return; + + const eventSource = new EventSource( + `${import.meta.env.VITE_DREAMSYNC_BASE_URL || "http://localhost:8888"}/api/auth/sessions/${sessionId}` + ); + + eventSource.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + if (data.user && data.token) { + setIsConnecting(true); + // Store the token and user ID directly + localStorage.setItem("dreamsync_token", data.token); + localStorage.setItem("dreamsync_user_id", data.user.id); + // Redirect to home page + window.location.href = "/"; + } + } catch (error) { + console.error("Error parsing SSE data:", error); + } + }; + + eventSource.onerror = (error) => { + console.error("SSE Error:", error); + eventSource.close(); + }; + + return () => { + eventSource.close(); + }; + }, [sessionId, login]); + + if (isLoading) { + return ( +
+
+
+ ); + } + + if (isConnecting) { + return ( +
+
+
+

Authenticating...

+
+
+ ); + } + + return ( +
+
+
+
+ +
+

DreamSync

+
+

+ Connect your dreams in the MetaState +

+
+ +
+
+

+ Scan the QR code using your eID App to login +

+
+ + {qrCode && ( +
+ {isMobileDevice() ? ( +
+ + Login with eID Wallet + +
+ Click the button to open your eID wallet app +
+
+ ) : ( +
+ +
+ )} +
+ )} + +
+

+ The {isMobileDevice() ? "button" : "code"} is valid for 60 seconds + Please refresh the page if it expires +

+
+ +
+ You are entering DreamSync - an AI-powered wishlist matching and collaboration + platform built on the Web 3.0 Data Space (W3DS) + architecture. This system is designed around the principle + of data-platform separation, where all your personal content + is stored in your own sovereign eVault, not on centralised + servers. +
+ + + W3DS Logo + +
+
+ ); +} diff --git a/platforms/dreamSync/client/src/components/auth/protected-route.tsx b/platforms/dreamSync/client/src/components/auth/protected-route.tsx new file mode 100644 index 00000000..808f0dfc --- /dev/null +++ b/platforms/dreamSync/client/src/components/auth/protected-route.tsx @@ -0,0 +1,27 @@ +"use client"; + +import React from "react"; +import { useAuth } from "@/hooks/useAuth"; +import { LoginScreen } from "@/components/auth/login-screen"; + +interface ProtectedRouteProps { + children: React.ReactNode; +} + +export function ProtectedRoute({ children }: ProtectedRouteProps) { + const { isAuthenticated, isLoading } = useAuth(); + + if (isLoading) { + return ( +
+
+
+ ); + } + + if (!isAuthenticated) { + return ; + } + + return <>{children}; +} diff --git a/platforms/dreamSync/client/src/components/wysiwyg-editor.tsx b/platforms/dreamSync/client/src/components/wysiwyg-editor.tsx new file mode 100644 index 00000000..c965377b --- /dev/null +++ b/platforms/dreamSync/client/src/components/wysiwyg-editor.tsx @@ -0,0 +1,197 @@ +import { useEditor, EditorContent } from '@tiptap/react' +import StarterKit from '@tiptap/starter-kit' +import Placeholder from '@tiptap/extension-placeholder' +import { Bold, Italic, List, ListOrdered, Quote, Undo, Redo, Heading1, Heading2, Heading3 } from 'lucide-react' +import { Button } from '@/components/ui/button' +import { cn } from '@/lib/utils' +import TurndownService from 'turndown' +import { marked } from 'marked' + +// Configure marked to be synchronous +marked.use({ async: false }) + +interface WysiwygEditorProps { + content: string + onChange: (content: string) => void + placeholder?: string + className?: string +} + +// Convert HTML to Markdown +function htmlToMarkdown(html: string): string { + const turndownService = new TurndownService({ + headingStyle: 'atx', + bulletListMarker: '-', + codeBlockStyle: 'fenced', + }) + + return turndownService.turndown(html) +} + +// Convert Markdown to HTML +function markdownToHtml(markdown: string): string { + if (!markdown) return '' + return marked(markdown) as string +} + +export default function WysiwygEditor({ content, onChange, placeholder = "Enter text...", className }: WysiwygEditorProps) { + const editor = useEditor({ + extensions: [ + StarterKit, + Placeholder.configure({ + placeholder, + }), + ], + content: markdownToHtml(content), + onUpdate: ({ editor }) => { + const html = editor.getHTML(); + const markdown = htmlToMarkdown(html); + onChange(markdown); + }, + editorProps: { + attributes: { + class: 'prose prose-sm max-w-none focus:outline-none min-h-[120px] p-4 text-sm leading-relaxed', + }, + }, + }) + + if (!editor) { + return null + } + + return ( +
+ {/* Toolbar */} +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + {/* Editor Content */} + +
+ ) +} diff --git a/platforms/dreamSync/client/src/hooks/useAuth.ts b/platforms/dreamSync/client/src/hooks/useAuth.ts index 4cc55999..537e2b8a 100644 --- a/platforms/dreamSync/client/src/hooks/useAuth.ts +++ b/platforms/dreamSync/client/src/hooks/useAuth.ts @@ -1,15 +1,5 @@ -import { useQuery } from "@tanstack/react-query"; -import type { User } from "@shared/schema"; +import { useAuth as useAuthContext } from "../lib/auth-context"; export function useAuth() { - const { data: user, isLoading } = useQuery({ - queryKey: ["/api/auth/user"], - retry: false, - }); - - return { - user, - isLoading, - isAuthenticated: !!user, - }; + return useAuthContext(); } diff --git a/platforms/dreamSync/client/src/lib/apiClient.ts b/platforms/dreamSync/client/src/lib/apiClient.ts new file mode 100644 index 00000000..572c8b58 --- /dev/null +++ b/platforms/dreamSync/client/src/lib/apiClient.ts @@ -0,0 +1,44 @@ +import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from "axios"; + +const baseURL = import.meta.env.VITE_DREAMSYNC_BASE_URL || "http://localhost:8888"; + + +console.log("🔍 Environment variables:", { + VITE_DREAMSYNC_BASE_URL: import.meta.env.VITE_DREAMSYNC_BASE_URL, + baseURL: baseURL, + allEnv: import.meta.env +}); + +export const apiClient = axios.create({ + baseURL, + headers: { + "Content-Type": "application/json", + }, +}); + +// Request interceptor to add auth token +apiClient.interceptors.request.use( + (config: AxiosRequestConfig) => { + const token = localStorage.getItem("dreamsync_token"); + if (token && config.headers) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + (error: AxiosError) => { + return Promise.reject(error); + } +); + +// Response interceptor to handle auth errors +apiClient.interceptors.response.use( + (response: AxiosResponse) => response, + (error: AxiosError) => { + if (error.response?.status === 401) { + localStorage.removeItem("dreamsync_token"); + localStorage.removeItem("dreamsync_user_id"); + window.location.href = "/login"; + } + return Promise.reject(error); + } +); diff --git a/platforms/dreamSync/client/src/lib/auth-context.tsx b/platforms/dreamSync/client/src/lib/auth-context.tsx new file mode 100644 index 00000000..5608f0eb --- /dev/null +++ b/platforms/dreamSync/client/src/lib/auth-context.tsx @@ -0,0 +1,91 @@ +"use client"; + +import React, { createContext, useContext, useEffect, useState } from "react"; +import { apiClient } from "./apiClient"; +import { getAuthToken, getAuthId, setAuthToken, setAuthId, clearAuth } from "./authUtils"; + +interface User { + id: string; + ename: string; + name?: string; + handle?: string; + description?: string; + avatarUrl?: string; + bannerUrl?: string; + isVerified: boolean; + isPrivate: boolean; + email?: string; + emailVerified?: boolean; + createdAt: string; + updatedAt: string; +} + +interface AuthContextType { + user: User | null; + isAuthenticated: boolean; + isLoading: boolean; + login: (ename: string) => Promise; + logout: () => void; +} + +const AuthContext = createContext(undefined); + +export function AuthProvider({ children }: { children: React.ReactNode }) { + const [user, setUser] = useState(null); + const [isLoading, setIsLoading] = useState(true); + + const isAuthenticated = !!user; + + useEffect(() => { + const initializeAuth = async () => { + const token = getAuthToken(); + const userId = getAuthId(); + + if (token && userId) { + try { + const response = await apiClient.get("/api/users/me"); + setUser(response.data); + } catch (error) { + console.error("Failed to get current user:", error); + clearAuth(); + } + } + setIsLoading(false); + }; + + initializeAuth(); + }, []); + + const login = async (ename: string) => { + try { + const response = await apiClient.post("/api/auth", { ename }); + const { token, user: userData } = response.data; + + setAuthToken(token); + setAuthId(userData.id); + setUser(userData); + } catch (error) { + console.error("Login failed:", error); + throw error; + } + }; + + const logout = () => { + clearAuth(); + setUser(null); + }; + + return ( + + {children} + + ); +} + +export function useAuth() { + const context = useContext(AuthContext); + if (context === undefined) { + throw new Error("useAuth must be used within an AuthProvider"); + } + return context; +} diff --git a/platforms/dreamSync/client/src/lib/authUtils.ts b/platforms/dreamSync/client/src/lib/authUtils.ts index a144d37c..37bd3247 100644 --- a/platforms/dreamSync/client/src/lib/authUtils.ts +++ b/platforms/dreamSync/client/src/lib/authUtils.ts @@ -1,3 +1,34 @@ export function isUnauthorizedError(error: Error): boolean { return /^401: .*Unauthorized/.test(error.message); -} \ No newline at end of file +} + +export const setAuthToken = (token: string) => { + localStorage.setItem("dreamsync_token", token); +}; + +export const getAuthToken = (): string | null => { + if (typeof window === "undefined") return null; + return localStorage.getItem("dreamsync_token"); +}; + +export const removeAuthToken = () => { + localStorage.removeItem("dreamsync_token"); +}; + +export const setAuthId = (id: string) => { + localStorage.setItem("dreamsync_user_id", id); +}; + +export const getAuthId = (): string | null => { + if (typeof window === "undefined") return null; + return localStorage.getItem("dreamsync_user_id"); +}; + +export const removeAuthId = () => { + localStorage.removeItem("dreamsync_user_id"); +}; + +export const clearAuth = () => { + removeAuthToken(); + removeAuthId(); +}; \ No newline at end of file diff --git a/platforms/dreamSync/client/src/lib/utils/mobile-detection.ts b/platforms/dreamSync/client/src/lib/utils/mobile-detection.ts new file mode 100644 index 00000000..53f47db4 --- /dev/null +++ b/platforms/dreamSync/client/src/lib/utils/mobile-detection.ts @@ -0,0 +1,50 @@ +export function isMobileDevice(): boolean { + if (typeof window === 'undefined') return false; + + const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera; + + // Check for mobile devices + if (/android/i.test(userAgent)) { + return true; + } + + if (/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) { + return true; + } + + // Check for touch capability + if ('ontouchstart' in window || navigator.maxTouchPoints > 0) { + return true; + } + + // Check screen size + if (window.innerWidth <= 768) { + return true; + } + + return false; +} + +export function getDeepLinkUrl(qrData: string): string { + // Extract the deep link URL from the QR data + // This assumes the QR data contains a URL that can be opened directly + return qrData; +} + +export function getAppStoreLink(): string { + if (typeof window === 'undefined') { + return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet"; + } + + const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera; + + if (/android/i.test(userAgent)) { + return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet"; + } + + if (/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) { + return "https://apps.apple.com/in/app/eid-for-w3ds/id6747748667"; + } + + return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet"; +} diff --git a/platforms/dreamSync/client/src/pages/dashboard.tsx b/platforms/dreamSync/client/src/pages/dashboard.tsx deleted file mode 100644 index 1966f483..00000000 --- a/platforms/dreamSync/client/src/pages/dashboard.tsx +++ /dev/null @@ -1,339 +0,0 @@ -import { useState, useEffect } from "react"; -import { useQuery, useMutation } from "@tanstack/react-query"; -import { useLocation } from "wouter"; -import { useAuth } from "@/hooks/useAuth"; -import { useToast } from "@/hooks/use-toast"; -import { isUnauthorizedError } from "@/lib/authUtils"; -import { apiRequest, queryClient } from "@/lib/queryClient"; -import Navigation from "@/components/navigation"; -import FindMatchesModal from "@/components/find-matches-modal"; -import AddWishlistModal from "@/components/add-wishlist-modal"; - -import UserCard from "@/components/user-card"; -import GroupCard from "@/components/group-card"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent } from "@/components/ui/card"; -import { Skeleton } from "@/components/ui/skeleton"; -import { Search, Users, Plus, Lightbulb } from "lucide-react"; -import type { UserWithProfile, MatchWithUsers, GroupSuggestion, GroupWithMembers } from "@shared/schema"; - -export default function Dashboard() { - const { toast } = useToast(); - const { user, isAuthenticated, isLoading } = useAuth(); - const [, setLocation] = useLocation(); - const [findMatchesOpen, setFindMatchesOpen] = useState(false); - const [addWishlistOpen, setAddWishlistOpen] = useState(false); - - // Redirect to login if not authenticated - useEffect(() => { - if (!isLoading && !isAuthenticated) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - }, [isAuthenticated, isLoading, toast]); - - const handleAddWishlist = () => { - setAddWishlistOpen(true); - }; - - // Fetch user profile - const { data: userProfile, isLoading: profileLoading } = useQuery({ - queryKey: ["/api/profile"], - enabled: isAuthenticated, - retry: false, - }); - - // Fetch user stats - const { data: stats, isLoading: statsLoading } = useQuery<{ - totalMatches: number; - newMatches: number; - suggestedGroups: number; - }>({ - queryKey: ["/api/stats"], - enabled: isAuthenticated, - retry: false, - }); - - // Fetch recent matches - const { data: matches, isLoading: matchesLoading } = useQuery({ - queryKey: ["/api/matches"], - enabled: isAuthenticated, - retry: false, - }); - - // Fetch AI-powered suggestions (both users and groups) - const { data: suggestions, isLoading: suggestionsLoading } = useQuery< - Array<{ - id: string; - targetType: 'user' | 'group'; - reason: string; - score: number; - user?: UserWithProfile; - group?: GroupWithMembers; - }> - >({ - queryKey: ["/api/suggestions"], - enabled: isAuthenticated, - retry: false, - }); - - // Initialize dashboard on first load (auto-generate suggestions if none exist) - const initializeDashboard = useMutation({ - mutationFn: async () => { - await apiRequest("POST", "/api/dashboard/initialize"); - }, - onSuccess: () => { - // Silently refresh data after initialization - queryClient.invalidateQueries({ queryKey: ["/api/suggestions"] }); - }, - onError: (error) => { - // Silently handle errors for initialization - console.log("Dashboard initialization completed or skipped"); - }, - }); - - // Auto-initialize dashboard on first authenticated load - useEffect(() => { - if (isAuthenticated && userProfile && !initializeDashboard.data) { - initializeDashboard.mutate(); - } - }, [isAuthenticated, userProfile]); - - if (isLoading || !isAuthenticated) { - return
; - } - - // COMPLETELY SEPARATE data - no mixing! - const latestMatchesData = matches?.slice(0, 3) || []; // Manual search results only - const latestSuggestionsData = suggestions?.slice(0, 3) || []; // AI recommendations only - - return ( -
- - -
- {/* Quick Actions - Top of Page */} -
-
setFindMatchesOpen(true)} - > -
-
- -
-
-

- Find New Matches -

-

Discover people who share your interests

-
-
-
- -
window.location.href = "/suggestions"} - > -
-
- -
-
-

Explore Suggestions

-

Discover people and groups tailored for you

-
-
-
- -
-
-
- -
-
-

Add Wishlist Item

-

Share what you're looking to achieve

-
-
-
-
- - {/* Main Content Grid - Mixed Users and Groups */} -
- {/* Latest Matches - User searched results (both users and groups) */} - - -
-
-

Latest Matches

-

Your search results

-
- -
- - {matchesLoading ? ( -
- {[...Array(3)].map((_, i) => ( -
-
- -
- - -
-
- - -
- ))} -
- ) : latestMatchesData.length === 0 ? ( -
- -

No matches yet

-

- Complete your profile and find your first matches -

- -
- ) : ( -
- {latestMatchesData.map((match, index) => ( - - ))} -
- )} -
-
- - {/* Latest Suggestions - AI-powered recommendations (both users and groups) */} - - -
-
-

Latest Suggestions

-

AI-powered recommendations

-
- -
- - {suggestionsLoading ? ( -
- {[...Array(3)].map((_, i) => ( -
-
- -
- - -
-
- - -
- ))} -
- ) : latestSuggestionsData.length === 0 ? ( -
- -

No suggestions yet

-

- Complete your profile to get AI-powered recommendations -

- -
- ) : ( -
- {latestSuggestionsData.map((suggestion, index) => { - if (suggestion.targetType === 'user' && suggestion.user) { - // User suggestion (AI recommendation for learning/growth) - return ( - - ); - } else if (suggestion.targetType === 'group' && suggestion.group) { - // Group suggestion - return ( - - ); - } - return null; - })} -
- )} -
-
-
-
- - {/* Find Matches Modal */} - - - {/* Add Wishlist Modal */} - -
- ); -} diff --git a/platforms/dreamSync/client/src/pages/groups.tsx b/platforms/dreamSync/client/src/pages/groups.tsx deleted file mode 100644 index 63b2779d..00000000 --- a/platforms/dreamSync/client/src/pages/groups.tsx +++ /dev/null @@ -1,385 +0,0 @@ -import { useEffect, useState } from "react"; -import { useQuery, useMutation } from "@tanstack/react-query"; -import { useAuth } from "@/hooks/useAuth"; -import { useToast } from "@/hooks/use-toast"; -import { isUnauthorizedError } from "@/lib/authUtils"; -import { apiRequest, queryClient } from "@/lib/queryClient"; -import Navigation from "@/components/navigation"; -import GroupCard from "@/components/group-card"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Skeleton } from "@/components/ui/skeleton"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { Search, Users, Plus, Lightbulb, Star } from "lucide-react"; -import type { GroupWithMembers, GroupSuggestion } from "@shared/schema"; - -export default function Groups() { - const { toast } = useToast(); - const { user, isAuthenticated, isLoading } = useAuth(); - const [searchTerm, setSearchTerm] = useState(""); - const [categoryFilter, setCategoryFilter] = useState("all"); - - // Redirect to login if not authenticated - useEffect(() => { - if (!isLoading && !isAuthenticated) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - }, [isAuthenticated, isLoading, toast]); - - // Fetch all groups - const { data: allGroups, isLoading: groupsLoading } = useQuery({ - queryKey: ["/api/groups"], - enabled: isAuthenticated, - retry: false, - }); - - // Fetch user's groups - const { data: userGroups, isLoading: userGroupsLoading } = useQuery({ - queryKey: ["/api/user/groups"], - enabled: isAuthenticated, - retry: false, - }); - - // Fetch group suggestions - const { data: groupSuggestions, isLoading: suggestionsLoading } = useQuery< - (GroupSuggestion & { group: GroupWithMembers })[] - >({ - queryKey: ["/api/group-suggestions"], - enabled: isAuthenticated, - retry: false, - }); - - // Generate group suggestions mutation - const generateSuggestionsMutation = useMutation({ - mutationFn: async () => { - await apiRequest("POST", "/api/group-suggestions/generate"); - }, - onSuccess: () => { - toast({ - title: "Success", - description: "Generated new group suggestions for you!", - }); - queryClient.invalidateQueries({ queryKey: ["/api/group-suggestions"] }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to generate group suggestions. Please try again.", - variant: "destructive", - }); - }, - }); - - if (isLoading || !isAuthenticated) { - return
; - } - - // Get user's group IDs for checking membership - const userGroupIds = userGroups?.map(group => group.id) || []; - - // Filter groups based on search and category - const filteredGroups = allGroups?.filter((group) => { - // Search filter - if (searchTerm) { - const searchLower = searchTerm.toLowerCase(); - const nameMatch = group.name.toLowerCase().includes(searchLower); - const descMatch = group.description?.toLowerCase().includes(searchLower); - const categoryMatch = group.category.toLowerCase().includes(searchLower); - - if (!nameMatch && !descMatch && !categoryMatch) return false; - } - - // Category filter - if (categoryFilter !== "all" && group.category !== categoryFilter) { - return false; - } - - return true; - }) || []; - - // Get unique categories for filter - const categories = Array.from(new Set(allGroups?.map(group => group.category) || [])); - - const renderGroupGrid = (groupList: GroupWithMembers[], showSuggestionInfo = false) => ( -
- {groupList.map((group) => ( - - ))} -
- ); - - const renderSuggestionGrid = (suggestions: (GroupSuggestion & { group: GroupWithMembers })[]) => ( -
- {suggestions.map((suggestion) => ( - - ))} -
- ); - - const renderEmptyState = (title: string, description: string, showGenerateButton = false) => ( -
-
- -
-

{title}

-

{description}

- {showGenerateButton && ( - - )} -
- ); - - return ( -
- - -
- {/* Header */} -
-
-
-

Groups

-

- Discover and join communities that match your interests and goals. -

-
- -
- - {/* Stats Cards */} -
- - -
-
- -
-
-
- {groupsLoading ? : allGroups?.length || 0} -
-
Available Groups
-
-
-
-
- - - -
-
- -
-
-
- {userGroupsLoading ? : userGroups?.length || 0} -
-
Your Groups
-
-
-
-
- - - -
-
- -
-
-
- {suggestionsLoading ? : groupSuggestions?.length || 0} -
-
Suggestions
-
-
-
-
-
-
- - {/* Filters and Search */} - - -
-
-
- - setSearchTerm(e.target.value)} - className="pl-10" - /> -
-
- - -
-
-
- - {/* Groups Content */} - - - - Suggested ({groupSuggestions?.length || 0}) - - - All Groups ({filteredGroups.length}) - - - My Groups ({userGroups?.length || 0}) - - - - - {suggestionsLoading ? ( -
- {[...Array(6)].map((_, i) => ( - - -
- -
- - - -
-
- -
-
- ))} -
- ) : groupSuggestions?.length === 0 ? ( - renderEmptyState( - "No group suggestions yet", - "Complete your profile to get personalized group recommendations based on your interests and skills.", - true - ) - ) : ( - renderSuggestionGrid(groupSuggestions || []) - )} -
- - - {groupsLoading ? ( -
- {[...Array(9)].map((_, i) => ( - - -
- -
- - - -
-
- -
-
- ))} -
- ) : filteredGroups.length === 0 ? ( - renderEmptyState( - "No groups found", - "Try adjusting your search filters or check back later for new groups." - ) - ) : ( - renderGroupGrid(filteredGroups) - )} -
- - - {userGroupsLoading ? ( -
- {[...Array(3)].map((_, i) => ( - - -
- -
- - - -
-
- -
-
- ))} -
- ) : userGroups?.length === 0 ? ( - renderEmptyState( - "You haven't joined any groups yet", - "Browse the suggested or all groups tabs to find communities that match your interests." - ) - ) : ( - renderGroupGrid(userGroups || []) - )} -
-
-
-
- ); -} diff --git a/platforms/dreamSync/client/src/pages/login.tsx b/platforms/dreamSync/client/src/pages/login.tsx index a0e42cfe..65876361 100644 --- a/platforms/dreamSync/client/src/pages/login.tsx +++ b/platforms/dreamSync/client/src/pages/login.tsx @@ -1,265 +1,5 @@ -import { useState } from "react"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Heart, Database, Shield, Users } from "lucide-react"; -import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { insertUserSchema, type InsertUser } from "@shared/schema"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { apiRequest } from "@/lib/queryClient"; -import { useToast } from "@/hooks/use-toast"; -import { z } from "zod"; - -const loginSchema = z.object({ - email: z.string().email("Please enter a valid email"), - password: z.string().min(6, "Password must be at least 6 characters"), -}); - -const registerSchema = insertUserSchema.extend({ - password: z.string().min(6, "Password must be at least 6 characters"), - confirmPassword: z.string(), -}).refine((data) => data.password === data.confirmPassword, { - message: "Passwords don't match", - path: ["confirmPassword"], -}); - -type LoginData = z.infer; -type RegisterData = z.infer; +import { LoginScreen } from "@/components/auth/login-screen"; export default function Login() { - const [isLogin, setIsLogin] = useState(true); - const { toast } = useToast(); - const queryClient = useQueryClient(); - - const loginForm = useForm({ - resolver: zodResolver(loginSchema), - defaultValues: { - email: "", - password: "", - }, - }); - - const registerForm = useForm({ - resolver: zodResolver(registerSchema), - defaultValues: { - email: "", - password: "", - confirmPassword: "", - firstName: "", - lastName: "", - }, - }); - - const loginMutation = useMutation({ - mutationFn: async (credentials: LoginData) => { - const res = await apiRequest("POST", "/api/login", credentials); - return await res.json(); - }, - onSuccess: (user) => { - queryClient.setQueryData(["/api/auth/user"], user); - toast({ title: "Welcome back!", description: "Successfully logged in." }); - }, - onError: (error: Error) => { - toast({ - title: "Login failed", - description: error.message, - variant: "destructive", - }); - }, - }); - - const registerMutation = useMutation({ - mutationFn: async (credentials: Omit) => { - const res = await apiRequest("POST", "/api/register", credentials); - return await res.json(); - }, - onSuccess: (user) => { - queryClient.setQueryData(["/api/auth/user"], user); - toast({ title: "Welcome to DreamSync!", description: "Account created successfully." }); - }, - onError: (error: Error) => { - toast({ - title: "Registration failed", - description: error.message, - variant: "destructive", - }); - }, - }); - - const onLoginSubmit = (data: LoginData) => { - loginMutation.mutate(data); - }; - - const onRegisterSubmit = (data: RegisterData) => { - const { confirmPassword, ...registerData } = data; - registerMutation.mutate(registerData); - }; - - return ( -
- - {/* Centered Login Card */} -
- - -
- -
- - DreamSync - - - Meet and match with new people in the Metastate - -
- - - {/* QR Code Message */} -

- Scan the QR code using your eID App to login -

- - {isLogin ? ( -
-
- - - {loginForm.formState.errors.email && ( -

{loginForm.formState.errors.email.message}

- )} -
- -
- - - {loginForm.formState.errors.password && ( -

{loginForm.formState.errors.password.message}

- )} -
- - -
- ) : ( -
-
-
- - - {registerForm.formState.errors.firstName && ( -

{registerForm.formState.errors.firstName.message}

- )} -
- -
- - - {registerForm.formState.errors.lastName && ( -

{registerForm.formState.errors.lastName.message}

- )} -
-
- -
- - - {registerForm.formState.errors.email && ( -

{registerForm.formState.errors.email.message}

- )} -
- -
- - - {registerForm.formState.errors.password && ( -

{registerForm.formState.errors.password.message}

- )} -
- -
- - - {registerForm.formState.errors.confirmPassword && ( -

{registerForm.formState.errors.confirmPassword.message}

- )} -
- - -
- )} - - {/* Timer Message */} -
-

- The code is valid for 60 seconds
- Please refresh the page if it expires -

-
- - {/* W3DS Welcome Message */} -
-

- You are entering DreamSync - a community matchmaking platform built on the Web 3.0 Data Space (W3DS) architecture. This system is designed around the principle of data-platform separation, where all your personal content is stored in your own sovereign eVault, not on centralised servers. -

-
-
-
- - {/* W3DS Logo */} -
- W3DS Logo -
-
-
- ); + return ; } \ No newline at end of file diff --git a/platforms/dreamSync/client/src/pages/matches-new.tsx b/platforms/dreamSync/client/src/pages/matches-new.tsx deleted file mode 100644 index a6a9e08a..00000000 --- a/platforms/dreamSync/client/src/pages/matches-new.tsx +++ /dev/null @@ -1,696 +0,0 @@ -import { useState } from "react"; -import { useQuery, useMutation } from "@tanstack/react-query"; -import { useAuth } from "@/hooks/useAuth"; -import Navigation from "@/components/navigation"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; -import { Badge } from "@/components/ui/badge"; -import { Calendar, MapPin, Search, MoreHorizontal, Eye, UserPlus, Users, Trash2, ChevronLeft, ChevronRight } from "lucide-react"; -import { Button } from "@/components/ui/button"; -import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"; -import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; -import { useToast } from "@/hooks/use-toast"; -import { apiRequest, queryClient } from "@/lib/queryClient"; -import { isUnauthorizedError } from "@/lib/authUtils"; -import type { MatchWithUsers, GroupSuggestion, GroupWithMembers } from "@shared/schema"; - -export default function MatchesNew() { - const { user, isAuthenticated, isLoading } = useAuth(); - const [selectedItem, setSelectedItem] = useState(null); - const [viewModalOpen, setViewModalOpen] = useState(false); - const [currentPage, setCurrentPage] = useState(1); - const itemsPerPage = 10; - const { toast } = useToast(); - - // Fetch matches and group suggestions - const { data: matches, isLoading: matchesLoading } = useQuery({ - queryKey: ["/api/matches"], - enabled: !!user, - }); - - const { data: groupSuggestions, isLoading: groupSuggestionsLoading } = useQuery<(GroupSuggestion & { group: GroupWithMembers })[]>({ - queryKey: ["/api/group-suggestions"], - enabled: !!user, - }); - - const getOtherUser = (match: MatchWithUsers) => { - return match.userId1 === user?.id ? match.user2 : match.user1; - }; - - const getScoreColor = (score: number) => { - if (score >= 90) return "bg-green-500"; - if (score >= 80) return "bg-blue-500"; - if (score >= 70) return "bg-orange-500"; - return "bg-gray-500"; - }; - - const isNewItem = (createdAt: string | Date) => { - if (!createdAt) return false; - const itemDate = new Date(createdAt); - const now = new Date(); - const diffInMinutes = (now.getTime() - itemDate.getTime()) / (1000 * 60); - return diffInMinutes <= 60; // Consider new if created within last hour - }; - - // Mutations for actions - const deleteMatchMutation = useMutation({ - mutationFn: async (itemId: string) => { - await apiRequest(`/api/matches/${itemId}`, "DELETE"); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/matches"] }); - queryClient.invalidateQueries({ queryKey: ["/api/group-suggestions"] }); - toast({ - title: "Success", - description: "Item removed successfully", - }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to remove item. Please try again.", - variant: "destructive", - }); - }, - }); - - const connectMutation = useMutation({ - mutationFn: async (matchId: string) => { - await apiRequest(`/api/matches/${matchId}/status`, "PUT", { status: "connected" }); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/matches"] }); - toast({ - title: "Success", - description: "Connection request sent!", - }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to connect. Please try again.", - variant: "destructive", - }); - }, - }); - - const joinGroupMutation = useMutation({ - mutationFn: async (groupId: string) => { - await apiRequest(`/api/groups/${groupId}/join`, "POST"); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/group-suggestions"] }); - toast({ - title: "Success", - description: "Successfully joined the group!", - }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to join group. Please try again.", - variant: "destructive", - }); - }, - }); - - const handleViewItem = (item: any) => { - setSelectedItem(item); - setViewModalOpen(true); - }; - - const handleConnect = (itemId: string) => { - connectMutation.mutate(itemId); - }; - - const handleJoinGroup = (groupId: string) => { - joinGroupMutation.mutate(groupId); - }; - - const handleDelete = (itemId: string) => { - deleteMatchMutation.mutate(itemId); - }; - - // Combine and sort all items - const allItems = [ - ...(matches || []).map(match => ({ ...match, type: 'user' as const })), - ...(groupSuggestions || []).map(suggestion => ({ ...suggestion, type: 'group' as const })) - ].sort((a, b) => new Date(b.createdAt!).getTime() - new Date(a.createdAt!).getTime()); - - // Pagination logic - const totalPages = Math.ceil(allItems.length / itemsPerPage); - const startIndex = (currentPage - 1) * itemsPerPage; - const paginatedItems = allItems.slice(startIndex, startIndex + itemsPerPage); - - const handlePageChange = (page: number) => { - setCurrentPage(page); - }; - - if (!isAuthenticated || isLoading) { - return
Loading...
; - } - - return ( -
- - -
- {/* Header */} -
-

Match History

-

Your complete history of matches and connections

-
- - {/* Matches Table */} -
-
- - - - - - - - - - - - - {(matchesLoading || groupSuggestionsLoading) ? ( - - - - ) : allItems.length === 0 ? ( - - - - ) : ( - paginatedItems.map((item) => { - const isNew = isNewItem(item.createdAt!); - - if (item.type === 'user') { - const match = item as MatchWithUsers & { type: 'user' }; - const otherUser = getOtherUser(match); - - return ( - handleViewItem(item)} - > - - - - - - - - ); - } else { - const suggestion = item as GroupSuggestion & { group: GroupWithMembers } & { type: 'group' }; - - return ( - handleViewItem(item)} - > - - - - - - - - ); - } - }) - )} - -
- Name - - Location - - Score - - Reason - - Date - - Actions -
- Loading matches and suggestions... -
-
- -
-

No matches yet

-

Complete your profile to start finding matches

-
- -
-
-
- - - - {otherUser.firstName?.[0]}{otherUser.lastName?.[0]} - - -
-
-
- {`${otherUser.firstName} ${otherUser.lastName}`.length > 21 - ? `${otherUser.firstName} ${otherUser.lastName}`.substring(0, 21) + '...' - : `${otherUser.firstName} ${otherUser.lastName}` - } -
- {isNew && ( - - New - - )} -
-
Person
-
-
-
-
- - {otherUser.profile?.location || "Unknown"} -
-
-
-
- {match.compatibilityScore}% -
-
-
-

- {match.matchReason || "Compatible interests and goals"} -

-
-
-
- - {new Date(match.createdAt!).toLocaleDateString()} -
-
- - - - - - handleViewItem(item)}> - - View - - - - Connect - - handleDelete(match.id)}> - - Delete - - - -
-
- - - {suggestion.group.name[0]} - - -
-
-
- {suggestion.group.name.length > 21 - ? suggestion.group.name.substring(0, 21) + '...' - : suggestion.group.name - } -
- {isNew && ( - - New - - )} -
-
- Group ({suggestion.group.memberCount} members) -
-
-
-
-
- - {suggestion.group.location || "Various"} -
-
-
-
- {suggestion.score}% -
-
-
-

- {suggestion.reason || "Matches your interests"} -

-
-
-
- - {new Date(suggestion.createdAt!).toLocaleDateString()} -
-
- - - - - - handleViewItem(item)}> - - View - - - - Join Group - - handleDelete(suggestion.id)}> - - Delete - - - -
-
-
- - {/* Pagination */} - {totalPages > 1 && ( -
-
- Showing {startIndex + 1} to {Math.min(startIndex + itemsPerPage, allItems.length)} of {allItems.length} results -
-
- - -
- {Array.from({ length: totalPages }, (_, i) => i + 1).map((pageNum) => ( - - ))} -
- - -
-
- )} -
- - {/* View User Modal */} - {selectedItem?.type === 'user' && ( - - - - User Match Details - - Detailed information about this match - - - -
- {/* User Info */} -
- - - - {getOtherUser(selectedItem).firstName?.[0]}{getOtherUser(selectedItem).lastName?.[0]} - - -
-

- {getOtherUser(selectedItem).firstName} {getOtherUser(selectedItem).lastName} -

-

- - {getOtherUser(selectedItem).profile?.location || "Unknown"} -

-
-
- - {/* Match Score */} -
-
- Compatibility Score - {selectedItem.compatibilityScore}% -
-
- - {/* Match Reason */} -
-

Why you match

-

- {selectedItem.matchReason || "Compatible interests and goals"} -

-
- - {/* Matched Skills */} -
-

Skills

-
- {getOtherUser(selectedItem).skills && getOtherUser(selectedItem).skills.length > 0 ? ( - getOtherUser(selectedItem).skills.slice(0, 6).map((skill: any, index: number) => ( - - {skill.name} - - )) - ) : ( - // Sample skills for demonstration - ['JavaScript', 'React', 'Python', 'UI/UX Design'].map((skill, index) => ( - - {skill} - - )) - )} -
-
- - {/* Matched Hobbies */} -
-

Interests

-
- {getOtherUser(selectedItem).hobbies && getOtherUser(selectedItem).hobbies.length > 0 ? ( - getOtherUser(selectedItem).hobbies.slice(0, 6).map((hobby: any, index: number) => ( - - {hobby.name} - - )) - ) : ( - // Sample hobbies for demonstration - ['Photography', 'Hiking', 'Tech Meetups', 'Cooking'].map((hobby, index) => ( - - {hobby} - - )) - )} -
-
- - {/* Match Date */} -
- - Matched on {new Date(selectedItem.createdAt!).toLocaleDateString()} -
-
- -
- - -
-
-
- )} - - {/* View Group Modal */} - {selectedItem?.type === 'group' && ( - - - - Group Suggestion Details - - Detailed information about this group suggestion - - - -
- {/* Group Info */} -
- - - {selectedItem.group.name[0]} - - -
-

- {selectedItem.group.name} -

-

- {selectedItem.group.category} -

-

- - {selectedItem.group.location || "Various"} -

-
-
- - {/* Match Score */} -
-
- Compatibility Score - {selectedItem.score}% -
-
- - {/* Group Description */} -
-

About this group

-

- {selectedItem.group.description || "A vibrant community focused on connecting like-minded individuals"} -

-
- - - - {/* Match Reason */} -
-

Why this group is suggested

-

- {selectedItem.reason || "Matches your interests and professional goals"} -

-
- - {/* Group Stats */} -
-
- - {selectedItem.group.memberCount} members -
-
- - Suggested {new Date(selectedItem.createdAt!).toLocaleDateString()} -
-
-
- -
- - -
-
-
- )} -
- ); -} \ No newline at end of file diff --git a/platforms/dreamSync/client/src/pages/profile.tsx b/platforms/dreamSync/client/src/pages/profile.tsx deleted file mode 100644 index 1516bac2..00000000 --- a/platforms/dreamSync/client/src/pages/profile.tsx +++ /dev/null @@ -1,654 +0,0 @@ -import { useEffect, useState } from "react"; -import { useQuery, useMutation } from "@tanstack/react-query"; -import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { z } from "zod"; -import { useAuth } from "@/hooks/useAuth"; -import { useToast } from "@/hooks/use-toast"; -import { isUnauthorizedError } from "@/lib/authUtils"; -import { apiRequest, queryClient } from "@/lib/queryClient"; -import Navigation from "@/components/navigation"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Textarea } from "@/components/ui/textarea"; -import { Label } from "@/components/ui/label"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; -import { Badge } from "@/components/ui/badge"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { Skeleton } from "@/components/ui/skeleton"; -import { X, User, MapPin, Target, Heart } from "lucide-react"; -import { - insertProfileSchema, - insertSkillSchema, - insertInterestSchema, - type UserWithProfile, - type Skill, - type Interest -} from "@shared/schema"; - -const profileFormSchema = insertProfileSchema.omit({ userId: true }).extend({ - searchRadius: z.number().min(1).max(20000), - jobTitle: z.string().optional(), - company: z.string().optional(), -}); - -const skillFormSchema = insertSkillSchema.omit({ userId: true }); -const interestFormSchema = insertInterestSchema.omit({ userId: true }); - -export default function Profile() { - const { toast } = useToast(); - const { isAuthenticated, isLoading } = useAuth(); - const [activeTab, setActiveTab] = useState("basic"); - - // Redirect to login if not authenticated - useEffect(() => { - if (!isLoading && !isAuthenticated) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - }, [isAuthenticated, isLoading, toast]); - - // Fetch user profile - const { data: userProfile, isLoading: profileLoading } = useQuery({ - queryKey: ["/api/profile"], - enabled: isAuthenticated, - retry: false, - }); - - // Profile form - const profileForm = useForm>({ - resolver: zodResolver(profileFormSchema), - defaultValues: { - bio: "", - location: "", - searchRadius: 25, - jobTitle: "", - company: "", - }, - }); - - // Update form when data loads - useEffect(() => { - if (userProfile?.profile) { - profileForm.reset({ - bio: userProfile.profile.bio || "", - location: userProfile.profile.location || "", - searchRadius: userProfile.profile.searchRadius || 25, - jobTitle: userProfile.profile.jobTitle || "", - company: userProfile.profile.company || "", - }); - } - }, [userProfile, profileForm]); - - // Profile mutation - const profileMutation = useMutation({ - mutationFn: async (data: z.infer) => { - console.log("Submitting profile data:", data); - const response = await apiRequest("POST", "/api/profile", data); - console.log("Profile save response:", response.status); - return response; - }, - onSuccess: () => { - toast({ - title: "Profile Saved! ✓", - description: "Your profile has been updated successfully!", - variant: "default", - }); - queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); - }, - onError: (error) => { - console.error("Profile save error:", error); - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: `Failed to update profile: ${error.message}`, - variant: "destructive", - }); - }, - }); - - // Skills section - const skillForm = useForm>({ - resolver: zodResolver(skillFormSchema), - defaultValues: { - name: "", - proficiency: "beginner", - }, - }); - - const skillMutation = useMutation({ - mutationFn: async (data: z.infer) => { - await apiRequest("POST", "/api/skills", data); - }, - onSuccess: () => { - skillForm.reset(); - queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); - toast({ title: "Success", description: "Skill added successfully!" }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to add skill. Please try again.", - variant: "destructive", - }); - }, - }); - - const deleteSkillMutation = useMutation({ - mutationFn: async (skillId: string) => { - await apiRequest("DELETE", `/api/skills/${skillId}`); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); - toast({ title: "Success", description: "Skill removed successfully!" }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to remove skill. Please try again.", - variant: "destructive", - }); - }, - }); - - // Interests section (similar structure to skills) - const interestForm = useForm>({ - resolver: zodResolver(interestFormSchema), - defaultValues: { - name: "", - frequency: "weekly", - }, - }); - - const interestMutation = useMutation({ - mutationFn: async (data: z.infer) => { - console.log("Adding interest with data:", data); - const response = await apiRequest("POST", "/api/interests", data); - console.log("Interest added successfully:", response); - return response; - }, - onSuccess: () => { - interestForm.reset(); - // Force refresh of profile data - queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); - queryClient.refetchQueries({ queryKey: ["/api/profile"] }); - toast({ title: "Success", description: "Interest added successfully!" }); - }, - onError: (error) => { - console.error("Interest add error:", error); - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to add interest. Please try again.", - variant: "destructive", - }); - }, - }); - - const deleteInterestMutation = useMutation({ - mutationFn: async (interestId: string) => { - await apiRequest("DELETE", `/api/interests/${interestId}`); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); - toast({ title: "Success", description: "Interest removed successfully!" }); - }, - onError: (error) => { - if (isUnauthorizedError(error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - return; - } - toast({ - title: "Error", - description: "Failed to remove interest. Please try again.", - variant: "destructive", - }); - }, - }); - - - - if (isLoading || !isAuthenticated) { - return
; - } - - return ( -
- - -
-
-

Profile Settings

-

- Complete your profile to get better matches and group suggestions. -

-
- - - - - - Basic Info - - - - Skills - - - - Interests - - - - {/* Basic Information Tab */} - - - - - - Basic Information - - - - {profileLoading ? ( -
- - - - -
- ) : ( -
- { - console.log("Form handleSubmit triggered with data:", data); - profileMutation.mutate(data); - })} className="space-y-6"> - ( - - Bio - -