@qelos/plugin-play 2.0.22
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/.nvmrc +1 -0
- package/LICENSE +21 -0
- package/create-cert.js +6 -0
- package/dist/examples/basic-demo.d.ts +1 -0
- package/dist/examples/basic-demo.js +38 -0
- package/dist/examples/basic-demo.js.map +1 -0
- package/dist/examples/stocks/server.d.ts +1 -0
- package/dist/examples/stocks/server.js +47 -0
- package/dist/examples/stocks/server.js.map +1 -0
- package/dist/examples/todos/server.d.ts +1 -0
- package/dist/examples/todos/server.js +64 -0
- package/dist/examples/todos/server.js.map +1 -0
- package/dist/src/app.d.ts +16 -0
- package/dist/src/app.js +130 -0
- package/dist/src/app.js.map +1 -0
- package/dist/src/authentication.d.ts +20 -0
- package/dist/src/authentication.js +292 -0
- package/dist/src/authentication.js.map +1 -0
- package/dist/src/config.d.ts +17 -0
- package/dist/src/config.js +20 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/endpoints.d.ts +5 -0
- package/dist/src/endpoints.js +21 -0
- package/dist/src/endpoints.js.map +1 -0
- package/dist/src/handlers.d.ts +47 -0
- package/dist/src/handlers.js +32 -0
- package/dist/src/handlers.js.map +1 -0
- package/dist/src/index.d.ts +25 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/manifest.d.ts +33 -0
- package/dist/src/manifest.js +24 -0
- package/dist/src/manifest.js.map +1 -0
- package/dist/src/sdk.d.ts +5 -0
- package/dist/src/sdk.js +49 -0
- package/dist/src/sdk.js.map +1 -0
- package/examples/basic-demo.ts +43 -0
- package/examples/stocks/public/assets/AMZN.png +0 -0
- package/examples/stocks/public/assets/GOOGL.png +0 -0
- package/examples/stocks/public/assets/META.png +0 -0
- package/examples/stocks/public/assets/MSFT.png +0 -0
- package/examples/stocks/public/future-client-sdk.js +30 -0
- package/examples/stocks/public/index.html +29 -0
- package/examples/stocks/public/main.js +56 -0
- package/examples/stocks/server.ts +51 -0
- package/examples/todos/public/index.html +13 -0
- package/examples/todos/public/main.js +70 -0
- package/examples/todos/server.ts +66 -0
- package/package.json +30 -0
- package/src/app.ts +152 -0
- package/src/authentication.ts +321 -0
- package/src/config.ts +24 -0
- package/src/endpoints.ts +24 -0
- package/src/handlers.ts +52 -0
- package/src/index.ts +36 -0
- package/src/manifest.ts +31 -0
- package/src/sdk.ts +53 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import jwt from 'jsonwebtoken';
|
|
2
|
+
import manifest from './manifest';
|
|
3
|
+
import handlers, { onCallback, onFrontendAuthorization, onNewTenant, onRefreshToken } from './handlers';
|
|
4
|
+
import config from './config';
|
|
5
|
+
import { getSdk, getSdkForUrl } from './sdk';
|
|
6
|
+
const notAuthorized = { message: 'you are not authorized' };
|
|
7
|
+
function getHostname(fullUrl) {
|
|
8
|
+
const url = new URL(fullUrl);
|
|
9
|
+
return url.hostname;
|
|
10
|
+
}
|
|
11
|
+
export async function verifyAccessToken(req) {
|
|
12
|
+
const { authorization } = req.headers;
|
|
13
|
+
const token = authorization?.split(' ')[1];
|
|
14
|
+
if (!token) {
|
|
15
|
+
throw new Error('authorization token was not provided');
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
req.tenantPayload = jwt.verify(token, config.accessTokenSecret);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
if (config.dev) {
|
|
22
|
+
console.log(e);
|
|
23
|
+
}
|
|
24
|
+
throw new Error('authorization token was not valid');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function verifyCookieToken(req) {
|
|
28
|
+
const { code } = req.headers;
|
|
29
|
+
if (!code) {
|
|
30
|
+
throw new Error('authorization code was not provided');
|
|
31
|
+
}
|
|
32
|
+
const token = req.cookies?.['token_' + code];
|
|
33
|
+
if (!token) {
|
|
34
|
+
throw new Error('user is not authorized');
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const data = jwt.verify(token, config.accessTokenSecret);
|
|
38
|
+
req.tenantPayload = data.tenant;
|
|
39
|
+
req.user = data.user;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
throw new Error('authorization token was not valid');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function getRefreshTokenRoute() {
|
|
46
|
+
const usersSdk = getSdk().users;
|
|
47
|
+
if (config.greenpressUrl) {
|
|
48
|
+
onRefreshToken(async ({ sub, identifier = '' }) => {
|
|
49
|
+
const user = await usersSdk.getUser(sub);
|
|
50
|
+
if (identifier.toString() !== user.internalMetadata?.tokenIdentifier) {
|
|
51
|
+
throw new Error('user is not verified on Qelos BaaS');
|
|
52
|
+
}
|
|
53
|
+
const newPayload = {
|
|
54
|
+
sub,
|
|
55
|
+
identifier: (Date.now() + Math.random()).toString().substring(0, 10)
|
|
56
|
+
};
|
|
57
|
+
await usersSdk.update(sub, { internalMetadata: { tokenIdentifier: newPayload.identifier } });
|
|
58
|
+
return { payload: newPayload };
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
url: manifest.authAcquire.refreshTokenUrl,
|
|
64
|
+
handler: async (request, reply) => {
|
|
65
|
+
const expectedRefreshToken = request.headers['authorization']?.split(' ')[1];
|
|
66
|
+
if (!expectedRefreshToken) {
|
|
67
|
+
reply.statusCode = 401;
|
|
68
|
+
return notAuthorized;
|
|
69
|
+
}
|
|
70
|
+
let payload;
|
|
71
|
+
try {
|
|
72
|
+
if (!expectedRefreshToken || expectedRefreshToken === 'undefined') {
|
|
73
|
+
throw new Error('expected refresh token is empty');
|
|
74
|
+
}
|
|
75
|
+
payload = jwt.verify(expectedRefreshToken, config.refreshTokenSecret);
|
|
76
|
+
if (handlers.refreshToken.length) {
|
|
77
|
+
for (let handler of handlers.refreshToken) {
|
|
78
|
+
const result = await handler(payload, request);
|
|
79
|
+
if (result?.payload) {
|
|
80
|
+
return {
|
|
81
|
+
[manifest.authAcquire.refreshTokenKey]: jwt.sign(result.payload, config.refreshTokenSecret, { expiresIn: '90d' }),
|
|
82
|
+
[manifest.authAcquire.accessTokenKey]: jwt.sign(result.payload, config.accessTokenSecret, { expiresIn: '1h' }),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (config.dev) {
|
|
90
|
+
console.log(err);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
reply.statusCode = 401;
|
|
94
|
+
return notAuthorized;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function getRegisterRoute() {
|
|
99
|
+
const usersSdk = getSdk().users;
|
|
100
|
+
if (config.greenpressUrl) {
|
|
101
|
+
onNewTenant(async ({ email, password, appUrl }) => {
|
|
102
|
+
const tenantSdk = getSdkForUrl(appUrl);
|
|
103
|
+
const emailSplit = email.split('@');
|
|
104
|
+
if (emailSplit.length === 2 && getHostname(appUrl) !== emailSplit[1].split(':')[0]) {
|
|
105
|
+
throw new Error('email must be provided from the same app url');
|
|
106
|
+
}
|
|
107
|
+
// email will be: {pluginId}.{tenantId}@${tenantHostname}
|
|
108
|
+
const { payload } = await tenantSdk.authentication.oAuthSignin({ email, password });
|
|
109
|
+
if (!payload.user?.roles?.includes('plugin')) {
|
|
110
|
+
throw new Error('should retrieve a plugin user to app: ' + appUrl);
|
|
111
|
+
}
|
|
112
|
+
const newPayload = {
|
|
113
|
+
sub: '',
|
|
114
|
+
identifier: (Date.now() + Math.random()).toString().substring(0, 10)
|
|
115
|
+
};
|
|
116
|
+
const [existingUser] = await usersSdk.getList({ email, exact: true });
|
|
117
|
+
let user;
|
|
118
|
+
if (existingUser) {
|
|
119
|
+
user = existingUser;
|
|
120
|
+
await usersSdk.update(user._id, {
|
|
121
|
+
firstName: appUrl,
|
|
122
|
+
lastName: 'gp-player-app',
|
|
123
|
+
email,
|
|
124
|
+
password,
|
|
125
|
+
internalMetadata: { tokenIdentifier: newPayload.identifier }
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
user = await usersSdk.create({
|
|
130
|
+
firstName: appUrl,
|
|
131
|
+
lastName: 'gp-player-app',
|
|
132
|
+
email,
|
|
133
|
+
password,
|
|
134
|
+
roles: ['user'],
|
|
135
|
+
internalMetadata: { tokenIdentifier: newPayload.identifier }
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
await usersSdk.setEncryptedData(user._id, {
|
|
139
|
+
appUrl,
|
|
140
|
+
email,
|
|
141
|
+
password,
|
|
142
|
+
currentAuthPayload: payload
|
|
143
|
+
});
|
|
144
|
+
newPayload.sub = user._id;
|
|
145
|
+
return { payload: newPayload };
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
method: 'POST',
|
|
150
|
+
url: manifest.registerUrl,
|
|
151
|
+
handler: async (request, reply) => {
|
|
152
|
+
const { email, password, appUrl } = request.body || {};
|
|
153
|
+
if (!(email && password && appUrl)) {
|
|
154
|
+
reply.statusCode = 401;
|
|
155
|
+
return notAuthorized;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
if (handlers.newTenant.length) {
|
|
159
|
+
for (let handler of handlers.newTenant) {
|
|
160
|
+
const result = await handler({ email, password, appUrl }, request);
|
|
161
|
+
if (result?.payload) {
|
|
162
|
+
return {
|
|
163
|
+
[manifest.authAcquire.refreshTokenKey]: jwt.sign(result.payload, config.refreshTokenSecret, { expiresIn: '90d' }),
|
|
164
|
+
[manifest.authAcquire.accessTokenKey]: jwt.sign(result.payload, config.accessTokenSecret, { expiresIn: '1h' }),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
if (config.dev) {
|
|
172
|
+
console.log(err);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
reply.statusCode = 401;
|
|
176
|
+
return notAuthorized;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export function getCallbackRoute() {
|
|
181
|
+
if (config.greenpressUrl) {
|
|
182
|
+
onCallback(async ({ user, returnUrl }, request) => {
|
|
183
|
+
const code = Math.floor(Math.random() * 1000).toString();
|
|
184
|
+
// set the code on gp db
|
|
185
|
+
// temporary set the data as drafts
|
|
186
|
+
// TODO: add callback code-based endpoint in auth service
|
|
187
|
+
await getSdk().drafts.setDraft({
|
|
188
|
+
contextType: returnUrl,
|
|
189
|
+
contextId: `${request.tenantPayload.sub}.${user.email}`,
|
|
190
|
+
contextData: {
|
|
191
|
+
code,
|
|
192
|
+
user,
|
|
193
|
+
created: Date.now(),
|
|
194
|
+
tenant: request.tenantPayload
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return code;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
method: 'GET',
|
|
202
|
+
url: manifest.callbackUrl,
|
|
203
|
+
preHandler: verifyAccessToken,
|
|
204
|
+
handler: async (request, reply) => {
|
|
205
|
+
const queryParams = request.query || {};
|
|
206
|
+
try {
|
|
207
|
+
const returnUrl = new URL(queryParams.returnUrl);
|
|
208
|
+
const user = request.headers.user ? JSON.parse(request.headers.user) : undefined;
|
|
209
|
+
request.user = user;
|
|
210
|
+
for (let handler of handlers.callback) {
|
|
211
|
+
const code = await handler({ user, returnUrl: returnUrl.href }, request);
|
|
212
|
+
if (code && typeof code === 'string') {
|
|
213
|
+
returnUrl.searchParams.append('code', code);
|
|
214
|
+
returnUrl.searchParams.append('token', jwt.sign({
|
|
215
|
+
user,
|
|
216
|
+
tenant: request.tenantPayload
|
|
217
|
+
}, config.accessTokenSecret, { expiresIn: '10min' }));
|
|
218
|
+
return {
|
|
219
|
+
returnUrl: returnUrl.href
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
if (config.dev) {
|
|
226
|
+
console.log('error in callback', err);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
reply.statusCode = 401;
|
|
230
|
+
return notAuthorized;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
export function getFrontendAuthorizationRoute() {
|
|
235
|
+
if (config.greenpressUrl) {
|
|
236
|
+
onFrontendAuthorization(async ({ returnUrl, user, tenant }, request) => {
|
|
237
|
+
const draft = await getSdk().drafts.getDraft(returnUrl, `${tenant.sub}.${user.email}`);
|
|
238
|
+
if (draft && draft.contextData) {
|
|
239
|
+
return {
|
|
240
|
+
code: draft.contextData.code,
|
|
241
|
+
token: jwt.sign({ code: draft.contextData, user, tenant }, config.accessTokenSecret, { expiresIn: '30min' }),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
method: 'POST',
|
|
249
|
+
url: manifest.authorizeUrl,
|
|
250
|
+
handler: async (request, reply) => {
|
|
251
|
+
const { returnUrl, token } = request.body || {};
|
|
252
|
+
if (returnUrl && token) {
|
|
253
|
+
try {
|
|
254
|
+
const { user, tenant } = jwt.verify(token, config.accessTokenSecret);
|
|
255
|
+
for (let handler of handlers.frontendAuth) {
|
|
256
|
+
const cookieData = await handler({ returnUrl, user, tenant }, request);
|
|
257
|
+
if (cookieData && cookieData.code && cookieData.token) {
|
|
258
|
+
reply.setCookie('token_' + cookieData.code, cookieData.token);
|
|
259
|
+
return {
|
|
260
|
+
user,
|
|
261
|
+
tenant
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
if (config.dev) {
|
|
268
|
+
console.log('error in callback', err);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
reply.statusCode = 401;
|
|
273
|
+
return notAuthorized;
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
export function getFrontendUnAuthorizationRoute() {
|
|
278
|
+
return {
|
|
279
|
+
method: 'POST',
|
|
280
|
+
url: manifest.unAuthorizeUrl,
|
|
281
|
+
preHandler: verifyCookieToken,
|
|
282
|
+
handler: async (request, reply) => {
|
|
283
|
+
const code = request.headers.code;
|
|
284
|
+
const user = request.user;
|
|
285
|
+
const tenant = request.tenantPayload;
|
|
286
|
+
reply.setCookie('token_' + code, '', { maxAge: 1 });
|
|
287
|
+
handlers.frontendUnAuth.forEach((handler) => handler({ user, tenant }));
|
|
288
|
+
return 'OK';
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=authentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/authentication.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare const config: {
|
|
2
|
+
port: string | number;
|
|
3
|
+
host: string;
|
|
4
|
+
dev: boolean;
|
|
5
|
+
refreshTokenSecret: string;
|
|
6
|
+
accessTokenSecret: string;
|
|
7
|
+
greenpressUrl: string;
|
|
8
|
+
greenpressUsername: string;
|
|
9
|
+
greenpressPassword: string;
|
|
10
|
+
staticFrontend: {
|
|
11
|
+
root: string;
|
|
12
|
+
prefix: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare type ConfigOptions = Partial<typeof config>;
|
|
16
|
+
export declare function setConfig(appConfig: ConfigOptions): void;
|
|
17
|
+
export default config;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
const config = {
|
|
3
|
+
port: process.env.PORT || 1086,
|
|
4
|
+
host: process.env.HOST || '0.0.0.0',
|
|
5
|
+
dev: process.env.NODE_ENV !== 'production',
|
|
6
|
+
refreshTokenSecret: process.env.REFRESH_TOKEN_SECRET,
|
|
7
|
+
accessTokenSecret: process.env.ACCESS_TOKEN_SECRET,
|
|
8
|
+
greenpressUrl: process.env.GREENPRESS_URL,
|
|
9
|
+
greenpressUsername: process.env.GREENPRESS_USERNAME,
|
|
10
|
+
greenpressPassword: process.env.GREENPRESS_PASSWORD,
|
|
11
|
+
staticFrontend: {
|
|
12
|
+
root: join(process.cwd(), process.env.STATIC_ROOT || 'public'),
|
|
13
|
+
prefix: process.env.STATIC_PREFIX || '/',
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export function setConfig(appConfig) {
|
|
17
|
+
Object.assign(config, appConfig);
|
|
18
|
+
}
|
|
19
|
+
export default config;
|
|
20
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;IACnC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;IAC1C,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;IACpD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;IAClD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;IACzC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;IACnD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;IACnD,cAAc,EAAE;QACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,CAAC;QAC9D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG;KACzC;CACF,CAAC;AAIF,MAAM,UAAU,SAAS,CAAC,SAAwB;IAChD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { RouteOptions } from 'fastify/types/route';
|
|
3
|
+
export declare const endpoints: Map<string, RouteOptions<import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify/types/route").RouteGenericInterface, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, import("fastify").FastifyBaseLogger>>;
|
|
4
|
+
export declare function addProxyEndpoint(path: string, options: Partial<RouteOptions>): void;
|
|
5
|
+
export declare function addEndpoint(path: string, options: Partial<RouteOptions>): void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import manifest from './manifest';
|
|
3
|
+
export const endpoints = new Map();
|
|
4
|
+
export function addProxyEndpoint(path, options) {
|
|
5
|
+
endpoints.set(join(manifest.apiPath, path), {
|
|
6
|
+
...options,
|
|
7
|
+
url: path,
|
|
8
|
+
method: options.method || 'GET',
|
|
9
|
+
handler: options.handler
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function addEndpoint(path, options) {
|
|
13
|
+
const method = options.method || 'GET';
|
|
14
|
+
endpoints.set(method + '::' + path, {
|
|
15
|
+
...options,
|
|
16
|
+
url: path,
|
|
17
|
+
method,
|
|
18
|
+
handler: options.handler
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/endpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAA;AAExD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAA8B;IAC3E,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QAC1C,GAAG,OAAO;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAA8B;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE;QAClC,GAAG,OAAO;QACV,GAAG,EAAE,IAAI;QACT,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { FastifyRequest } from 'fastify/types/request';
|
|
2
|
+
export declare const handlers: {
|
|
3
|
+
refreshToken: any[];
|
|
4
|
+
newTenant: any[];
|
|
5
|
+
manifest: any[];
|
|
6
|
+
storeUser: any[];
|
|
7
|
+
callback: any[];
|
|
8
|
+
frontendAuth: any[];
|
|
9
|
+
frontendUnAuth: any[];
|
|
10
|
+
};
|
|
11
|
+
export declare type StandardPayload = {
|
|
12
|
+
sub: string;
|
|
13
|
+
identifier: string;
|
|
14
|
+
};
|
|
15
|
+
export declare type DataWithPayload<T> = {
|
|
16
|
+
payload: T & StandardPayload;
|
|
17
|
+
};
|
|
18
|
+
export declare type FrontendAuthorizationPayload = {
|
|
19
|
+
code: string | number;
|
|
20
|
+
token: string;
|
|
21
|
+
};
|
|
22
|
+
export declare type RefreshTokenHandler<T> = (tokenPayload: T & StandardPayload, request: FastifyRequest) => void | DataWithPayload<T> | Promise<void | DataWithPayload<T>>;
|
|
23
|
+
export declare type NewTenantHandler<T> = ({ email, password, appUrl }: {
|
|
24
|
+
email: any;
|
|
25
|
+
password: any;
|
|
26
|
+
appUrl: any;
|
|
27
|
+
}, request: FastifyRequest) => void | DataWithPayload<T> | Promise<void | DataWithPayload<T>>;
|
|
28
|
+
export declare type FrontendAuthorizationHandler = ({ returnUrl, user, tenant }: {
|
|
29
|
+
returnUrl: any;
|
|
30
|
+
user: any;
|
|
31
|
+
tenant: any;
|
|
32
|
+
}, request: FastifyRequest) => void | FrontendAuthorizationPayload | Promise<void | FrontendAuthorizationPayload>;
|
|
33
|
+
export declare type FrontendUnAuthorizationHandler = ({ user, tenant }: {
|
|
34
|
+
user: any;
|
|
35
|
+
tenant: any;
|
|
36
|
+
}) => any;
|
|
37
|
+
export declare function onRefreshToken<T = any>(handler: RefreshTokenHandler<T>): void;
|
|
38
|
+
export declare function onNewTenant<T = any>(handler: NewTenantHandler<T>): void;
|
|
39
|
+
export declare function onManifest(handler: (request: FastifyRequest) => any): void;
|
|
40
|
+
export declare function onStoreUser(handler: any): void;
|
|
41
|
+
export declare function onCallback(handler: ({ user, returnUrl }: {
|
|
42
|
+
user: any;
|
|
43
|
+
returnUrl: any;
|
|
44
|
+
}, request: FastifyRequest) => void | string | Promise<void | string>): void;
|
|
45
|
+
export declare function onFrontendAuthorization(handler: FrontendAuthorizationHandler): void;
|
|
46
|
+
export declare function onFrontendUnAuthorization(handler: FrontendUnAuthorizationHandler): void;
|
|
47
|
+
export default handlers;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const handlers = {
|
|
2
|
+
refreshToken: [],
|
|
3
|
+
newTenant: [],
|
|
4
|
+
manifest: [],
|
|
5
|
+
storeUser: [],
|
|
6
|
+
callback: [],
|
|
7
|
+
frontendAuth: [],
|
|
8
|
+
frontendUnAuth: [],
|
|
9
|
+
};
|
|
10
|
+
export function onRefreshToken(handler) {
|
|
11
|
+
handlers.refreshToken.push(handler);
|
|
12
|
+
}
|
|
13
|
+
export function onNewTenant(handler) {
|
|
14
|
+
handlers.newTenant.push(handler);
|
|
15
|
+
}
|
|
16
|
+
export function onManifest(handler) {
|
|
17
|
+
handlers.manifest.push(handler);
|
|
18
|
+
}
|
|
19
|
+
export function onStoreUser(handler) {
|
|
20
|
+
handlers.storeUser.push(handler);
|
|
21
|
+
}
|
|
22
|
+
export function onCallback(handler) {
|
|
23
|
+
handlers.callback.push(handler);
|
|
24
|
+
}
|
|
25
|
+
export function onFrontendAuthorization(handler) {
|
|
26
|
+
handlers.frontendAuth.push(handler);
|
|
27
|
+
}
|
|
28
|
+
export function onFrontendUnAuthorization(handler) {
|
|
29
|
+
handlers.frontendUnAuth.push(handler);
|
|
30
|
+
}
|
|
31
|
+
export default handlers;
|
|
32
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/handlers.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;CACnB,CAAA;AAaD,MAAM,UAAU,cAAc,CAAU,OAA+B;IACrE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAU,OAA4B;IAC/D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAyC;IAClE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAO;IACjC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA+F;IACxH,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAqC;IAC3E,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAuC;IAC/E,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NavBarGroup } from './manifest';
|
|
2
|
+
export interface MicroFrontend {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
url: string;
|
|
6
|
+
route?: {
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
roles?: string[];
|
|
10
|
+
navBarPosition: 'top' | 'bottom';
|
|
11
|
+
group?: string;
|
|
12
|
+
iconName?: string;
|
|
13
|
+
iconSvg?: string;
|
|
14
|
+
};
|
|
15
|
+
component?: {
|
|
16
|
+
page: string;
|
|
17
|
+
position: 'top' | 'left' | 'right' | 'bottom';
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export { start, configure, registerToHook } from './app';
|
|
21
|
+
export { onRefreshToken, onManifest, onStoreUser, onNewTenant, onCallback } from './handlers';
|
|
22
|
+
export { addEndpoint, addProxyEndpoint } from './endpoints';
|
|
23
|
+
export { getSdkForTenant, getSdk, getSdkForUrl } from './sdk';
|
|
24
|
+
export declare function addMicroFrontend(mfe: MicroFrontend): void;
|
|
25
|
+
export declare function addGroupedMicroFrontends(group: NavBarGroup, mfeArray: MicroFrontend[]): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import manifest from './manifest';
|
|
2
|
+
export { start, configure, registerToHook } from './app';
|
|
3
|
+
export { onRefreshToken, onManifest, onStoreUser, onNewTenant, onCallback } from './handlers';
|
|
4
|
+
export { addEndpoint, addProxyEndpoint } from './endpoints';
|
|
5
|
+
export { getSdkForTenant, getSdk, getSdkForUrl } from './sdk';
|
|
6
|
+
export function addMicroFrontend(mfe) {
|
|
7
|
+
manifest.microFrontends.push(mfe);
|
|
8
|
+
}
|
|
9
|
+
export function addGroupedMicroFrontends(group, mfeArray) {
|
|
10
|
+
manifest.navBarGroups.push(group);
|
|
11
|
+
mfeArray.forEach(mfe => {
|
|
12
|
+
addMicroFrontend({ ...mfe, route: { ...mfe.route, group: group.key } });
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAuB,MAAM,YAAY,CAAC;AAqBjD,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAA;AACzD,OAAO,EAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAC,MAAM,OAAO,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAkB,EAAE,QAAyB;IACpF,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACrB,gBAAgB,CAAC,EAAC,GAAG,GAAG,EAAE,KAAK,EAAE,EAAC,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAC,EAAC,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const manifest: {
|
|
2
|
+
name: any;
|
|
3
|
+
description: any;
|
|
4
|
+
appUrl: string;
|
|
5
|
+
apiPath: any;
|
|
6
|
+
manifestUrl: string;
|
|
7
|
+
registerUrl: string;
|
|
8
|
+
callbackUrl: string;
|
|
9
|
+
authorizeUrl: string;
|
|
10
|
+
unAuthorizeUrl: string;
|
|
11
|
+
proxyPath: string;
|
|
12
|
+
proxyUrl: string;
|
|
13
|
+
subscribedEvents: any[];
|
|
14
|
+
navBarGroups: any[];
|
|
15
|
+
microFrontends: any[];
|
|
16
|
+
authAcquire: {
|
|
17
|
+
refreshTokenUrl: string;
|
|
18
|
+
refreshTokenKey: string;
|
|
19
|
+
accessTokenKey: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export declare type NavBarGroup = {
|
|
23
|
+
key: string;
|
|
24
|
+
name: string;
|
|
25
|
+
iconName?: string;
|
|
26
|
+
iconSvg?: string;
|
|
27
|
+
priority?: number;
|
|
28
|
+
};
|
|
29
|
+
export declare type ManifestOptions = Partial<typeof manifest> & {
|
|
30
|
+
appUrl?: string;
|
|
31
|
+
navBarGroups?: NavBarGroup[];
|
|
32
|
+
};
|
|
33
|
+
export default manifest;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const pkg = require(process.cwd() + '/package.json');
|
|
2
|
+
export const manifest = {
|
|
3
|
+
name: pkg.name,
|
|
4
|
+
description: pkg.description,
|
|
5
|
+
appUrl: process.env.APP_URL || '',
|
|
6
|
+
apiPath: pkg.name,
|
|
7
|
+
manifestUrl: '/api/play-manifest',
|
|
8
|
+
registerUrl: '/api/register',
|
|
9
|
+
callbackUrl: '/api/callback',
|
|
10
|
+
authorizeUrl: '/api/authorize',
|
|
11
|
+
unAuthorizeUrl: '/api/un-authorize',
|
|
12
|
+
proxyPath: '/api/play',
|
|
13
|
+
proxyUrl: '',
|
|
14
|
+
subscribedEvents: [],
|
|
15
|
+
navBarGroups: [],
|
|
16
|
+
microFrontends: [],
|
|
17
|
+
authAcquire: {
|
|
18
|
+
refreshTokenUrl: '/api/token/refresh',
|
|
19
|
+
refreshTokenKey: 'refresh_token',
|
|
20
|
+
accessTokenKey: 'access_token'
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export default manifest;
|
|
24
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,WAAW,EAAE,GAAG,CAAC,WAAW;IAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;IACjC,OAAO,EAAE,GAAG,CAAC,IAAI;IACjB,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,mBAAmB;IACnC,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,EAAE;IACZ,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE;QACX,eAAe,EAAE,oBAAoB;QACrC,eAAe,EAAE,eAAe;QAChC,cAAc,EAAE,cAAc;KAC/B;CACF,CAAC;AAQF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import QelosAdministratorSDK from '@qelos/sdk/dist/administrator';
|
|
2
|
+
import { StandardPayload } from './handlers';
|
|
3
|
+
export declare function getSdkForUrl<T = any>(appUrl: string, refreshToken?: string, accessToken?: string): QelosAdministratorSDK;
|
|
4
|
+
export declare function getSdk(): QelosAdministratorSDK;
|
|
5
|
+
export declare function getSdkForTenant(tenantPayload: StandardPayload): Promise<QelosAdministratorSDK | null>;
|
package/dist/src/sdk.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { fetch as undiciFetch } from 'undici';
|
|
2
|
+
import QelosAdministratorSDK from '@qelos/sdk/dist/administrator';
|
|
3
|
+
import config from './config';
|
|
4
|
+
let localSdk;
|
|
5
|
+
async function authenticate() {
|
|
6
|
+
try {
|
|
7
|
+
await localSdk.authentication.oAuthSignin({ email: config.greenpressUsername, password: config.greenpressPassword });
|
|
8
|
+
console.log('authenticated successfully to ' + config.greenpressUrl);
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
console.log('could not authenticate to own greenpress app');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function getSdkForUrl(appUrl, refreshToken, accessToken) {
|
|
16
|
+
const options = { appUrl, fetch: globalThis.fetch || undiciFetch };
|
|
17
|
+
if (refreshToken) {
|
|
18
|
+
options.refreshToken = refreshToken;
|
|
19
|
+
}
|
|
20
|
+
if (accessToken) {
|
|
21
|
+
options.accessToken = accessToken;
|
|
22
|
+
}
|
|
23
|
+
return new QelosAdministratorSDK(options);
|
|
24
|
+
}
|
|
25
|
+
export function getSdk() {
|
|
26
|
+
if (localSdk) {
|
|
27
|
+
return localSdk;
|
|
28
|
+
}
|
|
29
|
+
localSdk = getSdkForUrl(config.greenpressUrl);
|
|
30
|
+
authenticate();
|
|
31
|
+
return localSdk;
|
|
32
|
+
}
|
|
33
|
+
export async function getSdkForTenant(tenantPayload) {
|
|
34
|
+
try {
|
|
35
|
+
const data = await getSdk().users.getEncryptedData(tenantPayload.sub);
|
|
36
|
+
if (!data.appUrl) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const sdk = getSdkForUrl(data.appUrl, data.currentAuthPayload?.refreshToken, data.currentAuthPayload?.token);
|
|
40
|
+
return sdk;
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
if (config.dev) {
|
|
44
|
+
console.log(e);
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,WAAW,EAAC,MAAM,QAAQ,CAAC;AAC5C,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAElE,OAAO,MAAM,MAAM,UAAU,CAAC;AAG9B,IAAI,QAA4D,CAAC;AAEjE,KAAK,UAAU,YAAY;IACzB,IAAI;QACF,MAAM,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAC,CAAC,CAAC;QACnH,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;KACrE;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAU,MAAc,EAAE,YAAqB,EAAE,WAAoB;IAC/F,MAAM,OAAO,GAAoB,EAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,WAA+B,EAAC,CAAC;IACtG,IAAI,YAAY,EAAE;QAChB,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;KACrC;IACD,IAAI,WAAW,EAAE;QACf,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;KACnC;IACD,OAAO,IAAI,qBAAqB,CAAI,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,IAAI,QAAQ,EAAE;QACZ,OAAO,QAAQ,CAAC;KACjB;IACD,QAAQ,GAAG,YAAY,CAA8B,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3E,YAAY,EAAE,CAAC;IACf,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,aAA8B;IAClE,IAAI;QACF,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC7G,OAAO,GAAG,CAAC;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,MAAM,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;KACb;AACH,CAAC"}
|