diff --git a/components/e_conomic/actions/book-invoice/book-invoice.mjs b/components/e_conomic/actions/book-invoice/book-invoice.mjs new file mode 100644 index 0000000000000..4db36c343af32 --- /dev/null +++ b/components/e_conomic/actions/book-invoice/book-invoice.mjs @@ -0,0 +1,44 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-book-invoice", + name: "Book Invoice", + description: "Books an invoice. [See the documentation](https://restdocs.e-conomic.com/#post-invoices-booked)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + economic, + draftInvoiceNumber: { + propDefinition: [ + economic, + "draftInvoiceNumber", + ], + }, + sendByEan: { + type: "boolean", + label: "Send by EAN", + description: "Send your invoice electronically via EAN (European Article Numbering)", + optional: true, + }, + }, + async run({ $ }) { + const response = await this.economic.bookInvoice({ + $, + data: { + draftInvoice: { + draftInvoiceNumber: this.draftInvoiceNumber, + }, + sendBy: this.sendByEan + ? "ean" + : undefined, + }, + }); + $.export("$summary", "Successfully booked invoice."); + return response; + }, +}; diff --git a/components/e_conomic/actions/create-customer/create-customer.mjs b/components/e_conomic/actions/create-customer/create-customer.mjs new file mode 100644 index 0000000000000..d701372b25117 --- /dev/null +++ b/components/e_conomic/actions/create-customer/create-customer.mjs @@ -0,0 +1,123 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-create-customer", + name: "Create Customer", + description: "Creates a new customer. [See the documentation](https://restdocs.e-conomic.com/#post-customers)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + economic, + name: { + propDefinition: [ + economic, + "name", + ], + }, + currency: { + propDefinition: [ + economic, + "currencyCode", + ], + }, + customerGroupNumber: { + propDefinition: [ + economic, + "customerGroupNumber", + ], + }, + paymentTermNumber: { + propDefinition: [ + economic, + "paymentTermNumber", + ], + }, + vatZoneNumber: { + propDefinition: [ + economic, + "vatZoneNumber", + ], + }, + email: { + propDefinition: [ + economic, + "email", + ], + }, + mobilePhone: { + propDefinition: [ + economic, + "mobilePhone", + ], + }, + website: { + propDefinition: [ + economic, + "website", + ], + }, + ean: { + propDefinition: [ + economic, + "ean", + ], + }, + address: { + propDefinition: [ + economic, + "streetAddress", + ], + }, + city: { + propDefinition: [ + economic, + "city", + ], + }, + zip: { + propDefinition: [ + economic, + "zip", + ], + }, + country: { + propDefinition: [ + economic, + "country", + ], + }, + }, + async run({ $ }) { + const response = await this.economic.createCustomer({ + $, + data: { + name: this.name, + currency: this.currency, + customerGroup: { + customerGroupNumber: this.customerGroupNumber, + }, + paymentTerms: { + paymentTermsNumber: this.paymentTermNumber, + }, + vatZone: { + vatZoneNumber: this.vatZoneNumber, + }, + email: this.email, + mobilePhone: this.mobilePhone, + website: this.website, + ean: this.ean, + address: this.address, + city: this.city, + zip: this.zip, + country: this.country, + }, + }); + $.export("$summary", "Successfully created customer."); + return response; + }, +}; diff --git a/components/e_conomic/actions/create-invoice/create-invoice.mjs b/components/e_conomic/actions/create-invoice/create-invoice.mjs new file mode 100644 index 0000000000000..143b06fdbf4fb --- /dev/null +++ b/components/e_conomic/actions/create-invoice/create-invoice.mjs @@ -0,0 +1,118 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-create-invoice", + name: "Create Invoice", + description: "Creates a new draft invoice. [See the documentation](https://restdocs.e-conomic.com/#post-invoices-drafts)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + economic, + currency: { + propDefinition: [ + economic, + "currencyCode", + ], + }, + customerNumber: { + propDefinition: [ + economic, + "customerNumber", + ], + }, + date: { + type: "string", + label: "Date", + description: "The date of the invoice in the format YYYY-MM-DD", + }, + layoutNumber: { + propDefinition: [ + economic, + "layoutNumber", + ], + }, + paymentTermNumber: { + propDefinition: [ + economic, + "paymentTermNumber", + ], + }, + recipientNmae: { + type: "string", + label: "Recipient Name", + description: "The name of the recipient of the invoice", + }, + recipientVatZoneNumber: { + propDefinition: [ + economic, + "vatZoneNumber", + ], + }, + productNumbers: { + propDefinition: [ + economic, + "productNumbers", + ], + withLabel: true, + reloadProps: true, + }, + }, + async additionalProps() { + const props = {}; + if (!this.productNumbers?.length) { + return props; + } + for (const productNumber of this.productNumbers) { + props[`${productNumber.value || productNumber}_quantity`] = { + type: "string", + label: `Quantity for Product ${productNumber.label || productNumber}`, + description: `The quantity of the product ${productNumber.label || productNumber} to add to the invoice`, + }; + } + return props; + }, + async run({ $ }) { + const lines = []; + for (let i = 0; i < this.productNumbers.length; i++) { + const productNumber = this.productNumbers[i].value || this.productNumbers[i]; + lines.push({ + lineNumber: i + 1, + product: { + productNumber, + }, + quantity: parseFloat(this[`${productNumber}_quantity`]), + }); + } + + const response = await this.economic.createDraftInvoice({ + $, + data: { + currency: this.currency, + customer: { + customerNumber: this.customerNumber, + }, + date: this.date, + layout: { + layoutNumber: this.layoutNumber, + }, + paymentTerms: { + paymentTermsNumber: this.paymentTermNumber, + }, + recipient: { + name: this.recipientName, + vatZone: { + vatZoneNumber: this.recipientVatZoneNumber, + }, + }, + lines, + }, + }); + $.export("$summary", "Successfully created invoice."); + return response; + }, +}; diff --git a/components/e_conomic/actions/create-voucher/create-voucher.mjs b/components/e_conomic/actions/create-voucher/create-voucher.mjs new file mode 100644 index 0000000000000..6d43aed37f9da --- /dev/null +++ b/components/e_conomic/actions/create-voucher/create-voucher.mjs @@ -0,0 +1,189 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-create-voucher", + name: "Create Voucher", + description: "Creates a new voucher. [See the documentation](https://restdocs.e-conomic.com/#get-journals-journalnumber-vouchers)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + economic, + journalNumber: { + propDefinition: [ + economic, + "journalNumber", + ], + }, + accountingYear: { + type: "string", + label: "Accounting Year", + description: "The accounting year of the voucher", + }, + customerPaymentAmount: { + type: "string", + label: "Customer Payment Amount", + description: "The amount of the customer payment", + }, + customerPaymentDate: { + type: "string", + label: "Customer Payment Date", + description: "The date of the customer payment", + }, + financeVoucherAmount: { + type: "string", + label: "Finance Voucher Amount", + description: "The amount of the finance voucher", + }, + financeVoucherDate: { + type: "string", + label: "Finance Voucher Date", + description: "The date of the finance voucher", + }, + manualCustomerInvoiceAmount: { + type: "string", + label: "Manual Customer Invoice Amount", + description: "The amount of the manual customer invoice", + }, + manualCustomerInvoiceDate: { + type: "string", + label: "Manual Customer Invoice Date", + description: "The date of the manual customer invoice", + }, + supplierInvoiceAmount: { + type: "string", + label: "Supplier Invoice Amount", + description: "The amount of the supplier invoice", + }, + supplierInvoiceDate: { + type: "string", + label: "Supplier Invoice Date", + description: "The date of the supplier invoice", + }, + supplierPaymentAmount: { + type: "string", + label: "Supplier Payment Amount", + description: "The amount of the supplier payment", + }, + supplierPaymentDate: { + type: "string", + label: "Supplier Payment Date", + description: "The date of the supplier payment", + }, + supplierNumber: { + propDefinition: [ + economic, + "supplierNumber", + ], + optional: true, + }, + customerNumber: { + propDefinition: [ + economic, + "customerNumber", + ], + optional: true, + }, + currencyCode: { + propDefinition: [ + economic, + "currencyCode", + ], + optional: true, + }, + }, + async run({ $ }) { + const response = await this.economic.createVoucher({ + $, + journalNumber: this.journalNumber, + data: { + accountingYear: { + year: this.accountingYear, + }, + entries: { + customerPayments: [ + { + amount: this.customerPaymentAmount, + date: this.customerPaymentDate, + customer: this.customerNumber + ? { + customerNumber: this.customerNumber, + } + : undefined, + currency: this.currencyCode + ? { + code: this.currencyCode, + } + : undefined, + }, + ], + financeVouchers: [ + { + amount: this.financeVoucherAmount, + date: this.financeVoucherDate, + currency: this.currencyCode + ? { + code: this.currencyCode, + } + : undefined, + }, + ], + manualCustomerInvoices: [ + { + amount: this.manualCustomerInvoiceAmount, + date: this.manualCustomerInvoiceDate, + customer: this.customerNumber + ? { + customerNumber: this.customerNumber, + } + : undefined, + currency: this.currencyCode + ? { + code: this.currencyCode, + } + : undefined, + }, + ], + supplierInvoices: [ + { + amount: this.supplierInvoiceAmount, + date: this.supplierInvoiceDate, + supplier: this.supplierNumber + ? { + supplierNumber: this.supplierNumber, + } + : undefined, + currency: this.currencyCode + ? { + code: this.currencyCode, + } + : undefined, + }, + ], + supplierPayments: [ + { + amount: this.supplierPaymentAmount, + date: this.supplierPaymentDate, + supplier: this.supplierNumber + ? { + supplierNumber: this.supplierNumber, + } + : undefined, + currency: this.currencyCode + ? { + code: this.currencyCode, + } + : undefined, + }, + ], + }, + }, + }); + $.export("$summary", "Successfully created voucher."); + return response; + }, +}; diff --git a/components/e_conomic/actions/list-invoices/list-invoices.mjs b/components/e_conomic/actions/list-invoices/list-invoices.mjs new file mode 100644 index 0000000000000..b565af8c7e7c2 --- /dev/null +++ b/components/e_conomic/actions/list-invoices/list-invoices.mjs @@ -0,0 +1,60 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-list-invoices", + name: "List Invoices", + description: "Retrieves a list of invoices. [See the documentation](https://restdocs.e-conomic.com/#get-invoices)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + economic, + invoiceType: { + type: "string", + label: "Invoice Type", + description: "The type of invoice to retrieve", + options: [ + "booked", + "drafts", + "not-due", + "overdue", + "paid", + "sent", + "unpaid", + ], + }, + maxResults: { + type: "integer", + label: "Max Results", + description: "The maximum number of invoices to retrieve", + optional: true, + default: 100, + }, + sort: { + type: "string", + label: "Sort", + description: "The field to sort the invoices by. Use `-` to sort in descending order.", + optional: true, + }, + }, + async run({ $ }) { + const results = await this.economic.getPaginatedResources({ + fn: this.economic.listInvoices, + args: { + type: this.invoiceType, + params: { + sort: this.sort, + }, + }, + max: this.maxResults, + }); + $.export("$summary", `Found ${results.length} invoice${results.length === 1 + ? "" + : "s"}`); + return results; + }, +}; diff --git a/components/e_conomic/actions/update-customer/update-customer.mjs b/components/e_conomic/actions/update-customer/update-customer.mjs new file mode 100644 index 0000000000000..574364eb40e08 --- /dev/null +++ b/components/e_conomic/actions/update-customer/update-customer.mjs @@ -0,0 +1,145 @@ +import economic from "../../e_conomic.app.mjs"; + +export default { + key: "e_conomic-update-customer", + name: "Update Customer", + description: "Updates an existing customer. [See the documentation](https://restdocs.e-conomic.com/#put-customers-customernumber)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + economic, + customerNumber: { + propDefinition: [ + economic, + "customerNumber", + ], + }, + name: { + propDefinition: [ + economic, + "name", + ], + optional: true, + }, + currency: { + propDefinition: [ + economic, + "currencyCode", + ], + optional: true, + }, + customerGroupNumber: { + propDefinition: [ + economic, + "customerGroupNumber", + ], + optional: true, + }, + paymentTermNumber: { + propDefinition: [ + economic, + "paymentTermNumber", + ], + optional: true, + }, + vatZoneNumber: { + propDefinition: [ + economic, + "vatZoneNumber", + ], + optional: true, + }, + email: { + propDefinition: [ + economic, + "email", + ], + }, + mobilePhone: { + propDefinition: [ + economic, + "mobilePhone", + ], + }, + website: { + propDefinition: [ + economic, + "website", + ], + }, + ean: { + propDefinition: [ + economic, + "ean", + ], + }, + address: { + propDefinition: [ + economic, + "streetAddress", + ], + }, + city: { + propDefinition: [ + economic, + "city", + ], + }, + zip: { + propDefinition: [ + economic, + "zip", + ], + }, + country: { + propDefinition: [ + economic, + "country", + ], + }, + }, + async run({ $ }) { + const customer = await this.economic.getCustomer({ + $, + customerNumber: this.customerNumber, + }); + const response = await this.economic.updateCustomer({ + $, + customerNumber: this.customerNumber, + data: { + name: this.name || customer.name, + currency: this.currency || customer.currency, + customerGroup: this.customerGroupNumber + ? { + customerGroupNumber: this.customerGroupNumber, + } + : customer.customerGroup, + paymentTerms: this.paymentTermNumber + ? { + paymentTermsNumber: this.paymentTermNumber, + } + : customer.paymentTerms, + vatZone: this.vatZoneNumber + ? { + vatZoneNumber: this.vatZoneNumber, + } + : customer.vatZone, + email: this.email || customer.email, + mobilePhone: this.mobilePhone || customer.mobilePhone, + website: this.website || customer.website, + ean: this.ean || customer.ean, + address: this.address || customer.address, + city: this.city || customer.city, + zip: this.zip || customer.zip, + country: this.country || customer.country, + }, + }); + $.export("$summary", `Successfully updated customer with ID ${this.customerNumber}`); + return response; + }, +}; diff --git a/components/e_conomic/e_conomic.app.mjs b/components/e_conomic/e_conomic.app.mjs index ff994ac26d5ce..242af67987e58 100644 --- a/components/e_conomic/e_conomic.app.mjs +++ b/components/e_conomic/e_conomic.app.mjs @@ -1,11 +1,413 @@ +import { axios } from "@pipedream/platform"; +const DEFAULT_LIMIT = 20; + export default { type: "app", app: "e_conomic", - propDefinitions: {}, + propDefinitions: { + customerNumber: { + type: "integer", + label: "Customer Number", + description: "The unique identifier of a customer", + async options({ page }) { + const { collection } = await this.listCustomers({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + customerNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + journalNumber: { + type: "integer", + label: "Journal Number", + description: "The unique identifier of a journal", + async options({ page }) { + const { collection } = await this.listJournals({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + journalNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + draftInvoiceNumber: { + type: "integer", + label: "Draft Invoice Number", + description: "The unique identifier of a draft invoice", + async options({ page }) { + const { collection } = await this.listInvoices({ + type: "drafts", + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + draftInvoiceNumber, notes, + }) => ({ + label: notes?.heading || `Order #${draftInvoiceNumber}`, + value: draftInvoiceNumber, + })); + }, + }, + currencyCode: { + type: "string", + label: "Currency Code", + description: "The code of the currency", + async options({ page }) { + const { collection } = await this.listCurrencies({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + code: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + customerGroupNumber: { + type: "integer", + label: "Customer Group Number", + description: "The unique identifier of a customer group", + async options({ page }) { + const { collection } = await this.listCustomerGroups({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + customerGroupNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + paymentTermNumber: { + type: "integer", + label: "Payment Term Number", + description: "The unique identifier of a payment term", + async options({ page }) { + const { collection } = await this.listPaymentTerms({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + paymentTermsNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + vatZoneNumber: { + type: "integer", + label: "VAT Zone Number", + description: "The unique identifier of a VAT zone", + async options({ page }) { + const { collection } = await this.listVatZones({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + vatZoneNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + layoutNumber: { + type: "integer", + label: "Layout Number", + description: "The unique identifier of a layout", + async options({ page }) { + const { collection } = await this.listLayouts({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + layoutNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + productNumbers: { + type: "integer[]", + label: "Product Numbers", + description: "The unique identifiers of the products to add to the invoice", + async options({ page }) { + const { collection } = await this.listProducts({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + productNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + supplierNumber: { + type: "integer", + label: "Supplier Number", + description: "The unique identifier of a supplier", + async options({ page }) { + const { collection } = await this.listSuppliers({ + params: { + skippages: page, + pagesize: DEFAULT_LIMIT, + }, + }); + return collection.map(({ + supplierNumber: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + name: { + type: "string", + label: "Name", + description: "The name of the customer", + }, + ean: { + type: "string", + label: "EAN", + description: "European Article Number. EAN is used for invoicing the Danish public sector.", + optional: true, + }, + email: { + type: "string", + label: "Email", + description: "Email address of the customer", + optional: true, + }, + mobilePhone: { + type: "string", + label: "Mobile Phone", + description: "Mobile phone number of the customer", + optional: true, + }, + website: { + type: "string", + label: "Website", + description: "Website of the customer", + optional: true, + }, + streetAddress: { + type: "string", + label: "Street Address", + description: "Address for the customer including street and number", + optional: true, + }, + city: { + type: "string", + label: "City", + description: "City of the customer", + optional: true, + }, + zip: { + type: "string", + label: "Zip", + description: "Zip code of the customer", + optional: true, + }, + country: { + type: "string", + label: "Country", + description: "Country of the customer", + optional: true, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://restapi.e-conomic.com"; + }, + _makeRequest({ + $ = this, path, ...opts + }) { + return axios($, { + url: `${this._baseUrl()}${path}`, + headers: { + "X-AppSecretToken": `${this.$auth.app_secret_token}`, + "X-AgreementGrantToken": `${this.$auth.agreement_grant_token}`, + }, + ...opts, + }); + }, + getCustomer({ + customerNumber, ...opts + }) { + return this._makeRequest({ + path: `/customers/${customerNumber}`, + ...opts, + }); + }, + listCustomers(opts = {}) { + return this._makeRequest({ + path: "/customers", + ...opts, + }); + }, + listJournals(opts = {}) { + return this._makeRequest({ + path: "/journals", + ...opts, + }); + }, + listInvoices({ + type, ...opts + }) { + return this._makeRequest({ + path: `/invoices/${type}`, + ...opts, + }); + }, + listCurrencies(opts = {}) { + return this._makeRequest({ + path: "/currencies", + ...opts, + }); + }, + listCustomerGroups(opts = {}) { + return this._makeRequest({ + path: "/customer-groups", + ...opts, + }); + }, + listPaymentTerms(opts = {}) { + return this._makeRequest({ + path: "/payment-terms", + ...opts, + }); + }, + listVatZones(opts = {}) { + return this._makeRequest({ + path: "/vat-zones", + ...opts, + }); + }, + listLayouts(opts = {}) { + return this._makeRequest({ + path: "/layouts", + ...opts, + }); + }, + listProducts(opts = {}) { + return this._makeRequest({ + path: "/products", + ...opts, + }); + }, + listSuppliers(opts = {}) { + return this._makeRequest({ + path: "/suppliers", + ...opts, + }); + }, + createCustomer(opts = {}) { + return this._makeRequest({ + path: "/customers", + method: "POST", + ...opts, + }); + }, + updateCustomer({ + customerNumber, ...opts + }) { + return this._makeRequest({ + path: `/customers/${customerNumber}`, + method: "PUT", + ...opts, + }); + }, + createDraftInvoice(opts = {}) { + return this._makeRequest({ + path: "/invoices/drafts", + method: "POST", + ...opts, + }); + }, + bookInvoice(opts = {}) { + return this._makeRequest({ + path: "/invoices/booked", + method: "POST", + ...opts, + }); + }, + createVoucher({ + journalNumber, ...opts + }) { + return this._makeRequest({ + path: `/journals/${journalNumber}/vouchers`, + method: "POST", + ...opts, + }); + }, + async *paginate({ + fn, args, max, + }) { + args = { + ...args, + params: { + ...args?.params, + skippages: 0, + pagesize: DEFAULT_LIMIT, + }, + }; + let total, count = 0; + do { + const { collection } = await fn(args); + total = collection?.length; + if (!total) { + return; + } + for (const item of collection) { + yield item; + if (max && ++count >= max) { + return; + } + } + args.params.skippages++; + } while (total === DEFAULT_LIMIT); + }, + async getPaginatedResources(opts) { + const results = []; + for await (const item of this.paginate(opts)) { + results.push(item); + } + return results; }, }, }; diff --git a/components/e_conomic/package.json b/components/e_conomic/package.json index a256491b24532..f12ec46d4cdb1 100644 --- a/components/e_conomic/package.json +++ b/components/e_conomic/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/e_conomic", - "version": "0.0.4", + "version": "0.1.0", "description": "Pipedream E-conomic Components", "main": "e_conomic.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1da3c5d869ac3..4bd26d40b5781 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3414,8 +3414,7 @@ importers: components/cronly: {} - components/cronlytic: - specifiers: {} + components/cronlytic: {} components/crossmint: {} @@ -3732,8 +3731,7 @@ importers: components/deel: {} - components/deep_tagger: - specifiers: {} + components/deep_tagger: {} components/deepgram: dependencies: @@ -4398,7 +4396,11 @@ importers: specifier: ^1.0.3 version: 1.0.4 - components/e_conomic: {} + components/e_conomic: + dependencies: + '@pipedream/platform': + specifier: ^3.1.0 + version: 3.1.0 components/e_goi: dependencies: @@ -7340,8 +7342,7 @@ importers: specifier: ^1.1.1 version: 1.6.6 - components/ipregistry: - specifiers: {} + components/ipregistry: {} components/ipstack: dependencies: @@ -8195,8 +8196,7 @@ importers: specifier: ^1.0.3 version: 1.0.3 - components/linkupapi: - specifiers: {} + components/linkupapi: {} components/linode: dependencies: