@things-factory/integration-marketplace 5.0.14 → 6.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/lazada/client/lazada.js +2 -2
- package/dist-server/controllers/lazada/client/lazada.js.map +1 -1
- package/dist-server/controllers/magento/apis/create-order-ship.js +1 -1
- package/dist-server/controllers/magento/apis/create-order-ship.js.map +1 -1
- package/dist-server/controllers/shopee/index.js +10 -1
- package/dist-server/controllers/shopee/index.js.map +1 -1
- package/dist-server/controllers/shopee/platform-action.js +33 -1
- package/dist-server/controllers/shopee/platform-action.js.map +1 -1
- package/dist-server/controllers/shopee/refresh-access-token.js +2 -1
- package/dist-server/controllers/shopee/refresh-access-token.js.map +1 -1
- package/dist-server/controllers/shopee/shopee.js +81 -0
- package/dist-server/controllers/shopee/shopee.js.map +1 -1
- package/dist-server/controllers/shopify/apis/get-store-orders.js +45 -30
- package/dist-server/controllers/shopify/apis/get-store-orders.js.map +1 -1
- package/dist-server/controllers/shopify/apis/get-store-products.js +5 -10
- package/dist-server/controllers/shopify/apis/get-store-products.js.map +1 -1
- package/dist-server/controllers/shopify/shopify.js +15 -19
- package/dist-server/controllers/shopify/shopify.js.map +1 -1
- package/dist-server/controllers/store-api/index.js +32 -4
- package/dist-server/controllers/store-api/index.js.map +1 -1
- package/dist-server/controllers/tiktok/apis/get-store-order.js +20 -18
- package/dist-server/controllers/tiktok/apis/get-store-order.js.map +1 -1
- package/dist-server/controllers/tiktok/apis/get-store-orders.js +1 -1
- package/dist-server/controllers/tiktok/apis/get-store-orders.js.map +1 -1
- package/dist-server/controllers/tiktok/apis/update-order-status.js +4 -4
- package/dist-server/controllers/tiktok/apis/update-order-status.js.map +1 -1
- package/dist-server/controllers/tiktok/platform-action.js +14 -3
- package/dist-server/controllers/tiktok/platform-action.js.map +1 -1
- package/dist-server/engine/connector/lazada-connector.js +5 -5
- package/dist-server/engine/connector/lazada-connector.js.map +1 -1
- package/dist-server/engine/task/marketplace-api.js +4 -4
- package/dist-server/engine/task/marketplace-api.js.map +1 -1
- package/dist-server/entities/marketplace-distributor.js +3 -4
- package/dist-server/entities/marketplace-distributor.js.map +1 -1
- package/dist-server/entities/marketplace-setting.js +3 -4
- package/dist-server/entities/marketplace-setting.js.map +1 -1
- package/dist-server/entities/marketplace-store.js +3 -4
- package/dist-server/entities/marketplace-store.js.map +1 -1
- package/dist-server/entities/marketplace-transporter.js +6 -6
- package/dist-server/entities/marketplace-transporter.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/create-marketplace-distributor.js +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/create-marketplace-distributor.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributor.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributor.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributors.js +3 -2
- package/dist-server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributors.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/marketplace-distributor-query.js +8 -6
- package/dist-server/graphql/resolvers/marketplace-distributor/marketplace-distributor-query.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/update-marketplace-distributor.js +4 -2
- package/dist-server/graphql/resolvers/marketplace-distributor/update-marketplace-distributor.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-distributor/update-multiple-marketplace-distributor.js +6 -3
- package/dist-server/graphql/resolvers/marketplace-distributor/update-multiple-marketplace-distributor.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/create-marketplace-setting.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-setting/create-marketplace-setting.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/delete-marketplace-setting.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-setting/delete-marketplace-setting.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/delete-marketplace-settings.js +2 -1
- package/dist-server/graphql/resolvers/marketplace-setting/delete-marketplace-settings.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/marketplace-setting-query.js +7 -5
- package/dist-server/graphql/resolvers/marketplace-setting/marketplace-setting-query.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/update-marketplace-setting.js +8 -2
- package/dist-server/graphql/resolvers/marketplace-setting/update-marketplace-setting.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-setting/update-multiple-marketplace-setting.js +6 -3
- package/dist-server/graphql/resolvers/marketplace-setting/update-multiple-marketplace-setting.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/create-marketplace-store.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-store/create-marketplace-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/delete-marketplace-store.js +4 -4
- package/dist-server/graphql/resolvers/marketplace-store/delete-marketplace-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/delete-marketplace-stores.js +4 -3
- package/dist-server/graphql/resolvers/marketplace-store/delete-marketplace-stores.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/lazada/deactivate-lazada-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/lazada/deactivate-lazada-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/lazada/generate-lazada-access-token.js +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/lazada/generate-lazada-access-token.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/lazada/get-lazada-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/magento/activate-magento-store.js +4 -2
- package/dist-server/graphql/resolvers/marketplace-store/magento/activate-magento-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/magento/deactivate-magento-store.js +3 -4
- package/dist-server/graphql/resolvers/marketplace-store/magento/deactivate-magento-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/magento/get-magento-auth-url.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-store/magento/get-magento-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/marketplace-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/marketplace-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/marketplace-stores.js +1 -2
- package/dist-server/graphql/resolvers/marketplace-store/marketplace-stores.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/shopee/deactivate-shopee-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/shopee/deactivate-shopee-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/shopee/generate-shopee-access-token.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-store/shopee/generate-shopee-access-token.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/shopee/get-shopee-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/shopify/deactivate-shopify-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/shopify/deactivate-shopify-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/shopify/get-shopify-auth-url.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/shopify/get-shopify-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/update-marketplace-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/update-marketplace-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/update-multiple-marketplace-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/update-multiple-marketplace-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/woocommerce/deactivate-woocommerce-store.js +4 -4
- package/dist-server/graphql/resolvers/marketplace-store/woocommerce/deactivate-woocommerce-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/woocommerce/get-woocommerce-auth-url.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-store/woocommerce/get-woocommerce-auth-url.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/zalora/deactivate-zalora-store.js +3 -3
- package/dist-server/graphql/resolvers/marketplace-store/zalora/deactivate-zalora-store.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/zalora/generate-zalora-access-token.js +1 -1
- package/dist-server/graphql/resolvers/marketplace-store/zalora/generate-zalora-access-token.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/create-marketplace-transporter.js +4 -4
- package/dist-server/graphql/resolvers/marketplace-transporter/create-marketplace-transporter.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporter.js +2 -2
- package/dist-server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporter.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporters.js +2 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporters.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/marketplace-transporter-query.js +10 -6
- package/dist-server/graphql/resolvers/marketplace-transporter/marketplace-transporter-query.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/update-marketplace-transporter.js +5 -2
- package/dist-server/graphql/resolvers/marketplace-transporter/update-marketplace-transporter.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-transporter/update-multiple-marketplace-transporter.js +6 -3
- package/dist-server/graphql/resolvers/marketplace-transporter/update-multiple-marketplace-transporter.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/accept-store-order-cancellation.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/cancel-store-order.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/get-store-order-document.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/get-store-order-items.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/get-store-order.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/get-store-orders.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/reject-store-order-cancellation.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/set-store-order-status-packed-by-marketplace.js.map +1 -1
- package/dist-server/graphql/resolvers/store-order/set-store-order-status-ready-to-ship.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/create-store-product-variations.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/create-store-product.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/delete-store-product.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/get-store-product-brands.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/get-store-product-categories.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/get-store-product-category-attributes.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/get-store-product.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/get-store-products.js.map +1 -1
- package/dist-server/graphql/resolvers/store-product/update-store-product.js.map +1 -1
- package/dist-server/routers/magento-private-router.js +7 -8
- package/dist-server/routers/magento-private-router.js.map +1 -1
- package/dist-server/routers/shopify-install-private-router.js +8 -9
- package/dist-server/routers/shopify-install-private-router.js.map +1 -1
- package/dist-server/routers/shopify-install-public-router.js +2 -3
- package/dist-server/routers/shopify-install-public-router.js.map +1 -1
- package/dist-server/routers/shopify-private-router.js +6 -7
- package/dist-server/routers/shopify-private-router.js.map +1 -1
- package/dist-server/routers/shopify-public-router.js +7 -8
- package/dist-server/routers/shopify-public-router.js.map +1 -1
- package/dist-server/routers/woocommerce-router.js +6 -6
- package/dist-server/routers/woocommerce-router.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -16
- package/server/controllers/lazada/client/lazada.ts +2 -1
- package/server/controllers/magento/apis/create-order-ship.ts +1 -1
- package/server/controllers/shopee/apis2/create-shipping-document.ts +27 -0
- package/server/controllers/shopee/apis2/echo.ts +14 -0
- package/server/controllers/shopee/apis2/get-logistics-param.ts +66 -0
- package/server/controllers/shopee/apis2/get-shipping-document-result.ts +21 -0
- package/server/controllers/shopee/apis2/get-store-logistics.ts +23 -0
- package/server/controllers/shopee/apis2/get-store-order-by-batch.ts +97 -0
- package/server/controllers/shopee/apis2/get-store-order-document.ts +39 -0
- package/server/controllers/shopee/apis2/get-store-order-payout-dates.ts +33 -0
- package/server/controllers/shopee/apis2/get-store-order-transaction-details.ts +28 -0
- package/server/controllers/shopee/apis2/get-store-order.ts +93 -0
- package/server/controllers/shopee/apis2/get-store-orders.ts +40 -0
- package/server/controllers/shopee/apis2/get-store-product-variations.ts +17 -0
- package/server/controllers/shopee/apis2/get-store-product.ts +105 -0
- package/server/controllers/shopee/apis2/get-store-products.ts +28 -0
- package/server/controllers/shopee/apis2/get-store-refund-order-details.ts +39 -0
- package/server/controllers/shopee/apis2/get-store-refund-orders.ts +37 -0
- package/server/controllers/shopee/apis2/get-tracking-number.ts +17 -0
- package/server/controllers/shopee/apis2/index.ts +20 -0
- package/server/controllers/shopee/apis2/init-logistics.ts +39 -0
- package/server/controllers/shopee/apis2/update-store-product-stock.ts +26 -0
- package/server/controllers/shopee/apis2/update-store-product-variation-stock.ts +28 -0
- package/server/controllers/shopee/index.ts +11 -2
- package/server/controllers/shopee/platform-action.ts +36 -0
- package/server/controllers/shopee/refresh-access-token.ts +78 -0
- package/server/controllers/shopee/shopee.ts +95 -0
- package/server/controllers/shopify/apis/get-store-orders.ts +46 -30
- package/server/controllers/shopify/apis/get-store-products.ts +3 -8
- package/server/controllers/shopify/shopify.ts +15 -15
- package/server/controllers/store-api/index.ts +14 -2
- package/server/controllers/tiktok/apis/get-store-order.ts +26 -24
- package/server/controllers/tiktok/apis/get-store-orders.ts +1 -1
- package/server/controllers/tiktok/apis/update-order-status.ts +4 -4
- package/server/controllers/tiktok/platform-action.ts +14 -14
- package/server/engine/connector/lazada-connector.ts +5 -4
- package/server/engine/task/marketplace-api.ts +4 -3
- package/server/graphql/resolvers/marketplace-distributor/create-marketplace-distributor.ts +2 -2
- package/server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributor.ts +4 -3
- package/server/graphql/resolvers/marketplace-distributor/delete-marketplace-distributors.ts +6 -3
- package/server/graphql/resolvers/marketplace-distributor/marketplace-distributor-query.ts +13 -9
- package/server/graphql/resolvers/marketplace-distributor/update-marketplace-distributor.ts +5 -5
- package/server/graphql/resolvers/marketplace-distributor/update-multiple-marketplace-distributor.ts +7 -3
- package/server/graphql/resolvers/marketplace-setting/create-marketplace-setting.ts +3 -3
- package/server/graphql/resolvers/marketplace-setting/delete-marketplace-setting.ts +4 -4
- package/server/graphql/resolvers/marketplace-setting/delete-marketplace-settings.ts +9 -7
- package/server/graphql/resolvers/marketplace-setting/marketplace-setting-query.ts +11 -8
- package/server/graphql/resolvers/marketplace-setting/update-marketplace-setting.ts +9 -3
- package/server/graphql/resolvers/marketplace-setting/update-multiple-marketplace-setting.ts +32 -29
- package/server/graphql/resolvers/marketplace-store/create-marketplace-store.ts +3 -2
- package/server/graphql/resolvers/marketplace-store/delete-marketplace-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/delete-marketplace-stores.ts +6 -3
- package/server/graphql/resolvers/marketplace-store/lazada/deactivate-lazada-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/lazada/generate-lazada-access-token.ts +2 -2
- package/server/graphql/resolvers/marketplace-store/lazada/get-lazada-auth-url.ts +1 -1
- package/server/graphql/resolvers/marketplace-store/magento/activate-magento-store.ts +5 -3
- package/server/graphql/resolvers/marketplace-store/magento/deactivate-magento-store.ts +4 -4
- package/server/graphql/resolvers/marketplace-store/magento/get-magento-auth-url.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/marketplace-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/marketplace-stores.ts +3 -3
- package/server/graphql/resolvers/marketplace-store/shopee/deactivate-shopee-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/shopee/generate-shopee-access-token.ts +3 -3
- package/server/graphql/resolvers/marketplace-store/shopee/get-shopee-auth-url.ts +1 -1
- package/server/graphql/resolvers/marketplace-store/shopify/deactivate-shopify-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/shopify/get-shopify-auth-url.ts +4 -4
- package/server/graphql/resolvers/marketplace-store/update-marketplace-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/update-multiple-marketplace-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/woocommerce/deactivate-woocommerce-store.ts +5 -5
- package/server/graphql/resolvers/marketplace-store/woocommerce/get-woocommerce-auth-url.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/zalora/deactivate-zalora-store.ts +4 -3
- package/server/graphql/resolvers/marketplace-store/zalora/generate-zalora-access-token.ts +2 -2
- package/server/graphql/resolvers/marketplace-transporter/create-marketplace-transporter.ts +7 -5
- package/server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporter.ts +4 -4
- package/server/graphql/resolvers/marketplace-transporter/delete-marketplace-transporters.ts +9 -7
- package/server/graphql/resolvers/marketplace-transporter/marketplace-transporter-query.ts +17 -12
- package/server/graphql/resolvers/marketplace-transporter/update-marketplace-transporter.ts +8 -5
- package/server/graphql/resolvers/marketplace-transporter/update-multiple-marketplace-transporter.ts +32 -29
- package/server/graphql/resolvers/store-order/accept-store-order-cancellation.ts +1 -1
- package/server/graphql/resolvers/store-order/cancel-store-order.ts +1 -1
- package/server/graphql/resolvers/store-order/get-store-order-document.ts +1 -1
- package/server/graphql/resolvers/store-order/get-store-order-items.ts +1 -1
- package/server/graphql/resolvers/store-order/get-store-order.ts +1 -1
- package/server/graphql/resolvers/store-order/get-store-orders.ts +1 -1
- package/server/graphql/resolvers/store-order/reject-store-order-cancellation.ts +1 -1
- package/server/graphql/resolvers/store-order/set-store-order-status-packed-by-marketplace.ts +1 -1
- package/server/graphql/resolvers/store-order/set-store-order-status-ready-to-ship.ts +1 -1
- package/server/graphql/resolvers/store-product/create-store-product-variations.ts +1 -1
- package/server/graphql/resolvers/store-product/create-store-product.ts +1 -1
- package/server/graphql/resolvers/store-product/delete-store-product.ts +1 -1
- package/server/graphql/resolvers/store-product/get-store-product-brands.ts +1 -1
- package/server/graphql/resolvers/store-product/get-store-product-categories.ts +1 -1
- package/server/graphql/resolvers/store-product/get-store-product-category-attributes.ts +1 -1
- package/server/graphql/resolvers/store-product/get-store-product.ts +1 -1
- package/server/graphql/resolvers/store-product/get-store-products.ts +1 -1
- package/server/graphql/resolvers/store-product/update-store-product.ts +1 -1
- package/server/routers/magento-private-router.ts +3 -4
- package/server/routers/shopify-install-private-router.ts +4 -5
- package/server/routers/shopify-install-public-router.ts +1 -2
- package/server/routers/shopify-private-router.ts +6 -6
- package/server/routers/shopify-public-router.ts +6 -5
- package/server/routers/woocommerce-router.ts +4 -3
package/dist-server/graphql/resolvers/store-order/set-store-order-status-ready-to-ship.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-store-order-status-ready-to-ship.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-order/set-store-order-status-ready-to-ship.ts"],"names":[],"mappings":";;;AACA,8DAAyD;AAE5C,QAAA,8BAA8B,GAAG;IAC5C,KAAK,CAAC,8BAA8B,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"set-store-order-status-ready-to-ship.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-order/set-store-order-status-ready-to-ship.ts"],"names":[],"mappings":";;;AACA,8DAAyD;AAE5C,QAAA,8BAA8B,GAAG;IAC5C,KAAK,CAAC,8BAA8B,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,OAAwB;QACrG,uCAAuC;QACvC,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,8BAA8B,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAA;IAClF,CAAC;CACF,CAAA","sourcesContent":["import { config } from '@things-factory/env'\nimport { StoreAPI } from '../../../controllers/store-api'\n\nexport const setStoreOrderStatusReadyToShip = {\n async setStoreOrderStatusReadyToShip(_: any, { storeId, deliveryInformation }, context: ResolverContext) {\n // set status to ready to ship (Lazada)\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.setStoreOrderStatusReadyToShip(store, deliveryInformation)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store-product-variations.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/create-store-product-variations.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,4BAA4B,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"create-store-product-variations.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/create-store-product-variations.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,4BAA4B,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,OAAwB;QAClG,iBAAiB;QACjB,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,4BAA4B,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACnF,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const createStoreProductVariations = {\n async createStoreProductVariations(_: any, { storeId, itemId, variations }, context: ResolverContext) {\n // only in Shopee\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.createStoreProductVariations(store, { itemId, variations })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/create-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"create-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/create-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,OAAwB;QACxF,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IACrE,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const createStoreProduct = {\n async createStoreProduct(_: any, { storeId, productInformation }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.createStoreProduct(store, productInformation)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/delete-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"delete-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/delete-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAwB;QAC9E,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC3D,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const deleteStoreProduct = {\n async deleteStoreProduct(_: any, { storeId, itemList }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.deleteStoreProduct(store, itemList)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-store-product-brands.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-brands.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,qBAAqB,GAAG;IACnC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-store-product-brands.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-brands.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,qBAAqB,GAAG;IACnC,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,OAAwB;QACvE,iBAAiB;QACjB,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE;YACjD,UAAU,EAAE;gBACV,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,GAAG;aACX;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const getStoreProductBrands = {\n async getStoreProductBrands(_: any, { storeId }, context: ResolverContext) {\n // only in Lazada\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.getStoreProductBrands(store, {\n pagination: {\n page: 0,\n limit: 100\n }\n })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-store-product-categories.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-categories.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,yBAAyB,GAAG;IACvC,KAAK,CAAC,yBAAyB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-store-product-categories.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-categories.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,yBAAyB,GAAG;IACvC,KAAK,CAAC,yBAAyB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,OAAwB;QAC3E,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAA;IACxD,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const getStoreProductCategories = {\n async getStoreProductCategories(_: any, { storeId }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.getStoreProductCategories(store)\n }\n}\n"]}
|
package/dist-server/graphql/resolvers/store-product/get-store-product-category-attributes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-store-product-category-attributes.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-category-attributes.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,iCAAiC,GAAG;IAC/C,KAAK,CAAC,iCAAiC,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-store-product-category-attributes.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product-category-attributes.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,iCAAiC,GAAG;IAC/C,KAAK,CAAC,iCAAiC,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,OAAwB;QAC9G,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,iCAAiC,CAAC,KAAK,EAAE;YAC7D,UAAU;YACV,aAAa;SACd,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const getStoreProductCategoryAttributes = {\n async getStoreProductCategoryAttributes(_: any, { storeId, categoryId, isCrossBorder }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.getStoreProductCategoryAttributes(store, {\n categoryId,\n isCrossBorder\n })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,eAAe,GAAG;IAC7B,KAAK,CAAC,eAAe,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,eAAe,GAAG;IAC7B,KAAK,CAAC,eAAe,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAwB;QACzE,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const getStoreProduct = {\n async getStoreProduct(_: any, { storeId, itemId }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.getStoreProduct(store, itemId)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-store-products.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-products.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,gBAAgB,GAAG;IAC9B,KAAK,CAAC,gBAAgB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"get-store-products.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/get-store-products.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,gBAAgB,GAAG;IAC9B,KAAK,CAAC,gBAAgB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,EAAE,OAAwB;QAClE,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC5C,UAAU,EAAE;gBACV,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,GAAG;aACX;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const getStoreProducts = {\n async getStoreProducts(_: any, { storeId }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.getStoreProducts(store, {\n pagination: {\n page: 0,\n limit: 100\n }\n })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/update-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"update-store-product.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/store-product/update-store-product.ts"],"names":[],"mappings":";;;AAAA,8DAAyD;AAE5C,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,OAAwB;QACxF,IAAI,KAAK,GAAG,MAAM,oBAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,oBAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IACrE,CAAC;CACF,CAAA","sourcesContent":["import { StoreAPI } from '../../../controllers/store-api'\n\nexport const updateStoreProduct = {\n async updateStoreProduct(_: any, { storeId, productInformation }, context: ResolverContext) {\n var store = await StoreAPI.getMarketplaceStore(storeId)\n return await StoreAPI.updateStoreProduct(store, productInformation)\n }\n}\n"]}
|
|
@@ -4,7 +4,6 @@ exports.magentoPrivateRouter = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
6
6
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
7
|
-
const typeorm_1 = require("typeorm");
|
|
8
7
|
const uuid_1 = require("uuid");
|
|
9
8
|
const env_1 = require("@things-factory/env");
|
|
10
9
|
const shell_1 = require("@things-factory/shell");
|
|
@@ -82,15 +81,15 @@ exports.magentoPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain' : ''}/c
|
|
|
82
81
|
context.throw(500, message);
|
|
83
82
|
}
|
|
84
83
|
// need to get or save marketplace-store here
|
|
85
|
-
var marketplaceStore = await (0,
|
|
84
|
+
var marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).findOne({
|
|
86
85
|
where: {
|
|
87
|
-
domain,
|
|
86
|
+
domain: { id: domain.id },
|
|
88
87
|
storeId: oauthVerifier,
|
|
89
88
|
platform: 'magento'
|
|
90
89
|
}
|
|
91
90
|
});
|
|
92
91
|
if (!marketplaceStore) {
|
|
93
|
-
marketplaceStore = await (0,
|
|
92
|
+
marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save({
|
|
94
93
|
domain,
|
|
95
94
|
platform: 'magento',
|
|
96
95
|
name: 'magento-' + oauthVerifier,
|
|
@@ -112,12 +111,12 @@ exports.magentoPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain' : ''}/c
|
|
|
112
111
|
status: constants_1.STORE_STATUS.ACTIVE,
|
|
113
112
|
updater: user
|
|
114
113
|
};
|
|
115
|
-
marketplaceStore = await (0,
|
|
114
|
+
marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save(Object.assign(Object.assign({}, marketplaceStore), patch));
|
|
116
115
|
}
|
|
117
116
|
const marketplaceSettingCategories = ['stock_allocation', 'marketplace_order_max_weight'];
|
|
118
117
|
marketplaceSettingCategories.forEach(async (category) => {
|
|
119
|
-
const foundMarketplaceSetting = await (0,
|
|
120
|
-
where: { marketplaceStore, domain, category }
|
|
118
|
+
const foundMarketplaceSetting = await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).findOne({
|
|
119
|
+
where: { marketplaceStore: { id: marketplaceStore.id }, domain: { id: domain.id }, category }
|
|
121
120
|
});
|
|
122
121
|
if (!foundMarketplaceSetting) {
|
|
123
122
|
const marketplaceSetting = new entities_1.MarketplaceSetting();
|
|
@@ -127,7 +126,7 @@ exports.magentoPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain' : ''}/c
|
|
|
127
126
|
marketplaceSetting.category = category;
|
|
128
127
|
marketplaceSetting.domain = domain;
|
|
129
128
|
marketplaceSetting.creator = user;
|
|
130
|
-
await (0,
|
|
129
|
+
await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).save(marketplaceSetting);
|
|
131
130
|
}
|
|
132
131
|
});
|
|
133
132
|
var message = 'success to activate';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magento-private-router.js","sourceRoot":"","sources":["../../server/routers/magento-private-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\nimport { getRepository } from 'typeorm'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath } from '@things-factory/shell'\n\nimport { Magento } from '../controllers/magento'\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst debug = require('debug')('things-factory:integration-marketplace:magento-private-router')\n\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nexport const magentoPrivateRouter = new Router()\n\nexport type MagentoAccessInfo = {\n store_base_url: string\n oauth_verifier: string\n oauth_consumer_key: string\n oauth_consumer_secret: string\n oauth_token?: string\n}\n\nmagentoPrivateRouter.get(\n `${isPathBaseDomain ? '/domain/:domain' : ''}/callback-magento-pre-install`,\n async (context, next) => {\n const { domain, user } = context.state\n\n const {\n store_base_url: storeURL,\n oauth_verifier: oauthVerifier,\n oauth_consumer_key: accessKey,\n oauth_consumer_secret: accessSecret\n } = process['MagentoInstallSessions']\n\n // const {\n // store_base_url: storeURL,\n // oauth_verifier: oauthVerifier,\n // oauth_consumer_key: accessKey,\n // oauth_consumer_secret: accessSecret\n // } = JSON.parse(accessInfoCookies)\n\n // const accessInfoCookies = context.cookies.get('magento-access-info')\n // const {\n // store_base_url: storeURL,\n // oauth_verifier: oauthVerifier,\n // oauth_consumer_key: accessKey,\n // oauth_consumer_secret: accessSecret\n // } = JSON.parse(accessInfoCookies)\n\n const magento = new Magento({ oauthConsumerKey: accessKey, oauthConsumerSecret: accessSecret, shop: storeURL })\n const requestURL: string = `${storeURL}oauth/token/request`\n const requestAuthorizationHeader: string = magento.makeRequestAuthorizationHeader(\n requestURL,\n 'POST',\n accessKey,\n accessSecret\n )\n\n const requestTokenResponse = await fetch(`${requestURL}`, {\n method: 'post',\n headers: {\n Authorization: requestAuthorizationHeader,\n 'Content-Type': 'application/json'\n }\n })\n\n if (!requestTokenResponse.ok) {\n const message = `failed to request token from magento : ${\n requestTokenResponse.status\n }, ${await requestTokenResponse.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n // const requestTokenResponse = new URLSearchParams(\n // 'oauth_token=4cqw0r7vo0s5goyyqnjb72sqj3vxwr0h&oauth_token_secret=rig3x3j5a9z5j6d4ubjwyf9f1l21itrr'\n // )\n\n var requestBody: any = requestTokenResponse.json()\n if (!requestBody.oauth_token) {\n const message = `failed to get oauth-token from magento : ${JSON.stringify(requestBody, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n const accessURL: string = `${storeURL}oauth/token/access`\n const accessAuthorizationHeader: string = magento.makeAccessAuthorizationHeader(\n accessURL,\n 'POST',\n accessKey,\n requestBody.oauth_token,\n oauthVerifier\n )\n const accessTokenResponse = await fetch(`${accessURL}`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: accessAuthorizationHeader\n },\n body: JSON.stringify({\n oauth_consumer_key: accessKey,\n oauth_consumer_secret: accessSecret\n })\n })\n\n if (!accessTokenResponse.ok) {\n const message = `failed to access token from magento : ${\n accessTokenResponse.status\n }, ${await accessTokenResponse.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n // const accessTokenResponse = new URLSearchParams(\n // 'oauth_token=0lnuajnuzeei2o8xcddii5us77xnb6v0&oauth_token_secret=1c6d2hycnir5ygf39fycs6zhtaagx8pd'\n // )\n\n var accessBody: any = accessTokenResponse.json()\n if (!accessBody.oauth_token) {\n const message = `failed to get access token from magento : ${JSON.stringify(accessBody, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n // need to get or save marketplace-store here\n var marketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: {\n domain,\n storeId: oauthVerifier,\n platform: 'magento'\n }\n })\n\n if (!marketplaceStore) {\n marketplaceStore = await getRepository(MarketplaceStore).save({\n domain,\n platform: 'magento',\n name: 'magento-' + oauthVerifier,\n storeId: oauthVerifier,\n countryCode: '',\n accessToken: accessBody.outh_token,\n refreshToken: '',\n accessInfo: accessBody,\n status: STORE_STATUS.ACTIVE,\n creator: user,\n updater: user\n })\n } else {\n var patch = {\n accessToken: accessBody.outh_token,\n refreshToken: '',\n accessInfo: accessBody,\n status: STORE_STATUS.ACTIVE,\n updater: user\n }\n\n marketplaceStore = await getRepository(MarketplaceStore).save({\n ...marketplaceStore,\n ...patch\n })\n }\n\n const marketplaceSettingCategories: any[] = ['stock_allocation', 'marketplace_order_max_weight']\n\n marketplaceSettingCategories.forEach(async category => {\n const foundMarketplaceSetting: MarketplaceSetting = await getRepository(MarketplaceSetting).findOne({\n where: { marketplaceStore, domain, category }\n })\n\n if (!foundMarketplaceSetting) {\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = marketplaceStore\n marketplaceSetting.value = '100'\n marketplaceSetting.category = category\n marketplaceSetting.domain = domain\n marketplaceSetting.creator = user\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n }\n })\n\n var message = 'success to activate'\n context.redirect(\n `${getRedirectSubdomainPath(context, domain.subdomain)}marketplace-store-magento/${\n marketplaceStore.id\n }/connect-callback?status=${marketplaceStore.status}&message=${message}`\n )\n }\n)\n"]}
|
|
1
|
+
{"version":3,"file":"magento-private-router.js","sourceRoot":"","sources":["../../server/routers/magento-private-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { Magento } from '../controllers/magento'\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst debug = require('debug')('things-factory:integration-marketplace:magento-private-router')\n\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nexport const magentoPrivateRouter = new Router()\n\nexport type MagentoAccessInfo = {\n store_base_url: string\n oauth_verifier: string\n oauth_consumer_key: string\n oauth_consumer_secret: string\n oauth_token?: string\n}\n\nmagentoPrivateRouter.get(\n `${isPathBaseDomain ? '/domain/:domain' : ''}/callback-magento-pre-install`,\n async (context, next) => {\n const { domain, user } = context.state\n\n const {\n store_base_url: storeURL,\n oauth_verifier: oauthVerifier,\n oauth_consumer_key: accessKey,\n oauth_consumer_secret: accessSecret\n } = process['MagentoInstallSessions']\n\n // const {\n // store_base_url: storeURL,\n // oauth_verifier: oauthVerifier,\n // oauth_consumer_key: accessKey,\n // oauth_consumer_secret: accessSecret\n // } = JSON.parse(accessInfoCookies)\n\n // const accessInfoCookies = context.cookies.get('magento-access-info')\n // const {\n // store_base_url: storeURL,\n // oauth_verifier: oauthVerifier,\n // oauth_consumer_key: accessKey,\n // oauth_consumer_secret: accessSecret\n // } = JSON.parse(accessInfoCookies)\n\n const magento = new Magento({ oauthConsumerKey: accessKey, oauthConsumerSecret: accessSecret, shop: storeURL })\n const requestURL: string = `${storeURL}oauth/token/request`\n const requestAuthorizationHeader: string = magento.makeRequestAuthorizationHeader(\n requestURL,\n 'POST',\n accessKey,\n accessSecret\n )\n\n const requestTokenResponse = await fetch(`${requestURL}`, {\n method: 'post',\n headers: {\n Authorization: requestAuthorizationHeader,\n 'Content-Type': 'application/json'\n }\n })\n\n if (!requestTokenResponse.ok) {\n const message = `failed to request token from magento : ${\n requestTokenResponse.status\n }, ${await requestTokenResponse.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n // const requestTokenResponse = new URLSearchParams(\n // 'oauth_token=4cqw0r7vo0s5goyyqnjb72sqj3vxwr0h&oauth_token_secret=rig3x3j5a9z5j6d4ubjwyf9f1l21itrr'\n // )\n\n var requestBody: any = requestTokenResponse.json()\n if (!requestBody.oauth_token) {\n const message = `failed to get oauth-token from magento : ${JSON.stringify(requestBody, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n const accessURL: string = `${storeURL}oauth/token/access`\n const accessAuthorizationHeader: string = magento.makeAccessAuthorizationHeader(\n accessURL,\n 'POST',\n accessKey,\n requestBody.oauth_token,\n oauthVerifier\n )\n const accessTokenResponse = await fetch(`${accessURL}`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: accessAuthorizationHeader\n },\n body: JSON.stringify({\n oauth_consumer_key: accessKey,\n oauth_consumer_secret: accessSecret\n })\n })\n\n if (!accessTokenResponse.ok) {\n const message = `failed to access token from magento : ${\n accessTokenResponse.status\n }, ${await accessTokenResponse.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n // const accessTokenResponse = new URLSearchParams(\n // 'oauth_token=0lnuajnuzeei2o8xcddii5us77xnb6v0&oauth_token_secret=1c6d2hycnir5ygf39fycs6zhtaagx8pd'\n // )\n\n var accessBody: any = accessTokenResponse.json()\n if (!accessBody.oauth_token) {\n const message = `failed to get access token from magento : ${JSON.stringify(accessBody, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n // need to get or save marketplace-store here\n var marketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: {\n domain: { id: domain.id },\n storeId: oauthVerifier,\n platform: 'magento'\n }\n })\n\n if (!marketplaceStore) {\n marketplaceStore = await getRepository(MarketplaceStore).save({\n domain,\n platform: 'magento',\n name: 'magento-' + oauthVerifier,\n storeId: oauthVerifier,\n countryCode: '',\n accessToken: accessBody.outh_token,\n refreshToken: '',\n accessInfo: accessBody,\n status: STORE_STATUS.ACTIVE,\n creator: user,\n updater: user\n })\n } else {\n var patch = {\n accessToken: accessBody.outh_token,\n refreshToken: '',\n accessInfo: accessBody,\n status: STORE_STATUS.ACTIVE,\n updater: user\n }\n\n marketplaceStore = await getRepository(MarketplaceStore).save({\n ...marketplaceStore,\n ...patch\n })\n }\n\n const marketplaceSettingCategories: any[] = ['stock_allocation', 'marketplace_order_max_weight']\n\n marketplaceSettingCategories.forEach(async category => {\n const foundMarketplaceSetting: MarketplaceSetting = await getRepository(MarketplaceSetting).findOne({\n where: { marketplaceStore: { id: marketplaceStore.id }, domain: { id: domain.id }, category }\n })\n\n if (!foundMarketplaceSetting) {\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = marketplaceStore\n marketplaceSetting.value = '100'\n marketplaceSetting.category = category\n marketplaceSetting.domain = domain\n marketplaceSetting.creator = user\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n }\n })\n\n var message = 'success to activate'\n context.redirect(\n `${getRedirectSubdomainPath(context, domain.subdomain)}marketplace-store-magento/${\n marketplaceStore.id\n }/connect-callback?status=${marketplaceStore.status}&message=${message}`\n )\n }\n)\n"]}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.shopifyInstallPrivateRouter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
6
|
-
const typeorm_1 = require("typeorm");
|
|
7
6
|
const uuid_1 = require("uuid");
|
|
8
7
|
const env_1 = require("@things-factory/env");
|
|
9
8
|
const shell_1 = require("@things-factory/shell");
|
|
@@ -23,16 +22,16 @@ exports.shopifyInstallPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain'
|
|
|
23
22
|
httpOnly: true
|
|
24
23
|
});
|
|
25
24
|
// need to get or save marketplace-store here
|
|
26
|
-
var marketplaceStore = await (0,
|
|
25
|
+
var marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).findOne({
|
|
27
26
|
where: {
|
|
28
|
-
domain,
|
|
27
|
+
domain: { id: domain.id },
|
|
29
28
|
storeId: shop,
|
|
30
29
|
platform: 'shopify'
|
|
31
30
|
}
|
|
32
31
|
});
|
|
33
32
|
if (!marketplaceStore) {
|
|
34
|
-
marketplaceStore = await (0,
|
|
35
|
-
domain,
|
|
33
|
+
marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save({
|
|
34
|
+
domain: { id: domain.id },
|
|
36
35
|
platform: 'shopify',
|
|
37
36
|
name: 'shopify-' + shop,
|
|
38
37
|
storeId: shop,
|
|
@@ -53,12 +52,12 @@ exports.shopifyInstallPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain'
|
|
|
53
52
|
status: constants_1.STORE_STATUS.ACTIVE,
|
|
54
53
|
updater: user
|
|
55
54
|
};
|
|
56
|
-
marketplaceStore = await (0,
|
|
55
|
+
marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save(Object.assign(Object.assign({}, marketplaceStore), patch));
|
|
57
56
|
}
|
|
58
57
|
const marketplaceSettingCategories = ['stock_allocation', 'marketplace_order_max_weight'];
|
|
59
58
|
marketplaceSettingCategories.forEach(async (category) => {
|
|
60
|
-
const foundMarketplaceSetting = await (0,
|
|
61
|
-
where: { marketplaceStore, domain, category }
|
|
59
|
+
const foundMarketplaceSetting = await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).findOne({
|
|
60
|
+
where: { marketplaceStore: { id: marketplaceStore.id }, domain: { id: domain.id }, category }
|
|
62
61
|
});
|
|
63
62
|
if (!foundMarketplaceSetting) {
|
|
64
63
|
const marketplaceSetting = new entities_1.MarketplaceSetting();
|
|
@@ -68,7 +67,7 @@ exports.shopifyInstallPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain'
|
|
|
68
67
|
marketplaceSetting.category = category;
|
|
69
68
|
marketplaceSetting.domain = domain;
|
|
70
69
|
marketplaceSetting.creator = user;
|
|
71
|
-
await (0,
|
|
70
|
+
await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).save(marketplaceSetting);
|
|
72
71
|
}
|
|
73
72
|
});
|
|
74
73
|
var message = 'success to activate';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-install-private-router.js","sourceRoot":"","sources":["../../server/routers/shopify-install-private-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B
|
|
1
|
+
{"version":3,"file":"shopify-install-private-router.js","sourceRoot":"","sources":["../../server/routers/shopify-install-private-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-install-private-router')\n\nexport const shopifyInstallPrivateRouter = new Router()\n\nshopifyInstallPrivateRouter.get(\n `${isPathBaseDomain ? '/domain/:domain' : ''}/callback-shopify-post-install`,\n async (context, next) => {\n const { secure } = context\n const { domain, user } = context.state\n\n const shopifyCookie = context.cookies.get('shopify-access-token')\n const { access_token: accessToken, shop: shopUrl } = JSON.parse(shopifyCookie)\n const shop = shopUrl.replace('.myshopify.com', '')\n\n context.cookies.set('shopify-access-token', '', {\n secure,\n httpOnly: true\n })\n\n // need to get or save marketplace-store here\n var marketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: {\n domain: { id: domain.id },\n storeId: shop,\n platform: 'shopify'\n }\n })\n\n if (!marketplaceStore) {\n marketplaceStore = await getRepository(MarketplaceStore).save({\n domain: { id: domain.id },\n platform: 'shopify',\n name: 'shopify-' + shop,\n storeId: shop,\n countryCode: '',\n accessToken,\n refreshToken: '',\n accessInfo: shopifyCookie,\n status: STORE_STATUS.ACTIVE,\n creator: user,\n updater: user\n })\n } else {\n var patch = {\n accessToken,\n refreshToken: '',\n accessInfo: shopifyCookie,\n status: STORE_STATUS.ACTIVE,\n updater: user\n }\n\n marketplaceStore = await getRepository(MarketplaceStore).save({\n ...marketplaceStore,\n ...patch\n })\n }\n\n const marketplaceSettingCategories: any[] = ['stock_allocation', 'marketplace_order_max_weight']\n\n marketplaceSettingCategories.forEach(async category => {\n const foundMarketplaceSetting: MarketplaceSetting = await getRepository(MarketplaceSetting).findOne({\n where: { marketplaceStore: { id: marketplaceStore.id }, domain: { id: domain.id }, category }\n })\n\n if (!foundMarketplaceSetting) {\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = marketplaceStore\n marketplaceSetting.value = '100'\n marketplaceSetting.category = category\n marketplaceSetting.domain = domain\n marketplaceSetting.creator = user\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n }\n })\n\n var message = 'success to activate'\n context.redirect(\n `${getRedirectSubdomainPath(context, domain.subdomain)}marketplace-store-shopify/${\n marketplaceStore.id\n }/connect-callback?status=${marketplaceStore.status}&message=${message}`\n )\n }\n)\n"]}
|
|
@@ -4,7 +4,6 @@ exports.shopifyInstallPublicRouter = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
6
6
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
7
|
-
const typeorm_1 = require("typeorm");
|
|
8
7
|
const env_1 = require("@things-factory/env");
|
|
9
8
|
const shell_1 = require("@things-factory/shell");
|
|
10
9
|
const shopify_1 = require("../controllers/shopify");
|
|
@@ -104,7 +103,7 @@ exports.shopifyInstallPublicRouter.get('/install-shopify-private', async (contex
|
|
|
104
103
|
if (!shopUrl) {
|
|
105
104
|
context.throw(400, 'shop not found from the request');
|
|
106
105
|
}
|
|
107
|
-
const marketplaceStore = await (0,
|
|
106
|
+
const marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).findOne({
|
|
108
107
|
where: { storeURL: shopUrl }
|
|
109
108
|
});
|
|
110
109
|
if (!marketplaceStore)
|
|
@@ -132,7 +131,7 @@ exports.shopifyInstallPublicRouter.get('/callback-shopify-install-private', asyn
|
|
|
132
131
|
secure,
|
|
133
132
|
httpOnly: true
|
|
134
133
|
});
|
|
135
|
-
const marketplaceStore = await (0,
|
|
134
|
+
const marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).findOne({
|
|
136
135
|
where: { storeURL: shopUrl }
|
|
137
136
|
});
|
|
138
137
|
if (!marketplaceStore)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-install-public-router.js","sourceRoot":"","sources":["../../server/routers/shopify-install-public-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B,oEAA8B;AAC9B,qCAAuC;AAEvC,6CAA4C;AAC5C,iDAAyD;AAEzD,oDAAgD;AAChD,0CAA8C;AAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sEAAsE,CAAC,CAAA;AAEzF,QAAA,0BAA0B,GAAG,IAAI,oBAAM,EAAE,CAAA;AAEtD,kCAA0B,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAA;IACrE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAA;IAE3C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAEvC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAA;KACtD;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;KAC7C;IACD,MAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAA;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,6BAA6B,EAAE,CAAA;IAErD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAExD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE;QAClD,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,kCAA0B,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAClF,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAA;IACrE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAA;IAE3C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAEhE,IAAI,KAAK,KAAK,WAAW,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAA;KAClE;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE;QAC/C,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;KAC7C;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,WAAW,IAAI,yCAAyC,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,SAAS;YACxB,IAAI;SACL,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,6CAA6C,QAAQ,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAA;QACxG,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;KAC5B;IAED,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QACtB,MAAM,OAAO,GAAG,6CAA6C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;QAC5F,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;KAC5B;IAED;;;;;;;;;;;;;;;;;MAiBE;IAEF,OAAO,CAAC,OAAO,CAAC,GAAG,CACjB,sBAAsB,EACtB,IAAI,CAAC,SAAS,iBACZ,IAAI,IACD,IAAI,EACP,EACF;QACE,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CACF,CAAA;IAED,OAAO,CAAC,QAAQ,CAAC,IAAA,yBAAiB,EAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA;AAEF,kCAA0B,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACjF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IACvC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAA;KACtD;IACD,MAAM,gBAAgB,GAAqB,MAAM,IAAA,uBAAa,EAAC,2BAAgB,CAAC,CAAC,OAAO,CAAC;QACvF,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB;QAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAA;IAExE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAA;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,mCAAmC,CAAC,CAAA;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,6BAA6B,EAAE,CAAA;IAErD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAExD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE;QAClD,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,kCAA0B,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC1F,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAEhE,IAAI,KAAK,KAAK,WAAW,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAA;KAClE;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE;QAC/C,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAqB,MAAM,IAAA,uBAAa,EAAC,2BAAgB,CAAC,CAAC,OAAO,CAAC;QACvF,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB;QAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAA;IAExE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAA;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;KAC7C;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,WAAW,IAAI,yCAAyC,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,SAAS;YACxB,IAAI;SACL,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,6CAA6C,QAAQ,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAA;QACxG,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;KAC5B;IAED,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QACtB,MAAM,OAAO,GAAG,6CAA6C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;QAC5F,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;KAC5B;IAED;;;;;;;;;;;;;;;;;MAiBE;IAEF,OAAO,CAAC,OAAO,CAAC,GAAG,CACjB,sBAAsB,EACtB,IAAI,CAAC,SAAS,iBACZ,IAAI,IACD,IAAI,EACP,EACF;QACE,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CACF,CAAA;IAED,OAAO,CAAC,QAAQ,CAAC,IAAA,yBAAiB,EAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\nimport { getRepository } from 'typeorm'\n\nimport { config } from '@things-factory/env'\nimport { getUrlFromContext } from '@things-factory/shell'\n\nimport { Shopify } from '../controllers/shopify'\nimport { MarketplaceStore } from '../entities'\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-install-public-router')\n\nexport const shopifyInstallPublicRouter = new Router()\n\nshopifyInstallPublicRouter.get('/install-shopify', async (context, next) => {\n const shopifyConfig = config.get('marketplaceIntegrationShopify', {})\n const { apiKey, apiSecret } = shopifyConfig\n\n const { secure } = context\n const { shop: shopUrl } = context.query\n\n if (!shopUrl) {\n context.throw(400, 'shop not found from the request')\n }\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n const redirectUrl = getUrlFromContext(context, '/callback-shopify-install')\n const state = shopify.makeVerificationTokenForNonce()\n\n const authUrl = shopify.buildAuthURL(redirectUrl, state)\n\n context.cookies.set('shopify-install-state', state, {\n secure,\n httpOnly: true\n })\n\n context.redirect(authUrl)\n})\n\nshopifyInstallPublicRouter.get('/callback-shopify-install', async (context, next) => {\n const shopifyConfig = config.get('marketplaceIntegrationShopify', {})\n const { apiKey, apiSecret } = shopifyConfig\n\n const { secure } = context\n const { shop: shopUrl, code, state } = context.query\n const stateCookie = context.cookies.get('shopify-install-state')\n\n if (state !== stateCookie) {\n context.throw(403, 'shopify install state could not be verified')\n }\n\n context.cookies.set('shopify-install-state', '', {\n secure,\n httpOnly: true\n })\n\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n\n const response = await fetch(`https://${shop}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (!response.ok) {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n var body = await response.json()\n if (!body.access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n /* body should be like this\n {\n \"access_token\": \"f85632530bf277ec9ac6f649fc327f17\",\n \"scope\": \"write_orders,read_customers\",\n \"expires_in\": 86399,\n \"associated_user_scope\": \"write_orders\",\n \"associated_user\": {\n \"id\": 902541635,\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@example.com\",\n \"email_verified\": true,\n \"account_owner\": true,\n \"locale\": \"en\",\n \"collaborator\": false\n }\n }\n */\n\n context.cookies.set(\n 'shopify-access-token',\n JSON.stringify({\n shop,\n ...body\n }),\n {\n secure,\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-shopify-post-install'))\n})\n\nshopifyInstallPublicRouter.get('/install-shopify-private', async (context, next) => {\n const { secure } = context\n const { shop: shopUrl } = context.query\n debug('shop', shopUrl)\n if (!shopUrl) {\n context.throw(400, 'shop not found from the request')\n }\n const marketplaceStore: MarketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: { storeURL: shopUrl }\n })\n\n if (!marketplaceStore) context.throw(400, 'marketplace store not found')\n\n const { accessKey: apiKey, accessSecret: apiSecret } = marketplaceStore\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n const redirectUrl = getUrlFromContext(context, '/callback-shopify-install-private')\n const state = shopify.makeVerificationTokenForNonce()\n\n const authUrl = shopify.buildAuthURL(redirectUrl, state)\n\n context.cookies.set('shopify-install-state', state, {\n secure,\n httpOnly: true\n })\n\n context.redirect(authUrl)\n})\n\nshopifyInstallPublicRouter.get('/callback-shopify-install-private', async (context, next) => {\n const { secure } = context\n const { shop: shopUrl, code, state } = context.query\n const stateCookie = context.cookies.get('shopify-install-state')\n\n if (state !== stateCookie) {\n context.throw(403, 'shopify install state could not be verified')\n }\n\n context.cookies.set('shopify-install-state', '', {\n secure,\n httpOnly: true\n })\n\n const marketplaceStore: MarketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: { storeURL: shopUrl }\n })\n\n if (!marketplaceStore) context.throw(400, 'marketplace store not found')\n\n const { accessKey: apiKey, accessSecret: apiSecret } = marketplaceStore\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n\n const response = await fetch(`https://${shop}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (!response.ok) {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n var body = await response.json()\n if (!body.access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n /* body should be like this\n {\n \"access_token\": \"f85632530bf277ec9ac6f649fc327f17\",\n \"scope\": \"write_orders,read_customers\",\n \"expires_in\": 86399,\n \"associated_user_scope\": \"write_orders\",\n \"associated_user\": {\n \"id\": 902541635,\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@example.com\",\n \"email_verified\": true,\n \"account_owner\": true,\n \"locale\": \"en\",\n \"collaborator\": false\n }\n }\n */\n\n context.cookies.set(\n 'shopify-access-token',\n JSON.stringify({\n shop,\n ...body\n }),\n {\n secure,\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-shopify-post-install'))\n})\n"]}
|
|
1
|
+
{"version":3,"file":"shopify-install-public-router.js","sourceRoot":"","sources":["../../server/routers/shopify-install-public-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\n\nimport { config } from '@things-factory/env'\nimport { getRepository, getUrlFromContext } from '@things-factory/shell'\n\nimport { Shopify } from '../controllers/shopify'\nimport { MarketplaceStore } from '../entities'\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-install-public-router')\n\nexport const shopifyInstallPublicRouter = new Router()\n\nshopifyInstallPublicRouter.get('/install-shopify', async (context, next) => {\n const shopifyConfig = config.get('marketplaceIntegrationShopify', {})\n const { apiKey, apiSecret } = shopifyConfig\n\n const { secure } = context\n const { shop: shopUrl } = context.query\n\n if (!shopUrl) {\n context.throw(400, 'shop not found from the request')\n }\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n const redirectUrl = getUrlFromContext(context, '/callback-shopify-install')\n const state = shopify.makeVerificationTokenForNonce()\n\n const authUrl = shopify.buildAuthURL(redirectUrl, state)\n\n context.cookies.set('shopify-install-state', state, {\n secure,\n httpOnly: true\n })\n\n context.redirect(authUrl)\n})\n\nshopifyInstallPublicRouter.get('/callback-shopify-install', async (context, next) => {\n const shopifyConfig = config.get('marketplaceIntegrationShopify', {})\n const { apiKey, apiSecret } = shopifyConfig\n\n const { secure } = context\n const { shop: shopUrl, code, state } = context.query\n const stateCookie = context.cookies.get('shopify-install-state')\n\n if (state !== stateCookie) {\n context.throw(403, 'shopify install state could not be verified')\n }\n\n context.cookies.set('shopify-install-state', '', {\n secure,\n httpOnly: true\n })\n\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n\n const response = await fetch(`https://${shop}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (!response.ok) {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n var body = await response.json()\n if (!body.access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n /* body should be like this\n {\n \"access_token\": \"f85632530bf277ec9ac6f649fc327f17\",\n \"scope\": \"write_orders,read_customers\",\n \"expires_in\": 86399,\n \"associated_user_scope\": \"write_orders\",\n \"associated_user\": {\n \"id\": 902541635,\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@example.com\",\n \"email_verified\": true,\n \"account_owner\": true,\n \"locale\": \"en\",\n \"collaborator\": false\n }\n }\n */\n\n context.cookies.set(\n 'shopify-access-token',\n JSON.stringify({\n shop,\n ...body\n }),\n {\n secure,\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-shopify-post-install'))\n})\n\nshopifyInstallPublicRouter.get('/install-shopify-private', async (context, next) => {\n const { secure } = context\n const { shop: shopUrl } = context.query\n debug('shop', shopUrl)\n if (!shopUrl) {\n context.throw(400, 'shop not found from the request')\n }\n const marketplaceStore: MarketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: { storeURL: shopUrl }\n })\n\n if (!marketplaceStore) context.throw(400, 'marketplace store not found')\n\n const { accessKey: apiKey, accessSecret: apiSecret } = marketplaceStore\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n const redirectUrl = getUrlFromContext(context, '/callback-shopify-install-private')\n const state = shopify.makeVerificationTokenForNonce()\n\n const authUrl = shopify.buildAuthURL(redirectUrl, state)\n\n context.cookies.set('shopify-install-state', state, {\n secure,\n httpOnly: true\n })\n\n context.redirect(authUrl)\n})\n\nshopifyInstallPublicRouter.get('/callback-shopify-install-private', async (context, next) => {\n const { secure } = context\n const { shop: shopUrl, code, state } = context.query\n const stateCookie = context.cookies.get('shopify-install-state')\n\n if (state !== stateCookie) {\n context.throw(403, 'shopify install state could not be verified')\n }\n\n context.cookies.set('shopify-install-state', '', {\n secure,\n httpOnly: true\n })\n\n const marketplaceStore: MarketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: { storeURL: shopUrl }\n })\n\n if (!marketplaceStore) context.throw(400, 'marketplace store not found')\n\n const { accessKey: apiKey, accessSecret: apiSecret } = marketplaceStore\n const shop = shopUrl.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n if (!shopify.isValidSignature(context.query)) {\n context.throw(400, 'HMAC validation failed')\n }\n\n const response = await fetch(`https://${shop}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (!response.ok) {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n context.throw(500, message)\n }\n\n var body = await response.json()\n if (!body.access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n context.throw(500, message)\n }\n\n /* body should be like this\n {\n \"access_token\": \"f85632530bf277ec9ac6f649fc327f17\",\n \"scope\": \"write_orders,read_customers\",\n \"expires_in\": 86399,\n \"associated_user_scope\": \"write_orders\",\n \"associated_user\": {\n \"id\": 902541635,\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@example.com\",\n \"email_verified\": true,\n \"account_owner\": true,\n \"locale\": \"en\",\n \"collaborator\": false\n }\n }\n */\n\n context.cookies.set(\n 'shopify-access-token',\n JSON.stringify({\n shop,\n ...body\n }),\n {\n secure,\n httpOnly: true\n }\n )\n\n context.redirect(getUrlFromContext(context, '/callback-shopify-post-install'))\n})\n"]}
|
|
@@ -3,11 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.shopifyPrivateRouter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
6
|
-
const typeorm_1 = require("typeorm");
|
|
7
6
|
const uuid_1 = require("uuid");
|
|
7
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
8
8
|
const env_1 = require("@things-factory/env");
|
|
9
9
|
const shell_1 = require("@things-factory/shell");
|
|
10
|
-
const auth_base_1 = require("@things-factory/auth-base");
|
|
11
10
|
const shopify_1 = require("../controllers/shopify");
|
|
12
11
|
const entities_1 = require("../entities");
|
|
13
12
|
const constants_1 = require("../graphql/constants");
|
|
@@ -24,15 +23,15 @@ exports.shopifyPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain' : ''}/c
|
|
|
24
23
|
shop = shop.replace('.myshopify.com', '');
|
|
25
24
|
const shopify = new shopify_1.Shopify({ apiKey, apiSecret, shop });
|
|
26
25
|
// need to get or save marketplace-store here
|
|
27
|
-
var marketplaceStore = await (0,
|
|
26
|
+
var marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).findOne({
|
|
28
27
|
where: {
|
|
29
|
-
domain,
|
|
28
|
+
domain: { id: domain.id },
|
|
30
29
|
storeId: shop,
|
|
31
30
|
platform: 'shopify'
|
|
32
31
|
}
|
|
33
32
|
});
|
|
34
33
|
if (!marketplaceStore) {
|
|
35
|
-
marketplaceStore = await (0,
|
|
34
|
+
marketplaceStore = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save({
|
|
36
35
|
domain,
|
|
37
36
|
platform: 'shopify',
|
|
38
37
|
name: shop,
|
|
@@ -50,10 +49,10 @@ exports.shopifyPrivateRouter.get(`${isPathBaseDomain ? '/domain/:domain' : ''}/c
|
|
|
50
49
|
marketplaceSetting.category = 'stock_allocation';
|
|
51
50
|
marketplaceSetting.domain = marketplaceStore.domain;
|
|
52
51
|
marketplaceSetting.creator = marketplaceStore.creator;
|
|
53
|
-
await (0,
|
|
52
|
+
await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).save(marketplaceSetting);
|
|
54
53
|
/* generate verification-token as a nonce */
|
|
55
54
|
const nonce = shopify.makeVerificationTokenForNonce();
|
|
56
|
-
await (0,
|
|
55
|
+
await (0, shell_1.getRepository)(auth_base_1.VerificationToken).save({
|
|
57
56
|
userId: user.id,
|
|
58
57
|
token: nonce,
|
|
59
58
|
type: auth_base_1.VerificationTokenType.REQUEST_ACCESS_TOKEN,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-private-router.js","sourceRoot":"","sources":["../../server/routers/shopify-private-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B
|
|
1
|
+
{"version":3,"file":"shopify-private-router.js","sourceRoot":"","sources":["../../server/routers/shopify-private-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { VerificationToken, VerificationTokenType } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { getRepository, getUrlFromContext } from '@things-factory/shell'\n\nimport { Shopify } from '../controllers/shopify'\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst shopifyConfig = config.get('marketplaceIntegrationShopify', {})\nconst { apiKey, apiSecret } = shopifyConfig\nconst isPathBaseDomain = !config.get('subdomain') && !config.get('useVirtualHostBasedDomain')\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-private-router')\n\nexport const shopifyPrivateRouter = new Router()\n\nshopifyPrivateRouter.get(\n `${isPathBaseDomain ? '/domain/:domain' : ''}/callback-shopify-install`,\n async (context, next) => {\n // https://example.org/callback-shopify-install?shop={shop}&hmac=da9d83c171400a41f8db91a950508985×tamp=1409617544\n const { hmac, timestamp } = context.query\n const { domain, user } = context.state\n\n let shop: any = context.query.shop\n shop = shop.replace('.myshopify.com', '')\n\n const shopify = new Shopify({ apiKey, apiSecret, shop })\n\n // need to get or save marketplace-store here\n var marketplaceStore = await getRepository(MarketplaceStore).findOne({\n where: {\n domain: { id: domain.id },\n storeId: shop,\n platform: 'shopify'\n }\n })\n\n if (!marketplaceStore) {\n marketplaceStore = await getRepository(MarketplaceStore).save({\n domain,\n platform: 'shopify',\n name: shop,\n storeId: shop,\n countryCode: '',\n status: STORE_STATUS.INACTIVE,\n creator: user,\n updater: user\n })\n }\n\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = marketplaceStore\n marketplaceSetting.value = '100'\n marketplaceSetting.category = 'stock_allocation'\n marketplaceSetting.domain = marketplaceStore.domain\n marketplaceSetting.creator = marketplaceStore.creator\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n\n /* generate verification-token as a nonce */\n const nonce = shopify.makeVerificationTokenForNonce()\n await getRepository(VerificationToken).save({\n userId: user.id,\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN,\n suppliment: marketplaceStore.id\n })\n\n const redirectUrl = getUrlFromContext(context, '/callback-shopify')\n const redirectTo = shopify.buildAuthURL(redirectUrl, nonce)\n\n debug('get:/callback-shopify-install', redirectTo)\n context.redirect(redirectTo)\n }\n)\n"]}
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.shopifyPublicRouter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const auth_base_1 = require("@things-factory/auth-base");
|
|
6
|
-
const env_1 = require("@things-factory/env");
|
|
7
|
-
const shell_1 = require("@things-factory/shell");
|
|
8
5
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
9
6
|
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
10
|
-
const typeorm_1 = require("typeorm");
|
|
11
7
|
const uuid_1 = require("uuid");
|
|
8
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
9
|
+
const env_1 = require("@things-factory/env");
|
|
10
|
+
const shell_1 = require("@things-factory/shell");
|
|
12
11
|
const store_api_1 = require("../controllers/store-api");
|
|
13
12
|
const entities_1 = require("../entities");
|
|
14
13
|
const constants_1 = require("../graphql/constants");
|
|
@@ -20,7 +19,7 @@ exports.shopifyPublicRouter.get('/callback-shopify', async (context, next) => {
|
|
|
20
19
|
try {
|
|
21
20
|
// https://example.org/some/redirect/uri?code={authorization_code}&hmac=da9d83c171400a41f8db91a950508985×tamp=1409617544&state={nonce}&shop={hostname}
|
|
22
21
|
const { code, hmac, timestamp, state: nonce, shop: hostname } = context.query;
|
|
23
|
-
const verificationTokenRepository = (0,
|
|
22
|
+
const verificationTokenRepository = (0, shell_1.getRepository)(auth_base_1.VerificationToken);
|
|
24
23
|
var verification = await verificationTokenRepository.findOne({
|
|
25
24
|
where: {
|
|
26
25
|
token: nonce,
|
|
@@ -67,8 +66,8 @@ exports.shopifyPublicRouter.get('/callback-shopify', async (context, next) => {
|
|
|
67
66
|
storeId: storeId,
|
|
68
67
|
status: constants_1.STORE_STATUS.ACTIVE
|
|
69
68
|
};
|
|
70
|
-
var user = await (0,
|
|
71
|
-
store = await (0,
|
|
69
|
+
var user = await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: userId });
|
|
70
|
+
store = await (0, shell_1.getRepository)(entities_1.MarketplaceStore).save(Object.assign(Object.assign(Object.assign({}, store), patch), { updater: user }));
|
|
72
71
|
const marketplaceSetting = new entities_1.MarketplaceSetting();
|
|
73
72
|
marketplaceSetting.name = (0, uuid_1.v4)();
|
|
74
73
|
marketplaceSetting.marketplaceStore = store;
|
|
@@ -76,7 +75,7 @@ exports.shopifyPublicRouter.get('/callback-shopify', async (context, next) => {
|
|
|
76
75
|
marketplaceSetting.category = 'stock_allocation';
|
|
77
76
|
marketplaceSetting.domain = store.domain;
|
|
78
77
|
marketplaceSetting.creator = store.creator;
|
|
79
|
-
await (0,
|
|
78
|
+
await (0, shell_1.getRepository)(entities_1.MarketplaceSetting).save(marketplaceSetting);
|
|
80
79
|
var message = 'success to activate';
|
|
81
80
|
context.redirect(`${(0, shell_1.getRedirectSubdomainPath)(context, store.domain.subdomain)}marketplace-store-shopify/${store.id}/connect-callback?status=${store.status}&message=${message}`);
|
|
82
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-public-router.js","sourceRoot":"","sources":["../../server/routers/shopify-public-router.ts"],"names":[],"mappings":"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","sourcesContent":["import { User, VerificationToken, VerificationTokenType } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath } from '@things-factory/shell'\nimport Router from 'koa-router'\nimport fetch from 'node-fetch'\nimport { getRepository } from 'typeorm'\nimport { v4 as uuidv4 } from 'uuid'\nimport { StoreAPI } from '../controllers/store-api'\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst shopifyConfig = config.get('marketplaceIntegrationShopify', {})\nconst { apiKey, apiSecret } = shopifyConfig\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-public-router')\n\nexport const shopifyPublicRouter = new Router()\n\nshopifyPublicRouter.get('/callback-shopify', async (context, next) => {\n try {\n // https://example.org/some/redirect/uri?code={authorization_code}&hmac=da9d83c171400a41f8db91a950508985×tamp=1409617544&state={nonce}&shop={hostname}\n const { code, hmac, timestamp, state: nonce, shop: hostname } = context.query\n\n const verificationTokenRepository = getRepository(VerificationToken)\n\n var verification: VerificationToken = await verificationTokenRepository.findOne({\n where: {\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n }\n })\n\n const { userId, suppliment: marketplaceStoreId } = verification\n\n await verificationTokenRepository.delete({\n userId,\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n })\n\n var store = await StoreAPI.getMarketplaceStore(marketplaceStoreId)\n const storeId = store.storeId\n\n const response = await fetch(`https://${storeId}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (response.ok) {\n var body = await response.json()\n var { access_token } = body\n if (!access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n throw new Error(message)\n }\n } else {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n throw new Error(message)\n }\n\n var patch = {\n accessToken: access_token,\n refreshToken: '',\n accessInfo: JSON.stringify(body, null, 2),\n storeId: storeId,\n status: STORE_STATUS.ACTIVE\n }\n\n var user = await getRepository(User).findOne(userId)\n\n store = await getRepository(MarketplaceStore).save({\n ...store,\n ...patch,\n updater: user\n })\n\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = store\n marketplaceSetting.value = '100'\n marketplaceSetting.category = 'stock_allocation'\n marketplaceSetting.domain = store.domain\n marketplaceSetting.creator = store.creator\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n\n var message = 'success to activate'\n context.redirect(\n `${getRedirectSubdomainPath(context, store.domain.subdomain)}marketplace-store-shopify/${\n store.id\n }/connect-callback?status=${store.status}&message=${message}`\n )\n } catch (err) {\n var message: string = err.message\n\n if (store) {\n context.redirect(\n `${getRedirectSubdomainPath(context, store.domain.subdomain)}marketplace-store-shopify/${\n store.id\n }/connect-callback?status=${store.status}&message=${message}`\n )\n return\n }\n\n throw err\n }\n})\n\nshopifyPublicRouter.post('/webhook-shopify/customers/redact', async (context, next) => {\n // When a store owner requests deletion of data on behalf of a customer,\n // Shopify sends a payload on the customers/redact topic to the apps installed on that store.\n // If the customer hasn't placed an order in the past six months,\n // then Shopify sends the payload 10 days after their request.\n // Otherwise, the the request will be withheld until 6 months have passed.\n // If your app has been granted access to the store's customers or orders,\n // then you receive a redaction request webhook with the resource IDs that you need to redact or delete.\n // In some cases, a customer record contains only the customer's email address.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\",\n // \"customer\": {\n // \"id\": 191167,\n // \"email\": \"john@email.com\",\n // \"phone\": \"555-625-1199\"\n // },\n // \"orders_to_redact\": [299938, 280263, 220458]\n // }\n\n context.status = 200\n})\n\nshopifyPublicRouter.post('/webhook-shopify/shop/redact', async (context, next) => {\n // 48 hours after a store owner uninstalls your app,\n // Shopify sends you a shop/redact webhook.\n // This webhook provides the store's shop_id and shop_domain so that you can erase the customer information\n // for that store from your database.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\"\n // }\n\n context.status = 200\n})\n\nshopifyPublicRouter.post('/webhook-shopify/customers/data_request', async (context, next) => {\n // When a customer requests their data from a store owner,\n // Shopify sends a payload on the customers/data_request topic to the apps installed on that store.\n // If your app has been granted access to customers or orders,\n // then you receive a data request webhook with the resource IDs of the data that you need to provide to the store owner.\n // It's your responsibility to provide this data to the store owner directly.\n // In some cases, a customer record contains only the customer's email address.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\",\n // \"orders_requested\": [299938, 280263, 220458],\n // \"customer\": {\n // \"id\": 191167,\n // \"email\": \"john@email.com\",\n // \"phone\": \"555-625-1199\"\n // },\n // \"data_request\": {\n // \"id\": 9999\n // }\n // }\n\n context.status = 200\n})\n"]}
|
|
1
|
+
{"version":3,"file":"shopify-public-router.js","sourceRoot":"","sources":["../../server/routers/shopify-public-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport fetch from 'node-fetch'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { User, VerificationToken, VerificationTokenType } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { StoreAPI } from '../controllers/store-api'\nimport { MarketplaceSetting, MarketplaceStore } from '../entities'\nimport { STORE_STATUS } from '../graphql/constants'\n\nconst shopifyConfig = config.get('marketplaceIntegrationShopify', {})\nconst { apiKey, apiSecret } = shopifyConfig\n\nconst debug = require('debug')('things-factory:integration-marketplace:shopify-public-router')\n\nexport const shopifyPublicRouter = new Router()\n\nshopifyPublicRouter.get('/callback-shopify', async (context, next) => {\n try {\n // https://example.org/some/redirect/uri?code={authorization_code}&hmac=da9d83c171400a41f8db91a950508985×tamp=1409617544&state={nonce}&shop={hostname}\n const { code, hmac, timestamp, state: nonce, shop: hostname } = context.query\n\n const verificationTokenRepository = getRepository(VerificationToken)\n\n var verification: VerificationToken = await verificationTokenRepository.findOne({\n where: {\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n }\n })\n\n const { userId, suppliment: marketplaceStoreId } = verification\n\n await verificationTokenRepository.delete({\n userId,\n token: nonce,\n type: VerificationTokenType.REQUEST_ACCESS_TOKEN\n })\n\n var store = await StoreAPI.getMarketplaceStore(marketplaceStoreId)\n const storeId = store.storeId\n\n const response = await fetch(`https://${storeId}.myshopify.com/admin/oauth/access_token`, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n client_id: apiKey,\n client_secret: apiSecret,\n code\n })\n })\n\n if (response.ok) {\n var body = await response.json()\n var { access_token } = body\n if (!access_token) {\n const message = `failed to get access-token from shopify : ${JSON.stringify(body, null, 2)}`\n debug(message)\n throw new Error(message)\n }\n } else {\n const message = `failed to get access-token from shopify : ${response.status}, ${await response.text()}`\n debug(message)\n throw new Error(message)\n }\n\n var patch = {\n accessToken: access_token,\n refreshToken: '',\n accessInfo: JSON.stringify(body, null, 2),\n storeId: storeId,\n status: STORE_STATUS.ACTIVE\n }\n\n var user = await getRepository(User).findOneBy({ id: userId })\n\n store = await getRepository(MarketplaceStore).save({\n ...store,\n ...patch,\n updater: user\n })\n\n const marketplaceSetting = new MarketplaceSetting()\n marketplaceSetting.name = uuidv4()\n marketplaceSetting.marketplaceStore = store\n marketplaceSetting.value = '100'\n marketplaceSetting.category = 'stock_allocation'\n marketplaceSetting.domain = store.domain\n marketplaceSetting.creator = store.creator\n await getRepository(MarketplaceSetting).save(marketplaceSetting)\n\n var message = 'success to activate'\n context.redirect(\n `${getRedirectSubdomainPath(context, store.domain.subdomain)}marketplace-store-shopify/${\n store.id\n }/connect-callback?status=${store.status}&message=${message}`\n )\n } catch (err) {\n var message: string = err.message\n\n if (store) {\n context.redirect(\n `${getRedirectSubdomainPath(context, store.domain.subdomain)}marketplace-store-shopify/${\n store.id\n }/connect-callback?status=${store.status}&message=${message}`\n )\n return\n }\n\n throw err\n }\n})\n\nshopifyPublicRouter.post('/webhook-shopify/customers/redact', async (context, next) => {\n // When a store owner requests deletion of data on behalf of a customer,\n // Shopify sends a payload on the customers/redact topic to the apps installed on that store.\n // If the customer hasn't placed an order in the past six months,\n // then Shopify sends the payload 10 days after their request.\n // Otherwise, the the request will be withheld until 6 months have passed.\n // If your app has been granted access to the store's customers or orders,\n // then you receive a redaction request webhook with the resource IDs that you need to redact or delete.\n // In some cases, a customer record contains only the customer's email address.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\",\n // \"customer\": {\n // \"id\": 191167,\n // \"email\": \"john@email.com\",\n // \"phone\": \"555-625-1199\"\n // },\n // \"orders_to_redact\": [299938, 280263, 220458]\n // }\n\n context.status = 200\n})\n\nshopifyPublicRouter.post('/webhook-shopify/shop/redact', async (context, next) => {\n // 48 hours after a store owner uninstalls your app,\n // Shopify sends you a shop/redact webhook.\n // This webhook provides the store's shop_id and shop_domain so that you can erase the customer information\n // for that store from your database.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\"\n // }\n\n context.status = 200\n})\n\nshopifyPublicRouter.post('/webhook-shopify/customers/data_request', async (context, next) => {\n // When a customer requests their data from a store owner,\n // Shopify sends a payload on the customers/data_request topic to the apps installed on that store.\n // If your app has been granted access to customers or orders,\n // then you receive a data request webhook with the resource IDs of the data that you need to provide to the store owner.\n // It's your responsibility to provide this data to the store owner directly.\n // In some cases, a customer record contains only the customer's email address.\n //\n // https://shopify.dev/tutorials/add-gdpr-webhooks-to-your-app\n // {\n // \"shop_id\": 954889,\n // \"shop_domain\": \"snowdevil.myshopify.com\",\n // \"orders_requested\": [299938, 280263, 220458],\n // \"customer\": {\n // \"id\": 191167,\n // \"email\": \"john@email.com\",\n // \"phone\": \"555-625-1199\"\n // },\n // \"data_request\": {\n // \"id\": 9999\n // }\n // }\n\n context.status = 200\n})\n"]}
|