{"id":13577563,"url":"https://github.com/vuestorefront/mage2vuestorefront","last_synced_at":"2025-04-05T12:30:42.007Z","repository":{"id":42343156,"uuid":"89145602","full_name":"vuestorefront/mage2vuestorefront","owner":"vuestorefront","description":"Magento to Vue-storefront datapump - synchronizes Products, Categories and Product-to-category links between your Magento2 API and NoSQL database of vue-storefront","archived":true,"fork":false,"pushed_at":"2024-03-19T09:33:35.000Z","size":525,"stargazers_count":199,"open_issues_count":23,"forks_count":111,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-03-28T03:56:49.141Z","etag":null,"topics":["backend","data-synchronization","elasticsearch","kue","magento","magento2","mongodb","mongodb-sync","multi-process","nosql","redis"],"latest_commit_sha":null,"homepage":"http://vuestorefront.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vuestorefront.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-23T13:55:23.000Z","updated_at":"2025-02-20T05:33:41.000Z","dependencies_parsed_at":"2024-01-14T08:32:30.396Z","dependency_job_id":"191d2c41-57d5-446f-a746-4c1b180f3c86","html_url":"https://github.com/vuestorefront/mage2vuestorefront","commit_stats":null,"previous_names":["divanteltd/mage2vuestorefront"],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuestorefront%2Fmage2vuestorefront","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuestorefront%2Fmage2vuestorefront/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuestorefront%2Fmage2vuestorefront/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuestorefront%2Fmage2vuestorefront/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vuestorefront","download_url":"https://codeload.github.com/vuestorefront/mage2vuestorefront/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247338518,"owners_count":20922985,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","data-synchronization","elasticsearch","kue","magento","magento2","mongodb","mongodb-sync","multi-process","nosql","redis"],"created_at":"2024-08-01T15:01:22.546Z","updated_at":"2025-04-05T12:30:36.998Z","avatar_url":"https://github.com/vuestorefront.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# mage2alokai\n\n### Stay connected\n\n[![GitHub Repo stars](https://img.shields.io/github/stars/vuestorefront/vue-storefront?style=social)](https://github.com/vuestorefront/vue-storefront)\n[![Twitter Follow](https://img.shields.io/twitter/follow/vuestorefront?style=social)](https://twitter.com/vuestorefront)\n[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCkm1F3Cglty3CE1QwKQUhhg?style=social)](https://www.youtube.com/c/VueStorefront)\n[![Discord](https://img.shields.io/discord/770285988244750366?label=join%20discord\u0026logo=Discord\u0026logoColor=white)](https://discord.vuestorefront.io)\n\n\nFor those who would love to work with Magento on backend but use NoSQL power on the frontend. Two way / real time data synchronizer.\n\nIt's part of [alokai project - first Progressive Web App for eCommerce](https://github.com/DivanteLtd/vue-storefront) with Magento2 support.\nSome details about the rationale and our goals [here](https://www.linkedin.com/pulse/magento2-nosql-database-pwa-support-piotr-karwatka)\n\nIt synchronizes all the products, attributes, taxrules, categories and links between products and categories.\n\nThis is multi-process data synchronizer between Magento to Alokai ElasticSearch database.\n\nAt this point synchronization works with following entities:\n- Products\n- Categories\n- Taxrules\n- Attributes\n- Product-to-categories\n- Reviews (require custom module Divante/ReviewApi to work)\n- Cms Blocks \u0026 Pages (require custom module [SnowdogApps/magento2-cms-api](https://github.com/SnowdogApps/magento2-cms-api))\n\nCategories and Product-to-categories links are additionaly stored in Redis cache for rapid-requests (for example from your WebAPI). Our other project [alokai-api](https://github.com/DivanteLtd/vue-storefront-api) exposes this database to be used in PWA/JS webapps.\n\nDatasync uses oauth + magento2 rest API to get the data.\nKUE is used for job queueing and multi-process/multi-tenant processing is enabled by default\nElasticSearch is used for NoSQL database\nRedis is used for KUE queue backend\n\nBy default all services are used without authorization and on default ports (check out config.js or ENV variables for change of this behavior). \n\n\n**Tutorial on installation / integration [manual for Alokai connectivity](https://medium.com/@piotrkarwatka/vue-storefront-how-to-install-and-integrate-with-magento2-227767dd65b2)**\n\n\n## How to perform full / initial import for Alokai\n\nTo get started with VS we must start with some very basics about the architecture; the project is backed by three separate Node.js applications\n\n### Alokai Architecture\n[alokai (Github)](https://github.com/DivanteLtd/vue-storefront) — is the main project where you can also find most of the documentation, issues mapped to further releases and other resources to start with — Vue.js on webpack.\n\n[alokai-api (Github)](https://github.com/DivanteLtd/vue-storefront-api) — is the API layer which provides the data to vue-storefront app — Node.js, Express; This project consist of docker instances for Redis and ElasticSearch required by mage2vuestorefront and pimcore2vuestorefront\n\nmage2alokai — THIS project -data bridges which are in charge of moving data back from Magento2 to Alokai data store.\n\nYou must install `alokai-api` locally. You may install it using the Alokai installer - see details. Or manually by executing the sequence of commands:\n\n```bash\ngit clone https://github.com/DivanteLtd/vue-storefront-api\ncd vue-storefront-api\nnpm install\nnpm run migrate\ndocker-compose up -d\nnpm run dev\n```\n\nThe key command is `docker-compose up -d` which runs the ElasticSearch and Redis instances - both required by `mage2vuestorefront`\n\n### Elastic 7 Support\n\nBy default, Alokai API docker files and config are based on Elastic 5.6. We plan to change the default Elastic version to 7 with the 1.11 stable release. As for now, the [Elastic 7 support](https://github.com/DivanteLtd/vue-storefront-api/pull/342) is marked as **experimental**. \n\nIn order to index data to Elastic 7 please make sure you set the proper `apiVersion` in the `config.js`:\n\n```js\n  elasticsearch: {\n    apiVersion: process.env.ELASTICSEARCH_API_VERSION || '7.1'\n  },\n```\n\nor just use the env variable:\n\n```bash\nexport ELASTICSEARCH_API_VERSION=7.1\n```\n\nStarting from [Elasitc 6 and 7](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html) we can have **just single** document type per single index. Alokai used to have `product`, `category` ... types defined in the `vue_storefront_catalog`.\n\nFrom now on, we're using the separate indexes per each entity type. The convention is: `${indexName}_${entityType}`. If your' **logical index name** is `vue_storefront_catalog` then it will be mapped to the **physical indexes** of: `vue_storefront_catalog_product`, `vue_storefront_catalog_category` ...\n\n### Initial Alokai import\n\nNow, You're ready to run the importer. Please check the [config file](https://github.com/DivanteLtd/mage2vuestorefront/blob/master/src/config.js). You may setup the Magento access data and URLs by config values or ENV variables.\n\nWe'll use in the following example - the ENV variables. The simplest command sequence to perform full reindex is:\n\n```bash\nexport TIME_TO_EXIT=2000\nexport MAGENTO_CONSUMER_KEY=byv3730rhoulpopcq64don8ukb8lf2gq\nexport MAGENTO_CONSUMER_SECRET=u9q4fcobv7vfx9td80oupa6uhexc27rb\nexport MAGENTO_ACCESS_TOKEN=040xx3qy7s0j28o3q0exrfop579cy20m\nexport MAGENTO_ACCESS_TOKEN_SECRET=7qunl3p505rubmr7u1ijt7odyialnih9\n\necho 'Default store - in our case United States / en'\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest\nexport INDEX_NAME=vue_storefront_catalog\n\nnode --harmony cli.js categories --removeNonExistent=true\nnode --harmony cli.js productcategories --partitions=1\nnode --harmony cli.js attributes --removeNonExistent=true\nnode --harmony cli.js taxrule --removeNonExistent=true\nnode --harmony cli.js products --removeNonExistent=true --partitions=1\nnode --harmony cli.js reviews\n```\n\nAfter installing the 3rd party Magneto module ([SnowdogApps/magento2-cms-api](https://github.com/SnowdogApps/magento2-cms-api)) there are two additional imports available:\n```\nnode --harmony cli.js blocks\nnode --harmony cli.js pages\n```\n\n**Please note:**\n- `--removeNonExistent` option means - all records that were found in the index but currently don't exist in the API feed - will be removed. Please use this option ONLY for the full reindex!\n- `INDEX_NAME` by default is set to the `vue_storefront_catalog` but You may set it to any other elastic search index name.\n- The `categories` importer option `--generateUniqueUrlKeys` is by default set to true. This is due the fact that in Magento2, the `category.url_key` field is not mandatory unique and from v. 1.7 Alokai uses the `category.url_key` to display the category details without any client's side modification.\n- `PRODUCTS_EXCLUDE_DISABLED` by default is set to `false`. To only import enabled products set this to `true`.\n\n**Cache invalidation:** Recent version of Alokai do support output caching. Output cache is being tagged with the product and categories id (products and categories used on specific page). Mage2vuestorefront can invalidate cache of product and category pages if You set the following ENV variables:\n\n```bash\nexport VS_INVALIDATE_CACHE_URL=http://localhost:3000/invalidate?key=aeSu7aip\u0026tag=\nexport VS_INVALIDATE_CACHE=1\n```\n\n- `VS_INVALIDATE_CACHE_URL` is a cache to the Alokai instance - used as a webhook to clear the output cache.\n\nPlease note:\nAfter data import - especially when You're not sure about the product attributes data types - please **reindex** ElasticSearch to establish the correct / current database schema. You may do this using [Database tool](https://github.com/DivanteLtd/vue-storefront/blob/master/doc/Database%20tool.md) in the `vue-storefront-api` folder:\n\n```bash\ncd vue-storefront-api\nnpm run db rebuild -- --indexName=vue_storefront_catalog\n```\n\nIf You like to create a new, empty index please run:\n```bash\ncd vue-storefront-api\nnpm run db new -- --indexName=vue_storefront_catalog\n```\n\n### Checking indexed data\n\nIf you want to see how many products were stored into Elastic data store, you can use Kibana to do so. Kibana is part of alokai-api. Once you start docker containers of alokai-api you can access it on http://localhost:5601/.\n\nTo see count of indexed products go to DEV tools and run following query:\n\n```\nGET vue_storefront_catalog/product/_count\n```\n\nSee https://www.elastic.co/guide/en/kibana/current/console-kibana.html to find out more.\n\n### Delta indexer\n\nAfter initial setup and full-reindex You may want to add indexer to the `crontab` to index only modified product records.\nThis is fairly easy - You just need to add the following command to crontab:\n\n```bash\nnode --harmony cli.js productsdelta --partitions=1\n```\n\nThis command will execute full reindex at first call - and then will be storing the last index date in the `.lastIndex.json` and downloading only these products which have `updated_at` \u003e last index date.\n\nIf you have a multistore setup and would like to use the delta indexer for each storeview you can not use the delta timestamp from `.lastIndex.json` for all stores; instead\nyou will need to set the `INDEX_META_PATH` to a unique value for each store you are indexing. For instance:\n\n```\nexport INDEX_META_PATH=.lastIndex-UK.json \u0026\u0026 node --harmony cli.js productsdelta --partitions=1\n```\n\nPlease note: Magento2 has a bug with altering `updated_at` field. Please install [a fix for that](https://github.com/codepeak/magento2-productfix) before using this method: \n\n\n```bash\ncomposer require codepeak/magento2-productfix\nphp bin/magento cache:flush\n```\n\n### Parent products updates \n\nPlease note if there is a `simple` product update request coming from Delta Indexer or On Demand indexer `mage2vuestorefront` will - by default - check and update the `configurable`/parent product as well. The parent product update is scheduled in the `productsworker` mode - using KUE queue. Please make sure You're runinng at least one worker instance to process these on-demand request:\n\n```bash\ncd mage2vuestorefront/src\nexport TIME_TO_EXIT=2000\nexport MAGENTO_CONSUMER_KEY=byv3730rhoulpopcq64don8ukb8lf2gq\nexport MAGENTO_CONSUMER_SECRET=u9q4fcobv7vfx9td80oupa6uhexc27rb\nexport MAGENTO_ACCESS_TOKEN=040xx3qy7s0j28o3q0exrfop579cy20m\nexport MAGENTO_ACCESS_TOKEN_SECRET=7qunl3p505rubmr7u1ijt7odyialnih9\nexport PORT=6060\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest\n\nnode --harmony cli.js productsworker\n```\n\nThis second process will take care of indexing the parent products updates whetever any of it's  `configurable_children` simple products has been changed.\n\n### On-demand indexer (experimental!)\n\nMage2nosql supports an on-demand indexer - where Magento calls a special webhook to update modified products.\nIn the current version the webhook notifies mage2vuestorefront about changed product SKUs and mage2vuestorefront pulls the modified products data via Magento2 APIs.\n\nFirst. You should install [Magento2 module called VsBridge](https://github.com/DivanteLtd/magento2-vsbridge)\nSecond. Deploy mage2vuestorefront on the server.\n\nThen You may want to start a webapi process:\n\n```bash\ncd mage2vuestorefront/src\nexport TIME_TO_EXIT=2000\nexport MAGENTO_CONSUMER_KEY=byv3730rhoulpopcq64don8ukb8lf2gq\nexport MAGENTO_CONSUMER_SECRET=u9q4fcobv7vfx9td80oupa6uhexc27rb\nexport MAGENTO_ACCESS_TOKEN=040xx3qy7s0j28o3q0exrfop579cy20m\nexport MAGENTO_ACCESS_TOKEN_SECRET=7qunl3p505rubmr7u1ijt7odyialnih9\nexport PORT=6060\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest\n\nnode --harmony webapi.js\n```\n\nThe API will be listening on port 6060. Typically non-standard ports like this one are not exposed on the firewall. Please consider setting up [simple nginx proxy for this service](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04).\n\nAnyway - this API must be publicly available via Internet OR You must have the mage2vuestorefront installed on the same machine like Magento2.\n\nGo to Your Magento2 admin panel, then to Stores -\u003e Configuration -\u003e VsBridge and set-up \"Edit product\" url to: `http://localhost:6060/magento/products/update`. **Please note:** Product delete endpoint hasn't been implemented yet and it's good chance for Your PR.\n\nAfter having the webapi up and runing and this endpoint set, any Product save action will call `POST http://localhost:6060/magento/products/update` with the body set to `{\"sku\": [\"modified-sku-list\"]}`.\n\nWebapi will [add the products to the queue](https://github.com/DivanteLtd/mage2vuestorefront/blob/b44e7ede9aeb27f308e2a87033251a2491640da8/src/api/routes/magento.js#L19).\n\nPlease run the queue worker to process all the queued updates (You may run multiple queue workers even distributed across many machines):\n\n```bash\ncd mage2vuestorefront/src\nexport TIME_TO_EXIT=2000\nexport MAGENTO_CONSUMER_KEY=byv3730rhoulpopcq64don8ukb8lf2gq\nexport MAGENTO_CONSUMER_SECRET=u9q4fcobv7vfx9td80oupa6uhexc27rb\nexport MAGENTO_ACCESS_TOKEN=040xx3qy7s0j28o3q0exrfop579cy20m\nexport MAGENTO_ACCESS_TOKEN_SECRET=7qunl3p505rubmr7u1ijt7odyialnih9\nexport PORT=6060\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest\n\nnode --harmony cli.js productsworker\n```\n\n**Please note:** We're using [kue based on Redis queue](https://github.com/Automattic/kue) which may be configured via `src/config.js` - `kue` + `redis` section.\n\n **Please note:** Redis now supports auth. In order to use Redis with auth simply pass the password to the `REDIS_AUTH` env variable.\n\n\n### Multistore setup\n\nMultiwebsite support starts with the ElasticSearch indexing. Basically - each store has it's own ElasticSearch index and should be populated separately using [mage2vuestorefront](https://github.com/DivanteLtd/mage2vuestorefront) tool.\n\nThe simplest script to index multi site:\n\n```bash\nexport TIME_TO_EXIT=2000\nexport MAGENTO_CONSUMER_KEY=byv3730rhoulpopcq64don8ukb8lf2gq\nexport MAGENTO_CONSUMER_SECRET=u9q4fcobv7vfx9td80oupa6uhexc27rb\nexport MAGENTO_ACCESS_TOKEN=040xx3qy7s0j28o3q0exrfop579cy20m\nexport MAGENTO_ACCESS_TOKEN_SECRET=7qunl3p505rubmr7u1ijt7odyialnih9\n\necho 'German store - de'\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest/de\nexport INDEX_NAME=vue_storefront_catalog_de\n\nnode --harmony cli.js categories --removeNonExistent=true\nnode --harmony cli.js productcategories --partitions=1\nnode --harmony cli.js attributes --removeNonExistent=true\nnode --harmony cli.js taxrule --removeNonExistent=true\nnode --harmony cli.js products --removeNonExistent=true --partitions=1\n\necho 'Italian store - it'\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest/it  \nexport INDEX_NAME=vue_storefront_catalog_it\n\nnode --harmony cli.js categories --removeNonExistent=true\nnode --harmony cli.js productcategories --partitions=1\nnode --harmony cli.js attributes --removeNonExistent=true\nnode --harmony cli.js taxrule --removeNonExistent=true\nnode --harmony cli.js products --removeNonExistent=true --partitions=1\n\necho 'Default store - in our case United States / en'\nexport MAGENTO_URL=http://demo-magento2.vuestorefront.io/rest\nexport INDEX_NAME=vue_storefront_catalog\n\nnode --harmony cli.js categories --removeNonExistent=true\nnode --harmony cli.js productcategories --partitions=1\nnode --harmony cli.js attributes --removeNonExistent=true\nnode --harmony cli.js taxrule --removeNonExistent=true\nnode --harmony cli.js products --removeNonExistent=true --partitions=1\n```\n\nAs You may see it's just a **it** or **de** store code which is added to the base Magento2 REST API urls that makes the difference and then the **INDEX_NAME** set to the dedicated index name.\n\nIn the result You should get:\n- *vue_storefront_catalog_it* - populated with the \"it\" store data\n- *vue_storefront_catalog_de* - populated with the \"it\" store data\n- *vue_storefront_catalog* - populated with the \"default\" store data\n\nThen, to use these indexes in the Alokai You should index the database schema using the `alokai-api` db tool:\n\n```bash\nnpm run db rebuild -- --indexName=vue_storefront_catalog_it\nnpm run db rebuild -- --indexName=vue_storefront_catalog_de\nnpm run db rebuild -- --indexName=vue_storefront_catalog\n```\n\nMore on \u003ca href=\"https://github.com/DivanteLtd/vue-storefront/blob/master/doc/Multistore%20setup.md\"\u003ehow to setup Alokai in the Multistore mode\u003c/a\u003e.\n\n### Indexing configurable products attributes for filters\n\nIf You like to have Category filter working with configurable products - You need to expand the `product.configurable_children.attrName` to `product.attrName_options` array. This is automatically done by [mage2vuestorefront](https://github.com/DivanteLtd/mage2vuestorefront) for all attributes set as `product.configurable_options` (by default: color, size). If You like to add additional fields like `manufacturer` to the filters You need to expand `product.manufacturer_options` field. The easiest way to do so is to set `config.product.expandConfigurableFilters` to `['manufacturer']` and re-run the `mage2vuestorefront` indexer.\n\n## FAQ\n\nHere You can find some frequently asked questions answered:\n\n### I've been playing with Alokai for quite a while now and now I see that my catalog rule (-20% on all products) is not applied in one shop.\n\nPlease make sure that You've got the `config.synchronizeCatalogSpecialPrices` (env: `PRODUCTS_SPECIAL_PRICES`) and `config.renderCatalogRegularPrices` (env: `PRODUCTS_RENDER_PRICES`) set to `true` (default is `false`). Otherwise only the catalog prices will be synced (without dynamic pricing rules applied). You can also use the Alokai [dynamic-pricing option](https://divanteltd.github.io/vue-storefront/guide/integrations/direct-prices-sync.html) for the same purpose.\n\n\n## Advanced usage\n\nStart Elasticsearch and Redis:\n- `docker-compose up`\n\nInstall:\n- `npm install`\n- `cd src`\n\nConfig - see: config.js or use following ENV variables: \n- `MAGENTO_URL`\n- `MAGENTO_CONSUMER_KEY`\n- `MAGENTO_CONSUMER_SECRET`\n- `MAGENTO_ACCESS_TOKEN`\n- `MAGENTO_ACCESS_TOKEN_SECRET`\n- `DATABASE_URL` (default: 'elasticsearch://localhost:9200/vue_storefront_catalog')\n\n\nRun:\n- `cd src/` and then:\n- `node --harmony cli.js fullreindex` - synchronizes all the categories, products and links between products and categories\n\nOther commands supported:\n- `node --harmony cli.js products --partitions=10`\n- `node --harmony cli.js products --partitions=10 --initQueue=false` - run the products sync worker (product sync jobs should be populated eslewhere - it's used to run multi-tenant environment of workers)\n- `node --harmony cli.js products --partitions=10 --delta=true` - check products changed since last run; compared by updated_at field\n- `node --harmony cli.js productcategories` - to synchronize the links between products and categories it *should be run before* products synchronization because it populates Redis cache assigments for product-to-category link\n- `node --harmony cli.js categories`\n- `node --harmony cli.js products --adapter=magento --partitions=1 --skus=24-WG082-blue,24-WG082-pink`  - to pull out only selected SKUs\n- `node --harmony cli.js productsworker --adapter=magento --partitions=10`  - run queue worker for pulling out individual products (jobs can be assigned by webapi.js microservice triggers; it can be called by webhook for example from within Magento2 plugin)\n- `node --harmony webapi.js` - run localhost:3000 service endpoint for adding queue tasks\n\nWebAPI:\n- `node --harmony webapi.js`\n- `curl localhost:8080/api/magento/products/pull/WT09-XS-Purple` - to schedule data refresh for SKU=WT09-XS-Purple\n- `node --harmony cli.js productsworker` - to run pull request processor \n\nAvailable options:\n- `partitions=10` - number of concurent processes, by default number of CPUs core given\n- `adapter=magento` - for now only Magento is supported\n- `delta` - sync products changed from last run\n- command names: `products` / `attributes` / `taxrule` / `categories` / `productsworker` / `productcategories` / `productsdelta`\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvuestorefront%2Fmage2vuestorefront","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvuestorefront%2Fmage2vuestorefront","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvuestorefront%2Fmage2vuestorefront/lists"}