{"_id":"shop-client","_rev":"30-d556c355f7a1ca80510e995d4eb7d9fa","name":"shop-client","dist-tags":{"latest":"3.32.0"},"versions":{"3.8.2":{"name":"shop-client","version":"3.8.2","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.8.2","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"4bcddc94bfe32153b2447089c45f06261c15cbfd","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.8.2.tgz","fileCount":53,"integrity":"sha512-LKKbRq+tvsgSght/qc4HvD4lk5/oXrJP1NIM6cHTq031fOUJsNdVQQvBid5M7p8/MALVWK0/V11GwLCBjWnkFQ==","signatures":[{"sig":"MEYCIQDSKBQUUGIhuP4hpTwGuCnp3EG3vVR2PtrJdWrULiA/dAIhAJqjXMH9meug4ZtFH37UubWqOvEH5LEKsoNv/474MI6K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1102178},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs","require":"./dist/store.js"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs","require":"./dist/checkout.js"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs","require":"./dist/products.js"},"./rate-limit":{"types":"./dist/rate-limit.d.ts","import":"./dist/rate-limit.mjs","require":"./dist/rate-limit.js"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs","require":"./dist/collections.js"}},"gitHead":"4cddc7673a433d9f358f856076860189f078f295","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.8.2_1764919485718_0.10079450764991948","host":"s3://npm-registry-packages-npm-production"}},"3.9.0":{"name":"shop-client","version":"3.9.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.9.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"ec67a83b379fced85012e5833b008df56728fe03","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.9.0.tgz","fileCount":24,"integrity":"sha512-3fxh7s2DNNbgHpqQvLvLV2/nnMdu8D2MGMzNGXH+fTNYjbbfB/fb7khh/9ex3+88wpDw4XsynP+kwFsm4TRD7w==","signatures":[{"sig":"MEUCIEy9a5sSsGeOb7ySH47RyrUFb92KG2j/Eyyf0JQhH7gUAiEAqsG5nT1lqMNdZIbz4qsTz0WKbhCiNkabgrytKkqNubg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":126070},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"}},"gitHead":"b2c85796f17a4c29e62340117f481448cefa8af9","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.25.7","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.0.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.9.0_1764930103411_0.11922645937705223","host":"s3://npm-registry-packages-npm-production"}},"3.9.1":{"name":"shop-client","version":"3.9.1","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.9.1","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"3d4b680715e431eb217a2952f1f412c018ab7e6c","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.9.1.tgz","fileCount":30,"integrity":"sha512-hlpe/WhmnZ7lNpDfTToZyPEOtWvSsvLlEKYkon7vmMd7HccuuyQpTrTjwfcqo9gXrN/m3eDCAb+Uix/SeyHeCg==","signatures":[{"sig":"MEQCIGqeXUQ/+9DWB79JthwSq6pj5YSSs0c2l4F9ptGZ7nYQAiBzEUKjZ6bA1k3lKH4gEVUxmJ4TWcZosxQp7UFgIdZ+nQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196529},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"d57a6952d6efed9e181b7bdccd5743a36e01f07f","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.9.1_1765803793438_0.005704809920437537","host":"s3://npm-registry-packages-npm-production"}},"3.9.2":{"name":"shop-client","version":"3.9.2","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.9.2","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"197dbdc1c35bd94f2e210d747c489a45de3f0fe5","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.9.2.tgz","fileCount":30,"integrity":"sha512-ZQyK/zI6cy4mt+t9Kyknx91FC6ajLP40CGgM+7hxTLpvqGHKvAH992Pxo5GmDRk1A30XA1GVxAbZY5BY/ITotA==","signatures":[{"sig":"MEQCIDwYKjdBIniOUKK1ni8aUNCiyhjVgDy6Rx1yURwddN0hAiB1q8t9EtlNVXj1tcxoQDwkkMNzPqMdt2a+WbGKgqgfqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":194485},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"ff0703abd72cd3f36d086e486e7b878f5f599fae","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.9.2_1765806117399_0.8475341914466519","host":"s3://npm-registry-packages-npm-production"}},"3.10.0":{"name":"shop-client","version":"3.10.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.10.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"a390855940f7a8177b73412920cbb15125139bf7","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.10.0.tgz","fileCount":30,"integrity":"sha512-FCVsa4RFg/AD3ISniXbejfRiiWBkO2GZGeEkCuX5d98pp7XCSzJVXIwzesZXcqefdQYN7JOmk6hToIOR26IAqg==","signatures":[{"sig":"MEUCIHV4Q6aJNkHXOCjTIM+8pfG1oPZLdCuz0ijOKfFAZQ4rAiEAm7gRE++YORz9TDnzne1UmApIjVlMIw8rm8KwS70qrAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196765},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"4ffaa5b0610d6b19f0ff39b446e120c95e4ad3e8","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.10.0_1765819830835_0.39467889478529483","host":"s3://npm-registry-packages-npm-production"}},"3.11.0":{"name":"shop-client","version":"3.11.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.11.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"58fd1d46434a2f6d1eb749a6c976ffdf2ac989af","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.11.0.tgz","fileCount":30,"integrity":"sha512-mKDToFyXq0VL/hCOB7ujSkvb1f42l4U/qnNyotgl1oBSuusCbmAVVaq/WXBfhAKyF5sQcuhEjPm8Eq0Zfr4rlA==","signatures":[{"sig":"MEQCIGRQgJo/xTi+kp2ZFDu31a2UvQcYBq2KZb0K2gGsaiHnAiAq9utjswlTpf8iZbHpUT6BsxjjQSP4PX8mPc67UTL0Cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":197899},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"437ebdce514913dbb5dda80af7570bbe073e96cd","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.11.0_1765825825683_0.6260730904630729","host":"s3://npm-registry-packages-npm-production"}},"3.12.0":{"name":"shop-client","version":"3.12.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.12.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"4462baa3dd9e6a30011bcf49955e846821e38208","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.12.0.tgz","fileCount":30,"integrity":"sha512-lqGHePvgPPlQjsgOyRnAkTkDX/7uqNSbeWtaywzDkHWVSW77CMtNco4TYTOQsvFjaU/QzLkf4OXgyGJ71fN9rg==","signatures":[{"sig":"MEQCIEqHnd3bd1TsZLV5r5qUQk5tzRWFm9vzwnr75wIthxrAAiAf1jrfjpORUXfI29hwCiKpYKLfYmpw+rSX61tNuy5FYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202802},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"1330c83739aba0301187f8aedcb29fe2fa58d011","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.12.0_1765958476350_0.7456786653996679","host":"s3://npm-registry-packages-npm-production"}},"3.13.0":{"name":"shop-client","version":"3.13.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.13.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"15340653876ba01147f77ab82c1ef1c34f0c62e8","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.13.0.tgz","fileCount":30,"integrity":"sha512-ednDGZvzxeMtdmtGfrxMFpiR4V9sTMJ2J5jLnqi5kPtxj5p4LJWXRDiPe/aJlSHgbS9ELeb+xcRuaT4mSsbEig==","signatures":[{"sig":"MEUCIB2zuEHkhRd8gQRf+B4KwyfewJj2+6a2mwLTanCDqsteAiEA45aK1jmgz8RZSDKf24YZjUjO7/1ApysORV0TR3Gds5o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":203760},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"523bbc36cdf464accb8902c851ac4a6e1e29c77a","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.13.0_1765962357472_0.8629706502060415","host":"s3://npm-registry-packages-npm-production"}},"3.14.0":{"name":"shop-client","version":"3.14.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.14.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"619b5c0d42ebaad6f8d3546cf857a2986e135ee4","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.14.0.tgz","fileCount":30,"integrity":"sha512-hqLioAgQQ72A1+ho6wolFWC66FT9flK4VDA6vRwcbb8IGiySAoz9TXne2WAkaEu/n9IOx23M6CXJYsgYVZE35w==","signatures":[{"sig":"MEYCIQCZPtjKDGh8XHvFO+msXnKNrk9wCyGfvYzACMmu5ao0xAIhAKtIA6KcTPZMNQRnsxhcFhi1bm/iURc6xkF1aevhm1v3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204335},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"d3dcf76a47be4d93cfdaef7c7621dfa4ec324951","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.14.0_1765976698665_0.15901777534292005","host":"s3://npm-registry-packages-npm-production"}},"3.14.1":{"name":"shop-client","version":"3.14.1","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.14.1","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"dd29aa0e48e06b853b28423521fa6a70c451c97c","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.14.1.tgz","fileCount":30,"integrity":"sha512-gcK/2CNRebEd1WkDMRJmE9kD8GlPi3qe1hNm5PO8MD+RRNvDf+b/CBrXC+yUMoQhcFOoiOPHZD9ig+THZwJG8g==","signatures":[{"sig":"MEQCID4pFB+MC5HzDIjYd3PJBMRWlBs3nhvnvjww5+I+L9P8AiB06cpEi4rflEbZbUYJV2H5uFemO5eebNY3runUMe3Adw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":211137},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"dc70f6e2e94742f220480d2ec489e6c4e1abd07e","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.14.1_1766147152179_0.2108487123380518","host":"s3://npm-registry-packages-npm-production"}},"3.15.0":{"name":"shop-client","version":"3.15.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.15.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"aea36e22129c27be415f9144592bfe6185ab8034","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.15.0.tgz","fileCount":30,"integrity":"sha512-6FJtqKXzCEyWBXKYMYqi6qzxDW8WBTOQOf7kSz9w8uxCub8XDcCOG5XCcR+A0jZEE71VKsSXER25pZT2jeKocg==","signatures":[{"sig":"MEQCIFX4pO64xAltJ0U0AAlj9soLsorcGBIv6vZrwqZDl+qIAiB8sEi/aeXi1TzQvRFZUtzIYSIp67m/b+w9/6xYJ9m/VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":223558},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"a011643b699b446e9a559170a4eafdcab936dbaa","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.15.0_1767114683149_0.3586770349173338","host":"s3://npm-registry-packages-npm-production"}},"3.16.0":{"name":"shop-client","version":"3.16.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.16.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"c7bf85e9273d288fdcee078773886982f9186d78","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.16.0.tgz","fileCount":30,"integrity":"sha512-8v2dCYzUQeCbVBYb8tJuqu2HCE/CyS6sU/lM+GGnLozMR2BwTAUjG+55wfPY3YfbTTSsoN1e5XzhCfBRhFk4Tw==","signatures":[{"sig":"MEUCIQDnFZda4oaaLy3hcfvtF+c/+9/Adp0CFkg3l0saMZMrWwIgcXJ21FBoQvjURYMXUFR64zVGg2ugUVL6IjySgTqoYWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227255},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"840b49b720c627e8aa354666bf44334059733197","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.16.0_1767118588218_0.020140526474543563","host":"s3://npm-registry-packages-npm-production"}},"3.17.0":{"name":"shop-client","version":"3.17.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.17.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"fc443b0bfcdc46e63c4632e96244b8229a33fe97","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.17.0.tgz","fileCount":30,"integrity":"sha512-zjZB0IizW/q5BWP2qHqDYfziUxLfPeYub64NUuxaRwwuvW3wHMdLVDvbu8x3nBmES2sEz4bwn95TGJpM4G2FiA==","signatures":[{"sig":"MEQCIC/INGvJqIFZVMK9BDos6GJXHERtrWSMa+dDJYQkK/ZkAiAUBEnXNKEnFL3fLz83bW1apyMygms3G9YXJX+44LfMqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246121},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"ce1d0b0275bf5f57763c023d264162e01b790298","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.17.0_1767180151692_0.5104953012172293","host":"s3://npm-registry-packages-npm-production"}},"3.18.0":{"name":"shop-client","version":"3.18.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.18.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"6bc310dcc7b2f64edf65c37c2b0fed4c05af3cf7","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.18.0.tgz","fileCount":30,"integrity":"sha512-1gHUXBmXQVkOxBsYf/c4q7SPXyHEEFjWCQFs2pdrLfC+OxhrLoDsM4LbxesOMOK6FbfbQ60TynTTgKe0Xel1nA==","signatures":[{"sig":"MEYCIQD9uiQKFzuXPvhBGcSNKuNXZ2YJS5PB3X87K68TLp0AZgIhALPiqSb1UpfD1udQbjyxnJBPtiS0j3Mo4qN4TkT/PYvh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":250216},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"3553cc8f8f4a19b7be4845c7b4f541f070a503dd","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.18.0_1767186072128_0.24698293938362714","host":"s3://npm-registry-packages-npm-production"}},"3.18.1":{"name":"shop-client","version":"3.18.1","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.18.1","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"4668243c6ac7cfdc5c7055fec8e3ff766928e852","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.18.1.tgz","fileCount":30,"integrity":"sha512-w0dHpCOgyddYXNH0P/+iWddEW9ZJw7xPRy+g/bx/uz+Fqbl75mvsTR+9C5DoXF3THkse9FfXpX/iB/rWFzJZxQ==","signatures":[{"sig":"MEYCIQDlZYa67S+Joh7p/hdjCZyM9mNkJY+dqYQsV3ZiM7z+rgIhAOAmdgNc7mYECQRPLCyxLN6PnHl66/XNGcDSZ237B/Qf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251144},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"b5e9fef9e80db766119995acd11efdd79eaeebea","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.18.1_1767340175925_0.11645771810248462","host":"s3://npm-registry-packages-npm-production"}},"3.19.0":{"name":"shop-client","version":"3.19.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.19.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"881599dc4a60890fe9070dfe1d6a9f80a8146518","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.19.0.tgz","fileCount":30,"integrity":"sha512-DeJ9byFRxCJB+7t2NJEXBf1l0WcKLLjGo/VqssYmMAj57MWORtlgAvAOH1OtkuPFShkXpgTk4LicOPmZfQcIFg==","signatures":[{"sig":"MEQCIFxLjRldqr0NIg7JByg6K1CM6KBPVYyctPbE6SNvkg6fAiB23NV1W2rQr9iK6ceLPV40D6iaFlWDWcQfdb9YORF2cQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255430},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"f116516266f0431c0660d427ece9977bfcbbeead","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.19.0_1767343372681_0.7706793749523775","host":"s3://npm-registry-packages-npm-production"}},"3.20.0":{"name":"shop-client","version":"3.20.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.20.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"a6d06b4fb8f2e5a4a82dd83c353be5cba74ed556","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.20.0.tgz","fileCount":30,"integrity":"sha512-Um/+QPsfFcZ9J9u+CQHMKvcd//7eeDUDVaN9/c0e4RHXmK19Gli4hut2KD+oLifN9xt5ghnllFBD/f9XFIOz/g==","signatures":[{"sig":"MEUCIQCGDN/Kpqtsy+9/R05cZzfi7qKGfhTPzzHRVR0VIMCxQQIgKvTK1R9HRbmoIhMFJmaCOhvLEXmGibLfpV6PRRelMD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":254284},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"2f2f6b1fc6653cf8cb22f5f5fa1fcdaee4d5e71f","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.20.0_1767378321976_0.9906487079690758","host":"s3://npm-registry-packages-npm-production"}},"3.21.0":{"name":"shop-client","version":"3.21.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.21.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"66d25083b2c4c70bebc6bbc79c7c3659b63bf880","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.21.0.tgz","fileCount":30,"integrity":"sha512-CBP18Mrwzw0+Vj7gv9JXfNpMZBxM8PBmcPi1+zHHRxcAhTw+vrUHaTiK2xBIU5tifd+Q5x7pFhxck368FDFmpw==","signatures":[{"sig":"MEUCIQCoQrtJI42q/n60+DUe6b2tZLafbBsii5lIlvxCz2jgHwIgVNVH7ioq0hdiOAIRPrLmtYHoj4F4SapM35w289Gt4Kw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":254513},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"a153917204769b42528b34867f0833c504c925ea","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.21.0_1767381197523_0.49750711538342896","host":"s3://npm-registry-packages-npm-production"}},"3.22.0":{"name":"shop-client","version":"3.22.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.22.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"3980fff532f206dbcaa6cdc1a9326a5ec8a6d3ed","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.22.0.tgz","fileCount":30,"integrity":"sha512-4sZ1phfhO6l/rfA+dVSL1/HSPYDJQ8CBUNqVPahsNJPKsaG3sodEDNQ0wgE3yW/Zc5l53en+85+CxdQphViE7w==","signatures":[{"sig":"MEUCIQCbxgSseh7DiCR89cp24lEUVnMTjV5Cb/kqQ2aLNrZSygIgVlXCCjvAm6/59icPJR+uPraceFgDqjRCHSYwgC9FU64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256089},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"8be50dedf5cef33220f29bc432e6d6e552fe2794","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.22.0_1767595405121_0.07807355034072727","host":"s3://npm-registry-packages-npm-production"}},"3.23.0":{"name":"shop-client","version":"3.23.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.23.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"d33c91c055da15f784e3a8c4360e63ae7512b213","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.23.0.tgz","fileCount":30,"integrity":"sha512-XLnLc2z/4N8igcEonk+D84WANWe/W7kbAHy4yBMSZn54l6S3NVhQHpxpN/32R6qHDaMU8mV20wtyStRaCUR3sg==","signatures":[{"sig":"MEUCIQDSxL85L7v/SFQkGHj+W6a3Cf0BvgQoTwdLluv8Ed+beAIgXHUBPqoxcWLLaxecwqtHNiDbr+nHVZAHZr64eY679sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":249625},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"6c257b54460a2e7ca2b6b31e086c75291e4ea538","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.23.0_1767635403600_0.7022159919256246","host":"s3://npm-registry-packages-npm-production"}},"3.24.0":{"name":"shop-client","version":"3.24.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.24.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"829b59a9dc2ccfe929f61adac5ff2502de2fac0d","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.24.0.tgz","fileCount":30,"integrity":"sha512-ud9rm5Jubwy/E7OveGO6ycSkh0zCFEAKKt005Ap3ue/rDa+3GrDwwjJozTKIgJWz4I5fVf7xOpLJm26G+9SL3g==","signatures":[{"sig":"MEUCID2Cg6NJ7l6hQW7NF0nkXm05D1kUa5pj3quZYdJnQ/7DAiEAii8KHKsHB4Hh4CiWI9mDRFkUXWEGaQP46Y3fSaD+OtQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253273},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"e584df52963c6dfc810eb9e8da36e328a3efb755","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.24.0_1767639502555_0.4934733998378036","host":"s3://npm-registry-packages-npm-production"}},"3.25.0":{"name":"shop-client","version":"3.25.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.25.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"12f3f4f9276af694effbf6d9b99b2c327b392a24","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.25.0.tgz","fileCount":30,"integrity":"sha512-WHiOXTBhK8uKBeQjdk0cCSeA8y5xoeaVswRaMWdH3he074vbsV6Po7BBLE4LuKv6us0NbWGZjHlRdMw7tMhwyQ==","signatures":[{"sig":"MEYCIQDGOhB20AA3mujuhcjlnnq1KAubop/E8L+GmNXlFsw7OQIhAJqW04h7VI9CSqC/jIcOlv3LQS6XcaVq4FX48LzpIWxo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":258155},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"1b3f49641d62ca9d57e1883123cc5f4754cf8ce8","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.25.0_1767693036684_0.5196933248572451","host":"s3://npm-registry-packages-npm-production"}},"3.26.0":{"name":"shop-client","version":"3.26.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.26.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"67205a04b60c1bafc2469dcefe42a35b5cd22e83","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.26.0.tgz","fileCount":30,"integrity":"sha512-qKDS2u4RW11J8O6enbUPU/zAfHB8YFIq0UvZ6+VFs3EnvnrGoWPJOOYEjtfgV0aZ7qWsAcvPUveteDNxOG86lA==","signatures":[{"sig":"MEUCIF0C/zMwKZB24AlHfn/lc1mxE9oVd4BcHQi94ydj1yjsAiEAtcct5r6zaQ0ogpAIaod76A9doiwWpf4KkJRjLdkEl40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":259061},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"e3a12837408f26dbf160a62685839edde77bd90d","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.26.0_1767695581249_0.622668252622802","host":"s3://npm-registry-packages-npm-production"}},"3.26.1":{"name":"shop-client","version":"3.26.1","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.26.1","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"7366b3a486868193d4f0c59b55a75f4c34ceb59f","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.26.1.tgz","fileCount":30,"integrity":"sha512-tnwUe+N+cP1l6wkAY6hOdYK5yGkB5maY0s7q7bUnow9z2E/fXjWewA3onG9fnOvD8/BmRCyeMKvjvH0GQgoxVg==","signatures":[{"sig":"MEYCIQC7a5wDL7NfVeBIak+MdMzp/n4/4vPgMfrvW7/iEqw+tAIhAL7d7FINauwEGrwmcxM8Ia1vA173/mYiXwOgT8vjjpWG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.26.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":259716},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"44418f2c20e2dd8e75eeda7d81c7d600c1d3498d","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.26.1_1767697639437_0.47596685924604976","host":"s3://npm-registry-packages-npm-production"}},"3.27.0":{"name":"shop-client","version":"3.27.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.27.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"9abda0cbf5a771334e614035fe38b6fd969a21d0","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.27.0.tgz","fileCount":30,"integrity":"sha512-sveAznwNLODVzT97lZDwdKKaD4U7syDpnO2m6dpXix4GezkpyUIp4sRXZnk0xwEAPEIgi5TPTCSfl1gpzCXysg==","signatures":[{"sig":"MEUCIBUlNqRPcX7PIH5/3tl/mjGqhbHVkgbgFQEuK4J5RLodAiEAlJzgVWTGu3hz91Bvu3GU2jGCQLMDMkNoBJH6MvG/uRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":262037},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"e98cc8a860e323a968b8761f4f4d02c2d8779f35","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.27.0_1767790121483_0.4877098263016726","host":"s3://npm-registry-packages-npm-production"}},"3.28.0":{"name":"shop-client","version":"3.28.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.28.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"4db47a96ea6a87d107509a38199abe6f972e1a0c","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.28.0.tgz","fileCount":31,"integrity":"sha512-jJO5Kjg3DjwSRUIrN9+F2n7hy045wwyegueQAw7T1E9K6VU5NIpwt2D3ef66biKWn+PETpKPQKTCagwffeDeRw==","signatures":[{"sig":"MEQCIGJNwmkYh0po6RSqEYqdTK73FmK6y2po2AzMlUWOMfl0AiAg7Xk8VRXW45LVpRO/aXy7szZEjNsVecENWYDl5Za5Kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269827},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"16aec20d856a0e162bebfec3bdae2eb3227c4d3f","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.28.0_1767865525478_0.2649291194204404","host":"s3://npm-registry-packages-npm-production"}},"3.29.0":{"name":"shop-client","version":"3.29.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.29.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"f5d6102a9959bd34532b134d06dc8253c68fb8bd","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.29.0.tgz","fileCount":31,"integrity":"sha512-Bhod0l+HSuulvQmZJZGiJDHmTeOmujcyuK9AiP//rCEFd4bJNcpOe6xlloIttbxa97rY2s/lRwvFtY9zWlecdA==","signatures":[{"sig":"MEQCIGH7Ledgpgw/o/D6eGgBOgpuePoxMcPTtQgxvTDlaoldAiBXoClznl7oEmSnObGLO+hB5OGvT7556MZQvCyXB29nbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":271611},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"32f465a52a68f1aa199c002e36b147e321f0c988","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.29.0_1767876435835_0.14912348721412583","host":"s3://npm-registry-packages-npm-production"}},"3.30.0":{"name":"shop-client","version":"3.30.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.30.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"89cd5b02675c1ecdcae835b872e6c6b2485ae4eb","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.30.0.tgz","fileCount":31,"integrity":"sha512-Gp7XFKgZo19lZP9u685yQ8JDALRMqXCVkL6Sfzvdks6tX2upfMu97EWOw9nwBAOYg69zByz9vkg3mZ2MuvBDsA==","signatures":[{"sig":"MEUCIQDpv5xuMthbAN/5JLMETK5f2oQNA2Yy50fU5p0ZhbU6LAIgNh/COMDcndy/13uirLLJ+GwJ+ObLknAZ2me78UoHQBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":271478},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"1a1918e55e9179e51ee0d82ec6c0468cd64c57bb","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.30.0_1769592269952_0.19317700089136514","host":"s3://npm-registry-packages-npm-production"}},"3.31.0":{"name":"shop-client","version":"3.31.0","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","_id":"shop-client@3.31.0","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"dist":{"shasum":"836b9e9a56d08350caaf8dacc9c853fd82790b68","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.31.0.tgz","fileCount":36,"integrity":"sha512-zYiWhKKwYtaFZ51acW0uFkKpFPaEGWpq5KeTys6pDRurxgcpLkoJiGj4OtJO9ZoKeEC+qFB0qK2JAu8Qb9mM+A==","signatures":[{"sig":"MEQCIG1f6bqp0LPx1w/aOXm12+l6ewtIcJmzSZy1fleWWHjKAiAB8K/fhppNBydWwmTcpplZGT0GA8z9VX6xBPnGRcl/GQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461968},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./func":{"types":"./dist/utils/func.d.ts","import":"./dist/utils/func.mjs"},"./store":{"types":"./dist/store.d.ts","import":"./dist/store.mjs"},"./enrich":{"types":"./dist/ai/enrich.d.ts","import":"./dist/ai/enrich.mjs"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.mjs"},"./checkout":{"types":"./dist/checkout.d.ts","import":"./dist/checkout.mjs"},"./products":{"types":"./dist/products.d.ts","import":"./dist/products.mjs"},"./rate-limit":{"types":"./dist/utils/rate-limit.d.ts","import":"./dist/utils/rate-limit.mjs"},"./collections":{"types":"./dist/collections.d.ts","import":"./dist/collections.mjs"},"./detect-country":{"types":"./dist/utils/detect-country.d.ts","import":"./dist/utils/detect-country.mjs"}},"gitHead":"40e93a22c2a13fd226e73ed62de31595f8446473","scripts":{"dev":"tsup --watch","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","test":"bun test","build":"tsup","format":"biome format --write --no-errors-on-unmatched","prepare":"command -v husky >/dev/null 2>&1 && husky || true","test:ci":"bun test --coverage","lint:fix":"biome check --write --unsafe .","docs:site":"typedoc --options typedoc.pages.json","docs:build":"typedoc","lint:staged":"lint-staged","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"repository":{"url":"git+https://github.com/peppyhop/shop-client.git","type":"git"},"_npmVersion":"11.6.3","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","directories":{},"lint-staged":{"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.0.0","tldts":"^7.0.7","remeda":"^2.32.0","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2"},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsup":"^8.5.1","husky":"^9.1.7","typedoc":"^0.28.0","@types/bun":"^1.3.3","typescript":"^5.9.3","lint-staged":"^16.2.7","@tsconfig/bun":"^1.0.10","@biomejs/biome":"2.3.7","@types/turndown":"^5.0.6","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","typedoc-plugin-markdown":"^4.9.0","@semantic-release/changelog":"^6.0.3","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shop-client_3.31.0_1770028085073_0.6786418603201341","host":"s3://npm-registry-packages-npm-production"}},"3.32.0":{"name":"shop-client","version":"3.32.0","type":"module","main":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","types":"./dist/index.d.ts"},"./enrich":{"import":"./dist/ai/enrich.mjs","types":"./dist/ai/enrich.d.ts"},"./products":{"import":"./dist/products.mjs","types":"./dist/products.d.ts"},"./collections":{"import":"./dist/collections.mjs","types":"./dist/collections.d.ts"},"./checkout":{"import":"./dist/checkout.mjs","types":"./dist/checkout.d.ts"},"./store":{"import":"./dist/store.mjs","types":"./dist/store.d.ts"},"./rate-limit":{"import":"./dist/utils/rate-limit.mjs","types":"./dist/utils/rate-limit.d.ts"},"./func":{"import":"./dist/utils/func.mjs","types":"./dist/utils/func.d.ts"},"./detect-country":{"import":"./dist/utils/detect-country.mjs","types":"./dist/utils/detect-country.d.ts"},"./schemas":{"import":"./dist/schemas.mjs","types":"./dist/schemas.d.ts"}},"sideEffects":false,"publishConfig":{"provenance":true,"registry":"https://registry.npmjs.org/","tag":"latest"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"bun test","test:ci":"bun test --coverage","docs:build":"typedoc","docs:site":"typedoc --options typedoc.pages.json","semantic-release":"semantic-release","format":"biome format --write --no-errors-on-unmatched","lint":"biome lint --diagnostic-level=error --no-errors-on-unmatched . && tsc --noEmit -p tsconfig.json","lint:fix":"biome check --write --unsafe .","lint:staged":"lint-staged","prepare":"command -v husky >/dev/null 2>&1 && husky || true"},"keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","repository":{"type":"git","url":"git+https://github.com/peppyhop/shop-client.git"},"homepage":"https://github.com/peppyhop/shop-client#readme","bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"devDependencies":{"@biomejs/biome":"2.3.7","@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@tsconfig/bun":"^1.0.10","@types/bun":"^1.3.3","@types/turndown":"^5.0.6","conventional-changelog-conventionalcommits":"^9.1.0","husky":"^9.1.7","lint-staged":"^16.2.7","semantic-release":"^25.0.2","typedoc":"^0.28.0","typedoc-plugin-markdown":"^4.9.0","tsup":"^8.5.1","typescript":"^5.9.3"},"dependencies":{"remeda":"^2.32.0","tldts":"^7.0.7","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2","zod":"^4.0.0"},"lint-staged":{"src/**/!(*.test|*.spec).{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"],"**/*.{cjs,mjs,json,jsonc,d.cts,d.mts}":["biome format --write --no-errors-on-unmatched"],"src/**/*.{test,spec}.{ts,tsx,js,jsx}":["biome format --write --no-errors-on-unmatched"]},"packageManager":"bun@1.3.3","gitHead":"b6b40ff97997361d5c099c6e22629e2f78791e5b","_id":"shop-client@3.32.0","_nodeVersion":"24.19.0","_npmVersion":"11.6.3","dist":{"integrity":"sha512-uBM1vPlnrTPgwVMm0xuJQV2My1snSxUFfixn2JWlY/qti7piVaMZhNU09lkw9fLcV5D9eyor3aG8i7u7NmlD1w==","shasum":"2aeabaab608f7e7aec9fe42200b0aac189354ca3","tarball":"https://registry.npmjs.org/shop-client/-/shop-client-3.32.0.tgz","fileCount":36,"unpackedSize":466064,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shop-client@3.32.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCyY0ORsreXAC1xOW2Cq+tB6nwGWCc0MuzUVCKqD6X/SAIhAKEs2JUTriRkHdZ3Mjy+AZpHce6TjgXoCll4dsW5wfvn"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8e9e4f30-c489-4eb0-9eb5-89184a761cd2"}},"directories":{},"maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shop-client_3.32.0_1787019334925_0.21374274419395567"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-05T07:24:45.655Z","modified":"2026-08-18T02:15:35.442Z","3.8.2":"2025-12-05T07:24:45.910Z","3.9.0":"2025-12-05T10:21:43.549Z","3.9.1":"2025-12-15T13:03:13.586Z","3.9.2":"2025-12-15T13:41:57.557Z","3.10.0":"2025-12-15T17:30:30.969Z","3.11.0":"2025-12-15T19:10:25.835Z","3.12.0":"2025-12-17T08:01:16.499Z","3.13.0":"2025-12-17T09:05:57.661Z","3.14.0":"2025-12-17T13:04:58.814Z","3.14.1":"2025-12-19T12:25:52.345Z","3.15.0":"2025-12-30T17:11:23.309Z","3.16.0":"2025-12-30T18:16:28.407Z","3.17.0":"2025-12-31T11:22:31.851Z","3.18.0":"2025-12-31T13:01:12.272Z","3.18.1":"2026-01-02T07:49:36.070Z","3.19.0":"2026-01-02T08:42:52.831Z","3.20.0":"2026-01-02T18:25:22.151Z","3.21.0":"2026-01-02T19:13:17.674Z","3.22.0":"2026-01-05T06:43:25.277Z","3.23.0":"2026-01-05T17:50:03.744Z","3.24.0":"2026-01-05T18:58:22.725Z","3.25.0":"2026-01-06T09:50:36.834Z","3.26.0":"2026-01-06T10:33:01.438Z","3.26.1":"2026-01-06T11:07:19.576Z","3.27.0":"2026-01-07T12:48:41.684Z","3.28.0":"2026-01-08T09:45:25.630Z","3.29.0":"2026-01-08T12:47:15.965Z","3.30.0":"2026-01-28T09:24:30.087Z","3.31.0":"2026-02-02T10:28:05.232Z","3.32.0":"2026-08-18T02:15:35.066Z"},"bugs":{"url":"https://github.com/peppyhop/shop-client/issues"},"author":{"name":"tvayam.tech","email":"peppyhop@gmail.com"},"license":"MIT","homepage":"https://github.com/peppyhop/shop-client#readme","keywords":["shopify","ecommerce","product-data","store-scraping","typescript","nodejs","product-catalog","shop-client","shopify-api","product-scraper","ecommerce-tools"],"repository":{"type":"git","url":"git+https://github.com/peppyhop/shop-client.git"},"description":"A powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.","maintainers":[{"name":"tvayam.tech","email":"peppyhop@gmail.com"}],"readme":"# Shop Client\n\n[![npm version](https://badge.fury.io/js/shop-client.svg)](https://badge.fury.io/js/shop-client)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n`shop-client` is a powerful, type-safe TypeScript library for fetching and transforming product data from Shopify stores. Perfect for building e-commerce applications, product catalogs, price comparison tools, and automated store analysis.\n\n## Contents\n\n- [Installation](#-installation)\n- [Quick Start](#-quick-start)\n- [Store Info Caching & Concurrency](#store-info-caching--concurrency)\n- [Browser Usage](#browser-usage)\n- [Server/Edge Usage](#serveredge-usage)\n- [Deep Imports & Tree-Shaking](#deep-imports--tree-shaking)\n- [Rate Limiting](#rate-limiting)\n- [Migration: Barrel → Subpath Imports](#migration-barrel--subpath-imports)\n - [API Docs](#api-docs)\n\n## 🚀 Features\n\n- **Complete Store Data Access**: Fetch products, collections, and store information\n- **Flexible Product Retrieval**: Get all products, paginated results, or find specific items\n- **Collection Management**: Access collections and their associated products\n- **Checkout Integration**: Generate pre-filled checkout URLs\n- **Type-Safe**: Written in TypeScript with comprehensive type definitions\n- **Performance Optimized**: Efficient data fetching with built-in error handling\n- **Zero Dependencies**: Lightweight with minimal external dependencies\n- **Store Type Classification**: Infers audience and verticals from showcased products (body_html-only)\n\n## 🧠 Store Info Caching & Concurrency\n\n`getInfo()` validates the store URL and uses time-based caching and in-flight request deduping to avoid redundant network calls:\n\n- Validation: Ensures the URL points to a valid Shopify store (checks for specific meta tags and scripts). Throws an error if invalid.\n- Cache window: `5 minutes` (`cacheExpiry`). Fresh cached results return immediately.\n  - You can configure this TTL via the `ShopClient` constructor option `cacheTTL` (milliseconds).\n- Cached fields: `infoCacheValue` (last `StoreInfo`) and `infoCacheTimestamp` (last fetch time).\n- In-flight deduping: concurrent calls share a single request via an internal promise; result is cached and returned to all callers.\n- Failure handling: the in-flight marker clears in a `finally` block so subsequent calls can retry.\n\nBehavior:\n- Cached and fresh → returns cached `StoreInfo`.\n- Stale/missing and request in-flight → awaits shared promise.\n- Stale/missing and no in-flight → performs fetch, caches, returns.\n\nExample: configure cache TTL\n\n```ts\nimport { ShopClient } from \"shop-client\";\n\n// Set store info + validation cache TTL to 10 seconds\nconst shop = new ShopClient(\"https://exampleshop.com\", { cacheTTL: 10_000 });\nconst info = await shop.getInfo();\n```\n\nManual invalidation\n\n```ts\nimport { ShopClient } from \"shop-client\";\n\nconst shop = new ShopClient(\"https://exampleshop.com\", { cacheTTL: 60_000 });\n\n// Fetch and cache\nawait shop.getInfo();\n\n// Invalidate cache proactively (e.g., after a content update)\nshop.clearInfoCache();\n\n// Next call refetches and repopulates cache\nawait shop.getInfo();\n```\n\nForce refetch\n\n```ts\nimport { ShopClient } from \"shop-client\";\n\nconst shop = new ShopClient(\"https://exampleshop.com\", { cacheTTL: 60_000 });\n\n// First call caches within TTL\nawait shop.getInfo();\n\n// Force a fresh network fetch even if the cache is still fresh\nconst fresh = await shop.getInfo({ force: true });\n```\n\nSee also:\n- Architecture: [Caching Strategy](./ARCHITECTURE.md#caching-strategy)\n- API Reference (LLM): [ShopClientOptions, getInfo(force), clearInfoCache](./.llm/api-reference.md#constructor)\n\n## 📦 Installation\n\n```bash\nnpm install shop-client\n```\n\n```bash\nyarn add shop-client\n```\n\n```bash\npnpm add shop-client\n```\n\n## 🔧 Quick Start\n\n```typescript\nimport { ShopClient } from 'shop-client';\n\n// Initialize shop client instance\nconst shop = new ShopClient(\"your-store-domain.com\");\n\n// Fetch store information\nconst storeInfo = await shop.getInfo();\n\n// Fetch all products\nconst products = await shop.products.all();\n\n// Find specific product\nconst product = await shop.products.find(\"product-handle\");\n```\n\n## Browser Usage\n\nSome in-browser environments load npm packages via blob URLs and can error if the content is not served with a JavaScript MIME type (e.g., “Modules must be served with a valid MIME type like application/javascript”). To use `shop-client` directly in the browser, import the ESM build from a CDN that sets the correct `Content-Type`:\n\n```html\n<!-- Import map to pin shop-client to a CDN ESM URL -->\n<script type=\"importmap\">\n{\n  \"imports\": {\n    \"shop-client\": \"https://cdn.jsdelivr.net/npm/shop-client/+esm\"\n  }\n}\n</script>\n\n<script type=\"module\">\n  import { ShopClient } from 'shop-client';\n  const shop = new ShopClient('https://example.myshopify.com/');\n  const info = await shop.getInfo();\n  console.log(info);\n  const products = await shop.products.paginated({ page: 1, limit: 24 });\n  console.log(products);\n  // For collections:\n  const colProducts = await shop.collections.products.paginated('mens', { page: 1, limit: 24 });\n  console.log(colProducts);\n}</script>\n```\n\nAlternative CDN URLs:\n- `https://esm.sh/shop-client@3.5.0`\n- `https://unpkg.com/shop-client@3.5.0?module`\n\nTroubleshooting:\n- Ensure the CDN returns `Content-Type: application/javascript`. The `+esm` and `?module` suffixes enforce ESM delivery.\n- If you build your own blob, set `new Blob(code, { type: 'text/javascript' })` before `import()`.\n- For app frameworks (Vite, Next.js), import `shop-client` normally and let the bundler serve modules.\n\n## Server/Edge Usage\n\nFor robust production setups, run `shop-client` on the server or an edge function and return JSON to the browser:\n\n```ts\n// /api/shop-info.ts (Edge/Node)\nimport { ShopClient } from 'shop-client';\n\nexport default async function handler(req, res) {\n  const shop = new ShopClient('https://example.myshopify.com/');\n  const info = await shop.getInfo();\n  res.json(info);\n}\n```\n\nClient:\n\n```ts\nconst info = await fetch('/api/shop-info').then(r => r.json());\n```\n\n## Deep Imports & Tree-Shaking\n\nFor optimal bundle size, import only what you need using subpath exports. The library ships ESM/CJS builds and declares `sideEffects: false` for better dead code elimination.\n\nExamples:\n\n```typescript\n// ESM deep imports\nimport { configureRateLimit } from 'shop-client/rate-limit';\nimport { ProductOperations } from 'shop-client/products';\n\n// CommonJS deep imports\nconst { configureRateLimit } = require('shop-client/rate-limit');\nconst { ProductOperations } = require('shop-client/products');\n\n// Recommended: import specific functions you use\nimport { ShopClient } from 'shop-client';\nimport { fetchProducts } from 'shop-client/products';\n```\n\nNotes:\n- ESM consumers (Vite/Rollup/esbuild) get tree-shaking out of the box.\n- Webpack benefits from `sideEffects: false`; avoid importing wide barrels when possible.\n- Rate limiter timer starts lazily on first use (no import-time side effects).\n\n### Migration: Barrel → Subpath Imports\n\nTypeScript:\n```ts\nimport { ShopClient } from 'shop-client';\nconst client = new ShopClient(\"your-store.myshopify.com\");\n```\n\nYou can keep using the root entry (`shop-client`), but for smaller bundles switch to deep imports. The API remains the same—only the import paths change.\n\nExamples:\n\n```typescript\n// Before (barrel import)\nimport { ShopClient, configureRateLimit } from 'shop-client';\n\n// After (deep imports for better tree-shaking)\nimport { ShopClient } from 'shop-client';\nimport { configureRateLimit } from 'shop-client/rate-limit';\n\n// Feature-specific imports\nimport { fetchProducts } from 'shop-client/products';\nimport { createCheckoutOperations } from 'shop-client/checkout';\n```\n\nCommonJS:\n\n```javascript\n// Before\nconst { ShopClient, configureRateLimit } = require('shop-client');\n\n// After\nconst { ShopClient } = require('shop-client');\nconst { configureRateLimit } = require('shop-client/rate-limit');\n```\n\nNotes:\n- No bundler changes required; deep imports are exposed via `exports`.\n- The root entry continues to work; prefer deep imports for production apps.\n\n## API Docs\n\n- TypeDoc builds automatically on pushes to `main` and publishes to GitHub Pages.\n- Visit: `https://peppyhop.github.io/shop-client/` (after the first successful workflow run).\n\n## Rate Limiting\n\n`shop-client` ships with a global rate limiter that transparently throttles all internal HTTP requests (products, collections, store info, enrichment). This helps avoid `429 Too Many Requests` responses and keeps crawling stable.\n\n- Default: **enabled**, at `5` requests per `1000ms` with max concurrency `5`\n- Configure globally via `configureRateLimit` — including `enabled: false` to turn it off\n- High-throughput consumers should raise the limits or disable it explicitly; the defaults are deliberately conservative\n\n```typescript\nimport { ShopClient, configureRateLimit } from 'shop-client';\n\n// Reconfigure the global rate limiter\nconfigureRateLimit({\n  enabled: true,\n  maxRequestsPerInterval: 60, // 60 requests\n  intervalMs: 60_000,         // per minute\n  maxConcurrency: 4,          // up to 4 in parallel\n});\n\nconst shop = new ShopClient(\"your-store-domain.com\");\n\n// All subsequent library calls use the limiter automatically\nconst products = await shop.products.all();\n```\n\nNotes:\n- The limiter is global to the process. Call `configureRateLimit` once at startup.\n- Because it is on by default, requests are throttled to `5/s` unless you opt out.\n- If you are crawling multiple stores, prefer lower concurrency and a longer interval to reduce pressure.\n- When disabled, the library uses native `fetch` without throttling.\n\n### Advanced: Per-Host and Per-Class Limits\n\nYou can set different buckets by host (including wildcards) or by logical class:\n\n```typescript\nimport { configureRateLimit } from 'shop-client';\n\nconfigureRateLimit({\n  enabled: true,\n  // Default fallback\n  maxRequestsPerInterval: 10,\n  intervalMs: 1000,\n  maxConcurrency: 5,\n\n  // Host-specific buckets (exact host or wildcard suffix '*.example.com')\n  perHost: {\n    'openrouter.ai': { maxRequestsPerInterval: 2, intervalMs: 1000, maxConcurrency: 1 },\n    '*.myshopify.com': { maxRequestsPerInterval: 5, intervalMs: 1000, maxConcurrency: 3 },\n    'your-store-domain.com': { maxRequestsPerInterval: 8, intervalMs: 1000, maxConcurrency: 4 },\n  },\n\n  // Class-specific buckets (use by passing `rateLimitClass` in RequestInit)\n  perClass: {\n    openrouter: { maxRequestsPerInterval: 2, intervalMs: 1000, maxConcurrency: 1 },\n    shopify: { maxRequestsPerInterval: 6, intervalMs: 1000, maxConcurrency: 3 },\n  },\n});\n\n// If you make custom fetches, you can tag them with a class:\n// await rateLimitedFetch(url, { rateLimitClass: 'openrouter' });\n```\n\nResolution order:\n- If `rateLimitClass` is present, that bucket is used.\n- Else, a matching `perHost` bucket is used (exact match first, then wildcard suffix).\n- Else, the global default bucket is used.\n\nTip: You can deep import the limiter configuration surface:\n\n```typescript\nimport { configureRateLimit } from 'shop-client/rate-limit';\n```\n\n## 📚 API Reference\n\n### Store Information\n\n#### `getInfo()`\n\nFetches comprehensive store metadata including branding, social links, and featured content.\n\n```typescript\nconst storeInfo = await shop.getInfo();\n```\n\n**Returns:** `StoreInfo` object containing:\n- `name`: Store name from meta tags\n- `title`: Store title\n- `description`: Store description\n- `domain`: Store domain\n- `slug`: Generated store slug\n- `logoUrl`: Store logo URL\n- `socialLinks`: Social media URLs (Facebook, Instagram, etc.)\n- `contactLinks`: Contact information (phone, email, contact page)\n- `headerLinks`: Navigation menu links\n- `showcase`: Featured products and collections\n- `jsonLdData`: Structured data from the store\n- `country`: ISO 3166-1 alpha-2 code (e.g., `US`, `GB`)\n- `currency`: ISO 4217 currency code (e.g., `USD`, `EUR`)\n\n### Products\n\n- Gift cards are excluded from product responses. Any product whose `product_type` / `type` contains `\"gift card\"` will be skipped (and `products.find()` returns `null` for gift cards).\n\n#### `products.all()`\n\nFetches all products from the store with automatic pagination handling.\n\n```typescript\nconst allProducts = await shop.products.all();\n```\n\n**Returns:** `ProductResult[] | null` (typed based on `columns`, defaults to minimal)\n\n#### `products.paginated(options)`\n\nFetches products with manual pagination control.\n\n```typescript\nconst products = await shop.products.paginated({\n  page: 1,\n  limit: 25,\n  // Optional currency override aligned with Intl.NumberFormat\n  currency: \"EUR\",\n});\n```\n\n**Parameters:**\n- `page` (number, optional): Page number (default: 1)\n- `limit` (number, optional): Products per page (default: 250, max: 250)\n - `currency` (CurrencyCode, optional): ISO 4217 code aligned with `Intl.NumberFormatOptions['currency']` (e.g., `\"USD\"`, `\"EUR\"`, `\"JPY\"`)\n\n**Returns:** `ProductResult[] | null` (typed based on `columns`, defaults to minimal)\n\n#### `products.find(handle)`\n\nFinds a specific product by its handle.\n\n```typescript\nconst product = await shop.products.find(\"product-handle\");\n\n// With currency override\nconst productEur = await shop.products.find(\"product-handle\", { currency: \"EUR\" });\n```\n\n**Parameters:**\n- `handle` (string): The product handle/slug\n - `options` (object, optional): Additional options\n   - `currency` (CurrencyCode, optional): ISO 4217 code aligned with `Intl.NumberFormatOptions['currency']`\n\n**Returns:** `ProductResult | null` (typed based on `columns`, defaults to minimal)\n\n#### `products.findEnhanced(handle, options)`\n\nFinds a product by handle and returns the product plus AI enrichment from the worker endpoint. The `product` field is typed the same way as `products.find()` based on `columns`.\n\n```typescript\nconst enhanced = await shop.products.findEnhanced(\"product-handle\", {\n  apiKey: process.env.ENRICH_API_KEY!,\n  columns: { mode: \"full\", images: \"full\", options: \"full\" },\n});\n\nif (enhanced) {\n  console.log(enhanced.cache); // e.g. \"hit\" | \"miss\"\n  console.log(enhanced.enrichment.markdown);\n  console.log(enhanced.product.handle); // available when mode: \"full\"\n}\n```\n\n**Returns:** `EnhancedProductResponse<ProductResult> | null` (typed based on `columns`)\n\n#### `products.showcased()`\n\nFetches products featured on the store's homepage.\n\n```typescript\nconst showcasedProducts = await shop.products.showcased();\n```\n\n**Returns:** `ProductResult[]`\n\n#### `products.infoHtml(productHandle, content?)`\n\nFetches the extracted HTML content from the product page. This is useful for getting the main product description and content directly from the page HTML.\n\n```typescript\n// Fetch from store\nconst html = await shop.products.infoHtml(\"product-handle\");\n\n// Use provided HTML\nconst htmlFromContent = await shop.products.infoHtml(\"product-handle\", \"<html>...</html>\");\n```\n\n**Parameters:**\n- `productHandle` (string): The product handle\n- `content` (string, optional): HTML content to extract from. If provided, skips fetching the product page.\n\n**Returns:** `Promise<string | null>` - Extracted HTML content or null if not found\n\n#### `products.filter()`\n\nCreates a map of variant options and their distinct values from all products in the store. This is useful for building filter interfaces, search facets, and product option selectors.\n\n```typescript\nconst filters = await shop.products.filter();\nconsole.log('Available filters:', filters);\n\n// Example output:\n// {\n//   \"size\": [\"small\", \"medium\", \"large\", \"xl\"],\n//   \"color\": [\"black\", \"blue\", \"red\", \"white\"],\n//   \"material\": [\"cotton\", \"polyester\", \"wool\"]\n// }\n\n// Use filters for UI components\nObject.entries(filters || {}).forEach(([optionName, values]) => {\n  console.log(`${optionName}: ${values.join(', ')}`);\n});\n```\n\n**Returns:** `Record<string, string[]> | null` - Object mapping option names to arrays of their unique values (all lowercase), or null if error occurs\n\n**Features:**\n- Processes all products across all pages automatically\n- Returns lowercase, unique values for consistency\n- Handles products with multiple variant options\n- Returns empty object `{}` if no products have variants\n\n### Predictive Search\n\n#### `products.predictiveSearch(query, options?)`\n\nLocale-aware Shopify Ajax predictive search for products.\n\n```typescript\nconst results = await shop.products.predictiveSearch(\"dress\", {\n  limit: 10,           // clamps 1–10\n  locale: \"en\",        // defaults to \"en\"\n  // unavailableProducts defaults to \"hide\"\n  currency: \"USD\",     // optional override\n});\n```\n\n- Hides unavailable items by default\n- Extracts handles from Ajax results, fetches full products via `find`\n- Falls back to non-locale path when locale returns 404/417\n\n**Returns:** `ProductResult[]` (typed based on `columns`, defaults to minimal)\n\n### Recommendations\n\n#### `products.recommendations(productId, options?)`\n\nShopify Ajax product recommendations for a given product.\n\n```typescript\nconst recos = await shop.products.recommendations(1234567890, {\n  limit: 6,                 // clamps 1–10 (default 10)\n  intent: \"related\",        // or \"complementary\" (default: related)\n  locale: \"en\",             // defaults to \"en\"\n  currency: \"USD\",          // optional override\n});\n```\n\n- Returns normalized `ProductResult[]`\n- Locale-aware endpoint `/{locale}/recommendations/products.json`\n\n### Product Columns\n\nDefault product payload is minimal. Use `columns` to override the product payload shape, and TypeScript will reflect the shape in the returned type:\n\n```typescript\n// Minimal products (default)\nconst minimal = await shop.products.all();\n\n// Full products\nconst full = await shop.products.all({\n  columns: { mode: \"full\", images: \"full\", options: \"full\" },\n});\n\n// Minimal single product\nconst minimalOne = await shop.products.find(\"product-handle\", {\n  columns: { mode: \"minimal\", images: \"minimal\", options: \"minimal\" },\n});\n```\n\nQuick mental model:\n- `mode: \"minimal\"` returns a minimal product shape (no `handle`, no `priceMin/priceMax`, no `currency` field)\n- `mode: \"full\"` returns a full product shape (includes `handle`, pricing range fields, `currency`, variants, etc.)\n- `images: \"full\"` and `options: \"full\"` expand those subfields while keeping the chosen `mode`\n\n### Collections\n\n#### `collections.all()`\n\nFetches all collections from the store.\n\n```typescript\nconst collections = await shop.collections.all();\n```\n\n**Returns:** `Collection[]` - Array of all collections\n\n#### `collections.find(handle)`\n\nFinds a specific collection by its handle.\n\n```typescript\nconst collection = await shop.collections.find(\"collection-handle\");\n```\n\n**Parameters:**\n- `handle` (string): The collection handle/slug\n\n**Returns:** `Collection | null` - Collection object or null if not found\n\n#### `collections.showcased()`\n\nFetches collections featured on the store's homepage.\n\n```typescript\nconst showcasedCollections = await shop.collections.showcased();\n```\n\n**Returns:** `Collection[]` - Array of featured collections\n\n#### `collections.paginated(options)`\n\nFetches collections with manual pagination control.\n\n```typescript\nconst collectionsPage = await shop.collections.paginated({\n  page: 1,\n  limit: 10,\n});\n```\n\n**Parameters:**\n- `page` (number, optional): Page number (default: 1)\n- `limit` (number, optional): Collections per page (default: 10, max: 250)\n\n**Returns:** `Collection[]` - Array of collections for the specified page\n\n### Collection Products\n\n- Gift cards are excluded from collection product responses (same rules as `Products`).\n\n#### `collections.products.all(handle)`\n\nFetches all products from a specific collection.\n\n```typescript\nconst products = await shop.collections.products.all(\"collection-handle\");\n```\n\n**Parameters:**\n- `handle` (string): The collection handle\n\n**Returns:** `ProductResult[] | null` (typed based on `columns`, defaults to minimal)\n\n#### `collections.products.paginated(handle, options)`\n\nFetches products from a collection with pagination.\n\n```typescript\nconst products = await shop.collections.products.paginated(\"collection-handle\", {\n  page: 1,\n  limit: 25,\n  currency: \"GBP\",\n});\n```\n\n**Parameters:**\n- `handle` (string): The collection handle\n- `options` (object): Pagination options\n  - `page` (number, optional): Page number (default: 1)\n  - `limit` (number, optional): Products per page (default: 250)\n  - `currency` (CurrencyCode, optional): ISO 4217 code aligned with `Intl.NumberFormatOptions['currency']`\n\n**Returns:** `ProductResult[] | null` (typed based on `columns`, defaults to minimal)\n\nCollection products also default to minimal. To request full products from collections, pass `columns`:\n\n```typescript\nconst fullCollectionAll = await shop.collections.products.all(\"collection-handle\", {\n  columns: { mode: \"full\", images: \"full\", options: \"full\" },\n});\n```\n\n#### Currency Override\n\nBy default, pricing is formatted using the store’s detected currency.\nYou can override the currency for product and collection queries by passing a `currency` option.\nThis override updates pricing display fields only:\n- `ProductResult.localizedPricing` formatted strings\n - For full products (`mode: \"full\"`), `ProductResult.currency` is also set to the override\n\n### Showcased Products\n\n#### `products.showcased()`\n\nFetches products showcased on the store’s homepage (shape controlled by `columns`).\n\n```typescript\n// Minimal showcased products (default)\nconst minimalFeatured = await shop.products.showcased();\n\nconst featuredProducts = await shop.products.showcased({\n  columns: { mode: \"full\", images: \"full\", options: \"full\" },\n});\n```\n\n**Returns:** `ProductResult[]`\n\n```typescript\n// Products\nawait shop.products.paginated({ page: 1, limit: 25, currency: \"EUR\" });\nawait shop.products.all({ currency: \"JPY\" });\nawait shop.products.find(\"product-handle\", { currency: \"GBP\" });\n\n// Collection products\nawait shop.collections.products.paginated(\"collection-handle\", { page: 1, limit: 25, currency: \"CAD\" });\nawait shop.collections.products.all(\"collection-handle\", { currency: \"AUD\" });\n```\n\nType: `CurrencyCode` is defined as `NonNullable<Intl.NumberFormatOptions['currency']>`.\nThis ensures compatibility with `Intl.NumberFormat` and avoids maintaining a hardcoded list.\n\n### Checkout\n\n#### `checkout.createUrl(params)`\n\nGenerates a Shopify checkout URL with pre-filled customer information and cart items.\n\n```typescript\nconst checkoutUrl = shop.checkout.createUrl({\n  email: \"customer@example.com\",\n  items: [\n    { productVariantId: \"variant-id-1\", quantity: \"2\" },\n    { productVariantId: \"variant-id-2\", quantity: \"1\" }\n  ],\n  address: {\n    firstName: \"John\",\n    lastName: \"Doe\",\n    address1: \"123 Main St\",\n    city: \"Anytown\",\n    zip: \"12345\",\n    country: \"USA\",\n    province: \"CA\",\n    phone: \"123-456-7890\"\n  }\n});\n```\n\n**Parameters:**\n- `email` (string): Customer's email address\n- `items` (array): Cart items with `productVariantId` and `quantity`\n- `address` (object): Shipping address details\n\n**Returns:** `string` - Complete checkout URL\n\n### Utilities\n\nHelper utilities exported for common normalization and parsing tasks.\n\n```typescript\nimport { sanitizeDomain, safeParseDate } from 'shop-client';\n\n// Normalize domains safely\nsanitizeDomain('https://www.example.com');            // \"example.com\"\nsanitizeDomain('www.example.com', { stripWWW: false }); // \"www.example.com\"\nsanitizeDomain('http://example.com/path');            // \"example.com\"\n\n// Errors on invalid input (e.g., bare hostname without suffix)\ntry {\n  sanitizeDomain('example'); // throws\n} catch (e) {\n  console.error('Invalid domain');\n}\n\n// Safely parse dates (avoids Invalid Date)\nsafeParseDate('2024-10-31T12:34:56Z');  // Date\nsafeParseDate('');                      // undefined\nsafeParseDate('not-a-date');            // undefined\n```\n\nNotes:\n- `sanitizeDomain` trims protocols, paths, and optional `www.` depending on `stripWWW`.\n- Throws for invalid inputs: empty strings or hostnames missing a public suffix (e.g., `example`).\n- `safeParseDate` returns `undefined` for invalid inputs; product `publishedAt` may be `null` when unavailable.\n\n#### Release and Publishing\n\n- Releases are automated via `semantic-release` and npm Trusted Publishing.\n- The release workflow uses Node.js `22.14.0` to satisfy `semantic-release` requirements.\n- npm publishes use OIDC with provenance; no `NPM_TOKEN` secret is required.\n- Ensure your npm package settings add this GitHub repo as a trusted publisher and set the environment name to `npm-publish`.\n\n### Additional Utilities\n\n```typescript\nimport {\n  calculateDiscount,\n  extractDomainWithoutSuffix,\n  generateStoreSlug,\n  genProductSlug,\n  detectShopCountry,\n} from 'shop-client';\n\n// Discount calculation (percentage, rounded to nearest integer)\ncalculateDiscount(8000, 10000); // 20\n\n// Extract base domain without public suffix\nextractDomainWithoutSuffix('www.example.co.uk'); // 'example'\n\n// Create an SEO-friendly store slug\ngenerateStoreSlug('https://shop.example.com'); // 'shop-example-com'\n\n// Create a product slug from product data\ngenProductSlug({\n  title: 'Summer Dress',\n  handle: 'summer-dress',\n  vendor: 'Acme',\n}); // 'acme-summer-dress'\n\n// Detect Shopify store country with confidence score\nconst result = await detectShopCountry('anuki.in');\n// result.country → 'IN', result.confidence → 0.9\n```\n\nNotes:\n- `calculateDiscount` expects prices in the same unit (e.g., cents) and returns an integer percentage.\n- `extractDomainWithoutSuffix` removes known TLDs/suffixes, leaving the registrable label.\n- `generateStoreSlug` preserves domain components and replaces separators with hyphens.\n- `genProductSlug` builds a stable, vendor-prefixed slug using product fields.\n- `detectShopCountry` combines multiple signals to infer store country and confidence.\n\n### Store Type Classification\n\nDetermine the store’s primary verticals and target audiences using showcased products. Classification uses only each product’s `body_html` content and aggregates per-product results, optionally pruned by store-level signals.\n\n```typescript\nimport { ShopClient } from 'shop-client';\n\nconst shop = new ShopClient('your-store-domain.com', {\n  openRouter: { apiKey: 'YOUR_OPENROUTER_API_KEY', model: 'openai/gpt-4o-mini' },\n});\n\nconst breakdown = await shop.determineStoreType({\n  // Optional: limit the number of showcased products sampled (default 10, max 50)\n  maxShowcaseProducts: 12,\n  // Note: showcased collections are not used for classification\n  maxShowcaseCollections: 0,\n});\n\n// Example breakdown shape\n// {\n//   generic: { accessories: ['general'] },\n//   adult_female: { clothing: ['dresses', 'tops'] }\n// }\n```\n\nDetails:\n- Uses only `product.bodyHtml` for classification (no images or external text).\n- Samples up to `maxShowcaseProducts` from `getInfo().showcase.products`.\n- Aggregates per-product audience/vertical into a multi-audience breakdown.\n- If `openRouter.offline` is `true`, uses offline regex heuristics. Otherwise, an OpenRouter API key is required (via `ShopClient` options or `determineStoreType({ apiKey })`).\n- Applies store-level pruning based on title/description to improve consistency.\n\n### AI Enrichment\n\n```typescript\nimport { ShopClient } from 'shop-client';\n\nconst shop = new ShopClient('your-store-domain.com', {\n  openRouter: { apiKey: 'YOUR_OPENROUTER_API_KEY', model: 'openai/gpt-4o-mini' },\n});\n\n// Merge API (Ajax) + product page content into a clean description\nconst enrichedMarkdown = await shop.products.enriched('some-product-handle', {\n  outputFormat: 'markdown',\n});\n// enrichedMarkdown?.enriched_content → markdown\n\n// Use provided content instead of fetching product page\nconst enrichedFromContent = await shop.products.enriched('some-product-handle', {\n  outputFormat: 'markdown',\n  content: '<html>...</html>',\n});\n\nconst enrichedJson = await shop.products.enriched('some-product-handle', {\n  outputFormat: 'json',\n});\n// enrichedJson?.enriched_content → JSON string (validated)\n\n// Build prompts without calling the LLM (useful for debugging)\nconst { system, user } = await shop.products.enrichedPrompts('some-product-handle', {\n  outputFormat: 'markdown',\n  content: '<html>...</html>', // Optional content\n});\n```\n\nNotes:\n- `enriched()` returns `enriched_content` as either markdown or a validated JSON string (based on `outputFormat`).\n- `enrichedPrompts()` and `classifyPrompts()` return the prompt pair without making network calls.\n\n## 🏗️ Type Definitions\n\n### StoreInfo\n\n```typescript\ntype StoreInfo = {\n  name: string;\n  domain: string;\n  slug: string;\n  title: string | null;\n  description: string | null;\n  shopifyWalletId: string | null;\n  myShopifySubdomain: string | null;\n  logoUrl: string | null;\n  socialLinks: Record<string, string>;\n  contactLinks: {\n    tel: string | null;\n    email: string | null;\n    contactPage: string | null;\n  };\n  headerLinks: string[];\n  showcase: {\n    products: string[];\n    collections: string[];\n  };\n  jsonLdData: any[] | null;\n};\n```\n\n### Product\n\n```typescript\ntype Product = {\n  slug: string;\n  handle: string;\n  platformId: string;\n  title: string;\n  available: boolean;\n  price: number;\n  priceMin: number;\n  priceVaries: boolean;\n  compareAtPrice: number;\n  compareAtPriceMin: number;\n  priceMax: number;\n  compareAtPriceMax: number;\n  compareAtPriceVaries: boolean;\n  discount: number;\n  currency?: string;\n  options: ProductOption[];\n  bodyHtml: string | null;\n  active?: boolean;\n  productType: string | null;\n  tags: string[];\n  vendor: string;\n  featuredImage?: string | null;\n  isProxyFeaturedImage: boolean | null;\n  createdAt?: Date;\n  updatedAt?: Date;\n  variants: ProductVariant[] | null;\n  images: ProductImage[];\n  publishedAt: Date | null;\n  seo?: MetaTag[] | null;\n  metaTags?: MetaTag[] | null;\n  displayScore?: number;\n  deletedAt?: Date | null;\n  storeSlug: string;\n  storeDomain: string;\n  embedding?: number[] | null;\n  url: string;\n  requiresSellingPlan?: boolean | null;\n  sellingPlanGroups?: unknown;\n  // Keys formatted as name__value parts joined by '____' (alphabetically sorted), e.g., \"color__blue____size__xl\"\n  variantOptionsMap: Record<string, string>;\n  variantPriceMap: Record<string, number>;\n  variantSkuMap: Record<string, string | null>;\n  variantAvailabilityMap: Record<string, boolean>;\n};\n```\n\n#### Date Handling\n\n- `createdAt` and `updatedAt` are parsed using a safe parser and may be `undefined` when source values are empty or invalid.\n- `publishedAt` is `Date | null` and will be `null` when unavailable or invalid.\n\n#### Variant Maps\n\n- Each product includes `variantOptionsMap: Record<string, string>` when variants are present.\n- Each product includes `variantPriceMap: Record<string, number>` using the same keys; values are prices in cents.\n- Each product includes `variantSkuMap: Record<string, string | null>` using the same keys; values are SKUs (or `null`).\n- Each product includes `variantAvailabilityMap: Record<string, boolean>` using the same keys; values are availability flags.\n- Keys are composed of normalized option name/value pairs in the form `name__value`, joined by `____` and sorted alphabetically for stability.\n- Example: `{ \"color__blue____size__xl\": \"123\", \"color__red____size__m\": \"456\" }`.\n- Normalization uses `normalizeKey` (lowercases; spaces → `_`; non-space separators like `-` remain intact).\n\nGenerate keys using `buildVariantKey` (exported from the main entrypoint):\n\n```typescript\nimport { buildVariantKey } from \"shop-client\";\n\nconst key = buildVariantKey({ Size: \"XL\", Color: \"Blue\" }); // \"color__blue____size__xl\"\nconst variantId = product.variantOptionsMap[key];\nconst priceInCents = product.variantPriceMap[key];\nconst sku = product.variantSkuMap[key];\nconst available = product.variantAvailabilityMap[key];\n```\n\n### ProductVariant\n\n```typescript\ntype ProductVariant = {\n  id: string;\n  platformId: string;\n  name?: string;\n  title: string;\n  option1: string | null;\n  option2: string | null;\n  option3: string | null;\n  options?: string[];\n  sku: string | null;\n  requiresShipping: boolean;\n  taxable: boolean;\n  featuredImage: ProductVariantImage | null;\n  available: boolean;\n  price: number;\n  weightInGrams?: number;\n  compareAtPrice: number;\n  position: number;\n  productId: number;\n  createdAt?: string;\n  updatedAt?: string;\n};\n```\n\n### ProductVariantImage\n\n```typescript\ntype ProductVariantImage = {\n  id: number;\n  src: string;\n  position: number;\n  productId: number;\n  aspectRatio: number;\n  variantIds: unknown[];\n  createdAt: string;\n  updatedAt: string;\n  alt: string | null;\n  width: number;\n  height: number;\n};\n```\n\n### ProductImage\n\n```typescript\ntype ProductImage = {\n  id: number;\n  productId: number;\n  alt: string | null;\n  position: number;\n  src: string;\n  mediaType: \"image\" | \"video\";\n  variantIds: unknown[];\n  createdAt?: string;\n  updatedAt?: string;\n  width: number;\n  height: number;\n  aspect_ratio?: number;\n};\n```\n\n### ProductOption\n\n```typescript\ntype ProductOption = {\n  key: string;\n  data: string[];\n  name: string;\n  position: number;\n  values: string[];\n};\n```\n\n### Collection\n\n```typescript\ntype Collection = {\n  id: string;\n  title: string;\n  handle: string;\n  description?: string;\n  image?: {\n    id: number;\n    createdAt: string;\n    src: string;\n    alt?: string;\n  };\n  productsCount: number;\n  publishedAt: string;\n  updatedAt: string;\n};\n```\n\n### MetaTag\n\n```typescript\ntype MetaTag =\n  | { name: string; content: string }\n  | { property: string; content: string }\n  | { itemprop: string; content: string };\n```\n\n## 💡 Use Cases\n\n### E-commerce Applications\n- Build product catalogs and search functionality\n- Create comparison shopping tools\n- Develop inventory management systems\n\n### Data Analysis\n- Analyze product pricing trends\n- Monitor competitor stores\n- Generate market research reports\n\n### Marketing Tools\n- Create automated product feeds\n- Build recommendation engines\n- Generate SEO-optimized product pages\n\n### Integration Examples\n- Sync products with external databases\n- Create custom checkout flows\n- Build headless commerce solutions\n\n## 🔍 Advanced Examples\n\n### Building a Product Search\n\n```typescript\nasync function searchProducts(shop: ShopClient, query: string) {\n  const allProducts = await shop.products.all();\n  if (!allProducts) return [];\n  return allProducts.filter(product => \n    product.title.toLowerCase().includes(query.toLowerCase()) ||\n    product.tags.some(tag => tag.toLowerCase().includes(query.toLowerCase()))\n  );\n}\n```\n\n### Price Monitoring\n\n```typescript\nasync function monitorPrices(shop: ShopClient) {\n  const products = await shop.products.all();\n  if (!products) return [];\n  return products.map(product => ({\n    handle: product.handle,\n    title: product.title,\n    currentPrice: product.price,\n    originalPrice: product.compareAtPrice,\n    discount: product.discount,\n    onSale: product.compareAtPrice > product.price\n  }));\n}\n```\n\n### Collection Analysis\n\n```typescript\nasync function analyzeCollections(shop: ShopClient) {\n  const collections = await shop.collections.all();\n  const analysis = [];\n  \n  for (const collection of collections) {\n    const products = await shop.collections.products.all(collection.handle);\n    if (products) {\n      analysis.push({\n        name: collection.title,\n        productCount: products.length,\n        averagePrice: products.reduce((sum, p) => sum + p.price, 0) / products.length,\n        priceRange: {\n          min: Math.min(...products.map(p => p.price)),\n          max: Math.max(...products.map(p => p.price))\n        }\n      });\n    }\n  }\n  \n  return analysis;\n}\n```\n\n## 🤖 LLM Integration\n\nThis package is designed to be LLM-friendly with comprehensive documentation and structured APIs:\n\n### For AI Code Generation\n- **Complete Type Safety**: Full TypeScript definitions enable accurate code completion and generation\n- **Predictable API Patterns**: Consistent method naming and return types across all operations\n- **Comprehensive Examples**: Real-world usage patterns in `/examples` directory\n- **Detailed Documentation**: Technical context in `/.llm` directory for AI understanding\n\n### For E-commerce AI Applications\n- **Rich Product Data**: Complete product information including variants, pricing, and metadata\n- **Structured Store Information**: Organized store data perfect for AI analysis and recommendations\n- **Search-Ready Data**: Product tags, descriptions, and categories optimized for semantic search\n- **Batch Operations**: Efficient data fetching for large-scale AI processing\n\n### LLM-Friendly Resources\n- [`llm.txt`](./llm.txt) - Complete repository overview and API surface\n- [`/.llm/context.md`](./.llm/context.md) - Technical architecture and implementation details\n- [`/.llm/api-reference.md`](./.llm/api-reference.md) - Comprehensive API documentation with examples\n- [`/.llm/examples.md`](./.llm/examples.md) - Code patterns and usage examples\n- [`ARCHITECTURE.md`](./ARCHITECTURE.md) - System design and extension points\n- [`CONTRIBUTING.md`](./CONTRIBUTING.md) - Development guidelines and best practices\n\n### AI Use Cases\n- **Product Recommendation Systems**: Rich product data with relationships and metadata\n- **Price Monitoring**: Automated price tracking and comparison tools\n- **Inventory Analysis**: Stock level monitoring and trend analysis\n- **Content Generation**: Product descriptions and marketing content creation\n- **Market Research**: Competitive analysis and market trend identification\n\n### Keywords for LLM Discovery\n`shopify`, `ecommerce`, `product-data`, `store-scraping`, `typescript`, `nodejs`, `api-client`, `product-catalog`, `checkout`, `collections`, `variants`, `pricing`, `inventory`, `headless-commerce`, `ai-ready`, `llm-friendly`, `semantic-search`, `product-recommendations`, `price-monitoring`\n\n## 🛠️ Error Handling\n\nThe library includes comprehensive error handling:\n\n```typescript\ntry {\n  const product = await shop.products.find(\"non-existent-handle\");\n  // Returns null for not found\n} catch (error) {\n  // Handles network errors, invalid domains, etc.\n  console.error('Error fetching product:', error.message);\n}\n```\n\n## 🔐 Security and Dependency Overrides\n\n- This project pins vulnerable transitive dependencies using npm `overrides` to keep CI/security scans green.\n- We currently force `glob` to `11.1.0` to avoid the CLI command injection vulnerability affecting `glob@10.3.7–11.0.3`.\n- The library does not use the `glob` CLI; pinning removes audit warnings without impacting functionality.\n- If scanners flag new CVEs, update `package.json` `overrides` and reinstall dependencies.\n\n## ✅ Parsing Reliability Notes\n\n- Contact link parsing is hardened to correctly detect:\n  - `tel:` phone links\n  - `mailto:` email links\n  - `contactPage` URLs (e.g., `/pages/contact`)\n- Tests cover protocol-relative social links normalization and contact page detection to prevent regressions.\n\n## 📄 License\n\nMIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 📞 Support\n\nFor questions and support, please open an issue on the GitHub repository.\n","readmeFilename":"README.md"}