From ad3d7de056fd36ccb1e6f6e399b294d3c57158f8 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 10 Mar 2025 22:13:52 +0200 Subject: [PATCH 01/61] chore: add passport-reddit --- package.json | 1 + yarn.lock | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/package.json b/package.json index 6b42c86..bdb01e5 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "passport": "^0.5.2", "passport-facebook": "^3.0.0", "passport-google-oauth20": "^2.0.0", + "passport-reddit": "^1.1.0", "pdf-parse": "^1.1.1", "sanitize-html": "^2.13.1", "string-strip-html": "8.5.0", diff --git a/yarn.lock b/yarn.lock index aa59c2a..f62063b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6841,6 +6841,11 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +oauth@0.10.x: + version "0.10.0" + resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.10.0.tgz#3551c4c9b95c53ea437e1e21e46b649482339c58" + integrity sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q== + oauth@0.9.x: version "0.9.15" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" @@ -7056,6 +7061,24 @@ passport-oauth2@^1.5.0, passport-oauth2@^1.6.1: uid2 "0.0.x" utils-merge "1.x.x" +passport-oauth2@^1.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.8.0.tgz#55725771d160f09bbb191828d5e3d559eee079c8" + integrity sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA== + dependencies: + base64url "3.x.x" + oauth "0.10.x" + passport-strategy "1.x.x" + uid2 "0.0.x" + utils-merge "1.x.x" + +passport-reddit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/passport-reddit/-/passport-reddit-1.1.0.tgz#efac026a6d55c9ce4e8dbc189b94b248ea64e6bf" + integrity sha512-dLOg41JEyUIuHKF3L/RojrAWG8F/VbywkRzKxIMXUSo0+/ea4NZzlkywP/wsTGDH3z9/uMYVu5rKb52rwZl3iQ== + dependencies: + passport-oauth2 "^1.6" + passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" From 8dbcc4388f2c6ad10dd5b99d1e905a4d7168118a Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 10 Mar 2025 22:13:55 +0200 Subject: [PATCH 02/61] feat: reddit oauth --- src/providers/reddit/index.ts | 177 ++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 src/providers/reddit/index.ts diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts new file mode 100644 index 0000000..d7300e9 --- /dev/null +++ b/src/providers/reddit/index.ts @@ -0,0 +1,177 @@ +import { Request, Response } from "express"; +import Base from "../BaseProvider"; + +import { + BaseProviderConfig, + ConnectionCallbackResponse, + PassportProfile, +} from "../../interfaces"; +import { RedditApi } from "./api"; +import CommentsHandler from "./comments"; +import { PassportStatic } from "passport"; +import crypto from "crypto"; + +export interface RedditProviderConfig extends BaseProviderConfig { + apiHash: string; + appId: string; + appSecret: string; + callbackUrl: string; + limitResults: boolean; +} + +const passport = require("passport"); +const Strategy = require("passport-reddit"); + +export default class RedditProvider extends Base { + protected config: RedditProviderConfig; + protected api?: RedditApi; + + public getProviderName() { + return "reddit"; + } + + public getProviderLabel() { + return "Reddit"; + } + + public getProviderApplicationUrl() { + return "https://reddit.com/"; + } + + public setConfig(config: RedditProviderConfig) { + this.config = config; + } + + public syncHandlers(): any[] { + return [ + // CommentsHandler + ]; + } + + public async connect(req: Request, res: Response, next: any): Promise { + this.init(); + + req.session.state = crypto.randomBytes(32).toString("hex"); + req.session.save((err) => console.log(err)); + + const auth = await passport.authenticate("reddit"); + + return auth(req, res, next); + } + + public async callback( + req: Request, + res: Response, + next: any + ): Promise { + this.init(); + + const promise = new Promise((resolve, rejects) => { + const auth = passport.authenticate( + "reddit", + { + failureRedirect: "/failure/reddit", + failureMessage: true, + state: true, + scope: ["identity", "read"], + }, + function (err: any, data: any) { + if (err) { + rejects(err); + } else { + const username = data.profile.id; + const profile = data.profile; + const name = data.profile.name; + + const connectionToken: ConnectionCallbackResponse = { + id: profile.id, + accessToken: data.accessToken, + refreshToken: data.refreshToken, + profile: { + username, + ...profile, + connectionProfile: { + readableId: name, + }, + name, + displayName: name, + }, + }; + + resolve(connectionToken); + } + } + ); + + auth(req, res, next); + }); + + const result = await promise; + return result; + } + + // refreshToken and this.connection is undefined + public async getApi( + accessToken?: string, + refreshToken?: string + ): Promise { + if (this.api) { + return this.api; + } + + const api = new RedditApi( + accessToken ? accessToken : this.connection!.accessToken + ); + if (!refreshToken) { + refreshToken = this.connection ? this.connection.refreshToken : undefined; + } + + if (!refreshToken) { + throw new Error("Unable to load Reddit API"); + } + + // api.restoreBinFile(refreshToken); + + await api.getClient(true); + this.api = api; + return api; + } + + public async close() { + try { + // const api = await this.getApi(); + // const binFile = await api.closeClient(); + + // this.connection!.refreshToken = binFile; + } catch (err: any) { + // Error with binFile (possibly because auth has been disconnected), do nothing + } + } + + public async init() { + passport.use( + new Strategy.RedditStrategy( + { + clientID: this.config.appId, + clientSecret: this.config.appSecret, + // TODO 127... throws 'Cannot read properties of undefined (reading 'id')', probably same state error + callbackURL: "http://localhost:5021/callback/reddit", + }, + function ( + accessToken: string, + refreshToken: string, + profile: any, + cb: any + ) { + // console.log(accessToken, refreshToken, profile, cb); + // Simply return the raw data + return cb(null, { + accessToken, + refreshToken, + profile, + }); + } + ) + ); + } +} From d9ddb8e6d6efdbc3652ad419456ed102ec51063f Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 11 Mar 2025 23:44:36 +0200 Subject: [PATCH 03/61] feat: api starter --- src/providers/reddit/api.ts | 155 ++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/providers/reddit/api.ts diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts new file mode 100644 index 0000000..34c4ea8 --- /dev/null +++ b/src/providers/reddit/api.ts @@ -0,0 +1,155 @@ +import { Devvit } from "@devvit/public-api"; +import axios, { Axios, AxiosInterceptorOptions } from "axios"; + +const requestInterceptor = [ + function (config: any) { + // Do something before request is sent + return config; + }, + function (error: any) { + // Do something with request error + return Promise.reject(error); + }, +]; + +/** + * From the docs: + * Clients connecting via OAuth2 may make up to 60 requests per minute. Monitor the following response headers to ensure that you're not exceeding the limits: + * X-Ratelimit-Used: Approximate number of requests used in this period + * X-Ratelimit-Remaining: Approximate number of requests left to use + * X-Ratelimit-Reset: Approximate number of seconds to end of period + */ +const responseInterceptor = [ + function (response: any) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + return response; + }, + function (error: any) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + }, +]; + +type RequestConfig = {}; + +type Chat = {}; + +/** + * @abstract + * @summary NOTE Data should be scrapped back as far as 3 months + */ +export class RedditApi { + clientId: string; + tdPath: string; + client?: Axios | Devvit; + + constructor(clientId: string, binFile?: string) { + this.clientId = clientId; + + // TODO Research this, might be used to store auth token + // this.tdPath = `${tdPathPrefix}/${this.clientId}`; + // if (binFile) { + // this.restoreBinFile(binFile); + // } + } + + // Devvit is under development + public async getClient( + useDevvit: boolean = false, + startClient: boolean = false + ): Promise { + if (this.client) { + return this.client; + } + + try { + if (useDevvit) { + // this.client = new Devvit(); + } else { + this.client = axios.create(); + + this.client.interceptors.request.use(...requestInterceptor); + + // Add a response interceptor + this.client.interceptors.response.use(...responseInterceptor); + } + + if (startClient) { + await this.startClient(); + } + + return this.client; + } catch (err: any) { + console.error(`Telegram library error: ${err.message}`); + throw new Error(`Internal error with Telegram library`); + } + } + + public async startClient() { + const client = await this.getClient(); + + // load saved binary file to disk + // const nowMinutes = Math.floor(Date.now() / 1000 / 60) + } + + private async _call( + endpoint: string, + config?: RequestConfig, + customInterceptor?: any[] + ): Promise { + return {} as Type; + } + + public async getGroupChat(chatId: number): Promise { + const chatDetail = await this._call("", { + chat_id: chatId, + }); + + return chatDetail; + } + + /** + * + * @summary Read all private messages from inbox, unread and sent folder from the past 3 months + * https://www.reddit.com/dev/api#GET_message_{where} + * @returns + */ + public async getChats(): Promise { + // TODO Add response interceptor to check message data and if it passed the 3 months + const customInterceptor: any[] = []; + + const chatDetail = await this._call( + "/message/inbox", + { + max_replies: 300, + }, + customInterceptor + ); + + return chatDetail; + } + + /** + * + * @summary Get the profile of auth token owner + * @returns + */ + public async getMe(): Promise { + const client = await this.getClient(); + const user = await this._call("/api/v1/me"); + + return user; + } + + /** + * + * @summary Get subreddits where the user is subcribed to, a contributor or a moderator + * @returns + */ + public async getSubreddits() { + const client = await this.getClient(); + return await this._call("/subreddits/mine/subscribe", {}); + } +} From e6cd535f849ca71600d585e8200473097d3e38f9 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 12 Mar 2025 12:21:25 +0200 Subject: [PATCH 04/61] feat: api fetch subreddits, profile --- src/providers/reddit/api.ts | 159 +++++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 49 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 34c4ea8..017bffa 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -1,10 +1,13 @@ -import { Devvit } from "@devvit/public-api"; -import axios, { Axios, AxiosInterceptorOptions } from "axios"; +import { Devvit, Subreddit } from "@devvit/public-api"; +import axios, { Axios, AxiosInterceptorOptions, AxiosResponse } from "axios"; -const requestInterceptor = [ - function (config: any) { +const OAUTH_ENDPOINT = "https://oauth.reddit.com/"; + +const requestInterceptor = (token: string) => [ + function (request: any) { + request.headers.Authorization = `Bearer ${token}`; // Do something before request is sent - return config; + return request; }, function (error: any) { // Do something with request error @@ -20,7 +23,7 @@ const requestInterceptor = [ * X-Ratelimit-Reset: Approximate number of seconds to end of period */ const responseInterceptor = [ - function (response: any) { + function (response: AxiosResponse) { // Any status code that lie within the range of 2xx cause this function to trigger // Do something with response data return response; @@ -32,10 +35,17 @@ const responseInterceptor = [ }, ]; -type RequestConfig = {}; +type RequestConfig = { + max_replies?: number; + pagination?: PaginationParams; +}; type Chat = {}; +type PaginationParams = { + after: string; +}; + /** * @abstract * @summary NOTE Data should be scrapped back as far as 3 months @@ -43,23 +53,14 @@ type Chat = {}; export class RedditApi { clientId: string; tdPath: string; - client?: Axios | Devvit; + client?: Axios; - constructor(clientId: string, binFile?: string) { + constructor(clientId: string) { this.clientId = clientId; - - // TODO Research this, might be used to store auth token - // this.tdPath = `${tdPathPrefix}/${this.clientId}`; - // if (binFile) { - // this.restoreBinFile(binFile); - // } } // Devvit is under development - public async getClient( - useDevvit: boolean = false, - startClient: boolean = false - ): Promise { + public async getClient(useDevvit: boolean = false): Promise { if (this.client) { return this.client; } @@ -70,16 +71,14 @@ export class RedditApi { } else { this.client = axios.create(); - this.client.interceptors.request.use(...requestInterceptor); + this.client.interceptors.request.use( + ...requestInterceptor(this.clientId) + ); // Add a response interceptor this.client.interceptors.response.use(...responseInterceptor); } - if (startClient) { - await this.startClient(); - } - return this.client; } catch (err: any) { console.error(`Telegram library error: ${err.message}`); @@ -87,33 +86,67 @@ export class RedditApi { } } - public async startClient() { - const client = await this.getClient(); - - // load saved binary file to disk - // const nowMinutes = Math.floor(Date.now() / 1000 / 60) - } - + /** + * + * @summary This functions makes a request to the reddit API endpoint. It assumes that requested data is either a single entity or a listing + * In case of a listing a custom interceptor has to set the terminationCriteriaMet flag to true and the pagination params. + * The returned value is always a Type array, where Type is the supplied type. + * @param endpoint + * @param config + * @param customInterceptor + * @returns The returned data is either an array or an array of arrays. We can extract the data in the caller function based on the requested type. + * @example profile -> resp[0] messages -> resp.flat() or subreddits -> resp.flat().flat() (multiple types of subreddits) + */ private async _call( - endpoint: string, + method: "GET" | "POST" | "PUT", + endpoint: `${string}.json`, config?: RequestConfig, customInterceptor?: any[] - ): Promise { - return {} as Type; - } + ): Promise { + let terminationCriteriaMet = true; + let data: Type[] = []; + let pagination: PaginationParams = config.pagination; + + const myInterceptor = axios.interceptors.request.use(...customInterceptor); + + let action; + switch (method) { + case "GET": + action = this.client.get; + break; + case "POST": + action = this.client.post; + break; + case "PUT": + action = this.client.put; + break; + } - public async getGroupChat(chatId: number): Promise { - const chatDetail = await this._call("", { - chat_id: chatId, - }); + while (terminationCriteriaMet) { + const resp = await action<{ + data: Type; + terminationCriteriaMet: boolean; + pagination: PaginationParams; + }>(`${OAUTH_ENDPOINT}${endpoint}?after=${after}`, { + params: { + ...config, + ...pagination, + }, + }); + data.push(resp.data.data); + terminationCriteriaMet = resp.data.terminationCriteriaMet; + pagination = resp.data.pagination; + } - return chatDetail; + this.client.interceptors.request.eject(myInterceptor); + + return data; } /** * * @summary Read all private messages from inbox, unread and sent folder from the past 3 months - * https://www.reddit.com/dev/api#GET_message_{where} + * @see https://www.reddit.com/dev/api#GET_message_{where} * @returns */ public async getChats(): Promise { @@ -121,7 +154,8 @@ export class RedditApi { const customInterceptor: any[] = []; const chatDetail = await this._call( - "/message/inbox", + "GET", + "/message/inbox.json", { max_replies: 300, }, @@ -136,20 +170,47 @@ export class RedditApi { * @summary Get the profile of auth token owner * @returns */ - public async getMe(): Promise { - const client = await this.getClient(); - const user = await this._call("/api/v1/me"); + public async getMe(): Promise { + const user = await this._call("GET", "/api/v1/me.json"); - return user; + return user[0]; } /** * * @summary Get subreddits where the user is subcribed to, a contributor or a moderator + * @see https://www.reddit.com/dev/api#GET_subreddits_mine_{where} * @returns */ - public async getSubreddits() { - const client = await this.getClient(); - return await this._call("/subreddits/mine/subscribe", {}); + public async getSubreddits(): Promise { + const endpoints: `${string}.json`[] = [ + "/subreddits/mine/contributor.json", + "/subreddits/mine/moderator.json", + "/subreddits/mine/subscribe.json", + ]; + const subreddits = await Promise.all( + endpoints.map(async (endpoint) => { + return await this._call( + "GET", + "/message/inbox.json", + { + max_replies: 300, + }, + [ + (response: AxiosResponse) => { + if (response.data.children.length === 0) { + return { + data: [] as any[], + terminationCriteriaMet: true, + pagination: {}, + }; + } + }, + ] + ); + }) + ); + + return subreddits.flat().flat(); } } From 2d73608b27f2a9082897bcb8531c3880a9fdb80c Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 20 Mar 2025 19:53:41 +0200 Subject: [PATCH 05/61] feat: getUser --- src/providers/reddit/api.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 017bffa..18d9284 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -176,6 +176,17 @@ export class RedditApi { return user[0]; } + /** + * + * @summary Get the profile of auth token owner + * @returns + */ + public async getUser(username: string): Promise { + const user = await this._call("GET", `/user/${username}/about.json`); + + return user[0]; + } + /** * * @summary Get subreddits where the user is subcribed to, a contributor or a moderator From 72036a4d376c539fdd87b3be00c0920feb8c5258 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 26 Mar 2025 23:01:23 +0200 Subject: [PATCH 06/61] feat: chat handler --- src/providers/reddit/chat.ts | 285 +++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 src/providers/reddit/chat.ts diff --git a/src/providers/reddit/chat.ts b/src/providers/reddit/chat.ts new file mode 100644 index 0000000..55d9b23 --- /dev/null +++ b/src/providers/reddit/chat.ts @@ -0,0 +1,285 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { RedditChatType, RedditConfig } from "./reddit"; +import { RedditApi } from "./api"; +import { + SchemaChatMessageType, + SchemaSocialChatGroup, + SchemaSocialChatMessage, +} from "../../schemas"; +import { UsersCache } from "../telegram/usersCache"; +import InvalidTokenError from "../InvalidTokenError"; +import { TDError } from "tdlib-native/dist"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +import { Listing, PrivateMessage, User } from "@devvit/public-api"; +const _ = require("lodash"); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncChatMessagesResult extends SyncItemsResult { + items: SchemaSocialChatMessage[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class MessagesHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "messages"; + } + + public getLabel(): string { + return "Messages"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.CHAT_MESSAGE; + } + + public getProviderApplicationUrl(): string { + return "https://chat.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + { + id: "messageTypes", + label: "Message types", + type: ConnectionOptionType.ENUM_MULTI, + enumOptions: [ + { + label: "Inbox", + value: RedditChatType.INBOX, + }, + { + label: "Unread", + value: RedditChatType.UNREAD, + }, + { + label: "Sent", + value: RedditChatType.SENT, + }, + ], + // Exclude super groups by default + defaultValue: [ + RedditChatType.INBOX, + RedditChatType.UNREAD, + RedditChatType.SENT, + ].join(","), + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + // const chatGroupDs = await this.provider.getDatastore(CONFIG.verida.schemas.CHAT_GROUP) + // const db2 = await chatGroupDs.getDb() + // await db2.destroy({}) + + // const chatMessageDs = await this.provider.getDatastore(CONFIG.verida.schemas.CHAT_MESSAGE) + // const db = await chatMessageDs.getDb() + // await db.destroy({}) + // throw new Error('destroyed') + + try { + let messageCount = 0; + let chats: SchemaSocialChatMessage[] = []; + let chatHistory: SchemaSocialChatMessage[] = []; + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const latestResp = await api.getChats("inbox", this.config.batchSize); + const latestResult = await this.buildResults( + api, + latestResp, + "inbox", + currentRange.endId, + _.has(this.config, "breakTimestamp") + ? this.config.breakTimestamp + : undefined + ); + + chats = latestResult.items; + let nextPageToken = _.get(latestResp, "data.nextPageToken"); + + // Update range if any chats have been fetched + if (chats.length) { + rangeTracker.completedRange( + { + startId: chats[0].sourceId, + endId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + // TODO + // if (chats.length != this.config.batchSize && currentRange.startId) { + + if (!chats.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + chats.length != this.config.batchSize && !nextPageToken + ? `Processed ${chats.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(chats).concat(chatHistory), + position: syncPosition, + }; + } catch (err: any) { + console.log(err.message); + if (err instanceof TDError) { + if (err.code == 401) { + throw new InvalidTokenError(err.message); + } + } + throw err; + } + } + + async buildResults( + api: RedditApi, + latestResp: Listing, + messageType: "inbox" | "unread" | "sent", + endId: string, + arg3: string + ): Promise { + const results: SchemaSocialChatMessage[] = []; + let breakHit: SyncItemsBreak; + + for (const chat of await latestResp.all()) { + if (chat.id === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End ID hit (${chat.id})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + + const createdTime = chat.created ?? new Date().toISOString(); + + // Get the "from" user + const from = await this.getUser(api, chat.from.id); + + results.push({ + _id: chat.id, + // TODO + groupId: "", + // TODO This is documented but not included in the Devvit types + // @ts-ignore + groupName: chat.name, + type: + messageType === "inbox" || messageType === "unread" + ? SchemaChatMessageType.RECEIVE + : SchemaChatMessageType.SEND, + messageText: chat.body, + messageHTML: chat.bodyHtml, + fromId: chat.from.id, + // TODO Get these from api, keep a cache and first fetch it from there + fromHandle: from.username, + // TODO Get displayName + fromName: from.username, + sentAt: chat.created.toDateString(), + name: `Private message: ${chat.from}`, + }); + } + + return { + items: results, + breakHit, + }; + } + + // TODO Refactor + cache: Map = new Map(); + + /** + * + * @summary Fetch a user or retrieve it from the cache + * @param api + * @param id + * @returns + */ + async getUser(api: RedditApi, id: string) { + const userFromCache = this.cache.get(id); + + if (!userFromCache) { + const user = await api.getUser(id); + this.cache.set(id, user); + } + + return userFromCache; + } +} From 04bd0d850753473e39dbc4462bfae03f23e6215a Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 27 Mar 2025 22:14:19 +0200 Subject: [PATCH 07/61] feat: getComments --- src/providers/reddit/api.ts | 101 ++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 22 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 18d9284..31ec999 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -1,5 +1,13 @@ -import { Devvit, Subreddit } from "@devvit/public-api"; -import axios, { Axios, AxiosInterceptorOptions, AxiosResponse } from "axios"; +import { + Devvit, + Listing, + PrivateMessage, + RedditAPIClient, + Subreddit, + User, + Comment, +} from "@devvit/public-api"; +import axios, { Axios, AxiosResponse } from "axios"; const OAUTH_ENDPOINT = "https://oauth.reddit.com/"; @@ -40,23 +48,28 @@ type RequestConfig = { pagination?: PaginationParams; }; -type Chat = {}; - type PaginationParams = { after: string; }; /** * @abstract - * @summary NOTE Data should be scrapped back as far as 3 months + * @summary This API is a combination of the original API and the in-development Devvit library(v0.11). This is required given that some of the methods are either + * not supported or return incomplete data. */ export class RedditApi { clientId: string; tdPath: string; client?: Axios; + devvitClient!: RedditAPIClient; constructor(clientId: string) { this.clientId = clientId; + Devvit.configure({ + redditAPI: true, + }); + // @ts-ignore Devvit exports RedditAPIClient as type + this.devvitClient = new RedditAPIClient({}); } // Devvit is under development @@ -149,20 +162,28 @@ export class RedditApi { * @see https://www.reddit.com/dev/api#GET_message_{where} * @returns */ - public async getChats(): Promise { - // TODO Add response interceptor to check message data and if it passed the 3 months - const customInterceptor: any[] = []; - - const chatDetail = await this._call( - "GET", - "/message/inbox.json", - { - max_replies: 300, - }, - customInterceptor - ); + public async getChats( + type: "inbox" | "unread" | "sent", + // TODO Batch size + batchSize: number + ): Promise> { + return await this.devvitClient.getMessages({ + type, + }); + + // // TODO Add response interceptor to check message data and if it passed the 3 months + // const customInterceptor: any[] = []; - return chatDetail; + // const chatDetail = await this._call( + // "GET", + // "/message/inbox.json", + // { + // max_replies: 300, + // }, + // customInterceptor + // ); + + // return chatDetail; } /** @@ -171,6 +192,7 @@ export class RedditApi { * @returns */ public async getMe(): Promise { + // TODO Check if getAppUser returns the same const user = await this._call("GET", "/api/v1/me.json"); return user[0]; @@ -181,14 +203,15 @@ export class RedditApi { * @summary Get the profile of auth token owner * @returns */ - public async getUser(username: string): Promise { - const user = await this._call("GET", `/user/${username}/about.json`); - - return user[0]; + public async getUser(usernameOrId: string | number): Promise { + return typeof usernameOrId === "string" + ? await this.devvitClient.getUserByUsername(usernameOrId) + : await this.devvitClient.getUserById(String(usernameOrId)); } /** * + * @summary This method is implemented by making api calls since no such Devvit method exists (v.0.11) * @summary Get subreddits where the user is subcribed to, a contributor or a moderator * @see https://www.reddit.com/dev/api#GET_subreddits_mine_{where} * @returns @@ -224,4 +247,38 @@ export class RedditApi { return subreddits.flat().flat(); } + + /** + * + * @summary Fetch comments for a user + * @param user + * @param pageSize + * @param limit + * @param timeframe + * @param sort + * @param before + * @param after + * @returns + */ + public async getComments( + user: User, + pageSize: number, + limit: number, + timeframe: "all" = "all", + sort: "new" = "new", + before?: string, + after?: string + ): Promise> { + let options = { + pageSize: 1, + timeframe, + sort, + limit, + before, + after, + }; + // TODO This might not be needed + options = JSON.parse(JSON.stringify(options)); + return await user.getComments(options); + } } From c06d9dd733869962b26335bc1288b8ad355dd252 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 27 Mar 2025 22:14:37 +0200 Subject: [PATCH 08/61] feat: chat handler --- src/providers/reddit/chat.ts | 86 ++++++++++++------------------------ 1 file changed, 29 insertions(+), 57 deletions(-) diff --git a/src/providers/reddit/chat.ts b/src/providers/reddit/chat.ts index 55d9b23..d5f21e3 100644 --- a/src/providers/reddit/chat.ts +++ b/src/providers/reddit/chat.ts @@ -13,12 +13,8 @@ import { import { ConnectionOptionType } from "../../interfaces"; import { RedditChatType, RedditConfig } from "./reddit"; import { RedditApi } from "./api"; -import { - SchemaChatMessageType, - SchemaSocialChatGroup, - SchemaSocialChatMessage, -} from "../../schemas"; -import { UsersCache } from "../telegram/usersCache"; +import { SchemaChatMessageType, SchemaSocialChatMessage } from "../../schemas"; +import { UsersCache } from "./usersCache"; import InvalidTokenError from "../InvalidTokenError"; import { TDError } from "tdlib-native/dist"; import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; @@ -34,15 +30,15 @@ export interface SyncChatMessagesResult extends SyncItemsResult { /** * @summary This returns everything as a Listing, no need to categorize it */ -export default class MessagesHandler extends BaseSyncHandler { +export default class ChatsHandler extends BaseSyncHandler { protected config: RedditConfig; public getName(): string { - return "messages"; + return "chat"; } public getLabel(): string { - return "Messages"; + return "Chats"; } public getSchemaUri(): string { @@ -80,8 +76,8 @@ export default class MessagesHandler extends BaseSyncHandler { defaultValue: "3-months", }, { - id: "messageTypes", - label: "Message types", + id: "chatTypes", + label: "Chat types", type: ConnectionOptionType.ENUM_MULTI, enumOptions: [ { @@ -118,19 +114,10 @@ export default class MessagesHandler extends BaseSyncHandler { api: RedditApi, syncPosition: SyncHandlerPosition ): Promise { - // const chatGroupDs = await this.provider.getDatastore(CONFIG.verida.schemas.CHAT_GROUP) - // const db2 = await chatGroupDs.getDb() - // await db2.destroy({}) - - // const chatMessageDs = await this.provider.getDatastore(CONFIG.verida.schemas.CHAT_MESSAGE) - // const db = await chatMessageDs.getDb() - // await db.destroy({}) - // throw new Error('destroyed') - try { - let messageCount = 0; let chats: SchemaSocialChatMessage[] = []; let chatHistory: SchemaSocialChatMessage[] = []; + const userCache = new UsersCache(api); if (this.config.batchSize > MAX_BATCH_SIZE) { throw new Error( @@ -145,12 +132,10 @@ export default class MessagesHandler extends BaseSyncHandler { const latestResp = await api.getChats("inbox", this.config.batchSize); const latestResult = await this.buildResults( api, + userCache, latestResp, "inbox", - currentRange.endId, - _.has(this.config, "breakTimestamp") - ? this.config.breakTimestamp - : undefined + currentRange.endId ); chats = latestResult.items; @@ -207,21 +192,30 @@ export default class MessagesHandler extends BaseSyncHandler { } } + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ async buildResults( api: RedditApi, + userCache: UsersCache, latestResp: Listing, - messageType: "inbox" | "unread" | "sent", - endId: string, - arg3: string + chatType: "inbox" | "unread" | "sent", + endId?: string ): Promise { const results: SchemaSocialChatMessage[] = []; let breakHit: SyncItemsBreak; for (const chat of await latestResp.all()) { - if (chat.id === endId) { + if (endId && chat.id === endId) { const logEvent: SyncProviderLogEvent = { level: SyncProviderLogLevel.DEBUG, - message: `End ID hit (${chat.id})`, + message: `End chat ID hit (${chat.id})`, }; this.emit("log", logEvent); breakHit = SyncItemsBreak.ID; @@ -231,28 +225,27 @@ export default class MessagesHandler extends BaseSyncHandler { const createdTime = chat.created ?? new Date().toISOString(); // Get the "from" user - const from = await this.getUser(api, chat.from.id); + const from = await userCache.getUser(chat.from.id); results.push({ _id: chat.id, - // TODO + // NOTE This is groupId: "", // TODO This is documented but not included in the Devvit types // @ts-ignore groupName: chat.name, type: - messageType === "inbox" || messageType === "unread" + chatType === "inbox" || chatType === "unread" ? SchemaChatMessageType.RECEIVE : SchemaChatMessageType.SEND, messageText: chat.body, messageHTML: chat.bodyHtml, fromId: chat.from.id, - // TODO Get these from api, keep a cache and first fetch it from there + // NOTE Handle and username is the same fromHandle: from.username, - // TODO Get displayName fromName: from.username, sentAt: chat.created.toDateString(), - name: `Private message: ${chat.from}`, + name: `Private chat: ${chat.from}`, }); } @@ -261,25 +254,4 @@ export default class MessagesHandler extends BaseSyncHandler { breakHit, }; } - - // TODO Refactor - cache: Map = new Map(); - - /** - * - * @summary Fetch a user or retrieve it from the cache - * @param api - * @param id - * @returns - */ - async getUser(api: RedditApi, id: string) { - const userFromCache = this.cache.get(id); - - if (!userFromCache) { - const user = await api.getUser(id); - this.cache.set(id, user); - } - - return userFromCache; - } } From ecd92af130370101348644c16094588154a08e1a Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 27 Mar 2025 22:17:45 +0200 Subject: [PATCH 09/61] feat: user cache --- src/providers/reddit/usersCache.ts | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/providers/reddit/usersCache.ts diff --git a/src/providers/reddit/usersCache.ts b/src/providers/reddit/usersCache.ts new file mode 100644 index 0000000..f2c43dc --- /dev/null +++ b/src/providers/reddit/usersCache.ts @@ -0,0 +1,33 @@ +import { User } from "@devvit/public-api"; +import { RedditApi } from "./api"; + +export interface TelegramUserProfile { + fullName: string; + firstName: string; + lastName: string; + username?: string; +} + +/** + * Helper utility to fetch a user object + */ +export class UsersCache { + private userCache: Record = {}; + private api: RedditApi; + + constructor(api: RedditApi) { + this.api = api; + } + + public async getUser(userId: string) { + if (this.userCache[userId]) { + return this.userCache[userId]; + } + + const user = await this.api.getUser(userId); + + this.userCache[userId] = user; + + return this.userCache[userId]; + } +} From bd25e82351d84625d97fcab9736178f46df657fb Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 27 Mar 2025 22:18:04 +0200 Subject: [PATCH 10/61] chore: types --- src/providers/reddit/reddit.d.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/providers/reddit/reddit.d.ts diff --git a/src/providers/reddit/reddit.d.ts b/src/providers/reddit/reddit.d.ts new file mode 100644 index 0000000..c2c77b6 --- /dev/null +++ b/src/providers/reddit/reddit.d.ts @@ -0,0 +1,18 @@ +import { BaseHandlerConfig } from "../../interfaces" + +export enum RedditChatType { + INBOX = "chatTypeInbox", + UNREAD = "chatTypeUnread", + SENT = "chatTypeSent", +} + +export interface RedditConfig extends BaseHandlerConfig { + apiId: number + apiHash: string + maxSyncLoops: number + // What is the maximum number of days to backdate + messageMaxAgeDays: number, + // Maximum number of messages to process in a given batch + messageBatchSize: number + useDbPos: boolean +} From 7885efedffa12b93db9332b896578d98f4fa7bf0 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 2 May 2025 23:28:14 +0300 Subject: [PATCH 11/61] chore: tests --- tests/providers/reddit/api.test.ts | 46 ++++++++++ tests/providers/reddit/comments.test.ts | 108 ++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 tests/providers/reddit/api.test.ts create mode 100644 tests/providers/reddit/comments.test.ts diff --git a/tests/providers/reddit/api.test.ts b/tests/providers/reddit/api.test.ts new file mode 100644 index 0000000..4f63119 --- /dev/null +++ b/tests/providers/reddit/api.test.ts @@ -0,0 +1,46 @@ +import { Listing, PrivateMessage, User, Subreddit } from "@devvit/public-api"; +import { RedditApi } from "../../../src/providers/reddit/api"; +import { z } from "zod"; + +// TODO Read from .env file +const clientId = ""; +const reddit = new RedditApi(clientId); +const API_CALLS = [ + { + endpoint: "chats", + action: reddit.getChats, + params: ["inbox", 100], + expectedType: Listing, + }, + { + endpoint: "me", + action: reddit.getMe, + expectedType: User, + }, + { + endpoint: "user", + action: reddit.getUser, + params: [""], + expectedType: User, + }, + { + endpoint: "subreddits", + action: reddit.getSubreddits, + expectedType: Listing, + }, +]; + +/** + * @summary Test that API calls returns a result w/ the expected type + */ +describe("Reddit API test", async () => { + it("should fetch valid data for each supported endpoint", async () => { + await Promise.all( + API_CALLS.map(async (apiCall) => { + const { params, action } = apiCall; + // @ts-expect-error Just for testing + const resp = params ? action(...params) : action; + }) + ); + }); +}); diff --git a/tests/providers/reddit/comments.test.ts b/tests/providers/reddit/comments.test.ts new file mode 100644 index 0000000..958ac78 --- /dev/null +++ b/tests/providers/reddit/comments.test.ts @@ -0,0 +1,108 @@ +const assert = require("assert"); +import { + Connection, + SyncHandlerPosition, + SyncHandlerStatus +} from "../../../src/interfaces"; +import Providers from "../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../common.utils"; + +import RedditCommentsHandler from "../../../src/providers/reddit/comments"; +import BaseProvider from "../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../common.tests"; +import { TelegramConfig } from "../../../src/providers/telegram/interfaces"; +import { SchemaSocialChatGroup, SchemaSocialChatMessage } from "../../../src/schemas"; + +const providerId = "reddit"; +let network: NetworkInstance; +let connection: Connection; +let provider: BaseProvider; +let handlerName = "comments"; +let testConfig: GenericTestConfig; +let providerConfig: Omit = { + maxSyncLoops: 1, + groupLimit: 2, + messageMaxAgeDays: 7, + messageBatchSize: 20, + messagesPerGroupLimit: 10, + maxGroupSize: 100, + useDbPos: false +}; + +// Tests: +// - max age days respected + +describe(`${providerId} comments tests`, function () { + this.timeout(100000); + + this.beforeAll(async function () { + network = await CommonUtils.getNetwork(); + connection = await CommonUtils.getConnection(providerId); + provider = Providers(providerId, network.context, connection); + + testConfig = { + idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, + timeOrderAttribute: "insertedAt", + batchSizeLimitAttribute: "batchSize", + }; + }); + + describe(`Fetch ${providerId} data`, () => { + + it(`Can pass basic tests: ${handlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditCommentsHandler, + providerConfig, + connection + ); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + // Batch 1 + const response = await handler._sync(api, syncPosition); + + // Make sure group and message limit were respected + let groupMessages: Record = {} + let groups: SchemaSocialChatGroup[] = [] + for (const result of ( response.results)) { + if (result.groupId) { + if (!groupMessages[result.groupId]) { + groupMessages[result.groupId] = [] + } + + groupMessages[result.groupId].push(result) + } else { + groups.push(result) + } + } + + assert.equal(groups.length, providerConfig.groupLimit, "Group limit is expected value") + //assert.equal(response.results.length - groups.length, providerConfig.messageBatchSize, "Total returned messages is expected value") + + for (const group of groups) { + const groupId = `${testConfig.idPrefix}-${group.sourceId}` + const groupMessageCount = groupMessages[groupId].length + assert.equal(groupMessageCount, providerConfig.messagesPerGroupLimit, `Total messages in group ${group.name} is correct (${groupMessageCount})`) + } + } catch (err) { + // ensure provider closes even if there's an error + await provider.close() + + throw err + } + }); + }); + + this.afterAll(async function () { + const { context } = await CommonUtils.getNetwork(); + await context.close(); + }); +}); From b3d7521fdbd225115dab09f745efc404864f8e55 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 3 May 2025 10:49:05 +0300 Subject: [PATCH 12/61] chore: devvit package --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index bdb01e5..c66435a 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "dependencies": { "@anthropic-ai/tokenizer": "^0.0.4", "@aws-sdk/client-bedrock-runtime": "^3.693.0", + "@devvit/public-api": "^0.11.9", "@langchain/aws": "^0.1.2", "@langchain/community": "^0.3.16", "@langchain/core": "^0.3.19", From 29d6fa7700cd10a873cfef0c280a94ddea1fa885 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 3 May 2025 10:49:34 +0300 Subject: [PATCH 13/61] chore: yarn --- yarn.lock | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index f62063b..efb826c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -992,6 +992,34 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@devvit/protos@0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@devvit/protos/-/protos-0.11.9.tgz#0b9b40655678ffbfeb851d2315e1dc9862f99c73" + integrity sha512-sPMTaAvzgM5+YY5sc006w+majAJZrSuYJPzGWnQZcPf8RT4NWoPOkBQz7NtMBJzj73K/Bs3j0AaKQUJlH1yQtA== + dependencies: + protobufjs "7.3.2" + rxjs "7.8.1" + +"@devvit/public-api@^0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@devvit/public-api/-/public-api-0.11.9.tgz#55fde42b39ba7634c123ca60070d1369ba4a7a46" + integrity sha512-iGDaSRnqZnKX/4xD4V1Fy5wli23xb26LCTiB84lkA1ZnMhSidjcNpT3xd6J6fTnyqrWERnpadkEPhXNUTPjXcg== + dependencies: + "@devvit/protos" "0.11.9" + "@devvit/shared-types" "0.11.9" + base64-js "1.5.1" + clone-deep "4.0.1" + moderndash "4.0.0" + +"@devvit/shared-types@0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@devvit/shared-types/-/shared-types-0.11.9.tgz#1fadb113077df4a54f2e3ad3b9e405a86085556a" + integrity sha512-6LilsUcwd6CllUyyqv7IJofc5HTf9xzVqSS6+1yqoT1pjCeJUcsGUp/UXt937N+i7Gqb42dBlCI+osI0YWWCXg== + dependencies: + "@devvit/protos" "0.11.9" + jsonschema "1.4.1" + uuid "9.0.0" + "@discordjs/builders@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.9.0.tgz#71fa6de91132bd1deaff2a9daea7aa5d5c9f124a" @@ -1546,6 +1574,59 @@ resolved "https://registry.yarnpkg.com/@oauth-everything/profile/-/profile-1.0.0.tgz#0b5e78749415519fa312dc83347a677903f456ba" integrity sha512-OmCuBPhjaLHh9MST9P5jRuVBZaP0z7hBk8nH4Yt7Id5kNM1AXGd5uud6CP7W2zuhKl2nk0KsYmeMT7SkzN6VWg== +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@sapphire/async-queue@^1.5.2", "@sapphire/async-queue@^1.5.3": version "1.5.3" resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.3.tgz#03cd2a2f3665068f314736bdc56eee2025352422" @@ -2454,6 +2535,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== +"@types/node@>=13.7.0": + version "22.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" + integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== + dependencies: + undici-types "~6.20.0" + "@types/node@^18.11.18": version "18.19.45" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.45.tgz#a9ebfe4c316a356be7ca11f753ecb2feda6d6bdf" @@ -3537,7 +3625,7 @@ base-x@^4.0.0: resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@1.5.1, base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3977,6 +4065,15 @@ clone-buffer@1.0.0: resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== +clone-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -5551,6 +5648,11 @@ hnswlib-node@^3.0.0: bindings "^1.5.0" node-addon-api "^8.0.0" +hotscript@1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/hotscript/-/hotscript-1.0.13.tgz#6eb5de757e9b33444ffc22555e98dbc17fa31fb4" + integrity sha512-C++tTF1GqkGYecL+2S1wJTfoH6APGAsbb7PAWQ3iVIwgG/EFseAfEVOKFgAFq4yK3+6j1EjUD4UQ9dRJHX/sSQ== + html-to-text@9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" @@ -5786,6 +5888,13 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -5843,6 +5952,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -5957,6 +6071,11 @@ jsonpointer@^5.0.1: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +jsonschema@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + jsonwebtoken@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" @@ -6034,6 +6153,11 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + "langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.6.tgz#f4313d202ce168d29bfcf81a551147cd4986779f" @@ -6355,6 +6479,11 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.1" +long@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.1.tgz#9d4222d3213f38a5ec809674834e0f0ab21abe96" + integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== + lop@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.1.tgz#744f1696ef480e68ce1947fe557b09db5af2a738" @@ -6618,6 +6747,14 @@ mocha@^9.2.1: yargs-parser "20.2.4" yargs-unparser "2.0.0" +moderndash@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/moderndash/-/moderndash-4.0.0.tgz#f82a0e935eaf587cdd9d9ab1997ebc120b485de6" + integrity sha512-77kEJCsBo3YzqIrO4ZWHo1h7q8f8ZIRxQ0DE0fEvj3rZWsfTMLeRzctBjkz2zKM1BAIQsOqB79jm3dZ4RDFmqw== + dependencies: + hotscript "1.0.13" + type-fest "4.27.0" + moment-timezone@^0.5.45: version "0.5.45" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" @@ -7448,6 +7585,24 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +protobufjs@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" + integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -7784,6 +7939,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rxjs@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7950,6 +8112,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -8427,6 +8596,11 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.6.2, tslib@^2.6.3: version "2.8.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" @@ -8464,6 +8638,11 @@ type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== +type-fest@4.27.0: + version "4.27.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.27.0.tgz#57329aae32e7b27b942b961e3ef861f0873c4b1b" + integrity sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -8705,6 +8884,11 @@ uuid@8.3.2, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + uuid@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" From 452e975ec7762563b5cfb7124abd53352ca9ca40 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 3 May 2025 10:49:59 +0300 Subject: [PATCH 14/61] chore: --- src/providers/reddit/index.ts | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts index d7300e9..43ae352 100644 --- a/src/providers/reddit/index.ts +++ b/src/providers/reddit/index.ts @@ -7,9 +7,10 @@ import { PassportProfile, } from "../../interfaces"; import { RedditApi } from "./api"; -import CommentsHandler from "./comments"; +import ChatsHandler from "./comments"; import { PassportStatic } from "passport"; import crypto from "crypto"; +import MessagesHandler from "./chat"; export interface RedditProviderConfig extends BaseProviderConfig { apiHash: string; @@ -44,6 +45,7 @@ export default class RedditProvider extends Base { public syncHandlers(): any[] { return [ + ChatsHandler, // CommentsHandler ]; } @@ -110,7 +112,6 @@ export default class RedditProvider extends Base { return result; } - // refreshToken and this.connection is undefined public async getApi( accessToken?: string, refreshToken?: string @@ -127,27 +128,16 @@ export default class RedditProvider extends Base { } if (!refreshToken) { - throw new Error("Unable to load Reddit API"); + throw new Error( + `Unable to load Telegram API, no refresh (bin file) token` + ); } - // api.restoreBinFile(refreshToken); - await api.getClient(true); this.api = api; return api; } - public async close() { - try { - // const api = await this.getApi(); - // const binFile = await api.closeClient(); - - // this.connection!.refreshToken = binFile; - } catch (err: any) { - // Error with binFile (possibly because auth has been disconnected), do nothing - } - } - public async init() { passport.use( new Strategy.RedditStrategy( @@ -175,3 +165,10 @@ export default class RedditProvider extends Base { ); } } + + +// TODO +// Implement sync +// Test handles errors appropriatelly +// Schemas +// README \ No newline at end of file From fbee8d138c0d4b03292a94c5f7139869f52931ed Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 3 May 2025 10:55:48 +0300 Subject: [PATCH 15/61] chore: merge --- src/providers/reddit/REAMDE.md | 55 ++++++++++++++++++++++++++++++ src/providers/reddit/comments.ts | 5 +++ src/providers/reddit/subreddits.ts | 0 3 files changed, 60 insertions(+) create mode 100644 src/providers/reddit/REAMDE.md create mode 100644 src/providers/reddit/comments.ts create mode 100644 src/providers/reddit/subreddits.ts diff --git a/src/providers/reddit/REAMDE.md b/src/providers/reddit/REAMDE.md new file mode 100644 index 0000000..cd824d0 --- /dev/null +++ b/src/providers/reddit/REAMDE.md @@ -0,0 +1,55 @@ +# Notes + +`pdf-parse` is used to convert PDF files to text so their contents can be searched. There is a bug in the library that causes this message to be output to the console when fonts can't be found: `Warning: TT: undefined function: 32` (see https://github.com/mozilla/pdf.js/issues/3768#issuecomment-36468349) + +## Refresh Tokens + +Google only provides a `refreshToken` when a user first connects their account. If the user attempts to reconnect, the second OAuth process will only return an `accessToken`. + +# Known issues + +1. Emails are processed in batches, up until the expiry date, then starts to fetch new again. Need to refactor to use range tracker helper. + +# YouTube Integration Unit Tests + +This repository contains a suite of unit tests designed to validate the integration of a YouTube account with the provider's synchronization handlers. The tests ensure that the YouTube data is correctly fetched and processed. The unit tests cover the following aspects: + +- Fetching and testing YouTube favorites. +- Fetching and testing YouTube following (subscriptions). +- Fetching and testing YouTube posts (uploaded videos). + +## Prerequisites + +Before running the unit tests, ensure that you have the following set up: + +1. **YouTube Account**: A YouTube account with some activity is required. This activity includes uploaded videos, subscriptions, and liked videos. + +2. **YouTube Data**: Make sure your YouTube account has: + - **Favorites**: At least 14 videos you have liked. + - **Following**: At least 14 Channels you have subscribed to. + - **Posts**: At least 14 videos you have uploaded. +3. **Activity**: Make sure you have made activities within the last 24 hours. + +## Running the Tests + +```bash +yarn run test tests/providers/google/youtube-[xxx].tests.ts +``` + +# Google Calendar Notes + +1. Calendar list involves subscribed calendars which are the other users created and default calendars such as Holidays, Birthdays. But only process calendars created by the user. +2. Limit recurring events to 1 month in the future. + + + diff --git a/src/providers/reddit/comments.ts b/src/providers/reddit/comments.ts new file mode 100644 index 0000000..15eab94 --- /dev/null +++ b/src/providers/reddit/comments.ts @@ -0,0 +1,5 @@ +import BaseSyncHandler from "../BaseSyncHandler"; + +export default class CommentsHandler extends BaseSyncHandler { + +} \ No newline at end of file diff --git a/src/providers/reddit/subreddits.ts b/src/providers/reddit/subreddits.ts new file mode 100644 index 0000000..e69de29 From 0462305867291f106cb208e66a1bd37007093659 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 3 May 2025 11:00:39 +0300 Subject: [PATCH 16/61] chore: yarn --- yarn.lock | 5312 ++++++++++++++++++++++++++--------------------------- 1 file changed, 2609 insertions(+), 2703 deletions(-) diff --git a/yarn.lock b/yarn.lock index 347d9c3..3c50ebc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -72,963 +72,556 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-bedrock-agent-runtime@^3.616.0": - version "3.701.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-agent-runtime/-/client-bedrock-agent-runtime-3.701.0.tgz#978de688160c11a64b659586bfd585e03c99cea2" - integrity sha512-OllyQ2AkVX7GSEJIzNVrJxs2/F8Ao5StEtOBJhURgPnFxFC07s8d73ZAkwdWyhJHTAV+oqRo9mfB696bEJw/mA== +"@aws-sdk/client-bedrock-agent-runtime@^3.755.0": + version "3.800.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-agent-runtime/-/client-bedrock-agent-runtime-3.800.0.tgz#64f3e6a75192253ed0c60728917ddcbc14a65206" + integrity sha512-sdpAAHBxnYCItVrM/Bz6phnhx95P5VrDfJsuk/zIDEPNcQzu6iJA2ppz7P/A5bQL0bHfmQbmwXC700rAdBWpHg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.699.0" - "@aws-sdk/client-sts" "3.699.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-node" "3.699.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/eventstream-serde-browser" "^3.0.13" - "@smithy/eventstream-serde-config-resolver" "^3.0.10" - "@smithy/eventstream-serde-node" "^3.0.12" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/middleware-host-header" "3.775.0" + "@aws-sdk/middleware-logger" "3.775.0" + "@aws-sdk/middleware-recursion-detection" "3.775.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/region-config-resolver" "3.775.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@aws-sdk/util-user-agent-browser" "3.775.0" + "@aws-sdk/util-user-agent-node" "3.799.0" + "@smithy/config-resolver" "^4.1.0" + "@smithy/core" "^3.3.0" + "@smithy/eventstream-serde-browser" "^4.0.2" + "@smithy/eventstream-serde-config-resolver" "^4.1.0" + "@smithy/eventstream-serde-node" "^4.0.2" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.9" + "@smithy/util-defaults-mode-node" "^4.0.9" + "@smithy/util-endpoints" "^3.0.2" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/client-bedrock-runtime@^3.602.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.699.0.tgz#da449f5109915db818af3470be025cb8fbe8c022" - integrity sha512-bB4LZaTj/ADxsbvnGzRm4uMSmMOZw2WwYPL5/beCeABmvDutmBxLpxL38TMcT8o3uYyf8z1/aX+O1CLHGkllhQ== +"@aws-sdk/client-bedrock-runtime@^3.693.0", "@aws-sdk/client-bedrock-runtime@^3.755.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.799.0.tgz#33235b8408cbf28f429607ec25fb1ac690b96297" + integrity sha512-tdvRI+JyYhjilngYpmr/mDBgBdqE3qIFkg8Lk3c6jFATUWwuD1etB/MrDL6xJEf7PjjvByiOox9L4aGKKkyKPA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.699.0" - "@aws-sdk/client-sts" "3.699.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-node" "3.699.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/eventstream-serde-browser" "^3.0.13" - "@smithy/eventstream-serde-config-resolver" "^3.0.10" - "@smithy/eventstream-serde-node" "^3.0.12" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-stream" "^3.3.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-bedrock-runtime@^3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.693.0.tgz#ca8aea389d8077cc759f3dc3985de6c251572994" - integrity sha512-QX+T6XL+yXUaozr5gF4uP9kmCmWrzhKrwWywL0yIIjgJdA+T+qZuYRwrVxohleCyq/TNedvG4EhPqWPSYz2MXA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.693.0" - "@aws-sdk/client-sts" "3.693.0" - "@aws-sdk/core" "3.693.0" - "@aws-sdk/credential-provider-node" "3.693.0" - "@aws-sdk/middleware-host-header" "3.693.0" - "@aws-sdk/middleware-logger" "3.693.0" - "@aws-sdk/middleware-recursion-detection" "3.693.0" - "@aws-sdk/middleware-user-agent" "3.693.0" - "@aws-sdk/region-config-resolver" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@aws-sdk/util-endpoints" "3.693.0" - "@aws-sdk/util-user-agent-browser" "3.693.0" - "@aws-sdk/util-user-agent-node" "3.693.0" - "@smithy/config-resolver" "^3.0.11" - "@smithy/core" "^2.5.2" - "@smithy/eventstream-serde-browser" "^3.0.12" - "@smithy/eventstream-serde-config-resolver" "^3.0.9" - "@smithy/eventstream-serde-node" "^3.0.11" - "@smithy/fetch-http-handler" "^4.1.0" - "@smithy/hash-node" "^3.0.9" - "@smithy/invalid-dependency" "^3.0.9" - "@smithy/middleware-content-length" "^3.0.11" - "@smithy/middleware-endpoint" "^3.2.2" - "@smithy/middleware-retry" "^3.0.26" - "@smithy/middleware-serde" "^3.0.9" - "@smithy/middleware-stack" "^3.0.9" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/node-http-handler" "^3.3.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/url-parser" "^3.0.9" - "@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.26" - "@smithy/util-defaults-mode-node" "^3.0.26" - "@smithy/util-endpoints" "^2.1.5" - "@smithy/util-middleware" "^3.0.9" - "@smithy/util-retry" "^3.0.9" - "@smithy/util-stream" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-kendra@^3.352.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kendra/-/client-kendra-3.699.0.tgz#0c484f16a2592a54f8889dd2e3728d8234da80c2" - integrity sha512-kU/CopKvPIyObAoudNYE0as7np2xlbJrAuvf31IrIp0Xklbq6udzMNQCZzAb49k7nyXlH0yKBHlLHCpinfjccA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.699.0" - "@aws-sdk/client-sts" "3.699.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-node" "3.699.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/eventstream-handler-node" "3.775.0" + "@aws-sdk/middleware-eventstream" "3.775.0" + "@aws-sdk/middleware-host-header" "3.775.0" + "@aws-sdk/middleware-logger" "3.775.0" + "@aws-sdk/middleware-recursion-detection" "3.775.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/region-config-resolver" "3.775.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@aws-sdk/util-user-agent-browser" "3.775.0" + "@aws-sdk/util-user-agent-node" "3.799.0" + "@smithy/config-resolver" "^4.1.0" + "@smithy/core" "^3.3.0" + "@smithy/eventstream-serde-browser" "^4.0.2" + "@smithy/eventstream-serde-config-resolver" "^4.1.0" + "@smithy/eventstream-serde-node" "^4.0.2" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.9" + "@smithy/util-defaults-mode-node" "^4.0.9" + "@smithy/util-endpoints" "^3.0.2" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" "@types/uuid" "^9.0.1" tslib "^2.6.2" uuid "^9.0.1" -"@aws-sdk/client-sso-oidc@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz#2fd7f93bd81839f5cd08c5e6e9a578b80572d3c4" - integrity sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg== +"@aws-sdk/client-kendra@^3.750.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kendra/-/client-kendra-3.799.0.tgz#908b763dd6b3db85c8af320b3121765c8826c07e" + integrity sha512-7LGrA8XZpFP5jpsQP8RlLUQBzeYJ86BcX1Ki/HF/YyKKqmTpVyNhwZxSbsA1nUhRQ9HaB+HF+g4cPDswdkLOMg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.693.0" - "@aws-sdk/credential-provider-node" "3.693.0" - "@aws-sdk/middleware-host-header" "3.693.0" - "@aws-sdk/middleware-logger" "3.693.0" - "@aws-sdk/middleware-recursion-detection" "3.693.0" - "@aws-sdk/middleware-user-agent" "3.693.0" - "@aws-sdk/region-config-resolver" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@aws-sdk/util-endpoints" "3.693.0" - "@aws-sdk/util-user-agent-browser" "3.693.0" - "@aws-sdk/util-user-agent-node" "3.693.0" - "@smithy/config-resolver" "^3.0.11" - "@smithy/core" "^2.5.2" - "@smithy/fetch-http-handler" "^4.1.0" - "@smithy/hash-node" "^3.0.9" - "@smithy/invalid-dependency" "^3.0.9" - "@smithy/middleware-content-length" "^3.0.11" - "@smithy/middleware-endpoint" "^3.2.2" - "@smithy/middleware-retry" "^3.0.26" - "@smithy/middleware-serde" "^3.0.9" - "@smithy/middleware-stack" "^3.0.9" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/node-http-handler" "^3.3.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/url-parser" "^3.0.9" - "@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.26" - "@smithy/util-defaults-mode-node" "^3.0.26" - "@smithy/util-endpoints" "^2.1.5" - "@smithy/util-middleware" "^3.0.9" - "@smithy/util-retry" "^3.0.9" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.699.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz#a35665e681abd518b56330bc7dab63041fbdaf83" - integrity sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-node" "3.699.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz#9cd5e07e57013b8c7980512810d775d7b6f67e36" - integrity sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.693.0" - "@aws-sdk/middleware-host-header" "3.693.0" - "@aws-sdk/middleware-logger" "3.693.0" - "@aws-sdk/middleware-recursion-detection" "3.693.0" - "@aws-sdk/middleware-user-agent" "3.693.0" - "@aws-sdk/region-config-resolver" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@aws-sdk/util-endpoints" "3.693.0" - "@aws-sdk/util-user-agent-browser" "3.693.0" - "@aws-sdk/util-user-agent-node" "3.693.0" - "@smithy/config-resolver" "^3.0.11" - "@smithy/core" "^2.5.2" - "@smithy/fetch-http-handler" "^4.1.0" - "@smithy/hash-node" "^3.0.9" - "@smithy/invalid-dependency" "^3.0.9" - "@smithy/middleware-content-length" "^3.0.11" - "@smithy/middleware-endpoint" "^3.2.2" - "@smithy/middleware-retry" "^3.0.26" - "@smithy/middleware-serde" "^3.0.9" - "@smithy/middleware-stack" "^3.0.9" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/node-http-handler" "^3.3.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/url-parser" "^3.0.9" - "@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.26" - "@smithy/util-defaults-mode-node" "^3.0.26" - "@smithy/util-endpoints" "^2.1.5" - "@smithy/util-middleware" "^3.0.9" - "@smithy/util-retry" "^3.0.9" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz#a9251e88cdfc91fb14191f760f68baa835e88f1c" - integrity sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz#9e2c418f4850269635632bee4d1a31057c04bcc5" - integrity sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.693.0" - "@aws-sdk/core" "3.693.0" - "@aws-sdk/credential-provider-node" "3.693.0" - "@aws-sdk/middleware-host-header" "3.693.0" - "@aws-sdk/middleware-logger" "3.693.0" - "@aws-sdk/middleware-recursion-detection" "3.693.0" - "@aws-sdk/middleware-user-agent" "3.693.0" - "@aws-sdk/region-config-resolver" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@aws-sdk/util-endpoints" "3.693.0" - "@aws-sdk/util-user-agent-browser" "3.693.0" - "@aws-sdk/util-user-agent-node" "3.693.0" - "@smithy/config-resolver" "^3.0.11" - "@smithy/core" "^2.5.2" - "@smithy/fetch-http-handler" "^4.1.0" - "@smithy/hash-node" "^3.0.9" - "@smithy/invalid-dependency" "^3.0.9" - "@smithy/middleware-content-length" "^3.0.11" - "@smithy/middleware-endpoint" "^3.2.2" - "@smithy/middleware-retry" "^3.0.26" - "@smithy/middleware-serde" "^3.0.9" - "@smithy/middleware-stack" "^3.0.9" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/node-http-handler" "^3.3.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/url-parser" "^3.0.9" - "@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.26" - "@smithy/util-defaults-mode-node" "^3.0.26" - "@smithy/util-endpoints" "^2.1.5" - "@smithy/util-middleware" "^3.0.9" - "@smithy/util-retry" "^3.0.9" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/middleware-host-header" "3.775.0" + "@aws-sdk/middleware-logger" "3.775.0" + "@aws-sdk/middleware-recursion-detection" "3.775.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/region-config-resolver" "3.775.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@aws-sdk/util-user-agent-browser" "3.775.0" + "@aws-sdk/util-user-agent-node" "3.799.0" + "@smithy/config-resolver" "^4.1.0" + "@smithy/core" "^3.3.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.9" + "@smithy/util-defaults-mode-node" "^4.0.9" + "@smithy/util-endpoints" "^3.0.2" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" + "@types/uuid" "^9.0.1" tslib "^2.6.2" + uuid "^9.0.1" -"@aws-sdk/client-sts@3.699.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz#9419be6bbf3809008128117afea8b9129b5a959d" - integrity sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg== +"@aws-sdk/client-sso@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.799.0.tgz#4e1e0831100a93147e9cfb8b29bcee88344effa0" + integrity sha512-/i/LG7AiWPmPxKCA2jnR2zaf7B3HYSTbxaZI21ElIz9wASlNAsKr8CnLY7qb50kOyXiNfQ834S5Q3Gl8dX9o3Q== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.699.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-node" "3.699.0" - "@aws-sdk/middleware-host-header" "3.696.0" - "@aws-sdk/middleware-logger" "3.696.0" - "@aws-sdk/middleware-recursion-detection" "3.696.0" - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/region-config-resolver" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@aws-sdk/util-user-agent-browser" "3.696.0" - "@aws-sdk/util-user-agent-node" "3.696.0" - "@smithy/config-resolver" "^3.0.12" - "@smithy/core" "^2.5.3" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/hash-node" "^3.0.10" - "@smithy/invalid-dependency" "^3.0.10" - "@smithy/middleware-content-length" "^3.0.12" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-retry" "^3.0.27" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@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.27" - "@smithy/util-defaults-mode-node" "^3.0.27" - "@smithy/util-endpoints" "^2.1.6" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.693.0.tgz#437969dd740895a59863d737bad14646bc2e1725" - integrity sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A== - dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/core" "^2.5.2" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/property-provider" "^3.1.9" - "@smithy/protocol-http" "^4.1.6" - "@smithy/signature-v4" "^4.2.2" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/util-middleware" "^3.0.9" - fast-xml-parser "4.4.1" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/middleware-host-header" "3.775.0" + "@aws-sdk/middleware-logger" "3.775.0" + "@aws-sdk/middleware-recursion-detection" "3.775.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/region-config-resolver" "3.775.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@aws-sdk/util-user-agent-browser" "3.775.0" + "@aws-sdk/util-user-agent-node" "3.799.0" + "@smithy/config-resolver" "^4.1.0" + "@smithy/core" "^3.3.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.9" + "@smithy/util-defaults-mode-node" "^4.0.9" + "@smithy/util-endpoints" "^3.0.2" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/core@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.696.0.tgz#bdf306bdc019f485738d91d8838eec877861dd26" - integrity sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw== - dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/core" "^2.5.3" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/property-provider" "^3.1.9" - "@smithy/protocol-http" "^4.1.7" - "@smithy/signature-v4" "^4.2.2" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/util-middleware" "^3.0.10" +"@aws-sdk/core@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.799.0.tgz#383f903ede137df108dcd5f817074515d2b1242e" + integrity sha512-hkKF3Zpc6+H8GI1rlttYVRh9uEE77cqAzLmLpY3iu7sql8cZgPERRBfaFct8p1SaDyrksLNiboD1vKW58mbsYg== + dependencies: + "@aws-sdk/types" "3.775.0" + "@smithy/core" "^3.3.0" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.693.0.tgz#f97feed9809fe2800216943470015fdaaba47c4f" - integrity sha512-hMUZaRSF7+iBKZfBHNLihFs9zvpM1CB8MBOTnTp5NGCVkRYF3SB2LH+Kcippe0ats4qCyB1eEoyQX99rERp2iQ== - dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/types" "^3.7.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz#afad9e61cd03da404bb03e5bce83c49736b85271" - integrity sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz#5caad0ac47eded1edeb63f907280580ccfaadba3" - integrity sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA== - dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/fetch-http-handler" "^4.1.0" - "@smithy/node-http-handler" "^3.3.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/protocol-http" "^4.1.6" - "@smithy/smithy-client" "^3.4.3" - "@smithy/types" "^3.7.0" - "@smithy/util-stream" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz#535756f9f427fbe851a8c1db7b0e3aaaf7790ba2" - integrity sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/property-provider" "^3.1.9" - "@smithy/protocol-http" "^4.1.7" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/util-stream" "^3.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz#b4557ac1092657660a15c9bd55e17c27f79ec621" - integrity sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q== - dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/credential-provider-env" "3.693.0" - "@aws-sdk/credential-provider-http" "3.693.0" - "@aws-sdk/credential-provider-process" "3.693.0" - "@aws-sdk/credential-provider-sso" "3.693.0" - "@aws-sdk/credential-provider-web-identity" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/credential-provider-imds" "^3.2.6" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.699.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz#7919a454b05c5446d04a0d3270807046a029ee30" - integrity sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/credential-provider-env" "3.696.0" - "@aws-sdk/credential-provider-http" "3.696.0" - "@aws-sdk/credential-provider-process" "3.696.0" - "@aws-sdk/credential-provider-sso" "3.699.0" - "@aws-sdk/credential-provider-web-identity" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/credential-provider-imds" "^3.2.6" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz#c5ceac64a69304d5b4db3fd68473480cafddb4a9" - integrity sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA== - dependencies: - "@aws-sdk/credential-provider-env" "3.693.0" - "@aws-sdk/credential-provider-http" "3.693.0" - "@aws-sdk/credential-provider-ini" "3.693.0" - "@aws-sdk/credential-provider-process" "3.693.0" - "@aws-sdk/credential-provider-sso" "3.693.0" - "@aws-sdk/credential-provider-web-identity" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/credential-provider-imds" "^3.2.6" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.699.0", "@aws-sdk/credential-provider-node@^3.600.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz#6a1e32a49a7fa71d10c85a927267d1782444def1" - integrity sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg== - dependencies: - "@aws-sdk/credential-provider-env" "3.696.0" - "@aws-sdk/credential-provider-http" "3.696.0" - "@aws-sdk/credential-provider-ini" "3.699.0" - "@aws-sdk/credential-provider-process" "3.696.0" - "@aws-sdk/credential-provider-sso" "3.699.0" - "@aws-sdk/credential-provider-web-identity" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/credential-provider-imds" "^3.2.6" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.693.0.tgz#e84e945f1a148f06ff697608d5309e73347e5aa9" - integrity sha512-cvxQkrTWHHjeHrPlj7EWXPnFSq8x7vMx+Zn1oTsMpCY445N9KuzjfJTkmNGwU2GT6rSZI9/0MM02aQvl5bBBTQ== +"@aws-sdk/credential-provider-env@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.799.0.tgz#d933265b54b18ef1232762c318ff0d75bc7785f9" + integrity sha512-vT/SSWtbUIOW/U21qgEySmmO44SFWIA7WeQPX1OrI8WJ5n7OEI23JWLHjLvHTkYmuZK6z1rPcv7HzRgmuGRibA== dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz#45da7b948aa40987b413c7c0d4a8125bf1433651" - integrity sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.1" +"@aws-sdk/credential-provider-http@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.799.0.tgz#9286235bb30c4f22fbeac0ecf2fe5e5f99aaa282" + integrity sha512-2CjBpOWmhaPAExOgHnIB5nOkS5ef+mfRlJ1JC4nsnjAx0nrK4tk0XRE0LYz11P3+ue+a86cU8WTmBo+qjnGxPQ== + dependencies: + "@aws-sdk/core" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz#72767389f533d9d17a14af63daaafcc8368ab43a" - integrity sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ== - dependencies: - "@aws-sdk/client-sso" "3.693.0" - "@aws-sdk/core" "3.693.0" - "@aws-sdk/token-providers" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.0" +"@aws-sdk/credential-provider-ini@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.799.0.tgz#89ed328e40d2bf0c37453c26b1dd74201c61da2c" + integrity sha512-M9ubILFxerqw4QJwk83MnjtZyoA2eNCiea5V+PzZeHlwk2PON/EnawKqy65x9/hMHGoSvvNuby7iMAmPptu7yw== + dependencies: + "@aws-sdk/core" "3.799.0" + "@aws-sdk/credential-provider-env" "3.799.0" + "@aws-sdk/credential-provider-http" "3.799.0" + "@aws-sdk/credential-provider-process" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.799.0" + "@aws-sdk/credential-provider-web-identity" "3.799.0" + "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/credential-provider-imds" "^4.0.2" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.699.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz#515e2ecd407bace3141b8b192505631de415667e" - integrity sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA== - dependencies: - "@aws-sdk/client-sso" "3.696.0" - "@aws-sdk/core" "3.696.0" - "@aws-sdk/token-providers" "3.699.0" - "@aws-sdk/types" "3.696.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.1" +"@aws-sdk/credential-provider-node@3.799.0", "@aws-sdk/credential-provider-node@^3.750.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.799.0.tgz#45e646a24f105782dbaf3c55951dbae32ae73074" + integrity sha512-nd9fSJc0wUlgKUkIr2ldJhcIIrzJFS29AGZoyY22J3xih63nNDv61eTGVMsDZzHlV21XzMlPEljTR7axiimckg== + dependencies: + "@aws-sdk/credential-provider-env" "3.799.0" + "@aws-sdk/credential-provider-http" "3.799.0" + "@aws-sdk/credential-provider-ini" "3.799.0" + "@aws-sdk/credential-provider-process" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.799.0" + "@aws-sdk/credential-provider-web-identity" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/credential-provider-imds" "^4.0.2" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz#b6133b5ef9d3582e36e02e9c66766714ff672a11" - integrity sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA== +"@aws-sdk/credential-provider-process@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.799.0.tgz#34e8b3d7c889bbb87dfe7c171255a8b99a34df25" + integrity sha512-g8jmNs2k98WNHMYcea1YKA+7ao2Ma4w0P42Dz4YpcI155pQHxHx25RwbOG+rsAKuo3bKwkW53HVE/ZTKhcWFgw== dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/types" "^3.7.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz#3f97c00bd3bc7cfd988e098af67ff7c8392ce188" - integrity sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/types" "^3.7.1" +"@aws-sdk/credential-provider-sso@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.799.0.tgz#535dd1d1abe5f2567551514444f18b79993ac92e" + integrity sha512-lQv27QkNU9FJFZqEf5DIEN3uXEN409Iaym9WJzhOouGtxvTIAWiD23OYh1u8PvBdrordJGS2YddfQvhcmq9akw== + dependencies: + "@aws-sdk/client-sso" "3.799.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/token-providers" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz#69322909c0792df1e6be7c7fb5e2b6f76090a55c" - integrity sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug== +"@aws-sdk/credential-provider-web-identity@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.799.0.tgz#ddf6c4e6f692289ba9e5db3ba9c63564742e5533" + integrity sha512-8k1i9ut+BEg0QZ+I6UQMxGNR1T8paLmAOAZXU+nLQR0lcxS6lr8v+dqofgzQPuHLBkWNCr1Av1IKeL3bJjgU7g== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/types" "^3.7.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz#20aae0efeb973ca1a6db1b1014acbcdd06ad472e" - integrity sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg== +"@aws-sdk/eventstream-handler-node@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.775.0.tgz#4f1b8baa29d1c46d5f94908f695d0ccf4363c8f5" + integrity sha512-NAGVlICJW5dTQwfHj0HB4OUtFIVjMrUOacIq8EapJpJJG5rOZFaaG3BbhC1dpbraRmD/+dClnRZOKikK0eatrg== dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" + "@aws-sdk/types" "3.775.0" + "@smithy/eventstream-codec" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz#fc10294e6963f8e5d58ba1ededd891e999f544a9" - integrity sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w== +"@aws-sdk/middleware-eventstream@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.775.0.tgz#a751ccb2d9ab6f345d17ef81848322896d7defd3" + integrity sha512-B5/ZUTBSOhMbSrvrTlnogrwG3SLHRuwTnXAwoRyUGJfH2iblBgVPwyzOEmjpm53iaaGMa7SsBJ+xSNBXJZGuIw== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/types" "^3.7.0" + "@aws-sdk/types" "3.775.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz#79d68b7e5ba181511ade769b11165bfb7527181e" - integrity sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA== +"@aws-sdk/middleware-host-header@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz#1bf8160b8f4f96ba30c19f9baa030a6c9bd5f94d" + integrity sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w== dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/types" "^3.7.1" + "@aws-sdk/types" "3.775.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz#88a8157293775e7116707da26501da4b5e042f51" - integrity sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw== +"@aws-sdk/middleware-logger@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz#df1909d441cd4bade8d6c7d24c41532808db0e81" + integrity sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/protocol-http" "^4.1.6" - "@smithy/types" "^3.7.0" + "@aws-sdk/types" "3.775.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz#aa437d645d74cb785905162266741125c18f182a" - integrity sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug== +"@aws-sdk/middleware-recursion-detection@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz#36a40f467754d7c86424d12ef45c05e96ce3475b" + integrity sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA== dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz#4b55cfab3fc7e671b08e1ea63a98e45a1e13e6a5" - integrity sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw== - dependencies: - "@aws-sdk/core" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@aws-sdk/util-endpoints" "3.693.0" - "@smithy/core" "^2.5.2" - "@smithy/protocol-http" "^4.1.6" - "@smithy/types" "^3.7.0" + "@aws-sdk/types" "3.775.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz#626c89300f6b3af5aefc1cb6d9ac19eebf8bc97d" - integrity sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw== - dependencies: - "@aws-sdk/core" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@aws-sdk/util-endpoints" "3.696.0" - "@smithy/core" "^2.5.3" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" +"@aws-sdk/middleware-user-agent@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.799.0.tgz#e120e6e1341bcba5427cee0385172170e4615186" + integrity sha512-TropQZanbOTxa+p+Nl4fWkzlRhgFwDfW+Wb6TR3jZN7IXHNlPpgGFpdrgvBExhW/RBhqr+94OsR8Ou58lp3hhA== + dependencies: + "@aws-sdk/core" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@smithy/core" "^3.3.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz#9cde5e99f654c788540acfb2a4218d444e8621c2" - integrity sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw== +"@aws-sdk/nested-clients@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.799.0.tgz#a3b223cfa22f809cee28eedea2ce1f30175665f9" + integrity sha512-zILlWh7asrcQG9JYMYgnvEQBfwmWKfED0yWCf3UNAmQcfS9wkCAWCgicNy/y5KvNvEYnHidsU117STtyuUNG5g== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/types" "^3.7.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.9" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz#146c428702c09db75df5234b5d40ce49d147d0cf" - integrity sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ== - dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/types" "^3.7.1" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.10" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz#5ce7d6aa7a3437d4abdc0dca1be47f5158d15c85" - integrity sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA== - dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.699.0": - version "3.699.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz#354990dd52d651c1f7a64c4c0894c868cdc81de2" - integrity sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA== - dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/property-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.10" - "@smithy/types" "^3.7.1" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.799.0" + "@aws-sdk/middleware-host-header" "3.775.0" + "@aws-sdk/middleware-logger" "3.775.0" + "@aws-sdk/middleware-recursion-detection" "3.775.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/region-config-resolver" "3.775.0" + "@aws-sdk/types" "3.775.0" + "@aws-sdk/util-endpoints" "3.787.0" + "@aws-sdk/util-user-agent-browser" "3.775.0" + "@aws-sdk/util-user-agent-node" "3.799.0" + "@smithy/config-resolver" "^4.1.0" + "@smithy/core" "^3.3.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.9" + "@smithy/util-defaults-mode-node" "^4.0.9" + "@smithy/util-endpoints" "^3.0.2" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.2" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/types@3.692.0", "@aws-sdk/types@^3.222.0": - version "3.692.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.692.0.tgz#c8f6c75b6ad659865b72759796d4d92c1b72069b" - integrity sha512-RpNvzD7zMEhiKgmlxGzyXaEcg2khvM7wd5sSHVapOcrde1awQSOMGI4zKBQ+wy5TnDfrm170ROz/ERLYtrjPZA== +"@aws-sdk/region-config-resolver@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz#592b52498e68501fe46480be3dfb185e949d1eab" + integrity sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ== dependencies: - "@smithy/types" "^3.7.0" + "@aws-sdk/types" "3.775.0" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@aws-sdk/types@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.696.0.tgz#559c3df74dc389b6f40ba6ec6daffeab155330cd" - integrity sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw== +"@aws-sdk/token-providers@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.799.0.tgz#7b2cc6aa5b1a1058490b780ff975de29218ef3a0" + integrity sha512-/8iDjnsJs/D8AhGbDAmdF5oSHzE4jsDsM2RIIxmBAKTZXkaaclQBNX9CmAqLKQmO3IUMZsDH2KENHLVAk/N/mw== dependencies: - "@smithy/types" "^3.7.1" + "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz#99f56f83fc25bdc3321f5871d6354abd56768891" - integrity sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg== +"@aws-sdk/types@3.775.0", "@aws-sdk/types@^3.222.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.775.0.tgz#09863a9e68c080947db7c3d226d1c56b8f0f5150" + integrity sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/types" "^3.7.0" - "@smithy/util-endpoints" "^2.1.5" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz#79e18714419a423a64094381b849214499f00577" - integrity sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA== +"@aws-sdk/util-endpoints@3.787.0": + version "3.787.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz#1398f0bd87f19e615ae920c73e16d9d5e5cb76d1" + integrity sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ== dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/types" "^3.7.1" - "@smithy/util-endpoints" "^2.1.6" + "@aws-sdk/types" "3.775.0" + "@smithy/types" "^4.2.0" + "@smithy/util-endpoints" "^3.0.2" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz#1160f6d055cf074ca198eb8ecf89b6311537ad6c" - integrity sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw== + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz#174551bfdd2eb36d3c16e7023fd7e7ee96ad0fa9" + integrity sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz#c6969be97e7cd0190b3b72a82a642b29ff4659c4" - integrity sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw== +"@aws-sdk/util-user-agent-browser@3.775.0": + version "3.775.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz#b69a1a5548ccc6db1acb3ec115967593ece927a1" + integrity sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A== dependencies: - "@aws-sdk/types" "3.692.0" - "@smithy/types" "^3.7.0" + "@aws-sdk/types" "3.775.0" + "@smithy/types" "^4.2.0" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz#2034765c81313d5e50783662332d35ec041755a0" - integrity sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q== +"@aws-sdk/util-user-agent-node@3.799.0": + version "3.799.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.799.0.tgz#8d0794add4efc79830143277f5faa27f16531c7a" + integrity sha512-iXBk38RbIWPF5Nq9O4AnktORAzXovSVqWYClvS1qbE7ILsnTLJbagU9HlU25O2iV5COVh1qZkwuP5NHQ2yTEyw== dependencies: - "@aws-sdk/types" "3.696.0" - "@smithy/types" "^3.7.1" - bowser "^2.11.0" + "@aws-sdk/middleware-user-agent" "3.799.0" + "@aws-sdk/types" "3.775.0" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.693.0": - version "3.693.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz#b26c806faa2001d4fa1d515b146eeff411513dd9" - integrity sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg== +"@babel/runtime@^7.25.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" + integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== + +"@cfworker/json-schema@^4.0.2": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@cfworker/json-schema/-/json-schema-4.1.1.tgz#4a2a3947ee9fa7b7c24be981422831b8674c3be6" + integrity sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og== + +"@codegenie/serverless-express@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@codegenie/serverless-express/-/serverless-express-3.4.1.tgz#4ba2040e4b59ec355079e5792fd4d7e3889a98c2" + integrity sha512-PQ3v/wDflxx168B4TwuxbbKjfmvLkyRBdvHRFS8s48hDS0Wnukm+5Dp+HiLvqwXOU7PP2+FyrK47WX4WL15Rrw== dependencies: - "@aws-sdk/middleware-user-agent" "3.693.0" - "@aws-sdk/types" "3.692.0" - "@smithy/node-config-provider" "^3.1.10" - "@smithy/types" "^3.7.0" - tslib "^2.6.2" + binary-case "^1.0.0" + type-is "^1.6.16" -"@aws-sdk/util-user-agent-node@3.696.0": - version "3.696.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz#3267119e2be02185f3b4e0beb0cc495d392260b4" - integrity sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ== +"@devvit/metrics@0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@devvit/metrics/-/metrics-0.11.13.tgz#ceb1884636044acd10d58ca6882563b3f83a4796" + integrity sha512-u/oOlnslJ8Rcswd6C3+XlAZDp0b6WRoz0Y0chLpSPls4/KNrK0hrSlpjfvQ+Bp3E/qZkSHYv1HcxoQ+wtZkkbQ== dependencies: - "@aws-sdk/middleware-user-agent" "3.696.0" - "@aws-sdk/types" "3.696.0" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" + "@devvit/protos" "0.11.13" -"@devvit/protos@0.11.9": - version "0.11.9" - resolved "https://registry.yarnpkg.com/@devvit/protos/-/protos-0.11.9.tgz#0b9b40655678ffbfeb851d2315e1dc9862f99c73" - integrity sha512-sPMTaAvzgM5+YY5sc006w+majAJZrSuYJPzGWnQZcPf8RT4NWoPOkBQz7NtMBJzj73K/Bs3j0AaKQUJlH1yQtA== +"@devvit/protos@0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@devvit/protos/-/protos-0.11.13.tgz#ec5b55147ca12d8b991f70c5753f153ce954a241" + integrity sha512-cMAyTwx01ZBDf/iLufzLlCgPIqYXNMBc2DKF1ZgGnhkEyiE4jzwEzdFGBBTnpY2sBnBvNNMt33vdDgPz+nck9g== dependencies: protobufjs "7.3.2" rxjs "7.8.1" "@devvit/public-api@^0.11.9": - version "0.11.9" - resolved "https://registry.yarnpkg.com/@devvit/public-api/-/public-api-0.11.9.tgz#55fde42b39ba7634c123ca60070d1369ba4a7a46" - integrity sha512-iGDaSRnqZnKX/4xD4V1Fy5wli23xb26LCTiB84lkA1ZnMhSidjcNpT3xd6J6fTnyqrWERnpadkEPhXNUTPjXcg== + version "0.11.13" + resolved "https://registry.yarnpkg.com/@devvit/public-api/-/public-api-0.11.13.tgz#67b611cede82c7c3195238721eb33ba5ca0a176b" + integrity sha512-GLCtDqGvgUA1XyuLXLR8rNgq9UU2e7U8OBZMS2+CdwjfcoZm8M0XoDU29aXqLIxsEx0r2a7ushrlAkZMTg4B7A== dependencies: - "@devvit/protos" "0.11.9" - "@devvit/shared-types" "0.11.9" + "@devvit/metrics" "0.11.13" + "@devvit/protos" "0.11.13" + "@devvit/shared-types" "0.11.13" base64-js "1.5.1" clone-deep "4.0.1" moderndash "4.0.0" -"@devvit/shared-types@0.11.9": - version "0.11.9" - resolved "https://registry.yarnpkg.com/@devvit/shared-types/-/shared-types-0.11.9.tgz#1fadb113077df4a54f2e3ad3b9e405a86085556a" - integrity sha512-6LilsUcwd6CllUyyqv7IJofc5HTf9xzVqSS6+1yqoT1pjCeJUcsGUp/UXt937N+i7Gqb42dBlCI+osI0YWWCXg== +"@devvit/shared-types@0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@devvit/shared-types/-/shared-types-0.11.13.tgz#b66ce0b57397a4a74a5e3e44ca012d7ec4d1fabc" + integrity sha512-DoXFJoqS2QBetH8mvR1VimN0UO1+E1SDkM+FbY4C/K10vjCVkE8nykDdxts9mLAqycbwS/rxDP2IhtdfjgOJkQ== dependencies: - "@devvit/protos" "0.11.9" + "@devvit/protos" "0.11.13" jsonschema "1.4.1" uuid "9.0.0" -"@discordjs/builders@^1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.9.0.tgz#71fa6de91132bd1deaff2a9daea7aa5d5c9f124a" - integrity sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg== +"@discordjs/builders@^1.11.2": + version "1.11.2" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.11.2.tgz#b96185d05d22f9d6bde89aada2decf45a5c982ce" + integrity sha512-F1WTABdd8/R9D1icJzajC4IuLyyS8f3rTOz66JsSI3pKvpCAtsMBweu8cyNYsIyvcrKAVn9EPK+Psoymq+XC0A== dependencies: - "@discordjs/formatters" "^0.5.0" + "@discordjs/formatters" "^0.6.1" "@discordjs/util" "^1.1.1" "@sapphire/shapeshift" "^4.0.0" - discord-api-types "0.37.97" + discord-api-types "^0.38.1" fast-deep-equal "^3.1.3" ts-mixer "^6.0.4" tslib "^2.6.3" @@ -1043,49 +636,49 @@ resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.1.1.tgz#901917bc538c12b9c3613036d317847baee08cae" integrity sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg== -"@discordjs/formatters@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.5.0.tgz#2d284c4271bc41984339936df1d0164e470f3b7a" - integrity sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g== +"@discordjs/formatters@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.6.1.tgz#211bf3eb060d8fe7fa1f020b8be3c4adad00555a" + integrity sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg== dependencies: - discord-api-types "0.37.97" + discord-api-types "^0.38.1" -"@discordjs/rest@^2.3.0", "@discordjs/rest@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.4.0.tgz#63bfc816af58af844914e3589d7eae609cd199b5" - integrity sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw== +"@discordjs/rest@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.5.0.tgz#fc4c5e23bee31f4df98e6e148e9d22f8eb031924" + integrity sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ== dependencies: "@discordjs/collection" "^2.1.1" "@discordjs/util" "^1.1.1" "@sapphire/async-queue" "^1.5.3" "@sapphire/snowflake" "^3.5.3" "@vladfrangu/async_event_emitter" "^2.4.6" - discord-api-types "0.37.97" + discord-api-types "^0.38.1" magic-bytes.js "^1.10.0" tslib "^2.6.3" - undici "6.19.8" + undici "6.21.1" "@discordjs/util@^1.1.0", "@discordjs/util@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.1.1.tgz#bafcde0faa116c834da1258d78ec237080bbab29" integrity sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g== -"@discordjs/ws@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.1.1.tgz#bffbfd46838258ab09054ed98ddef1a36f6507a3" - integrity sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA== +"@discordjs/ws@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.2.2.tgz#bab8d16ea2fe9eb205351bd8896e03307bf42fdb" + integrity sha512-dyfq7yn0wO0IYeYOs3z79I6/HumhmKISzFL0Z+007zQJMtAFGtt3AEoq1nuLXtcunUE5YYYQqgKvybXukAK8/w== dependencies: "@discordjs/collection" "^2.1.0" - "@discordjs/rest" "^2.3.0" + "@discordjs/rest" "^2.5.0" "@discordjs/util" "^1.1.0" "@sapphire/async-queue" "^1.5.2" "@types/ws" "^8.5.10" "@vladfrangu/async_event_emitter" "^2.2.4" - discord-api-types "0.37.83" + discord-api-types "^0.38.1" tslib "^2.6.2" - ws "^8.16.0" + ws "^8.17.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -1100,7 +693,22 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/abstract-provider@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -1113,7 +721,20 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + +"@ethersproject/abstract-signer@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -1124,7 +745,18 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/address@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -1135,14 +767,32 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + +"@ethersproject/base64@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.7.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== + dependencies: + "@ethersproject/bytes" "^5.8.0" + +"@ethersproject/basex@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -1150,7 +800,15 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/bignumber@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -1159,21 +817,44 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" + integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/constants@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": +"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + +"@ethersproject/contracts@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -1189,7 +870,23 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/contracts@5.8.0", "@ethersproject/contracts@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + +"@ethersproject/hash@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -1204,7 +901,22 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/hdnode@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -1222,7 +934,25 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/json-wallets@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -1241,7 +971,26 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -1249,19 +998,39 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== + dependencies: + "@ethersproject/bytes" "^5.8.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== + +"@ethersproject/networks@5.7.1": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.7.0", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/pbkdf2@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -1269,14 +1038,29 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + +"@ethersproject/properties@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": +"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/providers@5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -1302,7 +1086,33 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/providers@5.8.0", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + bech32 "1.1.4" + ws "8.18.0" + +"@ethersproject/random@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -1310,7 +1120,15 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/random@5.8.0", "@ethersproject/random@^5.7.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/rlp@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -1318,7 +1136,15 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/sha2@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -1327,7 +1153,16 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -1339,6 +1174,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + bn.js "^5.2.1" + elliptic "6.6.1" + hash.js "1.1.7" + "@ethersproject/solidity@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" @@ -1351,7 +1198,19 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/solidity@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/strings@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -1360,7 +1219,16 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.7.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/transactions@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -1375,7 +1243,22 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0", "@ethersproject/units@^5.7.0": +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + +"@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== @@ -1384,7 +1267,16 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": +"@ethersproject/units@5.8.0", "@ethersproject/units@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/wallet@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -1405,7 +1297,28 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/wallet@5.8.0", "@ethersproject/wallet@^5.7.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.7.1": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -1416,7 +1329,18 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== + dependencies: + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/wordlists@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -1427,49 +1351,73 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jsdevtools/ono@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== "@langchain/aws@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@langchain/aws/-/aws-0.1.2.tgz#607ab6d2f87c07a64176e6341ae2e9f857027b95" - integrity sha512-1cQvv8XSbaZXceAbYexSm/8WLqfEJ4VF6qbf/XLwkpUKMFGqpSBA00+Bn5p8K/Ms+PyMguZrxVNqd6daqxhDBQ== - dependencies: - "@aws-sdk/client-bedrock-agent-runtime" "^3.616.0" - "@aws-sdk/client-bedrock-runtime" "^3.602.0" - "@aws-sdk/client-kendra" "^3.352.0" - "@aws-sdk/credential-provider-node" "^3.600.0" + version "0.1.9" + resolved "https://registry.yarnpkg.com/@langchain/aws/-/aws-0.1.9.tgz#ba8828d8d4dc3e0154060a09f4d1588a36f95496" + integrity sha512-bF6LJmF16o6wTV6PTFjCnkSMr2GT228k14aBNuw1OpbTOKyr0UdDrD+0k5CBcTFg/YOrzUv0ybJp96fcJMpHIw== + dependencies: + "@aws-sdk/client-bedrock-agent-runtime" "^3.755.0" + "@aws-sdk/client-bedrock-runtime" "^3.755.0" + "@aws-sdk/client-kendra" "^3.750.0" + "@aws-sdk/credential-provider-node" "^3.750.0" zod "^3.23.8" zod-to-json-schema "^3.22.5" "@langchain/community@^0.3.16": - version "0.3.16" - resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.16.tgz#8a5fb28916865d4366bf5c91ccf7a67645a640c8" - integrity sha512-oMYzL2O5Laxj6+onKf8HRewlxHoETXvz3n64Y5XqWKsjPtk6sg3g6NJJDNyp7D0M57oghHEhyWeQ0eVZas3Epw== + version "0.3.42" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.42.tgz#2f5a6a09aec239aede0d1f3c9ee0bf27bda98585" + integrity sha512-dTRoAy4XPalCB4Of5N4uQ8/KSGCddv48OGek8CULtdbBSkQ9s7iWtcb8hQEajkCwMfILVVzw1pU8IzE17oNHPA== dependencies: - "@langchain/openai" ">=0.2.0 <0.4.0" + "@langchain/openai" ">=0.2.0 <0.6.0" binary-extensions "^2.2.0" expr-eval "^2.0.2" flat "^5.0.2" js-yaml "^4.1.0" langchain ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0" - langsmith "^0.2.0" + langsmith "^0.3.16" uuid "^10.0.0" zod "^3.22.3" zod-to-json-schema "^3.22.5" "@langchain/core@^0.3.19": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.19.tgz#8e2038dbb7cb70264d892cf9c3b506125ee68d77" - integrity sha512-pJVOAHShefu1SRO8uhzUs0Pexah/Ib66WETLMScIC2w9vXlpwQy3DzXJPJ5X7ixry9N666jYO5cHtM2Z1DnQIQ== + version "0.3.51" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.51.tgz#3767fce686bf5cda26b9a08aa02d19618ae2b218" + integrity sha512-2nE30uuomSQrIQKB3BLgQtECZLWj5gwPEzQ+I6Ot6s9DKd133nXp3eZeggkAJ/uuc4WVROYVNJnmxepeAWo02Q== dependencies: + "@cfworker/json-schema" "^4.0.2" ansi-styles "^5.0.0" camelcase "6" decamelize "1.2.0" js-tiktoken "^1.0.12" - langsmith "^0.2.0" + langsmith "^0.3.16" mustache "^4.2.0" p-queue "^6.6.2" p-retry "4" @@ -1477,13 +1425,13 @@ zod "^3.22.4" zod-to-json-schema "^3.22.3" -"@langchain/openai@>=0.1.0 <0.4.0", "@langchain/openai@>=0.2.0 <0.4.0": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.3.14.tgz#c2f50fe963769851287f0171385232a344a5484a" - integrity sha512-lNWjUo1tbvsss45IF7UQtMu1NJ6oUKvhgPYWXnX9f/d6OmuLu7D99HQ3Y88vLcUo9XjjOy417olYHignMduMjA== +"@langchain/openai@>=0.1.0 <0.6.0", "@langchain/openai@>=0.2.0 <0.6.0": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.5.10.tgz#f86797a030287fe597257c2586f503808787b7e8" + integrity sha512-hBQIWjcVxGS7tgVvgBBmrZ5jSaJ8nu9g6V64/Tx6KGjkW7VdGmUvqCO+koiQCOZVL7PBJkHWAvDsbghPYXiZEA== dependencies: js-tiktoken "^1.0.12" - openai "^4.71.0" + openai "^4.96.0" zod "^3.22.4" zod-to-json-schema "^3.22.3" @@ -1495,16 +1443,16 @@ js-tiktoken "^1.0.12" "@mongodb-js/saslprep@^1.1.9": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz#e974bab8eca9faa88677d4ea4da8d09a52069004" - integrity sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.2.2.tgz#09506f29cc2a99d9d7b951caa7fffc87e522a6d3" + integrity sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA== dependencies: sparse-bitfield "^3.0.3" "@nillion/nilql@^0.0.0-alpha.9": - version "0.0.0-alpha.9" - resolved "https://registry.yarnpkg.com/@nillion/nilql/-/nilql-0.0.0-alpha.9.tgz#224e58e996e3d1f3658fea035b779e53f5c9fb93" - integrity sha512-k2m0l0p32lZQ3gkDMsdm155mQG4H7KLxnCfgEPVLtMyp9WPypSL0TaP77T2JhVvINvqM5UggiEiqmUv3s7JTlQ== + version "0.0.0-alpha.13" + resolved "https://registry.yarnpkg.com/@nillion/nilql/-/nilql-0.0.0-alpha.13.tgz#8e4f64c3e9c50addb01431e9617e5dc641353096" + integrity sha512-tJW4mPpMFoB/NTItYsV5jfrbFCwEW+9zk7b5Xvblhn+JwBYW+viz7v42Ncld/+yMDAr4c6NUBDZsnauK6zbVUg== dependencies: bigint-crypto-utils "^3.3.0" libsodium-wrappers-sumo "^0.7.15" @@ -1517,15 +1465,27 @@ dependencies: "@noble/hashes" "1.3.2" +"@noble/curves@^1.4.2": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" + integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@1.8.0", "@noble/hashes@^1.4.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@node-oauth/express-oauth-server@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@node-oauth/express-oauth-server/-/express-oauth-server-4.1.1.tgz#99a2cda2328c081af604cb9de961d03703fec433" - integrity sha512-Ps6UFV7XAfggYvRpveoT3t3h4dluy9wViEgkSU1kBcTOhllpBNIKrlsHTC+hBd1PT/+SC7vzpIXd2uFrmwF8Vg== + version "4.1.3" + resolved "https://registry.yarnpkg.com/@node-oauth/express-oauth-server/-/express-oauth-server-4.1.3.tgz#298ef8c2e7611a4deba98cfe7cc9f797ab53f754" + integrity sha512-3VS/zcAPWsMfevAU5MKR6XanzFXxVtkxVfGmMc5VaznAncAf4xYwcHA8tXfBZQuzWicbUn+JdmMbcy8YRInUMQ== dependencies: "@node-oauth/oauth2-server" "^5.2.0" @@ -1544,9 +1504,9 @@ type-is "1.6.18" "@notionhq/client@^2.2.15": - version "2.2.15" - resolved "https://registry.yarnpkg.com/@notionhq/client/-/client-2.2.15.tgz#739fc8edb1357a2e2e35d026571fafe17c089606" - integrity sha512-XhdSY/4B1D34tSco/GION+23GMjaS9S2zszcqYkMHo8RcWInymF6L1x+Gk7EmHdrSxNFva2WM8orhC4BwQCwgw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@notionhq/client/-/client-2.3.0.tgz#4feecb012ebcd4116df14a9e2c77afed7eeb73cd" + integrity sha512-l7WqTCpQqC+HibkB9chghONQTYcxNQT0/rOJemBfmuKQRTu2vuV8B3yA395iKaUdDo7HI+0KvQaz9687Xskzkw== dependencies: "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" @@ -1574,6 +1534,11 @@ resolved "https://registry.yarnpkg.com/@oauth-everything/profile/-/profile-1.0.0.tgz#0b5e78749415519fa312dc83347a677903f456ba" integrity sha512-OmCuBPhjaLHh9MST9P5jRuVBZaP0z7hBk8nH4Yt7Id5kNM1AXGd5uud6CP7W2zuhKl2nk0KsYmeMT7SkzN6VWg== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -1628,9 +1593,9 @@ integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@sapphire/async-queue@^1.5.2", "@sapphire/async-queue@^1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.3.tgz#03cd2a2f3665068f314736bdc56eee2025352422" - integrity sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w== + version "1.5.5" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.5.tgz#2b18d402bb920b65b13ad4ed8dfb6c386300dd84" + integrity sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg== "@sapphire/shapeshift@^4.0.0": version "4.0.0" @@ -1640,15 +1605,15 @@ fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@3.5.3", "@sapphire/snowflake@^3.5.3": +"@sapphire/snowflake@3.5.3": version "3.5.3" resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a" integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ== -"@sapphire/snowflake@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.4.2.tgz#365af8e7b57ada924ec8e85383b921280f81d128" - integrity sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g== +"@sapphire/snowflake@^3.4.2", "@sapphire/snowflake@^3.5.3": + version "3.5.5" + resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.5.tgz#33a60ab4231e3cab29e8a0077f342125f2c8d1bd" + integrity sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ== "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" @@ -1658,141 +1623,122 @@ domhandler "^5.0.3" selderee "^0.11.0" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@smithy/abort-controller@^3.1.8": - version "3.1.8" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.8.tgz#ce0c10ddb2b39107d70b06bbb8e4f6e368bc551d" - integrity sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ== +"@smithy/abort-controller@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.2.tgz#36a23e8cc65fc03cacb6afa35dfbfd319c560c6b" + integrity sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/config-resolver@^3.0.11", "@smithy/config-resolver@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.12.tgz#f355f95fcb5ee932a90871a488a4f2128e8ad3ac" - integrity sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ== +"@smithy/config-resolver@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.1.0.tgz#de1043cbd75f05d99798b0fbcfdaf4b89b0f2f41" + integrity sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A== dependencies: - "@smithy/node-config-provider" "^3.1.11" - "@smithy/types" "^3.7.1" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.10" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@smithy/core@^2.5.2", "@smithy/core@^2.5.3": - version "2.5.3" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.3.tgz#1d5723f676b0d6ec08c515272f0ac03aa59fac72" - integrity sha512-96uW8maifUSmehaeW7uydWn7wBc98NEeNI3zN8vqakGpyCQgzyJaA64Z4FCOUmAdCJkhppd/7SZ798Fo4Xx37g== - dependencies: - "@smithy/middleware-serde" "^3.0.10" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-stream" "^3.3.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/core@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.4.tgz#b9eb9c3a8f47d550dcdea19cc95434e66e5556cf" - integrity sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw== - dependencies: - "@smithy/middleware-serde" "^3.0.10" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-stream" "^3.3.1" - "@smithy/util-utf8" "^3.0.0" +"@smithy/core@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.0.tgz#a6b141733fa530cb2f9b49a8e70ae98169c92cf0" + integrity sha512-r6gvs5OfRq/w+9unPm7B3po4rmWaGh0CIL/OwHntGGux7+RhOOZLGuurbeMgWV6W55ZuyMTypJLeH0vn/ZRaWQ== + dependencies: + "@smithy/middleware-serde" "^4.0.3" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/credential-provider-imds@^3.2.6", "@smithy/credential-provider-imds@^3.2.7": - version "3.2.7" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz#6eedf87ba0238723ec46d8ce0f18e276685a702d" - integrity sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ== +"@smithy/credential-provider-imds@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz#1ec34a04842fa69996b151a695b027f0486c69a8" + integrity sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w== dependencies: - "@smithy/node-config-provider" "^3.1.11" - "@smithy/property-provider" "^3.1.10" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" tslib "^2.6.2" -"@smithy/eventstream-codec@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.9.tgz#4271354e75e57d30771fca307da403896c657430" - integrity sha512-F574nX0hhlNOjBnP+noLtsPFqXnWh2L0+nZKCwcu7P7J8k+k+rdIDs+RMnrMwrzhUE4mwMgyN0cYnEn0G8yrnQ== +"@smithy/eventstream-codec@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz#d4d77699308a3dfeea1b2e87683845f5d8440bdb" + integrity sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.7.1" - "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/types" "^4.2.0" + "@smithy/util-hex-encoding" "^4.0.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^3.0.12", "@smithy/eventstream-serde-browser@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.13.tgz#191dcf9181e7ab0914ec43d51518d471b9d466ae" - integrity sha512-Nee9m+97o9Qj6/XeLz2g2vANS2SZgAxV4rDBMKGHvFJHU/xz88x2RwCkwsvEwYjSX4BV1NG1JXmxEaDUzZTAtw== +"@smithy/eventstream-serde-browser@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz#876f05491373ab217801c47b802601b8c09388d4" + integrity sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.12" - "@smithy/types" "^3.7.1" + "@smithy/eventstream-serde-universal" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^3.0.10", "@smithy/eventstream-serde-config-resolver@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.10.tgz#5c0b2ae0bb8e11cfa77851098e46f7350047ec8d" - integrity sha512-K1M0x7P7qbBUKB0UWIL5KOcyi6zqV5mPJoL0/o01HPJr0CSq3A9FYuJC6e11EX6hR8QTIR++DBiGrYveOu6trw== +"@smithy/eventstream-serde-config-resolver@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz#4ab7a2575e9041a2df2179bce64619a4e632e4d3" + integrity sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^3.0.11", "@smithy/eventstream-serde-node@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.12.tgz#7312383e821b5807abf2fe12316c2a8967d022f0" - integrity sha512-kiZymxXvZ4tnuYsPSMUHe+MMfc4FTeFWJIc0Q5wygJoUQM4rVHNghvd48y7ppuulNMbuYt95ah71pYc2+o4JOA== +"@smithy/eventstream-serde-node@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz#390306ff79edb0c607705f639d8c5a76caad4bf7" + integrity sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.12" - "@smithy/types" "^3.7.1" + "@smithy/eventstream-serde-universal" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.12.tgz#803d7beb29a3de4a64e91af97331a4654741c35f" - integrity sha512-1i8ifhLJrOZ+pEifTlF0EfZzMLUGQggYQ6WmZ4d5g77zEKf7oZ0kvh1yKWHPjofvOwqrkwRDVuxuYC8wVd662A== +"@smithy/eventstream-serde-universal@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz#9f45472fc4fe5fe5f7c22c33d90ec6fc0230d0ae" + integrity sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng== dependencies: - "@smithy/eventstream-codec" "^3.1.9" - "@smithy/types" "^3.7.1" + "@smithy/eventstream-codec" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/fetch-http-handler@^4.1.0", "@smithy/fetch-http-handler@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz#cead80762af4cdea11e7eeb627ea1c4835265dfa" - integrity sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA== +"@smithy/fetch-http-handler@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz#9d3cacf044aa9573ab933f445ab95cddb284813d" + integrity sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ== dependencies: - "@smithy/protocol-http" "^4.1.7" - "@smithy/querystring-builder" "^3.0.10" - "@smithy/types" "^3.7.1" - "@smithy/util-base64" "^3.0.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/querystring-builder" "^4.0.2" + "@smithy/types" "^4.2.0" + "@smithy/util-base64" "^4.0.0" tslib "^2.6.2" -"@smithy/hash-node@^3.0.10", "@smithy/hash-node@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.10.tgz#93c857b4bff3a48884886440fd9772924887e592" - integrity sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g== +"@smithy/hash-node@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.2.tgz#a34fe5a33b067d754ca63302b9791778f003e437" + integrity sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg== dependencies: - "@smithy/types" "^3.7.1" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/types" "^4.2.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^3.0.10", "@smithy/invalid-dependency@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz#8616dee555916c24dec3e33b1e046c525efbfee3" - integrity sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA== +"@smithy/invalid-dependency@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz#e9b1c5e407d795f10a03afba90e37bccdc3e38f7" + integrity sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -1802,241 +1748,199 @@ dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== dependencies: tslib "^2.6.2" -"@smithy/middleware-content-length@^3.0.11", "@smithy/middleware-content-length@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz#3b248ed1e8f1e0ae67171abb8eae9da7ab7ca613" - integrity sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ== +"@smithy/middleware-content-length@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz#ff78658e8047ad7038f58478cf8713ee2f6ef647" + integrity sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A== dependencies: - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^3.2.2", "@smithy/middleware-endpoint@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.3.tgz#7dd3df0052fc55891522631a7751e613b6efd68a" - integrity sha512-Hdl9296i/EMptaX7agrSzJZDiz5Y8XPUeBbctTmMtnCguGpqfU3jVsTUan0VLaOhsnquqWLL8Bl5HrlbVGT1og== - dependencies: - "@smithy/core" "^2.5.3" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/shared-ini-file-loader" "^3.1.11" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@smithy/util-middleware" "^3.0.10" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz#aaded88e3848e56edc99797d71069817fe20cb44" - integrity sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg== - dependencies: - "@smithy/core" "^2.5.4" - "@smithy/middleware-serde" "^3.0.10" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/shared-ini-file-loader" "^3.1.11" - "@smithy/types" "^3.7.1" - "@smithy/url-parser" "^3.0.10" - "@smithy/util-middleware" "^3.0.10" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.26": - version "3.0.27" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.27.tgz#2e4dda420178835cd2d416479505d313b601ba21" - integrity sha512-H3J/PjJpLL7Tt+fxDKiOD25sMc94YetlQhCnYeNmina2LZscAdu0ZEZPas/kwePHABaEtqp7hqa5S4UJgMs1Tg== - dependencies: - "@smithy/node-config-provider" "^3.1.11" - "@smithy/protocol-http" "^4.1.7" - "@smithy/service-error-classification" "^3.0.10" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" +"@smithy/middleware-endpoint@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.1.tgz#d210cac102a645ea35541c17fda52c73f0b56304" + integrity sha512-z5RmcHxjvScL+LwEDU2mTNCOhgUs4lu5PGdF1K36IPRmUHhNFxNxgenSB7smyDiYD4vdKQ7CAZtG5cUErqib9w== + dependencies: + "@smithy/core" "^3.3.0" + "@smithy/middleware-serde" "^4.0.3" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/middleware-retry@^3.0.27": - version "3.0.28" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.28.tgz#92ef5a446bf232fc170c92a460e8af827b0e43bb" - integrity sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g== - dependencies: - "@smithy/node-config-provider" "^3.1.11" - "@smithy/protocol-http" "^4.1.7" - "@smithy/service-error-classification" "^3.0.10" - "@smithy/smithy-client" "^3.4.5" - "@smithy/types" "^3.7.1" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-retry" "^3.0.10" +"@smithy/middleware-retry@^4.1.1": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.2.tgz#ea421e56d596d9e7af9fbbfd1a39acdbaf9ab8e9" + integrity sha512-qN/Mmxm8JWtFAjozJ8VSTM83KOX4cIks8UjDqqNkKIegzPrE5ZKPNCQ/DqUSIF90pue5a/NycNXnBod2NwvZZQ== + dependencies: + "@smithy/node-config-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/service-error-classification" "^4.0.3" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" tslib "^2.6.2" uuid "^9.0.1" -"@smithy/middleware-serde@^3.0.10", "@smithy/middleware-serde@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz#5f6c0b57b10089a21d355bd95e9b7d40378454d7" - integrity sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA== +"@smithy/middleware-serde@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz#b90ef1065ad9dc0b54c561fae73c8a5792d145e3" + integrity sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-stack@^3.0.10", "@smithy/middleware-stack@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz#73e2fde5d151440844161773a17ee13375502baf" - integrity sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w== +"@smithy/middleware-stack@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz#ca7bc3eedc7c1349e2cf94e0dc92a68d681bef18" + integrity sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/node-config-provider@^3.1.10", "@smithy/node-config-provider@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz#95feba85a5cb3de3fe9adfff1060b35fd556d023" - integrity sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw== +"@smithy/node-config-provider@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz#017ba626828bced0fa588e795246e5468632f3ef" + integrity sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw== dependencies: - "@smithy/property-provider" "^3.1.10" - "@smithy/shared-ini-file-loader" "^3.1.11" - "@smithy/types" "^3.7.1" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/node-http-handler@^3.3.0", "@smithy/node-http-handler@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz#788fc1c22c21a0cf982f4025ccf9f64217f3164f" - integrity sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg== +"@smithy/node-http-handler@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz#aa583d201c1ee968170b65a07f06d633c214b7a1" + integrity sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g== dependencies: - "@smithy/abort-controller" "^3.1.8" - "@smithy/protocol-http" "^4.1.7" - "@smithy/querystring-builder" "^3.0.10" - "@smithy/types" "^3.7.1" + "@smithy/abort-controller" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/querystring-builder" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/property-provider@^3.1.10", "@smithy/property-provider@^3.1.9": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.10.tgz#ae00447c1060c194c3e1b9475f7c8548a70f8486" - integrity sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ== +"@smithy/property-provider@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.2.tgz#4572c10415c9d4215f3df1530ba61b0319b17b55" + integrity sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/protocol-http@^4.1.6", "@smithy/protocol-http@^4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.7.tgz#5c67e62beb5deacdb94f2127f9a344bdf1b2ed6e" - integrity sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg== +"@smithy/protocol-http@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.1.0.tgz#ad34e336a95944785185234bebe2ec8dbe266936" + integrity sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/querystring-builder@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz#db8773af85ee3977c82b8e35a5cdd178c621306d" - integrity sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ== +"@smithy/querystring-builder@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz#834cea95bf413ab417bf9c166d60fd80d2cb3016" + integrity sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q== dependencies: - "@smithy/types" "^3.7.1" - "@smithy/util-uri-escape" "^3.0.0" + "@smithy/types" "^4.2.0" + "@smithy/util-uri-escape" "^4.0.0" tslib "^2.6.2" -"@smithy/querystring-parser@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz#62db744a1ed2cf90f4c08d2c73d365e033b4a11c" - integrity sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ== +"@smithy/querystring-parser@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz#d80c5afb740e12ad8b4d4f58415e402c69712479" + integrity sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/service-error-classification@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz#941c549daf0e9abb84d3def1d9e1e3f0f74f5ba6" - integrity sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ== +"@smithy/service-error-classification@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz#df43e3ec00a9f2d15415185561d98cd602c8bc67" + integrity sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" -"@smithy/shared-ini-file-loader@^3.1.10", "@smithy/shared-ini-file-loader@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz#0b4f98c4a66480956fbbefc4627c5dc09d891aea" - integrity sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg== +"@smithy/shared-ini-file-loader@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz#15043f0516fe09ff4b22982bc5f644dc701ebae5" + integrity sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/signature-v4@^4.2.2": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.3.tgz#abbca5e5fe9158422b3125b2956791a325a27f22" - integrity sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.10" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.4.3", "@smithy/smithy-client@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.4.4.tgz#460870dc97d945fa2f390890359cf09d01131e0f" - integrity sha512-dPGoJuSZqvirBq+yROapBcHHvFjChoAQT8YPWJ820aPHHiowBlB3RL1Q4kPT1hx0qKgJuf+HhyzKi5Gbof4fNA== - dependencies: - "@smithy/core" "^2.5.3" - "@smithy/middleware-endpoint" "^3.2.3" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - "@smithy/util-stream" "^3.3.1" +"@smithy/signature-v4@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.1.0.tgz#2c56e5b278482b04383d84ea2c07b7f0a8eb8f63" + integrity sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^3.4.5": - version "3.4.5" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.4.5.tgz#b90fe15d80e2dca5aa9cf3bd24bd73359ad1ef61" - integrity sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw== - dependencies: - "@smithy/core" "^2.5.4" - "@smithy/middleware-endpoint" "^3.2.4" - "@smithy/middleware-stack" "^3.0.10" - "@smithy/protocol-http" "^4.1.7" - "@smithy/types" "^3.7.1" - "@smithy/util-stream" "^3.3.1" +"@smithy/smithy-client@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.1.tgz#21055bc038824de93aee778d040cdf9864e6114d" + integrity sha512-fbniZef60QdsBc4ZY0iyI8xbFHIiC/QRtPi66iE4ufjiE/aaz7AfUXzcWMkpO8r+QhLeNRIfmPchIG+3/QDZ6g== + dependencies: + "@smithy/core" "^3.3.0" + "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" -"@smithy/types@^3.7.0", "@smithy/types@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.1.tgz#4af54c4e28351e9101996785a33f2fdbf93debe7" - integrity sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA== +"@smithy/types@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.2.0.tgz#e7998984cc54b1acbc32e6d4cf982c712e3d26b6" + integrity sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^3.0.10", "@smithy/url-parser@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.10.tgz#f389985a79766cff4a99af14979f01a17ce318da" - integrity sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ== +"@smithy/url-parser@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.2.tgz#a316f7d8593ffab796348bc5df96237833880713" + integrity sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ== dependencies: - "@smithy/querystring-parser" "^3.0.10" - "@smithy/types" "^3.7.1" + "@smithy/querystring-parser" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== dependencies: tslib "^2.6.2" @@ -2048,120 +1952,96 @@ "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: + "@smithy/is-array-buffer" "^4.0.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.26": - version "3.0.27" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.27.tgz#d5df39faee8ad4bb5a6920b208469caa9dda2ccb" - integrity sha512-GV8NvPy1vAGp7u5iD/xNKUxCorE4nQzlyl057qRac+KwpH5zq8wVq6rE3lPPeuFLyQXofPN6JwxL1N9ojGapiQ== +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== dependencies: - "@smithy/property-provider" "^3.1.10" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.27": - version "3.0.28" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.28.tgz#c443b9ae2784b5621def0541a98fc9704c846bfc" - integrity sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw== +"@smithy/util-defaults-mode-browser@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.9.tgz#b70915229126eee4c1df18cd8f1e8edabade9c41" + integrity sha512-B8j0XsElvyhv6+5hlFf6vFV/uCSyLKcInpeXOGnOImX2mGXshE01RvPoGipTlRpIk53e6UfYj7WdDdgbVfXDZw== dependencies: - "@smithy/property-provider" "^3.1.10" - "@smithy/smithy-client" "^3.4.5" - "@smithy/types" "^3.7.1" + "@smithy/property-provider" "^4.0.2" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^3.0.26": - version "3.0.27" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.27.tgz#a7248c9d9cb620827ab57ef9d1867bfe8aef42d0" - integrity sha512-7+4wjWfZqZxZVJvDutO+i1GvL6bgOajEkop4FuR6wudFlqBiqwxw3HoH6M9NgeCd37km8ga8NPp2JacQEtAMPg== - dependencies: - "@smithy/config-resolver" "^3.0.12" - "@smithy/credential-provider-imds" "^3.2.7" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/property-provider" "^3.1.10" - "@smithy/smithy-client" "^3.4.4" - "@smithy/types" "^3.7.1" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.27": - version "3.0.28" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.28.tgz#d6d742d62c2f678938b7a378224e79fca587458b" - integrity sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w== - dependencies: - "@smithy/config-resolver" "^3.0.12" - "@smithy/credential-provider-imds" "^3.2.7" - "@smithy/node-config-provider" "^3.1.11" - "@smithy/property-provider" "^3.1.10" - "@smithy/smithy-client" "^3.4.5" - "@smithy/types" "^3.7.1" +"@smithy/util-defaults-mode-node@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.9.tgz#2d50bcb178a214878a86563616a0b3499550a9d2" + integrity sha512-wTDU8P/zdIf9DOpV5qm64HVgGRXvqjqB/fJZTEQbrz3s79JHM/E7XkMm/876Oq+ZLHJQgnXM9QHDo29dlM62eA== + dependencies: + "@smithy/config-resolver" "^4.1.0" + "@smithy/credential-provider-imds" "^4.0.2" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/property-provider" "^4.0.2" + "@smithy/smithy-client" "^4.2.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-endpoints@^2.1.5", "@smithy/util-endpoints@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz#720cbd1a616ad7c099b77780f0cb0f1f9fc5d2df" - integrity sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA== +"@smithy/util-endpoints@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz#6933a0d6d4a349523ef71ca9540c9c0b222b559e" + integrity sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ== dependencies: - "@smithy/node-config-provider" "^3.1.11" - "@smithy/types" "^3.7.1" + "@smithy/node-config-provider" "^4.0.2" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^3.0.10", "@smithy/util-middleware@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.10.tgz#ab8be99f1aaafe5a5490c344f27a264b72b7592f" - integrity sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A== +"@smithy/util-middleware@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.2.tgz#272f1249664e27068ef0d5f967a233bf7b77962c" + integrity sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ== dependencies: - "@smithy/types" "^3.7.1" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-retry@^3.0.10", "@smithy/util-retry@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.10.tgz#fc13e1b30e87af0cbecadf29ca83b171e2040440" - integrity sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA== +"@smithy/util-retry@^4.0.2", "@smithy/util-retry@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.3.tgz#42d54b3a100915b61c6f9bee43c966e96139584d" + integrity sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng== dependencies: - "@smithy/service-error-classification" "^3.0.10" - "@smithy/types" "^3.7.1" + "@smithy/service-error-classification" "^4.0.3" + "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-stream@^3.3.0", "@smithy/util-stream@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.1.tgz#a2636f435637ef90d64df2bb8e71cd63236be112" - integrity sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw== - dependencies: - "@smithy/fetch-http-handler" "^4.1.1" - "@smithy/node-http-handler" "^3.3.1" - "@smithy/types" "^3.7.1" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" +"@smithy/util-stream@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.2.0.tgz#85f85516b0042726162bf619caa3358332195652" + integrity sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ== + dependencies: + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/types" "^4.2.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== dependencies: tslib "^2.6.2" @@ -2173,14 +2053,65 @@ "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: - "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-buffer-from" "^4.0.0" tslib "^2.6.2" +"@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/codecs-core@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.1.0.tgz#79ac28fbcde4a09d88f4360777ceeb30ec14e3f1" + integrity sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw== + dependencies: + "@solana/errors" "2.1.0" + +"@solana/codecs-numbers@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.1.0.tgz#f6a1a9009ace56238d8d9478dd5d375b09c6342a" + integrity sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/errors@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.1.0.tgz#1a139965fcb8bec610cc1c6194d53d169f4b5852" + integrity sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw== + dependencies: + chalk "^5.3.0" + commander "^13.1.0" + +"@solana/web3.js@^1.87.6": + version "1.98.2" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.2.tgz#45167a5cfb64436944bf4dc1e8be8482bd6d4c14" + integrity sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + "@solana/codecs-numbers" "^2.1.0" + agentkeepalive "^4.5.0" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + "@stablelib/aead@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" @@ -2318,71 +2249,71 @@ "@stablelib/xchacha20" "^1.0.1" "@superfaceai/passport-twitter-oauth2@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@superfaceai/passport-twitter-oauth2/-/passport-twitter-oauth2-1.2.3.tgz#ca870e7b03552c5893800626e3f60995e56c0c96" - integrity sha512-kbGptW8AM7l6jJKlgCaoWSHVVNgNgCZCTPO9IDo7Wg8vQqOu+tQhRmJERAdbqcB3B/doG7Nd90nvFuLDH1sFLA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/@superfaceai/passport-twitter-oauth2/-/passport-twitter-oauth2-1.2.4.tgz#c3343bccd5730a36752714a6b1f1e4405ffb704a" + integrity sha512-f2P4X1HqBHJuAnQefINpgJvMGLHx+nT9APbfJzN/CCBcazvP9NOD9IiENHMZMXEgfcHU40V3KwKiIZTBH5Q4Wg== dependencies: passport-oauth2 "^1.6.1" optionalDependencies: "@types/passport" "1.x" "@types/passport-oauth2" ">=1.4" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@tdlib-native/tdjson-android-arm64-glibc@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-android-arm64-glibc/-/tdjson-android-arm64-glibc-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#84c58553ba28a0719938f02760a9b6d7e2217f44" - integrity sha512-r3rs54ZMk73Pzp3rdfW9e9GwLK/BYnRLFCu57Sh60COCl1jEPphnWXZNfRjoX3whcqdpZXA5XvAMnOKiwWc/gQ== - -"@tdlib-native/tdjson-android-arm64-musl@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-android-arm64-musl/-/tdjson-android-arm64-musl-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#f9312fd1bcb8a44fa4e51cdc71133eb1cbd666a6" - integrity sha512-DlLlgMuss0UCQQ/818lq0plHGBPycaKkaMeZJw6a/7/cenlx70/d8RMy3iZnxf4zw6DhVUXSnqe3NIGNfjgLbg== - -"@tdlib-native/tdjson-darwin-arm64@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-darwin-arm64/-/tdjson-darwin-arm64-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#17a6281a950b0650f728b12167d2781bda41000a" - integrity sha512-ahai5bxdqBQrQoTh0diE1Ih5s8n/PUCdjttNP4Oq9gZvuFlOgDUsrWFmDX5Jb/kF+1QZMJMzDkfU9zoOmxWZaQ== - -"@tdlib-native/tdjson-darwin-x64@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-darwin-x64/-/tdjson-darwin-x64-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#1e2ddf496c5e7652a184fac17badd39938f945e7" - integrity sha512-cx/P0ub972orBfCtI22EvsQlQOMPZrDqmydOKnzpBzalJTL2VUrvqfneMD9JBGvOv8SyJKxi9RC+jSHkBq5nTQ== - -"@tdlib-native/tdjson-linux-arm64-glibc@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-arm64-glibc/-/tdjson-linux-arm64-glibc-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#39c5219b284a2706e9d4ce9bcc0524d3831cf321" - integrity sha512-PvbNTeibxxQkNQooHj42JAISdBaW+ZwHvJc+fG1XvVMVUvKMUh+vxpX6wozCoZd2pwQPYVvNPCNyvoC1uj4NMA== - -"@tdlib-native/tdjson-linux-arm64-musl@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-arm64-musl/-/tdjson-linux-arm64-musl-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#c726cb6bd60a9353b9c49b1a4c592863a8385fc0" - integrity sha512-sr6X/qcdsZ4NLpTrRT5vCIhw248q1H/tuUsCbLAgckl3GFB2sgxkqVNGuw42GVxvKgz/tEpGzBB4M/PKyv8DnQ== - -"@tdlib-native/tdjson-linux-x64-glibc@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-x64-glibc/-/tdjson-linux-x64-glibc-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#46741f9ff7f3623b6810ae5cfa03b2bc4bb0d156" - integrity sha512-hZ6MAPcCbXf8UdL/ZOfrBCgrBegP6Or+9IATsG7ZkCUv7BjJjf04wIyBfjPPxAZsy1mztWOCTvP618b6+ievcA== - -"@tdlib-native/tdjson-linux-x64-musl@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-x64-musl/-/tdjson-linux-x64-musl-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#8bc5602b557df5fc048f225d367cf01519865fa7" - integrity sha512-vs4MIAMw9mj7JvqGxKMfjK6S0nP5vnfm5aRdCqs6mGCFDsFR+wB4nFEYVc1rxnWDVq9+ZfHmsP3pj9JZjrQlTA== - -"@tdlib-native/tdjson-win32-ia32@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-win32-ia32/-/tdjson-win32-ia32-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#e19fdf7cd4e6f3ed1a0026021241ca7e41556f93" - integrity sha512-ETK8NE86dCl/2/M5eOKNRliA2vKR5winRzMxCsb2v+nag4SOrYK2qgWvlmZ8d92pX5I4dFd7Cs1ZShg2abSHpA== - -"@tdlib-native/tdjson-win32-x64@1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b": - version "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-win32-x64/-/tdjson-win32-x64-1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b.tgz#a6a4f594cebd01089ea49944103262b6c5c03bfe" - integrity sha512-kkDGr5+3kG51ZKzQunpPkMsNBODtLtpN2t2UqC4mnRC/FzwgMFWEJiu4lpVHWgY8QNDDIBY8SC8MdxDtyo7bWg== +"@swc/helpers@^0.5.11": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@tdlib-native/tdjson-android-arm64-glibc@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-android-arm64-glibc/-/tdjson-android-arm64-glibc-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#1ffb8d483767a82603ce6b95422e84fc8a9ef2d3" + integrity sha512-UkFYds4uOoiv0XJ51OpYB+X3qMnG36w2bPPvZZFBEiJsIX2PPl1Agykhen42JIWkkAeigHsvOgc4XpnyYW4R0w== + +"@tdlib-native/tdjson-android-arm64-musl@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-android-arm64-musl/-/tdjson-android-arm64-musl-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#fe725f1dfcddfc5befcb64ba235b3cd934e10458" + integrity sha512-+3grcTGudhBaddh6FYPcx4oebmK0wP6YtZ9nENpuhuJ1NB/1CoN/EnkDOHxJXnWjmNk4tIYgapkEs2dBUHw1pA== + +"@tdlib-native/tdjson-darwin-arm64@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-darwin-arm64/-/tdjson-darwin-arm64-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#10eebc855caee87bdd5d4712bd6a7a258f27b8be" + integrity sha512-kdaf2Q+3MaOpnwXJlbeIolpKoIS/cfmT7gsEK1c0xp17N8Dfk9prIL4kY6EAAt/N95nTgd2C0aNPwyXnqKampw== + +"@tdlib-native/tdjson-darwin-x64@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-darwin-x64/-/tdjson-darwin-x64-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#e4418a7320a5ad84948a435d0d04928f363ffd7d" + integrity sha512-4FUbswXUSEueeuVT9LDOsxcwLVhfT/5UQ9Ag3s1Uyg964vgRM0pQR81ydyuTa1EtkaTPeXp+qK5Yy2c1Xwc63w== + +"@tdlib-native/tdjson-linux-arm64-glibc@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-arm64-glibc/-/tdjson-linux-arm64-glibc-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#f8fd6f3fcaf5981218598a0a3693ea629f386ae7" + integrity sha512-NMTZXzpDidrZe6eth5/Z3QLFtof5k/5ZTpJyuKJYM3t9ppLoJADEo5b/iHbwZMF3EruOl3AGxgudTSTYCQGmGw== + +"@tdlib-native/tdjson-linux-arm64-musl@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-arm64-musl/-/tdjson-linux-arm64-musl-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#0dcfba560e5a027f07f6462205e4c11a6438fd41" + integrity sha512-OWJVs5xhAzixdTcCd/INkZYbUSrcBczYon3+8ve208IpBm+GAe1FQ5WJPVUHluftizIn7i4VxuL0hlmG4UQJaA== + +"@tdlib-native/tdjson-linux-x64-glibc@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-x64-glibc/-/tdjson-linux-x64-glibc-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#921ca1021e60785648c972c8b85cfd82bf73ff4b" + integrity sha512-Q3J4B32IkelIqI4Bw/CBZFTIlZEEtHK6WrM/hsUpFniyOsR/jkQ7EMAFOuvHg3A9ao/AaDxxLEjeTfp8Ijt7dA== + +"@tdlib-native/tdjson-linux-x64-musl@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-linux-x64-musl/-/tdjson-linux-x64-musl-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#6d126be4d1b50e90f09b04b41bfbe4a3d8204052" + integrity sha512-hslLsMXmkWHZrEOuqoZBuwPQknATo79tcVi2jVN5EaG20eAiovFqh3S7zvCKSMmbtjmuwWBfkNwrC/e/y6lOmQ== + +"@tdlib-native/tdjson-win32-ia32@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-win32-ia32/-/tdjson-win32-ia32-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#c56cf1fd8f269e83f487f1697e69e52c60e335f8" + integrity sha512-TtkVkI7stQMQpSzDTgm0Ij4ZqfwIwiGgJvdptZyVKRfc9EBZWzJe4Txgw6yB+1jOY1mXm5WxE+Pb2vSC02u1jA== + +"@tdlib-native/tdjson-win32-x64@1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3": + version "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + resolved "https://registry.yarnpkg.com/@tdlib-native/tdjson-win32-x64/-/tdjson-win32-x64-1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3.tgz#c65a8824512609d93e78e1979a34d87ed957ecd5" + integrity sha512-Ior+I0i5p/do+06/AKS2SuKdchpOuhZfuenbINcQduptIE6UWKlnCyi61i4yhUF7fUJfe7kca/OUJehZQ9gKNQ== "@tensorflow-models/universal-sentence-encoder@^1.3.3": version "1.3.3" @@ -2394,15 +2325,7 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/body-parser@^1.19.5": +"@types/body-parser@*", "@types/body-parser@^1.19.5": version "1.19.5" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== @@ -2425,10 +2348,10 @@ resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064" integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg== -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== +"@types/connect@*", "@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -2439,23 +2362,25 @@ dependencies: "@types/ms" "*" -"@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" -"@types/express-serve-static-core@^4.17.33": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== +"@types/express-serve-static-core@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" + integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" "@types/express-session@1.17.0": version "1.17.0" @@ -2466,25 +2391,29 @@ "@types/node" "*" "@types/express@*": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.1.tgz#138d741c6e5db8cc273bec5285cd6e9d0779fc9f" + integrity sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" + "@types/express-serve-static-core" "^5.0.0" "@types/serve-static" "*" "@types/express@^4.17.2": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + "@types/json-schema@^7.0.6": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -2496,9 +2425,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/mocha@^9.1.0": version "9.1.1" @@ -2513,55 +2442,43 @@ mongodb "*" "@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node-fetch@^2.5.10", "@types/node-fetch@^2.6.4": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== + version "2.6.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== dependencies: "@types/node" "*" form-data "^4.0.0" -"@types/node@*": - version "17.0.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.35.tgz#635b7586086d51fb40de0a2ec9d1014a5283ba4a" - integrity sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg== - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -"@types/node@>=13.7.0": - version "22.13.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" - integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^22.10.7": + version "22.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.3.tgz#b7fb9396a8ec5b5dfb1345d8ac2502060e9af68b" + integrity sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw== dependencies: - undici-types "~6.20.0" + undici-types "~6.21.0" -"@types/node@^18.11.18": - version "18.19.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.45.tgz#a9ebfe4c316a356be7ca11f753ecb2feda6d6bdf" - integrity sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" -"@types/node@^18.15.11": - version "18.19.42" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.42.tgz#b54ed4752c85427906aab40917b0f7f3d724bf72" - integrity sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg== - dependencies: - undici-types "~5.26.4" +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^22.10.7": - version "22.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.7.tgz#14a1ca33fd0ebdd9d63593ed8d3fbc882a6d28d7" - integrity sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg== +"@types/node@^18.11.18", "@types/node@^18.15.11": + version "18.19.87" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.87.tgz#690f000cc51e3c7f48bc00f7e86fac6eb550b709" + integrity sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A== dependencies: - undici-types "~6.20.0" + undici-types "~5.26.4" "@types/oauth2-server@^3.0.18": version "3.0.18" @@ -2571,29 +2488,22 @@ "@types/express" "*" "@types/oauth@*": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@types/oauth/-/oauth-0.9.1.tgz#e17221e7f7936b0459ae7d006255dff61adca305" - integrity sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A== + version "0.9.6" + resolved "https://registry.yarnpkg.com/@types/oauth/-/oauth-0.9.6.tgz#fb5a278f6a826108a7467a01f856324e11e9ba4a" + integrity sha512-H9TRCVKBNOhZZmyHLqFt9drPM9l+ShWiqqJijU1B8P3DX3ub84NjxDuy+Hjrz+fEca5Kwip3qPMKNyiLgNJtIA== dependencies: "@types/node" "*" "@types/passport-oauth2@>=1.4", "@types/passport-oauth2@^1.4.8": - version "1.4.12" - resolved "https://registry.yarnpkg.com/@types/passport-oauth2/-/passport-oauth2-1.4.12.tgz#c2ae0ee3b16646188d8b0b6cdbc6880a0247dc5f" - integrity sha512-RZg6cYTyEGinrZn/7REYQds6zrTxoBorX1/fdaz5UHzkG8xdFE7QQxkJagCr2ETzGII58FAFDmnmbTUVMrltNA== + version "1.4.17" + resolved "https://registry.yarnpkg.com/@types/passport-oauth2/-/passport-oauth2-1.4.17.tgz#d5d54339d44f6883d03e69dc0cc0e2114067abb4" + integrity sha512-ODiAHvso6JcWJ6ZkHHroVp05EHGhqQN533PtFNBkg8Fy5mERDqsr030AX81M0D69ZcaMvhF92SRckEk2B0HYYg== dependencies: "@types/express" "*" "@types/oauth" "*" "@types/passport" "*" -"@types/passport@*", "@types/passport@1.x": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@types/passport/-/passport-1.0.12.tgz#7dc8ab96a5e895ec13688d9e3a96920a7f42e73e" - integrity sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw== - dependencies: - "@types/express" "*" - -"@types/passport@^1.0.17": +"@types/passport@*", "@types/passport@1.x", "@types/passport@^1.0.17": version "1.0.17" resolved "https://registry.yarnpkg.com/@types/passport/-/passport-1.0.17.tgz#718a8d1f7000ebcf6bbc0853da1bc8c4bc7ea5e6" integrity sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg== @@ -2616,28 +2526,37 @@ "@types/pouchdb-core" "*" "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + "@types/stopword@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/stopword/-/stopword-1.0.2.tgz#10a111fc0e19d0336004834cb5649fb40737977e" @@ -2649,15 +2568,20 @@ integrity sha512-dMS4S07fbtY1AILG/RhuwmptmzK1Ql8scmAebOTJ/8iBtK/KI17NwGwKzu1uipjj8Kk+3mfPxum56kKZE93mzQ== "@types/tough-cookie@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" - integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/uuid@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@types/uuid@^9.0.1": version "9.0.8" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" @@ -2675,10 +2599,17 @@ dependencies: "@types/webidl-conversions" "*" -"@types/ws@^8.5.10": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2", "@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" @@ -2688,10 +2619,11 @@ integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== "@vendia/serverless-express@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@vendia/serverless-express/-/serverless-express-3.4.0.tgz#156f47d364b067ae6fa678a914c51887f494321a" - integrity sha512-/UAAbi9qRjUtjRISt5MJ1sfhtrHb26hqQ0nvE5qhMLsAdR5H7ErBwPD8Q/v2OENKm0iWsGwErIZEg7ebUeFDjQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/@vendia/serverless-express/-/serverless-express-3.4.1.tgz#5c422a2af41f3e9e0d8d072e924cc1c25a1b7a85" + integrity sha512-4dJJvr9vQlq9iUClpfm5iFL+neoSctUI6Zkh9F4wjk/tpcM7QVD6niJi4ptiIzyzJCWoN97ACQCXyE0O8MznLQ== dependencies: + "@codegenie/serverless-express" "^3.4.1" binary-case "^1.0.0" type-is "^1.6.16" @@ -2970,11 +2902,6 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -3046,17 +2973,15 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" +agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== +agentkeepalive@^4.2.1, agentkeepalive@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== dependencies: humanize-ms "^1.2.1" @@ -3088,9 +3013,9 @@ ajv@^8.0.0, ajv@^8.6.3: require-from-string "^2.0.2" alchemy-sdk@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/alchemy-sdk/-/alchemy-sdk-3.5.1.tgz#7bd91366a2b76bb1f48d0efe618f1c558e677c43" - integrity sha512-4jlkESPanXzASrREQqcO6DWF2665HutSAxHKxABYNDgf/WkMeHfqXfojDhbVmY+VoyvXczWaQ9tsGXH1YQD/6A== + version "3.5.8" + resolved "https://registry.yarnpkg.com/alchemy-sdk/-/alchemy-sdk-3.5.8.tgz#114e6674790e77be02002344f9709286bdf78115" + integrity sha512-X3DtTgrD4Th/RuTkyxwZ/PzL/0Y2Y4gWJv4RelNbPFdnFn4v7F2QXABmXSuYxH2fkofZzGDR8HEklLyyk3bYGQ== dependencies: "@ethersproject/abi" "^5.7.0" "@ethersproject/abstract-provider" "^5.7.0" @@ -3103,17 +3028,11 @@ alchemy-sdk@^3.5.1: "@ethersproject/units" "^5.7.0" "@ethersproject/wallet" "^5.7.0" "@ethersproject/web" "^5.7.0" + "@solana/web3.js" "^1.87.6" axios "^1.7.4" sturdy-websocket "^0.2.1" websocket "^1.0.34" -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -3124,6 +3043,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -3143,15 +3067,20 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -3246,10 +3175,17 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + aws-sdk@^2.1009.0: - version "2.1142.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1142.0.tgz#8fca9cfa100153d10d753afbc11a3ad7af6fe72b" - integrity sha512-ii+4Q8jqN31CiXpn9i/4vGCjqo02TGihmre5b44OUsTiKNXSjqr/aRrcirMsfuBFWRdrdcU12ez7Mg+N9GDNjw== + version "2.1692.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1692.0.tgz#9dac5f7bfcc5ab45825cc8591b12753aa7d2902c" + integrity sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw== dependencies: buffer "4.9.2" events "1.1.1" @@ -3258,8 +3194,9 @@ aws-sdk@^2.1009.0: querystring "0.2.0" sax "1.2.1" url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" + util "^0.12.4" + uuid "8.0.0" + xml2js "0.6.2" aws-serverless-express@^3.4.0: version "3.4.0" @@ -3276,9 +3213,9 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== axios-cookiejar-support@^1.0.1: version "1.0.1" @@ -3319,28 +3256,10 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@^1.2.3, axios@^1.6.2, axios@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@^1.3.3, axios@^1.7.4: - version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@^1.4.0: - version "1.7.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.8.tgz#1997b1496b394c21953e68c14aaa51b7b5de3d6e" - integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== +axios@^1.2.3, axios@^1.3.3, axios@^1.4.0, axios@^1.6.2, axios@^1.7.2, axios@^1.7.4: + version "1.9.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" + integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -3360,16 +3279,16 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" - integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== dependencies: safe-buffer "^5.0.1" base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" + integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== base64-js@1.5.1, base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" @@ -3411,21 +3330,16 @@ bigint-crypto-utils@^3.3.0: integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== bignumber.js@^9.0.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + version "9.3.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.0.tgz#bdba7e2a4c1a2eba08290e8dcad4f36393c92acd" + integrity sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA== binary-case@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/binary-case/-/binary-case-1.1.4.tgz#d687104d59e38f2b9e658d3a58936963c59ab931" integrity sha512-9Kq8m6NZTAgy05Ryuh7U3Qc4/ujLQU1AZ5vMw4cr3igTdi5itZC6kCNrRr2X8NzPiDn2oUIFTfa71DKMnue/Zg== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -binary-extensions@^2.2.0: +binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== @@ -3460,52 +3374,47 @@ bluebird@~3.4.0: integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" + integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== -body-parser@1.20.0, body-parser@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@1.20.3, body-parser@^1.19.0: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" + qs "6.13.0" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + bowser@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3514,12 +3423,19 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.1.0: version "1.1.0" @@ -3538,7 +3454,7 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -bs58@^4.0.1: +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== @@ -3552,10 +3468,10 @@ bs58@^5.0.0: dependencies: base-x "^4.0.0" -bson@^6.10.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/bson/-/bson-6.10.1.tgz#dcd04703178f5ecf5b25de04edd2a95ec79385d3" - integrity sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA== +bson@^6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/bson/-/bson-6.10.3.tgz#5f9a463af6b83e264bedd08b236d1356a30eda47" + integrity sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ== buffer-alloc-unsafe@^1.1.0: version "1.1.0" @@ -3599,6 +3515,14 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -3607,14 +3531,6 @@ buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bufferutil@^4.0.1: version "4.0.9" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.9.tgz#6e81739ad48a95cad45a279588e13e95e24a800a" @@ -3634,44 +3550,38 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0: +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-errors "^1.3.0" + function-bind "^1.1.2" -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: + call-bind-apply-helpers "^1.0.0" es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" call-me-maybe@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== -camelcase@6, camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@6, camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -3682,9 +3592,9 @@ canonicalize@^1.0.5: integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== canonicalize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-2.0.0.tgz#32be2cef4446d67fd5348027a384cae28f17226a" - integrity sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w== + version "2.1.0" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-2.1.0.tgz#92a20ecfb94e96591badf4977dc2fb1bfbc31dc5" + integrity sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ== caseless@~0.12.0: version "0.12.0" @@ -3713,7 +3623,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0: +chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3721,7 +3631,12 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3, chokidar@^3.5.2: +chalk@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3736,6 +3651,21 @@ chokidar@3.5.3, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.5.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -3746,18 +3676,13 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" claudia@^5.14.1: version "5.14.1" @@ -3778,11 +3703,6 @@ claudia@^5.14.1: uuid "^8.3.2" which "^2.0.2" -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3801,12 +3721,14 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= +clone-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - mimic-response "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" closevector-common@0.1.3: version "0.1.3" @@ -3912,12 +3834,12 @@ command-line-usage@6.1.3: table-layout "^1.0.2" typical "^5.2.0" -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== -commander@^2.8.1: +commander@^2.20.3, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3935,7 +3857,7 @@ compress-commons@^2.1.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.2: version "1.6.2" @@ -3947,17 +3869,12 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== +console-table-printer@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.12.1.tgz#4a9646537a246a6d8de57075d4fae1e08abae267" + integrity sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ== dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + simple-wcswidth "^1.0.1" content-disposition@0.5.4: version "0.5.4" @@ -3966,25 +3883,30 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie-signature@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +cookie@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== copyfiles@^2.4.1: version "2.4.1" @@ -4002,7 +3924,7 @@ copyfiles@^2.4.1: core-decorators@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/core-decorators/-/core-decorators-0.17.0.tgz#3f43180a86d2ab0cc51069f46a1ec3e49e7cebd6" - integrity sha1-P0MYCobSqwzFEGn0ah7D5J5869Y= + integrity sha512-dBTL931yH4iZRlknHHkqtvPuGiDAEyTcudUnji3W0+mcNIHTrCmXvlqSyE743tzYtIeujLB00H9G/NdAmE3rPg== core-js@^2.4.0: version "2.6.12" @@ -4012,7 +3934,7 @@ core-js@^2.4.0: core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -4070,6 +3992,15 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" @@ -4082,11 +4013,6 @@ crypto-js@^4.2.0: garbados-crypt "git+https://github.com/tahpot/crypt.git#feature/pbkdf2" transform-pouch "^2.0.0" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -4098,25 +4024,20 @@ d@1, d@^1.0.1, d@^1.0.2: dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" -date-format@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.10.tgz#7aa4bc0ad0c79f4ba858290e5dbb47f27d602e79" - integrity sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA== +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== -dayjs@^1.10.7: +dayjs@^1.10.7, dayjs@^1.11.1: version "1.11.13" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== -dayjs@^1.11.1: - version "1.11.2" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.2.tgz#fa0f5223ef0d6724b3d8327134890cfe3d72fbe5" - integrity sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw== - debug@2.6.9, debug@^2.2.0, debug@^2.6.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4124,12 +4045,12 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.3: dependencies: ms "2.0.0" -debug@4, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.3.4, debug@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@4.3.3: version "4.3.3" @@ -4145,13 +4066,6 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - decamelize@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -4162,13 +4076,6 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" @@ -4208,7 +4115,7 @@ decompress-unzip@^4.0.1: pify "^2.3.0" yauzl "^2.4.2" -decompress@^4.2.0: +decompress@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== @@ -4222,7 +4129,7 @@ decompress@^4.2.0: pify "^2.3.0" strip-dirs "^2.0.0" -deep-extend@^0.6.0, deep-extend@~0.6.0: +deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== @@ -4244,11 +4151,6 @@ defekt@9.3.1: resolved "https://registry.yarnpkg.com/defekt/-/defekt-9.3.1.tgz#d4cf90fac99c09ca2173f6a599086f775b63eb00" integrity sha512-/aw6CuhAm/Fdbr6jHRt3HIhv6BGUgX1we7Q8lQQkE8izZ5v99UZnQbX5gxB7rp+zjSQLp3qyGfJXytdTlWeFpQ== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -4271,10 +4173,15 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0, depd@~2.0.0: version "2.0.0" @@ -4287,9 +4194,9 @@ destroy@1.2.0: integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== did-jwt-vc@3.1.0: version "3.1.0" @@ -4358,38 +4265,29 @@ dingbat-to-unicode@^1.0.1: resolved "https://registry.yarnpkg.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz#5091dd673241453e6b5865e26e5a4452cdef5c83" integrity sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w== -discord-api-types@0.37.100: - version "0.37.100" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.100.tgz#5979892d39511bc7f1dbb9660d2d2cad698b3de7" - integrity sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA== - -discord-api-types@0.37.83: - version "0.37.83" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.83.tgz#a22a799729ceded8176ea747157837ddf4708b1f" - integrity sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA== - -discord-api-types@0.37.97: - version "0.37.97" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.97.tgz#d658573f726ad179261d538dbad4e7e8eca48d11" - integrity sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA== +discord-api-types@^0.38.1: + version "0.38.2" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.38.2.tgz#ded35082cadd4968cc8b2ad72f32807c8f139bab" + integrity sha512-GAPY1/Kv3aqEoBYgUYXB2tHdWJCZXfytlCzxZ4QMQ1/TIQn1JI+xUOukehl4iEa9m7fCURnMIOpOxpaTWqzX2w== discord.js@^14.16.3: - version "14.16.3" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.16.3.tgz#9553366953c992469f47a55af2a11c2054a9babe" - integrity sha512-EPCWE9OkA9DnFFNrO7Kl1WHHDYFXu3CNVFJg63bfU7hVtjZGyhShwZtSBImINQRWxWP2tgo2XI+QhdXx28r0aA== + version "14.19.3" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.19.3.tgz#ed08c61ad300efc3033ecf2b70f28a68d95b138a" + integrity sha512-lncTRk0k+8Q5D3nThnODBR8fR8x2fM798o8Vsr40Krx0DjPwpZCuxxTcFMrXMQVOqM1QB9wqWgaXPg3TbmlHqA== dependencies: - "@discordjs/builders" "^1.9.0" + "@discordjs/builders" "^1.11.2" "@discordjs/collection" "1.5.3" - "@discordjs/formatters" "^0.5.0" - "@discordjs/rest" "^2.4.0" + "@discordjs/formatters" "^0.6.1" + "@discordjs/rest" "^2.5.0" "@discordjs/util" "^1.1.1" - "@discordjs/ws" "1.1.1" + "@discordjs/ws" "^1.2.2" "@sapphire/snowflake" "3.5.3" - discord-api-types "0.37.100" + discord-api-types "^0.38.1" fast-deep-equal "3.1.3" lodash.snakecase "4.1.1" + magic-bytes.js "^1.10.0" tslib "^2.6.3" - undici "6.19.8" + undici "6.21.1" dom-serializer@^2.0.0: version "2.0.0" @@ -4413,25 +4311,18 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" domhandler "^5.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dotenv@^16.4.5: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + version "16.5.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" + integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== dotenv@^8.2.0: version "8.6.0" @@ -4450,10 +4341,14 @@ duck@^0.1.12: dependencies: underscore "^1.13.1" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" duplexify@^3.5.0, duplexify@^3.6.0: version "3.7.1" @@ -4465,10 +4360,15 @@ duplexify@^3.5.0, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4483,7 +4383,7 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== elliptic@6.5.4: version "6.5.4" @@ -4498,10 +4398,10 @@ elliptic@6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -elliptic@^6.5.4: - version "6.5.6" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.6.tgz#ee5f7c3a00b98a2144ac84d67d01f04d438fa53e" - integrity sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ== +elliptic@6.6.1, elliptic@^6.5.4: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -4516,10 +4416,20 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== encoding-down@^6.3.0: version "6.3.0" @@ -4531,15 +4441,10 @@ encoding-down@^6.3.0: level-codec "^9.0.0" level-errors "^2.0.0" -encoding-japanese@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encoding-japanese/-/encoding-japanese-2.0.0.tgz#fa0226e5469e7b5b69a04fea7d5481bd1fa56936" - integrity sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ== - -encoding-japanese@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/encoding-japanese/-/encoding-japanese-2.1.0.tgz#5d3c2b652c84ca563783b86907bf5cdfe9a597e2" - integrity sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w== +encoding-japanese@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/encoding-japanese/-/encoding-japanese-2.2.0.tgz#0ef2d2351250547f432a2dd155453555c16deb59" + integrity sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A== end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" @@ -4567,18 +4472,33 @@ errno@~0.1.1: dependencies: prr "~1.0.1" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: version "0.10.64" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" @@ -4598,6 +4518,18 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.4" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" @@ -4607,19 +4539,14 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: ext "^1.7.0" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -4644,9 +4571,9 @@ esniff@^2.0.1: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -ethers@5.7.2, ethers@^5.5.1, ethers@^5.7.0, ethers@^5.7.2: +ethers@5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -4682,17 +4609,53 @@ ethers@5.7.2, ethers@^5.5.1, ethers@^5.7.0, ethers@^5.7.2: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@^5.5.1, ethers@^5.7.0, ethers@^5.7.2: + version "5.8.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" + ethers@^6.13.1: - version "6.13.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + version "6.13.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.7.tgz#7457fcb32413b441a3ee6e9f4cd63bf782de6226" + integrity sha512-qbaJ0uIrjh+huP1Lad2f2QtzW5dcqSVjIzVH6yWB4dKoMuj2WqYz5aMeeQTCNpAKgTJBM5J9vcc2cYJ23UAimQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" + "@types/node" "22.7.5" aes-js "4.0.0-beta.5" - tslib "2.4.0" + tslib "2.7.0" ws "8.17.1" event-emitter@^0.3.5: @@ -4713,10 +4676,20 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== expr-eval@^2.0.2: version "2.0.2" @@ -4724,12 +4697,12 @@ expr-eval@^2.0.2: integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg== express-session@^1.17.3: - version "1.17.3" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.3.tgz#14b997a15ed43e5949cb1d073725675dd2777f36" - integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw== + version "1.18.1" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.1.tgz#88d0bbd41878882840f24ec6227493fcb167e8d5" + integrity sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA== dependencies: - cookie "0.4.2" - cookie-signature "1.0.6" + cookie "0.7.2" + cookie-signature "1.0.7" debug "2.6.9" depd "~2.0.0" on-headers "~1.0.2" @@ -4738,36 +4711,36 @@ express-session@^1.17.3: uid-safe "~2.1.5" express@^4.17.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" - qs "6.10.3" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -4789,13 +4762,18 @@ extend@^3.0.2, extend@~3.0.2: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4806,10 +4784,15 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fast-xml-parser@4.4.1: version "4.4.1" @@ -4821,7 +4804,7 @@ fast-xml-parser@4.4.1: fb@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb/-/fb-2.0.0.tgz#91fd40325da34ec41c68b25530fc3a3e0dacfa6a" - integrity sha1-kf1AMl2jTsQcaLJVMPw6Pg2s+mo= + integrity sha512-76kG876jub8OC2qaVxBcSHrvnMN/oOYUMeOSsZigSiI8F+QHnIZ5mGABYjpTHpnJmMlEB9Os0yaX+k+DoivvTw== dependencies: any-promise "^1.3.0" babel-runtime "^6.23.0" @@ -4873,20 +4856,20 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" @@ -4913,25 +4896,35 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flatted@^3.2.7: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -follow-redirects@^1.14.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" - integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== +follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" -follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.0, follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data-encoder@1.7.2: version "1.7.2" @@ -4939,12 +4932,13 @@ form-data-encoder@1.7.2: integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" form-data@~2.3.2: @@ -4977,22 +4971,13 @@ frac@~1.1.2: fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" @@ -5002,6 +4987,15 @@ fs-extra@^6.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -5012,7 +5006,7 @@ fs-minipass@^2.0.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fs@^0.0.1-security: version "0.0.1-security" @@ -5020,14 +5014,9 @@ fs@^0.0.1-security: integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" @@ -5043,22 +5032,23 @@ function-bind@^1.1.2: tweetnacl-util "^0.15.1" gaxios@^6.0.0, gaxios@^6.0.3, gaxios@^6.1.1, gaxios@^6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.0.tgz#37b7c5961cb67d8d4b0ae8110dcd83cc6791eb6d" - integrity sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg== + version "6.7.1" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb" + integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== dependencies: extend "^3.0.2" https-proxy-agent "^7.0.1" is-stream "^2.0.0" node-fetch "^2.6.9" - uuid "^10.0.0" + uuid "^9.0.1" gcp-metadata@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c" - integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg== + version "6.1.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.1.tgz#f65aa69f546bc56e116061d137d3f5f90bdec494" + integrity sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A== dependencies: - gaxios "^6.0.0" + gaxios "^6.1.1" + google-logging-utils "^0.0.2" json-bigint "^1.0.0" get-caller-file@^2.0.5: @@ -5066,25 +5056,29 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" get-stdin@^5.0.1: version "5.0.1" @@ -5099,24 +5093,10 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -5139,7 +5119,19 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^10.3.7: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.0.5, glob@^7.1.2, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5151,17 +5143,10 @@ glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - google-auth-library@^9.0.0, google-auth-library@^9.7.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.11.0.tgz#bd6da364bcde4e0cc4ed70a0e0df5112b6a671dd" - integrity sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw== + version "9.15.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" + integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng== dependencies: base64-js "^1.3.0" ecdsa-sig-formatter "^1.0.11" @@ -5170,6 +5155,11 @@ google-auth-library@^9.0.0, google-auth-library@^9.7.0: gtoken "^7.0.0" jws "^4.0.0" +google-logging-utils@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-0.0.2.tgz#5fd837e06fa334da450433b9e3e1870c1594466a" + integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ== + googleapis-common@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-7.2.0.tgz#5c19102c9af1e5d27560be5e69ee2ccf68755d42" @@ -5190,40 +5180,16 @@ googleapis@^140.0.1: google-auth-library "^9.0.0" googleapis-common "^7.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.10: +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - groq-sdk@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/groq-sdk/-/groq-sdk-0.5.0.tgz#8eefea81c3709e815c96dffa941200e85a50cf19" @@ -5266,7 +5232,7 @@ gunzip-maybe@^1.4.0: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -5279,7 +5245,7 @@ har-validator@~5.1.3: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -5293,27 +5259,17 @@ has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.1, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - function-bind "^1.1.1" + has-symbols "^1.0.3" hash-base@^3.0.0: version "3.1.0" @@ -5332,7 +5288,7 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5387,11 +5343,6 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.2: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -5406,7 +5357,7 @@ http-errors@2.0.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -5421,11 +5372,11 @@ https-proxy-agent@^5.0.0: debug "4" https-proxy-agent@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: - agent-base "^7.0.2" + agent-base "^7.1.2" debug "4" humanize-ms@^1.2.1: @@ -5462,7 +5413,7 @@ ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== immediate@^3.2.3: version "3.3.0" @@ -5474,20 +5425,10 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -5497,21 +5438,19 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5524,17 +5463,15 @@ is-buffer@^2.0.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-deflate@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" - integrity sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ= + integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ== is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" @@ -5544,13 +5481,23 @@ is-docker@^2.0.0, is-docker@^2.1.1: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -5561,41 +5508,18 @@ is-glob@^4.0.1, is-glob@~4.0.1: is-gzip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" - integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM= - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" + integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -5616,7 +5540,17 @@ is-plain-object@^5.0.0: is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-stream@^1.1.0: version "1.1.0" @@ -5628,10 +5562,17 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" @@ -5645,11 +5586,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -5658,22 +5594,54 @@ isarray@0.0.1: isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jayson@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.2.0.tgz#b71762393fa40bc9637eaf734ca6f40d3b8c0c93" + integrity sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + stream-json "^1.9.1" + uuid "^8.3.2" + ws "^7.5.10" jmespath@0.16.0: version "0.16.0" @@ -5686,9 +5654,9 @@ js-sha3@0.8.0, js-sha3@^0.8.0: integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== js-tiktoken@^1.0.12: - version "1.0.15" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.15.tgz#92a7d829f6950c2cfb35cc52555502e3d6e2ebac" - integrity sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ== + version "1.0.20" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.20.tgz#fa2733bf147acaf1bdcf9ab8a878e79c581c95f2" + integrity sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A== dependencies: base64-js "^1.5.1" @@ -5702,7 +5670,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== json-bigint@^1.0.0: version "1.0.0" @@ -5711,11 +5679,6 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-schema-ref-parser@^9.0.9: version "9.0.9" resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#66ea538e7450b12af342fa3d5b8458bc1e1e013f" @@ -5746,36 +5709,27 @@ json-schema@0.4.0: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json.sortify@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/json.sortify/-/json.sortify-2.2.2.tgz#1ade7704581c469aaf3f021350d174d1c5617276" integrity sha512-wwFLdDffs747s5cqLA3htIKp9wdID2rWNofJKxwDjFo+rqqt5Vg7SnYOh7mc7MW6Iw43rrOFhr6MKytOtNceSA== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -5859,29 +5813,22 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== "langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.6.tgz#f4313d202ce168d29bfcf81a551147cd4986779f" - integrity sha512-erZOIKXzwCOrQHqY9AyjkQmaX62zUap1Sigw1KrwMUOnVoLKkVNRmAyxFlNZDZ9jLs/58MaQcaT9ReJtbj3x6w== + version "0.3.24" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.24.tgz#24c5e16f7a43be8ce54d32079ea8dc8087c56777" + integrity sha512-BTjiYkUCpWFAmufK8J5zMqc5aUs4eEnAXPWtPe2+R4ZPP+U7bXJSBHAcrB40rQ3VeTdRgMvgDjekOOgCMWut6Q== dependencies: - "@langchain/openai" ">=0.1.0 <0.4.0" + "@langchain/openai" ">=0.1.0 <0.6.0" "@langchain/textsplitters" ">=0.0.0 <0.2.0" js-tiktoken "^1.0.12" js-yaml "^4.1.0" jsonpointer "^5.0.1" - langsmith "^0.2.0" + langsmith "^0.3.16" openapi-types "^12.1.3" p-retry "4" uuid "^10.0.0" @@ -5889,25 +5836,19 @@ kind-of@^6.0.2: zod "^3.22.4" zod-to-json-schema "^3.22.3" -langsmith@^0.2.0: - version "0.2.8" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.8.tgz#926a857df206a67fd912f9a201a08cdffa8870e2" - integrity sha512-wKVNZoYtd8EqQWUEsfDZlZ77rH7vVqgNtONXRwynUp7ZFMFUIPhSlqE9pXqrmYPE8ZTBFj7diag2lFgUuaOEKw== +langsmith@^0.3.16: + version "0.3.25" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.25.tgz#ee8678b92ae907ac16dd1b1affb6997de1ac8091" + integrity sha512-KuJu89VY3DmCdFvlVxQG4owQl546Z6pQc6TbhsyP77MkVJgZr8yvevZvvcXDWIpT2o2s52c9Aww2XVOH6GmHxQ== dependencies: "@types/uuid" "^10.0.0" - commander "^10.0.1" + chalk "^4.1.2" + console-table-printer "^2.12.1" p-queue "^6.6.2" p-retry "4" semver "^7.6.3" uuid "^10.0.0" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazystream@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" @@ -6030,45 +5971,25 @@ levelup@4.4.0, levelup@^4.3.2: level-supports "~1.0.0" xtend "~4.0.0" -libbase64@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-1.2.1.tgz#fb93bf4cb6d730f29b92155b6408d1bd2176a8c8" - integrity sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew== - libbase64@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-1.3.0.tgz#053314755a05d2e5f08bbfc48d0290e9322f4406" integrity sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg== -libmime@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.2.0.tgz#c4ed5cbd2d9fdd27534543a68bb8d17c658d51d8" - integrity sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw== - dependencies: - encoding-japanese "2.0.0" - iconv-lite "0.6.3" - libbase64 "1.2.1" - libqp "2.0.1" - -libmime@5.3.5: - version "5.3.5" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.3.5.tgz#acd95a32f58dab55c8a9d269c5b4509e7ad6ae31" - integrity sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg== +libmime@5.3.6: + version "5.3.6" + resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.3.6.tgz#e6dfc655b6b4614bad90e8e65817957903b56580" + integrity sha512-j9mBC7eiqi6fgBPAGvKCXJKJSIASanYF4EeA4iBzSG0HxQxmXnR3KbyWqTn4CwsKSebqCv2f5XZfAO6sKzgvwA== dependencies: - encoding-japanese "2.1.0" + encoding-japanese "2.2.0" iconv-lite "0.6.3" libbase64 "1.3.0" - libqp "2.1.0" - -libqp@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-2.0.1.tgz#b8fed76cc1ea6c9ceff8888169e4e0de70cd5cf2" - integrity sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg== + libqp "2.1.1" -libqp@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-2.1.0.tgz#ce84bffd86b76029032093bd866d316e12a3d3f5" - integrity sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A== +libqp@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/libqp/-/libqp-2.1.1.tgz#f1be767a58f966f500597997cab72cfc1e17abfa" + integrity sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow== libsodium-sumo@^0.7.15: version "0.7.15" @@ -6111,17 +6032,17 @@ lodash.camelcase@^4.3.0: lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.difference@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.includes@^4.3.0: version "4.3.0" @@ -6146,7 +6067,7 @@ lodash.isnumber@^3.0.3: lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" @@ -6166,7 +6087,7 @@ lodash.snakecase@4.1.1: lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== lodash@^4.14.0, lodash@^4.17.14, lodash@^4.17.21: version "4.17.21" @@ -6182,46 +6103,34 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" log4js@^6.4.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.5.1.tgz#06f771ae231c8e930ac2c7381242c8cdeff0dca1" - integrity sha512-z1hRRe5DDPzsP73PgN/GYmeSbIAl/g9kX3GLjABCpcU1ojns8S4cyjpJ21jU1P7z1wWkm69PjyMcEGqYYdDqaA== + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== dependencies: - date-format "^4.0.10" + date-format "^4.0.14" debug "^4.3.4" - flatted "^3.2.5" + flatted "^3.2.7" rfdc "^1.3.0" - streamroller "^3.1.1" + streamroller "^3.1.5" long@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/long/-/long-5.3.1.tgz#9d4222d3213f38a5ec809674834e0f0ab21abe96" - integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" + integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== -lop@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.1.tgz#744f1696ef480e68ce1947fe557b09db5af2a738" - integrity sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ== +lop@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.2.tgz#c9c2f958a39b9da1c2f36ca9ad66891a9fe84640" + integrity sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw== dependencies: duck "^0.1.12" option "~0.2.1" underscore "^1.13.1" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== ltgt@2.2.1, ltgt@^2.1.2: version "2.2.1" @@ -6229,34 +6138,34 @@ ltgt@2.2.1, ltgt@^2.1.2: integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== magic-bytes.js@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz#c41cf4bc2f802992b05e64962411c9dd44fdef92" - integrity sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ== + version "1.12.1" + resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz#031fedceb1fc652c1ccd917c6b45a6e8d6554245" + integrity sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA== mailparser@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/mailparser/-/mailparser-3.7.1.tgz#4d0ea2eeb50a73dd10854a71ef1d4553bdce01cb" - integrity sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw== + version "3.7.2" + resolved "https://registry.yarnpkg.com/mailparser/-/mailparser-3.7.2.tgz#00feec656e23c0ae805163581b460c2f72ca75d1" + integrity sha512-iI0p2TCcIodR1qGiRoDBBwboSSff50vQAWytM5JRggLfABa4hHYCf3YVujtuzV454xrOP352VsAPIzviqMTo4Q== dependencies: - encoding-japanese "2.1.0" + encoding-japanese "2.2.0" he "1.2.0" html-to-text "9.0.5" iconv-lite "0.6.3" - libmime "5.3.5" + libmime "5.3.6" linkify-it "5.0.0" - mailsplit "5.4.0" - nodemailer "6.9.13" + mailsplit "5.4.2" + nodemailer "6.9.16" punycode.js "2.3.1" - tlds "1.252.0" + tlds "1.255.0" -mailsplit@5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/mailsplit/-/mailsplit-5.4.0.tgz#9f4692fadd9013e9ce632147d996931d2abac6ba" - integrity sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA== +mailsplit@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/mailsplit/-/mailsplit-5.4.2.tgz#ee2be344bb3511345c0bd6ea72e5657acb8cd83b" + integrity sha512-4cczG/3Iu3pyl8JgQ76dKkisurZTmxMrA4dj/e8d2jKYcFTZ7MxOzg1gTioTDMPuFXwTrVuN/gxhkrO7wLg7qA== dependencies: - libbase64 "1.2.1" - libmime "5.2.0" - libqp "2.0.1" + libbase64 "1.3.0" + libmime "5.3.6" + libqp "2.1.1" make-dir@^1.0.0: version "1.3.0" @@ -6265,22 +6174,15 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== mammoth@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.8.0.tgz#d8f1b0d3a0355fda129270346e9dc853f223028f" - integrity sha512-pJNfxSk9IEGVpau+tsZFz22ofjUsl2mnA5eT8PjPs2n0BP+rhVte4Nez6FdgEuxv3IGI3afiV46ImKqTGDVlbA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.9.0.tgz#71e34ca280735275788bfe95e653a058dcab4df2" + integrity sha512-F+0NxzankQV9XSUAuVKvkdQK0GbtGGuqVnND9aVf9VSeUA82LQa29GjLqYU6Eez8LHqSJG3eGiDW3224OKdpZg== dependencies: "@xmldom/xmldom" "^0.8.6" argparse "~1.0.3" @@ -6288,11 +6190,16 @@ mammoth@^1.8.0: bluebird "~3.4.0" dingbat-to-unicode "^1.0.1" jszip "^3.7.1" - lop "^0.4.1" + lop "^0.4.2" path-is-absolute "^1.0.0" underscore "^1.13.1" xmlbuilder "^10.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6305,27 +6212,27 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memory-cache@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" - integrity sha1-eJCwHVLADI68nVM+H46xfjA0hxo= + integrity sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA== memory-pager@^1.0.2: version "1.5.0" resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mime-db@1.52.0: version "1.52.0" @@ -6344,11 +6251,6 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -6357,7 +6259,7 @@ min-indent@^1.0.0: minimal-request-promise@^1.1.0: version "1.5.0" resolved "https://registry.yarnpkg.com/minimal-request-promise/-/minimal-request-promise-1.5.0.tgz#60f5d7f55b4026d197074e2e155626d4cc5c2ebc" - integrity sha1-YPXX9VtAJtGXB04uFVYm1MxcLrw= + integrity sha512-/yNNjR3sxetX7sdX1f9ttHfDjajNKpngpz9ir3jZwKAT+I4tfBOqAiFNIEdDthU/mTd4osaO1HuU/GwR8iNJyg== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" @@ -6376,17 +6278,24 @@ minimatch@4.2.1: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^3.0.0: version "3.3.6" @@ -6400,10 +6309,15 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minisearch@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.1.0.tgz#f5830e9109b5919ee7b291c29a304f381aa68770" - integrity sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA== + version "7.1.2" + resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.1.2.tgz#296ee8d1906cc378f7e57a3a71f07e5205a75df5" + integrity sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA== minizlib@^2.1.1: version "2.1.2" @@ -6469,9 +6383,9 @@ moderndash@4.0.0: type-fest "4.27.0" moment-timezone@^0.5.45: - version "0.5.45" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" - integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== + version "0.5.48" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" + integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== dependencies: moment "^2.29.4" @@ -6489,18 +6403,18 @@ mongodb-connection-string-url@^3.0.0: whatwg-url "^14.1.0 || ^13.0.0" mongodb@*, mongodb@^6.12.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.12.0.tgz#8b0bda1b18cbb3f0aec8ab4119c5dc535a43c444" - integrity sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA== + version "6.16.0" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.16.0.tgz#2a7a1986ec151d9c738fc8ce4cf4324c3f728a2f" + integrity sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw== dependencies: "@mongodb-js/saslprep" "^1.1.9" - bson "^6.10.1" + bson "^6.10.3" mongodb-connection-string-url "^3.0.0" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -6513,9 +6427,9 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multer@^1.4.5-lts.1: - version "1.4.5-lts.1" - resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" - integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + version "1.4.5-lts.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.2.tgz#340af065d8685dda846ec9e3d7655fcd50afba2d" + integrity sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A== dependencies: append-field "^1.0.0" busboy "^1.0.0" @@ -6551,10 +6465,10 @@ nanoid@3.3.1: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== -nanoid@^3.3.7: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== napi-macros@~2.0.0: version "2.0.0" @@ -6576,15 +6490,10 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== -node-addon-api@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.3.0.tgz#ec3763f18befc1cdf66d11e157ce44d5eddc0603" - integrity sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg== - -node-addon-api@^8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.2.1.tgz#43a993f110b88e22ba48bcd65e16b92165a6b002" - integrity sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA== +node-addon-api@^8.0.0, node-addon-api@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.3.1.tgz#53bc8a4f8dbde3de787b9828059da94ba9fd4eed" + integrity sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA== node-domexception@1.0.0: version "1.0.0" @@ -6603,7 +6512,7 @@ node-fetch@2.6.9: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: +node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -6628,26 +6537,26 @@ node-imap@^0.9.6: readable-stream "^3.6.0" utf7 "^1.0.2" -nodemailer@6.9.13: - version "6.9.13" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.13.tgz#5b292bf1e92645f4852ca872c56a6ba6c4a3d3d6" - integrity sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA== +nodemailer@6.9.16: + version "6.9.16" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.16.tgz#3ebdf6c6f477c571c0facb0727b33892635e0b8b" + integrity sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ== nodemon@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.16.tgz#d71b31bfdb226c25de34afea53486c8ef225fdef" - integrity sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w== + version "2.0.22" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" debug "^3.2.7" ignore-by-default "^1.0.1" - minimatch "^3.0.4" + minimatch "^3.1.2" pstree.remy "^1.1.8" semver "^5.7.1" + simple-update-notifier "^1.0.7" supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.5" - update-notifier "^5.1.0" noms@0.0.0: version "0.0.0" @@ -6657,68 +6566,46 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== oauth@0.10.x: - version "0.10.0" - resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.10.0.tgz#3551c4c9b95c53ea437e1e21e46b649482339c58" - integrity sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q== - -oauth@0.9.x: - version "0.9.15" - resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" - integrity sha1-vR/vr2hslrdUda7VGWQS/2DPucE= + version "0.10.2" + resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.10.2.tgz#fd7139b0ce1a1037bd11fa4e236afc588132418c" + integrity sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.1.tgz#28a661153bad7e470e4b01479ef1cb91ce511191" - integrity sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== officeparser@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/officeparser/-/officeparser-4.1.1.tgz#5c08eb3158c0f8d6d85f12e1e6a95b54f590a677" - integrity sha512-bOh7l6Bt/caeyU9t+9yGdQF2N30j8puR7PhXmSI/NqssHNnfnTLp1ehpBo4KuIMeOvzhr8mvkXHFpR2qhH1uhg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/officeparser/-/officeparser-4.2.0.tgz#6d0baf411bd21e7e31a4b1f206af7034a4506ca2" + integrity sha512-LXSfaET8ZOBNjmSev4K1N6AiKTaY7m9NkddeCaMUdEe5D/HUuv2byB8VoPIaiLldtKun0I92tbhO+VGDUr/aXQ== dependencies: "@xmldom/xmldom" "^0.8.10" - decompress "^4.2.0" + decompress "^4.2.1" file-type "^16.5.4" node-ensure "^0.0.0" - rimraf "^2.6.3" + rimraf "^5.0.10" oh-no-i-insist@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/oh-no-i-insist/-/oh-no-i-insist-1.1.1.tgz#af6f12e2d43366839bae45f8c870b976a11eee35" - integrity sha1-r28S4tQzZoObrkX4yHC5dqEe7jU= + integrity sha512-Jfc1rBoS9dMIz+OcWjUibUXQJ21ju1+4Mr0ZNAdGN8VfIU3nqt+unyWlcSjINo0VGwJBMQwkzddiytUdTkg9+w== on-finished@2.4.1: version "2.4.1" @@ -6735,7 +6622,7 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -6748,10 +6635,10 @@ open@^8.4.2: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.71.0: - version "4.73.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.73.1.tgz#532bd000d5f1a558e4fff1119da6749992ac41e4" - integrity sha512-nWImDJBcUsqrhy7yJScXB4+iqjzbUEgzfA3un/6UnHFdwWhjX24oztj69Ped/njABfOdLcO/F7CeWTI5dt8Xmg== +openai@^4.96.0: + version "4.97.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.97.0.tgz#4e2e85c79499c1d44b58f97b3a8ec1d6bfe403b3" + integrity sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -6771,11 +6658,6 @@ option@~0.2.1: resolved "https://registry.yarnpkg.com/option/-/option-0.2.4.tgz#fd475cdf98dcabb3cb397a3ba5284feb45edbfe4" integrity sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -6818,15 +6700,10 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== paillier-bigint@^3.4.3: version "3.4.3" @@ -6838,7 +6715,7 @@ paillier-bigint@^3.4.3: pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== pako@~1.0.2: version "1.0.11" @@ -6877,29 +6754,7 @@ passport-google-oauth20@^2.0.0: dependencies: passport-oauth2 "1.x.x" -passport-oauth2@1.x.x: - version "1.6.1" - resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.6.1.tgz#c5aee8f849ce8bd436c7f81d904a3cd1666f181b" - integrity sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ== - dependencies: - base64url "3.x.x" - oauth "0.9.x" - passport-strategy "1.x.x" - uid2 "0.0.x" - utils-merge "1.x.x" - -passport-oauth2@^1.5.0, passport-oauth2@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.7.0.tgz#5c4766c8531ac45ffe9ec2c09de9809e2c841fc4" - integrity sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ== - dependencies: - base64url "3.x.x" - oauth "0.9.x" - passport-strategy "1.x.x" - uid2 "0.0.x" - utils-merge "1.x.x" - -passport-oauth2@^1.6: +passport-oauth2@1.x.x, passport-oauth2@^1.5.0, passport-oauth2@^1.6, passport-oauth2@^1.6.1: version "1.8.0" resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.8.0.tgz#55725771d160f09bbb191828d5e3d559eee079c8" integrity sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA== @@ -6920,7 +6775,7 @@ passport-reddit@^1.1.0: passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ= + integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== passport@^0.5.2: version "0.5.3" @@ -6938,17 +6793,30 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== pause@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= + integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== pbkdf2@^3.1.2: version "3.1.2" @@ -6996,7 +6864,7 @@ pend@~1.2.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^1.1.1: version "1.1.1" @@ -7035,12 +6903,17 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + postcss@^8.3.11: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + version "8.5.3" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== dependencies: - nanoid "^3.3.7" + nanoid "^3.3.8" picocolors "^1.1.1" source-map-js "^1.2.1" @@ -7150,16 +7023,16 @@ pouchdb@^9.0.0: uuid "8.3.2" vuvuzela "1.0.3" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + protobufjs@7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" @@ -7197,9 +7070,11 @@ prr@~1.0.1: integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" pstree.remy@^1.1.8: version "1.1.8" @@ -7215,9 +7090,9 @@ pump@^2.0.0: once "^1.3.1" pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7239,43 +7114,31 @@ punycode.js@2.3.1: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -punycode@^2.3.1: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -qs@6.10.3, qs@^6.9.4: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" -qs@^6.12.3, qs@^6.7.0: - version "6.12.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754" - integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ== +qs@^6.12.3, qs@^6.7.0, qs@^6.9.4: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" qs@~6.5.2: version "6.5.3" @@ -7285,7 +7148,7 @@ qs@~6.5.2: querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" @@ -7300,7 +7163,7 @@ queue-microtask@^1.2.3: random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs= + integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== randombytes@^2.1.0: version "2.1.0" @@ -7314,26 +7177,16 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - readable-stream@1.1.14: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -7344,7 +7197,7 @@ readable-stream@1.1.14: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@2 || 3", readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -7353,20 +7206,7 @@ readable-stream@1.1.14: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -7379,14 +7219,16 @@ readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" readable-stream@~0.0.2: version "0.0.4" @@ -7404,11 +7246,11 @@ readable-stream@~1.0.31: string_decoder "~0.10.x" readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz#392ba37707af5bf62d725c36c1b5d6ef4119eefc" + integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== dependencies: - readable-stream "^3.6.0" + readable-stream "^4.7.0" readdirp@~3.6.0: version "3.6.0" @@ -7427,20 +7269,6 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - request@^2.81.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -7470,7 +7298,7 @@ request@^2.81.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -7482,29 +7310,22 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== +rimraf@^5.0.10: + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== dependencies: - glob "^7.1.3" + glob "^10.3.7" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" @@ -7514,6 +7335,22 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rpc-websockets@^9.0.2: + version "9.1.1" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.1.1.tgz#5764336f3623ee1c5cc8653b7335183e3c0c78bd" + integrity sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/uuid" "^8.3.4" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + rxjs@7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -7526,20 +7363,29 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-html@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.13.1.tgz#b4639b0a09574ab62b1b353cb99b1b87af742834" - integrity sha512-ZXtKq89oue4RP7abL9wp/9URJcqQNABB5GGJ2acW1sdO8JTVl92f4ygD7Yc9Ze09VAZhnt2zegeU0tbNsdcLYg== + version "2.16.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.16.0.tgz#2b9973b63fa42e3580020499cbda1d894b3642bc" + integrity sha512-0s4caLuHHaZFVxFTG74oW91+j6vW7gKbGD6CD2+miP73CE6z6YtOBN0ArtLd2UGyi4IC7K47v3ENUbQX4jV3Mg== dependencies: deepmerge "^4.2.2" escape-string-regexp "^4.0.0" @@ -7551,12 +7397,12 @@ sanitize-html@^2.13.1: sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== scrypt-js@3.0.1: version "3.0.1" @@ -7577,44 +7423,30 @@ selderee@^0.11.0: dependencies: parseley "^0.12.0" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.4: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^7.5.4, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -7642,22 +7474,22 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" set-cookie-parser@^2.4.8: version "2.7.1" resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -7694,29 +7526,74 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + shebang-regex "^3.0.0" -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + +simple-wcswidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" + integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== source-map-js@^1.2.1: version "1.2.1" @@ -7761,9 +7638,9 @@ ssf@~0.11.2: frac "~1.1.2" sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7785,19 +7662,31 @@ stopword@^1.0.11: resolved "https://registry.yarnpkg.com/stopword/-/stopword-1.0.11.tgz#2f9f36558bf1ad8c9e1197e572442e9b8814f153" integrity sha512-rMBuk91/PTdV7GpVIwlZRLGcmZ9OMbTM+KXJN19oKIkgns+EhTVEzXfb4q8/v4ExuoGxNSBSHmuzt+DUijuQqQ== +stream-chain@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" + integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== + +stream-json@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.9.1.tgz#e3fec03e984a503718946c170db7d74556c2a187" + integrity sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw== + dependencies: + stream-chain "^2.2.5" + stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== -streamroller@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.1.tgz#679aae10a4703acdf2740755307df0a05ad752e6" - integrity sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ== +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== dependencies: - date-format "^4.0.10" + date-format "^4.0.14" debug "^4.3.4" - fs-extra "^10.1.0" + fs-extra "^8.1.0" streamsearch@^1.1.0: version "1.1.0" @@ -7814,7 +7703,16 @@ string-strip-html@8.5.0: resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.5.0.tgz#5e239fe84016fad7b33ca02d23c591f1ccb6af75" integrity sha512-5ICsK1B1j0A3AF1d45m0sqQCcmi1Q+t1QpF+b794LO5FTHV+ITkGR5C+UCDJQZgs5LMuRruqr6j48PxQVIurJQ== -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7823,7 +7721,16 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -7842,6 +7749,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7849,10 +7763,17 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-dirs@^2.0.0: version "2.1.0" @@ -7873,15 +7794,10 @@ strip-json-comments@3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== strtok3@^6.2.4: version "6.3.0" @@ -7896,6 +7812,11 @@ sturdy-websocket@^0.2.1: resolved "https://registry.yarnpkg.com/sturdy-websocket/-/sturdy-websocket-0.2.1.tgz#20a58fd53372ef96eaa08f3c61c91a10b07c7c05" integrity sha512-NnzSOEKyv4I83qbuKw9ROtJrrT6Z/Xt7I0HiP/e6H6GnpeTDvzwGIGeJ8slai+VwODSHQDooW2CAilJwT9SpRg== +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -7928,9 +7849,9 @@ table-layout@^1.0.2: wordwrapjs "^4.0.0" tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + version "2.1.2" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5" + integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" @@ -7974,24 +7895,29 @@ tar@^6.1.15: yallist "^4.0.0" tdlib-native@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tdlib-native/-/tdlib-native-3.1.0.tgz#c34f18ee55bf34713ffe324f19ade125ae1d0d51" - integrity sha512-ym2ZCaauLbYfnE9CKGzyHHwLu0UB142Di5aLOEmgAAZbZb3KE1ly5S46bephMjipp/iaECQA0Q8TrP8A5ltydg== + version "3.5.0" + resolved "https://registry.yarnpkg.com/tdlib-native/-/tdlib-native-3.5.0.tgz#74bdb643ee8de4f7f707fd99c2340ad088d7091a" + integrity sha512-cihWJxWsI+NMITtwhLS1yUMwwjnuydrTZ6rgNPwDhdS3B/cN3EmflUnGoZZbgG8+1+8t2O6HgA7OvH3lqUWAtg== dependencies: - debug "^4.3.7" + debug "^4.4.0" detect-libc "^2.0.3" - node-addon-api "^8.2.1" + node-addon-api "^8.3.1" optionalDependencies: - "@tdlib-native/tdjson-android-arm64-glibc" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-android-arm64-musl" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-darwin-arm64" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-darwin-x64" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-linux-arm64-glibc" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-linux-arm64-musl" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-linux-x64-glibc" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-linux-x64-musl" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-win32-ia32" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" - "@tdlib-native/tdjson-win32-x64" "1.8.37-commit.c1fea0f26355d94842f25651edc154842563e97b" + "@tdlib-native/tdjson-android-arm64-glibc" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-android-arm64-musl" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-darwin-arm64" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-darwin-x64" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-linux-arm64-glibc" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-linux-arm64-musl" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-linux-x64-glibc" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-linux-x64-musl" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-win32-ia32" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + "@tdlib-native/tdjson-win32-x64" "1.8.46-commit.b498497bbfd6b80c86f800b3546a0170206317d3" + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== through2@3.0.2: version "3.0.2" @@ -8015,25 +7941,20 @@ through@^2.3.8: integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiktoken@^1.0.10: - version "1.0.17" - resolved "https://registry.yarnpkg.com/tiktoken/-/tiktoken-1.0.17.tgz#53b9b38b8b1a9c6996cded21f6ef0ff473fae265" - integrity sha512-UuFHqpy/DxOfNiC3otsqbx3oS6jr5uKdQhB/CvDEroZQbVHt+qAK+4JbIooabUWKU9g6PpsFylNu9Wcg4MxSGA== + version "1.0.21" + resolved "https://registry.yarnpkg.com/tiktoken/-/tiktoken-1.0.21.tgz#434f4c67ccda114cdfb19a180b93d9be8bc396be" + integrity sha512-/kqtlepLMptX0OgbYD9aMYbM7EFrMZCL7EoHM8Psmg2FuhXoo/bH64KqOiZGGwa6oS9TPdSEDKBnV2LuB8+5vQ== -tlds@1.252.0: - version "1.252.0" - resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.252.0.tgz#71d9617f4ef4cc7347843bee72428e71b8b0f419" - integrity sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ== +tlds@1.255.0: + version "1.255.0" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.255.0.tgz#53c2571766c10da95928c716c48dfcf141341e3f" + integrity sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw== to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -8055,20 +7976,19 @@ token-types@^4.1.1: ieee754 "^1.2.1" touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tough-cookie@~2.5.0: version "2.5.0" @@ -8078,10 +7998,10 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== dependencies: punycode "^2.3.1" @@ -8142,34 +8062,29 @@ ts-textrank@^1.0.3: transliteration "^2.2.0" tsconfig-paths@^3.5.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== -tslib@^2.1.0: +tslib@^2.1.0, tslib@^2.6.2, tslib@^2.6.3, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tslib@^2.6.2, tslib@^2.6.3: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" @@ -8181,7 +8096,7 @@ tweetnacl-util@^0.15.1: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== tweetnacl@^1.0.3: version "1.0.3" @@ -8189,9 +8104,9 @@ tweetnacl@^1.0.3: integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== twitter-api-v2@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.14.0.tgz#2aa186087aae58083dcbbafef8727b42cb703483" - integrity sha512-kBc0X6hTl0qWYTSNH9Gp87S6d9wIM2qOxHg7jlWH054HnMPC8XMcttsrKyPwP8SVha28dt5DPQvlqhPxsWRC+Q== + version "1.22.0" + resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.22.0.tgz#72dc04821d751c964daee1406619245e44e24ea3" + integrity sha512-KlcRL9vcBzjeS/PwxX33NziP+SHp9n35DOclKtpOmnNes7nNVnK7WG4pKlHfBqGrY5kAz/8J5ERS8DWkYOaiWw== type-detect@^4.0.8: version "4.1.0" @@ -8203,11 +8118,6 @@ type-fest@4.27.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.27.0.tgz#57329aae32e7b27b942b961e3ef861f0873c4b1b" integrity sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-is@1.6.18, type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -8233,15 +8143,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^5.1.6: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== - -typescript@^5.6.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== +typescript@^5.1.6, typescript@^5.6.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== typical@^4.0.0: version "4.0.0" @@ -8300,63 +8205,41 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -undici@6.19.8: +undici-types@~6.19.2: version "6.19.8" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" - integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -universalify@^0.1.0, universalify@^0.1.2: +undici@6.21.1: + version "6.21.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05" + integrity sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ== + +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -8364,13 +8247,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -8387,7 +8263,7 @@ url-template@^2.0.8: url@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== dependencies: punycode "1.3.2" querystring "0.2.0" @@ -8417,17 +8293,28 @@ utf7@^1.0.2: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" utils-merge@1.0.1, utils-merge@1.x.x: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== uuid@8.3.2, uuid@^8.3.2: version "8.3.2" @@ -8445,9 +8332,9 @@ uuid@^10.0.0: integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== uuid@^11.0.5: - version "11.0.5" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62" - integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA== + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== uuid@^3.3.2: version "3.4.0" @@ -8462,12 +8349,12 @@ uuid@^9.0.0, uuid@^9.0.1: vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -8511,11 +8398,11 @@ websocket@^1.0.34: yaeti "^0.0.6" "whatwg-url@^14.1.0 || ^13.0.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.1.0.tgz#fffebec86cc8e6c2a657e50dc606207b870f0ab3" - integrity sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w== + version "14.2.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== dependencies: - tr46 "^5.0.0" + tr46 "^5.1.0" webidl-conversions "^7.0.0" whatwg-url@^5.0.0: @@ -8526,20 +8413,26 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@2.0.2, which@^2.0.2: +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - wmf@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" @@ -8563,6 +8456,15 @@ workerpool@6.2.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -8572,20 +8474,19 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-stream@~0.4.3: version "0.4.3" @@ -8604,15 +8505,20 @@ ws@8.17.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== -ws@^8.16.0: +ws@8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.17.0, ws@^8.5.0: + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== xlsx@^0.18.5: version "0.18.5" @@ -8627,23 +8533,23 @@ xlsx@^0.18.5: wmf "~1.0.1" word "~0.3.0" -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== +xml2js@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== dependencies: sax ">=0.6.0" - xmlbuilder "~9.0.1" + xmlbuilder "~11.0.0" xmlbuilder@^10.0.0: version "10.1.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xoauth2@^1.2.0: version "1.2.0" @@ -8671,9 +8577,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" - integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + version "2.7.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== yargs-parser@20.2.4: version "20.2.4" @@ -8737,7 +8643,7 @@ yauzl@^2.4.2: yn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= + integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== yocto-queue@^0.1.0: version "0.1.0" @@ -8754,11 +8660,11 @@ zip-stream@^2.1.2: readable-stream "^3.4.0" zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.5: - version "3.23.5" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.5.tgz#ec23def47dcafe3a4d640eba6a346b34f9a693a5" - integrity sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA== + version "3.24.5" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3" + integrity sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g== zod@^3.22.3, zod@^3.22.4, zod@^3.23.8: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== + version "3.24.3" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.3.tgz#1f40f750a05e477396da64438e0e1c0995dafd87" + integrity sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg== From 38e620f901a5111f1d74e0a57bea0eb298ada65a Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 5 May 2025 15:15:54 +0300 Subject: [PATCH 17/61] chore: remove devvit --- package.json | 3 +- src/providers/reddit/api.ts | 47 +++---- yarn.lock | 257 +++++++++++++++++++++--------------- 3 files changed, 173 insertions(+), 134 deletions(-) diff --git a/package.json b/package.json index c00911f..09b2dab 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "core-cli": "node node_modules/@verida/cli-tools/dist/exec.js", "dev": "yarn build && yarn symlink-static && nodemon src/server.js", "symlink-static": "rm -rf dist/web && ln -s ../src/web dist/web", - "build": "rm -rf dist && tsc && rm -rf dist/assets && cp -R assets dist/ && cp -R src/web dist/web", + "build": "rm -rf dist && tsc --noCheck && rm -rf dist/assets && cp -R assets dist/ && cp -R src/web dist/web", "prestart": "yarn build", "start": "node dist/server.js", "tests": "ts-mocha './tests/**/*.ts'", @@ -34,7 +34,6 @@ "dependencies": { "@anthropic-ai/tokenizer": "^0.0.4", "@aws-sdk/client-bedrock-runtime": "^3.693.0", - "@devvit/public-api": "^0.11.9", "@langchain/aws": "^0.1.2", "@langchain/community": "^0.3.16", "@langchain/core": "^0.3.19", diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 31ec999..416aa37 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -7,6 +7,7 @@ import { User, Comment, } from "@devvit/public-api"; +import { FlairListResponse } from "@devvit/protos"; import axios, { Axios, AxiosResponse } from "axios"; const OAUTH_ENDPOINT = "https://oauth.reddit.com/"; @@ -68,37 +69,28 @@ export class RedditApi { Devvit.configure({ redditAPI: true, }); - // @ts-ignore Devvit exports RedditAPIClient as type - this.devvitClient = new RedditAPIClient({}); - } - - // Devvit is under development - public async getClient(useDevvit: boolean = false): Promise { - if (this.client) { - return this.client; - } + // this.devvitClient = Devvit.use() try { - if (useDevvit) { - // this.client = new Devvit(); - } else { - this.client = axios.create(); - - this.client.interceptors.request.use( - ...requestInterceptor(this.clientId) - ); + this.client = axios.create(); - // Add a response interceptor - this.client.interceptors.response.use(...responseInterceptor); - } + this.client.interceptors.request.use( + ...requestInterceptor(this.clientId) + ); - return this.client; + // Add a response interceptor + this.client.interceptors.response.use(...responseInterceptor); } catch (err: any) { - console.error(`Telegram library error: ${err.message}`); + console.error(`Reddit library error: ${err.message}`); throw new Error(`Internal error with Telegram library`); } } + // Devvit is under development + public getClient(): Devvit | Axios { + return this.client; + } + /** * * @summary This functions makes a request to the reddit API endpoint. It assumes that requested data is either a single entity or a listing @@ -118,9 +110,12 @@ export class RedditApi { ): Promise { let terminationCriteriaMet = true; let data: Type[] = []; - let pagination: PaginationParams = config.pagination; + let pagination: PaginationParams = config?.pagination; - const myInterceptor = axios.interceptors.request.use(...customInterceptor); + let myInterceptor; + if (customInterceptor) { + myInterceptor = axios.interceptors.request.use(...customInterceptor); + } let action; switch (method) { @@ -146,12 +141,13 @@ export class RedditApi { ...pagination, }, }); + console.log(resp.data); data.push(resp.data.data); terminationCriteriaMet = resp.data.terminationCriteriaMet; pagination = resp.data.pagination; } - this.client.interceptors.request.eject(myInterceptor); + if (myInterceptor) this.client.interceptors.request.eject(myInterceptor); return data; } @@ -194,6 +190,7 @@ export class RedditApi { public async getMe(): Promise { // TODO Check if getAppUser returns the same const user = await this._call("GET", "/api/v1/me.json"); + console.log(this.clientId) return user[0]; } diff --git a/yarn.lock b/yarn.lock index 3c50ebc..e2ebacc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -577,41 +577,62 @@ binary-case "^1.0.0" type-is "^1.6.16" -"@devvit/metrics@0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@devvit/metrics/-/metrics-0.11.13.tgz#ceb1884636044acd10d58ca6882563b3f83a4796" - integrity sha512-u/oOlnslJ8Rcswd6C3+XlAZDp0b6WRoz0Y0chLpSPls4/KNrK0hrSlpjfvQ+Bp3E/qZkSHYv1HcxoQ+wtZkkbQ== - dependencies: - "@devvit/protos" "0.11.13" - -"@devvit/protos@0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@devvit/protos/-/protos-0.11.13.tgz#ec5b55147ca12d8b991f70c5753f153ce954a241" - integrity sha512-cMAyTwx01ZBDf/iLufzLlCgPIqYXNMBc2DKF1ZgGnhkEyiE4jzwEzdFGBBTnpY2sBnBvNNMt33vdDgPz+nck9g== - dependencies: - protobufjs "7.3.2" - rxjs "7.8.1" - -"@devvit/public-api@^0.11.9": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@devvit/public-api/-/public-api-0.11.13.tgz#67b611cede82c7c3195238721eb33ba5ca0a176b" - integrity sha512-GLCtDqGvgUA1XyuLXLR8rNgq9UU2e7U8OBZMS2+CdwjfcoZm8M0XoDU29aXqLIxsEx0r2a7ushrlAkZMTg4B7A== - dependencies: - "@devvit/metrics" "0.11.13" - "@devvit/protos" "0.11.13" - "@devvit/shared-types" "0.11.13" - base64-js "1.5.1" - clone-deep "4.0.1" - moderndash "4.0.0" - -"@devvit/shared-types@0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@devvit/shared-types/-/shared-types-0.11.13.tgz#b66ce0b57397a4a74a5e3e44ca012d7ec4d1fabc" - integrity sha512-DoXFJoqS2QBetH8mvR1VimN0UO1+E1SDkM+FbY4C/K10vjCVkE8nykDdxts9mLAqycbwS/rxDP2IhtdfjgOJkQ== - dependencies: - "@devvit/protos" "0.11.13" - jsonschema "1.4.1" - uuid "9.0.0" +"@devvit/plugins@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/plugins/-/plugins-0.9.0.tgz#37febc758fb96e7c5d54a5a385eb932b3b1d205e" + integrity sha512-xYRpCfQBopCzmslNAN7zytZINPQhX/90CzxKcFZ47484LtU9xwgUk+s1OEvqCWnfyPz4X1moIdF8VMUBKa/e/A== + dependencies: + "@devvit/protos" "0.9.0" + +"@devvit/protos@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/protos/-/protos-0.9.0.tgz#c8b0cf2ae61e2977a28b8bc9959ff858cda69f6e" + integrity sha512-+0YVBTevAEDoItcUH0B6qCUjEBw4rupZr4WtpMarHhoHd+N6tItv/+Z+P9uLq0JQPSiznYWT71byzJJjTd3DPQ== + dependencies: + glob "^8.0.3" + protobufjs "7.1.2" + rxjs "7.5.7" + +"@devvit/public-api@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/public-api/-/public-api-0.9.0.tgz#f0a66d9635800cd65b4dc304b8dcc471c0eafb59" + integrity sha512-kEJU7C5KpFE6W0JThs3BoTveuXEKxxRkYqjLv+H/Z82YRKSQEvgW9uJTQ/vNy4STWbcyFeuy8Vn/Is/dnXjIiQ== + dependencies: + "@devvit/protos" "0.9.0" + "@devvit/runtimes" "0.9.0" + "@devvit/shared-types" "0.9.0" + tslib "2.4.1" + +"@devvit/runtimes@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/runtimes/-/runtimes-0.9.0.tgz#5b9025caf2813ff9711853439f368cfac424f0a7" + integrity sha512-Wd+4GKukWk62uFEaXHu5S6S5H12hw8KFehtomnN6LcMyaDAAnU/2IQEv+lKNRtSadpQmZP3e0bx1efIxfQD8VQ== + dependencies: + "@devvit/plugins" "0.9.0" + "@devvit/protos" "0.9.0" + "@devvit/shared-types" "0.9.0" + "@devvit/web-worker" "0.9.0" + buffer "6.0.3" + cron-parser "4.7.1" + grpc-web "^1.3.1" + lru-cache "^7.10.1" + node-localstorage "2.2.1" + rxjs "7.5.7" + undici "5.21.2" + uuid "8.3.2" + ws "8.11.0" + +"@devvit/shared-types@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/shared-types/-/shared-types-0.9.0.tgz#f5e47d493a5e68c6c5618b150c38e6be6f9288c1" + integrity sha512-aHeO3OvnrSn8EHlU7pNVhgxQBaBH34gyBVn9ukNYZsGMH5W1tRnsHKYDgGmbrpH5ZQLlWyy7zn4sjfz1bmv70Q== + dependencies: + "@devvit/protos" "0.9.0" + +"@devvit/web-worker@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@devvit/web-worker/-/web-worker-0.9.0.tgz#2f42c492d1fb38456ca0cbe3cec3d1a85be2a6e5" + integrity sha512-wDBMLHyANHLY2nah+1y16xAU5wjlJBDC6/uIeXnjgE8ybDHhcqbmQCdqo2nHEg33DzK9xsPQlb+G8jdi5QHf/w== "@discordjs/builders@^1.11.2": version "1.11.2" @@ -3290,7 +3311,7 @@ base-x@^4.0.0: resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== -base64-js@1.5.1, base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3538,7 +3559,7 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" -busboy@^1.0.0: +busboy@^1.0.0, busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== @@ -3721,15 +3742,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - closevector-common@0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/closevector-common/-/closevector-common-0.1.3.tgz#a98ec1589974a66cdd319a5a8a9b5bd54f6afe0a" @@ -3992,6 +4004,13 @@ create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +cron-parser@4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.7.1.tgz#1e325a6a18e797a634ada1e2599ece0b6b5ed177" + integrity sha512-WguFaoQ0hQ61SgsCZLHUcNbAvlK0lypKXu62ARguefYmjzaOXIVRNrAmyXzabTwUn4sQvQLkk6bjH+ipGfw8bA== + dependencies: + luxon "^3.2.1" + cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -5143,6 +5162,17 @@ glob@^7.0.5, glob@^7.1.2, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + google-auth-library@^9.0.0, google-auth-library@^9.7.0: version "9.15.1" resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" @@ -5185,7 +5215,7 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5209,6 +5239,11 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +grpc-web@^1.3.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/grpc-web/-/grpc-web-1.5.0.tgz#154e4007ab59a94bf7726b87ef6c5bd8815ecf6e" + integrity sha512-y1tS3BBIoiVSzKTDF3Hm7E8hV2n7YY7pO0Uo7depfWJqKzWE+SKr0jvHNIJsJJYILQlpYShpi/DRJJMbosgDMQ== + gtoken@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" @@ -5317,11 +5352,6 @@ hnswlib-node@^3.0.0: bindings "^1.5.0" node-addon-api "^8.0.0" -hotscript@1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/hotscript/-/hotscript-1.0.13.tgz#6eb5de757e9b33444ffc22555e98dbc17fa31fb4" - integrity sha512-C++tTF1GqkGYecL+2S1wJTfoH6APGAsbb7PAWQ3iVIwgG/EFseAfEVOKFgAFq4yK3+6j1EjUD4UQ9dRJHX/sSQ== - html-to-text@9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" @@ -5425,6 +5455,11 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5525,13 +5560,6 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -5601,11 +5629,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -5738,11 +5761,6 @@ jsonpointer@^5.0.1: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jsonschema@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== - jsonwebtoken@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" @@ -5813,11 +5831,6 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - "langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.6: version "0.3.24" resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.24.tgz#24c5e16f7a43be8ce54d32079ea8dc8087c56777" @@ -6132,11 +6145,21 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^7.10.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + ltgt@2.2.1, ltgt@^2.1.2: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== +luxon@^3.2.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" + integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== + magic-bytes.js@^1.10.0: version "1.12.1" resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz#031fedceb1fc652c1ccd917c6b45a6e8d6554245" @@ -6285,6 +6308,13 @@ minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -6374,14 +6404,6 @@ mocha@^9.2.1: yargs-parser "20.2.4" yargs-unparser "2.0.0" -moderndash@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/moderndash/-/moderndash-4.0.0.tgz#f82a0e935eaf587cdd9d9ab1997ebc120b485de6" - integrity sha512-77kEJCsBo3YzqIrO4ZWHo1h7q8f8ZIRxQ0DE0fEvj3rZWsfTMLeRzctBjkz2zKM1BAIQsOqB79jm3dZ4RDFmqw== - dependencies: - hotscript "1.0.13" - type-fest "4.27.0" - moment-timezone@^0.5.45: version "0.5.48" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" @@ -6537,6 +6559,13 @@ node-imap@^0.9.6: readable-stream "^3.6.0" utf7 "^1.0.2" +node-localstorage@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-localstorage/-/node-localstorage-2.2.1.tgz#869723550a4883e426cb391d2df0b563a51c7c1c" + integrity sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw== + dependencies: + write-file-atomic "^1.1.4" + nodemailer@6.9.16: version "6.9.16" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.16.tgz#3ebdf6c6f477c571c0facb0727b33892635e0b8b" @@ -7033,10 +7062,10 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -protobufjs@7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" - integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== +protobufjs@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.1.2.tgz#a0cf6aeaf82f5625bffcf5a38b7cd2a7de05890c" + integrity sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -7351,10 +7380,10 @@ rpc-websockets@^9.0.2: bufferutil "^4.0.1" utf-8-validate "^5.0.2" -rxjs@7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== +rxjs@7.5.7: + version "7.5.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" + integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== dependencies: tslib "^2.1.0" @@ -7519,13 +7548,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -7595,6 +7617,11 @@ simple-wcswidth@^1.0.1: resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== + source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -8071,6 +8098,11 @@ tsconfig-paths@^3.5.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + tslib@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" @@ -8113,11 +8145,6 @@ type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== -type-fest@4.27.0: - version "4.27.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.27.0.tgz#57329aae32e7b27b942b961e3ef861f0873c4b1b" - integrity sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw== - type-is@1.6.18, type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -8215,6 +8242,13 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== +undici@5.21.2: + version "5.21.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.21.2.tgz#329f628aaea3f1539a28b9325dccc72097d29acd" + integrity sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ== + dependencies: + busboy "^1.6.0" + undici@6.21.1: version "6.21.1" resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05" @@ -8321,11 +8355,6 @@ uuid@8.3.2, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - uuid@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" @@ -8488,6 +8517,15 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^1.1.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + write-stream@~0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" @@ -8500,6 +8538,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + ws@8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" From cbc3a15a1518900f32756c07dce5d6dbba740c2c Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 14:55:07 +0300 Subject: [PATCH 18/61] chore: move types --- src/providers/reddit/reddit.d.ts | 18 ---- src/providers/reddit/types.ts | 137 +++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 18 deletions(-) delete mode 100644 src/providers/reddit/reddit.d.ts create mode 100644 src/providers/reddit/types.ts diff --git a/src/providers/reddit/reddit.d.ts b/src/providers/reddit/reddit.d.ts deleted file mode 100644 index c2c77b6..0000000 --- a/src/providers/reddit/reddit.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BaseHandlerConfig } from "../../interfaces" - -export enum RedditChatType { - INBOX = "chatTypeInbox", - UNREAD = "chatTypeUnread", - SENT = "chatTypeSent", -} - -export interface RedditConfig extends BaseHandlerConfig { - apiId: number - apiHash: string - maxSyncLoops: number - // What is the maximum number of days to backdate - messageMaxAgeDays: number, - // Maximum number of messages to process in a given batch - messageBatchSize: number - useDbPos: boolean -} diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts new file mode 100644 index 0000000..7ad0c51 --- /dev/null +++ b/src/providers/reddit/types.ts @@ -0,0 +1,137 @@ +import { BaseHandlerConfig } from "../../interfaces" + +export enum RedditChatType { + INBOX = "chatTypeInbox", + UNREAD = "chatTypeUnread", + SENT = "chatTypeSent", +} + +export interface RedditConfig extends BaseHandlerConfig { + apiId: number + apiHash: string + maxSyncLoops: number + // What is the maximum number of days to backdate + messageMaxAgeDays: number, + // Maximum number of messages to process in a given batch + messageBatchSize: number + useDbPos: boolean +} + +export type User = { + verified: boolean; + is_blocked: boolean; + coins: number; + id: string; + over_18: boolean; + is_gold: boolean; + is_mod: boolean; + is_suspended: boolean; + has_stripe_subscription: boolean; + has_android_subscription: boolean; + awarder_karma: number; + awardee_karma: number; + suspension_expiration_utc: number; + icon_img: string; + pref_nightmode: boolean; + hide_from_robots: boolean; + modhash: string; + link_karma: number; + force_password_reset: boolean; + total_karma: number; + inbox_count: number; + pref_top_karma_subreddits: boolean; + has_mail: boolean; + name: string; + created: number; + has_verified_email: boolean; + gold_creddits: number; + created_utc: number; + has_ios_subscription: boolean; + pref_show_twitter: boolean; + comment_karma: number; + accept_followers: boolean; + has_subscribed: boolean; +}; + +export type Comment = { + subreddit_id: string; + approved_at_utc: boolean; + author_is_blocked: boolean; + link_title: string; + mod_reason_by: null; + banned_by: null; + ups: number; + num_reports: null; + author_flair_type: "richtext"; + total_awards_received: number; + subreddit: string; + link_author: string; + likes: boolean; + replies: string; + user_reports: []; + saved: boolean; + id: string; + banned_at_utc: number | null; + mod_reason_title: string | null; + gilded: number; + archived: boolean; + no_follow: boolean; + author: string; + num_comments: number; + parent_id: string; + score: number; + author_fullname: string;// "t2_wqn83kvnz"; + over_18: boolean; + report_reasons: string | null; + removal_reason: string | null; + approved_by: string | null; + controversiality: number; + body: string; + edited: boolean; + top_awarded_type: null; + downs: number; + author_flair_css_class: null; + is_submitter: boolean; + collapsed: boolean; + author_flair_richtext: [ + { + e: "text"; + t: string; + } + ]; + author_patreon_flair: boolean; + body_html: string; + gildings: {}; + collapsed_reason: string | null; + distinguished: string | null; + associated_award: string | null; + stickied: boolean; + author_premium: boolean; + can_gild: boolean; + // TODO do this for other _id + link_id: `t${number}_${string}`; + unrepliable_reason: string | null; + author_flair_text_color: string; + score_hidden: boolean; + permalink: "/r/${string}/comments/${string}/_/${string}/"; + subreddit_type: "public"; + link_permalink: "https://www.reddit.com/r/${string}/comments/${string}/_/"; + name: "t${number}_${number}"; + created: number; + subreddit_name_prefixed: "r/${string}"; + author_flair_text: string; + treatment_tags: []; + rte_mode: "richtext"; + created_utc: number; + awarders: []; + all_awardings: []; + locked: boolean; + author_flair_background_color: ""; + collapsed_because_crowd_control: null; + mod_reports: []; + quarantine: boolean; + mod_note: null; + link_url: "https://v.redd.it/${reddit}"; + author_flair_template_id: null; +}; + From aaf4720a3c9f000f56dda779cc7698891fd24d2a Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 19:32:53 +0300 Subject: [PATCH 19/61] chore: move types --- src/providers/reddit/types.ts | 86 +++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 7ad0c51..b7e354f 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -1,23 +1,42 @@ -import { BaseHandlerConfig } from "../../interfaces" +import { BaseHandlerConfig } from "../../interfaces"; export enum RedditChatType { - INBOX = "chatTypeInbox", - UNREAD = "chatTypeUnread", - SENT = "chatTypeSent", + INBOX = "chatTypeInbox", + UNREAD = "chatTypeUnread", + SENT = "chatTypeSent", } +type CommentPrefix = "t1"; +type AccountPrefix = "t2"; +type LinkPrefix = "t3"; +type MessagePrefix = "t4"; +type SubredditPrefix = "t5"; +type AwardPrefix = "t6"; + +export type EntityPrefixes = + | CommentPrefix + | AccountPrefix + | LinkPrefix + | MessagePrefix + | SubredditPrefix + | AwardPrefix; + +// See here: https://www.reddit.com/dev/api/#fullnames +export type EntityFullname = `${EntityPrefixes}_${string}`; + export interface RedditConfig extends BaseHandlerConfig { - apiId: number - apiHash: string - maxSyncLoops: number - // What is the maximum number of days to backdate - messageMaxAgeDays: number, - // Maximum number of messages to process in a given batch - messageBatchSize: number - useDbPos: boolean + apiId: number; + apiHash: string; + maxSyncLoops: number; + // What is the maximum number of days to backdate + messageMaxAgeDays: number; + // Maximum number of messages to process in a given batch + messageBatchSize: number; + useDbPos: boolean; } -export type User = { +// 'Account' is name of the type, but 'User' is the name of the entity +export type Account = { verified: boolean; is_blocked: boolean; coins: number; @@ -80,7 +99,7 @@ export type Comment = { num_comments: number; parent_id: string; score: number; - author_fullname: string;// "t2_wqn83kvnz"; + author_fullname: string; // "t2_wqn83kvnz"; over_18: boolean; report_reasons: string | null; removal_reason: string | null; @@ -93,12 +112,10 @@ export type Comment = { author_flair_css_class: null; is_submitter: boolean; collapsed: boolean; - author_flair_richtext: [ - { - e: "text"; - t: string; - } - ]; + author_flair_richtext: { + e: "text"; + t: string; + }[]; author_patreon_flair: boolean; body_html: string; gildings: {}; @@ -135,3 +152,32 @@ export type Comment = { author_flair_template_id: null; }; +// API types +export interface ListingType { + after: EntityFullname; + dist: number; + children: { kind: EntityPrefixes; data: Type }[]; +} + +export type BaseRequestConfig = { + count: number; + max_replies?: number; + pagination?: PaginationParams; +}; + +export type PaginationParams = { + before?: EntityFullname; + after?: EntityFullname; + afterData?: number; + beforeData?: number; +}; + +export type UserWhereConfig = { + // an integer between 2 and 10 + // context: ? + sort: "hot" | "new" | "top" | "controversial"; + t: "hour" | " day" | " week" | " month" | " year" | " all"; + type: "links" | "comments"; + // Expand subreddits + sr_details: boolean; +} & BaseRequestConfig; From 228f267bfd967ccc9ef105ee44ed4fc6139a482f Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 20:07:48 +0300 Subject: [PATCH 20/61] chore: add subreddit --- src/providers/reddit/types.ts | 110 ++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index b7e354f..5a50bba 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -152,6 +152,116 @@ export type Comment = { author_flair_template_id: null; }; +export type Subreddit = { + user_flair_background_color: null; + submit_text_html: null; + restrict_posting: boolean; + user_is_banned: boolean; + free_form_reports: boolean; + wiki_enabled: boolean; + user_is_muted: boolean; + user_can_flair_in_sr: null; + display_name: string; + header_img: null; + title: string; + allow_galleries: boolean; + icon_size: [number, number]; + primary_color: string; + active_user_count: null; + icon_img: string; + display_name_prefixed: string; + accounts_active: null; + public_traffic: boolean; + subscribers: number; + user_flair_richtext: []; + videostream_links_count: number; + name: `${SubredditPrefix}_${string}`; + quarantine: boolean; + hide_ads: boolean; + prediction_leaderboard_entry_type: number; + emojis_enabled: boolean; + advertiser_category: string; + public_description: string; + comment_score_hide_mins: 0; + allow_predictions: boolean; + user_has_favorited: boolean; + user_flair_template_id: null; + community_icon: string; + banner_background_image: string; + original_content_tag_enabled: boolean; + community_reviewed: boolean; + submit_text: string; + description_html: null; + spoilers_enabled: boolean; + comment_contribution_settings: { + allowed_media_types: null; + }; + allow_talks: boolean; + header_size: null; + is_default_banner: boolean; + user_flair_position: "right"; + is_default_icon: [boolean]; + all_original_content: boolean; + collections_enabled: boolean; + is_enrolled_in_new_modmail: boolean; + key_color: string; + can_assign_user_flair: boolean; + created: number; + wls: null; + show_media_preview: boolean; + submission_type: "any"; + user_is_subscriber: boolean; + allowed_media_in_comments: []; + allow_videogifs: boolean; + should_archive_posts: boolean; + user_flair_type: "text"; + allow_polls: boolean; + collapse_deleted_comments: boolean; + coins: 0; + emojis_custom_size: null; + public_description_html: null; + allow_videos: boolean; + is_crosspostable_subreddit: boolean; + notification_level: null; + should_show_media_in_comments_setting: boolean; + can_assign_link_flair: boolean; + has_menu_widget: boolean; + accounts_active_is_fuzzed: boolean; + allow_prediction_contributors: boolean; + submit_text_label: ""; + link_flair_position: ""; + user_sr_flair_enabled: null; + user_flair_enabled_in_sr: boolean; + allow_discovery: boolean; + accept_followers: boolean; + user_sr_theme_enabled: boolean; + link_flair_enabled: boolean; + disable_contributor_requests: boolean; + subreddit_type: "user"; + suggested_comment_sort: "qa"; + banner_img: string; + user_flair_text: null; + banner_background_color: string; + show_media: boolean; + id: string; + user_is_moderator: boolean; + over18: boolean; + header_title: string; + description: string; + submit_link_label: string; + user_flair_text_color: null; + restrict_commenting: boolean; + user_flair_css_class: null; + allow_images: boolean; + lang: "en"; + url: string; + created_utc: number; + banner_size: null; + mobile_banner_image: string; + user_is_contributor: boolean; + allow_predictions_tournament: boolean; +}; + // API types export interface ListingType { after: EntityFullname; From e35a9ba9826fbc546a36b84a52aaf4d95d988700 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 21:40:54 +0300 Subject: [PATCH 21/61] chore: add message types --- src/providers/reddit/types.ts | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 5a50bba..bb3d4ad 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -262,6 +262,68 @@ export type Subreddit = { allow_predictions_tournament: boolean; }; +// These are messages like notifications +export type MessageAsAComment = { + first_message: null; + first_message_name: null; + subreddit: string; + likes: null; + replies: string; + author_fullname: `${AccountPrefix}_${string}`; + id: string; + subject: string; + associated_awarding_id: null; + score: number; + author: string; + num_comments: number; + parent_id: `${EntityPrefixes}_${string}`; + subreddit_name_prefixed: `r/${string}`; + new: true; + type: "comment_reply"; + body: string; + link_title: string; + dest: string; + was_comment: true; + body_html: string; + // NOTE This is a comment entity + name: `${CommentPrefix}_${string}`; + created: number; + created_utc: number; + context: string; + distinguished: null; +}; + +// Reference: https://www.reddit.com/r/redditdev/comments/vuwhyp/fetch_private_messages_with_a_specific_reddit_user/ +export type PrivateMessages = { + first_message: null; + first_message_name: null; + subreddit: null; + likes: null; + replies: ""; + author_fullname: `${AccountPrefix}_${string}`; + id: string; + subject: string; + associated_awarding_id: null; + score: number; + author: string; + num_comments: null; + parent_id: null; + subreddit_name_prefixed: null; + new: boolean; + type: "unknown"; + body: string; + dest: string; + was_comment: boolean; + body_html: string; + name: `${CommentPrefix}_${string}`; + created: number; + created_utc: number; + context: string; + distinguished: null; +}; + +// Chat messages are not supported: https://www.reddit.com/r/redditdev/comments/17s83sf/chat_api/ + // API types export interface ListingType { after: EntityFullname; From 9ae74850dcf08f0d385c643b41401a8855f3f16e Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 21:48:25 +0300 Subject: [PATCH 22/61] feat: add methods --- src/providers/reddit/api.ts | 187 ++++++++++++++++++++---------------- 1 file changed, 103 insertions(+), 84 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 416aa37..5eeaebd 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -1,16 +1,17 @@ +import axios, { Axios, AxiosResponse } from "axios"; import { - Devvit, - Listing, - PrivateMessage, - RedditAPIClient, + EntityFullname, + EntityPrefixes, + ListingType, + Account, + BaseRequestConfig, + PaginationParams, Subreddit, - User, - Comment, -} from "@devvit/public-api"; -import { FlairListResponse } from "@devvit/protos"; -import axios, { Axios, AxiosResponse } from "axios"; + Message, + PrivateMessage, +} from "./types"; -const OAUTH_ENDPOINT = "https://oauth.reddit.com/"; +const URL = "https://oauth.reddit.com"; const requestInterceptor = (token: string) => [ function (request: any) { @@ -44,15 +45,6 @@ const responseInterceptor = [ }, ]; -type RequestConfig = { - max_replies?: number; - pagination?: PaginationParams; -}; - -type PaginationParams = { - after: string; -}; - /** * @abstract * @summary This API is a combination of the original API and the in-development Devvit library(v0.11). This is required given that some of the methods are either @@ -62,15 +54,11 @@ export class RedditApi { clientId: string; tdPath: string; client?: Axios; - devvitClient!: RedditAPIClient; constructor(clientId: string) { - this.clientId = clientId; - Devvit.configure({ - redditAPI: true, - }); - // this.devvitClient = Devvit.use() - + // this.clientId = clientId; + this.clientId = + "eyJhbGciOiJSUzI1NiIsImtpZCI6IlNIQTI1NjpzS3dsMnlsV0VtMjVmcXhwTU40cWY4MXE2OWFFdWFyMnpLMUdhVGxjdWNZIiwidHlwIjoiSldUIn0.eyJzdWIiOiJ1c2VyIiwiZXhwIjoxNzQ2NjIwNzQxLjEwMjEzNSwiaWF0IjoxNzQ2NTM0MzQxLjEwMjEzNSwianRpIjoiSEp3bEpCaC1PYjBNM1g5N1JzUnZNZ1lwVnBmczlBIiwiY2lkIjoiMFItV0FNaHVvby1NeVEiLCJsaWQiOiJ0Ml93cW44M2t2bnoiLCJhaWQiOiJ0Ml93cW44M2t2bnoiLCJsY2EiOjE3MTExNDI1MjI4MzgsInNjcCI6ImVKeGtrZEdPdERBSWhkLUZhNV9nZjVVX20wMXRjWWFzTFFhb2szbjdEVm9jazcwN2NENHBIUDlES29xRkRDWlhncW5BQkZnVHJUREJSdVQ5bkxtM2cyaU5lOHRZc1puQ0JGbXdGRHJrbUxHc2lRUW1lSklheXhzbW9JTE55Rnl1dEdOTkxUMFFKcWhjTXJlRkhwYzJvYmtiaTU2ZEdGVzVyRHlvc1ZmbDB0akdGTFlueGpjYnF3MnB1QzZuTWtuTFF2a3NYdlRqTjlXMzl2bXpfU2EwSjhPS3F1bUIzaGxKQ0c0c2ZwaW0zZDlUazU2dEN4YTE5M3FRMnVkNjNLNTkxaXcwTzdlZjZfbHJJeG1YWTJoLUp2dDMxeS1oQTQ4OEx6UHFBRWFzNFVjWmRtUWRfbFVIVUxtZ0pHTUo0dE1JNU1ybDIzOEp0bXZUdjhidEV6OThNLUttTl96V0ROUnpDZUxRcF9IMUd3QUFfXzhRMWVUUiIsInJjaWQiOiJqeV9hQVlHQkF6TWVCdDBXLTl2R2F0Um4wUy1xU3RSSFRJRzVwZElaWDkwIiwiZmxvIjoyfQ.nerEP5TRIA2ISLM-_gGKf6fGxLbIcKLLICzK1zKDg2h566uTzTQzsbhDBgjeM0u4ncuTBi_XsAH8OjZnpSJTeOqxEPls9O1hzeIPrlepOlZn1zrLoH49SWouBHJxqUXP4K-vSS9f8Ail9MdIcVbVm79NCfBwxZBIsumTRr4CdSQn3rDINQ-ERG7jrFbTLhWHka9QOMjHR32_VvYWEJ0YKRLIvZs4R-DBQ48zVUkfR7S3b71T4bQsj9qaJE5tNdevsiwsSAn2OhpkXVrs1sL5nzs1f2KB0WW6zXBdgeQo1riJEv-BGFL7Q4PM3WJidj_kaB5i0_0uACiCH1sCAlQv0w"; try { this.client = axios.create(); @@ -86,8 +74,7 @@ export class RedditApi { } } - // Devvit is under development - public getClient(): Devvit | Axios { + public getClient(): Axios { return this.client; } @@ -104,8 +91,8 @@ export class RedditApi { */ private async _call( method: "GET" | "POST" | "PUT", - endpoint: `${string}.json`, - config?: RequestConfig, + url: `${string}.json`, + config?: BaseRequestConfig, customInterceptor?: any[] ): Promise { let terminationCriteriaMet = true; @@ -132,17 +119,28 @@ export class RedditApi { while (terminationCriteriaMet) { const resp = await action<{ - data: Type; + kind: EntityPrefixes | "Listing"; + data: Type | ListingType; terminationCriteriaMet: boolean; pagination: PaginationParams; - }>(`${OAUTH_ENDPOINT}${endpoint}?after=${after}`, { + }>(`${url}`, { params: { ...config, ...pagination, }, }); - console.log(resp.data); - data.push(resp.data.data); + + // Single entities get returned + if (resp.data.kind !== "Listing") { + return [resp.data.data as Type]; + } + + data.push( + // Only keep the data, without the prefix + ...(resp.data.data as ListingType).children.map( + (withPrefix) => withPrefix.data + ) + ); terminationCriteriaMet = resp.data.terminationCriteriaMet; pagination = resp.data.pagination; } @@ -152,34 +150,47 @@ export class RedditApi { return data; } + /** + * @see Chat messages are not supported: https://www.reddit.com/r/redditdev/comments/17s83sf/chat_api/ + */ + public async getChats() { + throw new Error("Not supported"); + } + /** * * @summary Read all private messages from inbox, unread and sent folder from the past 3 months * @see https://www.reddit.com/dev/api#GET_message_{where} * @returns */ - public async getChats( - type: "inbox" | "unread" | "sent", - // TODO Batch size - batchSize: number - ): Promise> { - return await this.devvitClient.getMessages({ - type, - }); + public async getMessages( + type?: "inbox" | "unread" | "sent" | "all" + ): Promise { + let endpoints: `${string}.json`[] = [ + "/message/inbox.json", + "/message/unread.json", + "/message/sent.json", + ]; - // // TODO Add response interceptor to check message data and if it passed the 3 months - // const customInterceptor: any[] = []; + if (type && type !== "all") { + endpoints = [`/message/${type}.json`]; + } else { + endpoints = ["/message/messages.json"]; + } + + const allMessages = await Promise.all( + endpoints.map(async (endpoint) => { + const messages = await this._call("GET", endpoint, { + count: 0, + }); - // const chatDetail = await this._call( - // "GET", - // "/message/inbox.json", - // { - // max_replies: 300, - // }, - // customInterceptor - // ); + if (type && type === "all") { + return messages as unknown as PrivateMessage[]; + } + }) + ); - // return chatDetail; + return allMessages.flat(); } /** @@ -187,12 +198,16 @@ export class RedditApi { * @summary Get the profile of auth token owner * @returns */ - public async getMe(): Promise { + public async getMe(): Promise { // TODO Check if getAppUser returns the same - const user = await this._call("GET", "/api/v1/me.json"); - console.log(this.clientId) + try { + const url = `${URL}/api/v1/me.json`; + const user = await this._call("GET", url); - return user[0]; + return user[0]; + } catch (error) { + console.log(error.message); + } } /** @@ -200,10 +215,20 @@ export class RedditApi { * @summary Get the profile of auth token owner * @returns */ - public async getUser(usernameOrId: string | number): Promise { - return typeof usernameOrId === "string" - ? await this.devvitClient.getUserByUsername(usernameOrId) - : await this.devvitClient.getUserById(String(usernameOrId)); + public async getUser(username: string): Promise { + try { + const user = await this._call( + "GET", + `${URL}/user/${username}/about.json` + ); + + return user[0]; + } catch (error) { + console.log(error.message); + } + // return typeof usernameOrId === "string" + // ? await this.devvitClient.getUserByUsername(usernameOrId) + // : await this.devvitClient.getUserById(String(usernameOrId)); } /** @@ -217,32 +242,15 @@ export class RedditApi { const endpoints: `${string}.json`[] = [ "/subreddits/mine/contributor.json", "/subreddits/mine/moderator.json", - "/subreddits/mine/subscribe.json", + "/subreddits/mine/subscriber.json", ]; const subreddits = await Promise.all( endpoints.map(async (endpoint) => { - return await this._call( - "GET", - "/message/inbox.json", - { - max_replies: 300, - }, - [ - (response: AxiosResponse) => { - if (response.data.children.length === 0) { - return { - data: [] as any[], - terminationCriteriaMet: true, - pagination: {}, - }; - } - }, - ] - ); + return await this._call("GET", `${URL}${endpoint}`); }) ); - return subreddits.flat().flat(); + return subreddits.flat(); } /** @@ -258,14 +266,14 @@ export class RedditApi { * @returns */ public async getComments( - user: User, + username: string, pageSize: number, limit: number, timeframe: "all" = "all", sort: "new" = "new", before?: string, after?: string - ): Promise> { + ): Promise { let options = { pageSize: 1, timeframe, @@ -276,6 +284,17 @@ export class RedditApi { }; // TODO This might not be needed options = JSON.parse(JSON.stringify(options)); - return await user.getComments(options); + + try { + const url = `${URL}/user/${username}/comments.json`; + const comments = await this._call( + "GET", + url as `${string}.json` + ); + console.log(comments); + return []; + } catch (error) { + console.log(error.message); + } } } From 93bdc744b0ee7c5ad510b03b5bc49af219f52402 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 22:23:12 +0300 Subject: [PATCH 23/61] chore: update readme --- src/providers/reddit/REAMDE.md | 70 ++++++++++++++++------------------ src/providers/reddit/index.ts | 16 ++++---- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/providers/reddit/REAMDE.md b/src/providers/reddit/REAMDE.md index cd824d0..9ee06c2 100644 --- a/src/providers/reddit/REAMDE.md +++ b/src/providers/reddit/REAMDE.md @@ -1,55 +1,49 @@ -# Notes +# Reddit Connector -`pdf-parse` is used to convert PDF files to text so their contents can be searched. There is a bug in the library that causes this message to be output to the console when fonts can't be found: `Warning: TT: undefined function: 32` (see https://github.com/mozilla/pdf.js/issues/3768#issuecomment-36468349) +The Reddit connector fetches a user's personal reddit data from the past 3 months. -## Refresh Tokens +## Handlers + +## Known issues -Google only provides a `refreshToken` when a user first connects their account. If the user attempts to reconnect, the second OAuth process will only return an `accessToken`. +1. Private chat messages are not supported in the official API, see [here](https://www.reddit.com/r/redditdev/comments/17s83sf/chat_api/) -# Known issues +## Refresh Tokens -1. Emails are processed in batches, up until the expiry date, then starts to fetch new again. Need to refactor to use range tracker helper. + -# YouTube Integration Unit Tests +## Unit Tests -This repository contains a suite of unit tests designed to validate the integration of a YouTube account with the provider's synchronization handlers. The tests ensure that the YouTube data is correctly fetched and processed. The unit tests cover the following aspects: +This repository contains a suite of unit tests designed to test the core Reddit API and to validate the integration of a Reddit account with the provider's synchronization handlers. The tests ensure that the Reddit data is correctly fetched and processed. The unit tests cover the following aspects: -- Fetching and testing YouTube favorites. -- Fetching and testing YouTube following (subscriptions). -- Fetching and testing YouTube posts (uploaded videos). +- Fetching and testing Reddit account. +- Fetching and testing Reddit account's subreddits, including where the account has the role of contributor, moderator or subscriber. +- Fetching and testing Reddit account's messages including notifications and private messages. +- Fetching and testing Reddit account's comments +- Fetching and testing Reddit account's interactions e.g. listing(posts, comments, etc.) that the user has upvoted, donwvoted, hidden or saved -## Prerequisites +### Prerequisites Before running the unit tests, ensure that you have the following set up: -1. **YouTube Account**: A YouTube account with some activity is required. This activity includes uploaded videos, subscriptions, and liked videos. +1. **Reddit Account**: A YouTube account with some activity is required. This activity includes uploaded videos, subscriptions, and liked videos. -2. **YouTube Data**: Make sure your YouTube account has: - - **Favorites**: At least 14 videos you have liked. - - **Following**: At least 14 Channels you have subscribed to. - - **Posts**: At least 14 videos you have uploaded. -3. **Activity**: Make sure you have made activities within the last 24 hours. +2. **Reddit Account Data**: Make sure to have an account with some activity e.g. messages sent/received, comments, etc. + You can: + a. create a testing config file with the expected account information e.g. account name, number of messages, etc. + b. Run the tests with the following expected results -## Running the Tests + - **Messages**: An account with more than 50 messages. + - **Comments**: More than 50 comments by your account. + - **Posts**: Have at least a post. -```bash -yarn run test tests/providers/google/youtube-[xxx].tests.ts -``` +3. **Authorized Application**: Make sure to create an authorized `web app` application and fill in the required information in the `serverconfig.local.json` -# Google Calendar Notes +### Running the Tests -1. Calendar list involves subscribed calendars which are the other users created and default calendars such as Holidays, Birthdays. But only process calendars created by the user. -2. Limit recurring events to 1 month in the future. - - - +```bash +# To run the API tests +yarn run test tests/providers/reddit/api.test.ts +# To run the handler tests +yarn run test tests/providers/reddit/handlers/*.test.ts +``` diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts index 43ae352..65e5634 100644 --- a/src/providers/reddit/index.ts +++ b/src/providers/reddit/index.ts @@ -45,7 +45,7 @@ export default class RedditProvider extends Base { public syncHandlers(): any[] { return [ - ChatsHandler, + // ChatsHandler, // CommentsHandler ]; } @@ -127,13 +127,13 @@ export default class RedditProvider extends Base { refreshToken = this.connection ? this.connection.refreshToken : undefined; } - if (!refreshToken) { - throw new Error( - `Unable to load Telegram API, no refresh (bin file) token` - ); - } + // if (!refreshToken) { + // throw new Error( + // `Unable to load Reddit API, no refresh (bin file) token` + // ); + // } - await api.getClient(true); + await api.getClient(); this.api = api; return api; } @@ -171,4 +171,4 @@ export default class RedditProvider extends Base { // Implement sync // Test handles errors appropriatelly // Schemas -// README \ No newline at end of file +// Refresh token \ No newline at end of file From 072dc67f253240a19cb17f286841bec7c698a485 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 22:53:16 +0300 Subject: [PATCH 24/61] feat: api tests --- tests/providers/reddit/api.test.ts | 119 +++++++++++++++++++---------- 1 file changed, 78 insertions(+), 41 deletions(-) diff --git a/tests/providers/reddit/api.test.ts b/tests/providers/reddit/api.test.ts index 4f63119..bfb717b 100644 --- a/tests/providers/reddit/api.test.ts +++ b/tests/providers/reddit/api.test.ts @@ -1,46 +1,83 @@ -import { Listing, PrivateMessage, User, Subreddit } from "@devvit/public-api"; +// import { Listing, PrivateMessage, User, Subreddit } from "@devvit/public-api"; +import { Connection } from "../../../src/interfaces"; import { RedditApi } from "../../../src/providers/reddit/api"; -import { z } from "zod"; - -// TODO Read from .env file -const clientId = ""; -const reddit = new RedditApi(clientId); -const API_CALLS = [ - { - endpoint: "chats", - action: reddit.getChats, - params: ["inbox", 100], - expectedType: Listing, - }, - { - endpoint: "me", - action: reddit.getMe, - expectedType: User, - }, - { - endpoint: "user", - action: reddit.getUser, - params: [""], - expectedType: User, - }, - { - endpoint: "subreddits", - action: reddit.getSubreddits, - expectedType: Listing, - }, -]; - -/** - * @summary Test that API calls returns a result w/ the expected type - */ +import { CommonTests } from "../../common.tests"; +import CommonUtils from "../../common.utils"; +const assert = require("assert"); +import ChatsHandler from "../../../src/providers/reddit/chat"; +import { before } from "mocha/lib/mocha"; +import { API_CONFIG } from "./config"; + +let connection: Connection; +let api; + +const d = new Date(); +const twoMonthsAgo = d.setMonth(d.getMonth() - 2); + describe("Reddit API test", async () => { - it("should fetch valid data for each supported endpoint", async () => { - await Promise.all( - API_CALLS.map(async (apiCall) => { - const { params, action } = apiCall; - // @ts-expect-error Just for testing - const resp = params ? action(...params) : action; - }) + before(async () => { + connection = await CommonUtils.getConnection("reddit"); + + const objects = await CommonTests.buildTestObjects( + "reddit", + ChatsHandler, + {}, + connection + ); + api = objects.api; + }); + + it("should fetch me", async () => { + const me = await api.getMe(); + assert.notStrictEqual(me, null); + }); + + it.skip("should fetch user", async () => { + // TODO Fetch from config + const user = await api.getUser(API_CONFIG.username); + assert.notStrictEqual(user, null); + }); + + it("should fetch privates messages", async () => { + // Get all the messages + const allMessages = await api.getMessages(); + assert(allMessages > 0, "No messages fetched"); + + const unreadMessages = await api.getMessages("unread"); + assert( + allMessages > unreadMessages, + "All messages should contain unreadMessages" ); }); + + it("should fetch privates messages", async () => { + // Get all the messages + const privateMessages = await api.getMessages("private"); + assert(privateMessages > 0, "No messages fetched"); + + // Fetch messages in the last 2 months + const privateMessagesLast2Months = await api.getMessages("private", { + untilDate: twoMonthsAgo, + }); + + // There should be more messages in the last 3 months than last 2 months + assert( + privateMessages <= privateMessagesLast2Months, + "No messages fetched" + ); + }); + + it("should fetch comments", async () => { + const comments = await api.getComments(); + + assert(comments.length > 0, "No comments found"); + }); + + it("should fetch subreddits", async () => { + const allSubreddits = await api.getSubreddits(); + assert(allSubreddits.length > 0, "No subreddits found"); + + const moderatedSubreddits = await api.getSubreddits("moderator"); + assert(moderatedSubreddits.length > 0, "No moderated subreddits found"); + }); }); From 54abb37d7ea583db7bba7f5c21fceea813e06066 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 6 May 2025 22:53:55 +0300 Subject: [PATCH 25/61] chore: move dir --- tests/providers/reddit/config.ts | 0 .../reddit/{ => handlers}/comments.test.ts | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 tests/providers/reddit/config.ts rename tests/providers/reddit/{ => handlers}/comments.test.ts (86%) diff --git a/tests/providers/reddit/config.ts b/tests/providers/reddit/config.ts new file mode 100644 index 0000000..e69de29 diff --git a/tests/providers/reddit/comments.test.ts b/tests/providers/reddit/handlers/comments.test.ts similarity index 86% rename from tests/providers/reddit/comments.test.ts rename to tests/providers/reddit/handlers/comments.test.ts index 958ac78..e6bc50b 100644 --- a/tests/providers/reddit/comments.test.ts +++ b/tests/providers/reddit/handlers/comments.test.ts @@ -3,15 +3,15 @@ import { Connection, SyncHandlerPosition, SyncHandlerStatus -} from "../../../src/interfaces"; -import Providers from "../../../src/providers"; -import CommonUtils, { NetworkInstance } from "../../common.utils"; +} from "../../../../src/interfaces"; +import Providers from "../../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../../common.utils"; -import RedditCommentsHandler from "../../../src/providers/reddit/comments"; -import BaseProvider from "../../../src/providers/BaseProvider"; -import { CommonTests, GenericTestConfig } from "../../common.tests"; -import { TelegramConfig } from "../../../src/providers/telegram/interfaces"; -import { SchemaSocialChatGroup, SchemaSocialChatMessage } from "../../../src/schemas"; +import RedditCommentsHandler from "../../../../src/providers/reddit/comments"; +import BaseProvider from "../../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../../common.tests"; +import { TelegramConfig } from "../../../../src/providers/telegram/interfaces"; +import { SchemaSocialChatGroup, SchemaSocialChatMessage } from "../../../../src/schemas"; const providerId = "reddit"; let network: NetworkInstance; From e12543e83180828a96466990806d13089b8a3941 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 11:09:20 +0300 Subject: [PATCH 26/61] chore: add scopes --- src/providers/reddit/index.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts index 65e5634..407940d 100644 --- a/src/providers/reddit/index.ts +++ b/src/providers/reddit/index.ts @@ -56,7 +56,14 @@ export default class RedditProvider extends Base { req.session.state = crypto.randomBytes(32).toString("hex"); req.session.save((err) => console.log(err)); - const auth = await passport.authenticate("reddit"); + const auth = await passport.authenticate("reddit", { + // NOTE Setting this to permanent returns a refresh token + duration: "permanent", + scope: ["identity", "read", "privatemessages", "mysubreddits", "history"], + failureRedirect: "/failure/reddit", + failureMessage: true, + state: true, + }); return auth(req, res, next); } @@ -71,11 +78,11 @@ export default class RedditProvider extends Base { const promise = new Promise((resolve, rejects) => { const auth = passport.authenticate( "reddit", + // TODO Move these { failureRedirect: "/failure/reddit", failureMessage: true, state: true, - scope: ["identity", "read"], }, function (err: any, data: any) { if (err) { @@ -127,11 +134,9 @@ export default class RedditProvider extends Base { refreshToken = this.connection ? this.connection.refreshToken : undefined; } - // if (!refreshToken) { - // throw new Error( - // `Unable to load Reddit API, no refresh (bin file) token` - // ); - // } + if (!refreshToken) { + throw new Error(`Unable to load Reddit API, no refresh (bin file) token`); + } await api.getClient(); this.api = api; @@ -153,7 +158,6 @@ export default class RedditProvider extends Base { profile: any, cb: any ) { - // console.log(accessToken, refreshToken, profile, cb); // Simply return the raw data return cb(null, { accessToken, @@ -166,9 +170,7 @@ export default class RedditProvider extends Base { } } - // TODO // Implement sync // Test handles errors appropriatelly // Schemas -// Refresh token \ No newline at end of file From 9f760028d10f24e2d20f51a076677066af45c703 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 11:10:32 +0300 Subject: [PATCH 27/61] chore: rename handler --- src/providers/reddit/{chat.ts => message.ts} | 89 +++++++++----------- 1 file changed, 42 insertions(+), 47 deletions(-) rename src/providers/reddit/{chat.ts => message.ts} (76%) diff --git a/src/providers/reddit/chat.ts b/src/providers/reddit/message.ts similarity index 76% rename from src/providers/reddit/chat.ts rename to src/providers/reddit/message.ts index d5f21e3..c57302b 100644 --- a/src/providers/reddit/chat.ts +++ b/src/providers/reddit/message.ts @@ -11,12 +11,11 @@ import { SyncResponse, } from "../../interfaces"; import { ConnectionOptionType } from "../../interfaces"; -import { RedditChatType, RedditConfig } from "./reddit"; +import { RedditChatType, RedditConfig } from "./types"; import { RedditApi } from "./api"; import { SchemaChatMessageType, SchemaSocialChatMessage } from "../../schemas"; import { UsersCache } from "./usersCache"; import InvalidTokenError from "../InvalidTokenError"; -import { TDError } from "tdlib-native/dist"; import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; import { Listing, PrivateMessage, User } from "@devvit/public-api"; const _ = require("lodash"); @@ -30,7 +29,7 @@ export interface SyncChatMessagesResult extends SyncItemsResult { /** * @summary This returns everything as a Listing, no need to categorize it */ -export default class ChatsHandler extends BaseSyncHandler { +export default class MessageHandler extends BaseSyncHandler { protected config: RedditConfig; public getName(): string { @@ -129,11 +128,14 @@ export default class ChatsHandler extends BaseSyncHandler { let currentRange = rangeTracker.nextRange(); - const latestResp = await api.getChats("inbox", this.config.batchSize); + const latestResp = await api.getMessages( + "inbox" + // , this.config.batchSize + ); const latestResult = await this.buildResults( api, userCache, - latestResp, + latestResp as [], "inbox", currentRange.endId ); @@ -183,11 +185,6 @@ export default class ChatsHandler extends BaseSyncHandler { }; } catch (err: any) { console.log(err.message); - if (err instanceof TDError) { - if (err.code == 401) { - throw new InvalidTokenError(err.message); - } - } throw err; } } @@ -204,49 +201,47 @@ export default class ChatsHandler extends BaseSyncHandler { async buildResults( api: RedditApi, userCache: UsersCache, - latestResp: Listing, + // latestResp: Listing, + latestResp: [], chatType: "inbox" | "unread" | "sent", endId?: string ): Promise { const results: SchemaSocialChatMessage[] = []; let breakHit: SyncItemsBreak; - for (const chat of await latestResp.all()) { - if (endId && chat.id === endId) { - const logEvent: SyncProviderLogEvent = { - level: SyncProviderLogLevel.DEBUG, - message: `End chat ID hit (${chat.id})`, - }; - this.emit("log", logEvent); - breakHit = SyncItemsBreak.ID; - break; - } - - const createdTime = chat.created ?? new Date().toISOString(); - - // Get the "from" user - const from = await userCache.getUser(chat.from.id); - - results.push({ - _id: chat.id, - // NOTE This is - groupId: "", - // TODO This is documented but not included in the Devvit types - // @ts-ignore - groupName: chat.name, - type: - chatType === "inbox" || chatType === "unread" - ? SchemaChatMessageType.RECEIVE - : SchemaChatMessageType.SEND, - messageText: chat.body, - messageHTML: chat.bodyHtml, - fromId: chat.from.id, - // NOTE Handle and username is the same - fromHandle: from.username, - fromName: from.username, - sentAt: chat.created.toDateString(), - name: `Private chat: ${chat.from}`, - }); + for (const chat of await latestResp) { + // if (endId && chat.id === endId) { + // const logEvent: SyncProviderLogEvent = { + // level: SyncProviderLogLevel.DEBUG, + // message: `End chat ID hit (${chat.id})`, + // }; + // this.emit("log", logEvent); + // breakHit = SyncItemsBreak.ID; + // break; + // } + // const createdTime = chat.created ?? new Date().toISOString(); + // // Get the "from" user + // const from = await userCache.getUser(chat.from.id); + // results.push({ + // _id: chat.id, + // // NOTE This is + // groupId: "", + // // TODO This is documented but not included in the Devvit types + // // @ts-ignore + // groupName: chat.name, + // type: + // chatType === "inbox" || chatType === "unread" + // ? SchemaChatMessageType.RECEIVE + // : SchemaChatMessageType.SEND, + // messageText: chat.body, + // messageHTML: chat.bodyHtml, + // fromId: chat.from.id, + // // NOTE Handle and username is the same + // fromHandle: from.username, + // fromName: from.username, + // sentAt: chat.created.toDateString(), + // name: `Private chat: ${chat.from}`, + // }); } return { From fa648b000e74c9d6b3c8575ee8836d8fdcd39487 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 18:45:42 +0300 Subject: [PATCH 28/61] chore: refactor types --- src/providers/reddit/types.ts | 359 +++++++++++----------------------- 1 file changed, 114 insertions(+), 245 deletions(-) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index bb3d4ad..819720f 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -35,266 +35,120 @@ export interface RedditConfig extends BaseHandlerConfig { useDbPos: boolean; } -// 'Account' is name of the type, but 'User' is the name of the entity -export type Account = { - verified: boolean; - is_blocked: boolean; - coins: number; +export type RedditBase = { id: string; - over_18: boolean; - is_gold: boolean; - is_mod: boolean; - is_suspended: boolean; - has_stripe_subscription: boolean; - has_android_subscription: boolean; - awarder_karma: number; - awardee_karma: number; - suspension_expiration_utc: number; - icon_img: string; - pref_nightmode: boolean; - hide_from_robots: boolean; + name: `${EntityPrefixes}_${string}`; + kind: EntityPrefixes | "Listing" | "more"; + data: + | Listing + | Account + | Comment + | Message + | PrivateMessage + | Post + | Subreddit; +}; + +export type Listing = { + before: string | null; + after: string | null; modhash: string; - link_karma: number; - force_password_reset: boolean; - total_karma: number; - inbox_count: number; - pref_top_karma_subreddits: boolean; - has_mail: boolean; - name: string; + children: RedditBase[]; +}; + +type Created = { created: number; - has_verified_email: boolean; - gold_creddits: number; created_utc: number; - has_ios_subscription: boolean; - pref_show_twitter: boolean; - comment_karma: number; - accept_followers: boolean; - has_subscribed: boolean; }; -export type Comment = { - subreddit_id: string; - approved_at_utc: boolean; - author_is_blocked: boolean; - link_title: string; - mod_reason_by: null; - banned_by: null; - ups: number; - num_reports: null; - author_flair_type: "richtext"; - total_awards_received: number; - subreddit: string; - link_author: string; - likes: boolean; - replies: string; - user_reports: []; - saved: boolean; - id: string; - banned_at_utc: number | null; - mod_reason_title: string | null; - gilded: number; - archived: boolean; - no_follow: boolean; - author: string; - num_comments: number; - parent_id: string; - score: number; - author_fullname: string; // "t2_wqn83kvnz"; +export type Account = { + comment_karma: number; + has_mail: boolean | null; + has_mod_mail: boolean | null; + has_verified_email: boolean; + id: `${AccountPrefix}_${string}`; + inbox_count: number; + is_friend: boolean; + is_gold: boolean; + is_mod: boolean; + link_karma: number; + modhash: string; + name: string; over_18: boolean; - report_reasons: string | null; - removal_reason: string | null; +} & Created; + +export type Comment = { approved_by: string | null; - controversiality: number; + author: string; + author_flair_css_class: string; + author_flair_text: string; + banned_by: string | null; body: string; - edited: boolean; - top_awarded_type: null; - downs: number; - author_flair_css_class: null; - is_submitter: boolean; - collapsed: boolean; - author_flair_richtext: { - e: "text"; - t: string; - }[]; - author_patreon_flair: boolean; body_html: string; - gildings: {}; - collapsed_reason: string | null; - distinguished: string | null; - associated_award: string | null; - stickied: boolean; - author_premium: boolean; - can_gild: boolean; - // TODO do this for other _id - link_id: `t${number}_${string}`; - unrepliable_reason: string | null; - author_flair_text_color: string; + edited: boolean | number; + gilded: number; + likes: boolean; + link_author: string; + link_id: `${LinkPrefix}_${string}`; + link_title: string; + link_url: string; + num_reports: number | null; + parent_id: `${LinkPrefix | CommentPrefix}_${string}`; + replies: RedditBase[]; + saved: boolean; + score: number; score_hidden: boolean; - permalink: "/r/${string}/comments/${string}/_/${string}/"; - subreddit_type: "public"; - link_permalink: "https://www.reddit.com/r/${string}/comments/${string}/_/"; - name: "t${number}_${number}"; - created: number; - subreddit_name_prefixed: "r/${string}"; - author_flair_text: string; - treatment_tags: []; - rte_mode: "richtext"; - created_utc: number; - awarders: []; - all_awardings: []; - locked: boolean; - author_flair_background_color: ""; - collapsed_because_crowd_control: null; - mod_reports: []; - quarantine: boolean; - mod_note: null; - link_url: "https://v.redd.it/${reddit}"; - author_flair_template_id: null; -}; + subreddit: string; + subreddit_id: `${SubredditPrefix}_${string}`; + distinguished: null | string; +} & Created; export type Subreddit = { - user_flair_background_color: null; - submit_text_html: null; - restrict_posting: boolean; - user_is_banned: boolean; - free_form_reports: boolean; - wiki_enabled: boolean; - user_is_muted: boolean; - user_can_flair_in_sr: null; + accounts_active: number; + comment_score_hide_mins: number; + description: string; + description_html: string; display_name: string; - header_img: null; - title: string; - allow_galleries: boolean; - icon_size: [number, number]; - primary_color: string; - active_user_count: null; - icon_img: string; - display_name_prefixed: string; - accounts_active: null; + header_img: string; + header_size: [number, number]; + header_title: string; + over18: boolean; + public_description: string; public_traffic: boolean; subscribers: number; - user_flair_richtext: []; - videostream_links_count: number; - name: `${SubredditPrefix}_${string}`; - quarantine: boolean; - hide_ads: boolean; - prediction_leaderboard_entry_type: number; - emojis_enabled: boolean; - advertiser_category: string; - public_description: string; - comment_score_hide_mins: 0; - allow_predictions: boolean; - user_has_favorited: boolean; - user_flair_template_id: null; - community_icon: string; - banner_background_image: string; - original_content_tag_enabled: boolean; - community_reviewed: boolean; - submit_text: string; - description_html: null; - spoilers_enabled: boolean; - comment_contribution_settings: { - allowed_media_types: null; - }; - allow_talks: boolean; - header_size: null; - is_default_banner: boolean; - user_flair_position: "right"; - is_default_icon: [boolean]; - all_original_content: boolean; - collections_enabled: boolean; - is_enrolled_in_new_modmail: boolean; - key_color: string; - can_assign_user_flair: boolean; - created: number; - wls: null; - show_media_preview: boolean; - submission_type: "any"; - user_is_subscriber: boolean; - allowed_media_in_comments: []; - allow_videogifs: boolean; - should_archive_posts: boolean; - user_flair_type: "text"; - allow_polls: boolean; - collapse_deleted_comments: boolean; - coins: 0; - emojis_custom_size: null; - public_description_html: null; - allow_videos: boolean; - is_crosspostable_subreddit: boolean; - notification_level: null; - should_show_media_in_comments_setting: boolean; - can_assign_link_flair: boolean; - has_menu_widget: boolean; - accounts_active_is_fuzzed: boolean; - allow_prediction_contributors: boolean; - submit_text_label: ""; - link_flair_position: ""; - user_sr_flair_enabled: null; - user_flair_enabled_in_sr: boolean; - allow_discovery: boolean; - accept_followers: boolean; - user_sr_theme_enabled: boolean; - link_flair_enabled: boolean; - disable_contributor_requests: boolean; - subreddit_type: "user"; - suggested_comment_sort: "qa"; - banner_img: string; - user_flair_text: null; - banner_background_color: string; - show_media: boolean; - id: string; - user_is_moderator: boolean; - over18: boolean; - header_title: string; - description: string; + submission_type: "any" | "link" | "self"; submit_link_label: string; - user_flair_text_color: null; - restrict_commenting: boolean; - user_flair_css_class: null; - allow_images: boolean; - lang: "en"; + submit_text_label: string; + subreddit_type: "public" | "private" | "restricted" | "gold_restricted"; + title: string; url: string; - created_utc: number; - banner_size: null; - mobile_banner_image: string; + user_is_banned: boolean; user_is_contributor: boolean; - allow_predictions_tournament: boolean; -}; + user_is_moderato: boolean; + user_is_subscribe: boolean; +} & Created; // These are messages like notifications -export type MessageAsAComment = { - first_message: null; - first_message_name: null; - subreddit: string; - likes: null; - replies: string; - author_fullname: `${AccountPrefix}_${string}`; - id: string; - subject: string; - associated_awarding_id: null; - score: number; +export type Message = { author: string; - num_comments: number; - parent_id: `${EntityPrefixes}_${string}`; - subreddit_name_prefixed: `r/${string}`; - new: true; - type: "comment_reply"; body: string; - link_title: string; - dest: string; - was_comment: true; body_html: string; - // NOTE This is a comment entity - name: `${CommentPrefix}_${string}`; - created: number; - created_utc: number; - context: string; - distinguished: null; -}; + context: `${string}?context=3`| "" + first_message: null | string + first_message_name: null | string + likes: boolean; + link_title: string; + name: `${MessagePrefix}_${string}` + new: string; + parent_id: null | `${EntityPrefixes}_${string}`; + replies: string | "" + subject: string; + subreddit: null | string + was_comment: boolean; +} & Created; // Reference: https://www.reddit.com/r/redditdev/comments/vuwhyp/fetch_private_messages_with_a_specific_reddit_user/ -export type PrivateMessages = { +export type PrivateMessage = { first_message: null; first_message_name: null; subreddit: null; @@ -316,20 +170,35 @@ export type PrivateMessages = { was_comment: boolean; body_html: string; name: `${CommentPrefix}_${string}`; - created: number; - created_utc: number; context: string; distinguished: null; -}; - -// Chat messages are not supported: https://www.reddit.com/r/redditdev/comments/17s83sf/chat_api/ +} & Created; -// API types -export interface ListingType { - after: EntityFullname; - dist: number; - children: { kind: EntityPrefixes; data: Type }[]; -} +// See: https://github.com/reddit-archive/reddit/wiki/JSON#link-implements-votable--created +export type Post = { + author: string; + author_flair_css_class: string; + author_flair_text: string; + hidden: boolean; + is_self: boolean; + likes: boolean | true; + locked: boolean; + num_comments: number; + over_18: boolean; + permalink: string; + saved: boolean; + score: number; + selftext: string; + selftext_html: string; + subreddit: string; + subreddit_id: `${SubredditPrefix}_${string}`; + thumbnail: string; + title: string; + url: string; + edited: boolean; + distinguished: boolean | null; + stickied: boolean; +} & Created; export type BaseRequestConfig = { count: number; From 02d415319fc617e682db2a95b7d5d1ebc9e8d645 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 18:45:56 +0300 Subject: [PATCH 29/61] feat: add pagination --- src/providers/reddit/api.ts | 162 ++++++++++++++++++++++-------------- 1 file changed, 100 insertions(+), 62 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 5eeaebd..dc7109a 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -1,14 +1,15 @@ import axios, { Axios, AxiosResponse } from "axios"; import { - EntityFullname, + Comment, EntityPrefixes, - ListingType, Account, BaseRequestConfig, PaginationParams, Subreddit, Message, PrivateMessage, + Post, + Listing, } from "./types"; const URL = "https://oauth.reddit.com"; @@ -25,8 +26,11 @@ const requestInterceptor = (token: string) => [ }, ]; +const now = new Date(); +const threeMonthsAgo = now.setMonth(now.getMonth() - 3); + /** - * From the docs: + * TODO: * Clients connecting via OAuth2 may make up to 60 requests per minute. Monitor the following response headers to ensure that you're not exceeding the limits: * X-Ratelimit-Used: Approximate number of requests used in this period * X-Ratelimit-Remaining: Approximate number of requests left to use @@ -56,9 +60,8 @@ export class RedditApi { client?: Axios; constructor(clientId: string) { - // this.clientId = clientId; - this.clientId = - "eyJhbGciOiJSUzI1NiIsImtpZCI6IlNIQTI1NjpzS3dsMnlsV0VtMjVmcXhwTU40cWY4MXE2OWFFdWFyMnpLMUdhVGxjdWNZIiwidHlwIjoiSldUIn0.eyJzdWIiOiJ1c2VyIiwiZXhwIjoxNzQ2NjIwNzQxLjEwMjEzNSwiaWF0IjoxNzQ2NTM0MzQxLjEwMjEzNSwianRpIjoiSEp3bEpCaC1PYjBNM1g5N1JzUnZNZ1lwVnBmczlBIiwiY2lkIjoiMFItV0FNaHVvby1NeVEiLCJsaWQiOiJ0Ml93cW44M2t2bnoiLCJhaWQiOiJ0Ml93cW44M2t2bnoiLCJsY2EiOjE3MTExNDI1MjI4MzgsInNjcCI6ImVKeGtrZEdPdERBSWhkLUZhNV9nZjVVX20wMXRjWWFzTFFhb2szbjdEVm9jazcwN2NENHBIUDlES29xRkRDWlhncW5BQkZnVHJUREJSdVQ5bkxtM2cyaU5lOHRZc1puQ0JGbXdGRHJrbUxHc2lRUW1lSklheXhzbW9JTE55Rnl1dEdOTkxUMFFKcWhjTXJlRkhwYzJvYmtiaTU2ZEdGVzVyRHlvc1ZmbDB0akdGTFlueGpjYnF3MnB1QzZuTWtuTFF2a3NYdlRqTjlXMzl2bXpfU2EwSjhPS3F1bUIzaGxKQ0c0c2ZwaW0zZDlUazU2dEN4YTE5M3FRMnVkNjNLNTkxaXcwTzdlZjZfbHJJeG1YWTJoLUp2dDMxeS1oQTQ4OEx6UHFBRWFzNFVjWmRtUWRfbFVIVUxtZ0pHTUo0dE1JNU1ybDIzOEp0bXZUdjhidEV6OThNLUttTl96V0ROUnpDZUxRcF9IMUd3QUFfXzhRMWVUUiIsInJjaWQiOiJqeV9hQVlHQkF6TWVCdDBXLTl2R2F0Um4wUy1xU3RSSFRJRzVwZElaWDkwIiwiZmxvIjoyfQ.nerEP5TRIA2ISLM-_gGKf6fGxLbIcKLLICzK1zKDg2h566uTzTQzsbhDBgjeM0u4ncuTBi_XsAH8OjZnpSJTeOqxEPls9O1hzeIPrlepOlZn1zrLoH49SWouBHJxqUXP4K-vSS9f8Ail9MdIcVbVm79NCfBwxZBIsumTRr4CdSQn3rDINQ-ERG7jrFbTLhWHka9QOMjHR32_VvYWEJ0YKRLIvZs4R-DBQ48zVUkfR7S3b71T4bQsj9qaJE5tNdevsiwsSAn2OhpkXVrs1sL5nzs1f2KB0WW6zXBdgeQo1riJEv-BGFL7Q4PM3WJidj_kaB5i0_0uACiCH1sCAlQv0w"; + console.log(clientId); + this.clientId = clientId; try { this.client = axios.create(); @@ -120,9 +123,7 @@ export class RedditApi { while (terminationCriteriaMet) { const resp = await action<{ kind: EntityPrefixes | "Listing"; - data: Type | ListingType; - terminationCriteriaMet: boolean; - pagination: PaginationParams; + data: Type | Listing; }>(`${url}`, { params: { ...config, @@ -132,24 +133,72 @@ export class RedditApi { // Single entities get returned if (resp.data.kind !== "Listing") { - return [resp.data.data as Type]; + return [resp.data as Type]; } data.push( // Only keep the data, without the prefix - ...(resp.data.data as ListingType).children.map( - (withPrefix) => withPrefix.data + ...(resp.data.data as Listing).children.map( + (withPrefix) => withPrefix.data as Type ) ); - terminationCriteriaMet = resp.data.terminationCriteriaMet; - pagination = resp.data.pagination; + + // Check if termination criteria met, which includes default criteria e.g. Cretead.created_utc within last 3 months and custom termination criteria + terminationCriteriaMet = + ( + (resp.data.data as Listing).children[ + (resp.data.data as Listing).children.length - 1 + ].data as Account | Comment | Subreddit | Post | Message + ).created_utc > threeMonthsAgo; + // Adjust pagination config + + pagination = { + after: (resp.data.data as Listing).children[ + (resp.data.data as Listing).children.length - 1 + ].name, + }; } + // Remove custom interceptor if used if (myInterceptor) this.client.interceptors.request.eject(myInterceptor); return data; } + /** + * + * @summary Get the profile of auth token owner + * @returns + */ + public async getMe(): Promise { + const url = `${URL}/api/v1/me.json`; + const user = await this._call("GET", url); + // TODO Check if no error was returned + + return user[0]; + } + + /** + * + * @summary Get the profile of auth token owner + * @returns + */ + public async getUser(username: string): Promise { + try { + const user = await this._call( + "GET", + `${URL}/user/${username}/about.json` + ); + + return user[0]; + } catch (error) { + console.log(error.message); + } + // return typeof usernameOrId === "string" + // ? await this.devvitClient.getUserByUsername(usernameOrId) + // : await this.devvitClient.getUserById(String(usernameOrId)); + } + /** * @see Chat messages are not supported: https://www.reddit.com/r/redditdev/comments/17s83sf/chat_api/ */ @@ -164,73 +213,36 @@ export class RedditApi { * @returns */ public async getMessages( - type?: "inbox" | "unread" | "sent" | "all" - ): Promise { + type?: "inbox" | "unread" | "sent" | "private" + ): Promise<(PrivateMessage | Message)[]> { let endpoints: `${string}.json`[] = [ "/message/inbox.json", "/message/unread.json", "/message/sent.json", ]; - if (type && type !== "all") { + if (type && type !== "private") { endpoints = [`/message/${type}.json`]; - } else { + } else if (type) { endpoints = ["/message/messages.json"]; } const allMessages = await Promise.all( endpoints.map(async (endpoint) => { - const messages = await this._call("GET", endpoint, { + const messages = await this._call("GET", `${URL}${endpoint}`, { count: 0, }); - if (type && type === "all") { + if (type && type === "private") { return messages as unknown as PrivateMessage[]; } + return messages as Message[]; }) ); return allMessages.flat(); } - /** - * - * @summary Get the profile of auth token owner - * @returns - */ - public async getMe(): Promise { - // TODO Check if getAppUser returns the same - try { - const url = `${URL}/api/v1/me.json`; - const user = await this._call("GET", url); - - return user[0]; - } catch (error) { - console.log(error.message); - } - } - - /** - * - * @summary Get the profile of auth token owner - * @returns - */ - public async getUser(username: string): Promise { - try { - const user = await this._call( - "GET", - `${URL}/user/${username}/about.json` - ); - - return user[0]; - } catch (error) { - console.log(error.message); - } - // return typeof usernameOrId === "string" - // ? await this.devvitClient.getUserByUsername(usernameOrId) - // : await this.devvitClient.getUserById(String(usernameOrId)); - } - /** * * @summary This method is implemented by making api calls since no such Devvit method exists (v.0.11) @@ -238,7 +250,9 @@ export class RedditApi { * @see https://www.reddit.com/dev/api#GET_subreddits_mine_{where} * @returns */ - public async getSubreddits(): Promise { + public async getSubreddits( + type: "contributor" | "moderator" | "subscriber" + ): Promise { const endpoints: `${string}.json`[] = [ "/subreddits/mine/contributor.json", "/subreddits/mine/moderator.json", @@ -253,6 +267,19 @@ export class RedditApi { return subreddits.flat(); } + getPostsByMe(username: string) { + const url = `${URL}/user/${username}/submitted`; + // https://oauth.reddit.com/user/Delicious_Lychee_478/submitted.json + } + + getPosts( + username: string, + type: "saved" | "upvoted" | "downvoted" | "hidden" + ) { + // TODO Move to params + const url = `${URL}/user/${username}/${type}.json?type=links`; + } + /** * * @summary Fetch comments for a user @@ -265,14 +292,14 @@ export class RedditApi { * @param after * @returns */ - public async getComments( - username: string, + public async getCommentsByMe( pageSize: number, limit: number, timeframe: "all" = "all", sort: "new" = "new", before?: string, - after?: string + after?: string, + username?: string ): Promise { let options = { pageSize: 1, @@ -285,6 +312,10 @@ export class RedditApi { // TODO This might not be needed options = JSON.parse(JSON.stringify(options)); + if (!username) { + username = (await this.getMe()).name; + } + try { const url = `${URL}/user/${username}/comments.json`; const comments = await this._call( @@ -297,4 +328,11 @@ export class RedditApi { console.log(error.message); } } + + getComments( + username: string, + type: "saved" | "upvoted" | "downvoted" | "hidden" + ) { + const url = `${URL}/user/${username}/${type}.json?type=comments`; + } } From b7d79f70ce78b41a3c2a5820b73e4fd60c277e05 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 19:13:12 +0300 Subject: [PATCH 30/61] fix: pagination --- src/providers/reddit/api.ts | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index dc7109a..651691b 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -119,7 +119,7 @@ export class RedditApi { action = this.client.put; break; } - + let i = 0; while (terminationCriteriaMet) { const resp = await action<{ kind: EntityPrefixes | "Listing"; @@ -136,26 +136,29 @@ export class RedditApi { return [resp.data as Type]; } + const list = resp.data.data as Listing; data.push( // Only keep the data, without the prefix - ...(resp.data.data as Listing).children.map( - (withPrefix) => withPrefix.data as Type - ) + ...list.children.map((withPrefix) => withPrefix.data as Type) ); // Check if termination criteria met, which includes default criteria e.g. Cretead.created_utc within last 3 months and custom termination criteria terminationCriteriaMet = + list.after !== null && ( - (resp.data.data as Listing).children[ - (resp.data.data as Listing).children.length - 1 - ].data as Account | Comment | Subreddit | Post | Message - ).created_utc > threeMonthsAgo; - // Adjust pagination config - + list.children[list.children.length - 1].data as + | Account + | Comment + | Subreddit + | Post + | Message + ).created_utc * + 1000 > + threeMonthsAgo; + + // Adjust pagination params pagination = { - after: (resp.data.data as Listing).children[ - (resp.data.data as Listing).children.length - 1 - ].name, + after: list.after, }; } From 9fb1bad3d7ee0beff88ac51bf63ec0314153669c Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 20:15:35 +0300 Subject: [PATCH 31/61] chore: rename and fix types --- src/providers/reddit/message.ts | 98 ++++++++++++++++----------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/providers/reddit/message.ts b/src/providers/reddit/message.ts index c57302b..acb65a0 100644 --- a/src/providers/reddit/message.ts +++ b/src/providers/reddit/message.ts @@ -11,7 +11,7 @@ import { SyncResponse, } from "../../interfaces"; import { ConnectionOptionType } from "../../interfaces"; -import { RedditChatType, RedditConfig } from "./types"; +import { Message, RedditChatType, RedditConfig } from "./types"; import { RedditApi } from "./api"; import { SchemaChatMessageType, SchemaSocialChatMessage } from "../../schemas"; import { UsersCache } from "./usersCache"; @@ -22,7 +22,7 @@ const _ = require("lodash"); const MAX_BATCH_SIZE = 1000; -export interface SyncChatMessagesResult extends SyncItemsResult { +export interface SyncMessagesResult extends SyncItemsResult { items: SchemaSocialChatMessage[]; } @@ -114,8 +114,8 @@ export default class MessageHandler extends BaseSyncHandler { syncPosition: SyncHandlerPosition ): Promise { try { - let chats: SchemaSocialChatMessage[] = []; - let chatHistory: SchemaSocialChatMessage[] = []; + let messages: SchemaSocialChatMessage[] = []; + let messageHistory: SchemaSocialChatMessage[] = []; const userCache = new UsersCache(api); if (this.config.batchSize > MAX_BATCH_SIZE) { @@ -140,14 +140,14 @@ export default class MessageHandler extends BaseSyncHandler { currentRange.endId ); - chats = latestResult.items; + messages = latestResult.items; let nextPageToken = _.get(latestResp, "data.nextPageToken"); // Update range if any chats have been fetched - if (chats.length) { + if (messages.length) { rangeTracker.completedRange( { - startId: chats[0].sourceId, + startId: messages[0].sourceId, endId: nextPageToken, }, latestResult.breakHit === SyncItemsBreak.ID @@ -165,22 +165,22 @@ export default class MessageHandler extends BaseSyncHandler { currentRange = rangeTracker.nextRange(); // TODO - // if (chats.length != this.config.batchSize && currentRange.startId) { + // if (messages.length != this.config.batchSize && currentRange.startId) { - if (!chats.length) { + if (!messages.length) { syncPosition.syncMessage = `Stopping. No results found.`; syncPosition.status = SyncHandlerStatus.ENABLED; } else { syncPosition.syncMessage = - chats.length != this.config.batchSize && !nextPageToken - ? `Processed ${chats.length} items. Stopping. No more results.` + messages.length != this.config.batchSize && !nextPageToken + ? `Processed ${messages.length} items. Stopping. No more results.` : `Batch complete (${this.config.batchSize}). More results pending.`; } syncPosition.thisRef = rangeTracker.export(); return { - results: Object.values(chats).concat(chatHistory), + results: Object.values(messages).concat(messageHistory), position: syncPosition, }; } catch (err: any) { @@ -201,47 +201,47 @@ export default class MessageHandler extends BaseSyncHandler { async buildResults( api: RedditApi, userCache: UsersCache, - // latestResp: Listing, - latestResp: [], - chatType: "inbox" | "unread" | "sent", + latestResp: Message[], + messageType: "inbox" | "unread" | "sent" | "private", endId?: string - ): Promise { + ): Promise { const results: SchemaSocialChatMessage[] = []; let breakHit: SyncItemsBreak; - for (const chat of await latestResp) { - // if (endId && chat.id === endId) { - // const logEvent: SyncProviderLogEvent = { - // level: SyncProviderLogLevel.DEBUG, - // message: `End chat ID hit (${chat.id})`, - // }; - // this.emit("log", logEvent); - // breakHit = SyncItemsBreak.ID; - // break; - // } - // const createdTime = chat.created ?? new Date().toISOString(); - // // Get the "from" user - // const from = await userCache.getUser(chat.from.id); - // results.push({ - // _id: chat.id, - // // NOTE This is - // groupId: "", - // // TODO This is documented but not included in the Devvit types - // // @ts-ignore - // groupName: chat.name, - // type: - // chatType === "inbox" || chatType === "unread" - // ? SchemaChatMessageType.RECEIVE - // : SchemaChatMessageType.SEND, - // messageText: chat.body, - // messageHTML: chat.bodyHtml, - // fromId: chat.from.id, - // // NOTE Handle and username is the same - // fromHandle: from.username, - // fromName: from.username, - // sentAt: chat.created.toDateString(), - // name: `Private chat: ${chat.from}`, - // }); + for (const message of await latestResp) { + if (endId && message.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End message ID hit (${message.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + // Get the "from" user + const from = await userCache.getUser(message.author); + results.push({ + _id: message.name, + // NOTE This is + groupId: "", + // TODO These + groupName: message.subject, + type: + messageType === "inbox" || + messageType === "unread" || + messageType === "private" + ? SchemaChatMessageType.RECEIVE + : SchemaChatMessageType.SEND, + messageText: message.body, + messageHTML: message.body_html, + // TODO This is not the id only the username + fromId: message.author, + // NOTE Handle and username is the same + fromHandle: from.username, + fromName: from.username, + sentAt: new Date(message.created_utc).toDateString(), + name: message.subject, + }); } return { From 8073ffb5a453058aacccbd98cb5c40dd5814871e Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 21:58:22 +0300 Subject: [PATCH 32/61] chore: it works!!! --- src/providers/reddit/message.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/providers/reddit/message.ts b/src/providers/reddit/message.ts index acb65a0..b7b0fec 100644 --- a/src/providers/reddit/message.ts +++ b/src/providers/reddit/message.ts @@ -17,7 +17,6 @@ import { SchemaChatMessageType, SchemaSocialChatMessage } from "../../schemas"; import { UsersCache } from "./usersCache"; import InvalidTokenError from "../InvalidTokenError"; import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; -import { Listing, PrivateMessage, User } from "@devvit/public-api"; const _ = require("lodash"); const MAX_BATCH_SIZE = 1000; @@ -45,7 +44,7 @@ export default class MessageHandler extends BaseSyncHandler { } public getProviderApplicationUrl(): string { - return "https://chat.reddit.com/"; + return "https://www.reddit.com/message/messages"; } public getOptions(): ProviderHandlerOption[] { @@ -129,7 +128,7 @@ export default class MessageHandler extends BaseSyncHandler { let currentRange = rangeTracker.nextRange(); const latestResp = await api.getMessages( - "inbox" + "private" // , this.config.batchSize ); const latestResult = await this.buildResults( @@ -219,6 +218,7 @@ export default class MessageHandler extends BaseSyncHandler { break; } // Get the "from" user + // If the message is not "private" there is no sender, it is more like a notification const from = await userCache.getUser(message.author); results.push({ _id: message.name, @@ -237,8 +237,8 @@ export default class MessageHandler extends BaseSyncHandler { // TODO This is not the id only the username fromId: message.author, // NOTE Handle and username is the same - fromHandle: from.username, - fromName: from.username, + fromHandle: from.id, + fromName: from.name, sentAt: new Date(message.created_utc).toDateString(), name: message.subject, }); From 56cb7048b6bc38bdc6d74c3e563ff439b8319e95 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 22:26:54 +0300 Subject: [PATCH 33/61] chore: rename readme --- src/providers/reddit/{REAMDE.md => README.md} | 8 ++++++++ 1 file changed, 8 insertions(+) rename src/providers/reddit/{REAMDE.md => README.md} (89%) diff --git a/src/providers/reddit/REAMDE.md b/src/providers/reddit/README.md similarity index 89% rename from src/providers/reddit/REAMDE.md rename to src/providers/reddit/README.md index 9ee06c2..2adbb3b 100644 --- a/src/providers/reddit/REAMDE.md +++ b/src/providers/reddit/README.md @@ -47,3 +47,11 @@ yarn run test tests/providers/reddit/api.test.ts # To run the handler tests yarn run test tests/providers/reddit/handlers/*.test.ts ``` + +## Resources + +- [API Overview](https://www.reddit.com/dev/api/) +- [Reddit Passport](https://github.com/Slotos/passport-reddit) +- [OAuth2](https://github.com/reddit-archive/reddit/wiki/OAuth2) +- [API Scopes](https://www.reddit.com/api/v1/scopes) +- []() \ No newline at end of file From 093b0cb6e976673a85c96cd7958cba590cf9f76b Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 22:27:10 +0300 Subject: [PATCH 34/61] chore: use proper type --- src/providers/reddit/usersCache.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/reddit/usersCache.ts b/src/providers/reddit/usersCache.ts index f2c43dc..5f3b67c 100644 --- a/src/providers/reddit/usersCache.ts +++ b/src/providers/reddit/usersCache.ts @@ -1,5 +1,5 @@ -import { User } from "@devvit/public-api"; import { RedditApi } from "./api"; +import { Account } from "./types"; export interface TelegramUserProfile { fullName: string; @@ -12,7 +12,7 @@ export interface TelegramUserProfile { * Helper utility to fetch a user object */ export class UsersCache { - private userCache: Record = {}; + private userCache: Record = {}; private api: RedditApi; constructor(api: RedditApi) { From ff810edeb2291ade3345022382b0224f8cda82b5 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 22:27:40 +0300 Subject: [PATCH 35/61] chore: use proper type --- src/providers/reddit/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 819720f..23ddb7c 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -50,8 +50,8 @@ export type RedditBase = { }; export type Listing = { - before: string | null; - after: string | null; + before: EntityFullname | null; + after: EntityFullname | null; modhash: string; children: RedditBase[]; }; From 7f6b45af5b0c9e6c1b0fb5500ba5062a9013e52e Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 22:31:52 +0300 Subject: [PATCH 36/61] chore: add handlers --- src/providers/reddit/index.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts index 407940d..a9d9cdc 100644 --- a/src/providers/reddit/index.ts +++ b/src/providers/reddit/index.ts @@ -7,10 +7,11 @@ import { PassportProfile, } from "../../interfaces"; import { RedditApi } from "./api"; -import ChatsHandler from "./comments"; -import { PassportStatic } from "passport"; import crypto from "crypto"; -import MessagesHandler from "./chat"; +import MessageHandler from "./message"; +import CommentHandler from "./comment"; +import SubredditHandler from "./subreddit"; +import PostHandler from "./post"; export interface RedditProviderConfig extends BaseProviderConfig { apiHash: string; @@ -45,8 +46,10 @@ export default class RedditProvider extends Base { public syncHandlers(): any[] { return [ - // ChatsHandler, - // CommentsHandler + MessageHandler, + // CommentHandler, + // SubredditHandler, + // PostHandler ]; } From 79e12fa222735a502a972185b42c2df15bd31c4f Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 7 May 2025 22:32:13 +0300 Subject: [PATCH 37/61] chore: message handler tests --- .../providers/reddit/handlers/message.test.ts | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 tests/providers/reddit/handlers/message.test.ts diff --git a/tests/providers/reddit/handlers/message.test.ts b/tests/providers/reddit/handlers/message.test.ts new file mode 100644 index 0000000..bac1995 --- /dev/null +++ b/tests/providers/reddit/handlers/message.test.ts @@ -0,0 +1,90 @@ +const assert = require("assert"); +import { + Connection, + SyncHandlerPosition, + SyncHandlerStatus, +} from "../../../../src/interfaces"; +import Providers from "../../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../../common.utils"; + +import RedditMessageHandler from "../../../../src/providers/reddit/message"; +import BaseProvider from "../../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../../common.tests"; +import { + SchemaSocialChatGroup, + SchemaSocialChatMessage, +} from "../../../../src/schemas"; +import { RedditConfig } from "../../../../src/providers/reddit/types"; + +const providerId = "reddit"; +let network: NetworkInstance; +let connection: Connection; +let provider: BaseProvider; +let handlerName = "message"; +let testConfig: GenericTestConfig; +let providerConfig: Omit< + RedditConfig, + "sbtImage" | "label" | "apiId" | "apiHash" +> = { + maxSyncLoops: 1, + groupLimit: 2, + messageMaxAgeDays: 7, + messageBatchSize: 20, + messagesPerGroupLimit: 10, + maxGroupSize: 100, + useDbPos: false, +}; + +// Tests: +// - max age days respected + +describe(`${providerId} message tests`, function () { + this.timeout(100000); + + this.beforeAll(async function () { + network = await CommonUtils.getNetwork(); + connection = await CommonUtils.getConnection(providerId); + provider = Providers(providerId, network.context, connection); + + testConfig = { + idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, + timeOrderAttribute: "insertedAt", + batchSizeLimitAttribute: "batchSize", + }; + }); + + describe(`Fetch ${providerId} data`, () => { + it(`Can pass basic tests: ${handlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditMessageHandler, + providerConfig, + connection + ); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + // Batch 1 + const response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No messages fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + }); + }); + + this.afterAll(async function () { + const { context } = await CommonUtils.getNetwork(); + await context.close(); + }); +}); From 2a18640655d721d41761f6f8d1b555d2188a1ae9 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 11:22:38 +0300 Subject: [PATCH 38/61] feat: request config types --- src/providers/reddit/api.ts | 13 ++++--- src/providers/reddit/types.ts | 64 ++++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 651691b..fc060fe 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -3,13 +3,16 @@ import { Comment, EntityPrefixes, Account, - BaseRequestConfig, PaginationParams, Subreddit, Message, PrivateMessage, Post, Listing, + SubredditConfig, + CommentConfig, + MessageConfig, + PostConfig, } from "./types"; const URL = "https://oauth.reddit.com"; @@ -95,12 +98,11 @@ export class RedditApi { private async _call( method: "GET" | "POST" | "PUT", url: `${string}.json`, - config?: BaseRequestConfig, + config?: SubredditConfig | CommentConfig | MessageConfig | PostConfig, customInterceptor?: any[] ): Promise { let terminationCriteriaMet = true; let data: Type[] = []; - let pagination: PaginationParams = config?.pagination; let myInterceptor; if (customInterceptor) { @@ -127,7 +129,6 @@ export class RedditApi { }>(`${url}`, { params: { ...config, - ...pagination, }, }); @@ -157,9 +158,7 @@ export class RedditApi { threeMonthsAgo; // Adjust pagination params - pagination = { - after: list.after, - }; + config.after = list.after; } // Remove custom interceptor if used diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 23ddb7c..c5c42ca 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -133,17 +133,17 @@ export type Message = { author: string; body: string; body_html: string; - context: `${string}?context=3`| "" - first_message: null | string - first_message_name: null | string + context: `${string}?context=3` | ""; + first_message: null | string; + first_message_name: null | string; likes: boolean; link_title: string; - name: `${MessagePrefix}_${string}` + name: `${MessagePrefix}_${string}`; new: string; parent_id: null | `${EntityPrefixes}_${string}`; - replies: string | "" + replies: string | ""; subject: string; - subreddit: null | string + subreddit: null | string; was_comment: boolean; } & Created; @@ -200,12 +200,6 @@ export type Post = { stickied: boolean; } & Created; -export type BaseRequestConfig = { - count: number; - max_replies?: number; - pagination?: PaginationParams; -}; - export type PaginationParams = { before?: EntityFullname; after?: EntityFullname; @@ -213,12 +207,44 @@ export type PaginationParams = { beforeData?: number; }; -export type UserWhereConfig = { - // an integer between 2 and 10 - // context: ? +export type BaseListingConfig = { + // fullname of a thing + after?: `${EntityPrefixes}_${string}`; + // fullname of a thing + before?: `${EntityPrefixes}_${string}`; + // a positive integer (default: 0) + count?: number; + // the maximum number of items desired (default: 25, maximum: 100) + limit?: number; + // (optional) expand subreddits + show?: "all"; + sr_detail?: boolean; +}; + +export type SubredditConfig = BaseListingConfig; + +export type CommentConfig = { + context: number; + show: "given"; sort: "hot" | "new" | "top" | "controversial"; t: "hour" | " day" | " week" | " month" | " year" | " all"; - type: "links" | "comments"; - // Expand subreddits - sr_details: boolean; -} & BaseRequestConfig; + type: "comments"; + username: string; +} & BaseListingConfig; + +export type PostConfig = { + context: number; + show: "given"; + sort: "hot" | "new" | "top" | "controversial"; + t: "hour" | " day" | " week" | " month" | " year" | " all"; + type: "posts"; + username: string; +} & BaseListingConfig; + +export type MessageConfig = { + // the maximum number of items desired (default: 0, maximum: 300) + max_replies?: number; + // ? + mid?: any; + mark?: boolean; +} & BaseListingConfig; From 8702df7d2b974d41000e0348aa89e367b47c74e0 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 14:07:00 +0300 Subject: [PATCH 39/61] feat: forum and comment schema --- src/schemas.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/schemas.ts b/src/schemas.ts index a1f9e1d..eaead72 100644 --- a/src/schemas.ts +++ b/src/schemas.ts @@ -154,5 +154,24 @@ export interface SchemaEvent extends SchemaRecord { attendees?: Person[] conferenceData?: object attachments?: CalendarAttachment[] - } + +export interface SchemaForum extends SchemaRecord { + name: string; + description: string + over18: boolean + type: "public" | "private" | "restricted" + // ??? + // syncData?: string +} + +export interface SchemaComment extends SchemaRecord { + author: string + body: string + edited: boolean + parentForum: string + parentPost: string + parentComment?: string + score: number + type: "public" | "private" | "restricted" +} \ No newline at end of file From b1fbcb3e46b0dd2b7175c01c346a247e9a9bc95a Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 14:25:25 +0300 Subject: [PATCH 40/61] chore: add name field --- src/providers/reddit/types.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index c5c42ca..8ee23f7 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -6,6 +6,12 @@ export enum RedditChatType { SENT = "chatTypeSent", } +export enum SubredditType { + CONTRIBUTOR = "contributor", + MODERATOR = "moderator", + SUBSCRIBER = "subscriber", +} + type CommentPrefix = "t1"; type AccountPrefix = "t2"; type LinkPrefix = "t3"; @@ -66,6 +72,7 @@ export type Account = { has_mail: boolean | null; has_mod_mail: boolean | null; has_verified_email: boolean; + // TODO might only be a string, wtf id: `${AccountPrefix}_${string}`; inbox_count: number; is_friend: boolean; @@ -78,6 +85,7 @@ export type Account = { } & Created; export type Comment = { + name: `${CommentPrefix}_${string}`; approved_by: string | null; author: string; author_flair_css_class: string; @@ -104,6 +112,7 @@ export type Comment = { } & Created; export type Subreddit = { + name: `${SubredditPrefix}_${string}`; accounts_active: number; comment_score_hide_mins: number; description: string; @@ -169,13 +178,14 @@ export type PrivateMessage = { dest: string; was_comment: boolean; body_html: string; - name: `${CommentPrefix}_${string}`; + name: `${MessagePrefix}_${string}`; context: string; distinguished: null; } & Created; // See: https://github.com/reddit-archive/reddit/wiki/JSON#link-implements-votable--created export type Post = { + name: `${LinkPrefix}_${string}`; author: string; author_flair_css_class: string; author_flair_text: string; From dcbc474b06c3d2fe8fd06244010917d40a91888b Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 17:22:57 +0300 Subject: [PATCH 41/61] feat: add comments --- src/providers/reddit/api.ts | 93 ++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 22 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index fc060fe..e20af01 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -13,6 +13,7 @@ import { CommentConfig, MessageConfig, PostConfig, + CommentFullname, } from "./types"; const URL = "https://oauth.reddit.com"; @@ -294,47 +295,95 @@ export class RedditApi { * @param after * @returns */ - public async getCommentsByMe( - pageSize: number, - limit: number, - timeframe: "all" = "all", + public async getCommentsCreatedByUser( + username?: string, + limit: number = 50, sort: "new" = "new", - before?: string, - after?: string, - username?: string + before?: CommentFullname, + after?: CommentFullname ): Promise { - let options = { - pageSize: 1, - timeframe, - sort, - limit, + let options: CommentConfig = { before, after, + sort, + t: "all", + type: "comments", + username, + limit, }; - // TODO This might not be needed - options = JSON.parse(JSON.stringify(options)); if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" username = (await this.getMe()).name; } try { const url = `${URL}/user/${username}/comments.json`; - const comments = await this._call( + const comments = await this._call( "GET", - url as `${string}.json` + url as `${string}.json`, + options ); - console.log(comments); - return []; + return comments; } catch (error) { console.log(error.message); } } - getComments( - username: string, - type: "saved" | "upvoted" | "downvoted" | "hidden" + /** + * + * @summary Get comments interacted by user (saved, upvodted, downvoted, hidden) + * @param type + * @param username + * @param limit + * @param sort + * @param before + * @param after + * @returns + */ + async getComments( + type?: "saved" | "upvoted" | "downvoted" | "hidden", + username?: string, + limit: number = 50, + sort: "new" = "new", + before?: CommentFullname, + after?: CommentFullname ) { - const url = `${URL}/user/${username}/${type}.json?type=comments`; + let options: CommentConfig = { + before, + after, + sort, + t: "all", + type: "comments", + username, + limit, + }; + let urls = [`${URL}/user/${username}/${type}.json?type=comments`]; + if (!type) { + urls = [ + `${URL}/user/${username}/saved.json?type=comments`, + `${URL}/user/${username}/upvoted.json?type=comments`, + `${URL}/user/${username}/downvoted.json?type=comments`, + `${URL}/user/${username}/hidden.json?type=comments`, + ]; + } + + if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" + username = (await this.getMe()).name; + } + + try { + await Promise.all(urls.map(async url => { + const comments = await this._call( + "GET", + url as `${string}.json`, + options + ); + return comments; + })) + } catch (error) { + console.log(error.message); + } } } From e18f9b826da563a538b0cd022a2497dd2683a662 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 17:23:17 +0300 Subject: [PATCH 42/61] chore: add schema --- src/serverconfig.example.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/serverconfig.example.json b/src/serverconfig.example.json index 6a4b71c..21aa1a1 100644 --- a/src/serverconfig.example.json +++ b/src/serverconfig.example.json @@ -35,7 +35,8 @@ "CHAT_GROUP": "https://common.schemas.verida.io/social/chat/group/v0.1.0/schema.json", "CHAT_MESSAGE": "https://common.schemas.verida.io/social/chat/message/v0.1.0/schema.json", "CALENDAR": "https://common.schemas.verida.io/social/calendar/v0.1.0/schema.json", - "EVENT": "https://common.schemas.verida.io/social/event/v0.1.0/schema.json" + "EVENT": "https://common.schemas.verida.io/social/event/v0.1.0/schema.json", + "COMMENT": "TODO" }, "llms": { "bedrockEndpoint": "", From 97ccee6da5f429f752b5809d282cba5db856dd74 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 17:23:32 +0300 Subject: [PATCH 43/61] chore: remove field --- src/schemas.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/schemas.ts b/src/schemas.ts index eaead72..74699f2 100644 --- a/src/schemas.ts +++ b/src/schemas.ts @@ -173,5 +173,4 @@ export interface SchemaComment extends SchemaRecord { parentPost: string parentComment?: string score: number - type: "public" | "private" | "restricted" } \ No newline at end of file From 2375118c354957df73e3c3c219c7aa5f08c6e157 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 17:46:44 +0300 Subject: [PATCH 44/61] feat: posts --- src/providers/reddit/api.ts | 96 ++++++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 16 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index e20af01..e2cda7b 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -176,7 +176,6 @@ export class RedditApi { public async getMe(): Promise { const url = `${URL}/api/v1/me.json`; const user = await this._call("GET", url); - // TODO Check if no error was returned return user[0]; } @@ -270,22 +269,85 @@ export class RedditApi { return subreddits.flat(); } - getPostsByMe(username: string) { - const url = `${URL}/user/${username}/submitted`; + async getPostsCreatedByUser( + username?: string, + limit: number = 50, + sort: "new" = "new", + before?: CommentFullname, + after?: CommentFullname + ): Promise { + let options: PostConfig = { + before, + after, + sort, + t: "all", + type: "posts", + username, + limit, + show: "given", + }; + + const url = `${URL}/user/${username}/submitted.json`; // https://oauth.reddit.com/user/Delicious_Lychee_478/submitted.json + if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" + username = (await this.getMe()).name; + } + + try { + const posts = await this._call( + "GET", + url as `${string}.json`, + options + ); + return posts; + } catch (error) { + console.log(error.message); + } } - getPosts( - username: string, - type: "saved" | "upvoted" | "downvoted" | "hidden" - ) { + async getPosts( + type: "saved" | "upvoted" | "downvoted" | "hidden", + username?: string, + limit: number = 50, + sort: "new" = "new", + before?: CommentFullname, + after?: CommentFullname + ): Promise { + let options: PostConfig = { + before, + after, + sort, + t: "all", + type: "posts", + username, + limit, + show: "given", + }; + // TODO Move to params const url = `${URL}/user/${username}/${type}.json?type=links`; + + if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" + username = (await this.getMe()).name; + } + + try { + const posts = await this._call( + "GET", + url as `${string}.json`, + options + ); + return posts; + } catch (error) { + console.log(error.message); + } } /** * - * @summary Fetch comments for a user + * @summary Get comments created by a user * @param user * @param pageSize * @param limit @@ -374,14 +436,16 @@ export class RedditApi { } try { - await Promise.all(urls.map(async url => { - const comments = await this._call( - "GET", - url as `${string}.json`, - options - ); - return comments; - })) + await Promise.all( + urls.map(async (url) => { + const comments = await this._call( + "GET", + url as `${string}.json`, + options + ); + return comments; + }) + ); } catch (error) { console.log(error.message); } From cf14a10a57d8696c6a41e3809085cd5554d8e203 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 8 May 2025 22:04:54 +0300 Subject: [PATCH 45/61] feat: api tests pass --- src/providers/reddit/api.ts | 150 ++++++++++++++++++++--------- tests/providers/reddit/api.test.ts | 72 +++++++++----- 2 files changed, 154 insertions(+), 68 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index e2cda7b..0e1a08e 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -64,7 +64,6 @@ export class RedditApi { client?: Axios; constructor(clientId: string) { - console.log(clientId); this.clientId = clientId; try { this.client = axios.create(); @@ -196,9 +195,6 @@ export class RedditApi { } catch (error) { console.log(error.message); } - // return typeof usernameOrId === "string" - // ? await this.devvitClient.getUserByUsername(usernameOrId) - // : await this.devvitClient.getUserById(String(usernameOrId)); } /** @@ -215,8 +211,18 @@ export class RedditApi { * @returns */ public async getMessages( - type?: "inbox" | "unread" | "sent" | "private" + type?: "inbox" | "unread" | "sent" | "private", + limit: number = 50, + before?: CommentFullname, + after?: CommentFullname ): Promise<(PrivateMessage | Message)[]> { + let options: MessageConfig = { + before, + after, + limit, + show: "given", + }; + let endpoints: `${string}.json`[] = [ "/message/inbox.json", "/message/unread.json", @@ -231,18 +237,27 @@ export class RedditApi { const allMessages = await Promise.all( endpoints.map(async (endpoint) => { - const messages = await this._call("GET", `${URL}${endpoint}`, { - count: 0, - }); + try { + const messages = await this._call( + "GET", + `${URL}${endpoint}`, + options + ); - if (type && type === "private") { - return messages as unknown as PrivateMessage[]; + if (type && type === "private") { + return messages as unknown as PrivateMessage[]; + } + return messages as Message[]; + } catch (error) { + console.log("[Message] " + error.message); + return undefined; } - return messages as Message[]; }) ); - return allMessages.flat(); + const sol = allMessages.flat(); + if (sol.length === 1 && sol[0] === undefined) return undefined; + return sol; } /** @@ -253,20 +268,42 @@ export class RedditApi { * @returns */ public async getSubreddits( - type: "contributor" | "moderator" | "subscriber" + type: "contributor" | "moderator" | "subscriber", + limit: number = 50, + before?: CommentFullname, + after?: CommentFullname ): Promise { - const endpoints: `${string}.json`[] = [ - "/subreddits/mine/contributor.json", - "/subreddits/mine/moderator.json", - "/subreddits/mine/subscriber.json", - ]; + let options: SubredditConfig = { + after: after, + before, + limit, + }; + let endpoints = [`/subreddits/mine/${type}.json`]; + if (!type) { + endpoints = [ + "/subreddits/mine/contributor.json", + "/subreddits/mine/moderator.json", + "/subreddits/mine/subscriber.json", + ]; + } const subreddits = await Promise.all( endpoints.map(async (endpoint) => { - return await this._call("GET", `${URL}${endpoint}`); + try { + return await this._call( + "GET", + `${URL}${endpoint}` as `${string}.json`, + options + ); + } catch (error) { + console.log("[Subreddit] " + error.message); + return undefined; + } }) ); - return subreddits.flat(); + const sol = subreddits.flat(); + if (sol.length === 1 && sol[0] === undefined) return undefined; + return sol; } async getPostsCreatedByUser( @@ -288,7 +325,6 @@ export class RedditApi { }; const url = `${URL}/user/${username}/submitted.json`; - // https://oauth.reddit.com/user/Delicious_Lychee_478/submitted.json if (!username) { // Contrary to other object `name` field returns the username and not the "fullname" username = (await this.getMe()).name; @@ -325,24 +361,38 @@ export class RedditApi { show: "given", }; - // TODO Move to params - const url = `${URL}/user/${username}/${type}.json?type=links`; + let urls = [`${URL}/user/${username}/${type}.json`]; + if (!type) { + urls = [ + `${URL}/user/${username}/saved.json`, + `${URL}/user/${username}/upvoted.json`, + `${URL}/user/${username}/downvoted.json`, + `${URL}/user/${username}/hidden.json`, + ]; + } if (!username) { // Contrary to other object `name` field returns the username and not the "fullname" username = (await this.getMe()).name; } - try { - const posts = await this._call( - "GET", - url as `${string}.json`, - options - ); - return posts; - } catch (error) { - console.log(error.message); - } + const posts = await Promise.all( + urls.map(async (url) => { + try { + return await this._call( + "GET", + url as `${string}.json`, + options + ); + } catch (error) { + console.log("[Post] " + error.message); + return undefined; + } + }) + ); + const sol = posts.flat(); + if (sol.length === 1 && sol[0] === undefined) return undefined; + return sol; } /** @@ -379,6 +429,8 @@ export class RedditApi { username = (await this.getMe()).name; } + if (!username) return; + try { const url = `${URL}/user/${username}/comments.json`; const comments = await this._call( @@ -420,6 +472,12 @@ export class RedditApi { username, limit, }; + + if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" + username = (await this.getMe()).name; + } + let urls = [`${URL}/user/${username}/${type}.json?type=comments`]; if (!type) { urls = [ @@ -430,24 +488,24 @@ export class RedditApi { ]; } - if (!username) { - // Contrary to other object `name` field returns the username and not the "fullname" - username = (await this.getMe()).name; - } - - try { - await Promise.all( - urls.map(async (url) => { + const comments = await Promise.all( + urls.map(async (url) => { + try { const comments = await this._call( "GET", url as `${string}.json`, options ); return comments; - }) - ); - } catch (error) { - console.log(error.message); - } + } catch (error) { + console.log("[Comment] " + error.message); + return undefined; + } + }) + ); + + const sol = comments.flat(); + if (sol.length === 1 && sol[0] === undefined) return undefined; + return sol; } } diff --git a/tests/providers/reddit/api.test.ts b/tests/providers/reddit/api.test.ts index bfb717b..785db2d 100644 --- a/tests/providers/reddit/api.test.ts +++ b/tests/providers/reddit/api.test.ts @@ -4,7 +4,7 @@ import { RedditApi } from "../../../src/providers/reddit/api"; import { CommonTests } from "../../common.tests"; import CommonUtils from "../../common.utils"; const assert = require("assert"); -import ChatsHandler from "../../../src/providers/reddit/chat"; +import ChatsHandler from "../../../src/providers/reddit/message"; import { before } from "mocha/lib/mocha"; import { API_CONFIG } from "./config"; @@ -32,52 +32,80 @@ describe("Reddit API test", async () => { assert.notStrictEqual(me, null); }); - it.skip("should fetch user", async () => { + it("should fetch user", async () => { // TODO Fetch from config const user = await api.getUser(API_CONFIG.username); assert.notStrictEqual(user, null); }); - it("should fetch privates messages", async () => { + it("should fetch messages", async () => { // Get all the messages const allMessages = await api.getMessages(); - assert(allMessages > 0, "No messages fetched"); + assert(allMessages.length > 0, "No messages fetched"); const unreadMessages = await api.getMessages("unread"); assert( - allMessages > unreadMessages, + allMessages.length >= unreadMessages.length, "All messages should contain unreadMessages" ); - }); - it("should fetch privates messages", async () => { - // Get all the messages + // Get all private messages const privateMessages = await api.getMessages("private"); - assert(privateMessages > 0, "No messages fetched"); + assert(privateMessages.length > 0, "No messages fetched"); + }); - // Fetch messages in the last 2 months - const privateMessagesLast2Months = await api.getMessages("private", { - untilDate: twoMonthsAgo, - }); + it("should fetch comments", async () => { + // Should fetch comments created by owner + const comments = await api.getCommentsCreatedByUser(); + assert(comments.length > 0, "No comments found"); - // There should be more messages in the last 3 months than last 2 months - assert( - privateMessages <= privateMessagesLast2Months, - "No messages fetched" + // Should fetch comments upvoted by a user + const commentsByUser = await api.getComments( + "upvoted", + API_CONFIG.username ); + assert(commentsByUser.length > 0, "No comments found by user"); + + // Should try to fetch comments upvoted by a random user and fail + const error = await api.getComments("upvoted", API_CONFIG.randomUsername); + assert(error === undefined, "Fetched upvoted comments without authority"); + + // Should fetch all interacted comments created by user + const interactedComments = await api.getComments(); + assert(interactedComments.length > 0, "No interacted comments found"); }); - it("should fetch comments", async () => { - const comments = await api.getComments(); + it("should fetch posts", async () => { + // Should fetch comments created by owner + const posts = await api.getPostsCreatedByUser(); + assert(posts.length > 0, "No posts found"); - assert(comments.length > 0, "No comments found"); + // Should fetch posts saved by a user + const postsByUser = await api.getPosts("saved", API_CONFIG.username); + assert(postsByUser.length > 0, "No posts found by user"); + + // Should try to fetch posts upvoted by a random user and fail + const error = await api.getPosts("upvoted", API_CONFIG.randomUsername); + assert(error === undefined, "Fetched upvoted posts without authority"); + + // Should fetch all interacted posts created by user + const interactedposts = await api.getPosts(); + assert(interactedposts.length > 0, "No interacted posts found"); }); it("should fetch subreddits", async () => { + // Get all subreddits where the user is either a moderator, contributor or subscriber const allSubreddits = await api.getSubreddits(); assert(allSubreddits.length > 0, "No subreddits found"); - const moderatedSubreddits = await api.getSubreddits("moderator"); - assert(moderatedSubreddits.length > 0, "No moderated subreddits found"); + // Get all subreddits where the owner is a contributor + const contributorSubreddits = await api.getSubreddits("contributor"); + // assert(moderatedSubreddits.length > 0, "No moderated subreddits found"); + + // All subreddits should contain a moderated subreddit + const should = allSubreddits.find( + (subreddit) => subreddit.name === contributorSubreddits[0].name + ); + assert(!!should, "No moderated subreddits found"); }); }); From 74bfaf0bf721d61a8d0cf991baaf5f08e3cd766d Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 10:40:51 +0300 Subject: [PATCH 46/61] chore: add types --- src/providers/reddit/types.ts | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 8ee23f7..885ba68 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -12,9 +12,19 @@ export enum SubredditType { SUBSCRIBER = "subscriber", } +export enum RedditPostType { + CREATED = "created", + SAVED = "saved", + UPVOTED = "upvoted", + DOWNVOTED = "downvoted", + HIDDEN = "hidden", +} + type CommentPrefix = "t1"; type AccountPrefix = "t2"; +// In the "docs" a post is called a link type LinkPrefix = "t3"; +type PostPrefix = LinkPrefix; type MessagePrefix = "t4"; type SubredditPrefix = "t5"; type AwardPrefix = "t6"; @@ -27,6 +37,14 @@ export type EntityPrefixes = | SubredditPrefix | AwardPrefix; +export type CommentFullname = `${CommentPrefix}_${string}`; +export type AccountFullname = `${AccountPrefix}_${string}`; +export type LinkFullname = `${LinkPrefix}_${string}`; +export type PostFullname = `${PostPrefix}_${string}`; +export type MessageFullname = `${MessagePrefix}_${string}`; +export type SubredditFullname = `${SubredditPrefix}_${string}`; +export type AwardFullname = `${AwardPrefix}_${string}`; + // See here: https://www.reddit.com/dev/api/#fullnames export type EntityFullname = `${EntityPrefixes}_${string}`; @@ -227,26 +245,25 @@ export type BaseListingConfig = { // the maximum number of items desired (default: 25, maximum: 100) limit?: number; // (optional) expand subreddits - show?: "all"; + show?: "all" | "given"; sr_detail?: boolean; }; export type SubredditConfig = BaseListingConfig; export type CommentConfig = { - context: number; - show: "given"; + context?: number; sort: "hot" | "new" | "top" | "controversial"; - t: "hour" | " day" | " week" | " month" | " year" | " all"; + t: "hour" | "day" | "week" | "month" | "year" | "all"; type: "comments"; username: string; } & BaseListingConfig; export type PostConfig = { - context: number; + context?: number; show: "given"; sort: "hot" | "new" | "top" | "controversial"; - t: "hour" | " day" | " week" | " month" | " year" | " all"; + t: "hour" | "day" | "week" | "month" | "year" | "all"; type: "posts"; username: string; } & BaseListingConfig; From 8907dd9e8be934b93cdf6488a788a5f39ef0319f Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 15:32:17 +0300 Subject: [PATCH 47/61] chore: udpate types --- src/providers/reddit/api.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 0e1a08e..14b9c05 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -14,6 +14,9 @@ import { MessageConfig, PostConfig, CommentFullname, + MessageFullname, + SubredditFullname, + PostFullname, } from "./types"; const URL = "https://oauth.reddit.com"; @@ -213,8 +216,8 @@ export class RedditApi { public async getMessages( type?: "inbox" | "unread" | "sent" | "private", limit: number = 50, - before?: CommentFullname, - after?: CommentFullname + before?: MessageFullname, + after?: MessageFullname ): Promise<(PrivateMessage | Message)[]> { let options: MessageConfig = { before, @@ -270,8 +273,8 @@ export class RedditApi { public async getSubreddits( type: "contributor" | "moderator" | "subscriber", limit: number = 50, - before?: CommentFullname, - after?: CommentFullname + before?: SubredditFullname, + after?: SubredditFullname ): Promise { let options: SubredditConfig = { after: after, @@ -310,8 +313,8 @@ export class RedditApi { username?: string, limit: number = 50, sort: "new" = "new", - before?: CommentFullname, - after?: CommentFullname + before?: PostFullname, + after?: PostFullname ): Promise { let options: PostConfig = { before, @@ -347,8 +350,8 @@ export class RedditApi { username?: string, limit: number = 50, sort: "new" = "new", - before?: CommentFullname, - after?: CommentFullname + before?: PostFullname, + after?: PostFullname ): Promise { let options: PostConfig = { before, From 3d6c5c7b355c8d3fbf492e1863a334d38e263a33 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 15:41:02 +0300 Subject: [PATCH 48/61] feat: add backdate --- src/providers/reddit/api.ts | 49 ++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 14b9c05..55d20fc 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -102,11 +102,14 @@ export class RedditApi { method: "GET" | "POST" | "PUT", url: `${string}.json`, config?: SubredditConfig | CommentConfig | MessageConfig | PostConfig, + backdate?: number | Date, customInterceptor?: any[] ): Promise { let terminationCriteriaMet = true; let data: Type[] = []; + backdate = backdate ? new Date(backdate) : threeMonthsAgo; + let myInterceptor; if (customInterceptor) { myInterceptor = axios.interceptors.request.use(...customInterceptor); @@ -158,7 +161,7 @@ export class RedditApi { | Message ).created_utc * 1000 > - threeMonthsAgo; + +backdate; // Adjust pagination params config.after = list.after; @@ -216,8 +219,9 @@ export class RedditApi { public async getMessages( type?: "inbox" | "unread" | "sent" | "private", limit: number = 50, + backdate?: number | Date, + after?: MessageFullname, before?: MessageFullname, - after?: MessageFullname ): Promise<(PrivateMessage | Message)[]> { let options: MessageConfig = { before, @@ -244,7 +248,8 @@ export class RedditApi { const messages = await this._call( "GET", `${URL}${endpoint}`, - options + options, + backdate ); if (type && type === "private") { @@ -273,8 +278,9 @@ export class RedditApi { public async getSubreddits( type: "contributor" | "moderator" | "subscriber", limit: number = 50, + backdate?: number |Date, + after?: SubredditFullname, before?: SubredditFullname, - after?: SubredditFullname ): Promise { let options: SubredditConfig = { after: after, @@ -295,7 +301,8 @@ export class RedditApi { return await this._call( "GET", `${URL}${endpoint}` as `${string}.json`, - options + options, + backdate ); } catch (error) { console.log("[Subreddit] " + error.message); @@ -312,9 +319,10 @@ export class RedditApi { async getPostsCreatedByUser( username?: string, limit: number = 50, - sort: "new" = "new", + backdate?: number |Date, + after?: PostFullname, before?: PostFullname, - after?: PostFullname + sort: "new" = "new", ): Promise { let options: PostConfig = { before, @@ -337,7 +345,8 @@ export class RedditApi { const posts = await this._call( "GET", url as `${string}.json`, - options + options, + backdate ); return posts; } catch (error) { @@ -349,9 +358,10 @@ export class RedditApi { type: "saved" | "upvoted" | "downvoted" | "hidden", username?: string, limit: number = 50, - sort: "new" = "new", + backdate?: number |Date, + after?: PostFullname, before?: PostFullname, - after?: PostFullname + sort: "new" = "new", ): Promise { let options: PostConfig = { before, @@ -385,7 +395,8 @@ export class RedditApi { return await this._call( "GET", url as `${string}.json`, - options + options, + backdate ); } catch (error) { console.log("[Post] " + error.message); @@ -413,9 +424,10 @@ export class RedditApi { public async getCommentsCreatedByUser( username?: string, limit: number = 50, - sort: "new" = "new", + backdate?: number |Date, + after?: CommentFullname, before?: CommentFullname, - after?: CommentFullname + sort: "new" = "new", ): Promise { let options: CommentConfig = { before, @@ -439,7 +451,8 @@ export class RedditApi { const comments = await this._call( "GET", url as `${string}.json`, - options + options, + backdate ); return comments; } catch (error) { @@ -461,10 +474,11 @@ export class RedditApi { async getComments( type?: "saved" | "upvoted" | "downvoted" | "hidden", username?: string, + backdate?: number |Date, + after?: CommentFullname, + before?: CommentFullname, limit: number = 50, sort: "new" = "new", - before?: CommentFullname, - after?: CommentFullname ) { let options: CommentConfig = { before, @@ -497,7 +511,8 @@ export class RedditApi { const comments = await this._call( "GET", url as `${string}.json`, - options + options, + backdate ); return comments; } catch (error) { From df9da199d8668fab39ec0a5a60d4607e51cc60a9 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 17:39:58 +0300 Subject: [PATCH 49/61] chore: rename --- .../reddit/{usersCache.ts => accountCache.ts} | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) rename src/providers/reddit/{usersCache.ts => accountCache.ts} (58%) diff --git a/src/providers/reddit/usersCache.ts b/src/providers/reddit/accountCache.ts similarity index 58% rename from src/providers/reddit/usersCache.ts rename to src/providers/reddit/accountCache.ts index 5f3b67c..636219b 100644 --- a/src/providers/reddit/usersCache.ts +++ b/src/providers/reddit/accountCache.ts @@ -11,23 +11,23 @@ export interface TelegramUserProfile { /** * Helper utility to fetch a user object */ -export class UsersCache { - private userCache: Record = {}; +export class AccountCache { + private accountCache: Record = {}; private api: RedditApi; constructor(api: RedditApi) { this.api = api; } - public async getUser(userId: string) { - if (this.userCache[userId]) { - return this.userCache[userId]; + public async getAccount(userId: string) { + if (this.accountCache[userId]) { + return this.accountCache[userId]; } const user = await this.api.getUser(userId); - this.userCache[userId] = user; + this.accountCache[userId] = user; - return this.userCache[userId]; + return this.accountCache[userId]; } } From 9920b608223abfd1c9124f77a27a29db05ad9881 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 17:40:10 +0300 Subject: [PATCH 50/61] chore: add icon --- assets/reddit/icon.png | Bin 0 -> 25132 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/reddit/icon.png diff --git a/assets/reddit/icon.png b/assets/reddit/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..649d38f01e0acbf89c67cb4abcdfb8f8de72b7e8 GIT binary patch literal 25132 zcmV*CKyAN?P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00006VoOIv0RI600RN!9r;`8x z00(qQO+^Rk0|OKrJFA!+#sC0e3`s;mRCwC$y?1~lM|uALsqUV*ySIBe=yZ3w(E zmQX?2l7uc_(yN z{r;%#p6Z^S4R^aUvwQtWecRLB)6-pD&r|RF)?3wr6m19f(lHOo0JDH@U_P+eUlsui z{berD;ZQB%YL8_=m)B!omkw_>XJ<-WaEC7}RD}hzO3N+alphcj7Cb-?C%l6O$F@h%lKC~!o0X71gfUW-aUcha1 zqEr-Gi&Oxbj8O=0p~-waa58YZzpMg|L$~<(R$u=(Q9@e;JJEvhw7)zLY)6ZRO!{If z2+c(*08Kyx(hIbiz6v-OI3HMpZrx|2&HR~!DsUKWB|HT@3_OAsh=YKtE1*;irW~mN zOc5H8z6hKETmW1OoQF2+ds=g#PYNOXYl3E(c^ZnUM)7e6o+gULfG07r>YNPi}9EpQcZhQBSv_|XSE z3H%zk9W4y07)&x!0XPCQAblPkw0jxw3R2QfCIT_I6}Sx@P%Om{O2uH}NCjX5Xh8hq zffoaBK>PLcTYa4~9Q)Dnf*%6ELiZ{}kP5;0kqW>#kU;z#a1QWB;8o~uyJq#lr_k`w z-HJa2egHfQl+6QDAs8E}0E~hJ;?G9=^zQ(!Mt9?-Xgv-BcLLu+#|#deJ5wQOj8p&; zkU;#!z-xea0v9rU5^|0;lz<0;{|0`7PE`((3PC+m0Wgq2{AIwKfp?*!`l*>eJ>UV4 z12+NR1GbqvQz57!6#yC%|2p8efYV6JX}UrI&j8;5ZYC9iIvmp#JAwF%(8T|3beG;S zT|P4i3f*=1HM9`yF?SxzLU2r0@C4#_qr34wj84x@v-D;rBs%T*U(wx&k;I~7Q3#GX z0f>=53tR*I0XnKb(+1$ANJbUiYw(Z2FVS-#0LPvP95Vut(CVKFd=wqzo7L*;OVJYa zql1M1gibXMajXczj2D0e;?D=(2Yd)U^fpC`Ex?Vyf1)!DL(Fs`n9%|dBfpIvobw6b za#BA(MHCXa2lyNG;3F^CF_T4L#tJ};{L9dO{`)v~$KIzHA9~T2z&~Pi8_rY_m~jFS zBfbN?8u%1Cx}PG&c(D%nOLRtIIH%!E6M`8f05S3(2mBH6e$pUciX%fm@bAFiqvtmS zW|j!d2mwe4^t~APbKtU8Ut5Y9fwjPA(8G^I%mg8r_5u(ie;4pU;N$2ivs0v)EbIe5 z4}1mvo&;d}i@>xNfEf8#1D^%ng7*DWq?l~Dz;}T^16~L=PG=FAwgM0%|Fyv9(35ne zNHNuT6!;{%yAYVZA~5X)AV&N=df?8d&@=6(NYO0pMfVbX4P$=7=_UlzN&sTyp9g#z z_#M&-I#RR-CE%;TUjPS!jnhd4ri}o^$bS+#AoJQ*UssA0z%A&&^ZH=JbP<7RApkM* zUy9Dsx}eq9l_G_KhtS!k_XZoLg9x;>03`J9zYh2U`gK|X-e<024yS)ur09cn(e9- zc&;AH7aY^tW^DoR59mQ>U&5Gdq#ee>+qv`unY`;U)CY;?Mc(ZRrZMod6i*?*MK9 zK7zIaQXC7AK*oU+&V-9!jXL+GuQrZ6q?{CUx0eWZ^Ol}f!Rlq+vT~i^%=ykZh~L_ zH|*clD%Ze6PdWA(+E4`AMgS7X{}HA~j3UL+LIU#^qh9~}@UrWVj`(#@@chGw?|vTc z{Sj2Ft*G@b+7f6x5ooyp#3H0A`HwXyV9jNy>;FGE}zoRYVCS77dE<%f08x{Y`07RjMm>m z_w#>(HYt=8Qw)iY@PFX*&^@pDzkk+MsQ>dtn7>53Ak9S)CpZ{2Z1Wr6tlYdf!eG|m_FGs!W&mdQ5g$U%)b^g74`>EF6DItFH#G{VllWovr%yS?Id|y0Ca!AOcMlfP_(fUm%^k@0fzR=ACfS zt6O~;8krpGtsjSFC$}OV0J`pf0nG(nK1~*ZR>c5LLJ#Rp2lgB*P{6`vs8@femd4u- zIPN6WtA1CHF=!1|qPcKVD}KCbcWo%!JoIE9>3IHQ4C>0a>YV;oUr7AAu6PTqSko#i z05lgqkLE^Gt$?NoKx}Z&r%7k>IkupHp83ct-ii`JkKk()D1dp#p^4sV+{8AiCkRVUJ1iAcllu~+hZ@Y+qe?9VoS3vjNR`dv%_#HGy^rbaH z1g2B~5~l9{6lr(gu?HJC=Nhbh5le`0X*B{dLMhbor=VKv27u769%6D_PYbm8oTd0e?sfX?4_pzY6w

?)V0oFT5Y5*Xp7K_%`}A zcLOkW;{~Qf0Agm#AEOf<+Nkd*#bjc)%<^!hle;RjSXb>}yPIV|3S0?FNl*&mlS%;i z=D$>M;>s0#@vlD1#pj+AP69Ml2+aLpJs`hQAT0~=KKV5De!l} zhN%#NsV3!%(etIJc-Z08_QPM+6iIUO}wrTPS zAwXCN%i@{GALk4I{4ad%pZ|%j&W>@t-by^#KQgH>TL0tFWBb!gzZnD%!6VfUZW@`-9V1=rsR+Dk1*#*+Y6Z`&B3&2d zxk%3gDMKqDaJ#h?U?D6m1Z(g5H5)c;;M}v%ss-kRm=qyMYW2YZOx!1x%^{802?=KLReB>Jm!PJZ$vx{O9ljzCYZ7yuT^MlVZwIQWiff&EZRf3wdtD#x0K^OCz}D5xjC4 z=~gxAEep%ZU^xz!?I3I$Vc9hi@Xx1o(~FW4&vTjG)6JZ@bCG~VA+!nLvtEC$QL}*> z7=(|k1%%f>914JG0Z65E@1JaKAK)l>KX5njBhXx%ED@Lr-+URmFEbtCHv_QU%klSv zi~0WGECxztypev~(lB0W1kZI5LSSVw*qJO=CX4N4u$&CSaj+~KVOt2H1t19iX(H;_ zK($ig;ul@P%2g|Iy;}4=8VfKKgsfJxItR2rPN!i-k%MfSTzaEEZ1xLBz;FJM;h~;XE|AJ`Q-3Wd%&O1#m6!zGjz9 zipj^%%Cq@Q?-Di)Nxb1+s>6f0r4f)4JDbDK7a{^+XLC52436XAI1ZL=BWx!WfQ)V7 z_<{gX$mcla#8tfWjj!k2GuPmHo_>#qsJ+jlCIUnQh&5-zxMEdj_5<}TzwhtIMZgn^ z%pveo)lpCL%O%BR;=84}{8{f3b`DnXh6bn(58#!{ z2;0W#=)x%!aPkG5TmdJWBb&>S$z*VRS0H2CblZ}pVuV$ypA}-5j#phz$C``j$mg&v zo6e3Ri{{UxqgcT8JS-s)LLijVe+4=gAQS?j&3+LH>(#-G;RU28LVg`%2+1#N7J#Qb z>@81$C);PH%zE^oIrcEHe=@9qqY{8v;O~9F<*h886i1KmmFDv4!%NsbSjHXdr#du% zSFK`avt$Y#IE4-}g#wv;fov{MHk&1r&EjNp%yI;$iheFtdpXzJ$8tHqELFxr(N`Rx z|BN%Rk=Oy*fvT&?uS7t6flwfV&pwHT&;HS@^Dw(NDcJ|p0`UKa0sw08FqsVxx4QVp zgUiue`&&5rfZ$}g0A~UpqMfxf#hAFg+`|pMi#7QN`=|^JAYB(HUm#QL&`Y6%Y`#D) zpC^~gk;&zmoe^Bf0bcEH<{WPyT`KlIObN~tzovTCd+~~$*j6wg$ilJ&Dj>c9%Wv^@ z%+NRZ{UO9=7GaVTVCEV`2KpE+znShk(k_SOJq^0bB#T zxz#0-;>fXAX83IXaXdGu@P-Gd3=QA~fT^X87XZLJp2pa7TuyjtnDgI}G?`iyh<(e#>9%;KlXZPp;u9RO;vfH)#4ztM=l_Vc9{0M8c!r4Yk| z%>VhnkUh9_I+7nW_dbjc2<|x&E8u7>fa^#z{-!m)Gcu2L!&y|R7k6YBq{Jz9;^d2D z3Pp0h&z~z4xyb3|4@>KgocunlN{J;u{~{xcPGo5L*;uZJumqlvSe|bISV3S=j~KMf zn1C^rSUe9fH2DqUE9nRNl+*!08RP&+7T*0$W0s2x+!$dqNB5uLPsa3<*R(QbRVm| zLzDC45(ZXZ$i{bmp7Olq2qlefK%eYZy#*kQ{DJsjfcOL-kv@M}ivcMA*g5NNVa0bp zgEQ1O-30*PDd1K3;{+yR1srLo$92Hzt-k9NM~?56=CQG4=}~>9lFseV>kPk)-_M`T z=b4wY_+a&^$s<321zj5+WX1PxAa`&(N?1tWMAv~i57+gmRz0d!mul6eQgx|RT*{TI zUdmO|VD_M^X=DdY#u#p{mnQH&3<*8jJd zDMfb-V!M~)CnMc@9DliltX8lyS)5!RC#N&~a=9G&T#nbvt-Po*sRPh71oS+8Co8}G z2|9K?i?D2z5@Dp?^K`(@6og=@hKn1noBKW2!}TPde;z6Q*nsCT|AFtZ;(LEaws+r5 zs=)%y$z?FHnS_tT0(diUTC49k#gXGzm2Ngv9Au@0S1##(`dm&A?8)WGX0tfC9H-es zyruFS_EgQ=D`3|1_p<66A7$>7w~@iqLx{tiAEWEe599?A{J>(6UTvEvYps0nT_FU* zw#f}0;`m$tf#u)-ESbLjGl~2GPU8sjamFP8hN3J6-o;ETzGDQ#%Hq~i59O+>XY+BZ zSawE_@XO}NWVHZvWE|e)Ze*bxn%WBzP}sGe761LmEc@|a({*qwSzC`NbS!}#_69^p z32LW5JVm%zejLHJEF8xnBR%Fkdl##|{t*`c;zsP!&`hnp0(d8yqvN&$CfW<|8g$-& zifM}H-2#tQ3Q!%!t5i@@V&x0inVcT*lhIJ$@VZke}u|Gsz#| zEc9$#|2Ez)j41$ylFUXcjNR(HOmXD6zuLt?SNIcnRy0}s*?b&-NN+x4^D=MS*eSk~ z37?qRJsVl@qrYbM+HWy(>g5cdb`|C0Psg1#A1{+f39Eicuma0-vC4yF4sNHg;UPMn z`W1yu>#&CUebb=TCEpa-Xbb&&z~S-a1x&;OxC*$i)pwZU$Wc{-2P>VpuBYemb6tdO z>v{Y#861B$pQToriz~ZYbCJFfWcF<(vv(_9_x=yw?8UeXSL&r_F|wlv{E0=Vma+Q} z;2hkJvu6X&{;k*p2MJ#?aBL9Y#D!?C{%|}8k17C0>z@POLHb_5X^nj{!*gx{JXcTM zEu}w=mxJv%*tU)BIGm&Qvg9ZeevTTxQ!m^K&c3ZUd$$62)*SsnDU^)9&o2xHwD$5_ zh&-CBKLg5RSpnlMrgKPh{--^*c{%oa4tRRrejuE|*Ye4qw*}|ReOOZ!`9Bf_gbsXo zJ+4|MBQF!xYmT+q@iAN$quA{);<=KXIq9EEbCq7OLS^Uuue@ z$E(oX9kokvJQl!8$VoAN*l6yK8n{ms0K;TB z9k{gBcaq}h;UXAPR>F+hwej@==vL)cUuufU!=?Cx_8PeXV_5(%L(li0qMZ?>#Y%ti zVvB@|rx=k|LX^Dr;ynvR5qH${Ac>^mrf6%-M{~F#M#}@}242zXJ4j(b5hb4hYzuOE z$Q7Zp8#?DeM>llMfmw4<9X*JSSy*IozI7L@-|Ek=C&HI>25;*{DY7s7EjXbERT_q& zJ{aml3?7F5gD}(!gS{|#7)rxX839*DugB=3Ptg{51@JFGU((Jx0WeI3Gl4T&ef7sI zOtJ?=@92W=c`*NYSg;(mcqJ@c0dtqY?1h^6g-$I7PR7rc6DXh)c#XS+C%^Dd9PB&f zPn4m%16|jp>bk5xVFhQu^#ibEQS?%z2c8GzAt(*OP(K{r3kP?>zO9Hon_=%(*tZS( z_UZkuSG)F96k3Th&|JPJDJf_)3*cI`6_BD?2+V5>D0IM_MX>Z_SbjQc#Tq#7L{0v# zIhy2R{Hzkdd*Avd7R;H=w{QL*o_us2{f7@z=SGo8Q2SC5!5Yswgv_c!NJ|IYXfY38nO9F*s&fC?1bTd?M9@6&}?+0xqMI3&U%mV zrQw%;0=%fzS3jc>`0WBH6kz@`Sa}xelndd+b70Ad(6a!tlaqlRJnWHDiGv3Z(bwNc zHk)P6oH@+y>Cvy~n#}uiE82C~wGlQwhIsxVc;OM)y9I^^^}VOrd(FUa(4z$V;ub)p z=neD#GW48(sRc0E2uN?E&G{8)pw?UlYhDD)Plwryz@F@vHb*hqwAxb&DWPvaYWuC`~mFQ3{U?C@$l{N+yiiMXDSAhk8U)l*T#1wSpY@g2aM5u zkYXGN@@cxdVfA^a3ttK6zC`==lVsM<7`PSKy$PPU3-Q2D;o1A3_dqQslHzD_8+v@e zuxSB=0uW37xdVS{p=krNdn~Dm6UN`EY*~WVK4ZgitKp(op)PqXtU3pZU9B#q>4C}! zYXY#GT)U zC+~*--pM1NS%(~3yJB5)VAfnH&H_6_Scjww!vnhh3>?(!Rd;gh(9}W#*8|^xngGOO z00Nyp*q-D!ed)Q2;e<2biYJhZNEIQ3%GMX!dlu7brY^@BQ6j11_0>c@Vi{m%6d!|>4f zDpqh!J#*ob*P>o_J)C@@?ki6*b&wuxeiHGEZ^B*Qg?&3F_PmN6aMJmxi(Un1zt|7L z9)(z!hjr}Y@n0hz_z66FKMeG>tDEo$I<|Kp;sO}v|3&B*4feG9N`cx#n>`OMc^&GS zcWRR5J0}0PhWg;?wYp+G^mF|Xlk6a~#lQ4*sF%MVPPx!G7gID1N@*du{p)bo&9Hx0 zW70`<<8i^uQ7?H9oPL?knw)HuhT!=JwUu(;kKyovb`yeL;N`#rpxuDD0DK7e*H&L8 zpdVVHs9V?9{T`fh(UkX(15hpNNc4}s2)h zcvX1(F2oQ15gxfi_Zl33BI>OlhpXPEgL=(IWdzp#2yye@z{bb*w$@t%{{egekZ}Q+ zjW+*VH}$syG8wq~?WlKt29~U9bz$jX;rG9QT7Ejb{Cen4M@P3chWp{y-$6Y0ptc-W zo!#myf?XRCH~l%>`E96HTP*?)qTPVQaRE3J-T%L!C70#z>_g`RJR$A?%kckCMq2^RhXm#eS8hPQsa zy~qzK`KKe=iTt4J^jkl!>-d}nv~bq7+4ysOs+UG}=yag@HC+L77NS1`(qy6_O zQp_X>3tsYWUDxLP!j;h+}JcIpldejcmE!)x~?Uqks?LYan*IY&Uejj zl?a@Up9B~PKo8K|h?@ekIn+Bp1y{eLC8dxeMayvYJ9OR8=2{^FtMGGu0s&Y69M|;A zc-i~lH6NbP%r+@f%m@gf>;B8$*NR_14nNo*2*7fnc^#z^IQ1gb+y8GmEH=fli)>zV z;M9wn9Tc2}=6omsD{0o7fBl?(_0CV}`R!7qIF>R0c+G{b?q<3Ic{Jxk0cf88uRvY> z4mkhiP5a3dDcTz6zZ_otj%LRKR)H3P46vdpKdFF4%TTZR5ULq@{V7sR2iOkkH6MmW z%bFJ!`*F#kB@HSa5wY`ivt0e+Fz8QmYj$@ z`9hRZ=>PPsry7vrn1?|EdCEnoB_}o`FCdRE0E^JmY)RE`Kw-hBMK?Fc+fvSmsnmiFuF)t%UigrV!;WJHPDUtJ+>h}{&eFdIt0aN}43pHmk zvN%htoFXKDC<5VuM=t_O`6fmx0x8-Qkp?fq1>X`V%tFmw(u_;#ntB0HAZIT^IXPbd zR44=i{gp}lNwWl0%Kj9Sipi)>jmcl*hRo!UvzuZ8bXmX@yk#SH)19+*AE&AX0P$}; zObQD3al|5^>Y|Bh!cmIJ!DIxigZiFKe%~?<@&P)VGCgO9!&K)02#|$Nqyj56_yrP$ zB>*LKY53{ELJ0lpHlYQ`xN z$ggTSGD@HdUCpSsc?W316uct5IY}@EIVu7I6^;=Q2$Vo?Q-BbomPKeth}vgi?p4A0 zrt%KK^E?K2@8-b9jU3v%g`xfXaVr&^Y?jW23z@%qHS51;dQ2{J(rQbJ`QZy z$iC;FXJGek+)^3KaVXB6!|Y|tn78^wx|c4+$>_Ojn^k@)VQoU+odEfz0wr|g*8~(D zV9MWSsQ~E*=PYO_0wHyUCT&m#B52(k2tm;Li-xVe-Z2%%fB-5ZBW%6zexCi=&)BhU z9sPUuQZ1EGo=)cy0)%Cg=_oR1#R^Wk<{H+#;dRVivErB)0Ri;y-ODpS`6^~Q%lz3SS75S5 zVB5p%c;IVaWAi<~p)@dvZ3#LY!GbJwT7sMaTY#q|!|oux&pyHZPd~*oKm92e|ITl- z=5?A zImF;$lvhPsR)qYf2qfQaO$hY5zt!;fWh|3Q7?wklD=-=C7eKXK=8I)Qi5t8`aH$9ZR@%7h8x)T?DJgy(T`BN+Mwz^zoc z=S%;>Gync?oNAR=(ghhI{c_V~C&E@#AeBYN5)^HVg&Dh!`kTxrFH3-;`%D^#UNkI=Bl}8btYT z)U_l?pYa0CZA(POpjOTTkst&?;Rb)}+_5Q&2UIH+e)GjI@z8&M9p!l}%?VD+OFAuu z5E94o{6+dLnF=LMS7w1HZER_?SlD#f@boR;XYJg%T=}t&VP|IkRB4ZV`#Ws<`qwze zDKRIbu!Y32TpY`b34rk9M;4y4aHWkUZ5C%NdThn>C5tT;$&)|$AxOowH+*JN;sT9= zek$Qe<=0Eo=r@CXfl!3KR56o3$cYJBe+f_;#5%OADZN+r4Xe0e%6~<`@CC2I>sg@9 zcTu-{OaxI;Wqhj^EA{^s<~gIyeBEydk-U8jJaW@bto_ozAgfiD=itnON5KNy^2pgP zIj2g_cF9yb(a!=#i*6<_=UkVZz7tQAbOu#AXm-M_&DiDm-UsrLkDB@)2SM;_(g8^27o zRAOls*5p010vyXF?^MV;6>@fktX(B%Yas|Kcerkq$>kLJPKSKPC1;nImGL;q?dO?) z`!a`j>}-Qq$WJ~5Fw)=8V_&|J6@9yzomFJ*Dh0bj&Z!t8Q1ur#{G4CO8!QT}oi88;4mZUDXif~E zS|zh#9m5yCR&Vf~e1+3VpkFGdF8-YF_%}_xx7B>bLk_*is1*lNTYdPCFC(yvv}g8+Y$MhJLe_p{=`_ zo6j<^>1m$%{`a`_qaSU?V`(~Gxcv^Cb@#F`hcA*9Z7JCvw($J8Nth2>gA&*ofpz*h zIOkjh#ZJoGcX8;h2N~LVh?8N<`M9p;7E`Y=lE}4^0 zC;NtX;hcUp&axHcFT9BE>)uLn@mz9Nh2yeSdT+gj!`rvdC@Vk!!+m}1{K5aQl;M#4 zq1o>Xr(- z6HoB;E&n^A>x;Jh4I%(ZX1`JQf?OBViVf;;_&2bA%{uNco|Je>p$2=&KL0?o9!(y00Keqd?E0pUXK)_R0hdo!zm3lm`o99FBHOtv_JvmU$>Q~pSrjos_kkzfBfomm;0`x)CMWBB=&sFht%ZZ;CTqkwb4<&ZDb%1%mh zCoHG?>{GCX#~fR+EUS>N%hNx;g~0;{CYD+}QJ+6n=LEz^uVQ~|#P^gYyRPfC#?V7x zZ+nK!j%S;dzCLULr78az0rpTIg-33qTB%a?JY2s(Ol!c434vD3dL@nayO=>2PqYwWVgfazrb}-h(ZxDXMSBp18^2E zBAXLrY?rxWg#LSeMWrnmiW!g0 zh9~LYv13NK0Rk8~co6y2BXnlGh_w`wUdWL6wKDU&0tFD1UESkSh-!(fRmHJ9x@^UQ zjG{VHV&h$RA!YK+nxV)i^z$DH`NKLV&~-Sdv!Nv`jg~&4zI&3YRIqOw#YcbMlng*0 zLl!X5l%KL7w|hMukKIAll~k%O)vAZ<#zjDe1tmi(LDpLT*n=652u#Qwh>1XDWP}~- z)`3zibQF#s_0L+K-|~B*$tr{jD{)YP!%93n2wR?y{*(|$lN(b>O; z!RMcC%42B;2Dfe@zi%r!$LQV@HB(;)bz@~_6p7ZbJgTlo)s^HQxt-ju^-T%>`50)P z006?3%)a+##G&1|o}yB9!=;*F4R}UyBoKjMxbQ?oU_3E_x~iabOFpn~9|t#WCT9ue zI=Z#eebuf(ejU9QM(c%$nX*d31HXXvPiP-j2&j}%5B(aRU58~U9HCu_q8z5W>G>Ix z6P!-wgx1w}t99VGaKzP^#W9+E#efqBB-1Ms7NhZUzl zR}X66Zq(KnuqqXlWnm$4lt<12cgIGglvqcR)Y1-+fZVZ}yej*>A+_$l2>Bb8ng5*G zw+r>XufU2^p`#16XFGE1CM-{3TTWk%9fBPfN@;#NX_~;uzNSvQi;xt9;i~w z>hr>&UtL8u2RE1}vw)ESc8iJE=9;6l$S{Y!#ooMeW=Ip59z5J2HWp$)mB-?%Ft;mR9VrxW5-dEUnOmCK>pfP zHv&(}x}1L*xVD~*SO^}1{Elatch@(3%dn|WXRk%G1wcS<|27ugaU+xl@RY*!bS$9i zdQ_{PHj65HsaD<4M>3vAG!t+PcffdDfpu>{HFOCSFnHhqN=gcr(rLWH!!aZMMzlIo zk?m0yr?wvU6bOZd76Hdr*aHWVBU9f)JLOP{Y^guYjj&=qJ{V;-R=HUqY(ErWi7;_2 z2*3up14T6vm0DBx@58yG?ZwE3VVD4i-V{pYe?7jTmx>rwVlUxdgB?ZC~SVH3Y zu7G7(h(ZpOo;fJ!cWq<|1TAvZ5~vLWYB-9}zrNrxSBHl|;g9Q=;eZtpnz72fty(1x zNFI&_rZ(CsINpnOIf}pvkl58>L{j8?nn6~pIMoqsOGV2q2>O}Ul27t*3Cd2QYbgF- zReO$FgjHybIl?0^6hbK~LqmEzapXBu_hC$v-#>OV@`qN5fNIs%R)CBr1{uk0zI(9X zzW-s)qd#i}`8|9A*p1EwnDWU%O^9lR<8J>KO7l;k_teV~Qid&|LLj6-3J{h+2!U-G zGqBW&0EXXh`1}~>3m%w=iU4&k0b%;E0xHA9fWi?XG+%8|YstbPN*0g<3PR7Z6v%13 z5|@?Ey)=9c;a`X*gf9X}n%N&TWsn}0SE`Nj6AAYekUtA#1!SnX0cQDCfs#Uufb#rj zr*!T>Ae@#Z$y&bBhRt}w3_I~aF=nf;SCYtI=N72w83Y2)lT=(+oBsj%4bm&6P{N}7 z*}GYC`@bNnl~xEq3D{$y1z@DuJq4C!sH71!^-U=$Yps1?*45mB z=);Maa)uda25`bTi0fQ}+JhB|D@#BM;1M?(JfwVN>+V- zi8Ff+RSpGArDgZ&}{CV1n8l}~rxWBLJ ztpaLwQQxwN`TPDgS~i{ApJL^=KS}47$C};c7so!J&jR|0_Pf6LCP~r6)v_qylt^qnndjfHez*1B5*?iV+3aHa*8L z^Q%mKgg@TuH!}Gf1^WUa(5tmcJ^(CZvKbwp&|TZJ*RN&eO@B=1rbk-Y@(0)h^jqlA z%9d7N4Ho3LKgaTKevE~`xrw~2l64$1mcX$Dj%C%lYr?{hnO_l?z%cg4;}RrT15!cH z^5qog&SAg>&p%iIBC8O&Nx1JEwOJW_a~8|OS#^5Ue4WN{R-A;$=Az`cnVeVBWb}DN zSRbI@6=XZRn0w-?I*ZOEe&beuG?Tx+v5D3>bTXR|*p`LkIOJr7g=@dXivRi;g&ohe zy5$eB1*is9Z)2;k1^^43-n}gP-k($4_5_Eo{V=6PtMH`6v1%#6LIe*bm?b3kMxn5W zpwEXAK4yFqXL=9u(ON$kkT}olj9N!No(cEwB>o<<_2kVh{ z{3)~UC^EK9=SVLL?)fImzVh4jti2iGmfOMX4^TpLJ`{kh=vYAeKtN{q2Ik)U85ZAo zJ+mIaEp*Vr#~6x0Xxxv>C8z}p>jQ*!Zh=y)yz&ZWuUf_CVVjE5eN(E6*)$wE%p?~D zSQhr>uSayvZuJwGJY=%iSG^hX#lXA**T474fS*_4DZ!?Z4EgyBIr-%;4@^bsq5v^> zuin>>2l@=>AY%T6;&C)ObHVbb4GqSrkv=i|I^rJZ+3cx;KXREKO4*p26 z>~jxMy!$4omSe%1c&o3!mLviVt$_wY5KcViNxGLV<*c{7h5f3)_EJW>2^E1Var6(j zgeC)i>%ZzO#MN)DT{DxTGp&Yo;Y$%`U7-Ujpha&oGMy`+N}B6?D;c(wvYh&=SF!N4 zQ&FC*C%$S-{83wdy`jEAF&YznK1tz`pOJg+Aw7>l`;i|s*Y`n90D5VcI6x9C5F-O9 z&yA|E5%}@f>I5O|6=-A)=r7i}1*&#Nl!7&Hd;?2gbOn$0=NWKqkRW?GI>)ID^edF~ z@1>&)@wPufEL>Joqlil~Jwze#T06S2-th^TzoaGtgX-u+psJsNa-k$`9_}qL>$I~u z@4fFqI8N<}#)(e@Uw^b#Kju=#Er75NdY*o*SNr(-N!W^EM$dq0!X>%{b+LhZx4^VA^w%W$*|WLwYySmT>%e*>i0`ImDO~-he?rf)Whg1@h)?*OgG*GAhC=U;b}u*XSyD0K@ISj% z#Bgi!>L!4v@$F9ghE?Il`M~RG=AfYQLV+rFQo8KTsE(c>ys!5O2-1c`EzJyLXWhE+ z4~~rekH09yIB#$f9rNe2;Iz|t?&&QY-npA4`3hN~psWxjbcd=Z>KPIE`BkMYh7oF} zzXx=5!Q1{6uKPG-as<_JV%DQbT%GFY(%?gbOBAs3Ea;gBFFXW8L;6y^pzMM&6ZK{1 zqJ8}#1^u9gby>R#9y-*?3-iz8>Kp!?6_;M7(`{qdl+@yzM?_xd<$oa>D6UU6ueU&f z$_V*8{uBGaj&?QwtH76mX8`QaZUSEf9N;Z9c~H=}VLOyAc>{9xLc+%u&LCl|haZLU zQ5bq5h%rBsfWs(4pp;_PlEo~&=pwcr_Sm{{7u{YzosQC7h^}9}qb;s+90GOHdC2#F z4qowr2>Bb~=<3vwe*5TbipaNZ8&;nOC!UKqupMz=2l%g1Cn&?9d@BCmGFmW8{<_p% zx`)da_YE)R&;@VgickL;OV2-FxBMpk#~^-$=&{d$L179 zLCq?3qfR*!b?FoN+?qF{;`r*?)Hw&^K6BvzpL-2*)md=wkFoB) z8L@F43?I_1eSA`ozzXod^YlwVb~sDebMj>@c-7mu`0A_4b#%Y?K%MQUgfa1mPwY?#4A&t^2mlpY2!Zq{l;`4Pvn)LQbXcVs!)V{2RK=99DNQY!^D`dB8udCqw1ODAD(dZI4j5IQatI#Jd$#c^Ek|gmPV^upv{RQ0Sl|o5OM({Y*WH^rEw>)Q{#f zek*>-3B)(olg#~KPg0k&0_>gZb;e)&;$e&ojQG0&A3=8y^tAdalVI<79?HY0Y#~bC zkP(3(07_4=p#p0lVi^FKLJ+eKhzS9~Z<(%xAp}y}t(E|?IhJfZb5-~V zk5sXVD@1I645~5vXdn-h26Y4yqUu%x$S7f*EI2u=&N+Y|l@3RJDv&O+P7{-fpA_6P zFCjww@cWI;{f7QOfLq1h{%o`7*O~}=(Hsxq0Ejz4y%f;>gPVZ%OGFpo?AeIu-G^Mb z!uOXA@&@D&4mPa;ll&OROi&1d8Hfme4$~@7wb!24Y{tk>)d&y`G}d019*h1fVQi)D ze52z?C^~s)O!nGF)!<9vUbD}R2EKjW_xwF7cG@E$ez=`Fb3gc=xh{tLakf3v&gTCn z{CppAhu#pk01g7{Xj1{O5AVj=xgK}n35J>P@2s-|3_)n!6P@*+OCl zU?l0sNbQZJZ3f>plRp$@F1QL!PebuzBm~fx5L_bE3 zHV#tJ)hS#eKb?4G(W?XMug&;I_$js@^Q^&G5M`cMB|an7;2A}pedKd(JrISuS9(Xz z6Z<{_XVYU?0|(kw03@2*5tVcj4ty9rRrumoUvV82i_RWb31}i z0E{@mX5b0hQ2+#FwmprrXCsvp&N8~s0@91o-2#m5;}L@RXW{$$AsK~#3RU~HvBUu5 zCu6pMTo8oe3W%C&)FY{qM)oJLY&`vdqCSuqWLt_x=P=_Su`5y0kJ0U;5?*f^7wL(* z0(HbUP5a32ndh%h503tgx(!MQ>_fZBu79XqTYu1;-V8PWACfJAVc;&{Wv#yAItZ}) z50HEM9?C1uLO;!bdhr0C@-2jTEMS~MV0;d`4{Nn7np70G3Puxy@G{K&f-uaW%}Ytm zM0I@!FkD~!?_ycq>fKsIFRLed??e(rjb0)_L~pxl^iH%ON`xR<5K*HGqC}0dT9k-h zm$m!$_kS~Q=FPk}b7$_%z4N)B?>Xn5bIr%27Y|ezUrCEbPxHZqonNQ*E}K zrF~RdX}0pl>xYN=j9S{b6IkuxXwisMeQ$u&?xJU8cgx9qBe12uzQ#_l=66A%#_{}@ z*g@UvVe$C#I*+OsQ{&pw`Kewl*F0b(7V3;HVgMwLy@_qO@_4?ZsuGY6JOACiD*t$mJm4wmAHbG#&f6KX`T4T&!g8%RJF9U_>+@h5(?4# zX3WeiT7tT5Qju1(eUC;z(9F6MHU)k1x#v*qvBYc3&j~iie7h%1%C0GqM;_wP3p5sz8+aPw} zmW-m7%NcE!Q5dya5IoVr9IwHk$1OB`Du#2}DDX39JpZYG`mpQfvWp?an}~ieqak%25OaOprJdLN)+#wEXU<*EX`WYFm znn(>ssDjj`4R^O4F64AAit3~laj7fgWqw5E6pyUq&4uyK*45JH?>0N`j|x?}q&VY6 zTV?udSURzb`q<=rvWi)U-Zfjw>hy|O2%C50rlR*KgoBp~@|H}K(#7E<$s5Fis%0DH zSFHo++uv;&w^wETsqx`ZIz1K4l>95omtL-T*U}WLcjEcqU(449+Yg(ACr=hU7D8mW z=u5DyH(O1wUI~td5B2bxykIX1B*>3Gaj%=x10VkpWs|y9BL0>tp)jz=$WjvShl|J z`MaV$bf^6CSBj5{&-JC2{64S;MqQ**KzRVd%L}vG3*F@lEFwiVi5fz~#bY=t6(sx( z${l9^(9a+^nz?vQwXm&nrxq>&+b?A4fj{DCKTr8bb@*vC_pl^ynZ2Yg1Fs~&yCe9e zy0nna#KN4&$9bm1)4$T|I;B5Sua8?N5IKuz-wQ)q%=asz7PSejd1qLw=x9_AN90F5 zgF0-&5R+_h{J-M}rn|=5a4V~@3ksu{`OP4-`avqUFd+&?mKBRPQA2n6B3cIuos>Km-m`)-Xh+a%CFMA(V4lN4MTn^ zY%1YT(kFLU1o-pzjoM-)5@OU0VA@c0v}G{XVrrqcx^=g7pCbN9R*IahbpOzcThQZ< zVaJMjAOoV`>RFauN5P77nD{GA)PNBG0+LZj4rfjTP@O<^p|WNm$=j#|vxKfDeKaHcJo0>VDI=9&5VFKz#X)Zera$)`rfzO8xD*LSN(y2_Gm3{;}Y#dJwxBAhBEt(ke)t7C-k0OHT&#$ zL&n#q+)SwYOafWHw$27jfk}hsR+E|nBxxS`5YWVMKF|W!l7EW0mu5V|g^W*#kg^o5 z+Q5HQJ^YzZz}No-b7lLmLBAVhY=uVx_wO^C|0FNkFwg?L$?h{VU@|DRx@Nz=V2E+H zq^ancNmNy@?rDAX&fv{e$Igndbw}=}eQEH|8?$FDOI!DKi)VUAbH5H>`#f#FHfBG$ zQy`yeEiSUX<11aBQ%4*P6z@xppko`FtAXgW-(wdCgm`T>VzApHuRZTg!EGXqXcZZ9 z2BK*8C1ti$CLUt_LJNx*Ct5$~p9LQ@cl`UEv*%O@eA12a8QW^z@Kno~Q2JI}%!Y0% z?S4KG&D*HRz{rW>C^vbBz@V%HR{XN6Jrx)CH8@9#salc^Z@#(aFww?AcIs{^^rZIm zHUxGZ@<>gA zO^VMH_;A6J>0|*S?^4MGo$&pjEmBR)S{cNCYGZ)^Pj|>GI+}Z#N>CM7lt^${k8Qat z^slH!?VFp0UN`Y@Ej7U8;^GJ-^t^1$sy;1YU(12Zg$&}iSX$e`#<#b5_)O|;=F4r+ z5YTVvY~OGpmp`J(mDUH2Dkh%y@SBBDOq8|B3$jpJ!Fb6IKxTlP=9?56Xb%T-FUMXP z_PjdHsO7Dz7f*Pujp26JTHJO1>FvbbXAG?Rz09>%e;2odE7!DGU6RL1m*;$Djderh zdI=QnbJV$651=vdwa<_~tS)f5z5lk}N^JGkxSg-F@b@LBc-&y|hpdh}kNFc2rqAFEM@BUhAO#LF!g|;a&JCzN;>*1RtrEkhJ((QN6PxOg8=KD^r+Nwk+V?Q#gb1WWRZ z3dE_GEGZFb$w;@$IE&KBiSqX!PN7I;Ps7>PdG{rVHFT_j>2bij8 zUG5%5rhGhfxC}#j_$5QgKvVD7Y0D_BrB<2iA&R=g&uhDyw7^B$aHJNIQAgb08o~>a zSkk4--^KNFdw$t=^trX|L0#9#-C&U?btQf(;#36JXW zz-=bQj2;WE{^jE%h|%~6horwMN76Jo(se>{9oi4Si92yK)m` zf;PvKF)m4~!v*h0LOn>AmnP{$9tkk5KJb@oT~E8T6TV@#-vi#Vi2UWE@q^VHEcx|Q z^umg(thCZA6Fk^*_}VOaU77dIs~6B7=G_5iISp*pQ%=bTohvo`KWfb1P(2)%uG~}o z!leo4Z*1P?-SxO|N?s-D`RPU$a89CdK z{lVSUW)MfO`%BCD=&wouNyy6Z zOI6UC^?9K|70sDZPfOKrF%``z1f`thBr=w~;IliVy+C;kZ7Uvyf{JewyE*5lRIxf$ zKa;#PE`!Alc{`X*Y6;Ix!t^1MSB8zW++nrp#=(_GC56JbKe1(B5AtL@FVz&@$Y4SC z|K=crxFkV(7_l$@{Pa&te$HQrxaEji@|rGS>*SxzU!3nhjc>j9MpS`hVkF4u=iC;W zTTZw+{1m*Qp1}_=v8IyGT>r#qqvz@h+UE#Mn${t)*S_7@U&gPVI~{VwJHbzX^@~*ypy-dUde~uIa}ZuwScyI1KMgXK+fMb#=x}s| z$9?tKJ>?SzCtipjTUfv5`&G@j=0g`@&M(9cpVew22OKF~IAIoa=g8Ny11;>&d`|{& zqxQR@;?M;3*x-hL`6x)swf$DN5(7AZ%spOBymuaj)iMHH59RMs^qPYN?vXKyu1O+p zbTP+Q2#E6o>eKml^{Jwq{0MMsW2sB0gw+l4lpnHF&uy=4g2x^24PO7T9HCkB*hVoT z9fjKsBFe09Wi7(PKrlVUCtolyJUm!UxY9Xmw5^)F72a;O&>@_o+OiZeOK9hsNtFOy zWts7kB=Pu4GbmmXq^nRkTjMJj!8Y|(we9bQz(AX8;m8L@o8iwZAq$NjtdD{c{`7Dl?qU7<9iM4*!z6Mz9F9(|=A^;znC3(~v^xGoDATDs{2^1)9N`HnJBx==MWWnR2%%;H9f_ak;q~R*kz#*~SmbdX2pm z^=1Y6gsldJY=bFQR+<9sH(hRSZmD}u&j@RB_3d~sW_I?qW5VO;jgc#ie9HDMAF?vq ze727xt~ztNQHiYPO)eB5qBl&!rWv{%0*ORUvhkvh`{`!NEa!=>*Y=*;+|%mU!URpW zI;n)X>fVH3QY~bs@2S8i3E&tpT3jEE#0NLwH+~5b288*k>B+SyrZhH@iz>4^FWP6) z-873!F%X=2J=QPfid0dLQ=ShV|`=0`T^Qox}@xyf|X zvAJ3Fwf)ta`S%|4(}&S$yPExj?<#o?4Lzfu+ulrsT}q{u{!Oxu6^m{j_^W3-OkhZx1 zj+LT7gMZe8Vw^xaAB%0jfQX&O%Lou^u(hkt=EeN$V`DK~qyR__{Eq*3Oe{*ic_SXE z@`a4nCTCh*PdDHxBV#dw;|RXw*Rl0iXygwW8w-Pn9iKr_*Blry= z&C0aDGM#VQ|BdV$4Jfsh$T#Nq7KbU#X?JU`TxAeOurS9bMq(A4v|+DTcbgYlG@pu3 zEPpmCxBAoYv1kL~)tPL&>PJ=3;^~NM2M4>w5@|dComs`8Uvx6d;JqN755vxqY~4;I zPpyMV>JYO+UynO{Mi@!iIG9Sk0)g|%oqv~kxRa*vWx>FW{#4qc+)18~LRa%?FdlO^2K}{f{Dk;yOD<-vd_$1d=q4lOWFgVET(SxI*i8m8Ew1|t_cgGS zaU3(WVh)nQ3A$Z@Gu=gF%@;%>fdr4@X_Zzx&97_#_V(Ga=BL$ljn_H01D~=gXi=&Y zmp<%WM@T8W@HpZQ{A)^B_3Q`nM{IKYe_kRE_yopn@m`1e6!8p@mln_fp(Wi4kLXHc zX|7`e3K{jr6*g!$92}lE+0l#887?3ZIPENT~T+jlvB#E;Ypp^5F<9g~_3o(GW_5BAe}=@I{R3q6h>5g+oKq#kOa%9n2Ee*bRF@hSjL%P! z>*n}w`$sr9Vj2ntqpwoECZj$^Yr3of^u6x18I}=E981cb!$_)*WbQb0K`uGoFupAQ zeCsz2UN|ibH;HNKT*r!k-C$GniM1FRR8imOY}B3c(5EA;yc&1JAXZLDDmnlXDTYb~ zCEUej+{N6*vvn7^u$yesKYB6lv&qZP2S?IIU52+`6GPKTe`E{x{gF`TcGeP{eMRgQ zRVrmhrwcL7T2Ftgu*XJXChthC6cqB0f3)S{^$QJ{E zsUsvKAZ2`%dC$^}pVcQ7*4=PZ7T)QVAGqakKGPkF(24|jpLIT?hZQZnAD{fOEKz+Vog{oF7m8}hl}i{w^4k&!fh%&%#u zJ|?yK*M8dhuk&y4r$QgKocBMY3)iYNJ08eh&3Z6M$tj3Z#>Yz6YdIWQaqpPLD`bFq=uooL4W+?QKIylmqlXdQ6i0QY_yB6^ zT&hsUuZ=M=K6JA9=8;{$Y{x!7#X$Rp>PVs-Tneivo)_QOqK$b~t+V`lxJO6M{Y&xv zo5s_pGfYF$!nKdA4!QY4Rzz;wsA9qjEJBxZa@!Bz?!n3fq?QRg2oc{fWl&{<$Kw6? zkx2Yt%O^6K0OY-e+i5EAYxMl)p9D_lTs!7Xl?WQNmz3-Kt%)iwuFyIp>8Bb5@l?h*Zq#*sqMr%88Xi5 zAKu=q1wk^QDk5L-kz2Gk3pE8L%g`*lYWR8OVc!CHBprq&x)mmCS1_2^Y;9P}vHeiL znMabPY30a%tYyb)K#8(<2LjeEdSr9owBcRIR?x;0J#2dyH6I#YGRw$aD6AL!hFC*8 z>z?6D@wfal5TAdXRWyTV?0?5Y-MML0L8z?quNNfSNR+gTqBqE_O^VhsY%&bfO^D_f zj`F9)jo{%?DUXf3p7ulo>zWEMXU|4UgjNlMMg(-A?kBieHGrNvd<(NLXJ3ibi8A~} znk@LcQbSfI&Kzt4Tte3jE@NtOk*!N(L2DuRW3R^PHbB=PU$FwROl^2Be%~-SVl%wp z`8;C++tm1;@@$*_Ui-D-x$P-~;Mv<3)B07|d;&{OhkIZY+ltaR7+5iQIpSN@K%in$ zxv`UD={};&B4g^i=}n;GC-GnHv4?)Gu#kg*;RComKBJ6BJwxGPJ1uVx8m6h~9EX!q z@RDTTrpTS7z{eL%G%ClI%8Cbm->)3AVxWzzBu)|}T~}@hFGYp$(1whC{?b6j2Faj# zJE$aeV=;qJHuCMXWWBZX{6$NL>OWf2pLbOLxYJcI;uZ4P)%&OL2Ejjq)f8+(-3YI; zK_>u!7MD}4R7CQ`Vc-u`RqrT_VmY2ln3Q!4aJiC-yvy84Bgk)6?wOK*1o+H$QaH0 zHb4Lu*Cb&mVXc!St<( zU39Nxz&hLNrt3?iIf55f3JI6Dw&7LW%2E#jDih4dhIZ>F7#FJ^*DpU@yi?`#rt`!; z_zp^c9V(2>IXcfwaJq}mUJri7lFcT?#%;$0X^=J5y|3c*ETX)pC~lF^&n6Hf{(UL6 z<_B?}BCCMH-3!uGq>=wpX56&S3}5cz0$B$Lksy{kh!61NIu6-2_>MNgdM>Hp<2&uV zT&De5(Xs6=`0-gvyB(p#e8~v2IT1J|r*444!6tD~Ch0(T(O=g;g5?g7ERGM4ufX!J z_@y88y6r{j>I&U^M_@J5c?@XdLumSM_AT7q`Yn#5=T>DRm)m?sZFLZ`{@k0Fja_JpPeGSBf+*RbG zC;J^_H0(Hzk9On9Qw^CM-pd6aGt>=Q`EeY^Gp?~CSYBT`c(4!RaOGrC29&D7 zC>fz}5x=PDp}nhE+INGOu}=~~PqKyLE8o_KTsa&CbGY{PImswQckTz(UX@#>tr1 zjhxYNC{f0%)!T26;zw-a8fLwr4_C z(+g4G3GH!3N?ZZQERt{u!uisWgeGH@(XgM2Xlf%{{mWy+*TO;;_~-k+s=CqVJ!kJN zBTvDlQb6vzI84-JJEM0X<3?Kd`C&{%R9w31tLjIYO83xi3m`OQu$r{?^usdx^8M2CBkeVg840+~Z2I$jhYrJd`m98gpzU=UMn6N}u6wh45<0Q75E_0-e{p9DJj2o5q_ z9^om)9)j4Bta6XbbK%F~2(_JF6U#91Ng^#9VU9_>P=-SBT=|T%4?0s7ucj!LUBgT4 z9EGe9ZUlJ5cEsP+d>{AYf=w#u1b9jOw!EZI2)@LS*`;*@Lh0@*O6UY!@D+Y%p(lwL zaB9%Sc$m1o({Cqq0$SRHh8R{i^;7lRbNuqHhvL6rk(8Hr6ozcel8?TqbExQH=p-rb zcI_^6+@d~rO-*J5-8?@1nEQPp_NOaK4xaH)zAW1j@4rjW7l5JU+^vw`trxL#$wUSt z#SRtgP+z?eeXR?2f&4j&+zjOb@TNreUf~9>9ORoagx1_@a6rt9tJWYUPf)GDX$@ zY6Xas*;Wj_@=t0La1}(Y^AmFZ_kc*8H23aXM0cAbZzd!~4e(zX@peI7u|-u^BtAn1 zeDJ_x?b8o9TPq$2_7u8pU}+o^4jp5z*YAwZ$#8TAjyk@+Slb8)e%SU;$7D226;B6O zmHBFT56eJ@%jExQjwkk09ffs(Dsb&ZQ4;PN?)5&tdwe-am{z&x>o!no*oy$6hBNVi zf+~>hD+&9SemoLDTS#{jNzg%+yYe^DD4pv~ z)NUoFHQbgUcDzvFgw>G?zaIGY>n!6tt{5t+K#psHV}f%YcIUJ3tZT>rZZhQ}|B@Mb zk2xv_pN>OHV|P4LA!#%SbZ#7AYf`m`P9Q&7X-#*{Y)!^D=a~T9SPvbKgS{fY>uO3d zv-M4I#K+r15H7FRUEy@&brHTe+&_(Ol+&|nF}Z=HXpM<4x4>69-3o?!Hv$71BH_h& zj4d~%PsW(eOIfr1cAvL$5Xlhqoe(^ken`Qa4?4E(DG0|Y9<2*huz%V;Y!h+wfwLbI z*Hf<~f84Ou(N(^uFi&O-|gX^~>Nr5sE=}>=eZHG=XBr z!D~Fevi1pksS^1M_w0xjL2zX`qA!ew=XQ(9hdD=QsZ}Zd8(IGjVzH3Z=j5JKdNne* zUnSi0)in2YviEhCbA0WLI{_qM64D|tN!(!~0h5!Em6H}1g2Ciqu)yA)n*R&n;pOz) xCFuVTASn(6;{g2shr#!`hqI5by~nHn2j;>5Ch>4)ti)jex|&8BpVjOl{}-mpRpbBw literal 0 HcmV?d00001 From 9904e52cc82db292df164ecf26db82d204647448 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 20:07:07 +0300 Subject: [PATCH 51/61] feat: tests pass --- src/providers/reddit/message.ts | 93 ++++++++++--------- .../providers/reddit/handlers/message.test.ts | 38 ++++++-- 2 files changed, 81 insertions(+), 50 deletions(-) diff --git a/src/providers/reddit/message.ts b/src/providers/reddit/message.ts index b7b0fec..e986efd 100644 --- a/src/providers/reddit/message.ts +++ b/src/providers/reddit/message.ts @@ -11,11 +11,16 @@ import { SyncResponse, } from "../../interfaces"; import { ConnectionOptionType } from "../../interfaces"; -import { Message, RedditChatType, RedditConfig } from "./types"; +import { + Message, + MessageFullname, + RedditMessageType, + RedditConfig, + Account, +} from "./types"; import { RedditApi } from "./api"; import { SchemaChatMessageType, SchemaSocialChatMessage } from "../../schemas"; -import { UsersCache } from "./usersCache"; -import InvalidTokenError from "../InvalidTokenError"; +import { AccountCache } from "./accountCache"; import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; const _ = require("lodash"); @@ -44,7 +49,7 @@ export default class MessageHandler extends BaseSyncHandler { } public getProviderApplicationUrl(): string { - return "https://www.reddit.com/message/messages"; + return "https://www.reddit.com/"; } public getOptions(): ProviderHandlerOption[] { @@ -74,28 +79,28 @@ export default class MessageHandler extends BaseSyncHandler { defaultValue: "3-months", }, { - id: "chatTypes", - label: "Chat types", + id: "messageTypes", + label: "Message types", type: ConnectionOptionType.ENUM_MULTI, enumOptions: [ { label: "Inbox", - value: RedditChatType.INBOX, + value: RedditMessageType.INBOX, }, { label: "Unread", - value: RedditChatType.UNREAD, + value: RedditMessageType.UNREAD, }, { label: "Sent", - value: RedditChatType.SENT, + value: RedditMessageType.SENT, }, ], // Exclude super groups by default defaultValue: [ - RedditChatType.INBOX, - RedditChatType.UNREAD, - RedditChatType.SENT, + RedditMessageType.INBOX, + RedditMessageType.UNREAD, + RedditMessageType.SENT, ].join(","), }, ]; @@ -115,7 +120,7 @@ export default class MessageHandler extends BaseSyncHandler { try { let messages: SchemaSocialChatMessage[] = []; let messageHistory: SchemaSocialChatMessage[] = []; - const userCache = new UsersCache(api); + const accountCache = new AccountCache(api); if (this.config.batchSize > MAX_BATCH_SIZE) { throw new Error( @@ -123,31 +128,37 @@ export default class MessageHandler extends BaseSyncHandler { ); } + // TODO Basically we receive a syncPosition with a startId and fetch entites until we have config.batchSize + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); let currentRange = rangeTracker.nextRange(); + const me = await api.getMe(); + const latestResp = await api.getMessages( - "private" - // , this.config.batchSize + "private", + this.config.batchSize, + undefined, + currentRange.endId as MessageFullname ); const latestResult = await this.buildResults( - api, - userCache, + accountCache, latestResp as [], - "inbox", - currentRange.endId + me, + this.config.messageType ?? "private", + currentRange.startId ); messages = latestResult.items; - let nextPageToken = _.get(latestResp, "data.nextPageToken"); + let nextPageToken = latestResp[latestResp.length - 1].name; // Update range if any chats have been fetched if (messages.length) { rangeTracker.completedRange( { - startId: messages[0].sourceId, - endId: nextPageToken, + endId: messages[0].sourceId, + startId: nextPageToken, }, latestResult.breakHit === SyncItemsBreak.ID ); @@ -163,9 +174,6 @@ export default class MessageHandler extends BaseSyncHandler { currentRange = rangeTracker.nextRange(); - // TODO - // if (messages.length != this.config.batchSize && currentRange.startId) { - if (!messages.length) { syncPosition.syncMessage = `Stopping. No results found.`; syncPosition.status = SyncHandlerStatus.ENABLED; @@ -198,16 +206,16 @@ export default class MessageHandler extends BaseSyncHandler { * @returns */ async buildResults( - api: RedditApi, - userCache: UsersCache, + accountCache: AccountCache, latestResp: Message[], + me: Account, messageType: "inbox" | "unread" | "sent" | "private", endId?: string ): Promise { const results: SchemaSocialChatMessage[] = []; let breakHit: SyncItemsBreak; - for (const message of await latestResp) { + for (const message of latestResp) { if (endId && message.name === endId) { const logEvent: SyncProviderLogEvent = { level: SyncProviderLogLevel.DEBUG, @@ -217,30 +225,27 @@ export default class MessageHandler extends BaseSyncHandler { breakHit = SyncItemsBreak.ID; break; } - // Get the "from" user - // If the message is not "private" there is no sender, it is more like a notification - const from = await userCache.getUser(message.author); + + // Get the sender account + const from = await accountCache.getAccount(message.author); + results.push({ - _id: message.name, - // NOTE This is - groupId: "", - // TODO These - groupName: message.subject, - type: - messageType === "inbox" || - messageType === "unread" || - messageType === "private" - ? SchemaChatMessageType.RECEIVE - : SchemaChatMessageType.SEND, + // TODO + _id: `reddit-${me.name}-${message.name}`, + groupId: `private-${from}`, + groupName: `private-${from}`, + type: SchemaChatMessageType.RECEIVE, messageText: message.body, messageHTML: message.body_html, - // TODO This is not the id only the username fromId: message.author, - // NOTE Handle and username is the same fromHandle: from.id, fromName: from.name, sentAt: new Date(message.created_utc).toDateString(), name: message.subject, + sourceApplication: "https://reddit.com", + sourceId: message.name, + sourceData: message, + insertedAt: new Date(message.created_utc).toString(), }); } diff --git a/tests/providers/reddit/handlers/message.test.ts b/tests/providers/reddit/handlers/message.test.ts index bac1995..37fcba0 100644 --- a/tests/providers/reddit/handlers/message.test.ts +++ b/tests/providers/reddit/handlers/message.test.ts @@ -27,12 +27,6 @@ let providerConfig: Omit< "sbtImage" | "label" | "apiId" | "apiHash" > = { maxSyncLoops: 1, - groupLimit: 2, - messageMaxAgeDays: 7, - messageBatchSize: 20, - messagesPerGroupLimit: 10, - maxGroupSize: 100, - useDbPos: false, }; // Tests: @@ -62,6 +56,10 @@ describe(`${providerId} message tests`, function () { connection ); + handler.setConfig({ + batchSize: 10, + }) + try { const syncPosition: SyncHandlerPosition = { _id: `${providerId}-${handlerName}`, @@ -72,8 +70,36 @@ describe(`${providerId} message tests`, function () { }; // Batch 1 + let response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No messages fetched"); + + // Batch 2 + response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No messages fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + + handler.setConfig({ + messageType: "unread", + batchSize: 100, + }); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + const response = await handler._sync(api, syncPosition); assert(response.results.length > 0, "No messages fetched"); + console.log(response.results); } catch (err) { // ensure provider closes even if there's an error await provider.close(); From 0285c0f291d8c07da09c201988b016e75829f91d Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 20:24:36 +0300 Subject: [PATCH 52/61] feat: add fetch limmit + log4js --- src/providers/reddit/api.ts | 68 +++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 55d20fc..812d632 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -3,7 +3,6 @@ import { Comment, EntityPrefixes, Account, - PaginationParams, Subreddit, Message, PrivateMessage, @@ -19,6 +18,9 @@ import { PostFullname, } from "./types"; +const log4js = require("log4js"); +const logger = log4js.getLogger(); + const URL = "https://oauth.reddit.com"; const requestInterceptor = (token: string) => [ @@ -78,8 +80,8 @@ export class RedditApi { // Add a response interceptor this.client.interceptors.response.use(...responseInterceptor); } catch (err: any) { - console.error(`Reddit library error: ${err.message}`); - throw new Error(`Internal error with Telegram library`); + logger.erroror(`Reddit library error: ${err.message}`); + throw new Error(`Internal error with Reddit library`); } } @@ -101,6 +103,7 @@ export class RedditApi { private async _call( method: "GET" | "POST" | "PUT", url: `${string}.json`, + limit: number = 1000, config?: SubredditConfig | CommentConfig | MessageConfig | PostConfig, backdate?: number | Date, customInterceptor?: any[] @@ -149,8 +152,11 @@ export class RedditApi { ...list.children.map((withPrefix) => withPrefix.data as Type) ); + i += list.children.length; + // Check if termination criteria met, which includes default criteria e.g. Cretead.created_utc within last 3 months and custom termination criteria terminationCriteriaMet = + i < limit && list.after !== null && ( list.children[list.children.length - 1].data as @@ -170,7 +176,7 @@ export class RedditApi { // Remove custom interceptor if used if (myInterceptor) this.client.interceptors.request.eject(myInterceptor); - return data; + return data.slice(0, limit); } /** @@ -199,7 +205,7 @@ export class RedditApi { return user[0]; } catch (error) { - console.log(error.message); + logger.error("[User] " + error.message); } } @@ -218,10 +224,11 @@ export class RedditApi { */ public async getMessages( type?: "inbox" | "unread" | "sent" | "private", - limit: number = 50, + maxFetch: number = 50, backdate?: number | Date, after?: MessageFullname, before?: MessageFullname, + limit?: number ): Promise<(PrivateMessage | Message)[]> { let options: MessageConfig = { before, @@ -248,6 +255,7 @@ export class RedditApi { const messages = await this._call( "GET", `${URL}${endpoint}`, + maxFetch, options, backdate ); @@ -257,7 +265,7 @@ export class RedditApi { } return messages as Message[]; } catch (error) { - console.log("[Message] " + error.message); + logger.error("[Message] " + error.message); return undefined; } }) @@ -277,10 +285,11 @@ export class RedditApi { */ public async getSubreddits( type: "contributor" | "moderator" | "subscriber", - limit: number = 50, - backdate?: number |Date, + maxFetch: number, + backdate?: number | Date, after?: SubredditFullname, before?: SubredditFullname, + limit: number = 50 ): Promise { let options: SubredditConfig = { after: after, @@ -301,11 +310,12 @@ export class RedditApi { return await this._call( "GET", `${URL}${endpoint}` as `${string}.json`, + maxFetch, options, backdate ); } catch (error) { - console.log("[Subreddit] " + error.message); + logger.error("[Subreddit] " + error.message); return undefined; } }) @@ -318,11 +328,12 @@ export class RedditApi { async getPostsCreatedByUser( username?: string, - limit: number = 50, - backdate?: number |Date, + maxFetch: number = 1000, + backdate?: number | Date, after?: PostFullname, before?: PostFullname, - sort: "new" = "new", + limit: number = 50, + sort: "new" = "new" ): Promise { let options: PostConfig = { before, @@ -345,23 +356,25 @@ export class RedditApi { const posts = await this._call( "GET", url as `${string}.json`, + maxFetch, options, backdate ); return posts; } catch (error) { - console.log(error.message); + logger.error("[Post] " + error.message); } } async getPosts( type: "saved" | "upvoted" | "downvoted" | "hidden", + maxFetch: number = 1000, username?: string, - limit: number = 50, - backdate?: number |Date, + backdate?: number | Date, after?: PostFullname, before?: PostFullname, - sort: "new" = "new", + limit: number = 50, + sort: "new" = "new" ): Promise { let options: PostConfig = { before, @@ -395,11 +408,12 @@ export class RedditApi { return await this._call( "GET", url as `${string}.json`, + maxFetch, options, backdate ); } catch (error) { - console.log("[Post] " + error.message); + logger.error("[Post] " + error.message); return undefined; } }) @@ -423,11 +437,12 @@ export class RedditApi { */ public async getCommentsCreatedByUser( username?: string, - limit: number = 50, - backdate?: number |Date, + backdate?: number | Date, + maxFetch?: number, after?: CommentFullname, before?: CommentFullname, - sort: "new" = "new", + limit?: number, + sort: "new" = "new" ): Promise { let options: CommentConfig = { before, @@ -451,12 +466,13 @@ export class RedditApi { const comments = await this._call( "GET", url as `${string}.json`, + maxFetch, options, backdate ); return comments; } catch (error) { - console.log(error.message); + logger.error("[Comment] " + error.message); } } @@ -473,12 +489,13 @@ export class RedditApi { */ async getComments( type?: "saved" | "upvoted" | "downvoted" | "hidden", + maxFetch: number = 1000, username?: string, - backdate?: number |Date, + backdate?: number | Date, after?: CommentFullname, before?: CommentFullname, limit: number = 50, - sort: "new" = "new", + sort: "new" = "new" ) { let options: CommentConfig = { before, @@ -511,12 +528,13 @@ export class RedditApi { const comments = await this._call( "GET", url as `${string}.json`, + maxFetch, options, backdate ); return comments; } catch (error) { - console.log("[Comment] " + error.message); + logger.error("[Comment] " + error.message); return undefined; } }) From 305bd0d52124ba2032a4b608012d32beb5b60fcc Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 20:29:44 +0300 Subject: [PATCH 53/61] chore: add sampel config file --- tests/providers/reddit/config.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/providers/reddit/config.ts b/tests/providers/reddit/config.ts index e69de29..f2ffe72 100644 --- a/tests/providers/reddit/config.ts +++ b/tests/providers/reddit/config.ts @@ -0,0 +1,5 @@ + +export const API_CONFIG = { + username: "...", + randomUsername: "...", +} \ No newline at end of file From f02f975f6d8326cd3f93226d3e48836fc1aa081e Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 20:34:22 +0300 Subject: [PATCH 54/61] fix: add params --- tests/providers/reddit/api.test.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/providers/reddit/api.test.ts b/tests/providers/reddit/api.test.ts index 785db2d..e850835 100644 --- a/tests/providers/reddit/api.test.ts +++ b/tests/providers/reddit/api.test.ts @@ -14,7 +14,9 @@ let api; const d = new Date(); const twoMonthsAgo = d.setMonth(d.getMonth() - 2); -describe("Reddit API test", async () => { +describe("Reddit API test", async function () { + this.timeout(100000); + before(async () => { connection = await CommonUtils.getConnection("reddit"); @@ -62,12 +64,13 @@ describe("Reddit API test", async () => { // Should fetch comments upvoted by a user const commentsByUser = await api.getComments( "upvoted", + 1000, API_CONFIG.username ); assert(commentsByUser.length > 0, "No comments found by user"); // Should try to fetch comments upvoted by a random user and fail - const error = await api.getComments("upvoted", API_CONFIG.randomUsername); + const error = await api.getComments("upvoted", 1000, API_CONFIG.randomUsername); assert(error === undefined, "Fetched upvoted comments without authority"); // Should fetch all interacted comments created by user @@ -81,11 +84,11 @@ describe("Reddit API test", async () => { assert(posts.length > 0, "No posts found"); // Should fetch posts saved by a user - const postsByUser = await api.getPosts("saved", API_CONFIG.username); + const postsByUser = await api.getPosts("saved", 1000, API_CONFIG.username); assert(postsByUser.length > 0, "No posts found by user"); // Should try to fetch posts upvoted by a random user and fail - const error = await api.getPosts("upvoted", API_CONFIG.randomUsername); + const error = await api.getPosts("upvoted", 1000, API_CONFIG.randomUsername); assert(error === undefined, "Fetched upvoted posts without authority"); // Should fetch all interacted posts created by user From 7e5aba1be5cfa590db4045f256a38a131471d1ce Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 20:51:44 +0300 Subject: [PATCH 55/61] feat: posts works --- src/providers/reddit/api.ts | 13 +- src/providers/reddit/post.ts | 263 +++++++++++++++++++ tests/providers/reddit/handlers/post.test.ts | 108 ++++++++ 3 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 src/providers/reddit/post.ts create mode 100644 tests/providers/reddit/handlers/post.test.ts diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 812d632..1a7b90b 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -132,6 +132,7 @@ export class RedditApi { } let i = 0; while (terminationCriteriaMet) { + console.log(url, config); const resp = await action<{ kind: EntityPrefixes | "Listing"; data: Type | Listing; @@ -346,11 +347,11 @@ export class RedditApi { show: "given", }; - const url = `${URL}/user/${username}/submitted.json`; if (!username) { // Contrary to other object `name` field returns the username and not the "fullname" username = (await this.getMe()).name; } + const url = `${URL}/user/${username}/submitted.json`; try { const posts = await this._call( @@ -387,6 +388,11 @@ export class RedditApi { show: "given", }; + if (!username) { + // Contrary to other object `name` field returns the username and not the "fullname" + username = (await this.getMe()).name; + } + let urls = [`${URL}/user/${username}/${type}.json`]; if (!type) { urls = [ @@ -397,11 +403,6 @@ export class RedditApi { ]; } - if (!username) { - // Contrary to other object `name` field returns the username and not the "fullname" - username = (await this.getMe()).name; - } - const posts = await Promise.all( urls.map(async (url) => { try { diff --git a/src/providers/reddit/post.ts b/src/providers/reddit/post.ts new file mode 100644 index 0000000..9e77cae --- /dev/null +++ b/src/providers/reddit/post.ts @@ -0,0 +1,263 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { + Account, + Post, + PostFullname, + RedditConfig, + RedditPostType, +} from "./types"; +import { RedditApi } from "./api"; +import { SchemaPost, SchemaPostType } from "../../schemas"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +const _ = require("lodash"); + +const log4js = require("log4js"); +const logger = log4js.getLogger(); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncPostResult extends SyncItemsResult { + items: SchemaPost[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class MessageHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "post"; + } + + public getLabel(): string { + return "Posts"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.POST; + } + + public getProviderApplicationUrl(): string { + return "https://www.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + { + id: "postType", + label: "Post type", + type: ConnectionOptionType.ENUM_MULTI, + enumOptions: [ + { + label: "Created", + value: RedditPostType.CREATED, + }, + { + label: "Saved", + value: RedditPostType.SAVED, + }, + { + label: "Upvoted", + value: RedditPostType.UPVOTED, + }, + { + label: "Downvoted", + value: RedditPostType.DOWNVOTED, + }, + { + label: "Hidden", + value: RedditPostType.HIDDEN, + }, + ], + defaultValue: [ + RedditPostType.CREATED, + RedditPostType.SAVED, + RedditPostType.UPVOTED, + RedditPostType.DOWNVOTED, + RedditPostType.HIDDEN, + ].join(","), + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + try { + let posts: SchemaPost[] = []; + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const me = await api.getMe(); + + // TODO Create a separate handler for private message and "notification" messages + let latestResp; + if (this.config.postType === RedditPostType.CREATED) { + latestResp = await api.getPostsCreatedByUser( + undefined, + this.config.batchSize, + undefined, + currentRange.endId as PostFullname + ); + } else { + latestResp = await api.getPosts( + this.config.postType ?? RedditPostType.UPVOTED, + this.config.batchSize, + undefined, + undefined, + currentRange.endId as PostFullname + ); + } + + const latestResult = await this.buildResults( + latestResp, + me, + RedditPostType.DOWNVOTED, + currentRange.endId + ); + + posts = latestResult.items; + let nextPageToken = latestResp[latestResp.length - 1].name; + + // Update range if any chats have been fetched + if (posts.length) { + rangeTracker.completedRange( + { + startId: posts[0].sourceId, + endId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + if (!posts.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + posts.length != this.config.batchSize && !nextPageToken + ? `Processed ${posts.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(posts), + position: syncPosition, + }; + } catch (err: any) { + logger.error(err.message); + throw err; + } + } + + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ + async buildResults( + latestResp: Post[], + me: Account, + postType?: RedditPostType, + endId?: string + ): Promise { + const results: SchemaPost[] = []; + let breakHit: SyncItemsBreak; + + for (const post of await latestResp) { + if (endId && post.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End post ID hit (${post.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + + results.push({ + _id: `reddit-${me.name}-${post.name}`, + type: SchemaPostType.NOTE, + name: post.title, + sourceApplication: "https://reddit.com", + sourceId: post.name, + sourceData: post, + insertedAt: new Date(post.created_utc).toDateString(), + }); + } + + return { + items: results, + breakHit, + }; + } +} diff --git a/tests/providers/reddit/handlers/post.test.ts b/tests/providers/reddit/handlers/post.test.ts new file mode 100644 index 0000000..d847d0b --- /dev/null +++ b/tests/providers/reddit/handlers/post.test.ts @@ -0,0 +1,108 @@ +const assert = require("assert"); +import { + Connection, + SyncHandlerPosition, + SyncHandlerStatus, +} from "../../../../src/interfaces"; +import Providers from "../../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../../common.utils"; + +import RedditPostHandler from "../../../../src/providers/reddit/post"; +import BaseProvider from "../../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../../common.tests"; +import { RedditConfig, RedditPostType } from "../../../../src/providers/reddit/types"; + +const providerId = "reddit"; +let network: NetworkInstance; +let connection: Connection; +let provider: BaseProvider; +let handlerName = "post"; +let testConfig: GenericTestConfig; +let providerConfig: Omit< + RedditConfig, + "sbtImage" | "label" | "apiId" | "apiHash" +> = { +}; + +describe(`${providerId} post tests`, function () { + this.timeout(100000); + + this.beforeAll(async function () { + network = await CommonUtils.getNetwork(); + connection = await CommonUtils.getConnection(providerId); + provider = Providers(providerId, network.context, connection); + + testConfig = { + idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, + timeOrderAttribute: "insertedAt", + batchSizeLimitAttribute: "batchSize", + }; + }); + + describe(`Fetch ${providerId} data`, () => { + it(`Can pass basic tests: ${handlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditPostHandler, + providerConfig, + connection + ); + + handler.setConfig({ + postType: RedditPostType.UPVOTED, + batchSize: 10, + }) + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + // Batch 1 + let response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No posts fetched"); + + // Batch 2 + response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No posts fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + + handler.setConfig({ + postType: RedditPostType.CREATED, + batchSize: 100, + }); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + const response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No posts fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + }); + }); + + this.afterAll(async function () { + const { context } = await CommonUtils.getNetwork(); + await context.close(); + }); +}); From 4cb2d8551d4fad1c423936e62e57218fab741814 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:12:06 +0300 Subject: [PATCH 56/61] feat: comment handlers work --- src/providers/reddit/comment.ts | 243 ++++++++++++++++++ src/providers/reddit/comments.ts | 5 - src/providers/reddit/userComment.ts | 210 +++++++++++++++ .../providers/reddit/handlers/comment.test.ts | 124 +++++++++ 4 files changed, 577 insertions(+), 5 deletions(-) create mode 100644 src/providers/reddit/comment.ts delete mode 100644 src/providers/reddit/comments.ts create mode 100644 src/providers/reddit/userComment.ts create mode 100644 tests/providers/reddit/handlers/comment.test.ts diff --git a/src/providers/reddit/comment.ts b/src/providers/reddit/comment.ts new file mode 100644 index 0000000..5ef9648 --- /dev/null +++ b/src/providers/reddit/comment.ts @@ -0,0 +1,243 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { + Comment, + CommentFullname, + RedditCommentType, + RedditConfig, +} from "./types"; +import { RedditApi } from "./api"; +import { SchemaComment } from "../../schemas"; +import { AccountCache } from "./accountCache"; +import InvalidTokenError from "../InvalidTokenError"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +const _ = require("lodash"); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncCommentResult extends SyncItemsResult { + items: SchemaComment[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class CommentHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "comment"; + } + + public getLabel(): string { + return "Comments"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.COMMENT; + } + + public getProviderApplicationUrl(): string { + return "https://www.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + { + id: "commentType", + label: "Comment Type", + type: ConnectionOptionType.ENUM_MULTI, + enumOptions: [ + { + label: "Saved", + value: RedditCommentType.SAVED, + }, + { + label: "Upvoted", + value: RedditCommentType.UPVOTED, + }, + { + label: "Downvoted", + value: RedditCommentType.DOWNVOTED, + }, + { + label: "Hidden", + value: RedditCommentType.HIDDEN, + }, + ], + defaultValue: [ + RedditCommentType.CREATED, + RedditCommentType.SAVED, + RedditCommentType.UPVOTED, + RedditCommentType.DOWNVOTED, + RedditCommentType.HIDDEN, + ].join(","), + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + try { + let comments: SchemaComment[] = []; + const accountCache = new AccountCache(api); + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const latestResp = await api.getComments( + this.config.commentType, + this.config.batchSize, + undefined, + undefined, + currentRange.endId as CommentFullname + ); + + console.log(latestResp) + const latestResult = await this.buildResults( + latestResp as [], + currentRange.endId + ); + + comments = latestResult.items; + let nextPageToken = latestResp[latestResp.length - 1].name; + + // Update range if any chats have been fetched + if (comments.length) { + rangeTracker.completedRange( + { + endId: comments[0].sourceId, + startId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + if (!comments.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + comments.length != this.config.batchSize && !nextPageToken + ? `Processed ${comments.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(comments), + position: syncPosition, + }; + } catch (err: any) { + console.log(err.message); + throw err; + } + } + + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ + async buildResults( + latestResp: Comment[], + endId?: string + ): Promise { + const results: SchemaComment[] = []; + let breakHit: SyncItemsBreak; + + for (const comment of latestResp) { + if (endId && comment.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End comment ID hit (${comment.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + + results.push({ + _id: comment.name, + author: comment.author, + body: comment.body, + edited: !!comment.edited, + parentForum: comment.subreddit_id, + parentPost: comment.link_id, + score: comment.score, + name: comment.name, + }); + } + + return { + items: results, + breakHit, + }; + } +} diff --git a/src/providers/reddit/comments.ts b/src/providers/reddit/comments.ts deleted file mode 100644 index 15eab94..0000000 --- a/src/providers/reddit/comments.ts +++ /dev/null @@ -1,5 +0,0 @@ -import BaseSyncHandler from "../BaseSyncHandler"; - -export default class CommentsHandler extends BaseSyncHandler { - -} \ No newline at end of file diff --git a/src/providers/reddit/userComment.ts b/src/providers/reddit/userComment.ts new file mode 100644 index 0000000..f87b18c --- /dev/null +++ b/src/providers/reddit/userComment.ts @@ -0,0 +1,210 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { + Comment, + CommentFullname, + RedditCommentType, + RedditConfig, +} from "./types"; +import { RedditApi } from "./api"; +import { SchemaComment } from "../../schemas"; +import { AccountCache } from "./accountCache"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +const _ = require("lodash"); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncCommentResult extends SyncItemsResult { + items: SchemaComment[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class UserCommentHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "comment"; + } + + public getLabel(): string { + return "Comments"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.COMMENT; + } + + public getProviderApplicationUrl(): string { + return "https://www.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + try { + let comments: SchemaComment[] = []; + const accountCache = new AccountCache(api); + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const latestResp = await api.getCommentsCreatedByUser( + undefined, + this.config.batchSize, + undefined, + currentRange.endId as CommentFullname + ); + + const latestResult = await this.buildResults( + latestResp as [], + currentRange.endId + ); + + comments = latestResult.items; + let nextPageToken = latestResp[latestResp.length - 1].name; + + // Update range if any chats have been fetched + if (comments.length) { + rangeTracker.completedRange( + { + endId: comments[0].sourceId, + startId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + if (!comments.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + comments.length != this.config.batchSize && !nextPageToken + ? `Processed ${comments.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(comments), + position: syncPosition, + }; + } catch (err: any) { + console.log(err.message); + throw err; + } + } + + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ + async buildResults( + latestResp: Comment[], + endId?: string + ): Promise { + const results: SchemaComment[] = []; + let breakHit: SyncItemsBreak; + + for (const comment of latestResp) { + if (endId && comment.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End comment ID hit (${comment.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + + results.push({ + _id: comment.name, + author: comment.author, + body: comment.body, + edited: !!comment.edited, + parentForum: comment.subreddit_id, + parentPost: comment.link_id, + score: comment.score, + name: comment.name, + }); + } + + return { + items: results, + breakHit, + }; + } +} diff --git a/tests/providers/reddit/handlers/comment.test.ts b/tests/providers/reddit/handlers/comment.test.ts new file mode 100644 index 0000000..a1c7acd --- /dev/null +++ b/tests/providers/reddit/handlers/comment.test.ts @@ -0,0 +1,124 @@ +const assert = require("assert"); +import { + Connection, + SyncHandlerPosition, + SyncHandlerStatus, +} from "../../../../src/interfaces"; +import Providers from "../../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../../common.utils"; + +import RedditCommentHandler from "../../../../src/providers/reddit/comment"; +import RedditUserCommentHandler from "../../../../src/providers/reddit/userComment"; +import BaseProvider from "../../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../../common.tests"; +import { + RedditCommentType, + RedditConfig, +} from "../../../../src/providers/reddit/types"; + +const providerId = "reddit"; +let network: NetworkInstance; +let connection: Connection; +let provider: BaseProvider; +let handlerName = "comment"; +let otherHandlerName = "user-comment"; +let testConfig: GenericTestConfig; +let providerConfig: Omit< + RedditConfig, + "sbtImage" | "label" | "apiId" | "apiHash" +> = {}; + +describe(`${providerId} comment tests`, function () { + this.timeout(100000); + + this.beforeAll(async function () { + network = await CommonUtils.getNetwork(); + connection = await CommonUtils.getConnection(providerId); + provider = Providers(providerId, network.context, connection); + + testConfig = { + idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, + timeOrderAttribute: "insertedAt", + batchSizeLimitAttribute: "batchSize", + }; + }); + + describe(`Fetch ${providerId} data`, () => { + it(`Can pass basic tests: ${handlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditCommentHandler, + providerConfig, + connection + ); + + const me = await api.getMe(); + + handler.setConfig({ + commentType: RedditCommentType.UPVOTED, + batchSize: 10, + }); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${me.name}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + // Batch 1 + let response = await handler._sync(api, syncPosition); + console.log(response.results.length); + assert( + response.results.length === 10, + "Not batch amount comments fetched" + ); + + // Batch 2 + response = await handler._sync(api, syncPosition); + assert(response.results.length <= 10, "No comments fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + }); + + it(`Can pass basic tests: ${otherHandlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditUserCommentHandler, + providerConfig, + connection + ); + + const me = await api.getMe(); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${me.name}-${otherHandlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + const response = await handler._sync(api, syncPosition); + assert(response.results.length > 0, "No comments fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + }); + }); + + this.afterAll(async function () { + const { context } = await CommonUtils.getNetwork(); + await context.close(); + }); +}); From c0247210f0db8424a44b9e8bef6d25f56b44deb9 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:37:09 +0300 Subject: [PATCH 57/61] chore: final cleanup --- src/providers/reddit/comment.ts | 8 +- src/providers/reddit/userComment.ts | 4 +- .../providers/reddit/handlers/comment.test.ts | 3 +- .../reddit/handlers/comments.test.ts | 108 ------------------ 4 files changed, 7 insertions(+), 116 deletions(-) delete mode 100644 tests/providers/reddit/handlers/comments.test.ts diff --git a/src/providers/reddit/comment.ts b/src/providers/reddit/comment.ts index 5ef9648..e9d9cbc 100644 --- a/src/providers/reddit/comment.ts +++ b/src/providers/reddit/comment.ts @@ -20,10 +20,12 @@ import { import { RedditApi } from "./api"; import { SchemaComment } from "../../schemas"; import { AccountCache } from "./accountCache"; -import InvalidTokenError from "../InvalidTokenError"; import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; const _ = require("lodash"); +const log4js = require("log4js"); +const logger = log4js.getLogger(); + const MAX_BATCH_SIZE = 1000; export interface SyncCommentResult extends SyncItemsResult { @@ -101,7 +103,6 @@ export default class CommentHandler extends BaseSyncHandler { }, ], defaultValue: [ - RedditCommentType.CREATED, RedditCommentType.SAVED, RedditCommentType.UPVOTED, RedditCommentType.DOWNVOTED, @@ -144,7 +145,6 @@ export default class CommentHandler extends BaseSyncHandler { currentRange.endId as CommentFullname ); - console.log(latestResp) const latestResult = await this.buildResults( latestResp as [], currentRange.endId @@ -191,7 +191,7 @@ export default class CommentHandler extends BaseSyncHandler { position: syncPosition, }; } catch (err: any) { - console.log(err.message); + logger.error(err.message); throw err; } } diff --git a/src/providers/reddit/userComment.ts b/src/providers/reddit/userComment.ts index f87b18c..673909b 100644 --- a/src/providers/reddit/userComment.ts +++ b/src/providers/reddit/userComment.ts @@ -36,11 +36,11 @@ export default class UserCommentHandler extends BaseSyncHandler { protected config: RedditConfig; public getName(): string { - return "comment"; + return "userComment"; } public getLabel(): string { - return "Comments"; + return "User Comments"; } public getSchemaUri(): string { diff --git a/tests/providers/reddit/handlers/comment.test.ts b/tests/providers/reddit/handlers/comment.test.ts index a1c7acd..1563851 100644 --- a/tests/providers/reddit/handlers/comment.test.ts +++ b/tests/providers/reddit/handlers/comment.test.ts @@ -21,7 +21,7 @@ let network: NetworkInstance; let connection: Connection; let provider: BaseProvider; let handlerName = "comment"; -let otherHandlerName = "user-comment"; +let otherHandlerName = "userComment"; let testConfig: GenericTestConfig; let providerConfig: Omit< RedditConfig, @@ -70,7 +70,6 @@ describe(`${providerId} comment tests`, function () { // Batch 1 let response = await handler._sync(api, syncPosition); - console.log(response.results.length); assert( response.results.length === 10, "Not batch amount comments fetched" diff --git a/tests/providers/reddit/handlers/comments.test.ts b/tests/providers/reddit/handlers/comments.test.ts deleted file mode 100644 index e6bc50b..0000000 --- a/tests/providers/reddit/handlers/comments.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -const assert = require("assert"); -import { - Connection, - SyncHandlerPosition, - SyncHandlerStatus -} from "../../../../src/interfaces"; -import Providers from "../../../../src/providers"; -import CommonUtils, { NetworkInstance } from "../../../common.utils"; - -import RedditCommentsHandler from "../../../../src/providers/reddit/comments"; -import BaseProvider from "../../../../src/providers/BaseProvider"; -import { CommonTests, GenericTestConfig } from "../../../common.tests"; -import { TelegramConfig } from "../../../../src/providers/telegram/interfaces"; -import { SchemaSocialChatGroup, SchemaSocialChatMessage } from "../../../../src/schemas"; - -const providerId = "reddit"; -let network: NetworkInstance; -let connection: Connection; -let provider: BaseProvider; -let handlerName = "comments"; -let testConfig: GenericTestConfig; -let providerConfig: Omit = { - maxSyncLoops: 1, - groupLimit: 2, - messageMaxAgeDays: 7, - messageBatchSize: 20, - messagesPerGroupLimit: 10, - maxGroupSize: 100, - useDbPos: false -}; - -// Tests: -// - max age days respected - -describe(`${providerId} comments tests`, function () { - this.timeout(100000); - - this.beforeAll(async function () { - network = await CommonUtils.getNetwork(); - connection = await CommonUtils.getConnection(providerId); - provider = Providers(providerId, network.context, connection); - - testConfig = { - idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, - timeOrderAttribute: "insertedAt", - batchSizeLimitAttribute: "batchSize", - }; - }); - - describe(`Fetch ${providerId} data`, () => { - - it(`Can pass basic tests: ${handlerName}`, async () => { - const { api, handler, provider } = await CommonTests.buildTestObjects( - providerId, - RedditCommentsHandler, - providerConfig, - connection - ); - - try { - const syncPosition: SyncHandlerPosition = { - _id: `${providerId}-${handlerName}`, - providerId, - handlerId: handler.getId(), - accountId: provider.getAccountId(), - status: SyncHandlerStatus.ENABLED, - }; - - // Batch 1 - const response = await handler._sync(api, syncPosition); - - // Make sure group and message limit were respected - let groupMessages: Record = {} - let groups: SchemaSocialChatGroup[] = [] - for (const result of ( response.results)) { - if (result.groupId) { - if (!groupMessages[result.groupId]) { - groupMessages[result.groupId] = [] - } - - groupMessages[result.groupId].push(result) - } else { - groups.push(result) - } - } - - assert.equal(groups.length, providerConfig.groupLimit, "Group limit is expected value") - //assert.equal(response.results.length - groups.length, providerConfig.messageBatchSize, "Total returned messages is expected value") - - for (const group of groups) { - const groupId = `${testConfig.idPrefix}-${group.sourceId}` - const groupMessageCount = groupMessages[groupId].length - assert.equal(groupMessageCount, providerConfig.messagesPerGroupLimit, `Total messages in group ${group.name} is correct (${groupMessageCount})`) - } - } catch (err) { - // ensure provider closes even if there's an error - await provider.close() - - throw err - } - }); - }); - - this.afterAll(async function () { - const { context } = await CommonUtils.getNetwork(); - await context.close(); - }); -}); From 01db773e8c2dcd06135f3491e5812b262cd631c7 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:38:16 +0300 Subject: [PATCH 58/61] chore: posts tests pass --- src/providers/reddit/post.ts | 29 +-- src/providers/reddit/userPost.ts | 217 +++++++++++++++++++ tests/providers/reddit/handlers/post.test.ts | 30 ++- 3 files changed, 246 insertions(+), 30 deletions(-) create mode 100644 src/providers/reddit/userPost.ts diff --git a/src/providers/reddit/post.ts b/src/providers/reddit/post.ts index 9e77cae..8840379 100644 --- a/src/providers/reddit/post.ts +++ b/src/providers/reddit/post.ts @@ -85,10 +85,6 @@ export default class MessageHandler extends BaseSyncHandler { label: "Post type", type: ConnectionOptionType.ENUM_MULTI, enumOptions: [ - { - label: "Created", - value: RedditPostType.CREATED, - }, { label: "Saved", value: RedditPostType.SAVED, @@ -107,7 +103,6 @@ export default class MessageHandler extends BaseSyncHandler { }, ], defaultValue: [ - RedditPostType.CREATED, RedditPostType.SAVED, RedditPostType.UPVOTED, RedditPostType.DOWNVOTED, @@ -143,24 +138,12 @@ export default class MessageHandler extends BaseSyncHandler { const me = await api.getMe(); - // TODO Create a separate handler for private message and "notification" messages - let latestResp; - if (this.config.postType === RedditPostType.CREATED) { - latestResp = await api.getPostsCreatedByUser( - undefined, - this.config.batchSize, - undefined, - currentRange.endId as PostFullname - ); - } else { - latestResp = await api.getPosts( - this.config.postType ?? RedditPostType.UPVOTED, - this.config.batchSize, - undefined, - undefined, - currentRange.endId as PostFullname - ); - } + const latestResp = await api.getPostsCreatedByUser( + undefined, + this.config.batchSize, + undefined, + currentRange.endId as PostFullname + ); const latestResult = await this.buildResults( latestResp, diff --git a/src/providers/reddit/userPost.ts b/src/providers/reddit/userPost.ts new file mode 100644 index 0000000..48a08e6 --- /dev/null +++ b/src/providers/reddit/userPost.ts @@ -0,0 +1,217 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { + Account, + Post, + PostFullname, + RedditConfig, + RedditPostType, +} from "./types"; +import { RedditApi } from "./api"; +import { SchemaPost, SchemaPostType } from "../../schemas"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +const _ = require("lodash"); + +const log4js = require("log4js"); +const logger = log4js.getLogger(); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncPostResult extends SyncItemsResult { + items: SchemaPost[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class UserPostHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "userPost"; + } + + public getLabel(): string { + return "User Posts"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.POST; + } + + public getProviderApplicationUrl(): string { + return "https://www.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + try { + let posts: SchemaPost[] = []; + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const me = await api.getMe(); + + const latestResp = await api.getPostsCreatedByUser( + undefined, + this.config.batchSize, + undefined, + currentRange.endId as PostFullname + ); + + const latestResult = await this.buildResults( + latestResp, + me, + RedditPostType.DOWNVOTED, + currentRange.endId + ); + + posts = latestResult.items; + let nextPageToken = latestResp[latestResp.length - 1].name; + + // Update range if any chats have been fetched + if (posts.length) { + rangeTracker.completedRange( + { + startId: posts[0].sourceId, + endId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + if (!posts.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + posts.length != this.config.batchSize && !nextPageToken + ? `Processed ${posts.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(posts), + position: syncPosition, + }; + } catch (err: any) { + logger.error(err.message); + throw err; + } + } + + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ + async buildResults( + latestResp: Post[], + me: Account, + postType?: RedditPostType, + endId?: string + ): Promise { + const results: SchemaPost[] = []; + let breakHit: SyncItemsBreak; + + for (const post of await latestResp) { + if (endId && post.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End post ID hit (${post.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + + results.push({ + _id: `reddit-${me.name}-${post.name}`, + type: SchemaPostType.NOTE, + name: post.title, + sourceApplication: "https://reddit.com", + sourceId: post.name, + sourceData: post, + insertedAt: new Date(post.created_utc).toDateString(), + }); + } + + return { + items: results, + breakHit, + }; + } +} diff --git a/tests/providers/reddit/handlers/post.test.ts b/tests/providers/reddit/handlers/post.test.ts index d847d0b..01ba18b 100644 --- a/tests/providers/reddit/handlers/post.test.ts +++ b/tests/providers/reddit/handlers/post.test.ts @@ -8,21 +8,25 @@ import Providers from "../../../../src/providers"; import CommonUtils, { NetworkInstance } from "../../../common.utils"; import RedditPostHandler from "../../../../src/providers/reddit/post"; +import RedditUserPostHandler from "../../../../src/providers/reddit/userPost"; import BaseProvider from "../../../../src/providers/BaseProvider"; import { CommonTests, GenericTestConfig } from "../../../common.tests"; -import { RedditConfig, RedditPostType } from "../../../../src/providers/reddit/types"; +import { + RedditConfig, + RedditPostType, +} from "../../../../src/providers/reddit/types"; const providerId = "reddit"; let network: NetworkInstance; let connection: Connection; let provider: BaseProvider; let handlerName = "post"; +let otherHandlerName = "userPost"; let testConfig: GenericTestConfig; let providerConfig: Omit< RedditConfig, "sbtImage" | "label" | "apiId" | "apiHash" -> = { -}; +> = {}; describe(`${providerId} post tests`, function () { this.timeout(100000); @@ -48,14 +52,16 @@ describe(`${providerId} post tests`, function () { connection ); + const me = await api.getMe(); + handler.setConfig({ postType: RedditPostType.UPVOTED, batchSize: 10, - }) + }); try { const syncPosition: SyncHandlerPosition = { - _id: `${providerId}-${handlerName}`, + _id: `${providerId}-${me.name}-${handlerName}`, providerId, handlerId: handler.getId(), accountId: provider.getAccountId(), @@ -75,15 +81,25 @@ describe(`${providerId} post tests`, function () { throw err; } + }); + + it(`Can pass basic tests: ${otherHandlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditUserPostHandler, + providerConfig, + connection + ); + + const me = await api.getMe(); handler.setConfig({ - postType: RedditPostType.CREATED, batchSize: 100, }); try { const syncPosition: SyncHandlerPosition = { - _id: `${providerId}-${handlerName}`, + _id: `${providerId}-${me.name}-${handlerName}`, providerId, handlerId: handler.getId(), accountId: provider.getAccountId(), From e01c50070c725ff369abf961748f00ced13ddb26 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:38:50 +0300 Subject: [PATCH 59/61] feat: subreddit handler --- src/providers/reddit/subreddit.ts | 246 ++++++++++++++++++ .../reddit/handlers/subreddit.test.ts | 94 +++++++ 2 files changed, 340 insertions(+) create mode 100644 src/providers/reddit/subreddit.ts create mode 100644 tests/providers/reddit/handlers/subreddit.test.ts diff --git a/src/providers/reddit/subreddit.ts b/src/providers/reddit/subreddit.ts new file mode 100644 index 0000000..d005ada --- /dev/null +++ b/src/providers/reddit/subreddit.ts @@ -0,0 +1,246 @@ +import BaseSyncHandler from "../BaseSyncHandler"; +import CONFIG from "../../config"; +import { + ProviderHandlerOption, + SyncHandlerPosition, + SyncHandlerStatus, + SyncItemsBreak, + SyncItemsResult, + SyncProviderLogEvent, + SyncProviderLogLevel, + SyncResponse, +} from "../../interfaces"; +import { ConnectionOptionType } from "../../interfaces"; +import { + RedditConfig, + Subreddit, + SubredditFullname, + SubredditType, +} from "./types"; +import { RedditApi } from "./api"; +import { SchemaForum } from "../../schemas"; +import { ItemsRangeTracker } from "../../helpers/itemsRangeTracker"; +const _ = require("lodash"); + +const MAX_BATCH_SIZE = 1000; + +export interface SyncSubredditResult extends SyncItemsResult { + items: SchemaForum[]; + // Returns the id of a subcribbed subreddits id in the items array + favourited: number[]; +} + +/** + * @summary This returns everything as a Listing, no need to categorize it + */ +export default class SubredditHandler extends BaseSyncHandler { + protected config: RedditConfig; + + public getName(): string { + return "subreddit"; + } + + public getLabel(): string { + return "Subreddits"; + } + + public getSchemaUri(): string { + return CONFIG.verida.schemas.CHAT_MESSAGE; + } + + public getProviderApplicationUrl(): string { + return "https://www.reddit.com/"; + } + + public getOptions(): ProviderHandlerOption[] { + return [ + { + id: "backdate", + label: "Backdate history", + type: ConnectionOptionType.ENUM, + enumOptions: [ + { + value: "1-month", + label: "1 month", + }, + { + value: "3-months", + label: "3 months", + }, + { + value: "6-months", + label: "6 months", + }, + { + value: "12-months", + label: "12 months", + }, + ], + defaultValue: "3-months", + }, + { + id: "subredditTypes", + label: "Subreddit relation types", + type: ConnectionOptionType.ENUM_MULTI, + enumOptions: [ + { + label: "Contributor", + value: SubredditType.CONTRIBUTOR, + }, + { + label: "Moderator", + value: SubredditType.MODERATOR, + }, + { + label: "Subscriber", + value: SubredditType.SUBSCRIBER, + }, + ], + // Exclude super groups by default + defaultValue: [ + SubredditType.CONTRIBUTOR, + SubredditType.MODERATOR, + SubredditType.SUBSCRIBER, + ].join(","), + }, + ]; + } + + /** + * + * @summary + * @param api + * @param syncPosition + * @returns + */ + public async _sync( + api: RedditApi, + syncPosition: SyncHandlerPosition + ): Promise { + try { + let subreddits: SchemaForum[] = []; + let subredditHistory: SchemaForum[] = []; + + if (this.config.batchSize > MAX_BATCH_SIZE) { + throw new Error( + `Batch size (${this.config.batchSize}) is larger than permitted (${MAX_BATCH_SIZE})` + ); + } + + const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); + + let currentRange = rangeTracker.nextRange(); + + const latestResp = await api.getSubreddits( + this.config.subredditType, + this.config.batchSize, + undefined, + currentRange.endId as SubredditFullname + ); + const latestResult = await this.buildResults( + latestResp, + currentRange.endId + ); + + subreddits = latestResult.items; + let nextPageToken = latestResp[latestResp.length - 1].name; + + // Update range if any chats have been fetched + if (subreddits.length) { + rangeTracker.completedRange( + { + startId: subreddits[0].sourceId, + endId: nextPageToken, + }, + latestResult.breakHit === SyncItemsBreak.ID + ); + } else { + rangeTracker.completedRange( + { + startId: undefined, + endId: undefined, + }, + false + ); + } + + currentRange = rangeTracker.nextRange(); + + if (!subreddits.length) { + syncPosition.syncMessage = `Stopping. No results found.`; + syncPosition.status = SyncHandlerStatus.ENABLED; + } else { + syncPosition.syncMessage = + subreddits.length != this.config.batchSize && !nextPageToken + ? `Processed ${subreddits.length} items. Stopping. No more results.` + : `Batch complete (${this.config.batchSize}). More results pending.`; + } + + syncPosition.thisRef = rangeTracker.export(); + + return { + results: Object.values(subreddits).concat(subredditHistory), + position: syncPosition, + }; + } catch (err: any) { + console.log(err.message); + throw err; + } + } + + /** + * + * @summary Given a listing of chats creates a SyncChatMessagesResult object + * @param api + * @param latestResp + * @param chatType + * @param endId Optional id to stop + * @returns + */ + async buildResults( + latestResp: Subreddit[], + endId?: string + ): Promise { + const results: SchemaForum[] = []; + let breakHit: SyncItemsBreak; + const favourited = []; + + for (const subreddit of await latestResp) { + if (endId && subreddit.name === endId) { + const logEvent: SyncProviderLogEvent = { + level: SyncProviderLogLevel.DEBUG, + message: `End subreddit ID hit (${subreddit.name})`, + }; + this.emit("log", logEvent); + breakHit = SyncItemsBreak.ID; + break; + } + // Get the "from" user + const index = results.push({ + _id: subreddit.name, + description: subreddit.description, + over18: subreddit.over18, + type: + subreddit.subreddit_type !== "gold_restricted" + ? subreddit.subreddit_type + : "restricted", + summary: subreddit.header_title, + icon: subreddit.header_img, + uri: subreddit.url, + name: subreddit.title, + sourceApplication: "https://reddit.com", + sourceId: subreddit.name, + sourceData: subreddit, + insertedAt: new Date(subreddit.created_utc).toString(), + }); + if (subreddit.user_is_subscribe) favourited.push(index); + } + + return { + items: results, + // TODO + favourited, + breakHit, + }; + } +} diff --git a/tests/providers/reddit/handlers/subreddit.test.ts b/tests/providers/reddit/handlers/subreddit.test.ts new file mode 100644 index 0000000..37b7053 --- /dev/null +++ b/tests/providers/reddit/handlers/subreddit.test.ts @@ -0,0 +1,94 @@ +const assert = require("assert"); +import { + Connection, + SyncHandlerPosition, + SyncHandlerStatus, +} from "../../../../src/interfaces"; +import Providers from "../../../../src/providers"; +import CommonUtils, { NetworkInstance } from "../../../common.utils"; + +import RedditCommentHandler from "../../../../src/providers/reddit/comment"; +import RedditSubredditHandler from "../../../../src/providers/reddit/subreddit"; +import BaseProvider from "../../../../src/providers/BaseProvider"; +import { CommonTests, GenericTestConfig } from "../../../common.tests"; +import { + RedditCommentType, + RedditConfig, + SubredditType, +} from "../../../../src/providers/reddit/types"; + +const providerId = "reddit"; +let network: NetworkInstance; +let connection: Connection; +let provider: BaseProvider; +let handlerName = "subreddit"; +let testConfig: GenericTestConfig; +let providerConfig: Omit< + RedditConfig, + "sbtImage" | "label" | "apiId" | "apiHash" +> = {}; + +describe(`${providerId} subreddit tests`, function () { + this.timeout(100000); + + this.beforeAll(async function () { + network = await CommonUtils.getNetwork(); + connection = await CommonUtils.getConnection(providerId); + provider = Providers(providerId, network.context, connection); + + testConfig = { + idPrefix: `${provider.getProviderId()}-${connection.profile.id}`, + timeOrderAttribute: "insertedAt", + batchSizeLimitAttribute: "batchSize", + }; + }); + + describe(`Fetch ${providerId} data`, () => { + it(`Can pass basic tests: ${handlerName}`, async () => { + const { api, handler, provider } = await CommonTests.buildTestObjects( + providerId, + RedditSubredditHandler, + providerConfig, + connection + ); + + const me = await api.getMe(); + + handler.setConfig({ + subredditType: SubredditType.SUBSCRIBER, + batchSize: 10, + }); + + try { + const syncPosition: SyncHandlerPosition = { + _id: `${providerId}-${me.name}-${handlerName}`, + providerId, + handlerId: handler.getId(), + accountId: provider.getAccountId(), + status: SyncHandlerStatus.ENABLED, + }; + + // Batch 1 + let response = await handler._sync(api, syncPosition); + assert( + response.results.length === 10, + "Not batch amount comments fetched" + ); + + // Batch 2 + response = await handler._sync(api, syncPosition); + assert(response.results.length <= 10, "No comments fetched"); + } catch (err) { + // ensure provider closes even if there's an error + await provider.close(); + + throw err; + } + }); + }); + + this.afterAll(async function () { + const { context } = await CommonUtils.getNetwork(); + await context.close(); + }); +}); From 72672a0c27b20a16ff2a3244d8ee80c0c1ad091a Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:40:04 +0300 Subject: [PATCH 60/61] chore: cleanups --- src/providers/reddit/api.ts | 6 +++--- src/providers/reddit/index.ts | 5 ++--- src/providers/reddit/message.ts | 8 +++----- src/providers/reddit/subreddits.ts | 0 src/providers/reddit/types.ts | 20 ++++++++++++++++---- 5 files changed, 24 insertions(+), 15 deletions(-) delete mode 100644 src/providers/reddit/subreddits.ts diff --git a/src/providers/reddit/api.ts b/src/providers/reddit/api.ts index 1a7b90b..a68d82b 100644 --- a/src/providers/reddit/api.ts +++ b/src/providers/reddit/api.ts @@ -16,6 +16,7 @@ import { MessageFullname, SubredditFullname, PostFullname, + RedditCommentType, } from "./types"; const log4js = require("log4js"); @@ -132,7 +133,6 @@ export class RedditApi { } let i = 0; while (terminationCriteriaMet) { - console.log(url, config); const resp = await action<{ kind: EntityPrefixes | "Listing"; data: Type | Listing; @@ -438,8 +438,8 @@ export class RedditApi { */ public async getCommentsCreatedByUser( username?: string, + maxFetch: number = 1000, backdate?: number | Date, - maxFetch?: number, after?: CommentFullname, before?: CommentFullname, limit?: number, @@ -489,7 +489,7 @@ export class RedditApi { * @returns */ async getComments( - type?: "saved" | "upvoted" | "downvoted" | "hidden", + type?: RedditCommentType, maxFetch: number = 1000, username?: string, backdate?: number | Date, diff --git a/src/providers/reddit/index.ts b/src/providers/reddit/index.ts index a9d9cdc..a2ecc8e 100644 --- a/src/providers/reddit/index.ts +++ b/src/providers/reddit/index.ts @@ -174,6 +174,5 @@ export default class RedditProvider extends Base { } // TODO -// Implement sync -// Test handles errors appropriatelly -// Schemas +// Schemas TODO Create in official repo too +// Refresh token diff --git a/src/providers/reddit/message.ts b/src/providers/reddit/message.ts index e986efd..12804a8 100644 --- a/src/providers/reddit/message.ts +++ b/src/providers/reddit/message.ts @@ -128,8 +128,6 @@ export default class MessageHandler extends BaseSyncHandler { ); } - // TODO Basically we receive a syncPosition with a startId and fetch entites until we have config.batchSize - const rangeTracker = new ItemsRangeTracker(syncPosition.thisRef); let currentRange = rangeTracker.nextRange(); @@ -137,7 +135,7 @@ export default class MessageHandler extends BaseSyncHandler { const me = await api.getMe(); const latestResp = await api.getMessages( - "private", + this.config.messageType ?? "private", this.config.batchSize, undefined, currentRange.endId as MessageFullname @@ -238,8 +236,8 @@ export default class MessageHandler extends BaseSyncHandler { messageText: message.body, messageHTML: message.body_html, fromId: message.author, - fromHandle: from.id, - fromName: from.name, + fromHandle: from?.id, + fromName: from?.name, sentAt: new Date(message.created_utc).toDateString(), name: message.subject, sourceApplication: "https://reddit.com", diff --git a/src/providers/reddit/subreddits.ts b/src/providers/reddit/subreddits.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/providers/reddit/types.ts b/src/providers/reddit/types.ts index 885ba68..5c3002b 100644 --- a/src/providers/reddit/types.ts +++ b/src/providers/reddit/types.ts @@ -1,9 +1,9 @@ import { BaseHandlerConfig } from "../../interfaces"; -export enum RedditChatType { - INBOX = "chatTypeInbox", - UNREAD = "chatTypeUnread", - SENT = "chatTypeSent", +export enum RedditMessageType { + INBOX = "inbox", + UNREAD = "unread", + SENT = "sent", } export enum SubredditType { @@ -20,6 +20,14 @@ export enum RedditPostType { HIDDEN = "hidden", } +export enum RedditCommentType { + CREATED = "created", + SAVED = "saved", + UPVOTED = "upvoted", + DOWNVOTED = "downvoted", + HIDDEN = "hidden", +} + type CommentPrefix = "t1"; type AccountPrefix = "t2"; // In the "docs" a post is called a link @@ -57,6 +65,10 @@ export interface RedditConfig extends BaseHandlerConfig { // Maximum number of messages to process in a given batch messageBatchSize: number; useDbPos: boolean; + messageType: RedditMessageType; + postType: RedditPostType; + subredditType: SubredditType; + commentType: RedditCommentType; } export type RedditBase = { From 0d3e9224c6696d4b2af5a6871f313f92094291ae Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 9 May 2025 23:40:33 +0300 Subject: [PATCH 61/61] chore: tests --- .../providers/reddit/handlers/message.test.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/providers/reddit/handlers/message.test.ts b/tests/providers/reddit/handlers/message.test.ts index 37fcba0..fa73a64 100644 --- a/tests/providers/reddit/handlers/message.test.ts +++ b/tests/providers/reddit/handlers/message.test.ts @@ -11,10 +11,9 @@ import RedditMessageHandler from "../../../../src/providers/reddit/message"; import BaseProvider from "../../../../src/providers/BaseProvider"; import { CommonTests, GenericTestConfig } from "../../../common.tests"; import { - SchemaSocialChatGroup, - SchemaSocialChatMessage, -} from "../../../../src/schemas"; -import { RedditConfig } from "../../../../src/providers/reddit/types"; + RedditConfig, + RedditMessageType, +} from "../../../../src/providers/reddit/types"; const providerId = "reddit"; let network: NetworkInstance; @@ -26,7 +25,7 @@ let providerConfig: Omit< RedditConfig, "sbtImage" | "label" | "apiId" | "apiHash" > = { - maxSyncLoops: 1, + }; // Tests: @@ -56,13 +55,15 @@ describe(`${providerId} message tests`, function () { connection ); + const me = await api.getMe(); + handler.setConfig({ batchSize: 10, - }) + }); try { const syncPosition: SyncHandlerPosition = { - _id: `${providerId}-${handlerName}`, + _id: `${providerId}-${me.name}-${handlerName}`, providerId, handlerId: handler.getId(), accountId: provider.getAccountId(), @@ -84,13 +85,13 @@ describe(`${providerId} message tests`, function () { } handler.setConfig({ - messageType: "unread", + messageType: RedditMessageType.UNREAD, batchSize: 100, }); try { const syncPosition: SyncHandlerPosition = { - _id: `${providerId}-${handlerName}`, + _id: `${providerId}-${me.name}-${handlerName}`, providerId, handlerId: handler.getId(), accountId: provider.getAccountId(), @@ -99,7 +100,6 @@ describe(`${providerId} message tests`, function () { const response = await handler._sync(api, syncPosition); assert(response.results.length > 0, "No messages fetched"); - console.log(response.results); } catch (err) { // ensure provider closes even if there's an error await provider.close();