-
Notifications
You must be signed in to change notification settings - Fork 25
Feat/filters #904
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
Feat/filters #904
Conversation
…available for node
joneubank
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this looks fine but have a question about making sure our variables in the fetch request match the variables we list in the gql query. Perhaps important thing to test.
| url: string; | ||
| gqlQuery: string; | ||
| variables?: Record<string, string>; | ||
| variables?: Record<string, unknown>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🙌
| const aggregationsString = !isEmpty(fields) | ||
| ? `aggregations(filters: $filters, aggregations_filter_themselves: $aggregations_filter_themselves, include_missing: $include_missing) ${fields}` | ||
| : ''; | ||
| const gqlString = `query nodeQuery($filters: JSON, $aggregations_filter_themselves: Boolean, $include_missing: Boolean) {${documentName} { hits { total } ${aggregationsString} }}`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we are declaring 3 variables here... if they are not provided in the args object will GQL throw an error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's ok for these. default gql args are nullable. there would be an error if args were required using '!' eg. (filter: JSON!)
| type NetworkQuery = { | ||
| url: string; | ||
| gqlQuery: DocumentNode; | ||
| args: Record<string, unknown>; | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Type declared after it is used.
| type NetworkQuery = { | ||
| url: string; | ||
| gqlQuery: DocumentNode; | ||
| args: Record<string, unknown>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We declare some specific variables in the gql query, should we be requiring these in the args?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could. I'd love your typescript insight here.
Queries passing args that aren't defined will get an error straight from the gql server. Something like:
"message": "Unknown argument \"random_arg\" on field \"Query.network\".",
"extensions": {
"code": "GRAPHQL_VALIDATION_FAILED",
So once we trust gql (and we should, strongly typed queries is a benefit it provides), args: Record<string, unknown> could always be args: Record<string, { ...known gql args types... }>
I think it's safe to pass on through the args "as is" because:
- We don't do anything with the args right now, they're just passed through as variables.
The query creation is only string manipulation so TS wouldn't provide any benefit there by typing the args. - GQL server will error itself because a type not matching the schema will throw an error
Bigger question is something that impacts a lot of the project - we have an intersection of GQL types and TS types. There's no quick and easy way to do this. The most straightforward we've had so far requires a build step (that's the thing Sam added for platform - I can't recall the library name - some kind of gql-codegen)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Luckily for us, this module only exposes a single function whose interface needs to be typed. The function aggregationPipeline is exported and shouldn't allow any args, it should be specifying what we expect to be set. To that effect, consider introducing the type NetworkAggregationArgs and then update the function declaration to:
type NetworkAggregationArgs = {
filters: object;
aggregations_filter_themselves: boolean;
include_missing: boolean;
};
/**
* Query each remote connection
*
* @param queries - Query for each remote connection
* @param requestedAggregationFields
* @returns
*/
export const aggregationPipeline = async (
configs: NodeConfig[],
requestedAggregationFields: RequestedFieldsMap,
args: NetworkAggregationArgs,
) => {You'll then need to put corresponding updates into the GQL network resolvers to make sure the args provided from the client are properly validated and typed to be passed into the aggregation pipeline.
| export const isSQONFilter = (filter: unknown) => { | ||
| // An error will be thrown if the provided input is invalid. | ||
| SQONBuilder.from(filter); | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this return boolean to check the data type? If you want an error thrown at a specific location then throw from there, but this won't be very reusable if it either does nothing or throws.
Also, lets add a TSDocs comment for this exported utility.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the return value is a SQON object, which we don't want, we want to keep it as a string.
So the only purpose this has is to throw an error if it's not a SQON
| try { | ||
| isSQONFilter(args.filters); | ||
| } catch (err) { | ||
| throw `SQON filters are not valid. ${JSON.stringify(err)}`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does GQL want us to throw strings instead of an error like new Error(message)?
It seems weird that you created isSQONFilter to throw an error and then immediately caught and threw a different error. Would be more reusable to have the sqon type check function return a Result with success containing the SQON and the failure containing the error message you want to include in your new thrown error.
import SQONBuilder, {SQON} from '@overture-stack/sqon-builder';
/**
* Attempts to convert a variable to a SQON. A Result is returned, where if successful
* the type checked SQON object is returned, and if a failure occurs then the error data
* from the SQONBuilder is returned as the failure message.
*
* @param filter
* @returns
*/
export const convertToSqon = (filter: unknown): Result<SQON, 'INVALID_SQON'> => {
try {
const output = SQONBuilder.from(filter);
return success(output.toValue());
} catch (error: unknown) {
let message = `${error}`; // Will convert the error to a string, works fine with the expected ZodError without reuiring importing Zod to arranger
return failure('INVALID_SQON', message)
}
};With this, you can also update the NetworkAggregationArgs to have filters as a SQON instead of object.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bonus, I'd rename your file httpResponse.ts to be result.ts.
| const { url, gqlQuery } = query; | ||
| const { url, gqlQuery, queryVariables } = query; | ||
|
|
||
| console.log(`Fetch data starting for ${url}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ToDo: consider logger instance/level, so this doesn't come up in regular Arranger instances (unless that may actually be desirable?)
Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com>
joneubank
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks functionally good. Some comments here for small updates, mostly regarding commenting the code.
| }; | ||
|
|
||
| /** | ||
| * Query string creation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not a useful description. Consider expanding to describe what the content of the query string will be and how that string can be used. Also useful, consider: what are the arguments and how are they used?
| export type NetworkAggregationArgs = { | ||
| filters?: object; | ||
| aggregations_filter_themselves?: boolean; | ||
| include_missing?: boolean; | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think a comment block for this would be good. You have a comment below that says "type should match gql typedefs", but it would be good to directly mention which gql typedef, maybe including the path to that file or at least its name. As a first time reader of this file, I should know that this type is describing the inputs to a specific gql query.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea! I'll include some kind of name link. I will avoid using path because if files are moved there's a string in a comment that needs to be updated.
| export const convertToSqon = (filter: unknown): Result<SQON, 'INVALID_SQON', void> => { | ||
| try { | ||
| const output = SQONBuilder.from(filter); | ||
| return success(output); | ||
| } catch (error: unknown) { | ||
| const message = `${error}`; // Will convert the error to a string, works fine with the expected ZodError without requiring importing Zod to Arranger | ||
| return failure('INVALID_SQON', message); | ||
| } | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is working fine, consider using the SQON schema exported with SQONBuilder:
import SQONBuilder, {SQON} from '@overture-stack/sqon-builder';
const isSqon = (input: unknown): input is SQON => SQON.safeParse(input).success;* add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com>
* add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com>
* Network aggregation search - Initial Config (#876) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feat/#873 retrieve remote schemas (#877) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * small feedback fixes * add typings + additional info in comments * add better errors * remove unused func. renaming * add return type * remove assertion. add TS filter * change nulls to undefined * change explicit undefined to optional ts * add tsdoc comment * change var type to loose record instead of uknown * if else TS * if else TS * change to nested promise return --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Pr feedback - doc updates (#879) * update tsdoc * update tsdoc --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/#874 merge schemas (#878) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * basic merge schema * cleanup comment * exclusuions * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * update packages for typedefs * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * fix merge conflict * add test watch command with basic test * tests * Fix type. narrow scope. hoist filtering * remove debug code. add comment * update comments + add type assertion * add comments * remove redundant options arg for schema merginging * seperate test utils and fixture from main file * seperate test utils and fixture from main file * tests, cleanup, extra tests, split responsibility --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Add core functionality for remote connection resolvers (#880) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/agg resolver (#881) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check * fetchGQL helper func working with axios * rework dynamic network search types based on remote connections types * use __type query instead of full introspectionQuery * remove old code * add single typeDef export, responsible for merging remote connection and aggregation types * correct structure for merging typedefs with other typedefs, merge on Query * get all types from remote connections once * agg resolver structuring * add aggregations resolvers * add agg resolver network calls * rename and narrow NetworkType type across files * add common file * add network queries file * rename var * query remote connections * move query * add comments * add supported and unsupported aggregations with test * ts-jest disable diagnostics to run tests without all types passing * rework connection status property to do ping healthcehck * types cleanup across files * improved typing for reducer in field types, covering supported and unsupported aggregates * tighten and rename types * type cleanup and comments * add explicit name mapping * rename type correctly * Cleanup query lookup for aggregations for remote connections * move TSdoc comment * move types * add util func to convert gql AST into string * move aggregations resolver code into a module * simplify query to be composable, better naming for agg query map * aggregation logic placeholder * cleanup * rework logic to use single request and mapping fields, instead of slicing central query --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolve stats (#883) * add resolve aggregation function with tests * add basic aggregation TS types * cleanup * improve comments --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolver responses (#884) * add documentName to config and use in remote connection gql queries * move fulfilled promise type guard to util and make it a generic * resolve aggregations from network query results' * return resolved response object * PR feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix network agg resolution (#885) * add Bucket gql object type * text change, move func outside of nested func * fix resolved aggregations overriding * Update modules/server/src/network/aggregations/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Response data & batching requests (#887) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * remove log --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed Search request timeouts (#889) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * add GQL request timeout with config option and default value --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Reorg connection (#891) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Accumulator pipeline (#893) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed total hits (#895) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * fix logging --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * feat/agg acc tests (#897) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed numeric agg resolution (#898) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test * add test + expand types * rework resolution iteration and add numericAggregations resolver * add typename to types * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * use Math methods (#900) Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Individual node config query fields (#899) * use more detailed NodeConfig object to store available agg types * filter requested aggs with available aggs * add available aggs to node connection resolver type defs * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/aggregate not available (#903) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/filters (#904) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Minor comment updates (#905) * improve comment * improve comment --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed search cleanup typings (#906) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * address feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix broken build (#907) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * fix gql query creation test * query back to normal test * disables tests, adds comment * fix merged file --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * add agg mode env config (#908) * add agg mode env config * env config to strip out section of gql schema, typedef + resolver * prettier * prettier * Update modules/server/.env.schema Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionResolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * alphabetize * move up import * change AGG_ONLY_MODE to enabled DOCUMENT_HITS * add empty line at EOF * add comment * fix typo * fix inverted logic --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feature/threshold calc (#909) * add conditional prop to schema * conditional schema field * conditional add dataMasking schema fields * add data masking logic * add agg only conditional to resolvers * clarify todo * get optional aggregations field and values for hits resolution * add mask func stub * fix missing prop from spread * masking logic * conditional resolve hits * move thresholding higher on resolver chain * add falsey belowThreshold value instead of null * data mask threshold env var * update wrong process.env path * seperate resolver creation from routing * check for undefiend value in lookup * clarify comment * add threshold value explanation * move types to common file * typing --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * multiple node with data thresholding (#912) * fix build error * single endpoint * fix GQL type name collisions * move data mask threshold env. ensure data masking applies even if hits.total is not queried * change belowThreshold to relation object * surface api errors to axios responses * add relation logic and agg merging for network search * read data mask threshold min from config * check for valid env val * remove unused func * fix TS build errors * fix schema merge error --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search cleanup (#920) * add placeholder * Adjust config template example and file * remove unused arranger constructor param * reorder constants file, parse env var * update arranger network config type * type, add gql server types * graphqlRoutes, remove unused import, export func * resolver creation, improve TS usage, split functionality into distinct files, improve usage' * add surrounding brackets for func * cleanup schema resolvers --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search networked cleanup (#921) * cleanup utils * reorg types, decompose file, improve comments * clean up types * cleanup types, redundant code and fix a couple of bad merge files * fix enum * cleanup test types * type fix * explicit type import, use path alias --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Update modules/server/src/app.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * make horrible ajax.ts console logging somewhat useful * improve release process * fix paths and imports for new build config * update tests to todos * fix some imports * fix build issues with lodash and missing config flag * fix paths * comment out test files, broken with tsx vs jest * fix path * fix path * improve release process * allow toolbar options customization * fix setsIndex conflict resolutioon misses * default for ENABLE_DOCUMENT_HITS env flag is true * default enable document hits to true * add DATA_MASK_MIN_THRESHOLD env var as pass through var * debug * debug * debug * add default param value * debug * string util important fix * fix for tests * Add comment re data masking * remove debug log * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/masking.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolveHitsFromAggs.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * remove specific NetworkAggError class * fix error response type narrow * missing param * add explanation comment for aggs resolver, gql info lookup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com>
* Network aggregation search - Initial Config (#876) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feat/#873 retrieve remote schemas (#877) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * small feedback fixes * add typings + additional info in comments * add better errors * remove unused func. renaming * add return type * remove assertion. add TS filter * change nulls to undefined * change explicit undefined to optional ts * add tsdoc comment * change var type to loose record instead of uknown * if else TS * if else TS * change to nested promise return --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Pr feedback - doc updates (#879) * update tsdoc * update tsdoc --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/#874 merge schemas (#878) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * basic merge schema * cleanup comment * exclusuions * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * update packages for typedefs * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * fix merge conflict * add test watch command with basic test * tests * Fix type. narrow scope. hoist filtering * remove debug code. add comment * update comments + add type assertion * add comments * remove redundant options arg for schema merginging * seperate test utils and fixture from main file * seperate test utils and fixture from main file * tests, cleanup, extra tests, split responsibility --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Add core functionality for remote connection resolvers (#880) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/agg resolver (#881) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check * fetchGQL helper func working with axios * rework dynamic network search types based on remote connections types * use __type query instead of full introspectionQuery * remove old code * add single typeDef export, responsible for merging remote connection and aggregation types * correct structure for merging typedefs with other typedefs, merge on Query * get all types from remote connections once * agg resolver structuring * add aggregations resolvers * add agg resolver network calls * rename and narrow NetworkType type across files * add common file * add network queries file * rename var * query remote connections * move query * add comments * add supported and unsupported aggregations with test * ts-jest disable diagnostics to run tests without all types passing * rework connection status property to do ping healthcehck * types cleanup across files * improved typing for reducer in field types, covering supported and unsupported aggregates * tighten and rename types * type cleanup and comments * add explicit name mapping * rename type correctly * Cleanup query lookup for aggregations for remote connections * move TSdoc comment * move types * add util func to convert gql AST into string * move aggregations resolver code into a module * simplify query to be composable, better naming for agg query map * aggregation logic placeholder * cleanup * rework logic to use single request and mapping fields, instead of slicing central query --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolve stats (#883) * add resolve aggregation function with tests * add basic aggregation TS types * cleanup * improve comments --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolver responses (#884) * add documentName to config and use in remote connection gql queries * move fulfilled promise type guard to util and make it a generic * resolve aggregations from network query results' * return resolved response object * PR feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix network agg resolution (#885) * add Bucket gql object type * text change, move func outside of nested func * fix resolved aggregations overriding * Update modules/server/src/network/aggregations/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Response data & batching requests (#887) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * remove log --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed Search request timeouts (#889) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * add GQL request timeout with config option and default value --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Reorg connection (#891) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Accumulator pipeline (#893) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed total hits (#895) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * fix logging --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * feat/agg acc tests (#897) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed numeric agg resolution (#898) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test * add test + expand types * rework resolution iteration and add numericAggregations resolver * add typename to types * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * use Math methods (#900) Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Individual node config query fields (#899) * use more detailed NodeConfig object to store available agg types * filter requested aggs with available aggs * add available aggs to node connection resolver type defs * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/aggregate not available (#903) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/filters (#904) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Minor comment updates (#905) * improve comment * improve comment --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed search cleanup typings (#906) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * address feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix broken build (#907) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * fix gql query creation test * query back to normal test * disables tests, adds comment * fix merged file --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * add agg mode env config (#908) * add agg mode env config * env config to strip out section of gql schema, typedef + resolver * prettier * prettier * Update modules/server/.env.schema Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionResolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * alphabetize * move up import * change AGG_ONLY_MODE to enabled DOCUMENT_HITS * add empty line at EOF * add comment * fix typo * fix inverted logic --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feature/threshold calc (#909) * add conditional prop to schema * conditional schema field * conditional add dataMasking schema fields * add data masking logic * add agg only conditional to resolvers * clarify todo * get optional aggregations field and values for hits resolution * add mask func stub * fix missing prop from spread * masking logic * conditional resolve hits * move thresholding higher on resolver chain * add falsey belowThreshold value instead of null * data mask threshold env var * update wrong process.env path * seperate resolver creation from routing * check for undefiend value in lookup * clarify comment * add threshold value explanation * move types to common file * typing --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * multiple node with data thresholding (#912) * fix build error * single endpoint * fix GQL type name collisions * move data mask threshold env. ensure data masking applies even if hits.total is not queried * change belowThreshold to relation object * surface api errors to axios responses * add relation logic and agg merging for network search * read data mask threshold min from config * check for valid env val * remove unused func * fix TS build errors * fix schema merge error --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search cleanup (#920) * add placeholder * Adjust config template example and file * remove unused arranger constructor param * reorder constants file, parse env var * update arranger network config type * type, add gql server types * graphqlRoutes, remove unused import, export func * resolver creation, improve TS usage, split functionality into distinct files, improve usage' * add surrounding brackets for func * cleanup schema resolvers --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search networked cleanup (#921) * cleanup utils * reorg types, decompose file, improve comments * clean up types * cleanup types, redundant code and fix a couple of bad merge files * fix enum * cleanup test types * type fix * explicit type import, use path alias --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Update modules/server/src/app.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * make horrible ajax.ts console logging somewhat useful * improve release process * fix paths and imports for new build config * update tests to todos * fix some imports * fix build issues with lodash and missing config flag * fix paths * comment out test files, broken with tsx vs jest * fix path * fix path * improve release process * allow toolbar options customization * fix setsIndex conflict resolutioon misses * default for ENABLE_DOCUMENT_HITS env flag is true * default enable document hits to true * add DATA_MASK_MIN_THRESHOLD env var as pass through var * debug * debug * debug * add default param value * debug * string util important fix * fix for tests * Add comment re data masking * remove debug log * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/masking.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolveHitsFromAggs.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * remove specific NetworkAggError class * fix error response type narrow * missing param * add explanation comment for aggs resolver, gql info lookup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com>
* Feature/federated (#926) * Network aggregation search - Initial Config (#876) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feat/#873 retrieve remote schemas (#877) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * small feedback fixes * add typings + additional info in comments * add better errors * remove unused func. renaming * add return type * remove assertion. add TS filter * change nulls to undefined * change explicit undefined to optional ts * add tsdoc comment * change var type to loose record instead of uknown * if else TS * if else TS * change to nested promise return --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Pr feedback - doc updates (#879) * update tsdoc * update tsdoc --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/#874 merge schemas (#878) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * basic merge schema * cleanup comment * exclusuions * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * update packages for typedefs * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * fix merge conflict * add test watch command with basic test * tests * Fix type. narrow scope. hoist filtering * remove debug code. add comment * update comments + add type assertion * add comments * remove redundant options arg for schema merginging * seperate test utils and fixture from main file * seperate test utils and fixture from main file * tests, cleanup, extra tests, split responsibility --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Add core functionality for remote connection resolvers (#880) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/agg resolver (#881) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check * fetchGQL helper func working with axios * rework dynamic network search types based on remote connections types * use __type query instead of full introspectionQuery * remove old code * add single typeDef export, responsible for merging remote connection and aggregation types * correct structure for merging typedefs with other typedefs, merge on Query * get all types from remote connections once * agg resolver structuring * add aggregations resolvers * add agg resolver network calls * rename and narrow NetworkType type across files * add common file * add network queries file * rename var * query remote connections * move query * add comments * add supported and unsupported aggregations with test * ts-jest disable diagnostics to run tests without all types passing * rework connection status property to do ping healthcehck * types cleanup across files * improved typing for reducer in field types, covering supported and unsupported aggregates * tighten and rename types * type cleanup and comments * add explicit name mapping * rename type correctly * Cleanup query lookup for aggregations for remote connections * move TSdoc comment * move types * add util func to convert gql AST into string * move aggregations resolver code into a module * simplify query to be composable, better naming for agg query map * aggregation logic placeholder * cleanup * rework logic to use single request and mapping fields, instead of slicing central query --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolve stats (#883) * add resolve aggregation function with tests * add basic aggregation TS types * cleanup * improve comments --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolver responses (#884) * add documentName to config and use in remote connection gql queries * move fulfilled promise type guard to util and make it a generic * resolve aggregations from network query results' * return resolved response object * PR feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix network agg resolution (#885) * add Bucket gql object type * text change, move func outside of nested func * fix resolved aggregations overriding * Update modules/server/src/network/aggregations/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Response data & batching requests (#887) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * remove log --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed Search request timeouts (#889) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * add GQL request timeout with config option and default value --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Reorg connection (#891) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Accumulator pipeline (#893) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed total hits (#895) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * fix logging --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * feat/agg acc tests (#897) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed numeric agg resolution (#898) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test * add test + expand types * rework resolution iteration and add numericAggregations resolver * add typename to types * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * use Math methods (#900) Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Individual node config query fields (#899) * use more detailed NodeConfig object to store available agg types * filter requested aggs with available aggs * add available aggs to node connection resolver type defs * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/aggregate not available (#903) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/filters (#904) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Minor comment updates (#905) * improve comment * improve comment --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed search cleanup typings (#906) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * address feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix broken build (#907) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * fix gql query creation test * query back to normal test * disables tests, adds comment * fix merged file --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * add agg mode env config (#908) * add agg mode env config * env config to strip out section of gql schema, typedef + resolver * prettier * prettier * Update modules/server/.env.schema Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionResolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * alphabetize * move up import * change AGG_ONLY_MODE to enabled DOCUMENT_HITS * add empty line at EOF * add comment * fix typo * fix inverted logic --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feature/threshold calc (#909) * add conditional prop to schema * conditional schema field * conditional add dataMasking schema fields * add data masking logic * add agg only conditional to resolvers * clarify todo * get optional aggregations field and values for hits resolution * add mask func stub * fix missing prop from spread * masking logic * conditional resolve hits * move thresholding higher on resolver chain * add falsey belowThreshold value instead of null * data mask threshold env var * update wrong process.env path * seperate resolver creation from routing * check for undefiend value in lookup * clarify comment * add threshold value explanation * move types to common file * typing --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * multiple node with data thresholding (#912) * fix build error * single endpoint * fix GQL type name collisions * move data mask threshold env. ensure data masking applies even if hits.total is not queried * change belowThreshold to relation object * surface api errors to axios responses * add relation logic and agg merging for network search * read data mask threshold min from config * check for valid env val * remove unused func * fix TS build errors * fix schema merge error --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search cleanup (#920) * add placeholder * Adjust config template example and file * remove unused arranger constructor param * reorder constants file, parse env var * update arranger network config type * type, add gql server types * graphqlRoutes, remove unused import, export func * resolver creation, improve TS usage, split functionality into distinct files, improve usage' * add surrounding brackets for func * cleanup schema resolvers --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search networked cleanup (#921) * cleanup utils * reorg types, decompose file, improve comments * clean up types * cleanup types, redundant code and fix a couple of bad merge files * fix enum * cleanup test types * type fix * explicit type import, use path alias --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Update modules/server/src/app.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * make horrible ajax.ts console logging somewhat useful * improve release process * fix paths and imports for new build config * update tests to todos * fix some imports * fix build issues with lodash and missing config flag * fix paths * comment out test files, broken with tsx vs jest * fix path * fix path * improve release process * allow toolbar options customization * fix setsIndex conflict resolutioon misses * default for ENABLE_DOCUMENT_HITS env flag is true * default enable document hits to true * add DATA_MASK_MIN_THRESHOLD env var as pass through var * debug * debug * debug * add default param value * debug * string util important fix * fix for tests * Add comment re data masking * remove debug log * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/masking.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolveHitsFromAggs.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * remove specific NetworkAggError class * fix error response type narrow * missing param * add explanation comment for aggs resolver, gql info lookup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com> * initial cleanup * remove remaining data masking config + calculations * redo remove data masking relation ref * remove leftover env vars --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com>
* Feature/federated (#926) * Network aggregation search - Initial Config (#876) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feat/#873 retrieve remote schemas (#877) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * small feedback fixes * add typings + additional info in comments * add better errors * remove unused func. renaming * add return type * remove assertion. add TS filter * change nulls to undefined * change explicit undefined to optional ts * add tsdoc comment * change var type to loose record instead of uknown * if else TS * if else TS * change to nested promise return --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Pr feedback - doc updates (#879) * update tsdoc * update tsdoc --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/#874 merge schemas (#878) * initial config * add network to config template. add default values to base.json * add schema merge placeholders * add conditional to graphql route gen for env flag * throw error on invalid json parse eg. empty file * rename type * add vscode debug file to gitignore * add gql client lib * change gql lib * Update modules/server/README.md Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add fetch field * rename field to documentType * Update modules/server/configTemplates/base.json Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/config/utils/getConfigFromFiles.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update types.ts * Update README.md * add ignore to gitignore * rename fields, add nesting * remove env config to enable federated search * remove env config to enable federated search * remove flag from env schema * correct schema retrieval * fix GQL obj wrapping on schema construction * example * cleanup * cleanup gql file * cleanup packages * fix import * basic merge schema * cleanup comment * exclusuions * add introspection query type predicate * add tsdoc * remove local folder ignore from project.gitignore * remove unused util * renaming * break up query promise and results * Update .gitignore Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * use axios * axios network check, doesn't throw like fetch * update packages for typedefs * change fetch config to axios config * Update modules/server/src/network/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * add logs to thrown errors * fix merge conflict * add test watch command with basic test * tests * Fix type. narrow scope. hoist filtering * remove debug code. add comment * update comments + add type assertion * add comments * remove redundant options arg for schema merginging * seperate test utils and fixture from main file * seperate test utils and fixture from main file * tests, cleanup, extra tests, split responsibility --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Add core functionality for remote connection resolvers (#880) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/agg resolver (#881) * add remote connection resolver func * adds resolver functionality for remote connection details, including health check to gql server * add types, improve comment, move into remote connection resolver into distinct file * remove unused imports * add utility type. use utility objectValues type for type values from const * fix type lookup in gql object * add comments * PR feedback: comment blocks * additional remote connection node data resolver response data * create typeDefs file for remote connection data * move typeDefs for aggregations * add resolver map, rename remote connection resolver file * cleanup imports and creation of schema, imorts from distinct resolver and typedef files * rename and fix type on Remote Connection gql resp * remove ping healthcheck for nodes on resolver * pass correct object to get available types * add temp gql server for network aggs * add status check * fetchGQL helper func working with axios * rework dynamic network search types based on remote connections types * use __type query instead of full introspectionQuery * remove old code * add single typeDef export, responsible for merging remote connection and aggregation types * correct structure for merging typedefs with other typedefs, merge on Query * get all types from remote connections once * agg resolver structuring * add aggregations resolvers * add agg resolver network calls * rename and narrow NetworkType type across files * add common file * add network queries file * rename var * query remote connections * move query * add comments * add supported and unsupported aggregations with test * ts-jest disable diagnostics to run tests without all types passing * rework connection status property to do ping healthcehck * types cleanup across files * improved typing for reducer in field types, covering supported and unsupported aggregates * tighten and rename types * type cleanup and comments * add explicit name mapping * rename type correctly * Cleanup query lookup for aggregations for remote connections * move TSdoc comment * move types * add util func to convert gql AST into string * move aggregations resolver code into a module * simplify query to be composable, better naming for agg query map * aggregation logic placeholder * cleanup * rework logic to use single request and mapping fields, instead of slicing central query --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolve stats (#883) * add resolve aggregation function with tests * add basic aggregation TS types * cleanup * improve comments --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/resolver responses (#884) * add documentName to config and use in remote connection gql queries * move fulfilled promise type guard to util and make it a generic * resolve aggregations from network query results' * return resolved response object * PR feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix network agg resolution (#885) * add Bucket gql object type * text change, move func outside of nested func * fix resolved aggregations overriding * Update modules/server/src/network/aggregations/index.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Response data & batching requests (#887) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * remove log --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed Search request timeouts (#889) * move response object creation into module * change type structure for gql server * change resolver code based on new gql type * adjust agg type gql resolved response * add http resp helpers * change resolveAggregation code to batch processing * add nodeInfo to resolver * change resolver method to reducer with mutations * add type * fix typedef * format response object * comments and cleanup * add GQL request timeout with config option and default value --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Reorg connection (#891) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Accumulator pipeline (#893) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed total hits (#895) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * fix logging --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * feat/agg acc tests (#897) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed numeric agg resolution (#898) * change resolver code based on new gql type * comments and cleanup * break up main entry point into two modules, one for querying and one for field processing * rename network config type, remove supported aggs from type * type cleanup * only send network queries with original query fields * move gql health check into module * cleanup, renaming types, removing redundant code * add type * fix merged conflict * adds full stop. fixes comment typo * fix pipeline code, move accumulator into class * handle unavailable node * check undefined in Success * add note * rename poorly named field * add comment: * rename file * http response success status as const * renamed AggAccumulator file * clean up types, change loose object to use record, fix any typings * add total hits to query string * cleanup field, param order * add test * rename RemoteAggregations type * add hits TS type * fix env toggle for network fed search * renaming, update types * documentName and documentType are the same for functionality * return unique fields * fix accumulator resolve for new input shape * tighten types. add Hits resolution * rename count to hits * add first test for requested fields * tighten types and error checking * fix up types and comments, resolvers code fix * update aggregation test * add test + expand types * rework resolution iteration and add numericAggregations resolver * add typename to types * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * use Math methods (#900) Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Individual node config query fields (#899) * use more detailed NodeConfig object to store available agg types * filter requested aggs with available aggs * add available aggs to node connection resolver type defs * cleanup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/aggregate not available (#903) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/filters (#904) * add TSdoc example * add TSdoc comment * pass more data into Aggs accumulator * add schema map for query time * rework agg accumulator to add empty agg to bucket if aggregation not available for node * fix test * clean up logic to account for only Aggregations type * account for empty aggs field in node query * cleanup * disabled network Agg tests * add args to Aggregations gql typedef * add args to network field * pass gql resolvers args to query creation * remove console log * add include missing: * add overture sqon builder dep * move up type * add SQON check and args type * rename file * check for SQON correctness but pass ordinary object through on success * add comment * Update modules/server/src/network/utils/sqon.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Minor comment updates (#905) * improve comment * improve comment --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fed search cleanup typings (#906) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * address feedback --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Fix broken build (#907) * remove unsued type defs * add type watch script * fix import * fix import * type an ANY type * fix agg resolver typing * ts no-check for test file * fix Agg Accumulator types * type response formatter * fix test file type * fix gql query creation test * query back to normal test * disables tests, adds comment * fix merged file --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * add agg mode env config (#908) * add agg mode env config * env config to strip out section of gql schema, typedef + resolver * prettier * prettier * Update modules/server/.env.schema Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionResolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * alphabetize * move up import * change AGG_ONLY_MODE to enabled DOCUMENT_HITS * add empty line at EOF * add comment * fix typo * fix inverted logic --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Feature/threshold calc (#909) * add conditional prop to schema * conditional schema field * conditional add dataMasking schema fields * add data masking logic * add agg only conditional to resolvers * clarify todo * get optional aggregations field and values for hits resolution * add mask func stub * fix missing prop from spread * masking logic * conditional resolve hits * move thresholding higher on resolver chain * add falsey belowThreshold value instead of null * data mask threshold env var * update wrong process.env path * seperate resolver creation from routing * check for undefiend value in lookup * clarify comment * add threshold value explanation * move types to common file * typing --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * multiple node with data thresholding (#912) * fix build error * single endpoint * fix GQL type name collisions * move data mask threshold env. ensure data masking applies even if hits.total is not queried * change belowThreshold to relation object * surface api errors to axios responses * add relation logic and agg merging for network search * read data mask threshold min from config * check for valid env val * remove unused func * fix TS build errors * fix schema merge error --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search cleanup (#920) * add placeholder * Adjust config template example and file * remove unused arranger constructor param * reorder constants file, parse env var * update arranger network config type * type, add gql server types * graphqlRoutes, remove unused import, export func * resolver creation, improve TS usage, split functionality into distinct files, improve usage' * add surrounding brackets for func * cleanup schema resolvers --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Feat/fed search networked cleanup (#921) * cleanup utils * reorg types, decompose file, improve comments * clean up types * cleanup types, redundant code and fix a couple of bad merge files * fix enum * cleanup test types * type fix * explicit type import, use path alias --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> * Update modules/server/src/app.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * make horrible ajax.ts console logging somewhat useful * improve release process * fix paths and imports for new build config * update tests to todos * fix some imports * fix build issues with lodash and missing config flag * fix paths * comment out test files, broken with tsx vs jest * fix path * fix path * improve release process * allow toolbar options customization * fix setsIndex conflict resolutioon misses * default for ENABLE_DOCUMENT_HITS env flag is true * default enable document hits to true * add DATA_MASK_MIN_THRESHOLD env var as pass through var * debug * debug * debug * add default param value * debug * string util important fix * fix for tests * Add comment re data masking * remove debug log * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/createConnectionTypeDefs.js Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/masking.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolveHitsFromAggs.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * Update modules/server/src/mapping/resolvers.ts Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> * remove specific NetworkAggError class * fix error response type narrow * missing param * add explanation comment for aggs resolver, gql info lookup --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com> * initial cleanup * remove remaining data masking config + calculations * add network agg property from env * main conflicts * read directly from config --------- Co-authored-by: Ciaran Schutte <ciaranschutte@oicr.on.ca> Co-authored-by: Anders Richardsson <2107110+justincorrigible@users.noreply.github.com> Co-authored-by: Anders Richardsson <2107110+caravinci@users.noreply.github.com>
networkfield, this is a Query top level field and the args can be passed on through to node query creationaggregationsas a subfield of network