{"_id":"@alan01777/node-chatwoot","_rev":"2-0807eee9b59a5784b01dbad617cfd013","name":"@alan01777/node-chatwoot","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@alan01777/node-chatwoot","version":"1.0.0","keywords":["chatwoot","api","client","omnichannel"],"author":{"name":"alan01777","email":"camp.alan3@gmail.com"},"license":"MIT","_id":"@alan01777/node-chatwoot@1.0.0","maintainers":[{"name":"alan01777","email":"camp.alan3@gmail.com"}],"dist":{"shasum":"8858ef9f7841cfa0ed84ebaa9ec3bda41ee535c0","tarball":"https://registry.npmjs.org/@alan01777/node-chatwoot/-/node-chatwoot-1.0.0.tgz","fileCount":16,"integrity":"sha512-85CuGntrx560PxPW3VhhfW/CwjHJ5VYc+h1Jlq20jU0ye+oyoXSca2yJ51EQYZmygcBB8Q9HoFaBtPvpxGZE+g==","signatures":[{"sig":"MEUCIQDXzQ5y50isWT4AxNqnb3jcc1j3NbZNGKjkg1wQNBmThgIgf3eLkQ/STbOHqYCB8dUrlzq+0aMOV2g8QBn9hvAABKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265653},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","require":"./dist/testing/index.cjs"}},"gitHead":"1beb8877b2ed9d72af4efaf0a8468f37a759ad80","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"alan01777","email":"camp.alan3@gmail.com"},"_npmVersion":"11.5.1","description":"Chatwoot API client for Node.js — type-safe, multi-account, testable","directories":{},"_nodeVersion":"24.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^25.9.1"},"_npmOperationalInternal":{"tmp":"tmp/node-chatwoot_1.0.0_1780056826171_0.83902758033093","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alan01777/node-chatwoot","version":"1.0.1","publishConfig":{"access":"public"},"description":"Chatwoot API client for Node.js — type-safe, multi-account, testable","type":"module","license":"MIT","author":{"name":"alan01777","email":"camp.alan3@gmail.com"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","require":"./dist/testing/index.cjs"}},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"keywords":["chatwoot","api","client","omnichannel"],"devDependencies":{"@types/node":"^25.9.1","tsup":"^8.3.0","typescript":"^5.6.0","vitest":"^2.1.0"},"engines":{"node":">=18"},"_id":"@alan01777/node-chatwoot@1.0.1","gitHead":"ebf20efd0faf4e0456b907a87dc71ce7096fbafc","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-58mgQDwRk12ZVOu3gEx37IKGcJyX0nemTSQergie2xVd3pYpQpxbDv4GEoSFfIwtGx8QZwYe7JFW2PbovkZBmw==","shasum":"548a0f2ec78d4ad71b27fd13338e5b9830b0deb7","tarball":"https://registry.npmjs.org/@alan01777/node-chatwoot/-/node-chatwoot-1.0.1.tgz","fileCount":16,"unpackedSize":266050,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD3kSVeeYzBrPUaOZsJR3t8F8U0Sj76pyxVmeKda2CtfgIgZC/75FnrgOwT6O0fcgm5a4TmeJihm0dYts+fJgeSWQU="}]},"_npmUser":{"name":"alan01777","email":"camp.alan3@gmail.com"},"directories":{},"maintainers":[{"name":"alan01777","email":"camp.alan3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-chatwoot_1.0.1_1780317014339_0.7181010785873838"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T12:13:46.045Z","modified":"2026-06-01T12:30:14.574Z","1.0.0":"2026-05-29T12:13:46.387Z","1.0.1":"2026-06-01T12:30:14.468Z"},"author":{"name":"alan01777","email":"camp.alan3@gmail.com"},"license":"MIT","keywords":["chatwoot","api","client","omnichannel"],"description":"Chatwoot API client for Node.js — type-safe, multi-account, testable","maintainers":[{"name":"alan01777","email":"camp.alan3@gmail.com"}],"readme":"# Node Chatwoot\n\nA TypeScript-first Chatwoot API client for Node.js (18+). Zero runtime dependencies, multi-account support, fully testable.\n\n## Installation\n\n```bash\nnpm install @alan01777/node-chatwoot\n```\n\n## Quick Start\n\n```ts\nimport { ChatwootManager, createMessageDTO, createContactDTO } from '@alan01777/node-chatwoot';\n\nconst chatwoot = new ChatwootManager({\n  default: 'main',\n  accounts: {\n    main: {\n      baseUrl: 'https://app.chatwoot.com',\n      accountId: process.env.CHATWOOT_ACCOUNT_ID!,\n      apiAccessToken: process.env.CHATWOOT_API_ACCESS_TOKEN!,\n    },\n  },\n});\n\n// Send a message\nawait chatwoot.sendMessage(42, createMessageDTO({ content: 'Hello!' }));\n\n// Create a contact\nawait chatwoot.createContact(createContactDTO({\n  name: 'John Doe',\n  email: 'john@example.com',\n}));\n\n// Multi-account\nconst marketing = chatwoot.account('marketing');\nawait marketing.getInboxes();\n\n// List conversations\nconst convos = await chatwoot.getConversations({ status: 'open', page: 1 });\n```\n\n## Testing\n\n```ts\nimport { ChatwootManager, createContactDTO, createMessageDTO } from '@alan01777/node-chatwoot';\nimport { describe, it } from 'vitest';\n\ndescribe('Chatwoot', () => {\n  it('sends messages', async () => {\n    const chatwoot = new ChatwootManager({ accounts: { default: { baseUrl: '', accountId: '', apiAccessToken: '' } } });\n    const fake = chatwoot.fake();\n\n    await chatwoot.sendMessage(1, createMessageDTO({ content: 'Hi' }));\n\n    fake.assertMessageSent((msg, convId) => {\n      return msg.content === 'Hi' && convId === 1;\n    });\n  });\n\n  it('creates contacts', async () => {\n    const chatwoot = new ChatwootManager({ accounts: { default: { baseUrl: '', accountId: '', apiAccessToken: '' } } });\n    const fake = chatwoot.fake();\n\n    await chatwoot.createContact(createContactDTO({ name: 'Jane' }));\n\n    fake.assertContactCreated((dto) => dto.name === 'Jane');\n  });\n});\n```\n\n## API Reference\n\n### DTOs\n\n| Factory | Description |\n|---|---|\n| `createContactDTO({ name, email?, ... })` | Contact data |\n| `createConversationDTO({ sourceId?, inboxId?, ... })` | Conversation data |\n| `createMessageDTO({ content, messageType?, ... })` | Message with optional template params |\n| `createAgentDTO({ email, name, ... })` | Agent data |\n| `createTeamDTO({ name, description?, ... })` | Team data |\n| `createReportCriteriaDTO({ since?, until?, ... })` | Report filter criteria |\n\n### Enums\n\n```ts\nimport { ConversationStatus, ConversationPriority, ReportType } from '@alan01777/node-chatwoot';\n\nConversationStatus.OPEN     // 'open'\nConversationPriority.URGENT // 'urgent'\nReportType.ACCOUNT          // 'account'\n```\n\n### Fake Assertions\n\n```ts\nfake.assertMessageSent((msg: MessageDTO, convId: number) => boolean)\nfake.assertContactCreated((dto: ContactDTO) => boolean)\nfake.assertFileSent((file: unknown, convId: number, content?: string) => boolean)\nfake.assertConversationUpdated((dto: ConversationDTO, id: number) => boolean)\nfake.getCallHistory()  // readonly MethodCall[]\nfake.findCall('sendMessage')  // unknown[][]\n```\n\n### Full Method List\n\n| Domain | Methods |\n|---|---|\n| **Contacts** | `getContacts`, `getContact`, `createContact`, `updateContact`, `deleteContact`, `searchContacts`, `getContactLabels`, `setContactLabels` |\n| **Conversations** | `getConversations`, `getConversation`, `createConversation`, `updateConversation`, `toggleConversationPriority`, `getConversationMeta`, `getConversationLabels`, `setConversationLabels`, `updateConversationCustomAttributes` |\n| **Messages** | `getMessages`, `sendMessage`, `sendFile` |\n| **Inboxes** | `getInboxes`, `getInbox`, `getInboxAgents`, `getInboxTemplates` |\n| **Agents** | `getAgents`, `addAgent`, `updateAgent`, `removeAgent` |\n| **Teams** | `getTeams`, `createTeam`, `deleteTeam`, `getTeamMembers`, `addTeamMember`, `removeTeamMember` |\n| **Labels** | `getLabels` |\n| **Reports** | `getAccountSummary`, `getAgentSummary`, `getInboxSummary`, `getMetrics`, `getConversationStats`, `getSummaryReport` |\n\n## Environment\n\n- Node.js >= 18 (native `fetch`, `Blob`, `FormData`)\n- ESM + CJS dual export\n- TypeScript declarations included\n\n## License\n\nMIT\n","readmeFilename":"README.md"}