rollbar 2.26.3 → 3.0.0-alpha.1

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 (186) hide show
  1. package/.cursor/rules/guidelines.mdc +154 -0
  2. package/.github/workflows/ci.yml +32 -12
  3. package/.lgtm.yml +7 -7
  4. package/.prettierignore +18 -0
  5. package/.vscode/settings.json +39 -0
  6. package/CHANGELOG.md +121 -35
  7. package/CLAUDE.md +201 -0
  8. package/Gruntfile.js +101 -48
  9. package/Makefile +3 -3
  10. package/README.md +2 -4
  11. package/SECURITY.md +5 -0
  12. package/babel.config.json +9 -0
  13. package/bower.json +1 -3
  14. package/codex.md +148 -0
  15. package/defaults.js +17 -5
  16. package/dist/plugins/jquery.min.js +1 -1
  17. package/dist/rollbar.js +18748 -5375
  18. package/dist/rollbar.js.map +1 -1
  19. package/dist/rollbar.min.js +2 -1
  20. package/dist/rollbar.min.js.LICENSE.txt +1 -0
  21. package/dist/rollbar.min.js.map +1 -1
  22. package/dist/rollbar.named-amd.js +19368 -6000
  23. package/dist/rollbar.named-amd.js.map +1 -1
  24. package/dist/rollbar.named-amd.min.js +3 -1
  25. package/dist/rollbar.named-amd.min.js.LICENSE.txt +1 -0
  26. package/dist/rollbar.named-amd.min.js.map +1 -1
  27. package/dist/rollbar.noconflict.umd.js +18749 -5380
  28. package/dist/rollbar.noconflict.umd.js.map +1 -1
  29. package/dist/rollbar.noconflict.umd.min.js +3 -1
  30. package/dist/rollbar.noconflict.umd.min.js.LICENSE.txt +1 -0
  31. package/dist/rollbar.noconflict.umd.min.js.map +1 -1
  32. package/dist/rollbar.snippet.js +1 -1
  33. package/dist/rollbar.umd.js +19367 -6000
  34. package/dist/rollbar.umd.js.map +1 -1
  35. package/dist/rollbar.umd.min.js +3 -1
  36. package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
  37. package/dist/rollbar.umd.min.js.map +1 -1
  38. package/docs/extension-exceptions.md +35 -30
  39. package/docs/migration_v0_to_v1.md +41 -38
  40. package/eslint.config.mjs +33 -0
  41. package/get_versions.js +33 -0
  42. package/index.d.ts +270 -231
  43. package/karma.conf.js +18 -27
  44. package/package.json +21 -21
  45. package/prettier.config.js +7 -0
  46. package/src/api.js +78 -14
  47. package/src/apiUtility.js +14 -11
  48. package/src/browser/core.js +138 -72
  49. package/src/browser/defaults/scrubFields.js +3 -3
  50. package/src/browser/detection.js +7 -8
  51. package/src/browser/domUtility.js +18 -8
  52. package/src/browser/globalSetup.js +12 -6
  53. package/src/browser/logger.js +1 -1
  54. package/src/browser/plugins/jquery.js +35 -35
  55. package/src/browser/predicates.js +1 -1
  56. package/src/browser/replay/defaults.js +71 -0
  57. package/src/browser/replay/recorder.js +193 -0
  58. package/src/browser/replay/replayMap.js +195 -0
  59. package/src/browser/rollbar.js +12 -8
  60. package/src/browser/rollbarWrapper.js +8 -5
  61. package/src/browser/shim.js +43 -19
  62. package/src/browser/snippet_callback.js +6 -4
  63. package/src/browser/telemetry.js +573 -361
  64. package/src/browser/transforms.js +46 -27
  65. package/src/browser/transport/fetch.js +26 -14
  66. package/src/browser/transport/xhr.js +41 -14
  67. package/src/browser/transport.js +93 -33
  68. package/src/browser/url.js +16 -8
  69. package/src/browser/wrapGlobals.js +27 -8
  70. package/src/defaults.js +3 -3
  71. package/src/errorParser.js +14 -11
  72. package/src/merge.js +32 -23
  73. package/src/notifier.js +16 -13
  74. package/src/predicates.js +43 -23
  75. package/src/queue.js +133 -40
  76. package/src/rateLimiter.js +59 -18
  77. package/src/react-native/logger.js +1 -1
  78. package/src/react-native/rollbar.js +59 -55
  79. package/src/react-native/transforms.js +13 -9
  80. package/src/react-native/transport.js +44 -34
  81. package/src/rollbar.js +72 -21
  82. package/src/scrub.js +0 -1
  83. package/src/server/locals.js +69 -39
  84. package/src/server/logger.js +4 -4
  85. package/src/server/parser.js +72 -47
  86. package/src/server/rollbar.js +135 -56
  87. package/src/server/sourceMap/stackTrace.js +33 -18
  88. package/src/server/telemetry/urlHelpers.js +9 -11
  89. package/src/server/telemetry.js +68 -45
  90. package/src/server/transforms.js +37 -21
  91. package/src/server/transport.js +62 -32
  92. package/src/telemetry.js +162 -33
  93. package/src/tracing/context.js +24 -0
  94. package/src/tracing/contextManager.js +37 -0
  95. package/src/tracing/defaults.js +7 -0
  96. package/src/tracing/exporter.js +188 -0
  97. package/src/tracing/hrtime.js +98 -0
  98. package/src/tracing/id.js +24 -0
  99. package/src/tracing/session.js +55 -0
  100. package/src/tracing/span.js +92 -0
  101. package/src/tracing/spanProcessor.js +15 -0
  102. package/src/tracing/tracer.js +46 -0
  103. package/src/tracing/tracing.js +89 -0
  104. package/src/transforms.js +33 -21
  105. package/src/truncation.js +8 -5
  106. package/src/utility/headers.js +43 -43
  107. package/src/utility/replace.js +9 -0
  108. package/src/utility/traverse.js +1 -1
  109. package/src/utility.js +123 -52
  110. package/test/api.test.js +88 -41
  111. package/test/apiUtility.test.js +48 -50
  112. package/test/browser.core.test.js +142 -141
  113. package/test/browser.domUtility.test.js +53 -36
  114. package/test/browser.predicates.test.js +14 -14
  115. package/test/browser.replay.recorder.test.js +416 -0
  116. package/test/browser.rollbar.test.js +655 -515
  117. package/test/browser.telemetry.test.js +46 -39
  118. package/test/browser.transforms.test.js +164 -139
  119. package/test/browser.transport.test.js +59 -50
  120. package/test/browser.url.test.js +13 -12
  121. package/test/fixtures/locals.fixtures.js +245 -126
  122. package/test/fixtures/replay/index.js +20 -0
  123. package/test/fixtures/replay/payloads.fixtures.js +229 -0
  124. package/test/fixtures/replay/rrwebEvents.fixtures.js +251 -0
  125. package/test/fixtures/replay/rrwebSyntheticEvents.fixtures.js +328 -0
  126. package/test/notifier.test.js +91 -79
  127. package/test/predicates.test.js +261 -215
  128. package/test/queue.test.js +231 -215
  129. package/test/rateLimiter.test.js +51 -43
  130. package/test/react-native.rollbar.test.js +150 -116
  131. package/test/react-native.transforms.test.js +23 -25
  132. package/test/react-native.transport.test.js +26 -14
  133. package/test/replay/index.js +2 -0
  134. package/test/replay/integration/api.spans.test.js +136 -0
  135. package/test/replay/integration/e2e.test.js +228 -0
  136. package/test/replay/integration/index.js +9 -0
  137. package/test/replay/integration/queue.replayMap.test.js +332 -0
  138. package/test/replay/integration/replayMap.test.js +163 -0
  139. package/test/replay/integration/sessionRecording.test.js +390 -0
  140. package/test/replay/unit/api.postSpans.test.js +150 -0
  141. package/test/replay/unit/index.js +7 -0
  142. package/test/replay/unit/queue.replayMap.test.js +225 -0
  143. package/test/replay/unit/replayMap.test.js +348 -0
  144. package/test/replay/util/index.js +5 -0
  145. package/test/replay/util/mockRecordFn.js +80 -0
  146. package/test/server.lambda.mocha.test.mjs +172 -0
  147. package/test/server.locals.constructor.mocha.test.mjs +80 -0
  148. package/test/server.locals.error-handling.mocha.test.mjs +387 -0
  149. package/test/server.locals.merge.mocha.test.mjs +267 -0
  150. package/test/server.locals.test-utils.mjs +114 -0
  151. package/test/server.parser.mocha.test.mjs +87 -0
  152. package/test/server.predicates.mocha.test.mjs +63 -0
  153. package/test/server.rollbar.constructor.mocha.test.mjs +199 -0
  154. package/test/server.rollbar.handlers.mocha.test.mjs +253 -0
  155. package/test/server.rollbar.logging.mocha.test.mjs +326 -0
  156. package/test/server.rollbar.misc.mocha.test.mjs +44 -0
  157. package/test/server.rollbar.test-utils.mjs +57 -0
  158. package/test/server.telemetry.mocha.test.mjs +377 -0
  159. package/test/server.transforms.data.mocha.test.mjs +163 -0
  160. package/test/server.transforms.error.mocha.test.mjs +199 -0
  161. package/test/server.transforms.request.mocha.test.mjs +208 -0
  162. package/test/server.transforms.scrub.mocha.test.mjs +140 -0
  163. package/test/server.transforms.sourcemaps.mocha.test.mjs +122 -0
  164. package/test/server.transforms.test-utils.mjs +62 -0
  165. package/test/server.transport.mocha.test.mjs +269 -0
  166. package/test/telemetry.test.js +178 -38
  167. package/test/tracing/contextManager.test.js +28 -0
  168. package/test/tracing/exporter.toPayload.test.js +400 -0
  169. package/test/tracing/id.test.js +24 -0
  170. package/test/tracing/span.test.js +183 -0
  171. package/test/tracing/spanProcessor.test.js +73 -0
  172. package/test/tracing/tracing.test.js +105 -0
  173. package/test/transforms.test.js +70 -68
  174. package/test/truncation.test.js +57 -55
  175. package/test/utility.test.js +310 -228
  176. package/webpack.config.js +36 -70
  177. package/.eslintignore +0 -7
  178. package/.gitmodules +0 -3
  179. package/test/server.lambda.test.js +0 -177
  180. package/test/server.locals.test.js +0 -841
  181. package/test/server.parser.test.js +0 -72
  182. package/test/server.predicates.test.js +0 -89
  183. package/test/server.rollbar.test.js +0 -676
  184. package/test/server.telemetry.test.js +0 -318
  185. package/test/server.transforms.test.js +0 -1099
  186. package/test/server.transport.test.js +0 -201
