{"_id":"@ejosterberg/saleor-app-opensalestax","_rev":"8-f3358c5b00f99b8580461e39a56bccee","name":"@ejosterberg/saleor-app-opensalestax","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.0.0","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.0.0","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"73e46fff7ab0ab81a78bfdf7e6ce9ef15dc733b2","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.0.0.tgz","fileCount":32,"integrity":"sha512-9Imcr4cI8BQWON3H0yH4Oh8VUr1zVVaion55mhucc6E4iC1f2FF8RtLuRxpcUgzXegMYbMOkFy1GQVlGSxWtag==","signatures":[{"sig":"MEYCIQD8OkbA1mWzG5SYmH1mWLgbrdPggJVlwHtHXCZAkiLg6QIhAPhx/OPuAV2/vL4wNs1hFREmyRchDd0qKKW3qjGGagRm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79071},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"14298f5a57c37dd69f8a31c04bd47c9a9544503b","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ejosterberg","email":"ejosterberg@gmail.com"},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.4.2","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"22.17.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^8.57.1","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","@typescript-eslint/parser":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.18.1"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.0.0_1778721778775_0.13530877325073098","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.0.1","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.0.1","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"5c19153037e4f35679b326fb1348882a58993bf9","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.0.1.tgz","fileCount":32,"integrity":"sha512-RQroI9ZX3tn74KXQBo5lv7VyjbE4BpkveK+eNgCw9l09XBLl8GDRH078JHAW6sajdhGXL/1Gr5Geu3YWpfNsbQ==","signatures":[{"sig":"MEUCIQCBP8iVn/9HwSv0o4TlSuXqhhQJ4EBDmFya9uhseBn83AIgX/xc1RyxAttwM34LL/a2xopCZv82OQ9oVyOOMarpDW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81193},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"6212ebaa6dd907e518c542e36575a8d2c2eed968","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ejosterberg","email":"ejosterberg@gmail.com"},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.4.2","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"22.17.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^8.57.1","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","@typescript-eslint/parser":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.18.1"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.0.1_1778724438671_0.5853533385538867","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.0.2","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.0.2","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"06ea3308401fa13178274e8fde394c2313bc96de","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.0.2.tgz","fileCount":32,"integrity":"sha512-ux/3yIoex1geC/sCWLVZbgvZ48KXMerPzWHvqyLuxrWf7eXok6/ytoQXJPXqmxrsRkCZIk6RDzktUE3FeY9XIw==","signatures":[{"sig":"MEYCIQD1seXJsChUpDPwcik4PX4SKlrSxabSl5k4RkAYurOZiQIhAN6Ay1ZJhOpPNAZ/apdDDSPzZYwcO+7Zb0r98KtfTdys","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82066},"main":"dist/server.js","engines":{"node":">=20"},"scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"ejosterberg","email":"ejosterberg@gmail.com"},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.4.2","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"22.17.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.18.0","ts-jest":"^29.2.5","@eslint/js":"^9.39.4","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.0.2_1778726329246_0.28964320853633896","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.0.3","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.0.3","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"0c95f01b61950421250de653b0ce6105f27ae80e","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.0.3.tgz","fileCount":32,"integrity":"sha512-kKyeTMwxOklF40mVT5Z6qUSLJ90WXkN13AySj1IrapLg07JmCgJRI2tIk5ZUOMGXabp93blb+ITMs79ZohMpLw==","signatures":[{"sig":"MEUCIQDDGvO3X07uDSUqvdBpi8US3XLxbdl0/AvXQPwwpI3GJwIgOzFx5MRLG4eIuWdNTFHflHCb04cGpx3YZHaG9yybCwc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ejosterberg%2fsaleor-app-opensalestax@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":83359},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"67a8072719a452f4177d05c2bf77feb21c4cdc60","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:457cf67a-2882-4568-8117-807643d83345"}},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.11.0","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"24.14.1","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.18.0","ts-jest":"^29.2.5","@eslint/js":"^9.39.4","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.0.3_1778807207297_0.6103516245085385","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.0.4","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.0.4","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"a37f914b52fbd9a29772a02a985e13db88173560","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.0.4.tgz","fileCount":32,"integrity":"sha512-WiIqwXrU/5NhIfTkR/phvM6WbzyKx0tCDiwh2csoXddg1YoqM0zg2K73kx7WQis8CZSDtDoWJJR5dYNPMQkAJw==","signatures":[{"sig":"MEYCIQD2ChZ9OQo5L0TETPDZSY86muZSp++2Fb5pt2mS2i3HWQIhAPC9KvKTgRyD1Atd63PsX9Hy9X0pgVXpD3FD+zqtr5FV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ejosterberg%2fsaleor-app-opensalestax@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84211},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"35161957fa15692ff99fa55be058660fbbe2c3e3","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:457cf67a-2882-4568-8117-807643d83345"}},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.12.1","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.18.0","ts-jest":"^29.2.5","@eslint/js":"^9.39.4","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.0.4_1778808192936_0.30177812441739715","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.1.0","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"Apache-2.0","_id":"@ejosterberg/saleor-app-opensalestax@1.1.0","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"4ffc9b50056bdcff585f0f50c91eabb770a7357a","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.1.0.tgz","fileCount":32,"integrity":"sha512-POGMOgPqrMJxmWeaXeIKBZu9LSKZZHYvUQO6UUyQ3Rp92ApZvL0ZFT0bnjd3ixZ0LtI12ko/08sU6QQFS6bq3g==","signatures":[{"sig":"MEQCIBo9J/v4y1JZDxSgFrq5ttMFvWf2lkZdAyz02C75VBlYAiBv65maTV0OmIsyeih8FH58AY4dY+tfejold8bPrpqxwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ejosterberg%2fsaleor-app-opensalestax@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85809},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"17aa95f0cda125f1547d1c6ed3f942d3f621faba","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:457cf67a-2882-4568-8117-807643d83345"}},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.12.1","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.18.0","ts-jest":"^29.2.5","@eslint/js":"^9.39.4","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.1.0_1778810219717_0.25045775722156716","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.1.1","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"(Apache-2.0 OR GPL-2.0-or-later)","_id":"@ejosterberg/saleor-app-opensalestax@1.1.1","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"dist":{"shasum":"2e6c386b1548ccc768f90fb3c684d08c6165747f","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.1.1.tgz","fileCount":32,"integrity":"sha512-j+Hg17GUwP73rbxnhX6ClYlUQWPD/g4Z4556ixYIXi9+OeDJq5+52CXgRbxiSRL1/P7OzZ5EV3PRfacPzX0YrA==","signatures":[{"sig":"MEUCIQCuSyUUlmySAQ4FL1lZX7r2gQZ1FlLRfLC/bvbnnacPeAIgSYP4lnvEZgAdtaS0h9+Pij1gH6oAMmc+SKorAeAIw7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ejosterberg%2fsaleor-app-opensalestax@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76050},"main":"dist/server.js","engines":{"node":">=20"},"gitHead":"418f71ef3bed5d61b8342b54845b0e6f694eb9a3","scripts":{"dev":"tsx src/server.ts","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:457cf67a-2882-4568-8117-807643d83345"}},"repository":{"url":"git+https://github.com/ejosterberg/opensalestax-saleor.git","type":"git"},"_npmVersion":"11.12.1","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jose":"^5.10.0","graphql":"^16.10.0","@saleor/app-sdk":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.7.0","eslint":"^9.18.0","ts-jest":"^29.2.5","@eslint/js":"^9.39.4","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^20.17.10","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/saleor-app-opensalestax_1.1.1_1779040050815_0.0544186100322086","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ejosterberg/saleor-app-opensalestax","version":"1.2.0","description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","license":"(Apache-2.0 OR GPL-2.0-or-later)","author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"homepage":"https://github.com/ejosterberg/opensalestax-saleor","bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"repository":{"type":"git","url":"git+https://github.com/ejosterberg/opensalestax-saleor.git"},"keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"engines":{"node":">=20"},"main":"dist/server.js","scripts":{"build":"tsc -p tsconfig.build.json","start":"node dist/server.js","dev":"tsx src/server.ts","test":"jest","lint":"eslint \"src/**/*.ts\" \"tests/**/*.ts\"","typecheck":"tsc --noEmit","check":"npm run lint && npm run typecheck && npm test -- --coverage && npm audit --omit=dev --audit-level=high","prepublishOnly":"npm run build"},"dependencies":{"@saleor/app-sdk":"^1.8.0","graphql":"^16.10.0","jose":"^5.10.0"},"devDependencies":{"@eslint/js":"^9.39.4","@types/jest":"^29.5.14","@types/node":"^20.17.10","eslint":"^9.18.0","jest":"^29.7.0","ts-jest":"^29.2.5","tsx":"^4.19.2","typescript":"^5.7.2","typescript-eslint":"^8.20.0"},"gitHead":"304966135149285c4799a3468028d471eb65c549","_id":"@ejosterberg/saleor-app-opensalestax@1.2.0","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-2qnf4kht5QTo0DnYJCxvulQxfDwG7bAjRZaDBls63FT5IEe4bU501+hQDhQCTJWR3DMSgXQ69Rm93Dw8FzL3sw==","shasum":"d5433ea17a48a50bc6709f3386ae60aebb1f5299","tarball":"https://registry.npmjs.org/@ejosterberg/saleor-app-opensalestax/-/saleor-app-opensalestax-1.2.0.tgz","fileCount":32,"unpackedSize":82115,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ejosterberg%2fsaleor-app-opensalestax@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFeAMj9vOTmK+xJJ681q4eoUNuLKTWYNvIMFkffNcczfAiB3JGK0e2l071hzEeBM0a89Ga/47z2tSomPoaDgyWhA1A=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:457cf67a-2882-4568-8117-807643d83345"}},"directories":{},"maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/saleor-app-opensalestax_1.2.0_1779163748533_0.9655341992447621"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-14T01:22:58.709Z","modified":"2026-05-19T04:09:08.977Z","1.0.0":"2026-05-14T01:22:58.920Z","1.0.1":"2026-05-14T02:07:18.819Z","1.0.2":"2026-05-14T02:38:49.438Z","1.0.3":"2026-05-15T01:06:47.489Z","1.0.4":"2026-05-15T01:23:13.074Z","1.1.0":"2026-05-15T01:56:59.865Z","1.1.1":"2026-05-17T17:47:30.981Z","1.2.0":"2026-05-19T04:09:08.719Z"},"bugs":{"url":"https://github.com/ejosterberg/opensalestax-saleor/issues"},"author":{"name":"Eric Osterberg","email":"ejosterberg@gmail.com"},"license":"(Apache-2.0 OR GPL-2.0-or-later)","homepage":"https://github.com/ejosterberg/opensalestax-saleor","keywords":["saleor","tax","sales-tax","opensalestax","us-tax","tax-provider"],"repository":{"type":"git","url":"git+https://github.com/ejosterberg/opensalestax-saleor.git"},"description":"Saleor Tax App connector — destination-based US sales tax via the self-hosted OpenSalesTax engine","maintainers":[{"name":"ejosterberg","email":"ejosterberg@gmail.com"}],"readme":"# opensalestax-saleor\n\n[![npm version](https://img.shields.io/npm/v/@ejosterberg/saleor-app-opensalestax.svg)](https://www.npmjs.com/package/@ejosterberg/saleor-app-opensalestax)\n[![CI](https://github.com/ejosterberg/opensalestax-saleor/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ejosterberg/opensalestax-saleor/actions/workflows/ci.yml)\n[![License: Apache-2.0 OR GPL-2.0-or-later](https://img.shields.io/badge/License-Apache_2.0_OR_GPL_2.0--or--later-blue.svg)](LICENSE)\n\n> **Saleor Tax App connector** — destination-based US sales tax via\n> the self-hosted [OpenSalesTax](https://github.com/ejosterberg/opensalestax) engine.\n> No per-transaction fees. No SaaS lock-in. Dual-licensed Apache-2.0 OR GPL-2.0-or-later.\n\n## What this is\n\nA [Saleor Tax App](https://docs.saleor.io/developer/app-store/getting-started/tax-app)\nthat routes Saleor's `CHECKOUT_CALCULATE_TAXES` and\n`ORDER_CALCULATE_TAXES` webhooks through your own OpenSalesTax\nengine and returns the destination-based US tax breakdown back to\nSaleor.\n\nYou run both the Saleor Tax App and the OpenSalesTax engine on\nyour own infrastructure. Saleor calls the app over HTTPS; the app\ncalls the engine over your private network.\n\n## Quickstart (≤10 minutes)\n\n### Prerequisites\n- A running Saleor instance, **v3.20 or later**, with the\n  [Tax App framework](https://docs.saleor.io/developer/app-store/getting-started/tax-app)\n- Docker + Docker Compose\n- A network path from Saleor → this app (HTTPS in production)\n\n### Steps\n\n1. **Clone and configure**\n   ```bash\n   git clone https://github.com/ejosterberg/opensalestax-saleor.git\n   cd opensalestax-saleor\n   cp .env.example .env\n   # Edit .env: set APP_API_BASE_URL to the public URL Saleor will reach\n   ```\n\n2. **Boot the stack**\n   ```bash\n   docker compose up -d\n   ```\n   Three containers start: the Saleor Tax App, the OpenSalesTax engine, and a Postgres for the engine.\n\n   The shipped `docker-compose.yml` pulls a multi-arch prebuilt\n   image from GitHub Container Registry\n   (`ghcr.io/ejosterberg/opensalestax-saleor:latest`) that's\n   signed with SLSA provenance attesting it was built from this\n   repo's tagged release commit. If you'd rather audit the source\n   and build locally, swap the `image:` line for `build: .` in\n   `docker-compose.yml`.\n\n3. **Verify the app is healthy**\n   ```bash\n   curl http://localhost:3000/health\n   # → {\"ok\": true, \"version\": \"...\", \"rtt_ms\": ...}\n\n   curl http://localhost:3000/api/manifest | jq .name\n   # → \"OpenSalesTax\"\n   ```\n\n4. **Install into Saleor**\n   In the Saleor Dashboard → **Apps → Install external app**, paste\n   `${APP_API_BASE_URL}/api/manifest`. Review the requested\n   permission (`HANDLE_TAXES`) and confirm.\n\n5. **Capture the APL token**\n   The app's stdout (`docker compose logs opensalestax`) prints\n   the `SALEOR_API_URL`, `SALEOR_APP_ID`, and `SALEOR_APP_TOKEN`\n   Saleor delivered. Copy those into `.env`, then `docker compose\n   up -d` to make them survive restarts.\n\n6. **Set the app as your channel's tax provider**\n   In the Saleor Dashboard, go to your USD channel →\n   **Configuration → Taxes**, set **Tax calculation strategy** to\n   `TAX_APP`, and pick **OpenSalesTax** as the tax app.\n\n7. **Run a test checkout**\n   Create a checkout against a US ship-to address with a non-zero\n   shipping cost. Saleor calls the app, the app calls the engine,\n   and the response carries per-line + per-jurisdiction tax.\n\nThat's it.\n\n## How it works\n\n```\n┌────────────┐   POST /api/webhooks/...   ┌──────────────────────┐\n│   Saleor   │ ─────────────────────────► │  opensalestax-saleor │\n│  (v3.20+)  │                            │   (this Tax App)     │\n└──────┬─────┘                            └────────────┬─────────┘\n       │      tax response (JSON)                      │\n       │  ◄────────────────────────────────────────────│\n       │                                               │ POST /v1/calculate\n       │                                               ▼\n       │                            ┌─────────────────────────────┐\n       │                            │   OpenSalesTax engine       │\n       │                            │   (your self-hosted copy)   │\n       │                            └─────────────────────────────┘\n```\n\nFor each `CHECKOUT_CALCULATE_TAXES` or `ORDER_CALCULATE_TAXES`\nevent, the app:\n1. Verifies the Saleor JWT (delegated to `@saleor/app-sdk`)\n2. Gates: requires `currency=USD`, `country=US`, valid ZIP. If\n   any gate fails, returns an empty response so Saleor falls back\n   to its catalog rates.\n3. Transforms the Saleor payload into the OST engine's\n   `POST /v1/calculate` request.\n4. Calls the engine; on success transforms the response into\n   Saleor's expected per-line tax breakdown.\n5. On engine error (fail-soft, default): returns empty + logs a\n   warning. Saleor falls back to its catalog rates and the\n   checkout proceeds.\n\n## Configuration\n\nAll configuration is via environment variables. See\n[`.env.example`](.env.example) for the full list.\n\n| Variable | Required | Default | Notes |\n|---|---|---|---|\n| `APP_API_BASE_URL` | ✅ | — | Public URL Saleor will call. Must be http(s). |\n| `OSTAX_API_URL`    | ✅ | — | OpenSalesTax engine base URL. |\n| `PORT`             |    | `3000` | HTTP port the app listens on. |\n| `OSTAX_API_KEY`    |    | — | Sent as `X-API-Key` if set. |\n| `OSTAX_TIMEOUT_MS` |    | `5000` | Per-engine-request timeout. |\n| `OSTAX_FAIL_HARD`  |    | unset | `\"1\"` opts into fail-hard mode. |\n| `OSTAX_NEXUS_STATES` |  | unset | Comma-separated list of US 2-letter state codes (e.g. `\"MN,WI,IA\"`) for the per-state nexus filter (see below). Unset / empty = filter disabled (engine called for every cart, pre-v1.2 behavior). |\n| `SALEOR_API_URL`   |    | — | APL seed (written by install). |\n| `SALEOR_APP_ID`    |    | — | APL seed. |\n| `SALEOR_APP_TOKEN` |    | — | APL seed. Treat as a secret. |\n\n### Per-state nexus filter (CP-3, v1.2.0)\n\nMost US merchants only have nexus (sales-tax-collection obligation) in\na small set of states — typically 1–3. Without a filter, every cart\ngoes to the engine even when the merchant has no obligation to\ncollect for that destination.\n\nSet `OSTAX_NEXUS_STATES` to a comma-separated list of US 2-letter\nstate codes to restrict engine round-trips to ship-tos in those\nstates:\n\n```bash\nOSTAX_NEXUS_STATES=MN,WI,IA\n```\n\nWhen the filter is active:\n\n- Carts whose ship-to state IS in the list → engine called as usual.\n- Carts whose ship-to state is NOT in the list → short-circuit with\n  an empty tax response. No engine RTT. Saleor falls back to its\n  catalog rates (typically zero).\n- Carts whose ship-to state is missing/unresolvable AND the filter is\n  active → fail-closed (also short-circuit). The safer default for a\n  merchant who explicitly opted into the filter.\n\nWhen `OSTAX_NEXUS_STATES` is unset or empty, the filter is disabled\nand every cart calls the engine (pre-v1.2 behavior — fully backward\ncompatible).\n\nBrings this connector in line with WooCommerce v0.5, Vendure v1.2,\nand Odoo v0.3, which already shipped this filter.\n\n## What it does NOT do\n\n- ❌ File tax returns\n- ❌ Remit collected tax\n- ❌ Validate addresses (call USPS / Smarty separately)\n- ❌ Non-USD currency or non-US destinations (returns empty\n  response; Saleor falls back to catalog rates)\n- ❌ Marketplace-facilitator handling for NJ / CA seller-of-record\n  edge cases (manual)\n\nThis is a calculation connector. Filing and remittance stay with\nthe merchant.\n\n## Troubleshooting\n\n### Install fails — \"could not reach manifest URL\"\nSaleor must be able to reach `APP_API_BASE_URL/api/manifest`\nfrom its own network. If Saleor runs in Docker on the same\nhost, use the docker-compose service name or the host's LAN IP\n— `localhost` won't resolve to your machine from inside Saleor's container.\n\n### Checkout hangs, then proceeds with zero tax\nThe app's fail-soft default returns empty tax on engine errors.\nCheck `docker compose logs opensalestax` for `engine_error`\nentries. Common causes:\n- `OSTAX_API_URL` not reachable from inside the app's container\n- OST engine database down or migrating\n- Engine returned 5xx (see the engine's own logs)\n\nTo make this loud instead of silent, set `OSTAX_FAIL_HARD=1`.\nSaleor will then surface the engine error to the checkout flow,\nblocking the order until the engine recovers.\n\n### \"Signature verification failed\" in app logs\nThe `SALEOR_APP_TOKEN` in your env doesn't match the token\nSaleor stored on install. Re-install the app from the Saleor\nDashboard, capture the new token from app stdout, and update\n`.env`.\n\n### Tax returns zero for what should be a taxed US cart\n- Confirm `currency` is `USD` and `address.country.code` is `US`\n  on the checkout. The app intentionally returns empty for\n  non-USD / non-US (see \"What it does NOT do\").\n- Confirm `address.postalCode` matches `^\\d{5}(-\\d{4})?$`.\n  `12345`, `12345-6789` accept; `K1A 0B1` rejects.\n- Confirm the OST engine has rate data loaded for the destination\n  state. The engine's own admin tells you what's missing.\n\n## Compatibility\n\n| Component | Tested with |\n|---|---|\n| Saleor | v3.20+ (GA Tax App framework) |\n| OpenSalesTax engine | v0.55.4 (HTTP API v1) |\n| Node | v20 LTS (tested 20 / 22 / 24 in CI) |\n| Container image | `linux/amd64`, `linux/arm64` |\n\nThe OST engine HTTP API is pinned to **v1**; the engine maintains\nbackwards compatibility within v1. Cross-major engine bumps will\nland in a new minor of this connector.\n\n## Installing as a library\n\nThe connector is also published as an NPM package for programmatic\nconsumers (custom Saleor app distributions, monorepos):\n\n```bash\nnpm install @ejosterberg/saleor-app-opensalestax\n```\n\nMost merchants don't need this — `git clone` + `docker compose up`\nis the supported install path. The NPM package is published with\n[provenance attestation](https://docs.npmjs.com/generating-provenance-statements)\nso consumers can verify each release was built from this exact\nrepo by GitHub Actions.\n\n## Development\n\n```bash\nnpm ci\nnpm run lint\nnpm run typecheck\nnpm test             # 55 tests, ~12s\nnpm run check        # lint + typecheck + test + audit (the merge gate)\n```\n\nThe app boots locally with `npm run dev`. Tests against the\nin-tree OST engine container are gated on the `OSTAX_API_URL`\nenv var — set it to the engine URL to enable the live integration\ntest.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). DCO sign-off (`git\ncommit -s`) is required on every commit. No AI co-author trailers.\n\n## License\n\nDual-licensed under your choice of [Apache-2.0](LICENSE-APACHE.txt) OR [GPL-2.0-or-later](LICENSE-GPL.txt). See [LICENSE](LICENSE).\n\n## Related projects\n\n| Project | Stack | Status |\n|---|---|---|\n| [opensalestax](https://github.com/ejosterberg/opensalestax) | OST engine (Python) | shipped |\n| [opensalestax-python](https://github.com/ejosterberg/opensalestax-python) | Python SDK | shipped (PyPI) |\n| [opensalestax-medusa](https://github.com/ejosterberg/opensalestax-medusa) | Medusa v2 plugin | shipped (NPM) |\n| [opensalestax-woocommerce](https://github.com/ejosterberg/opensalestax-woocommerce) | WordPress plugin | shipped |\n| [opensalestax-odoo-src](https://github.com/ejosterberg/opensalestax-odoo-src) | Odoo connector | shipped (PyPI) |\n| **opensalestax-saleor** | **Saleor Tax App** | **this repo** |\n","readmeFilename":"README.md"}