@memberjunction/server 0.9.74 → 0.9.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,121 +1,121 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
28
- var __importDefault = (this && this.__importDefault) || function (mod) {
29
- return (mod && mod.__esModule) ? mod : { "default": mod };
30
- };
31
- Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.serve = exports.configInfo = exports.NewUserBase = exports.MaxLength = void 0;
33
- const dotenv_1 = __importDefault(require("dotenv"));
34
- dotenv_1.default.config();
35
- const express4_1 = require("@apollo/server/express4");
36
- const schema_1 = require("@graphql-tools/schema");
37
- const core_1 = require("@memberjunction/core");
38
- const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
39
- const body_parser_1 = require("body-parser");
40
- const cors_1 = __importDefault(require("cors"));
41
- const express_1 = __importDefault(require("express"));
42
- const fast_glob_1 = require("fast-glob");
43
- const node_path_1 = require("node:path");
44
- const ws_1 = require("graphql-ws/lib/use/ws");
45
- const node_http_1 = require("node:http");
46
- require("reflect-metadata");
47
- const rxjs_1 = require("rxjs");
48
- const type_graphql_1 = require("type-graphql");
49
- const typeorm_1 = require("typeorm");
50
- const ws_2 = require("ws");
51
- const apolloServer_1 = __importDefault(require("./apolloServer"));
52
- const config_1 = require("./config");
53
- const context_1 = require("./context");
54
- const directives_1 = require("./directives");
55
- const orm_1 = __importDefault(require("./orm"));
56
- const cacheRefreshInterval = config_1.configInfo.databaseSettings.metadataCacheRefreshInterval;
57
- var class_validator_1 = require("class-validator");
58
- Object.defineProperty(exports, "MaxLength", { enumerable: true, get: function () { return class_validator_1.MaxLength; } });
59
- __exportStar(require("type-graphql"), exports);
60
- var newUsers_1 = require("./auth/newUsers");
61
- Object.defineProperty(exports, "NewUserBase", { enumerable: true, get: function () { return newUsers_1.NewUserBase; } });
62
- var config_2 = require("./config");
63
- Object.defineProperty(exports, "configInfo", { enumerable: true, get: function () { return config_2.configInfo; } });
64
- __exportStar(require("./directives"), exports);
65
- __exportStar(require("./types"), exports);
66
- __exportStar(require("./entitySubclasses/userViewEntity.server"), exports);
67
- const serve = async (resolverPaths) => {
68
- const replaceBackslashes = node_path_1.sep === '\\';
69
- const paths = resolverPaths.flatMap((path) => (0, fast_glob_1.globSync)(replaceBackslashes ? path.replace(/\\/g, '/') : (0, fast_glob_1.globSync)(path)));
70
- if (paths.length === 0) {
71
- console.warn(`No resolvers found in ${resolverPaths.join(', ')}`);
72
- console.log({ resolverPaths, paths, cwd: process.cwd() });
73
- }
74
- const dataSource = new typeorm_1.DataSource((0, orm_1.default)(paths));
75
- const setupComplete$ = new rxjs_1.ReplaySubject(1);
76
- dataSource
77
- .initialize()
78
- .then(async () => {
79
- const config = new sqlserver_dataprovider_1.SQLServerProviderConfigData(dataSource, '', config_1.mj_core_schema, cacheRefreshInterval);
80
- await (0, sqlserver_dataprovider_1.setupSQLServerClient)(config);
81
- const md = new core_1.Metadata();
82
- console.log(`Data Source has been initialized. ${md?.Entities ? md.Entities.length : 0} entities loaded.`);
83
- setupComplete$.next(true);
84
- })
85
- .catch((err) => {
86
- console.error('Error during Data Source initialization', err);
87
- });
88
- const dynamicModules = await Promise.all(paths.map((modulePath) => { var _a; return _a = modulePath.replace(/\.[jt]s$/, ''), Promise.resolve().then(() => __importStar(require(_a))); }));
89
- const resolvers = dynamicModules.flatMap((module) => Object.values(module).filter((value) => typeof value === 'function'));
90
- const schema = directives_1.publicDirective.transformer((0, schema_1.mergeSchemas)({
91
- schemas: [
92
- (0, type_graphql_1.buildSchemaSync)({
93
- resolvers,
94
- validate: false,
95
- scalarsMap: [{ type: Date, scalar: type_graphql_1.GraphQLTimestamp }],
96
- emitSchemaFile: config_1.websiteRunFromPackage !== 1,
97
- }),
98
- ],
99
- typeDefs: [directives_1.publicDirective.typeDefs],
100
- }));
101
- const app = (0, express_1.default)();
102
- const httpServer = (0, node_http_1.createServer)(app);
103
- const webSocketServer = new ws_2.WebSocketServer({ server: httpServer, path: config_1.graphqlRootPath });
104
- const serverCleanup = (0, ws_1.useServer)({
105
- schema,
106
- context: async ({ connectionParams }) => {
107
- const userPayload = await (0, context_1.getUserPayload)(String(connectionParams?.Authorization), undefined, dataSource);
108
- return { userPayload };
109
- },
110
- }, webSocketServer);
111
- const apolloServer = (0, apolloServer_1.default)({ schema }, { httpServer, serverCleanup });
112
- await apolloServer.start();
113
- app.use(config_1.graphqlRootPath, (0, cors_1.default)(), (0, body_parser_1.json)(), (0, express4_1.expressMiddleware)(apolloServer, {
114
- context: (0, context_1.contextFunction)({ setupComplete$, dataSource }),
115
- }));
116
- await new Promise((resolve) => httpServer.listen({ port: config_1.graphqlPort }, resolve));
117
- console.log(`🚀 Server ready at http://localhost:${config_1.graphqlPort}/`);
118
- };
119
- exports.serve = serve;
120
- exports.default = exports.serve;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.serve = exports.configInfo = exports.NewUserBase = exports.MaxLength = void 0;
33
+ const dotenv_1 = __importDefault(require("dotenv"));
34
+ dotenv_1.default.config();
35
+ const express4_1 = require("@apollo/server/express4");
36
+ const schema_1 = require("@graphql-tools/schema");
37
+ const core_1 = require("@memberjunction/core");
38
+ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
39
+ const body_parser_1 = require("body-parser");
40
+ const cors_1 = __importDefault(require("cors"));
41
+ const express_1 = __importDefault(require("express"));
42
+ const fast_glob_1 = require("fast-glob");
43
+ const node_path_1 = require("node:path");
44
+ const ws_1 = require("graphql-ws/lib/use/ws");
45
+ const node_http_1 = require("node:http");
46
+ require("reflect-metadata");
47
+ const rxjs_1 = require("rxjs");
48
+ const type_graphql_1 = require("type-graphql");
49
+ const typeorm_1 = require("typeorm");
50
+ const ws_2 = require("ws");
51
+ const apolloServer_1 = __importDefault(require("./apolloServer"));
52
+ const config_1 = require("./config");
53
+ const context_1 = require("./context");
54
+ const directives_1 = require("./directives");
55
+ const orm_1 = __importDefault(require("./orm"));
56
+ const cacheRefreshInterval = config_1.configInfo.databaseSettings.metadataCacheRefreshInterval;
57
+ var class_validator_1 = require("class-validator");
58
+ Object.defineProperty(exports, "MaxLength", { enumerable: true, get: function () { return class_validator_1.MaxLength; } });
59
+ __exportStar(require("type-graphql"), exports);
60
+ var newUsers_1 = require("./auth/newUsers");
61
+ Object.defineProperty(exports, "NewUserBase", { enumerable: true, get: function () { return newUsers_1.NewUserBase; } });
62
+ var config_2 = require("./config");
63
+ Object.defineProperty(exports, "configInfo", { enumerable: true, get: function () { return config_2.configInfo; } });
64
+ __exportStar(require("./directives"), exports);
65
+ __exportStar(require("./types"), exports);
66
+ __exportStar(require("./entitySubclasses/userViewEntity.server"), exports);
67
+ const serve = async (resolverPaths) => {
68
+ const replaceBackslashes = node_path_1.sep === '\\';
69
+ const paths = resolverPaths.flatMap((path) => (0, fast_glob_1.globSync)(replaceBackslashes ? path.replace(/\\/g, '/') : (0, fast_glob_1.globSync)(path)));
70
+ if (paths.length === 0) {
71
+ console.warn(`No resolvers found in ${resolverPaths.join(', ')}`);
72
+ console.log({ resolverPaths, paths, cwd: process.cwd() });
73
+ }
74
+ const dataSource = new typeorm_1.DataSource((0, orm_1.default)(paths));
75
+ const setupComplete$ = new rxjs_1.ReplaySubject(1);
76
+ dataSource
77
+ .initialize()
78
+ .then(async () => {
79
+ const config = new sqlserver_dataprovider_1.SQLServerProviderConfigData(dataSource, '', config_1.mj_core_schema, cacheRefreshInterval);
80
+ await (0, sqlserver_dataprovider_1.setupSQLServerClient)(config);
81
+ const md = new core_1.Metadata();
82
+ console.log(`Data Source has been initialized. ${md?.Entities ? md.Entities.length : 0} entities loaded.`);
83
+ setupComplete$.next(true);
84
+ })
85
+ .catch((err) => {
86
+ console.error('Error during Data Source initialization', err);
87
+ });
88
+ const dynamicModules = await Promise.all(paths.map((modulePath) => { var _a; return _a = modulePath.replace(/\.[jt]s$/, ''), Promise.resolve().then(() => __importStar(require(_a))); }));
89
+ const resolvers = dynamicModules.flatMap((module) => Object.values(module).filter((value) => typeof value === 'function'));
90
+ const schema = directives_1.publicDirective.transformer((0, schema_1.mergeSchemas)({
91
+ schemas: [
92
+ (0, type_graphql_1.buildSchemaSync)({
93
+ resolvers,
94
+ validate: false,
95
+ scalarsMap: [{ type: Date, scalar: type_graphql_1.GraphQLTimestamp }],
96
+ emitSchemaFile: config_1.websiteRunFromPackage !== 1,
97
+ }),
98
+ ],
99
+ typeDefs: [directives_1.publicDirective.typeDefs],
100
+ }));
101
+ const app = (0, express_1.default)();
102
+ const httpServer = (0, node_http_1.createServer)(app);
103
+ const webSocketServer = new ws_2.WebSocketServer({ server: httpServer, path: config_1.graphqlRootPath });
104
+ const serverCleanup = (0, ws_1.useServer)({
105
+ schema,
106
+ context: async ({ connectionParams }) => {
107
+ const userPayload = await (0, context_1.getUserPayload)(String(connectionParams?.Authorization), undefined, dataSource);
108
+ return { userPayload };
109
+ },
110
+ }, webSocketServer);
111
+ const apolloServer = (0, apolloServer_1.default)({ schema }, { httpServer, serverCleanup });
112
+ await apolloServer.start();
113
+ app.use(config_1.graphqlRootPath, (0, cors_1.default)(), (0, body_parser_1.json)(), (0, express4_1.expressMiddleware)(apolloServer, {
114
+ context: (0, context_1.contextFunction)({ setupComplete$, dataSource }),
115
+ }));
116
+ await new Promise((resolve) => httpServer.listen({ port: config_1.graphqlPort }, resolve));
117
+ console.log(`🚀 Server ready at http://localhost:${config_1.graphqlPort}/`);
118
+ };
119
+ exports.serve = serve;
120
+ exports.default = exports.serve;
121
121
  //# sourceMappingURL=index.js.map
