{"_id":"@caido-utils/frontend-sdk","name":"@caido-utils/frontend-sdk","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@caido-utils/frontend-sdk","version":"0.1.0","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./composables":{"types":"./dist/composables/index.d.ts","import":"./dist/composables/index.js"}},"dependencies":{},"peerDependencies":{"@caido/sdk-frontend":">=0.54.0","@codemirror/view":">=6.0.0","primevue":">=4.0.0","vue":">=3.4.0"},"devDependencies":{"@caido/sdk-frontend":"0.54.2-beta.15","@codemirror/view":"6.39.6","primevue":"4.1.0","typescript":"^5.5.4","unbuild":"^3.6.1","vue":"3.4.37","vue-tsc":"^2.0.29"},"scripts":{"build":"unbuild"},"_id":"@caido-utils/frontend-sdk@0.1.0","description":"Composables and utilities for Caido plugin frontends.","_integrity":"sha512-ovsBQQQXrQlms28jad0vOXe7+82WJyjnIbOcOkC+6Atjp7SVPnzrVP+/tXTmSWXXLHZBzgRaDyOtysGwntTOTw==","_resolved":"/tmp/76d3daf658af93099ceb21f9cf6e4057/caido-utils-frontend-sdk-0.1.0.tgz","_from":"file:caido-utils-frontend-sdk-0.1.0.tgz","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-ovsBQQQXrQlms28jad0vOXe7+82WJyjnIbOcOkC+6Atjp7SVPnzrVP+/tXTmSWXXLHZBzgRaDyOtysGwntTOTw==","shasum":"f19aa280df20e3602126ad2b9d1206b9f8c39481","tarball":"https://registry.npmjs.org/@caido-utils/frontend-sdk/-/frontend-sdk-0.1.0.tgz","fileCount":23,"unpackedSize":19835,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCI8nBnATPFvH+fz0klmjBidP6d93btV0f9f4B0xhx6fAIgcPckYCe57oLzZcAwsPsXXpfYEHyuRmCkG3F9++g/F6o="}]},"_npmUser":{"name":"caido-utils","email":"r54778790@gmail.com"},"directories":{},"maintainers":[{"name":"caido-utils","email":"r54778790@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/frontend-sdk_0.1.0_1776312461886_0.6076522457077931"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-16T04:07:41.736Z","0.1.0":"2026-04-16T04:07:42.006Z","modified":"2026-04-16T04:07:42.275Z"},"maintainers":[{"name":"caido-utils","email":"r54778790@gmail.com"}],"description":"Composables and utilities for Caido plugin frontends.","readme":"# @caido-utils/frontend\n\nComposables and utilities for Caido plugin frontends.\n\n## Installation\n\n```bash\npnpm add @caido-utils/frontend\n```\n\n**Peer dependencies:** `vue`, `primevue`, `@caido/sdk-frontend`, `@codemirror/view`\n\n```ts\nimport { useFrontend, useReplay, getRequestId } from \"@caido-utils/frontend\";\n```\n\nFor Vue components, see [`@caido-utils/components`](../components/README.md).\n\n---\n\n## Composables\n\n### useFrontend\n\nCaido editor utilities.\n\n```ts\nconst {\n  getEditorContent,\n  setEditorContent,\n  getSelectedText,\n  getReplayRequestId,\n} = useFrontend(sdk);\n```\n\n#### Returns\n\n| Method               | Signature                                            | Description                                |\n| -------------------- | ---------------------------------------------------- | ------------------------------------------ |\n| `getEditorView`      | `(showErrors?: boolean) => EditorView \\| undefined`  | Get active CodeMirror editor view          |\n| `getEditorContent`   | `() => string \\| undefined`                          | Get active editor text content             |\n| `getSelectedText`    | `() => string \\| undefined`                          | Get selected text in editor                |\n| `setEditorContent`   | `(content: string, showErrors?: boolean) => boolean` | Replace editor content                     |\n| `getReplayRequestId` | `() => string \\| undefined`                          | Get request ID from current replay session |\n\n---\n\n### useEditor\n\nCodeMirror editor management (SDK-independent).\n\n```ts\nconst { updateEditor, clearEditor, scrollToPosition } = useEditor(\n  () => editorViewRef.value,\n);\n```\n\n#### Returns\n\n| Method             | Signature                                 | Description                                  |\n| ------------------ | ----------------------------------------- | -------------------------------------------- |\n| `updateEditor`     | `(content: string) => Promise<void>`      | Replace editor content (skips if unchanged)  |\n| `clearEditor`      | `() => void`                              | Clear editor content                         |\n| `scrollToPosition` | `(line: number, column?: number) => void` | Scroll to line (1-based) and optional column |\n\n---\n\n### useReplay\n\nSend requests to Caido's Replay tab.\n\n```ts\nconst { sendToReplay, sendRequestToReplay } = useReplay(sdk, \"My Collection\");\n```\n\n#### Returns\n\n| Method                | Signature                                                 | Description                     |\n| --------------------- | --------------------------------------------------------- | ------------------------------- |\n| `sendToReplay`        | `(url: string, collectionName?: string) => Promise<void>` | Create replay session from URL  |\n| `sendRequestToReplay` | `(requestId: string, options?) => Promise<void>`          | Send existing request to replay |\n\n`sendRequestToReplay` options:\n\n| Option           | Type     | Description                 |\n| ---------------- | -------- | --------------------------- |\n| `collectionName` | `string` | Override default collection |\n| `sessionName`    | `string` | Custom session name         |\n\n---\n\n### useStorage\n\nReactive plugin storage with auto-persistence.\n\n```ts\n// Inside a Pinia defineStore:\nconst { data, save } = useStorage(sdk, {\n  filter: \"\",\n  pageSize: 100,\n});\n\n// data.filter is Ref<string>, data.pageSize is Ref<number>\ndata.filter.value = \"req.host.cont:example.com\";\nawait save();\n```\n\n#### Returns\n\n| Property | Type                            | Description                   |\n| -------- | ------------------------------- | ----------------------------- |\n| `data`   | `{ [K in keyof T]: Ref<T[K]> }` | Reactive refs for each key    |\n| `save`   | `() => Promise<void>`           | Persist all values to storage |\n\nAutomatically hydrates from existing storage on setup and listens for external changes.\n\n---\n\n### useDialogManager\n\nGeneric dialog state manager.\n\n```ts\ntype DialogType = \"create\" | \"edit\" | \"delete\";\nconst { openDialog, closeDialog, isDialogOpen, getDialogData } =\n  useDialogManager<DialogType>();\n\nopenDialog(\"edit\", { id: \"123\" });\nisDialogOpen(\"edit\"); // true\ngetDialogData<{ id: string }>(); // { id: \"123\" }\ncloseDialog();\n```\n\n#### Returns\n\n| Method          | Signature                           | Description                         |\n| --------------- | ----------------------------------- | ----------------------------------- |\n| `activeDialog`  | `Ref<{ type, data } \\| undefined>`  | Current dialog state                |\n| `openDialog`    | `(type: T, data?: unknown) => void` | Open a dialog with optional payload |\n| `closeDialog`   | `() => void`                        | Close active dialog                 |\n| `isDialogOpen`  | `(type: T) => boolean`              | Check if specific dialog is open    |\n| `getDialogData` | `<D>() => D \\| undefined`           | Get typed payload of active dialog  |\n\n---\n\n## Utilities\n\n### getRequestId\n\nExtract a single request ID from a Caido command context.\n\n```ts\nimport { getRequestId } from \"@caido-utils/frontend\";\n\nsdk.commands.register(\"my:command\", {\n  name: \"My Command\",\n  run: (context) => {\n    const requestId = getRequestId(context);\n  },\n});\n```\n\nSupported context types: `RequestContext`, `RequestRowContext` (first item), `ResponseContext`.\n\n### getRequestIds\n\nExtract all request IDs from a command context (supports multi-row selection).\n\n```ts\nimport { getRequestIds } from \"@caido-utils/frontend\";\n\nconst ids = getRequestIds(context); // string[]\n```\n","readmeFilename":"README.md","_rev":"1-2387a5559882c17104f60771445dbb88"}