diff --git a/components/adobe_photoshop_lightroom/adobe_photoshop_lightroom.app.mjs b/components/adobe_photoshop_lightroom/adobe_photoshop_lightroom.app.mjs index 1893a31024e23..d071f5e9fb5fc 100644 --- a/components/adobe_photoshop_lightroom/adobe_photoshop_lightroom.app.mjs +++ b/components/adobe_photoshop_lightroom/adobe_photoshop_lightroom.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/applicantstack/applicantstack.app.mjs b/components/applicantstack/applicantstack.app.mjs index ebfc0a8c67eef..b2252ac746914 100644 --- a/components/applicantstack/applicantstack.app.mjs +++ b/components/applicantstack/applicantstack.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/benchmarkone/benchmarkone.app.mjs b/components/benchmarkone/benchmarkone.app.mjs index 584fd23cb0572..6e9058b2fe7af 100644 --- a/components/benchmarkone/benchmarkone.app.mjs +++ b/components/benchmarkone/benchmarkone.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/claris_filemaker_server_admin_api/claris_filemaker_server_admin_api.app.mjs b/components/claris_filemaker_server_admin_api/claris_filemaker_server_admin_api.app.mjs index a748ab5b2e678..0c050cfef1e05 100644 --- a/components/claris_filemaker_server_admin_api/claris_filemaker_server_admin_api.app.mjs +++ b/components/claris_filemaker_server_admin_api/claris_filemaker_server_admin_api.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/claris_filemaker_server_data_api/claris_filemaker_server_data_api.app.mjs b/components/claris_filemaker_server_data_api/claris_filemaker_server_data_api.app.mjs index 11b664ffbd64c..d85185a399eb1 100644 --- a/components/claris_filemaker_server_data_api/claris_filemaker_server_data_api.app.mjs +++ b/components/claris_filemaker_server_data_api/claris_filemaker_server_data_api.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/claris_filemaker_server_odata_api/claris_filemaker_server_odata_api.app.mjs b/components/claris_filemaker_server_odata_api/claris_filemaker_server_odata_api.app.mjs index b8b484472fbf7..fe1592dfbf14d 100644 --- a/components/claris_filemaker_server_odata_api/claris_filemaker_server_odata_api.app.mjs +++ b/components/claris_filemaker_server_odata_api/claris_filemaker_server_odata_api.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/current_rms/current_rms.app.mjs b/components/current_rms/current_rms.app.mjs index 661003437c443..8618e5ab2d478 100644 --- a/components/current_rms/current_rms.app.mjs +++ b/components/current_rms/current_rms.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/elastic_cloud/elastic_cloud.app.mjs b/components/elastic_cloud/elastic_cloud.app.mjs index 4d181868175a4..071ead5600f4e 100644 --- a/components/elastic_cloud/elastic_cloud.app.mjs +++ b/components/elastic_cloud/elastic_cloud.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/felt/felt.app.mjs b/components/felt/felt.app.mjs index ff00b2509779e..ddda6c1b94243 100644 --- a/components/felt/felt.app.mjs +++ b/components/felt/felt.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/globalping/globalping.app.mjs b/components/globalping/globalping.app.mjs index ac5fedfc7b44e..4fc928c2c4cf6 100644 --- a/components/globalping/globalping.app.mjs +++ b/components/globalping/globalping.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/langfuse/langfuse.app.mjs b/components/langfuse/langfuse.app.mjs index 715b2b47297c6..083bdbf5ace7f 100644 --- a/components/langfuse/langfuse.app.mjs +++ b/components/langfuse/langfuse.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/mailtrap/mailtrap.app.mjs b/components/mailtrap/mailtrap.app.mjs index a8d92bd267284..d61463d23ed7e 100644 --- a/components/mailtrap/mailtrap.app.mjs +++ b/components/mailtrap/mailtrap.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/morgen/morgen.app.mjs b/components/morgen/morgen.app.mjs index a41669c7c6812..f01fa0f4a62c0 100644 --- a/components/morgen/morgen.app.mjs +++ b/components/morgen/morgen.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/motive/actions/find-user-details/find-user-details.mjs b/components/motive/actions/find-user-details/find-user-details.mjs new file mode 100644 index 0000000000000..5df74bf9319df --- /dev/null +++ b/components/motive/actions/find-user-details/find-user-details.mjs @@ -0,0 +1,75 @@ +import { ConfigurationError } from "@pipedream/platform"; +import { clearObj } from "../../common/util.mjs"; +import motive from "../../motive.app.mjs"; + +export default { + key: "motive-find-user-details", + name: "Find User Details", + description: "Retrieve user details based on specific criteria. [See the documentation](https://developer.gomotive.com/reference/users-lookup)", + version: "0.0.1", + type: "action", + props: { + motive, + alert: { + type: "alert", + alertType: "info", + content: "If you provide more than one prop, only one will be considered, the others will be ignored.", + }, + username: { + type: "string", + label: "Username", + description: "Username to retrieve user details", + optional: true, + }, + email: { + type: "string", + label: "Email", + description: "Email to retrieve user details", + optional: true, + }, + driverCompanyId: { + propDefinition: [ + motive, + "driverCompanyId", + ], + optional: true, + }, + }, + async run({ $ }) { + let response; + const criteria = []; + + const { + username, email, driverCompanyId, + } = this; + if (!username && !email && !driverCompanyId) { + throw new Error("At least one of 'Username', 'Email', 'Driver Company Id' must be provided."); + } + + if (username) criteria.push(`username: ${username}`); + if (email) criteria.push(`email: ${email}`); + if (driverCompanyId) criteria.push(`driverCompanyId: ${driverCompanyId}`); + + try { + response = await this.motive.retrieveUserDetails({ + $, + params: clearObj({ + username, + email, + driver_company_id: driverCompanyId, + }), + }); + + } catch ({ response: { data } }) { + if (data.error_message === "user not found") { + response = { + user: null, + }; + } else { + throw new ConfigurationError(data.error_message); + } + } + $.export("$summary", `Successfully retrieved user details for ${criteria.join(", ")}`); + return response; + }, +}; diff --git a/components/motive/common/util.mjs b/components/motive/common/util.mjs new file mode 100644 index 0000000000000..090fad73a48d6 --- /dev/null +++ b/components/motive/common/util.mjs @@ -0,0 +1,16 @@ +export const clearObj = (obj) => { + return Object.entries(obj) + .filter(([ + _, + v, + ]) => (v != null && v != "" && _ != "$emit")) + .reduce((acc, [ + k, + v, + ]) => ({ + ...acc, + [k]: (!Array.isArray(v) && v === Object(v)) + ? clearObj(v) + : v, + }), {}); +}; diff --git a/components/motive/motive.app.mjs b/components/motive/motive.app.mjs index 185cde19a37f5..2bf660dbee1d5 100644 --- a/components/motive/motive.app.mjs +++ b/components/motive/motive.app.mjs @@ -1,11 +1,124 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "motive", - propDefinitions: {}, + propDefinitions: { + driverId: { + type: "string", + label: "Driver ID", + description: "Filter to a specific driver", + }, + safetyCategory: { + type: "string", + label: "Safety Category", + description: "Filter to a specific safety category", + }, + driverCompanyId: { + type: "string", + label: "Driver Company ID", + description: "Driver company ID to retrieve user details", + async options({ page }) { + const { users } = await this.listUsers({ + params: { + page_no: page + 1, + role: "driver", + }, + }); + + return users.map(({ user }) => ({ + label: user.email || `${user.first_name} ${user.last_name}`, + value: user.driver_company_id, + })); + }, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://api.gomotive.com/v1"; + }, + _headers() { + return { + Authorization: `Bearer ${this.$auth.oauth_access_token}`, + }; + }, + _makeRequest({ + $ = this, path, ...opts + }) { + return axios($, { + url: this._baseUrl() + path, + headers: this._headers(), + ...opts, + }); + }, + listHosViolations(opts = {}) { + return this._makeRequest({ + method: "GET", + path: "/hos_violations", + ...opts, + }); + }, + listUsers(opts = {}) { + return this._makeRequest({ + path: "/users", + ...opts, + }); + }, + createWebhook(opts = {}) { + return this._makeRequest({ + method: "POST", + path: "/company_webhooks", + ...opts, + }); + }, + updateWebhook({ + webhookId, ...opts + }) { + return this._makeRequest({ + method: "PUT", + path: `/company_webhooks/${webhookId}`, + ...opts, + }); + }, + listDriverPerformanceEvents(opts = {}) { + return this._makeRequest({ + method: "GET", + path: "/driver_performance_events", + ...opts, + }); + }, + retrieveUserDetails(opts = {}) { + return this._makeRequest({ + method: "GET", + path: "/users/lookup", + ...opts, + }); + }, + async *paginate({ + fn, params = {}, fieldName, maxResults = null, ...opts + }) { + let hasMore = false; + let count = 0; + let page = 0; + + do { + params.page = ++page; + const data = await fn({ + params, + ...opts, + }); + const items = data[fieldName]; + for (const d of items) { + yield d; + + if (maxResults && ++count === maxResults) { + return count; + } + } + + hasMore = items.length; + + } while (hasMore); }, }, }; diff --git a/components/motive/package.json b/components/motive/package.json index b3da2582b5099..7b17921c1c4a0 100644 --- a/components/motive/package.json +++ b/components/motive/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/motive", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream Motive Components", "main": "motive.app.mjs", "keywords": [ @@ -11,5 +11,9 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3", + "uuid": "^11.0.4" } -} \ No newline at end of file +} diff --git a/components/motive/sources/common/base.mjs b/components/motive/sources/common/base.mjs new file mode 100644 index 0000000000000..b82a39f4587f0 --- /dev/null +++ b/components/motive/sources/common/base.mjs @@ -0,0 +1,63 @@ +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; +import motive from "../../motive.app.mjs"; + +export default { + props: { + motive, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + _getLastId() { + return this.db.get("lastId") || 0; + }, + _setLastId(lastId) { + this.db.set("lastId", lastId); + }, + async emitEvent(maxResults = false) { + const lastId = this._getLastId(); + const fieldName = this.getFieldName(); + + const response = this.motive.paginate({ + fn: this.getFunction(), + fieldName: `${fieldName}s`, + }); + + let responseArray = []; + for await (const item of response) { + const data = item[fieldName]; + if (data.id <= lastId) break; + responseArray.push(data); + } + + if (responseArray.length) { + if (maxResults && (responseArray.length > maxResults)) { + responseArray.length = maxResults; + } + this._setLastId(responseArray[0].id); + } + + for (const item of responseArray.reverse()) { + const data = item[fieldName]; + this.$emit(data, { + id: data.id, + summary: this.getSummary(data), + ts: Date.parse(data.start_time || new Date()), + }); + } + }, + }, + hooks: { + async deploy() { + await this.emitEvent(25); + }, + }, + async run() { + await this.emitEvent(); + }, +}; diff --git a/components/motive/sources/new-hours-of-service-violation/new-hours-of-service-violation.mjs b/components/motive/sources/new-hours-of-service-violation/new-hours-of-service-violation.mjs new file mode 100644 index 0000000000000..7ab61c8b44436 --- /dev/null +++ b/components/motive/sources/new-hours-of-service-violation/new-hours-of-service-violation.mjs @@ -0,0 +1,25 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "motive-new-hours-of-service-violation", + name: "New Hours of Service Violation", + description: "Emit new event when a hos is emited.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getFunction() { + return this.motive.listHosViolations; + }, + getFieldName() { + return "hos_violation"; + }, + getSummary(item) { + return `New HOS Violation: ${item.id}`; + }, + }, + sampleEmit, +}; diff --git a/components/motive/sources/new-hours-of-service-violation/test-event.mjs b/components/motive/sources/new-hours-of-service-violation/test-event.mjs new file mode 100644 index 0000000000000..274d17697702a --- /dev/null +++ b/components/motive/sources/new-hours-of-service-violation/test-event.mjs @@ -0,0 +1,17 @@ +export default { + "id": 97, + "type": "ca_duty_15", + "start_time": "2016-03-12T19:00:00Z", + "end_time": null, + "name": "15 Hour On Duty Limit", + "user": { + "id": 156, + "first_name": "Harold", + "last_name": "Hoeger", + "username": "hobart", + "email": null, + "driver_company_id": null, + "status": "deactivated", + "role": "driver" + } +} \ No newline at end of file diff --git a/components/motive/sources/new-safety-event/new-safety-event.mjs b/components/motive/sources/new-safety-event/new-safety-event.mjs new file mode 100644 index 0000000000000..ecdad4a7b42fd --- /dev/null +++ b/components/motive/sources/new-safety-event/new-safety-event.mjs @@ -0,0 +1,25 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "motive-new-safety-event", + name: "New Safety Event", + description: "Emit new safety-related events like harsh braking or acceleration.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getFunction() { + return this.motive.listDriverPerformanceEvents; + }, + getFieldName() { + return "driver_performance_event"; + }, + getSummary(event) { + return `New Safety Event: ${event.type}`; + }, + }, + sampleEmit, +}; diff --git a/components/motive/sources/new-safety-event/test-event.mjs b/components/motive/sources/new-safety-event/test-event.mjs new file mode 100644 index 0000000000000..9ab6ca3096d39 --- /dev/null +++ b/components/motive/sources/new-safety-event/test-event.mjs @@ -0,0 +1,123 @@ +export default { + "id": 828645972, + "acceleration": 0.292558613659531, + "duration": 2, + "end_bearing": 270.36, + "end_speed": 30.924, + "end_time": "2023-03-16T00:22:53Z", + "lat": 43.0361387, + "lon": -78.8207746, + "m_gps_heading": [ + 269.82, + 269.3, + 269.06, + 268.91, + 268.93, + 269.42, + 269.69, + 269.23, + 270.36, + 278.3, + 323.29, + 342.05, + 344.37, + 344.19, + 343.28, + 341.11 + ], + "m_gps_lat": [ + 43.0361491, + 43.0361477, + 43.0361451, + 43.0361428, + 43.0361407, + 43.0361387, + 43.0361387, + 43.0361381, + 43.0361383, + 43.0361438, + 43.0362017, + 43.0362433, + 43.0362853, + 43.0363294, + 43.0363748, + 43.0364192 + ], + "m_gps_lon": [ + -78.8195014, + -78.8197336, + -78.8199641, + -78.8201898, + -78.8204033, + -78.8206003, + -78.8207746, + -78.8209258, + -78.8210443, + -78.8211361, + -78.8212513, + -78.8212781, + -78.8212971, + -78.8213152, + -78.8213349, + -78.8213535 + ], + "m_veh_odo": null, + "m_veh_spd": [ + 68, + 68, + 66, + 64, + 60, + 54, + 48, + 40, + 22, + 20.5, + 19, + 18, + 17, + 18, + 19, + 19 + ], + "start_bearing": 269.69, + "start_speed": 48.816, + "start_time": "2023-03-16T00:22:51Z", + "type": "hard_brake", + "driver": null, + "vehicle": { + "id": 421006, + "number": "Camann_Pilot2", + "year": "2012", + "make": "Honda", + "model": "Pilot", + "vin": "", + "metric_units": false + }, + "eld_device": { + "id": 698247, + "identifier": "AABL36GB270042", + "model": "lbb-3.6ca" + }, + "m_gps_spd": [ + 68.148, + 68.112, + 66.852, + 64.764, + 61.128, + 55.872, + 48.816, + 41.256, + 30.924, + 23.292, + 19.656, + 17.928, + 18.252, + 18.072, + 19.548, + 18.108 + ], + "location": "3.5 km E of North Tonawanda, NY", + "intensity": "-10.3 kph/s", + "coaching_status": "pending_review" +} \ No newline at end of file diff --git a/components/office_365_management/office_365_management.app.mjs b/components/office_365_management/office_365_management.app.mjs index 29bee15652700..ba141060dfdec 100644 --- a/components/office_365_management/office_365_management.app.mjs +++ b/components/office_365_management/office_365_management.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/opnform/opnform.app.mjs b/components/opnform/opnform.app.mjs index 52ce3aed662e9..5d7a7fb15c1ce 100644 --- a/components/opnform/opnform.app.mjs +++ b/components/opnform/opnform.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/ory/ory.app.mjs b/components/ory/ory.app.mjs index 4869b619f7441..655c485a005c8 100644 --- a/components/ory/ory.app.mjs +++ b/components/ory/ory.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/real_id/real_id.app.mjs b/components/real_id/real_id.app.mjs index 1a3ed39ac7e9a..37e422174691a 100644 --- a/components/real_id/real_id.app.mjs +++ b/components/real_id/real_id.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/referral_rocket/referral_rocket.app.mjs b/components/referral_rocket/referral_rocket.app.mjs index 8145255e8e843..94d8bcc305989 100644 --- a/components/referral_rocket/referral_rocket.app.mjs +++ b/components/referral_rocket/referral_rocket.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/relintex_crm/relintex_crm.app.mjs b/components/relintex_crm/relintex_crm.app.mjs index e818907ca8069..e2b0cdbc8624e 100644 --- a/components/relintex_crm/relintex_crm.app.mjs +++ b/components/relintex_crm/relintex_crm.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/seen/seen.app.mjs b/components/seen/seen.app.mjs index 60c7e950d656e..a624bcda83c01 100644 --- a/components/seen/seen.app.mjs +++ b/components/seen/seen.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/sinch_messagemedia/sinch_messagemedia.app.mjs b/components/sinch_messagemedia/sinch_messagemedia.app.mjs index 34f07f372fecf..5d1798c421b5e 100644 --- a/components/sinch_messagemedia/sinch_messagemedia.app.mjs +++ b/components/sinch_messagemedia/sinch_messagemedia.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/stack_overflow_for_teams/stack_overflow_for_teams.app.mjs b/components/stack_overflow_for_teams/stack_overflow_for_teams.app.mjs index d44a651c5f773..3399807288e6d 100644 --- a/components/stack_overflow_for_teams/stack_overflow_for_teams.app.mjs +++ b/components/stack_overflow_for_teams/stack_overflow_for_teams.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/zep/zep.app.mjs b/components/zep/zep.app.mjs index 3b5dfdb6f1fb6..c612cdfc19f64 100644 --- a/components/zep/zep.app.mjs +++ b/components/zep/zep.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/components/zoho_tables/zoho_tables.app.mjs b/components/zoho_tables/zoho_tables.app.mjs index d925fcafc37ad..42dfb670457a5 100644 --- a/components/zoho_tables/zoho_tables.app.mjs +++ b/components/zoho_tables/zoho_tables.app.mjs @@ -8,4 +8,4 @@ export default { console.log(Object.keys(this.$auth)); }, }, -}; \ No newline at end of file +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb6beb3642cc8..99253202b2be1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6882,7 +6882,14 @@ importers: specifier: ^3.0.3 version: 3.0.3 - components/motive: {} + components/motive: + dependencies: + '@pipedream/platform': + specifier: ^3.0.3 + version: 3.0.3 + uuid: + specifier: ^11.0.4 + version: 11.0.5 components/moxie: dependencies: @@ -26372,6 +26379,10 @@ packages: resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} hasBin: true + uuid@11.0.5: + resolution: {integrity: sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==} + hasBin: true + uuid@3.3.2: resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. @@ -31340,7 +31351,7 @@ snapshots: '@std-uritemplate/std-uritemplate': 1.0.6 tinyduration: 3.3.1 tslib: 2.8.1 - uuid: 11.0.3 + uuid: 11.0.5 '@microsoft/kiota-http-fetchlibrary@1.0.0-preview.77': dependencies: @@ -45649,6 +45660,8 @@ snapshots: uuid@11.0.3: {} + uuid@11.0.5: {} + uuid@3.3.2: {} uuid@3.4.0: {}