diff --git a/components/the_bookie/actions/create-contact/create-contact.mjs b/components/the_bookie/actions/create-contact/create-contact.mjs new file mode 100644 index 0000000000000..c5811540b666a --- /dev/null +++ b/components/the_bookie/actions/create-contact/create-contact.mjs @@ -0,0 +1,139 @@ +import { ConfigurationError } from "@pipedream/platform"; +import thebookie from "../../the_bookie.app.mjs"; + +export default { + key: "the_bookie-create-contact", + name: "Create Contact", + description: "Instantly creates a new contact in the address book. [See the documentation](https://app.thebookie.nl/nl/help/article/api-documentatie/#contact_create)", + version: "0.0.1", + type: "action", + props: { + thebookie, + organisationName: { + type: "string", + label: "Organisation Name", + description: "The contact's organization name", + }, + street: { + type: "string", + label: "Street", + description: "The contact's address street", + optional: true, + }, + streetNumber: { + type: "string", + label: "Street Number", + description: "The contact's address number", + optional: true, + }, + streetNumberAddition: { + type: "string", + label: "Street Number Addition", + description: "The contact's address number addition", + optional: true, + }, + extraAddressLine: { + type: "string", + label: "Extra Address Line", + description: "The contact's extra address line", + optional: true, + }, + postalCode: { + type: "string", + label: "Postal Code", + description: "The contact's address postal code", + optional: true, + }, + town: { + type: "string", + label: "Town", + description: "The contact's city", + optional: true, + }, + country: { + type: "string", + label: "Country", + description: "The contact's country", + optional: true, + }, + isSupplier: { + type: "boolean", + label: "Is Supplier", + description: "Whether the contact is supplier or not", + optional: true, + }, + isClient: { + type: "boolean", + label: "Is Client", + description: "Whether the contact is client or not", + optional: true, + }, + email: { + type: "string", + label: "Email", + description: "The contact's email address", + optional: true, + }, + telephoneNumber: { + type: "string", + label: "Telephone Number", + description: "The contact's telephone number", + optional: true, + }, + mobileNumber: { + type: "string", + label: "Mobile Number", + description: "The contact's mobile number", + optional: true, + }, + firstName: { + type: "string", + label: "First Name", + description: "First name of the contact", + optional: true, + }, + lastName: { + type: "string", + label: "Last Name", + description: "Last name of the contact", + optional: true, + }, + extraInfo: { + type: "string", + label: "Extra Info", + description: "An additional info", + optional: true, + }, + }, + async run({ $ }) { + if (!this.isClient && !this.isSupplier) { + throw new ConfigurationError("'Is Supplier' or 'Is Client' must be true (or both)"); + } + + const response = await this.thebookie.createContact({ + $, + data: { + organisation_name: this.organisationName, + street: this.street, + street_number: this.streetNumber, + street_number_addition: this.streetNumberAddition, + extra_address_line: this.extraAddressLine, + postal_code: this.postalCode, + town: this.town, + country: this.country, + is_supplier: this.isSupplier, + is_client: this.isClient, + email: this.email, + telephone_number: this.telephoneNumber, + mobile_number: this.mobileNumber, + first_name: this.firstName, + last_name: this.lastName, + extra_info: this.extraInfo, + }, + }); + + $.export("$summary", `Successfully created contact with ID ${response.id}`); + + return response; + }, +}; diff --git a/components/the_bookie/actions/create-sales-invoice/create-sales-invoice.mjs b/components/the_bookie/actions/create-sales-invoice/create-sales-invoice.mjs new file mode 100644 index 0000000000000..ed3bc56c00fb5 --- /dev/null +++ b/components/the_bookie/actions/create-sales-invoice/create-sales-invoice.mjs @@ -0,0 +1,99 @@ +import { ConfigurationError } from "@pipedream/platform"; +import fs from "fs"; +import { + checkTmp, parseObject, +} from "../../common/utils.mjs"; +import theBookie from "../../the_bookie.app.mjs"; + +export default { + key: "the_bookie-create-sales-invoice", + name: "Create Sales Invoice", + description: "Creates a new sales invoice. [See the documentation](https://app.thebookie.nl/nl/help/article/api-documentatie/#salesentry_create)", + version: "0.0.1", + type: "action", + props: { + theBookie, + contactId: { + propDefinition: [ + theBookie, + "contactId", + ], + }, + invoiceNumber: { + type: "string", + label: "Invoice Number", + description: "The number of the invoice", + }, + invoiceDate: { + type: "string", + label: "Invoice Date", + description: "The date of the invoice. **Format: YYYY-MM-DD**", + }, + expirationDate: { + type: "string", + label: "Expiration Date", + description: "The expiration date of the invoice. **Format: YYYY-MM-DD**", + }, + btwShifted: { + type: "string", + label: "VAT shifted", + description: "The VAT type", + options: [ + { + label: "No (standard)", + value: "NONE", + }, + { + label: "Shifted within The Netherlands", + value: "NL", + }, + { + label: "Shifted within EU", + value: "EU", + }, + { + label: "Shifted outside EU", + value: "NON_EU", + }, + ], + optional: true, + }, + journalEntryLines: { + type: "string[]", + label: "Journal Entry Lines", + description: "An array of stringified objects of item entry lines. **Example: { \"description\": \"Boekregel 1\", \"btw_type\": \"PROCENT_21\", \"amount\": \"1200.0\", \"quantity\": \"2.00\"}** btw_type can be only 'PERCENT_9', 'PERCENT_21' or 'PERCENT_0'", + optional: true, + }, + attachment: { + type: "string", + label: "Attachment", + description: "The path to the pdf file saved to the `/tmp` directory (e.g. `/tmp/example.pdf`). [See the documentation](https://pipedream.com/docs/workflows/steps/code/nodejs/working-with-files/#the-tmp-directory).", + optional: true, + }, + }, + async run({ $ }) { + if (!this.journalEntryLines) { + throw new ConfigurationError("At least one (1) 'Journal Entry Line' should be added"); + } + if (this.attachment) { + this.attachment = fs.readFileSync(checkTmp(this.attachment), { + encoding: "base64", + }); + } + const response = await this.theBookie.createInvoice({ + $, + data: { + contact_id: this.contactId, + invoice_number: this.invoiceNumber, + invoice_date: this.invoiceDate, + expiration_date: this.expirationDate, + btw_shifted: this.btwShifted, + journal_entry_lines: parseObject(this.journalEntryLines), + attachment: this.attachment, + }, + }); + + $.export("$summary", `Successfully created invoice with number ${this.invoiceNumber}`); + return response; + }, +}; diff --git a/components/the_bookie/actions/find-contact/find-contact.mjs b/components/the_bookie/actions/find-contact/find-contact.mjs new file mode 100644 index 0000000000000..c7e38a7d27e77 --- /dev/null +++ b/components/the_bookie/actions/find-contact/find-contact.mjs @@ -0,0 +1,51 @@ +import { capitalize } from "../../common/utils.mjs"; +import theBookie from "../../the_bookie.app.mjs"; + +export default { + key: "the_bookie-find-contact", + name: "Find Contacts", + description: "Find a contact from the address book. [See the documentation](https://app.thebookie.nl/nl/help/article/api-documentatie/#contact_list)", + version: "0.0.1", + type: "action", + props: { + theBookie, + search: { + type: "string", + label: "Search", + description: "Search by company name.", + optional: true, + }, + isClient: { + type: "boolean", + label: "Is Client", + description: "Return only client contacts.", + optional: true, + }, + isSupplier: { + type: "boolean", + label: "Is Supplier", + description: "Return only supplier contacts.", + optional: true, + }, + }, + async run({ $ }) { + const response = this.theBookie.paginate({ + $, + fn: this.theBookie.searchContact, + params: { + search: this.search, + is_client: capitalize(this.isClient), + is_supplier: capitalize(this.isSupplier), + }, + }); + + const responseArray = []; + + for await (const item of response) { + responseArray.push(item); + } + + $.export("$summary", `Found ${responseArray.length} contact(s)`); + return responseArray; + }, +}; diff --git a/components/the_bookie/common/constants.mjs b/components/the_bookie/common/constants.mjs new file mode 100644 index 0000000000000..ea830c15a04cb --- /dev/null +++ b/components/the_bookie/common/constants.mjs @@ -0,0 +1 @@ +export const LIMIT = 100; diff --git a/components/the_bookie/common/utils.mjs b/components/the_bookie/common/utils.mjs new file mode 100644 index 0000000000000..339bf1a6c02b9 --- /dev/null +++ b/components/the_bookie/common/utils.mjs @@ -0,0 +1,37 @@ +export const checkTmp = (filename) => { + if (!filename.startsWith("/tmp")) { + return `/tmp/${filename}`; + } + return filename; +}; + +export const parseObject = (obj) => { + if (!obj) return undefined; + + if (Array.isArray(obj)) { + return obj.map((item) => { + if (typeof item === "string") { + try { + return JSON.parse(item); + } catch (e) { + return item; + } + } + return item; + }); + } + if (typeof obj === "string") { + try { + return JSON.parse(obj); + } catch (e) { + return obj; + } + } + return obj; +}; + +export const capitalize = (string) => { + if (!string) return null; + string = string.toString(); + return string[0].toUpperCase() + string.slice(1); +}; diff --git a/components/the_bookie/package.json b/components/the_bookie/package.json index 1b36781d6209e..12092ea586510 100644 --- a/components/the_bookie/package.json +++ b/components/the_bookie/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/the_bookie", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream The Bookie Components", "main": "the_bookie.app.mjs", "keywords": [ @@ -11,5 +11,9 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.1" } -} \ No newline at end of file +} + diff --git a/components/the_bookie/sources/common/base.mjs b/components/the_bookie/sources/common/base.mjs new file mode 100644 index 0000000000000..ad1a51d9c1bc9 --- /dev/null +++ b/components/the_bookie/sources/common/base.mjs @@ -0,0 +1,64 @@ +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; +import theBookie from "../../the_bookie.app.mjs"; + +export default { + props: { + theBookie, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + _getLastId() { + return this.db.get("lastId") || 0; + }, + _setLastId(lastId) { + this.db.set("lastId", lastId); + }, + filterItems(items, lastId) { + return items + .filter((item) => item.id > lastId) + .sort((a, b) => b.id - a.id); + }, + async emitEvent(maxResults = false) { + const lastId = this._getLastId(); + const response = this.theBookie.paginate({ + fn: this.getFunction(), + }); + + let responseArray = []; + for await (const item of response) { + responseArray.push(item); + } + + if (responseArray.length) { + responseArray = this.filterItems(responseArray, lastId); + + if (maxResults && (responseArray.length > maxResults)) { + responseArray.length = maxResults; + } + this._setLastId(responseArray[0].id); + } + + for (const item of responseArray.reverse()) { + this.$emit(item, { + id: item.id, + summary: this.getSummary(item), + ts: Date.parse(new Date()), + }); + } + }, + }, + hooks: { + async deploy() { + await this.emitEvent(25); + }, + }, + async run() { + await this.emitEvent(); + }, +}; diff --git a/components/the_bookie/sources/new-contact-created/new-contact-created.mjs b/components/the_bookie/sources/new-contact-created/new-contact-created.mjs new file mode 100644 index 0000000000000..a334d763cfb74 --- /dev/null +++ b/components/the_bookie/sources/new-contact-created/new-contact-created.mjs @@ -0,0 +1,22 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "the_bookie-new-contact-created", + name: "New Contact Created", + description: "Emit new event when a contact is created.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getFunction() { + return this.theBookie.listContacts; + }, + getSummary(item) { + return `New Contact created: ${item.id}`; + }, + }, + sampleEmit, +}; diff --git a/components/the_bookie/sources/new-contact-created/test-event.mjs b/components/the_bookie/sources/new-contact-created/test-event.mjs new file mode 100644 index 0000000000000..6b5751a9e234e --- /dev/null +++ b/components/the_bookie/sources/new-contact-created/test-event.mjs @@ -0,0 +1,28 @@ +export default { + "id": 97645, + "organisation_name": "Gladiool Tuinarchitecten", + "street": "", + "street_number": "", + "street_number_addition": null, + "extra_address_line": "", + "postal_code": "", + "town": "", + "country": "", + "organisation_kvk_number": null, + "organisation_btw_number": null, + "is_supplier": true, + "is_client": true, + "email": null, + "telephone_number": null, + "mobile_number": null, + "status": 1, + "first_name": null, + "last_name": null, + "associated_ledger_account": [], + "btw_shifted_preset": "NONE", + "total_sales_amount_excl_btw": 0, + "total_sales_amount_payable": 0, + "total_purchase_amount_excl_btw": 0, + "total_purchase_amount_payable": 0, + "extra_info": "" +} \ No newline at end of file diff --git a/components/the_bookie/sources/new-invoice-created/new-invoice-created.mjs b/components/the_bookie/sources/new-invoice-created/new-invoice-created.mjs new file mode 100644 index 0000000000000..ed68a9557fe4b --- /dev/null +++ b/components/the_bookie/sources/new-invoice-created/new-invoice-created.mjs @@ -0,0 +1,22 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "the_bookie-new-invoice-created", + name: "New Invoice Created", + description: "Emit new event when a new invoice is created.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getFunction() { + return this.theBookie.listInvoices; + }, + getSummary(item) { + return `New Invoice: ${item.id}`; + }, + }, + sampleEmit, +}; diff --git a/components/the_bookie/sources/new-invoice-created/test-event.mjs b/components/the_bookie/sources/new-invoice-created/test-event.mjs new file mode 100644 index 0000000000000..d3bdb1bd2240e --- /dev/null +++ b/components/the_bookie/sources/new-invoice-created/test-event.mjs @@ -0,0 +1,13 @@ +export default { + "id": 292534, + "state": 10, + "invoice_payment_expired": false, + "contact_name": "Organisation Name", + "contact_id": 219464, + "total_amount_incl_btw": 0, + "invoice_date": "2024-09-18", + "expiration_date": "2024-11-18", + "state_display": "Voldaan", + "invoice_number": "78989789", + "financial_period": 59143 +} \ No newline at end of file diff --git a/components/the_bookie/sources/new-invoice-paid/new-invoice-paid.mjs b/components/the_bookie/sources/new-invoice-paid/new-invoice-paid.mjs new file mode 100644 index 0000000000000..e802ca3f27123 --- /dev/null +++ b/components/the_bookie/sources/new-invoice-paid/new-invoice-paid.mjs @@ -0,0 +1,25 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "the_bookie-new-invoice-paid", + name: "New Invoice Paid", + description: "Emit new event when the state of an invoice is changed to 'paid'.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + filterItems(items) { + return items.filter((item) => item.state === 20); + }, + getFunction() { + return this.theBookie.listInvoices; + }, + getSummary(item) { + return `Invoice ${item.id} paid`; + }, + }, + sampleEmit, +}; diff --git a/components/the_bookie/sources/new-invoice-paid/test-event.mjs b/components/the_bookie/sources/new-invoice-paid/test-event.mjs new file mode 100644 index 0000000000000..78e50f79ca608 --- /dev/null +++ b/components/the_bookie/sources/new-invoice-paid/test-event.mjs @@ -0,0 +1,13 @@ +export default { + "id": 292534, + "state": 20, + "invoice_payment_expired": false, + "contact_name": "Organisation Name", + "contact_id": 219464, + "total_amount_incl_btw": 0, + "invoice_date": "2024-09-18", + "expiration_date": "2024-11-18", + "state_display": "Voldaan", + "invoice_number": "78989789", + "financial_period": 59143 +} \ No newline at end of file diff --git a/components/the_bookie/the_bookie.app.mjs b/components/the_bookie/the_bookie.app.mjs index 8dcfb42b9b022..b057bb184c14b 100644 --- a/components/the_bookie/the_bookie.app.mjs +++ b/components/the_bookie/the_bookie.app.mjs @@ -1,11 +1,121 @@ +import { axios } from "@pipedream/platform"; +import { LIMIT } from "./common/constants.mjs"; + export default { type: "app", app: "the_bookie", - propDefinitions: {}, + propDefinitions: { + contactId: { + type: "string", + label: "Contact ID", + description: "The ID of the contact", + async options({ page }) { + const { results } = await this.listContacts({ + params: { + is_client: true, + admin_id: `${this.$auth.admin_id}`, + limit: LIMIT, + offset: LIMIT * page, + }, + }); + + return results.map(({ + id: value, organisation_name: label, + }) => ({ + label, + value, + })); + }, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://app.thebookie.nl/nl/api/e1"; + }, + _headers(headers = {}) { + return { + Authorization: `Bearer ${this.$auth.oauth_access_token}`, + Accept: "application/json", + ...headers, + }; + }, + _data(data) { + return data + ? { + ...data, + admin_id: `${this.$auth.admin_id}`, + } + : null; + }, + _makeRequest({ + $ = this, path, data, headers, ...opts + }) { + return axios($, { + url: this._baseUrl() + path, + headers: this._headers(headers), + data: this._data(data), + ...opts, + }); + }, + createContact(opts = {}) { + return this._makeRequest({ + method: "POST", + path: "/contacts/create/", + ...opts, + }); + }, + listContacts(opts = {}) { + return this._makeRequest({ + path: "/contacts/", + ...opts, + }); + }, + listInvoices(opts = {}) { + return this._makeRequest({ + path: "/sales-journals/", + ...opts, + }); + }, + createInvoice(opts = {}) { + return this._makeRequest({ + method: "POST", + path: "/sales-journals/create/", + ...opts, + }); + }, + searchContact({ + params, ...opts + }) { + return this._makeRequest({ + path: "/contacts", + params: { + ...params, + admin_id: `${this.$auth.admin_id}`, + }, + ...opts, + }); + }, + async *paginate({ + fn, params = {}, ...opts + }) { + let hasMore = false; + let page = 0; + + do { + params.limit = LIMIT; + params.offset = LIMIT * page++; + params.admin_id = `${this.$auth.admin_id}`; + const { results } = await fn({ + params, + ...opts, + }); + for (const d of results) { + yield d; + } + + hasMore = results.length; + + } while (hasMore); }, }, -}; \ No newline at end of file +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c52d6a354952..66416bf9615ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9819,7 +9819,10 @@ importers: specifiers: {} components/the_bookie: - specifiers: {} + specifiers: + '@pipedream/platform': ^3.0.1 + dependencies: + '@pipedream/platform': 3.0.3 components/the_odds_api: specifiers: @@ -12719,55 +12722,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sso-oidc/3.600.0_tdq3komn4zwyd65w7klbptsu34: - resolution: {integrity: sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.600.0 - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.3 - '@smithy/core': 2.2.3 - '@smithy/fetch-http-handler': 3.2.1 - '@smithy/hash-node': 3.0.2 - '@smithy/invalid-dependency': 3.0.2 - '@smithy/middleware-content-length': 3.0.2 - '@smithy/middleware-endpoint': 3.0.4 - '@smithy/middleware-retry': 3.0.6 - '@smithy/middleware-serde': 3.0.3 - '@smithy/middleware-stack': 3.0.3 - '@smithy/node-config-provider': 3.1.3 - '@smithy/node-http-handler': 3.1.2 - '@smithy/protocol-http': 4.0.3 - '@smithy/smithy-client': 3.1.6 - '@smithy/types': 3.3.0 - '@smithy/url-parser': 3.0.3 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.6 - '@smithy/util-defaults-mode-node': 3.0.6 - '@smithy/util-endpoints': 2.0.3 - '@smithy/util-middleware': 3.0.3 - '@smithy/util-retry': 3.0.2 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sts' - - aws-crt - dev: false - /@aws-sdk/client-sso/3.423.0: resolution: {integrity: sha512-znIufHkwhCIePgaYciIs3x/+BpzR57CZzbCKHR9+oOvGyufEPPpUT5bFLvbwTgfiVkTjuk6sG/ES3U5Bc+xtrA==} engines: {node: '>=14.0.0'} @@ -13003,7 +12957,7 @@ packages: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0_tdq3komn4zwyd65w7klbptsu34 + '@aws-sdk/client-sso-oidc': 3.600.0 '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 '@aws-sdk/middleware-host-header': 3.598.0 @@ -13045,6 +12999,55 @@ packages: - aws-crt dev: false + /@aws-sdk/client-sts/3.600.0_dseaa2p5u2yk67qiepewcq3hkq: + resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 + '@smithy/config-resolver': 3.0.3 + '@smithy/core': 2.2.3 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.2 + '@smithy/invalid-dependency': 3.0.2 + '@smithy/middleware-content-length': 3.0.2 + '@smithy/middleware-endpoint': 3.0.4 + '@smithy/middleware-retry': 3.0.6 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.3 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.6 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.6 + '@smithy/util-defaults-mode-node': 3.0.6 + '@smithy/util-endpoints': 2.0.3 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.2 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + dev: false + /@aws-sdk/core/3.556.0: resolution: {integrity: sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==} engines: {node: '>=14.0.0'} @@ -17343,7 +17346,7 @@ packages: '@aws-sdk/client-sns': 3.423.0 '@aws-sdk/client-sqs': 3.423.0 '@aws-sdk/client-ssm': 3.423.0 - '@aws-sdk/client-sts': 3.600.0 + '@aws-sdk/client-sts': 3.600.0_dseaa2p5u2yk67qiepewcq3hkq '@aws-sdk/s3-request-presigner': 3.609.0 '@pipedream/helper_functions': 0.3.12 '@pipedream/platform': 1.6.6