{"_id":"@bernierllc/nevar-rule-seeder","_rev":"6-bacf793cee0588ab9c5380981b9f53bb","name":"@bernierllc/nevar-rule-seeder","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.1":{"name":"@bernierllc/nevar-rule-seeder","version":"0.0.1","keywords":["oidc","trusted-publishing","setup"],"_id":"@bernierllc/nevar-rule-seeder@0.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"aa7fba9b396e972d95e311f61f1fd13ef90a1fcf","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.0.1.tgz","fileCount":2,"integrity":"sha512-j60M6QFaxahlzUppe/QQDFzcS0nnn6NscdB2KyMKNQeXpMuD3eHm8hp9TEbjQRUJ0OMsJTSDedFTIFUTNxSOAA==","signatures":[{"sig":"MEQCIDDaRRnMomuwJnAVH0OkRD2fmhrQrR6bKEsrTWCz5GHpAiB/BCn+lEWOe1cusC91uUH8poBg8oYnqs1ZUKh0r4v+Ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2079},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_npmVersion":"11.11.0","description":"OIDC trusted publishing setup package for @bernierllc/nevar-rule-seeder","directories":{},"_nodeVersion":"25.8.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nevar-rule-seeder_0.0.1_1774655970497_0.672469113819995","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@bernierllc/nevar-rule-seeder","version":"0.1.0","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/nevar-rule-seeder@0.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"88de5880fafa54af8fdd321c1d993386350dc75a","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.1.0.tgz","fileCount":14,"integrity":"sha512-G79N1GrCrU2LtMLukgI29RQ/FSwTIZi/TImWwqx2iJ+6PI63NzVslzwLUD4aIOtA7bYuGW2o7J+4TS8SiNN2Ag==","signatures":[{"sig":"MEQCIA0qukVWUWZl1Au1Ki3nqYnNAedHisKO4ostzHBiumFqAiAN657swJEURyFKGYvFnMe1cli0P2k2ETHb4bZvHD7tmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25217},"main":"dist/index.js","_from":"file:bernierllc-nevar-rule-seeder-0.1.0.tgz","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rimraf dist","prebuild":"npm run clean","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec50fd06-d1d1-49aa-8608-9e25fc387381"}},"_resolved":"/home/runner/work/tools/tools/packages/service/nevar-rule-seeder/bernierllc-nevar-rule-seeder-0.1.0.tgz","_integrity":"sha512-G79N1GrCrU2LtMLukgI29RQ/FSwTIZi/TImWwqx2iJ+6PI63NzVslzwLUD4aIOtA7bYuGW2o7J+4TS8SiNN2Ag==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"_npmVersion":"11.12.1","description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@bernierllc/nevar-types":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nevar-rule-seeder_0.1.0_1774899066977_0.020268814281967362","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bernierllc/nevar-rule-seeder","version":"0.2.0","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/nevar-rule-seeder@0.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"aa48275930ae71ed9fc553bdc5c86e2aeaa0ece3","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.2.0.tgz","fileCount":14,"integrity":"sha512-a803cY/xhWQIbVYBohnfnPMslo+FJx4B3KT8Id33oao+1f6jy9K7VVRKNmmfxpDjmmn8F7izsn2GkOl2gAmaoA==","signatures":[{"sig":"MEYCIQDLIMM5AUSo/bkFSEc2bbVBwC6qOwgu+bzBDc4rkmbajgIhAOAWUDK6CFmPBHOv/on7HsmG4uf7/4wlNZz6jpiHwBSb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25217},"main":"dist/index.js","_from":"file:bernierllc-nevar-rule-seeder-0.2.0.tgz","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rimraf dist","prebuild":"npm run clean","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec50fd06-d1d1-49aa-8608-9e25fc387381"}},"_resolved":"/home/runner/work/tools/tools/packages/service/nevar-rule-seeder/bernierllc-nevar-rule-seeder-0.2.0.tgz","_integrity":"sha512-a803cY/xhWQIbVYBohnfnPMslo+FJx4B3KT8Id33oao+1f6jy9K7VVRKNmmfxpDjmmn8F7izsn2GkOl2gAmaoA==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"_npmVersion":"11.14.1","description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/nevar-types":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nevar-rule-seeder_0.2.0_1779133880772_0.5267587505702225","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bernierllc/nevar-rule-seeder","version":"0.3.0","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/nevar-rule-seeder@0.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"c3951d886e2d7ace1f4f809607207631bead4c5d","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.3.0.tgz","fileCount":14,"integrity":"sha512-4jrc7gVYnmRdvECQ8PSmDqv8ZgaF+A7WyQ0FeHdQFjybcvVmxPJhtF6Zapg/J/9lX60lPv1mG9AZkJvbqnqS3w==","signatures":[{"sig":"MEUCIAz3W8Ucu3hvQOXuYhvUy5dtuMm4WaHW73R9YZpIpPVuAiEA65N9LbIPBtQUxaNQcV2yVAfC0I1cP4JqtD1wV/Qc6ZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25217},"main":"dist/index.js","_from":"file:bernierllc-nevar-rule-seeder-0.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rimraf dist","prebuild":"npm run clean","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec50fd06-d1d1-49aa-8608-9e25fc387381"}},"_resolved":"/home/runner/work/tools/tools/packages/service/nevar-rule-seeder/bernierllc-nevar-rule-seeder-0.3.0.tgz","_integrity":"sha512-4jrc7gVYnmRdvECQ8PSmDqv8ZgaF+A7WyQ0FeHdQFjybcvVmxPJhtF6Zapg/J/9lX60lPv1mG9AZkJvbqnqS3w==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"_npmVersion":"11.14.1","description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/nevar-types":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nevar-rule-seeder_0.3.0_1779241783978_0.30115577495814727","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/nevar-rule-seeder","version":"0.4.0","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/nevar-rule-seeder@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"48dfd0b2b21d852662bd05c856ed05ff12edeef1","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.4.0.tgz","fileCount":14,"integrity":"sha512-Ck0vus6CmM5QbaCaJmn0xhKIbfAv5QvTguWIdBvUs8yvSPJp63Lj5RdB6ObZUn+ZHunwMhQA0CnKNlr5poUQOA==","signatures":[{"sig":"MEQCIG5ed6/KPixWAUZRfN9Gm/2y0dxJLxANgZHyKJoa75+6AiB3KH90L05h5ILM69t1zqNeQtPIkQX5jZ4eQqBLYUjjkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25217},"main":"dist/index.js","_from":"file:bernierllc-nevar-rule-seeder-0.4.0.tgz","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rimraf dist","prebuild":"npm run clean","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec50fd06-d1d1-49aa-8608-9e25fc387381"}},"_resolved":"/home/runner/work/tools/tools/packages/service/nevar-rule-seeder/bernierllc-nevar-rule-seeder-0.4.0.tgz","_integrity":"sha512-Ck0vus6CmM5QbaCaJmn0xhKIbfAv5QvTguWIdBvUs8yvSPJp63Lj5RdB6ObZUn+ZHunwMhQA0CnKNlr5poUQOA==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"_npmVersion":"11.14.1","description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/nevar-types":"0.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nevar-rule-seeder_0.4.0_1779250532781_0.2571762577941743","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"_id":"@bernierllc/nevar-rule-seeder@0.4.1","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"c707a9968e21e9170bd0bd1081c113ae3af73da2","tarball":"https://registry.npmjs.org/@bernierllc/nevar-rule-seeder/-/nevar-rule-seeder-0.4.1.tgz","fileCount":15,"integrity":"sha512-wASUMKN1R982h9v+/ZY1mO1lXtn4muiJjkZWGNXPvM3UG2scLgclLXmUQMPLmmwkZQrmdPw1OBP0DvTMtBrvgg==","signatures":[{"sig":"MEQCIBx+lNWhPv5kXVP5gbqpWaazH030D5Fl61gyOQAE3P0NAiAUe7FbkugfwE48xlZeDwqr6oJlU0VvWqiZhJIDwym5fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBHLAKbC9j2eX4+hIfL2/4cY/OYmDYtCk8OOW8DWQkVrAiBimN2PILvbHD+KttHwPw+5F7i89qm8szptawGGCT5gfw=="}],"unpackedSize":25539},"main":"dist/index.js","name":"@bernierllc/nevar-rule-seeder","_from":"file:bernierllc-nevar-rule-seeder-0.4.1.tgz","types":"dist/index.d.ts","author":{"name":"Bernier LLC"},"engines":{"node":">=16.0.0"},"license":"SEE LICENSE IN LICENSE","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rimraf dist","prebuild":"npm run clean","test:run":"jest","test:coverage":"jest --coverage"},"version":"0.4.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"ec50fd06-d1d1-49aa-8608-9e25fc387381"}},"homepage":"https://github.com/bernierllc/tools#readme","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"_resolved":"/home/runner/work/tools/tools/packages/service/nevar-rule-seeder/bernierllc-nevar-rule-seeder-0.4.1.tgz","_integrity":"sha512-wASUMKN1R982h9v+/ZY1mO1lXtn4muiJjkZWGNXPvM3UG2scLgclLXmUQMPLmmwkZQrmdPw1OBP0DvTMtBrvgg==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"_npmVersion":"12.2.0","description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"@bernierllc/nevar-types":"^0.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nevar-rule-seeder_0.4.1_1790884451086_0.00681405514337774"}}},"time":{"created":"2026-03-27T23:59:30.394Z","modified":"2026-10-01T19:54:11.352Z","0.0.1":"2026-03-27T23:59:30.672Z","0.1.0":"2026-03-30T19:31:07.129Z","0.2.0":"2026-05-18T19:51:20.935Z","0.3.0":"2026-05-20T01:49:44.120Z","0.4.0":"2026-05-20T04:15:32.954Z","0.4.1":"2026-10-01T19:54:11.171Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/bernierllc/tools#readme","keywords":["nevar","rules-engine","seeder","idempotent","rule-seeding","bernierllc","service"],"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/service/nevar-rule-seeder"},"description":"Idempotent rule seeding for the Nevar rules engine — load default rules from config at startup with skip/update/replace strategies","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/nevar-rule-seeder\n\nIdempotent rule seeder for the Nevar rules engine. Loads default rule groups and rules from configuration into storage using configurable strategies.\n\n## Installation\n\n```bash\nnpm install @bernierllc/nevar-rule-seeder\n```\n\n## Usage\n\n```typescript\nimport { RuleSeeder } from '@bernierllc/nevar-rule-seeder';\nimport { InMemoryStorageAdapter } from '@bernierllc/nevar-storage';\n\nconst storage = new InMemoryStorageAdapter();\nconst seeder = new RuleSeeder(storage);\n\nconst result = await seeder.seed(\n  {\n    groups: [\n      {\n        slug: 'onboarding-rules',\n        name: 'Onboarding Rules',\n        isActive: true,\n        rules: [\n          {\n            name: 'Welcome Email',\n            slug: 'welcome-email',\n            triggerType: 'user.created',\n            conditions: { operator: 'AND', conditions: [] },\n            actions: [\n              {\n                actionType: 'send-email',\n                config: { template: 'welcome' },\n                executionOrder: 1,\n              },\n            ],\n            executionOrder: 1,\n          },\n        ],\n      },\n    ],\n  },\n  { strategy: 'update_existing', matchBy: 'slug' },\n);\n\nconsole.log(result);\n// { groupsCreated: 1, groupsUpdated: 0, groupsSkipped: 0,\n//   rulesCreated: 1, rulesUpdated: 0, rulesSkipped: 0, rulesDeleted: 0 }\n```\n\n### Seed Strategies\n\n- `skip_existing` - Create new groups/rules, skip any that already exist (matched by slug or id)\n- `update_existing` - Create new groups/rules, update any that already exist with the seed data\n- `replace_all` - Delete all existing groups and rules, then create everything from the seed data\n\n## API\n\n### `RuleSeeder`\n\nIdempotent seeder that loads groups and rules into a storage adapter.\n\n- `constructor(storage: StorageForSeeding)` - Create a seeder with a storage adapter\n- `seed(data: SeedData, options: SeedOptions): Promise<SeedResult>` - Seed groups and rules according to the given strategy\n\n### `SeedData` (type)\n\nTop-level seed input: `{ groups: SeedGroupData[] }`.\n\n### `SeedGroupData` (type)\n\nGroup definition for seeding: `slug`, `name`, `rules`, and optional `isDefault`, `isActive`, `metadata`.\n\n### `SeedRuleData` (type)\n\nRule definition for seeding: `name`, `slug`, `triggerType`, `conditions`, `actions`, `executionOrder`, and optional `isActive`, `stopOnMatch`, `allowLoop`, `logLevel`, `metadata`.\n\n### `SeedOptions` (type)\n\nControls seeding behavior: `{ strategy: 'skip_existing' | 'update_existing' | 'replace_all'; matchBy: 'slug' | 'id' }`.\n\n### `SeedResult` (type)\n\nReports what changed: counts for `groupsCreated`, `groupsUpdated`, `groupsSkipped`, `rulesCreated`, `rulesUpdated`, `rulesSkipped`, `rulesDeleted`.\n\n### `StorageForSeeding` (interface)\n\nMinimal storage interface required for seeding. Subset of `NevarStorageAdapter` covering group and rule CRUD operations.\n\n### `NevarSeedError`\n\nCustom error class thrown on seed failures. Chains the original error via `cause`.\n\n## Integration Documentation\n\n### Logger Integration\n\nThis package supports optional integration with `@bernierllc/logger` for structured logging. Service packages that use the seeder should log seed results and failures through logger for observability into rule provisioning.\n\n### NeverHub Integration\n\nThis package supports optional integration with `@bernierllc/neverhub-adapter`. When NeverHub is available, seeding operations can be registered for discovery and monitoring, providing visibility into rule provisioning across environments. Graceful degradation is supported when NeverHub is not present.\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n","readmeFilename":"README.md"}