{"_id":"@cargolift-cdi/lib-repositories","_rev":"8-59381656d93a7d235ad5b002ec142da6","name":"@cargolift-cdi/lib-repositories","dist-tags":{"latest":"0.0.9"},"versions":{"0.0.2":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.2","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.2","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"ee35fee6f215b9a6ba5eadb6a2150347c6fbf3e5","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.2.tgz","fileCount":23,"integrity":"sha512-0kQ3oPK1zqImvyZkWu+MEZpFydFDqNx5Nci23N+MmDz5oaG9s3iVasV4N8eQ8DWfry2hyMkBoS3pDhipip2cHA==","signatures":[{"sig":"MEYCIQDqj1o61NkpR6MQITitjUdQ5Om8a9+isDjaMCGx8ciKQgIhAMVdTDBvkfGS1HSaB/Wd+Jar0RLTvuCSNw70C2iwFwT9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26929},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.2_1770650180477_0.2141505511404127","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.3","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.3","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"f50835c5fa3fd9d1c79c7acd542ec4a38b1d353d","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.3.tgz","fileCount":29,"integrity":"sha512-T82C6rr+sa96tVqdwLT5e+H+gvhxvQTYf28r5GUkHx2ff8qRCvZBjHVkUf/2H+cjGs29GGU0dT7FqwuYPCVYxg==","signatures":[{"sig":"MEUCIFkv92eH1D6WeZaZc84rnA3TmJiy2zu8/2z+lsTUxCceAiEAmaKgrx5ppdE6MxAeBqBWmC3SIsJfQLJzA8RS4hR97gU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31577},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2f9151accd96a3fef46b3091bb925bf8b82313c","scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.3_1770650606172_0.5906085489180692","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.4","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.4","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"827c42224fdd419bfb4eb13b2334b5493cc614dd","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.4.tgz","fileCount":29,"integrity":"sha512-CEp4rYr5NrmVOqkOPdtHC0cW6pIw8TvoR0V+kJ56hY3Qw4OuxrrvEbJ3anXNU+51j3n+lXodNC77vY12WYNuNQ==","signatures":[{"sig":"MEUCIDnyUpYM6O1PmyH6V3iYVc9jv7sgOl30KYdbYWRq01WiAiEAxNJACQMnOX5N760mpbBUNJrMH73e7QC0B4sYlvPeuRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31577},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2f9151accd96a3fef46b3091bb925bf8b82313c","scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.4_1770650785870_0.8819370230025401","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.5","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.5","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"2d518240e78afac60f8ae7074ceb1c2068856f97","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.5.tgz","fileCount":29,"integrity":"sha512-z0iuP+ZYn34xyFbUpokyGwfFlPLDmEMc5P0Yg+uUunS76+pkHlwCLm0fuqpZhuB909F2lDKxc/+93/XqA9jJYA==","signatures":[{"sig":"MEQCIGxt2Gao7zJ181KtQmuLuX8642F/2SncJH+W+p0FFNMIAiB/GTk/WdjB4zjhu2mtn554q5IG8KuhTFK4Lm8B3IwYdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31577},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2f9151accd96a3fef46b3091bb925bf8b82313c","scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.5_1770650948768_0.08020167018934599","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.6","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.6","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"78e2cf17d8100c4d3dbbdf92491fefb9679e8600","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.6.tgz","fileCount":29,"integrity":"sha512-cWBk0PBRnkwEmY8fsg0jehY7fSDLp9jUU3XS/3irY1mXw8OX1Z/F3lNnX6kr2+R3ahwWffBUz9pNb1iCbABJ9Q==","signatures":[{"sig":"MEQCICotUnngZwN/vVFv+WcoQIeUNnG0ykp/kisWehFiKOOqAiBvKEejPTD4ASL2ynYlHEN/0+S9xAkbw5pRTaIXOPbX+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31577},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f2f9151accd96a3fef46b3091bb925bf8b82313c","scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.6_1770650969866_0.9981312401360327","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.7","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.7","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"7c59985dd146f91d8049d009e91ca6ad172e52e4","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.7.tgz","fileCount":29,"integrity":"sha512-W1sLqMxF9Z1Ng/g9xj3qNwWU3x/lwAmo67oAjW2nGPoZCUjKca8FvIWsZ/kX3cJGhR8tR6pkyH2RVOXksYYLcQ==","signatures":[{"sig":"MEQCIDhjBAuBay/RygoB77VF5ERQsF6zq7XCuLxbsnfFtDxbAiB0doCzTYgpWEYZW99hRyqXYP8Lt4HhWV6tnfZd4gBdvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31577},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0624aa4c672d944b80a9d637a7f331a750368891","scripts":{"build":"npm run clean && tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","updatelibs":"npm update @cargolift-cdi/types","prepublishOnly":"npm run clean && npm run build && npm version patch --no-git-tag-version"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"^0.1.158"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.7_1770665649203_0.6829166610571287","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@cargolift-cdi/lib-repositories","version":"0.0.9","license":"MIT","_id":"@cargolift-cdi/lib-repositories@0.0.9","maintainers":[{"name":"israel.possoli","email":"israel.possoli@gmail.com"}],"homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"dist":{"shasum":"6b6beedb95888e7f3e47354f12562774ec4d945b","tarball":"https://registry.npmjs.org/@cargolift-cdi/lib-repositories/-/lib-repositories-0.0.9.tgz","fileCount":71,"integrity":"sha512-P9Ksks+4KzopayvhlavFa30PplC8qFWznpocuBO5v5A/h1A8GH4lPCOgZEpRZPxtsl1nwGhJdjX2AedpndYWVw==","signatures":[{"sig":"MEUCIFgJdOfs+5RdgXAKFpW2PCh7GEheNQuODUuMMdg4nJNwAiEAj0lmrD9URFwAv6gebJD4iB8MVl2Igp4wULPWx57/e4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135848},"type":"module","_from":"file:cargolift-cdi-lib-repositories-0.0.9.tgz","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -w -p tsconfig.json","build":"npm run clean && tsc -p tsconfig.json","clean":"","updatelibs":"npm update @cargolift-cdi/types"},"_npmUser":{"name":"israel.possoli","email":"israel.possoli@gmail.com"},"_resolved":"C:\\Users\\ISRAEL~1.POS\\AppData\\Local\\Temp\\a29e9c11fcca5deef2ae33e0679a65ef\\cargolift-cdi-lib-repositories-0.0.9.tgz","_integrity":"sha512-P9Ksks+4KzopayvhlavFa30PplC8qFWznpocuBO5v5A/h1A8GH4lPCOgZEpRZPxtsl1nwGhJdjX2AedpndYWVw==","repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"_npmVersion":"10.9.3","description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"typeorm":"^0.3.28","@nestjs/common":"^11.1.13","@nestjs/typeorm":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.2.2","@cargolift-cdi/types":"0.1.167"},"_npmOperationalInternal":{"tmp":"tmp/lib-repositories_0.0.9_1772459556443_0.8447901075486024","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-09T15:16:20.168Z","modified":"2026-03-03T12:23:07.828Z","0.0.2":"2026-02-09T15:16:20.666Z","0.0.3":"2026-02-09T15:23:26.330Z","0.0.4":"2026-02-09T15:26:26.014Z","0.0.5":"2026-02-09T15:29:08.920Z","0.0.6":"2026-02-09T15:29:30.001Z","0.0.7":"2026-02-09T19:34:09.350Z","0.0.9":"2026-03-02T13:52:36.596Z"},"bugs":{"url":"https://github.com/cargolift-cdi/lib-repositories/issues"},"license":"MIT","homepage":"https://github.com/cargolift-cdi/lib-repositories#readme","repository":{"url":"git+https://github.com/cargolift-cdi/lib-repositories.git","type":"git"},"description":"Repositórios de acesso a dados via TypeORM para projetos da Cargolift para o Middleware CDI","maintainers":[{"email":"igor.daniel@cargolift.com.br","name":"igor.daniel"},{"email":"israel.possoli@gmail.com","name":"israel.possoli"}],"readme":"# @cargolift-cdi/lib-repositories\r\n\r\n![Build Status](https://img.shields.io/badge/build-local-blue)\r\n![Versão](https://img.shields.io/badge/version-0.0.8-green)\r\n![Licença](https://img.shields.io/badge/license-MIT-lightgrey)\r\n![Cobertura de Testes](https://img.shields.io/badge/coverage-n%2Fa-yellowgreen)\r\n\r\nBiblioteca de repositórios TypeORM para acesso a dados do ecossistema Middleware Cargolift em aplicações NestJS.\r\n\r\n---\r\n\r\n## 📌 Objetivo\r\n\r\nEste repositório centraliza repositórios de acesso a dados para domínios do middleware (integração, logs, webhook, metadados e diagnóstico), promovendo consistência de implementação, redução de duplicidade e padronização de consultas.\r\n\r\nNo contexto do middleware, a lib oferece uma base reutilizável para persistência com foco em **rastreabilidade**, **resiliência** e **manutenibilidade**.\r\n\r\nPúblico-alvo:\r\nDesenvolvedores de serviços NestJS que utilizam TypeORM no monorepo Middleware.\r\n\r\n---\r\n\r\n## ✨ Funcionalidades\r\n\r\n- **Repositórios de integração:** agentes, entidades, rotas inbound/outbound, credenciais, endpoints e snapshots de saída.\r\n- **Repositórios de log:** tracking de integração e logs de roteamento/MDM.\r\n- **Repositório de webhook:** subscriptions com suporte a busca por evento com wildcard.\r\n- **Repositórios compartilhados:** trilha de auditoria (`AuditTrail`) e entidade dinâmica (`EntityDynamic`).\r\n- **Diagnóstico de latência:** acesso a dados de diagnóstico operacional.\r\n- **Classificação de erros de banco:** utilitário para classificar falhas como transitórias ou fatais.\r\n\r\nDiferenciais técnicos:\r\n- Integração direta com `@nestjs/typeorm`.\r\n- API orientada a serviços (`@Injectable`) pronta para injeção por módulo.\r\n- Classificação explícita de erros SQLSTATE e erros de rede para estratégias de retry.\r\n\r\n---\r\n\r\n## 🔍 Detalhamento\r\n\r\n### Repositórios de Integração\r\n\r\nA biblioteca expõe serviços para operações de leitura e persistência em entidades do domínio de integração. Exemplo: `MiddlewareAgentRepository` com buscas por `agent`, `apiClientId` e listagem de ativos.\r\n\r\n#### Exemplo de uso\r\n\r\n```ts\r\nimport { Injectable } from \"@nestjs/common\";\r\nimport { MiddlewareAgentRepository } from \"@cargolift-cdi/lib-repositories\";\r\n\r\n@Injectable()\r\nexport class AgentService {\r\n  constructor(private readonly agentRepo: MiddlewareAgentRepository) {}\r\n\r\n  async getActiveAgent(agent: string) {\r\n    return this.agentRepo.get(agent);\r\n  }\r\n\r\n  async listActiveAgents() {\r\n    return this.agentRepo.getAllActive();\r\n  }\r\n}\r\n```\r\n\r\nParâmetros:\r\n- `get(agent)`: identificador do agente.\r\n- `getByApiClientId(apiClientId)`: client id de autenticação da integração.\r\n\r\nRetorno:\r\n- Instância da entidade encontrada ou `null`.\r\n\r\n### Auditoria e Metadados Dinâmicos\r\n\r\n`AuditTrailRepository` permite registrar alterações com correlação e consultar histórico por `recordId` ou `correlationId`, incluindo suporte a transações com `QueryRunner`.\r\n\r\n#### Exemplo de uso\r\n\r\n```ts\r\nimport { Injectable } from \"@nestjs/common\";\r\nimport { AuditTrailRepository } from \"@cargolift-cdi/lib-repositories\";\r\n\r\n@Injectable()\r\nexport class AuditService {\r\n  constructor(private readonly auditTrailRepo: AuditTrailRepository) {}\r\n\r\n  async registerUpdate(correlationId: string, recordId: string) {\r\n    await this.auditTrailRepo.register({\r\n      entity: \"customer\",\r\n      operation: \"update\",\r\n      correlationId,\r\n      recordId,\r\n      changes: { status: { from: \"inactive\", to: \"active\" } },\r\n    });\r\n  }\r\n}\r\n```\r\n\r\nParâmetros:\r\n- `register(input)`: dados de auditoria da operação.\r\n- `registerWithQueryRunner(queryRunner, data)`: auditoria dentro da mesma transação de negócio.\r\n\r\nRetorno:\r\n- `register`: `Promise<AuditTrail | null>`.\r\n- Consultas: listas de registros ordenados por data de alteração.\r\n\r\n### Webhook e Classificação de Erros\r\n\r\n`WebhookSubscriptionRepository` oferece busca de assinaturas ativas por evento (`entidade.ação`, wildcard por entidade e wildcard global). `DataBaseErrorClassifier` classifica erros de persistência em **TRANSIENT** ou **FATAL**.\r\n\r\n#### Exemplo de uso\r\n\r\n```ts\r\nimport {\r\n  WebhookSubscriptionRepository,\r\n  DataBaseErrorClassifier,\r\n  DatabaseErrorType,\r\n} from \"@cargolift-cdi/lib-repositories\";\r\n\r\nasync function processWebhook(\r\n  repo: WebhookSubscriptionRepository,\r\n  entity: string,\r\n  action: string,\r\n) {\r\n  try {\r\n    const subscriptions = await repo.findActiveByEvent(entity, action);\r\n    return subscriptions;\r\n  } catch (error) {\r\n    const classified = DataBaseErrorClassifier.classify(error);\r\n\r\n    if (classified.type === DatabaseErrorType.TRANSIENT) {\r\n      // Aplicar retry/backoff\r\n    }\r\n\r\n    throw error;\r\n  }\r\n}\r\n```\r\n\r\nParâmetros:\r\n- `findActiveByEvent(entity, action)`: combinações com match exato e wildcards.\r\n- `classify(err)`: erro desconhecido para classificação.\r\n\r\nRetorno:\r\n- Lista de subscriptions ativas.\r\n- Objeto de classificação com tipo, código e mensagem.\r\n\r\n---\r\n\r\n## 🛠 Tecnologias e Dependências\r\n\r\n<table>\r\n  <thead>\r\n    <tr>\r\n      <th>Tecnologia</th>\r\n      <th>Versão</th>\r\n      <th>Finalidade</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <td>TypeScript</td>\r\n      <td>^5.9.3</td>\r\n      <td>Implementação tipada da biblioteca</td>\r\n    </tr>\r\n    <tr>\r\n      <td>NestJS Common</td>\r\n      <td>^11.1.13</td>\r\n      <td>Serviços injetáveis e integração com framework</td>\r\n    </tr>\r\n    <tr>\r\n      <td>NestJS TypeORM</td>\r\n      <td>^11.0.0</td>\r\n      <td>Integração dos repositórios com data sources do NestJS</td>\r\n    </tr>\r\n    <tr>\r\n      <td>TypeORM</td>\r\n      <td>^0.3.28</td>\r\n      <td>Persistência e query builders</td>\r\n    </tr>\r\n    <tr>\r\n      <td>@cargolift-cdi/types</td>\r\n      <td>workspace:*</td>\r\n      <td>Entidades e contratos usados nos repositórios</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\nDependências internas:\r\n- `@cargolift-cdi/types`\r\n\r\n---\r\n\r\n## 🚀 Instalação\r\n\r\n### Pré-requisitos\r\n\r\n- Node.js: >= 18\r\n- pnpm: recomendado para uso em workspace\r\n- DataSources TypeORM configurados na aplicação consumidora\r\n\r\n### Passos de instalação\r\n\r\n1. Instale dependências do monorepo:\r\n\r\n```bash\r\npnpm install\r\n```\r\n\r\n2. Build da biblioteca:\r\n\r\n```bash\r\npnpm --filter @cargolift-cdi/lib-repositories build\r\n```\r\n\r\n### Variáveis de ambiente\r\n\r\nA biblioteca não exige variáveis de ambiente próprias, mas depende da configuração de conexão dos DataSources da aplicação consumidora.\r\n\r\n<table>\r\n  <thead>\r\n    <tr>\r\n      <th>Variável</th>\r\n      <th>Descrição</th>\r\n      <th>Obrigatória</th>\r\n      <th>Valor padrão</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <td><code>N/A</code></td>\r\n      <td>Configurações de banco devem ser definidas no serviço consumidor</td>\r\n      <td>Sim (na aplicação)</td>\r\n      <td><code>N/A</code></td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n---\r\n\r\n## 💡 Como Usar\r\n\r\n### Quickstart\r\n\r\n```ts\r\nimport { Module } from \"@nestjs/common\";\r\nimport { TypeOrmModule } from \"@nestjs/typeorm\";\r\nimport { MiddlewareAgent } from \"@cargolift-cdi/types\";\r\nimport { MiddlewareAgentRepository } from \"@cargolift-cdi/lib-repositories\";\r\n\r\n@Module({\r\n  imports: [TypeOrmModule.forFeature([MiddlewareAgent], \"middleware\")],\r\n  providers: [MiddlewareAgentRepository],\r\n  exports: [MiddlewareAgentRepository],\r\n})\r\nexport class IntegrationRepositoriesModule {}\r\n```\r\n\r\n### Casos de uso avançados\r\n\r\n- **Trilha de auditoria transacional:** usar `registerWithQueryRunner` para gravar auditoria no mesmo commit de negócio.\r\n- **Resiliência em persistência:** aplicar `DataBaseErrorClassifier` para separar erros reprocessáveis de falhas fatais.\r\n- **Webhook com wildcard:** usar `findActiveByEvent` para rotear eventos por assinatura dinâmica.\r\n\r\n---\r\n\r\n## 📁 Estrutura do Projeto\r\n\r\n```text\r\n.\r\n├── src/\r\n│   ├── index.ts\r\n│   ├── diagnostic/\r\n│   ├── middleware/\r\n│   │   ├── integration/\r\n│   │   ├── log/\r\n│   │   ├── shared/\r\n│   │   └── webhook/\r\n│   └── util/\r\n├── package.json\r\n├── tsconfig.json\r\n└── README.md\r\n```\r\n\r\n- `src/middleware/integration/`: repositórios de agentes, rotas e snapshots.\r\n- `src/middleware/log/`: persistência de logs e tracking de integrações.\r\n- `src/middleware/shared/`: repositórios compartilhados (auditoria e entidades dinâmicas).\r\n- `src/middleware/webhook/`: subscriptions de webhook.\r\n- `src/diagnostic/`: consultas operacionais de diagnóstico.\r\n- `src/util/`: utilitários de tratamento/classificação de erros.\r\n\r\n---\r\n\r\n## 🧪 Testes e Qualidade\r\n\r\nNo momento, o pacote possui fluxo principal de build por TypeScript.\r\n\r\n```bash\r\npnpm --filter @cargolift-cdi/lib-repositories build\r\n```\r\n\r\n---\r\n\r\n## 🤝 Contribuindo\r\n\r\nPadrão de branches:\r\n- `main`: branch principal.\r\n- `feature/*`: novas funcionalidades.\r\n- `bugfix/*`: correções.\r\n\r\nPadrão de commits:\r\n- Conventional Commits.\r\n- Exemplos:\r\n  - `feat(repositories): adiciona busca por agentId em webhook`\r\n  - `fix(repositories): corrige classificação de erro SQLSTATE`\r\n\r\nProcesso de PR:\r\n1. Criar branch a partir de `main`.\r\n2. Implementar alteração mantendo compatibilidade dos serviços exportados.\r\n3. Executar build da lib.\r\n4. Abrir PR com descrição técnica e impacto.\r\n\r\n---\r\n\r\n## 📄 Licença\r\n\r\nEste projeto é distribuído sob a licença MIT.\r\n","readmeFilename":"README.md"}