{"_id":"@ashishnitw/shopify-utils","_rev":"16-37d398e8156cb64c50e094f75a23f1b5","name":"@ashishnitw/shopify-utils","dist-tags":{"latest":"0.0.18"},"versions":{"0.0.1":{"name":"@ashishnitw/shopify-utils","version":"0.0.1","keywords":["shopify","shopify-app","polaris","shopify-utils","shopify-api","shopify-webhooks","app-bridge"],"license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.1","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"ee6c4b7e971ad4f4d2c82d759e2c7b055fd1676a","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.1.tgz","fileCount":53,"integrity":"sha512-+ifs7OXx8N1FhgEseaDkKsE1xKFo/orQB7Ysv8h8xS+KDVsh00YvgAmBUWkbd+/XdX7NDs4WsuEtjG+Bu7VBPQ==","signatures":[{"sig":"MEYCIQCgNmw0lZww3tMF6ZHdOTQJ49CVjkCqu85fPohv+vgehgIhAITCbE4rAvXxp4sUEKy8Cv8ntDVGo/qg5jCVi+Ca1u1t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142095},"main":"index.js","type":"commonjs","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js","./server/middleware":"./server/middleware/index.js"},"gitHead":"6dbe5947be65347434d6727b6a42c589d5208340","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","validate":"node -e \"const m = require('.'); console.log('Root exports:', Object.keys(m).length, 'keys');\""},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities — Polaris components, React hooks, server middleware, webhook handlers, and helper functions.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@shopify/polaris":"^13.9.5","@shopify/shopify-api":"^13.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.1_1776271445739_0.22994692322347987","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@ashishnitw/shopify-utils","version":"0.0.2","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.2","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"f8b5a0dba190c1a21ecee58dfcbf08d9235f0fee","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.2.tgz","fileCount":63,"integrity":"sha512-9vKkDChMV5RFYuHb5OIp6RfN7U9994HAyCDZxwtcMA4Sds2hY44bfc4cAsbf2IehXhqO3xLCr4NqWb8q6L/lIw==","signatures":[{"sig":"MEUCIQDjBwdE/1qPjavka4QBbQ12zcnUrH9ONUHd4IDD6jJT1gIgVRjY1Nk46V7kjC+orP60FKzXt9BZk1AtQv7+uzbv608=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166969},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js","./server/middleware":"./server/middleware/index.js"},"gitHead":"d0444984020e910784eb125be307da5628163de2","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","react-quill":"^2.0.0","@shopify/polaris":"^13.9.5","@shopify/shopify-api":"^13.0.0","@shopify/polaris-icons":"^9.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.2_1776494777522_0.9752966388481594","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@ashishnitw/shopify-utils","version":"0.0.3","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.3","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"dc584001d155b4341c77de7e8fd3a7b879dfc27f","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.3.tgz","fileCount":76,"integrity":"sha512-YueJ2wiuqFCNYmtB9CsRccFjnVHqteKJUb9ILHotyZQecEfvRdhFwwjpFNBE3ln/Q7k/hcnu8qlrtJ9dtYR1qw==","signatures":[{"sig":"MEYCIQCk81EYsNfAnEwt2BqCB/5/in3HLVe3ZfBoGHW539qMTQIhALXMeOX9QN99bOemZapBTxss/ckcCYKOYfdhupnnaaSb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219339},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js","./server/middleware":"./server/middleware/index.js"},"gitHead":"15b2008cd5300299d15f860d663eb0a0945b5fd1","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@tiptap/pm":"^3.22.3","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@shopify/polaris":"^13.9.5","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@shopify/shopify-api":"^13.0.0","@shopify/polaris-icons":"^9.3.1","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.3_1776543536042_0.5176390247824616","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@ashishnitw/shopify-utils","version":"0.0.4","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.4","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"ff2a6c03710d7de43ac56ad07c71f52ca1f14308","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.4.tgz","fileCount":78,"integrity":"sha512-gGcHQIWZrges2fCGsmhTY5Poqltbf6kLvsVjTZiQmK8hrp2bn/mYsOb/dXclpEvU1DuYuEfiz4G9RMaku5/bfw==","signatures":[{"sig":"MEQCIGGjXQZRufunp8prqKGj+bwpj2sHKe6T4p3m0tH3DuBTAiAz58gOcof4DBGxSIRwpdo0tKHPM9E9qR7c3/bO1GBMyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192310},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js","./server/middleware":"./server/middleware/index.js"},"gitHead":"e6282401e6c015f8bf153ab217270ec40e041e83","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@tiptap/pm":"^3.22.3","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@shopify/polaris":"^13.9.5","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@shopify/shopify-api":"^13.0.0","@shopify/polaris-icons":"^9.3.1","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.4_1776591371082_0.5984389998993145","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@ashishnitw/shopify-utils","version":"0.0.6","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.6","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"387c01d749dcdf5224869cba1d9cabafd300f6a1","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.6.tgz","fileCount":67,"integrity":"sha512-9EUGewmWpLjnSwO5FVrQCjZndxRTVfSJVO0CPVLsf60MX/APQITuwaaOXQEqHJ4gYo9O+IyNXE2pZ7hqmw1XcA==","signatures":[{"sig":"MEUCIGGvZwlxzT1L1inqNOFM3RnoaJaLn+fRLK/kFQUbhPlFAiEAkhWERQQnGrzrPXcZUSJw3dxmfVM8vbOJqPTFAnfqd+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184107},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js"},"gitHead":"a0fb8cdbe308e0770aaa8803f83025ea235601ff","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@tiptap/pm":"^3.22.3","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@shopify/shopify-api":"^13.0.0","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.6_1777214940914_0.6351166755554476","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@ashishnitw/shopify-utils","version":"0.0.7","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.7","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"868f5d78c503bc30fed1bf7b25f8c3c57698900b","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.7.tgz","fileCount":65,"integrity":"sha512-qcIGaMS1/gO6vC4lCGGduNlhRqb7wnIf6g26mrSNAV9Iqb2Sf9y9c+BP+R32cPyi78AQEm46qvcO38aPXMovjQ==","signatures":[{"sig":"MEYCIQDFV+ux8VDOhLz56Ifr4CCHOiupnpcsm9XhVfF9v2DM+wIhAIlYSnWAAF94hZy5Vk520Eq6Gv8/hcoiA+6oVwEgLMmI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183788},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js"},"gitHead":"3fe3e7f29bf6845caf43995877df670e3256c9e9","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@tiptap/pm":"^3.22.3","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@shopify/shopify-api":"^13.0.0","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.7_1777480224077_0.3894487593420175","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@ashishnitw/shopify-utils","version":"0.0.8","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.8","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"9c41cc3a38f649860bc8bc5db9b03ec5b54f13de","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.8.tgz","fileCount":64,"integrity":"sha512-jYgxpGwKp86luOvaVNjgVp/L3RtgUJ9hHet1Vq/3WsZGZu516hl9up+htcbeyT6mG7jvNhKge8XvBblbp27t5w==","signatures":[{"sig":"MEUCIQDGTElPZE6FhOq3icQpbtmp7CYjaW1JN5/9IBQKJb680QIgTqJE0oqU+00CIoryN5P6z9lK8xWgx37PUB0N3iSk4p8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181562},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js"},"gitHead":"fba4d3a28c9cec1ac46a2c6fd92c0177aa946766","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","lodash":"^4.17.23","express":"^4.21.0","mongoose":"^8.9.0","@tiptap/pm":"^3.22.3","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@shopify/shopify-api":"^13.0.0","@tiptap/extension-color":"^3.23.1","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.8_1778532709918_0.9342799143259526","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@ashishnitw/shopify-utils","version":"0.0.9","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.9","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"1e6a79a1e2a38d5e63ca2a3def5ad4ed2adaf447","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.9.tgz","fileCount":64,"integrity":"sha512-huIf/4vRalkxZNDLrQHUAaflZ6QkcW1f0278enpbDlBShOYTKEYQrBAKDGVUPf4MwAG+DJtChYFUNktFQItJJw==","signatures":[{"sig":"MEYCIQC9eodrRxJ+wfUGksMQFDj622AXCV9+VwW6ROkkvP19NAIhANlC8+Ch29yCYrfNROdkxrS2SJSNNqkVRmg6ikjxyaap","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181492},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js"},"gitHead":"97bc3a0b09bcae0863afbec7060c6e82c3b423fa","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","express":">=4.0.0","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.9_1778591618579_0.47452906056374555","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@ashishnitw/shopify-utils","version":"0.0.10","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.10","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"8e6747ce29445d5bba9ac81f3546581a8822e448","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.10.tgz","fileCount":64,"integrity":"sha512-bCsbz7kj77Vo7V8ZForjCcOVYo3x8yRJ//WUPOTlzf0hzF6JE1wmzGjLVdW6snJElU5gZEb8MQCtBLocBwKXxQ==","signatures":[{"sig":"MEYCIQD8i/c4XB9RjXVv3Def0UfiBRWrl4karAzK9ItVX8ialwIhAPcwQ2neEmQyGDoou+/7IP+fKQXvdf5/ohaIOQcGVmJn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194536},"main":"index.js","type":"module","exports":{".":"./index.js","./hooks":"./hooks/index.js","./utils":"./utils/index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js","./server/webhooks":"./server/webhooks/index.js"},"gitHead":"ef26fd18c901e3b1918f01368b4d09f0b700378e","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"axios":"^1.14.0","@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","express":">=4.0.0","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.10_1779041562209_0.5701445024029486","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@ashishnitw/shopify-utils","version":"0.0.11","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.11","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"0cd57d10b20b13f83b20a003aacd523503d4c02a","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.11.tgz","fileCount":31,"integrity":"sha512-uZ4sVHR495O8GE4OhFWVE195rsqiB3Oex1SO/Q1BEa24G4uwghYXnpBKIe8jB+yREtAmn96GDXA1KuZTYECPDw==","signatures":[{"sig":"MEYCIQDVGu3g8L8/ra4inIG+0Q037uPaw6uWXsRngOan1yE1dgIhAKGRCOVwLBKi7bxvuxi4YblMgS1Svg9QcduTYlQttZ0x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111033},"main":"index.js","type":"module","exports":{".":"./index.js","./server":"./server/index.js","./components":"./components/index.js","./server/api":"./server/api/index.js"},"gitHead":"112693a5113ddaf1ee63c289ec66375c33eea628","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","showcase":"vite showcase","validate":"node -e \"import('./index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.11_1779134155810_0.7560250253915424","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@ashishnitw/shopify-utils","version":"0.0.13","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.13","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"7fc29bed8fdd23065b03f42c71b4d270b5bf3bf4","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.13.tgz","fileCount":13,"integrity":"sha512-s/R4U7V2PdHHqQf3twD6wjSzyyDIfMbHrhV9+tzljUQ2v7grtuINt3DrJhk+Z9TzLcHU9TcE4t0WABZbCD35Qg==","signatures":[{"sig":"MEUCIQDqcZ72eQezJU4mwWZpEjfBsjyN3xxitxPfgW6pmLbkdgIgPhhn5Y1pxhKVRONEiWv2P5ZvlsWY/h8TzUJXupixxRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274536},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./server":"./dist/server/index.js","./components":"./dist/components/index.js","./server/api":"./dist/server/api/index.js"},"gitHead":"12b6e9037ad826b00d85df91c1ce7faf5ac44fd0","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","showcase":"vite showcase","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^7.0.2","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.13_1785253571706_0.14605078739259492","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@ashishnitw/shopify-utils","version":"0.0.14","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.14","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"be17d9ca1c5bb2b32b4ee21350f3294794abff33","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.14.tgz","fileCount":13,"integrity":"sha512-Fss5xEXeqDiTp+l7kGdYgPpcwSc7PJuDYQkrOXt5is4z2fZM/6kSBfwC4rsf2zhnLZej7+hxVz0oiWO5PRN+Ug==","signatures":[{"sig":"MEUCIFLNLu08esBkEK9j/dfXbOi8YRz5n0JXQBaeDgoP3GhQAiEAh6o1MZ7i77lcCZ1KDbqTVPB8m5jOfMtwwDLoAjuRBV0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274491},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./server":"./dist/server/index.js","./components":"./dist/components/index.js","./server/api":"./dist/server/api/index.js"},"gitHead":"59e2ff9b4bd7b5277560d6ba1704a7467055d813","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","showcase":"vite showcase","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^7.0.2","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.14_1785257596150_0.2918330698196274","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@ashishnitw/shopify-utils","version":"0.0.15","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.15","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"eecc6d513aa60711f9f10602905d9ea008e3da78","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.15.tgz","fileCount":13,"integrity":"sha512-x2GEhlSVZxMvtXvQh7AgVzr9BdpVxYGFeLtlTPOnqsu435wBC0InFIu7pEzoJXvoPuAbpSL9KZRw8vcAY2LiLg==","signatures":[{"sig":"MEUCIQCkXwym0MK3VkPyVCS2VDgmE3kZxQCwzLl7WSufosYg1gIgaytXQM93XDyFVho5wDxA+Nb0qjlvq8CS7RacaoMwG3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293715},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./server":"./dist/server/index.js","./components":"./dist/components/index.js","./server/api":"./dist/server/api/index.js"},"gitHead":"cacc462c719dc88a73535bae134264d098cbc2f4","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","showcase":"vite showcase","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^7.0.2","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.15_1785532254637_0.9525111558001196","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@ashishnitw/shopify-utils","version":"0.0.16","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.16","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"fc51af6b8dfbfdc47490cff120b5351a2d00e02e","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.16.tgz","fileCount":13,"integrity":"sha512-T/ANap8WhfKtq2dK+PGDe+gTwDp1Jf2rl+ic+2aOEiOTZPL3G0MxWC0oEDiABrC2i1jxUkwzvT2Hnv3s3Q4B8g==","signatures":[{"sig":"MEQCIEdU6YJWmHaWmeCScMyNTlkj62Wvd/iZVmLMYi+Q0ZfeAiAj3Z/5mc5mQl05PvV/mmzk2C3wi8+hSMIw+P7YTo1cXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312175},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./server":"./dist/server/index.js","./components":"./dist/components/index.js","./server/api":"./dist/server/api/index.js"},"gitHead":"1d15e8af19d13b78feb0806eac0b2a8e4cc3810b","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","showcase":"vite showcase","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^7.0.2","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.16_1785560344703_0.000935443613075293","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@ashishnitw/shopify-utils","version":"0.0.17","license":"MIT","_id":"@ashishnitw/shopify-utils@0.0.17","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"homepage":"https://github.com/ashishnitw/shopify-utils#readme","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"dist":{"shasum":"fce11bc516b75b132d67a769ff2bba8faecd7e05","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.17.tgz","fileCount":19,"integrity":"sha512-HzIU3Lr5IAgZ7oy0DDn/EmehkKG2K235/W7hncwDjgoe6Ds7MkCYbh1WqI6lASSoaqloVU2mTyRmrDm3zx4Y3A==","signatures":[{"sig":"MEQCIG+jXu2kGrZANT21jbsHg4tM1jqfs9HaLmyy3deRtiwNAiAHh0T83c7J0TUuhbY0Il8bmHOQHBAmobaJENKiTdh0Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314132},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./utils":"./dist/utils/index.js","./server":"./dist/server/index.js","./components":"./dist/components/index.js","./server/api":"./dist/server/api/index.js","./server/api/metafields":"./dist/server/api/metafields.js"},"gitHead":"e527980e950ba5f58c585201fecb101d1db1f1ae","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","showcase":"vite showcase","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase:build":"vite build showcase"},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"repository":{"url":"git+https://github.com/ashishnitw/shopify-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"Reusable Shopify app utilities","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@dnd-kit/core":"^6.3.1","@tiptap/react":"^3.22.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/modifiers":"^9.0.0","@tiptap/starter-kit":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/extension-placeholder":"^3.22.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^7.0.2","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":">=17","react-dom":">=17","@shopify/shopify-api":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-utils_0.0.17_1786266748313_0.4438587237025058","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@ashishnitw/shopify-utils","version":"0.0.18","description":"Reusable Shopify app utilities","repository":{"type":"git","url":"git+https://github.com/ashishnitw/shopify-utils.git"},"main":"dist/server/index.js","type":"module","exports":{".":"./dist/server/index.js","./components":"./dist/components/index.js","./server":"./dist/server/index.js","./server/api":"./dist/server/api/index.js","./server/api/metafields":"./dist/server/api/metafields.js","./utils":"./dist/utils/index.js"},"scripts":{"build":"tsup","test":"echo \"Error: no test specified\" && exit 1","lint":"eslint .","validate":"node -e \"import('./dist/server/index.js').then(m => console.log('Root exports:', Object.keys(m).length, 'keys'))\"","showcase":"vite showcase","showcase:build":"vite build showcase"},"license":"MIT","dependencies":{"@dnd-kit/core":"^6.3.1","@dnd-kit/modifiers":"^9.0.0","@dnd-kit/sortable":"^10.0.0","@tiptap/extension-placeholder":"^3.22.3","@tiptap/extension-text-style":"^3.22.4","@tiptap/react":"^3.22.3","@tiptap/starter-kit":"^3.22.3"},"peerDependencies":{"@shopify/shopify-api":">=11.0.0","react":">=17","react-dom":">=17"},"devDependencies":{"@vitejs/plugin-react":"^6.0.1","react":"^18.2.0","react-dom":"^18.2.0","tsup":"^8.5.1","typescript":"^7.0.2","vite":"^8.0.8"},"_id":"@ashishnitw/shopify-utils@0.0.18","gitHead":"2aa661752e442b57ff43511515c4089abc257ef0","bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"homepage":"https://github.com/ashishnitw/shopify-utils#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-wjiApQ/S2xeLsmomnL/QxevMAsARYBJWQ/QAgtM52eXw37RE3gW7NhY13hRKcrv04LQii342cuIgvoshNtu2UA==","shasum":"aafeb3784d5ca6cc928a416a6dd465dc1d767cd3","tarball":"https://registry.npmjs.org/@ashishnitw/shopify-utils/-/shopify-utils-0.0.18.tgz","fileCount":19,"unpackedSize":322926,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBfOe98r9GFcyYXJM543HBvKK2kMjWWubYvYKlmE5qr+AiB0T/hqdGp+DxaKUzyqijeWwa3MLLXbB0Eb4mlTByulug=="}]},"_npmUser":{"name":"ashishnitw","email":"ashishnitw14@gmail.com"},"directories":{},"maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shopify-utils_0.0.18_1786290067680_0.97346388332051"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T16:44:05.669Z","modified":"2026-08-09T15:41:07.990Z","0.0.1":"2026-04-15T16:44:05.889Z","0.0.2":"2026-04-18T06:46:17.657Z","0.0.3":"2026-04-18T20:18:56.195Z","0.0.4":"2026-04-19T09:36:11.253Z","0.0.6":"2026-04-26T14:49:01.053Z","0.0.7":"2026-04-29T16:30:24.250Z","0.0.8":"2026-05-11T20:51:50.065Z","0.0.9":"2026-05-12T13:13:38.762Z","0.0.10":"2026-05-17T18:12:42.422Z","0.0.11":"2026-05-18T19:55:55.981Z","0.0.13":"2026-07-28T15:46:11.856Z","0.0.14":"2026-07-28T16:53:16.333Z","0.0.15":"2026-07-31T21:10:54.775Z","0.0.16":"2026-08-01T04:59:04.846Z","0.0.17":"2026-08-09T09:12:28.470Z","0.0.18":"2026-08-09T15:41:07.831Z"},"bugs":{"url":"https://github.com/ashishnitw/shopify-utils/issues"},"license":"MIT","homepage":"https://github.com/ashishnitw/shopify-utils#readme","repository":{"type":"git","url":"git+https://github.com/ashishnitw/shopify-utils.git"},"description":"Reusable Shopify app utilities","maintainers":[{"name":"ashishnitw","email":"ashishnitw14@gmail.com"}],"readme":"# @ashishnitw/shopify-utils\n\nReusable Shopify app utilities — Polaris components, React hooks, server middleware, webhook handlers, and helper functions.\n\n## Installation\n\nAdd `.npmrc` to your project root:\n\n```\n@ashishnitw:registry=https://npm.pkg.github.com\n```\n\nThen install:\n\n```bash\nnpm install @ashishnitw/shopify-utils\n```\n\n## Package Structure\n\n```\n@ashishnitw/shopify-utils\n├── components/     # Polaris-based React UI components (ESM)\n├── hooks/          # React hooks for Shopify apps (ESM)\n├── server/         # Server-side utilities (CommonJS)\n│   ├── api/        # Shopify REST & GraphQL clients, bulk operations\n│   ├── middleware/  # Auth verification, session management, error handling, rate limiting, CSP\n│   └── webhooks/   # Webhook verification, registration, handlers, GDPR\n└── utils/          # Shared helpers (CommonJS) — logging, currency, dates, GraphQL, validators, errors\n```\n\n## Import Paths\n\n```js\n// Root — server + utils combined (CommonJS)\nconst { shopifyGet, formatMoney, createLogger } = require('@ashishnitw/shopify-utils');\n\n// Specific sub-packages\nimport { IndexTable, Page } from '@ashishnitw/shopify-utils/components';\nimport { useFetch, usePagination, useForm } from '@ashishnitw/shopify-utils/hooks';\nconst { shopifyGraphQL, createBulkQuery } = require('@ashishnitw/shopify-utils/server/api');\nconst { createWebhookRouter, createGDPRRouter } = require('@ashishnitw/shopify-utils/server/webhooks');\nconst { formatMoney, timeAgo, isValidShopDomain } = require('@ashishnitw/shopify-utils/utils');\n```\n\n---\n\n## Components\n\nAll components are React (JSX) and wrap [Shopify Polaris](https://polaris.shopify.com/) primitives.\n\n| Component | Description |\n|-----------|-------------|\n| `IndexTable` / `ConfigurableIndexTable` | Data table with sorting, selection, bulk actions, pagination |\n| `Page` / `ShopifyPage` | Page wrapper with automatic `SkeletonPage` loading state |\n| `ConfirmationModal` | Confirm/cancel modal dialog |\n| `EmptyState` | Empty state with illustration and CTA |\n| `SkeletonPage` / `SkeletonPageLayout` | Skeleton loading layout |\n| `SearchBar` | Debounced search input |\n| `DateRangePicker` | Date range picker with preset ranges and calendar |\n| `ResourcePicker` | App Bridge resource picker for products / collections / variants |\n| `Pagination` / `CursorPagination` | Cursor-based pagination controls |\n\n### Example\n\n```jsx\nimport { IndexTable, Page, SearchBar } from '@ashishnitw/shopify-utils/components';\n\nfunction OrdersPage() {\n  return (\n    <Page title=\"Orders\" loading={false}>\n      <SearchBar value={query} onChange={setQuery} placeholder=\"Search orders...\" />\n      <IndexTable\n        resourceName={{ singular: 'order', plural: 'orders' }}\n        items={orders}\n        headings={[{ title: 'Order' }, { title: 'Customer' }, { title: 'Total' }]}\n        renderRow={(order) => (\n          <IndexTable.Row id={order.id}>\n            <IndexTable.Cell>{order.name}</IndexTable.Cell>\n            <IndexTable.Cell>{order.customer}</IndexTable.Cell>\n            <IndexTable.Cell>{order.total}</IndexTable.Cell>\n          </IndexTable.Row>\n        )}\n      />\n    </Page>\n  );\n}\n```\n\n---\n\n## Hooks\n\n| Hook | Description |\n|------|-------------|\n| `useFetch` | Fetch with abort, retry, error handling, and optimistic updates |\n| `useAuthenticatedFetch` | `useFetch` with automatic Shopify session token injection |\n| `usePagination` | Cursor-based pagination state management |\n| `useDebounce` / `useDebouncedCallback` | Debounce values or callbacks |\n| `useToggle` | Boolean toggle state |\n| `useLocalStorage` | Persistent state backed by `localStorage` |\n| `useForm` | Form state, validation, dirty tracking, and submission |\n| `useBulkActions` | Multi-select / bulk action state for lists |\n| `useAppBridge` | Shopify App Bridge helpers (redirect, modal, session token) |\n\n### Example\n\n```jsx\nimport { useFetch, usePagination, useDebounce } from '@ashishnitw/shopify-utils/hooks';\n\nfunction ProductList() {\n  const [query, setQuery] = useState('');\n  const debouncedQuery = useDebounce(query, 300);\n  const pagination = usePagination({ initialPageSize: 20 });\n  const { data, loading } = useFetch(\n    `/api/products?q=${debouncedQuery}&after=${pagination.cursors.after}`\n  );\n\n  useEffect(() => {\n    if (data?.pageInfo) pagination.setCursors(data.pageInfo);\n  }, [data]);\n\n  return (/* render products with pagination controls */);\n}\n```\n\n---\n\n## Server Utilities\n\n### API Client (`server/api`)\n\n```js\nconst {\n  shopifyGet, shopifyPost, shopifyPut, shopifyDelete,\n  shopifyGraphQL,\n  createShopifyClient, createGraphQLClient,\n  runBulkQuery, createBulkQuery, pollBulkOperation,\n} = require('@ashishnitw/shopify-utils/server/api');\n\n// REST\nconst products = await shopifyGet(shop, accessToken, 'products.json');\n\n// GraphQL\nconst result = await shopifyGraphQL(shop, accessToken, `{\n  products(first: 10) {\n    edges { node { id title } }\n  }\n}`);\n\n// Bulk operations\nconst allProducts = await runBulkQuery(shop, accessToken, `{\n  products { edges { node { id title } } }\n}`);\n```\n\n### Webhooks (`server/webhooks`)\n\n```js\nconst {\n  createWebhookRouter,\n  createGDPRRouter,\n  registerWebhooks,\n  syncWebhooks,\n  WEBHOOK_TOPICS,\n} = require('@ashishnitw/shopify-utils/server/webhooks');\n\n// Mount webhook handler\napp.use('/webhooks', createWebhookRouter({\n  'app/uninstalled': async (shop, payload) => {\n    await cleanupShopData(shop);\n  },\n  'orders/create': async (shop, payload) => {\n    await processNewOrder(shop, payload);\n  },\n}));\n\n// Mount mandatory GDPR endpoints\napp.use('/webhooks/gdpr', createGDPRRouter({\n  onCustomerDataRequest: async (shop, payload) => { /* ... */ },\n  onCustomerRedact: async (shop, payload) => { /* ... */ },\n  onShopRedact: async (shop, payload) => { /* ... */ },\n}));\n\n// Register webhooks on app install\nawait registerWebhooks(shop, accessToken, [\n  { topic: 'app/uninstalled', address: 'https://myapp.com/webhooks' },\n  { topic: 'orders/create', address: 'https://myapp.com/webhooks' },\n]);\n```\n\n---\n\n## Utils\n\n| Utility | Key Exports |\n|---------|-------------|\n| **Logger** | `createLogger(namespace)`, `defaultLogger` |\n| **Currency** | `formatMoney`, `parseMoney`, `centsToDollars`, `dollarsToCents`, `SHOPIFY_CURRENCIES` |\n| **Dates** | `formatShopifyDate`, `parseShopifyDate`, `timeAgo`, `getDateRange`, `daysBetween` |\n| **GraphQL** | `buildGraphQLQuery`, `buildMutation`, `extractNodes`, `extractPageInfo`, `paginateQuery` |\n| **Validators** | `isValidShopDomain`, `sanitizeShopDomain`, `isValidShopifyGid`, `parseShopifyGid`, `toShopifyGid` |\n| **Constants** | `SHOPIFY_AUTH_SCOPES`, `SHOPIFY_ORDER_STATUS`, `SHOPIFY_PRODUCT_STATUS`, `SHOPIFY_API_VERSIONS` |\n| **Errors** | `ShopifyError`, `ShopifyAuthError`, `ShopifyRateLimitError`, `ShopifyNotFoundError`, `wrapError` |\n\n### Example\n\n```js\nconst {\n  formatMoney, timeAgo, isValidShopDomain,\n  buildGraphQLQuery, extractNodes,\n  createLogger, ShopifyAuthError,\n} = require('@ashishnitw/shopify-utils/utils');\n\nformatMoney(1999, 'USD');              // \"$19.99\"\ntimeAgo(new Date('2024-01-01'));       // \"1y ago\"\nisValidShopDomain('my-store.myshopify.com'); // true\n\nconst logger = createLogger('my-app');\nlogger.info('App started', { shop: 'example.myshopify.com' });\n```\n\n---\n\n## Environment Variables\n\nThe server utilities expect these environment variables:\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `SHOPIFY_API_KEY` | Yes | Shopify app API key |\n| `SHOPIFY_API_SECRET` | Yes | Shopify app API secret |\n| `SHOPIFY_HOST_NAME` | No | App hostname (default: `localhost`) |\n| `SHOPIFY_API_VERSION` | No | API version (default: `2025-04`) |\n| `MONGO_URI` | For sessions | MongoDB connection URI |\n| `MONGO_DB_NAME` | No | Database name (default: `shopify_app`) |\n| `LOG_LEVEL` | No | Log level: `error`, `warn`, `info`, `debug`, `trace` (default: `info`) |\n\n---\n\n## Publishing\n\n```bash\n# Authenticate with GitHub Packages\necho \"//npm.pkg.github.com/:_authToken=YOUR_TOKEN\" >> ~/.npmrc\n\n# Publish\nnpm publish\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}