@memberjunction/server 2.20.2 → 2.20.3
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 +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/generated/generated.d.ts +122 -57
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +1287 -694
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +8 -4
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +14 -5
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +250 -61
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts +90 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -0
- package/dist/resolvers/GetDataResolver.js +294 -0
- package/dist/resolvers/GetDataResolver.js.map +1 -0
- package/dist/resolvers/SyncDataResolver.d.ts +47 -0
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -0
- package/dist/resolvers/SyncDataResolver.js +345 -0
- package/dist/resolvers/SyncDataResolver.js.map +1 -0
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/package.json +23 -22
- package/src/config.ts +2 -0
- package/src/generated/generated.ts +899 -610
- package/src/generic/ResolverBase.ts +14 -5
- package/src/index.ts +2 -0
- package/src/resolvers/AskSkipResolver.ts +300 -66
- package/src/resolvers/GetDataResolver.ts +245 -0
- package/src/resolvers/SyncDataResolver.ts +337 -0
- package/src/resolvers/SyncRolesUsersResolver.ts +2 -2
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { AppContext } from '../types.js';
|
|
2
|
+
export declare class GetDataInputType {
|
|
3
|
+
Token: string;
|
|
4
|
+
Queries: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare class GetDataOutputType {
|
|
7
|
+
Success: boolean;
|
|
8
|
+
ErrorMessage: string;
|
|
9
|
+
SQL: string;
|
|
10
|
+
Results: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare class SimpleEntityResultType {
|
|
13
|
+
Success: boolean;
|
|
14
|
+
ErrorMessage: string;
|
|
15
|
+
Results: SimpleEntityOutputType[];
|
|
16
|
+
}
|
|
17
|
+
export declare class SimpleEntityOutputType {
|
|
18
|
+
ID: string;
|
|
19
|
+
Name: string;
|
|
20
|
+
Description: string;
|
|
21
|
+
SchemaName: string;
|
|
22
|
+
BaseView: string;
|
|
23
|
+
BaseTable: string;
|
|
24
|
+
CodeName: string;
|
|
25
|
+
ClassName: string;
|
|
26
|
+
Fields: SimpleEntityFieldOutputType[];
|
|
27
|
+
}
|
|
28
|
+
export declare class SimpleEntityFieldOutputType {
|
|
29
|
+
ID: string;
|
|
30
|
+
Name: string;
|
|
31
|
+
Description: string;
|
|
32
|
+
Type: string;
|
|
33
|
+
AllowsNull: boolean;
|
|
34
|
+
MaxLength: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class GetDataResolver {
|
|
37
|
+
GetData(input: GetDataInputType, context: AppContext): Promise<{
|
|
38
|
+
Success: boolean;
|
|
39
|
+
Results: string[];
|
|
40
|
+
ErrorMessage?: undefined;
|
|
41
|
+
} | {
|
|
42
|
+
Success: boolean;
|
|
43
|
+
ErrorMessage: any;
|
|
44
|
+
Results: any[];
|
|
45
|
+
}>;
|
|
46
|
+
GetAllEntities(context: AppContext): Promise<{
|
|
47
|
+
Success: boolean;
|
|
48
|
+
Results: {
|
|
49
|
+
ID: string;
|
|
50
|
+
Name: string;
|
|
51
|
+
Description: string;
|
|
52
|
+
SchemaName: string;
|
|
53
|
+
BaseView: string;
|
|
54
|
+
BaseTable: string;
|
|
55
|
+
CodeName: string;
|
|
56
|
+
ClassName: string;
|
|
57
|
+
Fields: {
|
|
58
|
+
ID: string;
|
|
59
|
+
Name: string;
|
|
60
|
+
Description: string;
|
|
61
|
+
Type: string;
|
|
62
|
+
AllowsNull: boolean;
|
|
63
|
+
MaxLength: number;
|
|
64
|
+
}[];
|
|
65
|
+
}[];
|
|
66
|
+
ErrorMessage?: undefined;
|
|
67
|
+
} | {
|
|
68
|
+
Success: boolean;
|
|
69
|
+
ErrorMessage: any;
|
|
70
|
+
Results: any[];
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
export declare class TokenUseLog {
|
|
74
|
+
Token: string;
|
|
75
|
+
UsedAt: Date;
|
|
76
|
+
UsePayload: any;
|
|
77
|
+
}
|
|
78
|
+
export declare class GetDataAccessToken {
|
|
79
|
+
Token: string;
|
|
80
|
+
ExpiresAt: Date;
|
|
81
|
+
RequstedAt: Date;
|
|
82
|
+
RequestorPayload: any;
|
|
83
|
+
TokenUses: TokenUseLog[];
|
|
84
|
+
}
|
|
85
|
+
export declare function registerAccessToken(token?: string, lifeSpan?: number, requestorPayload?: any): GetDataAccessToken;
|
|
86
|
+
export declare function deleteAccessToken(token: string): void;
|
|
87
|
+
export declare function tokenExists(token: string): boolean;
|
|
88
|
+
export declare function isTokenValid(token: string): boolean;
|
|
89
|
+
export declare function recordTokenUse(token: string, usePayload: any): void;
|
|
90
|
+
//# sourceMappingURL=GetDataResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetDataResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/GetDataResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,qBACa,gBAAgB;IAEzB,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,qBACa,iBAAiB;IAE1B,OAAO,EAAE,OAAO,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;IAGrB,GAAG,EAAE,MAAM,CAAC;IAMZ,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qBACa,sBAAsB;IAE/B,OAAO,EAAE,OAAO,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAED,qBACa,sBAAsB;IAE/B,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,2BAA2B,EAAE,CAAC;CACzC;AAED,qBACa,2BAA2B;IAEpC,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,EAAE,MAAM,CAAC;IAGpB,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,EAAE,OAAO,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,qBAAa,eAAe;IAQlB,OAAO,CACyB,KAAK,EAAE,gBAAgB,EACtD,OAAO,EAAE,UAAU;;;;;;;;;IAgCpB,cAAc,CACb,OAAO,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC7B;AAGD,qBAAa,WAAW;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;CACnB;AAMD,qBAAa,kBAAkB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IAIjB,gBAAgB,EAAE,GAAG,CAAC;IACtB,SAAS,EAAE,WAAW,EAAE,CAAC;CAC5B;AAGD,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA+B,EAAE,gBAAgB,CAAC,EAAE,GAAG,GAAG,kBAAkB,CAezI;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,QAQ9C;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,WAExC;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,WAMzC;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAQ5D"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Arg, Ctx, Field, InputType, ObjectType, Query } from 'type-graphql';
|
|
14
|
+
import { LogError, LogStatus, Metadata } from '@memberjunction/core';
|
|
15
|
+
import { RequireSystemUser } from '../directives/RequireSystemUser.js';
|
|
16
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
17
|
+
let GetDataInputType = class GetDataInputType {
|
|
18
|
+
Token;
|
|
19
|
+
Queries;
|
|
20
|
+
};
|
|
21
|
+
__decorate([
|
|
22
|
+
Field(() => String),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], GetDataInputType.prototype, "Token", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Field(() => [String]),
|
|
27
|
+
__metadata("design:type", Array)
|
|
28
|
+
], GetDataInputType.prototype, "Queries", void 0);
|
|
29
|
+
GetDataInputType = __decorate([
|
|
30
|
+
InputType()
|
|
31
|
+
], GetDataInputType);
|
|
32
|
+
export { GetDataInputType };
|
|
33
|
+
let GetDataOutputType = class GetDataOutputType {
|
|
34
|
+
Success;
|
|
35
|
+
ErrorMessage;
|
|
36
|
+
SQL;
|
|
37
|
+
Results;
|
|
38
|
+
};
|
|
39
|
+
__decorate([
|
|
40
|
+
Field(() => Boolean),
|
|
41
|
+
__metadata("design:type", Boolean)
|
|
42
|
+
], GetDataOutputType.prototype, "Success", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
Field(() => String),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], GetDataOutputType.prototype, "ErrorMessage", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
Field(() => String),
|
|
49
|
+
__metadata("design:type", String)
|
|
50
|
+
], GetDataOutputType.prototype, "SQL", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
Field(() => [String]),
|
|
53
|
+
__metadata("design:type", Array)
|
|
54
|
+
], GetDataOutputType.prototype, "Results", void 0);
|
|
55
|
+
GetDataOutputType = __decorate([
|
|
56
|
+
ObjectType()
|
|
57
|
+
], GetDataOutputType);
|
|
58
|
+
export { GetDataOutputType };
|
|
59
|
+
let SimpleEntityResultType = class SimpleEntityResultType {
|
|
60
|
+
Success;
|
|
61
|
+
ErrorMessage;
|
|
62
|
+
Results;
|
|
63
|
+
};
|
|
64
|
+
__decorate([
|
|
65
|
+
Field(() => Boolean),
|
|
66
|
+
__metadata("design:type", Boolean)
|
|
67
|
+
], SimpleEntityResultType.prototype, "Success", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
Field(() => String),
|
|
70
|
+
__metadata("design:type", String)
|
|
71
|
+
], SimpleEntityResultType.prototype, "ErrorMessage", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
Field(() => [SimpleEntityOutputType]),
|
|
74
|
+
__metadata("design:type", Array)
|
|
75
|
+
], SimpleEntityResultType.prototype, "Results", void 0);
|
|
76
|
+
SimpleEntityResultType = __decorate([
|
|
77
|
+
ObjectType()
|
|
78
|
+
], SimpleEntityResultType);
|
|
79
|
+
export { SimpleEntityResultType };
|
|
80
|
+
let SimpleEntityOutputType = class SimpleEntityOutputType {
|
|
81
|
+
ID;
|
|
82
|
+
Name;
|
|
83
|
+
Description;
|
|
84
|
+
SchemaName;
|
|
85
|
+
BaseView;
|
|
86
|
+
BaseTable;
|
|
87
|
+
CodeName;
|
|
88
|
+
ClassName;
|
|
89
|
+
Fields;
|
|
90
|
+
};
|
|
91
|
+
__decorate([
|
|
92
|
+
Field(() => String),
|
|
93
|
+
__metadata("design:type", String)
|
|
94
|
+
], SimpleEntityOutputType.prototype, "ID", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
Field(() => String),
|
|
97
|
+
__metadata("design:type", String)
|
|
98
|
+
], SimpleEntityOutputType.prototype, "Name", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
Field(() => String),
|
|
101
|
+
__metadata("design:type", String)
|
|
102
|
+
], SimpleEntityOutputType.prototype, "Description", void 0);
|
|
103
|
+
__decorate([
|
|
104
|
+
Field(() => String),
|
|
105
|
+
__metadata("design:type", String)
|
|
106
|
+
], SimpleEntityOutputType.prototype, "SchemaName", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
Field(() => String),
|
|
109
|
+
__metadata("design:type", String)
|
|
110
|
+
], SimpleEntityOutputType.prototype, "BaseView", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
Field(() => String),
|
|
113
|
+
__metadata("design:type", String)
|
|
114
|
+
], SimpleEntityOutputType.prototype, "BaseTable", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
Field(() => String),
|
|
117
|
+
__metadata("design:type", String)
|
|
118
|
+
], SimpleEntityOutputType.prototype, "CodeName", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
Field(() => String),
|
|
121
|
+
__metadata("design:type", String)
|
|
122
|
+
], SimpleEntityOutputType.prototype, "ClassName", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
Field(() => [SimpleEntityFieldOutputType]),
|
|
125
|
+
__metadata("design:type", Array)
|
|
126
|
+
], SimpleEntityOutputType.prototype, "Fields", void 0);
|
|
127
|
+
SimpleEntityOutputType = __decorate([
|
|
128
|
+
ObjectType()
|
|
129
|
+
], SimpleEntityOutputType);
|
|
130
|
+
export { SimpleEntityOutputType };
|
|
131
|
+
let SimpleEntityFieldOutputType = class SimpleEntityFieldOutputType {
|
|
132
|
+
ID;
|
|
133
|
+
Name;
|
|
134
|
+
Description;
|
|
135
|
+
Type;
|
|
136
|
+
AllowsNull;
|
|
137
|
+
MaxLength;
|
|
138
|
+
};
|
|
139
|
+
__decorate([
|
|
140
|
+
Field(() => String),
|
|
141
|
+
__metadata("design:type", String)
|
|
142
|
+
], SimpleEntityFieldOutputType.prototype, "ID", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
Field(() => String),
|
|
145
|
+
__metadata("design:type", String)
|
|
146
|
+
], SimpleEntityFieldOutputType.prototype, "Name", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
Field(() => String),
|
|
149
|
+
__metadata("design:type", String)
|
|
150
|
+
], SimpleEntityFieldOutputType.prototype, "Description", void 0);
|
|
151
|
+
__decorate([
|
|
152
|
+
Field(() => String),
|
|
153
|
+
__metadata("design:type", String)
|
|
154
|
+
], SimpleEntityFieldOutputType.prototype, "Type", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
Field(() => Boolean),
|
|
157
|
+
__metadata("design:type", Boolean)
|
|
158
|
+
], SimpleEntityFieldOutputType.prototype, "AllowsNull", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
Field(() => Number),
|
|
161
|
+
__metadata("design:type", Number)
|
|
162
|
+
], SimpleEntityFieldOutputType.prototype, "MaxLength", void 0);
|
|
163
|
+
SimpleEntityFieldOutputType = __decorate([
|
|
164
|
+
ObjectType()
|
|
165
|
+
], SimpleEntityFieldOutputType);
|
|
166
|
+
export { SimpleEntityFieldOutputType };
|
|
167
|
+
export class GetDataResolver {
|
|
168
|
+
async GetData(input, context) {
|
|
169
|
+
try {
|
|
170
|
+
LogStatus(`GetDataResolver.GetData() ---- IMPORTANT - temporarily using the same connection as rest of the server, we need to separately create a READ ONLY CONNECTION and pass that in
|
|
171
|
+
the AppContext so we can use that special connection here to ensure we are using a lower privileged connection for this operation to prevent mutation from being possible.`);
|
|
172
|
+
LogStatus(`${JSON.stringify(input)}`);
|
|
173
|
+
if (!isTokenValid(input.Token)) {
|
|
174
|
+
throw new Error(`Token ${input.Token} is not valid or has expired`);
|
|
175
|
+
}
|
|
176
|
+
let success = true;
|
|
177
|
+
const promises = input.Queries.map((q) => {
|
|
178
|
+
return context.dataSource.query(q);
|
|
179
|
+
});
|
|
180
|
+
const results = await Promise.all(promises);
|
|
181
|
+
recordTokenUse(input.Token, { request: input, results: results });
|
|
182
|
+
return { Success: success, Results: results.map((r) => JSON.stringify(r)) };
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
LogError(err);
|
|
186
|
+
return { Success: false, ErrorMessage: typeof err === 'string' ? err : err.message, Results: [] };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async GetAllEntities(context) {
|
|
190
|
+
try {
|
|
191
|
+
const md = new Metadata();
|
|
192
|
+
const result = md.Entities.map((e) => {
|
|
193
|
+
return {
|
|
194
|
+
ID: e.ID,
|
|
195
|
+
Name: e.Name,
|
|
196
|
+
Description: e.Description,
|
|
197
|
+
SchemaName: e.SchemaName,
|
|
198
|
+
BaseView: e.BaseView,
|
|
199
|
+
BaseTable: e.BaseTable,
|
|
200
|
+
CodeName: e.CodeName,
|
|
201
|
+
ClassName: e.ClassName,
|
|
202
|
+
Fields: e.Fields.map((f) => {
|
|
203
|
+
return {
|
|
204
|
+
ID: f.ID,
|
|
205
|
+
Name: f.Name,
|
|
206
|
+
Description: f.Description,
|
|
207
|
+
Type: f.Type,
|
|
208
|
+
AllowsNull: f.AllowsNull,
|
|
209
|
+
MaxLength: f.MaxLength,
|
|
210
|
+
};
|
|
211
|
+
})
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
return { Success: true, Results: result };
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
LogError(err);
|
|
218
|
+
return { Success: false, ErrorMessage: typeof err === 'string' ? err : err.message, Results: [] };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
__decorate([
|
|
223
|
+
RequireSystemUser(),
|
|
224
|
+
Query(() => GetDataOutputType),
|
|
225
|
+
__param(0, Arg('input', () => GetDataInputType)),
|
|
226
|
+
__param(1, Ctx()),
|
|
227
|
+
__metadata("design:type", Function),
|
|
228
|
+
__metadata("design:paramtypes", [GetDataInputType, Object]),
|
|
229
|
+
__metadata("design:returntype", Promise)
|
|
230
|
+
], GetDataResolver.prototype, "GetData", null);
|
|
231
|
+
__decorate([
|
|
232
|
+
RequireSystemUser(),
|
|
233
|
+
Query(() => SimpleEntityResultType),
|
|
234
|
+
__param(0, Ctx()),
|
|
235
|
+
__metadata("design:type", Function),
|
|
236
|
+
__metadata("design:paramtypes", [Object]),
|
|
237
|
+
__metadata("design:returntype", Promise)
|
|
238
|
+
], GetDataResolver.prototype, "GetAllEntities", null);
|
|
239
|
+
export class TokenUseLog {
|
|
240
|
+
Token;
|
|
241
|
+
UsedAt;
|
|
242
|
+
UsePayload;
|
|
243
|
+
}
|
|
244
|
+
export class GetDataAccessToken {
|
|
245
|
+
Token;
|
|
246
|
+
ExpiresAt;
|
|
247
|
+
RequstedAt;
|
|
248
|
+
RequestorPayload;
|
|
249
|
+
TokenUses;
|
|
250
|
+
}
|
|
251
|
+
const __accessTokens = [];
|
|
252
|
+
const __defaultTokenLifeSpan = 1000 * 60 * 5;
|
|
253
|
+
export function registerAccessToken(token, lifeSpan = __defaultTokenLifeSpan, requestorPayload) {
|
|
254
|
+
const tokenToUse = token || uuidv4();
|
|
255
|
+
if (tokenExists(tokenToUse)) {
|
|
256
|
+
throw new Error(`Token ${tokenToUse} already exists`);
|
|
257
|
+
}
|
|
258
|
+
const newToken = new GetDataAccessToken();
|
|
259
|
+
newToken.Token = tokenToUse;
|
|
260
|
+
newToken.ExpiresAt = new Date(new Date().getTime() + lifeSpan);
|
|
261
|
+
newToken.RequstedAt = new Date();
|
|
262
|
+
newToken.RequestorPayload = requestorPayload;
|
|
263
|
+
__accessTokens.push(newToken);
|
|
264
|
+
return newToken;
|
|
265
|
+
}
|
|
266
|
+
export function deleteAccessToken(token) {
|
|
267
|
+
const index = __accessTokens.findIndex((t) => t.Token === token);
|
|
268
|
+
if (index >= 0) {
|
|
269
|
+
__accessTokens.splice(index, 1);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
throw new Error(`Token ${token} does not exist`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
export function tokenExists(token) {
|
|
276
|
+
return __accessTokens.find((t) => t.Token === token) !== undefined;
|
|
277
|
+
}
|
|
278
|
+
export function isTokenValid(token) {
|
|
279
|
+
const t = __accessTokens.find((t) => t.Token === token);
|
|
280
|
+
if (t) {
|
|
281
|
+
return t.ExpiresAt > new Date();
|
|
282
|
+
}
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
export function recordTokenUse(token, usePayload) {
|
|
286
|
+
const t = __accessTokens.find((t) => t.Token === token);
|
|
287
|
+
if (t) {
|
|
288
|
+
t.TokenUses.push({ Token: token, UsedAt: new Date(), UsePayload: usePayload });
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
throw new Error(`Token ${token} does not exist`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=GetDataResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetDataResolver.js","sourceRoot":"","sources":["../../src/resolvers/GetDataResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AppContext } from '../types.js';
|
|
2
|
+
import { BaseEntity, CompositeKey, Metadata, UserInfo } from '@memberjunction/core';
|
|
3
|
+
import { CompositeKeyInputType, CompositeKeyOutputType } from '../generic/KeyInputOutputTypes.js';
|
|
4
|
+
export declare enum SyncDataActionType {
|
|
5
|
+
Create = "Create",
|
|
6
|
+
Update = "Update",
|
|
7
|
+
CreateOrUpdate = "CreateOrUpdate",
|
|
8
|
+
Delete = "Delete",
|
|
9
|
+
DeleteWithFilter = "DeleteWithFilter"
|
|
10
|
+
}
|
|
11
|
+
export declare class ActionItemInputType {
|
|
12
|
+
EntityName: string;
|
|
13
|
+
PrimaryKey?: CompositeKeyInputType;
|
|
14
|
+
AlternateKey?: CompositeKeyInputType;
|
|
15
|
+
Type: SyncDataActionType;
|
|
16
|
+
RecordJSON?: string;
|
|
17
|
+
DeleteFilter?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class ActionItemOutputType {
|
|
20
|
+
Success: boolean;
|
|
21
|
+
ErrorMessage: string;
|
|
22
|
+
EntityName: string;
|
|
23
|
+
PrimaryKey?: CompositeKeyOutputType;
|
|
24
|
+
AlternateKey?: CompositeKeyOutputType;
|
|
25
|
+
Type: SyncDataActionType;
|
|
26
|
+
RecordJSON?: string;
|
|
27
|
+
DeleteFilter?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class SyncDataResultType {
|
|
30
|
+
Success: boolean;
|
|
31
|
+
Results: ActionItemOutputType[];
|
|
32
|
+
}
|
|
33
|
+
export declare class SyncDataResolver {
|
|
34
|
+
SyncData(items: ActionItemInputType[], context: AppContext): Promise<{
|
|
35
|
+
Success: boolean;
|
|
36
|
+
Results: ActionItemOutputType[];
|
|
37
|
+
}>;
|
|
38
|
+
protected SyncSingleItem(item: ActionItemInputType, context: AppContext, md: Metadata): Promise<ActionItemOutputType>;
|
|
39
|
+
protected SyncSingleItemDeleteWithFilter(entityName: string, filter: string, result: ActionItemOutputType, user: UserInfo): Promise<void>;
|
|
40
|
+
protected LoadFromAlternateKey(entityName: string, alternateKey: CompositeKey, user: UserInfo): Promise<BaseEntity>;
|
|
41
|
+
protected SyncSingleItemCreateOrUpdate(entityObject: BaseEntity, pk: CompositeKey, ak: CompositeKey, fieldValues: any, result: ActionItemOutputType): Promise<void>;
|
|
42
|
+
protected SyncSingleItemDelete(entityObject: BaseEntity, pk: CompositeKey, ak: CompositeKey, result: ActionItemOutputType): Promise<void>;
|
|
43
|
+
protected SyncSingleItemCreate(entityObject: BaseEntity, fieldValues: any, result: ActionItemOutputType): Promise<void>;
|
|
44
|
+
protected SyncSingleItemUpdate(entityObject: BaseEntity, pk: CompositeKey, ak: CompositeKey, fieldValues: any, result: ActionItemOutputType): Promise<void>;
|
|
45
|
+
protected InnerSyncSingleItemUpdate(entityObject: BaseEntity, fieldValues: any, result: ActionItemOutputType): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=SyncDataResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncDataResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/SyncDataResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAY,QAAQ,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AASlG,oBAAY,kBAAkB;IAC1B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,MAAM,WAAW;IACjB,gBAAgB,qBAAqB;CACtC;AAQD,qBACa,mBAAmB;IAE5B,UAAU,EAAG,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAGnC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAGrC,IAAI,EAAG,kBAAkB,CAAC;IAM1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGH,qBACa,oBAAoB;IAE7B,OAAO,EAAE,OAAO,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAG,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAGpC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAGtC,IAAI,EAAG,kBAAkB,CAAC;IAM1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBACa,kBAAkB;IAE7B,OAAO,EAAE,OAAO,CAAC;IAGjB,OAAO,EAAE,oBAAoB,EAAE,CAAM;CACtC;AAED,qBAAa,gBAAgB;IAOnB,QAAQ,CAC8B,KAAK,EAAE,mBAAmB,EAAE,EACjE,OAAO,EAAE,UAAU;;;;cAmBV,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;cAmD3G,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ;cAiC/G,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;cA6BzG,4BAA4B,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB;cAuBzI,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB;cA4B/G,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB;cAgB7F,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB;cAqBjI,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB;CASrH"}
|