Skip to content

Commit 930372b

Browse files
committed
folder rename and export added
1 parent b98cf75 commit 930372b

File tree

4 files changed

+81
-88
lines changed

4 files changed

+81
-88
lines changed

src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
// TODO: add the plugin export
2-
console.log('Hello world');
1+
export * from './lib/plugin';

src/lib/plugin.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import * as _ from 'ramda';
2+
import { RouteOptions } from './types';
3+
4+
const isPluginActive = (request): boolean => {
5+
return (
6+
(request.route.settings.plugins && request.route.settings.plugins.signedUrl) || false
7+
);
8+
};
9+
10+
const isResponseAbsent = (request): boolean => {
11+
const response = request.response;
12+
return (
13+
response.statusCode !== 200 || _.isEmpty(response.source) || _.isNil(response.source)
14+
);
15+
};
16+
17+
const getRouteOptions = (request, getSignedUrl): RouteOptions => {
18+
const options = request.route.settings.plugins.signedUrl;
19+
const source = options.pathToSource
20+
? _.view(options.pathToSource, request.response.source)
21+
: request.response.source;
22+
return {
23+
...options,
24+
source: source,
25+
getSignedUrl: getSignedUrl,
26+
};
27+
};
28+
29+
const updateSignedUrl = async (options: RouteOptions) => {
30+
const { source, lenses, getSignedUrl } = options;
31+
const toUpdateLinks: string[] = lenses.map((lens) => _.view(lens, source));
32+
const promises = toUpdateLinks.map(async (link: string) => await getSignedUrl(link));
33+
const updatedLinks = await Promise.all(promises);
34+
const updatedSource = updatedLinks.reduce((source, link, index) => {
35+
return _.set(lenses[index], link, source);
36+
}, source);
37+
return updatedSource as object;
38+
};
39+
40+
const processSource = async (options: RouteOptions) => {
41+
// single object
42+
if (_.type(options.source) !== 'Array') {
43+
return updateSignedUrl(options);
44+
}
45+
46+
// if source is array
47+
const promises = (options.source as any[]).map(async (src) => {
48+
return updateSignedUrl({
49+
...options,
50+
source: src,
51+
});
52+
});
53+
return Promise.all(promises);
54+
};
55+
56+
const signUrl = (getSignedUrl) => async (request, h) => {
57+
if (!isPluginActive(request)) {
58+
return h.continue;
59+
}
60+
if (isResponseAbsent(request)) {
61+
return h.continue;
62+
}
63+
64+
const routeOptions = getRouteOptions(request, getSignedUrl);
65+
const updated = await processSource(routeOptions);
66+
const updatedSource = routeOptions.pathToSource
67+
? _.set(routeOptions.pathToSource, updated, request.response.source)
68+
: updated;
69+
70+
request.response.source = updatedSource;
71+
return h.continue;
72+
};
73+
74+
export const signedUrl = {
75+
name: 'signedUrl',
76+
version: '1.0.0',
77+
register: async function (server, options) {
78+
server.ext('onPreResponse', signUrl(options.getSignedUrl));
79+
},
80+
};
File renamed without changes.

src/signedUrl/plugin.ts

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)