{"_id":"@arkade-os/snap","_rev":"8-2c0a908cbedc96006951e55d160ff408","name":"@arkade-os/snap","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@arkade-os/snap","version":"0.1.0","keywords":["metamask","snap","bitcoin","arkade","layer2","lightning","vtxo"],"license":"MIT","_id":"@arkade-os/snap@0.1.0","maintainers":[{"name":"tiero","email":"marco@vulpem.com"},{"name":"louisark","email":"louis@arklabs.to"},{"name":"altafan","email":"pietro@vulpem.com"},{"name":"bordalix","email":"joao.bordalo@gmail.com"}],"homepage":"https://github.com/arkade-os/arkade-snap#readme","bugs":{"url":"https://github.com/arkade-os/arkade-snap/issues"},"dist":{"shasum":"2bc2029234f46a078a26e013414730294cf5145f","tarball":"https://registry.npmjs.org/@arkade-os/snap/-/snap-0.1.0.tgz","fileCount":5,"integrity":"sha512-Sb1//pZUSU1wESQpRXZ1qaz1mE4Kzv2X8KLFID/pYn+Lzr37KINgbISM+FOXRzLym8SlX6ZyJjY/FSMjm75ykw==","signatures":[{"sig":"MEYCIQCBNKmfLvAESzUWe3XwZ283MyC2NnJN43sDdxqSnZQi7gIhAPE3lM50hR7K2MgcKbvrwvRHqS8LKKTcDu4lTRkfdcUl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265131},"main":"./dist/bundle.js","_from":"file:arkade-os-snap-0.1.0.tgz","scripts":{"lint":"pnpm lint:eslint && pnpm lint:misc --check","stop":"lsof -ti:8080 | xargs kill -9 || echo 'No snap server running on port 8080'","test":"vitest run","build":"mm-snap build","clean":"rimraf dist","serve":"mm-snap serve","start":"mm-snap watch","delete":"pnpm clean","format":"pnpm lint:misc --write && pnpm lint:eslint --fix","rebuild":"pnpm clean && pnpm build && pnpm serve","test:ui":"vitest --ui","lint:fix":"pnpm lint:eslint --fix && pnpm lint:misc --write","lint:misc":"prettier '**/*.json' --ignore-path ../../.prettierignore","test:watch":"vitest","build:clean":"pnpm clean && pnpm build","lint:eslint":"eslint . --cache --ext js,ts","format:check":"pnpm lint:misc --check"},"_npmUser":{"name":"tiero","email":"marco@vulpem.com"},"_resolved":"/private/var/folders/98/zgs49t8s2w3gv4vm0j5hr0mw0000gn/T/924c201c129e73b9032b9fa3ba525026/arkade-os-snap-0.1.0.tgz","_integrity":"sha512-Sb1//pZUSU1wESQpRXZ1qaz1mE4Kzv2X8KLFID/pYn+Lzr37KINgbISM+FOXRzLym8SlX6ZyJjY/FSMjm75ykw==","repository":{"url":"git+https://github.com/arkade-os/arkade-snap.git","type":"git"},"_npmVersion":"10.9.2","description":"Arkade Wallet Snap - Bitcoin Layer 2 wallet with Arkade protocol support","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@scure/base":"^2.0.0","@noble/curves":"^2.0.1","@arkade-os/sdk":"0.3.0","@scure/btc-signer":"^2.0.1","@metamask/snaps-sdk":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","rimraf":"^3.0.2","vitest":"^2.1.8","ts-jest":"^29.1.0","prettier":"^3.6.2","@vitest/ui":"^2.1.8","typescript":"^5.7.3","@jest/globals":"^29.5.0","eslint-plugin-n":"^15.7.0","eslint-plugin-jest":"^27.1.5","@metamask/snaps-cli":"^6.0.0","eslint-plugin-jsdoc":"^41.0.0","@metamask/snaps-jest":"^8.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-promise":"^6.1.1","@metamask/eslint-config":"^12.0.0","@typescript-eslint/parser":"^5.42.0","@metamask/eslint-config-jest":"^12.0.0","@metamask/eslint-config-nodejs":"^12.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@metamask/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/snap_0.1.0_1760745929570_0.3337925702985136","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@arkade-os/snap","version":"0.1.1","keywords":["metamask","snap","bitcoin","arkade","layer2","lightning","vtxo"],"license":"MIT","_id":"@arkade-os/snap@0.1.1","maintainers":[{"name":"tiero","email":"marco@vulpem.com"},{"name":"louisark","email":"louis@arklabs.to"},{"name":"altafan","email":"pietro@vulpem.com"},{"name":"bordalix","email":"joao.bordalo@gmail.com"}],"homepage":"https://github.com/arkade-os/snap#readme","bugs":{"url":"https://github.com/arkade-os/snap/issues"},"dist":{"shasum":"1430987c180de2eaa64083472c76b760db78d32c","tarball":"https://registry.npmjs.org/@arkade-os/snap/-/snap-0.1.1.tgz","fileCount":5,"integrity":"sha512-wx66V2hlBSvfg2/OuEYhcgEyD7p5/je9uGVVzSS9hJ6p0mL5x9A4//qukS0ziBBaHJntu1TUM3eDPQ5nCVPc+w==","signatures":[{"sig":"MEUCIF+rKNHzUwLupiY91gRGiLwaKHczNIMd4Ls2prZGV12jAiEAySgt5pSCsTK9ML/oaMJGCfkzjSTz7JHoAURPIb95hgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265075},"main":"./dist/bundle.js","_from":"file:arkade-os-snap-0.1.1.tgz","scripts":{"lint":"pnpm lint:eslint && pnpm lint:misc --check","stop":"lsof -ti:8080 | xargs kill -9 || echo 'No snap server running on port 8080'","test":"vitest run","build":"mm-snap build","clean":"rimraf dist","serve":"mm-snap serve","start":"mm-snap watch","delete":"pnpm clean","format":"pnpm lint:misc --write && pnpm lint:eslint --fix","rebuild":"pnpm clean && pnpm build && pnpm serve","test:ui":"vitest --ui","lint:fix":"pnpm lint:eslint --fix && pnpm lint:misc --write","lint:misc":"prettier '**/*.json' --ignore-path ../../.prettierignore","test:watch":"vitest","build:clean":"pnpm clean && pnpm build","lint:eslint":"eslint . --cache --ext js,ts","format:check":"pnpm lint:misc --check"},"_npmUser":{"name":"tiero","email":"marco@vulpem.com"},"_resolved":"/private/var/folders/98/zgs49t8s2w3gv4vm0j5hr0mw0000gn/T/60b1addfe4fa6ce101d0616dbdb639ad/arkade-os-snap-0.1.1.tgz","_integrity":"sha512-wx66V2hlBSvfg2/OuEYhcgEyD7p5/je9uGVVzSS9hJ6p0mL5x9A4//qukS0ziBBaHJntu1TUM3eDPQ5nCVPc+w==","repository":{"url":"git+https://github.com/arkade-os/snap.git","type":"git"},"_npmVersion":"10.9.2","description":"Arkade Wallet Snap - Bitcoin Layer 2 wallet with Arkade protocol support","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@scure/base":"^2.0.0","@noble/curves":"^2.0.1","@arkade-os/sdk":"0.3.0","@scure/btc-signer":"^2.0.1","@metamask/snaps-sdk":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","rimraf":"^3.0.2","vitest":"^2.1.8","ts-jest":"^29.1.0","prettier":"^3.6.2","@vitest/ui":"^2.1.8","typescript":"^5.7.3","@jest/globals":"^29.5.0","eslint-plugin-n":"^15.7.0","eslint-plugin-jest":"^27.1.5","@metamask/snaps-cli":"^6.0.0","eslint-plugin-jsdoc":"^41.0.0","@metamask/snaps-jest":"^8.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-promise":"^6.1.1","@metamask/eslint-config":"^12.0.0","@typescript-eslint/parser":"^5.42.0","@metamask/eslint-config-jest":"^12.0.0","@metamask/eslint-config-nodejs":"^12.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@metamask/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/snap_0.1.1_1760746273806_0.023265903911373398","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@arkade-os/snap","version":"0.1.2","keywords":["metamask","snap","bitcoin","arkade","layer2","lightning","vtxo"],"license":"MIT","_id":"@arkade-os/snap@0.1.2","maintainers":[{"name":"tiero","email":"marco@vulpem.com"},{"name":"louisark","email":"louis@arklabs.to"},{"name":"altafan","email":"pietro@vulpem.com"},{"name":"bordalix","email":"joao.bordalo@gmail.com"}],"homepage":"https://github.com/arkade-os/snap#readme","bugs":{"url":"https://github.com/arkade-os/snap/issues"},"dist":{"shasum":"14957e19fdc88e10a3607a60313651310ab1c54e","tarball":"https://registry.npmjs.org/@arkade-os/snap/-/snap-0.1.2.tgz","fileCount":5,"integrity":"sha512-9MBgzewd0E9yYU/0Fh677Qn9Liwg6HrUME5oezFDMdTuLHRqrJECJaPigOwfB+6t7aij8qQKTR4B9HsS5I9H7g==","signatures":[{"sig":"MEQCIA7rVILPtz2N14uV4VCq91vVyYVM5FMKEYex9YtWlNkCAiA7aN9EED4ayAC2fl2ESehksmbYam5GKtlDVV64eBrPig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265075},"main":"./dist/bundle.js","_from":"file:arkade-os-snap-0.1.2.tgz","scripts":{"lint":"pnpm lint:eslint && pnpm lint:misc --check","stop":"lsof -ti:8080 | xargs kill -9 || echo 'No snap server running on port 8080'","test":"vitest run","build":"mm-snap build","clean":"rimraf dist","serve":"mm-snap serve","start":"mm-snap watch","delete":"pnpm clean","format":"pnpm lint:misc --write && pnpm lint:eslint --fix","rebuild":"pnpm clean && pnpm build && pnpm serve","test:ui":"vitest --ui","lint:fix":"pnpm lint:eslint --fix && pnpm lint:misc --write","lint:misc":"prettier '**/*.json' --ignore-path ../../.prettierignore","test:watch":"vitest","build:clean":"pnpm clean && pnpm build","lint:eslint":"eslint . --cache --ext js,ts","format:check":"pnpm lint:misc --check"},"_npmUser":{"name":"tiero","email":"marco@vulpem.com"},"_resolved":"/private/var/folders/98/zgs49t8s2w3gv4vm0j5hr0mw0000gn/T/48471408573c27bc45b79362e647c73a/arkade-os-snap-0.1.2.tgz","_integrity":"sha512-9MBgzewd0E9yYU/0Fh677Qn9Liwg6HrUME5oezFDMdTuLHRqrJECJaPigOwfB+6t7aij8qQKTR4B9HsS5I9H7g==","repository":{"url":"git+https://github.com/arkade-os/snap.git","type":"git"},"_npmVersion":"10.9.2","description":"Arkade Wallet Snap - Bitcoin Layer 2 wallet with Arkade protocol support","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@scure/base":"^2.0.0","@noble/curves":"^2.0.1","@arkade-os/sdk":"0.3.0","@scure/btc-signer":"^2.0.1","@metamask/snaps-sdk":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.45.0","rimraf":"^3.0.2","vitest":"^2.1.8","ts-jest":"^29.1.0","prettier":"^3.6.2","@vitest/ui":"^2.1.8","typescript":"^5.7.3","@jest/globals":"^29.5.0","eslint-plugin-n":"^15.7.0","eslint-plugin-jest":"^27.1.5","@metamask/snaps-cli":"^6.0.0","eslint-plugin-jsdoc":"^41.0.0","@metamask/snaps-jest":"^8.0.0","eslint-plugin-import":"^2.26.0","eslint-plugin-promise":"^6.1.1","@metamask/eslint-config":"^12.0.0","@typescript-eslint/parser":"^5.42.0","@metamask/eslint-config-jest":"^12.0.0","@metamask/eslint-config-nodejs":"^12.0.0","@typescript-eslint/eslint-plugin":"^5.42.0","@metamask/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/snap_0.1.2_1760789140670_0.4826444892613073","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-10-18T00:05:29.443Z","modified":"2026-09-08T19:29:47.745Z","0.1.0":"2025-10-18T00:05:29.796Z","0.1.1":"2025-10-18T00:11:14.099Z","0.1.2":"2025-10-18T12:05:40.907Z"},"bugs":{"url":"https://github.com/arkade-os/snap/issues"},"license":"MIT","homepage":"https://github.com/arkade-os/snap#readme","keywords":["metamask","snap","bitcoin","arkade","layer2","lightning","vtxo"],"repository":{"url":"git+https://github.com/arkade-os/snap.git","type":"git"},"description":"Arkade Wallet Snap - Bitcoin Layer 2 wallet with Arkade protocol support","maintainers":[{"email":"dev@pietro.uno","name":"pietro909"},{"email":"gringokiwi@icloud.com","name":"gringokiwi"},{"email":"evilkukka@gmail.com","name":"kukks"},{"email":"marco@vulpem.com","name":"tiero"},{"email":"louis@arklabs.to","name":"louisark"},{"email":"pietro@vulpem.com","name":"altafan"},{"email":"joao.bordalo@gmail.com","name":"bordalix"}],"readme":"# Arkade Wallet Snap\n\nA MetaMask Snap that brings Bitcoin Layer 2 functionality to your browser via the Ark protocol. This snap enables instant off-chain Bitcoin transactions (VTXOs), Lightning Network payments, and self-custodial Bitcoin management.\n\n![npm version](https://img.shields.io/npm/v/@arkade-os/snap)\n![license](https://img.shields.io/npm/l/@arkade-os/snap)\n\n## Features\n\n- **Bitcoin Key Management** - Secure key derivation using MetaMask's entropy\n- **Ark Protocol Support** - Off-chain Bitcoin transactions (VTXOs) that settle instantly\n- **Lightning Network** - Pay and receive Lightning invoices via submarine swaps\n- **Self-Custodial** - Your keys, your Bitcoin - no third-party custody\n- **Minimal & Secure** - Focused on signing operations only, keys never leave the snap\n\n## Installation\n\n### Prerequisites\n\n- [MetaMask Flask](https://metamask.io/flask/) - Developer version of MetaMask\n\n### Install the Snap\n\n```javascript\nawait ethereum.request({\n  method: 'wallet_requestSnaps',\n  params: {\n    'npm:@arkade-os/snap': {}\n  }\n});\n```\n\n## Usage\n\nThe Arkade Wallet Snap provides a minimal signing interface with 3 focused RPC methods:\n\n### Get Public Key\n\n```javascript\nconst response = await ethereum.request({\n  method: 'wallet_invokeSnap',\n  params: {\n    snapId: 'npm:@arkade-os/snap',\n    request: {\n      method: 'arkade_getPublicKey'\n    }\n  }\n});\n\n// Returns:\n// {\n//   compressedPublicKey: \"02...\",  // 33 bytes hex\n//   xOnlyPublicKey: \"...\"           // 32 bytes hex\n// }\n```\n\n### Get Ark Address\n\n```javascript\nconst response = await ethereum.request({\n  method: 'wallet_invokeSnap',\n  params: {\n    snapId: 'npm:@arkade-os/snap',\n    request: {\n      method: 'arkade_getAddress',\n      params: {\n        network: 'bitcoin',              // 'bitcoin' | 'testnet' | 'signet' | 'mutinynet' | 'regtest'\n        signerPubkey: '...',             // Server's x-only public key (64 hex chars)\n        unilateralExitDelay: '512'       // CSV timelock value from server\n      }\n    }\n  }\n});\n\n// Returns:\n// {\n//   address: \"ark1...\"  // Bech32m-encoded Ark address\n// }\n```\n\n### Sign PSBT\n\n```javascript\nconst response = await ethereum.request({\n  method: 'wallet_invokeSnap',\n  params: {\n    snapId: 'npm:@arkade-os/snap',\n    request: {\n      method: 'arkade_signPsbt',\n      params: {\n        psbt: 'cHNidP8B...',       // Base64-encoded PSBT\n        inputIndexes: [0, 1]        // Indexes of inputs to sign\n      }\n    }\n  }\n});\n\n// Returns:\n// {\n//   psbt: 'cHNidP8B...'  // Base64-encoded signed PSBT\n// }\n```\n\n## Architecture\n\nThis snap uses a **simplified provider pattern** where the snap only handles Bitcoin key management and signing operations. All wallet logic (balance queries, transaction history, Lightning operations) runs in your frontend application using the [Arkade SDK](https://www.npmjs.com/package/@arkade-os/sdk).\n\n```\n┌─────────────────────────────────────────┐\n│  Your Dapp                              │\n│  ┌────────────────────────────────┐    │\n│  │ Arkade SDK Wallet              │    │\n│  │  - Balance queries             │    │\n│  │  - Transaction history         │    │\n│  │  - Lightning operations        │    │\n│  │  - VTXO management             │    │\n│  └──────────┬─────────────────────┘    │\n│             │                            │\n│             │ (signing requests only)    │\n│             ▼                            │\n│  ┌────────────────────────────────┐    │\n│  │ Arkade Wallet Snap             │    │\n│  │  - arkade_getPublicKey()       │    │\n│  │  - arkade_getAddress()         │    │\n│  │  - arkade_signPsbt()           │    │\n│  └────────────────────────────────┘    │\n└─────────────────────────────────────────┘\n```\n\n### Benefits\n\n- **Simpler** - Minimal codebase focused on key operations\n- **Faster** - No RPC overhead for data queries\n- **More Secure** - Minimal attack surface, keys never leave snap\n- **More Flexible** - Update wallet logic without snap rebuild\n\n## Integration with Arkade SDK\n\nTo use this snap in your application, integrate it with the Arkade SDK using the `MetaMaskSnapIdentity` provider:\n\n```typescript\nimport { Wallet } from '@arkade-os/sdk';\nimport { MetaMaskSnapIdentity } from './MetaMaskSnapIdentity';\n\n// Create identity provider\nconst identity = new MetaMaskSnapIdentity(\n  'npm:@arkade-os/snap',\n  ethereum\n);\n\n// Create Arkade wallet\nconst wallet = new Wallet({\n  identity,\n  esploraUrl: 'https://blockstream.info/api',\n  arkServerUrl: 'https://ark.arkadeos.com'\n});\n\n// Use wallet methods\nconst balance = await wallet.getBalance();\nconst address = await wallet.getAddress();\n```\n\nFor a complete implementation example, see the [reference dapp](https://github.com/arkade-os/snap/tree/master/packages/site).\n\n## Permissions\n\nThis snap requires the following MetaMask permissions:\n\n- **`snap_getEntropy`** - Derive deterministic Bitcoin keys from MetaMask entropy\n- **`endowment:rpc`** - Accept RPC calls from dapps\n- **`endowment:network-access`** - Connect to Ark servers (for address validation)\n- **`snap_manageState`** - Persist configuration\n\n## Security\n\n- Private keys are **never exposed** to your dapp\n- Keys are derived deterministically from MetaMask's entropy\n- All signing operations happen within the snap's sandboxed environment\n- No key storage - keys derived on-demand\n\n## Development\n\n### Build from Source\n\n```bash\ngit clone https://github.com/arkade-os/snap.git\ncd arkade-snap/packages/snap\npnpm install\npnpm build\n```\n\n### Run Tests\n\n```bash\npnpm test\n```\n\n### Local Development\n\n```bash\npnpm start\n# Snap serves at http://localhost:8080\n```\n\n## Resources\n\n- [Arkade OS Documentation](https://arkadeos.com)\n- [Arkade SDK on npm](https://www.npmjs.com/package/@arkade-os/sdk)\n- [MetaMask Snaps Documentation](https://docs.metamask.io/snaps/)\n- [GitHub Repository](https://github.com/arkade-os/snap)\n- [Example Dapp](https://github.com/arkade-os/snap/tree/master/packages/site)\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/arkade-os/snap/issues)\n- **Documentation**: [Arkade Docs](https://arkadeos.com)\n- **Community**: [Discord](https://discord.gg/arkade) (replace with actual link)\n\n## License\n\nMIT License - see [LICENSE](https://github.com/arkade-os/snap/blob/master/LICENSE) for details\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n---\n\nBuilt with [MetaMask Snaps SDK](https://docs.metamask.io/snaps/) and [Arkade SDK](https://www.npmjs.com/package/@arkade-os/sdk)\n","readmeFilename":"README.md"}