{"_id":"@blackswampai/n8n-nodes-openobserve","_rev":"4-6906a7d25f367a37711047f778a5eb97","name":"@blackswampai/n8n-nodes-openobserve","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@blackswampai/n8n-nodes-openobserve","version":"0.1.0","keywords":["n8n-community-node-package","n8n","openobserve","observability","logs","metrics","traces"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-openobserve@0.1.0","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://github.com/BlackSwampAI/n8n-nodes-openobserve#readme","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues"},"n8n":{"nodes":["dist/nodes/OpenObserve/OpenObserve.node.js","dist/nodes/OpenObserveTrigger/OpenObserveTrigger.node.js"],"strict":true,"credentials":["dist/credentials/OpenObserveApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"da7285750584240a055819246f711b242035e907","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-openobserve/-/n8n-nodes-openobserve-0.1.0.tgz","fileCount":123,"integrity":"sha512-Uij5tH7aa4tDoKXnZQa1oSfRbqLcc49gcfNpHGA9wWO08lM0rEEL4y768melekIGts4zo+ur0ProQ7h5/oLBSQ==","signatures":[{"sig":"MEQCIH5gzA4agcWUuU4j81oa5RSgud9C1jJqwEZ/O27Ucj9mAiAVwIKZXraCwb+FFldnHbFGkp6J5IVCeqfJkh9UpJ7RpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-openobserve@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":409140},"engines":{"node":">=22.22.0"},"gitHead":"fb74c4532c9ead67fce691f48bbd9fa0edc91be2","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:unit":"vitest run","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","format:check":"prettier --check .","package:check":"npm run release:check && node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","scan:published":"node scripts/scan-published.mjs"},"_npmUser":{"name":"christopherjnelson","email":"root@chris.guru"},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-openobserve.git","type":"git"},"_npmVersion":"11.16.0","description":"Independent n8n community integration for OpenObserve","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"eslint-plugin-n8n-nodes-base":false},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.46.4"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-openobserve_0.1.0_1788672490654_0.6759642815392262","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@blackswampai/n8n-nodes-openobserve","version":"0.1.1","keywords":["n8n-community-node-package","n8n","openobserve","observability","logs","metrics","traces"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-openobserve@0.1.1","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://github.com/BlackSwampAI/n8n-nodes-openobserve#readme","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues"},"n8n":{"nodes":["dist/nodes/OpenObserve/OpenObserve.node.js","dist/nodes/OpenObserveTrigger/OpenObserveTrigger.node.js"],"strict":true,"credentials":["dist/credentials/OpenObserveApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"1590e63a5367e43a74689f1e0215e76a288ef149","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-openobserve/-/n8n-nodes-openobserve-0.1.1.tgz","fileCount":123,"integrity":"sha512-zMd0dW13656ptSbqnoPWOlt0h9HriNB5K5ou36AH+uuZSVII3Spt8U9k+YCWxs9Ocxp1WuhbJoqWk4VSkNryNA==","signatures":[{"sig":"MEUCIQCbTxN5Hoq6qQkn8qzV6iJBHunleMs96NJUzg+4XGK+SgIgP8EndYejSJrjgJcJOE18D0B1v73QHWtJQMIYiiS+EXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-openobserve@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":410154},"engines":{"node":">=22.22.0"},"gitHead":"5ac3ac4c4f36950c55e2ca6359fba650997bbcaa","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:unit":"vitest run","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","scan:source":"node scripts/scan-source.mjs","format:check":"prettier --check .","package:check":"npm run release:check && node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","scan:published":"node scripts/scan-published.mjs"},"_npmUser":{"name":"christopherjnelson","email":"root@chris.guru"},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-openobserve.git","type":"git"},"_npmVersion":"11.16.0","description":"Independent n8n community integration for OpenObserve","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"eslint-plugin-n8n-nodes-base":false},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.46.4","@n8n/scan-community-package":"0.34.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-openobserve_0.1.1_1788674997233_0.12116360626592648","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@blackswampai/n8n-nodes-openobserve","version":"0.1.2","keywords":["n8n-community-node-package","n8n","openobserve","observability","logs","metrics","traces"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-openobserve@0.1.2","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://github.com/BlackSwampAI/n8n-nodes-openobserve#readme","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues"},"n8n":{"nodes":["dist/nodes/OpenObserve/OpenObserve.node.js","dist/nodes/OpenObserveTrigger/OpenObserveTrigger.node.js"],"strict":true,"credentials":["dist/credentials/OpenObserveApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"50a25c4ba9f778bbc23f0ca7910296cd048277ff","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-openobserve/-/n8n-nodes-openobserve-0.1.2.tgz","fileCount":123,"integrity":"sha512-VNauB6AaJ8+2p++IMoEfeYRhsFyRNqvEnaD4DMqUVFhObSTWZx8mD7kTPVdST0IarSP1+SyQ7Jnrzzu94I4o0A==","signatures":[{"sig":"MEUCIQDFN5bZ1yVkk4VSUn2d0HdoHTLyogzDfop2DqBvOu6ICgIgHZgigLOUwJtZYF6GejIVUKNpZWm/gfnBR6hYCG9rMIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-openobserve@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":410154},"engines":{"node":">=22.22.0"},"gitHead":"82500d888a8d793b4e80c9fd25e8e11dbee94f5e","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:unit":"vitest run","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","scan:source":"node scripts/scan-source.mjs","format:check":"prettier --check .","package:check":"npm run release:check && node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","scan:published":"node scripts/scan-published.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07766baf-d713-4e54-a67c-f75329ebb9bd"}},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-openobserve.git","type":"git"},"_npmVersion":"11.16.0","description":"Independent n8n community integration for OpenObserve","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"eslint-plugin-n8n-nodes-base":false},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.46.4","@n8n/scan-community-package":"0.34.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-openobserve_0.1.2_1788676441763_0.3913069022261928","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@blackswampai/n8n-nodes-openobserve","version":"0.1.3","packageManager":"npm@11.19.0","description":"Independent n8n community integration for OpenObserve","license":"MIT","homepage":"https://blackswampai.com/n8n-nodes/openobserve/","keywords":["n8n-community-node-package","n8n","openobserve","observability","logs","metrics","traces"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"repository":{"type":"git","url":"git+https://github.com/BlackSwampAI/n8n-nodes-openobserve.git"},"bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues"},"scripts":{"build":"n8n-node build","build:watch":"tsc --watch","dev":"n8n-node dev","format":"prettier --write .","format:check":"prettier --check .","lint":"n8n-node lint","lint:fix":"n8n-node lint --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","test":"vitest run","test:unit":"vitest run","release:check":"node scripts/release-check.mjs","package:check":"npm run release:check && node scripts/package-check.mjs","smoke:load":"node scripts/node-load-smoke.mjs","smoke:install":"node scripts/package-install-smoke.mjs","scan:source":"node scripts/scan-source.mjs","scan:published":"node scripts/scan-published.mjs","release":"n8n-node release","prepublishOnly":"n8n-node prerelease"},"n8n":{"n8nNodesApiVersion":1,"strict":true,"credentials":["dist/credentials/OpenObserveApi.credentials.js"],"nodes":["dist/nodes/OpenObserve/OpenObserve.node.js","dist/nodes/OpenObserveTrigger/OpenObserveTrigger.node.js"]},"devDependencies":{"@n8n/node-cli":"0.46.4","@n8n/scan-community-package":"0.34.0","eslint":"9.32.0","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","vitest":"4.1.11"},"allowScripts":{"eslint-plugin-n8n-nodes-base":false},"peerDependencies":{"n8n-workflow":"*"},"engines":{"node":">=22.22.0"},"publishConfig":{"access":"public"},"gitHead":"da96742cfa5fc90f3883ac5418b940aee86af535","_id":"@blackswampai/n8n-nodes-openobserve@0.1.3","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-8TkpP8ZUGA4TWuL4bxyyF7PXSEf69V51UP7jivxhWDghgC+N9Epu9VePeoBio+XKVratGnTHXcIr/UZyhKbpLQ==","shasum":"4635e4f5c594f77105f08d881a6074482805c4d5","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-openobserve/-/n8n-nodes-openobserve-0.1.3.tgz","fileCount":123,"unpackedSize":410282,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-openobserve@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFlysB09K83BnfluWWM2DP1tRJk3fq1W42uRwiBfV9vYAiEA4ysJ3qs46zZ6oEdkxZEgugY2fsoAMJzWz3qa8iAWcHQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07766baf-d713-4e54-a67c-f75329ebb9bd"}},"directories":{},"maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-openobserve_0.1.3_1788688360775_0.8483676918048879"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-06T05:28:10.472Z","modified":"2026-09-06T09:52:41.183Z","0.1.0":"2026-09-06T05:28:10.789Z","0.1.1":"2026-09-06T06:09:57.387Z","0.1.2":"2026-09-06T06:34:01.894Z","0.1.3":"2026-09-06T09:52:40.894Z"},"bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues"},"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","homepage":"https://blackswampai.com/n8n-nodes/openobserve/","keywords":["n8n-community-node-package","n8n","openobserve","observability","logs","metrics","traces"],"repository":{"type":"git","url":"git+https://github.com/BlackSwampAI/n8n-nodes-openobserve.git"},"description":"Independent n8n community integration for OpenObserve","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"readme":"# @blackswampai/n8n-nodes-openobserve\n\n[![npm version](https://img.shields.io/npm/v/%40blackswampai%2Fn8n-nodes-openobserve)](https://www.npmjs.com/package/@blackswampai/n8n-nodes-openobserve)\n[![CI](https://github.com/BlackSwampAI/n8n-nodes-openobserve/actions/workflows/ci.yml/badge.svg)](https://github.com/BlackSwampAI/n8n-nodes-openobserve/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/npm/l/%40blackswampai%2Fn8n-nodes-openobserve)](LICENSE.md)\n\nIndependent Black Swamp AI n8n community integration for self-hosted [OpenObserve](https://openobserve.ai/) and OpenObserve Cloud.\n\n> This is an unofficial Black Swamp AI community integration. It is not affiliated with, endorsed by, sponsored by, or maintained by OpenObserve. The OpenObserve name and logo belong to their respective owner(s) and are used only to identify compatibility.\n\n[Installation](#installation) · [Compatibility](#compatibility) · [Credentials](#credentials) · [Operations](#operations) · [Troubleshooting](#troubleshooting) · [Resources](#resources)\n\n## Installation\n\nInstall this package in a self-hosted n8n instance:\n\n1. Open **Settings → Community Nodes**.\n2. Select **Install** and enter `@blackswampai/n8n-nodes-openobserve`.\n3. Review n8n's community-node warning and confirm the installation.\n\nReleases are published only by the tag-triggered GitHub Actions workflow with provenance; local publication is unsupported. Verify the **Provenance** record on the npm package page or run `npm view @blackswampai/n8n-nodes-openobserve dist.attestations`.\n\n## Compatibility\n\n| Component         | Validated baseline                                                               | Notes                                                                                                      |\n| ----------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |\n| Node.js           | 22.22 or newer                                                                   | Enforced by package metadata; the release workflow uses Node.js 24.                                        |\n| n8n               | 2.37.10 disposable runtime; host-provided `n8n-workflow` 2.33.2 compile boundary | The packed action, trigger, credential, resources, and operations loaded from a clean `/tmp` installation. |\n| OpenObserve OSS   | v0.92.2, pinned by immutable image digest                                        | Writable lifecycles are exercised only against the local disposable organization.                          |\n| OpenObserve Cloud | Current generated OAS reviewed                                                   | Runtime execution remains unverified because no designated Cloud credentials were supplied.                |\n\n## Credentials\n\nConfigure the OpenObserve API credential with:\n\n- **Base URL**: Cloud or self-hosted API origin, including an optional reverse-proxy path.\n- **Organization ID**: the configured OpenObserve organization.\n- **Email / Account Identifier** and **Secret**: HTTP Basic credentials. The secret can be a user password or a self-hosted service-account token.\n\nService accounts are preferred for self-hosted production automation. OpenObserve Cloud currently requires user credentials because service accounts are not supported there. Never put production credentials in `docker-compose.yml` or committed fixtures.\n\n## Operations\n\n- Stream: Get Many, Get Schema, Update Settings, Delete Fields, and Delete for log, metric, and trace stream types.\n- Log: Ingest one structured JSON object or batch all n8n input-item JSON objects through OpenObserve's ordinary JSON-array endpoint.\n- Search: SQL Query, Get Field Values, and current POST Search Around.\n- Metric: PromQL instant/range queries, metadata, labels, label values, and series discovery.\n- Trace: read-only Get Latest and Get DAG. Enterprise-only Service Graph is not exposed.\n- Function: Create, Get Many, Get Dependencies, Update, Delete, and Validate VRL.\n- Dashboard: Create, Get, Get Many, Update, and Delete with version/hash-preserving updates.\n- Alert Template: Create, Get, Get Many, Get Prebuilt, Update, and Delete.\n- Alert Destination: webhook Create, Get, Get Many, Update, and Delete, with returned header values redacted.\n- Alert: scheduled/real-time Create, Get, Get Many, Update, Delete, Enable/Disable, Trigger Manually, Clone, Get History, and JSON Export.\n- OpenObserve Trigger: Alert Triggered for explicitly selected alerts, with secret-authenticated webhook delivery and owned lifecycle artifacts.\n- Pipeline: real-time and scheduled Create, Get, Get Many, Update, Delete, Enable/Disable, and Get History using validated structured graphs.\n\nLog ingestion can infer and create its target stream. Continuous metrics should arrive through native collectors such as Prometheus, Telegraf, or OpenTelemetry; n8n focuses on log events, search/query, configuration, alerts/triggers, and remediation. Destructive operations and manual alert triggering require confirmation. Deferred and potential post-v0.1 surfaces are documented in [docs/api-matrix.md](docs/api-matrix.md); explicit stream provisioning, metric ingestion, panel CRUD, and Enterprise-only Service Graph remain deferred.\n\n## Usage\n\nResource locators select existing streams, dashboards, alerts, and pipelines and retain manual name/ID modes for expressions. Structured JSON fields cover high-entropy OpenObserve definitions; documented friendly fields take precedence.\n\n- **Log → Ingest** sends one JSON object as a one-element JSON array without adding n8n metadata. **Ingest Many** sends input items in order and preserves lineage to all items.\n- **Search → Query** accepts ordinary Start/End values and converts them to OpenObserve microseconds. Normalized JSON rows support Return All; raw and formatted responses are intentionally single-response modes.\n- Metric query operations expose PromQL directly. Series discovery supports repeated `match[]` values.\n- Pipeline JSON contains `source`, `nodes`, and `edges`. Real-time pipelines need an explicit default/same-stream route when unmatched events must not be dropped.\n\nThe Alert Triggered node creates one deterministic template and webhook destination and adds only that destination to explicitly selected alerts. It stores a separate random secret in n8n node static data and validates inbound delivery in constant time. Deactivation removes only its exact attachment and owned artifacts; ambiguous ownership fails closed. OpenObserve retries can produce duplicate executions because payloads have no universal stable event ID. Workflows needing exactly-once effects should deduplicate or make side effects idempotent; alert identity plus trigger time can assist.\n\n## Troubleshooting\n\n- If the credential test fails, confirm that the Base URL contains no `/api/{org}` suffix and that the Organization ID matches the credential's account.\n- If a dynamic selector is empty, confirm the credential can list that resource in the selected folder or stream type; manual locator modes remain available for expressions.\n- Use HTTPS outside local development. Never paste credentials, destination headers, trigger secrets, or complete error payloads into an issue.\n- For self-hosted and local-container details, see [docs/testing.md](docs/testing.md). Report reproducible package issues through the [project issue tracker](https://github.com/BlackSwampAI/n8n-nodes-openobserve/issues).\n\n## Resources\n\n- [OpenObserve API documentation](https://openobserve.ai/docs/reference/api/)\n- [OpenObserve alert documentation](https://openobserve.ai/docs/user-guide/alerts/)\n- [n8n manual community-node installation](https://docs.n8n.io/integrations/community-nodes/installation-and-management/gui-installation/)\n- [API and edition matrix](docs/api-matrix.md)\n- [v0.1 minimum-configuration UX audit](docs/ux-requirements-audit.md)\n- [Architecture and safety decisions](docs/architecture.md)\n- [Validation record and local test procedure](docs/testing.md)\n- [Branding and icon provenance](docs/branding.md)\n- [Release process](RELEASING.md)\n\nThe packaged light and dark icons use the unmodified official OpenObserve product glyph from [`openobserve/openobserve` commit `c651f43f29c864478f5107612622a5e20492ea39`](https://github.com/openobserve/openobserve/blob/c651f43f29c864478f5107612622a5e20492ea39/web/src/assets/images/common/o2_logo.svg). Use of that mark does not imply affiliation, sponsorship, endorsement, or maintenance. See [branding and icon provenance](docs/branding.md).\n\n## Development\n\n```sh\nnpm ci\nnpm run format:check\nnpm run lint\nnpm run typecheck\nnpm test\nnpm run build\nnpm run package:check\ndocker compose config\n```\n\nThe local OpenObserve harness and smoke procedure are documented in [docs/testing.md](docs/testing.md). Architecture decisions and trigger safety rules are in [docs/architecture.md](docs/architecture.md).\n\n## Release provenance\n\nPublished versions originate from immutable version tags through the repository's least-privilege GitHub Actions workflow. npm provenance links each package to its public source commit. Maintainers should follow [RELEASING.md](RELEASING.md) for release authorization and verification.\n\n## License\n\nThis independent integration is available under the [MIT License](LICENSE.md). OpenObserve is a separate project with its own licensing.\n","readmeFilename":"README.md"}