package/webpack.config.js CHANGED
@@ -8,154 +8,115 @@ var outputPath = path.resolve(__dirname, 'dist');
8
8
 
9
9
  var defaultsPlugin = new webpack.DefinePlugin(defaults);
10
10
  var uglifyPlugin = new TerserPlugin({
11
- parallel: true
11
+ parallel: true,
12
12
  });
13
13
 
14
14
  var snippetConfig = {
15
15
  name: 'snippet',
16
16
  entry: {
17
- 'rollbar.snippet': './src/browser/bundles/rollbar.snippet.js'
17
+ 'rollbar.snippet': './src/browser/bundles/rollbar.snippet.js',
18
18
  },
19
19
  output: {
20
20
  path: outputPath,
21
- filename: '[name].js'
21
+ filename: '[name].js',
22
22
  },
23
23
  plugins: [defaultsPlugin],
24
24
  module: {
25
25
  rules: [
26
26
  {
27
- enforce: 'pre',
28
27
  test: /\.js$/,
29
- loader: 'eslint-loader',
28
+ loader: 'babel-loader',
30
29
  exclude: [/node_modules/, /vendor/],
31
- options: {
32
- failOnError: true,
33
- configFile: path.resolve(__dirname, '.eslintrc')
34
- }
35
30
  },
36
- {
37
- test: /\.js$/,
38
- loader: 'strict-loader',
39
- exclude: [/node_modules/, /vendor/]
40
- }
41
31
  ],
42
- }
32
+ },
43
33
  };
