serverless-spy 0.0.33 → 0.0.34
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/.jsii +9 -9
- package/common/publishSpyEvent.ts +269 -0
- package/dist/releasetag.txt +1 -1
- package/extension/interceptor.ts +24 -13
- package/functions/onConnect.ts +2 -1
- package/functions/onDisconnect.ts +2 -1
- package/functions/sendMessage.ts +3 -268
- package/lib/common/publishSpyEvent.d.ts +4 -0
- package/lib/common/publishSpyEvent.js +211 -0
- package/lib/common/publishSpyEvent.mjs +205 -0
- package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js +13890 -13
- package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js.map +4 -4
- package/lib/listener/{SpyListener.d.ts → ServerlessSpyListener.d.ts} +12 -12
- package/lib/listener/ServerlessSpyListener.js +3 -0
- package/lib/listener/ServerlessSpyListener.mjs +2 -0
- package/lib/listener/ServerlessSpyListenerParams.d.ts +5 -0
- package/lib/listener/ServerlessSpyListenerParams.js +3 -0
- package/lib/listener/ServerlessSpyListenerParams.mjs +2 -0
- package/lib/listener/SpyHandlers.ts.d.ts +1 -1
- package/lib/listener/SpyHandlers.ts.js +1 -1
- package/lib/listener/SpyHandlers.ts.mjs +1 -1
- package/lib/listener/WaitForParams.d.ts +5 -0
- package/lib/listener/WaitForParams.js +3 -0
- package/lib/listener/WaitForParams.mjs +2 -0
- package/lib/listener/WsListener.d.ts +38 -0
- package/lib/listener/WsListener.js +185 -0
- package/lib/listener/WsListener.mjs +181 -0
- package/lib/listener/createServerlessSpyListener.d.ts +2 -13
- package/lib/listener/createServerlessSpyListener.js +5 -163
- package/lib/listener/createServerlessSpyListener.mjs +5 -163
- package/lib/listener/index.d.ts +1 -1
- package/lib/listener/index.js +2 -2
- package/lib/listener/index.mjs +2 -2
- package/lib/src/ServerlessSpy.d.ts +16 -8
- package/lib/src/ServerlessSpy.js +94 -53
- package/lib/src/ServerlessSpy.mjs +93 -52
- package/lib/src/common/envVariableNames.d.ts +8 -0
- package/lib/src/common/envVariableNames.js +15 -0
- package/lib/src/common/envVariableNames.mjs +12 -0
- package/listener/{SpyListener.ts → ServerlessSpyListener.ts} +12 -13
- package/listener/ServerlessSpyListenerParams.ts +6 -0
- package/listener/SpyHandlers.ts.ts +1 -1
- package/listener/WaitForParams.ts +6 -0
- package/listener/WsListener.ts +273 -0
- package/listener/createServerlessSpyListener.ts +5 -265
- package/listener/index.ts +1 -1
- package/package.json +1 -1
- package/lib/listener/SpyListener.js +0 -3
- package/lib/listener/SpyListener.mjs +0 -2
|
@@ -1,165 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getWebSocketUrl } from '../common/getWebSocketUrl';
|
|
1
|
+
import { WsListener } from './WsListener';
|
|
3
2
|
export async function createServerlessSpyListener(params) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let trackers = [];
|
|
8
|
-
let closed = false;
|
|
9
|
-
const functionPrefix = 'waitFor';
|
|
10
|
-
let connectionOpenResolve;
|
|
11
|
-
let waitForConnection = new Promise((resolve) => {
|
|
12
|
-
connectionOpenResolve = resolve;
|
|
13
|
-
});
|
|
14
|
-
ws.on('open', () => {
|
|
15
|
-
//console.log('connected ' + new Date().toISOString());
|
|
16
|
-
connectionOpenResolve(undefined);
|
|
17
|
-
});
|
|
18
|
-
ws.on('message', (data) => {
|
|
19
|
-
if (closed)
|
|
20
|
-
return;
|
|
21
|
-
//console.log(`From server: ${data}`);
|
|
22
|
-
const message = JSON.parse(data.toString());
|
|
23
|
-
message.serviceKeyForFunction = message.serviceKey.replace(/#/g, '');
|
|
24
|
-
if (message.serviceKey.startsWith('Function')) {
|
|
25
|
-
message.functionContextAwsRequestId = message.data.context.awsRequestId;
|
|
26
|
-
}
|
|
27
|
-
messages.push(message);
|
|
28
|
-
resolveOldTrackerWithNewMessage(message);
|
|
29
|
-
});
|
|
30
|
-
ws.on('close', () => {
|
|
31
|
-
closed = true;
|
|
32
|
-
// console.log("disconnected " + new Date().toISOString());
|
|
33
|
-
});
|
|
34
|
-
const trackerMatchMessage = (tracker, message) => {
|
|
35
|
-
if (tracker.finished)
|
|
36
|
-
return;
|
|
37
|
-
if ((tracker.serviceKey && tracker.serviceKey === message.serviceKey) ||
|
|
38
|
-
(tracker.serviceKeyForFunction &&
|
|
39
|
-
tracker.serviceKeyForFunction === message.serviceKeyForFunction)) {
|
|
40
|
-
if (trackerMatchCondition(tracker, message)) {
|
|
41
|
-
tracker.finished = true;
|
|
42
|
-
const spyAndJestMatchers = {
|
|
43
|
-
getData: () => message.data,
|
|
44
|
-
};
|
|
45
|
-
const serviceKeyForFunction = tracker.serviceKeyForFunction;
|
|
46
|
-
if (serviceKeyForFunction &&
|
|
47
|
-
serviceKeyForFunction.startsWith('Function') &&
|
|
48
|
-
(serviceKeyForFunction.endsWith('Request') ||
|
|
49
|
-
serviceKeyForFunction.endsWith('Console'))) {
|
|
50
|
-
let serviceKeyForFunctionResponse = serviceKeyForFunction;
|
|
51
|
-
if (serviceKeyForFunctionResponse.endsWith('Request')) {
|
|
52
|
-
serviceKeyForFunctionResponse =
|
|
53
|
-
serviceKeyForFunctionResponse.substring(0, serviceKeyForFunctionResponse.length - 'Request'.length);
|
|
54
|
-
}
|
|
55
|
-
else if (serviceKeyForFunctionResponse.endsWith('Console')) {
|
|
56
|
-
serviceKeyForFunctionResponse =
|
|
57
|
-
serviceKeyForFunctionResponse.substring(0, serviceKeyForFunctionResponse.length - 'Console'.length);
|
|
58
|
-
}
|
|
59
|
-
serviceKeyForFunctionResponse += 'Response';
|
|
60
|
-
spyAndJestMatchers.followedByResponse = (paramsW) => {
|
|
61
|
-
return createWaitForXXXFunc(serviceKeyForFunctionResponse, paramsW, message.data.context.awsRequestId)();
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
const proxy = new Proxy(spyAndJestMatchers, {
|
|
65
|
-
get: function (target, objectKey) {
|
|
66
|
-
if (target.hasOwnProperty(objectKey)) {
|
|
67
|
-
return target[objectKey];
|
|
68
|
-
}
|
|
69
|
-
else if (objectKey !== 'then') {
|
|
70
|
-
return function () {
|
|
71
|
-
const jestFunctionToExecute = expect(message.data)[objectKey];
|
|
72
|
-
jestFunctionToExecute.apply(undefined, arguments);
|
|
73
|
-
return proxy;
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
tracker.promiseResolve(proxy);
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return false;
|
|
83
|
-
};
|
|
84
|
-
const resolveTrackerInOldMessages = (tracker) => {
|
|
85
|
-
for (const message of messages) {
|
|
86
|
-
if (trackerMatchMessage(tracker, message)) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return false;
|
|
91
|
-
};
|
|
92
|
-
const resolveOldTrackerWithNewMessage = (message) => {
|
|
93
|
-
for (let index = 0; index < trackers.length; index++) {
|
|
94
|
-
const tracker = trackers[index];
|
|
95
|
-
if (trackerMatchMessage(tracker, message)) {
|
|
96
|
-
trackers = trackers.splice(index, 1);
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
101
|
-
};
|
|
102
|
-
const spyListener = {};
|
|
103
|
-
spyListener.stop = () => {
|
|
104
|
-
closed = true;
|
|
105
|
-
ws.close();
|
|
106
|
-
};
|
|
107
|
-
const proxy = new Proxy(spyListener, {
|
|
108
|
-
get: function (target, objectKey) {
|
|
109
|
-
if (target.hasOwnProperty(objectKey)) {
|
|
110
|
-
return target[objectKey];
|
|
111
|
-
}
|
|
112
|
-
else if (typeof objectKey === 'string' &&
|
|
113
|
-
objectKey.startsWith(functionPrefix)) {
|
|
114
|
-
const paramsW = arguments[0];
|
|
115
|
-
const serviceKeyForFunction = objectKey.substring(functionPrefix.length);
|
|
116
|
-
return createWaitForXXXFunc(serviceKeyForFunction, paramsW);
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
});
|
|
120
|
-
await waitForConnection;
|
|
121
|
-
return proxy;
|
|
122
|
-
function trackerMatchCondition(tracker, message) {
|
|
123
|
-
const matchCondition = (tracker.condition && tracker.condition(message.data)) ||
|
|
124
|
-
!tracker.condition;
|
|
125
|
-
const matchRequestId = (tracker.functionContextAwsRequestId &&
|
|
126
|
-
tracker.functionContextAwsRequestId ===
|
|
127
|
-
message.functionContextAwsRequestId) ||
|
|
128
|
-
!tracker.functionContextAwsRequestId;
|
|
129
|
-
// if (tracker.functionContextAwsRequestId) {
|
|
130
|
-
// console.log(
|
|
131
|
-
// `${tracker.functionContextAwsRequestId} - ${message.functionContextAwsRequestId}`
|
|
132
|
-
// );
|
|
133
|
-
// }
|
|
134
|
-
return matchCondition && matchRequestId;
|
|
135
|
-
}
|
|
136
|
-
function createWaitForXXXFunc(serviceKeyForFunction, paramsW, functionContextAwsRequestId) {
|
|
137
|
-
let tracker;
|
|
138
|
-
const promise = new Promise((resolve, reject) => {
|
|
139
|
-
tracker = {
|
|
140
|
-
finished: false,
|
|
141
|
-
promiseResolve: resolve,
|
|
142
|
-
promiseReject: reject,
|
|
143
|
-
serviceKeyForFunction,
|
|
144
|
-
functionContextAwsRequestId,
|
|
145
|
-
};
|
|
146
|
-
});
|
|
147
|
-
return function waitForXXXFunc() {
|
|
148
|
-
tracker.condition = paramsW?.condition;
|
|
149
|
-
const timer = setTimeout(() => {
|
|
150
|
-
if (tracker.finished)
|
|
151
|
-
return;
|
|
152
|
-
tracker.finished = true;
|
|
153
|
-
tracker.promiseReject(new Error(`Timeout waiting for Serverless Spy message ${serviceKeyForFunction}. Received messages so far:\n ${JSON.stringify(messages, null, 2)}`));
|
|
154
|
-
}, paramsW?.timoutMs || 10000);
|
|
155
|
-
promise.finally(() => {
|
|
156
|
-
clearTimeout(timer);
|
|
157
|
-
});
|
|
158
|
-
if (!resolveTrackerInOldMessages(tracker)) {
|
|
159
|
-
trackers.push(tracker);
|
|
160
|
-
}
|
|
161
|
-
return promise;
|
|
162
|
-
};
|
|
163
|
-
}
|
|
3
|
+
const wsListener = new WsListener();
|
|
4
|
+
await wsListener.start(params);
|
|
5
|
+
return wsListener.createProxy();
|
|
164
6
|
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVzVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLE1BQW1DO0lBRW5DLE1BQU0sU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUNyQyxNQUFNLENBQUMsa0JBQWtCLEVBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQ25CLENBQUM7SUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBd0IsRUFBRSxDQUFDO0lBQ3pDLElBQUksUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUM3QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLElBQUkscUJBQStDLENBQUM7SUFFcEQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzlDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNqQix1REFBdUQ7UUFDdkQscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3hCLElBQUksTUFBTTtZQUFFLE9BQU87UUFFbkIsc0NBQXNDO1FBRXRDLE1BQU0sT0FBTyxHQUFHLElB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LFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7WUFFRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyZWRlbnRpYWxzIH0gZnJvbSAnQGF3cy1zZGsvdHlwZXMnO1xuaW1wb3J0IHsgV2ViU29ja2V0IH0gZnJvbSAnd3MnO1xuaW1wb3J0IHsgZ2V0V2ViU29ja2V0VXJsIH0gZnJvbSAnLi4vY29tbW9uL2dldFdlYlNvY2tldFVybCc7XG5pbXBvcnQgeyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQnO1xuaW1wb3J0IHsgU3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweUV2ZW50JztcbmltcG9ydCB7IFNweU1lc3NhZ2UgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweU1lc3NhZ2UnO1xuaW1wb3J0IHsgU3B5TGlzdGVuZXIgfSBmcm9tICcuL1NweUxpc3RlbmVyJztcblxudHlwZSBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMgPSB7XG4gIHNlcnZlcmxlc3NTcHlXc1VybDogc3RyaW5nO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPihcbiAgcGFyYW1zOiBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXNcbikge1xuICBjb25zdCB1cmxTaWduZWQgPSBhd2FpdCBnZXRXZWJTb2NrZXRVcmwoXG4gICAgcGFyYW1zLnNlcnZlcmxlc3NTcHlXc1VybCxcbiAgICBwYXJhbXMuY3JlZGVudGlhbHNcbiAgKTtcbiAgY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KHVybFNpZ25lZCk7XG4gIGNvbnN0IG1lc3NhZ2VzOiBTcHlNZXNzYWdlU3RvcmFnZVtdID0gW107XG4gIGxldCB0cmFja2VyczogVHJhY2tlcltdID0gW107XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgY29uc3QgZnVuY3Rpb25QcmVmaXggPSAnd2FpdEZvcic7XG4gIGxldCBjb25uZWN0aW9uT3BlblJlc29sdmU6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZDtcblxuICBsZXQgd2FpdEZvckNvbm5lY3Rpb24gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHdzLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2Nvbm5lY3RlZCAnICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKTtcbiAgICBjb25uZWN0aW9uT3BlblJlc29sdmUodW5kZWZpbmVkKTtcbiAgfSk7XG4gIHdzLm9uKCdtZXNzYWdlJywgKGRhdGEpID0+IHtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG5cbiAgICAvL2NvbnNvbGUubG9nKGBGcm9tIHNlcnZlcjogJHtkYXRhfWApO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKSBhcyBTcHlNZXNzYWdlU3RvcmFnZTtcblxuICAgIG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uID0gbWVzc2FnZS5zZXJ2aWNlS2V5LnJlcGxhY2UoLyMvZywgJycpO1xuXG4gICAgaWYgKG1lc3NhZ2Uuc2VydmljZUtleS5zdGFydHNXaXRoKCdGdW5jdGlvbicpKSB7XG4gICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9IChcbiAgICAgICAgbWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50XG4gICAgICApLmNvbnRleHQuYXdzUmVxdWVzdElkO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgcmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZShtZXNzYWdlKTtcbiAgfSk7XG4gIHdzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZGlzY29ubmVjdGVkIFwiICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKTtcbiAgfSk7XG5cbiAgY29uc3QgdHJhY2tlck1hdGNoTWVzc2FnZSA9IChcbiAgICB0cmFja2VyOiBUcmFja2VyLFxuICAgIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlXG4gICkgPT4ge1xuICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5ICYmIHRyYWNrZXIuc2VydmljZUtleSA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5KSB8fFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgIHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uID09PSBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbilcbiAgICApIHtcbiAgICAgIGlmICh0cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgdHJhY2tlci5maW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc3B5QW5kSmVzdE1hdGNoZXJzOiBhbnkgPSB7XG4gICAgICAgICAgZ2V0RGF0YTogKCkgPT4gbWVzc2FnZS5kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLnN0YXJ0c1dpdGgoJ0Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAoc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdSZXF1ZXN0JykgfHxcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5lbmRzV2l0aCgnQ29uc29sZScpKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgPSBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG5cbiAgICAgICAgICBpZiAoc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UuZW5kc1dpdGgoJ1JlcXVlc3QnKSkge1xuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uUmVzcG9uc2UgPVxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5sZW5ndGggLSAnUmVxdWVzdCcubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZS5lbmRzV2l0aCgnQ29uc29sZScpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSA9XG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLmxlbmd0aCAtICdDb25zb2xlJy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25SZXNwb25zZSArPSAnUmVzcG9uc2UnO1xuXG4gICAgICAgICAgc3B5QW5kSmVzdE1hdGNoZXJzLmZvbGxvd2VkQnlSZXNwb25zZSA9IChwYXJhbXNXOiBXYWl0Rm9yUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgICBwYXJhbXNXLFxuICAgICAgICAgICAgICAobWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50KS5jb250ZXh0LmF3c1JlcXVlc3RJZFxuICAgICAgICAgICAgKSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShzcHlBbmRKZXN0TWF0Y2hlcnMsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkob2JqZWN0S2V5KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEtleSAhPT0gJ3RoZW4nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgamVzdEZ1bmN0aW9uVG9FeGVjdXRlID0gKGV4cGVjdChtZXNzYWdlLmRhdGEpIGFzIGFueSlbXG4gICAgICAgICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGplc3RGdW5jdGlvblRvRXhlY3V0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyYWNrZXIucHJvbWlzZVJlc29sdmUocHJveHkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IHJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyA9ICh0cmFja2VyOiBUcmFja2VyKSA9PiB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBpZiAodHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZSA9IChtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkgPT4ge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFja2Vycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRyYWNrZXIgPSB0cmFja2Vyc1tpbmRleF07XG4gICAgICBpZiAodHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0cmFja2VycyA9IHRyYWNrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBzcHlMaXN0ZW5lciA9IHt9IGFzIFNweUxpc3RlbmVyPFRTcHlFdmVudHM+O1xuXG4gIHNweUxpc3RlbmVyLnN0b3AgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICB3cy5jbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUxpc3RlbmVyLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIG9iamVjdEtleTogc3RyaW5nKSB7XG4gICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9iamVjdEtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgb2JqZWN0S2V5LnN0YXJ0c1dpdGgoZnVuY3Rpb25QcmVmaXgpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcGFyYW1zVyA9IGFyZ3VtZW50c1swXSBhcyBXYWl0Rm9yUGFyYW1zO1xuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBvYmplY3RLZXkuc3Vic3RyaW5nKFxuICAgICAgICAgIGZ1bmN0aW9uUHJlZml4Lmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVXYWl0Rm9yWFhYRnVuYyhzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24sIHBhcmFtc1cpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGF3YWl0IHdhaXRGb3JDb25uZWN0aW9uO1xuXG4gIHJldHVybiBwcm94eSBhcyBTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPjtcblxuICBmdW5jdGlvbiB0cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlcjogVHJhY2tlciwgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBjb25zdCBtYXRjaENvbmRpdGlvbiA9XG4gICAgICAodHJhY2tlci5jb25kaXRpb24gJiYgdHJhY2tlci5jb25kaXRpb24obWVzc2FnZS5kYXRhKSkgfHxcbiAgICAgICF0cmFja2VyLmNvbmRpdGlvbjtcblxuICAgIGNvbnN0IG1hdGNoUmVxdWVzdElkID1cbiAgICAgICh0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCAmJlxuICAgICAgICB0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9PT1cbiAgICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCkgfHxcbiAgICAgICF0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZDtcblxuICAgIC8vIGlmICh0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCkge1xuICAgIC8vICAgY29uc29sZS5sb2coXG4gICAgLy8gICAgIGAke3RyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkfSAtICR7bWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWR9YFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gbWF0Y2hDb25kaXRpb24gJiYgbWF0Y2hSZXF1ZXN0SWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZyxcbiAgICBwYXJhbXNXOiBXYWl0Rm9yUGFyYW1zPFNweUV2ZW50PixcbiAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHRyYWNrZXI6IFRyYWNrZXI7XG5cbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJhY2tlciA9IHtcbiAgICAgICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgICAgICBwcm9taXNlUmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgcHJvbWlzZVJlamVjdDogcmVqZWN0LFxuICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24sXG4gICAgICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gd2FpdEZvclhYWEZ1bmMoKSB7XG4gICAgICB0cmFja2VyLmNvbmRpdGlvbiA9IHBhcmFtc1c/LmNvbmRpdGlvbjtcblxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcbiAgICAgICAgdHJhY2tlci5maW5pc2hlZCA9IHRydWU7XG4gICAgICAgIHRyYWNrZXIucHJvbWlzZVJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGltZW91dCB3YWl0aW5nIGZvciBTZXJ2ZXJsZXNzIFNweSBtZXNzYWdlICR7c2VydmljZUtleUZvckZ1bmN0aW9ufS4gUmVjZWl2ZWQgbWVzc2FnZXMgc28gZmFyOlxcbiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKX1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSwgcGFyYW1zVz8udGltb3V0TXMgfHwgMTAwMDApO1xuXG4gICAgICBwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXIpKSB7XG4gICAgICAgIHRyYWNrZXJzLnB1c2godHJhY2tlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0Rm9yUGFyYW1zPFRTcHlFdmVudCBleHRlbmRzIFNweUV2ZW50ID0gU3B5RXZlbnQ+IHtcbiAgY29uZGl0aW9uPzogKGV2ZW50OiBUU3B5RXZlbnQpID0+IGJvb2xlYW47XG4gIHRpbW91dE1zPzogbnVtYmVyO1xufVxuXG50eXBlIFRyYWNrZXIgPSB7XG4gIHByb21pc2VSZXNvbHZlOiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICBwcm9taXNlUmVqZWN0OiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICBmaW5pc2hlZDogYm9vbGVhbjtcbiAgc2VydmljZUtleT86IHN0cmluZztcbiAgc2VydmljZUtleUZvckZ1bmN0aW9uPzogc3RyaW5nO1xuICBjb25kaXRpb24/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICB0aW1vdXRNcz86IG51bWJlcjtcbiAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nO1xufTtcblxudHlwZSBTcHlNZXNzYWdlU3RvcmFnZSA9IFNweU1lc3NhZ2UgJiB7XG4gIHNlcnZpY2VLZXlGb3JGdW5jdGlvbjogc3RyaW5nO1xuICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmc7XG59O1xuIl19
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGlzdGVuZXIvY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsTUFBbUM7SUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQWMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0IsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zJztcbmltcG9ydCB7IFdzTGlzdGVuZXIgfSBmcm9tICcuL1dzTGlzdGVuZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyPFRTcHlFdmVudHM+KFxuICBwYXJhbXM6IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtc1xuKSB7XG4gIGNvbnN0IHdzTGlzdGVuZXIgPSBuZXcgV3NMaXN0ZW5lcjxUU3B5RXZlbnRzPigpO1xuICBhd2FpdCB3c0xpc3RlbmVyLnN0YXJ0KHBhcmFtcyk7XG5cbiAgcmV0dXJuIHdzTGlzdGVuZXIuY3JlYXRlUHJveHkoKTtcbn1cbiJdfQ==
|
package/lib/listener/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './createServerlessSpyListener';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './ServerlessSpyListener';
|
package/lib/listener/index.js
CHANGED
|
@@ -15,5 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./createServerlessSpyListener"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
__exportStar(require("./ServerlessSpyListener"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQThDO0FBQzlDLDBEQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbiJdfQ==
|
package/lib/listener/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './createServerlessSpyListener';
|
|
2
|
-
export * from './
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export * from './ServerlessSpyListener';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZVNlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG5leHBvcnQgKiBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG4iXX0=
|
|
@@ -9,24 +9,32 @@ export declare class ServerlessSpy extends Construct {
|
|
|
9
9
|
private ownContructs;
|
|
10
10
|
private functionSubscriptionPool;
|
|
11
11
|
private functionSubscriptionMain;
|
|
12
|
+
private functionsSpied;
|
|
12
13
|
private webSocketStage;
|
|
13
14
|
serviceKeys: string[];
|
|
14
15
|
wsUrl: string;
|
|
15
16
|
constructor(scope: Construct, id: string, props?: ServerlessSpyProps);
|
|
17
|
+
private getExtensionAssetLocation;
|
|
18
|
+
/**
|
|
19
|
+
* Write SpyEvents class, which helps with writing the code for tests.
|
|
20
|
+
* @param fileLocation
|
|
21
|
+
*/
|
|
16
22
|
private writeSpyEventsClass;
|
|
17
23
|
private iterateAllElements;
|
|
18
|
-
private
|
|
24
|
+
private spySqs;
|
|
19
25
|
private createFunctionForSubscription;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private
|
|
23
|
-
private
|
|
24
|
-
private
|
|
25
|
-
private
|
|
26
|
+
private getWsEndpoint;
|
|
27
|
+
private spyS3;
|
|
28
|
+
private spyDynamodb;
|
|
29
|
+
private spyEventBusRule;
|
|
30
|
+
private spyEventBus;
|
|
31
|
+
private spySnsTopic;
|
|
32
|
+
private spySnsSubscription;
|
|
26
33
|
private provideFunctionForSubscription;
|
|
27
|
-
private
|
|
34
|
+
private spyFunction;
|
|
28
35
|
getConstructName(construct: IConstruct): string;
|
|
29
36
|
private getTopic;
|
|
30
37
|
private getEventBridge;
|
|
31
38
|
private findElement;
|
|
39
|
+
private addMappingToFunction;
|
|
32
40
|
}
|