From d0f6f2247672b581c80c79820c34264d5bc1d09b Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Fri, 28 Jun 2024 14:38:59 -0400 Subject: [PATCH 1/4] spiritme init --- .../actions/generate-video/generate-video.mjs | 59 ++++++++++++ components/spiritme/package.json | 2 +- .../new-avatar-video-completion-instant.mjs | 71 ++++++++++++++ components/spiritme/spiritme.app.mjs | 92 ++++++++++++++++++- 4 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 components/spiritme/actions/generate-video/generate-video.mjs create mode 100644 components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs diff --git a/components/spiritme/actions/generate-video/generate-video.mjs b/components/spiritme/actions/generate-video/generate-video.mjs new file mode 100644 index 0000000000000..43f22410a3f26 --- /dev/null +++ b/components/spiritme/actions/generate-video/generate-video.mjs @@ -0,0 +1,59 @@ +import { axios } from "@pipedream/platform"; +import spiritme from "../../spiritme.app.mjs"; + +export default { + key: "spiritme-generate-video", + name: "Generate Video", + description: "Generates a new video using specific voice and avatar props. [See the documentation](https://api.spiritme.tech/api/swagger/)", + version: "0.0.{{ts}}", + type: "action", + props: { + spiritme, + voice: { + propDefinition: [ + spiritme, + "voice", + ], + required: true, + }, + avatar: { + propDefinition: [ + spiritme, + "avatar", + ], + optional: true, + }, + videoLength: { + propDefinition: [ + spiritme, + "videoLength", + ], + optional: true, + }, + script: { + propDefinition: [ + spiritme, + "script", + ], + optional: true, + }, + desiredAnimation: { + propDefinition: [ + spiritme, + "desiredAnimation", + ], + optional: true, + }, + }, + async run({ $ }) { + const response = await this.spiritme.generateVideo( + this.voice, + this.avatar, + this.videoLength, + this.script, + this.desiredAnimation, + ); + $.export("$summary", `Generated video with ID: ${response.video_id}`); + return response; + }, +}; diff --git a/components/spiritme/package.json b/components/spiritme/package.json index 78ba93eb0c65d..ac768d2fbe218 100644 --- a/components/spiritme/package.json +++ b/components/spiritme/package.json @@ -12,4 +12,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs b/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs new file mode 100644 index 0000000000000..f02588cdcc6ca --- /dev/null +++ b/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs @@ -0,0 +1,71 @@ +import spiritme from "../../spiritme.app.mjs"; + +export default { + key: "spiritme-new-avatar-video-completion-instant", + name: "New Avatar Video Completion", + description: "Emits a new event when an avatar video completes rendering.", + version: "0.0.{{ts}}", + type: "source", + dedupe: "unique", + props: { + spiritme, + avatarId: { + propDefinition: [ + spiritme, + "avatarId", + ], + }, + systemStatusNotifications: { + propDefinition: [ + spiritme, + "systemStatusNotifications", + (c) => ({ + avatarId: c.avatarId, + }), + ], + }, + http: { + type: "$.interface.http", + customResponse: true, + }, + db: "$.service.db", + }, + hooks: { + async activate() { + const { avatarId } = this; + const videoId = await this.spiritme.generateVideo({ + avatarId, + }); + this.db.set("videoId", videoId); + }, + }, + async run(event) { + const { + headers, body, + } = event; + const videoId = this.db.get("videoId"); + + // Validate the incoming webhook request + if (headers["Spiritme-Signature"] !== this.spiritme.$auth.api_key) { + this.http.respond({ + status: 401, + body: "Unauthorized", + }); + return; + } + + // Check if the webhook is for the correct avatar and if the video is completed + if (body.data.avatar !== this.avatarId || body.data.status !== "success") { + return; + } + + const videoStatus = await this.spiritme.getVideoStatus(videoId); + if (videoStatus === "success") { + this.$emit(body.data, { + id: body.data.id, + summary: `Avatar video ${body.data.id} has status ${body.data.status}`, + ts: Date.parse(body.data.created_at), + }); + } + }, +}; diff --git a/components/spiritme/spiritme.app.mjs b/components/spiritme/spiritme.app.mjs index 5e9f507cbfe8e..fbf8ae6cf1cc8 100644 --- a/components/spiritme/spiritme.app.mjs +++ b/components/spiritme/spiritme.app.mjs @@ -1,11 +1,95 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "spiritme", - propDefinitions: {}, + propDefinitions: { + avatarId: { + type: "string", + label: "Avatar ID", + description: "The identifier of the avatar", + required: true, + }, + systemStatusNotifications: { + type: "boolean", + label: "System Status Notifications", + description: "Enable notifications for success, failure, insufficient balance", + optional: true, + }, + voice: { + type: "object", + label: "Voice", + description: "Characteristics of the voice to be used, such as pitch, speed, and accent", + required: true, + }, + avatar: { + type: "string", + label: "Avatar", + description: "The identifier for the avatar to be used", + optional: true, + }, + videoLength: { + type: "integer", + label: "Video Length", + description: "The length of the video in seconds", + optional: true, + }, + script: { + type: "string", + label: "Script", + description: "The script for the video", + optional: true, + }, + desiredAnimation: { + type: "string", + label: "Desired Animation", + description: "Desired animation for the video", + optional: true, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://api.spiritme.tech/api"; + }, + async _makeRequest(opts = {}) { + const { + $ = this, + method = "GET", + path, + data, + params, + headers, + ...otherOpts + } = opts; + return axios($, { + ...otherOpts, + method, + url: this._baseUrl() + path, + data, + params, + headers: { + ...headers, + "Authorization": `Token ${this.$auth.api_key}`, + }, + }); + }, + async getVideoStatus(videoId) { + return this._makeRequest({ + path: `/videos/${videoId}/`, + }); + }, + async generateVideo(voice, avatar, videoLength, script, desiredAnimation) { + return this._makeRequest({ + method: "POST", + path: "/videos/", + data: { + voice, + avatar, + video_length: videoLength, + script, + desired_animation: desiredAnimation, + }, + }); }, }, }; From a9b2a29bff3779d0026ce436e103ee479c7caec5 Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Fri, 28 Jun 2024 17:40:18 -0400 Subject: [PATCH 2/4] new components --- .../actions/generate-video/generate-video.mjs | 151 +++++++++++++++--- components/spiritme/package.json | 5 +- .../new-avatar-video-completion-instant.mjs | 71 -------- .../new-avatar-video-completion.mjs | 84 ++++++++++ .../test-event.mjs | 51 ++++++ components/spiritme/spiritme.app.mjs | 138 ++++++++++------ 6 files changed, 352 insertions(+), 148 deletions(-) delete mode 100644 components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs create mode 100644 components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs create mode 100644 components/spiritme/sources/new-avatar-video-completion/test-event.mjs diff --git a/components/spiritme/actions/generate-video/generate-video.mjs b/components/spiritme/actions/generate-video/generate-video.mjs index 43f22410a3f26..877d30e35c9cc 100644 --- a/components/spiritme/actions/generate-video/generate-video.mjs +++ b/components/spiritme/actions/generate-video/generate-video.mjs @@ -1,59 +1,160 @@ -import { axios } from "@pipedream/platform"; import spiritme from "../../spiritme.app.mjs"; +import { ConfigurationError } from "@pipedream/platform"; export default { key: "spiritme-generate-video", name: "Generate Video", - description: "Generates a new video using specific voice and avatar props. [See the documentation](https://api.spiritme.tech/api/swagger/)", - version: "0.0.{{ts}}", + description: "Generates a new video using specific voice and avatar props. [See the documentation](https://api.spiritme.tech/api/swagger/#/videos/videos_create)", + version: "0.0.1", type: "action", props: { spiritme, - voice: { - propDefinition: [ - spiritme, - "voice", - ], - required: true, + name: { + type: "string", + label: "Name", + description: "Name of the video", }, avatar: { propDefinition: [ spiritme, "avatar", ], - optional: true, }, - videoLength: { + voice: { propDefinition: [ spiritme, - "videoLength", + "voice", ], + }, + text: { + type: "string", + label: "Text", + description: "The text to use for the video. Example: `Hello everyone! I am a virtual avatar from Spiritme.` Use tags ` text ` to add emotions to the generated video. The list of supported emotions are `neutral`, `semismile`, `smile`, `happiness`, `sadness`, and `surprise`. Either text or audio file is required.", optional: true, }, - script: { + audioFile: { propDefinition: [ spiritme, - "script", + "file", + () => ({ + type: [ + "audio", + ], + }), ], - optional: true, + label: "Audio File", + description: "Identifier of an audio file. Either text or audio file is required.", }, - desiredAnimation: { + media: { propDefinition: [ spiritme, - "desiredAnimation", + "file", + () => ({ + type: [ + "image", + "video", + ], + }), ], + label: "Media File", + description: "Identifier of an image or video file. One of avatar or media is required.", + }, + viewType: { + type: "string", + label: "View Type", + description: "Content as is or content in circle. Supported only for avatars.", + optional: true, + options: [ + "rectangular", + "circular", + ], + }, + autoEmotionsMarkup: { + type: "boolean", + label: "Auto Emotions Markup", + description: "Add emotions automatically by AI", + optional: true, + }, + waitForCompletion: { + type: "boolean", + label: "Wait For Completion", + description: "Set to `true` to poll the API in 3-second intervals until the video is completed", optional: true, }, }, async run({ $ }) { - const response = await this.spiritme.generateVideo( - this.voice, - this.avatar, - this.videoLength, - this.script, - this.desiredAnimation, - ); - $.export("$summary", `Generated video with ID: ${response.video_id}`); + const { + spiritme, + name, + avatar, + voice, + text, + audioFile, + media, + viewType, + autoEmotionsMarkup, + waitForCompletion, + } = this; + + if (!avatar && !media) { + throw new ConfigurationError("One of `Avatar` or `Media File` is required"); + } + + if (!text && !audioFile) { + throw new ConfigurationError("One of `Text` or `Audio File` is required"); + } + + let response = await spiritme.generateVideo({ + $, + data: { + name, + slides: [ + { + audio_source: { + text, + voice: voice + ? { + id: voice, + } + : undefined, + file: audioFile + ? { + id: audioFile, + } + : undefined, + }, + layers: [ + { + avatar: avatar + ? { + id: avatar, + } + : undefined, + media: media + ? { + id: media, + } + : undefined, + view_type: viewType, + }, + ], + }, + ], + auto_emotions_markup: autoEmotionsMarkup, + }, + }); + + if (waitForCompletion) { + const timer = (ms) => new Promise((res) => setTimeout(res, ms)); + while (response.status !== "success") { + response = await spiritme.getVideo({ + videoId: response.id, + }); + await timer(3000); + } + } + + $.export("$summary", `Generated video with ID: ${response.id}`); return response; }, }; diff --git a/components/spiritme/package.json b/components/spiritme/package.json index ac768d2fbe218..bd5ab8d1f5885 100644 --- a/components/spiritme/package.json +++ b/components/spiritme/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/spiritme", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream SpiritMe Components", "main": "spiritme.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.0" } } diff --git a/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs b/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs deleted file mode 100644 index f02588cdcc6ca..0000000000000 --- a/components/spiritme/sources/new-avatar-video-completion-instant/new-avatar-video-completion-instant.mjs +++ /dev/null @@ -1,71 +0,0 @@ -import spiritme from "../../spiritme.app.mjs"; - -export default { - key: "spiritme-new-avatar-video-completion-instant", - name: "New Avatar Video Completion", - description: "Emits a new event when an avatar video completes rendering.", - version: "0.0.{{ts}}", - type: "source", - dedupe: "unique", - props: { - spiritme, - avatarId: { - propDefinition: [ - spiritme, - "avatarId", - ], - }, - systemStatusNotifications: { - propDefinition: [ - spiritme, - "systemStatusNotifications", - (c) => ({ - avatarId: c.avatarId, - }), - ], - }, - http: { - type: "$.interface.http", - customResponse: true, - }, - db: "$.service.db", - }, - hooks: { - async activate() { - const { avatarId } = this; - const videoId = await this.spiritme.generateVideo({ - avatarId, - }); - this.db.set("videoId", videoId); - }, - }, - async run(event) { - const { - headers, body, - } = event; - const videoId = this.db.get("videoId"); - - // Validate the incoming webhook request - if (headers["Spiritme-Signature"] !== this.spiritme.$auth.api_key) { - this.http.respond({ - status: 401, - body: "Unauthorized", - }); - return; - } - - // Check if the webhook is for the correct avatar and if the video is completed - if (body.data.avatar !== this.avatarId || body.data.status !== "success") { - return; - } - - const videoStatus = await this.spiritme.getVideoStatus(videoId); - if (videoStatus === "success") { - this.$emit(body.data, { - id: body.data.id, - summary: `Avatar video ${body.data.id} has status ${body.data.status}`, - ts: Date.parse(body.data.created_at), - }); - } - }, -}; diff --git a/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs b/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs new file mode 100644 index 0000000000000..c3e38c1b20f7a --- /dev/null +++ b/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs @@ -0,0 +1,84 @@ +import spiritme from "../../spiritme.app.mjs"; +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; +import sampleEmit from "./test-event.mjs"; + +export default { + key: "spiritme-new-avatar-video-completion", + name: "New Avatar Video Completion", + description: "Emit new event when an avatar video completes rendering.", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + spiritme, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + hooks: { + async deploy() { + await this.processEvent(25); + }, + }, + methods: { + _getLastTs() { + return this.db.get("lastTs") || 0; + }, + _setLastTs(lastTs) { + this.db.set("lastTs", lastTs); + }, + emitEvent(video) { + const meta = this.generateMeta(video); + this.$emit(video, meta); + }, + generateMeta(video) { + return { + id: video.id, + summary: `New Video: ${video.name}`, + ts: Date.parse(video.gd), + }; + }, + async processEvent(max) { + const lastTs = this._getLastTs(); + const params = { + limit: 100, + offset: 0, + status: [ + "success", + ], + }; + let total; + + const videos = []; + do { + const { results } = await this.spiritme.listVideos({ + params, + }); + for (const video of results) { + const ts = Date.parse(video.gd); + if (ts >= lastTs && (!max || videos.length < max)) { + videos.push(video); + } else { + break; + } + } + total = results?.length; + } while (total === params.limit && (!max || videos.length < max)); + + if (!videos.length) { + return; + } + + this._setLastTs(Date.parse(videos[0].gd)); + videos.reverse().forEach((video) => this.emitEvent(video)); + }, + }, + async run() { + await this.processEvent(); + }, + sampleEmit, +}; diff --git a/components/spiritme/sources/new-avatar-video-completion/test-event.mjs b/components/spiritme/sources/new-avatar-video-completion/test-event.mjs new file mode 100644 index 0000000000000..9ffb34ea90bd9 --- /dev/null +++ b/components/spiritme/sources/new-avatar-video-completion/test-event.mjs @@ -0,0 +1,51 @@ +export default { + "id": 85987, + "cd": "2024-06-28T21:32:14.878982Z", + "gd": "2024-06-28T21:34:37.340485Z", + "name": "Video", + "slides": [ + { + "id": 1, + "audio_source": { + "text": "Pipedream is the best!", + "voice": { + "id": 18, + "name": "Kimberly", + "label": "English Kimberly", + "provider": "amazon", + "sex": "female" + }, + "file": null + }, + "layers": [ + { + "id": 1, + "avatar": { + "id": 9889, + "name": "Elizabeth", + "preview": "https://cdn.spiritme.tech/media/avatars/previews/ec724f6e58a22d3ec9dd81fe825f3eb1ea2a99b6.png", + "frame_width": 1073, + "frame_height": 1177 + }, + "media": null, + "x": 0.5, + "y": 1, + "scale": 1, + "crop": null, + "view_type": "rectangular" + } + ], + "background": null + } + ], + "webhook": null, + "resolution": { + "width": 1920, + "height": 1080 + }, + "auto_emotions_markup": true, + "enable_subtitles": false, + "status": "success", + "result": "https://cdn.spiritme.tech/media/videos/3fa94ae367237676442cde44feacaf5c24875966.mp4", + "thumbnail": "https://cdn.spiritme.tech/media/videos/65dd50bc2b996b3457fcb4d98ce5c270bed54a6d.jpeg" +} \ No newline at end of file diff --git a/components/spiritme/spiritme.app.mjs b/components/spiritme/spiritme.app.mjs index fbf8ae6cf1cc8..805293810722a 100644 --- a/components/spiritme/spiritme.app.mjs +++ b/components/spiritme/spiritme.app.mjs @@ -1,94 +1,130 @@ import { axios } from "@pipedream/platform"; +const DEFAULT_LIMIT = 50; export default { type: "app", app: "spiritme", propDefinitions: { - avatarId: { - type: "string", - label: "Avatar ID", - description: "The identifier of the avatar", - required: true, - }, - systemStatusNotifications: { - type: "boolean", - label: "System Status Notifications", - description: "Enable notifications for success, failure, insufficient balance", - optional: true, - }, - voice: { - type: "object", - label: "Voice", - description: "Characteristics of the voice to be used, such as pitch, speed, and accent", - required: true, - }, avatar: { type: "string", label: "Avatar", - description: "The identifier for the avatar to be used", + description: "The identifier for the avatar to be used. One of avatar or media is required.", optional: true, + async options({ page }) { + const { results } = await this.listAvatars({ + params: { + limit: DEFAULT_LIMIT, + offset: page * DEFAULT_LIMIT, + }, + }); + return results?.map(({ + id: value, name: label, + }) => ({ + value, + label, + })) || []; + }, }, - videoLength: { - type: "integer", - label: "Video Length", - description: "The length of the video in seconds", - optional: true, - }, - script: { + voice: { type: "string", - label: "Script", - description: "The script for the video", + label: "Voice", + description: "The identifier of the voice to be used", optional: true, + async options({ page }) { + const { results } = await this.listVoices({ + params: { + limit: DEFAULT_LIMIT, + offset: page * DEFAULT_LIMIT, + }, + }); + return results?.map(({ + id: value, name: label, + }) => ({ + value, + label, + })) || []; + }, }, - desiredAnimation: { + file: { type: "string", - label: "Desired Animation", - description: "Desired animation for the video", + label: "Voice", + description: "The identifier of the file to be used", optional: true, + async options({ + page, type, + }) { + const { results } = await this.listFiles({ + params: { + limit: DEFAULT_LIMIT, + offset: page * DEFAULT_LIMIT, + type, + }, + }); + return results?.map(({ + id: value, name: label, + }) => ({ + value, + label, + })) || []; + }, }, }, methods: { _baseUrl() { return "https://api.spiritme.tech/api"; }, - async _makeRequest(opts = {}) { + _makeRequest(opts = {}) { const { $ = this, - method = "GET", path, - data, - params, - headers, ...otherOpts } = opts; return axios($, { ...otherOpts, - method, - url: this._baseUrl() + path, - data, - params, + url: `${this._baseUrl()}${path}`, headers: { - ...headers, - "Authorization": `Token ${this.$auth.api_key}`, + Authorization: `Token ${this.$auth.api_key}`, + Accept: "application/json", }, }); }, - async getVideoStatus(videoId) { + listAvatars(opts = {}) { + return this._makeRequest({ + path: "/avatars/", + ...opts, + }); + }, + listVoices(opts = {}) { + return this._makeRequest({ + path: "/tts/voices/", + ...opts, + }); + }, + listFiles(opts = {}) { + return this._makeRequest({ + path: "/files/", + ...opts, + }); + }, + listVideos(opts = {}) { + return this._makeRequest({ + path: "/videos/", + ...opts, + }); + }, + getVideo({ + videoId, ...opts + }) { return this._makeRequest({ path: `/videos/${videoId}/`, + ...opts, }); }, - async generateVideo(voice, avatar, videoLength, script, desiredAnimation) { + generateVideo(opts = {}) { return this._makeRequest({ method: "POST", path: "/videos/", - data: { - voice, - avatar, - video_length: videoLength, - script, - desired_animation: desiredAnimation, - }, + ...opts, }); }, }, From fe5de4402b83401793928ca43d5d4faacfd039a6 Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Fri, 28 Jun 2024 17:41:26 -0400 Subject: [PATCH 3/4] pnpm-lock.yaml --- pnpm-lock.yaml | 294 +++++++++++++++---------------------------------- 1 file changed, 90 insertions(+), 204 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8ade7ebdc314..0166ddc118663 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5627,7 +5627,7 @@ importers: mongodb: ^4.6.0 dependencies: '@pipedream/platform': 1.6.5 - mongodb: 4.17.1 + mongodb: 4.17.1_dseaa2p5u2yk67qiepewcq3hkq components/monkeylearn: specifiers: @@ -8530,7 +8530,10 @@ importers: form-data: 4.0.0 components/spiritme: - specifiers: {} + specifiers: + '@pipedream/platform': ^3.0.0 + dependencies: + '@pipedream/platform': 3.0.0 components/splitwise: specifiers: @@ -10894,7 +10897,7 @@ packages: resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.535.0 + '@aws-sdk/types': 3.598.0 tslib: 1.14.1 dev: false @@ -11032,52 +11035,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-cognito-identity/3.423.0: - resolution: {integrity: sha512-9nyilMrihznN7Y6T/dVhbg4YGsdk7szzShoyoSGwofOg61ugobnHbBvh0tPPOQcHhlzXvD8LZdOQ6Kd4KvNp/A==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.423.0 - '@aws-sdk/credential-provider-node': 3.423.0 - '@aws-sdk/middleware-host-header': 3.418.0 - '@aws-sdk/middleware-logger': 3.418.0 - '@aws-sdk/middleware-recursion-detection': 3.418.0 - '@aws-sdk/middleware-signing': 3.418.0 - '@aws-sdk/middleware-user-agent': 3.418.0 - '@aws-sdk/region-config-resolver': 3.418.0 - '@aws-sdk/types': 3.418.0 - '@aws-sdk/util-endpoints': 3.418.0 - '@aws-sdk/util-user-agent-browser': 3.418.0 - '@aws-sdk/util-user-agent-node': 3.418.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: false - optional: true - /@aws-sdk/client-cognito-identity/3.600.0: resolution: {integrity: sha512-8dYsnDLiD0rjujRiZZl0E57heUkHqMSFZHBi0YMs57SM8ODPxK3tahwDYZtS7bqanvFKZwGy+o9jIcij7jBOlA==} engines: {node: '>=16.0.0'} @@ -11899,7 +11856,7 @@ packages: '@smithy/util-middleware': 2.2.0 '@smithy/util-retry': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -12038,7 +11995,7 @@ packages: '@smithy/util-defaults-mode-node': 2.3.1 '@smithy/util-retry': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -12084,7 +12041,7 @@ packages: '@smithy/util-middleware': 2.2.0 '@smithy/util-retry': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -12304,20 +12261,6 @@ packages: tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-cognito-identity/3.423.0: - resolution: {integrity: sha512-FuuCOeUkAn3tZU2GUN3eUjs4AC88t5je4N5/NVbTaSN0e2FGf9PnN5nrwTKwaOGVLSe6/FvfudW01LZ/+PRQOQ==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-sdk/client-cognito-identity': 3.423.0 - '@aws-sdk/types': 3.418.0 - '@smithy/property-provider': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: false - optional: true - /@aws-sdk/credential-provider-cognito-identity/3.600.0: resolution: {integrity: sha512-AIM+B06d1+71EuBrk2UR9ZZgRS3a+ARxE3oZKMZYlfqtZ3kY8w4DkhEt7OVruc6uSsMhkrcQT6nxsOxFSi4RtA==} engines: {node: '>=16.0.0'} @@ -12338,7 +12281,7 @@ packages: '@aws-sdk/types': 3.418.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-env/3.535.0: @@ -12348,7 +12291,7 @@ packages: '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-env/3.598.0: @@ -12361,20 +12304,6 @@ packages: tslib: 2.6.3 dev: false - /@aws-sdk/credential-provider-http/3.423.0: - resolution: {integrity: sha512-y/mutbiCU/4HGN/ChcNBhPaXo4pgg6lAcWyuMTSSfAR03hjoXe1cMwbPcUiEwzQrZ/+1yufLpZhmoiAWsgAkNw==} - engines: {node: '>=14.0.0'} - dependencies: - '@aws-sdk/types': 3.418.0 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/property-provider': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - dev: false - optional: true - /@aws-sdk/credential-provider-http/3.552.0: resolution: {integrity: sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==} engines: {node: '>=14.0.0'} @@ -12387,7 +12316,7 @@ packages: '@smithy/smithy-client': 2.5.1 '@smithy/types': 2.12.0 '@smithy/util-stream': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-http/3.598.0: @@ -12418,7 +12347,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -12437,7 +12366,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -12535,7 +12464,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-process/3.535.0: @@ -12546,7 +12475,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-process/3.598.0: @@ -12570,7 +12499,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -12585,7 +12514,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -12614,7 +12543,7 @@ packages: '@aws-sdk/types': 3.418.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/credential-provider-web-identity/3.556.0_44iqpmbeuswd4eyeepqjgvbfii: @@ -12625,7 +12554,7 @@ packages: '@aws-sdk/types': 3.535.0 '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -12644,35 +12573,10 @@ packages: tslib: 2.6.3 dev: false - /@aws-sdk/credential-providers/3.423.0: - resolution: {integrity: sha512-jsjIrnu+bVUz2lekcg9wxpPlO8jWd9q26MP/rRwdkm9LHqroICjZY7tIYqSJliVkeSyJHJ9pq/jNDceWhy6a0A==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@aws-sdk/client-cognito-identity': 3.423.0 - '@aws-sdk/client-sso': 3.423.0 - '@aws-sdk/client-sts': 3.423.0 - '@aws-sdk/credential-provider-cognito-identity': 3.423.0 - '@aws-sdk/credential-provider-env': 3.418.0 - '@aws-sdk/credential-provider-http': 3.423.0 - '@aws-sdk/credential-provider-ini': 3.423.0 - '@aws-sdk/credential-provider-node': 3.423.0 - '@aws-sdk/credential-provider-process': 3.418.0 - '@aws-sdk/credential-provider-sso': 3.423.0 - '@aws-sdk/credential-provider-web-identity': 3.418.0 - '@aws-sdk/types': 3.418.0 - '@smithy/credential-provider-imds': 2.0.13 - '@smithy/property-provider': 2.0.11 - '@smithy/types': 2.3.4 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: false - optional: true - /@aws-sdk/credential-providers/3.600.0_dseaa2p5u2yk67qiepewcq3hkq: resolution: {integrity: sha512-cC9uqmX0rgx1efiJGqeR+i0EXr8RQ5SAzH7M45WNBZpYiLEe6reWgIYJY9hmOxuaoMdWSi8kekuN3IjTIORRjw==} engines: {node: '>=16.0.0'} + requiresBuild: true dependencies: '@aws-sdk/client-cognito-identity': 3.600.0 '@aws-sdk/client-sso': 3.598.0 @@ -12700,7 +12604,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: mnemonist: 0.38.3 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/middleware-bucket-endpoint/3.418.0: @@ -13065,7 +12969,7 @@ packages: '@smithy/util-defaults-mode-node': 2.3.1 '@smithy/util-retry': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - aws-crt dev: false @@ -13079,7 +12983,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/shared-ini-file-loader': 2.4.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -13127,7 +13031,7 @@ packages: resolution: {integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/util-endpoints/3.418.0: @@ -13165,7 +13069,7 @@ packages: '@aws-sdk/types': 3.418.0 '@smithy/querystring-builder': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/util-format-url/3.535.0: @@ -13175,14 +13079,14 @@ packages: '@aws-sdk/types': 3.535.0 '@smithy/querystring-builder': 2.2.0 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/util-locate-window/3.310.0: resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@aws-sdk/util-locate-window/3.568.0: @@ -13281,7 +13185,7 @@ packages: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-auth/1.5.0: @@ -13290,7 +13194,7 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-util': 1.5.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-client/1.7.3: @@ -13303,7 +13207,7 @@ packages: '@azure/core-tracing': 1.0.1 '@azure/core-util': 1.5.0 '@azure/logger': 1.0.4 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - supports-color dev: false @@ -13333,7 +13237,7 @@ packages: form-data: 4.0.0 node-fetch: 2.7.0 process: 0.11.10 - tslib: 2.6.2 + tslib: 2.6.3 tunnel: 0.0.6 uuid: 8.3.2 xml2js: 0.5.0 @@ -13348,14 +13252,14 @@ packages: '@azure/abort-controller': 1.1.0 '@azure/core-util': 1.5.0 '@azure/logger': 1.0.4 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-paging/1.5.0: resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-rest-pipeline/1.12.1: @@ -13370,7 +13274,7 @@ packages: form-data: 4.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - supports-color dev: false @@ -13380,14 +13284,14 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@opentelemetry/api': 1.6.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-tracing/1.0.1: resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/core-util/1.5.0: @@ -13395,7 +13299,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/identity/2.1.0: @@ -13416,7 +13320,7 @@ packages: jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.6.2 + tslib: 2.6.3 uuid: 8.3.2 transitivePeerDependencies: - supports-color @@ -13436,7 +13340,7 @@ packages: '@azure/core-tracing': 1.0.1 '@azure/core-util': 1.5.0 '@azure/logger': 1.0.4 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - supports-color dev: false @@ -13445,7 +13349,7 @@ packages: resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@azure/msal-browser/2.38.2: @@ -13485,7 +13389,7 @@ packages: '@azure/core-tracing': 1.0.0-preview.13 '@azure/logger': 1.0.4 events: 3.3.0 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - encoding dev: false @@ -14940,7 +14844,7 @@ packages: resolution: {integrity: sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==} dependencies: '@firebase/util': 1.7.3 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@firebase/database-compat/0.2.10_@firebase+app-types@0.7.0: @@ -14971,7 +14875,7 @@ packages: '@firebase/logger': 0.3.4 '@firebase/util': 1.7.3 faye-websocket: 0.11.4 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - '@firebase/app-types' dev: false @@ -14979,13 +14883,13 @@ packages: /@firebase/logger/0.3.4: resolution: {integrity: sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@firebase/util/1.7.3: resolution: {integrity: sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@google-ai/generativelanguage/0.2.1: @@ -17664,7 +17568,7 @@ packages: ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: true /@putout/traverse/9.0.0: @@ -17820,7 +17724,7 @@ packages: '@sentry/core': 7.73.0 '@sentry/types': 7.73.0 '@sentry/utils': 7.73.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@sentry/core/7.73.0: @@ -17829,7 +17733,7 @@ packages: dependencies: '@sentry/types': 7.73.0 '@sentry/utils': 7.73.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@sentry/node/7.73.0: @@ -17858,7 +17762,7 @@ packages: engines: {node: '>=8'} dependencies: '@sentry/types': 7.73.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@sevinf/maybe/0.5.0: @@ -17985,7 +17889,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/abort-controller/2.2.0: @@ -17993,7 +17897,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/abort-controller/3.1.0: @@ -18008,13 +17912,13 @@ packages: resolution: {integrity: sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==} dependencies: '@smithy/util-base64': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/chunked-blob-reader/2.0.0: resolution: {integrity: sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/config-resolver/2.0.11: @@ -18086,7 +17990,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 '@smithy/url-parser': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/credential-provider-imds/2.3.0: @@ -18097,7 +18001,7 @@ packages: '@smithy/property-provider': 2.2.0 '@smithy/types': 2.12.0 '@smithy/url-parser': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/credential-provider-imds/3.1.2: @@ -18126,7 +18030,7 @@ packages: '@aws-crypto/crc32': 3.0.0 '@smithy/types': 2.12.0 '@smithy/util-hex-encoding': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/eventstream-serde-browser/2.0.10: @@ -18161,7 +18065,7 @@ packages: dependencies: '@smithy/eventstream-codec': 2.0.10 '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/fetch-http-handler/2.2.1: @@ -18274,7 +18178,7 @@ packages: resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/is-array-buffer/2.2.0: @@ -18523,7 +18427,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/property-provider/2.2.0: @@ -18531,7 +18435,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/property-provider/3.1.2: @@ -18579,8 +18483,8 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - '@smithy/util-uri-escape': 2.0.0 - tslib: 2.6.2 + '@smithy/util-uri-escape': 2.2.0 + tslib: 2.6.3 dev: false /@smithy/querystring-builder/2.2.0: @@ -18589,7 +18493,7 @@ packages: dependencies: '@smithy/types': 2.12.0 '@smithy/util-uri-escape': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/querystring-builder/3.0.2: @@ -18606,7 +18510,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/querystring-parser/2.2.0: @@ -18614,7 +18518,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/querystring-parser/3.0.2: @@ -18651,7 +18555,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/shared-ini-file-loader/2.4.0: @@ -18659,7 +18563,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/shared-ini-file-loader/3.1.2: @@ -18693,9 +18597,9 @@ packages: '@smithy/types': 2.12.0 '@smithy/util-hex-encoding': 2.2.0 '@smithy/util-middleware': 2.2.0 - '@smithy/util-uri-escape': 2.0.0 + '@smithy/util-uri-escape': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/signature-v4/2.3.0: @@ -18708,7 +18612,7 @@ packages: '@smithy/util-middleware': 2.2.0 '@smithy/util-uri-escape': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/signature-v4/3.1.1: @@ -18888,7 +18792,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/is-array-buffer': 2.2.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-buffer-from/2.2.0: @@ -18911,14 +18815,14 @@ packages: resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-config-provider/2.3.0: resolution: {integrity: sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-config-provider/3.0.0: @@ -19029,14 +18933,14 @@ packages: resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-hex-encoding/2.2.0: resolution: {integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-hex-encoding/3.0.0: @@ -19058,7 +18962,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.12.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-middleware/2.2.0: @@ -19129,7 +19033,7 @@ packages: '@smithy/util-buffer-from': 2.2.0 '@smithy/util-hex-encoding': 2.2.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-stream/3.0.4: @@ -19153,18 +19057,11 @@ packages: tslib: 2.6.3 dev: false - /@smithy/util-uri-escape/2.0.0: - resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==} - engines: {node: '>=14.0.0'} - dependencies: - tslib: 2.6.2 - dev: false - /@smithy/util-uri-escape/2.2.0: resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@smithy/util-uri-escape/3.0.0: @@ -20508,14 +20405,14 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /ast-types/0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: true /astral-regex/2.0.0: @@ -20892,7 +20789,7 @@ packages: dependencies: buffer: 6.0.3 inherits: 2.0.4 - readable-stream: 4.4.2 + readable-stream: 4.5.2 dev: false /bluebird/3.7.2: @@ -22553,7 +22450,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /dot-prop/5.3.0: @@ -27158,7 +27055,7 @@ packages: /lower-case/2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /lowercase-keys/1.0.1: @@ -28300,7 +28197,7 @@ packages: whatwg-url: 11.0.0 dev: false - /mongodb/4.17.1: + /mongodb/4.17.1_dseaa2p5u2yk67qiepewcq3hkq: resolution: {integrity: sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==} engines: {node: '>=12.9.0'} dependencies: @@ -28308,9 +28205,10 @@ packages: mongodb-connection-string-url: 2.6.0 socks: 2.7.1 optionalDependencies: - '@aws-sdk/credential-providers': 3.423.0 + '@aws-sdk/credential-providers': 3.600.0_dseaa2p5u2yk67qiepewcq3hkq '@mongodb-js/saslprep': 1.1.0 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt dev: false @@ -28532,7 +28430,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /node-abort-controller/3.1.1: @@ -30363,17 +30261,6 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readable-stream/4.4.2: - resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - dev: false - /readable-stream/4.5.2: resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -31032,7 +30919,7 @@ packages: /rxjs/7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 /sade/1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -31378,7 +31265,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /snakecase-keys/5.4.7: @@ -32542,7 +32429,6 @@ packages: /tslib/2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - dev: false /tslint/5.14.0_typescript@5.2.2: resolution: {integrity: sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==} From 85a1f489388ab029c37ee56177d0944c9f2a690e Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Sat, 29 Jun 2024 13:56:29 -0400 Subject: [PATCH 4/4] fix pagination --- .../new-avatar-video-completion/new-avatar-video-completion.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs b/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs index c3e38c1b20f7a..324f3c55da3cb 100644 --- a/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs +++ b/components/spiritme/sources/new-avatar-video-completion/new-avatar-video-completion.mjs @@ -66,6 +66,7 @@ export default { break; } } + params.offset += params.limit; total = results?.length; } while (total === params.limit && (!max || videos.length < max));