Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚀 RC 3.43.0 #709

Merged
merged 15 commits into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "server",
"version": "3.42.1",
"version": "3.43.0",
"description": "",
"main": "index.js",
"scripts": {
Expand Down
27 changes: 14 additions & 13 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ export const ADVERTISED_HOST = process.env.ADVERTISED_HOST || 'http://localhost:

// Elasticsearch config
export const ELASTICSEARCH_HOST = process.env.ELASTICSEARCH_HOST || 'http://localhost:9200';
export const ELASTICSEARCH_VAULT_SECRET_PATH = process.env
.ELASTICSEARCH_VAULT_SECRET_PATH as string;
export const ELASTICSEARCH_VAULT_SECRET_PATH =
process.env.ELASTICSEARCH_VAULT_SECRET_PATH ||
'Missing env variable ELASTICSEARCH_VAULT_SECRET_PATH';
export const ELASTICSEARCH_USERNAME = process.env.ELASTICSEARCH_USERNAME;
export const ELASTICSEARCH_PASSWORD = process.env.ELASTICSEARCH_PASSWORD;
export const ELASTICSEARCH_CLIENT_TRUST_SSL_CERT =
Expand All @@ -44,28 +45,27 @@ export const ARRANGER_PROJECT_ID = process.env.ARRANGER_PROJECT_ID || 'argo';
export const EGO_ROOT_REST = process.env.EGO_ROOT_REST || 'http://localhost:8081';
export const EGO_ROOT_GRPC = process.env.EGO_ROOT_GRPC || 'localhost:50051';
export const EGO_DACO_POLICY_NAME = process.env.EGO_DACO_POLICY_NAME || 'DACO';
export const EGO_VAULT_SECRET_PATH = process.env.EGO_VAULT_SECRET_PATH as string;
export const EGO_VAULT_SECRET_PATH =
process.env.EGO_VAULT_SECRET_PATH || 'Missing env variable EGO_VAULT_SECRET_PATH';
export const EGO_CLIENT_ID = process.env.EGO_CLIENT_ID;
export const EGO_CLIENT_SECRET = process.env.EGO_CLIENT_SECRET;

// Ego Credentials for Score Proxy
export const EGO_VAULT_SCORE_PROXY_SECRET_PATH = process.env
.EGO_VAULT_SCORE_PROXY_SECRET_PATH as string;
export const EGO_VAULT_SCORE_PROXY_SECRET_PATH = process.env.EGO_VAULT_SCORE_PROXY_SECRET_PATH;
export const EGO_SCORE_PROXY_CLIENT_ID = process.env.EGO_SCORE_PROXY_CLIENT_ID;
export const EGO_SCORE_PROXY_CLIENT_SECRET = process.env.EGO_SCORE_PROXY_CLIENT_SECRET;

// Ego Credentials for Clinical API
export const EGO_VAULT_CLINICAL_API_SECRET_PATH = process.env
.EGO_VAULT_CLINICAL_API_SECRET_PATH as string;
export const EGO_VAULT_CLINICAL_API_SECRET_PATH = process.env.EGO_VAULT_CLINICAL_API_SECRET_PATH;
export const EGO_CLINICAL_API_CLIENT_ID = process.env.EGO_CLINICAL_API_CLIENT_ID;
export const EGO_CLINICAL_API_CLIENT_SECRET = process.env.EGO_CLINICAL_API_CLIENT_SECRET;

// Vault
export const USE_VAULT = process.env.USE_VAULT === 'true';
export const VAULT_TOKEN = process.env.VAULT_TOKEN as string;
export const VAULT_AUTH_METHOD = process.env.VAULT_AUTH_METHOD as 'token' | 'kubernetes';
export const VAULT_URL = (process.env.VAULT_URL as string) || 'http://localhost:8200';
export const VAULT_ROLE = process.env.VAULT_ROLE as string;
export const VAULT_TOKEN = process.env.VAULT_TOKEN;
export const VAULT_AUTH_METHOD = process.env.VAULT_AUTH_METHOD;
export const VAULT_URL = process.env.VAULT_URL || 'http://localhost:8200';
export const VAULT_ROLE = process.env.VAULT_ROLE;

// Default ego public key value is the example value provided in the application.yml of the public overture repository
export const EGO_PUBLIC_KEY =
Expand All @@ -85,8 +85,9 @@ export const DATA_CENTER_REGISTRY_API_ROOT =
export const APP_DIR = __dirname;

// Helpdesk auth
export const JIRA_ADMIN_VAULT_CREDENTIALS_PATH = process.env
.JIRA_ADMIN_VAULT_CREDENTIALS_PATH as string;
export const JIRA_ADMIN_VAULT_CREDENTIALS_PATH =
process.env.JIRA_ADMIN_VAULT_CREDENTIALS_PATH ||
'Missing env variable JIRA_ADMIN_VAULT_CREDENTIALS_PATH';
export const JIRA_REST_URI =
process.env.JIRA_REST_URI || 'https://extsd.oicr.on.ca/rest/servicedeskapi';
export const JIRA_SERVICEDESK_ID = process.env.JIRA_SERVICEDESK_ID || '9';
Expand Down
59 changes: 0 additions & 59 deletions src/resources/Ego.proto

This file was deleted.

2 changes: 0 additions & 2 deletions src/schemas/Clinical/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -469,8 +469,6 @@ const resolvers = {
) => {
const { Authorization } = context;

console.log('clinical errors');

const errorResponse: ClinicalErrors = await clinicalService.getClinicalErrors(
args.programShortName,
args.donorIds,
Expand Down
90 changes: 56 additions & 34 deletions src/schemas/Program/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import { get, merge, pickBy } from 'lodash';

import customScalars from 'schemas/customScalars';
import programService from 'services/programService';
import { grpcToGql } from 'utils/grpcUtils';

const typeDefs = gql`
scalar DateTime
Expand Down Expand Up @@ -72,6 +71,7 @@ const typeDefs = gql`
regions: [String]
cancerTypes: [String]
primarySites: [String]
dataCenter: DataCenter

membershipType: MembershipType

Expand All @@ -96,6 +96,22 @@ const typeDefs = gql`
countries: [String]!
}

type DataCenter {
id: ID
shortName: String!
name: String
organization: String
email: String
uiUrl: String
gatewayUrl: String
analysisSongCode: String
analysisSongUrl: String
analysisScoreUrl: String
submissionSongCode: String
submissionSongUrl: String
submissionScoreUrl: String
}

input ProgramUserInput {
email: String!
firstName: String!
Expand Down Expand Up @@ -161,14 +177,19 @@ const typeDefs = gql`
"""
retrieve all Programs
"""
programs: [Program]
programs(dataCenter: String): [Program]

"""
retrieve join program invitation by id
"""
joinProgramInvite(id: ID!): JoinProgramInvite

programOptions: ProgramOptions!

"""
retrieve all DataCenters
"""
dataCenters(shortName: String): [DataCenter]
}

type Mutation {
Expand Down Expand Up @@ -212,7 +233,7 @@ const typeDefs = gql`
`;

/* =========
Convert GRPC Response to GQL output
HTTP resolvers
* ========= */
const getIsoDate = (time) => (time ? new Date(parseInt(time) * 1000).toISOString() : null);

Expand Down Expand Up @@ -242,33 +263,19 @@ const convertGrpcUserToGql = (userDetails) => ({
inviteAcceptedAt: getIsoDate(get(userDetails, 'accepted_at.seconds')),
});

const formatHttpProgram = (program) => ({
name: program.name,
shortName: program.shortName,
description: program.description,
website: program.website,
institutions: program.programInstitutions?.map((institution) => institution.name) || [],
countries: program.programCountries?.map((country) => country.name) || [],
regions: program.processingRegions?.map((region) => region.name) || [],
cancerTypes: program.programCancers?.map((cancer) => cancer.name) || [],
primarySites: program.programPrimarySites?.map((primarySite) => primarySite.name) || [],
});

const resolveProgramList = async (egoToken) => {
const response = await programService.listPrograms(egoToken);
const programs = get(response, 'programs', []);
return programs.map((program) => convertGrpcProgramToGql(program));
const resolvePrivateProgramList = async (egoToken) => {
const response = await programService.listPrivatePrograms(egoToken);
return response || null;
};

const resolveSingleProgram = async (egoToken, programShortName) => {
const response = await programService.getProgram(programShortName, egoToken);
const programDetails = get(response, 'program');
return response ? convertGrpcProgramToGql(programDetails) : null;
const resolvePrivateSingleProgram = async (egoToken, programShortName) => {
const response = await programService.getPrivateProgram(egoToken, programShortName);
return response || null;
};

const resolveHTTPProgram = async (programShortName) => {
const response = await programService.getProgramPublicFields(programShortName);
return response ? formatHttpProgram(response) : null;
const resolvePublicSingleProgram = async (programShortName) => {
const response = await programService.getPublicProgram(programShortName);
return response || null;
};

const programServicePrivateFields = [
Expand All @@ -277,6 +284,7 @@ const programServicePrivateFields = [
'genomicDonors',
'membershipType',
'users',
'dataCenter',
];

const resolvers = {
Expand Down Expand Up @@ -339,21 +347,35 @@ const resolvers = {
);

return hasPrivateField
? resolveSingleProgram(egoToken, shortName)
: resolveHTTPProgram(shortName);
? resolvePrivateSingleProgram(egoToken, shortName)
: resolvePublicSingleProgram(shortName);
},

programs: async (obj, args, context, info) => {
programs: async (obj, args, context) => {
const { egoToken } = context;
return resolveProgramList(egoToken);
const { dataCenter } = args;

const programs = await resolvePrivateProgramList(egoToken);

const filteredPrograms = dataCenter
? programs.filter((program) => program.dataCenter?.shortName === dataCenter)
: programs;

return filteredPrograms;
},

joinProgramInvite: async (obj, args, context, info) => {
const { egoToken } = context;
const response = await programService.getJoinProgramInvite(args.id, egoToken);
const joinProgramDetails = get(response, 'invitation');
return response ? grpcToGql(joinProgramDetails) : null;
const response = await programService.getJoinProgramInvite(egoToken, args.id);
return response || null;
},
programOptions: () => ({}),
dataCenters: async (obj, args, context, info) => {
const { egoToken } = context;
const shortName = get(args, 'shortName', null);
const response = await programService.listDataCenters(shortName, egoToken);
return response || null;
},
},
Mutation: {
createProgram: async (obj, args, context, info) => {
Expand All @@ -368,7 +390,7 @@ const resolvers = {

try {
const createResponse = await programService.createProgram(program, egoToken);
return resolveSingleProgram(egoToken, program.shortName);
return resolvePrivateSingleProgram(egoToken, program.shortName);
} catch (err) {
const GRPC_INVALID_ARGUMENT_ERROR_CODE = 3;
if (err.code === GRPC_INVALID_ARGUMENT_ERROR_CODE) {
Expand Down
Loading