diff --git a/components/linkedin/actions/create-comment/create-comment.mjs b/components/linkedin/actions/create-comment/create-comment.mjs index d4e90266a0e31..17477ae5fa966 100644 --- a/components/linkedin/actions/create-comment/create-comment.mjs +++ b/components/linkedin/actions/create-comment/create-comment.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-create-comment", name: "Create Comment", description: "Create a comment on a share or user generated content post. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#create-comment)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/create-image-post-organization/create-image-post-organization.mjs b/components/linkedin/actions/create-image-post-organization/create-image-post-organization.mjs index 1ddb3239e89b8..d72624404f401 100644 --- a/components/linkedin/actions/create-image-post-organization/create-image-post-organization.mjs +++ b/components/linkedin/actions/create-image-post-organization/create-image-post-organization.mjs @@ -6,7 +6,7 @@ export default { key: "linkedin-create-image-post-organization", name: "Create Image Post (Organization)", description: "Create an image post on LinkedIn. [See the docs here](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/images-api?view=li-lms-2023-09&tabs=http#uploading-an-image)", - version: "0.0.2", + version: "0.0.3", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/create-image-post-user/create-image-post-user.mjs b/components/linkedin/actions/create-image-post-user/create-image-post-user.mjs index 06471fe9384cc..be1785c4603fd 100644 --- a/components/linkedin/actions/create-image-post-user/create-image-post-user.mjs +++ b/components/linkedin/actions/create-image-post-user/create-image-post-user.mjs @@ -6,7 +6,7 @@ export default { key: "linkedin-create-image-post-user", name: "Create Image Post (User)", description: "Create an image post on LinkedIn. [See the docs here](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/images-api?view=li-lms-2023-09&tabs=http#uploading-an-image)", - version: "0.0.2", + version: "0.0.3", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/create-like-on-share/create-like-on-share.mjs b/components/linkedin/actions/create-like-on-share/create-like-on-share.mjs index 90df9492d9cd5..f1224f02d9ec8 100644 --- a/components/linkedin/actions/create-like-on-share/create-like-on-share.mjs +++ b/components/linkedin/actions/create-like-on-share/create-like-on-share.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-create-like-on-share", name: "Create Like On Share", description: "Creates a like on a share. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#create-a-like-on-a-share)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/create-text-post-organization/create-text-post-organization.mjs b/components/linkedin/actions/create-text-post-organization/create-text-post-organization.mjs index ed325d91435bc..458a1372a3504 100644 --- a/components/linkedin/actions/create-text-post-organization/create-text-post-organization.mjs +++ b/components/linkedin/actions/create-text-post-organization/create-text-post-organization.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-create-text-post-organization", name: "Create a Simple Post (Organization)", description: "Create post on LinkedIn using text, URL or article. [See the docs](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/posts-api?view=li-lms-2022-11&tabs=http#create-organic-posts) for more information", - version: "0.0.5", + version: "0.0.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/create-text-post-user/create-text-post-user.mjs b/components/linkedin/actions/create-text-post-user/create-text-post-user.mjs index 197081e14da1d..50bf7e71b521b 100644 --- a/components/linkedin/actions/create-text-post-user/create-text-post-user.mjs +++ b/components/linkedin/actions/create-text-post-user/create-text-post-user.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-create-text-post-user", name: "Create a Simple Post (User)", description: "Create post on LinkedIn using text, URL or article. [See the docs](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/posts-api?view=li-lms-2022-11&tabs=http#create-organic-posts) for more information", - version: "0.0.5", + version: "0.0.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/delete-post/delete-post.mjs b/components/linkedin/actions/delete-post/delete-post.mjs index 0aca5da5e447b..c3abf77f82843 100644 --- a/components/linkedin/actions/delete-post/delete-post.mjs +++ b/components/linkedin/actions/delete-post/delete-post.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-delete-post", name: "Delete Post", description: "Removes a post from user's wall. [See the docs](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api?tabs=http#delete-shares) for more information", - version: "0.0.5", + version: "0.0.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/fetch-ad-account/fetch-ad-account.mjs b/components/linkedin/actions/fetch-ad-account/fetch-ad-account.mjs index 512f0d3e8de06..6885771dfad77 100644 --- a/components/linkedin/actions/fetch-ad-account/fetch-ad-account.mjs +++ b/components/linkedin/actions/fetch-ad-account/fetch-ad-account.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-fetch-ad-account", name: "Fetch Ad Account", description: "Fetches an individual adAccount given its id. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-accounts#fetch-ad-account)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-current-member-profile/get-current-member-profile.mjs b/components/linkedin/actions/get-current-member-profile/get-current-member-profile.mjs index 1fb95e0f41697..2797110e19520 100644 --- a/components/linkedin/actions/get-current-member-profile/get-current-member-profile.mjs +++ b/components/linkedin/actions/get-current-member-profile/get-current-member-profile.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-current-member-profile", name: "Get Current Member Profile", description: "Gets the profile of the current authenticated member. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-current-members-profile)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-member-organization-access-control/get-member-organization-access-control.mjs b/components/linkedin/actions/get-member-organization-access-control/get-member-organization-access-control.mjs index 5bcb826d9b68e..cb6bc3bea1c9b 100644 --- a/components/linkedin/actions/get-member-organization-access-control/get-member-organization-access-control.mjs +++ b/components/linkedin/actions/get-member-organization-access-control/get-member-organization-access-control.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-member-organization-access-control", name: "Get Member's Organization Access Control Information", description: "Gets the organization access control information of the current authenticated member. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-a-members-organization-access-control-information)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-member-profile/get-member-profile.mjs b/components/linkedin/actions/get-member-profile/get-member-profile.mjs index 88f3e0d32f4c6..fb42a6f426710 100644 --- a/components/linkedin/actions/get-member-profile/get-member-profile.mjs +++ b/components/linkedin/actions/get-member-profile/get-member-profile.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-member-profile", name: "Get Member Profile", description: "Gets another member's profile, given its person id. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-other-members-profile)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-multiple-member-profiles/get-multiple-member-profiles.mjs b/components/linkedin/actions/get-multiple-member-profiles/get-multiple-member-profiles.mjs index 4d0e936b07a2a..f667a5fffa888 100644 --- a/components/linkedin/actions/get-multiple-member-profiles/get-multiple-member-profiles.mjs +++ b/components/linkedin/actions/get-multiple-member-profiles/get-multiple-member-profiles.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-multiple-member-profiles", name: "Get Multiple Member Profiles", description: "Gets multiple member profiles at once. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-other-members-profile)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-organization-access-control/get-organization-access-control.mjs b/components/linkedin/actions/get-organization-access-control/get-organization-access-control.mjs index c4e27df6ca920..801fc8e4cd9d0 100644 --- a/components/linkedin/actions/get-organization-access-control/get-organization-access-control.mjs +++ b/components/linkedin/actions/get-organization-access-control/get-organization-access-control.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-organization-access-control", name: "Gets Organization Access Control", description: "Gets an organization's access control information, given the organization urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-access-control-information)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/get-organization-administrators/get-organization-administrators.mjs b/components/linkedin/actions/get-organization-administrators/get-organization-administrators.mjs index d1869d3c75f51..9aa724a6de6fb 100644 --- a/components/linkedin/actions/get-organization-administrators/get-organization-administrators.mjs +++ b/components/linkedin/actions/get-organization-administrators/get-organization-administrators.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-get-organization-administrators", name: "Get Organization Administrators", description: "Gets the administator members of an organization, given the organization urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-organization-administrators)", - version: "0.2.5", + version: "0.2.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/retrieve-comments-on-comments/retrieve-comments-on-comments.mjs b/components/linkedin/actions/retrieve-comments-on-comments/retrieve-comments-on-comments.mjs index 1275a478c5355..2231ce38e9992 100644 --- a/components/linkedin/actions/retrieve-comments-on-comments/retrieve-comments-on-comments.mjs +++ b/components/linkedin/actions/retrieve-comments-on-comments/retrieve-comments-on-comments.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-retrieve-comments-on-comments", name: "Retrieves Comments on Comments", description: "Retrieves comments on comments, given the parent comment urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#retrieve-comments-on-comments)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/retrieve-comments-shares/retrieve-comments-shares.mjs b/components/linkedin/actions/retrieve-comments-shares/retrieve-comments-shares.mjs index 9bf222cf80e1e..6129f4900cbca 100644 --- a/components/linkedin/actions/retrieve-comments-shares/retrieve-comments-shares.mjs +++ b/components/linkedin/actions/retrieve-comments-shares/retrieve-comments-shares.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-retrieve-comments-shares", name: "Retrieve Comments On Shares", description: "Retrieve comments on shares given the share urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#retrieve-comments-on-shares)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/actions/search-organization/search-organization.mjs b/components/linkedin/actions/search-organization/search-organization.mjs index f32f128e3ef60..d1a7ba1ef9e8a 100644 --- a/components/linkedin/actions/search-organization/search-organization.mjs +++ b/components/linkedin/actions/search-organization/search-organization.mjs @@ -4,7 +4,7 @@ export default { key: "linkedin-search-organization", name: "Search Organization", description: "Searches for an organization by vanity name or email domain. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-lookup-api)", - version: "0.1.5", + version: "0.1.6", type: "action", props: { linkedin, diff --git a/components/linkedin/common/constants.mjs b/components/linkedin/common/constants.mjs index a84bbac4cf002..c42ecc2765d43 100644 --- a/components/linkedin/common/constants.mjs +++ b/components/linkedin/common/constants.mjs @@ -75,6 +75,13 @@ const ROLE_STATES = [ "REVOKED", ]; +const DEFAULT_LIMIT = 20; +const DEFAULT_MAX = 100; +const IS_FIRST_RUN = "isFirstRun"; +const LAST_DATE_AT = "lastDateAt"; +const ORG_ID = "orgId"; +const PERSON_ID = "personId"; + export default { VERSION_PATH, BASE_URL, @@ -85,4 +92,10 @@ export default { PIVOT_OPTIONS, ORGANIZATION_ROLES, ROLE_STATES, + DEFAULT_LIMIT, + DEFAULT_MAX, + IS_FIRST_RUN, + LAST_DATE_AT, + ORG_ID, + PERSON_ID, }; diff --git a/components/linkedin/common/utils.mjs b/components/linkedin/common/utils.mjs new file mode 100644 index 0000000000000..aee64e60c4635 --- /dev/null +++ b/components/linkedin/common/utils.mjs @@ -0,0 +1,38 @@ +async function iterate(iterations) { + const items = []; + for await (const item of iterations) { + items.push(item); + } + return items; +} + +function getNestedProperty(obj, propertyString) { + const properties = propertyString.split("."); + return properties.reduce((prev, curr) => prev?.[curr], obj); +} + +function defaultEncodeFn(key, value) { + return `${key}=${value}`; +} + +function encodeFn(key, value) { + return `${key}=${encodeURIComponent(value)}`; +} + +function getParamsSerializer(encodeFn = defaultEncodeFn) { + return (params) => { + return Object.entries(params) + .map(([ + key, + value, + ]) => encodeFn(key, value)) + .join("&"); + }; +} + +export default { + iterate, + getNestedProperty, + encodeFn, + getParamsSerializer, +}; diff --git a/components/linkedin/linkedin.app.mjs b/components/linkedin/linkedin.app.mjs index 620ee795e9762..6ed668aac5448 100644 --- a/components/linkedin/linkedin.app.mjs +++ b/components/linkedin/linkedin.app.mjs @@ -1,6 +1,7 @@ import { axios as axiosPD } from "@pipedream/platform"; import axios from "axios"; import constants from "./common/constants.mjs"; +import utils from "./common/utils.mjs"; export default { type: "app", @@ -268,5 +269,65 @@ export default { ...args, }); }, + listPosts(args = {}) { + return this._makeRequest({ + path: "/posts", + paramsSerializer: utils.getParamsSerializer(utils.encodeFn), + ...args, + }); + }, + async *getIterations({ + resourcesFn, resourcesFnArgs, resourceName, + lastDateAt, dateField, + max = constants.DEFAULT_MAX, + }) { + let page = 0; + let resourcesCount = 0; + + while (true) { + const response = + await resourcesFn({ + ...resourcesFnArgs, + params: { + ...resourcesFnArgs?.params, + count: constants.DEFAULT_LIMIT, + start: page * constants.DEFAULT_LIMIT, + }, + }); + + const nextResources = utils.getNestedProperty(response, resourceName); + + if (!nextResources?.length) { + console.log("No more resources found"); + return; + } + + for (const resource of nextResources) { + const isDateGreater = + lastDateAt + && resource[dateField] > lastDateAt; + + if (!lastDateAt || isDateGreater) { + yield resource; + resourcesCount += 1; + } + + if (resourcesCount >= max) { + console.log("Reached max resources"); + return; + } + } + + if (nextResources.length < constants.DEFAULT_LIMIT) { + console.log("No next page found"); + return; + } + + page += 1; + } + }, + paginate(args = {}) { + return utils.iterate(this.getIterations(args)); + }, }, }; diff --git a/components/linkedin/package.json b/components/linkedin/package.json index e5768a8b56aa5..1c07baa557c79 100644 --- a/components/linkedin/package.json +++ b/components/linkedin/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/linkedin", - "version": "0.1.1", + "version": "0.2.0", "description": "Pipedream Linkedin Components", "main": "linkedin.app.mjs", "keywords": [ @@ -13,7 +13,7 @@ "access": "public" }, "dependencies": { - "@pipedream/platform": "^1.2.1", + "@pipedream/platform": "^3.0.3", "axios": "^1.2.3", "form-data": "^4.0.0" } diff --git a/components/linkedin/sources/common/polling.mjs b/components/linkedin/sources/common/polling.mjs new file mode 100644 index 0000000000000..649fd5c49d7bf --- /dev/null +++ b/components/linkedin/sources/common/polling.mjs @@ -0,0 +1,122 @@ +import { + ConfigurationError, + DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, +} from "@pipedream/platform"; +import app from "../../linkedin.app.mjs"; +import constants from "../../common/constants.mjs"; + +export default { + props: { + app, + db: "$.service.db", + timer: { + type: "$.interface.timer", + label: "Polling Schedule", + description: "How often to poll the API", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + hooks: { + deploy() { + this.setIsFirstRun(true); + }, + }, + methods: { + generateMeta() { + throw new ConfigurationError("generateMeta is not implemented"); + }, + setPersonId(value) { + this.db.set(constants.PERSON_ID, value); + }, + getPersonId() { + return this.db.get(constants.PERSON_ID); + }, + setOrganizationId(value) { + this.db.set(constants.ORG_ID, value); + }, + getOrganizationId() { + return this.db.get(constants.ORG_ID); + }, + setIsFirstRun(value) { + this.db.set(constants.IS_FIRST_RUN, value); + }, + getIsFirstRun() { + return this.db.get(constants.IS_FIRST_RUN); + }, + setLastDateAt(value) { + this.db.set(constants.LAST_DATE_AT, value); + }, + getLastDateAt() { + return this.db.get(constants.LAST_DATE_AT); + }, + getDateField() { + throw new ConfigurationError("getDateField is not implemented"); + }, + getResourceName() { + throw new ConfigurationError("getResourceName is not implemented"); + }, + getResourcesFn() { + throw new ConfigurationError("getResourcesFn is not implemented"); + }, + getResourcesFnArgs() { + throw new ConfigurationError("getResourcesFnArgs is not implemented"); + }, + processResource(resource) { + const meta = this.generateMeta(resource); + this.$emit(resource, meta); + }, + }, + async run() { + const { + app, + getDateField, + getLastDateAt, + getResourcesFn, + getResourcesFnArgs, + getResourceName, + getIsFirstRun, + setIsFirstRun, + setLastDateAt, + processResource, + } = this; + + const isFirstRun = getIsFirstRun(); + const dateField = getDateField(); + const lastDateAt = getLastDateAt(); + + const otherArgs = isFirstRun + ? { + max: constants.DEFAULT_LIMIT, + } + : { + dateField, + lastDateAt, + }; + + const resources = await app.paginate({ + resourcesFn: getResourcesFn(), + resourcesFnArgs: getResourcesFnArgs(), + resourceName: getResourceName(), + ...otherArgs, + }); + + if (resources.length) { + const [ + firstResource, + ] = Array.from(resources); + if (firstResource) { + setLastDateAt(firstResource[dateField]); + } + } + + Array.from(resources) + .reverse() + .forEach(processResource); + + if (isFirstRun) { + setIsFirstRun(false); + } + }, +}; diff --git a/components/linkedin/sources/new-organization-post-created/new-organization-post-created.mjs b/components/linkedin/sources/new-organization-post-created/new-organization-post-created.mjs new file mode 100644 index 0000000000000..be628b59d64c1 --- /dev/null +++ b/components/linkedin/sources/new-organization-post-created/new-organization-post-created.mjs @@ -0,0 +1,82 @@ +import { ConfigurationError } from "@pipedream/platform"; +import common from "../common/polling.mjs"; +import utils from "../../common/utils.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "linkedin-new-organization-post-created", + name: "New Organization Post Created", + description: "Emit new event when a new post is created by the organization. [See the documentation](https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/posts-api?view=li-lms-2024-09&tabs=curl#find-posts-by-authors).", + type: "source", + version: "0.0.1", + dedupe: "unique", + props: { + ...common.props, + organizationVanityName: { + type: "string", + label: "Organization Vanity Name", + description: "You can get the Orgainization Vanity Name from the company LinkedIN URL, for example, if the company LinkedIn URL is `https://www.linkedin.com/company/confluent`, then the Organization Vanity Name is `confluent`.", + }, + }, + hooks: { + ...common.hooks, + async deploy() { + const { + app, + organizationVanityName, + setOrganizationId, + setIsFirstRun, + } = this; + + const { elements } = await app.searchOrganizations("vanityName", { + debug: true, + params: { + vanityName: organizationVanityName, + }, + paramsSerializer: utils.getParamsSerializer(utils.encodeFn), + }); + + const organizationFound = + elements?.find(({ vanityName }) => vanityName === organizationVanityName); + + if (!organizationFound) { + throw new ConfigurationError(`There's no Organization matched for Organization Vanity Name \`${organizationVanityName}\`.`); + } + + setOrganizationId(organizationFound.id); + setIsFirstRun(true); + }, + }, + methods: { + ...common.methods, + getDateField() { + return "createdAt"; + }, + getResourceName() { + return "elements"; + }, + getResourcesFn() { + return this.app.listPosts; + }, + getResourcesFnArgs() { + const author = `urn:li:organization:${this.getOrganizationId()}`; + return { + debug: true, + params: { + author, + q: "author", + sortBy: "CREATED", + }, + }; + }, + generateMeta(resource) { + return { + id: resource.id, + summary: `New Org Post: ${resource.id}`, + ts: resource.createdAt, + }; + }, + }, + sampleEmit, +}; diff --git a/components/linkedin/sources/new-organization-post-created/test-event.mjs b/components/linkedin/sources/new-organization-post-created/test-event.mjs new file mode 100644 index 0000000000000..9150118489cf9 --- /dev/null +++ b/components/linkedin/sources/new-organization-post-created/test-event.mjs @@ -0,0 +1,18 @@ +export default { + "isReshareDisabledByAuthor": false, + "lifecycleState": "PUBLISHED", + "createdAt": 1741038207195, + "lastModifiedAt": 1741038237226, + "visibility": "PUBLIC", + "publishedAt": 1741038207195, + "author": "urn:li:organization:100680185", + "id": "urn:li:share:7302443516318699520", + "distribution": { + "feedDistribution": "MAIN_FEED", + "thirdPartyDistributionChannels": [] + }, + "commentary": "test 1", + "lifecycleStateInfo": { + "isEditedByAuthor": false + } +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 271a9e7281879..a8829127b8f17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7162,8 +7162,8 @@ importers: components/linkedin: dependencies: '@pipedream/platform': - specifier: ^1.2.1 - version: 1.6.6 + specifier: ^3.0.3 + version: 3.0.3 axios: specifier: ^1.2.3 version: 1.7.7(debug@3.2.7) @@ -19633,6 +19633,9 @@ packages: '@types/node@18.19.68': resolution: {integrity: sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==} + '@types/node@18.19.80': + resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} + '@types/node@20.17.6': resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} @@ -20280,6 +20283,9 @@ packages: axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.8.2: + resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -23438,6 +23444,11 @@ packages: peerDependencies: fp-ts: ^2.5.0 + io-ts@2.2.22: + resolution: {integrity: sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA==} + peerDependencies: + fp-ts: ^2.5.0 + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -23504,6 +23515,10 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -26938,6 +26953,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + sendbird-platform-sdk@0.0.14: resolution: {integrity: sha512-nuVX2mwGBdMUys/c6MLOrjbTavfo34HDbrVjcjbL9UNeWXWK1hJ9/CUnxpnviCNzB9BCv4SEZhEQ2K6w4dZYoQ==} @@ -31921,14 +31941,14 @@ snapshots: dependencies: '@definitelytyped/typescript-versions': 0.1.7 '@definitelytyped/utils': 0.1.8 - semver: 7.6.3 + semver: 7.7.1 '@definitelytyped/typescript-versions@0.1.7': {} '@definitelytyped/utils@0.1.8': dependencies: '@qiwi/npm-registry-client': 8.9.1 - '@types/node': 18.19.68 + '@types/node': 18.19.80 cachedir: 2.4.0 charm: 1.0.2 minimatch: 9.0.5 @@ -33758,7 +33778,7 @@ snapshots: dependencies: axios: 1.7.7(debug@3.2.7) fp-ts: 2.16.9 - io-ts: 2.2.21(fp-ts@2.16.9) + io-ts: 2.2.22(fp-ts@2.16.9) querystring: 0.2.1 transitivePeerDependencies: - debug @@ -34163,8 +34183,6 @@ snapshots: '@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3)) '@putout/operator-json': 2.2.0 putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - supports-color '@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))': dependencies: @@ -34702,7 +34720,7 @@ snapshots: request: 2.88.2 retry: 0.12.0 safe-buffer: 5.2.1 - semver: 7.6.3 + semver: 7.7.1 slide: 1.1.6 ssri: 8.0.1 optionalDependencies: @@ -36138,6 +36156,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@18.19.80': + dependencies: + undici-types: 5.26.5 + '@types/node@20.17.6': dependencies: undici-types: 6.19.8 @@ -36317,7 +36339,7 @@ snapshots: glob: 7.2.3 is-glob: 4.0.3 lodash: 4.17.21 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@3.9.10) optionalDependencies: typescript: 3.9.10 @@ -36847,7 +36869,7 @@ snapshots: dependencies: '@aws-sdk/util-utf8-browser': 3.259.0 '@httptoolkit/websocket-stream': 6.0.1 - axios: 1.7.9 + axios: 1.8.2 buffer: 6.0.3 crypto-js: 4.2.0 mqtt: 4.3.8 @@ -36953,6 +36975,14 @@ snapshots: transitivePeerDependencies: - debug + axios@1.8.2: + dependencies: + follow-redirects: 1.15.9(debug@3.2.7) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axobject-query@4.1.0: {} b4a@1.6.7: {} @@ -38944,7 +38974,7 @@ snapshots: eslint-compat-utils@0.5.1(eslint@8.57.1): dependencies: eslint: 8.57.1 - semver: 7.6.3 + semver: 7.7.1 eslint-config-next@15.0.3(eslint@8.57.1)(typescript@5.6.3): dependencies: @@ -40989,6 +41019,10 @@ snapshots: dependencies: fp-ts: 2.16.9 + io-ts@2.2.22(fp-ts@2.16.9): + dependencies: + fp-ts: 2.16.9 + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -41055,6 +41089,10 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -41282,7 +41320,7 @@ snapshots: '@babel/parser': 7.26.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -42462,7 +42500,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 make-error@1.3.6: {} @@ -43749,8 +43787,8 @@ snapshots: normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.15.1 - semver: 7.6.3 + is-core-module: 2.16.1 + semver: 7.7.1 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -43770,7 +43808,7 @@ snapshots: npm-package-arg@8.1.5: dependencies: hosted-git-info: 4.1.0 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-name: 3.0.0 npm-run-path@2.0.2: @@ -45920,6 +45958,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + sendbird-platform-sdk@0.0.14(@babel/core@7.26.0): dependencies: '@babel/cli': 7.25.9(@babel/core@7.26.0)