@phantasma/connect-react
Advanced tools
@@ -17,2 +17,11 @@ "use client" | ||
| ctx.restore() | ||
| const onPageHide = () => { | ||
| if (ctx.cancel_connecting) { | ||
| void ctx.cancel_connecting() | ||
| } | ||
| } | ||
| window.addEventListener("pagehide", onPageHide) | ||
| return () => { | ||
| window.removeEventListener("pagehide", onPageHide) | ||
| } | ||
| }, []) | ||
@@ -90,2 +99,5 @@ | ||
| }, | ||
| cancel_connecting: () => { | ||
| state.abort_pending_connect() | ||
| }, | ||
| is_connecting: state.is_connecting, | ||
@@ -92,0 +104,0 @@ wallet: state.conn == null ? undefined : pha_econn_to_conn_wallet(state.conn) |
@@ -16,2 +16,11 @@ "use client"; | ||
| ctx.restore(); | ||
| const onPageHide = () => { | ||
| if (ctx.cancel_connecting) { | ||
| void ctx.cancel_connecting(); | ||
| } | ||
| }; | ||
| window.addEventListener("pagehide", onPageHide); | ||
| return () => { | ||
| window.removeEventListener("pagehide", onPageHide); | ||
| }; | ||
| }, []); | ||
@@ -45,2 +54,5 @@ function Connect() { | ||
| }, | ||
| cancel_connecting: () => { | ||
| state.abort_pending_connect(); | ||
| }, | ||
| is_connecting: state.is_connecting, | ||
@@ -47,0 +59,0 @@ wallet: state.conn == null ? undefined : (0, index_1.pha_econn_to_conn_wallet)(state.conn) |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"AccountWidgetV1.js","sourceRoot":"","sources":["../../components/AccountWidgetV1.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;AACZ,iCAAiC;AACjC,oDAAgD;AAChD,kEAAgJ;AAChJ,oCAAgF;AAChF,sDAAwD;AAExD,2CAAqC;AAExB,QAAA,eAAe,GAAG,IAAA,qBAAQ,EAAC,CAAC,MAExC,EAAE,EAAE;IACJ,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;IAEpB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,GAAG,CAAC,OAAO,EAAE,CAAA;IACd,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,OAAO;QACf,OAAO,CACN,0CACC,uBAAC,eAAM,IACN,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE;oBACb,GAAG,CAAC,OAAO,EAAE,CAAA;gBACd,CAAC,YAEA,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,GAC/C,GACJ,CACN,CAAA;IACF,CAAC;IAED,SAAS,GAAG;QACX,IAAI,CAAC,GAAG,GAAG,CAAC,MAAO,CAAC;QACpB,OAAO,CACN,wBAAC,4BAAY,eACZ,uBAAC,mCAAmB,IAAC,OAAO,kBAC3B,uBAAC,eAAM,IAAC,OAAO,EAAC,SAAS,YACxB,4CACC,iCAAW,EACX,0CAAM,IAAA,sBAAO,EAAC,CAAC,CAAC,OAAO,CAAC,GAAO,IAC1B,GACE,GACY,EACtB,wBAAC,mCAAmB,eACnB,uBAAC,gCAAgB,IAChB,OAAO,EAAE,GAAG,EAAE;gCACb,IAAA,wBAAS,EAAC,CAAC,CAAC,OAAO,CAAC,CAAA;4BACrB,CAAC,6BAGiB,EACnB,uBAAC,qCAAqB,KAAG,EACzB,uBAAC,gCAAgB,IAAC,OAAO,EAAC,aAAa,EACtC,OAAO,EAAE,GAAG,EAAE;gCACb,GAAG,CAAC,UAAU,EAAE,CAAA;4BACjB,CAAC,2BAGiB,IACE,IACP,CAEhB,CAAA;IACF,CAAC;IAED,OAAO,CACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAC9B,CAAA;AACF,CAAC,CAAC,CAAA;AAEW,QAAA,kBAAkB,GAAG,IAAA,qBAAQ,EAAC,CAAC,MAE3C,EAAE,EAAE;IACJ,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IACtB,OAAO,CACN,uBAAC,uBAAe,IACf,GAAG,EAAE;YACJ,OAAO,EAAE,GAAG,EAAE;gBACb,KAAK,CAAC,OAAO,EAAE,CAAA;YAChB,CAAC;YACD,UAAU,EAAE,GAAG,EAAE;gBAChB,KAAK,CAAC,UAAU,EAAE,CAAA;YACnB,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACb,KAAK,CAAC,OAAO,EAAE,CAAA;YAChB,CAAC;YACD,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAwB,EAAC,KAAK,CAAC,IAAI,CAAC;SAC7E,GACA,CACF,CAAA;AACF,CAAC,CAAC,CAAA"} | ||
| {"version":3,"file":"AccountWidgetV1.js","sourceRoot":"","sources":["../../components/AccountWidgetV1.tsx"],"names":[],"mappings":"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"} |
+24
-1
@@ -8,2 +8,10 @@ import { EasyConnect } from "phantasma-sdk-ts"; | ||
| type FailureClass = "transport" | "wallet"; | ||
| type SocketHostAttempt = { | ||
| host: string | null; | ||
| success: boolean; | ||
| failure_class: FailureClass | null; | ||
| failure_message: string | null; | ||
| socket_transport: string | null; | ||
| socket_open: boolean; | ||
| }; | ||
| type ConnectOptions = { | ||
@@ -32,3 +40,8 @@ requiredVersion?: number; | ||
| local_socket_reachable: boolean | null; | ||
| browser_family: string | null; | ||
| public_origin: boolean | null; | ||
| brave_loopback_permission_suspected: boolean; | ||
| socket_host_attempts: SocketHostAttempt[]; | ||
| socket_transport: string | null; | ||
| socket_host: string | null; | ||
| socket_open: boolean; | ||
@@ -49,2 +62,3 @@ }; | ||
| disconnect: () => void | Promise<void>; | ||
| cancel_connecting?: () => void | Promise<void>; | ||
| is_connecting?: boolean; | ||
@@ -63,2 +77,3 @@ is_disconnecting?: boolean; | ||
| last_connect_diagnostics: ConnectAttemptDiagnostics | null; | ||
| private pending_conn; | ||
| constructor(connectOptions?: ConnectOptions); | ||
@@ -69,5 +84,10 @@ private normalize_transport_mode; | ||
| private get connect_attempt_timeout_ms(); | ||
| private current_origin_hostname; | ||
| private is_public_origin; | ||
| private detect_browser_family; | ||
| private to_sdk_provider_hint; | ||
| private classify_failure; | ||
| private is_connect_refusal; | ||
| private should_suspect_brave_loopback_permission_block; | ||
| private append_brave_loopback_permission_hint; | ||
| private probe_local_socket; | ||
@@ -78,3 +98,2 @@ private detect_available_transports; | ||
| private write_session_config; | ||
| private build_auto_transport_queue; | ||
| private resolve_persist_config; | ||
@@ -86,2 +105,6 @@ persist_config(): void; | ||
| restore(): void; | ||
| private safe_disconnect; | ||
| abort_pending_connect(): void; | ||
| private local_socket_hosts; | ||
| private connect_via_transport_host; | ||
| private connect_via_transport; | ||
@@ -88,0 +111,0 @@ connect(configOverride?: ConnectOverride): Promise<void>; |
+214
-43
@@ -37,2 +37,3 @@ "use strict"; | ||
| this.last_connect_diagnostics = null; | ||
| this.pending_conn = null; | ||
| this.connect_options = connectOptions; | ||
@@ -69,2 +70,48 @@ this.selected_transport_mode = this.normalize_transport_mode(connectOptions.transportMode); | ||
| } | ||
| current_origin_hostname() { | ||
| if (typeof window === "undefined") { | ||
| return null; | ||
| } | ||
| try { | ||
| return window.location.hostname; | ||
| } | ||
| catch (_a) { | ||
| return null; | ||
| } | ||
| } | ||
| is_public_origin() { | ||
| const hostname = this.current_origin_hostname(); | ||
| if (hostname == null) { | ||
| return null; | ||
| } | ||
| const localHostnames = new Set([ | ||
| "localhost", | ||
| "127.0.0.1", | ||
| "::1", | ||
| ]); | ||
| return !localHostnames.has(hostname); | ||
| } | ||
| detect_browser_family() { | ||
| var _a; | ||
| if (typeof navigator === "undefined") { | ||
| return null; | ||
| } | ||
| const userAgent = (_a = navigator.userAgent) !== null && _a !== void 0 ? _a : ""; | ||
| if ("brave" in navigator || /\bBrave\//i.test(userAgent)) { | ||
| return "brave"; | ||
| } | ||
| if (/\bFirefox\//i.test(userAgent)) { | ||
| return "firefox"; | ||
| } | ||
| if (/\bEdg\//i.test(userAgent)) { | ||
| return "edge"; | ||
| } | ||
| if (/\bChrome\//i.test(userAgent)) { | ||
| return "chrome"; | ||
| } | ||
| if (/\bSafari\//i.test(userAgent)) { | ||
| return "safari"; | ||
| } | ||
| return null; | ||
| } | ||
| to_sdk_provider_hint(transport) { | ||
@@ -105,2 +152,28 @@ return transport === "injected" ? "ecto" : "poltergeist"; | ||
| } | ||
| should_suspect_brave_loopback_permission_block(transport, attempt) { | ||
| if (transport !== "local-socket") { | ||
| return false; | ||
| } | ||
| if (attempt.success || attempt.failureClass !== "transport") { | ||
| return false; | ||
| } | ||
| if (this.detect_browser_family() !== "brave") { | ||
| return false; | ||
| } | ||
| if (this.is_public_origin() !== true) { | ||
| return false; | ||
| } | ||
| if (attempt.socketOpen) { | ||
| return false; | ||
| } | ||
| if (attempt.hostAttempts.length === 0) { | ||
| return false; | ||
| } | ||
| return attempt.hostAttempts.every((hostAttempt) => hostAttempt.success === false && | ||
| hostAttempt.socket_transport === "websocket" && | ||
| hostAttempt.socket_open === false); | ||
| } | ||
| append_brave_loopback_permission_hint(message) { | ||
| return `${message}. Brave may be blocking public-site access to localhost wallet sockets. Allow localhost access for this site in brave://settings/content/localhostAccess or use Browser extension mode.`; | ||
| } | ||
| async probe_local_socket(timeoutMs = this.transport_detection_timeout_ms) { | ||
@@ -136,7 +209,10 @@ if (typeof window === "undefined" || typeof WebSocket === "undefined") { | ||
| } | ||
| async detect_available_transports(requestedTransportMode = this.selected_transport_mode) { | ||
| async detect_available_transports(requestedTransportMode = this.selected_transport_mode, options = {}) { | ||
| var _a; | ||
| const includeLocalSocketProbe = (_a = options.includeLocalSocketProbe) !== null && _a !== void 0 ? _a : true; | ||
| const injected_transport_detected = typeof window !== "undefined" && "PhantasmaLinkSocket" in window; | ||
| // Explicit modes must not poke the other transport endpoint just to populate | ||
| // diagnostics. In particular, `I` must not touch the localhost PGL socket. | ||
| const local_socket_reachable = requestedTransportMode === "auto" || requestedTransportMode === "local-socket" | ||
| const local_socket_reachable = includeLocalSocketProbe && | ||
| (requestedTransportMode === "auto" || requestedTransportMode === "local-socket") | ||
| ? await this.probe_local_socket() | ||
@@ -185,17 +261,2 @@ : null; | ||
| } | ||
| build_auto_transport_queue(availableTransports, savedTransport) { | ||
| if (savedTransport == null || !availableTransports.includes(savedTransport)) { | ||
| return { | ||
| queue: [...availableTransports], | ||
| selectionReason: "auto-prefer-injected-then-local-socket", | ||
| }; | ||
| } | ||
| return { | ||
| queue: [ | ||
| savedTransport, | ||
| ...availableTransports.filter((transport) => transport !== savedTransport), | ||
| ], | ||
| selectionReason: "auto-prefer-saved-transport-then-fallback", | ||
| }; | ||
| } | ||
| resolve_persist_config(conn) { | ||
@@ -219,4 +280,5 @@ return { | ||
| // for the next user-initiated connect attempt and must not silently reconnect. | ||
| // They also must not preflight localhost on mount, because background wallet | ||
| // socket probes change protocol behavior before the user has asked to connect. | ||
| if (this.selected_transport_mode !== "auto") { | ||
| void this.refresh_available_transports(this.selected_transport_mode); | ||
| return; | ||
@@ -226,3 +288,2 @@ } | ||
| if (config == null) { | ||
| void this.refresh_available_transports("auto"); | ||
| return; | ||
@@ -244,4 +305,27 @@ } | ||
| } | ||
| async connect_via_transport(transport, options) { | ||
| safe_disconnect(conn, message) { | ||
| if (conn == null) { | ||
| return; | ||
| } | ||
| try { | ||
| conn.disconnect(message); | ||
| } | ||
| catch (_a) { | ||
| // Best-effort cleanup only. | ||
| } | ||
| } | ||
| abort_pending_connect() { | ||
| if (this.pending_conn == null) { | ||
| return; | ||
| } | ||
| const conn = this.pending_conn; | ||
| this.pending_conn = null; | ||
| this.safe_disconnect(conn, "Abort pending wallet connect"); | ||
| } | ||
| local_socket_hosts() { | ||
| return ["127.0.0.1:7090", "localhost:7090"]; | ||
| } | ||
| async connect_via_transport_host(transport, options) { | ||
| return await new Promise((resolve) => { | ||
| var _a, _b; | ||
| const conn = new phantasma_sdk_ts_1.EasyConnect([ | ||
@@ -252,3 +336,22 @@ String(options.requiredVersion), | ||
| ]); | ||
| if (options.host != null) { | ||
| conn.link.host = options.host; | ||
| } | ||
| this.pending_conn = conn; | ||
| let settled = false; | ||
| const socketHost = (_b = (_a = conn.link.host) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : null; | ||
| const describeTransportFailure = (message) => transport === "local-socket" && socketHost != null | ||
| ? `${message} (${socketHost})` | ||
| : message; | ||
| const buildHostAttempt = (result) => { | ||
| var _a; | ||
| return ({ | ||
| host: socketHost, | ||
| success: result.success, | ||
| failure_class: result.success ? null : result.failureClass, | ||
| failure_message: result.success ? null : result.message, | ||
| socket_transport: (_a = conn.link.socketTransport) !== null && _a !== void 0 ? _a : null, | ||
| socket_open: conn.link.socketOpen, | ||
| }); | ||
| }; | ||
| const finalize = (result) => { | ||
@@ -261,3 +364,9 @@ var _a; | ||
| clearTimeout(timer); | ||
| resolve(Object.assign(Object.assign({}, result), { socketTransport: (_a = conn.link.socketTransport) !== null && _a !== void 0 ? _a : null, socketOpen: conn.link.socketOpen })); | ||
| if (this.pending_conn === conn) { | ||
| this.pending_conn = null; | ||
| } | ||
| if (!result.success) { | ||
| this.safe_disconnect(conn, "Close failed wallet connect attempt"); | ||
| } | ||
| resolve(Object.assign(Object.assign({}, result), { hostAttempts: [buildHostAttempt(result)], socketTransport: (_a = conn.link.socketTransport) !== null && _a !== void 0 ? _a : null, socketHost, socketOpen: conn.link.socketOpen })); | ||
| }; | ||
@@ -269,5 +378,5 @@ const timer = setTimeout(() => { | ||
| conn, | ||
| message: transportEstablished | ||
| message: describeTransportFailure(transportEstablished | ||
| ? `${transport} transport timed out after connection was established` | ||
| : `${transport} transport connection timed out`, | ||
| : `${transport} transport connection timed out`), | ||
| failureClass: "transport", | ||
@@ -299,3 +408,3 @@ }); | ||
| conn, | ||
| message, | ||
| message: describeTransportFailure(message), | ||
| failureClass: this.classify_failure(message), | ||
@@ -306,2 +415,26 @@ }); | ||
| } | ||
| async connect_via_transport(transport, options) { | ||
| const hosts = transport === "local-socket" ? this.local_socket_hosts() : [null]; | ||
| let lastAttempt = null; | ||
| const hostAttempts = []; | ||
| for (let index = 0; index < hosts.length; index++) { | ||
| const attempt = await this.connect_via_transport_host(transport, Object.assign(Object.assign({}, options), { host: hosts[index] })); | ||
| hostAttempts.push(...attempt.hostAttempts); | ||
| lastAttempt = attempt; | ||
| if (attempt.success) { | ||
| return Object.assign(Object.assign({}, attempt), { hostAttempts }); | ||
| } | ||
| const shouldRetryWithAlternateHost = transport === "local-socket" && | ||
| attempt.failureClass === "transport" && | ||
| !attempt.socketOpen && | ||
| index < hosts.length - 1; | ||
| if (!shouldRetryWithAlternateHost) { | ||
| return Object.assign(Object.assign({}, attempt), { hostAttempts }); | ||
| } | ||
| } | ||
| if (lastAttempt != null) { | ||
| return Object.assign(Object.assign({}, lastAttempt), { hostAttempts }); | ||
| } | ||
| throw new Error(`No connection attempts executed for ${transport}`); | ||
| } | ||
| async connect(configOverride = {}) { | ||
@@ -314,8 +447,15 @@ var _a, _b, _c, _d, _e, _f, _g; | ||
| this.selected_transport_mode = requestedTransportMode; | ||
| this.abort_pending_connect(); | ||
| if (this.conn != null) { | ||
| const conn = this.conn; | ||
| this.conn = null; | ||
| this.safe_disconnect(conn, "Replace existing wallet session"); | ||
| } | ||
| this.err_msg = null; | ||
| this.conn = null; | ||
| this.is_connecting = true; | ||
| const detected = await this.detect_available_transports(requestedTransportMode); | ||
| // Live connect must not create an extra localhost websocket preflight. That | ||
| // preflight races with the real wallet socket and is only safe for explicit | ||
| // diagnostics/UI refreshes. | ||
| const detected = await this.detect_available_transports(requestedTransportMode, { includeLocalSocketProbe: false }); | ||
| const savedConfig = requestedTransportMode === "auto" ? this.read_session_config() : null; | ||
| const autoTransportSelection = this.build_auto_transport_queue(detected.available_transports, (_f = savedConfig === null || savedConfig === void 0 ? void 0 : savedConfig.transportMode) !== null && _f !== void 0 ? _f : null); | ||
| const diagnostics = { | ||
@@ -331,4 +471,4 @@ configured_transport_mode: configuredTransportMode, | ||
| selection_reason: requestedTransportMode === "auto" | ||
| ? autoTransportSelection.selectionReason | ||
| : "explicit-transport-mode", | ||
| ? "auto-connect-without-localhost-preflight" | ||
| : "explicit-transport-mode-without-localhost-preflight", | ||
| failure_class: null, | ||
@@ -340,3 +480,8 @@ failure_message: null, | ||
| local_socket_reachable: detected.local_socket_reachable, | ||
| browser_family: this.detect_browser_family(), | ||
| public_origin: this.is_public_origin(), | ||
| brave_loopback_permission_suspected: false, | ||
| socket_host_attempts: [], | ||
| socket_transport: null, | ||
| socket_host: null, | ||
| socket_open: false, | ||
@@ -346,9 +491,22 @@ }; | ||
| if (requestedTransportMode === "auto") { | ||
| transportQueue = autoTransportSelection.queue; | ||
| // The quick localhost probe is advisory only. Preserve the historical | ||
| // websocket path by still attempting the real local-socket connect when | ||
| // auto mode cannot positively detect any transport up front. | ||
| if (transportQueue.length === 0) { | ||
| const savedTransport = (_f = savedConfig === null || savedConfig === void 0 ? void 0 : savedConfig.transportMode) !== null && _f !== void 0 ? _f : null; | ||
| if (savedTransport === "local-socket") { | ||
| transportQueue = detected.injected_transport_detected | ||
| ? ["local-socket", "injected"] | ||
| : ["local-socket"]; | ||
| diagnostics.selection_reason = detected.injected_transport_detected | ||
| ? "auto-prefer-saved-local-socket-then-injected-without-preflight" | ||
| : "auto-prefer-saved-local-socket-without-preflight"; | ||
| } | ||
| else if (savedTransport === "injected" && detected.injected_transport_detected) { | ||
| transportQueue = ["injected", "local-socket"]; | ||
| diagnostics.selection_reason = "auto-prefer-saved-injected-then-local-socket-without-preflight"; | ||
| } | ||
| else if (detected.injected_transport_detected) { | ||
| transportQueue = ["injected", "local-socket"]; | ||
| diagnostics.selection_reason = "auto-prefer-injected-then-local-socket-without-preflight"; | ||
| } | ||
| else { | ||
| transportQueue = ["local-socket"]; | ||
| diagnostics.selection_reason = "auto-force-local-socket-after-empty-detection"; | ||
| diagnostics.selection_reason = "auto-force-local-socket-without-preflight"; | ||
| } | ||
@@ -363,6 +521,4 @@ } | ||
| else if (requestedTransport === "local-socket") { | ||
| // Explicit local-socket mode must try the real wallet websocket even if | ||
| // the preflight probe could not confirm localhost availability. | ||
| transportQueue = ["local-socket"]; | ||
| diagnostics.selection_reason = "explicit-local-socket-forced"; | ||
| diagnostics.selection_reason = "explicit-local-socket-without-preflight"; | ||
| } | ||
@@ -398,3 +554,8 @@ } | ||
| diagnostics.fallback_to = currentDiagnostics.fallback_to; | ||
| diagnostics.socket_host_attempts = [ | ||
| ...diagnostics.socket_host_attempts, | ||
| ...attempt.hostAttempts, | ||
| ]; | ||
| diagnostics.socket_transport = attempt.socketTransport; | ||
| diagnostics.socket_host = attempt.socketHost; | ||
| diagnostics.socket_open = attempt.socketOpen; | ||
@@ -410,2 +571,7 @@ if (attempt.success) { | ||
| diagnostics.failure_message = attempt.message; | ||
| diagnostics.brave_loopback_permission_suspected = | ||
| this.should_suspect_brave_loopback_permission_block(transport, attempt); | ||
| if (diagnostics.brave_loopback_permission_suspected) { | ||
| diagnostics.failure_message = this.append_brave_loopback_permission_hint(attempt.message); | ||
| } | ||
| this.last_connect_diagnostics = Object.assign({}, diagnostics); | ||
@@ -419,3 +585,3 @@ const shouldFallback = requestedTransportMode === "auto" && | ||
| } | ||
| this.err_msg = attempt.message; | ||
| this.err_msg = diagnostics.failure_message; | ||
| this.is_connecting = false; | ||
@@ -434,10 +600,15 @@ this.clear_session_storage(); | ||
| set_transport_mode(transportMode) { | ||
| if (this.is_connecting) { | ||
| this.abort_pending_connect(); | ||
| this.is_connecting = false; | ||
| } | ||
| this.selected_transport_mode = this.normalize_transport_mode(transportMode); | ||
| } | ||
| disconnect() { | ||
| if (this.conn == null) { | ||
| return; | ||
| this.abort_pending_connect(); | ||
| if (this.conn != null) { | ||
| const conn = this.conn; | ||
| this.conn = null; | ||
| this.safe_disconnect(conn, "Graceful Disconect"); | ||
| } | ||
| this.conn.disconnect(); | ||
| this.conn = null; | ||
| this.err_msg = null; | ||
@@ -444,0 +615,0 @@ this.is_connecting = false; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"} |
+280
-51
@@ -15,2 +15,11 @@ import { makeAutoObservable } from "mobx"; | ||
| type SocketHostAttempt = { | ||
| host: string | null, | ||
| success: boolean, | ||
| failure_class: FailureClass | null, | ||
| failure_message: string | null, | ||
| socket_transport: string | null, | ||
| socket_open: boolean, | ||
| } | ||
| type PersistConfig = { | ||
@@ -45,3 +54,8 @@ platform: string, | ||
| local_socket_reachable: boolean | null, | ||
| browser_family: string | null, | ||
| public_origin: boolean | null, | ||
| brave_loopback_permission_suspected: boolean, | ||
| socket_host_attempts: SocketHostAttempt[], | ||
| socket_transport: string | null, | ||
| socket_host: string | null, | ||
| socket_open: boolean, | ||
@@ -61,2 +75,6 @@ } | ||
| type TransportDetectionOptions = { | ||
| includeLocalSocketProbe?: boolean, | ||
| } | ||
| type ConnectAttemptOutcome = | ||
@@ -78,3 +96,5 @@ | { | ||
| conn: EasyConnect, | ||
| hostAttempts: SocketHostAttempt[], | ||
| socketTransport: string | null, | ||
| socketHost: string | null, | ||
| socketOpen: boolean, | ||
@@ -87,3 +107,5 @@ } | ||
| failureClass: FailureClass, | ||
| hostAttempts: SocketHostAttempt[], | ||
| socketTransport: string | null, | ||
| socketHost: string | null, | ||
| socketOpen: boolean, | ||
@@ -96,2 +118,3 @@ } | ||
| disconnect: () => void | Promise<void>, | ||
| cancel_connecting?: () => void | Promise<void>, | ||
| is_connecting?: boolean, | ||
@@ -134,2 +157,3 @@ is_disconnecting?: boolean, | ||
| last_connect_diagnostics: ConnectAttemptDiagnostics | null = null; | ||
| private pending_conn: EasyConnect | null = null; | ||
@@ -171,2 +195,54 @@ constructor(connectOptions: ConnectOptions = {}) { | ||
| private current_origin_hostname(): string | null { | ||
| if (typeof window === "undefined") { | ||
| return null | ||
| } | ||
| try { | ||
| return window.location.hostname | ||
| } catch { | ||
| return null | ||
| } | ||
| } | ||
| private is_public_origin(): boolean | null { | ||
| const hostname = this.current_origin_hostname() | ||
| if (hostname == null) { | ||
| return null | ||
| } | ||
| const localHostnames = new Set([ | ||
| "localhost", | ||
| "127.0.0.1", | ||
| "::1", | ||
| ]) | ||
| return !localHostnames.has(hostname) | ||
| } | ||
| private detect_browser_family(): string | null { | ||
| if (typeof navigator === "undefined") { | ||
| return null | ||
| } | ||
| const userAgent = navigator.userAgent ?? "" | ||
| if ("brave" in navigator || /\bBrave\//i.test(userAgent)) { | ||
| return "brave" | ||
| } | ||
| if (/\bFirefox\//i.test(userAgent)) { | ||
| return "firefox" | ||
| } | ||
| if (/\bEdg\//i.test(userAgent)) { | ||
| return "edge" | ||
| } | ||
| if (/\bChrome\//i.test(userAgent)) { | ||
| return "chrome" | ||
| } | ||
| if (/\bSafari\//i.test(userAgent)) { | ||
| return "safari" | ||
| } | ||
| return null | ||
| } | ||
| private to_sdk_provider_hint(transport: LinkTransport): "ecto" | "poltergeist" { | ||
@@ -214,2 +290,36 @@ return transport === "injected" ? "ecto" : "poltergeist" | ||
| private should_suspect_brave_loopback_permission_block( | ||
| transport: LinkTransport, | ||
| attempt: ConnectAttemptResult, | ||
| ): boolean { | ||
| if (transport !== "local-socket") { | ||
| return false | ||
| } | ||
| if (attempt.success || attempt.failureClass !== "transport") { | ||
| return false | ||
| } | ||
| if (this.detect_browser_family() !== "brave") { | ||
| return false | ||
| } | ||
| if (this.is_public_origin() !== true) { | ||
| return false | ||
| } | ||
| if (attempt.socketOpen) { | ||
| return false | ||
| } | ||
| if (attempt.hostAttempts.length === 0) { | ||
| return false | ||
| } | ||
| return attempt.hostAttempts.every((hostAttempt) => | ||
| hostAttempt.success === false && | ||
| hostAttempt.socket_transport === "websocket" && | ||
| hostAttempt.socket_open === false, | ||
| ) | ||
| } | ||
| private append_brave_loopback_permission_hint(message: string): string { | ||
| return `${message}. Brave may be blocking public-site access to localhost wallet sockets. Allow localhost access for this site in brave://settings/content/localhostAccess or use Browser extension mode.` | ||
| } | ||
| private async probe_local_socket(timeoutMs: number = this.transport_detection_timeout_ms): Promise<boolean> { | ||
@@ -251,3 +361,5 @@ if (typeof window === "undefined" || typeof WebSocket === "undefined") { | ||
| requestedTransportMode: LinkTransportMode = this.selected_transport_mode, | ||
| options: TransportDetectionOptions = {}, | ||
| ): Promise<TransportDetection> { | ||
| const includeLocalSocketProbe = options.includeLocalSocketProbe ?? true | ||
| const injected_transport_detected = | ||
@@ -258,3 +370,4 @@ typeof window !== "undefined" && "PhantasmaLinkSocket" in window | ||
| const local_socket_reachable = | ||
| requestedTransportMode === "auto" || requestedTransportMode === "local-socket" | ||
| includeLocalSocketProbe && | ||
| (requestedTransportMode === "auto" || requestedTransportMode === "local-socket") | ||
| ? await this.probe_local_socket() | ||
@@ -310,22 +423,2 @@ : null | ||
| private build_auto_transport_queue( | ||
| availableTransports: LinkTransport[], | ||
| savedTransport: LinkTransport | null, | ||
| ): { queue: LinkTransport[], selectionReason: string } { | ||
| if (savedTransport == null || !availableTransports.includes(savedTransport)) { | ||
| return { | ||
| queue: [...availableTransports], | ||
| selectionReason: "auto-prefer-injected-then-local-socket", | ||
| } | ||
| } | ||
| return { | ||
| queue: [ | ||
| savedTransport, | ||
| ...availableTransports.filter((transport) => transport !== savedTransport), | ||
| ], | ||
| selectionReason: "auto-prefer-saved-transport-then-fallback", | ||
| } | ||
| } | ||
| private resolve_persist_config(conn: EasyConnect): PersistConfig { | ||
@@ -353,4 +446,5 @@ return { | ||
| // for the next user-initiated connect attempt and must not silently reconnect. | ||
| // They also must not preflight localhost on mount, because background wallet | ||
| // socket probes change protocol behavior before the user has asked to connect. | ||
| if (this.selected_transport_mode !== "auto") { | ||
| void this.refresh_available_transports(this.selected_transport_mode) | ||
| return | ||
@@ -361,3 +455,2 @@ } | ||
| if (config == null) { | ||
| void this.refresh_available_transports("auto") | ||
| return | ||
@@ -384,5 +477,31 @@ } | ||
| private async connect_via_transport( | ||
| private safe_disconnect(conn: EasyConnect | null, message: string) { | ||
| if (conn == null) { | ||
| return | ||
| } | ||
| try { | ||
| conn.disconnect(message) | ||
| } catch { | ||
| // Best-effort cleanup only. | ||
| } | ||
| } | ||
| abort_pending_connect() { | ||
| if (this.pending_conn == null) { | ||
| return | ||
| } | ||
| const conn = this.pending_conn | ||
| this.pending_conn = null | ||
| this.safe_disconnect(conn, "Abort pending wallet connect") | ||
| } | ||
| private local_socket_hosts(): string[] { | ||
| return ["127.0.0.1:7090", "localhost:7090"] | ||
| } | ||
| private async connect_via_transport_host( | ||
| transport: LinkTransport, | ||
| options: { platform: string, requiredVersion: number }, | ||
| options: { platform: string, requiredVersion: number, host: string | null }, | ||
| ): Promise<ConnectAttemptResult> { | ||
@@ -395,3 +514,20 @@ return await new Promise<ConnectAttemptResult>((resolve) => { | ||
| ]) | ||
| if (options.host != null) { | ||
| conn.link.host = options.host | ||
| } | ||
| this.pending_conn = conn | ||
| let settled = false | ||
| const socketHost = conn.link.host ?? options.host ?? null | ||
| const describeTransportFailure = (message: string) => | ||
| transport === "local-socket" && socketHost != null | ||
| ? `${message} (${socketHost})` | ||
| : message | ||
| const buildHostAttempt = (result: ConnectAttemptOutcome): SocketHostAttempt => ({ | ||
| host: socketHost, | ||
| success: result.success, | ||
| failure_class: result.success ? null : result.failureClass, | ||
| failure_message: result.success ? null : result.message, | ||
| socket_transport: conn.link.socketTransport ?? null, | ||
| socket_open: conn.link.socketOpen, | ||
| }) | ||
@@ -404,5 +540,13 @@ const finalize = (result: ConnectAttemptOutcome) => { | ||
| clearTimeout(timer) | ||
| if (this.pending_conn === conn) { | ||
| this.pending_conn = null | ||
| } | ||
| if (!result.success) { | ||
| this.safe_disconnect(conn, "Close failed wallet connect attempt") | ||
| } | ||
| resolve({ | ||
| ...result, | ||
| hostAttempts: [buildHostAttempt(result)], | ||
| socketTransport: conn.link.socketTransport ?? null, | ||
| socketHost, | ||
| socketOpen: conn.link.socketOpen, | ||
@@ -417,5 +561,7 @@ }) | ||
| conn, | ||
| message: transportEstablished | ||
| ? `${transport} transport timed out after connection was established` | ||
| : `${transport} transport connection timed out`, | ||
| message: describeTransportFailure( | ||
| transportEstablished | ||
| ? `${transport} transport timed out after connection was established` | ||
| : `${transport} transport connection timed out`, | ||
| ), | ||
| failureClass: "transport", | ||
@@ -453,3 +599,3 @@ }) | ||
| conn, | ||
| message, | ||
| message: describeTransportFailure(message), | ||
| failureClass: this.classify_failure(message), | ||
@@ -462,2 +608,49 @@ }) | ||
| private async connect_via_transport( | ||
| transport: LinkTransport, | ||
| options: { platform: string, requiredVersion: number }, | ||
| ): Promise<ConnectAttemptResult> { | ||
| const hosts = transport === "local-socket" ? this.local_socket_hosts() : [null] | ||
| let lastAttempt: ConnectAttemptResult | null = null | ||
| const hostAttempts: SocketHostAttempt[] = [] | ||
| for (let index = 0; index < hosts.length; index++) { | ||
| const attempt = await this.connect_via_transport_host(transport, { | ||
| ...options, | ||
| host: hosts[index], | ||
| }) | ||
| hostAttempts.push(...attempt.hostAttempts) | ||
| lastAttempt = attempt | ||
| if (attempt.success) { | ||
| return { | ||
| ...attempt, | ||
| hostAttempts, | ||
| } | ||
| } | ||
| const shouldRetryWithAlternateHost = | ||
| transport === "local-socket" && | ||
| attempt.failureClass === "transport" && | ||
| !attempt.socketOpen && | ||
| index < hosts.length - 1 | ||
| if (!shouldRetryWithAlternateHost) { | ||
| return { | ||
| ...attempt, | ||
| hostAttempts, | ||
| } | ||
| } | ||
| } | ||
| if (lastAttempt != null) { | ||
| return { | ||
| ...lastAttempt, | ||
| hostAttempts, | ||
| } | ||
| } | ||
| throw new Error(`No connection attempts executed for ${transport}`) | ||
| } | ||
| async connect(configOverride: ConnectOverride = {}) { | ||
@@ -472,12 +665,19 @@ const configuredTransportMode = this.normalize_transport_mode(this.connect_options.transportMode) | ||
| this.selected_transport_mode = requestedTransportMode | ||
| this.abort_pending_connect() | ||
| if (this.conn != null) { | ||
| const conn = this.conn | ||
| this.conn = null | ||
| this.safe_disconnect(conn, "Replace existing wallet session") | ||
| } | ||
| this.err_msg = null | ||
| this.conn = null | ||
| this.is_connecting = true | ||
| const detected = await this.detect_available_transports(requestedTransportMode) | ||
| // Live connect must not create an extra localhost websocket preflight. That | ||
| // preflight races with the real wallet socket and is only safe for explicit | ||
| // diagnostics/UI refreshes. | ||
| const detected = await this.detect_available_transports( | ||
| requestedTransportMode, | ||
| { includeLocalSocketProbe: false }, | ||
| ) | ||
| const savedConfig = requestedTransportMode === "auto" ? this.read_session_config() : null | ||
| const autoTransportSelection = this.build_auto_transport_queue( | ||
| detected.available_transports, | ||
| savedConfig?.transportMode ?? null, | ||
| ) | ||
| const diagnostics: ConnectAttemptDiagnostics = { | ||
@@ -493,4 +693,4 @@ configured_transport_mode: configuredTransportMode, | ||
| selection_reason: requestedTransportMode === "auto" | ||
| ? autoTransportSelection.selectionReason | ||
| : "explicit-transport-mode", | ||
| ? "auto-connect-without-localhost-preflight" | ||
| : "explicit-transport-mode-without-localhost-preflight", | ||
| failure_class: null, | ||
@@ -502,3 +702,8 @@ failure_message: null, | ||
| local_socket_reachable: detected.local_socket_reachable, | ||
| browser_family: this.detect_browser_family(), | ||
| public_origin: this.is_public_origin(), | ||
| brave_loopback_permission_suspected: false, | ||
| socket_host_attempts: [], | ||
| socket_transport: null, | ||
| socket_host: null, | ||
| socket_open: false, | ||
@@ -509,9 +714,19 @@ } | ||
| if (requestedTransportMode === "auto") { | ||
| transportQueue = autoTransportSelection.queue | ||
| // The quick localhost probe is advisory only. Preserve the historical | ||
| // websocket path by still attempting the real local-socket connect when | ||
| // auto mode cannot positively detect any transport up front. | ||
| if (transportQueue.length === 0) { | ||
| const savedTransport = savedConfig?.transportMode ?? null | ||
| if (savedTransport === "local-socket") { | ||
| transportQueue = detected.injected_transport_detected | ||
| ? ["local-socket", "injected"] | ||
| : ["local-socket"] | ||
| diagnostics.selection_reason = detected.injected_transport_detected | ||
| ? "auto-prefer-saved-local-socket-then-injected-without-preflight" | ||
| : "auto-prefer-saved-local-socket-without-preflight" | ||
| } else if (savedTransport === "injected" && detected.injected_transport_detected) { | ||
| transportQueue = ["injected", "local-socket"] | ||
| diagnostics.selection_reason = "auto-prefer-saved-injected-then-local-socket-without-preflight" | ||
| } else if (detected.injected_transport_detected) { | ||
| transportQueue = ["injected", "local-socket"] | ||
| diagnostics.selection_reason = "auto-prefer-injected-then-local-socket-without-preflight" | ||
| } else { | ||
| transportQueue = ["local-socket"] | ||
| diagnostics.selection_reason = "auto-force-local-socket-after-empty-detection" | ||
| diagnostics.selection_reason = "auto-force-local-socket-without-preflight" | ||
| } | ||
@@ -524,6 +739,4 @@ } else { | ||
| } else if (requestedTransport === "local-socket") { | ||
| // Explicit local-socket mode must try the real wallet websocket even if | ||
| // the preflight probe could not confirm localhost availability. | ||
| transportQueue = ["local-socket"] | ||
| diagnostics.selection_reason = "explicit-local-socket-forced" | ||
| diagnostics.selection_reason = "explicit-local-socket-without-preflight" | ||
| } | ||
@@ -577,3 +790,8 @@ } | ||
| diagnostics.fallback_to = currentDiagnostics.fallback_to | ||
| diagnostics.socket_host_attempts = [ | ||
| ...diagnostics.socket_host_attempts, | ||
| ...attempt.hostAttempts, | ||
| ] | ||
| diagnostics.socket_transport = attempt.socketTransport | ||
| diagnostics.socket_host = attempt.socketHost | ||
| diagnostics.socket_open = attempt.socketOpen | ||
@@ -595,2 +813,8 @@ | ||
| diagnostics.failure_message = attempt.message | ||
| diagnostics.brave_loopback_permission_suspected = | ||
| this.should_suspect_brave_loopback_permission_block(transport, attempt) | ||
| if (diagnostics.brave_loopback_permission_suspected) { | ||
| diagnostics.failure_message = this.append_brave_loopback_permission_hint(attempt.message) | ||
| } | ||
| this.last_connect_diagnostics = { ...diagnostics } | ||
@@ -610,3 +834,3 @@ | ||
| this.err_msg = attempt.message | ||
| this.err_msg = diagnostics.failure_message | ||
| this.is_connecting = false | ||
@@ -628,2 +852,6 @@ this.clear_session_storage() | ||
| set_transport_mode(transportMode: LinkTransportMode) { | ||
| if (this.is_connecting) { | ||
| this.abort_pending_connect() | ||
| this.is_connecting = false | ||
| } | ||
| this.selected_transport_mode = this.normalize_transport_mode(transportMode) | ||
@@ -633,7 +861,8 @@ } | ||
| disconnect() { | ||
| if (this.conn == null) { | ||
| return | ||
| this.abort_pending_connect() | ||
| if (this.conn != null) { | ||
| const conn = this.conn | ||
| this.conn = null | ||
| this.safe_disconnect(conn, "Graceful Disconect") | ||
| } | ||
| this.conn.disconnect() | ||
| this.conn = null | ||
| this.err_msg = null | ||
@@ -640,0 +869,0 @@ this.is_connecting = false |
+1
-1
| { | ||
| "name": "@phantasma/connect-react", | ||
| "version": "0.1.1", | ||
| "version": "0.1.2", | ||
| "private": false, | ||
@@ -5,0 +5,0 @@ "scripts": { |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
180060
12.99%3261
14.9%4
33.33%