44
34
 
45
35
  var pluginConfig = {
46
36
  name: 'plugins',
47
37
  entry: {
48
- 'jquery': './src/browser/plugins/jquery.js'
38
+ jquery: './src/browser/plugins/jquery.js',
49
39
  },
50
40
  output: {
51
41
  path: outputPath + '/plugins/',
52
- filename: '[name].min.js'
42
+ filename: '[name].min.js',
53
43
  },
54
44
  plugins: [defaultsPlugin],
55
45
  module: {
56
46
  rules: [
57
47
  {
58
- enforce: 'pre',
59
48
  test: /\.js$/,
60
- loader: 'eslint-loader',
49
+ loader: 'babel-loader',
61
50
  exclude: [/node_modules/, /vendor/],
62
- options: {
63
- failOnError: true,
64
- configFile: path.resolve(__dirname, '.eslintrc')
65
- }
66
51
  },
67
- {
68
- test: /\.js$/,
69
- loader: 'strict-loader',
70
- exclude: [/node_modules/, /vendor/]
71
- }
72
52
  ],
73
- }
53
+ },
74
54
  };
75
55
 
76
56
  var vanillaConfigBase = {
77
57
  entry: {
78
- 'rollbar': './src/browser/bundles/rollbar.js'
58
+ rollbar: './src/browser/bundles/rollbar.js',
79
59
  },
80
60
  output: {
81
- path: outputPath
61
+ path: outputPath,
82
62
  },
63
+ target: ['web', 'es5'],
83
64
  plugins: [defaultsPlugin],
84
65
  devtool: 'hidden-source-map',
85
66
  module: {
86
67
  rules: [
87
68
  {
88
- enforce: 'pre',
89
69
  test: /\.js$/,
90
- loader: 'eslint-loader',
70
+ loader: 'babel-loader',
91
71
  exclude: [/node_modules/, /vendor/],
92
- options: {
93
- failOnError: true,
94
- configFile: path.resolve(__dirname, '.eslintrc')
95
- }
96
72
  },
97
- {
98
- test: /\.js$/,
99
- loader: 'strict-loader',
100
- exclude: [/node_modules/, /vendor/]
101
- }
102
73
  ],
103
- }
74
+ },
104
75
  };
