{"_id":"@aniflixx/partner-sdk","_rev":"2-401c40745f6ad59ade868f1a791b355f","name":"@aniflixx/partner-sdk","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@aniflixx/partner-sdk","version":"1.0.0","keywords":["aniflixx","anime","sdk","api"],"author":{"name":"Aniflixx"},"license":"MIT","_id":"@aniflixx/partner-sdk@1.0.0","maintainers":[{"name":"aniflixx","email":"info@aniflixx.com"}],"homepage":"https://aniflixx.com/documentation","dist":{"shasum":"91f6f4715aea0b29fd3123582c2c621acb824588","tarball":"https://registry.npmjs.org/@aniflixx/partner-sdk/-/partner-sdk-1.0.0.tgz","fileCount":4,"integrity":"sha512-b6siGHJVJ84vzDE5+GTzL9XbTuas49U/aQuhX7m3OmC09Muv1pJikohrAyose/5v08gf4UbhRpRsWpP2n9LR/Q==","signatures":[{"sig":"MEUCIQC11esrIVhr+T6Sur94Yx93X6MJ4vFV7W9XuBWc0IdtRgIgJoHMQl3hh7H/cCTEwOt+2EVbPLTr0MV6y6FfN1EXK6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32860},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.umd.js","gitHead":"8f855731cad5dae618874ab211e1b6578243c88a","scripts":{"build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"aniflixx","email":"info@aniflixx.com"},"_npmVersion":"11.3.0","description":"The official Aniflixx Partner SDK for accessing studio content and analytics.","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.26.0","@babel/core":"^7.22.0","@babel/preset-env":"^7.22.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-node-resolve":"^15.1.0"},"_npmOperationalInternal":{"tmp":"tmp/partner-sdk_1.0.0_1760472471435_0.762648980216323","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aniflixx/partner-sdk","version":"1.0.1","description":"The official Aniflixx Partner SDK for accessing studio content and analytics.","type":"module","main":"dist/index.cjs.js","browser":"dist/index.umd.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c && cp src/index.d.ts dist/index.d.ts","prepublishOnly":"npm run build","test":"echo \"No tests yet\" && exit 0"},"repository":{"type":"git","url":"git+https://github.com/aniflixx/partner-sdk.git"},"bugs":{"url":"https://github.com/aniflixx/partner-sdk/issues","email":"partners@aniflixx.com"},"homepage":"https://aniflixx.com/documentation","keywords":["aniflixx","anime","manga","webtoon","streaming","content","partner","sdk","api","distribution"],"author":{"name":"Aniflixx","email":"partners@aniflixx.com","url":"https://aniflixx.com"},"license":"MIT","engines":{"node":">=14.0.0"},"devDependencies":{"@babel/core":"^7.22.0","@babel/preset-env":"^7.22.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-terser":"^0.4.4","rollup":"^3.26.0"},"_id":"@aniflixx/partner-sdk@1.0.1","gitHead":"8f855731cad5dae618874ab211e1b6578243c88a","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-usFGcSIkm9Y71SaQgThT3IzFyElFEnP5Md/b9qT6zGX+I07Gj/dJ3waBm4pn7l3tLQID8mUQtlXjhdvEJy1h8Q==","shasum":"4627ac322fee4be763784243d25363b5c2f99cd0","tarball":"https://registry.npmjs.org/@aniflixx/partner-sdk/-/partner-sdk-1.0.1.tgz","fileCount":6,"unpackedSize":84470,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICjlph7jHOCndI4bmL6cQeozs2jfqP+Dco0w1HhWu2lrAiEA5OTzzi+gmpQEkMg62iIXooCoRbqeL8LBA9R5zxqjdoI="}]},"_npmUser":{"name":"aniflixx","email":"info@aniflixx.com"},"directories":{},"maintainers":[{"name":"aniflixx","email":"info@aniflixx.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/partner-sdk_1.0.1_1761785598997_0.605515585787239"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-14T20:07:51.375Z","modified":"2025-10-30T00:53:19.456Z","1.0.0":"2025-10-14T20:07:51.632Z","1.0.1":"2025-10-30T00:53:19.198Z"},"author":{"name":"Aniflixx","email":"partners@aniflixx.com","url":"https://aniflixx.com"},"license":"MIT","homepage":"https://aniflixx.com/documentation","keywords":["aniflixx","anime","manga","webtoon","streaming","content","partner","sdk","api","distribution"],"description":"The official Aniflixx Partner SDK for accessing studio content and analytics.","maintainers":[{"name":"aniflixx","email":"info@aniflixx.com"}],"readme":"# Aniflixx Partner SDK\n\nThe official JavaScript/TypeScript SDK for Aniflixx Partner API. Access anime, manga, and other content from Aniflixx's platform for integration into your own applications.\n\n## Features\n\n- 🔐 **Secure Authentication** - Token-based authentication with automatic renewal\n- 📚 **Content Catalog** - Access to licensed anime, manga, and webtoon content\n- 🎬 **Streaming** - Get stream URLs for video and manga content\n- 🔍 **Search** - Search through available content\n- 📊 **Analytics** - Track your API usage and content performance\n- 🔄 **Auto-Retry** - Automatic retry logic with exponential backoff\n- 📱 **Universal** - Works in Node.js and browsers\n- 🎯 **TypeScript** - Full TypeScript support with complete type definitions\n\n## Installation\n\n```bash\nnpm install @aniflixx/partner-sdk\n```\n\n## Quick Start\n\n```javascript\nconst AnimeSDK = require('@aniflixx/partner-sdk');\n\n// Initialize SDK with your credentials\nconst sdk = new AnimeSDK({\n  apiKey: 'your-api-key',\n  apiSecret: 'your-api-secret'\n});\n\n// Authenticate\nawait sdk.authenticate();\n\n// Get content catalog\nconst catalog = await sdk.getContentCatalog();\nconsole.log(`Found ${catalog.total_series} series`);\n\n// Get episode stream\nconst stream = await sdk.getEpisodeStream('episode-id');\nconsole.log('Stream URL:', stream.stream_data.stream_url);\n```\n\n## Configuration\n\n### Options\n\n```javascript\nconst sdk = new AnimeSDK({\n  apiKey: 'your-api-key',        // Required: Your Partner API key\n  apiSecret: 'your-api-secret',  // Required: Your Partner API secret\n  baseURL: 'https://...',        // Optional: Custom API base URL (defaults to production)\n  autoRetry: true,               // Optional: Enable automatic retries (default: true)\n  maxRetries: 3                  // Optional: Maximum retry attempts (default: 3)\n});\n```\n\n## Authentication\n\nThe SDK handles authentication automatically. You only need to provide your API credentials during initialization.\n\n```javascript\nconst sdk = new AnimeSDK({\n  apiKey: 'your-api-key',\n  apiSecret: 'your-api-secret'\n});\n\n// Authenticate (called automatically on first API request)\nconst authResponse = await sdk.authenticate();\n\n// Authentication tokens are cached and renewed automatically\n// Token expires in 24 hours\n```\n\nTo manually clear authentication (force re-authentication):\n\n```javascript\nsdk.clearAuth();\n```\n\n## API Methods\n\n### Get Content Catalog\n\nRetrieve all series and episodes available to your partner account.\n\n```javascript\nconst catalog = await sdk.getContentCatalog();\n\nconsole.log(`Partner ID: ${catalog.partner_id}`);\nconsole.log(`Total Series: ${catalog.total_series}`);\n\ncatalog.content.forEach(series => {\n  console.log(`${series.title} (${series.type})`);\n  console.log(`  Episodes: ${series.episodes.length}`);\n  console.log(`  Views: ${series.view_count}`);\n});\n```\n\n**Response:**\n```typescript\n{\n  success: boolean;\n  partner_id: string;\n  total_series: number;\n  content: Array<{\n    id: string;\n    title: string;\n    title_english?: string;\n    type: 'anime' | 'manga' | 'webtoon' | 'light_novel';\n    description?: string;\n    cover_image?: string;\n    status: string;\n    view_count: number;\n    genres: string[];\n    tags: string[];\n    episodes: Episode[];\n  }>;\n}\n```\n\n### Get Series Details\n\nGet detailed information about a specific series including all episodes.\n\n```javascript\nconst series = await sdk.getSeries('series-id');\n\nconsole.log(`Title: ${series.series.title}`);\nconsole.log(`Type: ${series.series.type}`);\nconsole.log(`Episodes: ${series.episodes.length}`);\n```\n\n### Get Episode Stream\n\nGet streaming URLs for video content or page URLs for manga/webtoon content.\n\n```javascript\nconst stream = await sdk.getEpisodeStream('episode-id');\n\nif (stream.episode.type === 'video') {\n  console.log('Video URL:', stream.stream_data.stream_url);\n} else if (stream.episode.type === 'manga') {\n  console.log('Pages:', stream.stream_data.pages.length);\n  stream.stream_data.pages.forEach((page, index) => {\n    console.log(`Page ${index + 1}: ${page.url}`);\n  });\n}\n```\n\n### Search Content\n\nSearch through available content by title.\n\n```javascript\nconst results = await sdk.searchContent('naruto');\n\nconsole.log(`Found ${results.total} results`);\nresults.results.forEach(series => {\n  console.log(`- ${series.title} (${series.type})`);\n});\n```\n\n### Get Analytics\n\nGet analytics about your API usage and content performance.\n\n```javascript\nconst analytics = await sdk.getAnalytics();\n\nconsole.log('Stats:', analytics.stats);\nconsole.log(`Total Episodes Accessed: ${analytics.stats.total_episodes_accessed}`);\nconsole.log(`Total Views: ${analytics.stats.total_views}`);\nconsole.log(`Series Accessed: ${analytics.stats.total_series_accessed}`);\n\nconsole.log('\\nTop Series:');\nanalytics.top_series.forEach((series, index) => {\n  console.log(`${index + 1}. ${series.title} - ${series.total_views} views`);\n});\n```\n\n## Error Handling\n\nThe SDK throws `AnimeSDKError` for API errors:\n\n```javascript\ntry {\n  const catalog = await sdk.getContentCatalog();\n} catch (error) {\n  if (error instanceof AnimeSDK.AnimeSDKError) {\n    console.error('API Error:', error.message);\n    console.error('Status Code:', error.statusCode);\n    console.error('Response:', error.response);\n  } else {\n    console.error('Network Error:', error.message);\n  }\n}\n```\n\n### Common Error Codes\n\n- `400` - Bad Request (missing or invalid parameters)\n- `401` - Unauthorized (invalid credentials or expired token)\n- `403` - Forbidden (no access to requested resource)\n- `404` - Not Found (resource doesn't exist)\n- `429` - Too Many Requests (rate limit exceeded)\n- `500` - Internal Server Error\n\n## Examples\n\nSee the [examples](./examples) directory for complete integration examples:\n\n- **[basic-auth.js](./examples/basic-auth.js)** - Simple authentication\n- **[catalog-fetch.js](./examples/catalog-fetch.js)** - Fetching content catalog\n- **[stream-episode.js](./examples/stream-episode.js)** - Streaming episodes\n- **[search-content.js](./examples/search-content.js)** - Searching content\n- **[analytics-tracking.js](./examples/analytics-tracking.js)** - Tracking analytics\n- **[nodejs-server.js](./examples/nodejs-server.js)** - Full Node.js server example\n\n## TypeScript Support\n\nThe SDK includes complete TypeScript definitions:\n\n```typescript\nimport AnimeSDK, { \n  AnimeSDKOptions, \n  ContentCatalogResponse,\n  EpisodeStreamResponse,\n  AnalyticsResponse \n} from '@aniflixx/partner-sdk';\n\nconst sdk = new AnimeSDK({\n  apiKey: process.env.ANIFLIXX_API_KEY!,\n  apiSecret: process.env.ANIFLIXX_API_SECRET!\n});\n\nconst catalog: ContentCatalogResponse = await sdk.getContentCatalog();\n```\n\n## Best Practices\n\n### 1. Store Credentials Securely\n\nNever commit credentials to version control. Use environment variables:\n\n```javascript\nconst sdk = new AnimeSDK({\n  apiKey: process.env.ANIFLIXX_API_KEY,\n  apiSecret: process.env.ANIFLIXX_API_SECRET\n});\n```\n\n### 2. Handle Errors Gracefully\n\nAlways wrap SDK calls in try-catch blocks:\n\n```javascript\ntry {\n  const catalog = await sdk.getContentCatalog();\n  // Process catalog\n} catch (error) {\n  // Log error and show user-friendly message\n  console.error('Failed to fetch catalog:', error);\n}\n```\n\n### 3. Reuse SDK Instance\n\nCreate one SDK instance and reuse it throughout your application:\n\n```javascript\n// sdk.js\nconst AnimeSDK = require('@aniflixx/partner-sdk');\n\nconst sdk = new AnimeSDK({\n  apiKey: process.env.ANIFLIXX_API_KEY,\n  apiSecret: process.env.ANIFLIXX_API_SECRET\n});\n\nmodule.exports = sdk;\n```\n\n### 4. Respect Rate Limits\n\nThe Partner API has rate limits. Implement caching where appropriate:\n\n```javascript\n// Cache catalog data for 5 minutes\nconst cache = new Map();\nconst CACHE_TTL = 5 * 60 * 1000;\n\nasync function getCachedCatalog() {\n  const cached = cache.get('catalog');\n  if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n    return cached.data;\n  }\n  \n  const catalog = await sdk.getContentCatalog();\n  cache.set('catalog', { data: catalog, timestamp: Date.now() });\n  return catalog;\n}\n```\n\n### 5. Monitor Analytics\n\nRegularly check your API usage:\n\n```javascript\n// Check analytics daily\nsetInterval(async () => {\n  const analytics = await sdk.getAnalytics();\n  console.log('Daily API usage:', analytics.stats);\n}, 24 * 60 * 60 * 1000);\n```\n\n## Browser Usage\n\nThe SDK works in browsers via UMD build:\n\n```html\n<script src=\"node_modules/@aniflixx/partner-sdk/dist/index.umd.js\"></script>\n<script>\n  const sdk = new AniflixxSDK({\n    apiKey: 'your-api-key',\n    apiSecret: 'your-api-secret'\n  });\n  \n  sdk.authenticate().then(() => {\n    return sdk.getContentCatalog();\n  }).then(catalog => {\n    console.log('Catalog:', catalog);\n  });\n</script>\n```\n\n**Note:** For security, avoid exposing API credentials in client-side code. Use a backend proxy instead.\n\n## Rate Limits\n\n- **Authentication**: 10 requests per minute\n- **Content Endpoints**: 100 requests per minute per partner\n- **Streaming Endpoints**: 100 requests per minute per partner\n\nRate limits are enforced per partner account. If you exceed limits, you'll receive a `429 Too Many Requests` error.\n\n## Support\n\n- **Documentation**: [https://aniflixx.com/documentation](https://aniflixx.com/documentation)\n- **API Reference**: See [PARTNER_API.md](../PARTNER_API.md)\n- **Issues**: Contact your partner account manager\n- **Email**: partners@aniflixx.com\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Changelog\n\n### 1.0.0 (Current)\n- Initial release\n- Authentication flow\n- Content catalog access\n- Episode streaming\n- Content search\n- Analytics tracking\n- Auto-retry with exponential backoff\n- TypeScript support\n\n","readmeFilename":"README.md","repository":{"type":"git","url":"git+https://github.com/aniflixx/partner-sdk.git"},"bugs":{"url":"https://github.com/aniflixx/partner-sdk/issues","email":"partners@aniflixx.com"}}