@memberjunction/server 2.112.0 → 2.113.0

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 (250) hide show
  1. package/dist/agents/skip-agent.d.ts +4 -4
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +951 -808
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +43 -53
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.js +1 -1
  10. package/dist/auth/AuthProviderFactory.d.ts +1 -1
  11. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  12. package/dist/auth/AuthProviderFactory.js +3 -1
  13. package/dist/auth/AuthProviderFactory.js.map +1 -1
  14. package/dist/auth/BaseAuthProvider.d.ts +1 -1
  15. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  16. package/dist/auth/BaseAuthProvider.js +2 -3
  17. package/dist/auth/BaseAuthProvider.js.map +1 -1
  18. package/dist/auth/IAuthProvider.d.ts +1 -1
  19. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  20. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  21. package/dist/auth/exampleNewUserSubClass.js +1 -1
  22. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  23. package/dist/auth/index.d.ts +1 -1
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +6 -6
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/initializeProviders.js +1 -1
  28. package/dist/auth/initializeProviders.js.map +1 -1
  29. package/dist/auth/newUsers.d.ts +1 -1
  30. package/dist/auth/newUsers.d.ts.map +1 -1
  31. package/dist/auth/newUsers.js +7 -7
  32. package/dist/auth/newUsers.js.map +1 -1
  33. package/dist/auth/providers/Auth0Provider.d.ts +1 -1
  34. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  35. package/dist/auth/providers/Auth0Provider.js +1 -1
  36. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  37. package/dist/auth/providers/CognitoProvider.d.ts +1 -1
  38. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  39. package/dist/auth/providers/CognitoProvider.js +6 -3
  40. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  41. package/dist/auth/providers/GoogleProvider.d.ts +1 -1
  42. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  43. package/dist/auth/providers/GoogleProvider.js +1 -1
  44. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  45. package/dist/auth/providers/MSALProvider.d.ts +1 -1
  46. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  47. package/dist/auth/providers/MSALProvider.js +1 -1
  48. package/dist/auth/providers/MSALProvider.js.map +1 -1
  49. package/dist/auth/providers/OktaProvider.d.ts +1 -1
  50. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  51. package/dist/auth/providers/OktaProvider.js +1 -1
  52. package/dist/auth/providers/OktaProvider.js.map +1 -1
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +10 -22
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +1 -1
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +7 -9
  59. package/dist/context.js.map +1 -1
  60. package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
  61. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  62. package/dist/entitySubclasses/entityPermissions.server.js +1 -1
  63. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  64. package/dist/generated/generated.d.ts +788 -658
  65. package/dist/generated/generated.d.ts.map +1 -1
  66. package/dist/generated/generated.js +2050 -3054
  67. package/dist/generated/generated.js.map +1 -1
  68. package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
  69. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
  70. package/dist/generic/KeyInputOutputTypes.js +1 -1
  71. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  72. package/dist/generic/ResolverBase.d.ts +1 -1
  73. package/dist/generic/ResolverBase.d.ts.map +1 -1
  74. package/dist/generic/ResolverBase.js +10 -15
  75. package/dist/generic/ResolverBase.js.map +1 -1
  76. package/dist/generic/RunViewResolver.d.ts +1 -1
  77. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  78. package/dist/generic/RunViewResolver.js +15 -15
  79. package/dist/generic/RunViewResolver.js.map +1 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +13 -18
  82. package/dist/index.js.map +1 -1
  83. package/dist/resolvers/ActionResolver.d.ts +2 -2
  84. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  85. package/dist/resolvers/ActionResolver.js +30 -28
  86. package/dist/resolvers/ActionResolver.js.map +1 -1
  87. package/dist/resolvers/AskSkipResolver.d.ts +2 -2
  88. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  89. package/dist/resolvers/AskSkipResolver.js +50 -60
  90. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  91. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  92. package/dist/resolvers/ComponentRegistryResolver.js +38 -36
  93. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  94. package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
  95. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  96. package/dist/resolvers/CreateQueryResolver.js +40 -43
  97. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  98. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  99. package/dist/resolvers/DatasetResolver.js +1 -1
  100. package/dist/resolvers/DatasetResolver.js.map +1 -1
  101. package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
  102. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  103. package/dist/resolvers/EntityRecordNameResolver.js +1 -1
  104. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  105. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  106. package/dist/resolvers/EntityResolver.js +1 -1
  107. package/dist/resolvers/EntityResolver.js.map +1 -1
  108. package/dist/resolvers/FileCategoryResolver.js +1 -1
  109. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  110. package/dist/resolvers/FileResolver.js +1 -1
  111. package/dist/resolvers/FileResolver.js.map +1 -1
  112. package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
  113. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  114. package/dist/resolvers/GetDataContextDataResolver.js +5 -5
  115. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  116. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  117. package/dist/resolvers/GetDataResolver.js +6 -8
  118. package/dist/resolvers/GetDataResolver.js.map +1 -1
  119. package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
  120. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  121. package/dist/resolvers/MergeRecordsResolver.js +3 -3
  122. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  123. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
  124. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  125. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  126. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  127. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  128. package/dist/resolvers/QueryResolver.js +11 -11
  129. package/dist/resolvers/QueryResolver.js.map +1 -1
  130. package/dist/resolvers/ReportResolver.js +1 -1
  131. package/dist/resolvers/ReportResolver.js.map +1 -1
  132. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  133. package/dist/resolvers/RunAIAgentResolver.js +28 -27
  134. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  135. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  136. package/dist/resolvers/RunAIPromptResolver.js +31 -31
  137. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  138. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  139. package/dist/resolvers/RunTemplateResolver.js +9 -9
  140. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  141. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  142. package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
  143. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  144. package/dist/resolvers/SyncDataResolver.d.ts +1 -1
  145. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  146. package/dist/resolvers/SyncDataResolver.js +14 -15
  147. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  148. package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
  149. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  150. package/dist/resolvers/SyncRolesUsersResolver.js +44 -48
  151. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  152. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  153. package/dist/resolvers/TaskResolver.js +7 -7
  154. package/dist/resolvers/TaskResolver.js.map +1 -1
  155. package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
  156. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  157. package/dist/resolvers/TransactionGroupResolver.js +12 -12
  158. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  159. package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
  160. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  161. package/dist/resolvers/UserFavoriteResolver.js +1 -1
  162. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  163. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  164. package/dist/resolvers/UserViewResolver.js.map +1 -1
  165. package/dist/rest/EntityCRUDHandler.d.ts +1 -1
  166. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  167. package/dist/rest/EntityCRUDHandler.js +16 -14
  168. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  169. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  170. package/dist/rest/RESTEndpointHandler.js +25 -23
  171. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  172. package/dist/rest/ViewOperationsHandler.d.ts +1 -1
  173. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  174. package/dist/rest/ViewOperationsHandler.js +21 -17
  175. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  176. package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
  177. package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
  178. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  179. package/dist/services/ScheduledJobsService.js +6 -4
  180. package/dist/services/ScheduledJobsService.js.map +1 -1
  181. package/dist/services/TaskOrchestrator.d.ts +1 -1
  182. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  183. package/dist/services/TaskOrchestrator.js +30 -30
  184. package/dist/services/TaskOrchestrator.js.map +1 -1
  185. package/dist/types.d.ts +3 -3
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +1 -0
  188. package/dist/types.js.map +1 -1
  189. package/dist/util.d.ts +1 -1
  190. package/dist/util.d.ts.map +1 -1
  191. package/dist/util.js +2 -2
  192. package/dist/util.js.map +1 -1
  193. package/package.json +39 -36
  194. package/src/agents/skip-agent.ts +1200 -1067
  195. package/src/agents/skip-sdk.ts +851 -877
  196. package/src/apolloServer/index.ts +2 -2
  197. package/src/auth/AuthProviderFactory.ts +14 -8
  198. package/src/auth/BaseAuthProvider.ts +4 -5
  199. package/src/auth/IAuthProvider.ts +2 -2
  200. package/src/auth/exampleNewUserSubClass.ts +2 -9
  201. package/src/auth/index.ts +26 -31
  202. package/src/auth/initializeProviders.ts +3 -3
  203. package/src/auth/newUsers.ts +134 -166
  204. package/src/auth/providers/Auth0Provider.ts +5 -5
  205. package/src/auth/providers/CognitoProvider.ts +10 -7
  206. package/src/auth/providers/GoogleProvider.ts +5 -4
  207. package/src/auth/providers/MSALProvider.ts +5 -5
  208. package/src/auth/providers/OktaProvider.ts +7 -6
  209. package/src/config.ts +54 -63
  210. package/src/context.ts +30 -42
  211. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  212. package/src/generated/generated.ts +40442 -48106
  213. package/src/generic/KeyInputOutputTypes.ts +6 -3
  214. package/src/generic/ResolverBase.ts +78 -119
  215. package/src/generic/RunViewResolver.ts +23 -27
  216. package/src/index.ts +48 -66
  217. package/src/resolvers/ActionResolver.ts +57 -46
  218. package/src/resolvers/AskSkipResolver.ts +533 -607
  219. package/src/resolvers/ComponentRegistryResolver.ts +562 -547
  220. package/src/resolvers/CreateQueryResolver.ts +655 -683
  221. package/src/resolvers/DatasetResolver.ts +6 -5
  222. package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
  223. package/src/resolvers/EntityRecordNameResolver.ts +5 -9
  224. package/src/resolvers/EntityResolver.ts +7 -9
  225. package/src/resolvers/FileCategoryResolver.ts +2 -2
  226. package/src/resolvers/FileResolver.ts +4 -4
  227. package/src/resolvers/GetDataContextDataResolver.ts +118 -106
  228. package/src/resolvers/GetDataResolver.ts +205 -194
  229. package/src/resolvers/MergeRecordsResolver.ts +5 -5
  230. package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
  231. package/src/resolvers/QueryResolver.ts +78 -95
  232. package/src/resolvers/ReportResolver.ts +2 -2
  233. package/src/resolvers/RunAIAgentResolver.ts +828 -818
  234. package/src/resolvers/RunAIPromptResolver.ts +709 -693
  235. package/src/resolvers/RunTemplateResolver.ts +103 -105
  236. package/src/resolvers/SqlLoggingConfigResolver.ts +72 -69
  237. package/src/resolvers/SyncDataResolver.ts +352 -386
  238. package/src/resolvers/SyncRolesUsersResolver.ts +350 -387
  239. package/src/resolvers/TaskResolver.ts +115 -110
  240. package/src/resolvers/TransactionGroupResolver.ts +138 -143
  241. package/src/resolvers/UserFavoriteResolver.ts +8 -17
  242. package/src/resolvers/UserViewResolver.ts +12 -17
  243. package/src/rest/EntityCRUDHandler.ts +268 -291
  244. package/src/rest/RESTEndpointHandler.ts +776 -782
  245. package/src/rest/ViewOperationsHandler.ts +195 -191
  246. package/src/scheduler/LearningCycleScheduler.ts +52 -8
  247. package/src/services/ScheduledJobsService.ts +132 -129
  248. package/src/services/TaskOrchestrator.ts +776 -792
  249. package/src/types.ts +9 -15
  250. package/src/util.ts +109 -112
