{"_id":"@bridevmx/clip-ify","_rev":"11-e14e9a744df42213cc857e346728626d","name":"@bridevmx/clip-ify","dist-tags":{"latest":"0.1.10"},"versions":{"0.1.0":{"name":"@bridevmx/clip-ify","version":"0.1.0","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.0","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"3b5ab71086dfac0b7673fd5123f4a84f60b08991","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.0.tgz","fileCount":3,"integrity":"sha512-lgZvb205tXnb6Gp9cRA/N9Vkbu5idGFexWNzVGS0vO1Cw3hy2pvzK7S5+imnnFFA+QKByBHHhxdvSVTxUiZi5w==","signatures":[{"sig":"MEUCICrhgSPWAC0wgeZzK9T9kzRZtlM1za5MYWoOYrF2jjp6AiEAh2kUIhJ651f76cvF1ZUYmAOIpfyIKojdCapw3v3XeYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27085},"main":"dist/index.js","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.0_1755281055276_0.4521107336141028","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bridevmx/clip-ify","version":"0.1.1","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.1","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"6a1e6a16d58b5a990b73c4dd66eb44c2df634d77","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.1.tgz","fileCount":3,"integrity":"sha512-f9ZDQhe2triPcp7QwBw9pcNkfe3ergEp3f7hizLD0uT60RoFdcfnRk1OD/dVs3VeSlCmRAAICcIDPLKFYDR5ew==","signatures":[{"sig":"MEQCIE93usoHhisgoRjP4EfIk8NGDJXiYFGjKhbUArsrLVAjAiB55z+1K5M3WNnbN73RGR6EuB66DTeiA+Hyxi1sbaVCCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21580},"main":"dist/index.js","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.1_1755281347158_0.8530567376558782","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bridevmx/clip-ify","version":"0.1.2","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.2","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"813922ecb918c7392eb9e0b3c928c932dcc75607","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.2.tgz","fileCount":3,"integrity":"sha512-SvcScJncQOb3l9vlGuYHUnn55N1+LqgyTBGUo9WVQkXlfR+1IbwI2qxQQiRrUsD6nZF1rf+vt7AnN/9zoq8Z8A==","signatures":[{"sig":"MEYCIQDgG4tmpnLeAsAia2wVd42SIEH7w8B+zJEmeM0SBDATWgIhANDuwrNW+0sOOgXTkJ7JaVSVpObaVsLqizoechnLYeU1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21616},"main":"dist/index.js","gitHead":"672ca6f84be3e93fb5531d757b2aea572eec38e8","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.2_1755308977199_0.5125499046855497","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bridevmx/clip-ify","version":"0.1.3","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.3","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"e1304dc90a8bff6ec251a7b35817e5ebd3117718","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.3.tgz","fileCount":3,"integrity":"sha512-ln4GP181k3P9NCyfk0p0xEQf2ye3EGHIwy9b2y8iHxES1pfpJBlJysOYUna+/UZR4al6Rjzqb1eSG1O4Ln6dPg==","signatures":[{"sig":"MEQCIACHrhbAmEOzWnGX9N0xYVtGanUWnm9Ew3vjce5ZMiiUAiBtv8NULC9p+ZPQqW6o3KkiCxeDovxOFHg5tmLeTapG4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21395},"main":"dist/index.js","gitHead":"494dca3db9a26ecd6414f2256f874b7cb04090fd","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.3_1755363129757_0.4540266202254748","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bridevmx/clip-ify","version":"0.1.4","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.4","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"714369219cadab2489ba3c36327790c22f9dc878","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.4.tgz","fileCount":3,"integrity":"sha512-reINDoiKSGpi4N5pMRMpkZ2YOwLCZ3PW2BfZt+pTygSMGz+3BXjYk5RIb8FhWakhbXDIgz+Iym7TNbvE2uOi5w==","signatures":[{"sig":"MEYCIQDj3cJ63BrwG1G+mwp1GWP7C5Me3dt+Mspw/3qf4oZj6wIhANWiido349aj31WXQ7NTMtvUf9JVwPWabvDiqKuKhd8r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21409},"main":"dist/index.js","gitHead":"34f501d328c8a8228767ebf16468a9e412d719ee","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.4_1755363326050_0.8717628936559851","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bridevmx/clip-ify","version":"0.1.5","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.5","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"0c973e2c0030ffb659fb5290a2d058821784ae82","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.5.tgz","fileCount":3,"integrity":"sha512-ktxms5UewVflOi4d7ADG0w9igFiiFw1N1uIGh+5wLdLz9dbjy1qsprwILf5YQVE3VTF2KjRILrd6D/OSkJ8g2A==","signatures":[{"sig":"MEYCIQDwHCtJiA75piqAlFcpRXIPa50/nuauSLNn7Ietf2tasQIhAPJTgQBTfEFAjCK2c0VZvhSya7gC7V7XAmYd7kCSEwiQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21687},"main":"dist/index.js","gitHead":"34f501d328c8a8228767ebf16468a9e412d719ee","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.5_1755366572742_0.17583635432132771","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bridevmx/clip-ify","version":"0.1.6","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.6","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"6ae84fff64ba9b0bc618f86951ca822c67845201","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.6.tgz","fileCount":3,"integrity":"sha512-Bapc2irofCiO+OctJDmjqB0xx1u/dMkHCZHG6izZERFXOEL6rhujB6my+920IpII8C1Q2MO6ksSLHmKWH9Dsjg==","signatures":[{"sig":"MEQCIHaYx2WohZbKDVaWRuofKdk2wt7K9rKqZM9raWmkr9kwAiA/RQi/6K62m/4HRHY5Beu+LoejLCC36rcEM/PsALvWlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21194},"main":"dist/index.js","gitHead":"52f323f5b7c3fc40ea21b3480c4c6546c4e86367","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.6_1755459777681_0.33820391640933134","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bridevmx/clip-ify","version":"0.1.7","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.7","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"e04b317e64387240fcebbf88f26ccda4f6f09241","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.7.tgz","fileCount":3,"integrity":"sha512-R4MUS+bHhNxNVSxzH2bC05Z9osGFejRpnWwigxCaXWW5TINXOZAqL7DZLNesiDKc7k6pCVk9hiERk2eguDOWlQ==","signatures":[{"sig":"MEUCIDO2rcE4MLmQY58fAm22wgcg2D8lcMYBxJmEz4x+cN26AiEA7Z28bcphIbJsyBxGo8i569vJEoAU2YbY+Bx1Ny28+FM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20641},"main":"dist/index.js","gitHead":"52f323f5b7c3fc40ea21b3480c4c6546c4e86367","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.7_1755578015427_0.831017158665827","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@bridevmx/clip-ify","version":"0.1.8","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.8","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"bcc0b4681d5bc1a341562ac920fedb05807f5f28","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.8.tgz","fileCount":3,"integrity":"sha512-R1zg93lRoNomOtD8kLJLKRI+mSobUIGH0+rpv7UZ8Rg5evglYC58GfQBPJoOhwBro4uuVn9MuX7mtsOP83XUcQ==","signatures":[{"sig":"MEUCIEWpsVZRjFHycwHDlD4W/qQ/4aJkqVvKcMwmbkzhXZyqAiEAtM4/9VhHZT0l+oo71bl4sEZc8RLU04SCHj17G/354uQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20718},"main":"dist/index.js","gitHead":"52f323f5b7c3fc40ea21b3480c4c6546c4e86367","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.8_1755578204830_0.035515034532204615","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@bridevmx/clip-ify","version":"0.1.9","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","_id":"@bridevmx/clip-ify@0.1.9","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"homepage":"https://github.com/bridevmx/clip-ify#readme","bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"dist":{"shasum":"e9f3041c0177e44e0d2438ef58fcde665aaddef3","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.9.tgz","fileCount":3,"integrity":"sha512-6YWM5ve+0VmAK21iFi5NxpXw6EMsF1NSDAJ7mfvploRPxOhix46h/Lb3MovVEfAfwh5/PpFvhSRhH3W+kK89kA==","signatures":[{"sig":"MEUCIDp1nzT4eMynCbyR6By+FdkE0orPp5lSTmRZAuAktHdcAiEAucgmTJxUEYtlH0AI25AzKhLq+t4IXNuBiCYnGMmb0b0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49579},"main":"dist/index.js","gitHead":"4529028adfeda0ca4b31eef298ad200611f2c048","_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"repository":{"url":"git+https://github.com/bridevmx/clip-ify.git","type":"git"},"_npmVersion":"9.1.2","description":"A unofficial JavaScript client for the Clip API.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clip-ify_0.1.9_1755580723527_0.9693935166934848","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@bridevmx/clip-ify","version":"0.1.10","description":"A unofficial JavaScript client for the Clip API.","main":"dist/index.js","keywords":["clip","api","ecommerce","client"],"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bridevmx/clip-ify.git"},"bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"homepage":"https://github.com/bridevmx/clip-ify#readme","gitHead":"4529028adfeda0ca4b31eef298ad200611f2c048","_id":"@bridevmx/clip-ify@0.1.10","_nodeVersion":"22.17.1","_npmVersion":"9.1.2","dist":{"integrity":"sha512-gwUy/Zwg+IRfDfNUlZYjvX4VcmFJWp7il7UJIyEs3XFDEkD1IXiL8prwCrq1lOlA65NOwE5iUDWY5GnO5WMI5Q==","shasum":"7377f3ea9c1865636531fc18ea5c202bf18f7f32","tarball":"https://registry.npmjs.org/@bridevmx/clip-ify/-/clip-ify-0.1.10.tgz","fileCount":3,"unpackedSize":49615,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEbX14Z+UzPbPXq/Ip5jfkahOFLjid8/GFa4MtSwLhLMAiEAtCLi7lAVgcTVguDcAjyknzOoN7tLyKga8DjH2/9m/nw="}]},"_npmUser":{"name":"bridevmx","email":"bridevmx@gmail.com"},"directories":{},"maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/clip-ify_0.1.10_1755608769075_0.19949052894807529"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-15T18:04:15.213Z","modified":"2025-08-19T13:06:09.446Z","0.1.0":"2025-08-15T18:04:15.447Z","0.1.1":"2025-08-15T18:09:07.378Z","0.1.2":"2025-08-16T01:49:37.366Z","0.1.3":"2025-08-16T16:52:09.943Z","0.1.4":"2025-08-16T16:55:26.249Z","0.1.5":"2025-08-16T17:49:32.919Z","0.1.6":"2025-08-17T19:42:57.877Z","0.1.7":"2025-08-19T04:33:35.653Z","0.1.8":"2025-08-19T04:36:45.040Z","0.1.9":"2025-08-19T05:18:43.709Z","0.1.10":"2025-08-19T13:06:09.260Z"},"bugs":{"url":"https://github.com/bridevmx/clip-ify/issues"},"author":{"name":"Brian Marquez Hernandez"},"license":"MIT","homepage":"https://github.com/bridevmx/clip-ify#readme","keywords":["clip","api","ecommerce","client"],"repository":{"type":"git","url":"git+https://github.com/bridevmx/clip-ify.git"},"description":"A unofficial JavaScript client for the Clip API.","maintainers":[{"name":"bridevmx","email":"bridevmx@gmail.com"}],"readme":"# clip-ify\r\n\r\n[![npm version](https://badge.fury.io/js/clip-ify.svg)](https://www.npmjs.com/package/clip-ify)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n`clip-ify` es una biblioteca JavaScript ligera y fácil de usar, diseñada para interactuar con las APIs de e-commerce y descuentos de Clip. Proporciona una interfaz sencilla para obtener configuraciones de tiendas, categorías, productos y cupones.\r\n\r\n## Tabla de Contenidos\r\n\r\n*   [Instalación](#instalación)\r\n*   [Uso](#uso)\r\n    *   [Inicialización](#inicialización)\r\n    *   [Obtener Configuración de la Tienda](#obtener-configuración-de-la-tienda)\r\n    *   [Obtener Categorías](#obtener-categorías)\r\n    *   [Obtener Productos por Categoría](#obtener-productos-por-categoría)\r\n    *   [Obtener un Producto Específico](#obtener-un-producto-específico)\r\n    *   [Obtener Cupones](#obtener-cupones)\r\n*   [Modelos de Datos de Respuesta](#modelos-de-datos-de-respuesta)\r\n    *   [ShopConfig (Configuración de la Tienda)](#shopconfig-configuración-de-la-tienda)\r\n    *   [CategoryItem (Elemento de Categoría)](#categoryitem-elemento-de-categoría)\r\n    *   [ProductItem (Elemento de Producto)](#productitem-elemento-de-producto)\r\n    *   [CouponItem (Elemento de Cupón)](#couponitem-elemento-de-cupón)\r\n*   [Manejo de Errores](#manejo-de-errores)\r\n*   [Contribución](#contribución)\r\n*   [Licencia](#licencia)\r\n\r\n## Instalación\r\n\r\nPuedes instalar `clip-ify` usando npm o yarn:\r\n\r\n```bash\r\nnpm i @bridevmx/clip-ify\r\n# o\r\nyarn add @bridevmx/clip-ify\r\n```\r\n\r\n## Uso\r\n\r\n### Inicialización\r\n\r\nPrimero, importa la clase `Clipify` y crea una instancia.\r\n\r\n```javascript\r\n// En un entorno de módulo (Node.js, React, Vue, Angular, etc.)\r\nimport Clipify from '@bridevmx/clip-ify';\r\n\r\n// Si usas CDN (la clase Clipify estará disponible globalmente)\r\n// <script src=\"http://unpkg.com/@bridevmx/clip-ify@latest\"></script>\r\n\r\nconst clipClient = new Clipify();\r\n// Puedes especificar un baseUrl personalizado si es necesario:\r\n// const clipClient = new Clipify({ baseUrl: \"https://tu-api-personalizada.com\" });\r\n```\r\n\r\n### Obtener Configuración de la Tienda\r\n\r\nObtiene la información de configuración de una tienda específica. **Esta acción es crucial ya que de ella se obtiene el `proxyMerchantToken` necesario para otras operaciones.**\r\n\r\n```javascript\r\nlet proxyMerchantToken = null; // Variable para almacenar el token\r\n\r\ntry {\r\n    const shopName = 'Abarrotes123'; // Reemplaza con el nombre de tu tienda (slug)\r\n    const response = await clipClient.getConfig(shopName);\r\n\r\n    if (response.success && response.config) {\r\n        console.log('Configuración de la tienda:', response.config);\r\n        proxyMerchantToken = response.config.proxyMerchantToken;\r\n        console.log('Proxy Merchant Token obtenido:', proxyMerchantToken);\r\n\r\n        // Ejemplo: ahora puedes usar proxyMerchantToken en otras llamadas\r\n        // if (proxyMerchantToken) {\r\n        //     const categoriesResponse = await clipClient.getCategories(shopName);\r\n        //     console.log('Categorías para la tienda:', categoriesResponse.items);\r\n        // }\r\n\r\n    } else {\r\n        console.error('Error al obtener la configuración:', response.error);\r\n    }\r\n} catch (error) {\r\n    console.error('Error en la solicitud de configuración:', error.message);\r\n}\r\n```\r\n\r\n### Obtener Categorías\r\n\r\nObtiene una lista de categorías disponibles para una tienda.\r\n\r\n```javascript\r\nconst shopName = 'Abarrotes123'; // Reemplaza con el nombre de tu tienda\r\n\r\ntry {\r\n    const response = await clipClient.getCategories(shopName);\r\n\r\n    if (response.success) {\r\n        console.log('Categorías:', response.items);\r\n    } else {\r\n        console.error('Error al obtener categorías:', response.error);\r\n    }\r\n} catch (error) {\r\n    console.error('Error en la solicitud de categorías:', error.message);\r\n}\r\n```\r\n\r\n### Obtener Productos por Categoría\r\n\r\nRecupera una lista de productos para una categoría específica, usando el `proxyMerchantToken` y opcionalmente un `limit`.\r\n\r\n**Nota:** En esta respuesta, los objetos `ProductModifier` solo contendrán `modifierId` y `modifierName`. Para obtener los detalles completos de los modificadores (incluyendo `options`), debes usar el método `getProduct`.\r\n\r\n```javascript\r\n// Asegúrate de que proxyMerchantToken ya haya sido obtenido de getConfig()\r\nif (proxyMerchantToken) {\r\n    try {\r\n        const categoryId = 'ID_DE_LA_CATEGORIA'; // e.g., '603925d0-58a8-49ed-b5de-80a20185a5d2'\r\n        const limit = 10; // Opcional: número máximo de productos a retornar\r\n\r\n        const response = await clipClient.getProducts(categoryId, proxyMerchantToken, limit);\r\n\r\n        if (response.success) {\r\n            console.log('Productos:', response.items);\r\n        } else {\r\n            console.error('Error al obtener productos:', response.error);\r\n        }\r\n    } catch (error) {\r\n        console.error('Error en la solicitud de productos:', error.message);\r\n    }\r\n} else {\r\n    console.warn('proxyMerchantToken no disponible. No se pueden obtener productos.');\r\n}\r\n```\r\n\r\n### Obtener un Producto Específico\r\n\r\nObtiene los detalles completos de un solo producto por su ID. Esta respuesta incluye información detallada sobre modificadores (con sus opciones) y variantes.\r\n\r\n```javascript\r\n// Asegúrate de que proxyMerchantToken ya haya sido obtenido de getConfig()\r\nif (proxyMerchantToken) {\r\n    try {\r\n        const productId = 'ID_DEL_PRODUCTO'; // e.g., 'd2be2730-d352-4506-b0a4-fe145ce293d3'\r\n\r\n        const response = await clipClient.getProduct(productId, proxyMerchantToken);\r\n\r\n        if (response.success) {\r\n            console.log('Detalles del producto:', response.item);\r\n        } else {\r\n            console.error('Error al obtener el producto:', response.error);\r\n        }\r\n    } catch (error) {\r\n        console.error('Error en la solicitud de un solo producto:', error.message);\r\n    }\r\n} else {\r\n    console.warn('proxyMerchantToken no disponible. No se puede obtener el producto.');\r\n}\r\n```\r\n\r\n### Obtener Cupones\r\n\r\nRecupera una lista de cupones activos para una tienda.\r\n\r\n```javascript\r\n// Asegúrate de que proxyMerchantToken ya haya sido obtenido de getConfig()\r\nif (proxyMerchantToken) {\r\n    try {\r\n        const response = await clipClient.getCoupons(proxyMerchantToken);\r\n\r\n        if (response.success) {\r\n            console.log('Cupones activos:', response.items);\r\n        } else {\r\n            console.error('Error al obtener cupones:', response.error);\r\n        }\r\n    } catch (error) {\r\n        console.error('Error en la solicitud de cupones:', error.message);\r\n    }\r\n} else {\r\n    console.warn('proxyMerchantToken no disponible. No se pueden obtener cupones.');\r\n}\r\n```\r\n\r\n## Modelos de Datos de Respuesta\r\n\r\nAquí se detallan las estructuras de los objetos principales que la biblioteca devuelve, incluyendo los campos opcionales.\r\n\r\n### ShopConfig (Configuración de la Tienda)\r\n\r\nRepresenta la configuración detallada de una tienda.\r\n\r\n| Propiedad              | Tipo                               | Descripción                                                                 |\r\n| :--------------------- | :--------------------------------- | :-------------------------------------------------------------------------- |\r\n| `address`              | `object`                           | Detalles de la dirección de la tienda.                                      |\r\n| `address.addressType`  | `string \\| null`                   | Tipo de dirección (ej., \"Home\", \"Work\"). Puede ser `null`.                 |\r\n| `address.colony`       | `string`                           | Nombre de la colonia o barrio.                                              |\r\n| `address.firstAddress` | `string`                           | Línea principal de la dirección (ej., calle y número).                     |\r\n| `address.municipality` | `string`                           | Municipio o delegación.                                                    |\r\n| `address.postalCode`   | `string`                           | Código postal.                                                              |\r\n| `address.secondAddress`| `string`                           | Línea secundaria opcional de la dirección.                                 |\r\n| `address.state`        | `string`                           | Estado o provincia.                                                         |\r\n| `alias`                | `string`                           | Alias o nombre corto de la tienda.                                          |\r\n| `createdAt`            | `string`                           | Fecha y hora de creación de la configuración en formato ISO 8601.          |\r\n| `email`                | `string`                           | Correo electrónico de contacto del comercio.                               |\r\n| `fullAddress`          | `string`                           | Dirección completa formateada.                                              |\r\n| `image`                | `string`                           | URL de la imagen de perfil de la tienda.                                    |\r\n| `opengraphBanner`      | `string`                           | URL de la imagen del banner OpenGraph.                                      |\r\n| `phone`                | `string`                           | Número de teléfono de contacto.                                             |\r\n| `profileConfig`        | `object`                           | Configuración de visibilidad del perfil público.                            |\r\n| `profileConfig.profileActive` | `boolean`                   | Indica si el perfil público está activo.                                   |\r\n| `profileConfig.showAddress` | `boolean`                     | Indica si la dirección de la tienda debe mostrarse públicamente.           |\r\n| `profileConfig.showEmail` | `boolean`                       | Indica si el correo de la tienda debe mostrarse públicamente.              |\r\n| `profileConfig.showPhone` | `boolean`                       | Indica si el teléfono de la tienda debe mostrarse públicamente.            |\r\n| `proxyMerchantId`      | `string`                           | ID único del comercio.                                                      |\r\n| `proxyMerchantToken`   | `string`                           | **Token clave necesario para realizar otras llamadas a la API.**            |\r\n| `proxyUserId`          | `string`                           | ID único del usuario asociado.                                              |\r\n| `publicDescription`    | `string`                           | Descripción pública de la tienda.                                           |\r\n| `publicName`           | `string`                           | Nombre público de la tienda.                                                |\r\n| `storeConfiguration`   | `object \\| undefined`              | **Opcional:** Configuración detallada de la tienda, presente en respuestas más nuevas. |\r\n| `storeConfiguration.businessProfile` | `boolean`            | Indica si el perfil de negocio está habilitado.                            |\r\n| `storeConfiguration.contactInformation` | `object`          | Información de contacto detallada.                                         |\r\n| `storeConfiguration.contactInformation.email` | `string`    | Email de contacto.                                                         |\r\n| `storeConfiguration.contactInformation.fullname` | `string` | Nombre completo del contacto.                                              |\r\n| `storeConfiguration.contactInformation.phone` | `string`    | Número de teléfono de contacto.                                            |\r\n| `storeConfiguration.contactInformation.socialLinks` | `object`| Enlaces a redes sociales (ej. `facebook`, `tiktok`).                   |\r\n| `storeConfiguration.contactInformation.whatsapp` | `string` | Número de WhatsApp.                                                        |\r\n| `storeConfiguration.createdAt` | `string`                  | Timestamp de creación de la configuración de la tienda.                    |\r\n| `storeConfiguration.directPayments` | `boolean`             | Indica si los pagos directos están habilitados.                            |\r\n| `storeConfiguration.isPublished` | `boolean`                | Indica si la tienda está publicada.                                        |\r\n| `storeConfiguration.sharableCatalog` | `boolean`            | Indica si el catálogo es compartible.                                      |\r\n| `storeConfiguration.storeSettings` | `object`                | Configuraciones operativas de la tienda.                                   |\r\n| `storeConfiguration.storeSettings.abandonedCart` | `object` | Configuración de recordatorios de carritos abandonados.                  |\r\n| `storeConfiguration.storeSettings.abandonedCart.active` | `boolean` | Si los recordatorios están activos.                                     |\r\n| `storeConfiguration.storeSettings.abandonedCart.timeToReminder` | `number` | Tiempo antes de enviar el recordatorio (unidades no especificadas, asumir horas/días). |\r\n| `storeConfiguration.storeSettings.colorPaletteId` | `string` | ID de la paleta de colores del tema.                                      |\r\n| `storeConfiguration.storeSettings.deliveryPricing` | `Array<object>` | Zonas de entrega y sus precios.                                   |\r\n| `storeConfiguration.storeSettings.deliveryPricing[].price` | `number` | Precio de la entrega para la zona.                                       |\r\n| `storeConfiguration.storeSettings.deliveryPricing[].zipCodes` | `Array<object>` | Códigos postales incluidos en la zona.                               |\r\n| `storeConfiguration.storeSettings.deliverySettings` | `object` | Opciones generales de entrega.                                       |\r\n| `storeConfiguration.storeSettings.deliverySettings.fullDelivery` | `boolean` | Entrega completa disponible.                                           |\r\n| `storeConfiguration.storeSettings.deliverySettings.nearByDelivery` | `boolean` | Entrega cercana disponible.                                            |\r\n| `storeConfiguration.storeSettings.deliverySettings.pickUp` | `boolean` | Recogida en tienda disponible.                                            |\r\n| `storeConfiguration.storeSettings.displayAddress` | `boolean` | Mostrar dirección de la tienda.                                         |\r\n| `storeConfiguration.storeSettings.enableEmptyStockVisibility` | `boolean` | Mostrar productos sin stock.                                          |\r\n| `storeConfiguration.storeSettings.googleReviews` | `object` | Configuración de reseñas de Google.                                      |\r\n| `storeConfiguration.storeSettings.googleReviews.active` | `boolean` | Si la integración está activa.                                           |\r\n| `storeConfiguration.storeSettings.googleReviews.placeId` | `string` | ID de lugar de Google para las reseñas.                                   |\r\n| `storeConfiguration.storeSettings.heroImage` | `string`       | URL de la imagen principal (hero) de la tienda.                          |\r\n| `storeConfiguration.storeSettings.maxNearDeliveryTime` | `object` | Tiempo máximo de entrega cercana (`unit`, `value`).                      |\r\n| `storeConfiguration.storeSettings.minPreparationTime` | `object` | Tiempo mínimo de preparación (`unit`, `value`).                           |\r\n| `storeConfiguration.storeSettings.openingHours` | `Array<object>` | Horas de apertura de la tienda.                                    |\r\n| `storeConfiguration.storeSettings.openingHours[].dayFrom` | `number` | Día de inicio (0=Domingo, 6=Sábado).                                      |\r\n| `storeConfiguration.storeSettings.openingHours[].dayTo` | `number` | Día de fin (0=Domingo, 6=Sábado).                                         |\r\n| `storeConfiguration.storeSettings.openingHours[].intervals` | `Array<object>` | Intervalos de apertura/cierre (`opening`, `closing`).             |\r\n| `storeConfiguration.storeSettings.themeId` | `string`         | ID del tema visual de la tienda.                                          |\r\n| `storeConfiguration.updatedAt` | `string`                    | Timestamp de última actualización de la configuración de la tienda.       |\r\n| `updatedAt`            | `string`                           | Fecha y hora de la última actualización en formato ISO 8601.               |\r\n\r\n### CategoryItem (Elemento de Categoría)\r\n\r\nRepresenta una categoría de productos.\r\n\r\n| Propiedad       | Tipo               | Descripción                                                                 |\r\n| :-------------- | :----------------- | :-------------------------------------------------------------------------- |\r\n| `categoryId`    | `string`           | ID único de la categoría.                                                   |\r\n| `categoryName`  | `string`           | Nombre de la categoría.                                                     |\r\n| `description`   | `string \\| null`   | Descripción de la categoría. Puede ser `null`.                              |\r\n| `image`         | `string \\| null`   | URL de la imagen de la categoría. Puede ser `null`.                         |\r\n| `products`      | `Array<object>`    | **Opcional:** Lista de productos asociados a la categoría (solo `productId` y `productName`). Puede no estar presente en todas las listas de categorías. |\r\n| `slug`          | `string`           | Slug amigable para URL de la categoría.                                     |\r\n\r\n### ProductItem (Elemento de Producto)\r\n\r\nRepresenta un producto individual. Los detalles (`attributes`, `categories`, `modifiers.options`, `variants`) se completan completamente al usar `getProduct`. Al usar `getProducts`, solo se incluyen `modifierId` y `modifierName` en el array `modifiers`.\r\n\r\n| Propiedad         | Tipo                      | Descripción                                                                 |\r\n| :---------------- | :------------------------ | :-------------------------------------------------------------------------- |\r\n| `attributes`      | `Array<object> \\| undefined` | **Opcional:** Atributos del producto (ej. `[{name: \"Tamaño\", values: [\"Chico\", \"Grande\"]}]`). Presente en `getProduct`. |\r\n| `basePrice`       | `string \\| null`          | Precio base del producto antes de variantes o descuentos. Puede ser `null`. |\r\n| `categories`      | `Array<object> \\| undefined` | **Opcional:** Lista de categorías a las que pertenece el producto. Presente en `getProduct`. |\r\n| `ct`              | `string`                  | Hash de contenido o rastreador de cambios del producto.                    |\r\n| `description`     | `string`                  | Descripción detallada del producto.                                         |\r\n| `enabled`         | `boolean`                 | Indica si el producto está activo/habilitado.                               |\r\n| `image`           | `string`                  | URL de la imagen principal del producto.                                   |\r\n| `images`          | `Array<string>`           | Array de todas las URLs de imágenes del producto.                           |\r\n| `modifiers`       | `Array<object>`           | Lista de modificadores para el producto.                                    |\r\n| `modifiers[].modifierId` | `string`            | ID único del modificador.                                                  |\r\n| `modifiers[].modifierName` | `string`          | Nombre del modificador.                                                    |\r\n| `modifiers[].options` | `Array<object> \\| undefined` | **Opcional:** Opciones detalladas del modificador (presente en `getProduct`). |\r\n| `modifiers[].options[].modifierOptionId` | `string` | ID de la opción del modificador.                                         |\r\n| `modifiers[].options[].modifierOptionName` | `string` | Nombre de la opción del modificador.                                    |\r\n| `modifiers[].options[].price` | `string`       | Precio base de la opción del modificador.                                   |\r\n| `modifiers[].options[].extraPrice` | `string \\| null` | Precio adicional si se selecciona esta opción. Puede ser `null`.   |\r\n| `modifiers[].required` | `boolean \\| undefined` | **Opcional:** Indica si se debe seleccionar al menos una opción de este modificador (presente en `getProduct`). |\r\n| `modifiers[].selectionLimit` | `number \\| undefined` | **Opcional:** Número máximo de opciones que se pueden seleccionar de este modificador (presente en `getProduct`). |\r\n| `numberOfModifiers` | `number`                | Cantidad de modificadores asociados al producto.                           |\r\n| `numberOfVariants` | `number`                 | Cantidad de variantes para el producto.                                     |\r\n| `price`           | `string`                  | Precio actual del producto (puede ser el precio base o el de la variante más económica). |\r\n| `productId`       | `string`                  | ID único del producto.                                                      |\r\n| `productName`     | `string`                  | Nombre del producto.                                                        |\r\n| `sku`             | `string \\| null`          | SKU (Stock Keeping Unit) del producto. Puede ser `null`.                   |\r\n| `stock`           | `number`                  | Nivel de stock actual del producto (o de la variante por defecto).         |\r\n| `stockAlert`      | `string \\| null \\| undefined` | **Opcional:** Mensaje de alerta sobre el stock. Puede ser `null`. Presente en `getProduct`. |\r\n| `stockStatus`     | `string`                  | Estado del stock del producto (ej. \"AVAILABLE\", \"SOLD_OUT\").                |\r\n| `variants`        | `Array<object> \\| undefined` | **Opcional:** Array de variantes del producto (presente en `getProduct`). |\r\n| `variants[].variantId` | `string`              | ID único de la variante del producto.                                      |\r\n| `variants[].variantName` | `string`            | Nombre de la variante (ej. \"Chico\", \"Mediano\").                             |\r\n| `variants[].price` | `number`                | Precio de la variante.                                                     |\r\n| `variants[].stock` | `number`                | Nivel de stock de la variante.                                             |\r\n| `variants[].stockStatus` | `string`          | Estado del stock de la variante (ej. \"AVAILABLE\").                         |\r\n| `variants[].isAvailable` | `boolean`           | Indica si esta variante está disponible.                                  |\r\n| `variants[].isDefault` | `boolean`             | Indica si esta es la variante por defecto.                                 |\r\n| `variants[].description` | `string`            | Descripción de la variante (a menudo coincide con `variantName`).         |\r\n| `variants[].options` | `Array<object>`         | Pares clave-valor que describen los atributos de la variante.             |\r\n| `variants[].sku` | `string \\| null`            | SKU de la variante. Puede ser `null`.                                      |\r\n| `variants[].images` | `Array<string> \\| null`  | Imágenes específicas para esta variante. Puede ser `null`.                 |\r\n| `version`         | `string \\| null`          | Versión de los datos del producto. Puede ser `null`.                       |\r\n\r\n### CouponItem (Elemento de Cupón)\r\n\r\nRepresenta un cupón de descuento activo.\r\n\r\n| Propiedad          | Tipo             | Descripción                                                                 |\r\n| :----------------- | :--------------- | :-------------------------------------------------------------------------- |\r\n| `couponId`         | `string`         | ID único del cupón.                                                         |\r\n| `couponName`       | `string`         | Nombre del cupón.                                                           |\r\n| `discountType`     | `string \\| undefined` | Tipo de descuento (ej., \"PERCENTAGE\", \"FIXED_AMOUNT\"). **Opcional.**    |\r\n| `value`            | `number \\| undefined` | Valor del descuento (ej., 10 para 10% o 10.00 para $10). **Opcional.** |\r\n| `minPurchaseAmount`| `string \\| undefined` | Monto mínimo de compra para aplicar el cupón, como cadena decimal. **Opcional.** |\r\n| `validFrom`        | `string \\| undefined` | Fecha y hora ISO 8601 de inicio de validez del cupón. **Opcional.**     |\r\n| `validUntil`       | `string \\| undefined` | Fecha y hora ISO 8601 de vencimiento del cupón. **Opcional.**           |\r\n\r\n## Manejo de Errores\r\n\r\nTodos los métodos de `clip-ify` que realizan solicitudes de red son `async` y devuelven una `Promise`. Es crucial envolver las llamadas en bloques `try...catch` para manejar posibles errores de red, timeouts o respuestas de API con códigos de estado no exitosos.\r\n\r\nLa biblioteca lanzará un `Error` si:\r\n*   Faltan parámetros requeridos en los métodos (ej. `shopName`, `proxyMerchantToken`).\r\n*   La solicitud de red falla (ej. problemas de conexión, timeout).\r\n*   La API de tu backend devuelve un código de estado HTTP no exitoso (4xx, 5xx). En este caso, el mensaje de error del `Error` contendrá el mensaje de la API si está disponible, o un mensaje genérico como `Request failed with status 404`.\r\n\r\nLas respuestas de la API (`response.success: false`) indicarán errores específicos de la lógica de negocio de tu API (ej. tienda no encontrada, datos no parseados).\r\n\r\n## Contribución\r\n\r\n¡Las contribuciones son bienvenidas! Si encuentras un error o tienes una sugerencia de mejora, por favor abre un *issue* o envía un *pull request* en el repositorio de GitHub.\r\n\r\n## Contacto\r\nbridevmx@gmail.com\r\n\r\n## Licencia\r\n\r\nEste proyecto está bajo la Licencia MIT. Consulta el archivo [LICENSE](LICENSE) para más detalles.\r\n","readmeFilename":"README.md"}