From 60b9d0da67365fd35e0f1e2ecdaa5cb2f654c346 Mon Sep 17 00:00:00 2001 From: Michael Lim <42158621+malexanderlim@users.noreply.github.com> Date: Tue, 3 Dec 2024 23:43:57 -0800 Subject: [PATCH] Revert "Webflow V2 migration (#14734)" This reverts commit 80f8dbef29cc62ef3ebf6a1beab1cc91b201877c. --- .../actions/common/constants.mjs | 0 .../create-collection-item.mjs | 50 ++++-- .../delete-collection-item.mjs | 24 +-- .../actions/fulfill-order/fulfill-order.mjs | 23 +-- .../get-collection-item.mjs | 21 ++- .../actions/get-collection/get-collection.mjs | 14 +- .../get-item-inventory/get-item-inventory.mjs | 18 +- .../webflow/actions/get-order/get-order.mjs | 34 ++++ .../actions/get-site/get-site.mjs | 12 +- .../list-collection-items.mjs | 16 +- .../list-collections/list-collections.mjs | 12 +- .../actions/list-orders/list-orders.mjs | 22 +-- .../actions/list-sites/list-sites.mjs | 10 +- .../actions/publish-site/publish-site.mjs | 39 ++++ .../actions/refund-order/refund-order.mjs | 16 +- .../unfulfill-order/unfulfill-order.mjs | 16 +- .../update-collection-item.mjs | 93 ++++++++++ .../update-item-inventory.mjs | 37 ++-- .../actions/update-order/update-order.mjs | 28 ++- .../common/constants.mjs | 0 .../changed-collection-item.mjs | 17 +- .../changed-ecommerce-inventory.mjs | 15 +- .../changed-ecommerce-order.mjs | 17 +- .../sources/common/collection-common.mjs | 30 ++++ components/webflow/sources/common/common.mjs | 87 +++++++++ .../new-collection-item.mjs | 57 ++++++ .../new-deleted-collection-item.mjs | 13 +- .../new-ecommerce-order.mjs | 79 ++++++++ .../new-form-submission.mjs | 15 +- .../new-form-submission/test-event.mjs | 0 .../new-site-published/new-site-published.mjs | 45 +++++ .../actions/get-order/get-order.mjs | 31 ---- .../actions/publish-site/publish-site.mjs | 34 ---- .../update-collection-item.mjs | 95 ---------- components/webflow_v2/package.json | 8 +- .../webflow_v2/sources/common/common.mjs | 63 ------- .../new-collection-item.mjs | 26 --- .../new-ecommerce-order.mjs | 37 ---- .../new-site-published/new-site-published.mjs | 25 --- components/webflow_v2/webflow_v2.app.mjs | 169 +----------------- pnpm-lock.yaml | 24 +-- 41 files changed, 690 insertions(+), 682 deletions(-) rename components/{webflow_v2 => webflow}/actions/common/constants.mjs (100%) rename components/{webflow_v2 => webflow}/actions/create-collection-item/create-collection-item.mjs (59%) rename components/{webflow_v2 => webflow}/actions/delete-collection-item/delete-collection-item.mjs (65%) rename components/{webflow_v2 => webflow}/actions/fulfill-order/fulfill-order.mjs (61%) rename components/{webflow_v2 => webflow}/actions/get-collection-item/get-collection-item.mjs (66%) rename components/{webflow_v2 => webflow}/actions/get-collection/get-collection.mjs (70%) rename components/{webflow_v2 => webflow}/actions/get-item-inventory/get-item-inventory.mjs (66%) create mode 100644 components/webflow/actions/get-order/get-order.mjs rename components/{webflow_v2 => webflow}/actions/get-site/get-site.mjs (65%) rename components/{webflow_v2 => webflow}/actions/list-collection-items/list-collection-items.mjs (61%) rename components/{webflow_v2 => webflow}/actions/list-collections/list-collections.mjs (65%) rename components/{webflow_v2 => webflow}/actions/list-orders/list-orders.mjs (56%) rename components/{webflow_v2 => webflow}/actions/list-sites/list-sites.mjs (63%) create mode 100644 components/webflow/actions/publish-site/publish-site.mjs rename components/{webflow_v2 => webflow}/actions/refund-order/refund-order.mjs (59%) rename components/{webflow_v2 => webflow}/actions/unfulfill-order/unfulfill-order.mjs (59%) create mode 100644 components/webflow/actions/update-collection-item/update-collection-item.mjs rename components/{webflow_v2 => webflow}/actions/update-item-inventory/update-item-inventory.mjs (58%) rename components/{webflow_v2 => webflow}/actions/update-order/update-order.mjs (65%) rename components/{webflow_v2 => webflow}/common/constants.mjs (100%) rename components/{webflow_v2 => webflow}/sources/changed-collection-item/changed-collection-item.mjs (50%) rename components/{webflow_v2 => webflow}/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs (61%) rename components/{webflow_v2 => webflow}/sources/changed-ecommerce-order/changed-ecommerce-order.mjs (57%) create mode 100644 components/webflow/sources/common/collection-common.mjs create mode 100644 components/webflow/sources/common/common.mjs create mode 100644 components/webflow/sources/new-collection-item/new-collection-item.mjs rename components/{webflow_v2 => webflow}/sources/new-deleted-collection-item/new-deleted-collection-item.mjs (63%) create mode 100644 components/webflow/sources/new-ecommerce-order/new-ecommerce-order.mjs rename components/{webflow_v2 => webflow}/sources/new-form-submission/new-form-submission.mjs (50%) rename components/{webflow_v2 => webflow}/sources/new-form-submission/test-event.mjs (100%) create mode 100644 components/webflow/sources/new-site-published/new-site-published.mjs delete mode 100644 components/webflow_v2/actions/get-order/get-order.mjs delete mode 100644 components/webflow_v2/actions/publish-site/publish-site.mjs delete mode 100644 components/webflow_v2/actions/update-collection-item/update-collection-item.mjs delete mode 100644 components/webflow_v2/sources/common/common.mjs delete mode 100644 components/webflow_v2/sources/new-collection-item/new-collection-item.mjs delete mode 100644 components/webflow_v2/sources/new-ecommerce-order/new-ecommerce-order.mjs delete mode 100644 components/webflow_v2/sources/new-site-published/new-site-published.mjs diff --git a/components/webflow_v2/actions/common/constants.mjs b/components/webflow/actions/common/constants.mjs similarity index 100% rename from components/webflow_v2/actions/common/constants.mjs rename to components/webflow/actions/common/constants.mjs diff --git a/components/webflow_v2/actions/create-collection-item/create-collection-item.mjs b/components/webflow/actions/create-collection-item/create-collection-item.mjs similarity index 59% rename from components/webflow_v2/actions/create-collection-item/create-collection-item.mjs rename to components/webflow/actions/create-collection-item/create-collection-item.mjs index b9d091eb708e8..40ee7857d9fb8 100644 --- a/components/webflow_v2/actions/create-collection-item/create-collection-item.mjs +++ b/components/webflow/actions/create-collection-item/create-collection-item.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-create-collection-item", + key: "webflow-create-collection-item", name: "Create Collection Item", description: "Create new collection item. [See the docs here](https://developers.webflow.com/#create-new-collection-item)", - version: "0.0.1", + version: "0.1.7", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -24,15 +24,21 @@ export default { ], reloadProps: true, }, + live: { + label: "Live", + description: "Indicate if the item should be published to the live site", + type: "boolean", + default: false, + }, }, async additionalProps() { const props = {}; if (!this.collectionId) { return props; } - const { fields } = await this.app.getCollection(this.collectionId); + const { fields } = await this.webflow.getCollection(this.collectionId); for (const field of fields) { - if (field.isEditable && field.slug !== "isArchived" && field.slug !== "isDraft") { + if (field.editable && field.slug !== "_archived" && field.slug !== "_draft") { props[field.slug] = { type: "string", label: field.name, @@ -41,7 +47,7 @@ export default { : field.slug === "slug" ? "URL structure of the Item in your site." : "See the documentation for additional information about [Field Types & Item Values](https://developers.webflow.com/reference/field-types-item-values).", - optional: !field.isRequired, + optional: !field.required, }; } } @@ -49,23 +55,29 @@ export default { }, async run({ $ }) { const { - app, + webflow, // eslint-disable-next-line no-unused-vars siteId, + // eslint-disable-next-line no-unused-vars collectionId, - ...fieldData + live, + ...fields } = this; - const response = await app.createCollectionItem( - collectionId, - { - fieldData, - isArchived: false, - isDraft: false, + const webflowClient = webflow._createApiClient(); + + const response = await webflowClient.createItem({ + collectionId: this.collectionId, + fields: { + ...fields, + _archived: false, + _draft: false, }, - ); + }, { + live, + }); - $.export("$summary", `Successfully created collection item ${this.name ?? ""}`); + $.export("$summary", `Successfully created collection item ${fields.name}`); return response; }, diff --git a/components/webflow_v2/actions/delete-collection-item/delete-collection-item.mjs b/components/webflow/actions/delete-collection-item/delete-collection-item.mjs similarity index 65% rename from components/webflow_v2/actions/delete-collection-item/delete-collection-item.mjs rename to components/webflow/actions/delete-collection-item/delete-collection-item.mjs index be0d12f906afa..cf329275da710 100644 --- a/components/webflow_v2/actions/delete-collection-item/delete-collection-item.mjs +++ b/components/webflow/actions/delete-collection-item/delete-collection-item.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-delete-collection-item", + key: "webflow-delete-collection-item", name: "Delete Collection Item", description: "Delete Item of a Collection. [See the docs here](https://developers.webflow.com/#remove-collection-item)", - version: "0.0.1", + version: "0.0.5", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,7 +25,7 @@ export default { }, itemId: { propDefinition: [ - app, + webflow, "items", (c) => ({ collectionId: c.collectionId, @@ -34,10 +34,12 @@ export default { }, }, async run({ $ }) { - const { - collectionId, itemId, - } = this; - const response = await this.app.deleteCollectionItem(collectionId, itemId); + const webflow = this.webflow._createApiClient(); + + const response = await webflow.removeItem({ + collectionId: this.collectionId, + itemId: this.itemId, + }); $.export("$summary", "Successfully deleted item"); diff --git a/components/webflow_v2/actions/fulfill-order/fulfill-order.mjs b/components/webflow/actions/fulfill-order/fulfill-order.mjs similarity index 61% rename from components/webflow_v2/actions/fulfill-order/fulfill-order.mjs rename to components/webflow/actions/fulfill-order/fulfill-order.mjs index 036cf7e9fde82..860cd41233a97 100644 --- a/components/webflow_v2/actions/fulfill-order/fulfill-order.mjs +++ b/components/webflow/actions/fulfill-order/fulfill-order.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-fulfill-order", + key: "webflow-fulfill-order", name: "Fulfill Order", description: "Fulfill an order. [See the docs here](https://developers.webflow.com/#fulfill-order)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, orderId: { propDefinition: [ - app, + webflow, "orders", ], }, @@ -28,10 +28,13 @@ export default { }, }, async run({ $ }) { - const { - app, siteId, orderId, ...data - } = this; - const response = await app.fulfillOrder(siteId, orderId, data); + const apiClient = this.webflow._createApiClient(); + + const response = await apiClient.post(`/sites/${this.siteId}/order/${this.orderId}/fulfill`, { + data: { + sendOrderFulfilledEmail: this.sendOrderFulfilledEmail, + }, + }); $.export("$summary", "Successfully fulfilled order"); diff --git a/components/webflow_v2/actions/get-collection-item/get-collection-item.mjs b/components/webflow/actions/get-collection-item/get-collection-item.mjs similarity index 66% rename from components/webflow_v2/actions/get-collection-item/get-collection-item.mjs rename to components/webflow/actions/get-collection-item/get-collection-item.mjs index 7d687378800b4..55875f7e15b38 100644 --- a/components/webflow_v2/actions/get-collection-item/get-collection-item.mjs +++ b/components/webflow/actions/get-collection-item/get-collection-item.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-get-collection-item", + key: "webflow-get-collection-item", name: "Get Collection Item", description: "Get a Collection Item. [See the docs here](https://developers.webflow.com/#get-single-item)", - version: "0.0.1", + version: "0.1.7", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,7 +25,7 @@ export default { }, itemId: { propDefinition: [ - app, + webflow, "items", (c) => ({ collectionId: c.collectionId, @@ -34,7 +34,12 @@ export default { }, }, async run({ $ }) { - const response = await this.app.getCollectionItem(this.collectionId, this.itemId); + const webflow = this.webflow._createApiClient(); + + const response = await webflow.item({ + collectionId: this.collectionId, + itemId: this.itemId, + }); $.export("$summary", "Successfully retrieved collection item"); diff --git a/components/webflow_v2/actions/get-collection/get-collection.mjs b/components/webflow/actions/get-collection/get-collection.mjs similarity index 70% rename from components/webflow_v2/actions/get-collection/get-collection.mjs rename to components/webflow/actions/get-collection/get-collection.mjs index ad69e2dc63b75..6464bb1601ee8 100644 --- a/components/webflow_v2/actions/get-collection/get-collection.mjs +++ b/components/webflow/actions/get-collection/get-collection.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-get-collection", + key: "webflow-get-collection", name: "Get Collection", description: "Get a collection. [See the docs here](https://developers.webflow.com/#get-collection-with-full-schema)", - version: "0.0.1", + version: "0.0.5", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,7 +25,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.getCollection(this.collectionId); + const response = await this.webflow.getCollection(this.collectionId); $.export("$summary", "Successfully retrieved collection"); diff --git a/components/webflow_v2/actions/get-item-inventory/get-item-inventory.mjs b/components/webflow/actions/get-item-inventory/get-item-inventory.mjs similarity index 66% rename from components/webflow_v2/actions/get-item-inventory/get-item-inventory.mjs rename to components/webflow/actions/get-item-inventory/get-item-inventory.mjs index 85538cbb6b318..5dace536d6139 100644 --- a/components/webflow_v2/actions/get-item-inventory/get-item-inventory.mjs +++ b/components/webflow/actions/get-item-inventory/get-item-inventory.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-get-item-inventory", + key: "webflow-get-item-inventory", name: "Get Item Inventory", description: "Get the inventory of a specific item. [See the docs here](https://developers.webflow.com/#item-inventory)", - version: "0.0.1", + version: "0.0.5", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,7 +25,7 @@ export default { }, itemId: { propDefinition: [ - app, + webflow, "items", (c) => ({ collectionId: c.collectionId, @@ -34,7 +34,9 @@ export default { }, }, async run({ $ }) { - const response = await this.app.getCollectionItemInventory(this.collectionId, this.itemId); + const apiClient = this.webflow._createApiClient(); + + const response = await apiClient.apiClient.get(`/collections/${this.collectionId}/items/${this.itemId}/inventory`); $.export("$summary", "Successfully retrieved item inventory"); diff --git a/components/webflow/actions/get-order/get-order.mjs b/components/webflow/actions/get-order/get-order.mjs new file mode 100644 index 0000000000000..25785b53fbfb1 --- /dev/null +++ b/components/webflow/actions/get-order/get-order.mjs @@ -0,0 +1,34 @@ +import webflow from "../../webflow.app.mjs"; + +export default { + key: "webflow-get-order", + name: "Get Order", + description: "Get an order. [See the docs here](https://developers.webflow.com/#get-order)", + version: "0.0.4", + type: "action", + props: { + webflow, + siteId: { + propDefinition: [ + webflow, + "sites", + ], + }, + orderId: { + propDefinition: [ + webflow, + "orders", + ], + }, + }, + async run({ $ }) { + const response = await this.webflow.getOrder({ + siteId: this.siteId, + orderId: this.orderId, + }); + + $.export("$summary", "Successfully retrieved order"); + + return response; + }, +}; diff --git a/components/webflow_v2/actions/get-site/get-site.mjs b/components/webflow/actions/get-site/get-site.mjs similarity index 65% rename from components/webflow_v2/actions/get-site/get-site.mjs rename to components/webflow/actions/get-site/get-site.mjs index ddcfeaff96918..2af7c05bdbad0 100644 --- a/components/webflow_v2/actions/get-site/get-site.mjs +++ b/components/webflow/actions/get-site/get-site.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-get-site", + key: "webflow-get-site", name: "Get Site", description: "Get a site. [See the docs here](https://developers.webflow.com/#get-specific-site)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, }, async run({ $ }) { - const response = await this.app.getSite(this.siteId); + const response = await this.webflow.getSite(this.siteId); $.export("$summary", "Successfully retrieved site"); diff --git a/components/webflow_v2/actions/list-collection-items/list-collection-items.mjs b/components/webflow/actions/list-collection-items/list-collection-items.mjs similarity index 61% rename from components/webflow_v2/actions/list-collection-items/list-collection-items.mjs rename to components/webflow/actions/list-collection-items/list-collection-items.mjs index 7801319f5dcc9..12bcf43885ce3 100644 --- a/components/webflow_v2/actions/list-collection-items/list-collection-items.mjs +++ b/components/webflow/actions/list-collection-items/list-collection-items.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-list-collection-items", + key: "webflow-list-collection-items", name: "List Collection Items", description: "List Items of a collection. [See the docs here](https://developers.webflow.com/#get-all-items-for-a-collection)", - version: "0.0.1", + version: "0.0.5", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,9 +25,9 @@ export default { }, }, async run({ $ }) { - const response = await this.app.listCollectionItems(0, this.collectionId); + const response = await this.webflow.getItems(0, this.collectionId); - $.export("$summary", "Successfully retrieved collection's items"); + $.export("$summary", "Successfully retrieved collections items"); return response; }, diff --git a/components/webflow_v2/actions/list-collections/list-collections.mjs b/components/webflow/actions/list-collections/list-collections.mjs similarity index 65% rename from components/webflow_v2/actions/list-collections/list-collections.mjs rename to components/webflow/actions/list-collections/list-collections.mjs index 3cc625e8fd03d..84077c56f1f6d 100644 --- a/components/webflow_v2/actions/list-collections/list-collections.mjs +++ b/components/webflow/actions/list-collections/list-collections.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-list-collections", + key: "webflow-list-collections", name: "List Collections", description: "List collections. [See the docs here](https://developers.webflow.com/#list-collections)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, }, async run({ $ }) { - const response = await this.app.listCollections(this.siteId); + const response = await this.webflow.getCollections(this.siteId); $.export("$summary", "Successfully retrieved collections"); diff --git a/components/webflow_v2/actions/list-orders/list-orders.mjs b/components/webflow/actions/list-orders/list-orders.mjs similarity index 56% rename from components/webflow_v2/actions/list-orders/list-orders.mjs rename to components/webflow/actions/list-orders/list-orders.mjs index 4768ee641b631..2d489ebeca791 100644 --- a/components/webflow_v2/actions/list-orders/list-orders.mjs +++ b/components/webflow/actions/list-orders/list-orders.mjs @@ -1,35 +1,35 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; import constants from "../common/constants.mjs"; export default { - key: "webflow_v2-list-orders", + key: "webflow-list-orders", name: "List Orders", description: "List orders. [See the docs here](https://developers.webflow.com/#get-all-orders)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, status: { label: "Status", - description: "If specified, only orders with this status will be listed.", + description: "The status to filter the orders.", type: "string", options: constants.ORDER_STATUSES, optional: true, }, }, async run({ $ }) { - const { - app, ...data - } = this; - const response = await app.listOrders(data); + const response = await this.webflow.getOrders({ + siteId: this.siteId, + status: this.status, + }); - $.export("$summary", `Successfully retrieved ${response?.length} orders`); + $.export("$summary", "Successfully retrieved orders"); return response; }, diff --git a/components/webflow_v2/actions/list-sites/list-sites.mjs b/components/webflow/actions/list-sites/list-sites.mjs similarity index 63% rename from components/webflow_v2/actions/list-sites/list-sites.mjs rename to components/webflow/actions/list-sites/list-sites.mjs index c14fbb796c54d..6ef0ec3ef218d 100644 --- a/components/webflow_v2/actions/list-sites/list-sites.mjs +++ b/components/webflow/actions/list-sites/list-sites.mjs @@ -1,16 +1,16 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-list-sites", + key: "webflow-list-sites", name: "List Sites", description: "List sites. [See the docs here](https://developers.webflow.com/#list-sites)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, }, async run({ $ }) { - const response = await this.app.listSites(); + const response = await this.webflow.getSites(); $.export("$summary", "Successfully retrieved sites"); diff --git a/components/webflow/actions/publish-site/publish-site.mjs b/components/webflow/actions/publish-site/publish-site.mjs new file mode 100644 index 0000000000000..152c3f3162bd1 --- /dev/null +++ b/components/webflow/actions/publish-site/publish-site.mjs @@ -0,0 +1,39 @@ +import webflow from "../../webflow.app.mjs"; + +export default { + key: "webflow-publish-site", + name: "Publish Site", + description: "Get a site in a specific domain. [See the docs here](https://developers.webflow.com/#publish-site)", + version: "0.0.4", + type: "action", + props: { + webflow, + siteId: { + propDefinition: [ + webflow, + "sites", + ], + }, + domains: { + propDefinition: [ + webflow, + "domains", + (c) => ({ + siteId: c.siteId, + }), + ], + }, + }, + async run({ $ }) { + const webflow = this.webflow._createApiClient(); + + const response = await webflow.publishSite({ + siteId: this.siteId, + domains: this.domains, + }); + + $.export("$summary", "Successfully published site"); + + return response; + }, +}; diff --git a/components/webflow_v2/actions/refund-order/refund-order.mjs b/components/webflow/actions/refund-order/refund-order.mjs similarity index 59% rename from components/webflow_v2/actions/refund-order/refund-order.mjs rename to components/webflow/actions/refund-order/refund-order.mjs index 4a63293db6cc1..d5b9e536072a8 100644 --- a/components/webflow_v2/actions/refund-order/refund-order.mjs +++ b/components/webflow/actions/refund-order/refund-order.mjs @@ -1,28 +1,30 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-refund-order", + key: "webflow-refund-order", name: "Refund Order", description: "Refund an order. [See the docs here](https://developers.webflow.com/#refund-order)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, orderId: { propDefinition: [ - app, + webflow, "orders", ], }, }, async run({ $ }) { - const response = await this.app.refundOrder(this.siteId, this.orderId); + const apiClient = this.webflow._createApiClient(); + + const response = apiClient.get(`/sites/${this.siteId}/order/${this.orderId}/refund`); $.export("$summary", "Successfully refunded order"); diff --git a/components/webflow_v2/actions/unfulfill-order/unfulfill-order.mjs b/components/webflow/actions/unfulfill-order/unfulfill-order.mjs similarity index 59% rename from components/webflow_v2/actions/unfulfill-order/unfulfill-order.mjs rename to components/webflow/actions/unfulfill-order/unfulfill-order.mjs index e8f649395edd4..040d6b762ee40 100644 --- a/components/webflow_v2/actions/unfulfill-order/unfulfill-order.mjs +++ b/components/webflow/actions/unfulfill-order/unfulfill-order.mjs @@ -1,28 +1,30 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-unfulfill-order", + key: "webflow-unfulfill-order", name: "Unfulfill Order", description: "Unfulfill an order. [See the docs here](https://developers.webflow.com/#unfulfill-order)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, orderId: { propDefinition: [ - app, + webflow, "orders", ], }, }, async run({ $ }) { - const response = await this.app.unfulfillOrder(this.siteId, this.orderId); + const apiClient = this.webflow._createApiClient(); + + const response = apiClient.post(`/sites/${this.siteId}/order/${this.orderId}/unfulfill`); $.export("$summary", "Successfully unfulfilled order"); diff --git a/components/webflow/actions/update-collection-item/update-collection-item.mjs b/components/webflow/actions/update-collection-item/update-collection-item.mjs new file mode 100644 index 0000000000000..5ad131a1f4313 --- /dev/null +++ b/components/webflow/actions/update-collection-item/update-collection-item.mjs @@ -0,0 +1,93 @@ +import webflow from "../../webflow.app.mjs"; + +export default { + key: "webflow-update-collection-item", + name: "Update Collection Item", + description: "Update collection item. [See the documentation](https://developers.webflow.com/#update-collection-item)", + version: "0.1.7", + type: "action", + props: { + webflow, + siteId: { + propDefinition: [ + webflow, + "sites", + ], + }, + collectionId: { + propDefinition: [ + webflow, + "collections", + (c) => ({ + siteId: c.siteId, + }), + ], + reloadProps: true, + }, + itemId: { + propDefinition: [ + webflow, + "items", + (c) => ({ + collectionId: c.collectionId, + }), + ], + }, + }, + async additionalProps() { + const props = {}; + if (!this.collectionId) { + return props; + } + const { fields } = await this.webflow.getCollection(this.collectionId); + for (const field of fields) { + if (field.editable && field.slug !== "_archived" && field.slug !== "_draft") { + props[field.slug] = { + type: "string", + label: field.name, + description: field.slug === "name" + ? "Name given to the Item." + : field.slug === "slug" + ? "URL structure of the Item in your site. Note: Updates to an item slug will break all links referencing the old slug." + : "See the documentation for additional information about [Field Types & Item Values](https://developers.webflow.com/reference/field-types-item-values).", + optional: true, + }; + } + } + + return props; + }, + async run({ $ }) { + const { + webflow, + // eslint-disable-next-line no-unused-vars + siteId, + collectionId, + itemId, + name, + slug, + ...customFields + } = this; + + const webflowClient = webflow._createApiClient(); + + const item = await webflowClient.item({ + collectionId, + itemId, + }); + + const response = await webflowClient.updateItem({ + collectionId, + itemId, + name: name || item.name, + slug: slug || item.slug, + _archived: false, + _draft: false, + ...customFields, + }); + + $.export("$summary", "Successfully updated collection item"); + + return response; + }, +}; diff --git a/components/webflow_v2/actions/update-item-inventory/update-item-inventory.mjs b/components/webflow/actions/update-item-inventory/update-item-inventory.mjs similarity index 58% rename from components/webflow_v2/actions/update-item-inventory/update-item-inventory.mjs rename to components/webflow/actions/update-item-inventory/update-item-inventory.mjs index 059c39d0e6c19..443d8ddc897aa 100644 --- a/components/webflow_v2/actions/update-item-inventory/update-item-inventory.mjs +++ b/components/webflow/actions/update-item-inventory/update-item-inventory.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-update-item-inventory", + key: "webflow-update-item-inventory", name: "Update Item Inventory", description: "Update the inventory of a specific item. [See the docs here](https://developers.webflow.com/#update-item-inventory)", version: "0.0.5", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, collectionId: { propDefinition: [ - app, + webflow, "collections", (c) => ({ siteId: c.siteId, @@ -25,7 +25,7 @@ export default { }, itemId: { propDefinition: [ - app, + webflow, "items", (c) => ({ collectionId: c.collectionId, @@ -43,28 +43,35 @@ export default { }, quantity: { label: "Quantity", - description: "If specified, sets quantity to this value. Can only be used with the `finite` inventory type, and if `Update Quantity` is not specified.", + description: "The quantity will be seted with this value. This just can be used with `finite` option selected and without `updateQuantity` value.", type: "integer", optional: true, }, updateQuantity: { label: "Update Quantity", - description: "If specified, adds this value to the current quantity. Can only be used with the `finite` inventory type, and if `Quantity` is not specified.", + description: "This value will be added to the quantity. This just can be used with `finite` option selected and without `quantity` value.", type: "integer", optional: true, }, }, async run({ $ }) { + const apiClient = this.webflow._createApiClient(); + const { - app, - // eslint-disable-next-line no-unused-vars - siteId, - collectionId, - itemId, - ...data + inventoryType, + quantity, + updateQuantity, } = this; - const response = await app.updateCollectionItemInventory(collectionId, itemId, data); + const response = await apiClient.patch(`/collections/${this.collectionId}/items/${this.itemId}/inventory`, { + data: { + fields: { + inventoryType, + quantity, + updateQuantity, + }, + }, + }); $.export("$summary", "Successfully updated item inventory"); diff --git a/components/webflow_v2/actions/update-order/update-order.mjs b/components/webflow/actions/update-order/update-order.mjs similarity index 65% rename from components/webflow_v2/actions/update-order/update-order.mjs rename to components/webflow/actions/update-order/update-order.mjs index ddb3f0d44e350..74a22137dcb1b 100644 --- a/components/webflow_v2/actions/update-order/update-order.mjs +++ b/components/webflow/actions/update-order/update-order.mjs @@ -1,22 +1,22 @@ -import app from "../../webflow_v2.app.mjs"; +import webflow from "../../webflow.app.mjs"; export default { - key: "webflow_v2-update-order", + key: "webflow-update-order", name: "Update Order", description: "Update an order. [See the docs here](https://developers.webflow.com/#update-order)", - version: "0.0.1", + version: "0.0.4", type: "action", props: { - app, + webflow, siteId: { propDefinition: [ - app, + webflow, "sites", ], }, orderId: { propDefinition: [ - app, + webflow, "orders", ], }, @@ -40,11 +40,23 @@ export default { }, }, async run({ $ }) { + const apiClient = this.webflow._createApiClient(); + const { - app, siteId, orderId, ...data + comment, + shippingProvider, + shippingTracking, } = this; - const response = await app.updateOrder(siteId, orderId, data); + const response = await apiClient.post(`/sites/${this.siteId}/order/${this.orderId}`, { + data: { + fields: { + comment, + shippingProvider, + shippingTracking, + }, + }, + }); $.export("$summary", "Successfully updated order"); diff --git a/components/webflow_v2/common/constants.mjs b/components/webflow/common/constants.mjs similarity index 100% rename from components/webflow_v2/common/constants.mjs rename to components/webflow/common/constants.mjs diff --git a/components/webflow_v2/sources/changed-collection-item/changed-collection-item.mjs b/components/webflow/sources/changed-collection-item/changed-collection-item.mjs similarity index 50% rename from components/webflow_v2/sources/changed-collection-item/changed-collection-item.mjs rename to components/webflow/sources/changed-collection-item/changed-collection-item.mjs index 1464dce2ba8b6..0e818f3537291 100644 --- a/components/webflow_v2/sources/changed-collection-item/changed-collection-item.mjs +++ b/components/webflow/sources/changed-collection-item/changed-collection-item.mjs @@ -1,11 +1,11 @@ -import common from "../common/common.mjs"; +import common from "../common/collection-common.mjs"; export default { type: "source", - key: "webflow_v2-changed-collection-item", - name: "Collection Item Updated", + key: "webflow-changed-collection-item", + name: "New Changed Collection Item", description: "Emit new event when a collection item is changed. [See the docs here](https://developers.webflow.com/#model16)", - version: "0.0.1", + version: "0.2.3", ...common, methods: { ...common.methods, @@ -13,14 +13,11 @@ export default { return "collection_item_changed"; }, generateMeta(data) { - const { - id, fieldData, lastUpdated, - } = data; - const ts = Date.parse(lastUpdated); + const ts = Date.parse(data["updated-on"]); return { - id: `${id}-${ts}`, - summary: `Item updated: ${fieldData?.slug ?? fieldData?.name ?? id}`, + id: `${data._id}-${ts}`, + summary: `Collection ${data.slug} item changed`, ts, }; }, diff --git a/components/webflow_v2/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs b/components/webflow/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs similarity index 61% rename from components/webflow_v2/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs rename to components/webflow/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs index 155e43314e540..8e04702ce88b6 100644 --- a/components/webflow_v2/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs +++ b/components/webflow/sources/changed-ecommerce-inventory/changed-ecommerce-inventory.mjs @@ -2,10 +2,10 @@ import common from "../common/common.mjs"; export default { type: "source", - key: "webflow_v2-changed-ecommerce-inventory", - name: "E-commerce Inventory Updated", + key: "webflow-changed-ecommerce-inventory", + name: "New Changed E-commerce Inventory", description: "Emit new event when an e-commerce inventory level changes. [See the docs here](https://developers.webflow.com/#item-inventory)", - version: "0.0.1", + version: "0.2.3", ...common, methods: { ...common.methods, @@ -13,13 +13,12 @@ export default { return "ecomm_inventory_changed"; }, generateMeta(data) { - const ts = Date.now(); - const { id } = data; + const now = Date.now(); return { - id: `${id}-${ts}`, - summary: `E-comm inventory updated: ${id}`, - ts, + id: `${data._id}-${now}`, + summary: `E-commerce ${data._id} inventory changed`, + ts: now, }; }, }, diff --git a/components/webflow_v2/sources/changed-ecommerce-order/changed-ecommerce-order.mjs b/components/webflow/sources/changed-ecommerce-order/changed-ecommerce-order.mjs similarity index 57% rename from components/webflow_v2/sources/changed-ecommerce-order/changed-ecommerce-order.mjs rename to components/webflow/sources/changed-ecommerce-order/changed-ecommerce-order.mjs index 19833b42f3002..6f1a80be6af21 100644 --- a/components/webflow_v2/sources/changed-ecommerce-order/changed-ecommerce-order.mjs +++ b/components/webflow/sources/changed-ecommerce-order/changed-ecommerce-order.mjs @@ -2,22 +2,23 @@ import common from "../common/common.mjs"; export default { type: "source", - key: "webflow_v2-changed-ecommerce-order", - name: "E-commerce Order Updated", + key: "webflow-changed-ecommerce-order", + name: "New Changed E-commerce Order", description: "Emit new event when an e-commerce order is changed. [See the docs here](https://developers.webflow.com/#order-model)", - version: "0.0.1", + version: "0.2.3", ...common, methods: { ...common.methods, getWebhookTriggerType() { return "ecomm_order_changed"; }, - generateMeta({ orderId }) { - const ts = Date.now(); + generateMeta(data) { + const now = Date.now(); + return { - id: `${orderId}-${ts}`, - summary: `E-comm order updated: ${orderId}`, - ts, + id: `${data.orderId}-${now}`, + summary: `E-commerce order ${data.orderId} changed`, + ts: now, }; }, }, diff --git a/components/webflow/sources/common/collection-common.mjs b/components/webflow/sources/common/collection-common.mjs new file mode 100644 index 0000000000000..3149a11e30e93 --- /dev/null +++ b/components/webflow/sources/common/collection-common.mjs @@ -0,0 +1,30 @@ +import common from "./common.mjs"; +import webflow from "../../webflow.app.mjs"; + +export default { + ...common, + props: { + ...common.props, + collectionIds: { + label: "Collections", + description: "The collections to monitor for item changes", + type: "string[]", + optional: true, + propDefinition: [ + webflow, + "collections", + (c) => ({ + siteId: c.siteId, + }), + ], + }, + }, + methods: { + ...common.methods, + isEventRelevant(event) { + if (!this.collectionIds?.length) return true; + const { body: { _cid: collectionId } } = event; + return this.collectionIds.includes(collectionId); + }, + }, +}; diff --git a/components/webflow/sources/common/common.mjs b/components/webflow/sources/common/common.mjs new file mode 100644 index 0000000000000..8bbc816812e0f --- /dev/null +++ b/components/webflow/sources/common/common.mjs @@ -0,0 +1,87 @@ +import webflow from "../../webflow.app.mjs"; +import { v4 as uuid } from "uuid"; +import { axios } from "@pipedream/platform"; +import constants from "../../common/constants.mjs"; + +export default { + dedupe: "unique", + props: { + webflow, + siteId: { + propDefinition: [ + webflow, + "sites", + ], + }, + db: "$.service.db", + http: "$.interface.http", + }, + methods: { + async _makeRequest(path, params = {}) { + return axios(this, { + url: "https://api.webflow.com" + path, + headers: { + "Authorization": `Bearer ${this.webflow.$auth.oauth_access_token}`, + "Accept-Version": "1.0.0", + }, + params, + }); + }, + _getWebhookId() { + return this.db.get("webhookId"); + }, + _setWebhookId(webhookId) { + this.db.set("webhookId", webhookId); + }, + getWebhookTriggerType() { + throw new Error("getWebhookTriggerType is not implemented"); + }, + getWebhookFilter() { + return {}; + }, + isEventRelevant(event) { + if (event) return true; + }, + generateMeta(data) { + return { + id: data.id || uuid(), + summary: "New event", + ts: Date.now(), + }; + }, + processEvent(event) { + if (!this.isEventRelevant(event)) { + return; + } + + const { body } = event; + const meta = this.generateMeta(body); + this.$emit(body, meta); + }, + emitHistoricalEvents(events, limit = constants.DEPLOY_OFFSET) { + for (const event of events.slice(0, limit)) { + const meta = this.generateMeta(event); + this.$emit(event, meta); + } + }, + }, + hooks: { + async activate() { + const { endpoint } = this.http; + const triggerType = this.getWebhookTriggerType(); + const filter = this.getWebhookFilter(); + const webhook = await this.webflow.createWebhook( + this.siteId, endpoint, triggerType, filter, + ); + + this._setWebhookId(webhook._id); + }, + async deactivate() { + const webhookId = this._getWebhookId(); + await this.webflow.removeWebhook(this.siteId, webhookId); + }, + }, + async run(event) { + await this.processEvent(event); + }, +}; diff --git a/components/webflow/sources/new-collection-item/new-collection-item.mjs b/components/webflow/sources/new-collection-item/new-collection-item.mjs new file mode 100644 index 0000000000000..5364ff0f38e22 --- /dev/null +++ b/components/webflow/sources/new-collection-item/new-collection-item.mjs @@ -0,0 +1,57 @@ +import constants from "../../common/constants.mjs"; +import common from "../common/collection-common.mjs"; + +export default { + type: "source", + key: "webflow-new-collection-item", + name: "New Collection Item", + description: "Emit new event when a collection item is created. [See the docs here](https://developers.webflow.com/#item-model)", + version: "0.2.3", + ...common, + hooks: { + ...common.hooks, + async deploy() { + if (this.collectionIds?.length !== 1) { + console.log("Skipping retrieval of historical events for multiple or no Collection ID"); + return; + } + + const path = `/collections/${this.collectionIds[0]}/items`; + console.log("Retrieving historical events..."); + + let { + total, + items: events, + } = await this._makeRequest(path); + + if (total > constants.LIMIT) { + const offset = Math.floor(total / constants.LIMIT); + + events = (await this._makeRequest(path, { + offset, + })).items.reverse(); + + events.push(...(await this._makeRequest(path, { + offset: offset - 1, + })).items.reverse()); + } else { + events.reverse(); + } + + this.emitHistoricalEvents(events); + }, + }, + methods: { + ...common.methods, + getWebhookTriggerType() { + return "collection_item_created"; + }, + generateMeta(data) { + return { + id: data._id, + summary: `New collection item ${data.slug} created`, + ts: Date.parse(data["created-on"]), + }; + }, + }, +}; diff --git a/components/webflow_v2/sources/new-deleted-collection-item/new-deleted-collection-item.mjs b/components/webflow/sources/new-deleted-collection-item/new-deleted-collection-item.mjs similarity index 63% rename from components/webflow_v2/sources/new-deleted-collection-item/new-deleted-collection-item.mjs rename to components/webflow/sources/new-deleted-collection-item/new-deleted-collection-item.mjs index 4c0463ff7bafe..169c29d0203ff 100644 --- a/components/webflow_v2/sources/new-deleted-collection-item/new-deleted-collection-item.mjs +++ b/components/webflow/sources/new-deleted-collection-item/new-deleted-collection-item.mjs @@ -2,10 +2,10 @@ import common from "../common/common.mjs"; export default { type: "source", - key: "webflow_v2-new-deleted-collection-item", - name: "Collection Item Deleted", + key: "webflow-new-deleted-collection-item", + name: "New Deleted Collection Item", description: "Emit new event when a collection item is deleted. [See the docs here](https://developers.webflow.com/#item-model)", - version: "0.0.1", + version: "0.2.3", ...common, methods: { ...common.methods, @@ -13,11 +13,10 @@ export default { return "collection_item_deleted"; }, generateMeta(data) { - const { id } = data; return { - id, - summary: `Item deleted: ${id}`, - ts: Date.now(), + id: data.itemId, + summary: `Collection item ${data.itemId} deleted.`, + ts: Date.parse(data["created-on"]), }; }, }, diff --git a/components/webflow/sources/new-ecommerce-order/new-ecommerce-order.mjs b/components/webflow/sources/new-ecommerce-order/new-ecommerce-order.mjs new file mode 100644 index 0000000000000..d7c3e709439c0 --- /dev/null +++ b/components/webflow/sources/new-ecommerce-order/new-ecommerce-order.mjs @@ -0,0 +1,79 @@ +import common from "../common/common.mjs"; + +export default { + type: "source", + key: "webflow-new-ecommerce-order", + name: "New E-commerce Order", + description: "Emit new event when an e-commerce order is created. [See the docs here](https://developers.webflow.com/#order-model)", + version: "0.2.3", + ...common, + props: { + ...common.props, + historicalEventsNumber: { + type: "integer", + label: "Number of Historical Events to Emit", + description: "Defaults to `0`. Number of historical events to fetch and emit. Maximum is `100`.", + optional: true, + default: 0, + min: 0, + max: 100, + }, + emitMostRecent: { + type: "boolean", + label: "Emit Most Recent Events", + description: "Defaults to `false`. **Warning**: if `true`, will need to request all orders to extract the most recent ones.", + default: false, + }, + }, + hooks: { + ...common.hooks, + async deploy() { + if (!this.historicalEventsNumber) { + return; + } + + const path = `/sites/${this.siteId}/orders`; + console.log("Retrieving historical events..."); + + if (!this.emitMostRecent) { + const events = await this._makeRequest(path, { + limit: this.historicalEventsNumber, + }); + this.emitHistoricalEvents(events); + return; + } + + let toEmit = []; + let events = []; + const params = { + offset: 0, + }; + + do { + events = await this._makeRequest(path, params); + + if (toEmit.push(...events) > 100) { + toEmit = toEmit.slice(toEmit.length - 100, toEmit.length); + } + + params.offset += 1; + } while (events.length > 0); + + toEmit.reverse(); + this.emitHistoricalEvents(toEmit, this.historicalEventsNumber); + }, + }, + methods: { + ...common.methods, + getWebhookTriggerType() { + return "ecomm_new_order"; + }, + generateMeta(data) { + return { + id: data.orderId, + summary: `New ${data.orderId} e-commerce order`, + ts: Date.parse(data.acceptedOn), + }; + }, + }, +}; diff --git a/components/webflow_v2/sources/new-form-submission/new-form-submission.mjs b/components/webflow/sources/new-form-submission/new-form-submission.mjs similarity index 50% rename from components/webflow_v2/sources/new-form-submission/new-form-submission.mjs rename to components/webflow/sources/new-form-submission/new-form-submission.mjs index 461a0411ad526..d29791ef41bbd 100644 --- a/components/webflow_v2/sources/new-form-submission/new-form-submission.mjs +++ b/components/webflow/sources/new-form-submission/new-form-submission.mjs @@ -3,10 +3,10 @@ import sampleEmit from "./test-event.mjs"; export default { type: "source", - key: "webflow_v2-new-form-submission", + key: "webflow-new-form-submission", name: "New Form Submission", - description: "Emit new event when a form is submitted. [See the docs here](https://developers.webflow.com/#trigger-types)", - version: "0.0.1", + description: "Emit new event when a new form is submitted. [See the docs here](https://developers.webflow.com/#trigger-types)", + version: "0.2.4", ...common, methods: { ...common.methods, @@ -14,13 +14,10 @@ export default { return "form_submission"; }, generateMeta(data) { - const { - name, id, submittedAt, - } = data; return { - id, - summary: `Form submitted: ${name ?? id}`, - ts: Date.parse(submittedAt), + id: data._id, + summary: `New form ${data._id} submission`, + ts: Date.parse(data.date), }; }, }, diff --git a/components/webflow_v2/sources/new-form-submission/test-event.mjs b/components/webflow/sources/new-form-submission/test-event.mjs similarity index 100% rename from components/webflow_v2/sources/new-form-submission/test-event.mjs rename to components/webflow/sources/new-form-submission/test-event.mjs diff --git a/components/webflow/sources/new-site-published/new-site-published.mjs b/components/webflow/sources/new-site-published/new-site-published.mjs new file mode 100644 index 0000000000000..571cec7662565 --- /dev/null +++ b/components/webflow/sources/new-site-published/new-site-published.mjs @@ -0,0 +1,45 @@ +import constants from "../../common/constants.mjs"; +import common from "../common/common.mjs"; + +export default { + type: "source", + key: "webflow-new-site-published", + name: "New Site Published", + description: "Emit new event when a site is published. [See the docs here](https://developers.webflow.com/#trigger-types)", + version: "0.2.3", + ...common, + hooks: { + ...common.hooks, + async deploy() { + console.log("Retrieving historical events..."); + + const sites = await this._makeRequest("/sites", { + limit: this.historicalEventsNumber, + }); + + const filtered = sites.filter((site) => site.lastPublished); + const sliced = filtered.slice( + filtered.length - constants.DEPLOY_OFFSET, + constants.DEPLOY_OFFSET, + ); + const sorted = sliced.sort((a, b) => Date.parse(a.lastPublished) > Date.parse(b.lastPublished) + ? -1 + : 1); + + this.emitHistoricalEvents(sorted); + }, + }, + methods: { + ...common.methods, + getWebhookTriggerType() { + return "site_publish"; + }, + generateMeta(data) { + return { + id: `${data.site}-${data.publishTime}`, + summary: `The site ${data.site} has been published.`, + ts: data.publishTime, + }; + }, + }, +}; diff --git a/components/webflow_v2/actions/get-order/get-order.mjs b/components/webflow_v2/actions/get-order/get-order.mjs deleted file mode 100644 index fa8aa041b7970..0000000000000 --- a/components/webflow_v2/actions/get-order/get-order.mjs +++ /dev/null @@ -1,31 +0,0 @@ -import app from "../../webflow_v2.app.mjs"; - -export default { - key: "webflow_v2-get-order", - name: "Get Order", - description: "Get info on an order. [See the docs here](https://developers.webflow.com/#get-order)", - version: "0.0.1", - type: "action", - props: { - app, - siteId: { - propDefinition: [ - app, - "sites", - ], - }, - orderId: { - propDefinition: [ - app, - "orders", - ], - }, - }, - async run({ $ }) { - const response = await this.app.getOrder(this.siteId, this.orderId); - - $.export("$summary", "Successfully retrieved order"); - - return response; - }, -}; diff --git a/components/webflow_v2/actions/publish-site/publish-site.mjs b/components/webflow_v2/actions/publish-site/publish-site.mjs deleted file mode 100644 index 9b252874b3678..0000000000000 --- a/components/webflow_v2/actions/publish-site/publish-site.mjs +++ /dev/null @@ -1,34 +0,0 @@ -import app from "../../webflow_v2.app.mjs"; - -export default { - key: "webflow_v2-publish-site", - name: "Publish Site", - description: "Publish a site. [See the docs here](https://developers.webflow.com/#publish-site)", - version: "0.0.1", - type: "action", - props: { - app, - siteId: { - propDefinition: [ - app, - "sites", - ], - }, - domains: { - propDefinition: [ - app, - "domains", - (c) => ({ - siteId: c.siteId, - }), - ], - }, - }, - async run({ $ }) { - const response = await this.app.publishSite(this.siteId, this.domains); - - $.export("$summary", "Successfully published site"); - - return response; - }, -}; diff --git a/components/webflow_v2/actions/update-collection-item/update-collection-item.mjs b/components/webflow_v2/actions/update-collection-item/update-collection-item.mjs deleted file mode 100644 index bc4d0cbb75575..0000000000000 --- a/components/webflow_v2/actions/update-collection-item/update-collection-item.mjs +++ /dev/null @@ -1,95 +0,0 @@ -import app from "../../webflow_v2.app.mjs"; - -export default { - key: "webflow_v2-update-collection-item", - name: "Update Collection Item", - description: - "Update collection item. [See the documentation](https://developers.webflow.com/#update-collection-item)", - version: "0.0.1", - type: "action", - props: { - app, - siteId: { - propDefinition: [ - app, - "sites", - ], - }, - collectionId: { - propDefinition: [ - app, - "collections", - (c) => ({ - siteId: c.siteId, - }), - ], - }, - itemId: { - propDefinition: [ - app, - "items", - (c) => ({ - collectionId: c.collectionId, - }), - ], - reloadProps: true, - }, - }, - async additionalProps() { - const props = {}; - if (!this.collectionId) { - return props; - } - const { fields } = await this.app.getCollection(this.collectionId); - for (const field of fields) { - if ( - field.isEditable && - field.slug !== "isArchived" && - field.slug !== "isDraft" - ) { - props[field.slug] = { - type: "string", - label: field.name, - description: - field.slug === "name" - ? "Name given to the Item." - : field.slug === "slug" - ? "URL structure of the Item in your site. Note: Updates to an item slug will break all links referencing the old slug." - : "See the documentation for additional information about [Field Types & Item Values](https://developers.webflow.com/reference/field-types-item-values).", - optional: true, - }; - } - } - - return props; - }, - async run({ $ }) { - const { - app, - // eslint-disable-next-line no-unused-vars - siteId, - collectionId, - itemId, - name, - slug, - ...customFields - } = this; - - const item = await app.getCollectionItem(collectionId, itemId); - - const response = await app.updateCollectionItem(collectionId, itemId, { - id: itemId, - isArchived: false, - isDraft: false, - fieldData: { - ...customFields, - name: name || item.fieldData.name, - slug: slug || item.fieldData.slug, - }, - }); - - $.export("$summary", "Successfully updated collection item"); - - return response; - }, -}; diff --git a/components/webflow_v2/package.json b/components/webflow_v2/package.json index b2808e9dcb729..9ea5fe8b75feb 100644 --- a/components/webflow_v2/package.json +++ b/components/webflow_v2/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/webflow_v2", - "version": "0.1.0", + "version": "0.0.1", "description": "Pipedream Webflow (v2) Components", "main": "webflow_v2.app.mjs", "keywords": [ @@ -9,11 +9,7 @@ ], "homepage": "https://pipedream.com/apps/webflow_v2", "author": "Pipedream (https://pipedream.com/)", - "dependencies": { - "@pipedream/platform": "^3.0.3", - "webflow-api": "2.4.2" - }, "publishConfig": { "access": "public" } -} +} \ No newline at end of file diff --git a/components/webflow_v2/sources/common/common.mjs b/components/webflow_v2/sources/common/common.mjs deleted file mode 100644 index c5d08ccdce861..0000000000000 --- a/components/webflow_v2/sources/common/common.mjs +++ /dev/null @@ -1,63 +0,0 @@ -import app from "../../webflow_v2.app.mjs"; -import { v4 as uuid } from "uuid"; -import constants from "../../common/constants.mjs"; - -export default { - dedupe: "unique", - props: { - app, - siteId: { - propDefinition: [ - app, - "sites", - ], - }, - db: "$.service.db", - http: "$.interface.http", - }, - methods: { - _getWebhookId() { - return this.db.get("webhookId"); - }, - _setWebhookId(webhookId) { - this.db.set("webhookId", webhookId); - }, - getWebhookTriggerType() { - throw new Error("getWebhookTriggerType is not implemented"); - }, - generateMeta(data) { - return { - id: data.id || uuid(), - summary: "New event", - ts: Date.now(), - }; - }, - processEvent(event) { - const { body: { payload } } = event; - const meta = this.generateMeta(payload); - this.$emit(payload, meta); - }, - emitHistoricalEvents(events, limit = constants.DEPLOY_OFFSET) { - for (const event of events.slice(0, limit)) { - const meta = this.generateMeta(event); - this.$emit(event, meta); - } - }, - }, - hooks: { - async activate() { - const webhook = await this.app.createWebhook(this.siteId, { - url: this.http.endpoint, - triggerType: this.getWebhookTriggerType(), - }); - - this._setWebhookId(webhook?.id); - }, - async deactivate() { - await this.app.removeWebhook(this._getWebhookId()); - }, - }, - async run(event) { - await this.processEvent(event); - }, -}; diff --git a/components/webflow_v2/sources/new-collection-item/new-collection-item.mjs b/components/webflow_v2/sources/new-collection-item/new-collection-item.mjs deleted file mode 100644 index 463871690e238..0000000000000 --- a/components/webflow_v2/sources/new-collection-item/new-collection-item.mjs +++ /dev/null @@ -1,26 +0,0 @@ -import common from "../common/common.mjs"; - -export default { - type: "source", - key: "webflow_v2-new-collection-item", - name: "New Collection Item Created", - description: "Emit new event when a collection item is created. [See the docs here](https://developers.webflow.com/#item-model)", - version: "0.0.1", - ...common, - methods: { - ...common.methods, - getWebhookTriggerType() { - return "collection_item_created"; - }, - generateMeta(data) { - const { - id, fieldData, - } = data; - return { - id, - summary: `New item: ${fieldData?.slug ?? fieldData?.name ?? id}`, - ts: Date.parse(data["createdOn"]), - }; - }, - }, -}; diff --git a/components/webflow_v2/sources/new-ecommerce-order/new-ecommerce-order.mjs b/components/webflow_v2/sources/new-ecommerce-order/new-ecommerce-order.mjs deleted file mode 100644 index 9b1c8adb29ec8..0000000000000 --- a/components/webflow_v2/sources/new-ecommerce-order/new-ecommerce-order.mjs +++ /dev/null @@ -1,37 +0,0 @@ -import common from "../common/common.mjs"; - -export default { - type: "source", - key: "webflow_v2-new-ecommerce-order", - name: "New E-commerce Order", - description: - "Emit new event when an e-commerce order is created. [See the docs here](https://developers.webflow.com/#order-model)", - version: "0.0.1", - ...common, - hooks: { - ...common.hooks, - async deploy() { - const { siteId } = this; - console.log("Retrieving historical events..."); - - const events = await this.app.listOrders({ - siteId, - limit: 10, - }); - this.emitHistoricalEvents(events); - }, - }, - methods: { - ...common.methods, - getWebhookTriggerType() { - return "ecomm_new_order"; - }, - generateMeta(data) { - return { - id: data.orderId, - summary: `New ${data.orderId} e-commerce order`, - ts: Date.parse(data.acceptedOn), - }; - }, - }, -}; diff --git a/components/webflow_v2/sources/new-site-published/new-site-published.mjs b/components/webflow_v2/sources/new-site-published/new-site-published.mjs deleted file mode 100644 index a1f1e5aaee9a8..0000000000000 --- a/components/webflow_v2/sources/new-site-published/new-site-published.mjs +++ /dev/null @@ -1,25 +0,0 @@ -import common from "../common/common.mjs"; - -export default { - type: "source", - key: "webflow_v2-new-site-published", - name: "Site Published", - description: "Emit new event when a site is published. [See the docs here](https://developers.webflow.com/#trigger-types)", - version: "0.0.1", - ...common, - methods: { - ...common.methods, - getWebhookTriggerType() { - return "site_publish"; - }, - generateMeta({ - siteId, publishedOn, - }) { - return { - id: `${siteId}-${publishedOn}`, - summary: `Site published: ${siteId}`, - ts: Date.parse(publishedOn), - }; - }, - }, -}; diff --git a/components/webflow_v2/webflow_v2.app.mjs b/components/webflow_v2/webflow_v2.app.mjs index a0683c658dce7..2773a1f8c4584 100644 --- a/components/webflow_v2/webflow_v2.app.mjs +++ b/components/webflow_v2/webflow_v2.app.mjs @@ -1,170 +1,11 @@ -import { WebflowClient } from "webflow-api"; -import constants from "./common/constants.mjs"; - export default { type: "app", app: "webflow_v2", - propDefinitions: { - domains: { - label: "Custom Domains", - description: "Select one or more custom domains to publish.", - type: "string[]", - async options({ siteId }) { - const domains = await this.listDomains(siteId); - return domains.map((id, url) => ({ - label: url, - id, - })); - }, - }, - sites: { - label: "Site", - description: "Select a site or provide a custom site ID.", - type: "string", - async options() { - const sites = await this.listSites(); - - return sites.map((site) => ({ - label: site.displayName || site.shortName, - value: site.id, - })); - }, - }, - collections: { - label: "Collection", - description: "Select a collection or provide a custom collection ID.", - type: "string", - async options({ siteId }) { - const collections = await this.listCollections(siteId); - - return collections.map((collection) => ({ - label: collection.displayName || collection.slug, - value: collection.id, - })); - }, - }, - items: { - label: "Item", - description: "Select an item or provide a custom item ID.", - type: "string", - async options({ - collectionId, page, - }) { - const items = await this.listCollectionItems(page, collectionId); - - return items.map((item) => ({ - label: item.fieldData?.name || item.fieldData?.slug, - value: item.id, - })); - }, - }, - orders: { - label: "Order", - description: "Select an order, or provide a custom order ID.", - type: "string", - async options({ - siteId, page, - }) { - const items = await this.listOrders({ - page, - siteId, - }); - - return items.map((item) => item.orderId); - }, - }, - }, + propDefinitions: {}, methods: { - _authToken() { - return this.$auth.oauth_access_token; - }, - webflowClient() { - return new WebflowClient({ - accessToken: this._authToken(), - }); - }, - async createWebhook(siteId, data) { - return this.webflowClient().webhooks.create(siteId, data); - }, - async removeWebhook(webhookId) { - return this.webflowClient().webhooks.delete(webhookId); - }, - async getOrder(siteId, orderId) { - return this.webflowClient().orders.get(siteId, orderId); - }, - async listOrders({ - page: offset = 0, siteId, status, - }) { - const response = await this.webflowClient().orders.list(siteId, { - offset, - status, - }); - return response?.orders; - }, - async listDomains(siteId) { - const response = await this.webflowClient().sites.getCustomDomain(siteId); - return response?.customDomains; - }, - getSite(siteId) { - return this.webflowClient().sites.get(siteId); - }, - async listSites() { - const response = await this.webflowClient().sites.list(); - return response?.sites; - }, - getCollection(collectionId) { - return this.webflowClient().collections.get(collectionId); - }, - async listCollections(siteId) { - if (!siteId) return []; - - const response = await this.webflowClient().collections.list(siteId); - return response?.collections; - }, - async listCollectionItems(page = 0, collectionId) { - if (!collectionId) return []; - - const response = await this.webflowClient().collections.items.listItems(collectionId, { - limit: constants.LIMIT, - offset: page, - }); - - return response?.items; - }, - getCollectionItem(collectionId, itemId) { - return this.webflowClient().collections.items.getItem(collectionId, itemId); - }, - deleteCollectionItem(collectionId, itemId) { - return this.webflowClient().collections.items.deleteItem(collectionId, itemId); - }, - createCollectionItem(collectionId, data) { - return this.webflowClient().collections.items.createItem(collectionId, data); - }, - updateCollectionItem(collectionId, itemId, data) { - return this.webflowClient().collections.items.updateItem(collectionId, itemId, data); - }, - getCollectionItemInventory(collectionId, itemId) { - return this.webflowClient().inventory.list(collectionId, itemId); - }, - updateCollectionItemInventory(collectionId, itemId, data) { - return this.webflowClient().inventory.update(collectionId, itemId, data); - }, - publishSite(siteId, customDomains) { - return this.webflowClient().sites.publish(siteId, { - customDomains, - }); - }, - fulfillOrder(siteId, orderId, data) { - return this.webflowClient().orders.updateFulfill(siteId, orderId, data); - }, - unfulfillOrder(siteId, orderId) { - return this.webflowClient().orders.updateUnfulfill(siteId, orderId); - }, - refundOrder(siteId, orderId) { - return this.webflowClient().orders.refund(siteId, orderId); - }, - updateOrder(siteId, orderId, data) { - return this.webflowClient().orders.update(siteId, orderId, data); + // this.$auth contains connected account data + authKeys() { + console.log(Object.keys(this.$auth)); }, }, -}; +}; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 644468cb00f53..d03ce75fa0a0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11322,14 +11322,7 @@ importers: specifier: 1.3.1 version: 1.3.1 - components/webflow_v2: - dependencies: - '@pipedream/platform': - specifier: ^3.0.3 - version: 3.0.3 - webflow-api: - specifier: 2.4.2 - version: 2.4.2 + components/webflow_v2: {} components/webinarfuel: {} @@ -23787,9 +23780,6 @@ packages: webflow-api@1.3.1: resolution: {integrity: sha512-ij/Y7t7VqeS2doOhHaCSToKkZeItFwkgCS003mqbG6d51eUmihcJ2ri4SOiR3zTxmUYZO+sg1sF+aAqsY7tgiA==} - webflow-api@2.4.2: - resolution: {integrity: sha512-+znE6V6E6YULwZIGIk8NLFZaimGFH7xVEAjCeivHz4gV13Zcg4FRXyhWxxTHnOYBwKjcjDoaWl8ZK1H9mUA5mQ==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -40008,18 +39998,6 @@ snapshots: transitivePeerDependencies: - debug - webflow-api@2.4.2: - dependencies: - form-data: 4.0.1 - formdata-node: 6.0.3 - js-base64: 3.7.2 - node-fetch: 2.7.0 - qs: 6.11.2 - readable-stream: 4.5.2 - url-join: 4.0.1 - transitivePeerDependencies: - - encoding - webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {}