serverless-spy 0.0.36 → 0.0.37

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 (105) hide show
  1. package/.jsii +3 -3
  2. package/cli/cli.ts +145 -75
  3. package/cli/icons/Arch_AWS-Lambda_16.svg +18 -0
  4. package/cli/icons/Arch_Amazon-DynamoDB_16.svg +18 -0
  5. package/cli/icons/Arch_Amazon-EventBridge_16.svg +18 -0
  6. package/cli/icons/Arch_Amazon-Simple-Notification-Service_16.svg +18 -0
  7. package/cli/icons/Arch_Amazon-Simple-Queue-Service_16.svg +18 -0
  8. package/cli/icons/Arch_Amazon-Simple-Storage-Service_16.svg +18 -0
  9. package/cli/index.html +84 -25
  10. package/cli/node_modules/commander/LICENSE +22 -0
  11. package/cli/node_modules/commander/Readme.md +1114 -0
  12. package/cli/node_modules/commander/esm.mjs +16 -0
  13. package/cli/node_modules/commander/index.js +27 -0
  14. package/cli/node_modules/commander/lib/argument.js +147 -0
  15. package/cli/node_modules/commander/lib/command.js +2161 -0
  16. package/cli/node_modules/commander/lib/error.js +45 -0
  17. package/cli/node_modules/commander/lib/help.js +406 -0
  18. package/cli/node_modules/commander/lib/option.js +324 -0
  19. package/cli/node_modules/commander/lib/suggestSimilar.js +100 -0
  20. package/cli/node_modules/commander/package-support.json +16 -0
  21. package/cli/node_modules/commander/package.json +80 -0
  22. package/cli/node_modules/commander/typings/index.d.ts +879 -0
  23. package/cli/package.json +23 -0
  24. package/cli/sampleData.ts +518 -0
  25. package/cli/style.css +66 -42
  26. package/cli/webServerlessSpy.ts +461 -0
  27. package/common/SpyEventSender.ts +291 -0
  28. package/common/getWebSocketUrl.ts +21 -4
  29. package/common/spyEvents/EventBridgeBaseSpyEvent.ts +13 -0
  30. package/common/spyEvents/EventBridgeRuleSpyEvent.ts +2 -7
  31. package/common/spyEvents/EventBridgeSpyEvent.ts +2 -7
  32. package/common/spyEvents/FunctionBaseSpyEvent.ts +7 -0
  33. package/common/spyEvents/FunctionConsole.ts +5 -0
  34. package/common/spyEvents/FunctionConsoleSpyEvent.ts +5 -8
  35. package/common/spyEvents/FunctionResponseSpyEvent.ts +2 -5
  36. package/common/spyEvents/SnsSpyEventBase.ts +11 -0
  37. package/common/spyEvents/SnsSubscriptionSpyEvent.ts +3 -9
  38. package/common/spyEvents/SnsTopicSpyEvent.ts +3 -9
  39. package/dist/releasetag.txt +1 -1
  40. package/extension/interceptor.ts +91 -14
  41. package/functions/sendMessage.ts +4 -2
  42. package/lib/cli/cli.js +124 -65
  43. package/lib/cli/cli.mjs +125 -66
  44. package/lib/cli/sampleData.d.ts +892 -0
  45. package/lib/cli/sampleData.js +481 -0
  46. package/lib/cli/sampleData.mjs +478 -0
  47. package/lib/cli/webServerlessSpy.js +5516 -0
  48. package/lib/cli/webServerlessSpy.js.map +7 -0
  49. package/lib/common/SpyEventSender.d.ts +17 -0
  50. package/lib/common/SpyEventSender.js +227 -0
  51. package/lib/common/SpyEventSender.mjs +223 -0
  52. package/lib/common/getWebSocketUrl.d.ts +1 -1
  53. package/lib/common/getWebSocketUrl.js +19 -7
  54. package/lib/common/getWebSocketUrl.mjs +17 -5
  55. package/lib/common/spyEvents/EventBridgeBaseSpyEvent.d.ts +9 -0
  56. package/lib/common/spyEvents/EventBridgeBaseSpyEvent.js +3 -0
  57. package/lib/common/spyEvents/EventBridgeBaseSpyEvent.mjs +2 -0
  58. package/lib/common/spyEvents/EventBridgeRuleSpyEvent.d.ts +2 -7
  59. package/lib/common/spyEvents/EventBridgeRuleSpyEvent.js +1 -1
  60. package/lib/common/spyEvents/EventBridgeRuleSpyEvent.mjs +1 -1
  61. package/lib/common/spyEvents/EventBridgeSpyEvent.d.ts +2 -7
  62. package/lib/common/spyEvents/EventBridgeSpyEvent.js +1 -1
  63. package/lib/common/spyEvents/EventBridgeSpyEvent.mjs +1 -1
  64. package/lib/common/spyEvents/FunctionBaseSpyEvent.d.ts +6 -0
  65. package/lib/common/spyEvents/FunctionBaseSpyEvent.js +3 -0
  66. package/lib/common/spyEvents/FunctionBaseSpyEvent.mjs +2 -0
  67. package/lib/common/spyEvents/FunctionConsole.d.ts +5 -0
  68. package/lib/common/spyEvents/FunctionConsole.js +3 -0
  69. package/lib/common/spyEvents/FunctionConsole.mjs +2 -0
  70. package/lib/common/spyEvents/FunctionConsoleSpyEvent.d.ts +4 -8
  71. package/lib/common/spyEvents/FunctionConsoleSpyEvent.js +1 -1
  72. package/lib/common/spyEvents/FunctionConsoleSpyEvent.mjs +1 -1
  73. package/lib/common/spyEvents/FunctionResponseSpyEvent.d.ts +2 -5
  74. package/lib/common/spyEvents/FunctionResponseSpyEvent.js +1 -1
  75. package/lib/common/spyEvents/FunctionResponseSpyEvent.mjs +1 -1
  76. package/lib/common/spyEvents/SnsSpyEventBase.d.ts +10 -0
  77. package/lib/common/spyEvents/SnsSpyEventBase.js +3 -0
  78. package/lib/common/spyEvents/SnsSpyEventBase.mjs +2 -0
  79. package/lib/common/spyEvents/SnsSubscriptionSpyEvent.d.ts +2 -9
  80. package/lib/common/spyEvents/SnsSubscriptionSpyEvent.js +1 -1
  81. package/lib/common/spyEvents/SnsSubscriptionSpyEvent.mjs +1 -1
  82. package/lib/common/spyEvents/SnsTopicSpyEvent.d.ts +2 -9
  83. package/lib/common/spyEvents/SnsTopicSpyEvent.js +1 -1
  84. package/lib/common/spyEvents/SnsTopicSpyEvent.mjs +1 -1
  85. package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js +251 -181
  86. package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js.map +3 -3
  87. package/lib/listener/SpyHandlers.ts.d.ts +30 -2
  88. package/lib/listener/SpyHandlers.ts.js +1 -1
  89. package/lib/listener/SpyHandlers.ts.mjs +1 -1
  90. package/lib/listener/WsListener.js +11 -11
  91. package/lib/listener/WsListener.mjs +12 -12
  92. package/lib/src/ServerlessSpy.js +2 -3
  93. package/lib/src/ServerlessSpy.mjs +1 -2
  94. package/listener/SpyHandlers.ts.ts +70 -9
  95. package/listener/WsListener.ts +21 -18
  96. package/package.json +5 -3
  97. package/cli/serverlessSpy.js +0 -73
  98. package/cli/ws.ts +0 -79
  99. package/common/publishSpyEvent.ts +0 -269
  100. package/lib/cli/ws.d.ts +0 -1
  101. package/lib/cli/ws.js +0 -68
  102. package/lib/cli/ws.mjs +0 -66
  103. package/lib/common/publishSpyEvent.d.ts +0 -4
  104. package/lib/common/publishSpyEvent.js +0 -211
  105. package/lib/common/publishSpyEvent.mjs +0 -205
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "cli",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "webServerlessSpy.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "bootstrap": "^5.2.1",
14
+ "bootstrap-icons": "^1.9.1",
15
+ "commander": "^9.4.0",
16
+ "get-installed-path": "^4.0.8",
17
+ "json-format-highlight": "^1.0.4",
18
+ "open": "^8.4.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/get-installed-path": "^4.0.1"
22
+ }
23
+ }
@@ -0,0 +1,518 @@
1
+ export const sampleData = [
2
+ {
3
+ timestamp: '2022-09-20T09:46:04.610Z',
4
+ serviceKey: 'Function#ToSnsAndDynamoDb#Request',
5
+ data: {
6
+ request: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
7
+ context: {
8
+ functionName: 'ServerlessSpyE2e-ToSnsAndDynamoDb13696817-sagu3HTK25K6',
9
+ awsRequestId: 'ba4d4569-416a-407b-9842-0ee38a83b97c',
10
+ },
11
+ },
12
+ },
13
+ {
14
+ timestamp: '2022-09-20T09:46:04.674Z',
15
+ serviceKey: 'Function#ToSnsAndDynamoDb#Response',
16
+ data: {
17
+ request: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
18
+ response: {
19
+ id: '057f544b-7f90-496c-8006-3043dec54620',
20
+ message: 'Hello',
21
+ },
22
+ context: {
23
+ functionName: 'ServerlessSpyE2e-ToSnsAndDynamoDb13696817-sagu3HTK25K6',
24
+ awsRequestId: 'ba4d4569-416a-407b-9842-0ee38a83b97c',
25
+ },
26
+ },
27
+ },
28
+ {
29
+ timestamp: '2022-09-20T09:46:04.751Z',
30
+ serviceKey: 'Function#ReceiveSqs#Response',
31
+ data: {
32
+ request: {
33
+ Records: [
34
+ {
35
+ messageId: 'b1dd1d88-0560-43de-a406-394ca4bb7cec',
36
+ receiptHandle:
37
+ 'AQEBivlgjdhylhmB95VJL1K1OGeZpzOmbZAiaNUT/EnlDN/Bmlo7o/Aby9zveOanusGVdsBwF5VAbQEPc17y1sNa/mA3gN54I13/vm9K0rmLlmMG77yp4e/VhbK9qx8xG+w87JCDC1iw8alEea+zqiBqWFalEUL0SAT8lkkS/plq4AA1B40ytuVZm4HGnTc+4SltCFmmbxFMDblSZ5fzQ6jyQAnh8Hb5kDQTwbKu7eRI14XvNC39tlb1kGGYHQa7jOqC6KAjqozwTeZjcEgUzjNoqyqzNXL4lWpucxO/YgFEqi7aRiPQZZO2UY9mgWPgNp17P5LGOu4Kh48hFs6vvfQMkqAOskN3KWzj9o/N4QC3pvKRE3r9cFgYh6UdwQwBI/P7c+QBBqt1JG89DklJBobmzcLjI+agJaP5RWb6tBwhOzCC3CbOwqfr/myLfcPF3ZZj',
38
+ body: '{\n "Type" : "Notification",\n "MessageId" : "f2a02b45-0ecb-566c-9616-70e680d73f8c",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF",\n "Message" : "{\\"id\\":\\"057f544b-7f90-496c-8006-3043dec54620\\",\\"message\\":\\"Hello\\"}",\n "Timestamp" : "2022-09-20T09:46:04.607Z",\n "SignatureVersion" : "1",\n "Signature" : "dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:ecf2a422-1e24-4a64-9f6d-715d91ae36d6",\n "MessageAttributes" : {\n "test" : {"Type":"String","Value":"test"}\n }\n}',
39
+ attributes: {
40
+ ApproximateReceiveCount: '1',
41
+ AWSTraceHeader:
42
+ 'Root=1-63298bdc-40943faf493e196b4e07459c;Parent=24c04ec26b26310a;Sampled=0',
43
+ SentTimestamp: '1663667164636',
44
+ SenderId: 'AIDAISMY7JYY5F7RTT6AO',
45
+ ApproximateFirstReceiveTimestamp: '1663667164641',
46
+ },
47
+ messageAttributes: {},
48
+ md5OfBody: 'af6bd3f6989ac11fa4a33798c0cf87cc',
49
+ eventSource: 'aws:sqs',
50
+ eventSourceARN:
51
+ 'arn:aws:sqs:eu-west-1:123456789012:ServerlessSpyE2e-MyQueueNo154EF6659-jvYNz1YlvYdQ',
52
+ awsRegion: 'eu-west-1',
53
+ },
54
+ ],
55
+ },
56
+ response: {
57
+ Records: [
58
+ {
59
+ messageId: 'b1dd1d88-0560-43de-a406-394ca4bb7cec',
60
+ receiptHandle:
61
+ 'AQEBivlgjdhylhmB95VJL1K1OGeZpzOmbZAiaNUT/EnlDN/Bmlo7o/Aby9zveOanusGVdsBwF5VAbQEPc17y1sNa/mA3gN54I13/vm9K0rmLlmMG77yp4e/VhbK9qx8xG+w87JCDC1iw8alEea+zqiBqWFalEUL0SAT8lkkS/plq4AA1B40ytuVZm4HGnTc+4SltCFmmbxFMDblSZ5fzQ6jyQAnh8Hb5kDQTwbKu7eRI14XvNC39tlb1kGGYHQa7jOqC6KAjqozwTeZjcEgUzjNoqyqzNXL4lWpucxO/YgFEqi7aRiPQZZO2UY9mgWPgNp17P5LGOu4Kh48hFs6vvfQMkqAOskN3KWzj9o/N4QC3pvKRE3r9cFgYh6UdwQwBI/P7c+QBBqt1JG89DklJBobmzcLjI+agJaP5RWb6tBwhOzCC3CbOwqfr/myLfcPF3ZZj',
62
+ body: '{\n "Type" : "Notification",\n "MessageId" : "f2a02b45-0ecb-566c-9616-70e680d73f8c",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF",\n "Message" : "{\\"id\\":\\"057f544b-7f90-496c-8006-3043dec54620\\",\\"message\\":\\"Hello\\"}",\n "Timestamp" : "2022-09-20T09:46:04.607Z",\n "SignatureVersion" : "1",\n "Signature" : "dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:ecf2a422-1e24-4a64-9f6d-715d91ae36d6",\n "MessageAttributes" : {\n "test" : {"Type":"String","Value":"test"}\n }\n}',
63
+ attributes: {
64
+ ApproximateReceiveCount: '1',
65
+ AWSTraceHeader:
66
+ 'Root=1-63298bdc-40943faf493e196b4e07459c;Parent=24c04ec26b26310a;Sampled=0',
67
+ SentTimestamp: '1663667164636',
68
+ SenderId: 'AIDAISMY7JYY5F7RTT6AO',
69
+ ApproximateFirstReceiveTimestamp: '1663667164641',
70
+ },
71
+ messageAttributes: {},
72
+ md5OfBody: 'af6bd3f6989ac11fa4a33798c0cf87cc',
73
+ eventSource: 'aws:sqs',
74
+ eventSourceARN:
75
+ 'arn:aws:sqs:eu-west-1:123456789012:ServerlessSpyE2e-MyQueueNo154EF6659-jvYNz1YlvYdQ',
76
+ awsRegion: 'eu-west-1',
77
+ },
78
+ ],
79
+ },
80
+ context: {
81
+ functionName: 'ServerlessSpyE2e-ReceiveSqs09F03F56-XeqiZ0cUjJl4',
82
+ awsRequestId: '23672a4d-68be-5ad1-a139-71eee6b20c4c',
83
+ },
84
+ },
85
+ },
86
+ {
87
+ timestamp: '2022-09-20T09:46:04.755Z',
88
+ serviceKey: 'Function#ReceiveSqs#Request',
89
+ data: {
90
+ request: {
91
+ Records: [
92
+ {
93
+ messageId: 'b1dd1d88-0560-43de-a406-394ca4bb7cec',
94
+ receiptHandle:
95
+ 'AQEBivlgjdhylhmB95VJL1K1OGeZpzOmbZAiaNUT/EnlDN/Bmlo7o/Aby9zveOanusGVdsBwF5VAbQEPc17y1sNa/mA3gN54I13/vm9K0rmLlmMG77yp4e/VhbK9qx8xG+w87JCDC1iw8alEea+zqiBqWFalEUL0SAT8lkkS/plq4AA1B40ytuVZm4HGnTc+4SltCFmmbxFMDblSZ5fzQ6jyQAnh8Hb5kDQTwbKu7eRI14XvNC39tlb1kGGYHQa7jOqC6KAjqozwTeZjcEgUzjNoqyqzNXL4lWpucxO/YgFEqi7aRiPQZZO2UY9mgWPgNp17P5LGOu4Kh48hFs6vvfQMkqAOskN3KWzj9o/N4QC3pvKRE3r9cFgYh6UdwQwBI/P7c+QBBqt1JG89DklJBobmzcLjI+agJaP5RWb6tBwhOzCC3CbOwqfr/myLfcPF3ZZj',
96
+ body: '{\n "Type" : "Notification",\n "MessageId" : "f2a02b45-0ecb-566c-9616-70e680d73f8c",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF",\n "Message" : "{\\"id\\":\\"057f544b-7f90-496c-8006-3043dec54620\\",\\"message\\":\\"Hello\\"}",\n "Timestamp" : "2022-09-20T09:46:04.607Z",\n "SignatureVersion" : "1",\n "Signature" : "dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:ecf2a422-1e24-4a64-9f6d-715d91ae36d6",\n "MessageAttributes" : {\n "test" : {"Type":"String","Value":"test"}\n }\n}',
97
+ attributes: {
98
+ ApproximateReceiveCount: '1',
99
+ AWSTraceHeader:
100
+ 'Root=1-63298bdc-40943faf493e196b4e07459c;Parent=24c04ec26b26310a;Sampled=0',
101
+ SentTimestamp: '1663667164636',
102
+ SenderId: 'AIDAISMY7JYY5F7RTT6AO',
103
+ ApproximateFirstReceiveTimestamp: '1663667164641',
104
+ },
105
+ messageAttributes: {},
106
+ md5OfBody: 'af6bd3f6989ac11fa4a33798c0cf87cc',
107
+ eventSource: 'aws:sqs',
108
+ eventSourceARN:
109
+ 'arn:aws:sqs:eu-west-1:123456789012:ServerlessSpyE2e-MyQueueNo154EF6659-jvYNz1YlvYdQ',
110
+ awsRegion: 'eu-west-1',
111
+ },
112
+ ],
113
+ },
114
+ context: {
115
+ functionName: 'ServerlessSpyE2e-ReceiveSqs09F03F56-XeqiZ0cUjJl4',
116
+ awsRequestId: '23672a4d-68be-5ad1-a139-71eee6b20c4c',
117
+ },
118
+ },
119
+ },
120
+ {
121
+ timestamp: '2022-09-20T09:46:04.800Z',
122
+ serviceKey: 'SnsSubscription#MyTopicNo1#MyQueueNo1',
123
+ data: {
124
+ spyEventType: 'SnsSubscription',
125
+ message: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
126
+ subject: null,
127
+ timestamp: '2022-09-20T09:46:04.607Z',
128
+ topicArn:
129
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
130
+ messageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
131
+ messageAttributes: { test: { Type: 'String', Value: 'test' } },
132
+ },
133
+ },
134
+ {
135
+ timestamp: '2022-09-20T09:46:04.802Z',
136
+ serviceKey: 'SnsTopic#MyTopicNo1',
137
+ data: {
138
+ spyEventType: 'SnsTopic',
139
+ message: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
140
+ subject: null,
141
+ timestamp: '2022-09-20T09:46:04.607Z',
142
+ topicArn:
143
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
144
+ messageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
145
+ messageAttributes: { test: { Type: 'String', Value: 'test' } },
146
+ },
147
+ },
148
+ {
149
+ timestamp: '2022-09-20T09:46:04.771Z',
150
+ serviceKey: 'Sqs#MyQueueNo1',
151
+ data: {
152
+ spyEventType: 'Sqs',
153
+ body: {
154
+ Type: 'Notification',
155
+ MessageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
156
+ TopicArn:
157
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
158
+ Message:
159
+ '{"id":"057f544b-7f90-496c-8006-3043dec54620","message":"Hello"}',
160
+ Timestamp: '2022-09-20T09:46:04.607Z',
161
+ SignatureVersion: '1',
162
+ Signature:
163
+ 'dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==',
164
+ SigningCertURL:
165
+ 'https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem',
166
+ UnsubscribeURL:
167
+ 'https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:ecf2a422-1e24-4a64-9f6d-715d91ae36d6',
168
+ MessageAttributes: { test: { Type: 'String', Value: 'test' } },
169
+ },
170
+ messageAttributes: {},
171
+ },
172
+ },
173
+ {
174
+ timestamp: '2022-09-20T09:46:04.808Z',
175
+ serviceKey: 'SnsSubscription#MyTopicNo1#FromSnsToSqsAndS3',
176
+ data: {
177
+ spyEventType: 'SnsSubscription',
178
+ message: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
179
+ subject: null,
180
+ timestamp: '2022-09-20T09:46:04.607Z',
181
+ topicArn:
182
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
183
+ messageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
184
+ messageAttributes: { test: { Type: 'String', Value: 'test' } },
185
+ },
186
+ },
187
+ {
188
+ timestamp: '2022-09-20T09:46:04.903Z',
189
+ serviceKey: 'Function#FromSnsToSqsAndS3#Request',
190
+ data: {
191
+ request: {
192
+ Records: [
193
+ {
194
+ EventSource: 'aws:sns',
195
+ EventVersion: '1.0',
196
+ EventSubscriptionArn:
197
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:29430bee-0503-4b1f-8c7e-3a115b049679',
198
+ Sns: {
199
+ Type: 'Notification',
200
+ MessageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
201
+ TopicArn:
202
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
203
+ Subject: null,
204
+ Message:
205
+ '{"id":"057f544b-7f90-496c-8006-3043dec54620","message":"Hello"}',
206
+ Timestamp: '2022-09-20T09:46:04.607Z',
207
+ SignatureVersion: '1',
208
+ Signature:
209
+ 'dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==',
210
+ SigningCertUrl:
211
+ 'https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem',
212
+ UnsubscribeUrl:
213
+ 'https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:29430bee-0503-4b1f-8c7e-3a115b049679',
214
+ MessageAttributes: { test: { Type: 'String', Value: 'test' } },
215
+ },
216
+ },
217
+ ],
218
+ },
219
+ context: {
220
+ functionName: 'ServerlessSpyE2e-FromSnsToSqsAndS3DD1CDB48-mT1kC5fqYXBj',
221
+ awsRequestId: '9323981d-674b-427e-b639-4cc26158c69f',
222
+ },
223
+ },
224
+ },
225
+ {
226
+ timestamp: '2022-09-20T09:46:04.942Z',
227
+ serviceKey: 'Function#FromSnsToSqsAndS3#Response',
228
+ data: {
229
+ request: {
230
+ Records: [
231
+ {
232
+ EventSource: 'aws:sns',
233
+ EventVersion: '1.0',
234
+ EventSubscriptionArn:
235
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:29430bee-0503-4b1f-8c7e-3a115b049679',
236
+ Sns: {
237
+ Type: 'Notification',
238
+ MessageId: 'f2a02b45-0ecb-566c-9616-70e680d73f8c',
239
+ TopicArn:
240
+ 'arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF',
241
+ Subject: null,
242
+ Message:
243
+ '{"id":"057f544b-7f90-496c-8006-3043dec54620","message":"Hello"}',
244
+ Timestamp: '2022-09-20T09:46:04.607Z',
245
+ SignatureVersion: '1',
246
+ Signature:
247
+ 'dB6sX7MUHevj080Rr0k08FT2sVUbA/osH6AFznOb+sva3Z7xJ0vzQh2brpy2tiBsiuAliYeJGc1GZxjmL1HCN4QiytiBzfdX71KeiSgeC8p4gW5lbrNpcyzHTOJSxOrBDfdxoh5JRZK6DymFrlmbC8pc0Y7y+4a2cCMUwjk4MnxG4a6H0uqVvVfnl7l6T4GzGTFkLjdqKNU8DNg+b7TPgs2mmlMivPAP1oYsrlBgUgmBLmfKfgr5BwngA+c4cIAi3fT89aWqUStY4P/tT/xPVRb2vyykenwFcoEPuautieXFXjAFg64N9JtNyxqRKL5XxnYl8mMmZsc7assV342d/g==',
248
+ SigningCertUrl:
249
+ 'https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-56e67fcb41f6fec09b0196692625d385.pem',
250
+ UnsubscribeUrl:
251
+ 'https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:123456789012:ServerlessSpyE2e-MyTopicNo10D152776-7m3nZGQCdxUF:29430bee-0503-4b1f-8c7e-3a115b049679',
252
+ MessageAttributes: { test: { Type: 'String', Value: 'test' } },
253
+ },
254
+ },
255
+ ],
256
+ },
257
+ response: { message: 'Hello undefined' },
258
+ context: {
259
+ functionName: 'ServerlessSpyE2e-FromSnsToSqsAndS3DD1CDB48-mT1kC5fqYXBj',
260
+ awsRequestId: '9323981d-674b-427e-b639-4cc26158c69f',
261
+ },
262
+ },
263
+ },
264
+ {
265
+ timestamp: '2022-09-20T09:46:05.088Z',
266
+ serviceKey: 'Sqs#MyQueueNo2',
267
+ data: {
268
+ spyEventType: 'Sqs',
269
+ body: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
270
+ messageAttributes: {
271
+ WeeksOn: {
272
+ stringValue: '6',
273
+ stringListValues: [],
274
+ binaryListValues: [],
275
+ dataType: 'Number',
276
+ },
277
+ Author: {
278
+ stringValue: 'John Grisham',
279
+ stringListValues: [],
280
+ binaryListValues: [],
281
+ dataType: 'String',
282
+ },
283
+ Title: {
284
+ stringValue: 'The Whistler',
285
+ stringListValues: [],
286
+ binaryListValues: [],
287
+ dataType: 'String',
288
+ },
289
+ },
290
+ },
291
+ },
292
+ {
293
+ timestamp: '2022-09-20T09:46:05.107Z',
294
+ serviceKey: 'Function#FromSqsToEventBridge#Request',
295
+ data: {
296
+ request: {
297
+ Records: [
298
+ {
299
+ messageId: '6297232e-203b-4776-a811-c5816ee24404',
300
+ receiptHandle:
301
+ 'AQEBNeroB8TFlND6RVnj+vUPAqep/xWY4u7EI4tJURkfPfQPFWmW3g7OtbxLbYXwPVie0ccukt7QP6VB8sFjwSA/oPc3W1pcydJn19GFfrNDeXtZJUPwolV6Ng6D/5Kq9YGBm4G5cnRPg8OXlVZTwjPp4atFRrNh2BSIe2dTURJNK7Okdz+gza5JWwZ/6Lbjw61NAJuMiqCw7ZjN1n3KYvD/cT0DcOWUCnZRoiovYw7mQ+hbm5Vas1WArdF31o6TukwYuA0begjbAbje+udaVjOW6ThjLyvOTWsoxg0CfbVZK4ZaWYWgd7xyd8WOGf1QOKVNMv9elCQi0olC5MAMv/f9B3Kudd6l1RIiQIKaj0LZjf7pn3wsv3TPc85Z+9p3k9hSc++zSsPxN9g8hymZW/rviQlRTzEqSPggJvBr9/nzKcAn3+w20zxquodAJnlobRCY',
302
+ body: '{"id":"057f544b-7f90-496c-8006-3043dec54620","message":"Hello"}',
303
+ attributes: {
304
+ ApproximateReceiveCount: '1',
305
+ AWSTraceHeader:
306
+ 'Root=1-63298bdc-40943faf493e196b4e07459c;Parent=34ad705e0750956d;Sampled=0',
307
+ SentTimestamp: '1663667164855',
308
+ SenderId:
309
+ 'AROARDVHBDXRVFXDSOJAT:ServerlessSpyE2e-FromSnsToSqsAndS3DD1CDB48-mT1kC5fqYXBj',
310
+ ApproximateFirstReceiveTimestamp: '1663667164856',
311
+ },
312
+ messageAttributes: {
313
+ WeeksOn: {
314
+ stringValue: '6',
315
+ stringListValues: [],
316
+ binaryListValues: [],
317
+ dataType: 'Number',
318
+ },
319
+ Author: {
320
+ stringValue: 'John Grisham',
321
+ stringListValues: [],
322
+ binaryListValues: [],
323
+ dataType: 'String',
324
+ },
325
+ Title: {
326
+ stringValue: 'The Whistler',
327
+ stringListValues: [],
328
+ binaryListValues: [],
329
+ dataType: 'String',
330
+ },
331
+ },
332
+ md5OfMessageAttributes: 'd25a6aea97eb8f585bfa92d314504a92',
333
+ md5OfBody: 'c64b00e6b5eb62c5f39cf4e7b1f4bbd7',
334
+ eventSource: 'aws:sqs',
335
+ eventSourceARN:
336
+ 'arn:aws:sqs:eu-west-1:123456789012:ServerlessSpyE2e-MyQueueNo27A959A93-MwJqK7Urit97',
337
+ awsRegion: 'eu-west-1',
338
+ },
339
+ ],
340
+ },
341
+ context: {
342
+ functionName:
343
+ 'ServerlessSpyE2e-FromSqsToEventBridgeE78842BE-VAz1SGd6qaR6',
344
+ awsRequestId: 'e0868330-80ce-59a7-8d77-d8930ec34d78',
345
+ },
346
+ },
347
+ },
348
+ {
349
+ timestamp: '2022-09-20T09:46:05.131Z',
350
+ serviceKey: 'Function#FromSqsToEventBridge#Response',
351
+ data: {
352
+ request: {
353
+ Records: [
354
+ {
355
+ messageId: '6297232e-203b-4776-a811-c5816ee24404',
356
+ receiptHandle:
357
+ 'AQEBNeroB8TFlND6RVnj+vUPAqep/xWY4u7EI4tJURkfPfQPFWmW3g7OtbxLbYXwPVie0ccukt7QP6VB8sFjwSA/oPc3W1pcydJn19GFfrNDeXtZJUPwolV6Ng6D/5Kq9YGBm4G5cnRPg8OXlVZTwjPp4atFRrNh2BSIe2dTURJNK7Okdz+gza5JWwZ/6Lbjw61NAJuMiqCw7ZjN1n3KYvD/cT0DcOWUCnZRoiovYw7mQ+hbm5Vas1WArdF31o6TukwYuA0begjbAbje+udaVjOW6ThjLyvOTWsoxg0CfbVZK4ZaWYWgd7xyd8WOGf1QOKVNMv9elCQi0olC5MAMv/f9B3Kudd6l1RIiQIKaj0LZjf7pn3wsv3TPc85Z+9p3k9hSc++zSsPxN9g8hymZW/rviQlRTzEqSPggJvBr9/nzKcAn3+w20zxquodAJnlobRCY',
358
+ body: '{"id":"057f544b-7f90-496c-8006-3043dec54620","message":"Hello"}',
359
+ attributes: {
360
+ ApproximateReceiveCount: '1',
361
+ AWSTraceHeader:
362
+ 'Root=1-63298bdc-40943faf493e196b4e07459c;Parent=34ad705e0750956d;Sampled=0',
363
+ SentTimestamp: '1663667164855',
364
+ SenderId:
365
+ 'AROARDVHBDXRVFXDSOJAT:ServerlessSpyE2e-FromSnsToSqsAndS3DD1CDB48-mT1kC5fqYXBj',
366
+ ApproximateFirstReceiveTimestamp: '1663667164856',
367
+ },
368
+ messageAttributes: {
369
+ WeeksOn: {
370
+ stringValue: '6',
371
+ stringListValues: [],
372
+ binaryListValues: [],
373
+ dataType: 'Number',
374
+ },
375
+ Author: {
376
+ stringValue: 'John Grisham',
377
+ stringListValues: [],
378
+ binaryListValues: [],
379
+ dataType: 'String',
380
+ },
381
+ Title: {
382
+ stringValue: 'The Whistler',
383
+ stringListValues: [],
384
+ binaryListValues: [],
385
+ dataType: 'String',
386
+ },
387
+ },
388
+ md5OfMessageAttributes: 'd25a6aea97eb8f585bfa92d314504a92',
389
+ md5OfBody: 'c64b00e6b5eb62c5f39cf4e7b1f4bbd7',
390
+ eventSource: 'aws:sqs',
391
+ eventSourceARN:
392
+ 'arn:aws:sqs:eu-west-1:123456789012:ServerlessSpyE2e-MyQueueNo27A959A93-MwJqK7Urit97',
393
+ awsRegion: 'eu-west-1',
394
+ },
395
+ ],
396
+ },
397
+ response: { message: 'Hello undefined' },
398
+ context: {
399
+ functionName:
400
+ 'ServerlessSpyE2e-FromSqsToEventBridgeE78842BE-VAz1SGd6qaR6',
401
+ awsRequestId: 'e0868330-80ce-59a7-8d77-d8930ec34d78',
402
+ },
403
+ },
404
+ },
405
+ {
406
+ timestamp: '2022-09-20T09:46:05.319Z',
407
+ serviceKey: 'EventBridgeRule#MyEventBus#MyEventBridge',
408
+ data: {
409
+ spyEventType: 'EventBridgeRule',
410
+ detail: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
411
+ detailType: 'test',
412
+ source: 'test-source',
413
+ time: '2022-09-20T09:46:05Z',
414
+ account: '123456789012',
415
+ },
416
+ },
417
+ {
418
+ timestamp: '2022-09-20T09:46:05.379Z',
419
+ serviceKey: 'EventBridge#MyEventBus',
420
+ data: {
421
+ spyEventType: 'EventBridge',
422
+ detail: { id: '057f544b-7f90-496c-8006-3043dec54620', message: 'Hello' },
423
+ detailType: 'test',
424
+ source: 'test-source',
425
+ time: '2022-09-20T09:46:05Z',
426
+ account: '123456789012',
427
+ },
428
+ },
429
+ {
430
+ timestamp: '2022-09-20T09:46:05.504Z',
431
+ serviceKey: 'Function#ReceiveEventBridge#Request',
432
+ data: {
433
+ request: {
434
+ version: '0',
435
+ id: '33549074-e48f-2857-f67c-263c621cde5c',
436
+ 'detail-type': 'test',
437
+ source: 'test-source',
438
+ account: '123456789012',
439
+ time: '2022-09-20T09:46:05Z',
440
+ region: 'eu-west-1',
441
+ resources: [],
442
+ detail: {
443
+ id: '057f544b-7f90-496c-8006-3043dec54620',
444
+ message: 'Hello',
445
+ },
446
+ },
447
+ context: {
448
+ functionName:
449
+ 'ServerlessSpyE2e-ReceiveEventBridge1A8F9A7B-1x4KLKDymCCn',
450
+ awsRequestId: '32814437-2efb-4384-9cb5-a04ac9639345',
451
+ },
452
+ },
453
+ },
454
+ {
455
+ timestamp: '2022-09-20T09:46:05.543Z',
456
+ serviceKey: 'DynamoDB#MyTable',
457
+ data: {
458
+ spyEventType: 'DynamoDB',
459
+ eventName: 'INSERT',
460
+ newImage: {
461
+ id: '057f544b-7f90-496c-8006-3043dec54620',
462
+ pk: '057f544b-7f90-496c-8006-3043dec54620',
463
+ message: 'Hello',
464
+ },
465
+ keys: { pk: '057f544b-7f90-496c-8006-3043dec54620' },
466
+ },
467
+ },
468
+ {
469
+ timestamp: '2022-09-20T09:46:05.541Z',
470
+ serviceKey: 'Function#ReceiveEventBridge#Response',
471
+ data: {
472
+ request: {
473
+ version: '0',
474
+ id: '33549074-e48f-2857-f67c-263c621cde5c',
475
+ 'detail-type': 'test',
476
+ source: 'test-source',
477
+ account: '123456789012',
478
+ time: '2022-09-20T09:46:05Z',
479
+ region: 'eu-west-1',
480
+ resources: [],
481
+ detail: {
482
+ id: '057f544b-7f90-496c-8006-3043dec54620',
483
+ message: 'Hello',
484
+ },
485
+ },
486
+ response: {
487
+ version: '0',
488
+ id: '33549074-e48f-2857-f67c-263c621cde5c',
489
+ 'detail-type': 'test',
490
+ source: 'test-source',
491
+ account: '123456789012',
492
+ time: '2022-09-20T09:46:05Z',
493
+ region: 'eu-west-1',
494
+ resources: [],
495
+ detail: {
496
+ id: '057f544b-7f90-496c-8006-3043dec54620',
497
+ message: 'Hello',
498
+ },
499
+ },
500
+ context: {
501
+ functionName:
502
+ 'ServerlessSpyE2e-ReceiveEventBridge1A8F9A7B-1x4KLKDymCCn',
503
+ awsRequestId: '32814437-2efb-4384-9cb5-a04ac9639345',
504
+ },
505
+ },
506
+ },
507
+ {
508
+ timestamp: '2022-09-20T09:46:06.313Z',
509
+ serviceKey: 'S3#MyBucket',
510
+ data: {
511
+ spyEventType: 'S3',
512
+ eventName: 'ObjectCreated:Put',
513
+ eventTime: '2022-09-20T09:46:04.914Z',
514
+ bucket: 'serverlessspye2e-mybucketf68f3ff0-fl5cf0ojrgtc',
515
+ key: '057f544b-7f90-496c-8006-3043dec54620.json',
516
+ },
517
+ },
518
+ ];
package/cli/style.css CHANGED
@@ -1,43 +1,67 @@
1
- .log {
2
- white-space: nowrap
3
- }
4
-
5
- /* The Modal (background)
6
- https://www.w3schools.com/howto/howto_css_modals.asp
7
- */
8
- .modal {
9
- display: none; /* Hidden by default */
10
- position: fixed; /* Stay in place */
11
- z-index: 1; /* Sit on top */
12
- left: 0;
13
- top: 0;
14
- width: 100%; /* Full width */
15
- height: 100%; /* Full height */
16
- overflow: auto; /* Enable scroll if needed */
17
- background-color: rgb(0,0,0); /* Fallback color */
18
- background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
19
- }
20
-
21
- /* Modal Content/Box */
22
- .modal-content {
23
- background-color: #fefefe;
24
- margin: 15% auto; /* 15% from the top and centered */
25
- padding: 20px;
26
- border: 1px solid #888;
27
- width: 80%; /* Could be more or less, depending on screen size */
28
- }
29
-
30
- /* The Close Button */
31
- .close {
32
- color: #aaa;
33
- float: right;
34
- font-size: 28px;
35
- font-weight: bold;
36
- }
37
-
38
- .close:hover,
39
- .close:focus {
40
- color: black;
41
- text-decoration: none;
42
- cursor: pointer;
1
+ body {
2
+ font-size: 14px;
3
+ line-height: 1.2;
4
+ padding-top: 10px;
5
+ }
6
+
7
+ .col-form-label {
8
+ line-height: 1.2;
9
+ flex: 0 0 0% !important;
10
+ }
11
+
12
+ .form-select {
13
+ font-size: 14px;
14
+ line-height: 1.2;
15
+ flex: 0 0 0% !important;
16
+ align-content: flex-start
17
+ }
18
+
19
+
20
+ .table {
21
+ width: 100%;
22
+ table-layout: fixed;
23
+ }
24
+
25
+ .table td {
26
+ text-overflow: ellipsis;
27
+ white-space: nowrap;
28
+ }
29
+
30
+ .col-time {
31
+ width: 185px;
32
+ }
33
+
34
+ .col-servicekey {
35
+ width: 400px;
36
+ }
37
+
38
+ .col-servicekey .serviceKey {
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ }
42
+
43
+ .col-data .data {
44
+ overflow: hidden;
45
+ text-overflow: ellipsis;
46
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;;
47
+ font-size: 12px;
48
+ }
49
+
50
+ .aws-icon {
51
+ width: 16px;
52
+ margin-top: -2px;
53
+ margin-right: 5px;
54
+ display: inline;
55
+ }
56
+
57
+ /* .icon-subscription {
58
+ position: absolute;
59
+ margin-left: 9px;
60
+ font-size: 11px;
61
+ margin-top: 8px;
62
+ } */
63
+
64
+ .icon-linked {
65
+ padding-left: 3px;
66
+ padding-right: 4px;
43
67
  }