105
76
 
106
77
  var UMDConfigBase = {
107
78
  entry: {
108
- 'rollbar.umd': ['./src/browser/bundles/rollbar.js']
79
+ 'rollbar.umd': ['./src/browser/bundles/rollbar.js'],
109
80
  },
110
81
  output: {
111
82
  path: outputPath,
112
83
  library: 'rollbar',
113
84
  libraryTarget: 'umd',
114
- globalObject: 'this'
85
+ globalObject: 'this',
115
86
  },
87
+ target: ['web', 'es5'],
116
88
  devtool: 'source-map',
117
89
  module: {
118
90
  rules: [
119
91
  {
120
- enforce: 'pre',
121
92
  test: /\.js$/,
122
- loader: 'eslint-loader',
93
+ loader: 'babel-loader',
123
94
  exclude: [/node_modules/, /vendor/],
124
- options: {
125
- failOnError: true,
126
- configFile: path.resolve(__dirname, '.eslintrc')
127
- }
128
95
  },
129
- {
130
- test: /\.js$/,
131
- loader: 'strict-loader',
132
- exclude: [/node_modules/, /vendor/]
133
- }
134
96
  ],
135
- }
97
+ },
136
98
  };
137
99
 
138
100
  var noConflictConfigBase = extend({}, UMDConfigBase);
139
101
  noConflictConfigBase.entry = {
140
- 'rollbar.noconflict.umd': ['./src/browser/bundles/rollbar.noconflict.js']
102
+ 'rollbar.noconflict.umd': ['./src/browser/bundles/rollbar.noconflict.js'],
141
103
  };
142
104
 
143
105
  var namedAMDConfigBase = extend({}, UMDConfigBase);
144
106
  namedAMDConfigBase.entry = {
145
- 'rollbar.named-amd': namedAMDConfigBase.entry['rollbar.umd']
107
+ 'rollbar.named-amd': namedAMDConfigBase.entry['rollbar.umd'],
146
108
  };
147
109
  namedAMDConfigBase.output = extend({}, namedAMDConfigBase.output);
148
110
  namedAMDConfigBase.output.library = 'rollbar';
149
111
  namedAMDConfigBase.output.libraryTarget = 'amd';
150
112
 
151
-
152
113
  var config = [snippetConfig, pluginConfig];
153
114
 
154
115
  function optimizationConfig(minimizer) {
155
116
  return {
156
117
  minimize: minimizer ? true : false,
157
- minimizer: minimizer ? [minimizer] : []
158
- }
118
+ minimizer: minimizer ? [minimizer] : [],
119
+ };
159
120
  }
160
121
 
161
122
  function addVanillaToConfig(webpackConfig, filename, extraPlugins, minimizer) {
@@ -168,7 +129,7 @@ function addVanillaToConfig(webpackConfig, filename, extraPlugins, minimizer) {
168
129
 
169
130
  vanillaConfig.optimization = optimizationConfig(minimizer);
170
131
 
171
- vanillaConfig.output = extend({filename: filename}, vanillaConfig.output);
132
+ vanillaConfig.output = extend({ filename: filename }, vanillaConfig.output);
172
133
 
173
134
  webpackConfig.push(vanillaConfig);
174
135
  }
@@ -182,13 +143,17 @@ function addUMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
182
143
 
183
144
  UMDConfig.optimization = optimizationConfig(minimizer);
184
145
 
185
- UMDConfig.output = extend({filename: filename}, UMDConfig.output);
146
+ UMDConfig.output = extend({ filename: filename }, UMDConfig.output);
186
147
 
187
148
  webpackConfig.push(UMDConfig);
188
149
  }
189
150
 
190
-
191
- function addNoConflictToConfig(webpackConfig, filename, extraPlugins, minimizer) {
151
+ function addNoConflictToConfig(
152
+ webpackConfig,
153
+ filename,
154
+ extraPlugins,
155
+ minimizer,
156
+ ) {
192
157
  var basePlugins = [defaultsPlugin];
193
158
  var noConflictConfig = extend({}, noConflictConfigBase);
194
159
 
@@ -197,12 +162,14 @@ function addNoConflictToConfig(webpackConfig, filename, extraPlugins, minimizer)
197
162
 
198
163
  noConflictConfig.optimization = optimizationConfig(minimizer);
199
164
 
200
- noConflictConfig.output = extend({filename: filename}, noConflictConfig.output);
165
+ noConflictConfig.output = extend(
166
+ { filename: filename },
167
+ noConflictConfig.output,
168
+ );
201
169
 
202
170
  webpackConfig.push(noConflictConfig);
203
171
  }
204
172
 
205
-
206
173
  function addNamedAMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
207
174
  var basePlugins = [defaultsPlugin];
208
175
  var AMDConfig = extend({}, namedAMDConfigBase);
@@ -212,12 +179,11 @@ function addNamedAMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
212
179
 
213
180
  AMDConfig.optimization = optimizationConfig(minimizer);
214
181
 
215
- AMDConfig.output = extend({filename: filename}, AMDConfig.output);
182
+ AMDConfig.output = extend({ filename: filename }, AMDConfig.output);
216
183
 
217
184
  webpackConfig.push(AMDConfig);
218
185
  }
219
186
 
