{"_id":"@bodhiapp/ext-types","name":"@bodhiapp/ext-types","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@bodhiapp/ext-types","version":"0.0.1","description":"Shared types and constants for Bodhi Browser extension communication protocol","main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"scripts":{"build":"rollup -c rollup.config.js","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["bodhi","chrome-extension","extension-to-extension","types","constants","messaging"],"author":{"name":"BodhiSearch"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/BodhiSearch/bodhi-browser.git","directory":"bodhi-browser-ext/ext-types"},"devDependencies":{"@rollup/plugin-typescript":"^12.1.2","rollup":"^4.28.1","rollup-plugin-dts":"^6.1.1","tslib":"^2.8.1","typescript":"^5.7.2"},"publishConfig":{"access":"public"},"_id":"@bodhiapp/ext-types@0.0.1","gitHead":"ddd2b3bfd94a0de529bf7d68e4ba5920f1b673fa","bugs":{"url":"https://github.com/BodhiSearch/bodhi-browser/issues"},"homepage":"https://github.com/BodhiSearch/bodhi-browser#readme","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ZHOHZ8/R011/8FosaIVhikRXLpcNX0X8af3eejIcinI6HwcTbHIkp+y3gZ7+Buo1Q7zKtS9M87XI4pTzxw3OMg==","shasum":"2a7d99d213f4487e96a637338edc6213edcfd337","tarball":"https://registry.npmjs.org/@bodhiapp/ext-types/-/ext-types-0.0.1.tgz","fileCount":7,"unpackedSize":18743,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC67g43cUqPaDgp506FzcuEcP6Gt5F7+d+/9UbfjtQIHAIgU2zh4S//oQAuUghtkulO1iikdpcepQPDnpBtZqyW6rQ="}]},"_npmUser":{"name":"amir36","email":"amir.nagri@gmail.com"},"directories":{},"maintainers":[{"name":"amir36","email":"amir.nagri@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ext-types_0.0.1_1763484863465_0.5541865267238997"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-18T16:54:23.325Z","0.0.1":"2025-11-18T16:54:23.660Z","modified":"2025-11-18T16:54:24.008Z"},"maintainers":[{"name":"amir36","email":"amir.nagri@gmail.com"}],"description":"Shared types and constants for Bodhi Browser extension communication protocol","homepage":"https://github.com/BodhiSearch/bodhi-browser#readme","keywords":["bodhi","chrome-extension","extension-to-extension","types","constants","messaging"],"repository":{"type":"git","url":"git+https://github.com/BodhiSearch/bodhi-browser.git","directory":"bodhi-browser-ext/ext-types"},"author":{"name":"BodhiSearch"},"bugs":{"url":"https://github.com/BodhiSearch/bodhi-browser/issues"},"license":"MIT","readme":"# @bodhiapp/ext-types\n\nShared types and constants for Bodhi Browser extension communication protocol.\n\n## Overview\n\nThis package provides the core protocol definitions used by:\n- **bodhi-browser-ext**: Chrome extension that bridges web pages to local LLM services\n- **@bodhiapp/bodhijs**: JavaScript library for web applications and external extensions\n\n## Installation\n\n```bash\nnpm install @bodhiapp/ext-types\n```\n\n## Usage\n\n### Constants\n\n```typescript\nimport { MESSAGE_TYPES, BODHI_STREAM_PORT } from '@bodhiapp/ext-types';\n\n// Message types for extension communication\nconsole.log(MESSAGE_TYPES.API_REQUEST); // 'BODHI_API_REQUEST'\nconsole.log(MESSAGE_TYPES.STREAM_REQUEST); // 'BODHI_STREAM_REQUEST'\n\n// Port name for streaming connections\nconst port = chrome.runtime.connectExternal(extensionId, {\n  name: BODHI_STREAM_PORT\n});\n```\n\n### Types\n\n```typescript\nimport type {\n  ApiRequestMessage,\n  ApiResponseMessage,\n  ApiRequest,\n  ApiResponse\n} from '@bodhiapp/ext-types';\n\n// Create a typed API request\nconst request: ApiRequestMessage = {\n  type: MESSAGE_TYPES.API_REQUEST,\n  requestId: 'unique-id',\n  request: {\n    method: 'POST',\n    endpoint: '/v1/chat/completions',\n    body: {\n      model: 'llama3',\n      messages: [{ role: 'user', content: 'Hello!' }]\n    }\n  }\n};\n\n// Handle typed response\nfunction handleResponse(response: ApiResponseMessage) {\n  const { status, body } = response.response;\n  console.log('Status:', status);\n  console.log('Body:', body);\n}\n```\n\n## Communication Patterns\n\n### Web Page → Extension (3-layer)\n\n```\ninject.js → content.js → background.js\n```\n\nUses `window.postMessage` and `chrome.runtime.sendMessage` internally.\n\n### Extension → Extension (Direct)\n\n```\nExternal Extension → background.js\n```\n\nUses `chrome.runtime.sendMessageExternal` and `chrome.runtime.connectExternal`.\n\n## Message Types\n\n- **API_REQUEST** / **API_RESPONSE**: One-time REST API calls\n- **STREAM_REQUEST** / **STREAM_CHUNK**: Streaming responses (SSE)\n- **STREAM_ERROR** / **ERROR**: Error responses\n- **GET_EXTENSION_ID** / **SET_EXTENSION_ID**: Extension detection\n- **TEST_CONNECTION** / **TEST_CONNECTION_RESPONSE**: Backend testing\n\n## Streaming\n\nFor streaming communication, use:\n\n```typescript\nimport { BODHI_STREAM_PORT, MESSAGE_TYPES } from '@bodhiapp/ext-types';\n\n// Create streaming connection\nconst port = chrome.runtime.connectExternal(extensionId, {\n  name: BODHI_STREAM_PORT\n});\n\n// Send streaming request\nport.postMessage({\n  type: MESSAGE_TYPES.STREAM_REQUEST,\n  requestId: 'stream-id',\n  request: {\n    method: 'POST',\n    endpoint: '/v1/chat/completions',\n    body: { stream: true, ... }\n  }\n});\n\n// Handle chunks\nport.onMessage.addListener((message: StreamChunkMessage) => {\n  if (message.type === MESSAGE_TYPES.STREAM_CHUNK) {\n    const chunk = message.response.body;\n    if (chunk.done) {\n      port.disconnect();\n    } else {\n      // Process chunk\n    }\n  }\n});\n```\n\n## Server State\n\n```typescript\nimport type { ServerStateInfo } from '@bodhiapp/ext-types';\n\n// Server state from /bodhi/v1/info endpoint\nconst serverState: ServerStateInfo = {\n  status: 'ready',\n  version: '1.0.0',\n  url: 'http://localhost:1135'\n};\n\n// Possible status values:\n// - 'setup': Server requires initial setup\n// - 'ready': Server ready for requests\n// - 'resource-admin': Server needs resource configuration\n// - 'error': Server encountered an error\n// - 'unreachable': Cannot connect to server\n```\n\n## Architecture\n\nThis package is the **single source of truth** for:\n- Message type constants\n- Request/response formats\n- Streaming protocols\n- Error structures\n- Server state definitions\n\nBoth bodhi-browser-ext and @bodhiapp/bodhijs depend on this package to ensure consistent communication.\n\n## License\n\nMIT\n\n## Repository\n\nhttps://github.com/BodhiSearch/bodhi-browser\n","readmeFilename":"README.md","_rev":"1-6d44baf3b18e5ae994d0b853486d714f"}