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.
- package/.cursor/rules/guidelines.mdc +154 -0
- package/.github/workflows/ci.yml +32 -12
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/CLAUDE.md +201 -0
- package/Gruntfile.js +101 -48
- package/Makefile +3 -3
- package/README.md +2 -4
- package/SECURITY.md +5 -0
- package/babel.config.json +9 -0
- package/bower.json +1 -3
- package/codex.md +148 -0
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +18748 -5375
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +2 -1
- package/dist/rollbar.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +19368 -6000
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +3 -1
- package/dist/rollbar.named-amd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +18749 -5380
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +3 -1
- package/dist/rollbar.noconflict.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +19367 -6000
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +3 -1
- package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/eslint.config.mjs +33 -0
- package/get_versions.js +33 -0
- package/index.d.ts +270 -231
- package/karma.conf.js +18 -27
- package/package.json +21 -21
- package/prettier.config.js +7 -0
- package/src/api.js +78 -14
- package/src/apiUtility.js +14 -11
- package/src/browser/core.js +138 -72
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/replay/defaults.js +71 -0
- package/src/browser/replay/recorder.js +193 -0
- package/src/browser/replay/replayMap.js +195 -0
- package/src/browser/rollbar.js +12 -8
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -361
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +26 -14
- package/src/browser/transport/xhr.js +41 -14
- package/src/browser/transport.js +93 -33
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +133 -40
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +72 -21
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +135 -56
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +162 -33
- package/src/tracing/context.js +24 -0
- package/src/tracing/contextManager.js +37 -0
- package/src/tracing/defaults.js +7 -0
- package/src/tracing/exporter.js +188 -0
- package/src/tracing/hrtime.js +98 -0
- package/src/tracing/id.js +24 -0
- package/src/tracing/session.js +55 -0
- package/src/tracing/span.js +92 -0
- package/src/tracing/spanProcessor.js +15 -0
- package/src/tracing/tracer.js +46 -0
- package/src/tracing/tracing.js +89 -0
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +123 -52
- package/test/api.test.js +88 -41
- package/test/apiUtility.test.js +48 -50
- package/test/browser.core.test.js +142 -141
- package/test/browser.domUtility.test.js +53 -36
- package/test/browser.predicates.test.js +14 -14
- package/test/browser.replay.recorder.test.js +416 -0
- package/test/browser.rollbar.test.js +655 -515
- package/test/browser.telemetry.test.js +46 -39
- package/test/browser.transforms.test.js +164 -139
- package/test/browser.transport.test.js +59 -50
- package/test/browser.url.test.js +13 -12
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/fixtures/replay/index.js +20 -0
- package/test/fixtures/replay/payloads.fixtures.js +229 -0
- package/test/fixtures/replay/rrwebEvents.fixtures.js +251 -0
- package/test/fixtures/replay/rrwebSyntheticEvents.fixtures.js +328 -0
- package/test/notifier.test.js +91 -79
- package/test/predicates.test.js +261 -215
- package/test/queue.test.js +231 -215
- package/test/rateLimiter.test.js +51 -43
- package/test/react-native.rollbar.test.js +150 -116
- package/test/react-native.transforms.test.js +23 -25
- package/test/react-native.transport.test.js +26 -14
- package/test/replay/index.js +2 -0
- package/test/replay/integration/api.spans.test.js +136 -0
- package/test/replay/integration/e2e.test.js +228 -0
- package/test/replay/integration/index.js +9 -0
- package/test/replay/integration/queue.replayMap.test.js +332 -0
- package/test/replay/integration/replayMap.test.js +163 -0
- package/test/replay/integration/sessionRecording.test.js +390 -0
- package/test/replay/unit/api.postSpans.test.js +150 -0
- package/test/replay/unit/index.js +7 -0
- package/test/replay/unit/queue.replayMap.test.js +225 -0
- package/test/replay/unit/replayMap.test.js +348 -0
- package/test/replay/util/index.js +5 -0
- package/test/replay/util/mockRecordFn.js +80 -0
- package/test/server.lambda.mocha.test.mjs +172 -0
- package/test/server.locals.constructor.mocha.test.mjs +80 -0
- package/test/server.locals.error-handling.mocha.test.mjs +387 -0
- package/test/server.locals.merge.mocha.test.mjs +267 -0
- package/test/server.locals.test-utils.mjs +114 -0
- package/test/server.parser.mocha.test.mjs +87 -0
- package/test/server.predicates.mocha.test.mjs +63 -0
- package/test/server.rollbar.constructor.mocha.test.mjs +199 -0
- package/test/server.rollbar.handlers.mocha.test.mjs +253 -0
- package/test/server.rollbar.logging.mocha.test.mjs +326 -0
- package/test/server.rollbar.misc.mocha.test.mjs +44 -0
- package/test/server.rollbar.test-utils.mjs +57 -0
- package/test/server.telemetry.mocha.test.mjs +377 -0
- package/test/server.transforms.data.mocha.test.mjs +163 -0
- package/test/server.transforms.error.mocha.test.mjs +199 -0
- package/test/server.transforms.request.mocha.test.mjs +208 -0
- package/test/server.transforms.scrub.mocha.test.mjs +140 -0
- package/test/server.transforms.sourcemaps.mocha.test.mjs +122 -0
- package/test/server.transforms.test-utils.mjs +62 -0
- package/test/server.transport.mocha.test.mjs +269 -0
- package/test/telemetry.test.js +178 -38
- package/test/tracing/contextManager.test.js +28 -0
- package/test/tracing/exporter.toPayload.test.js +400 -0
- package/test/tracing/id.test.js +24 -0
- package/test/tracing/span.test.js +183 -0
- package/test/tracing/spanProcessor.test.js +73 -0
- package/test/tracing/tracing.test.js +105 -0
- package/test/transforms.test.js +70 -68
- package/test/truncation.test.js +57 -55
- package/test/utility.test.js +310 -228
- package/webpack.config.js +36 -70
- package/.eslintignore +0 -7
- package/.gitmodules +0 -3
- package/test/server.lambda.test.js +0 -177
- package/test/server.locals.test.js +0 -841
- package/test/server.parser.test.js +0 -72
- package/test/server.predicates.test.js +0 -89
- package/test/server.rollbar.test.js +0 -676
- package/test/server.telemetry.test.js +0 -318
- package/test/server.transforms.test.js +0 -1099
- 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: '
|
|
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
|
-
|
|
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: '
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
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(
|
|
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
package/.gitmodules
DELETED
|
@@ -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});
|