{"_id":"@ainative/zerodb-functions","name":"@ainative/zerodb-functions","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@ainative/zerodb-functions","version":"1.0.0","description":"ZeroDB Functions — serverless functions triggered by database events. Supabase Edge Functions compatible API.","main":"index.cjs","module":"index.js","types":"index.d.ts","exports":{".":{"import":"./index.js","require":"./index.cjs","types":"./index.d.ts"}},"scripts":{"test":"node --test tests/basic.test.js","test:verbose":"node --test --test-reporter spec tests/basic.test.js"},"keywords":["supabase-functions-alternative","serverless-functions","database-triggers","event-driven","zerodb","ainative","edge-functions","db-hooks","auto-provisioning","firebase-functions-alternative","claude","cursor","windsurf","mcp","vector-database","database-events","webhooks","serverless"],"author":{"name":"AINative Studio","email":"hello@ainative.studio"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AINative-Studio/zerodb-functions-js.git"},"homepage":"https://zerodb.dev/docs/functions","bugs":{"url":"https://github.com/AINative-Studio/zerodb-functions-js/issues"},"engines":{"node":">=18.0.0"},"_id":"@ainative/zerodb-functions@1.0.0","gitHead":"44fbd329467e9de06987e599567a3d1b119a244c","_nodeVersion":"22.21.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ZKVIZuvldI5UdAz8ieV/DLYNF62WEHFHLWjqxi0pIn9//N/q2fftJxAEcuAi1ldhYBbmMQvDWXnavFSSqU9OKA==","shasum":"06d69187bb144d25646328c202c510f00b310cbf","tarball":"https://registry.npmjs.org/@ainative/zerodb-functions/-/zerodb-functions-1.0.0.tgz","fileCount":6,"unpackedSize":28065,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICyZSsdexnKojYwiI2oo2OALzn3FzECfGcN0HJO4wB88AiEA5WJo5xMUPWPyNh1ZjZng7HC8kCEAKbLu0ylVvcDe4CI="}]},"_npmUser":{"name":"ainative-studio","email":"toby@rely.ventures"},"directories":{},"maintainers":[{"name":"ainative-studio","email":"toby@rely.ventures"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zerodb-functions_1.0.0_1781211643102_0.8294525230919061"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T21:00:42.944Z","1.0.0":"2026-06-11T21:00:43.234Z","modified":"2026-06-11T21:00:43.486Z"},"maintainers":[{"name":"ainative-studio","email":"toby@rely.ventures"}],"description":"ZeroDB Functions — serverless functions triggered by database events. Supabase Edge Functions compatible API.","homepage":"https://zerodb.dev/docs/functions","keywords":["supabase-functions-alternative","serverless-functions","database-triggers","event-driven","zerodb","ainative","edge-functions","db-hooks","auto-provisioning","firebase-functions-alternative","claude","cursor","windsurf","mcp","vector-database","database-events","webhooks","serverless"],"repository":{"type":"git","url":"git+https://github.com/AINative-Studio/zerodb-functions-js.git"},"author":{"name":"AINative Studio","email":"hello@ainative.studio"},"bugs":{"url":"https://github.com/AINative-Studio/zerodb-functions-js/issues"},"license":"MIT","readme":"# @zerodb/functions-js\n\nServerless functions triggered by ZeroDB database events. Drop-in replacement for `@supabase/functions-js`.\n\nZero dependencies. Works with Node.js 18+, Deno, Bun, and Cloudflare Workers.\n\n## Install\n\n```bash\nnpm install @zerodb/functions-js\n```\n\n## Quick Start\n\n```javascript\nimport { ZeroDBFunctions } from '@zerodb/functions-js';\n\nconst functions = new ZeroDBFunctions({\n  apiKey: process.env.ZERODB_API_KEY,\n});\n\n// Create a function triggered by database events\nconst { data, error } = await functions.create('auto-embed', {\n  trigger: 'zerodb.vector.stored',\n  hookConfig: { model: 'bge-m3' },\n});\n\n// Invoke a function\nconst { data: result } = await functions.invoke('auto-embed', {\n  body: { text: 'Hello, World!' },\n});\n\n// List all functions\nconst { data: fns } = await functions.list();\n\n// Update a function\nawait functions.update('auto-embed', {\n  hookConfig: { model: 'text-embedding-3-small' },\n});\n\n// Delete a function\nawait functions.delete('auto-embed');\n```\n\n## API\n\n### `new ZeroDBFunctions(options)`\n\n| Option | Type | Required | Default |\n|--------|------|----------|---------|\n| `apiKey` | `string` | Yes | — |\n| `baseUrl` | `string` | No | `https://api.ainative.studio` |\n| `projectId` | `string` | No | — |\n| `headers` | `object` | No | `{}` |\n| `fetch` | `function` | No | `globalThis.fetch` |\n\n### Methods\n\nAll methods return `Promise<{ data, error }>`.\n\n#### `functions.create(name, config)`\n\nRegister a function triggered by a ZeroDB event.\n\n```javascript\nawait functions.create('on-vector-store', {\n  trigger: 'zerodb.vector.stored',   // required\n  hookConfig: { /* handler config */ },\n  projectId: 'proj-123',             // optional, scopes to project\n});\n```\n\n#### `functions.invoke(name, options?)`\n\nInvoke a function by name.\n\n```javascript\nconst { data, error } = await functions.invoke('my-function', {\n  body: { key: 'value' },\n  headers: { 'X-Custom': 'yes' },\n});\n```\n\n#### `functions.list(options?)`\n\nList registered functions.\n\n```javascript\nconst { data } = await functions.list({\n  eventType: 'zerodb.vector.stored',  // filter by event\n  activeOnly: true,                    // default: true\n});\n```\n\n#### `functions.get(id)`\n\nGet a single function by UUID.\n\n#### `functions.update(nameOrId, config)`\n\nUpdate a function by name or UUID.\n\n```javascript\nawait functions.update('my-function', {\n  hookConfig: { url: 'https://new-webhook.example.com' },\n  isActive: false,\n});\n```\n\n#### `functions.delete(nameOrId)`\n\nDelete a function by name or UUID.\n\n## Event Types\n\n| Event | Description |\n|-------|-------------|\n| `zerodb.vector.stored` | A vector embedding was stored |\n| `zerodb.vector.deleted` | A vector was deleted |\n| `zerodb.memory.stored` | A memory was stored via ZeroMemory |\n| `zerodb.memory.recalled` | A memory was recalled |\n| `zerodb.table.row_inserted` | A row was inserted into a NoSQL table |\n| `zerodb.table.row_updated` | A row was updated |\n| `zerodb.table.row_deleted` | A row was deleted |\n| `zerodb.file.uploaded` | A file was uploaded to storage |\n\n## Error Handling\n\n```javascript\nimport { FunctionsHttpError, FunctionsFetchError } from '@zerodb/functions-js';\n\nconst { data, error } = await functions.invoke('my-fn');\n\nif (error instanceof FunctionsHttpError) {\n  console.log('HTTP error:', error.status, error.message);\n} else if (error instanceof FunctionsFetchError) {\n  console.log('Network error:', error.message);\n}\n```\n\n## Migrating from Supabase Edge Functions\n\n| Supabase | ZeroDB |\n|----------|--------|\n| `supabase.functions.invoke('hello')` | `functions.invoke('hello')` |\n| Deploy via CLI (`supabase functions deploy`) | `functions.create('hello', { trigger: '...' })` |\n| Manual function files | Event-driven hooks, auto-provisioned |\n| `Deno.serve(...)` handler | Hook config points to handler |\n\n**Key difference:** ZeroDB functions are event-driven by default. Instead of deploying code files, you register hooks that trigger on database events. The handler runs in ZeroDB's sandboxed executor.\n\n```javascript\n// Supabase\nconst { data, error } = await supabase.functions.invoke('hello', {\n  body: { name: 'World' },\n});\n\n// ZeroDB — same API shape\nconst { data, error } = await functions.invoke('hello', {\n  body: { name: 'World' },\n});\n```\n\n## CommonJS\n\n```javascript\nconst { ZeroDBFunctions } = require('@zerodb/functions-js');\n```\n\n## Get an API Key\n\n1. Sign up at [zerodb.dev](https://zerodb.dev)\n2. Create a project\n3. Copy your API key from the dashboard\n\nOr use the CLI:\n\n```bash\nnpx zerodb-cli init\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-1bcae4b42f04ef7556442d68248b6fca"}