{"_id":"@99technologies/s2a-sdk","_rev":"5-05b44309127940bc80764895be104c52","name":"@99technologies/s2a-sdk","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@99technologies/s2a-sdk","version":"1.0.0","keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","_id":"@99technologies/s2a-sdk@1.0.0","maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"homepage":"https://github.com/99technologies-ai/s2a","bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"dist":{"shasum":"609dee025120de5c5cd80b04896356fdc71ad34f","tarball":"https://registry.npmjs.org/@99technologies/s2a-sdk/-/s2a-sdk-1.0.0.tgz","fileCount":17,"integrity":"sha512-aMQHiSaBLcon1HC5g80P7vrzwDHedtwUR6YtqmxRis03qEUGM5y4o3Dwq5W62HMzj2aRYcBXJfytH6fI0BXSow==","signatures":[{"sig":"MEQCIEMUgBF2r87ZE/V7GONIHYGK4FoEz6RnNa32bfANCLc/AiAbwN675qgpocwTftco+8i7LHhUGyzqxXpeD5pnA0y1Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69947},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"b55af588653b9d3aa56ca3a84be6b6082420cf48","scripts":{"dev":"tsc --watch","lint":"eslint src/ --ext .ts,.js","test":"jest","build":"tsc","lint:fix":"eslint src/ --ext .ts,.js --fix","prepublishOnly":"npm run build"},"_npmUser":{"name":"user-99","email":"areeb.shahzad@99technologies.com"},"repository":{"url":"git+https://github.com/99technologies-ai/s2a.git","type":"git","directory":"sdk/javascript"},"_npmVersion":"10.8.2","description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ws":"^8.14.0","axios":"^1.6.0","form-data":"^4.0.0","mime-types":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.50.0","@types/ws":"^8.5.0","typescript":"^5.9.2","@types/node":"^20.8.0","@types/mime-types":"^2.1.0","@typescript-eslint/parser":"^6.7.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"_npmOperationalInternal":{"tmp":"tmp/s2a-sdk_1.0.0_1759190535232_0.36380706611000146","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@99technologies/s2a-sdk","version":"1.0.1","keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","_id":"@99technologies/s2a-sdk@1.0.1","maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"homepage":"https://github.com/99technologies-ai/s2a","bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"dist":{"shasum":"4451c7ece5aa32ca6790a4a0ef38431102444603","tarball":"https://registry.npmjs.org/@99technologies/s2a-sdk/-/s2a-sdk-1.0.1.tgz","fileCount":17,"integrity":"sha512-XnmQ8GzbXeh0jgyO93HQapAeLKdRxgpFAjfddOcexEh3bRGc6SpqH8AascPHBZaC5lEIpEogTk3/6MxZUO5Mrw==","signatures":[{"sig":"MEQCIA1qNRMlGrrWtxx7GB7yppJZvToss8iVpke6erJbGGvLAiAg5t69+3Uc3mkLGTretOAeIVLgneJWrP0QvhwDEFbRsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71312},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"cde940a009bebfea0270f6254d95db6f097e39fe","scripts":{"dev":"tsc --watch","lint":"eslint src/ --ext .ts,.js","test":"jest","build":"tsc","lint:fix":"eslint src/ --ext .ts,.js --fix","prepublishOnly":"npm run build"},"_npmUser":{"name":"user-99","email":"areeb.shahzad@99technologies.com"},"repository":{"url":"git+https://github.com/99technologies-ai/s2a.git","type":"git","directory":"sdk/javascript"},"_npmVersion":"10.8.2","description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ws":"^8.14.0","axios":"^1.6.0","form-data":"^4.0.0","mime-types":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.50.0","@types/ws":"^8.5.0","typescript":"^5.9.2","@types/node":"^20.8.0","@types/mime-types":"^2.1.0","@typescript-eslint/parser":"^6.7.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"_npmOperationalInternal":{"tmp":"tmp/s2a-sdk_1.0.1_1759357546231_0.09255946898050671","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@99technologies/s2a-sdk","version":"1.0.2","keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","_id":"@99technologies/s2a-sdk@1.0.2","maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"homepage":"https://github.com/99technologies-ai/s2a","bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"dist":{"shasum":"36c0c33a7810e85017e33713ae49621d07f60d65","tarball":"https://registry.npmjs.org/@99technologies/s2a-sdk/-/s2a-sdk-1.0.2.tgz","fileCount":17,"integrity":"sha512-wGiGj7HMysIE5De3EdoEYYVgQR2pXSBZqQpRUiWeN4FJl/Tlix20f+80TDi3GtV51l5vKf27sEtnshNNmD0s+w==","signatures":[{"sig":"MEYCIQCIMdQlBlcXroZkS/IlTSSBZX+tPeo03d4AigXm2yNcYgIhAPJ15TLP2KMa+0lBwzqX+nwt6EuN6+p4WN6vlPBo4SJ8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71312},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"5f5f713c17205af3532ef1ce00a0118e6ca80e9c","scripts":{"dev":"tsc --watch","lint":"eslint src/ --ext .ts,.js","test":"jest","build":"tsc","lint:fix":"eslint src/ --ext .ts,.js --fix","prepublishOnly":"npm run build"},"_npmUser":{"name":"user-99","email":"areeb.shahzad@99technologies.com"},"repository":{"url":"git+https://github.com/99technologies-ai/s2a.git","type":"git","directory":"sdk/javascript"},"_npmVersion":"10.8.2","description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ws":"^8.14.0","axios":"^1.6.0","form-data":"^4.0.0","mime-types":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.50.0","@types/ws":"^8.5.0","typescript":"^5.9.2","@types/node":"^20.8.0","@types/mime-types":"^2.1.0","@typescript-eslint/parser":"^6.7.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"_npmOperationalInternal":{"tmp":"tmp/s2a-sdk_1.0.2_1759358251272_0.2810526619033009","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@99technologies/s2a-sdk","version":"1.0.3","keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","_id":"@99technologies/s2a-sdk@1.0.3","maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"homepage":"https://github.com/99technologies-ai/s2a","bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"dist":{"shasum":"9ccb1fa89c4d13e1a950f0460eb57922b4377ea6","tarball":"https://registry.npmjs.org/@99technologies/s2a-sdk/-/s2a-sdk-1.0.3.tgz","fileCount":17,"integrity":"sha512-OhX3/zCbGbJIuL1NFbwpAmKzenUAbDpOxyeGcil1w7p+icql4JTDld6jg6OSVCsAekQvAJRmkEIz/TaS8647pg==","signatures":[{"sig":"MEYCIQDOXdLusUghrHXrJDeTL/YWfjxd/5A9OmVN1rJJKN6WMwIhAO+gA1kl9r3XWZCOkDq6wyoUVm16owzN0BNXk6gXacDH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71188},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0.0"},"gitHead":"6a5a7ff378774e49a5432c777e2c6eef72f05555","scripts":{"dev":"tsc --watch","lint":"eslint src/ --ext .ts,.js","test":"jest","build":"tsc","lint:fix":"eslint src/ --ext .ts,.js --fix","prepublishOnly":"npm run build"},"_npmUser":{"name":"user-99","email":"areeb.shahzad@99technologies.com"},"repository":{"url":"git+https://github.com/99technologies-ai/s2a.git","type":"git","directory":"sdk/javascript"},"_npmVersion":"10.8.2","description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ws":"^8.14.0","axios":"^1.6.0","form-data":"^4.0.0","mime-types":"^2.1.35"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.50.0","@types/ws":"^8.5.0","typescript":"^5.9.2","@types/node":"^20.8.0","@types/mime-types":"^2.1.0","@typescript-eslint/parser":"^6.7.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"_npmOperationalInternal":{"tmp":"tmp/s2a-sdk_1.0.3_1760811785090_0.8913869520478572","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@99technologies/s2a-sdk","version":"1.0.4","description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","lint":"eslint src/ --ext .ts,.js","lint:fix":"eslint src/ --ext .ts,.js --fix","prepublishOnly":"npm run build"},"keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","homepage":"https://github.com/99technologies-ai/s2a","repository":{"type":"git","url":"git+https://github.com/99technologies-ai/s2a.git","directory":"sdk/javascript"},"bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"engines":{"node":">=14.0.0"},"dependencies":{"axios":"^1.6.0","ws":"^8.14.0","form-data":"^4.0.0","mime-types":"^2.1.35"},"devDependencies":{"@types/node":"^20.8.0","@types/ws":"^8.5.0","@types/mime-types":"^2.1.0","@typescript-eslint/eslint-plugin":"^6.7.0","@typescript-eslint/parser":"^6.7.0","eslint":"^8.50.0","jest":"^29.7.0","typescript":"^5.9.2"},"_id":"@99technologies/s2a-sdk@1.0.4","gitHead":"7af01f571c9d5c849c3addc79a99eae717cb2a40","_nodeVersion":"20.19.4","_npmVersion":"10.8.2","dist":{"integrity":"sha512-vMuVu3kVSmhyNJxApQ+QLs2os9Fx+pXLHVPPqalv2dA+k+uo8LXyZ9xa3djh4tvKwa4ODCEchUpabrMcDIvr8g==","shasum":"7d289ca67a33f4718e78498a42e5521919c9f379","tarball":"https://registry.npmjs.org/@99technologies/s2a-sdk/-/s2a-sdk-1.0.4.tgz","fileCount":17,"unpackedSize":71182,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFlshyGF0EWTCFxiBN7jC8j48UXWjEioJuTXMs2NiLrHAiEAn5NrvI3kBoS4pyMvgwhFPMqZkZk5dFDqfk/U//fh9Io="}]},"_npmUser":{"name":"user-99","email":"areeb.shahzad@99technologies.com"},"directories":{},"maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/s2a-sdk_1.0.4_1760820522112_0.2550055029365794"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-30T00:02:15.154Z","modified":"2025-10-18T20:48:42.555Z","1.0.0":"2025-09-30T00:02:15.425Z","1.0.1":"2025-10-01T22:25:46.423Z","1.0.2":"2025-10-01T22:37:31.473Z","1.0.3":"2025-10-18T18:23:05.326Z","1.0.4":"2025-10-18T20:48:42.333Z"},"bugs":{"url":"https://github.com/99technologies-ai/s2a/issues"},"author":{"name":"99Technologies AI","email":"support@99technologies.ai"},"license":"MIT","homepage":"https://github.com/99technologies-ai/s2a","keywords":["speech-to-text","transcription","ai","business-intelligence","s2a","audio","nlp","speech-recognition"],"repository":{"type":"git","url":"git+https://github.com/99technologies-ai/s2a.git","directory":"sdk/javascript"},"description":"Official JavaScript SDK for S2A Speech-to-Actions Platform","maintainers":[{"name":"user-99","email":"areeb.shahzad@99technologies.com"}],"readme":"# S2A JavaScript/TypeScript SDK\n\n[![npm version](https://badge.fury.io/js/%4099technologies%2Fs2a-sdk.svg)](https://badge.fury.io/js/%4099technologies%2Fs2a-sdk)\n[![Node.js versions](https://img.shields.io/node/v/@99technologies/s2a-sdk.svg)](https://www.npmjs.com/package/@99technologies/s2a-sdk)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\nOfficial JavaScript/TypeScript SDK for the S2A (Speech-to-Actions) Platform - Transform audio into actionable business intelligence.\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\n# npm\nnpm install @99technologies/s2a-sdk\n\n# yarn\nyarn add @99technologies/s2a-sdk\n\n# pnpm\npnpm add @99technologies/s2a-sdk\n```\n\n### Basic Usage\n\n```typescript\nimport { S2AClient } from '@99technologies/s2a-sdk';\n\n// Initialize client\nconst client = new S2AClient({\n  apiKey: 'bp-proj-your-api-key'\n});\n\n// Async transcription (for audio > 2 minutes or up to 2 hours)\nconst job = await client.transcribeAsync('meeting.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook',\n  enhanceAudio: true\n});\n\nconsole.log(`Job ID: ${job.jobId}`);\n\n// Wait for completion\nconst result = await client.waitForCompletion(job.jobId);\nconsole.log(`Transcript: ${result.transcription.text}`);\n\n## 🎯 Key Features\n\n### **Multi-Stage Intelligence Extraction**\n- **Quick Intelligence** (1-2s): Immediate insights for real-time applications\n- **Enhanced Intelligence** (5-15s): Comprehensive 50+ field business analysis\n- **Auto-Detection**: Automatically identifies sales, support, or general conversations\n\n### **Comprehensive Business Intelligence**\n- **Action Items**: Task extraction with assignees, priorities, and due dates\n- **Entity Recognition**: People, companies, products, financial data, contacts\n- **Conversation Analysis**: Speaker identification, talk-time, interaction metrics\n- **Business Context**: Sales opportunities, support issues, meeting insights\n\n### **Professional SDK Features**\n- **Full TypeScript Support**: Complete type definitions with IntelliSense\n- **Error Handling**: Automatic retries with exponential backoff\n- **Audio Validation**: Built-in format and duration validation\n- **Async Support**: Both sync and async processing workflows\n- **Universal Compatibility**: Works in Node.js and modern browsers\n\n## 📚 API Documentation\n\n### Core Methods\n\n#### `transcribeAsync(audioFile, options)`\n**Asynchronous transcription (min 1 sec and max 5 hours)**\n```typescript```\n\nconst job = await client.transcribeAsync('long_meeting.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook',\n  priority: Priority.HIGH,\n  enhanceAudio: true,\n  removeSilence: false\n});\n\nconsole.log(`Job ID: ${job.jobId}`);\n\n// Wait for completion\nconst result = await client.waitForCompletion(job.jobId, { \n  timeout: 600000,  // 10 minutes\n  pollInterval: 5000  // Check every 5 seconds\n});\n\nconsole.log(`Transcript: ${result.transcription.text}`);\n\n**Options**\n- **callbackUrl** *(required)*: URL to receive webhook notifications  \n- **priority**: `Priority.LOW`, `Priority.NORMAL` *(default)*, `Priority.HIGH`, `Priority.URGENT`  \n- **enhanceAudio**: Enable audio enhancement *(default: true)*  \n- **removeSilence**: Remove silence from audio *(default: false)*\n\n#### `transcribeAsyncWithIntelligence(audioFile, options)`\n**Asynchronous transcription with automatic intelligence extraction**\n\nconst job = await client.transcribeAsyncWithIntelligence('sales_call.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook',\n  mode: IntelligenceMode.SALES,\n  includeIntelligence: true,\n  priority: Priority.HIGH\n});\n\n// Intelligence will be included in webhook callback\n\n\n### Intelligence-Only Methods\n\n#### `extractIntelligence(transcript, options?)`\n**Extract comprehensive business intelligence**\n```typescript\nconst intelligence = await client.extractIntelligence(transcriptText, {\n  mode: IntelligenceMode.SALES\n});\n\nconsole.log(`Intent: ${intelligence.intent}`);\nconsole.log(`Sentiment: ${intelligence.sentiment}`);\n\n// Sales-specific insights\nif (intelligence.opportunityInfo) {\n  console.log(`Deal Stage: ${intelligence.opportunityInfo.stage}`);\n  console.log(`Value: $${intelligence.opportunityInfo.value_estimate}`);\n}\n\n// People mentioned\nintelligence.people.forEach(person => {\n  console.log(`- ${person.name} (${person.role}) at ${person.company}`);\n});\n\n// Action items\nintelligence.actionItems.forEach(item => {\n  console.log(`TODO: ${item.task} (assigned to: ${item.assignee})`);\n});\n```\n\n#### `extractQuickIntelligence(transcript)`\n**Fast 1-2 second extraction**\n```typescript\nconst quick = await client.extractQuickIntelligence(transcriptText);\nconsole.log(`Summary: ${quick.summary}`);\nconsole.log(`Top Actions: ${quick.actionItems.map(item => item.task)}`);\n```\n\n## 🎨 Advanced Examples\n\n### Sales Call Analysis\n```typescript\nimport { IntelligenceMode, Priority } from '@99technologies/s2a-sdk';\n\n// Process sales call recording\nconst job = await client.transcribeAsyncWithIntelligence('sales_demo.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook/sales',\n  mode: IntelligenceMode.SALES,\n  priority: Priority.HIGH,\n  includeIntelligence: true\n});\n\n// Wait for completion\nconst result = await client.waitForCompletion(job.jobId);\n\n// Extract sales insights\nconst intelligence = result.enhancedIntelligence;\nif (intelligence?.opportunityInfo) {\n  console.log(`Lead Quality Score: ${intelligence.opportunityInfo.close_probability}`);\n  console.log(`Timeline: ${intelligence.opportunityInfo.timeline}`);\n  console.log(`Decision Criteria: ${intelligence.opportunityInfo.decision_criteria}`);\n  console.log(`Budget: ${intelligence.opportunityInfo.budget}`);\n}\n\n// Financial discussion\nconst financial = intelligence?.financialInfo;\nif (financial?.budgetRange) {\n  console.log(`Budget range: $${financial.budgetRange.min}-$${financial.budgetRange.max}`);\n}\n\n// Next steps\nintelligence?.actionItems.forEach(item => {\n  console.log(`Follow-up: ${item.task} (Due: ${item.dueDate})`);\n});\n```\n\n### Customer Support Analysis\n```typescript\nconst job = await client.transcribeAsyncWithIntelligence('support_call.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook/support',\n  mode: IntelligenceMode.SUPPORT\n});\n\nconst result = await client.waitForCompletion(job.jobId);\nconst intelligence = result.enhancedIntelligence;\n\n// Issues identified\nintelligence?.issues.forEach(issue => {\n  console.log(`Issue: ${issue.description}`);\n  console.log(`  Severity: ${issue.severity}`);\n  console.log(`  Category: ${issue.category}`);\n  if (issue.workaround) {\n    console.log(`  Workaround: ${issue.workaround}`);\n  }\n  if (issue.resolution) {\n    console.log(`  Resolution: ${issue.resolution}`);\n  }\n});\n\n// Customer satisfaction metrics\nconst metrics = intelligence?.conversationMetrics;\nconsole.log(`Customer talk time: ${metrics?.customerTalkTimePercent}%`);\nconsole.log(`Questions asked: ${metrics?.questionCount}`);\nconsole.log(`Interruptions: ${metrics?.interruptions}`);\n```\n\n### Async Processing with Webhooks\n```typescript\nasync function processMultipleFiles() {\n  const files = ['meeting1.mp3', 'meeting2.mp3', 'meeting3.mp3'];\n  const jobs: AsyncJob[] = [];\n\n  // Submit all jobs\n  for (const file of files) {\n    const job = await client.transcribeAsyncWithIntelligence(file, {\n      callbackUrl: `https://yourapp.com/webhook/${file}`,\n      includeIntelligence: true,\n      mode: IntelligenceMode.AUTO_DETECT\n    });\n    jobs.push(job);\n    console.log(`Submitted ${file}: ${job.jobId}`);\n  }\n\n  // Monitor completion\n  for (const job of jobs) {\n    try {\n      const result = await client.waitForCompletion(job.jobId, {\n        timeout: 600000  // 10 minutes\n      });\n      console.log(`Completed ${job.jobId}`);\n      console.log(`Transcript length: ${result.transcription.text.length} chars`);\n    } catch (error) {\n      console.error(`Failed ${job.jobId}:`, error);\n    }\n  }\n}\n\nprocessMultipleFiles();\n```\n### Async Processing with Webhooks\n```typescript\n// If you already have a transcript from another source\nconst existingTranscript = \"Your existing transcript text here...\";\n\n// Get quick insights\nconst quick = await client.extractQuickIntelligence(existingTranscript);\nconsole.log(`Quick Summary: ${quick.summary}`);\n\n// Get comprehensive analysis\nconst intelligence = await client.extractIntelligence(existingTranscript, {\n  mode: IntelligenceMode.SALES\n});\n\nconsole.log(`Call Type: ${intelligence.callType}`);\nconsole.log(`Intent: ${intelligence.intent}`);\nconsole.log(`Sentiment: ${intelligence.sentiment}`);\n\n// Export action items\nintelligence.actionItems.forEach(item => {\n  console.log(`- [ ] ${item.task} (@${item.assignee}) - ${item.priority}`);\n});\n```\n\n\n### Error Handling\n```typescript\nimport {\n  AudioValidationError,\n  RateLimitError,\n  AuthenticationError,\n  TimeoutError,\n  IntelligenceUnavailableError\n} from '@99technologies/s2a-sdk';\n\ntry {\n  const job = await client.transcribeAsync('large_file.mp3', {\n    callbackUrl: 'https://yourapp.com/webhook'\n  });\n  \n  const result = await client.waitForCompletion(job.jobId);\n  console.log('Success:', result.transcription.text);\n  \n} catch (error) {\n  if (error instanceof AudioValidationError) {\n    console.error(`Audio validation failed: ${error.message}`);\n    // Check file format, size, or duration\n    \n  } else if (error instanceof RateLimitError) {\n    console.error(`Rate limit exceeded. Retry after ${error.retryAfter} seconds`);\n    setTimeout(() => {\n      // Retry logic here\n    }, error.retryAfter * 1000);\n    \n  } else if (error instanceof AuthenticationError) {\n    console.error(`Authentication failed: ${error.message}`);\n    // Check your API key\n    \n  } else if (error instanceof TimeoutError) {\n    console.error(`Request timeout: ${error.message}`);\n    // Try with longer timeout or check job status manually\n    \n  } else if (error instanceof IntelligenceUnavailableError) {\n    console.error(`Intelligence service unavailable: ${error.message}`);\n    // Retry later or use transcription only\n    \n  } else {\n    console.error(`Unexpected error:`, error);\n  }\n}\n```\n\n### Audio Validation\n```typescript\n// Validate audio before processing\nconst validation = await client.validateAudio('meeting.mp3');\n\nconsole.log(`File size: ${validation.fileSize} bytes`);\nconsole.log(`Format: ${validation.format}`);\nconsole.log(`MIME type: ${validation.mimeType}`);\n\nif (!validation.valid) {\n  console.error('Invalid audio file');\n  process.exit(1);\n}\n\n// Duration check (if available)\nif (validation.duration) {\n  if (validation.duration > 18000) {  // 5 hours\n    console.error('Audio exceeds 5 hour limit for async API');\n    process.exit(1);\n  }\n  \n  console.log(`Duration: ${Math.floor(validation.duration / 60)}m ${Math.floor(validation.duration % 60)}s`);\n}\n\n// Proceed with transcription\nconst job = await client.transcribeAsync('meeting.mp3', {\n  callbackUrl: 'https://yourapp.com/webhook'\n});\n```\n\n## 🔧 Configuration\n\n### Environment Variables\n```bash\n# Set default API key\nexport S2A_API_KEY=\"bp-proj-your-api-key\"\n\n# Set custom API base URL\nexport S2A_BASE_URL=\"https://your-custom-s2a-instance.com\"\n```\n\n### Client Configuration\n```typescript\nconst client = new S2AClient({\n  apiKey: 'bp-proj-your-key',\n  baseUrl: 'https://api.bytepulseai.com',  // Custom base URL\n  timeout: 300000,  // 5 minute timeout\n  maxRetries: 3,    // Retry failed requests\n  retryDelay: 1000  // Initial retry delay in ms\n});\n```\n\n## 📊 Response Types\n\n### TranscriptionResult\n```typescript\ninterface TranscriptionResult {\n  jobId: string;                   // Unique job identifier\n  status: string;                  // Job status\n  text: string;                    // Transcribed text\n  duration: number;                // Audio duration in seconds\n  confidence: number;              // Transcription confidence (0-1)\n  processingTime: number;          // Processing time in seconds\n  rtf: number;                     // Real-time factor\n  chunks: number;                  // Number of audio chunks processed\n  audioQuality?: Record<string, any>; // Audio quality metrics\n  quickIntelligence?: QuickIntelligenceResult | null;\n  enhancedIntelligenceStatus?: IntelligenceResult | null;\n}\n```\n### QuickIntelligenceResult\n```typescript\ninterface QuickIntelligenceResult {\n  summary: string;                 // Brief conversation summary\n  intent: Intent;                  // Primary intent\n  sentiment: Sentiment;            // Overall sentiment\n  actionItems: ActionItem[];       // Extracted action items\n  keyEntities: string[];           // Key entities mentioned\n  confidenceScore: number;         // Extraction confidence (0-1)\n  processingTime: number;          // Processing time in seconds\n}\n```\n\n### IntelligenceResult\n```typescript\ninterface IntelligenceResult {\n  // Core classification\n  callType: CallType;              // \"sales_call\", \"customer_support\", etc.\n  intent: Intent;                  // Primary conversation intent\n  sentiment: Sentiment;            // Overall sentiment\n  summary: string;                 // Conversation summary\n  keyTopics: string[];             // Main topics discussed\n\n  // Extracted entities\n  people: Person[];                // People mentioned with roles, companies\n  companies: string[];             // Company names\n  products: Product[];             // Products/services discussed\n  actionItems: ActionItem[];       // Tasks with assignees, priorities\n\n  // Contact information\n  emails: string[];                // Email addresses\n  phones: string[];                // Phone numbers\n  dates: string[];                 // Important dates\n\n  // Financial data\n  financialInfo: FinancialInfo;    // Budget, amounts, discounts\n\n  // Business context\n  opportunityInfo?: Record<string, any>; // Sales opportunity details\n  issues: Record<string, any>[];   // Support issues identified\n\n  // Conversation analysis\n  conversationMetrics: ConversationMetrics; // Talk time, interactions\n\n  // Quality scores\n  confidenceScore: number;         // Overall extraction confidence\n  completenessScore: number;       // Data completeness score\n\n  // AI recommendations\n  recommendations: string[];       // AI recommendations\n  riskFlags: string[];             // Potential risks identified\n}\n```\n\n### CompleteResult\n```typescript\ninterface CompleteResult {\n  transcription: TranscriptionResult;\n  quickIntelligence?: QuickIntelligenceResult;\n  enhancedIntelligence?: IntelligenceResult;\n}\n```\n\n### AsyncJob\n```typescript\ninterface AsyncJob {\n  jobId: string;                   // Unique job identifier\n  status: JobStatusType;           // Job status\n}\n```\n\n### JobStatus\n```typescript\ninterface JobStatus {\n  jobId: string;\n  status: string;                  // 'pending', 'processing', 'completed', 'failed'\n  error?: string | null;           // Error message if failed\n  result?: TranscriptionResult | null; // Result if completed\n}\n```\n\n## 🚨 Error Types\n\n- **`AudioValidationError`**: Invalid audio file or format\n- **`AuthenticationError`**: Invalid API key or permissions\n- **`RateLimitError`**: API rate limit exceeded\n- **`TimeoutError`**: Request or processing timeout\n- **`IntelligenceUnavailableError`**: Intelligence service unavailable\n- **`S2AError`**: Base error class for all SDK errors\n\n## 🔒 Authentication\n\nThe SDK supports S2A API keys in the following formats:\n- **Project keys**: `bp-proj-*` (recommended for applications)\n- **User keys**: `bp-*` (for individual users)\n- **Service keys**: `bp-svc-*` (for server-to-server)\n\nGet your API key from the [S2A Dashboard](https://dashboard.bytepulseai.com).\n\n## 🌐 Browser Support\n\nThe SDK works in modern browsers with support for:\n- **File API**: For handling audio file uploads\n- **FormData**: For multipart/form-data requests\n- **Fetch API**: For HTTP requests (or axios polyfill)\n\n```html\n<!-- Include via CDN -->\n<script src=\"https://unpkg.com/@99technologies/s2a-sdk@latest/dist/index.js\"></script>\n\n<script>\nconst client = new S2A.S2AClient({\n  apiKey: 'bp-proj-your-key'\n});\n\n// Handle file input\ndocument.getElementById('audioFile').addEventListener('change', async (e) => {\n  const file = e.target.files[0];\n  try {\n    const result = await client.transcribe(file);\n    console.log('Transcription:', result.text);\n  } catch (error) {\n    console.error('Error:', error.message);\n  }\n});\n</script>\n```\n\n## 🏗️ Build and Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build the SDK\nnpm run build\n\n# Run tests\nnpm test\n\n# Lint code\nnpm run lint\n\n# Format code\nnpm run format\n```\n\n## 📝 Changelog\n\n### Version 1.0.4\n- Initial release\n- Complete transcription and intelligence features\n- Multi-stage intelligence extraction\n- Comprehensive business intelligence models\n- Full async support\n- Audio validation and error handling\n- TypeScript support with full type definitions\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 📞 Support\n\n- **Documentation**: [https://docs.bytepulseai.com](https://docs.bytepulseai.com)\n- **API Reference**: [https://api.bytepulseai.com/docs](https://api.bytepulseai.com/docs)\n- **Issues**: [GitHub Issues](https://github.com/99technologies-ai/s2a/issues)\n- **Email**: support@99technologies.ai","readmeFilename":"README.md"}