{"_id":"@aurabx/uploader-client","name":"@aurabx/uploader-client","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@aurabx/uploader-client","version":"1.0.0","description":"Aura Uploader API client for Node.js - server-side library for auth and manage endpoints","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aurabx/uploader-client.git"},"bugs":{"url":"https://github.com/aurabx/uploader-client/issues"},"homepage":"https://github.com/aurabx/uploader-client#readme","scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","example":"tsx src/example.ts","prepublishOnly":"npm run build"},"keywords":["aura","uploader","api-client","hmac","medical-imaging"],"author":{"name":"Aurabx"},"license":"MIT","engines":{"node":">=18.0.0"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.9.0","vitest":"^4.0.0"},"_id":"@aurabx/uploader-client@1.0.0","gitHead":"9e2cd4814a5868e630ab199efc25fa684b19f226","_nodeVersion":"20.16.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-MOwTFTJLPQsLghPpbFK8yrq+i2ZlGHqXuUkicC9OfgPTzMONOfzhMvltGxgUFpDpeR5zHw1oV/BemtAmaVZkXA==","shasum":"3d253af16422b86dd3b3e8079907b9b20a5c41b0","tarball":"https://registry.npmjs.org/@aurabx/uploader-client/-/uploader-client-1.0.0.tgz","fileCount":30,"unpackedSize":95362,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDakVoHoN+u/nuBVHZMGSeOrNGonrB75Yhq2GBAudE/MwIhALOuIZAhARVYwDcH9O/b5ZxKOIMBWSVJO5uoMC+OClAu"}]},"_npmUser":{"name":"xtfer","email":"chris.skene@gmail.com"},"directories":{},"maintainers":[{"name":"xtfer","email":"chris.skene@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/uploader-client_1.0.0_1769381935363_0.9895353062217791"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-25T22:58:55.260Z","1.0.0":"2026-01-25T22:58:55.516Z","modified":"2026-01-25T22:58:56.070Z"},"maintainers":[{"name":"xtfer","email":"chris.skene@gmail.com"}],"description":"Aura Uploader API client for Node.js - server-side library for auth and manage endpoints","homepage":"https://github.com/aurabx/uploader-client#readme","keywords":["aura","uploader","api-client","hmac","medical-imaging"],"repository":{"type":"git","url":"git+https://github.com/aurabx/uploader-client.git"},"author":{"name":"Aurabx"},"bugs":{"url":"https://github.com/aurabx/uploader-client/issues"},"license":"MIT","readme":"# @aurabx/uploader-client\n\nA TypeScript/Node.js client library for the Aura Uploader API. This library provides the same API as the .NET `AuraUploaderClient`.\n\n**This library is only required by (and can only be implemented by) Aurabox integration partners. Contact Aurabox for more information.**\n\n## Requirements\n\n- Node.js 18.0.0 or later\n- TypeScript 5.x (for development)\n\n## Installation\n\n```bash\nnpm install @aurabx/uploader-client\n# or\npnpm add @aurabx/uploader-client\n```\n\n## Quick Start\n\n```typescript\nimport { AuraUploaderClient } from \"@aurabx/uploader-client\";\n\nconst client = new AuraUploaderClient({\n  baseUrl: \"https://aura.example.com\",\n  appId: \"your-app-id\",\n  appSecret: \"your-app-secret\",\n  apiKey: \"your-api-key\",\n});\n\n// Authenticate (automatically called by other methods)\nconst token = await client.ensureAuthenticated();\n\n// Submit an upload for processing\nconst submitResult = await client.submit({\n  upload_id: \"your-upload-id\",\n  metadata: {\n    patient_id: \"12345\",\n    study_type: \"CT\",\n  },\n});\n\n// Withdraw an upload\nconst withdrawResult = await client.withdraw({\n  upload_id: \"your-upload-id\",\n  reason: \"Duplicate upload\",\n});\n```\n\n## API Reference\n\n### AuraUploaderClient\n\nThe main client class for interacting with the Aura Uploader API.\n\n#### Constructor\n\n```typescript\nnew AuraUploaderClient(options: AuraClientOptions)\n```\n\n**Options:**\n| Option | Type | Required | Default | Description |\n|--------|------|----------|---------|-------------|\n| `baseUrl` | `string` | Yes | - | Base URL for the Aura API |\n| `appId` | `string` | Yes | - | Application public ID |\n| `appSecret` | `string` | Yes | - | Application secret key |\n| `apiKey` | `string` | Yes | - | API key for additional authentication |\n| `tokenTtl` | `number` | No | `3600` | Token time-to-live in seconds |\n| `defaultScopes` | `string[]` | No | `[\"upload:init\", \"upload:manage\", \"integration:read\"]` | Default scopes for token exchange |\n\n#### Methods\n\n##### `exchangeToken(request?: TokenExchangeRequest): Promise<TokenExchangeResponse>`\n\nExchange HMAC credentials for a bearer token.\n\n```typescript\nconst response = await client.exchangeToken({\n  ttl: 3600,\n  scopes: [\"upload:init\", \"upload:manage\"],\n});\nconsole.log(response.access_token);\n```\n\n##### `ensureAuthenticated(): Promise<string>`\n\nEnsures a valid access token is available, refreshing if necessary. Returns the access token.\n\n```typescript\nconst token = await client.ensureAuthenticated();\n```\n\n##### `submit(request: SubmitRequest): Promise<SubmitResponse>`\n\nSubmit an upload for processing.\n\n```typescript\nconst result = await client.submit({\n  upload_id: \"your-upload-id\",\n  metadata: { patient_id: \"12345\" },\n});\n```\n\n##### `withdraw(request: WithdrawRequest): Promise<WithdrawResponse>`\n\nWithdraw a previously submitted upload.\n\n```typescript\nconst result = await client.withdraw({\n  upload_id: \"your-upload-id\",\n  reason: \"Duplicate upload\",\n});\n```\n\n### Low-Level HMAC Signing\n\nFor advanced use cases, you can use the `signRequest` function directly:\n\n```typescript\nimport { signRequest, type HttpRequest } from \"@aurabx/uploader-client\";\n\nconst request: HttpRequest = {\n  method: \"POST\",\n  baseUrl: \"https://aura.example.com\",\n  url: \"/api/auth/exchange\",\n  headers: {\n    Host: \"aura.example.com\",\n    \"Content-Type\": \"application/json\",\n    \"X-Api-Key\": \"your-api-key\",\n  },\n  body: { ttl: 3600 },\n};\n\nsignRequest(\"your-app-id\", \"your-app-secret\", request);\n// request.headers now contains Authorization, X-Aura-Timestamp, X-Aura-Nonce\n```\n\n## Error Handling\n\nThe client throws `AuraApiError` for API errors:\n\n```typescript\nimport { AuraApiError } from \"@aurabx/uploader-client\";\n\ntry {\n  await client.submit({ upload_id: \"invalid\" });\n} catch (error) {\n  if (error instanceof AuraApiError) {\n    console.error(\"Status:\", error.statusCode);\n    console.error(\"Response:\", error.responseContent);\n  }\n}\n```\n\n## Request Cancellation\n\nAll methods accept an optional `AbortSignal` for request cancellation:\n\n```typescript\nconst controller = new AbortController();\n\n// Cancel after 5 seconds\nsetTimeout(() => controller.abort(), 5000);\n\ntry {\n  await client.submit({ upload_id: \"...\" }, controller.signal);\n} catch (error) {\n  if (error.name === \"AbortError\") {\n    console.log(\"Request cancelled\");\n  }\n}\n```\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Run tests\npnpm test\n\n# Type check\npnpm typecheck\n\n# Build\npnpm build\n\n# Run example\npnpm example\n```\n\n## API Endpoints\n\nThis client covers the following API endpoints:\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/auth/exchange` | POST | Exchange HMAC credentials for bearer token |\n| `/api/uploader/manage/submit` | POST | Submit an upload for processing |\n| `/api/uploader/manage/withdraw` | POST | Withdraw a previously submitted upload |\n\n## Compatibility\n\nThis library is designed to be API-compatible with the .NET `AuraUploaderClient`. The HMAC signing algorithm produces identical signatures for the same inputs.\n\n## License\n\nUNLICENSED\n","readmeFilename":"README.md","_rev":"1-ec5d51270e8c4ecd9832cf6a6c902d2e"}