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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rollbar",
3
- "version": "2.26.3",
3
+ "version": "3.0.0-alpha.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "http://github.com/rollbar/rollbar.js"
@@ -18,6 +18,7 @@
18
18
  "browser": "dist/rollbar.umd.min.js",
19
19
  "types": "./index.d.ts",
20
20
  "dependencies": {
21
+ "@rrweb/record": "^2.0.0-alpha.18",
21
22
  "async": "~3.2.3",
22
23
  "console-polyfill": "0.3.0",
23
24
  "error-stack-parser": "^2.0.4",
@@ -27,19 +28,21 @@
27
28
  "source-map": "^0.5.7"
28
29
  },
29
30
  "devDependencies": {
30
- "@babel/core": "^7.22.11",
31
+ "@babel/core": "^7.26.10",
32
+ "@babel/eslint-parser": "^7.27.0",
33
+ "@babel/preset-env": "^7.26.9",
31
34
  "babel-eslint": "^10.0.3",
32
- "babel-loader": "^8.0.4",
35
+ "babel-loader": "^9.2.1",
33
36
  "bluebird": "^3.3.5",
34
37
  "chai": "^4.2.0",
35
38
  "chalk": "^1.1.1",
36
- "eslint": "^6.8.0",
37
- "eslint-loader": "^3.0.3",
38
- "express": "^4.18.2",
39
+ "coverage-istanbul-loader": "^3.0.5",
40
+ "eslint": "^9.24.0",
41
+ "express": "^4.21.2",
39
42
  "glob": "^5.0.14",
40
43
  "grunt": "^1.1.0",
41
44
  "grunt-bumpup": "^0.6.3",
42
- "grunt-cli": "^1.3.2",
45
+ "grunt-cli": "^1.5.0",
43
46
  "grunt-contrib-concat": "^2.1.0",
44
47
  "grunt-contrib-connect": "^2.1.0",
45
48
  "grunt-contrib-copy": "^1.0.0",
@@ -49,13 +52,11 @@
49
52
  "grunt-karma": "^4.0.2",
50
53
  "grunt-parallel": "^0.5.1",
51
54
  "grunt-text-replace": "^0.4.0",
52
- "grunt-vows": "^0.4.2",
53
55
  "grunt-webpack": "^5.0.0",
54
- "istanbul-instrumenter-loader": "^3.0.1",
55
56
  "jade": "~0.27.7",
56
57
  "jasmine-core": "^2.3.4",
57
58
  "jquery-mockjax": "^2.5.0",
58
- "karma": "^6.4.2",
59
+ "karma": "^6.4.4",
59
60
  "karma-chai": "^0.1.0",
60
61
  "karma-chrome-launcher": "^2.2.0",
61
62
  "karma-expect": "^1.1.0",
@@ -69,29 +70,28 @@
69
70
  "karma-sinon": "^1.0.4",
70
71
  "karma-sourcemap-loader": "^0.3.5",
71
72
  "karma-webpack": "^5.0.0",
72
- "mocha": "^10.2.0",
73
+ "mocha": "^11.1.0",
73
74
  "natives": "^1.1.6",
74
75
  "nock": "^11.9.1",
75
76
  "node-libs-browser": "^0.5.2",
76
- "requirejs": "^2.1.20",
77
+ "prettier": "^3.2.5",
78
+ "requirejs": "^2.3.7",
77
79
  "script-loader": "0.6.1",
78
80
  "sinon": "^8.1.1",
79
81
  "stackframe": "^0.2.2",
80
- "strict-loader": "^1.2.0",
81
82
  "time-grunt": "^1.0.0",
82
- "vows": "^0.8.3",
83
- "webpack": "^5.88.2"
84
- },
85
- "optionalDependencies": {
86
- "decache": "^3.0.5"
83
+ "webpack": "^5.98.0"
87
84
  },
88
85
  "scripts": {
89
86
  "build": "./node_modules/.bin/grunt",
90
87
  "test": "./node_modules/.bin/grunt test",
91
88
  "test-browser": "./node_modules/.bin/grunt test-browser",
92
- "test-server": "./node_modules/.bin/grunt test-server",
93
- "test_ci": "./node_modules/.bin/grunt test",
94
- "lint": "./node_modules/.bin/eslint . --ext .js"
89
+ "test-server": "mocha 'test/server.*.mocha.test.mjs' --reporter spec",
90
+ "test-replay": "./node_modules/.bin/grunt test-replay",
91
+ "test-replay-unit": "./node_modules/.bin/grunt test-replay-unit",
92
+ "test-replay-integration": "./node_modules/.bin/grunt test-replay-integration",
93
+ "test-ci": "./node_modules/.bin/grunt test && npm run test-server",
94
+ "lint": "./node_modules/.bin/eslint ."
95
95
  },
96
96
  "cdn": {
97
97
  "host": "cdn.rollbar.com"
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @type {import('prettier').Config}
3
+ */
4
+ module.exports = {
5
+ trailingComma: 'all',
6
+ singleQuote: true,
7
+ };
package/src/api.js CHANGED
@@ -7,7 +7,16 @@ var defaultOptions = {
7
7
  search: null,
8
8
  version: '1',
9
9
  protocol: 'https:',
10
- port: 443
10
+ port: 443,
11
+ };
12
+
13
+ var OTLPDefaultOptions = {
14
+ hostname: 'api.rollbar.com',
15
+ path: '/api/1/session/',
16
+ search: null,
17
+ version: '1',
18
+ protocol: 'https:',
19
+ port: 443,
11
20
  };
12
21
 
13
22
  /**
@@ -29,45 +38,86 @@ var defaultOptions = {
29
38
  * protocol (optional): https
30
39
  * }
31
40
  */
32
- function Api(options, transport, urllib, truncation, jsonBackup) {
41
+ function Api(options, transport, urllib, truncation) {
33
42
  this.options = options;
34
43
  this.transport = transport;
35
44
  this.url = urllib;
36
45
  this.truncation = truncation;
37
- this.jsonBackup = jsonBackup;
38
46
  this.accessToken = options.accessToken;
39
47
  this.transportOptions = _getTransport(options, urllib);
48
+ this.OTLPTransportOptions = _getOTLPTransport(options, urllib);
40
49
  }
41
50
 
51
+ /**
52
+ * Wraps transport.post in a Promise to support async/await
53
+ *
54
+ * @param {Object} options - Options for the API request
55
+ * @param {string} options.accessToken - The access token for authentication
56
+ * @param {Object} options.transportOptions - Options for the transport
57
+ * @param {Object} options.payload - The data payload to send
58
+ * @returns {Promise} A promise that resolves with the response or rejects with an error
59
+ * @private
60
+ */
61
+ Api.prototype._postPromise = function({ accessToken, transportOptions, payload }) {
62
+ const self = this;
63
+ return new Promise((resolve, reject) => {
64
+ self.transport.post(accessToken, transportOptions, payload, (err, resp) =>
65
+ err ? reject(err) : resolve(resp)
66
+ );
67
+ });
68
+ };
69
+
42
70
  /**
43
71
  *
44
72
  * @param data
45
73
  * @param callback
46
74
  */
47
- Api.prototype.postItem = function(data, callback) {
48
- var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');
49
- var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);
75
+ Api.prototype.postItem = function (data, callback) {
76
+ var transportOptions = helpers.transportOptions(
77
+ this.transportOptions,
78
+ 'POST',
79
+ );
80
+ var payload = helpers.buildPayload(data);
50
81
  var self = this;
51
82
 
52
83
  // ensure the network request is scheduled after the current tick.
53
- setTimeout(function() {
84
+ setTimeout(function () {
54
85
  self.transport.post(self.accessToken, transportOptions, payload, callback);
55
86
  }, 0);
56
87
  };
57
88
 
89
+ /**
90
+ * Posts spans to the Rollbar API using the session endpoint
91
+ *
92
+ * @param {Array} payload - The spans to send
93
+ * @returns {Promise<Object>} A promise that resolves with the API response
94
+ */
95
+ Api.prototype.postSpans = async function (payload) {
96
+ const transportOptions = helpers.transportOptions(
97
+ this.OTLPTransportOptions,
98
+ 'POST',
99
+ );
100
+
101
+ return await this._postPromise({
102
+ accessToken: this.accessToken,
103
+ transportOptions,
104
+ payload
105
+ });
106
+ };
107
+
58
108
  /**
59
109
  *
60
110
  * @param data
61
111
  * @param callback
62
112
  */
63
- Api.prototype.buildJsonPayload = function(data, callback) {
64
- var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);
113
+ Api.prototype.buildJsonPayload = function (data, callback) {
114
+ var payload = helpers.buildPayload(data);
65
115
 
66
116
  var stringifyResult;
67
117
  if (this.truncation) {
68
118
  stringifyResult = this.truncation.truncate(payload);
69
119
  } else {
70
- stringifyResult = _.stringify(payload)
120
+ stringifyResult = _.stringify(payload);
71
121
  }
72
122
 
73
123
  if (stringifyResult.error) {
@@ -85,15 +135,24 @@ Api.prototype.buildJsonPayload = function(data, callback) {
85
135
  * @param jsonPayload
86
136
  * @param callback
87
137
  */
88
- Api.prototype.postJsonPayload = function(jsonPayload, callback) {
89
- var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');
90
- this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);
138
+ Api.prototype.postJsonPayload = function (jsonPayload, callback) {
139
+ var transportOptions = helpers.transportOptions(
140
+ this.transportOptions,
141
+ 'POST',
142
+ );
143
+ this.transport.postJsonPayload(
144
+ this.accessToken,
145
+ transportOptions,
146
+ jsonPayload,
147
+ callback,
148
+ );
91
149
  };
92
150
 
93
- Api.prototype.configure = function(options) {
151
+ Api.prototype.configure = function (options) {
94
152
  var oldOptions = this.oldOptions;
95
153
  this.options = _.merge(oldOptions, options);
96
154
  this.transportOptions = _getTransport(this.options, this.url);
155
+ this.OTLPTransportOptions = _getOTLPTransport(this.options, this.url);
97
156
  if (this.options.accessToken !== undefined) {
98
157
  this.accessToken = this.options.accessToken;
99
158
  }
@@ -104,4 +163,9 @@ function _getTransport(options, url) {
104
163
  return helpers.getTransportFromOptions(options, defaultOptions, url);
105
164
  }
106
165
 
166
+ function _getOTLPTransport(options, url) {
167
+ options = {...options, endpoint: options.tracing?.endpoint};
168
+ return helpers.getTransportFromOptions(options, OTLPDefaultOptions, url);
169
+ }
170
+
107
171
  module.exports = Api;
package/src/apiUtility.js CHANGED
@@ -1,10 +1,10 @@
1
1
  var _ = require('./utility');
2
2
 
3
- function buildPayload(accessToken, data, jsonBackup) {
3
+ function buildPayload(data) {
4
4
  if (!_.isType(data.context, 'string')) {
5
- var contextResult = _.stringify(data.context, jsonBackup);
5
+ var contextResult = _.stringify(data.context);
6
6
  if (contextResult.error) {
7
- data.context = 'Error: could not serialize \'context\'';
7
+ data.context = "Error: could not serialize 'context'";
8
8
  } else {
9
9
  data.context = contextResult.value || '';
10
10
  }
@@ -13,8 +13,7 @@ function buildPayload(accessToken, data, jsonBackup) {
13
13
  }
14
14
  }
15
15
  return {
16
- access_token: accessToken,
17
- data: data
16
+ data: data,
18
17
  };
19
18
  }
20
19
 
@@ -25,7 +24,7 @@ function getTransportFromOptions(options, defaults, url) {
25
24
  var path = defaults.path;
26
25
  var search = defaults.search;
27
26
  var timeout = options.timeout;
28
- var transport = detectTransport(options)
27
+ var transport = detectTransport(options);
29
28
 
30
29
  var proxy = options.proxy;
31
30
  if (options.endpoint) {
@@ -44,12 +43,14 @@ function getTransportFromOptions(options, defaults, url) {
44
43
  path: path,
45
44
  search: search,
46
45
  proxy: proxy,
47
- transport: transport
46
+ transport: transport,
48
47
  };
49
48
  }
50
49
 
51
50
  function detectTransport(options) {
52
- var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);
51
+ var gWindow =
52
+ (typeof window != 'undefined' && window) ||
53
+ (typeof self != 'undefined' && self);
53
54
  var transport = options.defaultTransport || 'xhr';
54
55
  if (typeof gWindow.fetch === 'undefined') transport = 'xhr';
55
56
  if (typeof gWindow.XMLHttpRequest === 'undefined') transport = 'fetch';
@@ -58,7 +59,9 @@ function detectTransport(options) {
58
59
 
59
60
  function transportOptions(transport, method) {
60
61
  var protocol = transport.protocol || 'https:';
61
- var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);
62
+ var port =
63
+ transport.port ||
64
+ (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);
62
65
  var hostname = transport.hostname;
63
66
  var path = transport.path;
64
67
  var timeout = transport.timeout;
@@ -79,7 +82,7 @@ function transportOptions(transport, method) {
79
82
  path: path,
80
83
  port: port,
81
84
  method: method,
82
- transport: transportAPI
85
+ transport: transportAPI,
83
86
  };
84
87
  }
85
88
 
@@ -100,5 +103,5 @@ module.exports = {
100
103
  buildPayload: buildPayload,
101
104
  getTransportFromOptions: getTransportFromOptions,
102
105
  transportOptions: transportOptions,
103
- appendPathToPath: appendPathToPath
106
+ appendPathToPath: appendPathToPath,
104
107
  };