{"_id":"nfe-io","_rev":"45-996198a837bdb420521a13d125d8cda2","name":"nfe-io","dist-tags":{"latest":"6.0.0"},"versions":{"0.0.1":{"name":"nfe-io","version":"0.0.1","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@0.0.1","maintainers":[{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"849d1343764f0225f145e81eee52593e2a1d7176","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-0.0.1.tgz","integrity":"sha512-jq5mghMT2TfyfAJCr061Y27Uz5oM/Qy5R+mtdc5m9+gtC+K1I3sJEwuQRXAWXYJ14SdzkY4IQhwyO7cXwOFeSQ==","signatures":[{"sig":"MEYCIQDWt0RQ2LjHjEomW3UbIvLIKz0KURVWrfJp3WA/MwE6GQIhAO6togzOhzW8gz/NvL85oyAvqftbvs/zHuBBvmWaKoqU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/nfe.js","_from":".","bugs:":"https://github.com/nfeio/client-nodejs/issues","_shasum":"849d1343764f0225f145e81eee52593e2a1d7176","engines":{"node":">= v0.8.0"},"gitHead":"8bcd6ae2e1e514d88f3432a20d11ec8e2b014e4a","scripts":{"test":"mocha"},"_npmUser":{"name":"nfe-io","email":"infra@nfe.io"},"repository":{"url":"https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"2.1.6","description":"Official NFe.io API Client for Node.js","directories":{},"_nodeVersion":"0.10.29","dependencies":{"when":"~3.1.0"},"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"}},"0.0.2":{"name":"nfe-io","version":"0.0.2","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@0.0.2","maintainers":[{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"b58e6880d31d253d05cf694ffc93fc0d079ce390","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-0.0.2.tgz","integrity":"sha512-OLtdmvfoFo5tuB/KcKrlSttXTAKciWbNXbMbKvZYF73DfGNxcxfJThuBXGD/YzV09UMFQFpeU7KEqUXken32jQ==","signatures":[{"sig":"MEQCIGFmK8xoKz8wN/TFbfghx04WfLmNSW0w268WruZ5G5E/AiAdmr4LJBCUnufzX3dckeRtOAxV5ZKpgcNSxhZV1n/HOg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/nfe.js","_from":".","bugs:":"https://github.com/nfeio/client-nodejs/issues","_shasum":"b58e6880d31d253d05cf694ffc93fc0d079ce390","engines":{"node":">= v0.8.0"},"gitHead":"b35f78a6efab03ac69e21dd3e73356875791549f","scripts":{"test":"mocha"},"_npmUser":{"name":"nfe-io","email":"infra@nfe.io"},"repository":{"url":"https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"2.1.6","description":"Official NFe.io API Client for Node.js","directories":{},"_nodeVersion":"0.10.29","dependencies":{"when":"~3.1.0"},"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"}},"0.0.6":{"name":"nfe-io","version":"0.0.6","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@0.0.6","maintainers":[{"name":"nfe-io","email":"infra@nfe.io"},{"name":"nfe","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"0492d9d85cc8b5a7126390c4cb5c6e302ffe0682","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-0.0.6.tgz","integrity":"sha512-KF2zow9/wuKbATgr0pM/Wczw2/nLdZ3k1rpETj05auRBejgl3KJLU3NGKIJFUiFyxwatKHQVdX1jjpgthHeEOA==","signatures":[{"sig":"MEQCIDjwR5rXtwnu4v8/NtgGczFwC/+R9eQEJaMLxGHKjvFLAiAJAIcYaNqwuukVrmTgi4GPmqClFs4YZuXeoPjp/7e2vg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/nfe.js","_from":".","bugs:":"https://github.com/nfeio/client-nodejs/issues","_shasum":"0492d9d85cc8b5a7126390c4cb5c6e302ffe0682","engines":{"node":">= v0.8.0"},"gitHead":"1ac7dbd4e54dbee5045abd7f89a03aa2240737ac","scripts":{"test":"mocha"},"_npmUser":{"name":"nfe-io","email":"infra@nfe.io"},"repository":{"url":"https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"1.4.28","description":"Official NFe.io API Client for Node.js","directories":{},"dependencies":{"when":"~3.1.0"},"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"}},"0.0.7":{"name":"nfe-io","version":"0.0.7","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@0.0.7","maintainers":[{"name":"nfe","email":"infra@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"65df248ad97c27bc7c4083e260ec9105e967919e","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-0.0.7.tgz","fileCount":21,"integrity":"sha512-ctD0nYbuH4QvucEb8KVm7Zx7QBd74AKlcHd17CCxikcDhW/p7nxd3MSD9gxhxY4gxESgxyfw7k8JS5zUBi4wtg==","signatures":[{"sig":"MEQCIDFBlWKJGlZGDpyRa05AHSYRHVIvzl03pxgorZfsPoZlAiALYbCztiusspjguYbp5ea9/x0fzMKZ0h72hAur1snofQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRD3KCRA9TVsSAnZWagAADtwP/izdRMTQX3POu4KeicLs\nZlDkOs+u3i2DrptYINCmG1tW9zhRck8dwlt7G9IMZwQ6i0u+WXQZy7RDOxAu\n+D8UPKoHwhOI9pUlwXTZ3uBPBDhFLKQXZJuKA0VgLMmOVPW/RPwyeFZ1gGrK\na/X4IHofc+JqbxS9lIolYMMmjHF/0oNxN6BoAlJ/OVRUKFrfDobAaZWP0hL6\nrFkgmZ/KFy0HQ60d3U5p2ESFR8kI05cXRtQPB8WgCbbKi3SZlpBXxDrcrsR4\nQLIUl4r54PU0KXCet2XENEfhsrmSM0U8T0PRv5tCOATV4T4CHzIPU/kO0tBK\noJ5gkS6SvTScJ/fDx9id4LT1+aUcWfTTpC8SLz0LXy7j5b2tw2w5LZLBu0wE\nkK8Gw2SWFD1IpvadLQfs/MK5wvvBKLRoBNdsrC6/H4iMRYZ2dtPEZs3Auh/J\n9iyV5VwFo+56Wrx1fTsEhViz3T5AC6rHeA17Y13eAKAzhoZaOldFQlWnxSwt\nwbW10cJGMps1Sqhsx5p0M/TjiGpqKRwmtWJGqwM9B87wodfwYggWotO3VpaC\nrdVkngQ78Nd66tueXL22hns+evSStUK3hQV5IABXeMwqI789WQOa6dUwP/H7\nwCC2aJzrB+9WBDvkTudbZ/eCS3JdUFAudPUruW3O9/LZMpvQJYw50lQPKzqB\nB+kY\r\n=IxOd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/nfe.js","bugs:":"https://github.com/nfeio/client-nodejs/issues","engines":{"node":">= v0.8.0"},"gitHead":"e201d9e5deeade4bdb6a4b6e522db8b0d3ea09f0","scripts":{"test":"mocha"},"_npmUser":{"name":"nfe","email":"hackers@nfe.io"},"repository":{"url":"git+https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"6.9.0","description":"Official NFe.io API Client for Node.js","directories":{},"_nodeVersion":"10.16.0","dependencies":{"when":"~3.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_0.0.7_1564753353602_0.5435675541585132","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"nfe-io","version":"1.0.0","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@1.0.0","maintainers":[{"name":"nfe","email":"infra@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"5eb262cf0b04060a04b05838439bf2f5e78175db","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-1.0.0.tgz","fileCount":21,"integrity":"sha512-6IXYwMRtP5t/TFP4oXlInR/3cCnG339gpNNw6aRGM4MUMGK26m5EbXBhwGmKV4Zz60kQxG5yNMDsYKtt+hpIbw==","signatures":[{"sig":"MEUCIGhY7Seoufxwla8tXiZX+bgKqUQJAqJ7uNo+rFwFHF2fAiEAku93eV+qmtqYGIr7xyfmhjHdQXY4NPLdytijqVs1ai8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdREHyCRA9TVsSAnZWagAAhaoP/0rIXElNJltDCitMbZFK\nMavf5aU/Y21gC0GCjzOHAQdjLCl4Urd5zp73JMnvnW9jHb/yeTj9j9RyfZhk\nvEM3RDs1jZdrzpubIETjAOCn5nosHZQxcGEsAJlFkFBx4C7nRo7dsf0eB1wO\nXerYfL8nA9aYDhFBQl5HFLS0v2jsSnoVsaeyb29AXkX+suHvOmml5KNrL091\n+0eZ9dK+m8MoRWdP28Byzd6vEB4ch7KX19qcKwlkAD4bvNtycIaNQOwFTcFN\nZfb+WlnZ1/gBqofC+kvz1lbjIF4DtuKRCaj4d0LWRe+ynNb+qcirvyqoQNz8\nBT3QwattYZcB23nLK1mxtfv7EWXahwJpxsMsRFFE694YVLuL8wKGVu1Mznv4\nLNuZMUTXAuoIo5yxyoLH8eOIFoaG8/yMsGUt/HQGtf534qD97IHXqa5DU59z\nhovn9oTZtuk9r5Ev+qUxP4pl3NnJ0yXo9KakE8DJp2O/FMQXGvlGbxFYXtex\nVd3tWL/vXhDwwKvwVZdZJZg3F1KAxpiSHn4GuY6kb8SajvTRVS8Dz7vKpKFf\nb5OrVHDnU4DVG30NT5HKNKF1xx5B2/H+8cy4xUbF1By/tqyO+vFVwrEJLHdx\ngIuS23y/Q9eHFhYaJr+fPeR0Anyrv0UnYTzv6zmR5MvR7x8pjW+8t75oZtqO\nyktX\r\n=xRQw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/nfe.js","bugs:":"https://github.com/nfeio/client-nodejs/issues","engines":{"node":">= v0.8.0"},"gitHead":"6a7374e443ce2df7f7ba4428264679a0280d054d","scripts":{"test":"mocha"},"_npmUser":{"name":"nfe","email":"hackers@nfe.io"},"repository":{"url":"git+https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"6.9.0","description":"Official NFe.io API Client for Node.js","directories":{},"_nodeVersion":"10.16.0","dependencies":{"when":"~3.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_1.0.0_1564754417767_0.4871208384139616","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"nfe-io","version":"2.0.0","author":{"name":"Gabriel Marquez","email":"gabriel@nfe.io"},"_id":"nfe-io@2.0.0","maintainers":[{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"henriquericcio","email":"henrique.riccio@nfe.io"},{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://github.com/nfeio/client-nodejs","bugs":{"url":"https://github.com/nfeio/client-nodejs/issues"},"dist":{"shasum":"19e1edc32a45c2f940993b6b1755befc158ed8a7","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-2.0.0.tgz","fileCount":21,"integrity":"sha512-viE3lL229YpEM3+KUE3bSzatfnloks3vDY/IQQVVUGtOQ6xsTiVTwt9iOQ15yE36dUxaWeDVFXaoSJKI4NAYBw==","signatures":[{"sig":"MEUCICnhJgX1KQLtR5GcCAEJFGZCQEOdITOVlsSZbkGOmwL5AiEArW6SCk0He522FxONuBGHecdP+ghxxHwVv3QHMB/GRq0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg40yhCRA9TVsSAnZWagAAKowP/2A8QOAyvoJiMidjLEWT\nALNV785fCURxOiXvrEcz/PdPy6MJ89TqX620UuFcm5ZnWdNTmpkHrkPsWykY\nj2dKvMIQbE7UK/YYX9k24vTJiQLoFnrgNiOPPTCgrHr+v+SEt19wn/QTLuc2\n85ZBrb7T9n4Tk4pNjWggn0kK3zVd/RVzavBRNs4BqELZktShRPFVhzjC1U25\nPG2Gwfap6TiQT8tU/FI11nmA8S5Vu7n00jKMDO+W4U2+F+Zru9C1knOmA8QP\ncCzlHn9tEt4O3uGRp0lfz1mLCW4kkfxzzqy7B9wrmkZbrne+ZzkVNyE8xQ0c\ntBxZNK4HpUsbPNifhbwcMMvJfMDO9AJA9nDYo0DALowq647e4BseakPpm6Ja\nJzL49XQhGU2dwXpt1CwhswE/HoQBF3yqn5QbvyImlAzChItmmV7rAS5rAtLF\nm12oAew0bt3NLYdtKwMIjTFamdmQbdeyxQkaUJZkSTajaRayWFS29VwGKT3P\nQogVz9xJVAwMC0PB8iSafFBrh1/A+pWAmoyZURwnr7d7Cu0Z1ddMuE5At8oI\nDyHKGLgv7p+H5WpZels7wAjt1TxkggtjLpK7AyIhNuRwAR87lnUfoa5Bdzbx\nkek0sqdzWjsm/3R8++SqWEI3FleGgBX7xQ3EAKrWMtGqGUYQr7oQancu7OQm\nMWlc\r\n=qgNw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/nfe.js","bugs:":"https://github.com/nfeio/client-nodejs/issues","engines":{"node":">= v12.0.0"},"gitHead":"5e045fff7df9d4bb67c1a74f393c6af68cfcd297","scripts":{"test":"mocha"},"_npmUser":{"name":"henriquericcio","email":"henrique.riccio@nfe.io"},"repository":{"url":"git+https://github.com/nfeio/client-nodejs.git","type":"git"},"_npmVersion":"6.14.6","description":"Official NFe.io API Client for Node.js","directories":{},"_nodeVersion":"12.18.3","dependencies":{"when":"~3.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"~1.8.0","mocha":"~1.13.0","chai-as-promised":"~4.0.0","mocha-as-promised":"~1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_2.0.0_1625509025251_0.6359922912371092","host":"s3://npm-registry-packages"}},"3.0.2":{"name":"nfe-io","version":"3.0.2","keywords":["nfe","nfse","nota-fiscal","invoice","brazil","typescript"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@3.0.2","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"ddfe1cbba22821d2363fa8c0d9c1a5939b9a5a16","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-3.0.2.tgz","fileCount":10,"integrity":"sha512-L3AI2nu2dVEHYYoHjy9nwB+750Ck+0kMvNx9aSK55Cc1WwiylaE+g2Kv9hE4H1QVAJaT+5wwl6z8MA5usP6hRw==","signatures":[{"sig":"MEUCIC9lr11fjtmEump1tQMS8Nx1tqLJsggMZaPv6KEPNaT2AiEAqDW1VsNnX/kO5tYCQeSXV+C+fNORrYVhus64U72rloU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1159966},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"e54cce1ee5a2e52d1b806f46eb4c36d351bc3381","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsup","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","download:spec":"tsx scripts/download-openapi.ts","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"andre-nfe","email":"andre@nfe.io"},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"10.8.2","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.0.0","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.56.0","rimraf":"^5.0.0","vitest":"^1.0.0","typedoc":"^0.25.0","prettier":"^3.2.0","@vitest/ui":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","openapi-typescript":"^6.7.0","@vitest/coverage-v8":"^1.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_3.0.2_1768873700721_0.9781854467185358","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"nfe-io","version":"3.1.0","keywords":["nfe","nfse","nota-fiscal","invoice","brazil","typescript"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@3.1.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"c39d2189731ec258dc4135e36108b8b6c3b88aed","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-3.1.0.tgz","fileCount":10,"integrity":"sha512-n0d5IHL/2I9WeojpgpdgOesUnq3xkQb7aOyrNgZljT+rrPmf89ZCrmMc0nQBVxXxCDa/H6MLTo8FcwmVpZ0z7A==","signatures":[{"sig":"MEUCIQD4g9ZhMQ2RwVnQeRzdEWsQWPiPUM247AyFAJMApHjbFAIgcapa1Mep2DEmBAmKVp67YJkCg07h5aC2k+V7IOOxl2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2306495},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"068a17bddb598cc292d7b6191b898d40dcf583e6","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsup","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","download:spec":"tsx scripts/download-openapi.ts","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"andre-nfe","email":"andre@nfe.io"},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"10.8.2","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.0.0","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.56.0","rimraf":"^5.0.0","vitest":"^1.0.0","typedoc":"^0.25.0","prettier":"^3.2.0","@vitest/ui":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","openapi-typescript":"^6.7.0","@vitest/coverage-v8":"^1.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_3.1.0_1771813313188_0.6552053613486857","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"nfe-io","version":"3.2.0","keywords":["nfe","nfse","nota-fiscal","invoice","brazil","typescript"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@3.2.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"41a21116c8af3d8f382aa65283be6e7bef0efdfd","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-3.2.0.tgz","fileCount":15,"integrity":"sha512-3xoWzcB7NFpnLOYMpVQvHjgbZcpINVbBT7l3zoSnacmZAY+zfGwleuBidfDylZyllCtqf7OfAHlrYpwhXEvJbA==","signatures":[{"sig":"MEUCIQCEibn+NnvIc2aqx1iCoOiJgK8E38hxjICS15sp5Y1p5QIgZAEDXpjeD5yQEmtLId623225V69RjswleJ4vjxX54dY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2442003},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfe-io-sdk","path":"./skills/nfe-io-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"73e5587532ca9ce0180c5b97f5d3e4058dbc17ce","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsup","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","download:spec":"tsx scripts/download-openapi.ts","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"andre-nfe","email":"andre@nfe.io"},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"10.8.2","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.0","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","vitest":"^3.2.4","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^3.2.4","typescript":"^5.3.0","@types/node":"^20.10.0","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_3.2.0_1777166944780_0.49835309559231256","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"nfe-io","version":"3.2.1","keywords":["nfe","nfse","nota-fiscal","invoice","brazil","typescript"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@3.2.1","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"913b1e8057236a82a75677c3a3fac2f636f929ca","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-3.2.1.tgz","fileCount":15,"integrity":"sha512-JLoxX9nhCfxMQlGOUHQNhPdxpMLX917HW22gkQMeL2c98FyqFfRZU/AG0bsyGUkmaS2jCzbHg4RYJDEjZypuvw==","signatures":[{"sig":"MEUCIQCSNVUiiJDzcGzc3MVbQ86amT7Mq4A7fHysBppsBeErwAIgOjQgWNvwOrRinFdVJRCPdoxFW8OK/V2sAAvhHs9wS24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2454769},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfe-io-sdk","path":"./skills/nfe-io-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"77b93d129354f3a2c6e6e1f4cd73324cd26e0442","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsup","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","download:spec":"tsx scripts/download-openapi.ts","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"andre-nfe","email":"andre@nfe.io"},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"10.8.2","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.0","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","vitest":"^3.2.4","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^3.2.4","typescript":"^5.3.0","@types/node":"^20.10.0","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_3.2.1_1781145254969_0.661387121923976","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"nfe-io","version":"4.0.0","keywords":["nfe","nfse","nota-fiscal","invoice","brazil","typescript"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@4.0.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"908eef94bc108d4c833fea01b7d6b53f74aaba14","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-4.0.0.tgz","fileCount":17,"integrity":"sha512-00CZZdJy4c4nBpnkioqc6+VjBTNdF1n475/t9Mq03JTBzxUY0uQvY5v+rhkJp9Ys0j9M0voYCYF9uELfTwxEZg==","signatures":[{"sig":"MEYCIQCQo4H+g5FPwhhxKnwbr/D4U1Cd0B1HPXadQYrLfUaSEgIhAMv46qaqPKkPvLSmzWYghwvuFwF6X07u4Vw/2H8Eij4U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2386989},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfeio-node-sdk","path":"./skills/nfeio-node-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=22.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"0ec88ca01fad34981797f31af1e6fdefd10a9044","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsdown","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:565e8727-2b7c-44c0-b350-bdfb3a15c63f"}},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"11.13.0","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","tsdown":"^0.22.2","vitest":"^4.1.8","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^4.1.8","typescript":"^5.3.0","@types/node":"^22.19.21","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^4.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_4.0.0_1781315938567_0.056226764931506246","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"nfe-io","version":"5.0.0","keywords":["nfe","nfse","nfse-nacional","nota-fiscal","nota-fiscal-eletronica","nota-fiscal-de-servico","invoice","e-invoice","brazil","nodejs","typescript","sdk","api","fiscal"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@5.0.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"0d0724c5fb608515f923242a1c77f69c71b95861","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-5.0.0.tgz","fileCount":18,"integrity":"sha512-vhT/XJ+50OGMrKEIxzKk+jPGjyJUaKhIw1m3mTTewRH+GchZAsC30fMADDpM/sfrqkQImG88YFiEl3HEfU906A==","signatures":[{"sig":"MEUCIQCRAb8eAkilrdLBUyUfFgO2sUpORpdzwgYQL6+JJHuXoQIgd2DZigVhrC1h04swcImTqRB4iKiBj3mPjvK7Rzzv29I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3457749},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfeio-node-sdk","path":"./skills/nfeio-node-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=22.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"881f3d4c8e438be463ae760d49e5536b25bac57f","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsdown","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","test:types":"vitest --run --typecheck --dir tests/types","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:565e8727-2b7c-44c0-b350-bdfb3a15c63f"}},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"11.13.0","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","tsdown":"^0.22.2","vitest":"^4.1.8","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^4.1.8","typescript":"^5.3.0","@types/node":"^22.19.21","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^4.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_5.0.0_1782931193961_0.6004732705174924","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"nfe-io","version":"5.1.0","keywords":["nfe","nfse","nfse-nacional","nota-fiscal","nota-fiscal-eletronica","nota-fiscal-de-servico","invoice","e-invoice","brazil","nodejs","typescript","sdk","api","fiscal"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@5.1.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"38cd237f9157e3cda5a61154cf622c7e506f1e0c","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-5.1.0.tgz","fileCount":18,"integrity":"sha512-7F9KozsMA5SkM+2UHz52TmwpDATIf+qD8M7faYwPSsIwJdsC/6yTfzMh7nuRa3qgtXqtfQwCQP+cRrjio7O4hw==","signatures":[{"sig":"MEYCIQC3p42OVxgpIpxf0mjjh5JwQjrmWYTA4wz1eJ0fxwez6QIhAKfIso08VBLPE6dR3dZSvh+LKdHGkrPgS/pQchRsDS63","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@5.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3500992},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfeio-node-sdk","path":"./skills/nfeio-node-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=22.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"cb6dab0063eb6180cdf293b29d08ebeab0d5389c","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsdown","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","test:types":"vitest --run --typecheck --dir tests/types","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:565e8727-2b7c-44c0-b350-bdfb3a15c63f"}},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"11.16.0","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","tsdown":"^0.22.2","vitest":"^4.1.8","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^4.1.8","typescript":"^5.3.0","@types/node":"^22.19.21","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^4.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_5.1.0_1783094308097_0.5025840136907578","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"nfe-io","version":"5.2.0","keywords":["nfe","nfse","nfse-nacional","nota-fiscal","nota-fiscal-eletronica","nota-fiscal-de-servico","invoice","e-invoice","brazil","nodejs","typescript","sdk","api","fiscal"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","_id":"nfe-io@5.2.0","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"homepage":"https://nfe.io/docs/desenvolvedores/bibliotecas/node/","bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"dist":{"shasum":"ab017f061ce5b11a2bbb29545a713deae747d6d7","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-5.2.0.tgz","fileCount":18,"integrity":"sha512-hS2ouMPutG2hJ78t1x0qG7ejYEjUDEMc4PtzYDpBFVZ4Ak8wDy7xJ5e23+ZM4qGg9EPHKM2oOlmMegsV6CWUiw==","signatures":[{"sig":"MEUCIQCkmOXDYX//UNYAHPLtZUec2mRS4ikAaNMt9MhdHWCiKgIgNzDxJvjy+s3Yv1WRCo0YdnZAGB2dYHVz7y667ZfvN0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@5.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3540769},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","agents":{"skills":[{"name":"nfeio-node-sdk","path":"./skills/nfeio-node-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"module":"./dist/index.js","engines":{"node":">=22.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"531159e6ef0ff539f1ca1e7a6afae762f6ade6fb","scripts":{"dev":"tsx watch src/index.ts","docs":"typedoc src/index.ts --out docs/api","lint":"eslint src --ext .ts --fix","test":"vitest","build":"npm run generate && npm run clean && npm run typecheck && tsdown","clean":"rimraf dist","format":"prettier --write 'src/**/*.ts'","release":"npm run build && npm test -- --run && npm publish","test:ui":"vitest --ui","examples":"node examples/run-examples.js","generate":"tsx scripts/generate-types.ts","prebuild":"npm run validate:spec","test:unit":"vitest tests/unit","typecheck":"tsc --noEmit","test:types":"vitest --run --typecheck --dir tests/types","examples:test":"node examples/test-connection.js","test:coverage":"vitest --coverage","validate:spec":"tsx scripts/validate-spec.ts","examples:setup":"node examples/setup.js","generate:watch":"tsx watch scripts/generate-types.ts","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","test:integration":"vitest tests/integration","validate:openapi":"tsx scripts/validate-openapi-compliance.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:565e8727-2b7c-44c0-b350-bdfb3a15c63f"}},"repository":{"url":"git+https://github.com/nfe/client-nodejs.git","type":"git"},"_npmVersion":"11.16.0","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","yaml":"^2.3.4","dotenv":"~17.2.3","eslint":"^8.57.1","rimraf":"^5.0.10","tsdown":"^0.22.2","vitest":"^4.1.8","typedoc":"^0.25.13","prettier":"^3.2.0","@vitest/ui":"^4.1.8","typescript":"^5.3.0","@types/node":"^22.19.21","openapi-typescript":"^7.13.0","@vitest/coverage-v8":"^4.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/nfe-io_5.2.0_1784032640387_0.9686988327483634","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"nfe-io","version":"6.0.0","description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","keywords":["nfe","nfse","nfse-nacional","nota-fiscal","nota-fiscal-eletronica","nota-fiscal-de-servico","invoice","e-invoice","brazil","nodejs","typescript","sdk","api","fiscal"],"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/nfe/client-nodejs.git"},"bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"homepage":"https://nfe.io/docs/desenvolvedores/bibliotecas/node/","engines":{"node":">=22.0.0"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsx watch src/index.ts","generate":"tsx scripts/generate-types.ts && npm run generate:version","generate:watch":"tsx watch scripts/generate-types.ts","validate:spec":"tsx scripts/validate-spec.ts","build":"npm run generate && npm run clean && npm run typecheck && tsdown","prebuild":"npm run validate:spec","clean":"rimraf dist","typecheck":"tsc --noEmit","lint":"eslint src --ext .ts --fix","format":"prettier --write 'src/**/*.ts'","test":"vitest","test:unit":"vitest tests/unit","test:integration":"vitest tests/integration","test:coverage":"vitest --coverage","test:types":"vitest --run --typecheck --dir tests/types","test:ui":"vitest --ui","validate:openapi":"tsx scripts/validate-openapi-compliance.js","docs":"typedoc src/index.ts --out docs/api","examples":"node examples/run-examples.js","examples:setup":"node examples/setup.js","examples:test":"node examples/test-connection.js","prepublishOnly":"npm run build","prepublish:test":"npm run build && npm test -- --run","release":"npm run build && npm test -- --run && npm publish","generate:version":"tsx scripts/generate-version.ts"},"devDependencies":{"@types/node":"^22.19.21","@typescript-eslint/eslint-plugin":"^8.59.0","@typescript-eslint/parser":"^8.59.0","@vitest/coverage-v8":"^4.1.8","@vitest/ui":"^4.1.8","dotenv":"~17.2.3","eslint":"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.0","openapi-typescript":"^7.13.0","prettier":"^3.2.0","rimraf":"^5.0.10","tsdown":"^0.22.2","tsx":"^4.22.4","typedoc":"^0.25.13","typescript":"^5.3.0","vitest":"^4.1.8","yaml":"^2.3.4"},"agents":{"skills":[{"name":"nfeio-node-sdk","path":"./skills/nfeio-node-sdk","description":"A Node.js SDK for interacting with the NFE.io API, providing functionalities to manage electronic invoices (NF-e) and service invoices (NFS-e) in Brazil."}]},"gitHead":"e0a705f72f1215676a15afe1880e0895031b6fea","_id":"nfe-io@6.0.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-yblS//Yc0F3VxnBspVvNSkLgNOrGoYkIhcQ8ULtiUpBUMPCM9bX5GScnFTWRNLR0aOpRNe57zKdJICkFKUh9EQ==","shasum":"5d29b7e2f302fc2c83dc1881ace4e734d6a1c83e","tarball":"https://registry.npmjs.org/nfe-io/-/nfe-io-6.0.0.tgz","fileCount":18,"unpackedSize":3668958,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/nfe-io@6.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDs5Z6YwAdSgorkkuaUNZghzcsPi1VjRAcA5uDdqs0C/AiEApi0Aw7DfEalFZWMvJLjEy2srVoAdPJLgKb6LgqNsJtE="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:565e8727-2b7c-44c0-b350-bdfb3a15c63f"}},"directories":{},"maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nfe-io_6.0.0_1788470695473_0.9038635497434833"},"_hasShrinkwrap":false}},"time":{"created":"2014-11-09T21:20:48.062Z","modified":"2026-09-03T21:25:11.510Z","0.0.1":"2014-11-09T21:20:48.062Z","0.0.2":"2014-11-09T21:22:58.378Z","0.0.3":"2014-11-21T23:30:11.805Z","0.0.4":"2014-11-22T02:01:45.180Z","0.0.5":"2014-11-22T02:22:25.754Z","0.0.6":"2014-11-22T02:38:55.032Z","0.0.7":"2019-08-02T13:42:33.731Z","1.0.0":"2019-08-02T14:00:18.075Z","2.0.0":"2021-07-05T18:17:05.385Z","3.0.2":"2026-01-20T01:48:20.907Z","3.1.0":"2026-02-23T02:21:53.462Z","3.2.0":"2026-04-26T01:29:04.952Z","3.2.1":"2026-06-11T02:34:15.119Z","4.0.0":"2026-06-13T01:58:58.764Z","5.0.0":"2026-07-01T18:39:54.174Z","5.1.0":"2026-07-03T15:58:28.257Z","5.2.0":"2026-07-14T12:37:20.593Z","6.0.0":"2026-09-03T21:24:55.655Z"},"bugs":{"url":"https://github.com/nfe/client-nodejs/issues"},"author":{"name":"NFE.io Team","email":"suporte@nfe.io"},"license":"MIT","homepage":"https://nfe.io/docs/desenvolvedores/bibliotecas/node/","keywords":["nfe","nfse","nfse-nacional","nota-fiscal","nota-fiscal-eletronica","nota-fiscal-de-servico","invoice","e-invoice","brazil","nodejs","typescript","sdk","api","fiscal"],"repository":{"type":"git","url":"git+https://github.com/nfe/client-nodejs.git"},"description":"Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies","maintainers":[{"name":"nfe_io","email":"hackers@nfe.io"},{"name":"gblmarquez","email":"gabriel@nfe.io"},{"name":"mateusnfe","email":"mateus@nfe.io"},{"name":"andre-nfe","email":"andre@nfe.io"},{"name":"nfe-io","email":"infra@nfe.io"}],"readme":"# NFE.io SDK para Node.js (v5)\n\n[![npm version](https://img.shields.io/npm/v/nfe-io.svg)](https://www.npmjs.com/package/nfe-io)\n[![Node.js Version](https://img.shields.io/node/v/nfe-io.svg)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![skills.sh](https://skills.sh/b/nfe/client-nodejs)](https://skills.sh/nfe/client-nodejs)\n\n**SDK Oficial NFE.io para Node.js 22+** - SDK TypeScript moderno para emissão de notas fiscais de serviço eletrônicas (NFS-e).\n\n> ✨ **Versão 6** - TypeScript nativo, zero dependências em runtime e API moderna async/await. Major de **correção de contrato**: nove pontos da superfície pública mudaram de tipo ou assinatura, todos em métodos que já não funcionavam. Veja a [migração v5 → v6](MIGRATION.md#v5--v6).\n\n## 📋 Índice\n\n- [Recursos](#-recursos)\n- [Instalação](#-instalação)\n- [Início Rápido](#-início-rápido)\n- [Skill para Agentes de IA](#-skill-para-agentes-de-ia)\n- [Documentação](#-documentação)\n- [Migração da v2](#-migração-da-v2)\n- [Exemplos](#-exemplos)\n- [Referência da API](#-referência-da-api)\n- [Contribuindo](#-contribuindo)\n- [Licença](#-licença)\n\n## ✨ Recursos\n\n- 🎯 **TypeScript Moderno** - Segurança de tipos completa com TypeScript 5.3+\n- 🚀 **Zero Dependências** - Usa API fetch nativa do Node.js (Node 22+)\n- ⚡ **Async/Await** - API limpa baseada em promises\n- 🔄 **Retry Automático** - Lógica de retry com exponential backoff integrada\n- 📦 **ESM & CommonJS** - Funciona com ambos os sistemas de módulos\n- 🧪 **Bem Testado** - Mais de 80 testes com 88% de cobertura\n- 📖 **JSDoc Completo** - Documentação completa da API\n- 🛡️ **Tratamento de Erros** - Classes de erro tipadas para melhor tratamento\n\n## 📦 Instalação\n\n**Requisitos:**\n- Node.js >= 22.0.0\n- TypeScript >= 5.0 (se usar TypeScript)\n\n```bash\nnpm install nfe-io\n```\n\nou\n\n```bash\nyarn add nfe-io\n```\n\nou\n\n```bash\npnpm add nfe-io\n```\n\n## 🚀 Início Rápido\n\n### ⚡ Setup Rápido para Testes\n\n```bash\n# 1. Clone e instale\ngit clone https://github.com/nfe/client-nodejs.git\ncd client-nodejs\nnpm install\n\n# 2. Configure suas credenciais (interativo)\nnpm run examples:setup\n\n# 3. Teste a conexão\nnpm run examples:test\n\n# 4. Execute os exemplos\nnpm run examples\n```\n\n### 📦 Instalação em Projeto Novo\n\n```bash\nnpm install nfe-io\n```\n\n### Uso Básico (ESM)\n\n```typescript\nimport { NfeClient } from 'nfe-io';\n\n// Inicializar o cliente\nconst nfe = new NfeClient({\n  apiKey: 'sua-chave-api',\n  environment: 'production' // ou 'development'\n});\n\n// Criar uma empresa\nconst empresa = await nfe.companies.create({\n  federalTaxNumber: '12345678000190',\n  name: 'Minha Empresa Ltda',\n  email: 'empresa@exemplo.com.br',\n  taxRegime: 1, // Simples Nacional\n  address: {\n    country: 'BRA',\n    postalCode: '01310-100',\n    street: 'Av. Paulista',\n    number: '1578',\n    city: { code: '3550308', name: 'São Paulo' },\n    state: 'SP'\n  }\n});\n\n// Emitir uma nota fiscal de serviço\nconst notaFiscal = await nfe.serviceInvoices.create(empresa.id, {\n  cityServiceCode: '01234',\n  description: 'Serviços de desenvolvimento web',\n  servicesAmount: 1000.00,\n  borrower: {\n    type: 'LegalEntity',\n    federalTaxNumber: 12345678000190,\n    name: 'Empresa Cliente',\n    email: 'cliente@exemplo.com.br',\n    address: {\n      country: 'BRA',\n      postalCode: '01310-100',\n      street: 'Av. Paulista',\n      number: '1000',\n      city: { code: '3550308', name: 'São Paulo' },\n      state: 'SP'\n    }\n  }\n});\n\nconsole.log(`Nota fiscal criada: ${notaFiscal.number}`);\n```\n\n### Uso com CommonJS\n\n```javascript\nconst { NfeClient } = require('nfe-io');\n\nconst nfe = new NfeClient({\n  apiKey: process.env.NFE_API_KEY,\n  environment: 'production'\n});\n\n// Mesma API que ESM\n```\n\n## 🤖 Skill para Agentes de IA\n\nEste repositório embarca uma skill que ensina agentes de código (Claude Code, Cursor, etc.) a usar o SDK corretamente. Instale com:\n\n```bash\nnpx skills add nfe/client-nodejs\n```\n\nDescubra no diretório: [![skills.sh](https://skills.sh/b/nfe/client-nodejs)](https://skills.sh/nfe/client-nodejs)\n\n## 📚 Documentação\n\n### Recursos da API\n\nO SDK fornece os seguintes recursos:\n\n#### 🧾 Notas Fiscais de Serviço (`nfe.serviceInvoices`)\n\nGerenciar NFS-e (Nota Fiscal de Serviço Eletrônica):\n\n```typescript\n// ⭐ RECOMENDADO: Criar e aguardar conclusão (lida com processamento assíncrono)\nconst notaFiscal = await nfe.serviceInvoices.createAndWait(empresaId, {\n  borrower: {\n    federalTaxNumber: 12345678901,\n    name: 'João da Silva',\n    email: 'joao@example.com',\n  },\n  cityServiceCode: '10677',\n  description: 'Serviços de consultoria',\n  servicesAmount: 1500.00,\n}, {\n  pollingInterval: 2000,  // Verificar a cada 2 segundos\n  maxWaitTime: 60000,     // Aguardar até 60 segundos\n});\n\nconsole.log(`✅ Nota fiscal emitida: ${notaFiscal.number}`);\n\n// Criar nota fiscal manualmente (retorna 201 imediato ou 202 async)\nconst result = await nfe.serviceInvoices.create(empresaId, dadosNota);\n\n// Verificar se é síncrono (201) ou assíncrono (202)\nif ('id' in result) {\n  // Síncrono - nota emitida imediatamente\n  console.log('Nota emitida:', result.number);\n} else {\n  // Assíncrono - requer polling\n  console.log('Processando:', result.flowStatus);\n  // Use createAndWait() ou pollUntilComplete() em vez disso\n}\n\n// Listar notas fiscais com filtros\nconst notas = await nfe.serviceInvoices.list(empresaId, {\n  pageCount: 50,\n  pageIndex: 1, // paginação é 1-based (primeira página = 1)\n  searchPeriod: {\n    startDate: '2024-01-01',\n    endDate: '2024-01-31',\n  },\n});\n\n// Buscar nota fiscal específica\nconst nota = await nfe.serviceInvoices.retrieve(empresaId, notaFiscalId);\n\n// Verificar status de processamento\nconst status = await nfe.serviceInvoices.getStatus(empresaId, notaFiscalId);\nconsole.log(`Status: ${status.status}, Completo: ${status.isComplete}`);\n\n// Cancelar nota fiscal\nconst notaCancelada = await nfe.serviceInvoices.cancel(empresaId, notaFiscalId);\n\n// Enviar nota fiscal por email\nawait nfe.serviceInvoices.sendEmail(empresaId, notaFiscalId, {\n  emails: ['cliente@example.com', 'financeiro@example.com'],\n});\n\n// Baixar PDF\nconst pdfBuffer = await nfe.serviceInvoices.downloadPdf(empresaId, notaFiscalId);\nfs.writeFileSync('nota.pdf', pdfBuffer);\n\n// Baixar XML\nconst xmlBuffer = await nfe.serviceInvoices.downloadXml(empresaId, notaFiscalId);\nfs.writeFileSync('nota.xml', xmlBuffer);\n\n// Criar múltiplas notas em lote (batch)\nconst notasData = [/* ... array de dados de notas ... */];\nconst notas = await nfe.serviceInvoices.createBatch(empresaId, notasData, {\n  waitForComplete: true,  // Aguardar todas completarem\n  maxConcurrent: 5,       // Processar 5 por vez\n});\n\nconsole.log(`✅ ${notas.length} notas fiscais criadas em lote`);\n```\n\n**Recursos Avançados:**\n\n- ⏱️ **Polling Automático**: `createAndWait()` lida automaticamente com processamento assíncrono\n- 📦 **Criação em Lote**: `createBatch()` cria múltiplas notas com controle de concorrência\n- 🔍 **Verificação de Status**: `getStatus()` verifica se nota completou processamento\n- 🎯 **Discriminated Unions**: TypeScript detecta automaticamente tipo de resposta (201 vs 202)\n\n---\n\n#### 🏢 Empresas (`nfe.companies`)\n\nGerenciar empresas na sua conta:\n\n```typescript\n// Criar empresa (a API exige name, federalTaxNumber, taxRegime e address)\nconst empresa = await nfe.companies.create({\n  name: 'Nome da Empresa',\n  federalTaxNumber: 12345678000190,\n  taxRegime: 'SimplesNacional',\n  address: {\n    state: 'SP',\n    city: { code: '3550308', name: 'São Paulo' },\n    district: 'Centro',\n    street: 'Rua Exemplo',\n    number: '100',\n    postalCode: '01001000',\n    country: 'BRA',\n  },\n});\n\n// Listar empresas — v2, cursor-based (recomendado; a API v1 está sendo descontinuada)\nconst pagina = await nfe.companies.listV2({ limit: 50 });\n// próxima página: listV2({ limit: 50, startingAfter: <id do último item> })\n\n// Listar todas as empresas (varredura completa com paginação automática)\nconst empresas = await nfe.companies.listAll();\n\n// Buscar empresa específica\nconst empresa = await nfe.companies.retrieve(empresaId);\n\n// Atualizar empresa — ATENÇÃO: é PUT (substituição total), não update parcial.\n// Envie o objeto completo (read-modify-write); campos omitidos são zerados.\nconst atual = await nfe.companies.retrieve(empresaId);\nconst atualizada = await nfe.companies.update(empresaId, {\n  ...atual,\n  tradeName: 'Novo Nome Fantasia',\n});\n\n// Upload de certificado digital\nawait nfe.companies.uploadCertificate(empresaId, {\n  file: certificadoBuffer,\n  password: 'senha-certificado'\n});\n```\n\n#### 👔 Pessoas Jurídicas (`nfe.legalPeople`)\n\nGerenciar pessoas jurídicas (empresas/negócios):\n\n```typescript\n// Criar pessoa jurídica\nconst pessoa = await nfe.legalPeople.create(empresaId, {\n  federalTaxNumber: '12345678000190',\n  name: 'Nome da Empresa',\n  email: 'empresa@exemplo.com.br',\n  address: { /* ... */ }\n});\n\n// Listar todas as pessoas jurídicas\nconst pessoas = await nfe.legalPeople.list(empresaId);\n\n// Buscar por CNPJ\nconst pessoa = await nfe.legalPeople.findByTaxNumber(empresaId, '12345678000190');\n```\n\n#### 👤 Pessoas Físicas (`nfe.naturalPeople`)\n\nGerenciar pessoas físicas (indivíduos):\n\n```typescript\n// Criar pessoa física\nconst pessoa = await nfe.naturalPeople.create(empresaId, {\n  federalTaxNumber: 12345678901,\n  name: 'João da Silva',\n  email: 'joao@exemplo.com.br',\n  address: { /* ... */ }\n});\n\n// Buscar por CPF\nconst pessoa = await nfe.naturalPeople.findByTaxNumber(empresaId, '12345678901');\n```\n\n#### 🔗 Webhooks (`nfe.webhooks`)\n\nGerenciar configurações de webhook. Webhooks são gerenciados **por conta**\n(`/v2/webhooks`) — os métodos por empresa estão deprecated (a rota retorna 404):\n\n```typescript\n// Criar webhook — a URI precisa responder 2xx já na criação (ping de verificação)\nconst webhook = await nfe.webhooks.createAccountWebhook({\n  uri: 'https://meuapp.com.br/webhooks/nfe',\n  contentType: 'json',\n  secret: 'um-segredo-de-32-a-64-caracteres-aqui',\n  filters: ['service_invoice.issued_successfully', 'service_invoice.cancelled_successfully']\n});\n\n// Listar webhooks da conta\nconst webhooks = await nfe.webhooks.listAccountWebhooks();\n\n// Atualizar webhook\nawait nfe.webhooks.updateAccountWebhook(webhookId, {\n  filters: ['service_invoice.issued_successfully']\n});\n\n// Validar assinatura do webhook\nconst ehValido = nfe.webhooks.validateSignature(\n  payload,\n  assinatura,\n  segredo\n);\n```\n\n#### 📍 Endereços (`nfe.addresses`)\n\nConsultar endereço brasileiro por CEP:\n\n```typescript\nconst endereco = await nfe.addresses.lookupByPostalCode('01310-100');\nconsole.log(endereco.street);    // 'Avenida Paulista'\nconsole.log(endereco.city.name); // 'São Paulo'\nconsole.log(endereco.state);     // 'SP'\n```\n\n> **Busca por termo não existe.** `lookupByTerm()` e `search()` foram **removidos na\n> v5**: as rotas `/v2/addresses` e `/v2/addresses/{termo}` respondem `404` no host real,\n> então os métodos só lançavam `NotFoundError`. Consulta por CEP é a única disponível.\n> Detalhes em [`MIGRATION.md`](./MIGRATION.md#2-addressessearch-e-addresseslookupbyterm-foram-removidos).\n\n> **Nota:** A API de Endereços usa um host separado (`address.api.nfe.io`) e a chave **de\n> dados**. As duas chaves são complementares — a principal responde `403` aqui. O SDK\n> aplica fallback de `dataApiKey` para `apiKey` como conveniência de quem tem uma chave só\n> com os dois escopos; ver [roteamento multi-host](./docs/multi-host-routing.md).\n\n#### 🚚 Notas de Transporte - CT-e (`nfe.transportationInvoices`)\n\nConsultar CT-e (Conhecimento de Transporte Eletrônico) via Distribuição DFe:\n\n```typescript\n// Ativar busca automática de CT-e para uma empresa\nconst settings = await nfe.transportationInvoices.enable('empresa-id');\nconsole.log('Status:', settings.status);\nconsole.log('Iniciando do NSU:', settings.startFromNsu);\n\n// Ativar a partir de um NSU específico\nconst settings = await nfe.transportationInvoices.enable('empresa-id', {\n  startFromNsu: 12345\n});\n\n// Ativar a partir de uma data específica\nconst settings = await nfe.transportationInvoices.enable('empresa-id', {\n  startFromDate: '2024-01-01T00:00:00Z'\n});\n\n// Verificar configurações atuais\nconst config = await nfe.transportationInvoices.getSettings('empresa-id');\nconsole.log('Busca ativa:', config.status);\n\n// Desativar busca automática\nawait nfe.transportationInvoices.disable('empresa-id');\n\n// Consultar CT-e por chave de acesso (44 dígitos)\nconst cte = await nfe.transportationInvoices.retrieve(\n  'empresa-id',\n  '35240112345678000190570010000001231234567890'\n);\nconsole.log('Remetente:', cte.nameSender);\nconsole.log('Valor:', cte.totalInvoiceAmount);\nconsole.log('Emissão:', cte.issuedOn);\n\n// Baixar XML do CT-e\nconst xml = await nfe.transportationInvoices.downloadXml(\n  'empresa-id',\n  '35240112345678000190570010000001231234567890'\n);\nfs.writeFileSync('cte.xml', xml);\n\n// Consultar evento do CT-e\nconst evento = await nfe.transportationInvoices.getEvent(\n  'empresa-id',\n  '35240112345678000190570010000001231234567890',\n  'chave-evento'\n);\n\n// Baixar XML do evento\nconst eventoXml = await nfe.transportationInvoices.downloadEventXml(\n  'empresa-id',\n  '35240112345678000190570010000001231234567890',\n  'chave-evento'\n);\n```\n\n> **Nota:** A API de CT-e usa um host separado (`api.nfse.io`). Você pode configurar uma chave API específica com `dataApiKey`, ou o SDK usará `apiKey` como fallback.\n\n**Pré-requisitos:**\n- Empresa deve estar cadastrada com certificado digital A1 válido\n- Webhook deve estar configurado para receber notificações de CT-e\n\n#### 📥 NF-e de Entrada - Distribuição (`nfe.inboundProductInvoices`)\n\nConsultar NF-e (Nota Fiscal Eletrônica de Produto) recebidas via Distribuição NF-e:\n\n```typescript\n// Ativar busca automática de NF-e para uma empresa\nconst settings = await nfe.inboundProductInvoices.enableAutoFetch('empresa-id', {\n  environmentSEFAZ: 'Production',\n  webhookVersion: '2',\n});\nconsole.log('Status:', settings.status);\n\n// Ativar a partir de um NSU específico\nconst settings = await nfe.inboundProductInvoices.enableAutoFetch('empresa-id', {\n  startFromNsu: '999999',\n  environmentSEFAZ: 'Production',\n});\n\n// Verificar configurações atuais\nconst config = await nfe.inboundProductInvoices.getSettings('empresa-id');\nconsole.log('Busca ativa:', config.status);\n\n// Desativar busca automática\nawait nfe.inboundProductInvoices.disableAutoFetch('empresa-id');\n\n// Consultar NF-e por chave de acesso - formato webhook v2 (recomendado)\nconst nfe_doc = await nfe.inboundProductInvoices.getProductInvoiceDetails(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890'\n);\nconsole.log('Emissor:', nfe_doc.issuer?.name);\nconsole.log('Valor:', nfe_doc.totalInvoiceAmount);\n\n// Baixar XML da NF-e\nconst xml = await nfe.inboundProductInvoices.getXml(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890'\n);\nfs.writeFileSync('nfe.xml', xml);\n\n// Baixar PDF (DANFE)\nconst pdf = await nfe.inboundProductInvoices.getPdf(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890'\n);\n\n// Enviar manifestação (Ciência da Operação por padrão)\nawait nfe.inboundProductInvoices.manifest(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890'\n);\n\n// Manifestar com evento específico\nawait nfe.inboundProductInvoices.manifest(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890',\n  210220 // Confirmação da Operação\n);\n\n// Consultar evento da NF-e\nconst evento = await nfe.inboundProductInvoices.getEventDetails(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890',\n  'chave-evento'\n);\n\n// Baixar XML do evento\nconst eventoXml = await nfe.inboundProductInvoices.getEventXml(\n  'empresa-id',\n  '35240112345678000190550010000001231234567890',\n  'chave-evento'\n);\n\n// Reprocessar webhook\nawait nfe.inboundProductInvoices.reprocessWebhook('empresa-id', '35240...');\n```\n\n> **Nota:** A API de NF-e Distribuição usa um host separado (`api.nfse.io`). Você pode configurar uma chave API específica com `dataApiKey`, ou o SDK usará `apiKey` como fallback.\n\n**Pré-requisitos:**\n- Empresa deve estar cadastrada com certificado digital A1 válido\n- Webhook deve estar configurado para receber notificações de NF-e\n\n**Tipos de Manifestação:**\n\n| Código | Evento |\n|--------|--------|\n| `210210` | Ciência da Operação (padrão) |\n| `210220` | Confirmação da Operação |\n| `210240` | Operação não Realizada |\n\n#### 📦 NF-e de Produto - Emissão (`nfe.productInvoices`)\n\nCiclo completo de gestão de NF-e (Nota Fiscal Eletrônica de Produto) — emissão, listagem, consulta, cancelamento, carta de correção (CC-e), inutilização e download de arquivos (PDF/XML):\n\n```typescript\n// Emitir NF-e (assíncrono — retorna 202)\nconst result = await nfe.productInvoices.create('empresa-id', {\n  operationNature: 'Venda de mercadoria',\n  operationType: 'Outgoing',\n  buyer: { name: 'Empresa LTDA', federalTaxNumber: 12345678000190 },\n  items: [{ code: 'PROD-001', description: 'Produto X', quantity: 1, unitAmount: 100 }],\n  payment: [{ paymentDetail: [{ method: 'Cash', amount: 100 }] }],\n});\n\n// Listar NF-e (environment é obrigatório)\nconst invoices = await nfe.productInvoices.list('empresa-id', {\n  environment: 'Production',\n  limit: 10,\n});\n\n// Consultar NF-e por ID\nconst invoice = await nfe.productInvoices.retrieve('empresa-id', 'invoice-id');\n\n// Cancelar NF-e (assíncrono)\nawait nfe.productInvoices.cancel('empresa-id', 'invoice-id', 'Motivo do cancelamento');\n\n// Download de PDF e XML\nconst pdf = await nfe.productInvoices.downloadPdf('empresa-id', 'invoice-id');\nconst xml = await nfe.productInvoices.downloadXml('empresa-id', 'invoice-id');\n\n// Carta de correção (CC-e) — razão de 15 a 1.000 caracteres\nawait nfe.productInvoices.sendCorrectionLetter('empresa-id', 'invoice-id',\n  'Correcao do endereco do destinatario conforme novo cadastro');\n\n// Inutilizar faixa de numeração\nawait nfe.productInvoices.disableRange('empresa-id', {\n  environment: 'Production',\n  serie: 1,\n  state: 'SP',\n  beginNumber: 100,\n  lastNumber: 110,\n});\n```\n\n> **Nota:** Operações de emissão, cancelamento, CC-e e inutilização são assíncronas — retornam 202/204. Conclusão é notificada via webhooks.\n\n#### 🏛️ Inscrições Estaduais (`nfe.stateTaxes`)\n\nCRUD de inscrições estaduais (IE) — configuração necessária para emissão de NF-e de produto:\n\n```typescript\n// Listar inscrições estaduais\nconst taxes = await nfe.stateTaxes.list('empresa-id');\n\n// Criar inscrição estadual\nconst tax = await nfe.stateTaxes.create('empresa-id', {\n  taxNumber: '123456789',\n  serie: 1,\n  number: 1,\n  code: 'sP',\n  environmentType: 'production',\n  type: 'nFe',\n});\n\n// Consultar, atualizar e excluir\nconst retrieved = await nfe.stateTaxes.retrieve('empresa-id', 'state-tax-id');\nawait nfe.stateTaxes.update('empresa-id', 'state-tax-id', { serie: 2 });\nawait nfe.stateTaxes.delete('empresa-id', 'state-tax-id');\n```\n\n> **Nota:** Usa o host `api.nfse.io`. Configure `dataApiKey` para chave separada, ou o SDK usará `apiKey` como fallback.\n\n#### 🔍 Consulta de NF-e por Chave de Acesso (`nfe.productInvoiceQuery`)\n\nConsultar NF-e (Nota Fiscal Eletrônica de Produto) diretamente na SEFAZ por chave de acesso. Recurso somente leitura sem necessidade de escopo de empresa:\n\n```typescript\n// Consultar dados completos da NF-e\nconst invoice = await nfe.productInvoiceQuery.retrieve(\n  '35240112345678000190550010000001231234567890'\n);\nconsole.log('Status:', invoice.currentStatus);\nconsole.log('Emissor:', invoice.issuer?.name);\nconsole.log('Valor:', invoice.totals?.icms?.invoiceAmount);\n\n// Baixar DANFE (PDF)\nconst pdf = await nfe.productInvoiceQuery.downloadPdf(\n  '35240112345678000190550010000001231234567890'\n);\nfs.writeFileSync('danfe.pdf', pdf);\n\n// Baixar XML da NF-e\nconst xml = await nfe.productInvoiceQuery.downloadXml(\n  '35240112345678000190550010000001231234567890'\n);\nfs.writeFileSync('nfe.xml', xml);\n\n// Listar eventos fiscais (cancelamentos, correções, manifestações)\nconst result = await nfe.productInvoiceQuery.listEvents(\n  '35240112345678000190550010000001231234567890'\n);\nfor (const event of result.events ?? []) {\n  console.log(event.description, event.authorizedOn);\n}\n```\n\n> **Nota:** A API de Consulta NF-e usa um host separado (`nfe.api.nfe.io`). Você pode configurar uma chave API específica com `dataApiKey`, ou o SDK usará `apiKey` como fallback.\n\n#### 🧾 Consulta de Cupom Fiscal Eletrônico - CFe-SAT (`nfe.consumerInvoiceQuery`)\n\nConsultar CFe-SAT (Cupom Fiscal Eletrônico) por chave de acesso. Recurso somente leitura sem necessidade de escopo de empresa:\n\n```typescript\n// Consultar dados completos do cupom fiscal\nconst coupon = await nfe.consumerInvoiceQuery.retrieve(\n  '35240112345678000190590000000012341234567890'\n);\nconsole.log('Status:', coupon.currentStatus);   // 'Authorized'\nconsole.log('Emissor:', coupon.issuer?.name);\nconsole.log('Valor:', coupon.totals?.couponAmount);\n\n// Baixar XML do CFe\nconst xml = await nfe.consumerInvoiceQuery.downloadXml(\n  '35240112345678000190590000000012341234567890'\n);\nfs.writeFileSync('cfe.xml', xml);\n```\n\n> **Nota:** A API de Consulta CFe-SAT usa o mesmo host (`nfe.api.nfe.io`) e chave de API que a consulta de NF-e.\n\n#### 🏢 Consulta CNPJ / Pessoa Jurídica (`nfe.legalEntityLookup`)\n\nConsultar dados cadastrais de empresas brasileiras (CNPJ) na Receita Federal e nas SEFAZs estaduais:\n\n```typescript\n// Consulta básica por CNPJ (aceita com ou sem pontuação)\nconst result = await nfe.legalEntityLookup.getBasicInfo('12.345.678/0001-90');\nconsole.log('Razão Social:', result.legalEntity?.name);\nconsole.log('Nome Fantasia:', result.legalEntity?.tradeName);\nconsole.log('Status:', result.legalEntity?.status);        // 'Active'\nconsole.log('Porte:', result.legalEntity?.size);            // 'ME', 'EPP', etc.\nconsole.log('Cidade:', result.legalEntity?.address?.city?.name);\n\n// Consulta com opções\nconst result = await nfe.legalEntityLookup.getBasicInfo('12345678000190', {\n  updateAddress: false,    // Não atualizar endereço via Correios\n  updateCityCode: true,    // Atualizar código IBGE da cidade\n});\n\n// Consultar Inscrição Estadual (IE) por estado\nconst ieSP = await nfe.legalEntityLookup.getStateTaxInfo('SP', '12345678000190');\nfor (const tax of ieSP.legalEntity?.stateTaxes ?? []) {\n  console.log(`IE: ${tax.taxNumber} - Status: ${tax.status}`);\n  console.log(`  NFe: ${tax.nfe?.status}, CTe: ${tax.cte?.status}`);\n}\n\n// Avaliar IE para emissão de nota fiscal\nconst invoice = await nfe.legalEntityLookup.getStateTaxForInvoice('MG', '12345678000190');\nfor (const tax of invoice.legalEntity?.stateTaxes ?? []) {\n  if (tax.status === 'Abled') {\n    console.log(`Pode emitir com IE: ${tax.taxNumber}`);\n  }\n}\n\n// Obter melhor IE sugerida para emissão\nconst sugestao = await nfe.legalEntityLookup.getSuggestedStateTaxForInvoice('SP', '12345678000190');\nconst melhorIE = sugestao.legalEntity?.stateTaxes?.[0];\nconsole.log('IE recomendada:', melhorIE?.taxNumber);\n```\n\n> **Nota:** A API de Consulta CNPJ usa um host separado (`legalentity.api.nfe.io`). Você pode configurar uma chave API específica com `dataApiKey`, ou o SDK usará `apiKey` como fallback.\n\n#### 👤 Consulta CPF / Pessoa Física (`nfe.naturalPersonLookup`)\n\nConsultar a situação cadastral de CPF (pessoa física) na Receita Federal:\n\n```typescript\n// Consulta com CPF e data de nascimento\nconst result = await nfe.naturalPersonLookup.getStatus('123.456.789-01', '1990-01-15');\nconsole.log('Nome:', result.name);      // 'JOÃO DA SILVA'\nconsole.log('Status:', result.status);  // 'Regular'\n\n// Também aceita Date object\nconst result = await nfe.naturalPersonLookup.getStatus('12345678901', new Date(1990, 0, 15));\nconsole.log('Situação Cadastral:', result.status);\n```\n\n> **Nota:** A API de Consulta CPF usa um host separado (`naturalperson.api.nfe.io`). Você pode configurar uma chave API específica com `dataApiKey`, ou o SDK usará `apiKey` como fallback.\n\n#### 🧮 Cálculo de Impostos (`nfe.taxCalculation`)\n\nCalcular todos os tributos aplicáveis (ICMS, ICMS-ST, PIS, COFINS, IPI, II) para operações com produtos usando o Motor de Cálculo de Tributos:\n\n```typescript\n// Calcular impostos de uma operação de venda\nconst resultado = await nfe.taxCalculation.calculate('tenant-id', {\n  operationType: 'Outgoing',\n  issuer: { state: 'SP', taxRegime: 'RealProfit' },\n  recipient: { state: 'RJ' },\n  items: [{\n    id: 'item-1',\n    operationCode: 121,\n    origin: 'National',\n    ncm: '61091000',\n    quantity: 10,\n    unitAmount: 100.00\n  }]\n});\n\nfor (const item of resultado.items ?? []) {\n  console.log(`Item ${item.id}: CFOP ${item.cfop}`);\n  console.log(`  ICMS: CST=${item.icms?.cst}, valor=${item.icms?.vICMS}`);\n  console.log(`  PIS: CST=${item.pis?.cst}, valor=${item.pis?.vPIS}`);\n  console.log(`  COFINS: CST=${item.cofins?.cst}, valor=${item.cofins?.vCOFINS}`);\n}\n```\n\n> **Nota:** A API de Cálculo de Impostos usa o host `api.nfse.io`. Configure `dataApiKey` para uma chave específica, ou o SDK usará `apiKey` como fallback.\n\n#### 📋 Códigos Auxiliares de Impostos (`nfe.taxCodes`)\n\nConsultar tabelas de referência necessárias para o cálculo de impostos:\n\n```typescript\n// Listar códigos de operação (natureza de operação)\nconst codigos = await nfe.taxCodes.listOperationCodes({ pageIndex: 1, pageCount: 20 });\nfor (const cod of codigos.items ?? []) {\n  console.log(`${cod.code} - ${cod.description}`);\n}\n\n// Listar finalidades de aquisição\nconst finalidades = await nfe.taxCodes.listAcquisitionPurposes();\n\n// Listar perfis fiscais do emissor\nconst perfisEmissor = await nfe.taxCodes.listIssuerTaxProfiles();\n\n// Listar perfis fiscais do destinatário\nconst perfisDestinatario = await nfe.taxCodes.listRecipientTaxProfiles();\n```\n\n> **Nota:** Todas as listagens suportam paginação via `pageIndex` (1-based) e `pageCount` (padrão: 50).\n\n---\n\n### Opções de Configuração\n\n```typescript\nconst nfe = new NfeClient({\n  // Chave API principal do NFE.io (operações com documentos fiscais)\n  apiKey: 'sua-chave-api',\n  \n  // Opcional: Chave API para serviços de consulta (Endereços, CT-e, CNPJ, CPF)\n  // Se não fornecida, usa apiKey como fallback\n  dataApiKey: 'sua-chave-data-api',\n  \n  // Opcional: Ambiente (padrão: 'production')\n  environment: 'production', // ou 'sandbox'\n  \n  // Opcional: URL base customizada (sobrescreve environment)\n  baseUrl: 'https://api-customizada.nfe.io/v1',\n  \n  // Opcional: Timeout de requisição em milissegundos (padrão: 30000)\n  timeout: 60000,\n  \n  // Opcional: Configuração de retry\n  retryConfig: {\n    maxRetries: 3,\n    baseDelay: 1000,\n    maxDelay: 10000,\n    backoffMultiplier: 2\n  }\n});\n```\n\n#### Variáveis de Ambiente\n\nO SDK suporta as seguintes variáveis de ambiente:\n\n| Variável | Descrição |\n|----------|-----------|\n| `NFE_API_KEY` | Chave API principal (fallback para `apiKey`) |\n| `NFE_DATA_API_KEY` | Chave API para serviços de consulta (fallback para `dataApiKey`) |\n\n```bash\n# Configurar via ambiente\nexport NFE_API_KEY=\"sua-chave-api\"\nexport NFE_DATA_API_KEY=\"sua-chave-data\"\n\n# Usar SDK sem passar chaves no código\nconst nfe = new NfeClient({});\n```\n\n### Tratamento de Erros\n\nO SDK fornece classes de erro tipadas:\n\n```typescript\nimport { \n  NfeError, \n  AuthenticationError, \n  ValidationError,\n  NotFoundError,\n  RateLimitError \n} from 'nfe-io';\n\ntry {\n  const notaFiscal = await nfe.serviceInvoices.create(empresaId, dados);\n} catch (erro) {\n  if (erro instanceof AuthenticationError) {\n    console.error('Chave API inválida:', erro.message);\n  } else if (erro instanceof ValidationError) {\n    console.error('Dados inválidos:', erro.details);\n  } else if (erro instanceof NotFoundError) {\n    console.error('Recurso não encontrado:', erro.message);\n  } else if (erro instanceof RateLimitError) {\n    console.error('Limite de requisições excedido, tente novamente em:', erro.retryAfter);\n  } else if (erro instanceof NfeError) {\n    console.error('Erro da API:', erro.code, erro.message);\n  } else {\n    console.error('Erro inesperado:', erro);\n  }\n}\n```\n\n## 🔄 Migração da v2\n\nVeja [MIGRATION.md](./MIGRATION.md) para um guia completo de migração.\n\n**Principais Mudanças:**\n\n```javascript\n// v2 (callbacks + promises)\nvar nfe = require('nfe-io')('chave-api');\nnfe.serviceInvoices.create('id-empresa', dados, function(err, notaFiscal) {\n  if (err) return console.error(err);\n  console.log(notaFiscal);\n});\n\n// v3 (async/await + TypeScript)\nimport { NfeClient } from 'nfe-io';\nconst nfe = new NfeClient({ apiKey: 'chave-api' });\n\ntry {\n  const notaFiscal = await nfe.serviceInvoices.create('id-empresa', dados);\n  console.log(notaFiscal);\n} catch (erro) {\n  console.error(erro);\n}\n```\n\n## 📝 Exemplos\n\n### ⚡ Exemplos Práticos Prontos para Uso\n\nO diretório [`examples/`](./examples/) contém exemplos completos que você pode executar com suas credenciais:\n\n```bash\n# Modo interativo com menu\nnpm run examples\n\n# Ou diretamente\nnode examples/run-examples.js\n```\n\n**Exemplos disponíveis**:\n1. 📊 **Listar Notas Fiscais** - Consulte notas existentes (comece por aqui!)\n2. 👥 **Gerenciar Pessoas** - CRUD de clientes (pessoas físicas/jurídicas)\n3. 🧾 **Emitir Nota Fiscal** - Fluxo completo: criar → enviar email → baixar PDF/XML\n4. 🔔 **Configurar Webhooks** - Receba notificações de eventos\n\nVeja [`examples/README.md`](./examples/README.md) para documentação completa.\n\n---\n\n### Fluxo Completo de Emissão de Nota Fiscal\n\n```typescript\nimport { NfeClient } from 'nfe-io';\n\nconst nfe = new NfeClient({\n  apiKey: process.env.NFE_API_KEY!,\n  environment: 'production'\n});\n\nasync function emitirNotaFiscal() {\n  // 1. Buscar ou criar empresa\n  const empresas = await nfe.companies.list();\n  const empresa = empresas.data[0];\n  \n  // 2. Criar nota fiscal com polling automático\n  const notaFiscal = await nfe.serviceInvoices.createAndWait(empresa.id, {\n    cityServiceCode: '01234',\n    description: 'Consultoria em TI',\n    servicesAmount: 5000.00,\n    borrower: {\n      type: 'LegalEntity',\n      federalTaxNumber: 12345678000190,\n      name: 'Cliente Exemplo Ltda',\n      email: 'contato@cliente.com.br',\n      address: {\n        country: 'BRA',\n        postalCode: '01310-100',\n        street: 'Av. Paulista',\n        number: '1000',\n        city: { code: '3550308', name: 'São Paulo' },\n        state: 'SP'\n      }\n    }\n  }, {\n    maxAttempts: 30,\n    intervalMs: 2000\n  });\n  \n  console.log(`✅ Nota fiscal emitida: ${notaFiscal.number}`);\n  \n  // 3. Enviar por email\n  await nfe.serviceInvoices.sendEmail(empresa.id, notaFiscal.id);\n  console.log('📧 Email enviado');\n  \n  // 4. Baixar PDF\n  const pdf = await nfe.serviceInvoices.downloadPdf(empresa.id, notaFiscal.id);\n  await fs.promises.writeFile(`nota-fiscal-${notaFiscal.number}.pdf`, pdf);\n  console.log('💾 PDF salvo');\n}\n\nemitirNotaFiscal().catch(console.error);\n```\n\n### Configuração de Webhook\n\n```typescript\n// Configurar webhook para receber eventos de notas fiscais\nconst webhook = await nfe.webhooks.create(empresaId, {\n  url: 'https://meuapp.com.br/api/webhooks/nfe',\n  events: [\n    'invoice.issued',\n    'invoice.cancelled',\n    'invoice.error'\n  ],\n  active: true\n});\n\n// No seu endpoint de webhook (capture o corpo cru: app.use(express.raw({ type: '*/*' })))\napp.post('/api/webhooks/nfe', (req, res) => {\n  const assinatura = req.headers['x-hub-signature']; // header correto (HMAC-SHA1), não 'x-nfe-signature'\n  const ehValido = nfe.webhooks.validateSignature(\n    req.body,\n    assinatura,\n    process.env.WEBHOOK_SECRET\n  );\n  \n  if (!ehValido) {\n    return res.status(401).send('Assinatura inválida');\n  }\n  \n  const { event, data } = req.body;\n  \n  if (event === 'invoice.issued') {\n    console.log('Nota fiscal emitida:', data.id);\n  }\n  \n  res.status(200).send('OK');\n});\n```\n\n### Criação de Notas Fiscais em Lote\n\n```typescript\nasync function emitirNotasEmLote(empresaId: string, notasFiscais: DadosNota[]) {\n  const resultados = await Promise.allSettled(\n    notasFiscais.map(dados => \n      nfe.serviceInvoices.createAndWait(empresaId, dados)\n    )\n  );\n  \n  const sucesso = resultados.filter(r => r.status === 'fulfilled');\n  const falha = resultados.filter(r => r.status === 'rejected');\n  \n  console.log(`✅ ${sucesso.length} notas fiscais emitidas`);\n  console.log(`❌ ${falha.length} notas fiscais falharam`);\n  \n  return { sucesso, falha };\n}\n```\n\n## 🏗️ Referência da API\n\nDocumentação completa da API disponível em:\n- [Documentação TypeDoc](https://nfe.github.io/client-nodejs/) *(em breve)*\n- [Documentação Oficial da API](https://nfe.io/docs/nota-fiscal-servico/integracao-nfs-e/)\n- [Referência da API REST](https://nfe.io/doc/rest-api/nfe-v1/)\n\n## 🧪 Desenvolvimento & Testes\n\n### Executando Testes\n\n```bash\n# Executar todos os testes (unit + integration)\nnpm test\n\n# Executar apenas testes unitários\nnpm run test:unit\n\n# Executar apenas testes de integração (requer chave API)\nnpm run test:integration\n\n# Executar com cobertura\nnpm run test:coverage\n\n# Executar com UI\nnpm run test:ui\n```\n\n### Testes de Integração\n\nOs testes de integração validam contra a **API real do NFE.io**:\n\n```bash\n# Definir sua chave API de desenvolvimento/teste\nexport NFE_API_KEY=\"sua-chave-api-desenvolvimento\"\nexport NFE_TEST_ENVIRONMENT=\"development\"\nexport RUN_INTEGRATION_TESTS=\"true\"\n\n# Executar testes de integração\nnpm run test:integration\n```\n\nVeja [tests/integration/README.md](./tests/integration/README.md) para documentação detalhada.\n\n**Nota**: Testes de integração fazem chamadas reais à API e podem gerar custos dependendo do seu plano.\n\n### Geração de Tipos OpenAPI\n\nO SDK gera tipos TypeScript automaticamente a partir de especificações OpenAPI. As specs são mantidas manualmente em `openapi/spec/`:\n\n```bash\n# Validar todas as specs OpenAPI\nnpm run validate:spec\n\n# Gerar tipos TypeScript a partir das specs\nnpm run generate\n\n# Modo watch - regenerar automaticamente ao modificar specs\nnpm run generate:watch\n```\n\n**Localização das specs**: `openapi/spec/*.yaml`  \n**Tipos gerados**: `src/generated/*.ts`  \n**Configuração**: `openapi/generator-config.yaml`\n\nO processo de build valida automaticamente as specs e gera tipos antes da compilação:\n\n```bash\nnpm run build\n# → Executa: validate:spec → generate → typecheck → tsdown\n```\n\n**Nota**: Arquivos gerados não devem ser editados manualmente. Edite as specs OpenAPI e regenere.\n\nPara orientações de migração, veja [docs/MIGRATION-TO-GENERATED-TYPES.md](./docs/MIGRATION-TO-GENERATED-TYPES.md).\n\n### Verificação de Tipos\n\n```bash\nnpm run typecheck\n```\n\n### Build\n\n```bash\nnpm run build\n```\n\n## 🤝 Contribuindo\n\nContribuições são bem-vindas! Por favor, veja [CONTRIBUTING.md](./CONTRIBUTING.md) para orientações.\n\n## 📄 Licença\n\nMIT © [NFE.io](https://nfe.io)\n\n## 🆘 Suporte\n\n- 📧 Email: suporte@nfe.io\n- 📖 Documentação: https://nfe.io/docs/\n- 🐛 Issues: https://github.com/nfe/client-nodejs/issues\n\n---\n\n**Feito com ❤️ pela equipe NFE.io**\n","readmeFilename":"README.md","users":{"movibe":true,"nfe-io":true,"andrebassi":true,"codeinpixel":true,"luizcarraro":true}}