@memberjunction/server 1.8.1 → 2.1.1

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.
Files changed (192) hide show
  1. package/CHANGELOG.json +130 -1
  2. package/CHANGELOG.md +29 -2
  3. package/package.json +31 -40
  4. package/src/apolloServer/index.ts +0 -1
  5. package/src/auth/newUsers.ts +4 -3
  6. package/src/context.ts +19 -27
  7. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  8. package/src/entitySubclasses/userViewEntity.server.ts +1 -1
  9. package/src/generated/generated.ts +9482 -8398
  10. package/src/generic/ResolverBase.ts +299 -172
  11. package/src/generic/RunViewResolver.ts +204 -14
  12. package/src/index.ts +18 -19
  13. package/src/resolvers/AskSkipResolver.ts +35 -35
  14. package/src/resolvers/ColorResolver.ts +3 -14
  15. package/src/resolvers/DatasetResolver.ts +4 -4
  16. package/src/resolvers/EntityCommunicationsResolver.ts +37 -15
  17. package/src/resolvers/FileCategoryResolver.ts +2 -2
  18. package/src/resolvers/FileResolver.ts +6 -4
  19. package/src/resolvers/MergeRecordsResolver.ts +3 -2
  20. package/src/resolvers/PotentialDuplicateRecordResolver.ts +48 -40
  21. package/src/resolvers/QueryResolver.ts +2 -2
  22. package/src/resolvers/ReportResolver.ts +6 -6
  23. package/src/resolvers/UserFavoriteResolver.ts +8 -8
  24. package/src/resolvers/UserResolver.ts +3 -1
  25. package/src/resolvers/UserViewResolver.ts +1 -1
  26. package/src/types.ts +21 -0
  27. package/tsconfig.json +3 -4
  28. package/dist/apolloServer/TransactionPlugin.d.ts +0 -4
  29. package/dist/apolloServer/TransactionPlugin.d.ts.map +0 -1
  30. package/dist/apolloServer/TransactionPlugin.js +0 -49
  31. package/dist/apolloServer/TransactionPlugin.js.map +0 -1
  32. package/dist/apolloServer/index.d.ts +0 -11
  33. package/dist/apolloServer/index.d.ts.map +0 -1
  34. package/dist/apolloServer/index.js +0 -27
  35. package/dist/apolloServer/index.js.map +0 -1
  36. package/dist/auth/exampleNewUserSubClass.d.ts +0 -6
  37. package/dist/auth/exampleNewUserSubClass.d.ts.map +0 -1
  38. package/dist/auth/exampleNewUserSubClass.js +0 -54
  39. package/dist/auth/exampleNewUserSubClass.js.map +0 -1
  40. package/dist/auth/index.d.ts +0 -30
  41. package/dist/auth/index.d.ts.map +0 -1
  42. package/dist/auth/index.js +0 -129
  43. package/dist/auth/index.js.map +0 -1
  44. package/dist/auth/newUsers.d.ts +0 -5
  45. package/dist/auth/newUsers.d.ts.map +0 -1
  46. package/dist/auth/newUsers.js +0 -66
  47. package/dist/auth/newUsers.js.map +0 -1
  48. package/dist/auth/tokenExpiredError.d.ts +0 -5
  49. package/dist/auth/tokenExpiredError.d.ts.map +0 -1
  50. package/dist/auth/tokenExpiredError.js +0 -16
  51. package/dist/auth/tokenExpiredError.js.map +0 -1
  52. package/dist/cache.d.ts +0 -3
  53. package/dist/cache.d.ts.map +0 -1
  54. package/dist/cache.js +0 -11
  55. package/dist/cache.js.map +0 -1
  56. package/dist/config.d.ts +0 -196
  57. package/dist/config.d.ts.map +0 -1
  58. package/dist/config.js +0 -72
  59. package/dist/config.js.map +0 -1
  60. package/dist/context.d.ts +0 -17
  61. package/dist/context.d.ts.map +0 -1
  62. package/dist/context.js +0 -114
  63. package/dist/context.js.map +0 -1
  64. package/dist/directives/Public.d.ts +0 -4
  65. package/dist/directives/Public.d.ts.map +0 -1
  66. package/dist/directives/Public.js +0 -34
  67. package/dist/directives/Public.js.map +0 -1
  68. package/dist/directives/index.d.ts +0 -2
  69. package/dist/directives/index.d.ts.map +0 -1
  70. package/dist/directives/index.js +0 -18
  71. package/dist/directives/index.js.map +0 -1
  72. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +0 -6
  73. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +0 -1
  74. package/dist/entitySubclasses/DuplicateRunEntity.server.js +0 -37
  75. package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +0 -1
  76. package/dist/entitySubclasses/EntityBehavior.server.d.ts +0 -29
  77. package/dist/entitySubclasses/EntityBehavior.server.d.ts.map +0 -1
  78. package/dist/entitySubclasses/EntityBehavior.server.js +0 -213
  79. package/dist/entitySubclasses/EntityBehavior.server.js.map +0 -1
  80. package/dist/entitySubclasses/entityPermissions.server.d.ts +0 -23
  81. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +0 -1
  82. package/dist/entitySubclasses/entityPermissions.server.js +0 -99
  83. package/dist/entitySubclasses/entityPermissions.server.js.map +0 -1
  84. package/dist/entitySubclasses/userViewEntity.server.d.ts +0 -13
  85. package/dist/entitySubclasses/userViewEntity.server.d.ts.map +0 -1
  86. package/dist/entitySubclasses/userViewEntity.server.js +0 -164
  87. package/dist/entitySubclasses/userViewEntity.server.js.map +0 -1
  88. package/dist/generated/generated.d.ts +0 -6482
  89. package/dist/generated/generated.d.ts.map +0 -1
  90. package/dist/generated/generated.js +0 -35073
  91. package/dist/generated/generated.js.map +0 -1
  92. package/dist/generic/DeleteOptionsInput.d.ts +0 -5
  93. package/dist/generic/DeleteOptionsInput.d.ts.map +0 -1
  94. package/dist/generic/DeleteOptionsInput.js +0 -28
  95. package/dist/generic/DeleteOptionsInput.js.map +0 -1
  96. package/dist/generic/KeyInputOutputTypes.d.ts +0 -16
  97. package/dist/generic/KeyInputOutputTypes.d.ts.map +0 -1
  98. package/dist/generic/KeyInputOutputTypes.js +0 -62
  99. package/dist/generic/KeyInputOutputTypes.js.map +0 -1
  100. package/dist/generic/KeyValuePairInput.d.ts +0 -5
  101. package/dist/generic/KeyValuePairInput.d.ts.map +0 -1
  102. package/dist/generic/KeyValuePairInput.js +0 -28
  103. package/dist/generic/KeyValuePairInput.js.map +0 -1
  104. package/dist/generic/PushStatusResolver.d.ts +0 -14
  105. package/dist/generic/PushStatusResolver.d.ts.map +0 -1
  106. package/dist/generic/PushStatusResolver.js +0 -58
  107. package/dist/generic/PushStatusResolver.js.map +0 -1
  108. package/dist/generic/ResolverBase.d.ts +0 -37
  109. package/dist/generic/ResolverBase.d.ts.map +0 -1
  110. package/dist/generic/ResolverBase.js +0 -468
  111. package/dist/generic/ResolverBase.js.map +0 -1
  112. package/dist/generic/RunViewResolver.d.ts +0 -88
  113. package/dist/generic/RunViewResolver.d.ts.map +0 -1
  114. package/dist/generic/RunViewResolver.js +0 -443
  115. package/dist/generic/RunViewResolver.js.map +0 -1
  116. package/dist/index.d.ts +0 -28
  117. package/dist/index.d.ts.map +0 -1
  118. package/dist/index.js +0 -145
  119. package/dist/index.js.map +0 -1
  120. package/dist/orm.d.ts +0 -4
  121. package/dist/orm.d.ts.map +0 -1
  122. package/dist/orm.js +0 -34
  123. package/dist/orm.js.map +0 -1
  124. package/dist/resolvers/AskSkipResolver.d.ts +0 -54
  125. package/dist/resolvers/AskSkipResolver.d.ts.map +0 -1
  126. package/dist/resolvers/AskSkipResolver.js +0 -800
  127. package/dist/resolvers/AskSkipResolver.js.map +0 -1
  128. package/dist/resolvers/ColorResolver.d.ts +0 -22
  129. package/dist/resolvers/ColorResolver.d.ts.map +0 -1
  130. package/dist/resolvers/ColorResolver.js +0 -94
  131. package/dist/resolvers/ColorResolver.js.map +0 -1
  132. package/dist/resolvers/DatasetResolver.d.ts +0 -42
  133. package/dist/resolvers/DatasetResolver.d.ts.map +0 -1
  134. package/dist/resolvers/DatasetResolver.js +0 -168
  135. package/dist/resolvers/DatasetResolver.js.map +0 -1
  136. package/dist/resolvers/EntityCommunicationsResolver.d.ts +0 -49
  137. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +0 -1
  138. package/dist/resolvers/EntityCommunicationsResolver.js +0 -228
  139. package/dist/resolvers/EntityCommunicationsResolver.js.map +0 -1
  140. package/dist/resolvers/EntityRecordNameResolver.d.ts +0 -21
  141. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +0 -1
  142. package/dist/resolvers/EntityRecordNameResolver.js +0 -113
  143. package/dist/resolvers/EntityRecordNameResolver.js.map +0 -1
  144. package/dist/resolvers/EntityResolver.d.ts +0 -6
  145. package/dist/resolvers/EntityResolver.d.ts.map +0 -1
  146. package/dist/resolvers/EntityResolver.js +0 -60
  147. package/dist/resolvers/EntityResolver.js.map +0 -1
  148. package/dist/resolvers/FileCategoryResolver.d.ts +0 -6
  149. package/dist/resolvers/FileCategoryResolver.d.ts.map +0 -1
  150. package/dist/resolvers/FileCategoryResolver.js +0 -65
  151. package/dist/resolvers/FileCategoryResolver.js.map +0 -1
  152. package/dist/resolvers/FileResolver.d.ts +0 -24
  153. package/dist/resolvers/FileResolver.d.ts.map +0 -1
  154. package/dist/resolvers/FileResolver.js +0 -162
  155. package/dist/resolvers/FileResolver.js.map +0 -1
  156. package/dist/resolvers/MergeRecordsResolver.d.ts +0 -59
  157. package/dist/resolvers/MergeRecordsResolver.d.ts.map +0 -1
  158. package/dist/resolvers/MergeRecordsResolver.js +0 -256
  159. package/dist/resolvers/MergeRecordsResolver.js.map +0 -1
  160. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +0 -29
  161. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +0 -1
  162. package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -127
  163. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +0 -1
  164. package/dist/resolvers/QueryResolver.d.ts +0 -13
  165. package/dist/resolvers/QueryResolver.d.ts.map +0 -1
  166. package/dist/resolvers/QueryResolver.js +0 -74
  167. package/dist/resolvers/QueryResolver.js.map +0 -1
  168. package/dist/resolvers/ReportResolver.d.ts +0 -20
  169. package/dist/resolvers/ReportResolver.d.ts.map +0 -1
  170. package/dist/resolvers/ReportResolver.js +0 -175
  171. package/dist/resolvers/ReportResolver.js.map +0 -1
  172. package/dist/resolvers/UserFavoriteResolver.d.ts +0 -42
  173. package/dist/resolvers/UserFavoriteResolver.d.ts.map +0 -1
  174. package/dist/resolvers/UserFavoriteResolver.js +0 -221
  175. package/dist/resolvers/UserFavoriteResolver.js.map +0 -1
  176. package/dist/resolvers/UserResolver.d.ts +0 -10
  177. package/dist/resolvers/UserResolver.d.ts.map +0 -1
  178. package/dist/resolvers/UserResolver.js +0 -72
  179. package/dist/resolvers/UserResolver.js.map +0 -1
  180. package/dist/resolvers/UserViewResolver.d.ts +0 -13
  181. package/dist/resolvers/UserViewResolver.d.ts.map +0 -1
  182. package/dist/resolvers/UserViewResolver.js +0 -102
  183. package/dist/resolvers/UserViewResolver.js.map +0 -1
  184. package/dist/types.d.ts +0 -17
  185. package/dist/types.d.ts.map +0 -1
  186. package/dist/types.js +0 -3
  187. package/dist/types.js.map +0 -1
  188. package/dist/util.d.ts +0 -4
  189. package/dist/util.d.ts.map +0 -1
  190. package/dist/util.js +0 -89
  191. package/dist/util.js.map +0 -1
  192. package/src/entitySubclasses/EntityBehavior.server.ts +0 -241
