rotacloud 1.0.28 → 1.0.31

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 (63) hide show
  1. package/README.md +27 -1
  2. package/dist/cjs/interfaces/index.d.ts +2 -1
  3. package/dist/cjs/interfaces/index.js +2 -1
  4. package/dist/cjs/interfaces/query-params/index.d.ts +1 -0
  5. package/dist/cjs/interfaces/query-params/index.js +1 -0
  6. package/dist/cjs/interfaces/query-params/settings-query-params.interface.d.ts +3 -0
  7. package/dist/cjs/interfaces/query-params/settings-query-params.interface.js +2 -0
  8. package/dist/cjs/interfaces/sdk-config.interface.d.ts +2 -0
  9. package/dist/cjs/interfaces/settings.interface.d.ts +64 -0
  10. package/dist/cjs/interfaces/settings.interface.js +2 -0
  11. package/dist/cjs/models/attendance.model.d.ts +21 -1
  12. package/dist/cjs/models/attendance.model.js +20 -0
  13. package/dist/cjs/models/settings.model.d.ts +2 -6
  14. package/dist/cjs/models/settings.model.js +3 -0
  15. package/dist/cjs/rotacloud.d.ts +4 -2
  16. package/dist/cjs/rotacloud.js +10 -6
  17. package/dist/cjs/services/accounts.service.d.ts +7 -1
  18. package/dist/cjs/services/accounts.service.js +4 -0
  19. package/dist/cjs/services/index.d.ts +1 -0
  20. package/dist/cjs/services/index.js +1 -0
  21. package/dist/cjs/services/service.d.ts +19 -1
  22. package/dist/cjs/services/service.js +38 -3
  23. package/dist/cjs/services/settings.service.d.ts +14 -0
  24. package/dist/cjs/services/settings.service.js +16 -0
  25. package/dist/cjs/version.js +1 -1
  26. package/dist/mjs/interfaces/index.d.ts +2 -1
  27. package/dist/mjs/interfaces/index.js +2 -1
  28. package/dist/mjs/interfaces/query-params/index.d.ts +1 -0
  29. package/dist/mjs/interfaces/query-params/index.js +1 -0
  30. package/dist/mjs/interfaces/query-params/settings-query-params.interface.d.ts +3 -0
  31. package/dist/mjs/interfaces/query-params/settings-query-params.interface.js +1 -0
  32. package/dist/mjs/interfaces/sdk-config.interface.d.ts +2 -0
  33. package/dist/mjs/interfaces/settings.interface.d.ts +64 -0
  34. package/dist/mjs/interfaces/settings.interface.js +1 -0
  35. package/dist/mjs/models/attendance.model.d.ts +21 -1
  36. package/dist/mjs/models/attendance.model.js +20 -0
  37. package/dist/mjs/models/settings.model.d.ts +2 -6
  38. package/dist/mjs/models/settings.model.js +3 -0
  39. package/dist/mjs/rotacloud.d.ts +4 -2
  40. package/dist/mjs/rotacloud.js +12 -6
  41. package/dist/mjs/services/accounts.service.d.ts +7 -1
  42. package/dist/mjs/services/accounts.service.js +4 -0
  43. package/dist/mjs/services/index.d.ts +1 -0
  44. package/dist/mjs/services/index.js +1 -0
  45. package/dist/mjs/services/service.d.ts +19 -1
  46. package/dist/mjs/services/service.js +37 -2
  47. package/dist/mjs/services/settings.service.d.ts +14 -0
  48. package/dist/mjs/services/settings.service.js +13 -0
  49. package/dist/mjs/version.js +1 -1
  50. package/package.json +2 -1
  51. package/src/interfaces/index.ts +2 -1
  52. package/src/interfaces/query-params/index.ts +1 -0
  53. package/src/interfaces/query-params/settings-query-params.interface.ts +3 -0
  54. package/src/interfaces/sdk-config.interface.ts +3 -0
  55. package/src/interfaces/settings.interface.ts +63 -0
  56. package/src/models/attendance.model.ts +41 -1
  57. package/src/models/settings.model.ts +5 -3
  58. package/src/rotacloud.ts +14 -5
  59. package/src/services/accounts.service.ts +12 -0
  60. package/src/services/index.ts +1 -0
  61. package/src/services/service.ts +57 -3
  62. package/src/services/settings.service.ts +23 -0
  63. package/src/version.ts +1 -1
