serverless-spy 0.0.33 → 0.0.35

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.
Files changed (49) hide show
  1. package/.jsii +9 -9
  2. package/common/publishSpyEvent.ts +269 -0
  3. package/dist/releasetag.txt +1 -1
  4. package/extension/interceptor.ts +27 -13
  5. package/functions/onConnect.ts +2 -1
  6. package/functions/onDisconnect.ts +2 -1
  7. package/functions/sendMessage.ts +3 -268
  8. package/lib/common/publishSpyEvent.d.ts +4 -0
  9. package/lib/common/publishSpyEvent.js +211 -0
  10. package/lib/common/publishSpyEvent.mjs +205 -0
  11. package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js +13888 -13
  12. package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js.map +4 -4
  13. package/lib/listener/{SpyListener.d.ts → ServerlessSpyListener.d.ts} +12 -12
  14. package/lib/listener/ServerlessSpyListener.js +3 -0
  15. package/lib/listener/ServerlessSpyListener.mjs +2 -0
  16. package/lib/listener/ServerlessSpyListenerParams.d.ts +5 -0
  17. package/lib/listener/ServerlessSpyListenerParams.js +3 -0
  18. package/lib/listener/ServerlessSpyListenerParams.mjs +2 -0
  19. package/lib/listener/SpyHandlers.ts.d.ts +1 -1
  20. package/lib/listener/SpyHandlers.ts.js +1 -1
  21. package/lib/listener/SpyHandlers.ts.mjs +1 -1
  22. package/lib/listener/WaitForParams.d.ts +5 -0
  23. package/lib/listener/WaitForParams.js +3 -0
  24. package/lib/listener/WaitForParams.mjs +2 -0
  25. package/lib/listener/WsListener.d.ts +38 -0
  26. package/lib/listener/WsListener.js +185 -0
  27. package/lib/listener/WsListener.mjs +181 -0
  28. package/lib/listener/createServerlessSpyListener.d.ts +2 -13
  29. package/lib/listener/createServerlessSpyListener.js +5 -163
  30. package/lib/listener/createServerlessSpyListener.mjs +5 -163
  31. package/lib/listener/index.d.ts +1 -1
  32. package/lib/listener/index.js +2 -2
  33. package/lib/listener/index.mjs +2 -2
  34. package/lib/src/ServerlessSpy.d.ts +17 -8
  35. package/lib/src/ServerlessSpy.js +108 -67
  36. package/lib/src/ServerlessSpy.mjs +105 -64
  37. package/lib/src/common/envVariableNames.d.ts +19 -0
  38. package/lib/src/common/envVariableNames.js +26 -0
  39. package/lib/src/common/envVariableNames.mjs +23 -0
  40. package/listener/{SpyListener.ts → ServerlessSpyListener.ts} +12 -13
  41. package/listener/ServerlessSpyListenerParams.ts +6 -0
  42. package/listener/SpyHandlers.ts.ts +1 -1
  43. package/listener/WaitForParams.ts +6 -0
  44. package/listener/WsListener.ts +273 -0
  45. package/listener/createServerlessSpyListener.ts +5 -265
  46. package/listener/index.ts +1 -1
  47. package/package.json +1 -1
  48. package/lib/listener/SpyListener.js +0 -3
  49. package/lib/listener/SpyListener.mjs +0 -2
@@ -1,165 +1,7 @@
1
- import { WebSocket } from 'ws';
2
- import { getWebSocketUrl } from '../common/getWebSocketUrl';
1
+ import { WsListener } from './WsListener';
3
2
  export async function createServerlessSpyListener(params) {
4
- const urlSigned = await getWebSocketUrl(params.serverlessSpyWsUrl, params.credentials);
5
- const ws = new WebSocket(urlSigned);
6
- const messages = [];
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==
@@ -1,2 +1,2 @@
1
1
  export * from './createServerlessSpyListener';
2
- export * from './SpyListener';
2
+ export * from './ServerlessSpyListener';
@@ -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("./SpyListener"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQThDO0FBQzlDLGdEQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vU3B5TGlzdGVuZXInO1xuIl19
18
+ __exportStar(require("./ServerlessSpyListener"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQThDO0FBQzlDLDBEQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  export * from './createServerlessSpyListener';
2
- export * from './SpyListener';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVTZXJ2ZXJsZXNzU3B5TGlzdGVuZXInO1xuZXhwb3J0ICogZnJvbSAnLi9TcHlMaXN0ZW5lcic7XG4iXX0=
2
+ export * from './ServerlessSpyListener';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZVNlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG5leHBvcnQgKiBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG4iXX0=
@@ -9,24 +9,33 @@ 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 interceptSqs;
24
+ private spySqs;
19
25
  private createFunctionForSubscription;
20
- private interceptS3;
21
- private interceptDynamodb;
22
- private interceptEventBusRule;
23
- private interceptEventBus;
24
- private interceptSnsTopic;
25
- private interceptSnsSubscription;
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 interceptFunction;
34
+ private spyFunction;
28
35
  getConstructName(construct: IConstruct): string;
29
36
  private getTopic;
30
37
  private getEventBridge;
31
38
  private findElement;
39
+ private addMappingToFunction;
40
+ private getAssetLocation;
32
41
  }