{"_id":"@brinkcommerce/shopper-sdk","_rev":"13-0f3c9c72b2b098847d4977c46fb0d27f","name":"@brinkcommerce/shopper-sdk","dist-tags":{"latest":"0.8.0"},"versions":{"0.2.1":{"name":"@brinkcommerce/shopper-sdk","version":"0.2.1","_id":"@brinkcommerce/shopper-sdk@0.2.1","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"f6eb8a7453032f2ea5210f2bb4d0a4ff29520289","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.2.1.tgz","fileCount":6,"integrity":"sha512-ceJXYYlalBr37R361c/XR5PyN3vlSWOO1W2un2vN97HeE7e/H4H2DvJykiKx4GYaKsRnVpoArUOJ1Lk7GMZ6Pg==","signatures":[{"sig":"MEQCICdEE2iYBnGmLp5/nrzq8nrNTwIEOfq9gJlM0NP2/tjDAiBXhGlfvSezrQihM4QGwhg2dzLTr49Dgybv4/VKdGX27g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546996},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b95feb257e533f1b32823b247c0752e9adb0819b","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"10.9.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"20.18.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.2.1_1777585644785_0.010865434938698515","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@brinkcommerce/shopper-sdk","version":"0.2.4","_id":"@brinkcommerce/shopper-sdk@0.2.4","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"31ff8840e06d521221dde0583180a2b3d8a04356","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.2.4.tgz","fileCount":6,"integrity":"sha512-u0T3LFqbWIAzt9SOqXWbUmSWtw8kAwnjyBurzlMbMPfxmtURaRmsQClX26qafIN2UAQVkfK+p/y00F9MQZhaIw==","signatures":[{"sig":"MEYCIQDg1CEHx4ben06lHY6F8sSLI+lR33+gQJ0XvelwytF/oAIhAPdxYfCN8Tip2KafccgOnTnT99D8YlySmEQtOwJmkOuV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546346},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a12fdf9efe4e9810f8c20c07d4b15500f377695d","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.12.1","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.15.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.2.4_1779281117979_0.13409427127949036","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@brinkcommerce/shopper-sdk","version":"0.2.5","_id":"@brinkcommerce/shopper-sdk@0.2.5","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"4cc8d139cebf6ff3d790661c9a28d866efbf5daf","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.2.5.tgz","fileCount":6,"integrity":"sha512-f3MhAIaWmDE0MtG1ScI8A20weP15xeDRBhExASh6HwLuyXtt1epMBjnzdBtFE8eoVGjH2QYFoGxHBV5UFl5poA==","signatures":[{"sig":"MEUCIHuisPYVMP4uy+3MsRBexKpGQbhDh/fjS0ZcUL6JzCXsAiEApfxlf54/Ti3BWWy/xUYRi7N8iu/yh8JjxhlXXpAZIeE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546402},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bd789c31d5dc1cc3e76bfa1f3e1cc2bf30602209","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.12.1","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.15.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.2.5_1779294561316_0.8977007479691839","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@brinkcommerce/shopper-sdk","version":"0.3.0","_id":"@brinkcommerce/shopper-sdk@0.3.0","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"865df85ee9817e903552bac69e6e87f42048e2b4","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.3.0.tgz","fileCount":6,"integrity":"sha512-q/jqF4HyzI6i7sL7KNcT+oo+Rs8JihzLNfmB6lM3jWy5lzdMH/lE3dVqAo73WK2D5BERz+4YX/JXnLGXemFMrA==","signatures":[{"sig":"MEMCIEOooG94gq0c7Z3V2eBfZm2tGRGLQXDOjl+wiURDXS7jAh8lGJfnSgVmVKO7ejBGEs/KkWcItqnCzVMn9CqJNK1l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564053},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"243d6f4f4bbc62f67748da6fa76ab730238237e2","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.13.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.16.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.3.0_1780317174650_0.42880823815914093","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@brinkcommerce/shopper-sdk","version":"0.3.1","_id":"@brinkcommerce/shopper-sdk@0.3.1","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"03bef343df70b6518b8ab713be554348d1924718","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.3.1.tgz","fileCount":6,"integrity":"sha512-X4BA6erSgDEB+F+n4PLQgoNlUDnAU7GXB41lZA7RhidLMLKhgv+PIYBUNooNwti0PYC48KjkGJnpS/y26TqZcw==","signatures":[{"sig":"MEQCIDRvZqAXIkyAUlzdCtC35w/nB8B+IFKCi0PVV8dBXBpzAiBQO8f7oYUNehnXEUyxPXAD1ifO/3pebZjE2zvXkVk33Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571009},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e61af3cdbb1191ed2b1ebf724d949e72a40fcaad","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.13.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.16.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.3.1_1782235180687_0.3633057212628794","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@brinkcommerce/shopper-sdk","version":"0.3.2","_id":"@brinkcommerce/shopper-sdk@0.3.2","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"be8ca66e22ea95b9f3fd13750f13ef7a8c20e578","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.3.2.tgz","fileCount":6,"integrity":"sha512-pVHSyybO8Ac4nR6ZqkDY+sRSZrnU5D/WOFKCgM4/x17EmvDvUOpYnNGN0itFwKbxMAlor2dFA1dMs5y6Shiv/w==","signatures":[{"sig":"MEUCIECazEpY1b1ohEgpvsjsuyBuNILNziDWI8s6xgZxCswkAiEAxIVtaFPDf2A1HACdFo4sPukZ4syK402YP9bsZvby3fA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572501},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2e551622054ba7b9af3f4939a1c4b41ea9253332","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.3.2_1786003702103_0.9162724159779665","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@brinkcommerce/shopper-sdk","version":"0.4.0","_id":"@brinkcommerce/shopper-sdk@0.4.0","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"adc9fed3090d1cf597902f38722322f351f62e12","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.4.0.tgz","fileCount":6,"integrity":"sha512-d+EvqIvJwjuJ1RpZGtvK6tgZc29/KzaOUtf118ats2e1A3vzTLlfOMthFna0vXaqFebstmS2UlKQ9xeGfl5kvw==","signatures":[{"sig":"MEYCIQCp+2HaIxdKT1RJn+v1dgakEl9o96C1JxFPE+yVl7NCfQIhAPots+pOiO+rRBw6UEYpVkUikGnK6UhESo7wDsZ63why","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572811},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"da3a50f21e313994ebeb9916c3e9b48c4d16cd65","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.4.0_1786091923607_0.3706261989743538","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@brinkcommerce/shopper-sdk","version":"0.5.0","_id":"@brinkcommerce/shopper-sdk@0.5.0","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"b273d43d98ae8502d7ca24511082a0853191b5c1","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.5.0.tgz","fileCount":6,"integrity":"sha512-Z09rLj25RXACOkA7BACm50+JqqfV2Aus6tee2xGsfVDqL0aaBkRpBBRwktd3Ni+u0uCqcKjniF8apeWL+CR39w==","signatures":[{"sig":"MEUCIQCYtGefVXBKYOyQP5v90YJZQEfAA4J0JK6FFdLmTzcjLgIgKThcYSCiTdc8EZQYXIgGnGHE6sFZx+XRkGhaPpwQzZs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":574031},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a395043919be9412cb272d0f46635be8ef18ee9d","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.5.0_1787927187327_0.2243672314262053","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@brinkcommerce/shopper-sdk","version":"0.5.1","_id":"@brinkcommerce/shopper-sdk@0.5.1","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"6f956f42effa2756b4156fe843b8fe7fdb1c9c14","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.5.1.tgz","fileCount":6,"integrity":"sha512-RAO2cf0sZhbn0oYxR3dUwuAVVwA/oMR4LkLZmpoKSwYeia6o65AOCFb1glmnpKSZFoNExUFAs0T9+OCZnVKyTA==","signatures":[{"sig":"MEUCIQDEFZKfJQMt/WOF369GLEqS5OgV0RbyyPWQO30qUvfhgAIgSKEBJb62uiV0X+e1sINyiUZJJFpWRh4B8NY0S1dpknQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":575452},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a93a91d341798e9979e7ddee69b5731e7804babe","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.5.1_1788175717075_0.27443625728161547","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@brinkcommerce/shopper-sdk","version":"0.6.0","_id":"@brinkcommerce/shopper-sdk@0.6.0","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"c4e974b6f0d52373863f8845451a7ec745d3e864","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.6.0.tgz","fileCount":6,"integrity":"sha512-j+sDUYOxaTBciuZXWD/gZj9hx0YPxIwk/g4uBH7yGHwvm36Pzi+ai7p0MEoF5OgoWaGagf7/0mnYTFevcwQGhQ==","signatures":[{"sig":"MEUCIQCExHx+zGEW8OkEJsdIh9BgWGh+Ta/8/sLZVyENHa3/NwIgNi7qput7VY0Cya+5KBBJJ+gNzK9XqpLfNOgZ0s3yuP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589779},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"660e007233583201e9233cfc2b7fc568e69f2607","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.6.0_1789372544182_0.5188992219463213","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@brinkcommerce/shopper-sdk","version":"0.7.0","_id":"@brinkcommerce/shopper-sdk@0.7.0","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"9066b51b60506d98a581e395ad5175e2f4d4cbca","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.7.0.tgz","fileCount":6,"integrity":"sha512-hDKJUCgj8tykxJRzetZCbYmHdcaCEOR5pN9goiBw181Y8kx6US4QE2ygz0ev6MhshkCSwdW62GS34Q3QB/FA/w==","signatures":[{"sig":"MEYCIQDArPQ7q1eYunWiamJhnzZLmtTMqD3MgFRotPk/Id5k9gIhAKKXZc7XSX7ws2qn6+011yyZgYSZjI89iicMMvwaencq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609537},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b224c40e2e31bd8f77cef66e3d9ae65a1e159182","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.7.0_1789474127268_0.698068945709929","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@brinkcommerce/shopper-sdk","version":"0.7.1","_id":"@brinkcommerce/shopper-sdk@0.7.1","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"6d313793e1842946847defcd7fc835c5741a8b4c","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.7.1.tgz","fileCount":6,"integrity":"sha512-JD8idbaNe57Tk1cyJB+wGBgPkALdII27gvEsvM7jghVR9R57j5o3r0UAYSYXloD0qVMcajFKgkry0jn4bvK6Tg==","signatures":[{"sig":"MEQCIHxX6NrJgut4K02vkxL+VTB2BA8ZJkJgyBKno8tELatBAiAeRbkFiPVDwJMC5ZeuNlTVcGi1Ofsq8mdJMZsneoly2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCaklmSTKrUAenPU4PQf9CHnlT1VJW9/SErYjjCaOTyqwIhANDh9+UeSHXWCtOuFx2LWYgVOuyqNbXwlqTF496DeOEJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":610274},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7c77e7e5def89c9db2c2fd34666af4a82aae7c77","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/shopper-sdk_0.7.1_1789978172365_0.5736899836968112","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"_id":"@brinkcommerce/shopper-sdk@0.8.0","bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"dist":{"shasum":"16b71c611919f979b0aadd4a2025e0863898a7a9","tarball":"https://registry.npmjs.org/@brinkcommerce/shopper-sdk/-/shopper-sdk-0.8.0.tgz","fileCount":6,"integrity":"sha512-LJStmWBQPNJiK/+PaDINPwuANWXsfwDk6TIilcWWsvWGsgzhL6lCIuuEXeVtzonPV5ut3teqCEpaIyW3P7rq+w==","signatures":[{"sig":"MEQCIAgs/227ct3Z2C2zLsw4ZhA7S4HViT9bCkK8+AgPWUZEAiBJAYmoHy3knR60H8CoeW4QPKzfMx/TJhNNXn1ZjSS5iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCD8qbQOyHhNQ+6cKuAhulCR+EeUYC4V4BicZU5WjREhgIhAIm32IfHhH6iH2iFN09rTCUiBDKtWqB5BmfhgnzBCKH5"}],"unpackedSize":635508},"main":"./dist/index.cjs","name":"@brinkcommerce/shopper-sdk","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"04397246ff9c276fd484f5ef46623edef37be190","scripts":{"lint":"eslint 'src/**/*.ts' 'tests/**/*.ts'","test":"vitest","build":"tsup src/index.ts --format esm,cjs --dts","generate":"tsx scripts/generate.ts"},"version":"0.8.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419efdd7-2dc1-4fec-9b47-68215be9cb60"}},"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript SDK for Brink Commerce Shopper API","directories":{},"maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"_nodeVersion":"24.21.0","dependencies":{"openapi-fetch":"^0.13.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.4.0","eslint":"^8.57.1","vitest":"^3.1.2","typescript":"^5.8.3","@types/node":"^25.6.0","openapi-typescript":"^7.6.1","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@typescript-eslint/parser":"^8.59.0","@typescript-eslint/eslint-plugin":"^8.59.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shopper-sdk_0.8.0_1790340936339_0.56002477424278"}}},"time":{"created":"2026-04-30T21:47:24.671Z","modified":"2026-09-25T12:55:36.607Z","0.2.1":"2026-04-30T21:47:24.957Z","0.2.4":"2026-05-20T12:45:18.136Z","0.2.5":"2026-05-20T16:29:21.464Z","0.3.0":"2026-06-01T12:32:54.794Z","0.3.1":"2026-06-23T17:19:40.876Z","0.3.2":"2026-08-06T08:08:22.278Z","0.4.0":"2026-08-07T08:38:43.743Z","0.5.0":"2026-08-28T14:26:27.564Z","0.5.1":"2026-08-31T11:28:37.222Z","0.6.0":"2026-09-14T07:55:44.305Z","0.7.0":"2026-09-15T12:08:47.396Z","0.7.1":"2026-09-21T08:09:32.465Z","0.8.0":"2026-09-25T12:55:36.422Z"},"bugs":{"url":"https://github.com/brinkcommerce/shopper-sdk/issues"},"homepage":"https://github.com/brinkcommerce/shopper-sdk#readme","repository":{"url":"git+https://github.com/brinkcommerce/shopper-sdk.git","type":"git"},"description":"TypeScript SDK for Brink Commerce Shopper API","maintainers":[{"name":"makkan","email":"marcus.ljungberg@brinkcommerce.com"},{"name":"patant","email":"patant@gmail.com"},{"name":"patantbrink","email":"patrik.antonsson@brinkcommerce.com"}],"readme":"# @brinkcommerce/shopper-sdk\n\nTypeScript SDK for the Brink Commerce Shopper API. Covers all endpoints across the core API and all 19 provider integrations.\n\n## Installation\n\n```sh\nnpm install @brinkcommerce/shopper-sdk\n```\n\n## Setup\n\n```ts\nimport { ShopperClient } from '@brinkcommerce/shopper-sdk'\n\nconst shopper = new ShopperClient({\n  baseUrl: 'https://shopper.eu-west-1.acme.brinkcommerce.io',\n  apiKey: 'your-api-key', // optional, for BFF/server-side usage\n})\n```\n\nThe `baseUrl` is your customer-specific host. All provider endpoints are derived from it automatically.\n\n### SSR / session hydration\n\nIf you already have a JWT from a previous session (e.g. stored in a cookie), pass it at construction time:\n\n```ts\nconst shopper = new ShopperClient({\n  baseUrl: 'https://shopper.eu-west-1.acme.brinkcommerce.io',\n  sessionToken: existingToken,\n})\n```\n\n`qliroUpsellToken` does the same for a Qliro upsell interrupted by a redirect — see [Qliro](#qliro).\n\n## Token management\n\nThe SDK manages its tokens automatically within a client instance — you never pass one to a call yourself.\n\n**Session token** — issued by `sessions.start()` and refreshed on every mutating session call. Used by all session, cart, and loyalty endpoints.\n\n**Checkout token** — issued by `checkouts.start()` and reissued every time it is called. Used by all payment and shipping provider endpoints (Adyen, Avarda, Ingrid, KCO, Ledyer, NShift, Qliro, SCO, Walley, Zaver, Custom Payment, Custom Shipping) and by the gift card endpoints that attach a card to a checkout (`retain24.addGiftCard`/`removeGiftCard`, `shoplab.addGiftCard`/`removeGiftCard`, `bsgGiftCard.*`, `kbsGiftCard.*`). The session and checkout tokens are stored internally and injected into requests automatically.\n\n**Qliro upsell token** — issued by `qliro.startUpsell()` and used by the rest of the upsell calls. It lives only on the client instance that started the upsell; to carry it across a redirect, pass it back in as `qliroUpsellToken` (see [Qliro](#qliro)).\n\n### Concurrency\n\nEach token (session, checkout, Qliro upsell) lives in a single slot on the client and rotates on every mutating call: the call sends the current token and stores the rotated one from the response. To keep that read-rotate-store cycle from clobbering itself, the SDK serializes all token-rotating calls on a client through a FIFO queue.\n\n```ts\n// Serialized — run one at a time, in array order. Each sends the token the\n// previous one rotated to. The final cart reflects all three.\nawait Promise.all([\n  shopper.sessions.addItem({ productVariantId: 'sku-1', quantity: 1 }),\n  shopper.sessions.addItem({ productVariantId: 'sku-2', quantity: 1 }),\n  shopper.sessions.removeDiscountCode('SUMMER20'),\n])\n```\n\nWhat this means in practice:\n\n- **Mutating calls** (everything that rotates a token — most `sessions.*`, `checkouts.start/get`, `qliro.startUpsell`) are queued and run sequentially, even inside `Promise.all`. You get correctness and deterministic ordering, not parallel speedup.\n- **Read-only calls** (`products.getPrices`, `getPricesWithDiscounts`, `getStock`) never touch a token and are **not** queued — they run fully in parallel.\n\n```ts\n// Parallel — read-only, no token rotation.\nconst [a, b, c] = await Promise.all([\n  shopper.products.getPrices({ productParentId: 'p1', storeGroupId: 'sg-1', countryCode: 'SE' }),\n  shopper.products.getPrices({ productParentId: 'p2', storeGroupId: 'sg-1', countryCode: 'SE' }),\n  shopper.products.getStock({ productParentId: 'p1', storeGroupId: 'sg-1', countryCode: 'SE' }),\n])\n```\n\nThe queue is per client instance. Use **one `ShopperClient` per shopper session** — never share a single client across different shoppers (e.g. a singleton in a BFF), or their session tokens will overwrite each other.\n\n## Error handling\n\nAll methods throw `ShopperError` on non-2xx responses.\n\n```ts\nimport { ShopperClient, ShopperError } from '@brinkcommerce/shopper-sdk'\n\ntry {\n  await shopper.sessions.addItem({ productVariantId: 'sku-1', quantity: 1 })\n} catch (e) {\n  if (e instanceof ShopperError) {\n    console.error(e.statusCode) // e.g. 404\n    console.error(e.body)       // parsed response body\n  }\n}\n```\n\n---\n\n## Core API\n\n### Sessions\n\n```ts\n// Start a session — JWT is stored automatically\nconst session = await shopper.sessions.start({\n  storeGroupId: 'store-group-1',\n  countryCode: 'SE',\n  languageCode: 'sv-SE',\n})\n\n// Get current session\nconst session = await shopper.sessions.get()\n\n// Add an item\nconst session = await shopper.sessions.addItem({\n  productVariantId: 'sku-hoodie-l',\n  quantity: 2,\n})\n\n// Update item quantity\nconst session = await shopper.sessions.updateItem(itemId, { quantity: 3 })\n\n// Remove item\nconst session = await shopper.sessions.removeItem(itemId)\n\n// Add / remove discount code\nconst session = await shopper.sessions.addDiscountCode({ code: 'SUMMER20' })\nconst session = await shopper.sessions.removeDiscountCode('SUMMER20')\n\n// Set item options (e.g. gift wrap)\nconst session = await shopper.sessions.setItemOptions(itemId, {\n  options: { giftWrap: 'true' },\n})\nconst session = await shopper.sessions.removeItemOptions(itemId)\n\n// Single option\nconst session = await shopper.sessions.setItemOption(itemId, 'giftWrap', { value: 'true' })\nconst session = await shopper.sessions.removeItemOption(itemId, 'giftWrap')\n\n// Update session attributes\nawait shopper.sessions.patchAttributes({ company: { name: 'Acme AB', vatId: 'SE556...' } })\n\n// Migrate a session (e.g. post-login)\nconst session = await shopper.sessions.migrate({\n  storeGroupId: 'store-group-1',\n  countryCode: 'SE',\n  languageCode: 'sv-SE',\n})\n```\n\n### Products\n\nNo JWT required for product endpoints.\n\n```ts\nconst prices = await shopper.products.getPrices({\n  productParentId: 'parent-1',\n  storeGroupId: 'store-group-1',\n  countryCode: 'SE',\n})\n\nconst pricesWithDiscounts = await shopper.products.getPricesWithDiscounts({\n  productParentId: 'parent-1',\n  storeGroupId: 'store-group-1',\n  countryCode: 'SE',\n})\n\nconst stock = await shopper.products.getStock({\n  productParentId: 'parent-1',\n  storeGroupId: 'store-group-1',\n  countryCode: 'SE',\n})\n```\n\n### Checkouts\n\n```ts\n// Start a checkout — issues a new checkout token automatically\n// All subsequent payment and shipping provider calls use this token\nconst { checkout } = await shopper.checkouts.start({\n  paymentProvider: { name: 'adyen', id: 'adyen-provider-id' },\n  shippingProvider: { name: 'ingrid', id: 'ingrid-provider-id' },\n})\n\n// Get current checkout — requires a checkout token (call start() first)\nconst { checkout } = await shopper.checkouts.get()\n```\n\n`start()` takes the providers for the checkout: `paymentProvider` is required, `shippingProvider`,\n`giftCardProvider` and `taxProvider` are optional. Each one is a `{ name, id }` pair.\n\nDo not hardcode the ids — they are merchant- and environment-specific. Read them from\n`session.capabilities`, which lists what the merchant has configured for the current session:\n\n```ts\nsession.capabilities?.paymentProviders  // [{ name, id }, ...]\nsession.capabilities?.shippingProviders\nsession.capabilities?.giftCardProviders\nsession.capabilities?.taxProviders\n```\n\nSee [Tax](#tax) for `taxProvider`.\n\n#### Detecting a stale checkout\n\nWhen the session changes after a checkout has been started (items added or removed, discount codes applied, provider state changes, attribute updates, etc.), the checkout must be started again. Use `isCheckoutStale` to detect this:\n\n```ts\nimport { ShopperClient, isCheckoutStale } from '@brinkcommerce/shopper-sdk'\n\nlet { checkout } = await shopper.checkouts.start({ paymentProvider: { name: 'adyen', id: '...' } })\n\n// Later — session is modified\nconst session = await shopper.sessions.addItem({ productVariantId: 'sku-1', quantity: 1 })\n\nif (isCheckoutStale(session, checkout)) {\n  // A new checkout token is issued and stored automatically\n  ;({ checkout } = await shopper.checkouts.start({ paymentProvider: { name: 'adyen', id: '...' } }))\n}\n```\n\n`isCheckoutStale` compares `session.version` against `checkout.sessionVersion`. If the session has been updated since the checkout was started (cart changes, provider state changes, attribute updates, etc.), it returns `true`.\n\n#### Reusing an existing checkout\n\nWhen navigating to the checkout page, reuse the existing checkout if it is still valid rather than always starting a new one:\n\n```ts\nconst canReuse = existingCheckout && session && !isCheckoutStale(session, existingCheckout)\n\nconst { checkout } = canReuse\n  ? await shopper.checkouts.get()\n  : await shopper.checkouts.start({ paymentProvider: { name: '...', id: '...' }, shippingProvider: { name: '...', id: '...' } })\n```\n\n#### Detecting a payment provider change\n\n`isCheckoutStale` only checks whether the session has changed. If the user selects a different payment provider, the checkout must also be started again even when the session is unchanged. Use `isCheckoutForPaymentProvider` to detect this:\n\n```ts\nimport { ShopperClient, isCheckoutStale, isCheckoutForPaymentProvider } from '@brinkcommerce/shopper-sdk'\n\nconst selectedProvider = 'klarna' // the provider the user just chose\n\nconst canReuse =\n  existingCheckout &&\n  session &&\n  !isCheckoutStale(session, existingCheckout) &&\n  isCheckoutForPaymentProvider(existingCheckout, selectedProvider)\n\nconst { checkout } = canReuse\n  ? await shopper.checkouts.get()\n  : await shopper.checkouts.start({ paymentProvider: { name: selectedProvider, id: '...' } })\n```\n\n`isCheckoutForPaymentProvider` checks `checkout.capabilities.paymentProvider.name` against the given provider name.\n\n---\n\n## Payment providers\n\n### Adyen\n\nSessions flow (default):\n\n```ts\nconst session = await shopper.adyen.createSession({\n  adyen: {\n    shopperName: { firstName: 'Jane', lastName: 'Doe' },\n    telephoneNumber: '+46701234567',\n    deliveryAddress: { street: 'Kungsgatan 1', city: 'Stockholm', ... },\n  },\n})\n\nconst zeroPayment = await shopper.adyen.createZeroPayment({ ... })\nconst confirmation = await shopper.adyen.getConfirmation()\n```\n\n[Advanced flow](https://docs.adyen.com/online-payments/build-your-integration/advanced-flow/) — use only when the\nintegration needs it. Brink owns the amount, line items, reference and merchant account, so the frontend never sends them.\n\n```ts\n// 1. List payment methods and pass the result to Drop-in as `paymentMethodsResponse`\nconst paymentMethods = await shopper.adyen.createPaymentMethods({ adyen: { shopperLocale: 'sv-SE' } })\n\n// 2. In Drop-in's onSubmit: start the payment with the shopper fields plus `state.data`\nconst payment = await shopper.adyen.createPayment({\n  adyen: {\n    shopperName: { firstName: 'Jane', lastName: 'Doe' },\n    telephoneNumber: '+46701234567',\n    shopperEmail: 'jane@example.com',\n    deliveryAddress: { street: 'Kungsgatan 1', city: 'Stockholm', ... },\n    billingAddress: { ... },\n    returnUrl: 'https://shop.example.com/checkout/return',\n    paymentMethod: state.data.paymentMethod,\n    browserInfo: state.data.browserInfo,\n    origin: window.location.origin,\n  },\n})\nif (payment.action) dropin.handleAction(payment.action)\n\n// 3. In onAdditionalDetails, or with `redirectResult` from the return URL\nconst result = await shopper.adyen.submitPaymentDetails({ adyen: { details: state.data.details } })\n\n// 4. When resultCode is 'Authorised'\nconst confirmation = await shopper.adyen.getConfirmation()\n```\n\n### Avarda\n\n```ts\nconst payment = await shopper.avarda.createPayment({ ... })\nawait shopper.avarda.syncPayment()\nconst confirmation = await shopper.avarda.getConfirmation()\n```\n\n### Custom Payment\n\n```ts\nconst session = await shopper.customPayment.createSession({ ... })\nawait shopper.customPayment.syncSession()\nawait shopper.customPayment.submitSession()\nconst confirmation = await shopper.customPayment.getConfirmation()\n```\n\n### Klarna Checkout (KCO)\n\n```ts\nconst order = await shopper.kco.createOrder({ ... })\nconst order = await shopper.kco.getOrder()\nawait shopper.kco.syncOrder({})\nawait shopper.kco.syncOrder({ klarna: { shipping_address: { postal_code: '11120' } } })\n```\n\n### Ledyer\n\n```ts\nconst session = await shopper.ledyer.createSession({ ... })\nawait shopper.ledyer.syncSession()\nconst confirmation = await shopper.ledyer.getConfirmation()\n```\n\n### Qliro\n\nStandard checkout:\n\n```ts\nconst order = await shopper.qliro.createOrder({ ... })\nconst order = await shopper.qliro.getOrder()\nawait shopper.qliro.syncOrder()\n```\n\nUpsell flow — the upsell token is stored automatically after `startUpsell()`. Every upsell call except\n`removeUpsellItem()` returns `{ cart, token }`; `cart.status` tells you where the upsell has got to.\n\n```ts\nawait shopper.qliro.startUpsell()\n\nawait shopper.qliro.addUpsellItem({ productVariantId: 'sku-1', quantity: 1 })\nawait shopper.qliro.updateUpsellItem(itemId, { quantity: 2 })\nawait shopper.qliro.removeUpsellItem(itemId) // returns nothing\n\nconst { cart } = await shopper.qliro.confirmUpsell()\n\nif (cart.upsellLink) {\n  // The shopper finishes the payment at Qliro\n  window.location.href = cart.upsellLink\n} else {\n  const { cart: latest } = await shopper.qliro.getUpsell()\n  if (latest.status === 'SUCCEEDED') {\n    // show the upsold items on the confirmation page\n  }\n}\n```\n\n`cart.upsellLink` is set when the payment method requires the shopper to finish the payment at Qliro —\nredirect them there. It is null once the status is terminal.\n\nThe upsell token lives in memory on the client instance. As long as the same client handles the whole\nupsell — an SPA that never reloads, or a server-side client — you never touch the token. You only need to\nkeep it when the client is gone by the time you want to read the result, which is what the Qliro redirect\ndoes to a browser client:\n\n```ts\nconst { token } = await shopper.qliro.startUpsell()\n// Store it — it authorizes reading, changing and confirming this upsell\n```\n\nWhere it goes depends on which side builds the page the shopper returns to:\n\n- **Server-rendered return page** — keep the token in an httpOnly cookie or your server-side session, read it\n  on the server, and pass it into the client you construct there. The token never reaches page JavaScript.\n- **Client-rendered return page** — page JavaScript has to read the token, so an httpOnly cookie won't work.\n  Use `sessionStorage`, which the browser clears with the tab. Never a URL or `localStorage`.\n\n```ts\n// On the page the shopper lands on after Qliro, built by whichever side holds the token\nconst resumed = new ShopperClient({\n  baseUrl: 'https://shopper.eu-west-1.acme.brinkcommerce.io',\n  qliroUpsellToken: persistedToken,\n})\nconst { cart } = await resumed.qliro.getUpsell()\n```\n\n| `cart.status` | Meaning |\n| --- | --- |\n| `OPEN` | The cart can still be changed. |\n| `PENDING` | Sent to Qliro, outcome not in yet. In the payment link flow this lasts until the shopper finishes at Qliro, which can be after `cart.eligibleForUpsellUntil` has passed. |\n| `SUCCEEDED` / `FAILED` | The outcome Qliro reported last. A later push from Qliro can still move an upsell between the two, so keep reading the status. |\n| `EXPIRED` | The window closed before the upsell was confirmed, so it can no longer be sent. The only status that never changes. |\n\n### Svea Checkout (SCO)\n\n```ts\nconst order = await shopper.sco.createOrder({ ... })\nconst order = await shopper.sco.getOrder()\nawait shopper.sco.syncOrder()\n```\n\n### Walley\n\n```ts\nconst checkout = await shopper.walley.createCheckout({ ... })\nconst checkout = await shopper.walley.getCheckout()\nawait shopper.walley.syncCheckout()\n```\n\n### Zaver\n\n```ts\nconst payment = await shopper.zaver.createPayment({ ... })\nconst confirmation = await shopper.zaver.getConfirmation()\n```\n\n---\n\n## Gift cards & vouchers\n\nAdding or removing a gift card requires a checkout token — call `checkouts.start()` first, or the call throws\n`CheckoutTokenError`. Retain24's and Shoplab's gift card *products* run on the session token and need no checkout.\n\n### Retain24\n\n```ts\nawait shopper.retain24.addGiftCard('card-id', { amount: 10000, pin: '1234' })\nawait shopper.retain24.removeGiftCard('card-id')\n\nawait shopper.retain24.addGiftCardProduct({\n  templateId: 'tpl-1',\n  amountToLoad: 50000,\n  distribution: 'email',\n})\nawait shopper.retain24.removeGiftCardProduct(itemId)\n```\n\n### Shoplab\n\n```ts\nawait shopper.shoplab.addGiftCard('card-code', { amount: 10000, pin: '1234' })\nawait shopper.shoplab.removeGiftCard('card-code')\n\nawait shopper.shoplab.addGiftCardProduct({\n  amount: 50000,\n  distribution: 'EMAIL',\n  recipient: 'shopper@example.com',\n  recipientName: 'Jane Doe',\n  message: 'Happy birthday!',\n  senderName: 'John Doe',\n  senderEmail: 'john@example.com',\n  scheduledAt: '2026-12-24T08:00:00Z',\n})\nawait shopper.shoplab.removeGiftCardProduct(itemId)\n```\n\n### BSG Gift Card\n\n```ts\nawait shopper.bsgGiftCard.addGiftCard('card-id', { ... })\nawait shopper.bsgGiftCard.removeGiftCard('card-id')\n```\n\n### KBS Gift Card\n\n```ts\nawait shopper.kbsGiftCard.addGiftCard('card-id', { ... })\nawait shopper.kbsGiftCard.removeGiftCard('card-id')\n```\n\n---\n\n## Loyalty & capabilities\n\n### Voyado\n\n```ts\nawait shopper.voyado.start({ contactId: 'uuid-...' })\n\nawait shopper.voyado.addVoucher({ checkNumber: 'VOUCHER123' })\nawait shopper.voyado.removeVoucher(voucherId)\n\nawait shopper.voyado.addPromotion({ promotionInstanceId: 'promo-1' })\nawait shopper.voyado.removePromotion(promotionId)\n```\n\n### Bonus\n\n```ts\nawait shopper.bonus.start({ ... })\nawait shopper.bonus.update({ ... })\n```\n\n### External Price\n\n```ts\nawait shopper.externalPrice.start({ customerId: 'customer-1' })\n```\n\n---\n\n## Shipping\n\n### Ingrid\n\n```ts\nconst session = await shopper.ingrid.createSession({ ... })\nawait shopper.ingrid.syncSession({ ... })\n```\n\n### NShift\n\n```ts\nconst options = await shopper.nshift.getDeliveryCheckout('11120')\nawait shopper.nshift.setDeliveryOption({ ... }, '11120')\n```\n\n### Custom Shipping\n\n```ts\nconst session = await shopper.customShipping.createSession({ ... })\nawait shopper.customShipping.syncSession({ ... })\n```\n\n---\n\n## Tax\n\nTax is computed server-side — there are no shopper-facing tax endpoints to call. Tax amounts and rates\nshow up on `session.cart` and on `checkout` items and totals.\n\n### `taxProvider`\n\nIf the merchant has an external tax provider configured, it shows up in\n`session.capabilities.taxProviders` and you select it when starting the checkout, the same way you\nselect a payment or shipping provider:\n\n```ts\nconst session = await shopper.sessions.start({ storeGroupId: 'store-group-1', countryCode: 'SE' })\n\n// [{ id: 'tax-provider-id', name: 'tax-provider-name' }]\nconst taxProviders = session.capabilities?.taxProviders ?? []\n\nconst { checkout } = await shopper.checkouts.start({\n  paymentProvider: { name: 'adyen', id: 'adyen-provider-id' },\n  shippingProvider: { name: 'ingrid', id: 'ingrid-provider-id' },\n  taxProvider: taxProviders[0],\n})\n\n// Echoed back on the checkout\ncheckout?.capabilities?.taxProvider // { id: 'tax-provider-id', name: 'tax-provider-name' }\n```\n\n`taxProvider` is optional — omit it when `taxProviders` is empty.\n","readmeFilename":"README.md"}