diff --git a/.nvmrc b/.nvmrc index b6fb44b881..a4b68d22dc 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.17.1 \ No newline at end of file +v18.20.3 \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index f789625312..68dd7813c2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -95,7 +95,8 @@ "program": "${workspaceFolder}/packages/openactive-broker-microservice/app.js", "cwd": "${workspaceFolder}/packages/openactive-broker-microservice/", "env": { - "NODE_APP_INSTANCE": "dev" + "NODE_ENV": "gladstone-booking-facade", + "DEBUG_BROKER_NO_VALIDATE": "true", }, }, { diff --git a/packages/openactive-broker-microservice/README.md b/packages/openactive-broker-microservice/README.md index 52a49e3ec7..edf8ca6cb3 100644 --- a/packages/openactive-broker-microservice/README.md +++ b/packages/openactive-broker-microservice/README.md @@ -90,6 +90,14 @@ If `false` and `broker` and `openactive-integration-tests` are running in separa "waitForHarvestCompletion": true, ``` +### `doNotCacheItemsInThePast` + +If `true` will not store child opportunities in the past in memory. This is useful for memory constrained environments. + +```json + "doNotCacheItemsInThePast": true, +``` + ### `loginPagesSelectors` [CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) which are used to find, in the Booking System's login page the following HTML elements: diff --git a/packages/openactive-broker-microservice/app.js b/packages/openactive-broker-microservice/app.js index 7d03aacccd..d51a59ed18 100644 --- a/packages/openactive-broker-microservice/app.js +++ b/packages/openactive-broker-microservice/app.js @@ -44,6 +44,7 @@ const { deleteTestDatasetRoute, assertUnmatchedCriteriaRoute, getSampleOpportunitiesRoute, + getDeletedIdsRoute, onHttpServerError, startPolling, } = require('./src/core'); @@ -90,6 +91,9 @@ app.post('/assert-unmatched-criteria', assertUnmatchedCriteriaRoute); // Sample Requests endpoint, used to underpin the Postman collection app.get('/sample-opportunities', getSampleOpportunitiesRoute); +// Get Deleted IDs route +app.get('/get-deleted-ids', getDeletedIdsRoute) + /* Ensure that processing the Dataset Site, and initiating polling on all the feeds therein, delays the Broker Microservice from being "ready". Note that this is done before the HTTP server starts listening, to ensure that @@ -130,4 +134,4 @@ setTimeout(() => { logError(`${message}\n`); throw new Error(message); } -}, 3600000); // 3600000 ms = 1 hour +}, 86400000); // 86400000 ms = 1 day diff --git a/packages/openactive-broker-microservice/package-lock.json b/packages/openactive-broker-microservice/package-lock.json index 22c274e2da..7ddfef0152 100644 --- a/packages/openactive-broker-microservice/package-lock.json +++ b/packages/openactive-broker-microservice/package-lock.json @@ -12,7 +12,7 @@ "@openactive/data-model-validator": "^2.0.78", "@openactive/data-models": "^2.0.316", "@openactive/dataset-utils": "^1.0.1", - "@openactive/harvesting-utils": "github:openactive/harvesting-utils#1b2877834055549572fa059a491ac17d306942fd", + "@openactive/harvesting-utils": "github:openactive/harvesting-utils#2231c78", "@openactive/openactive-openid-browser-automation": "file:../openactive-openid-browser-automation", "@openactive/openactive-openid-client": "file:../openactive-openid-client", "@openactive/rpde-validator": "^2.0.20", @@ -68,7 +68,7 @@ "dependencies": { "cookie-session": "^1.4.0", "openid-client": "^4.2.1", - "puppeteer": "^20.9.0" + "puppeteer": "^22.14.0" }, "devDependencies": { "@types/cookie-session": "^2.0.41", @@ -14723,8 +14723,7 @@ }, "node_modules/@openactive/harvesting-utils": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/openactive/harvesting-utils.git#1b2877834055549572fa059a491ac17d306942fd", - "integrity": "sha512-jjT4kad88PKp/JXDBOjkD47KCradEu6KmvNIfWKsHh2q6mfQHP5NIrWZreeeWkVlOO1t++lZESGpbmPfnopXmg==", + "resolved": "git+ssh://git@github.com/openactive/harvesting-utils.git#2231c78b08f5b1f5ba45572864a656dca103b408", "license": "MIT", "dependencies": { "@openactive/rpde-validator": "^2.0.19", diff --git a/packages/openactive-broker-microservice/package.json b/packages/openactive-broker-microservice/package.json index 699235cfd5..b53026f351 100644 --- a/packages/openactive-broker-microservice/package.json +++ b/packages/openactive-broker-microservice/package.json @@ -4,7 +4,7 @@ "description": "OpenActive Broker Microservice", "main": "app.js", "scripts": { - "start": "node app.js", + "start": "node --inspect app.js", "auto-restart": "./auto-restart.sh", "validate-feeds": "node app.js --validate-only", "test": "npm run lint && tsc && jest", @@ -19,7 +19,7 @@ "@openactive/data-model-validator": "^2.0.78", "@openactive/data-models": "^2.0.316", "@openactive/dataset-utils": "^1.0.1", - "@openactive/harvesting-utils": "github:openactive/harvesting-utils#1b2877834055549572fa059a491ac17d306942fd", + "@openactive/harvesting-utils": "github:openactive/harvesting-utils#2231c78", "@openactive/openactive-openid-browser-automation": "file:../openactive-openid-browser-automation", "@openactive/openactive-openid-client": "file:../openactive-openid-client", "@openactive/rpde-validator": "^2.0.20", diff --git a/packages/openactive-broker-microservice/src/broker-config.js b/packages/openactive-broker-microservice/src/broker-config.js index a33f7e2759..96deacba0e 100644 --- a/packages/openactive-broker-microservice/src/broker-config.js +++ b/packages/openactive-broker-microservice/src/broker-config.js @@ -46,6 +46,7 @@ function getBrokerConfig() { const DO_NOT_HARVEST_ORDERS_FEED = config.has('broker.disableOrdersFeedHarvesting') ? config.get('broker.disableOrdersFeedHarvesting') : false; const DISABLE_BROKER_TIMEOUT = config.has('broker.disableBrokerMicroserviceTimeout') ? config.get('broker.disableBrokerMicroserviceTimeout') : false; const LOG_AUTH_CONFIG = config.has('broker.logAuthConfig') ? config.get('broker.logAuthConfig') : false; + const DO_NOT_CACHE_ITEMS_IN_THE_PAST = config.has('broker.doNotCacheItemsInThePast') ? config.get('broker.doNotCacheItemsInThePast') : false; const BUTTON_SELECTORS = config.has('broker.loginPagesSelectors') ? config.get('broker.loginPagesSelectors') : { username: "[name='username' i]", @@ -88,6 +89,7 @@ function getBrokerConfig() { VALIDATOR_TMP_DIR, VALIDATOR_INPUT_TMP_DIR, BOOKING_PARTNER_IDENTIFIERS, + DO_NOT_CACHE_ITEMS_IN_THE_PAST, }; } diff --git a/packages/openactive-broker-microservice/src/core.js b/packages/openactive-broker-microservice/src/core.js index 96c49fac35..6f51f0dee5 100644 --- a/packages/openactive-broker-microservice/src/core.js +++ b/packages/openactive-broker-microservice/src/core.js @@ -10,7 +10,7 @@ const mkdirp = require('mkdirp'); const cliProgress = require('cli-progress'); const { validate } = require('@openactive/data-model-validator'); const { expect } = require('chai'); -const { isNil, partialRight } = require('lodash'); +const { isNil, partialRight, get } = require('lodash'); const { createFeedContext, progressFromContext, harvestRPDELossless } = require('@openactive/harvesting-utils'); const { partial } = require('lodash'); const path = require('path'); @@ -40,6 +40,7 @@ const { HEADLESS_AUTH, VALIDATOR_TMP_DIR, BOOKING_PARTNER_IDENTIFIERS, + DO_NOT_CACHE_ITEMS_IN_THE_PAST, } = require('./broker-config'); const { TwoPhaseListeners } = require('./twoPhaseListeners/twoPhaseListeners'); const { state, setGlobalValidatorWorkerPool, getGlobalValidatorWorkerPool } = require('./state'); @@ -61,6 +62,23 @@ const { getLockedOpportunityIdsInTestDataset } = require('./util/state-utils'); const { detectOpportunityType } = require('./util/opportunity-utils'); const { detectSellerId } = require('./util/opportunity-utils'); const { getSampleOpportunities } = require('./util/sample-opportunities'); +const _ = require('lodash'); + +const WESTMINSTER_SITE_IDS = [ +'0153', +'0154', +'0155', +'0156', +'0157', +'0158', +'0159', +'0160', +'0229', +'0262', +'0270', +'0282', +'0323', +] /** * @typedef {import('./models/core').OrderFeedType} OrderFeedType @@ -355,6 +373,10 @@ function getSampleOpportunitiesRoute(req, res) { }, state, req.body)); } +function getDeletedIdsRoute(req, res) { + res.json(state.deletedIds); +} + /** * Render the currently stored validation errors as HTML * @@ -478,6 +500,12 @@ async function setFeedIsUpToDate(validatorWorkerPool, feedIdentifier, { multibar log('Harvesting is up-to-date'); + const childRows = Array.from(state.opportunityItemRowCache.store.values()).filter((x) => x.jsonLdParentId !== null); + const childOrphanRows = childRows.filter((x) => x.waitingForParentToBeIngested); + log(`Deleting ${childOrphanRows.length} orphaned child opportunities`); + for (const orphan of childOrphanRows) { + deleteChildOpportunityItem(orphan.jsonLdId, 'Deleting orphaned child opportunity after feed is up-to-date'); + } // Run some assertions to ensure that feed harvesting has lead to the correct state. const { childOrphans, totalChildren, percentageChildOrphans, totalOpportunities } = getOrphanStats(state); @@ -700,6 +728,19 @@ async function ingestParentOpportunityPage(rpdePage, feedIdentifier, isInitialHa // Store the parent opportunity data in the maps const jsonLdId = item.data['@id'] || item.data.id; + + // Westminster specific memory improvements + // This removes any children that have already come in that belong to Westminster + if (_.get(item, 'data.location.identifier') && !WESTMINSTER_SITE_IDS.includes(_.get(item, 'data.location.identifier'))) { + const childIds = state.opportunityItemRowCache.parentIdIndex.get(jsonLdId); + if (childIds) { + for (const childId of childIds) { + deleteChildOpportunityItem(childId, 'Deleting updated child opportunity during ingestParentOpportunityPage as parent is not Westminster'); + } + } + deleteParentOppportunityItem(jsonLdId, 'Deleting updated parent opportunity during ingestParentOpportunityPage as parent is not Westminster'); + continue; + } state.opportunityHousekeepingCaches.parentOpportunityRpdeMap.set(feedItemIdentifier, jsonLdId); state.opportunityCache.parentMap.set(jsonLdId, item.data); @@ -739,7 +780,7 @@ async function ingestParentOpportunityPage(rpdePage, feedIdentifier, isInitialHa // that were made for them: if (state.opportunityHousekeepingCaches.parentOpportunitySubEventMap.get(jsonLdId)) { for (const subEventId of state.opportunityHousekeepingCaches.parentOpportunitySubEventMap.get(jsonLdId)) { - deleteChildOpportunityItem(subEventId); + deleteChildOpportunityItem(subEventId, 'Deleted child opportunity as parent opportunity is deleted during ingestParentOpportunityPage'); } } @@ -753,9 +794,11 @@ async function ingestParentOpportunityPage(rpdePage, feedIdentifier, isInitialHa await validateItemsFn(rpdePage.items, isInitialHarvestComplete); // As these parent opportunities have been updated, update all child items for these parent IDs - await touchChildOpportunityItems(items + await touchChildOpportunityItems( + items .filter((item) => item.state !== 'deleted') - .map((item) => item.data['@id'] || item.data.id)); + .map((item) => ({parentId: (item.data['@id'] || item.data.id), isParentWestminster: WESTMINSTER_SITE_IDS.includes(_.get(item, 'data.location.identifier'))})) + ); } /** @@ -774,7 +817,7 @@ function updateParentOpportunitySubEventMap(item, jsonLdId) { } else { for (const subEventId of oldSubEventIds) { if (!newSubEventIds.includes(subEventId)) { - deleteChildOpportunityItem(subEventId); + deleteChildOpportunityItem(subEventId, 'Deleting deleted child opportunity during ingestParentOpportunityPage as parent is not Westminster'); state.opportunityHousekeepingCaches.parentOpportunitySubEventMap.get(jsonLdId).filter((x) => x !== subEventId); } } @@ -801,13 +844,20 @@ async function ingestChildOpportunityPage(rpdePage, feedIdentifier, isInitialHar state.opportunityCache.childMap.delete(jsonLdId); state.opportunityHousekeepingCaches.opportunityRpdeMap.delete(feedItemIdentifier); - deleteChildOpportunityItem(jsonLdId); + deleteChildOpportunityItem(jsonLdId, 'Deleted deleted child opportunity during ingestChildOpportunityPage'); } else { const jsonLdId = item.data['@id'] || item.data.id; - state.opportunityHousekeepingCaches.opportunityRpdeMap.set(feedItemIdentifier, jsonLdId); - state.opportunityCache.childMap.set(jsonLdId, item.data); + + // trim first character off id + const westminsterLocationIdStrings = WESTMINSTER_SITE_IDS.map((id) => id.slice(1)); - await storeChildOpportunityItem(item); + // Only store item if the jsonLdId contains on the westminsterLocationIdStrings + if (westminsterLocationIdStrings.some((id) => jsonLdId.includes(`scheduled-sessions/${id}`) || jsonLdId.includes(`facility-use-slots/${id}`))) { + state.opportunityHousekeepingCaches.opportunityRpdeMap.set(feedItemIdentifier, jsonLdId); + state.opportunityCache.childMap.set(jsonLdId, item.data); + + await storeChildOpportunityItem(item); + } } } await validateItemsFn(rpdePage.items, isInitialHarvestComplete); @@ -818,16 +868,21 @@ async function ingestChildOpportunityPage(rpdePage, feedIdentifier, isInitialHar * trigger any actions (e.g. notifying listeners) that should be triggered when * an Opportunity (or child/parent pair) is updated. * - * @param {string[]} parentIds + * @param {{parentId:string, isParentWestminster: boolean}[]} parentIds */ async function touchChildOpportunityItems(parentIds) { const opportunitiesToUpdate = new Set(); // Get IDs of all opportunities which are children of the specified parents. - parentIds.forEach((parentId) => { + parentIds.forEach(({parentId, isParentWestminster}) => { if (state.opportunityItemRowCache.parentIdIndex.has(parentId)) { state.opportunityItemRowCache.parentIdIndex.get(parentId).forEach((jsonLdId) => { - opportunitiesToUpdate.add(jsonLdId); + if (!isParentWestminster) { + // If the SessionSeries is not Westminster, remove the ScheduledSessions from the cache + deleteChildOpportunityItem(jsonLdId, 'Deleting child opportunity during touchChildOpportunityItems'); + } else { + opportunitiesToUpdate.add(jsonLdId); + } }); } }); @@ -846,8 +901,9 @@ async function touchChildOpportunityItems(parentIds) { * Delete a (child) Opportunity from parts of the cache. * * @param {string} jsonLdId + * @param {string} reason */ -function deleteChildOpportunityItem(jsonLdId) { +function deleteChildOpportunityItem(jsonLdId, reason) { const row = state.opportunityItemRowCache.store.get(jsonLdId); if (row) { const idx = state.opportunityItemRowCache.parentIdIndex.get(row.jsonLdParentId); @@ -855,9 +911,25 @@ function deleteChildOpportunityItem(jsonLdId) { idx.delete(jsonLdId); } state.opportunityItemRowCache.store.delete(jsonLdId); + state.opportunityCache.childMap.delete(jsonLdId); + state.opportunityHousekeepingCaches.opportunityRpdeMap.delete(jsonLdId); + state.deletedIds.child[jsonLdId] = reason; } } +/** + * Deletes a parent Opportunity from parts of the cache. + * + * @param {string} jsonLdId + * @param {string} reason + */ +function deleteParentOppportunityItem(jsonLdId, reason) { + state.opportunityCache.parentMap.delete(jsonLdId); + state.opportunityItemRowCache.store.delete(jsonLdId); + state.opportunityHousekeepingCaches.parentOpportunitySubEventMap.delete(jsonLdId); + state.deletedIds.parent[jsonLdId] = reason; +} + /** * Store (child) Opportunity to parts of the cache. Notify any listeners if * the child and parent both exist. @@ -885,6 +957,13 @@ async function storeChildOpportunityItem(item) { if (row.jsonLdId == null) { throw new FatalError(`RPDE item '${item.id}' of kind '${item.kind}' does not have an @id. All items in the feeds must have an @id within the "data" property.`); } + if (DO_NOT_CACHE_ITEMS_IN_THE_PAST) { + if (item.data && item.data.startDate && new Date(item.data.startDate) < new Date()) { + deleteChildOpportunityItem(row.jsonLdId, 'Deleting child opportunity as it has a startDate in the past'); + return; + } + } + // Associate the child with its parent if (row.jsonLdParentId != null) { if (!state.opportunityItemRowCache.parentIdIndex.has(row.jsonLdParentId)) state.opportunityItemRowCache.parentIdIndex.set(row.jsonLdParentId, new Set()); @@ -1259,6 +1338,24 @@ async function startPollingForOpportunityFeed(datasetDistributionItem, { validat }); }; + const onFeedEndParent = async () => { + // Delete all Parent opportunites from the caches that are not Westminster + for (let [parentId, parentOpportunity] of state.opportunityCache.parentMap.entries()) { + const siteId = /** @type {string} */ (get(parentOpportunity, 'location.identifier')); + if (!WESTMINSTER_SITE_IDS.includes(siteId)) { + log(`Deleting non-Westminster parent opportunity: ${parentId}`) + log(`Size of parent opportunity cache before deletion: ${state.opportunityCache.parentMap.size}`); + deleteParentOppportunityItem(parentId, 'Deleting non-Westminster parent opportunity at end of feed'); + log(`Size of parent opportunity cache after deletion: ${state.opportunityCache.childMap.size}`); + } + } + + await setFeedIsUpToDate(validatorWorkerPool, feedContextIdentifier, { + multibar: state.multibar, + }); + }; + + // Harvest a parent opportunity feed if (DATASET_ADDITIONAL_TYPE_TO_IS_PARENT_FEED[datasetDistributionItem.additionalType] === true) { log(`Found parent opportunity feed: ${datasetDistributionItem.contentUrl}`); @@ -1268,27 +1365,27 @@ async function startPollingForOpportunityFeed(datasetDistributionItem, { validat await harvestRPDELossless({ baseUrl: datasetDistributionItem.contentUrl, feedContextIdentifier, - headers: withOpportunityRpdeHeaders(async () => OPPORTUNITY_FEED_REQUEST_HEADERS), - processPage: ingestParentOpportunityPageForThisFeed, - onFeedEnd, - onError: harvestRpdeOnError, - isOrdersFeed: false, - state: { - context: feedContext, feedContextMap: state.feedContextMap, startTime: state.startTime, - }, - loggingFns: { - log, logError, logErrorDuringHarvest, - }, - config: { - howLongToSleepAtFeedEnd: harvestRpdeHowLongToSleepAtFeedEnd, - WAIT_FOR_HARVEST, - VALIDATE_ONLY, - VERBOSE, - ORDER_PROPOSALS_FEED_IDENTIFIER, - REQUEST_LOGGING_ENABLED, - }, - options: { - multibar: state.multibar, pauseResume: state.pauseResume, + headers: withOpportunityRpdeHeaders(async () => OPPORTUNITY_FEED_REQUEST_HEADERS), + processPage: ingestParentOpportunityPageForThisFeed, + onFeedEnd: onFeedEndParent, + onError: harvestRpdeOnError, + isOrdersFeed: false, + state: { + context: feedContext, feedContextMap: state.feedContextMap, startTime: state.startTime, + }, + loggingFns: { + log, logError, logErrorDuringHarvest, + }, + config: { + howLongToSleepAtFeedEnd: harvestRpdeHowLongToSleepAtFeedEnd, + WAIT_FOR_HARVEST, + VALIDATE_ONLY, + VERBOSE, + ORDER_PROPOSALS_FEED_IDENTIFIER, + REQUEST_LOGGING_ENABLED, + }, + options: { + multibar: state.multibar, pauseResume: state.pauseResume, }, }); return; @@ -1325,6 +1422,7 @@ async function startPollingForOpportunityFeed(datasetDistributionItem, { validat multibar: state.multibar, pauseResume: state.pauseResume, }, }); + return; } logError(`\nERROR: Found unsupported feed in dataset site "${datasetDistributionItem.contentUrl}" with additionalType "${datasetDistributionItem.additionalType}"`); @@ -1449,7 +1547,7 @@ function harvestRpdeHowLongToSleepAtFeedEnd() { } function harvestRpdeOnError() { - process.exit(1); + //process.exit(1); } module.exports = { @@ -1468,6 +1566,7 @@ module.exports = { deleteTestDatasetRoute, assertUnmatchedCriteriaRoute, getSampleOpportunitiesRoute, + getDeletedIdsRoute, onHttpServerError, startPolling, diff --git a/packages/openactive-broker-microservice/src/state.js b/packages/openactive-broker-microservice/src/state.js index 45a7a5acfc..46e085f1c2 100644 --- a/packages/openactive-broker-microservice/src/state.js +++ b/packages/openactive-broker-microservice/src/state.js @@ -208,6 +208,12 @@ const state = { opportunityRpdeMap: new Map(), }, + // Array of deleted parent and child IDs + deletedIds: { + parent: {}, + child: {}, + }, + // UI // create new progress bar container multibar: null, diff --git a/packages/openactive-broker-microservice/src/util/extract-jsonld-utils.js b/packages/openactive-broker-microservice/src/util/extract-jsonld-utils.js index 14d5e49967..aedd79c6b0 100644 --- a/packages/openactive-broker-microservice/src/util/extract-jsonld-utils.js +++ b/packages/openactive-broker-microservice/src/util/extract-jsonld-utils.js @@ -9,17 +9,18 @@ const { log, logError } = require('./log'); * @param {string} url */ async function extractJSONLDfromDatasetSiteUrl(url) { - if (DATASET_DISTRIBUTION_OVERRIDE.length > 0) { - log('Simulating Dataset Site based on datasetDistributionOverride config setting...'); - return { - distribution: DATASET_DISTRIBUTION_OVERRIDE, - }; - } try { log(`Downloading Dataset Site JSON-LD from "${url}"...`); const response = await axios.get(url); - const jsonld = extractJSONLDfromHTML(url, response.data); + if (DATASET_DISTRIBUTION_OVERRIDE.length > 0) { + log('Simulating Dataset Site based on datasetDistributionOverride config setting...'); + return { + ...jsonld, + distribution: DATASET_DISTRIBUTION_OVERRIDE, + }; + } + return jsonld; } catch (error) { if (!error.response) { diff --git a/packages/openactive-integration-tests/package-lock.json b/packages/openactive-integration-tests/package-lock.json index 4170ff8d85..e4eed3b671 100644 --- a/packages/openactive-integration-tests/package-lock.json +++ b/packages/openactive-integration-tests/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@openactive/data-model-validator": "^2.0.78", - "@openactive/data-models": "^2.0.316", + "@openactive/data-models": "^2.0.318", "@openactive/models-ts": "^1.0.4", "@openactive/openactive-openid-client": "file:../openactive-openid-client", "@openactive/test-interface-criteria": "file:../test-interface-criteria", @@ -10342,8 +10342,9 @@ "license": "MIT" }, "node_modules/@openactive/data-models": { - "version": "2.0.316", - "license": "MIT", + "version": "2.0.318", + "resolved": "https://registry.npmjs.org/@openactive/data-models/-/data-models-2.0.318.tgz", + "integrity": "sha512-jMA+JwWO6JdK03SeP0dW7DdHgLTTEkJgz7ZNWfQCQA1QirMMdUM4b5i64fI2Ti9zs9grDD+0d1zIkuEUvZRuCw==", "engines": { "node": "14.16.0" } diff --git a/packages/openactive-integration-tests/package.json b/packages/openactive-integration-tests/package.json index c1a1533e9e..b93821e13c 100644 --- a/packages/openactive-integration-tests/package.json +++ b/packages/openactive-integration-tests/package.json @@ -18,7 +18,7 @@ "eslintConfig": {}, "dependencies": { "@openactive/data-model-validator": "^2.0.78", - "@openactive/data-models": "^2.0.316", + "@openactive/data-models": "^2.0.318", "@openactive/models-ts": "^1.0.4", "@openactive/openactive-openid-client": "file:../openactive-openid-client", "@openactive/test-interface-criteria": "file:../test-interface-criteria", diff --git a/packages/openactive-openid-browser-automation/package-lock.json b/packages/openactive-openid-browser-automation/package-lock.json index 36f3dad96e..e1424c8513 100644 --- a/packages/openactive-openid-browser-automation/package-lock.json +++ b/packages/openactive-openid-browser-automation/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "cookie-session": "^1.4.0", "openid-client": "^4.2.1", - "puppeteer": "^20.9.0" + "puppeteer": "^22.14.0" }, "devDependencies": { "@types/cookie-session": "^2.0.41", @@ -24,7 +24,7 @@ "typescript": "^5.1.6" }, "engines": { - "node": "18.17.1" + "node": "18.20.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -237,37 +237,30 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.0", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", + "dependencies": { + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -469,9 +462,9 @@ } }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "dependencies": { "@types/node": "*" @@ -499,9 +492,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dependencies": { "debug": "^4.3.4" }, @@ -510,9 +503,9 @@ } }, "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -789,9 +782,9 @@ } }, "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -799,6 +792,47 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "optional": true, + "dependencies": { + "streamx": "^2.18.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -819,9 +853,9 @@ ] }, "node_modules/basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "engines": { "node": ">=10.0.0" } @@ -930,11 +964,13 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.2.tgz", + "integrity": "sha512-4WVBa6ijmUTVr9cZD4eicQD8Mdy/HCX3bzEIYYpmk0glqYLoWH+LqQEvV9RpDRzoQSbY1KJHloYXbDMXMbDPhg==", "dependencies": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -1023,20 +1059,28 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dependencies": { - "import-fresh": "^3.2.1", + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cosmiconfig/node_modules/argparse": { @@ -1055,14 +1099,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1085,9 +1121,9 @@ "peer": true }, "node_modules/data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "engines": { "node": ">= 14" } @@ -1187,9 +1223,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + "version": "0.0.1312386", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", + "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==" }, "node_modules/doctrine": { "version": "3.0.0", @@ -1231,6 +1267,14 @@ "node": ">=8.6" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1333,9 +1377,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -1892,9 +1936,9 @@ } }, "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -1919,9 +1963,9 @@ "dev": true }, "node_modules/fast-fifo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz", - "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -1984,16 +2028,16 @@ } }, "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.14" } }, "node_modules/fs.realpath": { @@ -2095,23 +2139,23 @@ } }, "node_modules/get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -2319,9 +2363,9 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -2331,9 +2375,9 @@ } }, "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -2364,9 +2408,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -2376,9 +2420,9 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -2486,10 +2530,22 @@ "node": ">= 0.4" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "node_modules/is-array-buffer": { "version": "3.0.2", @@ -2762,6 +2818,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2797,9 +2858,12 @@ } }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -2953,14 +3017,9 @@ } }, "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, "node_modules/ms": { "version": "2.0.0", @@ -2981,25 +3040,6 @@ "node": ">= 0.4.0" } }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -3209,27 +3249,27 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.0.tgz", - "integrity": "sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.1" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -3248,12 +3288,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -3312,14 +3351,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -3355,27 +3386,27 @@ } }, "node_modules/proxy-agent": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.0", + "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.2" }, "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -3425,47 +3456,42 @@ } }, "node_modules/puppeteer": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.9.0.tgz", - "integrity": "sha512-kAglT4VZ9fWEGg3oLc4/de+JcONuEJhlh3J6f5R1TLkrY/EHHIHxWXDOzXvaxQCtedmyVXBwg8M+P8YCO/wZjw==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.14.0.tgz", + "integrity": "sha512-MGTR6/pM8zmWbTdazb6FKnwIihzsSEXBPH49mFFU96DNZpQOevCAZMnjBZGlZRGRzRK6aADCavR6SQtrbv5dQw==", "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "1.4.6", - "cosmiconfig": "8.2.0", - "puppeteer-core": "20.9.0" + "@puppeteer/browsers": "2.3.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1312386", + "puppeteer-core": "22.14.0" + }, + "bin": { + "puppeteer": "lib/esm/puppeteer/node/cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/puppeteer-core": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.14.0.tgz", + "integrity": "sha512-rl4tOY5LcA3e374GAlsGGHc05HL3eGNf5rZ+uxkl6id9zVZKcwcp1Z+Nd6byb6WPiPeecT/dwz8f/iUm+AZQSw==", "dependencies": { - "@puppeteer/browsers": "1.4.6", - "chromium-bidi": "0.4.16", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1147663", - "ws": "8.13.0" + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.2", + "debug": "^4.3.5", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" }, "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -3648,13 +3674,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -3724,35 +3746,35 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", - "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dependencies": { - "agent-base": "^7.0.1", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -3770,11 +3792,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3791,12 +3808,16 @@ "dev": true }, "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string-width": { @@ -3977,25 +3998,36 @@ "dev": true }, "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dependencies": { - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, + "node_modules/text-decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4007,11 +4039,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", @@ -4025,9 +4052,9 @@ } }, "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -4164,11 +4191,11 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/uri-js": { @@ -4180,26 +4207,17 @@ "punycode": "^2.1.0" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4272,9 +4290,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, @@ -4305,9 +4323,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4337,6 +4355,14 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/packages/openactive-openid-browser-automation/package.json b/packages/openactive-openid-browser-automation/package.json index 116c1096ad..9cc484fb22 100644 --- a/packages/openactive-openid-browser-automation/package.json +++ b/packages/openactive-openid-browser-automation/package.json @@ -18,7 +18,7 @@ "dependencies": { "cookie-session": "^1.4.0", "openid-client": "^4.2.1", - "puppeteer": "^20.9.0" + "puppeteer": "^22.14.0" }, "devDependencies": { "@types/cookie-session": "^2.0.41", diff --git a/packages/openactive-openid-test-cli/package-lock.json b/packages/openactive-openid-test-cli/package-lock.json index c58260edcc..30341c9ee5 100644 --- a/packages/openactive-openid-test-cli/package-lock.json +++ b/packages/openactive-openid-test-cli/package-lock.json @@ -48,7 +48,7 @@ "typescript": "^5.1.6" }, "engines": { - "node": "18.17.1" + "node": "18.20.3" } }, "../openactive-openid-client": {