sentry-testkit 3.3.8 → 4.0.3

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/README.md CHANGED
@@ -6,8 +6,8 @@
6
6
  [![npm version](https://img.shields.io/npm/v/sentry-testkit.svg)](https://npmjs.org/package/sentry-testkit)
7
7
  [![npm downloads](https://img.shields.io/npm/dm/sentry-testkit.svg)](https://npmjs.org/package/sentry-testkit)
8
8
  [![Test](https://github.com/wix/sentry-testkit/workflows/Test/badge.svg)](https://github.com/wix/sentry-testkit/actions)
9
- ![sentry version 5](https://img.shields.io/badge/Compatible%20with%20Sentry-v5-blue)
10
9
  ![sentry version 6](https://img.shields.io/badge/Compatible%20with%20Sentry-v6-blue)
10
+ ![sentry version 7](https://img.shields.io/badge/Compatible%20with%20Sentry-v7-blue)
11
11
 
12
12
  Sentry is an open-source JavaScript SDK published by [Sentry](https://sentry.io/welcome/) to enable error tracking that helps developers monitor and fix crashes in real time.<br>
13
13
  However, when building tests for your application, you want to assert that the right flow-tracking or error is being sent to *Sentry*, **but** without really sending it to *Sentry* servers. This way you won't swamp Sentry with false reports during test running and other CI operations.
@@ -134,4 +134,4 @@ const sentryTestkit = require('sentry-testkit/browser');
134
134
 
135
135
  const {testkit} = sentryTestkit()
136
136
  // Your code for browser
137
- ```
137
+ ```
@@ -28,6 +28,10 @@ var createInitNetworkInterceptor = function createInitNetworkInterceptor(testkit
28
28
  if (type === 'transaction') {
29
29
  testkit.transactions().push(transformTransaction(payload));
30
30
  }
31
+
32
+ if (type === 'event') {
33
+ testkit.reports().push(transformReport(payload));
34
+ }
31
35
  };
32
36
 
33
37
  return cb(baseUrl, handleRequestBody, handleEnvelopeRequestBody);
@@ -30,22 +30,44 @@ var createLocalServerApi = function createLocalServerApi(testkit) {
30
30
  // we can't use bodyParser.json() directly
31
31
 
32
32
  app.use(bodyParser.text({
33
- type: ['application/json', 'application/x-sentry-envelope']
33
+ type: ['application/json', 'application/x-sentry-envelope', 'text/plain']
34
34
  }));
35
35
  app.post("/api/".concat(project, "/store/"), function (req, res) {
36
36
  testkit.reports().push(transformReport(JSON.parse(req.body)));
37
37
  res.sendStatus(200);
38
38
  });
39
39
  app.post("/api/".concat(project, "/envelope/"), function (req, res) {
40
- var _parseEnvelopeRequest = parseEnvelopeRequest(req.body),
41
- type = _parseEnvelopeRequest.type,
42
- payload = _parseEnvelopeRequest.payload;
43
-
44
- if (type === 'transaction') {
45
- testkit.transactions().push(transformTransaction(payload));
40
+ if (req.headers['transfer-encoding'] === 'chunked') {
41
+ var rawData = '';
42
+ req.on('data', function (chunk) {
43
+ rawData += chunk;
44
+ });
45
+ req.on('end', function () {
46
+ var _parseEnvelopeRequest = parseEnvelopeRequest(rawData),
47
+ type = _parseEnvelopeRequest.type,
48
+ payload = _parseEnvelopeRequest.payload;
49
+
50
+ if (type === 'transaction') {
51
+ testkit.transactions().push(transformTransaction(payload));
52
+ }
53
+
54
+ if (type === 'event') {
55
+ testkit.reports().push(transformReport(payload));
56
+ }
57
+
58
+ res.sendStatus(200);
59
+ });
60
+ } else {
61
+ var _parseEnvelopeRequest2 = parseEnvelopeRequest(req.body),
62
+ type = _parseEnvelopeRequest2.type,
63
+ payload = _parseEnvelopeRequest2.payload;
64
+
65
+ if (type === 'transaction') {
66
+ testkit.transactions().push(transformTransaction(payload));
67
+ }
68
+
69
+ res.sendStatus(200);
46
70
  }
47
-
48
- res.sendStatus(200);
49
71
  });
50
72
  runningServer = http.createServer(app);
51
73
  return new Promise(function (resolve) {
@@ -1,11 +1,24 @@
1
1
  'use strict';
2
2
 
3
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
+
5
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
+
7
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
+
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10
+
11
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
12
+
13
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
+
3
15
  var _require = require('./transformers'),
4
16
  transformReport = _require.transformReport,
5
17
  transformTransaction = _require.transformTransaction;
6
18
 
7
19
  var createSentryTransport = function createSentryTransport(testkit) {
8
- return function (options) {
20
+ return function () {
21
+ // Send transport for API < v7
9
22
  var sendEvent = function sendEvent(event) {
10
23
  if (event.type === 'transaction') {
11
24
  testkit.transactions().push(transformTransaction(event));
@@ -17,6 +30,25 @@ var createSentryTransport = function createSentryTransport(testkit) {
17
30
  status: 'success',
18
31
  event: event
19
32
  });
33
+ }; // Send transport for API v7
34
+
35
+
36
+ var send = function send(envelope) {
37
+ var _envelope = _slicedToArray(envelope, 2),
38
+ items = _envelope[1];
39
+
40
+ items.forEach(function (_ref, index) {
41
+ var _ref2 = _slicedToArray(_ref, 2),
42
+ headers = _ref2[0],
43
+ data = _ref2[1];
44
+
45
+ if (headers.type === 'transaction') {
46
+ testkit.transactions().push(transformTransaction(data));
47
+ } else if (headers.type === 'event') {
48
+ testkit.reports().push(transformReport(data));
49
+ }
50
+ });
51
+ return Promise.resolve();
20
52
  };
21
53
 
22
54
  var close = function close() {
@@ -29,8 +61,12 @@ var createSentryTransport = function createSentryTransport(testkit) {
29
61
  // support for v4 API
30
62
  sendEvent: sendEvent,
31
63
  // support for v5 API
64
+ send: send,
65
+ // support for v7 API
32
66
  // close(timeout?: number): Promise<boolean>;
33
- close: close
67
+ close: close,
68
+ flush: close // support for v7 API
69
+
34
70
  };
35
71
  };
36
72
  };
package/index.d.ts CHANGED
@@ -1,13 +1,20 @@
1
- import { Event, Breadcrumb, User, Severity, StackFrame, Transport, TransportOptions } from '@sentry/types';
1
+ import {
2
+ Event,
3
+ Breadcrumb,
4
+ User,
5
+ SeverityLevel,
6
+ StackFrame,
7
+ Transport,
8
+ } from '@sentry/types'
2
9
 
3
- export = sentryTestkit;
10
+ export = sentryTestkit
4
11
 
5
- declare function sentryTestkit(): sentryTestkit.TestkitResult;
12
+ declare function sentryTestkit<T extends sentryTestkit.V6TransportClass | sentryTestkit.V7TransportFunction>(): sentryTestkit.TestkitResult<T>
6
13
 
7
14
  declare namespace sentryTestkit {
8
15
  interface Page {
9
- on(event: string, handler: (...args: any[]) => any): void;
10
- removeListener(event: string, handler: (...args: any[]) => any): void;
16
+ on(event: string, handler: (...args: any[]) => any): void
17
+ removeListener(event: string, handler: (...args: any[]) => any): void
11
18
  }
12
19
 
13
20
  interface ReportError {
@@ -21,7 +28,7 @@ declare namespace sentryTestkit {
21
28
  error?: ReportError
22
29
  message?: string
23
30
  extra?: { [key: string]: any }
24
- level: Severity
31
+ level: SeverityLevel
25
32
  release?: string
26
33
  user?: User
27
34
  tags: { [key: string]: string }
@@ -34,7 +41,7 @@ declare namespace sentryTestkit {
34
41
  description?: string
35
42
  parentSpanId: string
36
43
  }
37
-
44
+
38
45
  interface Transaction {
39
46
  name: string
40
47
  traceId: string
@@ -46,29 +53,39 @@ declare namespace sentryTestkit {
46
53
 
47
54
  export interface Testkit {
48
55
  puppeteer: {
49
- startListening(page: Page, baseUrl?: String): void;
50
- stopListening(page: Page): void;
51
- };
52
- reports(): Report[];
53
- transactions(): Transaction[];
54
- reset(): void;
55
- getExceptionAt(index: number): ReportError;
56
- findReport(e: Error): Report;
57
- isExist(e: Error): boolean;
56
+ startListening(page: Page, baseUrl?: String): void
57
+ stopListening(page: Page): void
58
+ }
59
+ reports(): Report[]
60
+ transactions(): Transaction[]
61
+ reset(): void
62
+ getExceptionAt(index: number): ReportError
63
+ findReport(e: Error): Report
64
+ isExist(e: Error): boolean
58
65
  }
59
66
 
60
67
  export interface LocalServer {
61
- start: (dsn: string) => Promise<void>;
62
- stop: () => Promise<void>;
63
- getDsn: () => string;
68
+ start: (dsn: string) => Promise<void>
69
+ stop: () => Promise<void>
70
+ getDsn: () => string
71
+ }
72
+
73
+ type V6TransportClass = {
74
+ new(): Transport
64
75
  }
65
76
 
66
- export interface TestkitResult {
67
- testkit: Testkit;
68
- sentryTransport: {
69
- new (options: TransportOptions): Transport;
70
- };
71
- initNetworkInterceptor<T>(dsn: string, initCallback: (baseUrl: string, handleRequestBody: (requestBody: { [key: string]: any }) => void) => T): T;
77
+ type V7TransportFunction = () => Transport
78
+
79
+ export interface TestkitResult<Transport extends V6TransportClass | V7TransportFunction> {
80
+ testkit: Testkit
81
+ sentryTransport: Transport
82
+ initNetworkInterceptor<T>(
83
+ dsn: string,
84
+ initCallback: (
85
+ baseUrl: string,
86
+ handleRequestBody: (requestBody: { [key: string]: any }) => void
87
+ ) => T
88
+ ): T
72
89
  localServer: LocalServer
73
90
  }
74
91
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sentry-testkit",
3
- "version": "3.3.8",
3
+ "version": "4.0.3",
4
4
  "description": "Sentry Testkit enables Sentry to work natively in your application while running tests. The report is not really sent but rather logged locally into memory. In this way, the logged reports can be fetched for your own verification or any other purpose in your local development environment.",
5
5
  "main": "dist/index.js",
6
6
  "types": "index.d.ts",
@@ -45,8 +45,10 @@
45
45
  "devDependencies": {
46
46
  "@babel/cli": "^7.15.7",
47
47
  "@babel/preset-env": "^7.15.8",
48
- "@sentry/browser": "^6.13.3",
49
- "@sentry/node": "^6.13.3",
48
+ "@sentry/browser": "^7.5.0",
49
+ "@sentry/node": "^7.5.0",
50
+ "@sentry/tracing": "^7.5.0",
51
+ "@sentry/types": "^7.5.0",
50
52
  "docsify-cli": "^4.4.3",
51
53
  "eslint": "^8.0.1",
52
54
  "eslint-plugin-prettier": "^3.4.1",
@@ -55,7 +57,7 @@
55
57
  "jest": "^27.2.5",
56
58
  "lint-staged": "^10.5.4",
57
59
  "nock": "^10.0.6",
58
- "node-fetch": "^2.6.5",
60
+ "node-fetch": "^2.6.7",
59
61
  "prettier": "^1.19.1",
60
62
  "standard-version": "^9.3.1",
61
63
  "wait-for-expect": "^1.3.0"