@memberjunction/server 0.9.218 → 0.9.220
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/build.log.json +6 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/tokenExpiredError.js +16 -0
- package/dist/auth/tokenExpiredError.js.map +1 -0
- package/dist/context.js +5 -0
- package/dist/context.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/resolvers/ReportResolver.js +87 -1
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/package.json +11 -11
- package/src/auth/index.ts +2 -0
- package/src/auth/tokenExpiredError.ts +12 -0
- package/src/context.ts +6 -0
- package/src/index.ts +1 -0
- package/src/resolvers/ReportResolver.ts +92 -2
package/build.log.json
CHANGED
package/dist/auth/index.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
18
|
};
|
|
@@ -10,6 +24,7 @@ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider
|
|
|
10
24
|
const core_1 = require("@memberjunction/core");
|
|
11
25
|
const newUsers_1 = require("./newUsers");
|
|
12
26
|
const global_1 = require("@memberjunction/global");
|
|
27
|
+
__exportStar(require("./tokenExpiredError"), exports);
|
|
13
28
|
const missingAzureConfig = !config_1.tenantID || !config_1.webClientID;
|
|
14
29
|
const missingAuth0Config = !config_1.auth0Domain || !config_1.auth0WebClientID;
|
|
15
30
|
class MissingAuthError extends Error {
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenExpiredError = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
class TokenExpiredError extends graphql_1.GraphQLError {
|
|
6
|
+
constructor(expiryDate, message = 'The provided token has expired. Please authenticate again.') {
|
|
7
|
+
super(message, {
|
|
8
|
+
extensions: {
|
|
9
|
+
code: 'JWT_EXPIRED',
|
|
10
|
+
expiryDate: expiryDate.toISOString(),
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.TokenExpiredError = TokenExpiredError;
|
|
16
|
+
//# sourceMappingURL=tokenExpiredError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenExpiredError.js","sourceRoot":"","sources":["../../src/auth/tokenExpiredError.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAEvC,MAAa,iBAAkB,SAAQ,sBAAY;IACjD,YAAY,UAAgB,EAAE,OAAO,GAAG,4DAA4D;QAClG,KAAK,CAAC,OAAO,EAAE;YACb,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;aACrC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AATD,8CASC"}
|
package/dist/context.js
CHANGED
|
@@ -32,6 +32,7 @@ const type_graphql_1 = require("type-graphql");
|
|
|
32
32
|
const auth_1 = require("./auth");
|
|
33
33
|
const cache_1 = require("./cache");
|
|
34
34
|
const config_1 = require("./config");
|
|
35
|
+
const auth_2 = require("./auth");
|
|
35
36
|
const verifyAsync = async (issuer, options, token) => new Promise((resolve, reject) => {
|
|
36
37
|
(0, jsonwebtoken_1.verify)(token, (0, auth_1.getSigningKeys)(issuer), options, (err, jwt) => {
|
|
37
38
|
if (jwt && typeof jwt !== 'string' && !err) {
|
|
@@ -56,6 +57,10 @@ const getUserPayload = async (bearerToken, sessionId = 'default', dataSource, re
|
|
|
56
57
|
if (!payload || typeof payload === 'string') {
|
|
57
58
|
throw new type_graphql_1.AuthenticationError('Invalid token payload');
|
|
58
59
|
}
|
|
60
|
+
const expiryDate = new Date(payload.exp ?? 0 * 1000);
|
|
61
|
+
if (+expiryDate < Date.now()) {
|
|
62
|
+
throw new auth_2.TokenExpiredError(expiryDate);
|
|
63
|
+
}
|
|
59
64
|
if (!cache_1.authCache.has(token)) {
|
|
60
65
|
const issuer = payload.iss;
|
|
61
66
|
if (!issuer) {
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yCAA2B;AAC3B,+CAAyE;AACzE,4BAA0B;AAC1B,+BAA+C;AAC/C,+CAAuE;AAEvE,iCAA6E;AAC7E,mCAAoC;AACpC,qCAAwC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.serve = exports.configInfo = exports.NewUserBase = exports.MaxLength = void 0;
|
|
32
|
+
exports.serve = exports.TokenExpiredError = exports.configInfo = exports.NewUserBase = exports.MaxLength = void 0;
|
|
33
33
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
34
34
|
dotenv_1.default.config();
|
|
35
35
|
const express4_1 = require("@apollo/server/express4");
|
|
@@ -64,6 +64,8 @@ Object.defineProperty(exports, "configInfo", { enumerable: true, get: function (
|
|
|
64
64
|
__exportStar(require("./directives"), exports);
|
|
65
65
|
__exportStar(require("./entitySubclasses/userViewEntity.server"), exports);
|
|
66
66
|
__exportStar(require("./types"), exports);
|
|
67
|
+
var auth_1 = require("./auth");
|
|
68
|
+
Object.defineProperty(exports, "TokenExpiredError", { enumerable: true, get: function () { return auth_1.TokenExpiredError; } });
|
|
67
69
|
__exportStar(require("./generic/PushStatusResolver"), exports);
|
|
68
70
|
__exportStar(require("./generic/ResolverBase"), exports);
|
|
69
71
|
__exportStar(require("./generic/RunViewResolver"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,sDAA4D;AAC5D,kDAAqD;AACrD,+CAAgD;AAChD,mFAA2G;AAC3G,6CAAmC;AACnC,gDAAwB;AACxB,sDAA8B;AAC9B,yCAAqC;AACrC,8CAAkD;AAClD,yCAAyC;AACzC,yCAAgC;AAChC,4BAA0B;AAC1B,+BAAqC;AACrC,+CAAqF;AACrF,qCAAqC;AACrC,2BAAqC;AACrC,kEAA+C;AAC/C,qCAA2G;AAC3G,uCAA4D;AAC5D,6CAA+C;AAC/C,gDAAwB;AAExB,MAAM,oBAAoB,GAAG,mBAAU,CAAC,gBAAgB,CAAC,4BAA4B,CAAC;AAEtF,mDAA4C;AAAnC,4GAAA,SAAS,OAAA;AAClB,+CAA6B;AAC7B,4CAA8C;AAArC,uGAAA,WAAW,OAAA;AACpB,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,+CAA6B;AAC7B,2EAAyD;AACzD,0CAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.ReportResolverExtended = exports.RunReportResultType = void 0;
|
|
15
|
+
exports.ReportResolverExtended = exports.CreateReportResultType = exports.RunReportResultType = void 0;
|
|
16
16
|
const core_1 = require("@memberjunction/core");
|
|
17
17
|
const type_graphql_1 = require("type-graphql");
|
|
18
|
+
const data_context_1 = require("@memberjunction/data-context");
|
|
19
|
+
const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
|
|
18
20
|
let RunReportResultType = class RunReportResultType {
|
|
19
21
|
};
|
|
20
22
|
exports.RunReportResultType = RunReportResultType;
|
|
@@ -45,6 +47,28 @@ __decorate([
|
|
|
45
47
|
exports.RunReportResultType = RunReportResultType = __decorate([
|
|
46
48
|
(0, type_graphql_1.ObjectType)()
|
|
47
49
|
], RunReportResultType);
|
|
50
|
+
let CreateReportResultType = class CreateReportResultType {
|
|
51
|
+
};
|
|
52
|
+
exports.CreateReportResultType = CreateReportResultType;
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, type_graphql_1.Field)(),
|
|
55
|
+
__metadata("design:type", Number)
|
|
56
|
+
], CreateReportResultType.prototype, "ReportID", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, type_graphql_1.Field)(),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], CreateReportResultType.prototype, "ReportName", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, type_graphql_1.Field)(),
|
|
63
|
+
__metadata("design:type", Boolean)
|
|
64
|
+
], CreateReportResultType.prototype, "Success", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, type_graphql_1.Field)(),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], CreateReportResultType.prototype, "ErrorMessage", void 0);
|
|
69
|
+
exports.CreateReportResultType = CreateReportResultType = __decorate([
|
|
70
|
+
(0, type_graphql_1.ObjectType)()
|
|
71
|
+
], CreateReportResultType);
|
|
48
72
|
let ReportResolverExtended = class ReportResolverExtended {
|
|
49
73
|
async GetReportData(ReportID, {}) {
|
|
50
74
|
const runReport = new core_1.RunReport();
|
|
@@ -58,6 +82,60 @@ let ReportResolverExtended = class ReportResolverExtended {
|
|
|
58
82
|
ErrorMessage: result.ErrorMessage,
|
|
59
83
|
};
|
|
60
84
|
}
|
|
85
|
+
async CreateReportFromConversationDetailID(ConversationDetailID, { dataSource, userPayload }) {
|
|
86
|
+
const md = new core_1.Metadata();
|
|
87
|
+
const u = sqlserver_dataprovider_1.UserCache.Users.find(u => u.Email?.trim().toLowerCase() === userPayload?.email?.trim().toLowerCase());
|
|
88
|
+
if (!u)
|
|
89
|
+
throw new Error('Unable to find user');
|
|
90
|
+
const cde = md.Entities.find(e => e.Name === 'Conversation Details');
|
|
91
|
+
if (!cde)
|
|
92
|
+
throw new Error('Unable to find Conversation Details Entity metadata');
|
|
93
|
+
const cd = md.Entities.find(e => e.Name === 'Conversations');
|
|
94
|
+
if (!cd)
|
|
95
|
+
throw new Error('Unable to find Conversations Entity metadata');
|
|
96
|
+
const sql = `SELECT cd.Message, cd.ConversationID, c.DataContextID
|
|
97
|
+
FROM ${cde.SchemaName}.${cde.BaseView} cd
|
|
98
|
+
INNER JOIN ${cd.SchemaName}.${cd.BaseView} c
|
|
99
|
+
ON cd.ConversationID = c.ID
|
|
100
|
+
WHERE cd.ID=${ConversationDetailID}`;
|
|
101
|
+
const result = await dataSource.query(sql);
|
|
102
|
+
if (!result || result.length === 0)
|
|
103
|
+
throw new Error('Unable to retrieve converation details');
|
|
104
|
+
const skipData = JSON.parse(result[0].Message);
|
|
105
|
+
const report = await md.GetEntityObject('Reports', u);
|
|
106
|
+
report.NewRecord();
|
|
107
|
+
report.Name = skipData.reportTitle ? skipData.reportTitle : 'Untitled Report';
|
|
108
|
+
report.Description = skipData.userExplanation ? skipData.userExplanation : '';
|
|
109
|
+
report.ConversationID = result[0].ConversationID;
|
|
110
|
+
report.ConversationDetailID = ConversationDetailID;
|
|
111
|
+
const dc = new data_context_1.DataContext();
|
|
112
|
+
await dc.LoadMetadata(result[0].DataContextID, u);
|
|
113
|
+
const newDataContext = await data_context_1.DataContext.Clone(dc, false, u);
|
|
114
|
+
if (!newDataContext)
|
|
115
|
+
throw new Error('Error cloning data context');
|
|
116
|
+
report.DataContextID = newDataContext.ID;
|
|
117
|
+
const newSkipData = JSON.parse(JSON.stringify(skipData));
|
|
118
|
+
newSkipData.messages = [];
|
|
119
|
+
report.Configuration = JSON.stringify(newSkipData);
|
|
120
|
+
report.SharingScope = 'None';
|
|
121
|
+
report.UserID = u.ID;
|
|
122
|
+
if (await report.Save()) {
|
|
123
|
+
return {
|
|
124
|
+
ReportID: report.ID,
|
|
125
|
+
ReportName: report.Name,
|
|
126
|
+
Success: true,
|
|
127
|
+
ErrorMessage: ''
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
return {
|
|
132
|
+
ReportID: -1,
|
|
133
|
+
ReportName: '',
|
|
134
|
+
Success: false,
|
|
135
|
+
ErrorMessage: 'Unable to save new report'
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
61
139
|
};
|
|
62
140
|
exports.ReportResolverExtended = ReportResolverExtended;
|
|
63
141
|
__decorate([
|
|
@@ -68,6 +146,14 @@ __decorate([
|
|
|
68
146
|
__metadata("design:paramtypes", [Number, Object]),
|
|
69
147
|
__metadata("design:returntype", Promise)
|
|
70
148
|
], ReportResolverExtended.prototype, "GetReportData", null);
|
|
149
|
+
__decorate([
|
|
150
|
+
(0, type_graphql_1.Mutation)(() => CreateReportResultType),
|
|
151
|
+
__param(0, (0, type_graphql_1.Arg)('ConversationDetailID', () => type_graphql_1.Int)),
|
|
152
|
+
__param(1, (0, type_graphql_1.Ctx)()),
|
|
153
|
+
__metadata("design:type", Function),
|
|
154
|
+
__metadata("design:paramtypes", [Number, Object]),
|
|
155
|
+
__metadata("design:returntype", Promise)
|
|
156
|
+
], ReportResolverExtended.prototype, "CreateReportFromConversationDetailID", null);
|
|
71
157
|
exports.ReportResolverExtended = ReportResolverExtended = __decorate([
|
|
72
158
|
(0, type_graphql_1.Resolver)(RunReportResultType)
|
|
73
159
|
], ReportResolverExtended);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportResolver.js","sourceRoot":"","sources":["../../src/resolvers/ReportResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"ReportResolver.js","sourceRoot":"","sources":["../../src/resolvers/ReportResolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.220",
|
|
4
4
|
"description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@apollo/server": "^4.9.1",
|
|
23
23
|
"@graphql-tools/utils": "^10.0.1",
|
|
24
|
-
"@memberjunction/ai": "^0.9.
|
|
25
|
-
"@memberjunction/aiengine": "^0.9.
|
|
26
|
-
"@memberjunction/core": "^0.9.
|
|
27
|
-
"@memberjunction/core-entities": "^0.9.
|
|
28
|
-
"@memberjunction/data-context": "^0.9.
|
|
29
|
-
"@memberjunction/data-context-server": "^0.9.
|
|
30
|
-
"@memberjunction/global": "^0.9.
|
|
31
|
-
"@memberjunction/queue": "^0.9.
|
|
32
|
-
"@memberjunction/sqlserver-dataprovider": "^0.9.
|
|
33
|
-
"@memberjunction/skip-types": "^0.9.
|
|
24
|
+
"@memberjunction/ai": "^0.9.156",
|
|
25
|
+
"@memberjunction/aiengine": "^0.9.52",
|
|
26
|
+
"@memberjunction/core": "^0.9.168",
|
|
27
|
+
"@memberjunction/core-entities": "^0.9.150",
|
|
28
|
+
"@memberjunction/data-context": "^0.9.36",
|
|
29
|
+
"@memberjunction/data-context-server": "^0.9.32",
|
|
30
|
+
"@memberjunction/global": "^0.9.148",
|
|
31
|
+
"@memberjunction/queue": "^0.9.170",
|
|
32
|
+
"@memberjunction/sqlserver-dataprovider": "^0.9.181",
|
|
33
|
+
"@memberjunction/skip-types": "^0.9.60",
|
|
34
34
|
"@types/cors": "^2.8.13",
|
|
35
35
|
"@types/jsonwebtoken": "^8.5.9",
|
|
36
36
|
"@types/node": "^18.11.14",
|
package/src/auth/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { Metadata, UserInfo } from '@memberjunction/core';
|
|
|
7
7
|
import { NewUserBase } from './newUsers';
|
|
8
8
|
import { MJGlobal } from '@memberjunction/global';
|
|
9
9
|
|
|
10
|
+
export * from './tokenExpiredError';
|
|
11
|
+
|
|
10
12
|
const missingAzureConfig = !tenantID || !webClientID;
|
|
11
13
|
const missingAuth0Config = !auth0Domain || !auth0WebClientID;
|
|
12
14
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GraphQLError } from 'graphql';
|
|
2
|
+
|
|
3
|
+
export class TokenExpiredError extends GraphQLError {
|
|
4
|
+
constructor(expiryDate: Date, message = 'The provided token has expired. Please authenticate again.') {
|
|
5
|
+
super(message, {
|
|
6
|
+
extensions: {
|
|
7
|
+
code: 'JWT_EXPIRED',
|
|
8
|
+
expiryDate: expiryDate.toISOString(),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
}
|
package/src/context.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { getSigningKeys, validationOptions, verifyUserRecord } from './auth';
|
|
|
9
9
|
import { authCache } from './cache';
|
|
10
10
|
import { userEmailMap } from './config';
|
|
11
11
|
import { UserPayload } from './types';
|
|
12
|
+
import { TokenExpiredError } from './auth';
|
|
12
13
|
|
|
13
14
|
const verifyAsync = async (
|
|
14
15
|
issuer: string,
|
|
@@ -52,6 +53,11 @@ export const getUserPayload = async (
|
|
|
52
53
|
throw new AuthenticationError('Invalid token payload');
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
const expiryDate = new Date(payload.exp ?? 0 * 1000);
|
|
57
|
+
if (+expiryDate < Date.now()) {
|
|
58
|
+
throw new TokenExpiredError(expiryDate);
|
|
59
|
+
}
|
|
60
|
+
|
|
55
61
|
if (!authCache.has(token)) {
|
|
56
62
|
const issuer = payload.iss;
|
|
57
63
|
if (!issuer) {
|
package/src/index.ts
CHANGED
|
@@ -33,6 +33,7 @@ export { configInfo } from './config';
|
|
|
33
33
|
export * from './directives';
|
|
34
34
|
export * from './entitySubclasses/userViewEntity.server';
|
|
35
35
|
export * from './types';
|
|
36
|
+
export { TokenExpiredError } from './auth';
|
|
36
37
|
|
|
37
38
|
export * from './generic/PushStatusResolver';
|
|
38
39
|
export * from './generic/ResolverBase';
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { RunReport } from '@memberjunction/core';
|
|
2
|
-
import { Arg, Ctx, Field, Int, ObjectType, Query, Resolver } from 'type-graphql';
|
|
1
|
+
import { Metadata, RunReport } from '@memberjunction/core';
|
|
2
|
+
import { Arg, Ctx, Field, Int, Mutation, ObjectType, Query, Resolver } from 'type-graphql';
|
|
3
3
|
import { AppContext } from '../types';
|
|
4
|
+
import { ConversationDetailEntity, ReportEntity } from '@memberjunction/core-entities';
|
|
5
|
+
import { SkipAPIAnalysisCompleteResponse } from '@memberjunction/skip-types';
|
|
6
|
+
import { DataContext } from '@memberjunction/data-context';
|
|
7
|
+
import { UserCache } from '@memberjunction/sqlserver-dataprovider';
|
|
4
8
|
|
|
5
9
|
@ObjectType()
|
|
6
10
|
export class RunReportResultType {
|
|
@@ -23,6 +27,21 @@ export class RunReportResultType {
|
|
|
23
27
|
ErrorMessage: string;
|
|
24
28
|
}
|
|
25
29
|
|
|
30
|
+
@ObjectType()
|
|
31
|
+
export class CreateReportResultType {
|
|
32
|
+
@Field()
|
|
33
|
+
ReportID: number;
|
|
34
|
+
|
|
35
|
+
@Field()
|
|
36
|
+
ReportName: string;
|
|
37
|
+
|
|
38
|
+
@Field()
|
|
39
|
+
Success: boolean;
|
|
40
|
+
|
|
41
|
+
@Field()
|
|
42
|
+
ErrorMessage: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
26
45
|
@Resolver(RunReportResultType)
|
|
27
46
|
export class ReportResolverExtended {
|
|
28
47
|
@Query(() => RunReportResultType)
|
|
@@ -38,4 +57,75 @@ export class ReportResolverExtended {
|
|
|
38
57
|
ErrorMessage: result.ErrorMessage,
|
|
39
58
|
};
|
|
40
59
|
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* This mutation will create a new report from a conversation detail ID
|
|
63
|
+
*/
|
|
64
|
+
@Mutation(() => CreateReportResultType)
|
|
65
|
+
async CreateReportFromConversationDetailID(@Arg('ConversationDetailID', () => Int) ConversationDetailID: number,
|
|
66
|
+
@Ctx() {dataSource, userPayload}: AppContext): Promise<CreateReportResultType> {
|
|
67
|
+
const md = new Metadata();
|
|
68
|
+
|
|
69
|
+
const u = UserCache.Users.find(u => u.Email?.trim().toLowerCase() === userPayload?.email?.trim().toLowerCase());
|
|
70
|
+
if (!u)
|
|
71
|
+
throw new Error('Unable to find user')
|
|
72
|
+
|
|
73
|
+
const cde = md.Entities.find(e => e.Name === 'Conversation Details')
|
|
74
|
+
if (!cde)
|
|
75
|
+
throw new Error('Unable to find Conversation Details Entity metadata')
|
|
76
|
+
|
|
77
|
+
const cd = md.Entities.find(e => e.Name === 'Conversations')
|
|
78
|
+
if (!cd)
|
|
79
|
+
throw new Error('Unable to find Conversations Entity metadata')
|
|
80
|
+
|
|
81
|
+
const sql = `SELECT cd.Message, cd.ConversationID, c.DataContextID
|
|
82
|
+
FROM ${cde.SchemaName}.${cde.BaseView} cd
|
|
83
|
+
INNER JOIN ${cd.SchemaName}.${cd.BaseView} c
|
|
84
|
+
ON cd.ConversationID = c.ID
|
|
85
|
+
WHERE cd.ID=${ConversationDetailID}`
|
|
86
|
+
const result = await dataSource.query(sql);
|
|
87
|
+
if (!result || result.length === 0)
|
|
88
|
+
throw new Error('Unable to retrieve converation details')
|
|
89
|
+
const skipData = <SkipAPIAnalysisCompleteResponse>JSON.parse(result[0].Message);
|
|
90
|
+
|
|
91
|
+
const report = await md.GetEntityObject<ReportEntity>('Reports', u);
|
|
92
|
+
report.NewRecord();
|
|
93
|
+
report.Name = skipData.reportTitle ? skipData.reportTitle : 'Untitled Report';
|
|
94
|
+
report.Description = skipData.userExplanation ? skipData.userExplanation : '';
|
|
95
|
+
report.ConversationID = result[0].ConversationID;
|
|
96
|
+
report.ConversationDetailID = ConversationDetailID;
|
|
97
|
+
|
|
98
|
+
const dc: DataContext = new DataContext();
|
|
99
|
+
await dc.LoadMetadata(result[0].DataContextID, u);
|
|
100
|
+
const newDataContext = await DataContext.Clone(dc, false, u);
|
|
101
|
+
if (!newDataContext)
|
|
102
|
+
throw new Error('Error cloning data context')
|
|
103
|
+
report.DataContextID = newDataContext.ID;
|
|
104
|
+
|
|
105
|
+
// next, strip out the messags from the SkipData object to put them into our Report Configuration as we dont need to store that information as we have a
|
|
106
|
+
// link back to the conversation and conversation detail
|
|
107
|
+
const newSkipData : SkipAPIAnalysisCompleteResponse = JSON.parse(JSON.stringify(skipData));
|
|
108
|
+
newSkipData.messages = [];
|
|
109
|
+
report.Configuration = JSON.stringify(newSkipData)
|
|
110
|
+
|
|
111
|
+
report.SharingScope = 'None'
|
|
112
|
+
report.UserID = u.ID;
|
|
113
|
+
|
|
114
|
+
if (await report.Save()) {
|
|
115
|
+
return {
|
|
116
|
+
ReportID: report.ID,
|
|
117
|
+
ReportName: report.Name,
|
|
118
|
+
Success: true,
|
|
119
|
+
ErrorMessage: ''
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return {
|
|
124
|
+
ReportID: -1,
|
|
125
|
+
ReportName: '',
|
|
126
|
+
Success: false,
|
|
127
|
+
ErrorMessage: 'Unable to save new report'
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
41
131
|
}
|