@memberjunction/graphql-dataprovider 0.9.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/config.d.ts +2 -0
- package/dist/config.js +18 -0
- package/dist/config.js.map +1 -0
- package/dist/graphQLDataProvider.d.ts +99 -0
- package/dist/graphQLDataProvider.js +814 -0
- package/dist/graphQLDataProvider.js.map +1 -0
- package/dist/graphQLTransactionGroup.d.ts +4 -0
- package/dist/graphQLTransactionGroup.js +46 -0
- package/dist/graphQLTransactionGroup.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/package.json +29 -0
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupGraphQLClient = void 0;
|
|
4
|
+
const core_1 = require("@memberjunction/core");
|
|
5
|
+
const graphQLDataProvider_1 = require("./graphQLDataProvider");
|
|
6
|
+
async function setupGraphQLClient(config) {
|
|
7
|
+
// Set the provider for all entities to be GraphQL in this project, can use a different provider in other situations....
|
|
8
|
+
const provider = new graphQLDataProvider_1.GraphQLDataProvider();
|
|
9
|
+
// BaseEntity + Metadata share the same GraphQLDataProvider instance
|
|
10
|
+
core_1.BaseEntity.Provider = provider;
|
|
11
|
+
core_1.Metadata.Provider = provider;
|
|
12
|
+
core_1.RunView.Provider = provider;
|
|
13
|
+
core_1.RunReport.Provider = provider;
|
|
14
|
+
await provider.Config(config);
|
|
15
|
+
return provider;
|
|
16
|
+
}
|
|
17
|
+
exports.setupGraphQLClient = setupGraphQLClient;
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,+CAAgF;AAChF,+DAAuF;AAEhF,KAAK,UAAU,kBAAkB,CAAC,MAAiC;IACtE,wHAAwH;IACxH,MAAM,QAAQ,GAAG,IAAI,yCAAmB,EAAE,CAAA;IAE1C,oEAAoE;IACpE,iBAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC9B,eAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,cAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC3B,gBAAS,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAE7B,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO,QAAQ,CAAA;AACnB,CAAC;AAbD,gDAaC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**************************************************************************************************************
|
|
2
|
+
* The graphQLDataProvider provides a data provider for the entities framework that uses GraphQL to communicate
|
|
3
|
+
* with the server.
|
|
4
|
+
* In practice - this FILE will NOT exist in the entities library, we need to move to its own separate project
|
|
5
|
+
* so it is only included by the consumer of the entities library if they want to use it.
|
|
6
|
+
**************************************************************************************************************/
|
|
7
|
+
import { BaseEntity, IEntityDataProvider, IMetadataProvider, IRunViewProvider, ProviderConfigDataBase, RunViewResult, EntityInfo, RunViewParams, ProviderBase, EntityDataProviderType, UserInfo, RecordChange, ILocalStorageProvider, EntitySaveOptions, TransactionGroupBase, DatasetItemFilterType, DatasetResultType, DatasetStatusResultType, EntityRecordNameInput, EntityRecordNameResult, IRunReportProvider, RunReportResult, UserViewEntityBase, RunReportParams } from "@memberjunction/core";
|
|
8
|
+
import { Observable } from 'rxjs';
|
|
9
|
+
export declare class GraphQLProviderConfigData extends ProviderConfigDataBase {
|
|
10
|
+
get Token(): string;
|
|
11
|
+
get URL(): string;
|
|
12
|
+
get WSURL(): string;
|
|
13
|
+
/**
|
|
14
|
+
* wsurl is the URL to the GraphQL websocket endpoint. This is used for subscriptions, if you are not using subscriptions, pass in a blank string for this
|
|
15
|
+
*/
|
|
16
|
+
constructor(token: string, url: string, wsurl: string, MJCoreSchemaName?: string, includeSchemas?: string[], excludeSchemas?: string[]);
|
|
17
|
+
}
|
|
18
|
+
export declare class GraphQLDataProvider extends ProviderBase implements IEntityDataProvider, IMetadataProvider, IRunViewProvider, IRunReportProvider {
|
|
19
|
+
private _url;
|
|
20
|
+
private _token;
|
|
21
|
+
private static _client;
|
|
22
|
+
private _sessionId;
|
|
23
|
+
get ConfigData(): GraphQLProviderConfigData;
|
|
24
|
+
GenerateUUID(): string;
|
|
25
|
+
Config(configData: GraphQLProviderConfigData): Promise<boolean>;
|
|
26
|
+
get sessionId(): string;
|
|
27
|
+
protected AllowRefresh(): boolean;
|
|
28
|
+
protected GetCurrentUser(): Promise<UserInfo>;
|
|
29
|
+
/**************************************************************************/
|
|
30
|
+
/**************************************************************************/
|
|
31
|
+
RunReport(params: RunReportParams, contextUser?: UserInfo): Promise<RunReportResult>;
|
|
32
|
+
/**************************************************************************/
|
|
33
|
+
/**************************************************************************/
|
|
34
|
+
/**************************************************************************/
|
|
35
|
+
/**************************************************************************/
|
|
36
|
+
RunView(params: RunViewParams, contextUser?: UserInfo): Promise<RunViewResult>;
|
|
37
|
+
protected getEntityNameAndUserView(params: RunViewParams, contextUser?: UserInfo): Promise<{
|
|
38
|
+
entityName: string;
|
|
39
|
+
v: UserViewEntityBase;
|
|
40
|
+
}>;
|
|
41
|
+
protected getViewRunTimeFieldList(e: EntityInfo, v: UserViewEntityBase, params: RunViewParams, dynamicView: boolean): string[];
|
|
42
|
+
/**************************************************************************/
|
|
43
|
+
/**************************************************************************/
|
|
44
|
+
/**************************************************************************/
|
|
45
|
+
/**************************************************************************/
|
|
46
|
+
get ProviderType(): EntityDataProviderType;
|
|
47
|
+
GetRecordChanges(entityName: string, recordId: number): Promise<RecordChange[]>;
|
|
48
|
+
Save(entity: BaseEntity, user: UserInfo, options: EntitySaveOptions): Promise<{}>;
|
|
49
|
+
Load(entity: BaseEntity, RecordID: number, EntityRelationshipsToLoad: string[], user: UserInfo): Promise<{}>;
|
|
50
|
+
protected getRelatedEntityString(entityInfo: EntityInfo, EntityRelationshipsToLoad: string[]): string;
|
|
51
|
+
Delete(entity: BaseEntity, user: UserInfo): Promise<boolean>;
|
|
52
|
+
/**************************************************************************/
|
|
53
|
+
/**************************************************************************/
|
|
54
|
+
/**************************************************************************/
|
|
55
|
+
/**************************************************************************/
|
|
56
|
+
GetDatasetByName(datasetName: string, itemFilters?: DatasetItemFilterType[]): Promise<DatasetResultType>;
|
|
57
|
+
GetDatasetStatusByName(datasetName: string, itemFilters?: DatasetItemFilterType[]): Promise<DatasetStatusResultType>;
|
|
58
|
+
CreateTransactionGroup(): Promise<TransactionGroupBase>;
|
|
59
|
+
GetRecordFavoriteStatus(userId: number, entityName: string, recordId: number): Promise<boolean>;
|
|
60
|
+
SetRecordFavoriteStatus(userId: number, entityName: string, recordId: number, isFavorite: boolean, contextUser: UserInfo): Promise<void>;
|
|
61
|
+
GetEntityRecordName(entityName: string, recordId: number): Promise<string>;
|
|
62
|
+
GetEntityRecordNames(info: EntityRecordNameInput[]): Promise<EntityRecordNameResult[]>;
|
|
63
|
+
static ExecuteGQL(query: string, variables: any): Promise<any>;
|
|
64
|
+
private _allLatestMetadataUpdatesQuery;
|
|
65
|
+
private _innerAllEntitiesQueryString;
|
|
66
|
+
private _innerAllEntityFieldsQueryString;
|
|
67
|
+
private _innerAllEntityRelationshipsQueryString;
|
|
68
|
+
private _innerAllEntityPermissionsQueryString;
|
|
69
|
+
private _innerAllApplicationsQueryString;
|
|
70
|
+
private _innerCurrentUserQueryString;
|
|
71
|
+
private _allApplicationsQuery;
|
|
72
|
+
private _innerAllRolesQueryString;
|
|
73
|
+
private _innerAllRowLevelSecurityFiltersQueryString;
|
|
74
|
+
private _innerAllAuditLogTypesQueryString;
|
|
75
|
+
private _innerAllAuthorizationsQueryString;
|
|
76
|
+
private _allMetaDataQuery;
|
|
77
|
+
private _currentUserQuery;
|
|
78
|
+
private roleInfoString;
|
|
79
|
+
private userInfoString;
|
|
80
|
+
private userRoleInfoString;
|
|
81
|
+
private rowLevelSecurityFilterInfoString;
|
|
82
|
+
private auditLogTypeInfoString;
|
|
83
|
+
private authorizationInfoString;
|
|
84
|
+
private applicationInfoString;
|
|
85
|
+
private applicationEntityInfoString;
|
|
86
|
+
private entityInfoString;
|
|
87
|
+
private entityFieldInfoString;
|
|
88
|
+
private entityRelationshipInfoString;
|
|
89
|
+
private entityPermissionInfoString;
|
|
90
|
+
private infoString;
|
|
91
|
+
private _localStorageProvider;
|
|
92
|
+
get LocalStorageProvider(): ILocalStorageProvider;
|
|
93
|
+
/**************************************************************************/
|
|
94
|
+
/**************************************************************************/
|
|
95
|
+
protected get Metadata(): IMetadataProvider;
|
|
96
|
+
private _wsClient;
|
|
97
|
+
private _pushStatusRequests;
|
|
98
|
+
PushStatusUpdates(sessionId?: string): Observable<string>;
|
|
99
|
+
}
|
|
@@ -0,0 +1,814 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**************************************************************************************************************
|
|
3
|
+
* The graphQLDataProvider provides a data provider for the entities framework that uses GraphQL to communicate
|
|
4
|
+
* with the server.
|
|
5
|
+
* In practice - this FILE will NOT exist in the entities library, we need to move to its own separate project
|
|
6
|
+
* so it is only included by the consumer of the entities library if they want to use it.
|
|
7
|
+
**************************************************************************************************************/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GraphQLDataProvider = exports.GraphQLProviderConfigData = void 0;
|
|
10
|
+
const core_1 = require("@memberjunction/core");
|
|
11
|
+
const graphql_request_1 = require("graphql-request");
|
|
12
|
+
const graphQLTransactionGroup_1 = require("./graphQLTransactionGroup");
|
|
13
|
+
const idb_1 = require("idb");
|
|
14
|
+
const rxjs_1 = require("rxjs");
|
|
15
|
+
const graphql_ws_1 = require("graphql-ws");
|
|
16
|
+
class GraphQLProviderConfigData extends core_1.ProviderConfigDataBase {
|
|
17
|
+
get Token() { return this.Data.Token; }
|
|
18
|
+
get URL() { return this.Data.URL; }
|
|
19
|
+
get WSURL() { return this.Data.WSURL; }
|
|
20
|
+
/**
|
|
21
|
+
* wsurl is the URL to the GraphQL websocket endpoint. This is used for subscriptions, if you are not using subscriptions, pass in a blank string for this
|
|
22
|
+
*/
|
|
23
|
+
constructor(token, url, wsurl, MJCoreSchemaName, includeSchemas, excludeSchemas) {
|
|
24
|
+
super({
|
|
25
|
+
Token: token,
|
|
26
|
+
URL: url,
|
|
27
|
+
WSURL: wsurl,
|
|
28
|
+
}, MJCoreSchemaName, includeSchemas, excludeSchemas);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.GraphQLProviderConfigData = GraphQLProviderConfigData;
|
|
32
|
+
// The GraphQLDataProvider implements both the IEntityDataProvider and IMetadataProvider interfaces.
|
|
33
|
+
class GraphQLDataProvider extends core_1.ProviderBase {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(...arguments);
|
|
36
|
+
this._allLatestMetadataUpdatesQuery = (0, graphql_request_1.gql) `query mdUpdates {
|
|
37
|
+
AllLatestMetadataUpdates {
|
|
38
|
+
ID
|
|
39
|
+
Type
|
|
40
|
+
UpdatedAt
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
`;
|
|
44
|
+
this._innerAllEntitiesQueryString = `AllEntities {
|
|
45
|
+
${this.entityInfoString()}
|
|
46
|
+
}`;
|
|
47
|
+
this._innerAllEntityFieldsQueryString = `AllEntityFields {
|
|
48
|
+
${this.entityFieldInfoString()}
|
|
49
|
+
}`;
|
|
50
|
+
this._innerAllEntityRelationshipsQueryString = `AllEntityRelationships {
|
|
51
|
+
${this.entityRelationshipInfoString()}
|
|
52
|
+
}`;
|
|
53
|
+
this._innerAllEntityPermissionsQueryString = `AllEntityPermissions {
|
|
54
|
+
${this.entityPermissionInfoString()}
|
|
55
|
+
}`;
|
|
56
|
+
this._innerAllApplicationsQueryString = `AllApplications {
|
|
57
|
+
${this.applicationInfoString()}
|
|
58
|
+
ApplicationEntities {
|
|
59
|
+
${this.applicationEntityInfoString()}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
this._innerCurrentUserQueryString = `CurrentUser {
|
|
64
|
+
${this.userInfoString()}
|
|
65
|
+
UserRoles {
|
|
66
|
+
${this.userRoleInfoString()}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
this._allApplicationsQuery = (0, graphql_request_1.gql) `
|
|
71
|
+
${this._innerAllApplicationsQueryString}
|
|
72
|
+
`;
|
|
73
|
+
this._innerAllRolesQueryString = `AllRoles {
|
|
74
|
+
${this.roleInfoString()}
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
this._innerAllRowLevelSecurityFiltersQueryString = `AllRowLevelSecurityFilters {
|
|
78
|
+
${this.rowLevelSecurityFilterInfoString()}
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
81
|
+
this._innerAllAuditLogTypesQueryString = `AllAuditLogTypes {
|
|
82
|
+
${this.auditLogTypeInfoString()}
|
|
83
|
+
}
|
|
84
|
+
`;
|
|
85
|
+
this._innerAllAuthorizationsQueryString = `AllAuthorizations {
|
|
86
|
+
${this.authorizationInfoString()}
|
|
87
|
+
}
|
|
88
|
+
`;
|
|
89
|
+
this._allMetaDataQuery = (0, graphql_request_1.gql) `query AllApplicationsAndEntities {
|
|
90
|
+
${this._innerAllApplicationsQueryString}
|
|
91
|
+
${this._innerAllEntitiesQueryString}
|
|
92
|
+
${this._innerAllEntityFieldsQueryString}
|
|
93
|
+
${this._innerAllEntityPermissionsQueryString}
|
|
94
|
+
${this._innerAllEntityRelationshipsQueryString}
|
|
95
|
+
${this._innerCurrentUserQueryString}
|
|
96
|
+
${this._innerAllRolesQueryString}
|
|
97
|
+
${this._innerAllRowLevelSecurityFiltersQueryString}
|
|
98
|
+
${this._innerAllAuditLogTypesQueryString}
|
|
99
|
+
${this._innerAllAuthorizationsQueryString}
|
|
100
|
+
}`;
|
|
101
|
+
this._currentUserQuery = (0, graphql_request_1.gql) `query CurrentUserAndRoles {
|
|
102
|
+
${this._innerCurrentUserQueryString}
|
|
103
|
+
}`;
|
|
104
|
+
this._wsClient = null;
|
|
105
|
+
this._pushStatusRequests = [];
|
|
106
|
+
}
|
|
107
|
+
get ConfigData() { return super.ConfigData; }
|
|
108
|
+
GenerateUUID() {
|
|
109
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
110
|
+
var r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
111
|
+
return v.toString(16);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async Config(configData) {
|
|
115
|
+
try {
|
|
116
|
+
// FIRST, set up the GraphQL client
|
|
117
|
+
this._sessionId = this.GenerateUUID();
|
|
118
|
+
this._url = configData.URL;
|
|
119
|
+
this._token = configData.Token;
|
|
120
|
+
// now create the new client, if it isn't alreayd created
|
|
121
|
+
if (!GraphQLDataProvider._client)
|
|
122
|
+
GraphQLDataProvider._client = new graphql_request_1.GraphQLClient(configData.URL, {
|
|
123
|
+
headers: {
|
|
124
|
+
authorization: 'Bearer ' + configData.Token,
|
|
125
|
+
'x-session-id': this._sessionId
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return super.Config(configData); // now parent class can do it's config
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
(0, core_1.LogError)(e);
|
|
132
|
+
throw (e);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
get sessionId() {
|
|
136
|
+
return this._sessionId;
|
|
137
|
+
}
|
|
138
|
+
AllowRefresh() {
|
|
139
|
+
return true; // this provider doesn't have any issues with allowing refreshes at any time
|
|
140
|
+
}
|
|
141
|
+
async GetCurrentUser() {
|
|
142
|
+
const d = await GraphQLDataProvider.ExecuteGQL(this._currentUserQuery, null);
|
|
143
|
+
if (d) {
|
|
144
|
+
return new core_1.UserInfo(this, d.CurrentUser);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**************************************************************************/
|
|
148
|
+
// START ---- IRunReportProvider
|
|
149
|
+
/**************************************************************************/
|
|
150
|
+
async RunReport(params, contextUser) {
|
|
151
|
+
const query = (0, graphql_request_1.gql) `
|
|
152
|
+
query GetReportDataQuery ($ReportID: Int!) {
|
|
153
|
+
GetReportData(ReportID: $ReportID) {
|
|
154
|
+
Success
|
|
155
|
+
Results
|
|
156
|
+
RowCount
|
|
157
|
+
ExecutionTime
|
|
158
|
+
ErrorMessage
|
|
159
|
+
}
|
|
160
|
+
}`;
|
|
161
|
+
const result = await GraphQLDataProvider.ExecuteGQL(query, { ReportID: params.ReportID });
|
|
162
|
+
if (result && result.GetReportData)
|
|
163
|
+
return {
|
|
164
|
+
ReportID: params.ReportID,
|
|
165
|
+
Success: result.GetReportData.Success,
|
|
166
|
+
Results: JSON.parse(result.GetReportData.Results),
|
|
167
|
+
RowCount: result.GetReportData.RowCount,
|
|
168
|
+
ExecutionTime: result.GetReportData.ExecutionTime,
|
|
169
|
+
ErrorMessage: result.GetReportData.ErrorMessage,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**************************************************************************/
|
|
173
|
+
// END ---- IRunReportProvider
|
|
174
|
+
/**************************************************************************/
|
|
175
|
+
/**************************************************************************/
|
|
176
|
+
// START ---- IRunViewProvider
|
|
177
|
+
/**************************************************************************/
|
|
178
|
+
async RunView(params, contextUser) {
|
|
179
|
+
try {
|
|
180
|
+
let qName = '';
|
|
181
|
+
let paramType = '';
|
|
182
|
+
if (params) {
|
|
183
|
+
const innerParams = {};
|
|
184
|
+
let entity, viewEntity;
|
|
185
|
+
if (params.ViewEntity) {
|
|
186
|
+
viewEntity = params.ViewEntity;
|
|
187
|
+
entity = viewEntity.Entity;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const { entityName, v } = await this.getEntityNameAndUserView(params, contextUser);
|
|
191
|
+
viewEntity = v;
|
|
192
|
+
entity = entityName;
|
|
193
|
+
}
|
|
194
|
+
// get entity metadata
|
|
195
|
+
const e = this.Entities.find(e => e.Name === entity);
|
|
196
|
+
let dynamicView = false;
|
|
197
|
+
if (params.ViewID) {
|
|
198
|
+
qName = `Run${e.ClassName}ViewByID`;
|
|
199
|
+
paramType = 'RunViewByIDInput';
|
|
200
|
+
innerParams.ViewID = params.ViewID;
|
|
201
|
+
}
|
|
202
|
+
else if (params.ViewName) {
|
|
203
|
+
qName = `Run${e.ClassName}ViewByName`;
|
|
204
|
+
paramType = 'RunViewByNameInput';
|
|
205
|
+
innerParams.ViewName = params.ViewName;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
dynamicView = true;
|
|
209
|
+
qName = `Run${e.ClassName}DynamicView`;
|
|
210
|
+
paramType = 'RunDynamicViewInput';
|
|
211
|
+
innerParams.EntityName = params.EntityName;
|
|
212
|
+
}
|
|
213
|
+
innerParams.ExtraFilter = params.ExtraFilter ? params.ExtraFilter : '';
|
|
214
|
+
innerParams.OrderBy = params.OrderBy ? params.OrderBy : '';
|
|
215
|
+
innerParams.UserSearchString = params.UserSearchString ? params.UserSearchString : '';
|
|
216
|
+
innerParams.Fields = params.Fields; // pass it straight through, either null or array of strings
|
|
217
|
+
innerParams.IgnoreMaxRows = params.IgnoreMaxRows ? params.IgnoreMaxRows : false;
|
|
218
|
+
innerParams.ForceAuditLog = params.ForceAuditLog ? params.ForceAuditLog : false;
|
|
219
|
+
if (params.AuditLogDescription && params.AuditLogDescription.length > 0)
|
|
220
|
+
innerParams.AuditLogDescription = params.AuditLogDescription;
|
|
221
|
+
if (!dynamicView) {
|
|
222
|
+
innerParams.ExcludeUserViewRunID = params.ExcludeUserViewRunID ? params.ExcludeUserViewRunID : -1;
|
|
223
|
+
innerParams.ExcludeDataFromAllPriorViewRuns = params.ExcludeDataFromAllPriorViewRuns ? params.ExcludeDataFromAllPriorViewRuns : false;
|
|
224
|
+
innerParams.OverrideExcludeFilter = params.OverrideExcludeFilter ? params.OverrideExcludeFilter : '';
|
|
225
|
+
innerParams.SaveViewResults = params.SaveViewResults ? params.SaveViewResults : false;
|
|
226
|
+
}
|
|
227
|
+
const fieldList = this.getViewRunTimeFieldList(e, viewEntity, params, dynamicView);
|
|
228
|
+
const query = (0, graphql_request_1.gql) `
|
|
229
|
+
query RunViewQuery ($input: ${paramType}!) {
|
|
230
|
+
${qName}(input: $input) {
|
|
231
|
+
Results {
|
|
232
|
+
${fieldList.join("\n ")}
|
|
233
|
+
}
|
|
234
|
+
UserViewRunID
|
|
235
|
+
RowCount
|
|
236
|
+
TotalRowCount
|
|
237
|
+
ExecutionTime
|
|
238
|
+
Success
|
|
239
|
+
ErrorMessage
|
|
240
|
+
}
|
|
241
|
+
}`;
|
|
242
|
+
const viewData = await GraphQLDataProvider.ExecuteGQL(query, { input: innerParams });
|
|
243
|
+
if (viewData && viewData[qName])
|
|
244
|
+
return viewData[qName];
|
|
245
|
+
}
|
|
246
|
+
else
|
|
247
|
+
throw ("No parameters passed to RunView");
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
(0, core_1.LogError)(e);
|
|
252
|
+
throw (e);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async getEntityNameAndUserView(params, contextUser) {
|
|
256
|
+
let entityName;
|
|
257
|
+
let v;
|
|
258
|
+
if (!params.EntityName) {
|
|
259
|
+
if (params.ViewID) {
|
|
260
|
+
v = await core_1.ViewInfo.GetViewEntity(params.ViewID, contextUser);
|
|
261
|
+
entityName = v.Entity;
|
|
262
|
+
}
|
|
263
|
+
else if (params.ViewName) {
|
|
264
|
+
v = await core_1.ViewInfo.GetViewEntityByName(params.ViewName, contextUser);
|
|
265
|
+
entityName = v.Entity;
|
|
266
|
+
}
|
|
267
|
+
else
|
|
268
|
+
throw new Error(`No EntityName, ViewID or ViewName passed to RunView`);
|
|
269
|
+
}
|
|
270
|
+
else
|
|
271
|
+
entityName = params.EntityName;
|
|
272
|
+
return { entityName, v };
|
|
273
|
+
}
|
|
274
|
+
getViewRunTimeFieldList(e, v, params, dynamicView) {
|
|
275
|
+
const fieldList = [];
|
|
276
|
+
if (params.Fields) {
|
|
277
|
+
if (params.Fields.find(f => f.trim().toLowerCase() === 'ID') === undefined)
|
|
278
|
+
fieldList.push('ID'); // always include ID field
|
|
279
|
+
// now add any other fields that were passed in
|
|
280
|
+
params.Fields.forEach(f => fieldList.push(f));
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
// no fields were passed in. So, let's check to see if we are running an dynamic view.
|
|
284
|
+
// If so, we need to include all fields since the caller didn't specify the fields they want
|
|
285
|
+
// otherwise, we include the fields that are part of the view definition.
|
|
286
|
+
if (dynamicView)
|
|
287
|
+
e.Fields.forEach(f => fieldList.push(f.Name)); // include all fields since no fields were passed in
|
|
288
|
+
else {
|
|
289
|
+
// include the fields that are part of the view definition
|
|
290
|
+
// first make sure we have ID in the view column list, always should, but make sure
|
|
291
|
+
if (v.Columns.find(c => c.EntityField.Name === 'ID' && c.hidden === false) === undefined)
|
|
292
|
+
fieldList.push('ID'); // always include ID field in the result data, don't need to display the data, but we need to always provide record ID to the caller
|
|
293
|
+
// now add the rest of the fields
|
|
294
|
+
v.Columns.forEach(c => {
|
|
295
|
+
if (c.hidden === false) // don't include hidden fields
|
|
296
|
+
fieldList.push(c.EntityField.Name);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return fieldList;
|
|
301
|
+
}
|
|
302
|
+
/**************************************************************************/
|
|
303
|
+
// END ---- IRunViewProvider
|
|
304
|
+
/**************************************************************************/
|
|
305
|
+
/**************************************************************************/
|
|
306
|
+
// START ---- IEntityDataProvider
|
|
307
|
+
/**************************************************************************/
|
|
308
|
+
get ProviderType() {
|
|
309
|
+
return core_1.EntityDataProviderType.Network;
|
|
310
|
+
}
|
|
311
|
+
async GetRecordChanges(entityName, recordId) {
|
|
312
|
+
try {
|
|
313
|
+
const p = {
|
|
314
|
+
EntityName: 'Record Changes',
|
|
315
|
+
ExtraFilter: `RecordID = ${recordId} AND Entity = '${entityName}'`,
|
|
316
|
+
//OrderBy: 'ChangedAt DESC',
|
|
317
|
+
};
|
|
318
|
+
const result = await this.RunView(p);
|
|
319
|
+
if (result) {
|
|
320
|
+
// sort the results client side because, for now, the RunViewParams doesn't support OrderBy dynamically like we tried. Later change this to do via the SQL query
|
|
321
|
+
return result.Results.sort((a, b) => {
|
|
322
|
+
return (a.ChangedAt > b.ChangedAt) ? -1 : 1; // sort descending on the date.... GraphQL passes back the date as time since base date
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
else
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
(0, core_1.LogError)(e);
|
|
330
|
+
throw (e);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
async Save(entity, user, options) {
|
|
334
|
+
try {
|
|
335
|
+
const vars = { input: {} };
|
|
336
|
+
const type = (entity.ID) ? "Update" : "Create";
|
|
337
|
+
// Create the query for the mutation first, we will provide the specific
|
|
338
|
+
// input values later in the loop below. Here we are just setting up the mutation
|
|
339
|
+
// and the fields that will be returned since the mutation returns back the latest
|
|
340
|
+
// values for the entity and we need to have those values to update the entity after the
|
|
341
|
+
// save
|
|
342
|
+
const mutationName = `${type}${entity.EntityInfo.ClassName}`;
|
|
343
|
+
const inner = ` ${mutationName}(input: $input) {
|
|
344
|
+
${entity.Fields.map(f => f.Name).join("\n ")}
|
|
345
|
+
}`;
|
|
346
|
+
const outer = (0, graphql_request_1.gql) `mutation ${type}${entity.EntityInfo.ClassName} ($input: ${mutationName}Input!) {
|
|
347
|
+
${inner}
|
|
348
|
+
}
|
|
349
|
+
`;
|
|
350
|
+
for (let i = 0; i < entity.Fields.length; i++) {
|
|
351
|
+
const f = entity.Fields[i];
|
|
352
|
+
if (f.SQLType.trim().toLowerCase() !== 'uniqueidentifier' &&
|
|
353
|
+
(f.ReadOnly == false || (f.Name == 'ID' && entity.ID))) {
|
|
354
|
+
// only pass along writable fields, AND the ID value if this is an update
|
|
355
|
+
let val = f.Value;
|
|
356
|
+
if (val && f.EntityFieldInfo.TSType === core_1.EntityFieldTSType.Date)
|
|
357
|
+
val = val.getTime();
|
|
358
|
+
if (val == null && f.EntityFieldInfo.AllowsNull == false) {
|
|
359
|
+
if (f.EntityFieldInfo.DefaultValue != null) {
|
|
360
|
+
// no value, but there is a default value, so use that, since field does NOT allow NULL
|
|
361
|
+
val = f.EntityFieldInfo.DefaultValue;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
// no default value, null value and field doesn't allow nulls, so set to either 0 or empty string
|
|
365
|
+
if (f.FieldType == core_1.EntityFieldTSType.Number || f.FieldType == core_1.EntityFieldTSType.Boolean)
|
|
366
|
+
val = 0;
|
|
367
|
+
else
|
|
368
|
+
val = '';
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
vars.input[f.Name] = val;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (entity.TransactionGroup) {
|
|
375
|
+
return new Promise((resolve, reject) => {
|
|
376
|
+
// we are part of a transaction group, so just add our query to the list
|
|
377
|
+
// and when the transaction is committed, we will send all the queries at once
|
|
378
|
+
entity.TransactionGroup.AddTransaction(new core_1.TransactionItem(inner, vars, { mutationName,
|
|
379
|
+
mutationInputType: mutationName + 'Input!' }, (results, success) => {
|
|
380
|
+
// we get here whenever the transaction group does gets around to committing
|
|
381
|
+
// our query. We need to update our entity with the values that were returned
|
|
382
|
+
// from the mutation if it was successful.
|
|
383
|
+
if (success && results) {
|
|
384
|
+
// got our data, send it back to the caller, which is the entity object
|
|
385
|
+
// and that object needs to update itself from this data.
|
|
386
|
+
resolve(results);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
// the transaction failed, nothing to update, but we need to call Reject so the
|
|
390
|
+
// promise resolves with a rejection so our outer caller knows
|
|
391
|
+
reject();
|
|
392
|
+
}
|
|
393
|
+
}));
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
// not part of a transaction group, so just go for it and send across our GQL
|
|
398
|
+
const d = await GraphQLDataProvider.ExecuteGQL(outer, vars);
|
|
399
|
+
if (d && d[type + entity.EntityInfo.ClassName]) {
|
|
400
|
+
return d[type + entity.EntityInfo.ClassName];
|
|
401
|
+
}
|
|
402
|
+
else
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
catch (e) {
|
|
407
|
+
(0, core_1.LogError)(e);
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
async Load(entity, RecordID, EntityRelationshipsToLoad = null, user) {
|
|
412
|
+
try {
|
|
413
|
+
const rel = EntityRelationshipsToLoad && EntityRelationshipsToLoad.length > 0 ? this.getRelatedEntityString(entity.EntityInfo, EntityRelationshipsToLoad) : '';
|
|
414
|
+
const query = (0, graphql_request_1.gql) `query Single${entity.EntityInfo.ClassName}${rel.length > 0 ? 'Full' : ''} ($ID: Int!) {
|
|
415
|
+
${entity.EntityInfo.ClassName}(ID: $ID) {
|
|
416
|
+
${entity.Fields.map(f => f.Name).join("\n ")}
|
|
417
|
+
${rel}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
`;
|
|
421
|
+
const d = await GraphQLDataProvider.ExecuteGQL(query, { ID: RecordID });
|
|
422
|
+
if (d && d[entity.EntityInfo.ClassName]) {
|
|
423
|
+
return d[entity.EntityInfo.ClassName];
|
|
424
|
+
}
|
|
425
|
+
else
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
catch (e) {
|
|
429
|
+
(0, core_1.LogError)(e);
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
getRelatedEntityString(entityInfo, EntityRelationshipsToLoad) {
|
|
434
|
+
let rel = '';
|
|
435
|
+
for (let i = 0; i < entityInfo.RelatedEntities.length; i++) {
|
|
436
|
+
if (EntityRelationshipsToLoad.indexOf(entityInfo.RelatedEntities[i].RelatedEntity) >= 0) {
|
|
437
|
+
const r = entityInfo.RelatedEntities[i];
|
|
438
|
+
const re = this.Entities.find(e => e.ID === r.RelatedEntityID);
|
|
439
|
+
rel += `
|
|
440
|
+
${re.CodeName} {
|
|
441
|
+
${re.Fields.map(f => f.Name).join("\n ")}
|
|
442
|
+
}
|
|
443
|
+
`;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return rel;
|
|
447
|
+
}
|
|
448
|
+
async Delete(entity, user) {
|
|
449
|
+
try {
|
|
450
|
+
const vars = { ID: entity.ID };
|
|
451
|
+
const queryName = 'Delete' + entity.EntityInfo.ClassName;
|
|
452
|
+
const query = (0, graphql_request_1.gql) `mutation ${queryName} ($ID: Int!) {
|
|
453
|
+
${queryName}(ID: $ID)
|
|
454
|
+
}
|
|
455
|
+
`;
|
|
456
|
+
if (entity.TransactionGroup) {
|
|
457
|
+
// we have a transaction group, need to play nice and be part of it
|
|
458
|
+
return new Promise((resolve, reject) => {
|
|
459
|
+
// we are part of a transaction group, so just add our query to the list
|
|
460
|
+
// and when the transaction is committed, we will send all the queries at once
|
|
461
|
+
entity.TransactionGroup.AddTransaction(new core_1.TransactionItem(query, vars, { mutationName: queryName,
|
|
462
|
+
mutationInputType: 'Int!' }, (results, success) => {
|
|
463
|
+
// we get here whenever the transaction group does gets around to committing
|
|
464
|
+
// our query.
|
|
465
|
+
if (success && results) {
|
|
466
|
+
// success indicated by the entity.ID matching the return value of the mutation
|
|
467
|
+
resolve(entity.ID === results);
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
// the transaction failed, nothing to update, but we need to call Reject so the
|
|
471
|
+
// promise resolves with a rejection so our outer caller knows
|
|
472
|
+
reject();
|
|
473
|
+
}
|
|
474
|
+
}));
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
// no transaction just go for it
|
|
479
|
+
const d = await GraphQLDataProvider.ExecuteGQL(query, vars);
|
|
480
|
+
if (d && d[queryName])
|
|
481
|
+
return entity.ID === d[queryName]; // returns the ID of the deleted record if SP is successful
|
|
482
|
+
else
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
catch (e) {
|
|
487
|
+
(0, core_1.LogError)(e);
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**************************************************************************/
|
|
492
|
+
// END ---- IEntityDataProvider
|
|
493
|
+
/**************************************************************************/
|
|
494
|
+
/**************************************************************************/
|
|
495
|
+
// START ---- IMetadataProvider
|
|
496
|
+
/**************************************************************************/
|
|
497
|
+
async GetDatasetByName(datasetName, itemFilters) {
|
|
498
|
+
const query = (0, graphql_request_1.gql) `query GetDatasetByName($DatasetName: String!, $ItemFilters: [DatasetItemFilterTypeGQL!]) {
|
|
499
|
+
GetDatasetByName(DatasetName: $DatasetName, ItemFilters: $ItemFilters) {
|
|
500
|
+
DatasetID
|
|
501
|
+
DatasetName
|
|
502
|
+
Success
|
|
503
|
+
Status
|
|
504
|
+
LatestUpdateDate
|
|
505
|
+
Results
|
|
506
|
+
}
|
|
507
|
+
}`;
|
|
508
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { DatasetName: datasetName, ItemFilters: itemFilters });
|
|
509
|
+
if (data && data.GetDatasetByName && data.GetDatasetByName.Success) {
|
|
510
|
+
return {
|
|
511
|
+
DatasetID: data.GetDatasetByName.DatasetID,
|
|
512
|
+
DatasetName: data.GetDatasetByName.DatasetName,
|
|
513
|
+
Success: data.GetDatasetByName.Success,
|
|
514
|
+
Status: data.GetDatasetByName.Status,
|
|
515
|
+
LatestUpdateDate: new Date(data.GetDatasetByName.LatestUpdateDate),
|
|
516
|
+
Results: JSON.parse(data.GetDatasetByName.Results)
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
return {
|
|
521
|
+
DatasetID: 0,
|
|
522
|
+
DatasetName: datasetName,
|
|
523
|
+
Success: false,
|
|
524
|
+
Status: 'Unknown',
|
|
525
|
+
LatestUpdateDate: null,
|
|
526
|
+
Results: null
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
async GetDatasetStatusByName(datasetName, itemFilters) {
|
|
531
|
+
const query = (0, graphql_request_1.gql) `query GetDatasetStatusByName($DatasetName: String!, $ItemFilters: [DatasetItemFilterTypeGQL!]) {
|
|
532
|
+
GetDatasetStatusByName(DatasetName: $DatasetName, ItemFilters: $ItemFilters) {
|
|
533
|
+
DatasetID
|
|
534
|
+
DatasetName
|
|
535
|
+
Success
|
|
536
|
+
Status
|
|
537
|
+
LatestUpdateDate
|
|
538
|
+
EntityUpdateDates
|
|
539
|
+
}
|
|
540
|
+
}`;
|
|
541
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { DatasetName: datasetName, ItemFilters: itemFilters });
|
|
542
|
+
if (data && data.GetDatasetStatusByName && data.GetDatasetStatusByName.Success) {
|
|
543
|
+
return {
|
|
544
|
+
DatasetID: data.GetDatasetStatusByName.DatasetID,
|
|
545
|
+
DatasetName: data.GetDatasetStatusByName.DatasetName,
|
|
546
|
+
Success: data.GetDatasetStatusByName.Success,
|
|
547
|
+
Status: data.GetDatasetStatusByName.Status,
|
|
548
|
+
LatestUpdateDate: new Date(data.GetDatasetStatusByName.LatestUpdateDate),
|
|
549
|
+
EntityUpdateDates: JSON.parse(data.GetDatasetStatusByName.EntityUpdateDates)
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
return {
|
|
554
|
+
DatasetID: 0,
|
|
555
|
+
DatasetName: datasetName,
|
|
556
|
+
Success: false,
|
|
557
|
+
Status: 'Unknown',
|
|
558
|
+
LatestUpdateDate: null,
|
|
559
|
+
EntityUpdateDates: null
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
async CreateTransactionGroup() {
|
|
564
|
+
return new graphQLTransactionGroup_1.GraphQLTransactionGroup();
|
|
565
|
+
}
|
|
566
|
+
async GetRecordFavoriteStatus(userId, entityName, recordId) {
|
|
567
|
+
const e = this.Entities.find(e => e.Name === entityName);
|
|
568
|
+
if (!e)
|
|
569
|
+
throw new Error(`Entity ${entityName} not found in metadata`);
|
|
570
|
+
const query = (0, graphql_request_1.gql) `query GetRecordFavoriteStatus($params: UserFavoriteSearchParams!) {
|
|
571
|
+
GetRecordFavoriteStatus(params: $params) {
|
|
572
|
+
Success
|
|
573
|
+
IsFavorite
|
|
574
|
+
}
|
|
575
|
+
}`;
|
|
576
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { params: { UserID: userId, EntityID: e.ID, RecordID: recordId } });
|
|
577
|
+
if (data && data.GetRecordFavoriteStatus && data.GetRecordFavoriteStatus.Success)
|
|
578
|
+
return data.GetRecordFavoriteStatus.IsFavorite;
|
|
579
|
+
}
|
|
580
|
+
async SetRecordFavoriteStatus(userId, entityName, recordId, isFavorite, contextUser) {
|
|
581
|
+
const e = this.Entities.find(e => e.Name === entityName);
|
|
582
|
+
if (!e)
|
|
583
|
+
throw new Error(`Entity ${entityName} not found in metadata`);
|
|
584
|
+
const query = (0, graphql_request_1.gql) `mutation SetRecordFavoriteStatus($params: UserFavoriteSetParams!) {
|
|
585
|
+
SetRecordFavoriteStatus(params: $params){
|
|
586
|
+
Success
|
|
587
|
+
}
|
|
588
|
+
}`;
|
|
589
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { params: { UserID: userId, EntityID: e.ID, RecordID: recordId, IsFavorite: isFavorite } });
|
|
590
|
+
if (data && data.SetRecordFavoriteStatus !== null)
|
|
591
|
+
return data.SetRecordFavoriteStatus.Success;
|
|
592
|
+
}
|
|
593
|
+
async GetEntityRecordName(entityName, recordId) {
|
|
594
|
+
if (!entityName || !recordId)
|
|
595
|
+
return null;
|
|
596
|
+
const query = (0, graphql_request_1.gql) `query GetEntityRecordNameQuery ($EntityName: String!, $RecordID: Int!) {
|
|
597
|
+
GetEntityRecordName(EntityName: $EntityName, RecordID: $RecordID) {
|
|
598
|
+
Success
|
|
599
|
+
Status
|
|
600
|
+
RecordName
|
|
601
|
+
}
|
|
602
|
+
}`;
|
|
603
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { EntityName: entityName, RecordID: recordId });
|
|
604
|
+
if (data && data.GetEntityRecordName && data.GetEntityRecordName.Success)
|
|
605
|
+
return data.GetEntityRecordName.RecordName;
|
|
606
|
+
}
|
|
607
|
+
async GetEntityRecordNames(info) {
|
|
608
|
+
if (!info)
|
|
609
|
+
return null;
|
|
610
|
+
const query = (0, graphql_request_1.gql) `query GetEntityRecordNamesQuery ($info: [EntityRecordNameInput!]!) {
|
|
611
|
+
GetEntityRecordNames(info: $info) {
|
|
612
|
+
Success
|
|
613
|
+
Status
|
|
614
|
+
RecordID
|
|
615
|
+
EntityName
|
|
616
|
+
RecordName
|
|
617
|
+
}
|
|
618
|
+
}`;
|
|
619
|
+
const data = await GraphQLDataProvider.ExecuteGQL(query, { info: info });
|
|
620
|
+
if (data && data.GetEntityRecordNames)
|
|
621
|
+
return data.GetEntityRecordNames;
|
|
622
|
+
}
|
|
623
|
+
static async ExecuteGQL(query, variables) {
|
|
624
|
+
try {
|
|
625
|
+
const data = await this._client.request(query, variables);
|
|
626
|
+
return data;
|
|
627
|
+
}
|
|
628
|
+
catch (e) {
|
|
629
|
+
(0, core_1.LogError)(e);
|
|
630
|
+
throw e; // force the caller to handle the error
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
roleInfoString() {
|
|
634
|
+
return this.infoString(new core_1.RoleInfo(null));
|
|
635
|
+
}
|
|
636
|
+
userInfoString() {
|
|
637
|
+
return this.infoString(new core_1.UserInfo(null, null));
|
|
638
|
+
}
|
|
639
|
+
userRoleInfoString() {
|
|
640
|
+
return this.infoString(new core_1.UserRoleInfo(null));
|
|
641
|
+
}
|
|
642
|
+
rowLevelSecurityFilterInfoString() {
|
|
643
|
+
return this.infoString(new core_1.RowLevelSecurityFilterInfo(null));
|
|
644
|
+
}
|
|
645
|
+
auditLogTypeInfoString() {
|
|
646
|
+
return this.infoString(new core_1.AuditLogTypeInfo(null));
|
|
647
|
+
}
|
|
648
|
+
authorizationInfoString() {
|
|
649
|
+
return this.infoString(new core_1.AuthorizationInfo(null));
|
|
650
|
+
}
|
|
651
|
+
applicationInfoString() {
|
|
652
|
+
return this.infoString(new core_1.ApplicationInfo(null, null));
|
|
653
|
+
}
|
|
654
|
+
applicationEntityInfoString() {
|
|
655
|
+
return this.infoString(new core_1.ApplicationEntityInfo(null));
|
|
656
|
+
}
|
|
657
|
+
entityInfoString() {
|
|
658
|
+
return this.infoString(new core_1.EntityInfo(null));
|
|
659
|
+
}
|
|
660
|
+
entityFieldInfoString() {
|
|
661
|
+
return this.infoString(new core_1.EntityFieldInfo(null));
|
|
662
|
+
}
|
|
663
|
+
entityRelationshipInfoString() {
|
|
664
|
+
return this.infoString(new core_1.EntityRelationshipInfo(null));
|
|
665
|
+
}
|
|
666
|
+
entityPermissionInfoString() {
|
|
667
|
+
return this.infoString(new core_1.EntityPermissionInfo(null));
|
|
668
|
+
}
|
|
669
|
+
infoString(object) {
|
|
670
|
+
let sOutput = '';
|
|
671
|
+
const keys = Object.keys(object);
|
|
672
|
+
for (let i = 0; i < keys.length; i++) {
|
|
673
|
+
if (keys[i].substring(0, 1) != '_')
|
|
674
|
+
sOutput += keys[i] + '\n ';
|
|
675
|
+
}
|
|
676
|
+
return sOutput;
|
|
677
|
+
}
|
|
678
|
+
get LocalStorageProvider() {
|
|
679
|
+
if (!this._localStorageProvider)
|
|
680
|
+
this._localStorageProvider = new BrowserIndexedDBStorageProvider();
|
|
681
|
+
return this._localStorageProvider;
|
|
682
|
+
}
|
|
683
|
+
/**************************************************************************/
|
|
684
|
+
// END ---- IMetadataProvider
|
|
685
|
+
/**************************************************************************/
|
|
686
|
+
get Metadata() {
|
|
687
|
+
return this;
|
|
688
|
+
}
|
|
689
|
+
PushStatusUpdates(sessionId = null) {
|
|
690
|
+
if (!sessionId)
|
|
691
|
+
sessionId = this.sessionId;
|
|
692
|
+
if (!this._wsClient)
|
|
693
|
+
this._wsClient = (0, graphql_ws_1.createClient)({
|
|
694
|
+
url: this.ConfigData.WSURL,
|
|
695
|
+
connectionParams: {
|
|
696
|
+
Authorization: 'Bearer ' + this.ConfigData.Token,
|
|
697
|
+
},
|
|
698
|
+
});
|
|
699
|
+
const existingRequest = this._pushStatusRequests.find(r => r.sessionId === sessionId);
|
|
700
|
+
if (existingRequest)
|
|
701
|
+
return existingRequest.observable;
|
|
702
|
+
const SUBSCRIBE_TO_STATUS = (0, graphql_request_1.gql) `subscription StatusUpdates($sessionId: String!) {
|
|
703
|
+
statusUpdates(sessionId: $sessionId) {
|
|
704
|
+
date
|
|
705
|
+
message
|
|
706
|
+
sessionId
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
`;
|
|
710
|
+
const newObservable = new rxjs_1.Observable((observer) => {
|
|
711
|
+
const unsubscribe = this._wsClient.subscribe({ query: SUBSCRIBE_TO_STATUS, variables: { sessionId } }, {
|
|
712
|
+
next: (data) => {
|
|
713
|
+
return observer.next(data.data.statusUpdates);
|
|
714
|
+
},
|
|
715
|
+
error: (error) => {
|
|
716
|
+
return observer.error(error);
|
|
717
|
+
},
|
|
718
|
+
complete: () => {
|
|
719
|
+
return observer.complete();
|
|
720
|
+
},
|
|
721
|
+
});
|
|
722
|
+
return () => {
|
|
723
|
+
// Cleanup logic
|
|
724
|
+
console.log('would unsub here');
|
|
725
|
+
//unsubscribe();
|
|
726
|
+
};
|
|
727
|
+
});
|
|
728
|
+
this._pushStatusRequests.push({ sessionId, observable: newObservable });
|
|
729
|
+
return newObservable;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
exports.GraphQLDataProvider = GraphQLDataProvider;
|
|
733
|
+
// this class implements a simple in-memory only storage as a fallback if the browser doesn't support local storage
|
|
734
|
+
class BrowserStorageProviderBase {
|
|
735
|
+
constructor() {
|
|
736
|
+
this._localStorage = {};
|
|
737
|
+
}
|
|
738
|
+
async getItem(key) {
|
|
739
|
+
return new Promise((resolve) => {
|
|
740
|
+
if (this._localStorage.hasOwnProperty(key))
|
|
741
|
+
resolve(this._localStorage[key]);
|
|
742
|
+
else
|
|
743
|
+
resolve(null);
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
async setItem(key, value) {
|
|
747
|
+
return new Promise((resolve) => {
|
|
748
|
+
this._localStorage[key] = value;
|
|
749
|
+
resolve();
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
async remove(key) {
|
|
753
|
+
return new Promise((resolve) => {
|
|
754
|
+
if (this._localStorage.hasOwnProperty(key)) {
|
|
755
|
+
delete this._localStorage[key];
|
|
756
|
+
}
|
|
757
|
+
resolve();
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
// This implementation just wraps the browser local storage and if for some reason the browser doesn't
|
|
762
|
+
// have a localStorage object, we just use a simple object to store the data in memory.
|
|
763
|
+
class BrowserLocalStorageProvider extends BrowserStorageProviderBase {
|
|
764
|
+
async getItem(key) {
|
|
765
|
+
if (localStorage)
|
|
766
|
+
return localStorage.getItem(key);
|
|
767
|
+
else
|
|
768
|
+
return await super.getItem(key);
|
|
769
|
+
}
|
|
770
|
+
async setItem(key, value) {
|
|
771
|
+
if (localStorage)
|
|
772
|
+
localStorage.setItem(key, value);
|
|
773
|
+
else
|
|
774
|
+
await super.setItem(key, value);
|
|
775
|
+
}
|
|
776
|
+
async remove(key) {
|
|
777
|
+
if (localStorage)
|
|
778
|
+
localStorage.removeItem(key);
|
|
779
|
+
else
|
|
780
|
+
await super.remove(key);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
const IDB_DB_NAME = 'MJ_Metadata';
|
|
784
|
+
const IDB_DB_ObjectStoreName = 'Metadata_KVPairs';
|
|
785
|
+
class BrowserIndexedDBStorageProvider extends BrowserStorageProviderBase {
|
|
786
|
+
constructor() {
|
|
787
|
+
super();
|
|
788
|
+
this.dbPromise = (0, idb_1.openDB)(IDB_DB_NAME, 1, {
|
|
789
|
+
upgrade(db) {
|
|
790
|
+
if (!db.objectStoreNames.contains(IDB_DB_ObjectStoreName)) {
|
|
791
|
+
db.createObjectStore(IDB_DB_ObjectStoreName);
|
|
792
|
+
}
|
|
793
|
+
},
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
async setItem(key, value) {
|
|
797
|
+
const db = await this.dbPromise;
|
|
798
|
+
const tx = db.transaction(IDB_DB_ObjectStoreName, 'readwrite');
|
|
799
|
+
await tx.objectStore(IDB_DB_ObjectStoreName).put(value, key);
|
|
800
|
+
await tx.done;
|
|
801
|
+
}
|
|
802
|
+
async getItem(key) {
|
|
803
|
+
const db = await this.dbPromise;
|
|
804
|
+
const value = await db.transaction(IDB_DB_ObjectStoreName).objectStore(IDB_DB_ObjectStoreName).get(key);
|
|
805
|
+
return value;
|
|
806
|
+
}
|
|
807
|
+
async remove(key) {
|
|
808
|
+
const db = await this.dbPromise;
|
|
809
|
+
const tx = db.transaction(IDB_DB_ObjectStoreName, 'readwrite');
|
|
810
|
+
await tx.objectStore(IDB_DB_ObjectStoreName).delete(key);
|
|
811
|
+
await tx.done;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
//# sourceMappingURL=graphQLDataProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphQLDataProvider.js","sourceRoot":"","sources":["../src/graphQLDataProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GraphQLTransactionGroup = void 0;
|
|
4
|
+
const core_1 = require("@memberjunction/core");
|
|
5
|
+
const graphQLDataProvider_1 = require("./graphQLDataProvider");
|
|
6
|
+
class GraphQLTransactionGroup extends core_1.TransactionGroupBase {
|
|
7
|
+
async HandleSubmit(items) {
|
|
8
|
+
// iterate through each instruction and build up the combined query string
|
|
9
|
+
// and the combined variables object
|
|
10
|
+
let combinedQuery = '';
|
|
11
|
+
let mutationParams = '';
|
|
12
|
+
const combinedVars = {};
|
|
13
|
+
for (let i = 0; i < items.length; i++) {
|
|
14
|
+
const item = items[i];
|
|
15
|
+
let itemMutation = item.Instruction;
|
|
16
|
+
if (item.Vars) {
|
|
17
|
+
const keys = Object.keys(item.Vars);
|
|
18
|
+
// rename the variables to avoid collisions and aggregate the varisables
|
|
19
|
+
// from the item into our combined variables
|
|
20
|
+
for (let j = 0; j < keys.length; j++) {
|
|
21
|
+
const key = keys[j];
|
|
22
|
+
const newKey = `${key}_${i}`;
|
|
23
|
+
combinedVars[newKey] = item.Vars[key];
|
|
24
|
+
const keyRegEx = new RegExp('\\$' + key, 'g'); // Create the RegExp dynamically with the global flag.
|
|
25
|
+
itemMutation = itemMutation.replace(keyRegEx, '$' + newKey);
|
|
26
|
+
mutationParams += `$${newKey}: ${item.ExtraData.mutationInputType} \n`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// add in the specific mutation and give it an alias so we can easily figure out the results
|
|
30
|
+
// from each of them and pass back properly
|
|
31
|
+
combinedQuery += `mutation_${i}: ` + itemMutation + '\n';
|
|
32
|
+
}
|
|
33
|
+
combinedQuery = `mutation (${mutationParams}){ \n` + combinedQuery + '\n}'; // wrap it up in a mutation so we can execute it
|
|
34
|
+
const execResults = await graphQLDataProvider_1.GraphQLDataProvider.ExecuteGQL(combinedQuery, combinedVars);
|
|
35
|
+
const returnResults = [];
|
|
36
|
+
for (let i = 0; i < items.length; i++) {
|
|
37
|
+
/// NEED TO TEST TO SEE WHAT ORDER WE GET RESULTS BACK AS
|
|
38
|
+
const result = execResults[`mutation_${i}`];
|
|
39
|
+
const item = items[i];
|
|
40
|
+
returnResults.push(new core_1.TransactionResult(item, result, result !== null));
|
|
41
|
+
}
|
|
42
|
+
return returnResults;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.GraphQLTransactionGroup = GraphQLTransactionGroup;
|
|
46
|
+
//# sourceMappingURL=graphQLTransactionGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphQLTransactionGroup.js","sourceRoot":"","sources":["../src/graphQLTransactionGroup.ts"],"names":[],"mappings":";;;AAAA,+CAA+F;AAC/F,+DAA4D;AAE5D,MAAa,uBAAwB,SAAQ,2BAAoB;IACnD,KAAK,CAAC,YAAY,CAAC,KAAwB;QACjD,2EAA2E;QAC3E,oCAAoC;QACpC,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,MAAM,YAAY,GAAQ,EAAE,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,wEAAwE;gBACxE,4CAA4C;gBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC7B,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEtC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sDAAsD;oBACrG,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;oBAC5D,cAAc,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,KAAK,CAAC;iBAC1E;aACJ;YACD,4FAA4F;YAC5F,2CAA2C;YAC3C,aAAa,IAAI,YAAY,CAAC,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC;SAC5D;QAED,aAAa,GAAG,aAAa,cAAc,OAAO,GAAG,aAAa,GAAE,KAAK,CAAC,CAAC,gDAAgD;QAC3H,MAAM,WAAW,GAAG,MAAM,yCAAmB,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;QACrF,MAAM,aAAa,GAAwB,EAAE,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,yDAAyD;YACzD,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,IAAI,wBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;SAC5E;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AAzCD,0DAyCC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GraphQLDataProvider = exports.setupGraphQLClient = void 0;
|
|
4
|
+
var config_1 = require("./config");
|
|
5
|
+
Object.defineProperty(exports, "setupGraphQLClient", { enumerable: true, get: function () { return config_1.setupGraphQLClient; } });
|
|
6
|
+
var graphQLDataProvider_1 = require("./graphQLDataProvider");
|
|
7
|
+
Object.defineProperty(exports, "GraphQLDataProvider", { enumerable: true, get: function () { return graphQLDataProvider_1.GraphQLDataProvider; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAC3B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@memberjunction/graphql-dataprovider",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "MemberJunction: GraphQL Client Data Provider",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"/dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "ts-node-dev src/index.ts",
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
|
+
},
|
|
15
|
+
"author": "MemberJunction.com",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"ts-node-dev": "^2.0.0",
|
|
19
|
+
"typescript": "^5.0.3"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@memberjunction/core": "^0.9.1",
|
|
23
|
+
"graphql": "^16.6.0",
|
|
24
|
+
"graphql-request": "^5.2.0",
|
|
25
|
+
"graphql-ws": "^5.14.0",
|
|
26
|
+
"idb": "^7.1.1",
|
|
27
|
+
"rxjs": "^7.8.1"
|
|
28
|
+
}
|
|
29
|
+
}
|