From a51c5c7ff7057cec1480cc2f55d27b9fc3c93f19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Sep 2025 11:56:36 +0000 Subject: [PATCH 1/4] build(deps): bump brace-expansion Bumps and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together. Updates `brace-expansion` from 1.1.11 to 1.1.12 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) Updates `brace-expansion` from 2.0.1 to 2.0.2 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect - dependency-name: brace-expansion dependency-version: 2.0.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 52 +++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8c57a5..aee35af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1804,10 +1804,11 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1913,10 +1914,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2475,9 +2477,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4090,10 +4093,11 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -10328,9 +10332,9 @@ } }, "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -10392,9 +10396,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -10808,9 +10812,9 @@ } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11942,9 +11946,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" From 1d20284804b1eddae2adb18de271d505b5198951 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Fri, 19 Sep 2025 14:39:25 +0200 Subject: [PATCH 2/4] providing visa to data access users and visitors --- src/models/ProposalMessage.ts | 2 ++ .../visa/consumerCallbacks/syncVisaProposal.ts | 10 ++++++---- .../consumers/visa/utils/sanitizeProposalMessage.ts | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index b61dfb0..a075c42 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -29,6 +29,8 @@ export type ProposalMessageData = { newStatus?: ProposalStatusDefaultShortCodes; submitted: boolean; members: ProposalUser[]; + dataAccessUsers: ProposalUser[]; + visitors: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; }; diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 824bb39..0dd0b74 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -104,13 +104,15 @@ export async function syncVisaProposal( }); } - const proposersAndCoproposers = [ + const experimenters = [ ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, + ...proposalWithNewStatus.dataAccessUsers, + ...proposalWithNewStatus.visitors, ]; - // Create new user for the Principal Investigator and Coproposers - for (const member of proposersAndCoproposers) { + // Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors + for (const member of experimenters) { await createUserAndAssignToExperiment( member, proposalWithNewStatus.proposalPk @@ -120,6 +122,6 @@ export async function syncVisaProposal( // Delete the users that are saved in the experiment users table, but not in the Proposal Payload await deleteMissingUsersFromExperiment( proposalWithNewStatus.proposalPk, - proposersAndCoproposers + experimenters ); } diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts index 053354c..648cc0d 100644 --- a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -10,6 +10,16 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { oidcSub: member.oidcSub.toLowerCase(), email: member.email.toLowerCase(), })), + dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({ + ...user, + oidcSub: user.oidcSub.toLowerCase(), + email: user.email.toLowerCase(), + })), + visitors: proposalMessage.visitors.map((visitor) => ({ + ...visitor, + oidcSub: visitor.oidcSub.toLowerCase(), + email: visitor.email.toLowerCase(), + })), proposer: proposalMessage.proposer ? { ...proposalMessage.proposer, From 55c400748442677c3f73ad777c29cc4aa731c396 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 8 Oct 2025 18:48:56 +0200 Subject: [PATCH 3/4] feat: Improve instrument ID retrieval by using individual requests and error handling (#618) --- .../upsertProposalInScicat.ts | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 63f0bbe..8b47c59 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -195,19 +195,32 @@ const checkProposalExists = async ( const getInstrumentIds = async (instruments: Instrument[]) => { const sciCatAccessToken = await getSciCatAccessToken(); - const shortCodes = JSON.stringify(instruments.map((inst) => inst.shortCode)); + const instrumentNames = instruments.map((inst) => inst.shortCode); - const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"$in":${shortCodes}}}}`; + const instrumentIds = []; - const getInstrumentsResponse = await request(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${sciCatAccessToken}`, - }, - }); + for (const name of instrumentNames) { + const instrumentNameLowerCase = encodeURIComponent(name.toLowerCase()); + const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"like":"${instrumentNameLowerCase}"}}}`; + + try { + const res = await request(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${sciCatAccessToken}`, + }, + }); + + instrumentIds.push(res[0].pid); + } catch (error) { + logger.logError(`Error fetching instrument ID from scicat for ${name}`, { + error, + }); + } + } - return getInstrumentsResponse.map((inst) => inst.pid); + return instrumentIds; }; const upsertProposalInScicat = async ( From 3c53e49aefbc54a527f0260e8e0381c8e8ff14eb Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Tue, 14 Oct 2025 12:11:09 +0200 Subject: [PATCH 4/4] fix: null handler for data access user and visitors --- src/models/ProposalMessage.ts | 4 ++-- .../consumerCallbacks/syncVisaProposal.ts | 4 ++-- .../visa/utils/sanitizeProposalMessage.ts | 24 +++++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index a075c42..e236686 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -29,8 +29,8 @@ export type ProposalMessageData = { newStatus?: ProposalStatusDefaultShortCodes; submitted: boolean; members: ProposalUser[]; - dataAccessUsers: ProposalUser[]; - visitors: ProposalUser[]; + dataAccessUsers?: ProposalUser[]; + visitors?: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; }; diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 0dd0b74..cbb79e2 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -107,8 +107,8 @@ export async function syncVisaProposal( const experimenters = [ ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, - ...proposalWithNewStatus.dataAccessUsers, - ...proposalWithNewStatus.visitors, + ...(proposalWithNewStatus.dataAccessUsers || []), + ...(proposalWithNewStatus.visitors || []), ]; // Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts index 648cc0d..393ddf3 100644 --- a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -10,16 +10,20 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { oidcSub: member.oidcSub.toLowerCase(), email: member.email.toLowerCase(), })), - dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({ - ...user, - oidcSub: user.oidcSub.toLowerCase(), - email: user.email.toLowerCase(), - })), - visitors: proposalMessage.visitors.map((visitor) => ({ - ...visitor, - oidcSub: visitor.oidcSub.toLowerCase(), - email: visitor.email.toLowerCase(), - })), + dataAccessUsers: proposalMessage.dataAccessUsers + ? proposalMessage.dataAccessUsers.map((user) => ({ + ...user, + oidcSub: user.oidcSub.toLowerCase(), + email: user.email.toLowerCase(), + })) + : [], + visitors: proposalMessage.visitors + ? proposalMessage.visitors.map((visitor) => ({ + ...visitor, + oidcSub: visitor.oidcSub.toLowerCase(), + email: visitor.email.toLowerCase(), + })) + : [], proposer: proposalMessage.proposer ? { ...proposalMessage.proposer,