diff --git a/components/gmail/actions/add-label-to-email/add-label-to-email.mjs b/components/gmail/actions/add-label-to-email/add-label-to-email.mjs index a76a030cd6381..f8571439addc9 100644 --- a/components/gmail/actions/add-label-to-email/add-label-to-email.mjs +++ b/components/gmail/actions/add-label-to-email/add-label-to-email.mjs @@ -4,7 +4,7 @@ export default { key: "gmail-add-label-to-email", name: "Add Label to Email", description: "Add label(s) to an email message. [See the docs](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify)", - version: "0.0.9", + version: "0.0.10", type: "action", props: { gmail, diff --git a/components/gmail/actions/approve-workflow/approve-workflow.mjs b/components/gmail/actions/approve-workflow/approve-workflow.mjs index bbb1b3ea66f57..29e601f411cf1 100644 --- a/components/gmail/actions/approve-workflow/approve-workflow.mjs +++ b/components/gmail/actions/approve-workflow/approve-workflow.mjs @@ -4,7 +4,7 @@ export default { key: "gmail-approve-workflow", name: "Approve Workflow", description: "Suspend the workflow until approved by email. [See the documentation](https://pipedream.com/docs/code/nodejs/rerun#flowsuspend)", - version: "0.0.5", + version: "0.0.7", type: "action", props: { gmail, diff --git a/components/gmail/actions/archive-email/archive-email.mjs b/components/gmail/actions/archive-email/archive-email.mjs index abcad2dc02e53..5bacbb4a94172 100644 --- a/components/gmail/actions/archive-email/archive-email.mjs +++ b/components/gmail/actions/archive-email/archive-email.mjs @@ -5,7 +5,7 @@ export default { key: "gmail-archive-email", name: "Archive Email", description: "Archive an email message. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify)", - version: "0.0.3", + version: "0.0.5", type: "action", props: { gmail, diff --git a/components/gmail/actions/create-draft/create-draft.mjs b/components/gmail/actions/create-draft/create-draft.mjs index 867b71caef830..25e47dedb3aca 100644 --- a/components/gmail/actions/create-draft/create-draft.mjs +++ b/components/gmail/actions/create-draft/create-draft.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-create-draft", name: "Create Draft", description: "Create a draft from your Google Workspace email account. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/create)", - version: "0.1.3", + version: "0.1.5", type: "action", props: { gmail, diff --git a/components/gmail/actions/download-attachment/download-attachment.mjs b/components/gmail/actions/download-attachment/download-attachment.mjs index d6b73c87897fd..8ecfc64cb6c1f 100644 --- a/components/gmail/actions/download-attachment/download-attachment.mjs +++ b/components/gmail/actions/download-attachment/download-attachment.mjs @@ -7,7 +7,7 @@ export default { key: "gmail-download-attachment", name: "Download Attachment", description: "Download an attachment by attachmentId to the /tmp directory. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.messages.attachments/get)", - version: "0.0.7", + version: "0.0.9", type: "action", props: { gmail, diff --git a/components/gmail/actions/find-email/find-email.mjs b/components/gmail/actions/find-email/find-email.mjs index 9d14e68dd4898..281e6f704fba9 100644 --- a/components/gmail/actions/find-email/find-email.mjs +++ b/components/gmail/actions/find-email/find-email.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-find-email", name: "Find Email", description: "Find an email using Google's Search Engine. [See the docs](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list)", - version: "0.1.2", + version: "0.1.3", type: "action", props: { gmail, diff --git a/components/gmail/actions/list-labels/list-labels.mjs b/components/gmail/actions/list-labels/list-labels.mjs index b2c9b436ddfc2..d2eee1daf5c5c 100644 --- a/components/gmail/actions/list-labels/list-labels.mjs +++ b/components/gmail/actions/list-labels/list-labels.mjs @@ -4,7 +4,7 @@ export default { key: "gmail-list-labels", name: "List Labels", description: "List all the existing labels in the connected account. [See the docs](https://developers.google.com/gmail/api/reference/rest/v1/users.labels/list)", - version: "0.0.4", + version: "0.0.6", type: "action", props: { gmail, diff --git a/components/gmail/actions/remove-label-from-email/remove-label-from-email.mjs b/components/gmail/actions/remove-label-from-email/remove-label-from-email.mjs index f83000be7702e..dad5476db6e8c 100644 --- a/components/gmail/actions/remove-label-from-email/remove-label-from-email.mjs +++ b/components/gmail/actions/remove-label-from-email/remove-label-from-email.mjs @@ -4,7 +4,7 @@ export default { key: "gmail-remove-label-from-email", name: "Remove Label from Email", description: "Remove label(s) from an email message. [See the docs](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify)", - version: "0.0.6", + version: "0.0.8", type: "action", props: { gmail, diff --git a/components/gmail/actions/send-email/send-email.mjs b/components/gmail/actions/send-email/send-email.mjs index 51bad3f5d829a..469357126e178 100644 --- a/components/gmail/actions/send-email/send-email.mjs +++ b/components/gmail/actions/send-email/send-email.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-send-email", name: "Send Email", description: "Send an email from your Google Workspace email account. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/send)", - version: "0.1.11", + version: "0.1.13", type: "action", props: { gmail, diff --git a/components/gmail/actions/update-org-signature/update-org-signature.mjs b/components/gmail/actions/update-org-signature/update-org-signature.mjs index c2cfbd2ab603a..30d3df97b9694 100644 --- a/components/gmail/actions/update-org-signature/update-org-signature.mjs +++ b/components/gmail/actions/update-org-signature/update-org-signature.mjs @@ -8,7 +8,7 @@ export default { name: "Update Signature for Email in Organization", description: `Update the signature for a specific email address in an organization. A Google Cloud service account with delegated domain-wide authority is required for this action. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.settings.sendAs/update)`, - version: "0.0.7", + version: "0.0.9", type: "action", props: { gmail, diff --git a/components/gmail/actions/update-primary-signature/update-primary-signature.mjs b/components/gmail/actions/update-primary-signature/update-primary-signature.mjs index 638f0bc84748e..695771a13613d 100644 --- a/components/gmail/actions/update-primary-signature/update-primary-signature.mjs +++ b/components/gmail/actions/update-primary-signature/update-primary-signature.mjs @@ -4,7 +4,7 @@ export default { key: "gmail-update-primary-signature", name: "Update Signature for Primary Email Address", description: "Update the signature for the primary email address. [See the documentation](https://developers.google.com/gmail/api/reference/rest/v1/users.settings.sendAs/update)", - version: "0.0.7", + version: "0.0.9", type: "action", props: { gmail, diff --git a/components/gmail/gmail.app.mjs b/components/gmail/gmail.app.mjs index 6a4747dbdea60..5a5b69f10c13a 100644 --- a/components/gmail/gmail.app.mjs +++ b/components/gmail/gmail.app.mjs @@ -397,6 +397,12 @@ export default { }); return data; }, + async getProfile() { + const { data } = await this._client().users.getProfile({ + userId: constants.USER_ID, + }); + return data; + }, async getMessageSubject({ id }) { const message = await this.getMessage({ id, diff --git a/components/gmail/package.json b/components/gmail/package.json index ac1318479a149..d30b0c50ca57a 100644 --- a/components/gmail/package.json +++ b/components/gmail/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/gmail", - "version": "0.3.5", + "version": "1.0.0", "description": "Pipedream Gmail Components", "main": "gmail.app.mjs", "keywords": [ @@ -15,10 +15,9 @@ "dependencies": { "@google-cloud/local-auth": "^2.1.0", "@google-cloud/pubsub": "^4.7.0", - "@googleapis/gmail": "^0.3.4", + "@googleapis/gmail": "^13.0.1", "@pipedream/platform": "^3.0.3", "google-auth-library": "^8.7.0", - "googleapis": "^105.0.0", "html-to-text": "^9.0.5", "mime": "^3.0.0", "nodemailer": "^6.7.8", diff --git a/components/gmail/sources/common/polling-history.mjs b/components/gmail/sources/common/polling-history.mjs index 12942821a65f6..d2a3959ddf1c2 100644 --- a/components/gmail/sources/common/polling-history.mjs +++ b/components/gmail/sources/common/polling-history.mjs @@ -26,26 +26,53 @@ export default { const params = { maxResults: constants.HISTORICAL_EVENTS, }; + + let allMessages = []; + if (this.labels?.length) { - params.labelIds = this.labels; + // Make individual calls for each labelId to make it inclusive (OR logic) + for (const labelId of this.labels) { + const { messages } = await this.gmail.listMessages({ + ...params, + labelIds: [ + labelId, + ], + }); + if (messages?.length) { + allMessages.push(...messages); + } + } + } else { + // No labels specified, get all messages + const { messages } = await this.gmail.listMessages(params); + if (messages?.length) { + allMessages.push(...messages); + } } - let { messages } = await this.gmail.listMessages({ - ...params, - }); - if (!messages?.length) { - return; + + if (!allMessages.length) { + const { historyId } = await this.gmail.getProfile(); + return historyId; } - const messageIds = messages.map(({ id }) => id); - messages = await this.gmail.getMessages(messageIds); - messages = messages.sort((a, b) => (a.internalDate - b.internalDate)); + + // Remove duplicates based on message id + const uniqueMessages = allMessages.filter((message, index, self) => + index === self.findIndex((m) => m.id === message.id)); + + const messageIds = uniqueMessages.map(({ id }) => id); + const messagesWithHistoryId = await this.gmail.getMessages(messageIds); + const sortedMessages = + Array.from(messagesWithHistoryId) + .sort((a, b) => (Number(b.historyId) - Number(a.historyId))); + const { historyId } = await this.gmail.getMessage({ - id: messages[messages.length - 1].id, + id: sortedMessages[0].id, }); return historyId; }, async emitHistories(startHistoryId) { const opts = { - startHistoryId, + startHistoryId: String(startHistoryId), historyTypes: this.getHistoryTypes(), }; @@ -59,19 +86,42 @@ export default { opts.labelId = this.labels[i]; } - const { - history, historyId, - } = await this.gmail.listHistory(opts); + try { + const { + history, historyId, + } = await this.gmail.listHistory(opts); - if (!history) { - continue; - } + maxHistoryId = Math.max(maxHistoryId, historyId); - maxHistoryId = Math.max(maxHistoryId, historyId); - const responseArray = this.filterHistory(history); + if (!history) { + continue; + } - for (const item of responseArray) { - await this.emitFullMessage(item.messages[0].id); + const responseArray = this.filterHistory(history); + + for (const item of responseArray) { + await this.emitFullMessage(item.messages[0].id); + } + } catch (error) { + // Handle expired or invalid historyId (HTTP 404) + if (error.status === 404 || error.message.includes("Requested entity was not found")) { + console.log(`History request failed with expired historyId: ${error.message}`); + console.log("Getting fresh historyId from profile"); + + // Get fresh historyId from profile + const profile = await this.gmail.getProfile(); + const freshHistoryId = profile.historyId; + + if (freshHistoryId) { + this._setLastHistoryId(freshHistoryId); + } + + // Skip processing for this run since we're resetting the historyId + return; + } else { + // Re-throw other errors + throw error; + } } } if (maxHistoryId > 0) { @@ -82,15 +132,40 @@ export default { const opts = { maxResults: constants.HISTORICAL_EVENTS, }; + + let allMessages = []; + if (this.labels?.length) { - opts.labelIds = this.labels; + // Make individual calls for each labelId to make it inclusive (OR logic) + for (const labelId of this.labels) { + const { messages } = await this.gmail.listMessages({ + ...opts, + labelIds: [ + labelId, + ], + }); + if (messages?.length) { + allMessages.push(...messages); + } + } + } else { + // No labels specified, get all messages + const { messages } = await this.gmail.listMessages(opts); + if (messages?.length) { + allMessages.push(...messages); + } } - let { messages } = await this.gmail.listMessages(opts); - if (!messages?.length) { + + if (!allMessages.length) { return; } - messages = messages.sort((a, b) => (a.internalDate - b.internalDate)); - for (const message of messages) { + + // Remove duplicates based on message id + const uniqueMessages = allMessages.filter((message, index, self) => + index === self.findIndex((m) => m.id === message.id)); + + const sortedMessages = uniqueMessages.sort((a, b) => (a.internalDate - b.internalDate)); + for (const message of sortedMessages) { await this.emitFullMessage(message.id); } }, diff --git a/components/gmail/sources/new-attachment-received/new-attachment-received.mjs b/components/gmail/sources/new-attachment-received/new-attachment-received.mjs index 4c113b3c64228..fb8fc5692d1bc 100644 --- a/components/gmail/sources/new-attachment-received/new-attachment-received.mjs +++ b/components/gmail/sources/new-attachment-received/new-attachment-received.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-new-attachment-received", name: "New Attachment Received", description: "Emit new event for each attachment in a message received. This source is capped at 100 max new messages per run.", - version: "0.0.12", + version: "0.0.14", type: "source", dedupe: "unique", props: { diff --git a/components/gmail/sources/new-email-matching-search/new-email-matching-search.mjs b/components/gmail/sources/new-email-matching-search/new-email-matching-search.mjs index 651004a213461..dd6691c6c39d3 100644 --- a/components/gmail/sources/new-email-matching-search/new-email-matching-search.mjs +++ b/components/gmail/sources/new-email-matching-search/new-email-matching-search.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-new-email-matching-search", name: "New Email Matching Search", description: "Emit new event when an email matching the search criteria is received. This source is capped at 100 max new messages per run.", - version: "0.0.10", + version: "0.0.12", type: "source", dedupe: "unique", props: { diff --git a/components/gmail/sources/new-email-received/new-email-received.mjs b/components/gmail/sources/new-email-received/new-email-received.mjs index 4e88540f2224f..131c683cd27a5 100644 --- a/components/gmail/sources/new-email-received/new-email-received.mjs +++ b/components/gmail/sources/new-email-received/new-email-received.mjs @@ -15,7 +15,7 @@ export default { name: "New Email Received", description: "Emit new event when a new email is received.", type: "source", - version: "0.2.5", + version: "0.2.7", dedupe: "unique", props: { gmail, diff --git a/components/gmail/sources/new-labeled-email/new-labeled-email.mjs b/components/gmail/sources/new-labeled-email/new-labeled-email.mjs index 15c61f0fcb5e9..18369fccb842d 100644 --- a/components/gmail/sources/new-labeled-email/new-labeled-email.mjs +++ b/components/gmail/sources/new-labeled-email/new-labeled-email.mjs @@ -8,7 +8,7 @@ export default { name: "New Labeled Email", description: "Emit new event when a new email is labeled.", type: "source", - version: "0.0.12", + version: "0.0.13", dedupe: "unique", props: { gmail, diff --git a/components/gmail/sources/new-sent-email/new-sent-email.mjs b/components/gmail/sources/new-sent-email/new-sent-email.mjs index eb7b012397400..fca0b928c19eb 100644 --- a/components/gmail/sources/new-sent-email/new-sent-email.mjs +++ b/components/gmail/sources/new-sent-email/new-sent-email.mjs @@ -6,7 +6,7 @@ export default { key: "gmail-new-sent-email", name: "New Sent Email", description: "Emit new event for each new email sent. (Maximum of 100 events emited per execution)", - version: "0.0.11", + version: "0.0.13", type: "source", dedupe: "unique", props: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3bf6700c286f..a1703c28a8a3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5323,17 +5323,14 @@ importers: specifier: ^4.7.0 version: 4.9.0 '@googleapis/gmail': - specifier: ^0.3.4 - version: 0.3.4 + specifier: ^13.0.1 + version: 13.0.1 '@pipedream/platform': specifier: ^3.0.3 version: 3.0.3 google-auth-library: specifier: ^8.7.0 version: 8.9.0 - googleapis: - specifier: ^105.0.0 - version: 105.0.0 html-to-text: specifier: ^9.0.5 version: 9.0.5 @@ -15709,7 +15706,7 @@ importers: version: 1.2.13 tsup: specifier: ^8.3.6 - version: 8.3.6(@microsoft/api-extractor@7.47.12(@types/node@22.15.21))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.6.3)(yaml@2.6.1) + version: 8.3.6(@microsoft/api-extractor@7.47.12(@types/node@24.0.0))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.6.3)(yaml@2.6.1) typescript: specifier: ^5.6 version: 5.6.3 @@ -15761,10 +15758,10 @@ importers: version: 18.3.12 vite: specifier: ^5.4.11 - version: 5.4.11(@types/node@22.15.21) + version: 5.4.11(@types/node@24.0.0) vite-plugin-dts: specifier: ^4.3.0 - version: 4.3.0(@types/node@22.15.21)(rollup@4.27.3)(typescript@5.7.2)(vite@5.4.11(@types/node@22.15.21)) + version: 4.3.0(@types/node@24.0.0)(rollup@4.27.3)(typescript@5.7.2)(vite@5.4.11(@types/node@24.0.0)) packages/connect-react/examples/nextjs: dependencies: @@ -17936,9 +17933,9 @@ packages: resolution: {integrity: sha512-BXesWAH5wozF7LJfarzR960BAICV1f7bdyrdAkohSWtMWko2QcCWBjlMYrzT9bVpZYKILLV9G/H7uXscfJb6qQ==} engines: {node: '>=10.0.0'} - '@googleapis/gmail@0.3.4': - resolution: {integrity: sha512-5Z7CbSBRXZ2NZ5+EfwcE9T4dQtny5zcsKmOHPrI3LZOxo9s70z8YiyePr2Zf2mH9egqM8qGmUVITVRadHXDEww==} - engines: {node: '>=10.0.0'} + '@googleapis/gmail@13.0.1': + resolution: {integrity: sha512-1XHjhjaavr5/dawryUzgNJ0Hkd09p6uL5RjzC3E9OFNrm3B+NdyMiZnqCETwySUmpB6AWlAGOItSPzINOYf7UA==} + engines: {node: '>=12.0.0'} '@googleapis/sheets@0.3.0': resolution: {integrity: sha512-Axhbw2Hi3IAPyYGC4y8wmE/0aY0NVTieDDc+RMnx2/iSQ8laodWqAUDsUskTdEm4ZB2JD2Z+SU6o3IXktDaG4Q==} @@ -20873,8 +20870,8 @@ packages: '@types/node@18.11.10': resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} - '@types/node@18.19.103': - resolution: {integrity: sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==} + '@types/node@18.19.111': + resolution: {integrity: sha512-90sGdgA+QLJr1F9X79tQuEut0gEYIfkX9pydI4XGRgvFo9g2JWswefI+WUSUHPYVBHYSEfTEqBxA5hQvAZB3Mw==} '@types/node@18.19.64': resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==} @@ -20894,12 +20891,12 @@ packages: '@types/node@22.10.2': resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} - '@types/node@22.15.21': - resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} - '@types/node@22.15.9': resolution: {integrity: sha512-l6QaCgJSJQ0HngL1TjvEY2DlefKggyGeXP1KYvYLBX41ZDPM1FsgDMAr5c+T673NMy7VCptMOzXOuJqf5uB0bA==} + '@types/node@24.0.0': + resolution: {integrity: sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -24156,6 +24153,10 @@ packages: resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} + gaxios@7.0.0: + resolution: {integrity: sha512-wHVbHPzSEelanEE5L21HGwtYrMwzFn37nbLMtYj/Efz5R71ZpfAVNad8Rc33SUKFDcWTcQMo4g/VIEBz+CthuA==} + engines: {node: '>=18'} + gcp-metadata@4.3.1: resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} engines: {node: '>=10'} @@ -24168,6 +24169,10 @@ packages: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} + gcp-metadata@7.0.0: + resolution: {integrity: sha512-3PfRTzvT3Msu0Hy8Gf9ypxJvaClG2IB9pyH0r8QOmRBW5mUcrHgYpF4GYP+XulDbfhxEhBYtJtJJQb5S2wM+LA==} + engines: {node: '>=18'} + gdata-vaas@2.4.1: resolution: {integrity: sha512-G7Rn3jJ1QtMfr4fxtJ9ZwA2UikE1CAd9fAjc/HxeELJ+FwtqiTORSFdyE7boZsyCYzp5PcQ/69W8zSvz8xytUg==} @@ -24351,6 +24356,10 @@ packages: engines: {node: '>=0.6.0'} hasBin: true + google-auth-library@10.0.0-rc.3: + resolution: {integrity: sha512-WC9wfEKK0bk3seWKsDn2loduLth6JWKTsrbWftzrhPuzpwnVXb5oi2+aa0JDBxLBDdkGesLvTQ67F2nZ7leq1Q==} + engines: {node: '>=18'} + google-auth-library@7.14.1: resolution: {integrity: sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==} engines: {node: '>=10'} @@ -24375,6 +24384,10 @@ packages: resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} engines: {node: '>=14'} + google-logging-utils@1.1.1: + resolution: {integrity: sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==} + engines: {node: '>=14'} + google-p12-pem@3.1.4: resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==} engines: {node: '>=10'} @@ -24402,9 +24415,9 @@ packages: resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} engines: {node: '>=14.0.0'} - googleapis@105.0.0: - resolution: {integrity: sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==} - engines: {node: '>=12.0.0'} + googleapis-common@8.0.2-rc.0: + resolution: {integrity: sha512-JTcxRvmFa9Ec1uyfMEimEMeeKq1sHNZX3vn2qmoUMtnvixXXvcqTcbDZvEZXkEWpGlPlOf4joyep6/qs0BrLyg==} + engines: {node: '>=18.0.0'} googleapis@108.0.1: resolution: {integrity: sha512-NKYTMfQH1xVl38Efj4UAwYq/9j+vc/iaqULfG3dSBK4vQHhsYKgKN6agMrgzlWo3NA8ivwb/0bToxZxnhxj7Bg==} @@ -24493,6 +24506,10 @@ packages: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} + gtoken@8.0.0: + resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} + engines: {node: '>=18'} + hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} @@ -29819,6 +29836,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} @@ -33679,7 +33699,7 @@ snapshots: '@definitelytyped/utils@0.1.8': dependencies: '@qiwi/npm-registry-client': 8.9.1 - '@types/node': 18.19.103 + '@types/node': 18.19.111 cachedir: 2.4.0 charm: 1.0.2 minimatch: 9.0.5 @@ -34427,11 +34447,10 @@ snapshots: - encoding - supports-color - '@googleapis/gmail@0.3.4': + '@googleapis/gmail@13.0.1': dependencies: - googleapis-common: 5.1.0 + googleapis-common: 8.0.2-rc.0 transitivePeerDependencies: - - encoding - supports-color '@googleapis/sheets@0.3.0': @@ -34949,11 +34968,11 @@ snapshots: - '@types/node' optional: true - '@microsoft/api-extractor-model@7.29.9(@types/node@22.15.21)': + '@microsoft/api-extractor-model@7.29.9(@types/node@24.0.0)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.10.0(@types/node@22.15.21) + '@rushstack/node-core-library': 5.10.0(@types/node@24.0.0) transitivePeerDependencies: - '@types/node' @@ -34976,15 +34995,15 @@ snapshots: - '@types/node' optional: true - '@microsoft/api-extractor@7.47.12(@types/node@22.15.21)': + '@microsoft/api-extractor@7.47.12(@types/node@24.0.0)': dependencies: - '@microsoft/api-extractor-model': 7.29.9(@types/node@22.15.21) + '@microsoft/api-extractor-model': 7.29.9(@types/node@24.0.0) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.10.0(@types/node@22.15.21) + '@rushstack/node-core-library': 5.10.0(@types/node@24.0.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.3(@types/node@22.15.21) - '@rushstack/ts-command-line': 4.23.1(@types/node@22.15.21) + '@rushstack/terminal': 0.14.3(@types/node@24.0.0) + '@rushstack/ts-command-line': 4.23.1(@types/node@24.0.0) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -36108,8 +36127,6 @@ snapshots: '@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3)) '@putout/operator-json': 2.2.0 putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - supports-color '@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))': dependencies: @@ -36820,7 +36837,7 @@ snapshots: '@types/node': 20.17.30 optional: true - '@rushstack/node-core-library@5.10.0(@types/node@22.15.21)': + '@rushstack/node-core-library@5.10.0(@types/node@24.0.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -36831,7 +36848,7 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.0 '@rushstack/rig-package@0.5.3': dependencies: @@ -36846,12 +36863,12 @@ snapshots: '@types/node': 20.17.30 optional: true - '@rushstack/terminal@0.14.3(@types/node@22.15.21)': + '@rushstack/terminal@0.14.3(@types/node@24.0.0)': dependencies: - '@rushstack/node-core-library': 5.10.0(@types/node@22.15.21) + '@rushstack/node-core-library': 5.10.0(@types/node@24.0.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.0 '@rushstack/ts-command-line@4.23.1(@types/node@20.17.30)': dependencies: @@ -36863,9 +36880,9 @@ snapshots: - '@types/node' optional: true - '@rushstack/ts-command-line@4.23.1(@types/node@22.15.21)': + '@rushstack/ts-command-line@4.23.1(@types/node@24.0.0)': dependencies: - '@rushstack/terminal': 0.14.3(@types/node@22.15.21) + '@rushstack/terminal': 0.14.3(@types/node@24.0.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -38137,7 +38154,7 @@ snapshots: '@types/node@18.11.10': {} - '@types/node@18.19.103': + '@types/node@18.19.111': dependencies: undici-types: 5.26.5 @@ -38165,14 +38182,14 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/node@22.15.21': + '@types/node@22.15.9': dependencies: undici-types: 6.21.0 - optional: true - '@types/node@22.15.9': + '@types/node@24.0.0': dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 + optional: true '@types/normalize-package-data@2.4.4': {} @@ -42084,7 +42101,7 @@ snapshots: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.13.1 + qs: 6.14.0 forwarded@0.2.0: {} @@ -42215,6 +42232,14 @@ snapshots: - encoding - supports-color + gaxios@7.0.0: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.5 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + gcp-metadata@4.3.1: dependencies: gaxios: 4.3.3 @@ -42239,6 +42264,14 @@ snapshots: - encoding - supports-color + gcp-metadata@7.0.0: + dependencies: + gaxios: 7.0.0 + google-logging-utils: 1.1.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + gdata-vaas@2.4.1: dependencies: '@types/uuid': 8.3.4 @@ -42497,6 +42530,18 @@ snapshots: dependencies: minimist: 1.2.8 + google-auth-library@10.0.0-rc.3: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.0.0 + gcp-metadata: 7.0.0 + google-logging-utils: 1.1.1 + gtoken: 8.0.0 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + google-auth-library@7.14.1: dependencies: arrify: 2.0.1 @@ -42585,6 +42630,8 @@ snapshots: - encoding - supports-color + google-logging-utils@1.1.1: {} + google-p12-pem@3.1.4: dependencies: node-forge: 1.3.1 @@ -42631,12 +42678,14 @@ snapshots: - encoding - supports-color - googleapis@105.0.0: + googleapis-common@8.0.2-rc.0: dependencies: - google-auth-library: 8.9.0 - googleapis-common: 6.0.4 + extend: 3.0.2 + gaxios: 7.0.0 + google-auth-library: 10.0.0-rc.3 + qs: 6.14.0 + url-template: 2.0.8 transitivePeerDependencies: - - encoding - supports-color googleapis@108.0.1: @@ -42808,6 +42857,13 @@ snapshots: - encoding - supports-color + gtoken@8.0.0: + dependencies: + gaxios: 7.0.0 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + hachure-fill@0.5.2: {} handlebars-loader@1.7.3(handlebars@4.7.8): @@ -49890,7 +49946,7 @@ snapshots: - tsx - yaml - tsup@8.3.6(@microsoft/api-extractor@7.47.12(@types/node@22.15.21))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.6.3)(yaml@2.6.1): + tsup@8.3.6(@microsoft/api-extractor@7.47.12(@types/node@24.0.0))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.6.3)(yaml@2.6.1): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 @@ -49909,7 +49965,7 @@ snapshots: tinyglobby: 0.2.10 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.47.12(@types/node@22.15.21) + '@microsoft/api-extractor': 7.47.12(@types/node@24.0.0) postcss: 8.4.49 typescript: 5.6.3 transitivePeerDependencies: @@ -50124,6 +50180,9 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.8.0: + optional: true + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 @@ -50491,9 +50550,9 @@ snapshots: transitivePeerDependencies: - debug - vite-plugin-dts@4.3.0(@types/node@22.15.21)(rollup@4.27.3)(typescript@5.7.2)(vite@5.4.11(@types/node@22.15.21)): + vite-plugin-dts@4.3.0(@types/node@24.0.0)(rollup@4.27.3)(typescript@5.7.2)(vite@5.4.11(@types/node@24.0.0)): dependencies: - '@microsoft/api-extractor': 7.47.12(@types/node@22.15.21) + '@microsoft/api-extractor': 7.47.12(@types/node@24.0.0) '@rollup/pluginutils': 5.1.3(rollup@4.27.3) '@volar/typescript': 2.4.10 '@vue/language-core': 2.1.6(typescript@5.7.2) @@ -50504,19 +50563,19 @@ snapshots: magic-string: 0.30.13 typescript: 5.7.2 optionalDependencies: - vite: 5.4.11(@types/node@22.15.21) + vite: 5.4.11(@types/node@24.0.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@5.4.11(@types/node@22.15.21): + vite@5.4.11(@types/node@24.0.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.27.3 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.0 fsevents: 2.3.3 vm2@3.9.19: