{"_id":"@bordalix/insert-coin","name":"@bordalix/insert-coin","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"type":"module","version":"0.0.1","main":"./dist/index.js","types":"./dist/index.d.ts","name":"@bordalix/insert-coin","description":"A client-side Arkade paywall.","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"devDependencies":{"@types/node":"^24.10.1","typescript":"~5.9.3","prettier":"3.6.2","vitest":"^4.0.13","tsup":"^8.5.0","vite":"^7.2.4"},"dependencies":{"@arkade-os/boltz-swap":"0.2.10","@arkade-os/sdk":"^0.3.7","qr":"^0.5.2"},"engines":{"node":">=22"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","release:dry-run":"bash scripts/release.sh --dry-run","release:cleanup":"bash scripts/release.sh --cleanup","release":"bash scripts/release.sh","format":"prettier --write src test","lint":"prettier --check src test","preview":"vite preview","test":"vitest","dev":"vite"},"_id":"@bordalix/insert-coin@0.0.1","_integrity":"sha512-SBvcvqhFhhR1NiE5zmT2VCtFf6R/QtYpCEea2mzrNpnf1uDaQmnto96e33mKB7IK2wePwSDPF9YNykNmFJ/W4w==","_resolved":"/private/var/folders/3h/9n85mknn3vn2r1mnh6txbklr0000gn/T/7d36eaba14965c20b36788073cf12c93/bordalix-insert-coin-0.0.1.tgz","_from":"file:bordalix-insert-coin-0.0.1.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-SBvcvqhFhhR1NiE5zmT2VCtFf6R/QtYpCEea2mzrNpnf1uDaQmnto96e33mKB7IK2wePwSDPF9YNykNmFJ/W4w==","shasum":"9e33dd0fc144705bd871d56bff83bf6536a15660","tarball":"https://registry.npmjs.org/@bordalix/insert-coin/-/insert-coin-0.0.1.tgz","fileCount":6,"unpackedSize":38477,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCaU1hL+uTxnIfIIAaJyVWHDJb/Xx/BFreB7DaRWQ32sQIgML96SJAKF5En/25x4WXQJIQQlQKcbeCKqP0+y+6i4bE="}]},"_npmUser":{"name":"bordalix","email":"joao.bordalo@gmail.com"},"directories":{},"maintainers":[{"name":"bordalix","email":"joao.bordalo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/insert-coin_0.0.1_1763995700805_0.1097592438735"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-24T14:48:20.729Z","0.0.1":"2025-11-24T14:48:20.977Z","modified":"2025-11-24T14:48:21.247Z"},"maintainers":[{"name":"bordalix","email":"joao.bordalo@gmail.com"}],"description":"A client-side Arkade paywall.","readme":"# Insert coin\n\nA client-side paywall powered by Arkade\n\n## How it works\n\n### Flow\n\n- Creates an ephemeral wallet\n- Creates a reverse submarine swap\n- Returns qr code image tag and invoice\n- After payment, send sats to final recipient\n\n### Demo\n\nSee it working at https://arkade-invaders.pages.dev\n\n## How to use it\n\n### Install\n\n```bash\npnpm install insert-coin\n```\n\n### Create provider\n\nCreate an InsertCoin provider for the given servers and ark address as final recipient\n\n```typescript\n// create InsertCoin provider\nconst provider = await InsertCoin.create({\n    arkAddress: \"ark1...\", // the final recipient for the funds\n    arkServerUrl: \"https://arkade.computer\",\n    boltzApiUrl: \"https://api.ark.boltz.exchange\",\n    privateKey, // optional, uses ephemeral keys if no private key is provided\n    referralId, // optional, referral id to be used in Boltz swaps\n});\n```\n\n### Using callbacks\n\n```typescript\n// example function to show the returned info to the user\n// note: qrImage = <img src=\"data:image/gif;base64,...\" />\nfunction showQrCode(data: { invoice: string; qrImage: string }) {\n    document.querySelector<HTMLDivElement>(\"#paywall\")!.innerHtml = `\n    <p>${data.qrImage}</p>\n    <p>${data.invoice}</p>\n  `;\n}\n\n// example function to unlock the paid content\nfunction unlockContent() {\n    document.querySelector<HTMLDivElement>(\"#paywall\")!.style.display = \"none\";\n    document.querySelector<HTMLDivElement>(\"#content\")!.style.display = \"block\";\n}\n\n// request payment\nprovider.requestPayment({\n    amountSats: 500,\n    description: \"Insert coin\", // optional\n    onInvoice: showQrCode,\n    onPayment: unlockContent,\n});\n```\n\n### Using async/await\n\n```typescript\n// get invoice data\nconst invoiceData: {\n    amount: number; // the amount in sats you will receive\n    expiry: number; // swap expiration in unix epoch time\n    invoice: string; // bolt11 invoice\n    pendingSwap: PendingReverseSwap; // from @arkade-os/boltz-swap\n    preimage: string; // preimage (in hex) used to create invoice\n    qrImage: string; // <img src=\"data:image/gif;base64,...\" />\n} = await provider.requestInvoice({\n    amountSats: 500,\n    description: \"Insert coin\", // optional, defaults to \"Insert coin\"\n});\n\n// show qrcode and invoice to user\nshowQrCode(invoiceData);\n\n// wait for payment\nconst paymentData: { txid: string } = await provider.waitForPayment({\n    pendingSwap: invoiceData.pendingSwap,\n});\n\n// unlock paid content\nunlockPayment();\n```\n\n## Stack\n\n### Dependencies\n\n- @arkade-os/boltz-swap\n- @arkade-os/sdk\n- qr\n\n### Dev dependencies\n\n- typescript\n- prettier\n- vitest\n- vite\n- tsup\n\n## Development\n\nTo build it locally:\n\n```bash\ngit clone https://github.com/bordalix/insert-coin\ncd insert-coin\npnpm install\npnpm build\n```\n\nOther useful commands:\n\n```bash\npnpm lint\npnpm test\npnpm format\n```\n","readmeFilename":"README.md","_rev":"1-12897c7b7fd35ad8a2e07b190f0400f9"}