package/dist/orm.js CHANGED
@@ -1,34 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const config_1 = require("./config");
4
- const orm = (entities) => {
5
- const ormConfig = {
6
- type: 'mssql',
7
- entities,
8
- logging: false,
9
- host: config_1.dbHost,
10
- port: config_1.dbPort,
11
- username: config_1.dbUsername,
12
- password: config_1.dbPassword,
13
- database: config_1.dbDatabase,
14
- synchronize: false,
15
- requestTimeout: config_1.configInfo.databaseSettings.requestTimeout,
16
- connectionTimeout: config_1.configInfo.databaseSettings.connectionTimeout,
17
- options: {}
18
- };
19
- if (config_1.dbInstanceName !== null && config_1.dbInstanceName !== undefined && config_1.dbInstanceName.trim().length > 0) {
20
- ormConfig.options = {
21
- ...ormConfig.options,
22
- instanceName: config_1.dbInstanceName
23
- };
24
- }
25
- if (config_1.dbTrustServerCertificate !== null && config_1.dbTrustServerCertificate !== undefined) {
26
- ormConfig.options = {
27
- ...ormConfig.options,
28
- trustServerCertificate: config_1.dbTrustServerCertificate
29
- };
30
- }
31
- return ormConfig;
32
- };
33
- exports.default = orm;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config_1 = require("./config");
4
+ const orm = (entities) => {
5
+ const ormConfig = {
6
+ type: 'mssql',
7
+ entities,
8
+ logging: false,
9
+ host: config_1.dbHost,
10
+ port: config_1.dbPort,
11
+ username: config_1.dbUsername,
12
+ password: config_1.dbPassword,
13
+ database: config_1.dbDatabase,
14
+ synchronize: false,
15
+ requestTimeout: config_1.configInfo.databaseSettings.requestTimeout,
16
+ connectionTimeout: config_1.configInfo.databaseSettings.connectionTimeout,
17
+ options: {}
18
+ };
19
+ if (config_1.dbInstanceName !== null && config_1.dbInstanceName !== undefined && config_1.dbInstanceName.trim().length > 0) {
20
+ ormConfig.options = {
21
+ ...ormConfig.options,
22
+ instanceName: config_1.dbInstanceName
23
+ };
24
+ }
25
+ if (config_1.dbTrustServerCertificate !== null && config_1.dbTrustServerCertificate !== undefined) {
26
+ ormConfig.options = {
27
+ ...ormConfig.options,
28
+ trustServerCertificate: config_1.dbTrustServerCertificate
29
+ };
30
+ }
31
+ return ormConfig;
32
+ };
33
+ exports.default = orm;
34
34
  //# sourceMappingURL=orm.js.map
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,75 +1,75 @@
1
- {
2
- "name": "@memberjunction/server",
3
- "version": "0.9.74",
4
- "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
- "main": "dist/index.js",
6
- "types": "src/index.ts",
7
- "author": "MemberJunction.com",
8
- "license": "ISC",
9
- "scripts": {
10
- "clean": "rimraf dist",
11
- "build": "rimraf dist && tsc",
12
- "watch": "tsc -w",
13
- "test": "echo \"Error: no test specified\" && exit 1",
14
- "lint:eslint": "eslint \"**/*.{ts,js,}\" --max-warnings=0",
15
- "lint:tsc": "tsc --noemit",
16
- "lint": "concurrently \"npm:lint:eslint\" \"npm:lint:tsc\"",
17
- "pretty": "prettier --write \"**/*.{ts,js,}\"",
18
- "codegen": "cpy --flat ../codegen/output/entities/*.ts src/entities",
19
- "postcodegen": "npm run pretty"
20
- },
21
- "dependencies": {
22
- "@apollo/server": "^4.9.1",
23
- "@graphql-tools/utils": "^10.0.1",
24
- "@memberjunction/ai": "^0.9.79",
25
- "@memberjunction/core": "^0.9.87",
26
- "@memberjunction/core-entities": "^0.9.58",
27
- "@memberjunction/global": "^0.9.90",
28
- "@memberjunction/queue": "^0.9.80",
29
- "@memberjunction/sqlserver-dataprovider": "^0.9.82",
30
- "@types/axios": "^0.14.0",
31
- "@types/cors": "^2.8.13",
32
- "@types/jsonwebtoken": "^8.5.9",
33
- "@types/node": "^18.11.14",
34
- "@types/ws": "^8.5.5",
35
- "axios": "^1.4.0",
36
- "body-parser": "^1.20.2",
37
- "class-validator": "^0.14.0",
38
- "cors": "^2.8.5",
39
- "dotenv": "^16.0.3",
40
- "env-var": "^7.3.0",
41
- "express": "^4.18.2",
42
- "fast-glob": "^3.3.1",
43
- "graphql": "^16.8.0",
44
- "graphql-ws": "^5.14.0",
45
- "jsonwebtoken": "^8.5.1",
46
- "jwks-rsa": "^3.0.0",
47
- "lru-cache": "^10.0.0",
48
- "mssql": "^9.1.1",
49
- "reflect-metadata": "^0.1.13",
50
- "rxjs": "^7.8.1",
51
- "type-graphql": "^2.0.0-beta.3",
52
- "typedi": "^0.10.0",
53
- "typeorm": "^0.3.17",
54
- "ws": "^8.13.0",
55
- "zod": "^3.22.4"
56
- },
57
- "devDependencies": {
58
- "@typescript-eslint/eslint-plugin": "^5.46.1",
59
- "@typescript-eslint/parser": "^5.46.1",
60
- "concurrently": "^7.6.0",
61
- "cpy-cli": "^4.2.0",
62
- "eslint": "^8.29.0",
63
- "eslint-config-airbnb": "^19.0.4",
64
- "eslint-config-prettier": "^8.5.0",
65
- "eslint-import-resolver-typescript": "^3.5.2",
66
- "eslint-plugin-import": "^2.26.0",
67
- "eslint-plugin-jsx-a11y": "^6.6.1",
68
- "eslint-plugin-prettier": "^4.2.1",
69
- "prettier": "^2.8.1",
70
- "rimraf": "^4.4.0",
71
- "ts-node": "^10.9.1",
72
- "ts-node-dev": "^2.0.0",
73
- "typescript": "^4.9.4"
74
- }
75
- }
1
+ {
2
+ "name": "@memberjunction/server",
3
+ "version": "0.9.75",
4
+ "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
+ "main": "dist/index.js",
6
+ "types": "src/index.ts",
7
+ "author": "MemberJunction.com",
8
+ "license": "ISC",
9
+ "scripts": {
10
+ "clean": "rimraf dist",
11
+ "build": "rimraf dist && tsc",
12
+ "watch": "tsc -w",
13
+ "test": "echo \"Error: no test specified\" && exit 1",
14
+ "lint:eslint": "eslint \"**/*.{ts,js,}\" --max-warnings=0",
15
+ "lint:tsc": "tsc --noemit",
16
+ "lint": "concurrently \"npm:lint:eslint\" \"npm:lint:tsc\"",
17
+ "pretty": "prettier --write \"**/*.{ts,js,}\"",
18
+ "codegen": "cpy --flat ../codegen/output/entities/*.ts src/entities",
19
+ "postcodegen": "npm run pretty"
20
+ },
21
+ "dependencies": {
22
+ "@apollo/server": "^4.9.1",
23
+ "@graphql-tools/utils": "^10.0.1",
24
+ "@memberjunction/ai": "^0.9.79",
25
+ "@memberjunction/core": "^0.9.87",
26
+ "@memberjunction/core-entities": "^0.9.58",
27
+ "@memberjunction/global": "^0.9.90",
28
+ "@memberjunction/queue": "^0.9.80",
29
+ "@memberjunction/sqlserver-dataprovider": "^0.9.82",
30
+ "@types/axios": "^0.14.0",
31
+ "@types/cors": "^2.8.13",
32
+ "@types/jsonwebtoken": "^8.5.9",
33
+ "@types/node": "^18.11.14",
34
+ "@types/ws": "^8.5.5",
35
+ "axios": "^1.4.0",
36
+ "body-parser": "^1.20.2",
37
+ "class-validator": "^0.14.0",
38
+ "cors": "^2.8.5",
39
+ "dotenv": "^16.0.3",
40
+ "env-var": "^7.3.0",
41
+ "express": "^4.18.2",
42
+ "fast-glob": "^3.3.1",
43
+ "graphql": "^16.8.0",
44
+ "graphql-ws": "^5.14.0",
45
+ "jsonwebtoken": "^8.5.1",
46
+ "jwks-rsa": "^3.0.0",
47
+ "lru-cache": "^10.0.0",
48
+ "mssql": "^9.1.1",
49
+ "reflect-metadata": "^0.1.13",
50
+ "rxjs": "^7.8.1",
51
+ "type-graphql": "2.0.0-beta.3",
52
+ "typedi": "^0.10.0",
53
+ "typeorm": "^0.3.17",
54
+ "ws": "^8.13.0",
55
+ "zod": "^3.22.4"
56
+ },
57
+ "devDependencies": {
58
+ "@typescript-eslint/eslint-plugin": "^5.46.1",
59
+ "@typescript-eslint/parser": "^5.46.1",
60
+ "concurrently": "^7.6.0",
61
+ "cpy-cli": "^4.2.0",
62
+ "eslint": "^8.29.0",
63
+ "eslint-config-airbnb": "^19.0.4",
64
+ "eslint-config-prettier": "^8.5.0",
65
+ "eslint-import-resolver-typescript": "^3.5.2",
66
+ "eslint-plugin-import": "^2.26.0",
67
+ "eslint-plugin-jsx-a11y": "^6.6.1",
68
+ "eslint-plugin-prettier": "^4.2.1",
69
+ "prettier": "^2.8.1",
70
+ "rimraf": "^4.4.0",
71
+ "ts-node": "^10.9.1",
72
+ "ts-node-dev": "^2.0.0",
73
+ "typescript": "^4.9.4"
74
+ }
75
+ }
@@ -1,54 +1,54 @@
1
- import { ApolloServerPlugin } from '@apollo/server';
2
- import { DataSource } from 'typeorm';
3
- import { AppContext } from '../types';
4
-
5
- export const TransactionPlugin: ApolloServerPlugin<AppContext> = {
6
- async requestDidStart(requestContext) {
7
- const start = Date.now();
8
- const query = requestContext.request.query || '';
9
- const isMutation = /^\s*mutation\b/i.test(query);
10
-
11
- if (!isMutation) {
12
- return;
13
- }
14
-
15
- // Start transaction, one or more mutations. If it is just one mutation, this trans wrapper isn't really needed
16
- // but there's no good way to know if it's one or more mutations, so we just start a transaction anyway and it isn't terribly expensive
17
- // to do so with SQL Server anyway.
18
- const dataSource: DataSource = requestContext.contextValue.dataSource;
19
- const queryRunner = dataSource.createQueryRunner();
20
-
21
- requestContext.contextValue.queryRunner = queryRunner;
22
- console.log('Starting transaction wrapper, time spent: ', Date.now() - start, 'ms ');
23
- await queryRunner.startTransaction();
24
-
25
- return {
26
- executionDidStart: async () => {
27
- return {
28
- executionDidEnd: async (err) => {
29
- try {
30
- if (err) {
31
- console.log(
32
- 'Error in transaction, rolling back, time spent: ',
33
- Date.now() - start,
34
- 'ms '
35
- );
36
- console.error('Rolling back transaction', err);
37
- await queryRunner.rollbackTransaction();
38
- } else {
39
- console.log('Committing transaction, time spent: ', Date.now() - start, 'ms ');
40
- await queryRunner.commitTransaction();
41
- }
42
- } catch (execErr) {
43
- console.log('Execution Error, time spent: ', Date.now() - start, 'ms ');
44
- console.error(execErr);
45
- } finally {
46
- await queryRunner.release();
47
- console.log('Transaction complete, time spent: ', Date.now() - start, 'ms ');
48
- }
49
- },
50
- };
51
- },
52
- };
53
- },
54
- };
1
+ import { ApolloServerPlugin } from '@apollo/server';
2
+ import { DataSource } from 'typeorm';
3
+ import { AppContext } from '../types';
4
+
5
+ export const TransactionPlugin: ApolloServerPlugin<AppContext> = {
6
+ async requestDidStart(requestContext) {
7
+ const start = Date.now();
8
+ const query = requestContext.request.query || '';
9
+ const isMutation = /^\s*mutation\b/i.test(query);
10
+
11
+ if (!isMutation) {
12
+ return;
13
+ }
14
+
15
+ // Start transaction, one or more mutations. If it is just one mutation, this trans wrapper isn't really needed
16
+ // but there's no good way to know if it's one or more mutations, so we just start a transaction anyway and it isn't terribly expensive
17
+ // to do so with SQL Server anyway.
18
+ const dataSource: DataSource = requestContext.contextValue.dataSource;
19
+ const queryRunner = dataSource.createQueryRunner();
20
+
21
+ requestContext.contextValue.queryRunner = queryRunner;
22
+ console.log('Starting transaction wrapper, time spent: ', Date.now() - start, 'ms ');
23
+ await queryRunner.startTransaction();
24
+
25
+ return {
26
+ executionDidStart: async () => {
27
+ return {
28
+ executionDidEnd: async (err) => {
29
+ try {
30
+ if (err) {
31
+ console.log(
32
+ 'Error in transaction, rolling back, time spent: ',
33
+ Date.now() - start,
34
+ 'ms '
35
+ );
36
+ console.error('Rolling back transaction', err);
37
+ await queryRunner.rollbackTransaction();
38
+ } else {
39
+ console.log('Committing transaction, time spent: ', Date.now() - start, 'ms ');
40
+ await queryRunner.commitTransaction();
41
+ }
42
+ } catch (execErr) {
43
+ console.log('Execution Error, time spent: ', Date.now() - start, 'ms ');
44
+ console.error(execErr);
45
+ } finally {
46
+ await queryRunner.release();
47
+ console.log('Transaction complete, time spent: ', Date.now() - start, 'ms ');
48
+ }
49
+ },
50
+ };
51
+ },
52
+ };
53
+ },
54
+ };
@@ -1,34 +1,34 @@
1
- import { ApolloServer, ApolloServerOptions } from '@apollo/server';
2
- import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
3
- import { PubSub } from 'graphql-subscriptions';
4
- import { Disposable } from 'graphql-ws';
5
- import { Server } from 'http';
6
- import { enableIntrospection } from '../config';
7
- import { AppContext } from '../types';
8
- import { TransactionPlugin } from './TransactionPlugin';
9
-
10
- const buildApolloServer = (
11
- configOverride: ApolloServerOptions<AppContext>,
12
- { httpServer, serverCleanup }: { httpServer: Server; serverCleanup: Disposable }
13
- ) =>
14
- new ApolloServer({
15
- csrfPrevention: true,
16
- cache: 'bounded',
17
- plugins: [
18
- ApolloServerPluginDrainHttpServer({ httpServer }),
19
- TransactionPlugin,
20
- {
21
- async serverWillStart() {
22
- return {
23
- async drainServer() {
24
- await serverCleanup.dispose();
25
- },
26
- };
27
- },
28
- },
29
- ],
30
- introspection: enableIntrospection,
31
- ...configOverride,
32
- });
33
-
1
+ import { ApolloServer, ApolloServerOptions } from '@apollo/server';
2
+ import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
3
+ import { PubSub } from 'graphql-subscriptions';
4
+ import { Disposable } from 'graphql-ws';
5
+ import { Server } from 'http';
6
+ import { enableIntrospection } from '../config';
7
+ import { AppContext } from '../types';
8
+ import { TransactionPlugin } from './TransactionPlugin';
9
+
10
+ const buildApolloServer = (
11
+ configOverride: ApolloServerOptions<AppContext>,
12
+ { httpServer, serverCleanup }: { httpServer: Server; serverCleanup: Disposable }
13
+ ) =>
14
+ new ApolloServer({
15
+ csrfPrevention: true,
16
+ cache: 'bounded',
17
+ plugins: [
18
+ ApolloServerPluginDrainHttpServer({ httpServer }),
19
+ TransactionPlugin,
20
+ {
21
+ async serverWillStart() {
22
+ return {
23
+ async drainServer() {
24
+ await serverCleanup.dispose();
25
+ },
26
+ };
27
+ },
28
+ },
29
+ ],
30
+ introspection: enableIntrospection,
31
+ ...configOverride,
32
+ });
33
+
34
34
  export default buildApolloServer;