@@ -1,17 +1,6 @@
1
- import {
2
- AppContext,
3
- Ctx,
4
- Field,
5
- Int,
6
- ObjectType,
7
- PubSub,
8
- PubSubEngine,
9
- Public,
10
- Query,
11
- Resolver,
12
- Root,
13
- Subscription,
14
- } from '@memberjunction/server';
1
+ import { AppContext } from '../types';
2
+ import { Ctx, Field, Int, ObjectType, PubSub, PubSubEngine, Query, Resolver, Root, Subscription } from 'type-graphql';
3
+ import { Public } from '../directives';
15
4
 
16
5
  @ObjectType()
17
6
  export class Color {
@@ -4,8 +4,8 @@ import { LogError, Metadata } from '@memberjunction/core';
4
4
 
5
5
  @ObjectType()
6
6
  export class DatasetResultType {
7
- @Field(() => Int)
8
- DatasetID: number;
7
+ @Field(() => String)
8
+ DatasetID: string;
9
9
 
10
10
  @Field(() => String)
11
11
  DatasetName: string;
@@ -65,8 +65,8 @@ export class DatasetResolverExtended {
65
65
 
66
66
  @ObjectType()
67
67
  export class DatasetStatusResultType {
68
- @Field(() => Int)
69
- DatasetID: number;
68
+ @Field(() => String)
69
+ DatasetID: string;
70
70
 
71
71
  @Field(() => String)
72
72
  DatasetName: string;
@@ -6,6 +6,7 @@ import { EntityCommunicationsEngine } from '@memberjunction/entity-communication
6
6
  import { RunViewParams } from '@memberjunction/core';
7
7
  import { GraphQLJSONObject } from 'graphql-type-json';
8
8
  import { TemplateEngineServer } from '@memberjunction/templates';
9
+ import { EntityCommunicationParams } from '@memberjunction/entity-communications-base';
9
10
 
10
11
 
11
12
  @InputType()
@@ -151,22 +152,30 @@ export class CommunicationMessageInput {
151
152
 
152
153
  @ObjectType()
153
154
  export class RunEntityCommunicationResultType {
154
- @Field()
155
- Success: boolean;
155
+ @Field()
156
+ Success: boolean;
156
157
 
157
- @Field()
158
- ErrorMessage: string;
159
- }
158
+ @Field({nullable: true})
159
+ ErrorMessage?: string;
160
160
 
161
+ /**
162
+ * Optional, any context data that is needed to render the message template
163
+ */
164
+ @Field(() => GraphQLJSONObject, { nullable: true })
165
+ public Results?: any;
166
+ }
167
+
161
168
  @Resolver(RunEntityCommunicationResultType)
162
- export class ReportResolver {
169
+ export class ReportResolver {
163
170
  @Query(() => RunEntityCommunicationResultType)
164
- async RunEntityCommunicationByViewID( @Arg('entityID', () => Int) entityID: number,
165
- @Arg('runViewByIDInput', () => RunViewByIDInput) runViewByIDInput: RunViewByIDInput,
166
- @Arg('providerName', () => String) providerName: string,
167
- @Arg('providerMessageTypeName', () => String) providerMessageTypeName: string,
168
- @Arg('message', () => CommunicationMessageInput) message: CommunicationMessageInput,
169
- @Ctx() { userPayload }: AppContext): Promise<RunEntityCommunicationResultType> {
171
+ async RunEntityCommunicationByViewID( @Arg('entityID', () => String) entityID: string,
172
+ @Arg('runViewByIDInput', () => RunViewByIDInput) runViewByIDInput: RunViewByIDInput,
173
+ @Arg('providerName', () => String) providerName: string,
174
+ @Arg('providerMessageTypeName', () => String) providerMessageTypeName: string,
175
+ @Arg('message', () => CommunicationMessageInput) message: CommunicationMessageInput,
176
+ @Arg('previewOnly', () => Boolean) previewOnly: boolean,
177
+ @Arg('includeProcessedMessages', () => Boolean) includeProcessedMessages: boolean,
178
+ @Ctx() { userPayload }: AppContext): Promise<RunEntityCommunicationResultType> {
170
179
  try {
171
180
  await EntityCommunicationsEngine.Instance.Config(false, userPayload.userRecord);
172
181
  const newMessage = new Message(message as unknown as Message);
@@ -181,8 +190,21 @@ export class ReportResolver {
181
190
  if (newMessage.SubjectTemplate) {
182
191
  newMessage.SubjectTemplate = TemplateEngineServer.Instance.FindTemplate(newMessage.SubjectTemplate.Name);
183
192
  }
184
- const result = await EntityCommunicationsEngine.Instance.RunEntityCommunication(entityID, <RunViewParams>runViewByIDInput, providerName, providerMessageTypeName, newMessage);
185
- return result;
193
+ const params: EntityCommunicationParams = {
194
+ EntityID: entityID,
195
+ RunViewParams: <RunViewParams>runViewByIDInput,
196
+ ProviderName: providerName,
197
+ ProviderMessageTypeName: providerMessageTypeName,
198
+ Message: newMessage,
199
+ PreviewOnly: previewOnly,
200
+ IncludeProcessedMessages: includeProcessedMessages
201
+ }
202
+ const result = await EntityCommunicationsEngine.Instance.RunEntityCommunication(params);
203
+ return {
204
+ Success: result.Success,
205
+ ErrorMessage: result.ErrorMessage,
206
+ Results: includeProcessedMessages && result.Results ? {Results: result.Results} : undefined
207
+ };
186
208
  }
187
209
  catch (e) {
188
210
  return {
@@ -190,5 +212,5 @@ export class ReportResolver {
190
212
  ErrorMessage: e.message
191
213
  }
192
214
  }
193
- }
215
+ }
194
216
  }
@@ -6,7 +6,7 @@ import { FileCategoryResolver as FileCategoryResolverBase, FileCategory_ } from
6
6
 
7
7
  export class FileResolver extends FileCategoryResolverBase {
8
8
  @Mutation(() => FileCategory_)
9
- async DeleteFileCategory(@Arg('ID', () => Int) ID: number, @Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput, @Ctx() { dataSource, userPayload }: AppContext) {
9
+ async DeleteFileCategory(@Arg('ID', () => String) ID: string, @Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput, @Ctx() { dataSource, userPayload }: AppContext) {
10
10
  const key = new CompositeKey();
11
11
  key.LoadFromSingleKeyValuePair('ID', ID);
12
12
  if (!(await this.BeforeDelete(dataSource, key))) {
@@ -40,7 +40,7 @@ export class FileResolver extends FileCategoryResolverBase {
40
40
  const rv = new RunView();
41
41
  const filesResult = await rv.RunView({
42
42
  EntityName: 'Files',
43
- ExtraFilter: 'CategoryID=' + fileCategoryEntity.ID,
43
+ ExtraFilter: `CategoryID='${fileCategoryEntity.ID}'`,
44
44
  ResultType: 'entity_object'
45
45
  }, user);
46
46
  if (filesResult) {
@@ -18,11 +18,12 @@ import {
18
18
  } from '@memberjunction/server';
19
19
  import { createDownloadUrl, createUploadUrl, deleteObject, moveObject } from '@memberjunction/storage';
20
20
  import { CreateFileInput, FileResolver as FileResolverBase, File_, UpdateFileInput } from '../generated/generated';
21
+ import { FieldMapper } from '@memberjunction/graphql-dataprovider';
21
22
 
22
23
  @InputType()
23
24
  export class CreateUploadURLInput {
24
- @Field(() => Int)
25
- FileID: number;
25
+ @Field(() => String)
26
+ FileID: string;
26
27
  }
27
28
 
28
29
  @ObjectType()
@@ -70,7 +71,8 @@ export class FileResolver extends FileResolverBase {
70
71
  const { updatedInput, UploadUrl } = await createUploadUrl(providerEntity, fileRecord);
71
72
 
72
73
  // Save the file record with the updated input
73
- fileEntity.LoadFromData(input);
74
+ const mapper = new FieldMapper();
75
+ fileEntity.LoadFromData(mapper.ReverseMapFields({ ...input }));
74
76
  fileEntity.SetMany(updatedInput);
75
77
  await fileEntity.Save();
76
78
  const File = fileEntity.GetAll();
@@ -122,7 +124,7 @@ export class FileResolver extends FileResolverBase {
122
124
  }
123
125
 
124
126
  @Mutation(() => File_)
125
- async DeleteFile(@Arg('ID', () => Int) ID: number, @Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput, @Ctx() { dataSource, userPayload }: AppContext, @PubSub() pubSub: PubSubEngine) {
127
+ async DeleteFile(@Arg('ID', () => String) ID: string, @Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput, @Ctx() { dataSource, userPayload }: AppContext, @PubSub() pubSub: PubSubEngine) {
126
128
  const md = new Metadata();
127
129
  const userInfo = this.GetUserFromPayload(userPayload);
128
130
 
@@ -59,13 +59,14 @@ export class RecordDependencyResolver {
59
59
  @Query(() => [RecordDependencyResult])
60
60
  async GetRecordDependencies(
61
61
  @Arg('entityName', () => String) entityName: string,
62
- @Arg('CompositeKey', () => CompositeKeyInputType) CompositeKey: CompositeKey,
62
+ @Arg('CompositeKey', () => CompositeKeyInputType) ckInput: CompositeKeyInputType,
63
63
  @Ctx() { dataSource, userPayload }: AppContext,
64
64
  @PubSub() pubSub: PubSubEngine
65
65
  ) {
66
66
  try {
67
67
  const md = new Metadata();
68
- const result = await md.GetRecordDependencies(entityName, CompositeKey);
68
+ const ck = new CompositeKey(ckInput.KeyValuePairs);
69
+ const result = await md.GetRecordDependencies(entityName, ck);
69
70
  return result;
70
71
  }
71
72
  catch (e) {
@@ -1,83 +1,91 @@
1
- import { Arg, Ctx, Field, Float, InputType, Int, ObjectType, Query, Resolver } from "type-graphql";
2
- import { PotentialDuplicateRequest, PotentialDuplicateResponse, PotentialDuplicate, Metadata, KeyValuePair, LogError, CompositeKey, PotentialDuplicateResult } from '@memberjunction/core';
3
- import { AppContext } from "../types";
4
- import { UserCache } from "@memberjunction/sqlserver-dataprovider";
1
+ import { Arg, Ctx, Field, Float, InputType, Int, ObjectType, Query, Resolver } from 'type-graphql';
2
+ import {
3
+ PotentialDuplicateRequest,
4
+ PotentialDuplicateResponse,
5
+ PotentialDuplicate,
6
+ Metadata,
7
+ CompositeKey,
8
+ PotentialDuplicateResult,
9
+ } from '@memberjunction/core';
10
+ import { AppContext } from '../types';
11
+ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
5
12
 
6
13
  //load the default vectorDB and embedding model
7
- import {LoadMistralEmbedding} from '@memberjunction/ai-mistral';
8
- import {LoadPineconeVectorDB} from '@memberjunction/ai-vectors-pinecone';
9
- import { CompositeKeyInputType, CompositeKeyOutputType, KeyValuePairOutputType } from "../generic/KeyInputOutputTypes";
14
+ import { LoadMistralEmbedding } from '@memberjunction/ai-mistral';
15
+ import { LoadPineconeVectorDB } from '@memberjunction/ai-vectors-pinecone';
16
+ import { CompositeKeyInputType, CompositeKeyOutputType, KeyValuePairOutputType } from '../generic/KeyInputOutputTypes';
10
17
  LoadMistralEmbedding();
11
18
  LoadPineconeVectorDB();
12
19
 
13
20
  @InputType()
14
21
  export class PotentialDuplicateRequestType extends PotentialDuplicateRequest {
15
- @Field(() => Int)
16
- EntityID: number;
22
+ @Field(() => String)
23
+ declare EntityID: string;
17
24
 
18
25
  @Field(() => [CompositeKeyInputType])
19
- RecordIDs: CompositeKey[];
26
+ declare RecordIDs: CompositeKey[];
20
27
 
21
- @Field(() => Int, { nullable: true })
22
- EntityDocumentID: number;
28
+ @Field(() => String, { nullable: true })
29
+ declare EntityDocumentID: string;
23
30
 
24
31
  @Field(() => Int, { nullable: true })
25
- ProbabilityScore: number;
26
-
27
- @Field(() => Int)
28
- ListID: number;
32
+ declare ProbabilityScore: number;
33
+
34
+ @Field(() => String)
35
+ declare ListID: string;
29
36
  }
30
37
 
31
38
  @ObjectType()
32
39
  export class PotentialDuplicateType extends PotentialDuplicate {
33
40
  @Field(() => Float)
34
- ProbabilityScore: number;
41
+ declare ProbabilityScore: number;
35
42
 
36
43
  @Field(() => [KeyValuePairOutputType])
37
- KeyValuePairs: KeyValuePairOutputType[];
44
+ declare KeyValuePairs: KeyValuePairOutputType[];
38
45
  }
39
46
 
40
47
  @ObjectType()
41
48
  export class PotentialDuplicateResultType extends PotentialDuplicateResult {
42
- @Field(() => Int, { nullable: true })
43
- EntityID: number;
49
+ @Field(() => String, { nullable: true })
50
+ declare EntityID: string;
44
51
 
45
52
  @Field(() => [PotentialDuplicateType])
46
- Duplicates: PotentialDuplicateType[];
53
+ declare Duplicates: PotentialDuplicateType[];
47
54
 
48
55
  @Field(() => CompositeKeyOutputType)
49
56
  RecordPrimaryKeys: CompositeKey;
50
57
 
51
- @Field(() => [Int])
52
- DuplicateRunDetailMatchRecordIDs: number[];
58
+ @Field(() => [String])
59
+ declare DuplicateRunDetailMatchRecordIDs: string[];
53
60
  }
54
61
 
55
62
  @ObjectType()
56
- export class PotentialDuplicateResponseType extends PotentialDuplicateResponse{
57
-
63
+ export class PotentialDuplicateResponseType extends PotentialDuplicateResponse {
58
64
  @Field(() => String)
59
- Status: 'Inprogress' | 'Success' | 'Error';
65
+ declare Status: 'Inprogress' | 'Success' | 'Error';
60
66
 
61
67
  @Field(() => String, { nullable: true })
62
- ErrorMessage?: string;
68
+ declare ErrorMessage?: string;
63
69
 
64
70
  @Field(() => [PotentialDuplicateResultType])
65
- PotentialDuplicateResult: PotentialDuplicateResult[]
71
+ declare PotentialDuplicateResult: PotentialDuplicateResult[];
66
72
  }
67
73
 
68
74
  @Resolver(PotentialDuplicateResponseType)
69
75
  export class DuplicateRecordResolver {
70
-
71
76
  @Query(() => PotentialDuplicateResponseType)
72
- async GetRecordDuplicates(@Ctx() { dataSource, userPayload }: AppContext, @Arg("params")params: PotentialDuplicateRequestType): Promise<PotentialDuplicateResponseType> {
73
- const md = new Metadata();
74
-
75
- const user = UserCache.Instance.Users.find((u) => u.Email.trim().toLowerCase() === userPayload.email.trim().toLowerCase());
76
- if (!user) {
77
- throw new Error(`User ${userPayload.email} not found in UserCache`);
78
- }
79
-
80
- const result = await md.GetRecordDuplicates(params, user);
81
- return result;
77
+ async GetRecordDuplicates(
78
+ @Ctx() { dataSource, userPayload }: AppContext,
79
+ @Arg('params') params: PotentialDuplicateRequestType
80
+ ): Promise<PotentialDuplicateResponseType> {
81
+ const md = new Metadata();
82
+
83
+ const user = UserCache.Instance.Users.find((u) => u.Email.trim().toLowerCase() === userPayload.email.trim().toLowerCase());
84
+ if (!user) {
85
+ throw new Error(`User ${userPayload.email} not found in UserCache`);
82
86
  }
83
- }
87
+
88
+ const result = await md.GetRecordDuplicates(params, user);
89
+ return result;
90
+ }
91
+ }
@@ -6,7 +6,7 @@ import { AppContext } from '../types';
6
6
  @ObjectType()
7
7
  export class RunQueryResultType {
8
8
  @Field()
9
- QueryID: number;
9
+ QueryID: string;
10
10
 
11
11
  @Field()
12
12
  Success: boolean;
@@ -27,7 +27,7 @@ export class RunQueryResultType {
27
27
  @Resolver(RunQueryResultType)
28
28
  export class ReportResolver {
29
29
  @Query(() => RunQueryResultType)
30
- async GetQueryData(@Arg('QueryID', () => Int) QueryID: number, @Ctx() {}: AppContext): Promise<RunQueryResultType> {
30
+ async GetQueryData(@Arg('QueryID', () => String) QueryID: string, @Ctx() {}: AppContext): Promise<RunQueryResultType> {
31
31
  const runQuery = new RunQuery();
32
32
  const result = await runQuery.RunQuery({ QueryID: QueryID });
33
33
  return {
@@ -9,7 +9,7 @@ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
9
9
  @ObjectType()
10
10
  export class RunReportResultType {
11
11
  @Field()
12
- ReportID: number;
12
+ ReportID: string;
13
13
 
14
14
  @Field()
15
15
  Success: boolean;
@@ -30,7 +30,7 @@ export class RunReportResultType {
30
30
  @ObjectType()
31
31
  export class CreateReportResultType {
32
32
  @Field()
33
- ReportID: number;
33
+ ReportID: string;
34
34
 
35
35
  @Field()
36
36
  ReportName: string;
@@ -45,7 +45,7 @@ export class CreateReportResultType {
45
45
  @Resolver(RunReportResultType)
46
46
  export class ReportResolverExtended {
47
47
  @Query(() => RunReportResultType)
48
- async GetReportData(@Arg('ReportID', () => Int) ReportID: number, @Ctx() {}: AppContext): Promise<RunReportResultType> {
48
+ async GetReportData(@Arg('ReportID', () => String) ReportID: string, @Ctx() {}: AppContext): Promise<RunReportResultType> {
49
49
  const runReport = new RunReport();
50
50
  const result = await runReport.RunReport({ ReportID: ReportID });
51
51
  return {
@@ -62,7 +62,7 @@ export class ReportResolverExtended {
62
62
  * This mutation will create a new report from a conversation detail ID
63
63
  */
64
64
  @Mutation(() => CreateReportResultType)
65
- async CreateReportFromConversationDetailID(@Arg('ConversationDetailID', () => Int) ConversationDetailID: number,
65
+ async CreateReportFromConversationDetailID(@Arg('ConversationDetailID', () => String) ConversationDetailID: string,
66
66
  @Ctx() {dataSource, userPayload}: AppContext): Promise<CreateReportResultType> {
67
67
  try {
68
68
  const md = new Metadata();
@@ -128,7 +128,7 @@ export class ReportResolverExtended {
128
128
  }
129
129
  else {
130
130
  return {
131
- ReportID: -1,
131
+ ReportID: "",
132
132
  ReportName: '',
133
133
  Success: false,
134
134
  ErrorMessage: 'Unable to save new report'
@@ -137,7 +137,7 @@ export class ReportResolverExtended {
137
137
  }
138
138
  catch (ex) {
139
139
  return {
140
- ReportID: -1,
140
+ ReportID: "",
141
141
  ReportName: '',
142
142
  Success: false,
143
143
  ErrorMessage: 'Unable to create new report: ' + ex.message
@@ -10,26 +10,26 @@ import { UserFavorite_, UserFavoriteResolverBase } from '../generated/generated'
10
10
  //****************************************************************************
11
11
  @InputType()
12
12
  export class UserFavoriteSearchParams {
13
- @Field(() => Int)
14
- EntityID: number;
13
+ @Field(() => String)
14
+ EntityID: string;
15
15
 
16
16
  @Field(() => CompositeKeyInputType)
17
17
  CompositeKey: CompositeKeyInputType;
18
18
 
19
- @Field(() => Int)
20
- UserID: number;
19
+ @Field(() => String)
20
+ UserID: string;
21
21
  }
22
22
 
23
23
  @InputType()
24
24
  export class UserFavoriteSetParams {
25
- @Field(() => Int)
26
- EntityID: number;
25
+ @Field(() => String)
26
+ EntityID: string;
27
27
 
28
28
  @Field(() => CompositeKeyInputType)
29
29
  CompositeKey: CompositeKeyInputType;
30
30
 
31
- @Field(() => Int)
32
- UserID: number;
31
+ @Field(() => String)
32
+ UserID: string;
33
33
 
34
34
  @Field(() => Boolean)
35
35
  IsFavorite: boolean;
@@ -5,7 +5,9 @@ import { User_, UserResolverBase } from '../generated/generated';
5
5
  export class UserResolver extends UserResolverBase {
6
6
  @Query(() => User_)
7
7
  async CurrentUser(@Ctx() { dataSource, userPayload }: AppContext) {
8
- return await this.UserByEmail(userPayload.email, { dataSource, userPayload });
8
+ const result = await this.UserByEmail(userPayload.email, { dataSource, userPayload });
9
+ console.log('CurrentUser', result);
10
+ return result;
9
11
  }
10
12
 
11
13
  @Query(() => User_)
@@ -43,7 +43,7 @@ export class UserViewResolver extends UserViewResolverBase {
43
43
  }
44
44
 
45
45
  @Query(() => [UserView_])
46
- async UpdateWhereClause(@Arg('ID', () => Int) ID: number, @Ctx() { userPayload }: AppContext) {
46
+ async UpdateWhereClause(@Arg('ID', () => String) ID: string, @Ctx() { userPayload }: AppContext) {
47
47
  // in this query we want to update the uesrView record in the DB with a new where clause
48
48
  // this should normally not be a factor but we have this exposed in the GraphQL API so that
49
49
  // a dev can force the update if desired from the client. The normal path is just to update
package/src/types.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { UserViewEntity } from '@memberjunction/core-entities';
1
2
  import { GraphQLSchema } from 'graphql';
3
+ import { PubSubEngine } from 'type-graphql';
2
4
  import { DataSource, QueryRunner } from 'typeorm';
3
5
 
4
6
  export type UserPayload = {
@@ -17,3 +19,22 @@ export type DirectiveBuilder = {
17
19
  typeDefs: string;
18
20
  transformer: (schema: GraphQLSchema) => GraphQLSchema;
19
21
  };
22
+
23
+ export type RunViewGenericParams = {
24
+ viewInfo: UserViewEntity;
25
+ dataSource: DataSource;
26
+ extraFilter: string;
27
+ orderBy: string;
28
+ userSearchString: string;
29
+ excludeUserViewRunID?: string;
30
+ overrideExcludeFilter?: string;
31
+ saveViewResults?: boolean;
32
+ fields?: string[];
33
+ ignoreMaxRows?: boolean;
34
+ excludeDataFromAllPriorViewRuns?: boolean;
35
+ forceAuditLog?: boolean;
36
+ auditLogDescription?: string;
37
+ resultType?: string;
38
+ userPayload?: UserPayload;
39
+ pubSub: PubSubEngine
40
+ }
package/tsconfig.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "es2020",
3
+ "module": "ESNext",
4
+ "target": "ESNext",
5
5
  "outDir": "dist",
6
6
  "rootDir": "src",
7
7
  "sourceMap": true,
@@ -23,8 +23,7 @@
23
23
  "noFallthroughCasesInSwitch": true,
24
24
  "allowSyntheticDefaultImports": true,
25
25
  "emitDecoratorMetadata": true,
26
- "skipLibCheck": true,
27
- "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo"
26
+ "skipLibCheck": true
28
27
  },
29
28
  "exclude": ["node_modules"],
30
29
  "include": ["./src/**/*.ts"]
@@ -1,4 +0,0 @@
1
- import { ApolloServerPlugin } from '@apollo/server';
2
- import { AppContext } from '../types';
3
- export declare const TransactionPlugin: ApolloServerPlugin<AppContext>;
4
- //# sourceMappingURL=TransactionPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionPlugin.d.ts","sourceRoot":"","sources":["../../src/apolloServer/TransactionPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgF,MAAM,gBAAgB,CAAC;AAElI,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,UAAU,CAoD5D,CAAC"}
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionPlugin = void 0;
4
- exports.TransactionPlugin = {
5
- async requestDidStart(requestContext) {
6
- const start = Date.now();
7
- const query = requestContext.request.query || '';
8
- const isMutation = /^\s*mutation\b/i.test(query);
9
- if (!isMutation) {
10
- return null;
11
- }
12
- const dataSource = requestContext.contextValue.dataSource;
13
- const queryRunner = dataSource.createQueryRunner();
14
- requestContext.contextValue.queryRunner = queryRunner;
15
- console.log('Starting transaction wrapper, time spent: ', Date.now() - start, 'ms ');
16
- await queryRunner.startTransaction();
17
- return {
18
- didEncounterErrors: async (requestContext) => {
19
- console.log('Error in transaction wrapper: ' + requestContext.errors, 'time spent: ', Date.now() - start, 'ms');
20
- },
21
- executionDidStart: async () => {
22
- return {
23
- executionDidEnd: async (err) => {
24
- try {
25
- if (err) {
26
- console.log('Error in transaction, rolling back, time spent: ', Date.now() - start, 'ms ');
27
- console.error('Rolling back transaction', err);
28
- await queryRunner.rollbackTransaction();
29
- }
30
- else {
31
- console.log('Committing transaction, time spent: ', Date.now() - start, 'ms ');
32
- await queryRunner.commitTransaction();
33
- }
34
- }
35
- catch (execErr) {
36
- console.log('Execution Error, time spent: ', Date.now() - start, 'ms ');
37
- console.error(execErr);
38
- }
39
- finally {
40
- await queryRunner.release();
41
- console.log('Transaction complete, time spent: ', Date.now() - start, 'ms ');
42
- }
43
- },
44
- };
45
- },
46
- };
47
- },
48
- };
49
- //# sourceMappingURL=TransactionPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionPlugin.js","sourceRoot":"","sources":["../../src/apolloServer/TransactionPlugin.ts"],"names":[],"mappings":";;;AAIa,QAAA,iBAAiB,GAAmC;IAC/D,KAAK,CAAC,eAAe,CAAC,cAAc;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAKD,MAAM,UAAU,GAAe,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC;QACtE,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAEnD,cAAc,CAAC,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;QACrF,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAErC,OAAO;YACL,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YAClH,CAAC;YACD,iBAAiB,EAAE,KAAK,IAAI,EAAE;gBAC5B,OAAO;oBACL,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;wBAC7B,IAAI,CAAC;4BACH,IAAI,GAAG,EAAE,CAAC;gCACR,OAAO,CAAC,GAAG,CACT,kDAAkD,EAClD,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAClB,KAAK,CACN,CAAC;gCACF,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gCAC/C,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;4BAC1C,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;gCAC/E,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;4BACxC,CAAC;wBACH,CAAC;wBAAC,OAAO,OAAO,EAAE,CAAC;4BACjB,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;4BACxE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACzB,CAAC;gCAAS,CAAC;4BACT,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,11 +0,0 @@
1
- /// <reference types="node" />
2
- import { ApolloServer, ApolloServerOptions } from '@apollo/server';
3
- import { Disposable } from 'graphql-ws';
4
- import { Server } from 'http';
5
- import { AppContext } from '../types';
6
- declare const buildApolloServer: (configOverride: ApolloServerOptions<AppContext>, { httpServer, serverCleanup }: {
7
- httpServer: Server;
8
- serverCleanup: Disposable;
9
- }) => ApolloServer<AppContext>;
10
- export default buildApolloServer;
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apolloServer/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,QAAA,MAAM,iBAAiB,mBACL,oBAAoB,UAAU,CAAC,iCAChB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,UAAU,CAAA;CAAE,6BAoB9E,CAAC;AAEL,eAAe,iBAAiB,CAAC"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const server_1 = require("@apollo/server");
4
- const drainHttpServer_1 = require("@apollo/server/plugin/drainHttpServer");
5
- const config_1 = require("../config");
6
- const TransactionPlugin_1 = require("./TransactionPlugin");
7
- const buildApolloServer = (configOverride, { httpServer, serverCleanup }) => new server_1.ApolloServer({
8
- csrfPrevention: true,
9
- cache: 'bounded',
10
- plugins: [
11
- (0, drainHttpServer_1.ApolloServerPluginDrainHttpServer)({ httpServer }),
12
- TransactionPlugin_1.TransactionPlugin,
13
- {
14
- async serverWillStart() {
15
- return {
16
- async drainServer() {
17
- await serverCleanup.dispose();
18
- },
19
- };
20
- },
21
- },
22
- ],
23
- introspection: config_1.enableIntrospection,
24
- ...configOverride,
25
- });
26
- exports.default = buildApolloServer;
27
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apolloServer/index.ts"],"names":[],"mappings":";;AAAA,2CAAmE;AACnE,2EAA0F;AAI1F,sCAAgD;AAEhD,2DAAwD;AAExD,MAAM,iBAAiB,GAAG,CACxB,cAA+C,EAC/C,EAAE,UAAU,EAAE,aAAa,EAAqD,EAChF,EAAE,CACF,IAAI,qBAAY,CAAC;IACf,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE;QACP,IAAA,mDAAiC,EAAC,EAAE,UAAU,EAAE,CAAC;QACjD,qCAAiB;QACjB;YACE,KAAK,CAAC,eAAe;gBACnB,OAAO;oBACL,KAAK,CAAC,WAAW;wBACf,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;oBAChC,CAAC;iBACF,CAAC;YACJ,CAAC;SACF;KACF;IACD,aAAa,EAAE,4BAAmB;IAClC,GAAG,cAAc;CAClB,CAAC,CAAC;AAEL,kBAAe,iBAAiB,CAAC"}
@@ -1,6 +0,0 @@
1
- import { NewUserBase } from "./newUsers";
2
- export declare class ExampleNewUserSubClass extends NewUserBase {
3
- createNewUser(firstName: string, lastName: string, email: string): Promise<import("@memberjunction/core-entities").UserEntity>;
4
- }
5
- export declare function LoadExampleNewUserSubClass(): void;
6
- //# sourceMappingURL=exampleNewUserSubClass.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exampleNewUserSubClass.d.ts","sourceRoot":"","sources":["../../src/auth/exampleNewUserSubClass.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYzC,qBAAa,sBAAuB,SAAQ,WAAW;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAsDzF;AAED,wBAAgB,0BAA0B,SAEzC"}