220
-
221
187
  function generateBuildConfig(name, plugins, minimizer) {
222
188
  addVanillaToConfig(config, name, plugins, minimizer);
223
189
  addUMDToConfig(config, name, plugins, minimizer);
package/.eslintignore DELETED
@@ -1,7 +0,0 @@
1
- node_modules
2
- vendor
3
- lib
4
- dist
5
- release
6
- test
7
- examples
package/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "vendor/JSON-js"]
2
- path = vendor/JSON-js
3
- url = https://github.com/rollbar/JSON-js.git
@@ -1,177 +0,0 @@
1
- 'use strict';
2
-
3
- var assert = require('assert');
4
- var vows = require('vows');
5
- var sinon = require('sinon');
6
-
7
- process.env.NODE_ENV = process.env.NODE_ENV || 'test-node-env';
8
- var Rollbar = require('../src/server/rollbar');
9
-
10
- function promisePending(promise, callback) {
11
- var testValue = 'test-pending';
12
-
13
- // Detect if a given promise is pending/unfulfilled using the
14
- // behavior of Promise.race(), which always returns the first
15
- // already resolved promise in the array.
16
- Promise.race([promise, Promise.resolve(testValue)])
17
- .then(function(value){
18
- if (value === testValue) {
19
- return callback(true);
20
- } else {
21
- return callback(false);
22
- }
23
- })
24
- .catch(function(_error){
25
- return callback(false);
26
- })
27
- }
28
-
29
- function fakePostItem(_item, callback){
30
- // 1000ms simulates low API response, and allows testing the state before completion.
31
- setTimeout(function(){ callback(); }, 1000);
32
- }
33
-
34
- var stubContext = {
35
- getRemainingTimeInMillis: function() { return 2000 }
36
- }
37
-
38
- vows.describe('lambda')
39
- .addBatch({
40
- 'async handler sends message': {
41
- topic: function() {
42
- var rollbar = new Rollbar({
43
- accessToken: 'abc123',
44
- captureUncaught: true,
45
- captureLambdaTimeouts: false
46
- });
47
- var api = rollbar.client.notifier.queue.api;
48
- rollbar.requestStub = sinon.stub(api, 'postItem').callsFake(fakePostItem);
49
-
50
- rollbar.testHandlerInstance = rollbar.lambdaHandler(async (_event, _context) => {
51
- // Testing the condition where the client handler sends a message before exit.
52
- // The Rollbar wrapper should send, and should not resolve until the API request
53
- // has completed.
54
- rollbar.info('lambda test message');
55
- return 'done';
56
- });
57
-
58
- return rollbar;
59
- },
60
- 'invokes handler and receives promise': function(r) {
61
- var handler = r.testHandlerInstance;
62
-
63
- // rollbar.lambdaHandler in the above topic should have returned a
64
- // handler with the correct signature. (The callback handler is length = 3)
65
- assert.equal(handler.length, 2);
66
- assert.equal(handler.name, 'rollbarAsyncLambdaHandler');
67
-
68
- // The rollbar.wait() in the wrapper should prevent this from
69
- // resolving until the response is received.
70
- r.testPromise = handler({}, stubContext);
71
- },
72
- 'after handler invoked': {
73
- topic: function(r) {
74
- var callback = this.callback;
75
-
76
- // This timeout allows a few extra ticks so that without the wait in
77
- // the wrapper this test should fail.
78
- setTimeout(function () {
79
- promisePending(r.testPromise, function(pending){
80
- r.promiseIsPending = pending;
81
- callback(r);
82
- });
83
- }, 10);
84
- },
85
- 'promise is pending': function(r) {
86
- assert.isTrue(r.promiseIsPending);
87
- },
88
- 'after promise resolved': {
89
- topic: function(r) {
90
- var callback = this.callback;
91
-
92
- r.testPromise.then(function(value){
93
- assert.equal(value, 'done');
94
- callback(r);
95
- });
96
- },
97
- 'sends message before exit': function(r) {
98
- var requestStub = r.requestStub;
99
-
100
- // If the handler is allowed to exit prematurely, this will fail.
101
- assert.isTrue(requestStub.called);
102
- var data = requestStub.getCall(0).args[0];
103
- assert.equal(data.body.message.body, 'lambda test message');
104
-
105
- requestStub.reset();
106
- }
107
- }
108
- }
109
- }
110
- })
111
- .addBatch({
112
- 'async handler catches exception': {
113
- topic: function() {
114
- var rollbar = new Rollbar({
115
- accessToken: 'abc123',
116
- captureUncaught: true,
117
- captureLambdaTimeouts: false
118
- });
119
- var api = rollbar.client.notifier.queue.api;
120
- rollbar.requestStub = sinon.stub(api, 'postItem').callsFake(fakePostItem);
121
-
122
- rollbar.testHandlerInstance = rollbar.lambdaHandler(async (_event, _context) => {
123
- // Testing the condition where the client handler throws.
124
- // The Rollbar wrapper should catch and report, and should not reject
125
- // until the API request has completed.
126
- throw new Error('lambda test error');
127
- });
128
-
129
- return rollbar;
130
- },
131
- 'invokes handler and receives promise': function(r) {
132
- var handler = r.testHandlerInstance;
133
-
134
- // rollbar.lambdaHandler in the above topic should have returned a
135
- // handler with the correct signature. (The callback handler is length = 3)
136
- assert.equal(handler.length, 2);
137
- assert.equal(handler.name, 'rollbarAsyncLambdaHandler');
138
-
139
- // The rollbar.wait() in the wrapper should prevent this from
140
- // resolving until the response is received.
141
- r.testPromise = handler({}, stubContext);
142
- },
143
- 'after handler invoked': {
144
- topic: function(r) {
145
- var callback = this.callback;
146
-
147
- promisePending(r.testPromise, function(pending){
148
- r.promiseIsPending = pending;
149
- callback(r);
150
- });
151
- },
152
- 'promise is pending': function(r) {
153
- assert.isTrue(r.promiseIsPending);
154
- },
155
- 'after promise rejected': {
156
- topic: function(r) {
157
- var callback = this.callback;
158
-
159
- r.testPromise.catch(function(error){
160
- assert.equal(error.message, 'lambda test error');
161
- callback(r);
162
- });
163
- },
164
- 'sends message before exit': function(r) {
165
- var requestStub = r.requestStub;
166
-
167
- // If the handler is allowed to exit prematurely, this will fail.
168
- assert.isTrue(requestStub.called);
169
- var data = requestStub.getCall(0).args[0];
170
- assert.equal(data.body.trace_chain[0].exception.message, 'lambda test error');
171
-
172
- requestStub.reset();
173
- }
174
- }
175
- }
176
- }
177
- }).export(module, {error: false});