From fd1ffb9a3c74cbdc22b2beb9f46f2ae1e78ecb7b Mon Sep 17 00:00:00 2001 From: Darrell Warde Date: Wed, 16 Mar 2022 17:03:07 +0100 Subject: [PATCH 1/3] Write details to transaction metadata instead of useragent --- packages/graphql/src/utils/execute.test.ts | 14 -------- packages/graphql/src/utils/execute.ts | 40 ++++++++++++++-------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/packages/graphql/src/utils/execute.test.ts b/packages/graphql/src/utils/execute.test.ts index 3e4998de7f..738f92a7c6 100644 --- a/packages/graphql/src/utils/execute.test.ts +++ b/packages/graphql/src/utils/execute.test.ts @@ -102,12 +102,6 @@ describe("execute", () => { }); expect(executeResult.records).toEqual([{ title }]); - // @ts-ignore - expect(driver._userAgent).toBe(`${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`); - // @ts-ignore - expect(driver._config.userAgent).toBe( - `${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}` - ); }) ); }); @@ -178,10 +172,6 @@ describe("execute", () => { }); expect(executeResult.records).toEqual([{ title }]); - // @ts-ignore - expect(driver._userAgent).toBe(`${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`); - // @ts-ignore - expect(driver._config.userAgent).toBe(`${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`); }); test("one of each query option", async () => { @@ -264,10 +254,6 @@ describe("execute", () => { }); expect(executeResult.records).toEqual([{ title }]); - // @ts-ignore - expect(driver._userAgent).toBe(`${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`); - // @ts-ignore - expect(driver._config.userAgent).toBe(`${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`); }); }); }); diff --git a/packages/graphql/src/utils/execute.ts b/packages/graphql/src/utils/execute.ts index 3bbaf4af66..7274344cf8 100644 --- a/packages/graphql/src/utils/execute.ts +++ b/packages/graphql/src/utils/execute.ts @@ -34,6 +34,7 @@ import { import createAuthParam from "../translate/create-auth-param"; import { Context, DriverConfig } from "../types"; import environment from "../environment"; +import { TransactionConfig } from "neo4j-driver-core"; const debug = Debug(DEBUG_EXECUTE); @@ -67,18 +68,6 @@ async function execute(input: { } } - const userAgent = `${environment.NPM_PACKAGE_NAME}/${environment.NPM_PACKAGE_VERSION}`; - - // @ts-ignore: below - // eslint-disable-next-line no-underscore-dangle - if (input.context.driver?._config) { - // @ts-ignore: (driver >= 4.3) - input.context.driver._config.userAgent = userAgent; // eslint-disable-line no-underscore-dangle - } - - // @ts-ignore: (driver <= 4.2) - input.context.driver._userAgent = userAgent; // eslint-disable-line no-underscore-dangle - const session = input.context.driver.session(sessionParams); // Its really difficult to know when users are using the `auth` param. For Simplicity it better to do the check here @@ -100,9 +89,30 @@ async function execute(input: { try { debug("%s", `About to execute Cypher:\nCypher:\n${cypher}\nParams:\n${JSON.stringify(input.params, null, 2)}`); - const result: QueryResult = await session[ - `${input.defaultAccessMode.toLowerCase()}Transaction` - ]((tx: Transaction) => tx.run(cypher, input.params)); + const app = `${environment.NPM_PACKAGE_NAME}@${environment.NPM_PACKAGE_VERSION}`; + + let result: QueryResult | undefined; + const transactionWork = (tx: Transaction) => tx.run(cypher, input.params); + const transactionConfig: TransactionConfig = { + metadata: { + app, + type: "user-transpiled", + }, + }; + + switch (input.defaultAccessMode) { + case "READ": + result = await session.readTransaction(transactionWork, transactionConfig); + break; + case "WRITE": + result = await session.writeTransaction(transactionWork, transactionConfig); + break; + // no default + } + + if (!result) { + throw new Error("Unable to execute query against Neo4j database"); + } const records = result.records.map((r) => r.toObject()); From 1b16be2fd3088b4ca05a4ad0875aa6647c81832f Mon Sep 17 00:00:00 2001 From: Darrell Warde Date: Wed, 16 Mar 2022 17:06:38 +0100 Subject: [PATCH 2/3] Imports in correct order --- packages/graphql/src/utils/execute.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphql/src/utils/execute.ts b/packages/graphql/src/utils/execute.ts index 7274344cf8..c0dd652fd0 100644 --- a/packages/graphql/src/utils/execute.ts +++ b/packages/graphql/src/utils/execute.ts @@ -18,6 +18,7 @@ */ import { SessionMode, Transaction, QueryResult, Neo4jError } from "neo4j-driver"; +import { TransactionConfig } from "neo4j-driver-core"; import Debug from "debug"; import { Neo4jGraphQLForbiddenError, @@ -34,7 +35,6 @@ import { import createAuthParam from "../translate/create-auth-param"; import { Context, DriverConfig } from "../types"; import environment from "../environment"; -import { TransactionConfig } from "neo4j-driver-core"; const debug = Debug(DEBUG_EXECUTE); From 028bb623ac5cf1afa42d679dafa77117d66447e2 Mon Sep 17 00:00:00 2001 From: Darrell Warde Date: Wed, 16 Mar 2022 17:12:17 +0100 Subject: [PATCH 3/3] Remove unexported type --- packages/graphql/src/utils/execute.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/graphql/src/utils/execute.ts b/packages/graphql/src/utils/execute.ts index c0dd652fd0..e7a6a8f748 100644 --- a/packages/graphql/src/utils/execute.ts +++ b/packages/graphql/src/utils/execute.ts @@ -18,7 +18,6 @@ */ import { SessionMode, Transaction, QueryResult, Neo4jError } from "neo4j-driver"; -import { TransactionConfig } from "neo4j-driver-core"; import Debug from "debug"; import { Neo4jGraphQLForbiddenError, @@ -93,7 +92,7 @@ async function execute(input: { let result: QueryResult | undefined; const transactionWork = (tx: Transaction) => tx.run(cypher, input.params); - const transactionConfig: TransactionConfig = { + const transactionConfig = { metadata: { app, type: "user-transpiled",