@@ -1,9 +1,46 @@
1
- import axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } from 'axios';
1
+ import axios, { AxiosInstance, AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } from 'axios';
2
+ import axiosRetry from 'axios-retry';
2
3
  import { RotaCloud } from '../rotacloud.js';
3
4
  import { Version } from '../version.js';
4
5
 
5
6
  export type RequirementsOf<T, K extends keyof T> = Required<Pick<T, K>> & Partial<T>;
6
7
 
8
+ export enum RetryStrategy {
9
+ Exponential = 'expo',
10
+ Static = 'static',
11
+ }
12
+
13
+ export type RetryOptions =
14
+ | {
15
+ /** Use exponential back-off */
16
+ exponential?: false;
17
+ /** The maximum number of retries before erroring */
18
+ maxRetries: number;
19
+ /** Delay in milliseconds between retry attempts - not used in exponential back-off */
20
+ delay: number;
21
+ }
22
+ | {
23
+ /** Use exponential back-off */
24
+ exponential: true;
25
+ /** The maximum number of retries before erroring */
26
+ maxRetries: number;
27
+ };
28
+
29
+ const DEFAULT_RETRIES = 3;
30
+ const DEFAULT_RETRY_DELAY = 2000;
31
+
32
+ const DEFAULT_RETRY_STRATEGY_OPTIONS: Record<RetryStrategy, RetryOptions> = {
33
+ [RetryStrategy.Exponential]: {
34
+ exponential: true,
35
+ maxRetries: DEFAULT_RETRIES,
36
+ },
37
+ [RetryStrategy.Static]: {
38
+ exponential: false,
39
+ maxRetries: DEFAULT_RETRIES,
40
+ delay: DEFAULT_RETRY_DELAY,
41
+ },
42
+ };
43
+
7
44
  export interface Options {
8
45
  rawResponse?: boolean;
9
46
  expand?: string[];
@@ -22,7 +59,7 @@ type ParameterPrimitive = string | boolean | number | null;
22
59
  type ParameterValue = ParameterPrimitive | ParameterPrimitive[] | undefined;
23
60
 
24
61
  export abstract class Service<ApiResponse = any> {
25
- // rate limit tracking could be implemented here statically
62
+ protected client: AxiosInstance = axios.create();
26
63
 
27
64
  public isLeaveRequest(endpoint?: string): boolean {
28
65
  return endpoint === '/leave_requests';
@@ -80,7 +117,24 @@ export abstract class Service<ApiResponse = any> {
80
117
  },
81
118
  };
82
119
 
83
- const response = await axios.request<T>(reqObject);
120
+ if (RotaCloud.config.retry) {
121
+ const retryConfig =
122
+ typeof RotaCloud.config.retry === 'string'
123
+ ? DEFAULT_RETRY_STRATEGY_OPTIONS[RotaCloud.config.retry]
124
+ : RotaCloud.config.retry;
125
+
126
+ axiosRetry(this.client, {
127
+ retries: retryConfig.maxRetries,
128
+ retryDelay: (retryCount) => {
129
+ if (retryConfig.exponential) {
130
+ return axiosRetry.exponentialDelay(retryCount);
131
+ }
132
+ return retryConfig.delay;
133
+ },
134
+ });
135
+ }
136
+
137
+ const response = await this.client.request<T>(reqObject);
84
138
  return response;
85
139
  }
86
140
 
@@ -0,0 +1,23 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { Settings } from '../models/settings.model.js';
3
+ import { Service, Options } from './index.js';
4
+
5
+ import { ApiSettings } from '../interfaces/index.js';
6
+ import { ErrorResponse } from '../models/error-response.model.js';
7
+ import { SettingsQueryParams } from '../rotacloud.js';
8
+
9
+ class SettingsService extends Service {
10
+ private apiPath = '/settings';
11
+
12
+ get(query: SettingsQueryParams): Promise<Settings>;
13
+ get(query: SettingsQueryParams, options: { rawResponse: true } & Options): Promise<AxiosResponse<ApiSettings, any>>;
14
+ get(query: SettingsQueryParams, options: Options): Promise<Settings>;
15
+ get(query: SettingsQueryParams, options?: Options) {
16
+ return super.fetch<ApiSettings>({ url: `${this.apiPath}`, params: query }, options).then(
17
+ (res) => Promise.resolve(options?.rawResponse ? res : new Settings(res.data)),
18
+ (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err))
19
+ );
20
+ }
21
+ }
22
+
23
+ export { SettingsService };
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const Version = { version: '1.0.28' };
1
+ export const Version = { version: '1.0.31' };