@emilgroup/account-sdk-node 1.1.0 → 1.3.0

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
@@ -10,18 +10,18 @@ Module system
10
10
  * CommonJS
11
11
  * ES6 module system
12
12
 
13
- Although this package can be used in both TypeScript and JavaScript, it is intended to be used with TypeScript. The definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
13
+ Although this package can be used in both TypeScript and JavaScript, it is intended to be used with TypeScript. The definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)). For more information, you can go to [Emil Api documentation](https://emil.stoplight.io/docs/emil-api/).
14
14
 
15
15
  ## Consuming
16
16
 
17
17
  Navigate to the folder of your consuming project and run one of the following commands:
18
18
 
19
19
  ```
20
- npm install @emilgroup/account-sdk-node@1.1.0 --save
20
+ npm install @emilgroup/account-sdk-node@1.3.0 --save
21
21
  ```
22
22
  or
23
23
  ```
24
- yarn add @emilgroup/account-sdk-node@1.1.0
24
+ yarn add @emilgroup/account-sdk-node@1.3.0
25
25
  ```
26
26
 
27
27
  And then you can import `AccountsApi`.
package/api.ts CHANGED
@@ -33,4 +33,5 @@ export * from './api/accounts-api';
33
33
  export enum Environment {
34
34
  Production = 'https://apiv2.emil.de',
35
35
  Test = 'https://apiv2-test.emil.de',
36
+ Development = 'https://apiv2-dev.emil.de',
36
37
  }
package/base.ts CHANGED
@@ -21,7 +21,7 @@ import * as fs from 'fs';
21
21
  import * as path from 'path';
22
22
  import * as os from 'os';
23
23
 
24
- export const BASE_PATH = "http://localhost".replace(/\/+$/, "");
24
+ export const BASE_PATH = "https://apiv2.emil.de".replace(/\/+$/, "");
25
25
  const CONFIG_DIRECTORY = '.emil';
26
26
  const CONFIG_FILENAME = 'credentials';
27
27
  const KEY_USERNAME = 'emil_username';
@@ -42,7 +42,6 @@ export const COLLECTION_FORMATS = {
42
42
  export interface LoginClass {
43
43
  accessToken: string;
44
44
  permissions: Array<string>;
45
- newPasswordRequired: boolean;
46
45
  }
47
46
 
48
47
  export enum Environment {
@@ -50,6 +49,13 @@ export enum Environment {
50
49
  Test = 'https://apiv2-test.emil.de',
51
50
  }
52
51
 
52
+ let _retry_count = 0
53
+ let _retry = null
54
+
55
+ export function resetRetry() {
56
+ _retry_count = 0
57
+ }
58
+
53
59
  /**
54
60
  *
55
61
  * @export
@@ -60,6 +66,8 @@ export interface RequestArgs {
60
66
  options: AxiosRequestConfig;
61
67
  }
62
68
 
69
+ const NETWORK_ERROR_MESSAGE = "Network Error";
70
+
63
71
  /**
64
72
  *
65
73
  * @export
@@ -154,15 +162,16 @@ export class BaseAPI {
154
162
  const response = await globalAxios.request<LoginClass>(options);
155
163
 
156
164
  const { data: { accessToken } } = response;
157
- const refreshToken = this.extractRefreshToken(response)
158
-
159
165
  this.configuration.username = username;
160
166
  this.configuration.accessToken = `Bearer ${accessToken}`;
167
+
168
+ const refreshToken = this.extractRefreshToken(response)
161
169
  this.configuration.refreshToken = refreshToken;
162
170
  }
163
171
 
164
172
  async refreshToken(): Promise<string> {
165
173
  const { username, refreshToken } = this.configuration;
174
+
166
175
 
167
176
  if (!username || !refreshToken) {
168
177
  return '';
@@ -204,7 +213,7 @@ export class BaseAPI {
204
213
  return res;
205
214
  },
206
215
  async (err) => {
207
- const originalConfig = err.config;
216
+ let originalConfig = err.config;
208
217
  if (err.response) {
209
218
  // Access Token was expired
210
219
  if (err.response.status === 401 && !originalConfig._retry) {
@@ -213,17 +222,11 @@ export class BaseAPI {
213
222
  const tokenString = await this.refreshToken();
214
223
  const accessToken = `Bearer ${tokenString}`;
215
224
 
216
- const localVarHeaderParameter = {} as any;
217
- localVarHeaderParameter['Authorization'] = accessToken;
218
-
219
- originalConfig.headers = {
220
- ...originalConfig.headers,
221
- ...localVarHeaderParameter,
222
- };
225
+ originalConfig.headers['Authorization'] = `Bearer ${accessToken}`
223
226
 
224
227
  this.configuration.accessToken = accessToken;
225
228
 
226
- return axios(originalConfig);
229
+ return axios.request(originalConfig);
227
230
  } catch (_error) {
228
231
  if (_error.response && _error.response.data) {
229
232
  return Promise.reject(_error.response.data);
@@ -234,6 +237,30 @@ export class BaseAPI {
234
237
  if (err.response.status === 403 && err.response.data) {
235
238
  return Promise.reject(err.response.data);
236
239
  }
240
+ } else if(err.message === NETWORK_ERROR_MESSAGE
241
+ && err.isAxiosError
242
+ && originalConfig.headers.hasOwnProperty('Authorization')
243
+ && _retry_count < 4
244
+ ){
245
+ _retry_count++;
246
+ try {
247
+ const tokenString = await this.refreshToken();
248
+ const accessToken = `Bearer ${tokenString}`;
249
+
250
+ _retry = true;
251
+ originalConfig.headers['Authorization'] = accessToken;
252
+
253
+ this.configuration.accessToken = accessToken;
254
+
255
+ return axios.request({
256
+ ...originalConfig,
257
+ });
258
+ } catch (_error) {
259
+ if (_error.response && _error.response.data) {
260
+ return Promise.reject(_error.response.data);
261
+ }
262
+ return Promise.reject(_error);
263
+ }
237
264
  }
238
265
  return Promise.reject(err);
239
266
  }
@@ -253,3 +280,4 @@ export class RequiredError extends Error {
253
280
  super(msg);
254
281
  }
255
282
  }
283
+
package/common.ts CHANGED
@@ -136,3 +136,64 @@ export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxi
136
136
  return axios.request<T, R>(axiosRequestArgs);
137
137
  };
138
138
  }
139
+
140
+ /* tslint:disable */
141
+ /* eslint-disable */
142
+ /**
143
+ * EMIL AccountService
144
+ * The EMIL AccountService API description
145
+ *
146
+ * The version of the OpenAPI document: 1.0
147
+ *
148
+ *
149
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
150
+ * https://openapi-generator.tech
151
+ * Do not edit the class manually.
152
+ */
153
+
154
+
155
+ export interface IStorageConverter<D, SD> {
156
+ toStorageData( data: D ): SD;
157
+ fromStorageData( storageData: SD ): D;
158
+ }
159
+
160
+ export interface IStorage {
161
+ get<T>( key: string, converter?: IStorageConverter<T, any> ): T | null;
162
+ set<T>( key: string, value: T, converter?: IStorageConverter<T, any> ): void;
163
+ }
164
+
165
+ export class LocalStorage implements IStorage {
166
+ readonly storage: Storage;
167
+
168
+ constructor() {
169
+ this.storage = localStorage;
170
+ }
171
+
172
+ get<T>( key: string, converter?: IStorageConverter<T, any> ): T | null {
173
+ const jsonValue = this.storage.getItem( key );
174
+ if ( jsonValue === null ) {
175
+ return null;
176
+ }
177
+ const value = JSON.parse( jsonValue );
178
+ if ( converter !== undefined ) {
179
+ return converter.fromStorageData( value );
180
+ } else {
181
+ return value as T;
182
+ }
183
+ }
184
+
185
+ set<T>( key: string, value: T, converter?: IStorageConverter<T, any> ): void {
186
+ let valueToStore: any = value;
187
+ if ( converter !== undefined ) {
188
+ valueToStore = converter.toStorageData( value );
189
+ }
190
+ const jsonValue = JSON.stringify( valueToStore );
191
+ this.storage.setItem( key, jsonValue );
192
+ }
193
+ }
194
+
195
+ let _defaultStorage: IStorage = null;
196
+
197
+ export const defaultStorage = (): IStorage => {
198
+ return _defaultStorage || (_defaultStorage = new LocalStorage());
199
+ };
@@ -53,7 +53,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
53
53
  function verb(n) { return function (v) { return step([n, v]); }; }
54
54
  function step(op) {
55
55
  if (f) throw new TypeError("Generator is already executing.");
56
- while (_) try {
56
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
57
57
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
58
58
  if (y = 0, t) op = [op[0] & 2, t.value];
59
59
  switch (op[0]) {
package/dist/api.d.ts CHANGED
@@ -12,5 +12,6 @@
12
12
  export * from './api/accounts-api';
13
13
  export declare enum Environment {
14
14
  Production = "https://apiv2.emil.de",
15
- Test = "https://apiv2-test.emil.de"
15
+ Test = "https://apiv2-test.emil.de",
16
+ Development = "https://apiv2-dev.emil.de"
16
17
  }
package/dist/api.js CHANGED
@@ -33,4 +33,5 @@ var Environment;
33
33
  (function (Environment) {
34
34
  Environment["Production"] = "https://apiv2.emil.de";
35
35
  Environment["Test"] = "https://apiv2-test.emil.de";
36
+ Environment["Development"] = "https://apiv2-dev.emil.de";
36
37
  })(Environment = exports.Environment || (exports.Environment = {}));
package/dist/base.d.ts CHANGED
@@ -25,12 +25,12 @@ export declare const COLLECTION_FORMATS: {
25
25
  export interface LoginClass {
26
26
  accessToken: string;
27
27
  permissions: Array<string>;
28
- newPasswordRequired: boolean;
29
28
  }
30
29
  export declare enum Environment {
31
30
  Production = "https://apiv2.emil.de",
32
31
  Test = "https://apiv2-test.emil.de"
33
32
  }
33
+ export declare function resetRetry(): void;
34
34
  /**
35
35
  *
36
36
  * @export
package/dist/base.js CHANGED
@@ -76,7 +76,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
76
76
  function verb(n) { return function (v) { return step([n, v]); }; }
77
77
  function step(op) {
78
78
  if (f) throw new TypeError("Generator is already executing.");
79
- while (_) try {
79
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
80
80
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
81
81
  if (y = 0, t) op = [op[0] & 2, t.value];
82
82
  switch (op[0]) {
@@ -101,7 +101,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
101
101
  return (mod && mod.__esModule) ? mod : { "default": mod };
102
102
  };
103
103
  Object.defineProperty(exports, "__esModule", { value: true });
104
- exports.RequiredError = exports.BaseAPI = exports.Environment = exports.COLLECTION_FORMATS = exports.BASE_PATH = void 0;
104
+ exports.RequiredError = exports.BaseAPI = exports.resetRetry = exports.Environment = exports.COLLECTION_FORMATS = exports.BASE_PATH = void 0;
105
105
  var configuration_1 = require("./configuration");
106
106
  // Some imports not used depending on template conditions
107
107
  // @ts-ignore
@@ -109,7 +109,7 @@ var axios_1 = __importDefault(require("axios"));
109
109
  var fs = __importStar(require("fs"));
110
110
  var path = __importStar(require("path"));
111
111
  var os = __importStar(require("os"));
112
- exports.BASE_PATH = "http://localhost".replace(/\/+$/, "");
112
+ exports.BASE_PATH = "https://apiv2.emil.de".replace(/\/+$/, "");
113
113
  var CONFIG_DIRECTORY = '.emil';
114
114
  var CONFIG_FILENAME = 'credentials';
115
115
  var KEY_USERNAME = 'emil_username';
@@ -130,6 +130,13 @@ var Environment;
130
130
  Environment["Production"] = "https://apiv2.emil.de";
131
131
  Environment["Test"] = "https://apiv2-test.emil.de";
132
132
  })(Environment = exports.Environment || (exports.Environment = {}));
133
+ var _retry_count = 0;
134
+ var _retry = null;
135
+ function resetRetry() {
136
+ _retry_count = 0;
137
+ }
138
+ exports.resetRetry = resetRetry;
139
+ var NETWORK_ERROR_MESSAGE = "Network Error";
133
140
  /**
134
141
  *
135
142
  * @export
@@ -253,9 +260,9 @@ var BaseAPI = /** @class */ (function () {
253
260
  case 1:
254
261
  response = _a.sent();
255
262
  accessToken = response.data.accessToken;
256
- refreshToken = this.extractRefreshToken(response);
257
263
  this.configuration.username = username;
258
264
  this.configuration.accessToken = "Bearer ".concat(accessToken);
265
+ refreshToken = this.extractRefreshToken(response);
259
266
  this.configuration.refreshToken = refreshToken;
260
267
  return [2 /*return*/];
261
268
  }
@@ -305,7 +312,7 @@ var BaseAPI = /** @class */ (function () {
305
312
  axios.interceptors.response.use(function (res) {
306
313
  return res;
307
314
  }, function (err) { return __awaiter(_this, void 0, void 0, function () {
308
- var originalConfig, tokenString, accessToken, localVarHeaderParameter, _error_1;
315
+ var originalConfig, tokenString, accessToken, _error_1, tokenString, accessToken, _error_2;
309
316
  return __generator(this, function (_a) {
310
317
  switch (_a.label) {
311
318
  case 0:
@@ -320,11 +327,9 @@ var BaseAPI = /** @class */ (function () {
320
327
  case 2:
321
328
  tokenString = _a.sent();
322
329
  accessToken = "Bearer ".concat(tokenString);
323
- localVarHeaderParameter = {};
324
- localVarHeaderParameter['Authorization'] = accessToken;
325
- originalConfig.headers = __assign(__assign({}, originalConfig.headers), localVarHeaderParameter);
330
+ originalConfig.headers['Authorization'] = "Bearer ".concat(accessToken);
326
331
  this.configuration.accessToken = accessToken;
327
- return [2 /*return*/, axios(originalConfig)];
332
+ return [2 /*return*/, axios.request(originalConfig)];
328
333
  case 3:
329
334
  _error_1 = _a.sent();
330
335
  if (_error_1.response && _error_1.response.data) {
@@ -335,8 +340,31 @@ var BaseAPI = /** @class */ (function () {
335
340
  if (err.response.status === 403 && err.response.data) {
336
341
  return [2 /*return*/, Promise.reject(err.response.data)];
337
342
  }
338
- _a.label = 5;
339
- case 5: return [2 /*return*/, Promise.reject(err)];
343
+ return [3 /*break*/, 9];
344
+ case 5:
345
+ if (!(err.message === NETWORK_ERROR_MESSAGE
346
+ && err.isAxiosError
347
+ && originalConfig.headers.hasOwnProperty('Authorization')
348
+ && _retry_count < 4)) return [3 /*break*/, 9];
349
+ _retry_count++;
350
+ _a.label = 6;
351
+ case 6:
352
+ _a.trys.push([6, 8, , 9]);
353
+ return [4 /*yield*/, this.refreshToken()];
354
+ case 7:
355
+ tokenString = _a.sent();
356
+ accessToken = "Bearer ".concat(tokenString);
357
+ _retry = true;
358
+ originalConfig.headers['Authorization'] = accessToken;
359
+ this.configuration.accessToken = accessToken;
360
+ return [2 /*return*/, axios.request(__assign({}, originalConfig))];
361
+ case 8:
362
+ _error_2 = _a.sent();
363
+ if (_error_2.response && _error_2.response.data) {
364
+ return [2 /*return*/, Promise.reject(_error_2.response.data)];
365
+ }
366
+ return [2 /*return*/, Promise.reject(_error_2)];
367
+ case 9: return [2 /*return*/, Promise.reject(err)];
340
368
  }
341
369
  });
342
370
  }); });
package/dist/common.d.ts CHANGED
@@ -64,3 +64,29 @@ export declare const toPathString: (url: URL) => string;
64
64
  * @export
65
65
  */
66
66
  export declare const createRequestFunction: (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) => <T = unknown, R = AxiosResponse<T, any>>(axios?: AxiosInstance, basePath?: string) => Promise<R>;
67
+ /**
68
+ * EMIL AccountService
69
+ * The EMIL AccountService API description
70
+ *
71
+ * The version of the OpenAPI document: 1.0
72
+ *
73
+ *
74
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
75
+ * https://openapi-generator.tech
76
+ * Do not edit the class manually.
77
+ */
78
+ export interface IStorageConverter<D, SD> {
79
+ toStorageData(data: D): SD;
80
+ fromStorageData(storageData: SD): D;
81
+ }
82
+ export interface IStorage {
83
+ get<T>(key: string, converter?: IStorageConverter<T, any>): T | null;
84
+ set<T>(key: string, value: T, converter?: IStorageConverter<T, any>): void;
85
+ }
86
+ export declare class LocalStorage implements IStorage {
87
+ readonly storage: Storage;
88
+ constructor();
89
+ get<T>(key: string, converter?: IStorageConverter<T, any>): T | null;
90
+ set<T>(key: string, value: T, converter?: IStorageConverter<T, any>): void;
91
+ }
92
+ export declare const defaultStorage: () => IStorage;
package/dist/common.js CHANGED
@@ -38,7 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  function verb(n) { return function (v) { return step([n, v]); }; }
39
39
  function step(op) {
40
40
  if (f) throw new TypeError("Generator is already executing.");
41
- while (_) try {
41
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
42
42
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
43
43
  if (y = 0, t) op = [op[0] & 2, t.value];
44
44
  switch (op[0]) {
@@ -60,7 +60,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
60
60
  }
61
61
  };
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
- exports.createRequestFunction = exports.toPathString = exports.serializeDataIfNeeded = exports.setSearchParams = exports.setOAuthToObject = exports.setBearerAuthToObject = exports.setBasicAuthToObject = exports.setApiKeyToObject = exports.assertParamExists = exports.DUMMY_BASE_URL = void 0;
63
+ exports.defaultStorage = exports.LocalStorage = exports.createRequestFunction = exports.toPathString = exports.serializeDataIfNeeded = exports.setSearchParams = exports.setOAuthToObject = exports.setBearerAuthToObject = exports.setBasicAuthToObject = exports.setApiKeyToObject = exports.assertParamExists = exports.DUMMY_BASE_URL = void 0;
64
64
  var base_1 = require("./base");
65
65
  var url_1 = require("url");
66
66
  /**
@@ -242,3 +242,36 @@ var createRequestFunction = function (axiosArgs, globalAxios, BASE_PATH, configu
242
242
  };
243
243
  };
244
244
  exports.createRequestFunction = createRequestFunction;
245
+ var LocalStorage = /** @class */ (function () {
246
+ function LocalStorage() {
247
+ this.storage = localStorage;
248
+ }
249
+ LocalStorage.prototype.get = function (key, converter) {
250
+ var jsonValue = this.storage.getItem(key);
251
+ if (jsonValue === null) {
252
+ return null;
253
+ }
254
+ var value = JSON.parse(jsonValue);
255
+ if (converter !== undefined) {
256
+ return converter.fromStorageData(value);
257
+ }
258
+ else {
259
+ return value;
260
+ }
261
+ };
262
+ LocalStorage.prototype.set = function (key, value, converter) {
263
+ var valueToStore = value;
264
+ if (converter !== undefined) {
265
+ valueToStore = converter.toStorageData(value);
266
+ }
267
+ var jsonValue = JSON.stringify(valueToStore);
268
+ this.storage.setItem(key, jsonValue);
269
+ };
270
+ return LocalStorage;
271
+ }());
272
+ exports.LocalStorage = LocalStorage;
273
+ var _defaultStorage = null;
274
+ var defaultStorage = function () {
275
+ return _defaultStorage || (_defaultStorage = new LocalStorage());
276
+ };
277
+ exports.defaultStorage = defaultStorage;
@@ -122,11 +122,11 @@ export interface AccountClass {
122
122
  * @type {object}
123
123
  * @memberof AccountClass
124
124
  */
125
- 'metadata': object;
125
+ 'metadata'?: object;
126
126
  /**
127
127
  * Optional field contain custom fields
128
128
  * @type {object}
129
129
  * @memberof AccountClass
130
130
  */
131
- 'customFields': object;
131
+ 'customFields'?: object;
132
132
  }
@@ -99,4 +99,4 @@ export declare const CreateAccountRequestDtoGenderEnum: {
99
99
  readonly Female: "female";
100
100
  readonly Unspecified: "unspecified";
101
101
  };
102
- export declare type CreateAccountRequestDtoGenderEnum = typeof CreateAccountRequestDtoGenderEnum[keyof typeof CreateAccountRequestDtoGenderEnum];
102
+ export type CreateAccountRequestDtoGenderEnum = typeof CreateAccountRequestDtoGenderEnum[keyof typeof CreateAccountRequestDtoGenderEnum];
@@ -105,4 +105,4 @@ export declare const UpdateAccountRequestDtoGenderEnum: {
105
105
  readonly Female: "female";
106
106
  readonly Unspecified: "unspecified";
107
107
  };
108
- export declare type UpdateAccountRequestDtoGenderEnum = typeof UpdateAccountRequestDtoGenderEnum[keyof typeof UpdateAccountRequestDtoGenderEnum];
108
+ export type UpdateAccountRequestDtoGenderEnum = typeof UpdateAccountRequestDtoGenderEnum[keyof typeof UpdateAccountRequestDtoGenderEnum];
@@ -127,12 +127,12 @@ export interface AccountClass {
127
127
  * @type {object}
128
128
  * @memberof AccountClass
129
129
  */
130
- 'metadata': object;
130
+ 'metadata'?: object;
131
131
  /**
132
132
  * Optional field contain custom fields
133
133
  * @type {object}
134
134
  * @memberof AccountClass
135
135
  */
136
- 'customFields': object;
136
+ 'customFields'?: object;
137
137
  }
138
138
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@emilgroup/account-sdk-node",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "OpenAPI client for @emilgroup/account-sdk-node",
5
5
  "author": "OpenAPI-Generator Contributors",
6
6
  "keywords": [
@@ -18,12 +18,12 @@
18
18
  "prepare": "npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "axios": "^0.26.1",
21
+ "axios": "^0.27.2",
22
22
  "form-data": "^4.0.0",
23
23
  "url": "^0.11.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@types/node": "^12.11.5",
26
+ "@types/node": "^12.11.5",
27
27
  "typescript": "^4.0"
28
28
  }
29
29
  }