package/src/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DatabaseProviderBase, UserInfo } from '@memberjunction/global';
1
+ import { DatabaseProviderBase, UserInfo } from '@memberjunction/core';
2
2
  import { UserViewEntityExtended } from '@memberjunction/core-entities';
3
3
  import { GraphQLSchema } from 'graphql';
4
4
  import sql from 'mssql';
@@ -29,7 +29,7 @@ export type AppContext = {
29
29
  dataSources: DataSourceInfo[];
30
30
 
31
31
  /**
32
- * Per-request DatabaseProviderBase instances
32
+ * Per-request DatabaseProviderBase instances
33
33
  */
34
34
  providers: Array<ProviderInfo>;
35
35
  };
@@ -39,23 +39,16 @@ export class ProviderInfo {
39
39
  type: 'Admin' | 'Read-Write' | 'Read-Only' | 'Other';
40
40
  }
41
41
 
42
- export class DataSourceInfo {
42
+ export class DataSourceInfo {
43
43
  dataSource: sql.ConnectionPool;
44
44
  host: string;
45
45
  port: number;
46
46
  instance?: string;
47
47
  database: string;
48
48
  userName: string;
49
- type: 'Admin' | 'Read-Write' | 'Read-Only' | 'Other';
49
+ type: "Admin" | "Read-Write" | "Read-Only" | "Other";
50
50
 
51
- constructor(init: {
52
- dataSource: sql.ConnectionPool;
53
- type: 'Admin' | 'Read-Write' | 'Read-Only' | 'Other';
54
- host: string;
55
- port: number;
56
- database: string;
57
- userName: string;
58
- }) {
51
+ constructor(init: {dataSource: sql.ConnectionPool, type: "Admin" | "Read-Write" | "Read-Only" | "Other", host: string, port: number, database: string, userName: string} ) {
59
52
  this.dataSource = init.dataSource;
60
53
  this.host = init.host;
61
54
  this.port = init.port;
@@ -63,7 +56,7 @@ export class DataSourceInfo {
63
56
  this.userName = init.userName;
64
57
  this.type = init.type;
65
58
  }
66
- }
59
+ };
67
60
 
68
61
  export type DirectiveBuilder = {
69
62
  typeDefs: string;
@@ -87,9 +80,10 @@ export type RunViewGenericParams = {
87
80
  forceAuditLog?: boolean;
88
81
  auditLogDescription?: string;
89
82
  resultType?: string;
90
- userPayload?: UserPayload;
83
+ userPayload?: UserPayload;
91
84
  };
92
85
 
86
+
93
87
  export class MJServerEvent {
94
88
  type: 'setupComplete' | 'requestReceived' | 'requestCompleted' | 'requestFailed';
95
89
  dataSources: DataSourceInfo[];
@@ -112,4 +106,4 @@ export async function raiseEvent(type: MJServerEvent['type'], dataSources: DataS
112
106
  mje.event = MJEventType.ComponentEvent;
113
107
  mje.eventCode = MJ_SERVER_EVENT_CODE;
114
108
  MJGlobal.Instance.RaiseEvent(mje);
115
- }
109
+ }
package/src/util.ts CHANGED
@@ -6,7 +6,7 @@ import { URL } from 'url';
6
6
  import { z } from 'zod';
7
7
  import { DataSourceInfo, ProviderInfo } from './types';
8
8
  import sql from 'mssql';
9
- import { DatabaseProviderBase } from '@memberjunction/global';
9
+ import { DatabaseProviderBase } from '@memberjunction/core';
10
10
 
11
11
  const gzip = promisify(gzipCallback);
12
12
 
@@ -15,7 +15,7 @@ type StreamCallback = (jsonObject: any) => void;
15
15
  /**
16
16
  * Utility function to handle HTTP/HTTPS requests with optional compression, custom headers, and streaming response callback for JSON objects.
17
17
  * This function accumulates data chunks and parses complete JSON objects, assuming newline-delimited JSON in the stream.
18
- *
18
+ *
19
19
  * @param {string} url - The URL to which the request is sent.
20
20
  * @param {any} payload - The payload to be sent with the request.
21
21
  * @param {boolean} useCompression - Flag to determine if payload compression should be used.
@@ -23,13 +23,7 @@ type StreamCallback = (jsonObject: any) => void;
23
23
  * @param {StreamCallback} [streamCallback] - Optional callback for handling streaming JSON objects.
24
24
  * @returns {Promise<any[]>} - A promise that resolves to an array of all JSON objects received during the streaming process.
25
25
  */
26
- export async function sendPostRequest(
27
- url: string,
28
- payload: any,
29
- useCompression: boolean,
30
- headers: Record<string, string> | null,
31
- streamCallback?: StreamCallback
32
- ): Promise<any[]> {
26
+ export async function sendPostRequest(url: string, payload: any, useCompression: boolean, headers: Record<string, string> | null, streamCallback?: StreamCallback): Promise<any[]> {
33
27
  return new Promise(async (resolve, reject) => {
34
28
  try {
35
29
  const { protocol, hostname, port, pathname } = new URL(url);
@@ -47,7 +41,7 @@ export async function sendPostRequest(
47
41
  } else {
48
42
  data = Buffer.from(JSON.stringify(payload));
49
43
  }
50
-
44
+
51
45
  const options = {
52
46
  hostname,
53
47
  port: port || (protocol === 'https:' ? 443 : 80),
@@ -55,18 +49,18 @@ export async function sendPostRequest(
55
49
  method: 'POST',
56
50
  headers: {
57
51
  'Content-Type': 'application/json',
58
- ...headers,
59
- },
52
+ ...headers
53
+ }
60
54
  };
61
-
55
+
62
56
  const request = protocol === 'https:' ? httpsRequest : httpRequest;
63
57
  const jsonObjects: any[] = [];
64
58
  let buffer = '';
65
-
59
+
66
60
  const req = request(options, (res) => {
67
61
  const gunzip = createGunzip();
68
62
  const stream = res.headers['content-encoding'] === 'gzip' ? res.pipe(gunzip) : res;
69
-
63
+
70
64
  stream.on('data', (chunk) => {
71
65
  buffer += chunk;
72
66
  let boundary;
@@ -84,7 +78,7 @@ export async function sendPostRequest(
84
78
  }
85
79
  }
86
80
  });
87
-
81
+
88
82
  stream.on('end', () => {
89
83
  // Attempt to parse any remaining data in buffer in case it's a complete JSON object
90
84
  if (buffer.trim()) {
@@ -101,121 +95,124 @@ export async function sendPostRequest(
101
95
  resolve(jsonObjects);
102
96
  });
103
97
  });
104
-
98
+
105
99
  req.on('error', (e) => {
106
100
  const err = z.object({ message: z.string() }).safeParse(e);
107
101
  console.error(`Error in sendPostRequest().req.on(error): ${err.success ? err.data.message : e}`);
108
102
  reject(e);
109
103
  });
110
-
104
+
111
105
  req.write(data);
112
106
  req.end();
113
- } catch (e) {
107
+ }
108
+ catch (e) {
114
109
  const err = z.object({ message: z.string() }).safeParse(e);
115
- console.error(`Error in sendPostRequest: ${err.success ? err.data.message : e}`);
110
+ console.error(`Error in sendPostRequest: ${err.success ? err.data.message : e}`)
116
111
  reject(e);
117
112
  }
118
- });
119
- }
120
-
121
- /**
122
- * Returns the read-only data source if it exists, otherwise returns the read-write data source if options is not provided or if options.allowFallbackToReadWrite is true.
123
- * @param dataSources
124
- * @param options
125
- * @returns
126
- */
127
- export function GetReadOnlyDataSource(
128
- dataSources: DataSourceInfo[],
129
- options?: { allowFallbackToReadWrite: boolean }
130
- ): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
131
- const readOnlyDataSource = dataSources.find((ds) => ds.type === 'Read-Only');
132
- if (readOnlyDataSource) {
133
- return extendConnectionPoolWithQuery(readOnlyDataSource.dataSource);
134
- } else if (!options || options.allowFallbackToReadWrite) {
135
- // default behavior for backward compatibility prior to MJ 2.22.3 where we introduced this functionality was to have a single
136
- // connection, so for back-compatability, if we don't have a read-only data source, we'll fall back to the read-write data source
137
- const readWriteDataSource = dataSources.find((ds) => ds.type === 'Read-Write');
138
- if (readWriteDataSource) {
139
- return extendConnectionPoolWithQuery(readWriteDataSource.dataSource);
140
- }
141
113
  }
142
- throw new Error('No suitable data source found');
114
+ );
143
115
  }
144
116
 
145
- /**
146
- * Returns the read-only provider if it exists, otherwise returns the original provider if options is not provided or if options.allowFallbackToReadWrite is true.
147
- * @param options
148
- * @returns
149
- */
150
- export function GetReadOnlyProvider(providers: Array<ProviderInfo>, options?: { allowFallbackToReadWrite: boolean }): DatabaseProviderBase {
151
- if (!providers || providers.length === 0) return null; // no providers available
152
117
 
153
- const readOnlyProvider = providers.find((p) => p.type === 'Read-Only');
154
- if (readOnlyProvider) {
155
- return readOnlyProvider.provider;
156
- } else if (options?.allowFallbackToReadWrite) {
157
- return providers[0].provider; // if no read-only provider is provided, use the original provider since we are allowed to fallback to read-write
158
- } else {
159
- return null; // no read only provider available and we are not allowed to fallback to read-write
118
+ /**
119
+ * Returns the read-only data source if it exists, otherwise returns the read-write data source if options is not provided or if options.allowFallbackToReadWrite is true.
120
+ * @param dataSources
121
+ * @param options
122
+ * @returns
123
+ */
124
+ export function GetReadOnlyDataSource(dataSources: DataSourceInfo[], options?: {allowFallbackToReadWrite: boolean}): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
125
+ const readOnlyDataSource = dataSources.find((ds) => ds.type === 'Read-Only');
126
+ if (readOnlyDataSource) {
127
+ return extendConnectionPoolWithQuery(readOnlyDataSource.dataSource);
128
+ }
129
+ else if (!options || options.allowFallbackToReadWrite) {
130
+ // default behavior for backward compatibility prior to MJ 2.22.3 where we introduced this functionality was to have a single
131
+ // connection, so for back-compatability, if we don't have a read-only data source, we'll fall back to the read-write data source
132
+ const readWriteDataSource = dataSources.find((ds) => ds.type === 'Read-Write');
133
+ if (readWriteDataSource) {
134
+ return extendConnectionPoolWithQuery(readWriteDataSource.dataSource);
135
+ }
136
+ }
137
+ throw new Error('No suitable data source found');
160
138
  }
161
- }
162
139
 
163
- /**
164
- * Returns the read-write provider if it exists, otherwise returns the original provider if options is not provided or if options.allowFallbackToReadOnly is true.
165
- * @param options
166
- * @returns
167
- */
168
- export function GetReadWriteProvider(providers: Array<ProviderInfo>, options?: { allowFallbackToReadOnly: boolean }): DatabaseProviderBase {
169
- if (!providers || providers.length === 0) return null; // no providers available
140
+ /**
141
+ * Returns the read-only provider if it exists, otherwise returns the original provider if options is not provided or if options.allowFallbackToReadWrite is true.
142
+ * @param options
143
+ * @returns
144
+ */
145
+ export function GetReadOnlyProvider(providers: Array<ProviderInfo>, options?: {allowFallbackToReadWrite: boolean}): DatabaseProviderBase {
146
+ if (!providers || providers.length === 0)
147
+ return null; // no providers available
148
+
149
+ const readOnlyProvider = providers.find((p) => p.type === 'Read-Only');
150
+ if (readOnlyProvider) {
151
+ return readOnlyProvider.provider;
152
+ }
153
+ else if (options?.allowFallbackToReadWrite) {
154
+ return providers[0].provider; // if no read-only provider is provided, use the original provider since we are allowed to fallback to read-write
155
+ }
156
+ else {
157
+ return null; // no read only provider available and we are not allowed to fallback to read-write
158
+ }
159
+ }
170
160
 
171
- const readWriteProvider = providers.find((p) => p.type === 'Read-Write');
172
- if (readWriteProvider) {
173
- return readWriteProvider.provider;
174
- } else if (options?.allowFallbackToReadOnly) {
175
- return GetReadOnlyProvider(providers, { allowFallbackToReadWrite: false }); // if no read-write provider is provided, use the read-only provider since we are allowed to fallback to read-only
176
- } else {
177
- return null; // no read-write provider available and we are not allowed to fallback to read-only
161
+ /**
162
+ * Returns the read-write provider if it exists, otherwise returns the original provider if options is not provided or if options.allowFallbackToReadOnly is true.
163
+ * @param options
164
+ * @returns
165
+ */
166
+ export function GetReadWriteProvider(providers: Array<ProviderInfo>, options?: {allowFallbackToReadOnly: boolean}): DatabaseProviderBase {
167
+ if (!providers || providers.length === 0)
168
+ return null; // no providers available
169
+
170
+ const readWriteProvider = providers.find((p) => p.type === 'Read-Write');
171
+ if (readWriteProvider) {
172
+ return readWriteProvider.provider;
173
+ }
174
+ else if (options?.allowFallbackToReadOnly) {
175
+ return GetReadOnlyProvider(providers, { allowFallbackToReadWrite: false }); // if no read-write provider is provided, use the read-only provider since we are allowed to fallback to read-only
176
+ }
177
+ else {
178
+ return null; // no read-write provider available and we are not allowed to fallback to read-only
179
+ }
178
180
  }
179
- }
180
181
 
181
- /**
182
- * Returns the read-write data source if it exists, otherwise throws an error.
183
- * @param dataSources
184
- * @returns
185
- */
186
- export function GetReadWriteDataSource(
187
- dataSources: DataSourceInfo[]
188
- ): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
189
- const readWriteDataSource = dataSources.find((ds) => ds.type === 'Read-Write');
190
- if (readWriteDataSource) {
191
- return extendConnectionPoolWithQuery(readWriteDataSource.dataSource);
182
+ /**
183
+ * Returns the read-write data source if it exists, otherwise throws an error.
184
+ * @param dataSources
185
+ * @returns
186
+ */
187
+ export function GetReadWriteDataSource(dataSources: DataSourceInfo[]): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
188
+ const readWriteDataSource = dataSources.find((ds) => ds.type === 'Read-Write');
189
+ if (readWriteDataSource) {
190
+ return extendConnectionPoolWithQuery(readWriteDataSource.dataSource);
191
+ }
192
+ throw new Error('No suitable read-write data source found');
192
193
  }
193
- throw new Error('No suitable read-write data source found');
194
- }
195
194
 
196
- /**
197
- * Extends a ConnectionPool with a query method that returns results in the format expected by generated code
198
- * This provides backwards compatibility with code that expects TypeORM-style query results
199
- */
200
- export function extendConnectionPoolWithQuery(
201
- pool: sql.ConnectionPool
202
- ): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
203
- const extendedPool = pool as any;
204
- extendedPool.query = async (sqlQuery: string, parameters?: any): Promise<any[]> => {
205
- const request = new sql.Request(pool);
206
- // Add parameters if provided
207
- if (parameters) {
208
- if (Array.isArray(parameters)) {
209
- parameters.forEach((value, index) => {
210
- request.input(`p${index}`, value);
211
- });
212
- // Replace ? with @p0, @p1, etc. in the query
213
- let paramIndex = 0;
214
- sqlQuery = sqlQuery.replace(/\?/g, () => `@p${paramIndex++}`);
195
+ /**
196
+ * Extends a ConnectionPool with a query method that returns results in the format expected by generated code
197
+ * This provides backwards compatibility with code that expects TypeORM-style query results
198
+ */
199
+ export function extendConnectionPoolWithQuery(pool: sql.ConnectionPool): sql.ConnectionPool & { query: (sql: string, params?: any) => Promise<any[]> } {
200
+ const extendedPool = pool as any;
201
+ extendedPool.query = async (sqlQuery: string, parameters?: any): Promise<any[]> => {
202
+ const request = new sql.Request(pool);
203
+ // Add parameters if provided
204
+ if (parameters) {
205
+ if (Array.isArray(parameters)) {
206
+ parameters.forEach((value, index) => {
207
+ request.input(`p${index}`, value);
208
+ });
209
+ // Replace ? with @p0, @p1, etc. in the query
210
+ let paramIndex = 0;
211
+ sqlQuery = sqlQuery.replace(/\?/g, () => `@p${paramIndex++}`);
212
+ }
215
213
  }
216
- }
217
- const result = await request.query(sqlQuery);
218
- return result.recordset || [];
219
- };
220
- return extendedPool;
221
- }
214
+ const result = await request.query(sqlQuery);
215
+ return result.recordset || [];
216
+ };
217
+ return extendedPool;
218
+ }