{"_id":"fresh-squeezy","_rev":"46-ca92c8396c2748566c8236f8db19215c","name":"fresh-squeezy","dist-tags":{"latest":"0.1.19"},"versions":{"0.1.0":{"name":"fresh-squeezy","version":"0.1.0","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.0","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"67df699e5bc9b619f25d2b876dd2773b63984503","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.0.tgz","fileCount":12,"integrity":"sha512-kAWAwJFPhiVmXERAYQBLR1n6W79tJeMMv948cmD+xUu/K4iyD8NnefMmhM3celK7arTAN6VN/kfQ9eEHmw3RWQ==","signatures":[{"sig":"MEUCIQD5m7IGjxb483dfeC8JqR78tpt1fDV3ggkRJdPz8dDB0wIgAqywthywZywMnCXAkVFmutD2YAAB+o2vJercZH5V6SM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315872},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"beba6e95a02224dcbefcfd319f84aa50cc22e51d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run tests/live","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"yosefsabag","email":"yosefisabag@gmail.com"},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.12.1","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.0_1777060089684_0.4780722480791817","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"fresh-squeezy","version":"0.1.2","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.2","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"694ee2c3323224452ed3476bbd67241f022f3ad0","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.2.tgz","fileCount":12,"integrity":"sha512-YfdcvRgp5zwe0uEF3BkT9OiVdXVOfDsQwPwhw6oOshPIQEAYH9Hd7Zxgn7BlpzIOQDjsYh7qQSSvfLPDRYbZ0g==","signatures":[{"sig":"MEUCIAyQNjox5NSt+oK6Z1za4rc+YX+f9hCVLSlJYdURCj6vAiEAgsZI5bzN/gMh2LEpjpHC0JjixZXbHe4sOmeR3SPm1O8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":315872},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9372fc8db22a31d25b6f6ddf9ad84e09e683ffbd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run tests/live","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.2_1777060482026_0.8787362025148091","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"fresh-squeezy","version":"0.1.3","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.3","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"7fcd44500034969633a11451bf0017ccae485b34","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.3.tgz","fileCount":12,"integrity":"sha512-wxgPnUXAj07keNqbI9Ewlp7IPRIy3K00NmHbIHznb5mZrrSxO7qh/m5/A7rOUYyDom227hUNf9im58HqL8LPWQ==","signatures":[{"sig":"MEQCIEsW8z4PE3teyC5773u0pQ457aQ3KYiMh38Z1Isyl0g8AiAiwxP8tejylRFaQHlApJxVKfWTWck26x2C/gg1Rocp/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":315892},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8222104486da2efdeb99bca960ba251cab7c08b0","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.3_1777289326169_0.05492892046027675","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"fresh-squeezy","version":"0.1.4","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.4","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"883a78afbf83ac8a0ce67bec0b566560d94ee97b","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.4.tgz","fileCount":12,"integrity":"sha512-2za36J4nyh5v7g7g8CEmOcZ6lvese1ZzJBKd9TCHcOskgF7yXrv6uINixPmIpkrAcLPekvSCkYUaTWrJtRGbyw==","signatures":[{"sig":"MEQCIAHKJvNWxoyeVMLubJHLEJhETFtHI3k2VZ/U/vwnkN4XAiBwGtyno6fRjZ/mcubVqHRdb+Zt4tMCGCA+aLCo77YStg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":465922},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"57006ae628d96693b3d9392be4466eeab3319ae4","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.4_1777294350857_0.6163386063957659","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"fresh-squeezy","version":"0.1.5","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.5","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"ea6d1c40c7c0a554bdd364a897822fc6e558c728","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.5.tgz","fileCount":12,"integrity":"sha512-OPw1+xlbgIUs3RbbQh2jhO+bXHP4dmzMDe4ozDz/gZQGB4vrwgxsAP11r724i7mY3aphErFJAplnMMyj1RxwvA==","signatures":[{"sig":"MEYCIQDTYJYZhjnmypS2W11IQsz3+ATv+1/MOFxR4g/qk1qyrQIhALZj70Ug5Nkrg/uYygvzwwwkTUyu1PG8UPSehbYWA+1M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466634},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0a6640a98c0ee8b50f816cab617df93504bd713c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.5_1777294493378_0.9468448094623412","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"fresh-squeezy","version":"0.1.6","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.6","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"7a473551e5a5f3426393cbddfa1fa784c08f2330","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.6.tgz","fileCount":12,"integrity":"sha512-2sFpdQYqI3RgNhVT0CwkcO7Wry2uCZyhcbGpzpqjwiQbNi01TXyoEth2eCvIPcypUYdmY9eYra20N5d+cSurIQ==","signatures":[{"sig":"MEQCIG0qyGDc1kN2/g1pXCqS4unj0h13V0qnuTGaUqC/AqXnAiAln0XMUxWtyxr6Zbr4wdKDdHfPxtklxk5+Ir+PlP7UFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":467837},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0b84ae9e0d6bf9b9aa5fa8eff1f5945972504b56","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.6_1777295485884_0.4679949608830989","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"fresh-squeezy","version":"0.1.7","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.7","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"ebc377889df16ff761dac3f7b729e7edd48d01c4","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.7.tgz","fileCount":12,"integrity":"sha512-Z/CLZ8MBvmYVp9a6m3Xr795W7YCawic5us7rPGV4TWtJc377ivkXqVXlk5fhudztcNeQzTqFo9MU/JmL9VDy2w==","signatures":[{"sig":"MEQCIGGhZBB6vqBAarsc+IKFSwxxPV5rhMXl1MorLM/2qznKAiBItoxcg/JJRHJ73P8/hQMIEB7lf5XzOafTQum92DV8vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":464321},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"02002e5d98d781a59333c45ec63599e9d840caf9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.7_1778156144831_0.11528515199994471","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"fresh-squeezy","version":"0.1.8","keywords":["lemon-squeezy","lemonsqueezy","billing","validator","doctor","cli"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.8","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"d2366cf849fa92ad49c0ad3a32fa28b9a2a2564b","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.8.tgz","fileCount":12,"integrity":"sha512-/bkPcxIuRxXxA3aMMeoIg/cKKDChIOOSERoB17iU1QUfLjOLgSMdUGHl1fEMoTXfVcSaY03v7SoK2ren5/LNiw==","signatures":[{"sig":"MEQCIHd6jAcoteh/7pcGlfMcphnr7zBseGHQJLWUTNRPhvj2AiAR+vXRsmeqAnmGUP1HamEbxeQIttT+rOo9DtEBeh7QPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":592133},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e1f29426377076409f229433c42283427a261c8d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:changelog":"node scripts/check-changelog.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validator-first Lemon Squeezy setup toolkit. Verify your integration before it hits production.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.8_1778156760024_0.3448497698553479","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"fresh-squeezy","version":"0.1.9","keywords":["lemon-squeezy","billing","cli","validator","typescript","nodejs","webhooks"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.9","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"cc61610268b70a4dcc405866185d1ec0505715f7","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.9.tgz","fileCount":12,"integrity":"sha512-8YiArsFnqQnA/YRUxtrEqEep/FS3mvop19C5E93QOU9Fpc1u6aWA237u1HseUiV+0fhA8LIJNHMKul3qinFNZA==","signatures":[{"sig":"MEUCIQDdmsHcYTO4W7TS8FjICAL+Q2S7YOPBGXPOS11x8T1WgwIgMTQXIoAfVoDix+lL5BtRLyH2MtqK8ctwb5Rm4taU/Hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":887076},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b094ae361d4171cde76162507f1bd8df9ea0c2a5","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node scripts/generate-api-types.mjs","check:changelog":"node scripts/check-changelog.mjs","generate:api-types":"node scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.11.0","description":"Validate your Lemon Squeezy integration against changelog drift the official SDK hasn't shipped yet.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.9_1778353815591_0.5057346507036733","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"fresh-squeezy","version":"0.1.10","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.10","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"d945ca0bb69d50cbcd31c6049b9a03c3f20f74e8","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.10.tgz","fileCount":17,"integrity":"sha512-MYPTwr6qKkvtuPwRMDnlnpeeQs59YpA5UskbVxp+3G/Wtj2gcNvAAqnI97CHswq8xF9Pl+4FBKbvsvfcGraaQA==","signatures":[{"sig":"MEYCIQDsTe3BaA9r7BZBLUIM5D783qgYaPJHgnc1YOHzttxaVQIhANcVA8zHyPrQMmEzgdSq2jgt/e+MfR2Z8FdTxIMReIIs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1062010},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b6859c9d81ace60468b90e7d8d700c9e43758057","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node scripts/generate-api-types.mjs","check:changelog":"node scripts/check-changelog.mjs","generate:api-types":"node scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.13.0","description":"A CLI and TypeScript library that validates your Lemon Squeezy billing integration — stores, products, webhooks, discounts, license keys, and subscription plans — and catches misconfigurations before they ship.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.10_1781546321415_0.14296087412822778","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"fresh-squeezy","version":"0.1.11","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.11","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"bin/fresh-squeezy.js"},"dist":{"shasum":"8c53526811a21b2b9095978d92187f4b30de5d59","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.11.tgz","fileCount":17,"integrity":"sha512-0P4yUZJDi7vAtDvgr71e7zLQ/EVQsIuN1y138r8MjcntZQIP6lyX0e48xazITXPKu0wds/1Oaaa+wP1ErvXn7A==","signatures":[{"sig":"MEYCIQDhO17kAC/s4wdlsnw8y7OEbSdfQssgz/l+EymBm0wbHgIhAOyrSOnKMfwpBZ5bBY/ygL8lepg3aQTqEoAhzWuSI9KS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1062964},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4d81f3feed5a4117508ceac212c767e08b291301","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node scripts/generate-api-types.mjs","check:changelog":"node scripts/check-changelog.mjs","generate:api-types":"node scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.13.0","description":"A CLI and TypeScript library that validates your Lemon Squeezy billing integration — stores, products, webhooks, discounts, license keys, and subscription plans — and catches misconfigurations before they ship.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","dotenv":"^16.4.5","inquirer":"^10.2.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.11_1781547888270_0.06725578013510547","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"fresh-squeezy","version":"0.1.12","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.12","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"b125cea70bf0f2be015c78223775899fe4345f2d","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.12.tgz","fileCount":15,"integrity":"sha512-n+qn7uWtVQASdcZckKWMNSDfSYt6fYzYTPhf5kljDvBdYLaxjsU6KN91t39iJ+upN+PFsLfxh6PGlX0nQC9C3A==","signatures":[{"sig":"MEUCIQCl/Hz0O7ka+o1BVtbAfjqf0Tr7rx6lrMK550yoPqIGZQIgWCIXBth7tO84lXChzZLihD1A9ogUDfF+btNbTZrLhvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":984197},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0fa0cc46d4339d051e478cfc3cc27aa0a67ab945","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && npm run build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"A CLI and TypeScript library that validates your Lemon Squeezy billing integration — stores, products, webhooks, discounts, license keys, and subscription plans — and catches misconfigurations before they ship.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.12_1782990220529_0.8155452810111914","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"fresh-squeezy","version":"0.1.13","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.13","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"eaea274d763b841e2025ef38adc1cc802b8bf921","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.13.tgz","fileCount":15,"integrity":"sha512-sEmTmRXOMt5sgEhMwwudaz1NQgapkzAhL4DO72BGww1X5xEVHpEz2Ekwp23L57tDAqAEV8TLaRF48eLDrrM66Q==","signatures":[{"sig":"MEYCIQCN078ytgDPcaAT8d6w71FXMlAQH3L7FwtS8e7jfHISQQIhALGXlw17ujSm0uot1Gtop8lqclE1ZcgRA090q512n5qv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":984197},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2f7471371b3c4a0ce1c3d8edc8d596419ef55185","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && npm run build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"A CLI and TypeScript library that validates your Lemon Squeezy billing integration — stores, products, webhooks, discounts, license keys, and subscription plans — and catches misconfigurations before they ship.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.13_1783173657014_0.3306866172425731","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"fresh-squeezy","version":"0.1.14","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.14","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"8a6210afafa55d7df20c96fdbd059339c5a0a8c8","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.14.tgz","fileCount":15,"integrity":"sha512-rNaU4tpJ1AgOrldDxVfIneldwDoLF5TacOsow+ODP3Be80tZoBAuawfciL9YGdVtIoJlJEU0EsmnDLM+T4D2zg==","signatures":[{"sig":"MEQCIEOyaWIqQ7e/slLlcoIsMvcqFpvU4n9w0dQOiTY7HkCNAiBH2M8gs5FJW2B5eNJdJhfjlOKR8pND4+icsSZN+FU/QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":984197},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a14c116761d09fa8e8caea38d9b508e7ba9fb93b","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && npm run build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run typecheck && npm run test && npm run build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"A CLI and TypeScript library that validates your Lemon Squeezy billing integration — stores, products, webhooks, discounts, license keys, and subscription plans — and catches misconfigurations before they ship.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.14_1783194651535_0.21027171593023963","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"fresh-squeezy","version":"0.1.15","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.15","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"2796759d53268cacc948cea303d23c6ab56706d8","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.15.tgz","fileCount":15,"integrity":"sha512-TYjyD4i7Zr0wtBCrZrRtQ9MUTmPp+Qme1rqkqf2zYay5Na1JXc1MolZ8SM80L6HYirxXiR75xTONe7s51GDLPg==","signatures":[{"sig":"MEUCIH8/HIZw5PWgAySNattrDLELtIQGeyltYKqHNA3gcd12AiEAkr+bHJDuRuNeQHJTjr4lV/xb3ql4vWJ1ojzD4I2szto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1400087},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f390093f9e40070ec88b17a108c93fcb6671dad6","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && pnpm build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm typecheck && pnpm test && pnpm build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.15_1783794939895_0.9297826693267806","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"fresh-squeezy","version":"0.1.16","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.16","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"548b08f8e1841f776dcd0a36ade11591ed8d7c3d","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.16.tgz","fileCount":15,"integrity":"sha512-+RyM2UEZriiHv1QyaWHWHulkFjK6bz+q7DKiJbUarkb9chB4SIpaHWtZAVMOOMjA5HYw/42dNBAv6blJRrDuew==","signatures":[{"sig":"MEYCIQC5zKmuhPb0ajzN6ZcAVhUnatQwAIpiB6ZR0NTAAHrVGAIhALfn6KWWu3cAaKuLMz0u0G0J1b8FQhAAvJTqoFTzWOlC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1400103},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"284b04d63a4e6c31cfdcfa5373a728b0879cc5bc","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && pnpm build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm typecheck && pnpm test && pnpm build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.16_1783794988153_0.00730415077823654","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"fresh-squeezy","version":"0.1.17","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.17","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"3f28f6ea70c2a01127b9971809799280ab86daab","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.17.tgz","fileCount":15,"integrity":"sha512-WpWktjs+34vOO8BpKHwZnILTz/+zlgrdo95C5F84U60bFzFGRwxSNaLbCHlsPOdw8zE60kMHBEeOKX0OfCtY7A==","signatures":[{"sig":"MEYCIQDuofW7/ylKjJK8PkM96BiSao1KxGZEeV00iXhxzFPuqAIhAOrUTPOepI/nu+t7+XtrhxhsxUK8gxjV5xb5F0SyC/+E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1400103},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"02bfedaaf7f8531092fc1afaee991acf7bd9e4aa","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && pnpm build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm typecheck && pnpm test && pnpm build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.17_1783964486639_0.35500048450665633","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"fresh-squeezy","version":"0.1.18","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"author":{"name":"fresh-squeezy contributors"},"license":"MIT","_id":"fresh-squeezy@0.1.18","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"bin":{"fresh-squeezy":"dist/cli.js"},"dist":{"shasum":"01ec8805c9c7e09bda96c09e21a3279ddd13774a","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.18.tgz","fileCount":15,"integrity":"sha512-2nzmGNHi5vTiEn1ldGK/qbeXkGB27kr0cNoV+p+muzKgr7f9r5WljdsWdhtWpk+1GFZAkPnNmKMjcSx7mzjXFQ==","signatures":[{"sig":"MEYCIQCXfc7w12v7rvoY7UQQan7PveF69pTUIq12xpWH0nWsqQIhAMCE5HamZPjOXlKaQks/PfyVkzXof0F9Yr9X79orryQD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1400103},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"072b3566ea00422fcb90bf3f33a50d7f71f08a02","scripts":{"dev":"tsup --watch","lint":"biome check .","test":"vitest run","build":"tsup","format":"biome format --write .","verify":"biome ci . && tsc --noEmit && vitest run && pnpm build","lint:fix":"biome check --write .","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm typecheck && pnpm test && pnpm build","check:api-types":"node src/scripts/generate-api-types.mjs","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"repository":{"url":"git+https://github.com/YosefHayim/fresh-squeezy.git","type":"git"},"_npmVersion":"11.16.0","description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","commander":"^12.1.0","@inquirer/prompts":"^8.5.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.5.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/fresh-squeezy_0.1.18_1785498572916_0.5195926886892128","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"fresh-squeezy","version":"0.1.19","description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"license":"MIT","author":{"name":"fresh-squeezy contributors"},"repository":{"type":"git","url":"git+https://github.com/YosefHayim/fresh-squeezy.git"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"bin":{"fresh-squeezy":"dist/cli.js"},"engines":{"node":">=20"},"scripts":{"build":"tsup","dev":"tsup --watch","cli":"node dist/cli.js","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:live":"LEMON_SQUEEZY_LIVE_SMOKE=1 vitest run --config vitest.live.config.ts","typecheck":"tsc --noEmit","format":"biome format --write .","lint":"biome check .","lint:fix":"biome check --write .","check:ci":"biome ci .","verify":"pnpm check:ci && pnpm typecheck && pnpm test && pnpm build","check:changelog":"node src/scripts/check-changelog.mjs","generate:api-types":"node src/scripts/generate-api-types.mjs --update","check:api-types":"node src/scripts/generate-api-types.mjs","prepublishOnly":"pnpm typecheck && pnpm test && pnpm build"},"dependencies":{"@inquirer/prompts":"^8.5.2","chalk":"^5.3.0","commander":"^12.1.0","dotenv":"^16.4.5"},"devDependencies":{"@biomejs/biome":"^1.9.4","@types/node":"^20.14.0","@vitest/coverage-v8":"^2.1.0","tsup":"^8.3.0","typescript":"^5.5.0","vitest":"^2.1.0"},"packageManager":"pnpm@10.33.2","gitHead":"366a3f0c2de3211b8e0f62846459d73dd91c07b8","_id":"fresh-squeezy@0.1.19","bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-3URuSPDho0l9j7pWnLbFqy0ajrH8iG3uqEDXkMQlNl/quedaNl/e6ySZut9HgKab/vu1cGFy9W4jm+Pn1SEb9g==","shasum":"96dbebae8914729ecb4a63d1bf2bed1f4fef4e92","tarball":"https://registry.npmjs.org/fresh-squeezy/-/fresh-squeezy-0.1.19.tgz","fileCount":15,"unpackedSize":1395172,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fresh-squeezy@0.1.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHMRa7pfiK5KeG7Cn7XjqZBT7t4wydZ6Z6XVKRF8Zpg8AiEA7OAc+JkwNgYAnDiu2tgYQ1Qby+kVtWZZ8cwID2kZcIA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d96d333c-28e4-4bee-9bc5-3da4644365fe"}},"directories":{},"maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fresh-squeezy_0.1.19_1786057488896_0.4337800776980014"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T19:48:09.683Z","modified":"2026-08-06T23:04:49.460Z","1.0.20":"2026-03-14T20:12:08.548Z","1.0.44":"2026-03-14T21:24:32.554Z","1.0.47":"2026-03-14T21:30:56.095Z","1.0.50":"2026-03-14T21:38:46.979Z","1.0.53":"2026-03-15T00:01:41.247Z","1.0.55":"2026-03-15T00:13:35.875Z","1.0.57":"2026-03-15T00:19:01.565Z","1.0.59":"2026-03-15T01:04:26.641Z","1.0.86":"2026-03-15T17:52:50.940Z","1.0.90":"2026-03-15T17:56:52.538Z","1.0.95":"2026-03-15T18:45:19.524Z","1.0.99":"2026-03-15T19:26:19.591Z","1.0.101":"2026-03-16T06:53:49.841Z","1.1.2":"2026-03-16T07:09:49.338Z","1.1.4":"2026-03-16T07:39:20.863Z","1.1.6":"2026-03-16T13:59:59.998Z","1.1.9":"2026-03-18T15:27:07.886Z","1.1.11":"2026-03-18T15:35:37.518Z","1.1.15":"2026-03-20T12:58:48.139Z","1.1.17":"2026-03-20T13:06:47.905Z","1.1.18":"2026-03-20T13:45:59.790Z","1.1.20":"2026-03-20T14:11:56.486Z","1.1.22":"2026-03-20T14:47:02.813Z","1.1.24":"2026-03-20T14:55:50.894Z","1.1.26":"2026-03-20T15:10:40.940Z","1.1.30":"2026-03-20T17:09:37.986Z","0.1.0":"2026-04-24T19:48:09.876Z","0.1.2":"2026-04-24T19:54:42.238Z","0.1.3":"2026-04-27T11:28:46.327Z","0.1.4":"2026-04-27T12:52:31.097Z","0.1.5":"2026-04-27T12:54:53.522Z","0.1.6":"2026-04-27T13:11:26.063Z","0.1.7":"2026-05-07T12:15:44.975Z","0.1.8":"2026-05-07T12:26:00.294Z","0.1.9":"2026-05-09T19:10:15.827Z","0.1.10":"2026-06-15T17:58:41.615Z","0.1.11":"2026-06-15T18:24:48.496Z","0.1.12":"2026-07-02T11:03:40.703Z","0.1.13":"2026-07-04T14:00:57.204Z","0.1.14":"2026-07-04T19:50:51.689Z","0.1.15":"2026-07-11T18:35:40.054Z","0.1.16":"2026-07-11T18:36:28.372Z","0.1.17":"2026-07-13T17:41:26.837Z","0.1.18":"2026-07-31T11:49:33.095Z","0.1.19":"2026-08-06T23:04:49.168Z"},"bugs":{"url":"https://github.com/YosefHayim/fresh-squeezy/issues"},"author":{"name":"fresh-squeezy contributors"},"license":"MIT","homepage":"https://github.com/YosefHayim/fresh-squeezy#readme","keywords":["lemon-squeezy","lemonsqueezy","billing","payments","subscriptions","webhooks","discounts","license-keys","cli","validator","doctor","ci","typescript","nodejs","saas"],"repository":{"type":"git","url":"git+https://github.com/YosefHayim/fresh-squeezy.git"},"description":"Dual-mode Lemon Squeezy ops + doctor: validate billing setup, and run docs-backed API ops (webhooks, discounts, checkouts, subscriptions, refunds, …) from CLI or TypeScript.","maintainers":[{"name":"yosefsabag","email":"yosefisabag@gmail.com"}],"readme":"<!-- 由 README.md 翻译而来；英文版为权威来源。 -->\n\n<p align=\"center\">\n  <a href=\"https://github.com/YosefHayim/fresh-squeezy\">\n    <img src=\"public/fresh-squeezy-hero.png\" alt=\"fresh-squeezy —— 面向你的 Lemon Squeezy 配置的「验证优先」体检工具。在上线前捕获计费与 webhook 配置错误。\" width=\"640\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <strong>你的 Lemon Squeezy 配置体检工具 —— 在上线前捕获计费与 webhook 配置错误。</strong>\n</p>\n\n<!-- Badges. tests count is static; bump it on major test-suite changes. -->\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/fresh-squeezy\"><img src=\"https://img.shields.io/npm/v/fresh-squeezy?logo=npm&amp;color=cb3837\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/fresh-squeezy\"><img src=\"https://img.shields.io/npm/dm/fresh-squeezy?logo=npm&amp;color=cb3837\" alt=\"npm downloads per month\" /></a>\n  <a href=\"https://github.com/YosefHayim/fresh-squeezy/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/YosefHayim/fresh-squeezy/ci.yml?branch=main&amp;logo=github&amp;label=CI\" alt=\"CI status\" /></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/fresh-squeezy?color=3fb950\" alt=\"MIT license\" /></a>\n  <img src=\"https://img.shields.io/node/v/fresh-squeezy?logo=node.js&amp;logoColor=white&amp;color=339933\" alt=\"Node.js 20 or newer\" />\n  <img src=\"https://img.shields.io/npm/types/fresh-squeezy?logo=typescript&amp;logoColor=white\" alt=\"TypeScript types included\" />\n  <a href=\"https://packagephobia.com/result?p=fresh-squeezy\"><img src=\"https://packagephobia.com/badge?p=fresh-squeezy\" alt=\"install size\" /></a>\n  <img src=\"https://img.shields.io/badge/tests-154%20passing-3fb950?logo=vitest&amp;logoColor=white\" alt=\"154 tests passing\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"./README.md\">English</a> ·\n  <b>简体中文</b> ·\n  <a href=\"./README.ja.md\">日本語</a> ·\n  <a href=\"./README.es.md\">Español</a> ·\n  <a href=\"./README.pt-BR.md\">Português</a>\n</p>\n\n> 翻译可能落后于最新版本，以 [English README](./README.md) 为准。\n\n<p align=\"center\">\n  <a href=\"#30-秒上手\">快速上手</a> ·\n  <a href=\"#它能捕获哪些-postman-和官方-sdk-发现不了的问题\">它能捕获什么</a> ·\n  <a href=\"#fresh-squeezy-与替代方案对比\">对比</a> ·\n  <a href=\"#cli\">CLI</a> ·\n  <a href=\"#库\">库</a> ·\n  <a href=\"#问题代码\">问题代码</a> ·\n  <a href=\"#faq\">FAQ</a>\n</p>\n\n---\n\n**fresh-squeezy** 是一个 CLI 和 TypeScript 库，用于验证你的 [Lemon Squeezy](https://www.lemonsqueezy.com/) 计费集成 —— 店铺、产品、webhook、折扣、许可证密钥和订阅计划 —— 并在上线前捕获配置错误。你可以将它作为一条命令的 `doctor` 在本地或 CI 中运行：它会返回稳定的[退出码](#30-秒上手)和机器可读的 JSON，并跟踪官方 SDK 尚未实现的 [Lemon Squeezy API 更新日志](https://docs.lemonsqueezy.com/api/getting-started/changelog)漂移。需要 Node 20+。\n\n## 30 秒上手\n\n```bash\nnpx fresh-squeezy\n```\n\n首次运行时，如果 `fresh-squeezy` 不在 devDependencies 中，会自动添加，然后启动引导式配置。无需从控制台复制店铺 ID —— CLI 会自行发现可访问的店铺。使用 `npx fresh-squeezy --no-install` 可在不修改 `package.json` 的情况下运行配置。\n\n| 退出码 | 含义 |\n|------|---------|\n| `0`  | 所有验证器均通过 |\n| `1`  | 一个或多个验证器报告了 `error` 级别的问题 |\n| `2`  | 致命错误（缺少密钥、标志无效、网络故障） |\n| `130` | 用户取消了交互流程 |\n\n## 它能捕获哪些 Postman 和官方 SDK 发现不了的问题\n\n- **生产密钥指向了测试环境。** 当密钥真实的 `meta.test_mode`（API 更新日志 2024-01-05）与声明的模式不一致时，会触发 `MODE_MISMATCH`。Doctor 以 1 退出。SDK 和手写封装默认都无法捕获这一点。\n- **店铺归属静默不匹配。** 产品、折扣、许可证密钥和订阅计划的 `store_id` 与你为本次运行指定的店铺不匹配。稳定代码：`PRODUCT_WRONG_STORE`、`DISCOUNT_STORE_MISMATCH`、`LICENSE_KEY_STORE_MISMATCH`、`PLAN_STORE_MISMATCH`。\n- **Webhook 订阅了错误的事件。** 与推荐事件清单（订单/订阅生命周期、退款）以及 SDK 尚未实现的较新但可选的事件进行差异比对。\n- **平台漂移。** 每周运行的 GitHub Action 会将 [Lemon Squeezy API 更新日志](https://docs.lemonsqueezy.com/api/getting-started/changelog)与 `src/support/changelog-snapshot.json` 进行哈希比对，刷新由文档派生的 API 类型，并在需要做出策略决策时开启后续工作。已跟踪的新增项包括 `customer_updated`（2026-02-25）、Subscription 上的 `payment_processor`（2025-06-11）、Affiliates + `affiliate_activated`（2025-01-21）、订单项 `quantity`（2024-12-06）、结账样式 / `skip_trial` / `variant_quantities`、订阅发票退款字段，以及 `/v1/users/me` 上的 `test_mode`（2024-01-05）。\n- **Postman + 控制台来回折腾。** 一次 `doctor` 调用即可替代从界面复制 ID、粘贴到环境文件、再逐个手动核验的循环。\n\n## fresh-squeezy 与替代方案对比\n\n下面比较了一次典型的 Lemon Squeezy 上线前检查在开发者本来会选用的各类工具上的表现：\n\n| 能力 | fresh-squeezy | 官方 SDK | Postman | 手写封装 |\n|---|:---:|:---:|:---:|:---:|\n| 模式 / 密钥不匹配检测（`MODE_MISMATCH`） | ✅ | ❌ | ❌ | ❌ |\n| 店铺归属交叉核验 | ✅ | ❌ | ❌ | ⚠️ 手动 |\n| Webhook 事件覆盖差异比对 | ✅ | ❌ | ⚠️ 手动 | ⚠️ 手动 |\n| 折扣 / 许可证密钥 / 计划验证 | ✅ | ❌ | ❌ | ⚠️ 手动 |\n| 更新日志漂移跟踪 | ✅ | ❌ | ❌ | ❌ |\n| 稳定的、可用于 CI 的退出码 + JSON | ✅ | ❌ | ❌ | ⚠️ 手动 |\n| 一条命令完成全面扫描（`doctor`） | ✅ | ❌ | ❌ | ❌ |\n| 带类型的 API 响应 | ✅ | ✅ | ❌ | ⚠️ 视情况 |\n\nfresh-squeezy **不是**官方 SDK 的替代品 —— 它是你*配合* SDK 一起运行的预检工具。用 SDK 来发起 API 调用；用 fresh-squeezy 在这些调用进入生产环境之前证明你的配置是正确的。\n\n## CLI\n\n```bash\n# First run: install as a dev dependency, then start guided setup\nnpx fresh-squeezy\n\n# Guided setup only: reuse env values, pick a store, choose resource checks\nnpx fresh-squeezy init\n\n# TTY: multi-select stores interactively, run doctor on each\nnpx fresh-squeezy doctor\n\n# Full sweep across every reachable store and resource\nnpx fresh-squeezy doctor --all-stores --all-resources\n\n# Machine-readable full sweep for CI\nnpx fresh-squeezy doctor --all-stores --all-resources --json\n\n# Single validator, scoped to specific stores\nnpx fresh-squeezy validate webhook \\\n  --store-ids 12,34 \\\n  --webhook-url https://app.example.com/api/webhooks/lemon-squeezy\n```\n\n对于每个以店铺为作用域的命令，店铺按以下顺序解析：显式的 `--store-ids`，然后是 `--all-stores`，然后是在 TTY 上的交互式多选，最后是在没有 TTY 且没有标志时仅做连接的运行（可作为 CI 冒烟检查）。`doctor` 会验证连接、店铺访问权限以及任何显式的资源标志；加上 `--all-resources` 可在所选店铺中发现并验证每一种受支持的资源。\n\n**→ 完整的命令、标志和店铺解析参考：[docs/cli-reference.md](./docs/cli-reference.md)**\n\n## 库\n\n```ts\nimport { createFreshSqueezy } from \"fresh-squeezy\";\n\nconst lemon = createFreshSqueezy(); // reads LEMON_SQUEEZY_API_KEY, LEMON_SQUEEZY_MODE\n\nconst report = await lemon.doctor({\n  storeId: 12,                      // library is single-store per call\n  productId: 987,\n  webhookUrl: \"https://app.example.com/api/webhooks/lemon-squeezy\",\n});\n\nif (!report.ok) {\n  for (const result of report.results) {\n    for (const issue of result.issues) {\n      console.error(`[${issue.severity}] ${issue.code}: ${issue.message}`);\n    }\n  }\n  process.exit(1);\n}\n```\n\n如需在库层进行多店铺运行，请在循环中调用 `doctor()` —— CLI 正是这样做的。在 CI 逻辑中对 `issue.code` 进行分支判断；这些代码在次版本之间保持稳定。\n\n公共类型：[`FreshSqueezyClient`](src/createFreshSqueezy.ts)、[`ValidationResult<T>`](src/core/types.ts)、[`DoctorReport`](src/core/types.ts)、[`src/resources`](src/resources) 下的资源属性接口、[`src/generated/lemonSqueezyApiTypes.ts`](src/generated/lemonSqueezyApiTypes.ts) 中由文档生成的 Lemon Squeezy 对象类型，以及 [`src/augmentations.ts`](src/augmentations.ts) 中的更新日志增强辅助函数。\n\n对于尚未封装的端点，可使用原始转义出口：\n\n```ts\nconst user = await lemon.request({ path: \"/v1/users/me\" });\n```\n\n## 沙盒模式 vs 正式模式\n\nLemon Squeezy 从同一个 API 主机提供两种模式；模式由密钥决定。`fresh-squeezy` 会将声明的模式与来自 `/v1/users/me` 的 `meta.test_mode` 进行交叉核验。不匹配 = `MODE_MISMATCH`，doctor 以 1 退出 —— 这是在生产密钥指向测试环境造成损害之前捕获它的最快方式。\n\n```ts\nconst lemon = createFreshSqueezy({ mode: \"test\" });\nconst result = await lemon.validateConnection();\nresult.mode;                 // \"test\" (declared)\nresult.resource?.actualMode; // \"live\" — alarm bell\n```\n\nCLI 默认是 `--mode test`。使用 `--mode live` 覆盖。在检测到正式模式密钥时，引导式配置会在继续之前要求明确确认。对于 CI 中的每夜平台漂移检查，请在设置 `LEMON_SQUEEZY_LIVE_SMOKE=1` 并使用测试模式密钥的情况下运行 `pnpm test:live`。\n\n## 环境变量\n\n| 变量 | 是否必填 | 用途 |\n|----------|----------|---------|\n| `LEMON_SQUEEZY_API_KEY` | 是 | Bearer 令牌（库 + CLI） |\n| `LEMON_SQUEEZY_MODE` | 否 | `test`（默认）或 `live` |\n| `LEMON_SQUEEZY_STORE_ID` | 否 | 供 `client.doctor()` 使用的便捷默认值 —— 仅限库 |\n\nCLI 不会读取 `LEMON_SQUEEZY_STORE_ID`；请使用 `--store-ids` 或 `--all-stores`，以便每条命令的店铺选择都保持显式。\n\n## 问题代码\n\n在 CI 中对 `issue.code` 进行分支判断 —— 所有代码在次版本之间保持稳定。最常见的几个：\n\n| 代码 | 含义 |\n|------|---------|\n| `AUTH_FAILED` | API 密钥无效或缺失 |\n| `MODE_MISMATCH` | 声明的模式与密钥的 `meta.test_mode` 不一致 |\n| `STORE_NOT_FOUND` / `STORE_NOT_OWNED` | 店铺 ID 无效或归属于其他账户 |\n| `PRODUCT_UNPUBLISHED` / `PRODUCT_WRONG_STORE` / `PRODUCT_NO_BUY_URL` | 产品无法接受结账 |\n| `WEBHOOK_NOT_FOUND` / `WEBHOOK_EVENTS_MISSING` | Webhook URL 未注册或订阅不足 |\n\n**→ 完整的问题代码参考（折扣、许可证密钥、计划、变体、网络）及转义出口示例：[docs/issue-codes.md](./docs/issue-codes.md)**\n\n## 参考\n\n验证器 —— 每个都返回一个稳定的 `ValidationResult`：\n\n- **`validateConnection`** —— 可达性、密钥有效性、店铺存在性、声明模式与实际模式。[→ 源码](src/validate/connection.ts)\n- **`validateStore`** —— 店铺 ID 存在且归属于密钥所在的账户。[→ 源码](src/validate/store.ts)\n- **`validateProduct`** —— 已发布、位于预期店铺、拥有正式变体和购买 URL。[→ 源码](src/validate/product.ts)\n- **`validateWebhook`** —— Webhook URL 已注册并订阅了推荐事件。[→ 源码](src/validate/webhook.ts)\n- **`validateDiscount`** —— 有效、在时间窗口内、金额有效、店铺归属匹配。[→ 源码](src/validate/discount.ts)\n- **`validateLicenseKey`** —— 已启用、未过期、有可用的激活次数、店铺归属匹配。[→ 源码](src/validate/licenseKey.ts)\n- **`validateSubscriptionPlan`** —— 订阅类型、有效的周期、非零价格、一致的试用期。[→ 源码](src/validate/subscriptionPlan.ts)\n- **`doctor`** —— 将上述各项组合成一份 `DoctorReport`。[→ 源码](src/validate/doctor.ts)\n\n资源覆盖范围是从 Lemon Squeezy 的对象文档生成的，因此大多数新文档化的字段不需要手动编辑：\n\n```bash\npnpm generate:api-types\npnpm check:api-types\n```\n\n## FAQ\n\n### 我如何检查我的 Lemon Squeezy webhook 是否订阅了正确的事件？\n\n运行 `npx fresh-squeezy validate webhook --store-ids <id> --webhook-url <url>`。fresh-squeezy 会将你的 webhook 已订阅的事件与推荐的订单/订阅/退款事件清单进行差异比对，对缺口报告 `WEBHOOK_EVENTS_MISSING`，如果该 URL 根本未注册则报告 `WEBHOOK_NOT_FOUND`。\n\n### 我如何捕获指向测试（暂存）店铺的 Lemon Squeezy 生产密钥？\n\n那就是 `MODE_MISMATCH` 检查。fresh-squeezy 会将你声明的模式（`--mode` 或 `LEMON_SQUEEZY_MODE`）与来自 `/v1/users/me` 的密钥真实 `meta.test_mode` 进行比较。当二者不一致时，`doctor` 以 1 退出 —— 这样在暂存部署中意外使用的正式密钥（或反之）就会在到达用户之前未通过检查。\n\n### fresh-squeezy 在 CI 中能用吗？\n\n可以。运行 `npx fresh-squeezy doctor --all-stores --all-resources --json` 进行机器可读的全面扫描。它会返回稳定的[退出码](#30-秒上手)（`0` 通过、`1` 验证错误、`2` 致命错误）以及你可以断言的稳定 `issue.code` 字符串。无需 TTY —— 在没有店铺标志时它会回退到仅做连接的冒烟检查。\n\n### fresh-squeezy 是官方 Lemon Squeezy SDK 的替代品吗？\n\n不是。[官方 SDK](https://github.com/lmsqueezy/lemonsqueezy.js) 负责发起 API 调用；fresh-squeezy 是预检工具，在这些调用进入生产环境*之前*证明你的配置是正确的。二者互补 —— 参见[对比表](#fresh-squeezy-与替代方案对比)。\n\n### 什么是「更新日志漂移」，我为什么要关心？\n\nLemon Squeezy 发布 API 变更（新事件、新字段、新资源）的速度快于客户端 SDK 采纳它们的速度。fresh-squeezy 通过每周运行的 GitHub Action，将[官方更新日志](https://docs.lemonsqueezy.com/api/getting-started/changelog)与一份已提交的快照进行跟踪，因此新推荐的 webhook 事件或响应字段会作为可执行的工作浮现出来，而不是被静默地不加验证。\n\n### 我可以把 fresh-squeezy 当作库而不是 CLI 来用吗？\n\n可以。`import { createFreshSqueezy } from \"fresh-squeezy\"`，然后调用 `doctor()` 或任何单个验证器。每个验证器都返回一个带类型的、稳定的 `ValidationResult`，供你进行分支判断 —— 参见[库](#库)。\n\n### 它能验证哪些 Lemon Squeezy 资源？\n\n连接/认证、店铺、产品（及变体）、webhook、折扣、许可证密钥和订阅计划。加上 `--all-resources` 可在所选店铺中发现并验证每一种受支持的资源。完整列表见[参考](#参考)。\n\n## 贡献\n\n参见 [CONTRIBUTING.md](./CONTRIBUTING.md)。克隆仓库，运行 `pnpm install`、`pnpm test`。本项目力求保持小巧而朴素 —— 验证优先、单一 HTTP 层、稳定的 `issue.code` 契约。\n\n## 贡献者\n\n<a href=\"https://github.com/YosefHayim/fresh-squeezy/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=YosefHayim/fresh-squeezy\" alt=\"fresh-squeezy contributors\" />\n</a>\n\n## 许可证\n\nMIT —— 参见 [LICENSE](./LICENSE)。\n","readmeFilename":"README.zh-CN.md"}