merchi_sdk_ts 1.43.0 → 1.43.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/dist/request.js CHANGED
@@ -26,17 +26,25 @@ var __values = (this && this.__values) || function(o) {
26
26
  };
27
27
  // eslint-disable-next-line no-unused-vars
28
28
  import { getErrorFromCode } from './constants/errors.js';
29
+ function resolveApiErrorMessage(err) {
30
+ if (err && typeof err === 'object' && typeof err.message === 'string' && err.message) {
31
+ return err.message;
32
+ }
33
+ if (typeof err === 'string' && err) {
34
+ return err;
35
+ }
36
+ return 'No error message';
37
+ }
29
38
  var ApiError = /** @class */ (function (_super) {
30
39
  __extends(ApiError, _super);
31
40
  function ApiError(err) {
32
41
  var _this = this;
33
- var message = JSON.stringify(err);
42
+ var message = resolveApiErrorMessage(err);
34
43
  /* istanbul ignore next */
35
44
  _this = _super.call(this, message) || this;
36
45
  _this.statusCode = err.statusCode;
37
46
  _this.errorCode = getErrorFromCode(err.errorCode);
38
- _this.errorMessage = err.message ?
39
- err.message : 'No error message';
47
+ _this.errorMessage = message;
40
48
  _this.details = err.details;
41
49
  _this.name = 'ApiError';
42
50
  _this.original = err;
@@ -1,4 +1,4 @@
1
- import { apiFetch } from './request.js';
1
+ import { apiFetch, ApiError } from './request.js';
2
2
  import { ErrorType } from './constants/errors.js';
3
3
  import { setup, mockFetch } from './test_util.js';
4
4
  setup();
@@ -28,11 +28,30 @@ test('will get default errorCode', function () {
28
28
  mockFetch(false, { 'statusCode': 404,
29
29
  'errorCode': -1,
30
30
  'message': 'just a test' }, 404);
31
- apiFetch('https://api.merchi.co/', '/test').catch(function (e) {
31
+ return apiFetch('https://api.merchi.co/', '/test').catch(function (e) {
32
32
  expect(e.statusCode).toBe(404);
33
33
  expect(e.name).toBe('ApiError');
34
34
  expect(e.errorCode).toBe(ErrorType.UNKNOWN_ERROR);
35
35
  expect(e.errorMessage).toBe('just a test');
36
+ expect(e.message).toBe('just a test');
37
+ });
38
+ });
39
+ test('ApiError keeps plain string messages', function () {
40
+ var e = new ApiError('empty response');
41
+ expect(e.message).toBe('empty response');
42
+ expect(e.errorMessage).toBe('empty response');
43
+ });
44
+ test('ApiError.message is the human-readable text, not serialized JSON', function () {
45
+ mockFetch(false, {
46
+ 'statusCode': 403,
47
+ 'errorCode': ErrorType.UNKNOWN_ERROR,
48
+ 'message': 'cannot set referrer',
49
+ }, 403);
50
+ return apiFetch('https://api.merchi.co/', '/test').catch(function (e) {
51
+ expect(e.message).toBe('cannot set referrer');
52
+ expect(e.errorMessage).toBe('cannot set referrer');
53
+ expect(e.message).not.toContain('errorCode');
54
+ expect(e.message).not.toContain('statusCode');
36
55
  });
37
56
  });
38
57
  test('ApiError exposes details when the server supplies them', function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "merchi_sdk_ts",
3
- "version": "1.43.0",
3
+ "version": "1.43.1",
4
4
  "main": "dist/index.js",
5
5
  "type": "module",
6
6
  "repository": "git@github.com:merchisdk/merchi_sdk_ts.git",
@@ -1,4 +1,4 @@
1
- import { apiFetch } from './request.js';
1
+ import { apiFetch, ApiError } from './request.js';
2
2
  import { ErrorType } from './constants/errors.js';
3
3
  import { setup, mockFetch } from './test_util.js';
4
4
 
@@ -34,11 +34,32 @@ test('will get default errorCode', () => {
34
34
  {'statusCode': 404,
35
35
  'errorCode': -1,
36
36
  'message': 'just a test'}, 404);
37
- apiFetch('https://api.merchi.co/', '/test').catch(e => {
37
+ return apiFetch('https://api.merchi.co/', '/test').catch(e => {
38
38
  expect(e.statusCode).toBe(404);
39
39
  expect(e.name).toBe('ApiError');
40
40
  expect(e.errorCode).toBe(ErrorType.UNKNOWN_ERROR);
41
41
  expect(e.errorMessage).toBe('just a test');
42
+ expect(e.message).toBe('just a test');
43
+ });
44
+ });
45
+
46
+ test('ApiError keeps plain string messages', () => {
47
+ const e = new ApiError('empty response');
48
+ expect(e.message).toBe('empty response');
49
+ expect(e.errorMessage).toBe('empty response');
50
+ });
51
+
52
+ test('ApiError.message is the human-readable text, not serialized JSON', () => {
53
+ mockFetch(false, {
54
+ 'statusCode': 403,
55
+ 'errorCode': ErrorType.UNKNOWN_ERROR,
56
+ 'message': 'cannot set referrer',
57
+ }, 403);
58
+ return apiFetch('https://api.merchi.co/', '/test').catch(e => {
59
+ expect(e.message).toBe('cannot set referrer');
60
+ expect(e.errorMessage).toBe('cannot set referrer');
61
+ expect(e.message).not.toContain('errorCode');
62
+ expect(e.message).not.toContain('statusCode');
42
63
  });
43
64
  });
44
65
 
package/src/request.ts CHANGED
@@ -38,6 +38,16 @@ export interface ApiErrorDetails {
38
38
  [key: string]: any;
39
39
  }
40
40
 
41
+ function resolveApiErrorMessage(err: any): string {
42
+ if (err && typeof err === 'object' && typeof err.message === 'string' && err.message) {
43
+ return err.message;
44
+ }
45
+ if (typeof err === 'string' && err) {
46
+ return err;
47
+ }
48
+ return 'No error message';
49
+ }
50
+
41
51
  export class ApiError extends Error {
42
52
  public statusCode?: number;
43
53
  public errorCode?: ErrorType;
@@ -52,13 +62,12 @@ export class ApiError extends Error {
52
62
  public details?: ApiErrorDetails;
53
63
  public original: any;
54
64
  public constructor(err: any) {
55
- const message = JSON.stringify(err);
65
+ const message = resolveApiErrorMessage(err);
56
66
  /* istanbul ignore next */
57
67
  super(message);
58
68
  this.statusCode = err.statusCode;
59
69
  this.errorCode = getErrorFromCode(err.errorCode);
60
- this.errorMessage = err.message ?
61
- err.message : 'No error message';
70
+ this.errorMessage = message;
62
71
  this.details = err.details;
63
72
  this.name = 'ApiError';
64
73
  this.original = err;