{"_id":"@abhyudday/x402-media-sdk","name":"@abhyudday/x402-media-sdk","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@abhyudday/x402-media-sdk","version":"1.0.0","description":"SDK for integrating x402 micropayment protocol into media streaming platforms on Solana","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepublishOnly":"npm run build","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["x402","solana","micropayments","streaming","media","blockchain","web3","pay-per-view","video","audio"],"author":{"name":"Abhyudday"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK.git"},"bugs":{"url":"https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK/issues"},"homepage":"https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK#readme","peerDependencies":{"@solana/wallet-adapter-base":"^0.9.0","@solana/wallet-adapter-react":"^0.15.0","@solana/web3.js":"^1.87.0"},"devDependencies":{"@types/node":"^20.10.0","typescript":"^5.3.0"},"dependencies":{},"_id":"@abhyudday/x402-media-sdk@1.0.0","gitHead":"09ec5681a1e027134500aa4ef8f1ce7c8e4b9b83","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-O9y6rUTaxqYrvydjykfbGFhra9opj4LMXc5H47geFpLSvepIf3BRgexGy+kq6wVVNEO/+CFSwNy1JE9+N+WHmQ==","shasum":"3d8ea869fc40e23055176b60d595b24d70570576","tarball":"https://registry.npmjs.org/@abhyudday/x402-media-sdk/-/x402-media-sdk-1.0.0.tgz","fileCount":15,"unpackedSize":39703,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHr52jWmtFj20qbio9FONKNyErdLkMtTgEvg/IQCkG25AiEAuFCWjc9agnva4eO+PtxKo19iM7W9FoLzIIabeMjUKdI="}]},"_npmUser":{"name":"abhyudday","email":"itsabhyuday@gmail.com"},"directories":{},"maintainers":[{"name":"abhyudday","email":"itsabhyuday@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/x402-media-sdk_1.0.0_1762794135325_0.34357974454534745"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-10T17:02:15.256Z","1.0.0":"2025-11-10T17:02:15.507Z","modified":"2025-11-10T17:02:15.806Z"},"maintainers":[{"name":"abhyudday","email":"itsabhyuday@gmail.com"}],"description":"SDK for integrating x402 micropayment protocol into media streaming platforms on Solana","homepage":"https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK#readme","keywords":["x402","solana","micropayments","streaming","media","blockchain","web3","pay-per-view","video","audio"],"repository":{"type":"git","url":"git+https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK.git"},"author":{"name":"Abhyudday"},"bugs":{"url":"https://github.com/Abhyudday/RENTFLIX---Solana-x402-SDK/issues"},"license":"MIT","readme":"# x402 Media SDK\n\nA TypeScript SDK for integrating x402 micropayment protocol into media streaming platforms on Solana. Enable pay-per-view/pay-per-listen experiences with automatic micropayments.\n\n## 🚀 Features\n\n- **Automatic Micropayments**: Pay-per-segment streaming with automatic payment processing\n- **Dynamic Pricing**: Support for time-based price multipliers\n- **Revenue Splitting**: Automatic 70/30 split between creators and platform\n- **Framework Agnostic**: Works with any JavaScript framework (React, Vue, Svelte, etc.)\n- **Wallet Compatible**: Works with all Solana wallet adapters\n- **TypeScript First**: Full type safety and IntelliSense support\n\n## 📦 Installation\n\n```bash\nnpm install @x402/media-sdk @solana/web3.js @solana/wallet-adapter-base\n```\n\nOr with yarn:\n\n```bash\nyarn add @x402/media-sdk @solana/web3.js @solana/wallet-adapter-base\n```\n\n## 🎯 Quick Start\n\n### Basic Usage\n\n```typescript\nimport { Connection } from '@solana/web3.js';\nimport { createX402Agent, createDefaultPricingConfig } from '@x402/media-sdk';\n\n// 1. Set up connection and wallet\nconst connection = new Connection('https://api.devnet.solana.com');\nconst wallet = yourWalletAdapter; // Any Solana wallet adapter\n\n// 2. Create x402 agent\nconst agent = createX402Agent({\n  connection,\n  wallet,\n  platformWallet: 'YOUR_PLATFORM_WALLET_ADDRESS', // Optional\n});\n\n// 3. Define your media content\nconst content = {\n  id: 'video-123',\n  title: 'My Awesome Video',\n  duration: 600, // 10 minutes\n  creatorWallet: 'CREATOR_WALLET_ADDRESS',\n  pricing: createDefaultPricingConfig(0.01, 'SOL'), // 0.01 SOL per minute\n};\n\n// 4. Start streaming with automatic payments\nawait agent.startAgent(content, {\n  onPaymentSuccess: (segment, amount, signature) => {\n    console.log(`✅ Paid ${amount} SOL for segment ${segment}`);\n  },\n  onPaymentFailed: (segment, error) => {\n    console.error(`❌ Payment failed for segment ${segment}:`, error);\n  },\n  onInsufficientFunds: () => {\n    alert('Insufficient funds! Please top up your wallet.');\n  },\n  onStatusChange: (status) => {\n    console.log('Agent status:', status);\n  },\n});\n\n// 5. Stop when done\nagent.stopAgent();\n```\n\n## 🎨 React Example\n\n```tsx\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useConnection, useWallet } from '@solana/wallet-adapter-react';\nimport { createX402Agent, X402PaymentAgent } from '@x402/media-sdk';\n\nfunction VideoPlayer({ videoUrl, content }) {\n  const { connection } = useConnection();\n  const wallet = useWallet();\n  const agentRef = useRef<X402PaymentAgent | null>(null);\n  const [totalPaid, setTotalPaid] = useState(0);\n  const [isPlaying, setIsPlaying] = useState(false);\n\n  useEffect(() => {\n    if (!wallet.publicKey) return;\n\n    // Create agent\n    const agent = createX402Agent({\n      connection,\n      wallet,\n      platformWallet: process.env.NEXT_PUBLIC_PLATFORM_WALLET,\n    });\n\n    agentRef.current = agent;\n\n    // Start agent when video plays\n    const startPayments = async () => {\n      await agent.startAgent(content, {\n        onPaymentSuccess: (segment, amount) => {\n          setTotalPaid(prev => prev + amount);\n        },\n        onInsufficientFunds: () => {\n          alert('Insufficient funds!');\n          setIsPlaying(false);\n        },\n      });\n    };\n\n    if (isPlaying) {\n      startPayments();\n    }\n\n    return () => {\n      agent.stopAgent();\n    };\n  }, [wallet.publicKey, isPlaying]);\n\n  return (\n    <div>\n      <video\n        src={videoUrl}\n        controls\n        onPlay={() => setIsPlaying(true)}\n        onPause={() => setIsPlaying(false)}\n      />\n      <p>Total paid: {totalPaid} SOL</p>\n    </div>\n  );\n}\n```\n\n## 🎵 Audio Streaming Example\n\n```typescript\nimport { createX402Agent } from '@x402/media-sdk';\n\n// Set up for audio streaming\nconst audioContent = {\n  id: 'podcast-456',\n  title: 'Tech Talk Episode 1',\n  duration: 3600, // 60 minutes\n  creatorWallet: 'CREATOR_WALLET',\n  pricing: {\n    basePrice: 0.001, // 0.001 SOL per minute\n    currency: 'SOL',\n    multipliers: [], // No dynamic pricing\n  },\n};\n\nconst agent = createX402Agent({ connection, wallet });\n\n// Start streaming\nawait agent.startAgent(audioContent, {\n  onPaymentSuccess: (segment, amount) => {\n    console.log(`Listening to minute ${segment + 1}`);\n  },\n});\n\n// Audio element controls\nconst audio = document.getElementById('audio-player');\naudio.addEventListener('ended', () => {\n  agent.stopAgent();\n});\n```\n\n## 💰 Dynamic Pricing\n\nAdd premium pricing for specific parts of your content:\n\n```typescript\nimport { createDefaultPricingConfig, addPriceMultiplier } from '@x402/media-sdk';\n\n// Start with base price\nlet pricing = createDefaultPricingConfig(0.01, 'SOL');\n\n// Add 2x pricing for climax scene (45:00 - 50:00)\npricing = addPriceMultiplier(\n  pricing,\n  2700, // 45 minutes in seconds\n  3000, // 50 minutes in seconds\n  2.0,  // 2x multiplier\n  'Epic climax scene'\n);\n\n// Add 3x pricing for exclusive bonus content (58:00 - 60:00)\npricing = addPriceMultiplier(\n  pricing,\n  3480, // 58 minutes\n  3600, // 60 minutes\n  3.0,\n  'Exclusive bonus content'\n);\n\nconst content = {\n  id: 'movie-789',\n  title: 'Blockbuster Movie',\n  duration: 3600,\n  creatorWallet: 'CREATOR_WALLET',\n  pricing,\n};\n```\n\n## 🎛️ Advanced Configuration\n\n### Custom Segment Duration\n\n```typescript\nconst agent = createX402Agent(\n  { connection, wallet },\n  {\n    segmentDuration: 30, // 30 second segments\n    paymentInterval: 30000, // Payment every 30 seconds\n  }\n);\n```\n\n### Custom Revenue Split\n\n```typescript\nconst agent = createX402Agent(\n  { connection, wallet },\n  {\n    revenueSplit: {\n      creator: 0.8,  // 80% to creator\n      platform: 0.2, // 20% to platform\n    },\n  }\n);\n```\n\n### Continue on Payment Failure\n\n```typescript\nconst agent = createX402Agent(\n  { connection, wallet },\n  {\n    continueOnFailure: true, // Keep playing even if payment fails\n  }\n);\n```\n\n## 📊 Monitoring & Status\n\n```typescript\n// Get current status\nconst status = agent.getStatus();\nconsole.log('Active:', status.isActive);\nconsole.log('Current segment:', status.currentSegment);\nconsole.log('Segments paid:', status.segmentsPaid);\nconsole.log('Total paid:', status.totalPaid);\n\n// Check if specific segment is paid\nif (agent.isSegmentPaid(5)) {\n  console.log('Segment 5 is paid');\n}\n\n// Reset for new content\nagent.reset();\n```\n\n## 🛠️ Pricing Utilities\n\n```typescript\nimport {\n  calculateSegmentPrice,\n  calculateTotalPrice,\n  getSegmentNumber,\n  durationToSegments,\n  formatPrice,\n  isSegmentPremium,\n} from '@x402/media-sdk';\n\n// Calculate price for a specific segment\nconst price = calculateSegmentPrice(5, pricingConfig);\n\n// Calculate total price for range\nconst totalPrice = calculateTotalPrice(0, 10, pricingConfig);\n\n// Get segment from timestamp\nconst segment = getSegmentNumber(125); // Returns 2 (for 60s segments)\n\n// Convert duration to segments\nconst segments = durationToSegments(3600); // Returns 60 (for 60min video)\n\n// Format price for display\nconst formatted = formatPrice(0.05, 'SOL'); // Returns \"0.0500 SOL\"\n\n// Check if segment has premium pricing\nconst { isPremium, multiplier } = isSegmentPremium(5, pricingConfig);\n```\n\n## 🔐 Security Best Practices\n\n1. **Never expose private keys**: Always use wallet adapters\n2. **Validate wallet addresses**: Ensure creator and platform wallets are valid\n3. **Test on devnet first**: Always test thoroughly before mainnet\n4. **Handle errors gracefully**: Implement proper error handling\n5. **Monitor transactions**: Log all payment attempts and confirmations\n\n## 🌐 Framework Examples\n\n### Vue.js\n\n```vue\n<template>\n  <video ref=\"videoEl\" @play=\"startPayments\" @pause=\"stopPayments\">\n    <source :src=\"videoUrl\" />\n  </video>\n  <p>Total Paid: {{ totalPaid }} SOL</p>\n</template>\n\n<script setup>\nimport { ref, onUnmounted } from 'vue';\nimport { createX402Agent } from '@x402/media-sdk';\n\nconst agent = createX402Agent({ connection, wallet });\nconst totalPaid = ref(0);\n\nconst startPayments = async () => {\n  await agent.startAgent(content, {\n    onPaymentSuccess: (seg, amt) => {\n      totalPaid.value += amt;\n    },\n  });\n};\n\nconst stopPayments = () => agent.stopAgent();\nonUnmounted(() => agent.stopAgent());\n</script>\n```\n\n### Svelte\n\n```svelte\n<script>\n  import { createX402Agent } from '@x402/media-sdk';\n  \n  let totalPaid = 0;\n  const agent = createX402Agent({ connection, wallet });\n  \n  async function handlePlay() {\n    await agent.startAgent(content, {\n      onPaymentSuccess: (seg, amt) => {\n        totalPaid += amt;\n      },\n    });\n  }\n  \n  function handlePause() {\n    agent.stopAgent();\n  }\n</script>\n\n<video on:play={handlePlay} on:pause={handlePause}>\n  <source src={videoUrl} />\n</video>\n<p>Total Paid: {totalPaid} SOL</p>\n```\n\n## 📚 API Reference\n\n### X402PaymentAgent\n\nMain class for handling payments.\n\n#### Methods\n\n- `startAgent(content, callbacks)` - Start automatic payment processing\n- `stopAgent()` - Stop payment processing\n- `getStatus()` - Get current agent status\n- `isSegmentPaid(segment)` - Check if segment is paid\n- `reset()` - Reset agent state\n- `payForSegment(segment, content, callbacks)` - Manually pay for a segment\n\n### Types\n\nSee [types.ts](./src/types.ts) for full type definitions.\n\n## 🤝 Contributing\n\nContributions welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## 📄 License\n\nMIT License - see [LICENSE](./LICENSE) file.\n\n## 🔗 Links\n\n- [Documentation](https://github.com/yourusername/x402-media-sdk)\n- [Examples](./examples)\n- [Solana x402 Protocol](https://solana.com/x402)\n- [Report Issues](https://github.com/yourusername/x402-media-sdk/issues)\n\n## 💡 Support\n\n- GitHub Issues: [Report a bug](https://github.com/yourusername/x402-media-sdk/issues)\n- Discord: [Join our community](https://discord.gg/your-discord)\n- Twitter: [@yourusername](https://twitter.com/yourusername)\n\n---\n\nBuilt with ❤️ for the Solana x402 ecosystem\n","readmeFilename":"README.md","_rev":"1-f861e64b45375401c45854666e2ac867"}