UNPKG

1.98 kBJavaScriptView Raw
1import { canPrefetch, createPrefetchClient, createClient, getCache, getInternal, processCache, modifyCache } from '@middy/util';
2import { ServiceDiscoveryClient, DiscoverInstancesCommand } from '@aws-sdk/client-servicediscovery';
3const defaults = {
4 AwsClient: ServiceDiscoveryClient,
5 awsClientOptions: {},
6 awsClientAssumeRole: undefined,
7 awsClientCapture: undefined,
8 fetchData: {},
9 disablePrefetch: false,
10 cacheKey: 'cloud-map',
11 cacheKeyExpiry: {},
12 cacheExpiry: -1,
13 setToContext: false
14};
15const serviceDiscoveryMiddleware = (opts = {})=>{
16 const options = {
17 ...defaults,
18 ...opts
19 };
20 const fetch = (request, cachedValues = {})=>{
21 const values = {};
22 for (const internalKey of Object.keys(options.fetchData)){
23 if (cachedValues[internalKey]) continue;
24 values[internalKey] = client.send(new DiscoverInstancesCommand(options.fetchData[internalKey])).then((resp)=>resp.Instances).catch((e)=>{
25 const value = getCache(options.cacheKey).value ?? {};
26 value[internalKey] = undefined;
27 modifyCache(options.cacheKey, value);
28 throw e;
29 });
30 }
31 return values;
32 };
33 let client;
34 if (canPrefetch(options)) {
35 client = createPrefetchClient(options);
36 processCache(options, fetch);
37 }
38 const serviceDiscoveryMiddlewareBefore = async (request)=>{
39 if (!client) {
40 client = await createClient(options, request);
41 }
42 const { value } = processCache(options, fetch, request);
43 Object.assign(request.internal, value);
44 if (options.setToContext) {
45 const data = await getInternal(Object.keys(options.fetchData), request);
46 if (options.setToContext) Object.assign(request.context, data);
47 }
48 };
49 return {
50 before: serviceDiscoveryMiddlewareBefore
51 };
52};
53export default serviceDiscoveryMiddleware;
54