@memberjunction/server 2.111.0 → 2.112.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.
- package/dist/agents/skip-agent.d.ts +4 -4
- package/dist/agents/skip-agent.d.ts.map +1 -1
- package/dist/agents/skip-agent.js +808 -951
- package/dist/agents/skip-agent.js.map +1 -1
- package/dist/agents/skip-sdk.d.ts +1 -1
- package/dist/agents/skip-sdk.d.ts.map +1 -1
- package/dist/agents/skip-sdk.js +53 -43
- package/dist/agents/skip-sdk.js.map +1 -1
- package/dist/apolloServer/index.js +1 -1
- package/dist/auth/AuthProviderFactory.d.ts +1 -1
- package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
- package/dist/auth/AuthProviderFactory.js +1 -3
- package/dist/auth/AuthProviderFactory.js.map +1 -1
- package/dist/auth/BaseAuthProvider.d.ts +1 -1
- package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
- package/dist/auth/BaseAuthProvider.js +3 -2
- package/dist/auth/BaseAuthProvider.js.map +1 -1
- package/dist/auth/IAuthProvider.d.ts +1 -1
- package/dist/auth/IAuthProvider.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.js +1 -1
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +6 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.js +1 -1
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/newUsers.d.ts +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +7 -7
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
- package/dist/auth/providers/Auth0Provider.js +1 -1
- package/dist/auth/providers/Auth0Provider.js.map +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
- package/dist/auth/providers/CognitoProvider.js +3 -6
- package/dist/auth/providers/CognitoProvider.js.map +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
- package/dist/auth/providers/GoogleProvider.js +1 -1
- package/dist/auth/providers/GoogleProvider.js.map +1 -1
- package/dist/auth/providers/MSALProvider.d.ts +1 -1
- package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
- package/dist/auth/providers/MSALProvider.js +1 -1
- package/dist/auth/providers/MSALProvider.js.map +1 -1
- package/dist/auth/providers/OktaProvider.d.ts +1 -1
- package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
- package/dist/auth/providers/OktaProvider.js +1 -1
- package/dist/auth/providers/OktaProvider.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -10
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +9 -7
- package/dist/context.js.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
- package/dist/generated/generated.d.ts +648 -648
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +2986 -1133
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
- package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
- package/dist/generic/KeyInputOutputTypes.js +1 -1
- package/dist/generic/KeyInputOutputTypes.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +1 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +15 -10
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +1 -1
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +15 -15
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +2 -2
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +28 -30
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +2 -2
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +60 -50
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.js +36 -38
- package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/CreateQueryResolver.js +43 -40
- package/dist/resolvers/CreateQueryResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +1 -1
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/EntityResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityResolver.js +1 -1
- package/dist/resolvers/EntityResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +1 -1
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +1 -1
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +5 -5
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +8 -6
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +3 -3
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +11 -11
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.js +1 -1
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +27 -28
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +31 -31
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +9 -9
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +15 -14
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +48 -44
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/TaskResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskResolver.js +7 -7
- package/dist/resolvers/TaskResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +12 -12
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +1 -1
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +14 -16
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +23 -25
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +17 -21
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
- package/dist/services/ScheduledJobsService.d.ts.map +1 -1
- package/dist/services/ScheduledJobsService.js +4 -6
- package/dist/services/ScheduledJobsService.js.map +1 -1
- package/dist/services/TaskOrchestrator.d.ts +1 -1
- package/dist/services/TaskOrchestrator.d.ts.map +1 -1
- package/dist/services/TaskOrchestrator.js +30 -30
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +2 -2
- package/dist/util.js.map +1 -1
- package/package.json +36 -37
- package/src/agents/skip-agent.ts +1067 -1200
- package/src/agents/skip-sdk.ts +877 -851
- package/src/apolloServer/index.ts +2 -2
- package/src/auth/AuthProviderFactory.ts +8 -14
- package/src/auth/BaseAuthProvider.ts +5 -4
- package/src/auth/IAuthProvider.ts +2 -2
- package/src/auth/exampleNewUserSubClass.ts +9 -2
- package/src/auth/index.ts +31 -26
- package/src/auth/initializeProviders.ts +3 -3
- package/src/auth/newUsers.ts +166 -134
- package/src/auth/providers/Auth0Provider.ts +5 -5
- package/src/auth/providers/CognitoProvider.ts +7 -10
- package/src/auth/providers/GoogleProvider.ts +4 -5
- package/src/auth/providers/MSALProvider.ts +5 -5
- package/src/auth/providers/OktaProvider.ts +6 -7
- package/src/config.ts +63 -54
- package/src/context.ts +42 -30
- package/src/entitySubclasses/entityPermissions.server.ts +3 -3
- package/src/generated/generated.ts +48130 -39930
- package/src/generic/KeyInputOutputTypes.ts +3 -6
- package/src/generic/ResolverBase.ts +119 -78
- package/src/generic/RunViewResolver.ts +27 -23
- package/src/index.ts +66 -42
- package/src/resolvers/ActionResolver.ts +46 -57
- package/src/resolvers/AskSkipResolver.ts +607 -533
- package/src/resolvers/ComponentRegistryResolver.ts +547 -562
- package/src/resolvers/CreateQueryResolver.ts +683 -655
- package/src/resolvers/DatasetResolver.ts +5 -6
- package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
- package/src/resolvers/EntityRecordNameResolver.ts +9 -5
- package/src/resolvers/EntityResolver.ts +9 -7
- package/src/resolvers/FileCategoryResolver.ts +2 -2
- package/src/resolvers/FileResolver.ts +4 -4
- package/src/resolvers/GetDataContextDataResolver.ts +106 -118
- package/src/resolvers/GetDataResolver.ts +194 -205
- package/src/resolvers/MergeRecordsResolver.ts +5 -5
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
- package/src/resolvers/QueryResolver.ts +95 -78
- package/src/resolvers/ReportResolver.ts +2 -2
- package/src/resolvers/RunAIAgentResolver.ts +818 -828
- package/src/resolvers/RunAIPromptResolver.ts +693 -709
- package/src/resolvers/RunTemplateResolver.ts +105 -103
- package/src/resolvers/SqlLoggingConfigResolver.ts +69 -72
- package/src/resolvers/SyncDataResolver.ts +386 -352
- package/src/resolvers/SyncRolesUsersResolver.ts +387 -350
- package/src/resolvers/TaskResolver.ts +110 -115
- package/src/resolvers/TransactionGroupResolver.ts +143 -138
- package/src/resolvers/UserFavoriteResolver.ts +17 -8
- package/src/resolvers/UserViewResolver.ts +17 -12
- package/src/rest/EntityCRUDHandler.ts +291 -268
- package/src/rest/RESTEndpointHandler.ts +782 -776
- package/src/rest/ViewOperationsHandler.ts +191 -195
- package/src/scheduler/LearningCycleScheduler.ts +8 -52
- package/src/services/ScheduledJobsService.ts +129 -132
- package/src/services/TaskOrchestrator.ts +792 -776
- package/src/types.ts +15 -9
- package/src/util.ts +112 -109
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatabaseProviderBase, UserInfo } from '@memberjunction/
|
|
1
|
+
import { DatabaseProviderBase, UserInfo } from '@memberjunction/global';
|
|
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,16 +39,23 @@ 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:
|
|
49
|
+
type: 'Admin' | 'Read-Write' | 'Read-Only' | 'Other';
|
|
50
50
|
|
|
51
|
-
constructor(init: {
|
|
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
|
+
}) {
|
|
52
59
|
this.dataSource = init.dataSource;
|
|
53
60
|
this.host = init.host;
|
|
54
61
|
this.port = init.port;
|
|
@@ -56,7 +63,7 @@ export class DataSourceInfo {
|
|
|
56
63
|
this.userName = init.userName;
|
|
57
64
|
this.type = init.type;
|
|
58
65
|
}
|
|
59
|
-
}
|
|
66
|
+
}
|
|
60
67
|
|
|
61
68
|
export type DirectiveBuilder = {
|
|
62
69
|
typeDefs: string;
|
|
@@ -80,10 +87,9 @@ export type RunViewGenericParams = {
|
|
|
80
87
|
forceAuditLog?: boolean;
|
|
81
88
|
auditLogDescription?: string;
|
|
82
89
|
resultType?: string;
|
|
83
|
-
userPayload?: UserPayload;
|
|
90
|
+
userPayload?: UserPayload;
|
|
84
91
|
};
|
|
85
92
|
|
|
86
|
-
|
|
87
93
|
export class MJServerEvent {
|
|
88
94
|
type: 'setupComplete' | 'requestReceived' | 'requestCompleted' | 'requestFailed';
|
|
89
95
|
dataSources: DataSourceInfo[];
|
|
@@ -106,4 +112,4 @@ export async function raiseEvent(type: MJServerEvent['type'], dataSources: DataS
|
|
|
106
112
|
mje.event = MJEventType.ComponentEvent;
|
|
107
113
|
mje.eventCode = MJ_SERVER_EVENT_CODE;
|
|
108
114
|
MJGlobal.Instance.RaiseEvent(mje);
|
|
109
|
-
}
|
|
115
|
+
}
|
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/
|
|
9
|
+
import { DatabaseProviderBase } from '@memberjunction/global';
|
|
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,7 +23,13 @@ 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(
|
|
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[]> {
|
|
27
33
|
return new Promise(async (resolve, reject) => {
|
|
28
34
|
try {
|
|
29
35
|
const { protocol, hostname, port, pathname } = new URL(url);
|
|
@@ -41,7 +47,7 @@ export async function sendPostRequest(url: string, payload: any, useCompression:
|
|
|
41
47
|
} else {
|
|
42
48
|
data = Buffer.from(JSON.stringify(payload));
|
|
43
49
|
}
|
|
44
|
-
|
|
50
|
+
|
|
45
51
|
const options = {
|
|
46
52
|
hostname,
|
|
47
53
|
port: port || (protocol === 'https:' ? 443 : 80),
|
|
@@ -49,18 +55,18 @@ export async function sendPostRequest(url: string, payload: any, useCompression:
|
|
|
49
55
|
method: 'POST',
|
|
50
56
|
headers: {
|
|
51
57
|
'Content-Type': 'application/json',
|
|
52
|
-
...headers
|
|
53
|
-
}
|
|
58
|
+
...headers,
|
|
59
|
+
},
|
|
54
60
|
};
|
|
55
|
-
|
|
61
|
+
|
|
56
62
|
const request = protocol === 'https:' ? httpsRequest : httpRequest;
|
|
57
63
|
const jsonObjects: any[] = [];
|
|
58
64
|
let buffer = '';
|
|
59
|
-
|
|
65
|
+
|
|
60
66
|
const req = request(options, (res) => {
|
|
61
67
|
const gunzip = createGunzip();
|
|
62
68
|
const stream = res.headers['content-encoding'] === 'gzip' ? res.pipe(gunzip) : res;
|
|
63
|
-
|
|
69
|
+
|
|
64
70
|
stream.on('data', (chunk) => {
|
|
65
71
|
buffer += chunk;
|
|
66
72
|
let boundary;
|
|
@@ -78,7 +84,7 @@ export async function sendPostRequest(url: string, payload: any, useCompression:
|
|
|
78
84
|
}
|
|
79
85
|
}
|
|
80
86
|
});
|
|
81
|
-
|
|
87
|
+
|
|
82
88
|
stream.on('end', () => {
|
|
83
89
|
// Attempt to parse any remaining data in buffer in case it's a complete JSON object
|
|
84
90
|
if (buffer.trim()) {
|
|
@@ -95,124 +101,121 @@ export async function sendPostRequest(url: string, payload: any, useCompression:
|
|
|
95
101
|
resolve(jsonObjects);
|
|
96
102
|
});
|
|
97
103
|
});
|
|
98
|
-
|
|
104
|
+
|
|
99
105
|
req.on('error', (e) => {
|
|
100
106
|
const err = z.object({ message: z.string() }).safeParse(e);
|
|
101
107
|
console.error(`Error in sendPostRequest().req.on(error): ${err.success ? err.data.message : e}`);
|
|
102
108
|
reject(e);
|
|
103
109
|
});
|
|
104
|
-
|
|
110
|
+
|
|
105
111
|
req.write(data);
|
|
106
112
|
req.end();
|
|
107
|
-
}
|
|
108
|
-
catch (e) {
|
|
113
|
+
} catch (e) {
|
|
109
114
|
const err = z.object({ message: z.string() }).safeParse(e);
|
|
110
|
-
console.error(`Error in sendPostRequest: ${err.success ? err.data.message : e}`)
|
|
115
|
+
console.error(`Error in sendPostRequest: ${err.success ? err.data.message : e}`);
|
|
111
116
|
reject(e);
|
|
112
117
|
}
|
|
113
|
-
}
|
|
114
|
-
);
|
|
118
|
+
});
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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);
|
|
136
140
|
}
|
|
137
|
-
throw new Error('No suitable data source found');
|
|
138
141
|
}
|
|
142
|
+
throw new Error('No suitable data source found');
|
|
143
|
+
}
|
|
139
144
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
return null; // no read only provider available and we are not allowed to fallback to read-write
|
|
158
|
-
}
|
|
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
|
+
|
|
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
|
|
159
160
|
}
|
|
161
|
+
}
|
|
160
162
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
return null; // no read-write provider available and we are not allowed to fallback to read-only
|
|
179
|
-
}
|
|
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
|
|
170
|
+
|
|
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
|
|
180
178
|
}
|
|
179
|
+
}
|
|
181
180
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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);
|
|
193
192
|
}
|
|
193
|
+
throw new Error('No suitable read-write data source found');
|
|
194
|
+
}
|
|
194
195
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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++}`);
|
|
213
215
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
}
|
|
217
|
+
const result = await request.query(sqlQuery);
|
|
218
|
+
return result.recordset || [];
|
|
219
|
+
};
|
|
220
|
+
return extendedPool;
|
|
221
|
+
}
|