Summary
Togoder Security scanned the npm package porto@0.2.35 on Oct 4, 2026. An AI review of 280 source files produced 69 medium, 98 low severity findings. The overall verdict is medium: the findings flag risky but common patterns (dynamic code, unsafe defaults, broad file or network access) rather than confirmed malware.
Findings 167
Top-level async execution on import
NPS-8D6DBE49302F
The module executes await Messenger.cliRelay() at the top level (line 3), which means code runs immediately upon import. This is a potential side effect that occurs before any user interaction and could initiate network connections or other operations.
Potential data transmission to external server
NPS-A326F4398A20
The messenger.send('rpc-requests', requests) calls (lines 22 and 55) transmit request data to a relay server whose URL is provided by messenger.relayUrl. The destination is not validated or restricted, and the data being sent could contain sensitive information. Additionally, open() constructs a URL containing the relay URL and opens it in a browser (lines 31-35), which could leak relay information.
Wildcard CORS and Private Network Access
NPS-BF8C575A3E64
The HTTP server sets 'Access-Control-Allow-Origin: *' combined with 'Access-Control-Allow-Private-Network: true'. This allows any website in a browser to make requests to this local server, potentially enabling DNS rebinding or cross-origin attacks against local services.
Unauthenticated local HTTP server exposed to network
NPS-80332B5B6208
The server accepts POST requests at '/' with an unauthenticated JSON payload and dispatches it to internal listeners based on topic. No origin, token, or secret check is performed, so any process or webpage that can reach the port can publish arbitrary payloads to internal message handlers.
Private key stored outside package scope
NPS-BC50DBC6CAD8
When the user declines to reveal the private key, the code writes the account's private key to a file named ${accounts[0].address}.key in import.meta.dirname โ the package's own source/distribution directory โ rather than a proper user-specific config directory. This persists sensitive key material into package scope and could leak the key to other users, future renders of the package, or packaging artifacts.
Private key exposure in process environment/terminal
NPS-1AD476574BD0
The 'Reveal private key?' confirmation prints the raw private key to the terminal via prompts.log.info. While user-initiated, printing raw private keys to terminal/stdout can leak them to shell history, log files, CI output, or screen-sharing sessions.
Sensitive data written during error handling without guaranteed cleanup
NPS-41037009E136
In cleanup(), when an uncaught exception or SIGTERM/SIGINT occurs and a temp key file exists, the code prints the file path and calls process.exit(1) without deleting the temp key file (cleanup of tempKeyFile via fs.rmSync only happens on the normal success path). On abnormal exits the private key may remain on disk indefinitely.
File system writes outside typical package/user scope
NPS-E4DEDA9BE648
The code creates directories and files in os.tmpdir()/porto and writes .key files into import.meta.dirname. Writing into the package's own distribution directory (import.meta.dirname) is unexpected behavior that modifies installed package contents at runtime and is a persistence mechanism that could tamper with the module the user trust-installed.
postMessage without strict origin validation on inbound
NPS-F3F567EB6DEA
Messenger.bridge is configured with targetOrigin for outbound messages, but inbound message handling (messenger.on('rpc-response' | 'ready' | '__internal')) appears to trust messages from the embedded iframe/opener. If the target host (hostUrl.origin) is compromised or if window.location can be influenced, responses including RPC results could be forged.
AuthSession token/credential parsing from redirect URL
NPS-BFE983579D6C
In the React Native authSession flow, the code parses 'payload' returned via redirect URL query parameters and directly JSON.parses it, treating it as RPC results (which may include signing keys, accounts, permissions). If the redirect URI is hijacked or the payload is manipulated, it could be consumed as a valid RPC response.
Permissive postMessage targetOrigin
NPS-4C6A338A41FB
The fromWindow send() method defaults targetOrigin to '*' when no targetOrigin option or target parameter is provided. Using '*' in window.postMessage leaks message contents to any origin that can receive the message, which can expose sensitive data (e.g. auth tokens, payloads) to malicious frames or windows.
SSE/fetch to configurable relay URL without validation
NPS-1D9F3BE98414
The cliRelay() function accepts an arbitrary relayUrl and uses it for both EventSource connections and fetch POST requests, sending payloads and receiving commands. If relayUrl is influenced by untrusted input (e.g. environment or remote config), this becomes a data exfiltration and remote-command channel. No allowlist, scheme validation, or authentication is enforced.
Hardcoded external RPC endpoint
NPS-A5798954F138
The code defines a production relay URL 'https://rpc.porto.sh' and staging URL 'https://stg-rpc.porto.sh'. All methods starting with 'wallet_' or 'account_', plus 'health', are routed to this external relay. While this appears to be an intentional design for a relay proxy, it means sensitive wallet/account RPC calls are sent to a third-party server controlled by the package authors, not the configured public transport. This is a potential data exfiltration vector if the package is compromised or if the relay is malicious.
Sensitive RPC method routing
NPS-0F4FF211F4DA
The isRelay() function intercepts all 'wallet_*' and 'account_*' RPC methods and forwards them to the relay transport instead of the user-configured public transport. Wallet methods include highly sensitive operations such as wallet_sendTransaction, wallet_signTransaction, wallet_requestPermissions, and wallet_getCapabilities. Routing these to an external relay could allow the relay operator to observe or manipulate signing requests, though the actual signing typically happens client-side.
Obfuscated bytecode payload
NPS-8CE823F5CA90
The exported 'code' field contains a large hex-encoded EVM bytecode blob with no plaintext source or comments. While the ABI and bytecode appear to implement a standard EIP-7702 proxy pattern (implementation/admin storage slots, fallback delegation), the bytecode is unverified and cannot be audited for hidden malicious behavior such as arbitrary delegatecalls, storage manipulation, or hardcoded addresses.
Unexplained hardcoded constants
NPS-B56400720B38
The bytecode embeds specific storage slot constants (0x360894a1... and 0xb5312768...) that match common proxy implementation/admin slots. If these differ from the documented EIP-7702 proxy spec, they could allow the contract author to redirect logic or seize admin control. No source mapping or verification hash is provided.
Suspicious contract bytecode
NPS-E1BFDBF42658
The file exports raw Ethereum contract bytecode ('code') for an ERC-721 contract. The bytecode contains low-level EVM assembly that is not human-readable and could hide arbitrary on-chain logic. While this is a standard ABI/bytecode export for a smart contract SDK, the actual contract behavior cannot be fully audited from the bytecode alone. The contract includes a 'mint' function that is payable and a 'mint()' no-argument function that could be called by anyone to mint tokens for free or for payment depending on implementation. There is also a constructor accepting a token address and price, suggesting this is an experiment/ERC-721 contract that may interact with an external ERC-20 token.
Unrestricted minting
NPS-D1A3375CE9FA
The ABI exposes a public 'mint()' function with no arguments and nonpayable state mutability, as well as 'mint(address recipient)'. If the contract allows arbitrary callers to mint tokens, this could lead to inflation or abuse depending on the intended use case. However, without decompiling the bytecode, the actual access control cannot be confirmed.
External ERC-20 interaction
NPS-3024E4275413
The constructor accepts an ERC-20 token address and a price, and the bytecode appears to call 'transferFrom' on that token during the 'mint()' no-argument function (see the bytecode snippet calling 0x23b872dd). This means the contract will attempt to transfer tokens from the caller to itself and then mint an NFT. If the token address is malicious or the price is manipulated, users could lose funds. This is a common pattern for paid NFT mints but requires trust in the contract owner and the token.
Embedded EVM bytecode
NPS-B4CF77604E20
The file contains a large 'code' string literal with compiled Ethereum Virtual Machine (EVM) bytecode for an 'Orchestrator' smart contract. While not inherently malicious in a blockchain development context, this bytecode is unverified compiled code that could contain backdoors or vulnerabilities. Its presence in a JavaScript package is unusual and could be used to deploy or interact with a smart contract on-chain.
Obfuscated bytecode payload
NPS-0B708CCAEF42
The bytecode is opaque and not human-readable, which hinders security auditing. It includes low-level operations (e.g., delegatecall, CREATE2 patterns via assembly-like opcodes) that could enable arbitrary execution or contract creation if invoked. Without source verification, malicious behavior cannot be ruled out.
Cross-origin communication
NPS-07A109B84A6A
The dialog renderer uses iframes (Dialog.iframe()) to communicate with external hosts (Dialog.hostUrls.prod by default). This establishes cross-origin communication channels that could be exploited if the host is compromised or if messages are not properly validated.
External provider requests
NPS-56F3338ED551
The code creates a provider that sends RPC requests to external services via the dialog/iframe mechanism. While this is expected functionality, it means sensitive wallet operations (signing, account creation, permissions) are delegated to external services.
External network requests with credentials
NPS-94E94303E33D
The disconnect action performs a fetch to an external authUrl.logout endpoint with credentials: 'include', which sends cookies to an external server. The authUrl is derived from config.authUrl or stored in local storage, potentially allowing arbitrary external server communication with the user's credentials.
Data exfiltration
NPS-BE01B54F17CD
The authenticate function sends the user's wallet address, signature, chainId, message, and optionally publicKey to an external URL (authUrl.verify) via fetch. Since authUrl is provided by the caller and not validated, a malicious dApp or compromised configuration could direct this sensitive authentication data to an attacker-controlled server.
Credentialed cross-origin request
NPS-B8BC98BAA50D
The fetch in authenticate uses credentials: 'include', which sends cookies and HTTP authentication credentials to whatever origin authUrl.verify points to. Combined with the lack of origin validation, this could facilitate credential leakage or CSRF-like attacks if an attacker controls the authUrl.
Data exfiltration
NPS-39F626EB4906
In buildMessage, when no nonce is provided, the code makes a POST request to an external authUrl.nonce endpoint, sending the user's wallet address and chainId. This could leak the user's wallet address to arbitrary third-party servers if the authUrl is malicious or compromised.
Unresolved external module behavior
NPS-26A83EFBE87B
The actual logic is delegated to ./core/react-native/index.js and ./react-native/register.js, which are not included in the provided snippet. The safety of this entrypoint cannot be fully determined without reviewing those files, since configure() could contain arbitrary behavior (network calls, credential access, etc.).
Origin validation weakness
NPS-FE1CFD6F8B90
The trustedOrigins check uses event.origin.endsWith(origin) to validate origins. This is vulnerable to origin spoofing because a malicious origin like 'evil-id.porto.sh.attacker.com' would pass the endsWith check for 'id.porto.sh'. This could allow unauthorized dialogs from attacker-controlled origins.
PostMessage origin trust
NPS-63AFEF1F4EA2
The code processes RPC requests based on the event.origin from messenger events without additional cryptographic validation. If the messenger implementation does not properly validate message sources, this could enable cross-origin request forgery against the wallet.
Dynamic URL Parameter Handling
NPS-5B23AC3482A5
The code reads a 'relayUrl' query parameter from window.location.href and uses it to construct a Messenger.cliRelay instance. This allows an attacker to potentially redirect communications to an arbitrary external relay URL by crafting a malicious link, which could lead to data exfiltration or man-in-the-middle attacks.
Window Opener/Parent Communication
NPS-3DC2AC65D55C
The messenger is initialized to bridge communication between the current window and window.opener or window.parent. This cross-origin messaging could be exploited if the parent/opener is untrusted, potentially leading to data leakage or command execution if the messaging protocol is not properly validated.
Suspicious trusted hosts allowlist
NPS-0CA386500359
This file defines an allowlist of external hostnames, including non-production, staging, development, ngrok, workers.dev, vercel.app, and localhost domains. If this allowlist is used for security-sensitive trust decisions (e.g., wallet connectivity, authentication origins, message signing, or deep-link handling), it could allow attackers or malicious dApps to impersonate trusted services or bypass origin checks.
Broad web3/crypto origin trust surface
NPS-634778328F02
The list contains many DeFi, wallet, exchange, and cross-chain bridge hostnames (e.g., uniswap.org, app.uniswap.org, jumper.exchange, relay.link, sushi.com, app.cashmere.exchange). If used to authorize wallet interactions or transaction signing, a compromised or typo-squatted domain in this list may lead to phishing or unauthorized signing approvals.
Inclusion of untrusted or ephemeral domains in trust list
NPS-DD6C47518998
The list includes ephemeral or development infrastructure such as 'localhost', 'stg.localhost', 'anvil.localhost', 'daimo.ngrok.app', 'porto-react-native.ngrok.io', multiple '*.workers.dev', '*.vercel.app', and '*.ts.net' hostnames. These domains are not controlled by the package publisher and can be registered or repurposed by third parties, creating trust or spoofing risks if consumed as an allowlist.
External network request with dynamic URL
NPS-2AA9F1C6A774
The prepareCalls function creates a new client using a user-supplied merchantUrl via http(merchantUrl), causing network requests to an arbitrary external endpoint. While this appears to be an intended feature for merchant RPC, dynamic URLs can be abused for data exfiltration if attacker-controlled.
Dynamic network transport construction from configuration
NPS-9FCEB65A5F0A
The code builds an HTTP transport from chain.rpcUrls.default.http and a relay object. This results in outbound network requests to RPC endpoints and a relay service whose URLs come from runtime configuration. While this is expected for a blockchain client, the destinations are not validated or allow-listed here, so a compromised config could direct traffic to attacker-controlled endpoints.
Top-level async code / import-time execution
NPS-B101FB9AF764
The module executes await Messenger.cliRelay() at the top level during import. This means network relay setup (potentially opening WebSocket/HTTP connections) runs simply by importing the module, before any explicit invocation. Import-time side effects can be exploited and make behavior harder to audit.
Network communication / relay URL handling
NPS-E720F5F4B8FE
The dialog embeds a relayUrl into a URL opened in the browser and communicates over a messenger channel ('rpc-response', 'rpc-requests'). This creates a bidirectional bridge between the CLI process and a remote relay, which could be abused for data exfiltration or command relay if the relay URL is attacker-controlled or the transport is unauthenticated.
Permissive CORS with wildcard origin
NPS-E96E584D9066
The server sets 'Access-Control-Allow-Origin: *' on all responses, including the SSE stream that carries relay payloads. Any web page can connect to this local server and read relayed messages or POST data into the messenger, enabling cross-origin data theft or message injection.
Unbounded request body buffering (DoS)
NPS-BF19E231D6CA
POST bodies are accumulated into a single string with no size limit. A malicious or buggy client can send arbitrarily large payloads, exhausting memory and potentially crashing the process.
Unvalidated topic routing
NPS-6108EF48C728
Incoming POST data is parsed and dispatched to listeners based solely on the client-supplied 'topic' field. Combined with wildcard CORS, this allows cross-origin attackers to trigger application-level message handlers with arbitrary payloads.
Private key written to temp file
NPS-62295F9AE462
The admin private key is written to a predictable temporary file path under os.tmpdir()/porto with a timestamp+Math.random() filename. While permissions are 0o600, the use of Math.random() and predictable temp directory could allow another local process to race or guess the filename and read the key. The catch block also silently swallows errors.
Private key printed to terminal/logs
NPS-0C31FFBA89E6
On confirmation, the private key is printed directly to the terminal via prompts.log.info, and it may also be logged via the cleanup path (shouldPrintKeyOnExit) on SIGINT/SIGTERM/uncaught errors. Logging secrets increases risk of leaking credentials to terminal scrollback, CI logs, or shell history.
Private key persisted to package-relative directory
NPS-34028DCA562A
When the user chooses not to reveal, the private key is written to a file named after the account address inside import.meta.dirname (the package's own source directory). Writing secrets into the application/package directory is a poor practice and may cause them to be committed or packaged.
Dynamic module access with external input
NPS-1E83FEF38DD1
The getRelayClient function uses user-supplied options.chain to dynamically index into the Chains namespace (Chains[chain]) without validation. While this is TypeScript, there is no runtime check that the chain exists or is a legitimate chain object. A malicious or unexpected value could lead to unpredictable behavior or access to unintended properties on the Chains object.
Network request to user-controlled URL
NPS-F097234555B2
getRelayClient accepts an options.rpc parameter and passes it directly to viem's http() transport. This allows arbitrary RPC endpoints to be contacted, which could be used to send requests to attacker-controlled servers or to perform SSRF-like behavior depending on how the CLI invokes this function. No allowlist or validation is applied.
Insufficient message origin validation
NPS-1581BBE0BA5F
In fromWindow.on, origin validation only occurs when targetOrigin is explicitly configured. If targetOrigin is undefined, incoming message events from any origin are accepted and dispatched to listeners. This can allow cross-origin pages to inject spoofed messages (e.g. fake rpc-response, ready, or __internal payloads), potentially influencing wallet/RPC flows.
Potential data exposure via postMessage payloads
NPS-005B0EF0D018
The messenger schema includes rpc-requests and rpc-response topics that carry RPC requests/responses. These are posted via w.postMessage using the potentially wildcard target origin, which could expose RPC payloads to unintended recipients if the window is embedded or opened by a malicious origin.
Permissive postMessage target origin
NPS-D27D8A097EF8
The send method in fromWindow defaults to a target origin of '*' when no targetOrigin is provided. Posting messages with a wildcard origin can leak sensitive payloads (e.g. RPC requests/responses, ready options, themes) to any window that has a reference to the sender, and can enable message spoofing/hijacking. A specific target origin should be required.
Unvalidated external relay URL and SSE data
NPS-9EAD43AB0FF6
cliRelay connects an EventSource to a caller-provided relayUrl and POSTs message payloads to the same URL. Incoming SSE messages are JSON.parsed and dispatched to listeners based solely on data.topic and data.payload presence, with no schema validation, origin check, or authentication. A malicious or compromised relay can send arbitrary payloads (including __internal init/theme/resize or rpc-response messages) to the client, and the client will forward potentially sensitive RPC data to that relay.
Insecure Cookie Configuration
NPS-079C357F7A1E
The cookie() storage implementation sets cookies with samesite=None; secure and a 1-year max-age, and parses cookie values with JSON.parse. While this is primarily a configuration concern rather than malicious behavior, setting SameSite=None without proper CSRF protections can expose stored data to cross-site attacks. The cookie name and value are interpolated directly into the cookie string without encoding, which could allow cookie injection if name/value contain special characters like ';' or '='.
Sensitive Data Storage in Cookie
NPS-832DCA2A1627
The cookie storage serializes arbitrary values (via Json.stringify) into document.cookie with a long-lived max-age. Cookies are accessible to any JavaScript on the same origin and are automatically sent with cross-site requests, making them a generally poor storage location for sensitive data (e.g., tokens, keys). If the consuming application stores secrets via this Storage abstraction, they could be exfiltrated via XSS or leaked cross-origin.
Obfuscated smart contract bytecode
NPS-F68A8B48D8C3
The file exports a large hex-encoded Ethereum smart contract bytecode string ('code'). This EVM bytecode is heavily optimized/obfuscated (e.g., uses non-standard jump tables, packed storage, and hashed function selectors). While it appears to be legitimate account abstraction/wallet code (IthacaAccount), the obfuscation makes it impossible to verify its full behavior statically. It could contain hidden privileged functions or backdoors.
Potential wallet draining / unauthorized asset transfer
NPS-DFC8BF2F2FDF
The ABI includes a function 'execute' with arbitrary calls (to, value, data) and a fallback/receive that can execute arbitrary calldata. Combined with signature validation and key management, this is typical of smart contract wallets but could be abused if the contract has flaws or hidden logic. The presence of 'pay' and 'spendLimit' functions suggests payment and token spending capabilities.
Delegatecall / upgradeability risk
NPS-2F9221DC60EB
The contract includes an 'upgradeProxyAccount' function and an 'upgradeHook', indicating a proxied upgradeable contract. The implementation address can be changed, potentially allowing a malicious upgrade if the orchestrator or keys are compromised. The EIP-1967 implementation slot pattern is used.
Lack of source code transparency
NPS-1B305829BBEF
The file is a generated TypeScript contract interface containing raw bytecode and ABI. No source Solidity is provided, so the actual logic cannot be audited. This is a third-party package, and the bytecode is the ultimate authority for on-chain behavior.
Global Environment Modification
NPS-5AD2537D9F71
The code modifies the global 'crypto' object at import time using Object.defineProperty with enumerable: true on non-web platforms. This monkey-patches a standard global API, which could alter the behavior of other libraries expecting the native implementation. While it delegates to ExpoCrypto, it replaces the platform's crypto implementation globally.
Weak origin validation
NPS-451106A3396A
The trustedOrigins check uses event.origin.endsWith(origin), which can be bypassed by malicious domains like 'evil-id.porto.sh' or 'attacker-localhost:5173'. This weakens the sameOrigin security check and could allow unauthorized dialog handling from spoofed origins.
Dynamic message relay via URL parameter
NPS-D5CB158E7AB6
The module reads a 'relayUrl' from window.location.search and, if present, creates a Messenger.cliRelay with that attacker-controllable URL. This allows arbitrary external URLs to be used as a message relay endpoint, which could enable data exfiltration from the consuming application's context (e.g., dApp requests, user data) to an attacker-controlled server. The relay URL is not validated against the trustedHosts list.
Cross-origin/window messaging without origin validation
NPS-79CE6A760B84
The messenger is constructed from window and window.opener/window.parent without explicit origin checks at initialization time. Communication established via postMessage with an opener/parent window could be exploited if the embedding page is not fully trusted, potentially leaking RPC requests and responses across frames.
CORS misconfiguration
NPS-854DBC3A3D71
The router applies hono.use('*', cors(options.cors)) with a caller-supplied configuration and no default restrictions. If options.cors is omitted or set permissively, the API (including merchant RPC endpoints that sign feePayerDigest payloads with an admin key) would be reachable from any origin, enabling cross-site requests to the signing service.
Potential key material exposure via relay transport
NPS-CEBD25EB7464
merchant() accepts an admin private key (Hex or {type, privateKey}) and signs feePayerDigest payloads returned by the relay, while all other RPC traffic goes to the configurable relay endpoint. A malicious or compromised relay could return attacker-chosen digests to obtain signatures, or observe metadata about every request. The relay is fully caller-configurable and no allowlist/validation is applied.
Allowlist with suspicious/dev domains
NPS-7C5E1F17AA6A
This file is a hardcoded list of trusted hostnames. It does not execute code, perform network requests, read environment variables or files, spawn processes, or use dynamic code execution. However, it contains several development, staging, tunneling, and temporary hosting domains (e.g., 'anvil.localhost', 'localhost', 'stg.localhost', '.ngrok.app', '.ngrok.io', '.workers.dev', '.vercel.app', '.ts.net') that could weaken host verification if this allowlist is used in production to authorize requests. No direct malicious pattern is present, but the list is suspiciously broad for a 'trusted hosts' allowlist.
Cryptographic key material handling in error paths
NPS-55B41B89B0F0
The sign() function includes the full key object (including any privateKey field, though it is a function or CryptoKey rather than a raw string in most branches) in error messages via Json.stringify when no private key exists or when the key type is unsupported. If consumers pass keys with extractable private key material (e.g. raw hex strings in custom wrappers), this could leak secrets into logs or error reports. Additionally, fromP256 and fromHeadlessWebAuthnP256 close over raw private key hex strings in the privateKey() function.
Suspicious network request with dynamic/hardcoded URL
NPS-35F7E193B7A4
The prepareCalls function accepts a merchantUrl parameter and creates a new HTTP client via createClient({ transport: http(merchantUrl) }) to send prepared call data (including the user's account address, calls, and authorization keys) to an externally-supplied URL. The response is verified via verifyPrepareCallsResponse, but this pattern still constitutes an outbound network request to an arbitrary user/parameter-controlled endpoint, which could be exploited for data exfiltration if merchantUrl is attacker-controlled. The error is only logged via console.error on failure, silently falling back to the default client.
External transport via custom provider
NPS-2B7B406B16C4
Uses custom(provider) from viem to route JSON-RPC calls through a caller-supplied provider. The provider originates from the Porto instance; if that instance is attacker-controlled, all wallet RPC traffic (including signing requests) flows through it. This is expected behavior for a wallet client wrapper, but it represents a trust boundary worth highlighting.
Potential signature verification weakness
NPS-108B0616CC56
verifyPrepareCallsResponse verifies a quote signature by recovering an address and comparing against quoteSigner fetched from health(client). If the relay endpoint is compromised or MITM'd, the quote signer could be replaced and malicious prepared calls accepted. The trust model relies entirely on the relay's transport security. Note: the signature is over a JSON-stringified sorted payload hashed with keccak256 - not a standard EIP-712 domain-separated scheme, which could create cross-protocol replay risks.
Top-level import side effects
NPS-A0D6D7653DD9
The file executes '../react-native/register.js' at module import time via a top-level import statement. This side-effect import runs before any exported functionality and can perform arbitrary initialization, monkey-patching, or environment modification. While not inherently malicious, side-effect imports at the top level are a common vector for hidden behavior in third-party packages and warrant inspection of the imported module.
Dynamic URL construction and browser opening
NPS-E61AEA791C03
The open() method constructs a URL using parameters.host and messenger.relayUrl and instructs the user to open it in a browser (lines 31-35). If host or relayUrl is attacker-controlled, this could redirect users to malicious sites or leak sensitive relay tokens.
Unbounded request body buffering
NPS-6ED74CC6661F
The POST handler accumulates the entire request body into a string with no size limit, which can lead to memory exhaustion (DoS) if a large body is sent to the local relay server.
Public key disclosure endpoint
NPS-79A9C16994D3
The '/.well-known/keys' endpoint returns all registered public keys to any request without authentication, with wildcard CORS. Depending on what these keys represent, this may leak sensitive material to any webpage able to reach the local server.
Dynamic import with computed path
NPS-3D53EF23E621
The code dynamically imports a chunk file using a template literal: import(./commands-Cubk9UKI.js). While the path is currently static, the pattern of dynamic imports in bundled CLI tools can be used to load additional modules at runtime, which could be exploited if the chunk filename or path is manipulated in future versions or by an attacker with write access to the package directory.
Network-related functionality (potential)
NPS-68C9BD3DF1E0
The command definition for 'onboard' includes a --dialog <hostname> option defaulting to id.porto.sh, suggesting the tool may interact with external servers. However, the actual network request implementation is not present in this file (likely in the dynamically imported chunk). This is not inherently malicious but warrants scrutiny of the imported module for data exfiltration or credential harvesting.
Process exit and argument parsing
NPS-A8F7FFFD0B31
The CLI uses standard argument parsing and calls process.exit(0) on the default command. No suspicious process spawning, shell commands, or file system manipulation outside the package scope are observed in this file.
Insecure temporary key file permissions window
NPS-3F86024FDA62
The admin private key is written to os.tmpdir()/porto/admin-key-*.key with mode 0o600. Although the directory is created with 0o700, some platforms (notably Windows, and systems where the temp dir is shared/world-writable) may still expose this file. The filename includes a low-entropy suffix (Math.random().toString(36)), which is not cryptographic and could be brute-forced by a local attacker between write and cleanup.
Immediate sensitive write in catch block suppressed
NPS-7DC16F2A9C3D
The try/catch around temp key file creation swallows errors silently (catch { }). If writing succeeds partially or if a race condition occurs, the failure is not surfaced to the user, and later logic may proceed assuming a secure file exists.
Network requests and account-related actions to external service
NPS-E85019B5643E
The code performs wallet RPC calls (wallet_addFunds, wallet_prepareCalls, wallet_sendPreparedCalls, wallet_sendCalls) via a WalletActions/viem client against configured chains (Base / Base Sepolia) and directs the user to https://id.porto.sh. These are expected for a wallet CLI, but they do transmit account addresses, prepared call digests, and signatures over the network. There is no obvious exfiltration of harvested credentials or environment variables.
external network connection (expected)
NPS-23B35B04B6AC
The code constructs a URL from a provided host and opens a WalletClient for Porto Dialog at https://<host>/dialog. This is inherent to the Dialog feature and is not data exfiltration. The host is supplied as an option and not harvested from the environment.
dynamic namespace import access
NPS-27D155DAF070
Chains[chain] uses a computed property from options.chain. This is a bracket access on a local imported module, not a dynamic import of external code. It is safe, but should be validated to avoid prototype pollution issues if options.chain comes from untrusted input.
Broad iframe sandbox allowances
NPS-9F540EAE5618
Iframes are created with sandbox 'allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox' and allow='payment; publickey-credentials-get; publickey-credentials-create' scoped to the dialog origin. allow-same-origin combined with allow-scripts is generally acceptable here since the frame is a distinct origin (id.porto.sh), but grants broad capabilities to that third-party script.
Sensitive referrer/icon metadata sent externally
NPS-6DCC2C0BC5C6
getReferrer() collects document.title and favicon URLs (including dark/light variant URLs) and transmits them to the Porto dialog host via postMessage. This leaks host-application metadata to a third party.
Focus/blur based request rejection
NPS-8A2FA46E3187
handleBlur() marks all pending requests as UserRejectedRequestError when the window loses focus. An attacker page or lost focus could cause requests to be cancelled. This is a UX/design issue rather than remote exploitation, but it also means focus-stealing can deny service.
URL parameter propagation to external origin
NPS-849F2502E794
getDialogUrl() reads all URL search parameters from the current page that start with the 'porto.' prefix and copies them into the external dialog URL (id.porto.sh). This could leak sensitive data the host application placed in its URL query string (tokens, session identifiers) to a third-party origin if the app uses 'porto.'-prefixed parameters.
Unvalidated message payload dispatch
NPS-29CCD47E1EC2
In fromWindow.on(), the handler passes event.data.payload directly to listeners and does not validate the shape of event.data before accessing topic/id. In cliRelay.onmessage, JSON.parse is performed on untrusted SSE data and payloads are forwarded to listeners. A malicious message source can deliver arbitrary objects to application listeners, potentially triggering unintended behavior if listeners trust the payload.
external-network-communication
NPS-174F60AC59C0
The module establishes default HTTP transports to relayUrls.prod.http and dialog/relay modes that communicate with hostUrls.prod. These are legitimate configurable endpoints for a wallet connector (Porto), but they are external network calls made at module initialization via defaultConfig.
module-load-time-side-effects
NPS-29C33AA076EF
defaultConfig is evaluated at import time, selecting browser vs relay mode and initializing storage/transport. This is typical for this kind of library and does not itself execute privileged or suspicious operations.
persistent-storage
NPS-8BDF21985EC4
Uses Zustand persist middleware with IndexedDB or in-memory storage, storing accounts and chain IDs under storageKey 'porto.store'. Standard state persistence; no credential harvesting observed, but persisted account data should be reviewed in context.
Local development endpoint
NPS-1B2A52E8B151
Hardcoded localhost endpoint 'http://localhost:9119' for anvil. If this is used in production builds it could fail or potentially interact with a local attacker-controlled service. Low risk given the 'anvil' naming convention indicating development-only use.
Missing source map content
NPS-676E3BE50092
A sourceMappingURL comment points to EIP7702Proxy.js.map but the map is not included here, so the origin and authenticity of the bytecode cannot be verified against a compiler output.
Advanced cryptographic and signature verification logic
NPS-65D8FEAF48FC
The ABI and bytecode reference EIP-712 type hashes, nonces, and signature verification functions. This is typical for meta-transaction systems but could also be repurposed for unauthorized transaction signing if the contract is deployed and used maliciously. No direct exfiltration or credential harvesting was detected in the JavaScript wrapper.
Cryptocurrency smart contract ABI and bytecode
NPS-F79E12427664
This file exports an Ethereum smart contract ABI and bytecode for a contract named 'SimpleFunder'. The contract includes functions for funding operations, ownership transfer, signature-based withdrawals, and gas wallet management. While the file itself is static data (no executable JavaScript), it describes a contract capable of moving tokens and funds. The presence of signature verification for withdrawals is a security control, but the contract supports owner-controlled withdrawal and funding functions that could be misused if the contract is deployed with a malicious owner. No dynamic code execution, network requests, filesystem access, or process spawning is present in the file itself.
External network calls to untrusted module
NPS-E0FEDC32E035
Imports from 'ox/erc8010/SignatureErc8010' and uses RelayActions.getAuthorization, which likely performs network requests to a relay service to fetch authorization data. This is expected behavior for ERC-8010 signature wrapping, but involves external communication with a relay endpoint.
Cryptographic signature manipulation
NPS-183B1C8D1753
The function processes and wraps cryptographic signatures, converting nonce, r, and s values to BigInt for ERC-8010 authorization. While this is a legitimate cryptographic operation, any manipulation of signatures in a wallet context warrants scrutiny since it could potentially be used in signing flows.
Storage manipulation
NPS-A24F9964E2CF
The code reads from and writes to storage (config.storage.getItem and config.storage.setItem), which could be used to persist sensitive information or manipulate application state if the storage is not properly secured.
Dynamic URL construction
NPS-7FBAFAEDA47A
The authUrl is dynamically constructed using Siwe.resolveAuthUrl with window.location.origin, which could potentially be manipulated if the origin is compromised, leading to unintended server communications.
Data persistence of authentication URLs
NPS-38509E213101
The getAuthUrl function stores the resolved authentication URL in storage with the key 'porto.authUrl', which could be read by other scripts or persist across sessions, potentially leaking authentication endpoint information.
Unvalidated external URL
NPS-C3E37BC2E1B7
resolveAuthUrl and resolveUrl construct URLs from caller-supplied authUrl without validating the scheme or host. A caller could provide a non-HTTP scheme or an attacker-controlled domain, causing sensitive SIWE data to be sent to unexpected destinations.
Top-level code execution on import
NPS-C6F24533D230
The module executes configure() at import time if isReactNative() is true and the environment is not already configured. While this appears to be legitimate React Native setup behavior, it is unconditional side-effect code that runs when the module is imported, which is worth reviewing in context of the referenced ./react-native/register.js.
Import-time code execution
NPS-CCE18D76C8DC
The module executes configure() at import time when running in a React Native environment that hasn't been configured. This is a side effect that runs automatically on import, which could potentially be used for malicious purposes if configure() has unexpected behavior. However, no malicious intent is evident in this file itself.
Files reviewed
| File | Verdict | What the reviewer saw |
|---|---|---|
| dist/cli/Dialog.js | medium | The code appears to be a legitimate CLI dialog implementation but has minor concerns around top-level execution, external data transmission, and URL construction that could be exploited if inputs are not trusted. |
| dist/cli/Messenger.js | medium | The code implements a local HTTP relay with wildcard CORS and Private Network Access headers plus an unauthenticated message endpoint, creating cross-origin and local-network exposure risks, but does not exhibit clear data exfiltration, credential theft, obfuscation, shell execution, or other active malware behavior. |
| dist/cli/bin/index.js | medium | The analyzed CLI file is a standard argument parser with a dynamic import of a local chunk; no direct malicious patterns (exfiltration, credential harvesting, obfuscation, backdoors) are present, but the imported chunk should be audited for network and file operations. |
| dist/cli/internal/commands.js | medium | The code is a wallet CLI that legitimately manages private keys for account creation, but it has concerning key-handling practices: writing private keys into the package's own directory and leaving temporary key files behind on abnormal exit, which weakens the security of generated credentials. |
| dist/core/Dialog.js | medium | The dialog module is legitimate wallet SDK code but exhibits several lower-severity privacy and trust-boundary concerns (URL parameter leakage to a third-party origin, metadata transmission, and origin/response handling in the postMessage bridge) that warrant review rather than indicating outright malicious behavior. |
| dist/core/Messenger.js | medium | The Messenger module is largely a benign message-passing utility, but default postMessage wildcard origins and an unvalidated configurable relay/fetch channel present medium-risk data exposure and potential exfiltration vectors if used with untrusted configuration or origins. |
| dist/core/Porto.js | medium | The file is a legitimate wallet connector store/initialization module with expected network and storage usage, showing no clear malicious patterns such as exfiltration, credential theft, eval, or shell execution. |
| dist/core/Transport.js | medium | Code appears to be a legitimate viem transport relay proxy, but hardcodes external RPC endpoints and routes sensitive wallet/account RPC methods to a third-party relay server, creating a medium-risk data exposure vector for wallet operations. |
| dist/core/internal/_generated/contracts/EIP7702Proxy.js | medium | This module only exports an ABI and opaque EVM bytecode for an EIP-7702 proxy; no JS-level malicious patterns (exfiltration, shell, env harvest) are present, but the unverified hex bytecode poses a moderate supply-chain risk since its behavior cannot be audited. |
| dist/core/internal/_generated/contracts/ExperimentERC721.js | medium | The file is a standard ABI/bytecode export for an experimental ERC-721 contract, but the opaque bytecode and public mint functions warrant caution as they could hide unrestricted minting or external token transfers. |
| dist/core/internal/_generated/contracts/Orchestrator.js | medium | Contains embedded, unaudited EVM bytecode for a smart contract orchestrator; no active malicious JavaScript behavior was detected, but the opaque bytecode warrants caution. |
| dist/core/internal/_generated/contracts/SimpleFunder.js | medium | This file is a static ABI/bytecode export for a smart contract; no malicious JavaScript patterns were detected, but the described contract holds and transfers funds under owner control, warranting caution about its deployment. |
| dist/core/internal/erc8010.js | medium | The code performs legitimate ERC-8010 signature wrapping using external relay calls, with no malicious patterns such as exfiltration, credential harvesting, obfuscation, or process spawning detected. |
| dist/core/internal/modes/dialog.js | medium | The code is a wallet dialog module that handles sensitive operations (signing, account creation, permissions) through external iframe/network communication with potential security concerns around credential handling and cross-origin requests, but no overtly malicious patterns like data exfiltration to unauthorized servers or code execution were found. |
| dist/core/internal/siwe.js | medium | The SIWE authentication module sends sensitive wallet and signature data to caller-supplied URLs with credentials included, creating a risk of data exfiltration if those URLs are not trusted or validated. |
| dist/index.native.js | medium | No overt malicious patterns are present in this entrypoint file, but the import-time invocation of configure() and the unprovided referenced modules prevent a definitive safe rating. |
| dist/react-native/index.js | medium | No clear malicious patterns detected; the file contains import-time configuration logic typical of a third-party library entrypoint, but the actual behavior depends on the referenced configure() function which is not shown. |
| dist/react-native/register.js | medium | No clear malicious patterns were found, but the file performs automatic import-time configuration with a dynamic import and top-level crypto module import, which warrants low-severity review. |
| dist/remote/Events.js | medium | No direct malicious patterns detected, but the origin validation using endsWith is insecure and could enable origin spoofing attacks against the wallet dialog system. |
| dist/remote/Porto.js | medium | The code appears to be a legitimate remote connector for a wallet application, but it includes dynamic URL parameter handling and cross-window messaging that could pose security risks if not properly validated. |
| dist/server/Route.js | medium | No clear malicious patterns were found; the file implements an RPC route handler with outbound relay calls and signing, with minor concerns around network capability, key handling, and CORS configuration that are consistent with the package's stated purpose. |
| dist/trusted-hosts.js | medium | No direct malicious code was found, but the file exposes a broad and partially untrusted hostname trust list that could create security risks if used for origin validation or authentication decisions. |
| dist/viem/RelayActions.js | medium | Code is a legitimate viem relay actions module with no direct malicious patterns, but it makes dynamic outbound requests to a caller-supplied merchantUrl and logs RPC errors, which carry minor data-exposure risk. |
| dist/viem/RelayClient.js | medium | The file is a benign Viem client factory that constructs HTTP/relay transports and caches clients; no exfiltration, credential harvesting, code execution, or backdoor patterns were found, though unbounded caching and unvalidated transport URLs are minor concerns. |
| dist/wagmi/Hooks.native.js | medium | No malicious patterns detected in this file itself, but the import-time side effect from register.js and wildcard re-export warrant a low-severity caution pending review of the referenced modules. |
Show 255 more files
| File | Verdict | What the reviewer saw |
|---|---|---|
| src/cli/Dialog.ts | medium | The file contains import-time async side effects and a relay/browser communication bridge that, while seemingly intended for legitimate CLI dialog handling, warrant scrutiny for potential data exfiltration or unauthenticated relay abuse. |
| src/cli/Messenger.ts | medium | The messenger CLI relay exposes an unauthenticated HTTP/SSE endpoint with wildcard CORS and unbounded body buffering, allowing cross-origin message injection and potential local denial-of-service, though no direct data exfiltration or credential harvesting was found. |
| src/cli/bin/index.ts | medium | This CLI entrypoint uses a dynamic import and provisions an account via an external dialog host, but shows no direct malicious exfiltration, obfuscation, or shell execution patterns in the provided file. |
| src/cli/internal/commands.ts | medium | The code is legitimate account-creation CLI logic, but it handles private keys insecurely by writing them to predictable temp paths, package-local files, and potentially terminal logs, with broad process signal handling. |
| src/cli/internal/context.ts | medium | The code constructs network clients from user-supplied hostnames and RPC URLs and performs dynamic module lookup, which could enable SSRF or unintended network interactions, though no direct malicious patterns like exfiltration, credential harvesting, or code execution were found. |
| src/core/Messenger.ts | medium | The messenger implementation uses permissive postMessage target origins and weak origin/relay validation, which could allow message spoofing or exposure of RPC payloads, though no direct exfiltration, credential harvesting, or code execution patterns were found. |
| src/core/Storage.ts | medium | The module is a storage abstraction with no exfiltration, credential harvesting, dynamic execution, or install-time hooks, but its cookie backend stores arbitrary serialized values in long-lived, SameSite=None cookies and interpolates keys/values without encoding, which can expose or leak sensitive data if misused. |
| src/core/internal/_generated/contracts/IthacaAccountOld.ts | medium | The file contains obfuscated Ethereum smart contract bytecode and ABI for an account abstraction wallet (IthacaAccountOld). While no classic malware patterns (network, file, process) are present, the obfuscated contract bytecode and upgradeability features pose a medium risk because the exact on-chain behavior cannot be verified, and it could potentially be used to drain assets if deployed with malicious intent or if the upgrade mechanism is abused. |
| src/core/internal/modes/dialog.ts | medium | This is a legitimate wallet dialog mode implementation with expected cryptographic operations and external communication with the Porto dialog host; no clear malicious patterns detected, though external network calls and key handling warrant low-severity attention. |
| src/core/internal/modes/relay.ts | medium | This is a legitimate wallet/relay mode module (Porto) with expected cryptographic signing and WebAuthn handling; no exfiltration, obfuscation, process spawning, or backdoor patterns were detected, though it handles sensitive private keys and parses caller-supplied JSON for typed-data signing. |
| src/index.native.ts | medium | The file contains a top-level conditional side effect that calls configure() at import time in React Native environments, but no clear malicious patterns such as exfiltration, credential harvesting, obfuscation, or shell execution were detected. |
| src/react-native/crypto.ts | medium | The code is not malicious but globally overrides the standard Web Crypto API on native platforms at import time, which is a potentially invasive pattern that could affect other libraries' behavior. |
| src/react-native/index.ts | medium | The file itself contains no obvious malicious code, but it executes configuration logic at import time and broadly re-exports internal modules, warranting review of the referenced core modules for hidden side effects. |
| src/remote/Events.ts | medium | The code is generally safe but contains a weak origin validation using endsWith that could be bypassed by spoofed domains to trigger dialog-required actions. |
| src/remote/Porto.ts | medium | The module establishes remote messaging channels at import time and can be redirected to an attacker-supplied relay URL via a query parameter, creating a potential exfiltration/relay hijacking vector in embedding pages. |
| src/server/Route.ts | medium | The Route/merchant handler is a legitimate signing/RPC server implementation, but it applies permissive default CORS, forwards a configurable relay and error details, and parses unvalidated JSON bodies, which together present moderate security hardening concerns rather than clear malicious behavior. |
| src/trusted-hosts.ts | medium | No executable malicious patterns detected; the file is a static hostname allowlist, but it includes many development, staging, and ephemeral tunneling domains that could pose a security risk if used in production. |
| src/viem/Key.ts | medium | The Key.ts module is a legitimate cryptographic key management and signing library with no clear malicious behavior, though it uses hardcoded third-party WebAuthn origins, pluggable signing hooks, and private-key error logging that warrant review. |
| src/viem/RelayActions.ts | medium | The file is a legitimate wallet/relay action library with no credential harvesting, obfuscation, or shell execution, but contains configurable outbound network requests (merchantUrl) and error logging that warrant a warning-level review. |
| src/viem/WalletClient.ts | medium | No overtly malicious code (no exfiltration, obfuscation, process spawning, or unauthorized file/network access), but the module uses a process-wide unbounded client cache and a caller-supplied custom transport, which are trust-boundary and state-retention concerns. |
| src/viem/internal/relayActions.ts | medium | No malicious code (no exfiltration, credential harvesting, shell execution, or dynamic eval) was found; the file is a standard RPC action library for Porto Relay, with minor security-relevant caveats around signature trust and secret handling. |
| src/wagmi/Actions.native.ts | medium | The file is a small platform-specific shim that runs a side-effect import and re-exports another module; no direct malicious indicators are present, but the side-effect import should be reviewed to confirm it is benign. |
| src/wagmi/Hooks.native.ts | medium | This small TypeScript shim only performs a side-effectful relative import and a re-export, and contains no obvious malicious patterns itself, but its security depends on the behavior of '../react-native/register.js' and './Hooks.js'. |
| dist/cli/index.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/cli/internal/context.js | safe | No malicious patterns detected; the code is a standard Viem/Porto client initialization with expected network and dynamic property access. |
| dist/cli/internal/http.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/cli/internal/utils.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/Chains.js | safe | No malicious patterns detected |
| dist/core/Mode.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/RpcSchema.js | safe | No malicious patterns detected |
| dist/core/Storage.js | safe | No malicious patterns detected; the file implements standard storage adapters (IndexedDB, localStorage, cookies, memory) without any data exfiltration, credential harvesting, dynamic code execution, or other suspicious behavior. |
| dist/core/internal/_generated/chains.js | safe | The file only re-exports chain definitions from the 'viem/chains' package and contains no malicious or suspicious code. |
| dist/core/internal/_generated/contracts/Escrow.js | safe | No malicious patterns detected; the file only exports a standard Ethereum contract ABI and compiled bytecode. |
| dist/core/internal/_generated/contracts/ExperimentERC20.js | safe | No malicious patterns detected; the file contains only a Solidity contract ABI and bytecode for an ERC20 test token. |
| dist/core/internal/_generated/contracts/GuardedExecutor.js | safe | This file is a standard Ethereum smart contract ABI description (JSON) with no executable JavaScript logic, network calls, credential access, or other malicious patterns. |
| dist/core/internal/_generated/contracts/ICallChecker.js | safe | The file contains a static ABI definition for a smart contract interface with no executable code or malicious patterns. |
| dist/core/internal/_generated/contracts/ICommon.js | safe | No malicious patterns detected |
| dist/core/internal/_generated/contracts/IEscrow.js | safe | No malicious patterns detected; this file only exports a static Ethereum contract ABI and an empty bytecode string with no executable logic. |
| dist/core/internal/_generated/contracts/IFunder.js | safe | No malicious patterns detected; the file is a static ABI definition for an IFunder smart contract interface. |
| dist/core/internal/_generated/contracts/IFunderV4.js | safe | No malicious patterns detected; the file is a static Solidity ABI export with no executable logic or suspicious behavior. |
| dist/core/internal/_generated/contracts/IIthacaAccount.js | safe | No malicious patterns detected |
| dist/core/internal/_generated/contracts/IOAppCore.js | safe | No malicious patterns detected |
| dist/core/internal/_generated/contracts/IOAppMsgInspector.js | safe | This file only exports a static, hardcoded Ethereum contract ABI and empty bytecode with no executable code or malicious patterns. |
| dist/core/internal/_generated/contracts/IOAppReceiver.js | safe | No malicious patterns detected; the file only exports a static ABI array and an empty bytecode string constant. |
| dist/core/internal/_generated/contracts/IOrchestrator.js | safe | No malicious patterns detected; the file is a static ABI contract definition with no executable or suspicious code. |
| dist/core/internal/_generated/contracts/ISettler.js | safe | No malicious patterns detected; this is a static ABI export for a smart contract interface with no executable code or network/file/credential access. |
| dist/core/internal/_generated/contracts/ISigner.js | safe | No malicious patterns detected |
| dist/core/internal/_generated/contracts/IthacaAccount.js | safe | This file contains only a standard Ethereum smart contract ABI definition and compiled bytecode, with no malicious JavaScript patterns, network calls, or process/file manipulation. |
| dist/core/internal/_generated/contracts/IthacaAccountNew.js | safe | No malicious patterns detected; the file contains only a Solidity contract ABI and bytecode for an Ethereum smart contract account, with no JavaScript execution, network calls, or filesystem access. |
| dist/core/internal/_generated/contracts/IthacaAccountOld.js | safe | This file contains only a static Ethereum smart contract ABI and precompiled bytecode for the IthacaAccountOld contract, with no executable JavaScript or malicious patterns present. |
| dist/core/internal/_generated/contracts/LayerZeroSettler.js | safe | This is a standard auto-generated Ethereum contract ABI and bytecode file for a LayerZero settler contract, containing only static data exports with no executable code, network calls, environment access, or other malicious patterns. |
| dist/core/internal/_generated/contracts/LibNonce.js | safe | This file is a benign generated contract ABI and bytecode constant for a nonce library, with no executable logic or malicious patterns. |
| dist/core/internal/_generated/contracts/LibTStack.js | safe | No malicious patterns detected; the file contains a static ABI array and a benign EVM bytecode constant with no executable or exfiltration logic. |
| dist/core/internal/_generated/contracts/MultiSigSigner.js | safe | This file only exports a standard Ethereum smart contract ABI and compiled bytecode for a MultiSigSigner contract with no malicious patterns. |
| dist/core/internal/_generated/contracts/OApp.js | safe | The file only exports a static ABI definition and an empty bytecode string for a LayerZero OApp contract, with no executable or malicious code. |
| dist/core/internal/_generated/contracts/OAppCore.js | safe | This file only exports static ABI metadata and an empty bytecode string for a LayerZero OApp contract interface, with no executable code, network calls, filesystem access, or suspicious patterns. |
| dist/core/internal/_generated/contracts/OAppReceiver.js | safe | This file contains only a statically defined Ethereum smart contract ABI array and an empty bytecode string with no executable logic, network calls, or suspicious patterns. |
| dist/core/internal/_generated/contracts/OAppSender.js | safe | No malicious patterns detected in this static ABI definition file; it contains only contract interface metadata and no executable code, network activity, or credential access. |
| dist/core/internal/_generated/contracts/SimpleSettler.js | safe | No malicious patterns detected; the file only exports an Ethereum contract ABI and bytecode with no executable JavaScript logic, network calls, or filesystem access. |
| dist/core/internal/_generated/contracts/Simulator.js | safe | No malicious patterns detected; the file contains a standard Ethereum contract ABI definition and compiled bytecode for a gas simulation contract. |
| dist/core/internal/_generated/contracts/TokenTransferLib.js | safe | No malicious patterns detected; the file only exports an empty ABI array and a short EVM bytecode string with no executable or suspicious behavior. |
| dist/core/internal/call.js | safe | The code only defines pure utility functions for encoding Ethereum contract call data using standard ABI encoding; no network, filesystem, process execution, dynamic code, or exfiltration behavior is present. |
| dist/core/internal/intersectionObserver.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/logger.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/mode.js | safe | No malicious patterns detected |
| dist/core/internal/modes/reactNative.js | safe | No malicious patterns detected; the file is a benign React Native mode wrapper for a dialog-based authentication flow. |
| dist/core/internal/modes/relay.js | safe | No malicious patterns detected in the relay mode implementation; the code handles WebAuthn authentication, account management, and relay interactions with no exfiltration, obfuscation, or suspicious activity. |
| dist/core/internal/permissions.js | safe | No malicious patterns detected; the file contains only pure data transformation functions for permission/key conversion with no network, filesystem, process, or dynamic execution behavior. |
| dist/core/internal/permissionsRequest.js | safe | No malicious patterns detected in the analyzed permissions request module; the code performs cryptographic key creation and permission resolution without any data exfiltration, obfuscation, or other red flags. |
| dist/core/internal/porto.js | safe | No malicious patterns detected |
| dist/core/internal/promise.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/provider.js | safe | No malicious patterns detected; the code implements a legitimate Ethereum wallet provider with standard RPC method handlers, schema validation, and account/permission management. |
| dist/core/internal/relay/rpcSchema.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/relay/schema/capabilities.js | safe | No malicious patterns detected; the file contains only Zod schema definitions for RPC capabilities with no network, filesystem, process, or dynamic code execution activity. |
| dist/core/internal/relay/schema/intent.js | safe | No malicious patterns detected; the file only defines Zod validation schemas for an Intent type with no network, filesystem, process, or dynamic execution behavior. |
| dist/core/internal/relay/schema/key.js | safe | No malicious patterns detected |
| dist/core/internal/relay/schema/permission.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/relay/schema/preCall.js | safe | No malicious patterns detected |
| dist/core/internal/relay/schema/quotes.js | safe | No malicious patterns detected; the file only defines Zod schemas for RPC quote data. |
| dist/core/internal/relay/schema/rpc.js | safe | No malicious patterns detected; the file only defines Zod schemas for JSON-RPC types and performs no network, filesystem, process, or credential operations. |
| dist/core/internal/relay/schema/token.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/requiredFunds.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/schema/capabilities.js | safe | This file only defines Zod schema validators for a capabilities API and contains no malicious patterns, network requests, dynamic code execution, or filesystem access. |
| dist/core/internal/schema/key.js | safe | No malicious patterns detected |
| dist/core/internal/schema/permissions.js | safe | This is a Zod schema definition file for permission objects with no executable, network, or filesystem behavior; no malicious patterns detected. |
| dist/core/internal/schema/request.js | safe | No malicious patterns detected; the file only defines Zod schemas and validation logic for RPC requests without any exfiltration, credential harvesting, obfuscation, or process spawning. |
| dist/core/internal/schema/rpc.js | safe | No malicious patterns detected; the file only defines Zod schemas for Ethereum wallet JSON-RPC methods and contains no executable, exfiltration, or obfuscated code. |
| dist/core/internal/schema/token.js | safe | No malicious patterns detected |
| dist/core/internal/schema/utils.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/store.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/tokens.js | safe | No malicious patterns detected; the code only performs token lookup and resolution using RelayActions with no network, filesystem, process, or dynamic execution behavior. |
| dist/core/internal/types.js | safe | No malicious patterns detected |
| dist/core/internal/urlString.js | safe | No malicious patterns detected |
| dist/core/internal/userAgent.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/internal/utils.js | safe | No malicious patterns detected; the utilities perform benign value normalization, deduplication, UUID generation, and in-flight promise caching without any data exfiltration, credential harvesting, dynamic execution, or process spawning. |
| dist/core/react-native/Porto.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/react-native/configure.js | safe | No malicious patterns detected; this module only configures Expo authentication session handling for React Native. |
| dist/core/react-native/environment.js | safe | No malicious patterns detected; the module simply stores and retrieves a React Native environment object with no network, filesystem, process, or dynamic code execution activity. |
| dist/core/react-native/index.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/core/react-native/utils.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/index.js | safe | No malicious patterns detected in the export-only module; all imports are static and resolve to relative internal paths with no executable or obfuscated code. |
| dist/internal/index.js | safe | No malicious patterns detected |
| dist/react-native/crypto.js | safe | No malicious patterns detected |
| dist/register/index.js | safe | No malicious patterns detected |
| dist/remote/Actions.js | safe | No malicious patterns detected |
| dist/remote/Hooks.js | safe | The file contains only standard React hooks for accessing a wallet/account store and shows no malicious patterns such as data exfiltration, credential harvesting, obfuscation, or process spawning. |
| dist/remote/index.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/remote/internal/methodPolicies.js | safe | No malicious patterns detected; the file only defines a static policy configuration for wallet-related RPC methods without any executable or exfiltration behavior. |
| dist/server/Router.js | safe | No malicious patterns detected in this routing utility file; it only sets up HTTP route handlers and groups routes. |
| dist/server/index.js | safe | No malicious patterns detected |
| dist/server/internal/merchantSchema.js | safe | No malicious patterns detected; the file contains only static schema imports, re-exports, and Zod-based request validation logic. |
| dist/server/internal/requestListener.js | safe | No malicious patterns detected; the code is a legitimate Node.js adapter for fetch handlers with standard request/response processing. |
| dist/theme/Theme.js | safe | Cleared by Jev triage; no further analysis needed |
| dist/theme/index.js | safe | The file only re-exports from a local module and contains no malicious patterns. |
| dist/viem/Account.js | safe | No malicious patterns detected; the code is a legitimate cryptographic account abstraction module for viem/ox with no data exfiltration, credential harvesting, obfuscation, or unauthorized system access. |
| dist/viem/AccountActions.js | safe | No malicious patterns detected; the file contains a straightforward RPC wrapper for email verification with schema validation. |
| dist/viem/CapabilitiesSchema.js | safe | The file contains only an empty export statement and a source map reference with no executable or suspicious code. |
| dist/viem/ContractActions.js | safe | No malicious patterns detected in the reviewed source file; the code performs legitimate Ethereum contract interaction and signing logic without data exfiltration, credential harvesting, obfuscation, or process/network abuse. |
| dist/viem/Key.js | safe | No malicious patterns detected; the file is a legitimate cryptographic key management module for the viem/ox libraries with no data exfiltration, code execution, or suspicious network/file operations. |
| dist/viem/RpcSchema.js | safe | No malicious patterns detected; the file contains only an empty export statement and a source map reference. |
| dist/viem/WalletActions.js | safe | No malicious patterns detected; the code is a legitimate viem wallet actions module that only uses standard RPC calls, zod validation, and avoids all listed red flags. |
| dist/viem/WalletClient.js | safe | No malicious patterns detected; the code only implements a client caching wrapper for viem without any suspicious behavior. |
| dist/viem/index.js | safe | The file consists solely of re-export statements with no executable code, I/O, network, or suspicious constructs. |
| dist/viem/internal/relayActions.js | safe | This is a legitimate viem/Porto relay RPC client module; no exfiltration, credential harvesting, obfuscation, dynamic code execution, process spawning, or install-time hooks were detected, though a few design-level trust caveats exist (secret-in-RPC-param, relay-trusted quote verification). |
| dist/viem/internal/utils.js | safe | No malicious patterns detected |
| dist/wagmi/Actions.js | safe | No malicious patterns detected |
| dist/wagmi/Actions.native.js | safe | No malicious patterns detected |
| dist/wagmi/Connector.js | safe | No malicious patterns detected; the code is a standard Wagmi wallet connector implementation for Porto with no exfiltration, credential harvesting, obfuscation, or backdoor behavior. |
| dist/wagmi/Hooks.js | safe | No malicious patterns detected |
| dist/wagmi/Query.js | safe | No malicious patterns detected |
| dist/wagmi/index.js | safe | This file only re-exports modules from local files with no suspicious behavior, network activity, or code execution. |
| dist/wagmi/index.native.js | safe | No malicious patterns detected |
| dist/wagmi/internal/core.js | safe | No malicious patterns detected; this is standard wagmi/viem wallet connector code with no exfiltration, obfuscation, or unauthorized system access. |
| dist/wagmi/internal/query.js | safe | No malicious patterns detected; the file contains only pure functions that construct query keys for Wagmi, with no side effects, network calls, or dynamic code execution. |
| dist/wagmi/internal/react.js | safe | No malicious patterns detected; the file contains standard React hooks for wagmi account management and TanStack Query integration without any exfiltration, obfuscation, or suspicious system access. |
| dist/wagmi/internal/types.js | safe | No malicious patterns detected |
| dist/wagmi/internal/utils.js | safe | Cleared by Jev triage; no further analysis needed |
| src/cli/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/cli/internal/http.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/cli/internal/utils.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/cli/tsdown.config.ts | safe | This is a standard tsdown build configuration file that reads package.json to compute external dependencies; it contains no malicious patterns. |
| src/core/Chains.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/Dialog.ts | safe | The file implements Porto wallet dialogs (iframe, popup, React Native auth session, inline) with postMessage messaging to hardcoded wallet origins and no signs of data exfiltration, credential harvesting, obfuscated execution, reverse shells, mining, or filesystem/process abuse. |
| src/core/Mode.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/Porto.ts | safe | No malicious patterns detected; the code is a standard Web3 wallet SDK store/configuration module with no exfiltration, credential harvesting, obfuscation, shell execution, or dynamic code loading. |
| src/core/RpcSchema.ts | safe | This file only contains TypeScript type definitions and imports with no runtime code or malicious patterns. |
| src/core/Transport.ts | safe | No malicious patterns detected; the code defines a transparent relay proxy transport for viem with no data exfiltration, credential harvesting, obfuscation, or dynamic code execution. |
| src/core/internal/_generated/chains.ts | safe | This is a simple static re-export of chain definitions from the viem/chains library with no malicious patterns, dynamic code execution, network requests, or file system access. |
| src/core/internal/_generated/contracts/EIP7702Proxy.ts | safe | No malicious patterns detected; the file only exports a static Solidity ABI and a fixed bytecode constant for an EIP-7702 proxy contract with no executable JavaScript logic. |
| src/core/internal/_generated/contracts/Escrow.ts | safe | This file contains only a standard Ethereum smart contract ABI definition and compiled bytecode for an escrow contract; no malicious patterns, external data exfiltration, credential harvesting, dynamic code execution, or install-time behavior are present. |
| src/core/internal/_generated/contracts/ExperimentERC20.ts | safe | No malicious patterns detected; the file contains a standard ERC20 contract ABI and bytecode. |
| src/core/internal/_generated/contracts/ExperimentERC721.ts | safe | This file contains only a static ABI definition and compiled bytecode for an ERC-721 NFT contract; it contains no executable JavaScript/TypeScript logic, network calls, environment access, or other malicious patterns. |
| src/core/internal/_generated/contracts/GuardedExecutor.ts | safe | This file only contains a static Solidity contract ABI definition and an empty bytecode placeholder, with no executable logic or malicious patterns. |
| src/core/internal/_generated/contracts/ICallChecker.ts | safe | No malicious patterns detected |
| src/core/internal/_generated/contracts/ICommon.ts | safe | No malicious patterns detected |
| src/core/internal/_generated/contracts/IEscrow.ts | safe | No malicious patterns detected; this file only contains a static ABI definition for an escrow smart contract interface with no executable logic, network calls, filesystem access, or obfuscation. |
| src/core/internal/_generated/contracts/IFunder.ts | safe | No malicious patterns detected; file only exports a static ABI definition and empty bytecode string for a funder contract interface. |
| src/core/internal/_generated/contracts/IFunderV4.ts | safe | No malicious patterns detected; the file only exports a static ABI array and a placeholder bytecode constant for an interface, with no executable logic or suspicious behavior. |
| src/core/internal/_generated/contracts/IIthacaAccount.ts | safe | No malicious patterns detected; the file contains only a static Ethereum contract ABI definition and an empty bytecode string with no executable or exfiltration behavior. |
| src/core/internal/_generated/contracts/IOAppCore.ts | safe | The file is a static ABI definition and empty bytecode constant for a LayerZero OApp contract interface, containing no executable code, network activity, filesystem access, or malicious patterns. |
| src/core/internal/_generated/contracts/IOAppMsgInspector.ts | safe | No malicious patterns detected |
| src/core/internal/_generated/contracts/IOAppReceiver.ts | safe | No malicious patterns detected; the file is a static ABI definition with no executable or network activity. |
| src/core/internal/_generated/contracts/IOrchestrator.ts | safe | This file only exports a static Solidity contract ABI and an empty bytecode string; no executable code, network calls, credential access, or malicious patterns are present. |
| src/core/internal/_generated/contracts/ISettler.ts | safe | The file contains only a static, declarative Ethereum contract ABI and an empty contract bytecode constant, with no executable logic or malicious patterns. |
| src/core/internal/_generated/contracts/ISigner.ts | safe | No malicious patterns detected |
| src/core/internal/_generated/contracts/IthacaAccount.ts | safe | The file is a static, generated TypeScript ABI definition and contract bytecode export for an Ethereum smart contract, with no executable JavaScript logic, network access, filesystem manipulation, or malicious patterns present. |
| src/core/internal/_generated/contracts/IthacaAccountNew.ts | safe | This file contains only a static ABI definition and a precompiled contract bytecode string; no executable JavaScript/TypeScript logic, network calls, file access, or obfuscated payloads were detected. |
| src/core/internal/_generated/contracts/LayerZeroSettler.ts | safe | This file contains only a standard Solidity contract ABI and bytecode for a LayerZero settler contract, with no executable JavaScript/TypeScript logic or malicious patterns. |
| src/core/internal/_generated/contracts/LibNonce.ts | safe | The file only exports a static ABI definition and a fixed bytecode constant; no executable, obfuscated, network, filesystem, or environment-accessing behavior is present. |
| src/core/internal/_generated/contracts/LibTStack.ts | safe | The file contains an empty ABI array and a short contract bytecode string with no executable logic, data exfiltration, or other malicious patterns. |
| src/core/internal/_generated/contracts/MultiSigSigner.ts | safe | No malicious patterns detected; the file contains standard Ethereum ABI and bytecode for a multi-signature signer contract with no exfiltration, obfuscation, or suspicious runtime behavior. |
| src/core/internal/_generated/contracts/OApp.ts | safe | The file contains only a static ABI definition and an empty bytecode constant, with no executable logic or malicious patterns. |
| src/core/internal/_generated/contracts/OAppCore.ts | safe | The file contains only a standard static ABI definition and an empty code constant, with no executable logic or malicious patterns. |
| src/core/internal/_generated/contracts/OAppReceiver.ts | safe | This file contains only a standard LayerZero OAppReceiver ABI definition and an empty bytecode placeholder, with no executable logic or malicious patterns. |
| src/core/internal/_generated/contracts/OAppSender.ts | safe | No malicious patterns detected; the file only contains a static ABI definition and an empty bytecode constant for a LayerZero OAppSender contract. |
| src/core/internal/_generated/contracts/Orchestrator.ts | safe | This file contains only a standard Ethereum contract ABI and bytecode constant for a legitimate-looking orchestration contract, with no executable JavaScript/TypeScript logic or malicious patterns. |
| src/core/internal/_generated/contracts/SimpleFunder.ts | safe | No malicious patterns detected; the file contains a standard Ethereum contract ABI and bytecode with no executable JavaScript/TypeScript logic or external interactions. |
| src/core/internal/_generated/contracts/SimpleSettler.ts | safe | This file only exports a Solidity contract ABI and bytecode; it contains no executable JavaScript/TypeScript logic, no network or filesystem operations, and no suspicious patterns. |
| src/core/internal/_generated/contracts/Simulator.ts | safe | No malicious patterns detected; the file contains only a standard Ethereum contract ABI and its compiled bytecode with no executable JavaScript/TypeScript logic. |
| src/core/internal/_generated/contracts/TokenTransferLib.ts | safe | The file contains an empty ABI array and a short contract bytecode string with no executable logic, data exfiltration, or other malicious patterns. |
| src/core/internal/call.ts | safe | No malicious patterns detected; the code consists of pure, deterministic ABI-encoding helper functions for a smart account contract without any network, filesystem, process, or dynamic-execution behavior. |
| src/core/internal/erc8010.ts | safe | No malicious patterns detected; the code is a benign ERC-8010 signature wrapper that uses standard viem and ox libraries without exfiltration, obfuscation, or system access. |
| src/core/internal/intersectionObserver.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/logger.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/mode.ts | safe | No malicious patterns detected |
| src/core/internal/modes/reactNative.ts | safe | No malicious patterns detected |
| src/core/internal/permissions.ts | safe | No malicious patterns detected; the code only performs type-safe data mapping between Key and Permissions structures without any network, filesystem, process, or dynamic code execution activities. |
| src/core/internal/permissionsRequest.ts | safe | No malicious patterns detected; the code is a straightforward permissions request transformation utility with no network, filesystem, process, or obfuscated behavior. |
| src/core/internal/porto.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/promise.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/provider.ts | safe | No malicious patterns detected in the provider implementation; all code is legitimate wallet-provider logic with no exfiltration, obfuscation, or dynamic execution. |
| src/core/internal/relay/rpcSchema.ts | safe | No malicious patterns detected; the file contains only TypeScript type definitions for JSON-RPC schema mappings with no runtime code, network activity, or credential access. |
| src/core/internal/relay/schema/capabilities.ts | safe | No malicious patterns detected |
| src/core/internal/relay/schema/intent.ts | safe | No malicious patterns detected; the file contains only Zod schema definitions and TypeScript type exports with no executable or suspicious code. |
| src/core/internal/relay/schema/key.ts | safe | No malicious patterns detected |
| src/core/internal/relay/schema/permission.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/relay/schema/preCall.ts | safe | No malicious patterns detected; the file only defines Zod schemas for Ethereum transaction pre-call data with no network, filesystem, process, or obfuscated code. |
| src/core/internal/relay/schema/quotes.ts | safe | No malicious patterns detected |
| src/core/internal/relay/schema/rpc.ts | safe | No malicious patterns detected |
| src/core/internal/relay/schema/token.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/requiredFunds.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/schema/capabilities.ts | safe | This file only defines Zod validation schemas for capability types with no malicious patterns; the optional authUrl field is a minor SSRF consideration for consumers but not a vulnerability in this code. |
| src/core/internal/schema/key.ts | safe | No malicious patterns detected |
| src/core/internal/schema/permissions.ts | safe | No malicious patterns detected; the file only defines Zod validation schemas for permission and request structures. |
| src/core/internal/schema/request.bench.ts | safe | No malicious patterns detected; the file is a benchmark test for request schema validation with no network, filesystem, process, or dynamic code execution activity. |
| src/core/internal/schema/request.ts | safe | No malicious patterns detected |
| src/core/internal/schema/rpc.ts | safe | No malicious patterns detected; the file only defines Zod schemas for RPC method request/response validation. |
| src/core/internal/schema/token.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/schema/utils.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/siwe.ts | safe | No malicious patterns detected |
| src/core/internal/store.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/tokens.ts | safe | No malicious patterns detected; the module only defines token lookup and resolution helpers using viem/ox utilities and relay capabilities. |
| src/core/internal/types.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/internal/urlString.ts | safe | No malicious patterns detected; the function only converts relative URLs to absolute using the current window origin. |
| src/core/internal/userAgent.ts | safe | No malicious patterns detected; the code only performs standard browser feature and user-agent detection with no network, filesystem, process, or dynamic execution risks. |
| src/core/internal/utils.ts | safe | No malicious patterns detected; the code contains only standard utility functions for value normalization, deduplication, UUID generation, and promise caching without any suspicious behavior. |
| src/core/react-native/Porto.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/react-native/configure.ts | safe | No malicious patterns detected; the file only configures Expo authentication session helpers for React Native. |
| src/core/react-native/environment.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/react-native/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/core/react-native/utils.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/index.ts | safe | The file contains only static module re-exports with no executable logic, network activity, credential access, or other malicious patterns. |
| src/internal/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/react-native/register.ts | safe | No malicious patterns detected |
| src/register/index.ts | safe | This is a TypeScript module augmentation file that only declares types for viem's Register interface, with no executable code, network access, or suspicious patterns. |
| src/remote/Actions.ts | safe | The code handles internal RPC request rejection and response logic without malicious patterns such as data exfiltration, credential harvesting, dynamic code execution, or shell command spawning. |
| src/remote/Hooks.ts | safe | This file contains only React hooks for reading state from a local Zustand store; no network, filesystem, process, or dynamic execution patterns are present. |
| src/remote/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/remote/internal/methodPolicies.ts | safe | No malicious patterns detected; the file defines static method policies and imports a user-agent utility without any exfiltration, obfuscation, or dangerous behavior. |
| src/server/Router.ts | safe | No malicious patterns detected |
| src/server/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/server/internal/merchantSchema.ts | safe | No malicious patterns detected |
| src/server/internal/requestListener.ts | safe | No malicious patterns detected; the code is a legitimate Node.js fetch-handler request listener adapter with no exfiltration, obfuscation, credential harvesting, or process execution. |
| src/theme/Theme.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/theme/index.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/viem/Account.ts | safe | The provided TypeScript file is a legitimate Viem/Porto account abstraction module that only performs cryptographic signing, key management, and typed-data hashing operations with no suspicious network, filesystem, process, or dynamic execution patterns. |
| src/viem/AccountActions.ts | safe | No malicious patterns detected |
| src/viem/CapabilitiesSchema.ts | safe | No malicious patterns detected |
| src/viem/ContractActions.ts | safe | No malicious patterns detected; the code is a legitimate Ethereum account abstraction library implementation using viem and ox for EIP-7702 and EIP-7821 execution flows. |
| src/viem/RelayClient.ts | safe | No malicious patterns detected |
| src/viem/RpcSchema.ts | safe | No malicious patterns detected; the file contains only type definitions and type-level transformations with no runtime code. |
| src/viem/WalletActions.ts | safe | This is a legitimate viem wallet actions module for the Porto wallet, containing only standard RPC wallet method implementations with no malicious patterns, data exfiltration, credential harvesting, or dynamic code execution. |
| src/viem/index.ts | safe | This is a simple barrel file re-exporting modules from the viem library, with no executable code, network requests, or suspicious patterns. |
| src/viem/internal/utils.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/wagmi/Actions.ts | safe | This is a simple re-export module with no executable logic, network access, or suspicious patterns detected. |
| src/wagmi/Connector.ts | safe | The code appears to be a legitimate wagmi connector for the Porto wallet, with no malicious patterns detected. |
| src/wagmi/Hooks.ts | safe | This file is a simple re-export module containing no executable code, side effects, or suspicious patterns; it safely re-exports hooks from an internal module. |
| src/wagmi/Query.ts | safe | Cleared by Jev triage; no further analysis needed |
| src/wagmi/index.native.ts | safe | No malicious patterns detected; the file only registers the React Native-specific module and re-exports the standard index, with no dynamic code execution, network, filesystem, or process activity. |
| src/wagmi/index.ts | safe | The file only contains static re-exports of local modules with no executable code, network calls, file system access, or obfuscation. |
| src/wagmi/internal/core.ts | safe | No malicious patterns detected; the code is a legitimate wagmi/viem connector integration with no exfiltration, obfuscation, credential harvesting, or shell/process execution. |
| src/wagmi/internal/query.ts | safe | No malicious patterns detected |
| src/wagmi/internal/react.ts | safe | No malicious patterns detected; the file contains standard React hooks for wagmi blockchain account and permissions management. |
| src/wagmi/internal/types.ts | safe | This TypeScript file contains only type definitions for wagmi parameters with no executable code or malicious patterns. |
| src/wagmi/internal/utils.ts | safe | Cleared by Jev triage; no further analysis needed |
Scanned versions of porto
| Version | Verdict | Files | Scanned |
|---|---|---|---|
| 0.2.35 | Needs review | 280 | Oct 4, 2026 |
Frequently asked questions
Is porto safe to use?
No confirmed malware was found in porto@0.2.35, but the review flagged 69 medium, 98 low severity findings for risky patterns worth checking before you rely on it.
Does porto contain malware?
No malware was identified in porto@0.2.35 when Togoder Security scanned it on Oct 4, 2026. A new version can still introduce malicious code, so scan the exact versions in your lockfile.
How was porto checked?
Togoder Security downloaded the published npm package and had an AI model read its 280 source files, looking for install scripts, credential access, network exfiltration, obfuscation, backdoors and crypto-wallet theft. The results are cached by file hash and shown here.
How do I scan porto together with the rest of my dependencies?
Upload your lockfile at https://security.togoder.click/scan or call the API documented at https://security.togoder.click/api-docs. Files that have already been scanned, like the ones in porto@0.2.35, cost nothing.