{"_id":"@cognipeer/sdk","_rev":"7-3c27fc4d5a1945b52deaa8394c7ece80","name":"@cognipeer/sdk","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@cognipeer/sdk","version":"1.0.0","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","_id":"@cognipeer/sdk@1.0.0","maintainers":[{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"homepage":"https://cognipeer.com","bugs":{"url":"https://github.com/cognipeer/sdk/issues"},"dist":{"shasum":"a34a0b3920a42eb7d7307bac231ded2514bbfdcd","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.0.tgz","fileCount":12,"integrity":"sha512-yaWdcxIHfVsQ13TQykrZgs1ScAS82yY/W85w89OGrbT71nBhl8yBBL/r15ISBisivQAIt3RgQO6/HxhqGlgTxg==","signatures":[{"sig":"MEQCIH+DaVfvvLG3pB6L7+7h2n7eDqVvvqKdfsS/Hd/yrekCAiAg1pmwHVzqlNp+1vWjI0/10f0zXZrrt7V9O3lDvnc3AQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":273610},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b3673465d67dde4f835ca07d5c7ea8adb4b36609","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsup","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"},"repository":{"url":"git+https://github.com/cognipeer/sdk.git","type":"git"},"_npmVersion":"11.6.1","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","directories":{},"_nodeVersion":"24.10.0","dependencies":{"cross-fetch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.4","vitepress":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.0_1763583088772_0.3840418448202927","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@cognipeer/sdk","version":"1.0.1","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","_id":"@cognipeer/sdk@1.0.1","maintainers":[{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"homepage":"https://cognipeer.com","bugs":{"url":"https://github.com/cognipeer/sdk/issues"},"dist":{"shasum":"1edc0f860b56cc4e92d582c1221f78f39c9b5571","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.1.tgz","fileCount":12,"integrity":"sha512-C3I+A1HIxCgTBXp0fZIDi83o2JOOIyJS5+F66+QrDuRveBnKpcKDxWqfZQatjUWrlYrSi2l8bgkH92QevECDEg==","signatures":[{"sig":"MEUCIGNZUxaHxoYTGBeo84ItPoS1ST/E3oGif+G9XnHx48EXAiEArRgIUj7gK2STdcvB0aDILPzOYC6NP60Xb7UNivvcfcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283810},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b3673465d67dde4f835ca07d5c7ea8adb4b36609","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsup","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"},"repository":{"url":"git+https://github.com/cognipeer/sdk.git","type":"git"},"_npmVersion":"11.6.1","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","directories":{},"_nodeVersion":"24.10.0","dependencies":{"cross-fetch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.4","vitepress":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.1_1763626258096_0.6870506733250532","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cognipeer/sdk","version":"1.0.2","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","_id":"@cognipeer/sdk@1.0.2","maintainers":[{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"homepage":"https://cognipeer.com","bugs":{"url":"https://github.com/cognipeer/sdk/issues"},"dist":{"shasum":"d380a634271917124fda04569c7b90c3dfabb6b1","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.2.tgz","fileCount":12,"integrity":"sha512-KYvF+pv4PyEbUYtyyIfPki5bvPAHEpPuTHaTRmlCN2AlFHBz4GrxCOZ+PWapKFiGT688HXl7A0xcXgYq3/nP+g==","signatures":[{"sig":"MEUCIG10d8QNLp189myphvwJ1HY0wu0B4CsJZRZkPRI46GSZAiEA7kwmrEe+xwl3Nd+w+zwjQiTAFoOj5NLmvSnl+NdpzPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320315},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b3673465d67dde4f835ca07d5c7ea8adb4b36609","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsup","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"},"repository":{"url":"git+https://github.com/cognipeer/sdk.git","type":"git"},"_npmVersion":"11.6.1","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","directories":{},"_nodeVersion":"24.10.0","dependencies":{"cross-fetch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.4","vitepress":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.2_1763643072198_0.9144207894584897","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@cognipeer/sdk","version":"1.0.3","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","_id":"@cognipeer/sdk@1.0.3","maintainers":[{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"homepage":"https://cognipeer.com","bugs":{"url":"https://github.com/cognipeer/sdk/issues"},"dist":{"shasum":"4d0838dafbf6d75c93ffbff5ee6e46f5912bcf36","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.3.tgz","fileCount":12,"integrity":"sha512-wMFKPfD9hEvIRrGeQslm+xTw/Hbsj7urcUng3rx2jf2F+Y9ffPh+0wmmlEbMmSTF6Pr1XENcQwg+70nt9dF+6w==","signatures":[{"sig":"MEUCIQDiQxXzQ2IPMeaUuZVd8+Khj+uWb2QeqqCSnZLqPuhRHwIgPDG6rdDqYhr+EQ6QrepUe+aYLNZf3s9vS0g+FmdqvKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320315},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"cebbe3fbc4ba9916d32231fc0c90c337a04cb767","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsup","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"},"repository":{"url":"git+https://github.com/cognipeer/sdk.git","type":"git"},"_npmVersion":"11.6.1","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","directories":{},"_nodeVersion":"24.10.0","dependencies":{"cross-fetch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.4","vitepress":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.3_1763644782161_0.24251901463156145","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cognipeer/sdk","version":"1.0.4","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","_id":"@cognipeer/sdk@1.0.4","maintainers":[{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"homepage":"https://cognipeer.com","bugs":{"url":"https://github.com/cognipeer/sdk/issues"},"dist":{"shasum":"6174b627c81bf09393beaa36c4f5cbb12a8ccc12","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.4.tgz","fileCount":12,"integrity":"sha512-ecM/O6f+OywbAFYz5DVfE4H2WQpKh0b1n4XUWPkmsqwM6K8UXXCp2uhrc1PrDLyKJ/GuRKq5YVqaq+HpWECfBA==","signatures":[{"sig":"MEUCIEmslFRU4CWLNMtgFTnHqyV9QH9cl28RWVWyxE9YyeaCAiEA5tPXxk1OYbUUhIGn02GeRdGra5AcS5FyE6fNd295oI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320619},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"8f97d58ade958576689df563bf11d013bd475242","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest","build":"tsup","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"},"repository":{"url":"git+https://github.com/cognipeer/sdk.git","type":"git"},"_npmVersion":"11.6.1","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","directories":{},"_nodeVersion":"24.10.0","dependencies":{"cross-fetch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^8.55.0","vitest":"^1.0.4","vitepress":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.4_1763673019351_0.29928195956642867","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@cognipeer/sdk","version":"1.0.5","description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","test":"vitest run","lint":"eslint src --ext .ts","prepublishOnly":"npm run build"},"keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"author":{"name":"Cognipeer"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Cognipeer/client-sdk.git"},"bugs":{"url":"https://github.com/Cognipeer/client-sdk/issues"},"homepage":"https://docs.cognipeer.com/client-sdk/","devDependencies":{"@types/node":"^20.10.0","eslint":"^8.55.0","tsup":"^8.0.1","typescript":"^5.3.3","vitepress":"^1.0.0","vitest":"^1.0.4"},"dependencies":{"cross-fetch":"^4.0.0"},"gitHead":"5c1aa11b88bc5013b859ac43492419682c762714","_id":"@cognipeer/sdk@1.0.5","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-djyJquBMFzAc3AYc/ugIGKU3SwXkLYKPZbGeY6zW98mtXeONOwBU/qJqG4h6gDqyvaqXJ+8VxA3GTUw00ZnmkA==","shasum":"224c27c4a4ebc4ba2bdad7d6beb8d468607d645e","tarball":"https://registry.npmjs.org/@cognipeer/sdk/-/sdk-1.0.5.tgz","fileCount":12,"unpackedSize":320868,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cognipeer%2fsdk@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDoXtwX1rPEf73cj+/zYU7Cbmqqm3Tv1a7PrKkipB8y/gIgSdQTZAdUxkiFSKQeV+n4kfjRA25A2nNzc0OSTxenh+4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2d934d13-722c-463b-a569-d624c28237cc"}},"directories":{},"maintainers":[{"name":"cihanalagoz","email":"cihanalagoz@hotmail.com"},{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.5_1787915474531_0.6930331324609207"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-19T20:11:28.690Z","modified":"2026-08-28T11:11:15.115Z","1.0.0":"2025-11-19T20:11:28.950Z","1.0.1":"2025-11-20T08:10:58.296Z","1.0.2":"2025-11-20T12:51:12.402Z","1.0.3":"2025-11-20T13:19:42.371Z","1.0.4":"2025-11-20T21:10:19.542Z","1.0.5":"2026-08-28T11:11:14.692Z"},"bugs":{"url":"https://github.com/Cognipeer/client-sdk/issues"},"author":{"name":"Cognipeer"},"license":"MIT","homepage":"https://docs.cognipeer.com/client-sdk/","keywords":["cognipeer","ai","chatbot","conversation","llm","function-calling","client-tools","sdk","typescript"],"repository":{"type":"git","url":"git+https://github.com/Cognipeer/client-sdk.git"},"description":"Official JavaScript/TypeScript SDK for Cognipeer AI - Build conversational AI applications with client-side tool execution","maintainers":[{"name":"cihanalagoz","email":"cihanalagoz@hotmail.com"},{"name":"cognipeer-dev","email":"dev@cognipeer.com"},{"name":"sercanuste","email":"sercanuste@hotmail.com"},{"name":"aguleroglu","email":"anil.guleroglu@gmail.com"}],"readme":"# Cognipeer SDK\n\nOfficial JavaScript/TypeScript SDK for [Cognipeer AI](https://cognipeer.com) - Build conversational AI applications with client-side tool execution and webchat integration.\n\n[![npm version](https://badge.fury.io/js/@cognipeer%2Fsdk.svg)](https://www.npmjs.com/package/@cognipeer/sdk)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n\nDocumentation: <https://docs.cognipeer.com/client-sdk/guide/getting-started>\n## Features\n\n- 🚀 **Simple & Intuitive** - Easy-to-use API for conversational AI\n- 🔧 **Client-Side Tools** - Define JavaScript functions the AI can automatically execute\n- 💬 **Webchat Integration** - Embed chat UI with iframe, URL, or floating widget\n- 📦 **Universal Support** - Works in Node.js, browsers, and edge runtimes\n- 🎯 **Type-Safe** - Full TypeScript support with complete type definitions\n- ⚡ **Auto-Execution** - Automatic client tool execution with retry logic\n- 🌊 **Flow Support** - Execute complex workflows and automations\n- 🔒 **Secure** - Your sensitive operations stay on your infrastructure\n\n## Installation\n\n```bash\nnpm install @cognipeer/sdk\n```\n\n## Quick Start\n\n### Prerequisites\n\nBefore using the SDK, you need:\n\n1. **Personal Access Token (PAT)**: Generate from workspace settings → Security → Personal Access Tokens\n   - PAT tokens are user-scoped and always associate conversations with the authenticated user\n2. **API Channel Hook ID**: Create an API channel for your peer to get a hookId\n\n### Token Types\n\nThe SDK supports two types of authentication tokens:\n\n- **Personal Access Token (PAT)**: Prefixed with `pat_`, these tokens are user-scoped. All conversations created with PAT tokens are associated with the authenticated user (`userId`).\n- **API Token**: Legacy tokens used with the `hookId`. These tokens allow you to specify a `contactId` for conversations, which is useful for contact-based operations.\n\n### Programmatic API\n\n```typescript\nimport { CognipeerClient } from '@cognipeer/sdk';\n\nconst client = new CognipeerClient({\n  token: 'pat_your-personal-access-token',  // Personal Access Token from settings\n  hookId: 'your-api-channel-hook-id'        // From API channel settings\n});\n\n// The peer associated with your API channel is automatically used\n// No need to specify peerId in requests!\n\n// Create a conversation (PAT token - userId automatically set)\nconst response = await client.conversations.create({\n  messages: [\n    { role: 'user', content: 'Hello! How can you help me?' }\n  ]\n});\n\nconsole.log(response.content);\n\n// With API token, you can specify a contactId\n// Note: contactId is only used with API tokens, not PAT tokens\nconst responseWithContact = await client.conversations.create({\n  contactId: 'contact-123',  // Only works with API tokens\n  messages: [\n    { role: 'user', content: 'Hello from contact!' }\n  ]\n});\n\n// List conversations with pagination\nconst { data, total, page, limit } = await client.conversations.list({\n  page: 1,\n  limit: 10,\n  sort: { createdDate: -1 }\n});\n\nconsole.log(`Showing ${data.length} of ${total} conversations`);\ndata.forEach(conv => {\n  console.log(`- ${conv.title || 'Untitled'} (${conv._id})`);\n});\n\n// Get peer information\nconst peer = await client.peers.get();\nconsole.log(`Using peer: ${peer.name}`);\n\n// Get current user information\nconst user = await client.users.get();\nconsole.log(`Authenticated as: ${user.email}`);\n\n// Get channel information\nconst channel = await client.channels.get();\nconsole.log(`Channel: ${channel.name}, Active: ${channel.isActive}`);\n```\n\n### Webchat Integration\n\n```typescript\nimport { CognipeerWebchat } from '@cognipeer/sdk';\n\n// Floating widget (like Intercom)\nconst widget = CognipeerWebchat.createWidget({\n  hookId: 'your-hook-id',\n  position: 'bottom-right'\n});\n\n// Or embed in a container\nconst webchat = new CognipeerWebchat({\n  hookId: 'your-hook-id',\n  containerId: 'chat-container'\n});\nwebchat.mount();\n```\n\n**[📖 Full Webchat Documentation](./docs/WEBCHAT.md)**\n\n## Client-Side Tool Execution\n\nThe killer feature - define JavaScript functions that the AI can automatically call:\n\n```typescript\nconst response = await client.conversations.create({\n  messages: [\n    { role: 'user', content: 'What is the weather in Tokyo?' }\n  ],\n  clientTools: [{\n    type: 'function',\n    function: {\n      name: 'getCurrentWeather',\n      description: 'Get current weather for a city',\n      parameters: {\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        },\n        required: ['city']\n      }\n    },\n    implementation: async ({ city }) => {\n      // Your weather API call here\n      const response = await fetch(`https://api.weather.com/${city}`);\n      const data = await response.json();\n      return `Temperature: ${data.temp}°C, Conditions: ${data.conditions}`;\n    }\n  }]\n});\n\n// The AI automatically called your function and used the result!\nconsole.log(response.content);\n```\n\n## Key Capabilities\n\n### Conversation Management\n\n```typescript\n// Create a new conversation\nconst { conversationId } = await client.conversations.create({\n  messages: [{ role: 'user', content: 'My name is Alice' }]\n});\n\n// Send follow-up message\nconst response = await client.conversations.sendMessage({\n  conversationId,\n  content: 'What is my name?'\n});\n\nconsole.log(response.content); // \"Your name is Alice\"\n\n// List all conversations with pagination (PAT token - automatically filtered by user)\nconst { data, total, page, limit } = await client.conversations.list({\n  page: 1,\n  limit: 20,\n  sort: { createdDate: -1 }\n});\n\n// List conversations for a specific contact (API token only - contactId required)\nconst contactConversations = await client.conversations.list({\n  contactId: 'contact-123',  // Required with API tokens\n  page: 1,\n  limit: 20,\n  sort: { createdDate: -1 }\n});\n\n// Get a specific conversation\nconst conversation = await client.conversations.get(conversationId);\n\n// Get messages from a conversation\nconst messages = await client.conversations.getMessages({\n  conversationId,\n  messagesCount: 50\n});\n\n// Send message with contactId (API token only)\nconst responseWithContact = await client.conversations.sendMessage({\n  conversationId,\n  contactId: 'contact-123',  // Only works with API tokens\n  content: 'Follow-up from contact'\n});\n```\n\n### Structured JSON Output\n\n```typescript\nconst response = await client.conversations.create({\n  messages: [\n    { role: 'user', content: 'Extract: John Doe, age 30, NYC' }\n  ],\n  response_format: 'json',\n  response_schema: {\n    type: 'object',\n    properties: {\n      name: { type: 'string' },\n      age: { type: 'number' },\n      city: { type: 'string' }\n    }\n  }\n});\n\nconsole.log(response.output); // { name: \"John Doe\", age: 30, city: \"NYC\" }\n```\n\n### Execute Workflows\n\n```typescript\nconst result = await client.flows.execute({\n  flowId: 'your-flow-id',\n  inputs: {\n    document: 'base64-content',\n    analysisType: 'detailed'\n  }\n});\n\nconsole.log(result.outputs);\n```\n\n## Real-World Examples\n\n### Database Integration\n\n```typescript\nconst tools = [{\n  type: 'function',\n  function: {\n    name: 'queryUsers',\n    description: 'Search users in database',\n    parameters: {\n      type: 'object',\n      properties: {\n        email: { type: 'string' }\n      }\n    }\n  },\n  implementation: async ({ email }) => {\n    const users = await db.query('SELECT * FROM users WHERE email = $1', [email]);\n    return JSON.stringify(users);\n  }\n}];\n\nconst response = await client.conversations.create({\n  messages: [{ role: 'user', content: 'Find user john@example.com' }],\n  clientTools: tools\n});\n```\n\n### API Integration\n\n```typescript\nconst tools = [{\n  type: 'function',\n  function: {\n    name: 'sendEmail',\n    description: 'Send an email',\n    parameters: {\n      type: 'object',\n      properties: {\n        to: { type: 'string' },\n        subject: { type: 'string' },\n        body: { type: 'string' }\n      }\n    }\n  },\n  implementation: async ({ to, subject, body }) => {\n    await emailService.send(to, subject, body);\n    return 'Email sent successfully';\n  }\n}];\n```\n\n## Configuration\n\n```typescript\nconst client = new CognipeerClient({\n  // Required\n  token: 'your-personal-access-token',  // PAT token\n  hookId: 'your-channel-hook-id',       // API channel hook ID\n  \n  // Optional\n  apiUrl: 'https://api.cognipeer.com/v1',  // API base URL\n  autoExecuteTools: true,                   // Auto-execute client tools\n  maxToolExecutions: 10,                    // Max tool execution loops\n  timeout: 60000,                           // Request timeout in ms\n  \n  // Callbacks\n  onToolStart: (toolName, args) => {\n    console.log(`Executing tool: ${toolName}`, args);\n  },\n  onToolEnd: (toolName, result) => {\n    console.log(`Tool completed: ${toolName}`, result);\n  }\n});\n```\n\n## API Methods\n\n### Conversations\n\n```typescript\n// Create a new conversation\nconst response = await client.conversations.create({\n  messages: [{ role: 'user', content: 'Hello' }],\n  clientTools: [...],  // Optional client-side tools\n  response_format: 'text' | 'json',  // Optional\n  response_schema: {...}  // Optional for JSON mode\n});\n\n// Send a message to existing conversation\nconst response = await client.conversations.sendMessage({\n  conversationId: 'conv-id',\n  content: 'Follow-up message',\n  clientTools: [...]  // Optional\n});\n\n// Resume message execution with tool result (manual mode)\nconst response = await client.conversations.resumeMessage({\n  conversationId: 'conv-id',\n  messageId: 'msg-id',\n  toolResult: {\n    executionId: 'exec-id',\n    success: true,\n    output: 'Tool result'\n  }\n});\n\n// List conversations with pagination\nconst { data, total, page, limit } = await client.conversations.list({\n  page: 1,          // Page number (default: 1)\n  limit: 10,        // Items per page (default: 10)\n  sort: { createdDate: -1 },  // Sort order\n  filter: {}        // Additional filters (optional)\n});\n\n// Get a single conversation\nconst conversation = await client.conversations.get('conv-id');\n\n// Get messages from a conversation\nconst messages = await client.conversations.getMessages({\n  conversationId: 'conv-id',\n  messagesCount: 20  // Number of recent messages (default: 10)\n});\n```\n\n### Flows (Apps)\n\n```typescript\n// Execute a workflow/app\nconst result = await client.flows.execute({\n  flowId: 'flow-id',\n  inputs: {\n    // Flow-specific inputs\n    document: 'base64-content',\n    analysisType: 'detailed'\n  },\n  version: 'latest'  // Optional: specific version\n});\n\nconsole.log(result.outputs);\n```\n\n### Peers\n\n```typescript\n// Get the peer associated with your API channel\nconst peer = await client.peers.get();\n\nconsole.log(peer.name);        // Peer name\nconsole.log(peer.modelId);     // AI model being used\nconsole.log(peer.prompt);      // System prompt\n```\n\n### Users\n\n```typescript\n// Get authenticated user information\nconst user = await client.users.get();\n\nconsole.log(user.email);           // User email\nconsole.log(user.displayName);     // Display name\nconsole.log(user.workspace.name);  // Workspace name\nconsole.log(user.roles);           // User roles\n```\n\n### Channels\n\n```typescript\n// Get API channel information\nconst channel = await client.channels.get();\n\nconsole.log(channel.hookId);       // Hook ID\nconsole.log(channel.channelType);  // Channel type (e.g., 'api')\nconsole.log(channel.isActive);     // Active status\nconsole.log(channel.prompt);       // Channel-specific prompt\n```\n\n### Contacts\n\n**Note**: The Contacts API supports **both PAT and API tokens** for authentication, making it unique among SDK endpoints.\n\n```typescript\n// Create a new contact\nconst contact = await client.contacts.create({\n  email: 'john.doe@example.com',\n  name: 'John Doe',\n  phone: '+1234567890',\n  properties: {\n    company: 'ACME Corp',\n    position: 'CEO'\n  },\n  tags: ['vip', 'enterprise'],\n  status: 'active'\n});\n\n// Get a contact by email\nconst contact = await client.contacts.get({ \n  email: 'john.doe@example.com' \n});\n\n// Or by integration ID\nconst contact = await client.contacts.get({ \n  integrationId: 'ext-12345' \n});\n\n// Update a contact\nconst updated = await client.contacts.update({\n  email: 'john.doe@example.com',\n  data: {\n    name: 'John Smith',\n    status: 'vip',\n    properties: {\n      company: 'New Corp'\n    }\n  }\n});\n\n// List contacts with pagination\nconst { data, total, page, limit } = await client.contacts.list({\n  page: 1,\n  limit: 20,\n  filter: { status: 'active' },\n  sort: { createdDate: -1 }\n});\n\nconsole.log(`Total contacts: ${total}`);\ndata.forEach(contact => {\n  console.log(`${contact.name} <${contact.email}>`);\n});\n```\n\n**Authentication Support:**\nThe Contacts API works with both authentication methods:\n\n```typescript\n// With Personal Access Token (PAT)\nconst client = new CognipeerClient({\n  token: 'pat_your-personal-access-token',\n  hookId: 'your-hook-id'\n});\n\n// With API Token\nconst client = new CognipeerClient({\n  token: 'your-api-token',\n  hookId: 'your-channel-hook-id'\n});\n\n// Same contact operations work with either authentication method\nconst contact = await client.contacts.create({\n  email: 'user@example.com',\n  name: 'User Name'\n});\n```\n\n## Browser Support\n\nWorks seamlessly in browsers:\n\n```html\n<script type=\"module\">\n  import { CognipeerClient } from 'https://cdn.jsdelivr.net/npm/@cognipeer/sdk/+esm';\n  \n  const client = new CognipeerClient({\n    token: 'pat_your-token',\n    hookId: 'your-hook-id'\n  });\n  \n  const response = await client.conversations.create({\n    messages: [{ role: 'user', content: 'Hello!' }]\n  });\n  \n  console.log(response.content);\n</script>\n```\n\n## TypeScript Support\n\nFull TypeScript support with comprehensive type definitions:\n\n```typescript\nimport { \n  CognipeerClient, \n  CreateConversationOptions,\n  SendMessageResponse,\n  ExecutableClientTool \n} from '@cognipeer/sdk';\n\nconst client: CognipeerClient = new CognipeerClient({\n  token: process.env.COGNIPEER_TOKEN!,\n  hookId: process.env.COGNIPEER_HOOK_ID!\n});\n\nconst options: CreateConversationOptions = {\n  messages: [{ role: 'user', content: 'Hello' }]\n};\n\nconst response: SendMessageResponse = await client.conversations.create(options);\n```\n\n## Documentation\n\n- **[Getting Started](https://docs.cognipeer.com/client-sdk/guide/getting-started)** - Installation and setup\n- **[Quick Start](https://docs.cognipeer.com/client-sdk/guide/quick-start)** - Your first conversation\n- **[Client Tools](https://docs.cognipeer.com/client-sdk/guide/client-tools)** - Function calling guide\n- **[API Reference](https://docs.cognipeer.com/client-sdk/api/client)** - Complete API documentation\n- **[Examples](https://docs.cognipeer.com/client-sdk/examples/basic)** - Real-world examples\n\n## Requirements\n\n- Node.js 16+ or modern browser\n- Cognipeer API token ([Get one here](https://cognipeer.com))\n\n## Error Handling\n\n```typescript\ntry {\n  const response = await client.conversations.create({\n    messages: [{ role: 'user', content: 'Hello' }]\n  });\n} catch (error) {\n  console.error('Error:', error.message);\n}\n```\n\n## Contributing\n\nContributions are welcome! Open an issue or pull request in the [GitHub repository](https://github.com/Cognipeer/client-sdk).\n\n## License\n\nMIT © [Cognipeer](https://cognipeer.com)\n\n## Support\n\n- **Documentation**: https://docs.cognipeer.com/client-sdk/\n- **Issues**: https://github.com/Cognipeer/client-sdk/issues\n- **Email**: support@cognipeer.com\n- **Discord**: https://discord.gg/cognipeer\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for release history.\n\n---\n\nBuilt with ❤️ by [Cognipeer](https://cognipeer.com)\n","readmeFilename":"README.md"}