diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 15c53bd413..5653d72f0e 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -15,6 +15,9 @@ concurrency: group: pr-${{ github.event.pull_request.number }}-checks cancel-in-progress: true +permissions: + contents: read + jobs: # ---------- Initial steps ---------- diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4911ba7c41..fb8defa1fe 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -15,6 +15,9 @@ concurrency: group: deploy-and-release cancel-in-progress: false +permissions: + contents: read + jobs: calculate-changes: name: Compute changed adapters diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5f52ec7d00..aae912ebe8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,6 +20,9 @@ concurrency: group: deploy-and-release cancel-in-progress: false +permissions: + contents: write + jobs: gh-release: name: GH Release diff --git a/.pnp.cjs b/.pnp.cjs index f72e2d3db8..301c145430 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -4834,10 +4834,10 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/apex/",\ "packageDependencies": [\ ["@chainlink/apex-adapter", "workspace:packages/sources/apex"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.4.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -4868,7 +4868,7 @@ const RAW_RUNTIME_STATE = ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.4.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -4896,11 +4896,11 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/bank-frick/",\ "packageDependencies": [\ ["@chainlink/bank-frick-adapter", "workspace:packages/sources/bank-frick"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.11.2"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ - ["fastify", "npm:5.6.2"],\ + ["axios", "npm:1.13.5"],\ + ["fastify", "npm:5.7.4"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.8.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -5739,10 +5739,10 @@ const RAW_RUNTIME_STATE = ["@types/uuid", "npm:8.3.4"],\ ["@types/ws", "npm:8.5.14"],\ ["ajv", "npm:8.17.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["decimal.js", "npm:10.5.0"],\ ["fast-redact", "npm:3.5.0"],\ - ["fastify", "npm:5.6.2"],\ + ["fastify", "npm:5.7.4"],\ ["lodash", "npm:4.17.23"],\ ["lru-cache", "npm:6.0.0"],\ ["mock-socket", "npm:9.3.1"],\ @@ -5816,7 +5816,7 @@ const RAW_RUNTIME_STATE = ["@types/swagger-jsdoc", "npm:6.0.4"],\ ["@types/yaml", "npm:1.9.7"],\ ["airtable", "npm:0.11.6"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["axios-mock-adapter", "virtual:490c3ad4216947ed7273aa36c5dd60e9ddcc5d0939f57049dd1de8af69c263d58ee7cc2cd0dcc6c42583caa88abb35b0f76f2389a9d34f0c5057a13853db6308#npm:1.20.0"],\ ["axios-observable", "virtual:490c3ad4216947ed7273aa36c5dd60e9ddcc5d0939f57049dd1de8af69c263d58ee7cc2cd0dcc6c42583caa88abb35b0f76f2389a9d34f0c5057a13853db6308#npm:2.1.0"],\ ["backoff-rxjs", "virtual:490c3ad4216947ed7273aa36c5dd60e9ddcc5d0939f57049dd1de8af69c263d58ee7cc2cd0dcc6c42583caa88abb35b0f76f2389a9d34f0c5057a13853db6308#npm:6.5.7"],\ @@ -5863,12 +5863,12 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/elwood/",\ "packageDependencies": [\ ["@chainlink/elwood-adapter", "workspace:packages/sources/elwood"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@sinonjs/fake-timers", "npm:9.1.2"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ ["@types/sinonjs__fake-timers", "npm:8.1.5"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.8.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -6020,6 +6020,25 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:2.11.2", {\ + "packageLocation": "./.yarn/cache/@chainlink-external-adapter-framework-npm-2.11.2-78f2d2e9fa-cb3c9832ee.zip/node_modules/@chainlink/external-adapter-framework/",\ + "packageDependencies": [\ + ["@chainlink/external-adapter-framework", "npm:2.11.2"],\ + ["@date-fns/tz", "npm:1.4.1"],\ + ["ajv", "npm:8.17.1"],\ + ["axios", "npm:1.13.2"],\ + ["eventsource", "npm:4.1.0"],\ + ["fastify", "npm:5.6.2"],\ + ["ioredis", "npm:5.8.2"],\ + ["mock-socket", "npm:9.3.1"],\ + ["pino", "npm:10.1.0"],\ + ["pino-pretty", "npm:13.1.3"],\ + ["prom-client", "npm:15.1.3"],\ + ["redlock", "npm:5.0.0-beta.2"],\ + ["ws", "virtual:76798ef4297c06624e6a890a042a8db65fa32cc5d1d7d8828006e188fc8f070b35b00d18d56a03211a6f7ef7c28f126042b0f4ef3fc99489849fd25a37aa15d0#npm:8.18.3"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:2.11.6", {\ "packageLocation": "./.yarn/cache/@chainlink-external-adapter-framework-npm-2.11.6-3b1c295ff1-781e5ef9fa.zip/node_modules/@chainlink/external-adapter-framework/",\ "packageDependencies": [\ @@ -6416,13 +6435,13 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/gsr/",\ "packageDependencies": [\ ["@chainlink/gsr-adapter", "workspace:packages/sources/gsr"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@sinonjs/fake-timers", "npm:9.1.2"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ ["@types/sinonjs__fake-timers", "npm:8.1.5"],\ ["@types/ws", "npm:8.5.14"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["crypto", "npm:1.0.1"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.4.1"],\ @@ -6473,10 +6492,10 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/hashnote/",\ "packageDependencies": [\ ["@chainlink/hashnote-adapter", "workspace:packages/sources/hashnote"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.4.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -6580,7 +6599,7 @@ const RAW_RUNTIME_STATE = ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ ["@types/supertest", "npm:2.0.16"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["decimal.js", "npm:10.5.0"],\ ["nock", "npm:13.5.6"],\ ["supertest", "npm:6.2.4"],\ @@ -7144,9 +7163,9 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/oanda/",\ "packageDependencies": [\ ["@chainlink/oanda-adapter", "workspace:packages/sources/oanda"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["decimal.js", "npm:10.5.0"],\ ["tslib", "npm:2.8.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ @@ -7160,7 +7179,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@chainlink/observation", "workspace:packages/observation"],\ ["@chainlink/ea-bootstrap", "workspace:packages/core/bootstrap"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["tslib", "npm:2.8.1"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ ],\ @@ -7286,10 +7305,10 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/por-address-list/",\ "packageDependencies": [\ ["@chainlink/por-address-list-adapter", "workspace:packages/sources/por-address-list"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["ethers", "npm:5.8.0"],\ ["nock", "npm:13.5.6"],\ ["tslib", "npm:2.4.1"],\ @@ -7668,10 +7687,10 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/sources/stader-balance/",\ "packageDependencies": [\ ["@chainlink/stader-balance-adapter", "workspace:packages/sources/stader-balance"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["bignumber.js", "npm:9.3.1"],\ ["ethers", "npm:5.8.0"],\ ["nock", "npm:13.5.6"],\ @@ -7928,10 +7947,10 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/non-deployable/token-allocation-test/",\ "packageDependencies": [\ ["@chainlink/token-allocation-test-adapter", "workspace:packages/non-deployable/token-allocation-test"],\ - ["@chainlink/external-adapter-framework", "npm:2.11.6"],\ + ["@chainlink/external-adapter-framework", "npm:2.8.0"],\ ["@types/jest", "npm:29.5.14"],\ ["@types/node", "npm:22.14.1"],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["decimal.js", "npm:10.5.0"],\ ["ethers", "npm:5.8.0"],\ ["nock", "npm:13.5.6"],\ @@ -14705,6 +14724,16 @@ const RAW_RUNTIME_STATE = ["proxy-from-env", "npm:1.1.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:1.13.5", {\ + "packageLocation": "./.yarn/cache/axios-npm-1.13.5-ed8865f696-db726d0990.zip/node_modules/axios/",\ + "packageDependencies": [\ + ["axios", "npm:1.13.5"],\ + ["follow-redirects", "virtual:ed8865f696cebfbc109886bcd430c823f73cb3daaa6597dac1f006748e0fc10ed81734823f049aec03fadda2608be9aa560f98b843c8321891f307f4a175db89#npm:1.15.11"],\ + ["form-data", "npm:4.0.5"],\ + ["proxy-from-env", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["axios-mock-adapter", [\ @@ -14720,7 +14749,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["axios-mock-adapter", "virtual:490c3ad4216947ed7273aa36c5dd60e9ddcc5d0939f57049dd1de8af69c263d58ee7cc2cd0dcc6c42583caa88abb35b0f76f2389a9d34f0c5057a13853db6308#npm:1.20.0"],\ ["@types/axios", null],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["fast-deep-equal", "npm:3.1.3"],\ ["is-blob", "npm:2.1.0"],\ ["is-buffer", "npm:2.0.5"]\ @@ -14746,7 +14775,7 @@ const RAW_RUNTIME_STATE = ["axios-observable", "virtual:490c3ad4216947ed7273aa36c5dd60e9ddcc5d0939f57049dd1de8af69c263d58ee7cc2cd0dcc6c42583caa88abb35b0f76f2389a9d34f0c5057a13853db6308#npm:2.1.0"],\ ["@types/axios", null],\ ["@types/rxjs", null],\ - ["axios", "npm:1.13.4"],\ + ["axios", "npm:1.13.5"],\ ["rxjs", "npm:7.4.0"]\ ],\ "packagePeers": [\ @@ -17735,6 +17764,28 @@ const RAW_RUNTIME_STATE = ["toad-cache", "npm:3.7.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:5.7.4", {\ + "packageLocation": "./.yarn/cache/fastify-npm-5.7.4-a4afd8cb7e-037fb94fb4.zip/node_modules/fastify/",\ + "packageDependencies": [\ + ["fastify", "npm:5.7.4"],\ + ["@fastify/ajv-compiler", "npm:4.0.5"],\ + ["@fastify/error", "npm:4.0.0"],\ + ["@fastify/fast-json-stringify-compiler", "npm:5.0.2"],\ + ["@fastify/proxy-addr", "npm:5.0.0"],\ + ["abstract-logging", "npm:2.0.1"],\ + ["avvio", "npm:9.1.0"],\ + ["fast-json-stringify", "npm:6.0.0"],\ + ["find-my-way", "npm:9.1.0"],\ + ["light-my-request", "npm:6.4.0"],\ + ["pino", "npm:10.1.0"],\ + ["process-warning", "npm:5.0.0"],\ + ["rfdc", "npm:1.4.1"],\ + ["secure-json-parse", "npm:4.0.0"],\ + ["semver", "npm:7.7.2"],\ + ["toad-cache", "npm:3.7.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["fastq", [\ @@ -17931,6 +17982,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["follow-redirects", [\ + ["npm:1.15.11", {\ + "packageLocation": "./.yarn/cache/follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["follow-redirects", "npm:1.15.11"]\ + ],\ + "linkType": "SOFT"\ + }],\ ["npm:1.15.9", {\ "packageLocation": "./.yarn/cache/follow-redirects-npm-1.15.9-539785d34c-e3ab42d109.zip/node_modules/follow-redirects/",\ "packageDependencies": [\ @@ -17949,6 +18007,18 @@ const RAW_RUNTIME_STATE = "@types/debug"\ ],\ "linkType": "HARD"\ + }],\ + ["virtual:ed8865f696cebfbc109886bcd430c823f73cb3daaa6597dac1f006748e0fc10ed81734823f049aec03fadda2608be9aa560f98b843c8321891f307f4a175db89#npm:1.15.11", {\ + "packageLocation": "./.yarn/__virtual__/follow-redirects-virtual-eba31d82f7/0/cache/follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["follow-redirects", "virtual:ed8865f696cebfbc109886bcd430c823f73cb3daaa6597dac1f006748e0fc10ed81734823f049aec03fadda2608be9aa560f98b843c8321891f307f4a175db89#npm:1.15.11"],\ + ["@types/debug", null],\ + ["debug", "virtual:e376c6d25689d1413f13b759a5649fe969efab30320e886cab81ece2b6daf8c4c74f642faff7228a9a286b4b82bc7bac5773e45f1085910307cd111b19a8cd17#npm:4.3.7"]\ + ],\ + "packagePeers": [\ + "@types/debug"\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["for-each", [\ @@ -17984,6 +18054,18 @@ const RAW_RUNTIME_STATE = ["mime-types", "npm:2.1.35"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:4.0.5", {\ + "packageLocation": "./.yarn/cache/form-data-npm-4.0.5-c35fce815a-52ecd6e927.zip/node_modules/form-data/",\ + "packageDependencies": [\ + ["form-data", "npm:4.0.5"],\ + ["asynckit", "npm:0.4.0"],\ + ["combined-stream", "npm:1.0.8"],\ + ["es-set-tostringtag", "npm:2.1.0"],\ + ["hasown", "npm:2.0.2"],\ + ["mime-types", "npm:2.1.35"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["formdata-polyfill", [\ diff --git a/.yarn/cache/@chainlink-external-adapter-framework-npm-2.11.2-78f2d2e9fa-cb3c9832ee.zip b/.yarn/cache/@chainlink-external-adapter-framework-npm-2.11.2-78f2d2e9fa-cb3c9832ee.zip new file mode 100644 index 0000000000..6d77e24560 Binary files /dev/null and b/.yarn/cache/@chainlink-external-adapter-framework-npm-2.11.2-78f2d2e9fa-cb3c9832ee.zip differ diff --git a/.yarn/cache/axios-npm-1.13.5-ed8865f696-db726d0990.zip b/.yarn/cache/axios-npm-1.13.5-ed8865f696-db726d0990.zip new file mode 100644 index 0000000000..ee9154fc39 Binary files /dev/null and b/.yarn/cache/axios-npm-1.13.5-ed8865f696-db726d0990.zip differ diff --git a/.yarn/cache/fastify-npm-5.7.4-a4afd8cb7e-037fb94fb4.zip b/.yarn/cache/fastify-npm-5.7.4-a4afd8cb7e-037fb94fb4.zip new file mode 100644 index 0000000000..7d6bd91cf9 Binary files /dev/null and b/.yarn/cache/fastify-npm-5.7.4-a4afd8cb7e-037fb94fb4.zip differ diff --git a/.yarn/cache/follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip b/.yarn/cache/follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip new file mode 100644 index 0000000000..2d4faf802b Binary files /dev/null and b/.yarn/cache/follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip differ diff --git a/.yarn/cache/form-data-npm-4.0.5-c35fce815a-52ecd6e927.zip b/.yarn/cache/form-data-npm-4.0.5-c35fce815a-52ecd6e927.zip new file mode 100644 index 0000000000..3bab8ad31e Binary files /dev/null and b/.yarn/cache/form-data-npm-4.0.5-c35fce815a-52ecd6e927.zip differ diff --git a/packages/composites/implied-price/package.json b/packages/composites/implied-price/package.json index c447bd2311..c0897ca364 100644 --- a/packages/composites/implied-price/package.json +++ b/packages/composites/implied-price/package.json @@ -32,7 +32,7 @@ "dependencies": { "@chainlink/ea-bootstrap": "workspace:*", "@chainlink/ea-test-helpers": "workspace:*", - "axios": "1.13.4", + "axios": "1.13.5", "decimal.js": "^10.3.1", "tslib": "^2.3.1" }, diff --git a/packages/core/bootstrap/package.json b/packages/core/bootstrap/package.json index 4e6d24c523..7b5b22315b 100644 --- a/packages/core/bootstrap/package.json +++ b/packages/core/bootstrap/package.json @@ -18,10 +18,10 @@ "dependencies": { "@reduxjs/toolkit": "^1.6.1", "ajv": "^8.6.2", - "axios": "1.13.4", + "axios": "1.13.5", "decimal.js": "^10.3.1", "fast-redact": "^3.0.1", - "fastify": "^5.0.0", + "fastify": "^5.7.3", "lodash": "^4.17.23", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", diff --git a/packages/core/bootstrap/src/lib/middleware/cache/index.ts b/packages/core/bootstrap/src/lib/middleware/cache/index.ts index 2249b7851b..483214566e 100644 --- a/packages/core/bootstrap/src/lib/middleware/cache/index.ts +++ b/packages/core/bootstrap/src/lib/middleware/cache/index.ts @@ -1,3 +1,5 @@ +import { randomInt } from 'crypto' +import { Store } from 'redux' import type { AdapterContext, AdapterData, @@ -6,17 +8,15 @@ import type { Execute, Middleware, } from '../../../types' -import { logger } from '../../modules/logger' import { AdapterError } from '../../modules/error' -import { Store } from 'redux' -import { reducer } from '../burst-limit' -import { withBurstLimit } from '../burst-limit' -import { exponentialBackOffMs, getEnv, getWithCoalescing, parseBool, uuid, sleep } from '../../util' -import { getMaxAgeOverride, getTTL } from './utils/ttl' +import { logger } from '../../modules/logger' +import { exponentialBackOffMs, getEnv, getWithCoalescing, parseBool, sleep, uuid } from '../../util' +import { reducer, withBurstLimit } from '../burst-limit' import * as local from './local' -import * as redis from './redis' import * as metrics from './metrics' -import { CacheOptions, CacheImplOptions, CacheEntry, Cache } from './types' +import * as redis from './redis' +import { Cache, CacheEntry, CacheImplOptions, CacheOptions } from './types' +import { getMaxAgeOverride, getTTL } from './utils/ttl' const UUID = uuid() @@ -124,7 +124,8 @@ export class AdapterCache { if (retryCount === 1 && this.options.requestCoalescing.entropyMax) { // Add some entropy here because of possible scenario where the key won't be set before multiple // other instances in a burst request try to access the coalescing key. - const randomMs = Math.random() * this.options.requestCoalescing.entropyMax + const entropyMax = this.options.requestCoalescing.entropyMax + const randomMs = entropyMax > 0 ? (randomInt(0, 10000) / 10000) * entropyMax : 0 await sleep(randomMs) } const inFlight = await this.cache.getFlightMarker(this.getCoalescingKey(key)) diff --git a/packages/core/bootstrap/src/lib/modules/overrider.ts b/packages/core/bootstrap/src/lib/modules/overrider.ts index e34a5ef209..638282db2f 100644 --- a/packages/core/bootstrap/src/lib/modules/overrider.ts +++ b/packages/core/bootstrap/src/lib/modules/overrider.ts @@ -116,6 +116,7 @@ export class Overrider { ): AdapterOverrides => { const combinedOverrides = internalOverrides || {} for (const symbol of Object.keys(inputOverrides)) { + if (symbol === '__proto__' || symbol === 'constructor' || symbol === 'prototype') continue combinedOverrides[symbol] = inputOverrides[symbol] } return combinedOverrides diff --git a/packages/core/bootstrap/src/lib/util.ts b/packages/core/bootstrap/src/lib/util.ts index f010365d4f..f2a70a1a90 100644 --- a/packages/core/bootstrap/src/lib/util.ts +++ b/packages/core/bootstrap/src/lib/util.ts @@ -1,20 +1,21 @@ +import { randomInt } from 'crypto' +import { Decimal } from 'decimal.js' +import { FastifyRequest } from 'fastify' +import { flatMap, List, values } from 'lodash' +import { v4 as uuidv4 } from 'uuid' import type { AdapterContext, AdapterImplementation, BasePairInputParameters, - PairOptionsMap, EnvDefaults, IncludePair, + PairOptionsMap, } from '../types' -import type { Validator } from './modules/validator' -import { FastifyRequest } from 'fastify' +import { CensorKeyValue, CensorList, configRedactEnvVars } from './config/logging' import type { CacheEntry } from './middleware/cache/types' -import { Decimal } from 'decimal.js' -import { flatMap, values, List } from 'lodash' -import { v4 as uuidv4 } from 'uuid' -import { logger } from './modules/logger' import { AdapterConfigError, AdapterError, RequiredEnvError } from './modules/error' -import { CensorList, CensorKeyValue, configRedactEnvVars } from './config/logging' +import { logger } from './modules/logger' +import type { Validator } from './modules/validator' export const isString = (value: unknown): boolean => typeof value === 'string' || value instanceof String @@ -93,7 +94,7 @@ export const getRandomEnv = (name: string, delimiter = ',', prefix = ''): string const val = getEnv(name, prefix) if (!val) return val const items = val.split(delimiter) - return items[Math.floor(Math.random() * items.length)] + return items[randomInt(0, items.length)] } // pick a random string from env var after splitting with the delimiter ("a&b&c" "&" -> choice(["a","b","c"])) @@ -104,7 +105,7 @@ export const getRandomRequiredEnv = ( ): string | undefined => { const val = getRequiredEnv(name, prefix) const items = val.split(delimiter) - return items[Math.floor(Math.random() * items.length)] + return items[randomInt(0, items.length)] } // We generate an UUID per instance diff --git a/packages/non-deployable/token-allocation-test/package.json b/packages/non-deployable/token-allocation-test/package.json index 592555175a..878f7626d1 100644 --- a/packages/non-deployable/token-allocation-test/package.json +++ b/packages/non-deployable/token-allocation-test/package.json @@ -24,8 +24,8 @@ "build": "tsc -b" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "decimal.js": "^10.3.1", "ethers": "^5.4.6", "tslib": "^2.3.1" diff --git a/packages/observation/package.json b/packages/observation/package.json index e67ef94ede..4500fb0d39 100644 --- a/packages/observation/package.json +++ b/packages/observation/package.json @@ -5,7 +5,7 @@ "license": "MIT", "dependencies": { "@chainlink/ea-bootstrap": "workspace:*", - "axios": "1.13.4", + "axios": "1.13.5", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/scripts/package.json b/packages/scripts/package.json index b5c38f084d..491549f844 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -8,7 +8,7 @@ "@chainlink/ea-factories": "workspace:*", "@chainlink/external-adapter-framework": "2.11.6", "airtable": "0.11.6", - "axios": "1.13.4", + "axios": "1.13.5", "axios-mock-adapter": "1.20.0", "axios-observable": "2.1.0", "backoff-rxjs": "6.5.7", diff --git a/packages/scripts/src/workspace.ts b/packages/scripts/src/workspace.ts index 0bcb4f7bba..dd4b77819d 100644 --- a/packages/scripts/src/workspace.ts +++ b/packages/scripts/src/workspace.ts @@ -34,6 +34,9 @@ const scope = '@chainlink/' export type WorkspacePackages = ReturnType export function getWorkspacePackages(changedFromBranch = ''): WorkspacePackage[] { + if (changedFromBranch && !/^[a-zA-Z0-9_\-./]+$/.test(changedFromBranch)) { + throw new Error(`Invalid branch name: ${changedFromBranch}`) + } return s .exec( changedFromBranch diff --git a/packages/sources/apex/package.json b/packages/sources/apex/package.json index 287dd02bd4..c065c71944 100644 --- a/packages/sources/apex/package.json +++ b/packages/sources/apex/package.json @@ -34,8 +34,8 @@ "typescript": "5.8.3" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "tslib": "2.4.1" } } diff --git a/packages/sources/avalanche-platform/package.json b/packages/sources/avalanche-platform/package.json index 54b0745b7e..dd4b0161fe 100644 --- a/packages/sources/avalanche-platform/package.json +++ b/packages/sources/avalanche-platform/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@types/jest": "^29.5.14", "@types/node": "22.14.1", - "axios": "1.13.4", + "axios": "1.13.5", "nock": "13.5.6", "typescript": "5.8.3" }, diff --git a/packages/sources/bank-frick/package.json b/packages/sources/bank-frick/package.json index f4de63263f..82ad4026ca 100644 --- a/packages/sources/bank-frick/package.json +++ b/packages/sources/bank-frick/package.json @@ -28,9 +28,9 @@ "start": "yarn server:dist" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", - "fastify": "^5.0.0", + "@chainlink/external-adapter-framework": "2.11.2", + "axios": "1.13.5", + "fastify": "^5.7.3", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/sources/elwood/package.json b/packages/sources/elwood/package.json index bcb22389e0..879c7bce7f 100644 --- a/packages/sources/elwood/package.json +++ b/packages/sources/elwood/package.json @@ -28,8 +28,8 @@ "start": "yarn server:dist" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/sources/gsr/package.json b/packages/sources/gsr/package.json index 04d44c10c4..74be1f9bab 100644 --- a/packages/sources/gsr/package.json +++ b/packages/sources/gsr/package.json @@ -28,8 +28,8 @@ "start": "yarn server:dist" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "crypto": "1.0.1", "tslib": "2.4.1" }, diff --git a/packages/sources/hashnote/package.json b/packages/sources/hashnote/package.json index 7cbb7d67a7..55137d818e 100644 --- a/packages/sources/hashnote/package.json +++ b/packages/sources/hashnote/package.json @@ -34,8 +34,8 @@ "typescript": "5.8.3" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "tslib": "2.4.1" } } diff --git a/packages/sources/nav-consulting/src/transport/authentication.ts b/packages/sources/nav-consulting/src/transport/authentication.ts index f5d6593498..bcaf91b14b 100644 --- a/packages/sources/nav-consulting/src/transport/authentication.ts +++ b/packages/sources/nav-consulting/src/transport/authentication.ts @@ -1,3 +1,4 @@ +import { randomInt } from 'crypto' import CryptoJS from 'crypto-js' export const getValidatorIds = ( @@ -23,11 +24,10 @@ export const getValidatorIds = ( } } -// Copied from Nav Consulting's API guide +// Copied from Nav Consulting's API guide - uses crypto for secure nonce generation const createGuid = () => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - const r = (Math.random() * 16) | 0 - const v = c === 'x' ? r : (r & 0x3) | 0x8 - return v.toString(16) + const r = c === 'x' ? randomInt(0, 16) : randomInt(0, 4) | 0x8 + return r.toString(16) }) } diff --git a/packages/sources/oanda/package.json b/packages/sources/oanda/package.json index 8b20994548..d005f1a022 100644 --- a/packages/sources/oanda/package.json +++ b/packages/sources/oanda/package.json @@ -28,8 +28,8 @@ "start": "yarn server:dist" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "decimal.js": "^10.3.1", "tslib": "^2.3.1" }, diff --git a/packages/sources/por-address-list/package.json b/packages/sources/por-address-list/package.json index a50cf18cf2..0276f31712 100644 --- a/packages/sources/por-address-list/package.json +++ b/packages/sources/por-address-list/package.json @@ -34,8 +34,8 @@ "typescript": "5.8.3" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "ethers": "^5.5.1", "tslib": "2.4.1" } diff --git a/packages/sources/por-address-list/src/transport/addressManager.ts b/packages/sources/por-address-list/src/transport/addressManager.ts index 4aa6ebe0da..272a3a0bd5 100644 --- a/packages/sources/por-address-list/src/transport/addressManager.ts +++ b/packages/sources/por-address-list/src/transport/addressManager.ts @@ -1,7 +1,7 @@ -import { GroupRunner } from '@chainlink/external-adapter-framework/util/group-runner' -import { ethers } from 'ethers' import { PoRAddress } from '@chainlink/external-adapter-framework/adapter/por' import { makeLogger } from '@chainlink/external-adapter-framework/util' +import { GroupRunner } from '@chainlink/external-adapter-framework/util/group-runner' +import { ethers } from 'ethers' const logger = makeLogger('por-address-manager') @@ -96,7 +96,7 @@ export class LombardAddressManager extends AddressManager r[0]) .filter((address) => address != '') .map((address) => ({ - address: address.replace("'", ''), + address: address.replace(/'/g, ''), network: network, chainId: chainId, })) diff --git a/packages/sources/stader-balance/package.json b/packages/sources/stader-balance/package.json index e537862ab0..127d3f564a 100644 --- a/packages/sources/stader-balance/package.json +++ b/packages/sources/stader-balance/package.json @@ -28,8 +28,8 @@ "start": "yarn server:dist" }, "dependencies": { - "@chainlink/external-adapter-framework": "2.11.6", - "axios": "1.13.4", + "@chainlink/external-adapter-framework": "2.8.0", + "axios": "1.13.5", "bignumber.js": "^9.1.1", "ethers": "^5.8.0", "tslib": "^2.3.1" diff --git a/yarn.lock b/yarn.lock index 78f81749a6..3af52741fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2360,10 +2360,10 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/apex-adapter@workspace:packages/sources/apex" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" nock: "npm:13.5.6" tslib: "npm:2.4.1" typescript: "npm:5.8.3" @@ -2390,7 +2390,7 @@ __metadata: "@chainlink/external-adapter-framework": "npm:2.11.6" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" nock: "npm:13.5.6" tslib: "npm:2.4.1" typescript: "npm:5.8.3" @@ -2414,11 +2414,11 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/bank-frick-adapter@workspace:packages/sources/bank-frick" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.11.2" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" - fastify: "npm:^5.0.0" + axios: "npm:1.13.5" + fastify: "npm:^5.7.3" nock: "npm:13.5.6" tslib: "npm:^2.3.1" typescript: "npm:5.8.3" @@ -3153,10 +3153,10 @@ __metadata: "@types/uuid": "npm:8.3.4" "@types/ws": "npm:8.5.14" ajv: "npm:^8.6.2" - axios: "npm:1.13.4" + axios: "npm:1.13.5" decimal.js: "npm:^10.3.1" fast-redact: "npm:^3.0.1" - fastify: "npm:^5.0.0" + fastify: "npm:^5.7.3" lodash: "npm:^4.17.23" lru-cache: "npm:^6.0.0" mock-socket: "npm:9.3.1" @@ -3224,7 +3224,7 @@ __metadata: "@types/swagger-jsdoc": "npm:6.0.4" "@types/yaml": "npm:1.9.7" airtable: "npm:0.11.6" - axios: "npm:1.13.4" + axios: "npm:1.13.5" axios-mock-adapter: "npm:1.20.0" axios-observable: "npm:2.1.0" backoff-rxjs: "npm:6.5.7" @@ -3267,12 +3267,12 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/elwood-adapter@workspace:packages/sources/elwood" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@sinonjs/fake-timers": "npm:9.1.2" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" "@types/sinonjs__fake-timers": "npm:8.1.5" - axios: "npm:1.13.4" + axios: "npm:1.13.5" nock: "npm:13.5.6" tslib: "npm:^2.3.1" typescript: "npm:5.8.3" @@ -3411,6 +3411,28 @@ __metadata: languageName: node linkType: hard +"@chainlink/external-adapter-framework@npm:2.11.2": + version: 2.11.2 + resolution: "@chainlink/external-adapter-framework@npm:2.11.2" + dependencies: + "@date-fns/tz": "npm:1.4.1" + ajv: "npm:8.17.1" + axios: "npm:1.13.2" + eventsource: "npm:4.1.0" + fastify: "npm:5.6.2" + ioredis: "npm:5.8.2" + mock-socket: "npm:9.3.1" + pino: "npm:10.1.0" + pino-pretty: "npm:13.1.3" + prom-client: "npm:15.1.3" + redlock: "npm:5.0.0-beta.2" + ws: "npm:8.18.3" + bin: + create-external-adapter: adapter-generator.js + checksum: 10/cb3c9832ee4aa0cce193c708f48ee39f2b8c5b8d1b44af01c3e4c0e92bc182a7777818950701b118de5fd47af5b0f34339b9f14e4ff7968e14fa20c0e4daed8c + languageName: node + linkType: hard + "@chainlink/external-adapter-framework@npm:2.11.6": version: 2.11.6 resolution: "@chainlink/external-adapter-framework@npm:2.11.6" @@ -3778,13 +3800,13 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/gsr-adapter@workspace:packages/sources/gsr" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@sinonjs/fake-timers": "npm:9.1.2" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" "@types/sinonjs__fake-timers": "npm:8.1.5" "@types/ws": "npm:8.5.14" - axios: "npm:1.13.4" + axios: "npm:1.13.5" crypto: "npm:1.0.1" nock: "npm:13.5.6" tslib: "npm:2.4.1" @@ -3829,10 +3851,10 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/hashnote-adapter@workspace:packages/sources/hashnote" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" nock: "npm:13.5.6" tslib: "npm:2.4.1" typescript: "npm:5.8.3" @@ -3924,7 +3946,7 @@ __metadata: "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" "@types/supertest": "npm:2.0.16" - axios: "npm:1.13.4" + axios: "npm:1.13.5" decimal.js: "npm:^10.3.1" nock: "npm:13.5.6" supertest: "npm:6.2.4" @@ -4422,9 +4444,9 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/oanda-adapter@workspace:packages/sources/oanda" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" decimal.js: "npm:^10.3.1" tslib: "npm:^2.3.1" typescript: "npm:5.8.3" @@ -4436,7 +4458,7 @@ __metadata: resolution: "@chainlink/observation@workspace:packages/observation" dependencies: "@chainlink/ea-bootstrap": "workspace:*" - axios: "npm:1.13.4" + axios: "npm:1.13.5" tslib: "npm:^2.3.1" typescript: "npm:5.8.3" languageName: unknown @@ -4546,10 +4568,10 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/por-address-list-adapter@workspace:packages/sources/por-address-list" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" ethers: "npm:^5.5.1" nock: "npm:13.5.6" tslib: "npm:2.4.1" @@ -4890,10 +4912,10 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/stader-balance-adapter@workspace:packages/sources/stader-balance" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" bignumber.js: "npm:^9.1.1" ethers: "npm:^5.8.0" nock: "npm:13.5.6" @@ -5122,10 +5144,10 @@ __metadata: version: 0.0.0-use.local resolution: "@chainlink/token-allocation-test-adapter@workspace:packages/non-deployable/token-allocation-test" dependencies: - "@chainlink/external-adapter-framework": "npm:2.11.6" + "@chainlink/external-adapter-framework": "npm:2.8.0" "@types/jest": "npm:^29.5.14" "@types/node": "npm:22.14.1" - axios: "npm:1.13.4" + axios: "npm:1.13.5" decimal.js: "npm:^10.3.1" ethers: "npm:^5.4.6" nock: "npm:13.5.6" @@ -10642,6 +10664,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:1.13.5": + version: 1.13.5 + resolution: "axios@npm:1.13.5" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^1.1.0" + checksum: 10/db726d09902565ef9a0632893530028310e2ec2b95b727114eca1b101450b00014133dfc3871cffc87983fb922bca7e4874d7e2826d1550a377a157cdf3f05b6 + languageName: node + linkType: hard + "babel-jest@npm:^29.7.0": version: 29.7.0 resolution: "babel-jest@npm:29.7.0" @@ -13136,7 +13169,7 @@ __metadata: languageName: node linkType: hard -"fastify@npm:5.6.2, fastify@npm:^5.0.0": +"fastify@npm:5.6.2": version: 5.6.2 resolution: "fastify@npm:5.6.2" dependencies: @@ -13182,6 +13215,29 @@ __metadata: languageName: node linkType: hard +"fastify@npm:^5.7.3": + version: 5.7.4 + resolution: "fastify@npm:5.7.4" + dependencies: + "@fastify/ajv-compiler": "npm:^4.0.5" + "@fastify/error": "npm:^4.0.0" + "@fastify/fast-json-stringify-compiler": "npm:^5.0.0" + "@fastify/proxy-addr": "npm:^5.0.0" + abstract-logging: "npm:^2.0.1" + avvio: "npm:^9.0.0" + fast-json-stringify: "npm:^6.0.0" + find-my-way: "npm:^9.0.0" + light-my-request: "npm:^6.0.0" + pino: "npm:^10.1.0" + process-warning: "npm:^5.0.0" + rfdc: "npm:^1.3.1" + secure-json-parse: "npm:^4.0.0" + semver: "npm:^7.6.0" + toad-cache: "npm:^3.7.0" + checksum: 10/037fb94fb40b85b9da430dd5314ab3326ee40b10419ca81d514a5e948b67547aacfa60131e330a8e28927b8b875c70c7a156954118a06c958e9c20b24ab00881 + languageName: node + linkType: hard + "fastq@npm:^1.11.0, fastq@npm:^1.17.1, fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -13357,6 +13413,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10/07372fd74b98c78cf4d417d68d41fdaa0be4dcacafffb9e67b1e3cf090bc4771515e65020651528faab238f10f9b9c0d9707d6c1574a6c0387c5de1042cde9ba + languageName: node + linkType: hard + "for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -13389,6 +13455,19 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10/52ecd6e927c8c4e215e68a7ad5e0f7c1031397439672fd9741654b4a94722c4182e74cc815b225dcb5be3f4180f36428f67c6dd39eaa98af0dcfdd26c00c19cd + languageName: node + linkType: hard + "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10"