{"_id":"@avon-health/sdk","_rev":"5-485d8c0e7b05efb9ae7c77b11b880616","name":"@avon-health/sdk","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.1":{"name":"@avon-health/sdk","version":"1.0.1","keywords":["avon","avon-health","healthcare","ehr","sdk","api"],"author":{"name":"Avon Health"},"license":"ISC","_id":"@avon-health/sdk@1.0.1","maintainers":[{"name":"maijoshi","email":"maitreyee@avonhealth.com"}],"dist":{"shasum":"dbf6689a5257bfdb1533e085b7b5555ec45bd12b","tarball":"https://registry.npmjs.org/@avon-health/sdk/-/sdk-1.0.1.tgz","fileCount":134,"integrity":"sha512-zXAX33mJ+cXr5MMsYUBXacqfC5Wo7Kq55IQKiSH0ObRIgIKzTxL4sgGRsDBUW5xH4Hw0qGl1wTG1UvAv4cCRIg==","signatures":[{"sig":"MEQCIH0Tp0ROZ4CU8aBLGLVv4vPMHagCThsDQ9uPC/S2e60bAiAlPxbbCI3nmx3quLHmyNZu/8Cje4ig4Aa36X+ulxCoBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253611},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"abbb99bd662984801436b04a2a40938ebc130865","scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist","example":"tsx examples/test-app.ts","prebuild":"node scripts/sync-version.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","sync-version":"node scripts/sync-version.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"maijoshi","email":"maitreyee@avonhealth.com"},"_npmVersion":"11.6.0","description":"Official TypeScript SDK for the Avon Health API.","directories":{},"sideEffects":false,"_nodeVersion":"24.9.0","dependencies":{"axios":"^1.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^2.1.8","typescript":"^5.8.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.1_1782267458529_0.444521022626436","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@avon-health/sdk","version":"1.0.2","description":"Official TypeScript SDK for the Avon Health API.","publishConfig":{"access":"public"},"type":"module","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"sideEffects":false,"engines":{"node":">=18"},"scripts":{"sync-version":"node scripts/sync-version.mjs","prebuild":"node scripts/sync-version.mjs","build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","example":"tsx examples/test-app.ts"},"keywords":["avon","avon-health","healthcare","ehr","sdk","api"],"author":{"name":"Avon Health"},"license":"ISC","dependencies":{"axios":"^1.17.0"},"devDependencies":{"@types/node":"^22.10.0","tsx":"^4.19.2","typescript":"^5.8.3","vitest":"^2.1.8"},"_id":"@avon-health/sdk@1.0.2","gitHead":"abbb99bd662984801436b04a2a40938ebc130865","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-cN/GKekACM7MJ0KNlqMW/68z355S51FXty2A4Xp5wQrB19AuoNb0BzYlECIcIXuTNrEj20CIfINf8YgaimE4LQ==","shasum":"a1ad3e1193bf8f5eacbfc4e08799ae107f87dff9","tarball":"https://registry.npmjs.org/@avon-health/sdk/-/sdk-1.0.2.tgz","fileCount":134,"unpackedSize":253814,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAzIkd3JAiB8NdB3mHf+zmfjTAkFl8tg0RuoYiLpLpDGAiAioU27JpZyPDFgeFkLvbaMoXx4oukl3KllAKqNV+y9Ig=="}]},"_npmUser":{"name":"maijoshi","email":"maitreyee@avonhealth.com"},"directories":{},"maintainers":[{"name":"maijoshi","email":"maitreyee@avonhealth.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.2_1782326222995_0.5769423814924903"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-24T02:17:38.384Z","modified":"2026-06-24T18:37:03.291Z","1.0.0":"2026-06-15T07:02:12.403Z","1.0.1":"2026-06-24T02:17:38.679Z","1.0.2":"2026-06-24T18:37:03.157Z"},"author":{"name":"Avon Health"},"license":"ISC","keywords":["avon","avon-health","healthcare","ehr","sdk","api"],"description":"Official TypeScript SDK for the Avon Health API.","maintainers":[{"name":"maijoshi","email":"maitreyee@avonhealth.com"}],"readme":"# Avon Health SDK\n\nOfficial TypeScript SDK for the Avon Health API. It provides typed resource\nservices for the `/v2` REST API, pagination helpers, retries for transient\nfailures, and typed errors.\n\n## Installation\n\n```sh\nnpm install @avon-health/sdk\n```\n\nRequires Node.js 18+. The package is ESM and includes TypeScript declarations.\n\n## Quick Start\n\n```ts\nimport { Avon } from \"@avon-health/sdk\";\n\nconst avon = new Avon({\n  baseUrl: \"https://{{base_subdomain}}.avonhealth.com\",\n  clientId: \"<client_id>\",\n  clientSecret: \"<client_secret>\",\n  jwt: \"<jwt>\",\n});\n\nconst patient = await avon.patients.create({\n  first_name: \"Ada\",\n  last_name: \"Lovelace\",\n  email: \"ada@example.com\",\n});\n\nconst fetched = await avon.patients.retrieve(patient.id);\nawait avon.patients.update(patient.id, { phone: \"(555) 555-0123\" });\n```\n\n## Authentication\n\nEvery client needs the API credentials provided during onboarding:\n\n- `baseUrl` - Avon API base URL.\n- `clientId` and `clientSecret` - your API key.\n\nThe following setting is optional:\n\n- `account` - optional account identifier. When omitted, the SDK does not send\n  an `account` header.\n\nPlus the identity of the acting caller (a `jwt`). There are **two ways** to\nprovide it:\n\n### Option 1: Mint the `jwt`, then construct\n\nGet a JWT for the acting user, then pass it to the synchronous constructor. This\ngives you the raw JWT to cache or reuse across clients:\n\n```ts\nconst jwt = await Avon.getJwt({\n  baseUrl: \"https://{{base_subdomain}}.avonhealth.com\",\n  id: \"user_<memberId>\",\n});\n\nconst avon = new Avon({\n  baseUrl: \"https://{{base_subdomain}}.avonhealth.com\",\n  clientId: \"<client_id>\",\n  clientSecret: \"<client_secret>\",\n  jwt,\n});\n```\n\n### Option 2: Let the factory mint it for you\n\nPass `userId` to the async `create` factory and it mints the JWT and constructs\nthe client in one step:\n\n```ts\nconst avon = await Avon.create({\n  baseUrl: \"https://{{base_subdomain}}.avonhealth.com\",\n  clientId: \"<client_id>\",\n  clientSecret: \"<client_secret>\",\n  userId: \"user_<memberId>\",\n});\n```\n\n## Resources\n\nTyped services are available on the client:\n\n- Core: `patients`, `providers`, `supports`, `organizationMembers`, `users`,\n  `auth`\n- Scheduling: `appointments`, `appointmentTypes`, `slots`\n- Clinical content and care plans: `notes`, `noteTemplates`, `forms`,\n  `formResponses`, `documents`, `documentTemplates`, `carePlans`,\n  `carePlanTemplates`, `quizzes`, `quizResponses`, `tasks`\n- Billing: `invoices`, `superbills`, `insuranceClaims`, `insurancePolicies`,\n  `insuranceRemittances`, `products`, `coupons`, `serviceFacilities`,\n  `billingProviders`, `referringProviders`, `feeSchedules`, `customPayers`\n- Patient chart: `allergies`, `conditions`, `medications`, `familyHistories`,\n  `vitals`, `procedures`, `labOrders`, `labResults`, `requisitions`,\n  `prescriptions`, `orderSets`\n- Organization and communication: `medicalCenters`, `careTeams`, `peerGroups`,\n  `specializations`, `tags`, `smartPhrases`, `customFields`, `intakeFlows`,\n  `customPages`, `messageThreads`\n\nThe resources support the standard CRUD methods:\n\n```ts\nawait avon.patients.create({ first_name: \"Ada\", last_name: \"Lovelace\" });\nawait avon.patients.retrieve(\"user_123\");\nawait avon.patients.update(\"user_123\", { phone: \"(555) 555-0123\" });\nawait avon.patients.list({ limit: 50 });\nawait avon.patients.del(\"user_123\");\n```\n\nSome resources include domain-specific actions:\n\n```ts\nawait avon.patients.merge({ ids: [\"user_1\", \"user_2\"] });\nawait avon.appointments.trigger(\"apt_1\");\nawait avon.notes.sign(\"note_1\");\nawait avon.forms.publish(\"form_1\");\n\nconst count = await avon.tasks.count({ status: \"todo\" });\n```\n\nResources without a typed service can be called through the generic resource\nhelper:\n\n```ts\nconst objects = avon.resource(\"custom_objects\");\n\nawait objects.create({ name: \"Widget\" });\nawait objects.update(\"obj_1\", { name: \"Gadget\" });\nawait objects.list();\n```\n\n## Pagination\n\nList endpoints return a `{ object: \"list\", data: [...] }` envelope and support\n`limit` / `offset`. Use `autoList` to iterate across pages or `listAll` to\ncollect every item.\n\n```ts\nfor await (const patient of avon.patients.autoList({ status: \"active\" })) {\n  console.log(patient.id);\n}\n\nconst allPatients = await avon.patients.listAll({ status: \"active\" });\n```\n\n## Errors\n\nFailed requests throw `AvonError` subclasses with `status`, `code`, `message`,\n`requestId`, and the raw response when available.\n\n```ts\nimport { AvonError, NotFoundError } from \"@avon-health/sdk\";\n\ntry {\n  await avon.patients.retrieve(\"user_missing\");\n} catch (err) {\n  if (err instanceof NotFoundError) {\n    // 404\n  } else if (err instanceof AvonError) {\n    console.log(err.status, err.code, err.message, err.requestId);\n  }\n}\n```\n\nGET and DELETE requests are retried automatically for transient failures.\nBodied requests such as POST and PUT are not retried unless the request is\nmarked idempotent.\n\n## License\n\nISC\n","readmeFilename":"README.md"}