rotacloud 1.0.3 → 1.0.4

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 (195) hide show
  1. package/.github/workflows/node.js.yml +2 -12
  2. package/dist/interfaces/account-service.interface.d.ts +6 -0
  3. package/dist/interfaces/account-service.interface.js +1 -0
  4. package/dist/interfaces/account-services.interface.d.ts +6 -0
  5. package/dist/interfaces/account-services.interface.js +1 -0
  6. package/dist/interfaces/account.interface.d.ts +40 -0
  7. package/dist/interfaces/account.interface.js +1 -0
  8. package/dist/interfaces/attendance.interface.d.ts +31 -0
  9. package/dist/interfaces/attendance.interface.js +1 -0
  10. package/dist/interfaces/availability-pattern.interface.d.ts +20 -0
  11. package/dist/interfaces/availability-pattern.interface.js +1 -0
  12. package/dist/interfaces/availability.interface.d.ts +13 -0
  13. package/dist/interfaces/availability.interface.js +1 -0
  14. package/dist/interfaces/daily-budgets.interface.d.ts +6 -0
  15. package/dist/interfaces/daily-budgets.interface.js +1 -0
  16. package/dist/interfaces/daily-revenue.interface.d.ts +7 -0
  17. package/dist/interfaces/daily-revenue.interface.js +1 -0
  18. package/dist/interfaces/day-notes.interface.d.ts +8 -0
  19. package/dist/interfaces/day-notes.interface.js +1 -0
  20. package/dist/interfaces/days-off-pattern.interface.d.ts +13 -0
  21. package/dist/interfaces/days-off-pattern.interface.js +1 -0
  22. package/dist/interfaces/days-off.interface.d.ts +8 -0
  23. package/dist/interfaces/days-off.interface.js +1 -0
  24. package/dist/interfaces/group.interface.d.ts +7 -0
  25. package/dist/interfaces/group.interface.js +1 -0
  26. package/dist/interfaces/holiday_allowance.interface.d.ts +11 -0
  27. package/dist/interfaces/holiday_allowance.interface.js +1 -0
  28. package/dist/interfaces/index.d.ts +29 -0
  29. package/dist/interfaces/index.js +29 -0
  30. package/dist/interfaces/leave-date.interface.d.ts +8 -0
  31. package/dist/interfaces/leave-date.interface.js +1 -0
  32. package/dist/interfaces/leave-embargo.interface.d.ts +10 -0
  33. package/dist/interfaces/leave-embargo.interface.js +1 -0
  34. package/dist/interfaces/leave-rate.interface.d.ts +3 -0
  35. package/dist/interfaces/leave-rate.interface.js +1 -0
  36. package/dist/interfaces/leave-request.interface.d.ts +13 -0
  37. package/dist/interfaces/leave-request.interface.js +1 -0
  38. package/dist/interfaces/leave-type.interface.d.ts +8 -0
  39. package/dist/interfaces/leave-type.interface.js +1 -0
  40. package/dist/interfaces/leave.interface.d.ts +28 -0
  41. package/dist/interfaces/leave.interface.js +1 -0
  42. package/dist/interfaces/location-coordinate.interface.d.ts +5 -0
  43. package/dist/interfaces/location-coordinate.interface.js +1 -0
  44. package/dist/interfaces/location.interface.d.ts +13 -0
  45. package/dist/interfaces/location.interface.js +1 -0
  46. package/dist/interfaces/logbook-category.interface.d.ts +4 -0
  47. package/dist/interfaces/logbook-category.interface.js +1 -0
  48. package/dist/interfaces/logbook-event.interface.d.ts +16 -0
  49. package/dist/interfaces/logbook-event.interface.js +1 -0
  50. package/dist/interfaces/pay-period.interface.d.ts +16 -0
  51. package/dist/interfaces/pay-period.interface.js +1 -0
  52. package/dist/interfaces/query-params/attendance-query-params.interface.d.ts +9 -0
  53. package/dist/interfaces/query-params/attendance-query-params.interface.js +1 -0
  54. package/dist/interfaces/query-params/availability-patterns-query-params.interface.d.ts +5 -0
  55. package/dist/interfaces/query-params/availability-patterns-query-params.interface.js +1 -0
  56. package/dist/interfaces/query-params/availability-query-params.interface.d.ts +5 -0
  57. package/dist/interfaces/query-params/availability-query-params.interface.js +1 -0
  58. package/dist/interfaces/query-params/common-shift-times-query-params.interface.d.ts +3 -0
  59. package/dist/interfaces/query-params/common-shift-times-query-params.interface.js +1 -0
  60. package/dist/interfaces/query-params/daily-budgets-query-params.interface.d.ts +5 -0
  61. package/dist/interfaces/query-params/daily-budgets-query-params.interface.js +1 -0
  62. package/dist/interfaces/query-params/daily-revenue-query-params.interface.d.ts +5 -0
  63. package/dist/interfaces/query-params/daily-revenue-query-params.interface.js +1 -0
  64. package/dist/interfaces/query-params/day-notes-query-params.interface.d.ts +5 -0
  65. package/dist/interfaces/query-params/day-notes-query-params.interface.js +1 -0
  66. package/dist/interfaces/query-params/days-off-patterns-query-params.interface.d.ts +5 -0
  67. package/dist/interfaces/query-params/days-off-patterns-query-params.interface.js +1 -0
  68. package/dist/interfaces/query-params/days-off-query-params.interface.d.ts +5 -0
  69. package/dist/interfaces/query-params/days-off-query-params.interface.js +1 -0
  70. package/dist/interfaces/query-params/documents-query-params.interface.d.ts +4 -0
  71. package/dist/interfaces/query-params/documents-query-params.interface.js +1 -0
  72. package/dist/interfaces/query-params/groups-query-params.interface.d.ts +3 -0
  73. package/dist/interfaces/query-params/groups-query-params.interface.js +1 -0
  74. package/dist/interfaces/query-params/internal-query-params.inteface.d.ts +5 -0
  75. package/dist/interfaces/query-params/internal-query-params.inteface.js +1 -0
  76. package/dist/interfaces/query-params/leave-embargoes-query-params.interface.d.ts +5 -0
  77. package/dist/interfaces/query-params/leave-embargoes-query-params.interface.js +1 -0
  78. package/dist/interfaces/query-params/leave-query-params.interface.d.ts +13 -0
  79. package/dist/interfaces/query-params/leave-query-params.interface.js +1 -0
  80. package/dist/interfaces/query-params/leave-requests-query-params.interface.d.ts +5 -0
  81. package/dist/interfaces/query-params/leave-requests-query-params.interface.js +1 -0
  82. package/dist/interfaces/query-params/locations-query-params.interface.d.ts +7 -0
  83. package/dist/interfaces/query-params/locations-query-params.interface.js +1 -0
  84. package/dist/interfaces/query-params/logbook-events-query-params.interface.d.ts +3 -0
  85. package/dist/interfaces/query-params/logbook-events-query-params.interface.js +1 -0
  86. package/dist/interfaces/query-params/pay-periods-query-params.interface.d.ts +4 -0
  87. package/dist/interfaces/query-params/pay-periods-query-params.interface.js +1 -0
  88. package/dist/interfaces/query-params/roles-query-params.interface.d.ts +5 -0
  89. package/dist/interfaces/query-params/roles-query-params.interface.js +1 -0
  90. package/dist/interfaces/query-params/shifts-query-params.interface.d.ts +14 -0
  91. package/dist/interfaces/query-params/shifts-query-params.interface.js +1 -0
  92. package/dist/interfaces/query-params/swap-requests-query-params.interface.d.ts +8 -0
  93. package/dist/interfaces/query-params/swap-requests-query-params.interface.js +1 -0
  94. package/dist/interfaces/query-params/terminals-query-params.interface.d.ts +3 -0
  95. package/dist/interfaces/query-params/terminals-query-params.interface.js +1 -0
  96. package/dist/interfaces/query-params/unavailability-requests-query-params.interface.d.ts +8 -0
  97. package/dist/interfaces/query-params/unavailability-requests-query-params.interface.js +1 -0
  98. package/dist/interfaces/query-params/users-query-params.interface.d.ts +17 -0
  99. package/dist/interfaces/query-params/users-query-params.interface.js +1 -0
  100. package/dist/interfaces/role-rate.interface.d.ts +6 -0
  101. package/dist/interfaces/role-rate.interface.js +1 -0
  102. package/dist/interfaces/role.interface.d.ts +9 -0
  103. package/dist/interfaces/role.interface.js +1 -0
  104. package/dist/interfaces/sdk-config.interface.d.ts +6 -0
  105. package/dist/interfaces/sdk-config.interface.js +1 -0
  106. package/dist/interfaces/shift.interface.d.ts +25 -0
  107. package/dist/interfaces/shift.interface.js +1 -0
  108. package/dist/interfaces/user.interface.d.ts +38 -0
  109. package/dist/interfaces/user.interface.js +1 -0
  110. package/dist/models/account.model.d.ts +8 -0
  111. package/dist/models/account.model.js +8 -0
  112. package/dist/models/attendance.model.d.ts +7 -0
  113. package/dist/models/attendance.model.js +7 -0
  114. package/dist/models/availability-pattern.model.d.ts +17 -0
  115. package/dist/models/availability-pattern.model.js +5 -0
  116. package/dist/models/availability.model.d.ts +6 -0
  117. package/dist/models/availability.model.js +6 -0
  118. package/dist/models/daily-budgets.model.d.ts +8 -0
  119. package/dist/models/daily-budgets.model.js +6 -0
  120. package/dist/models/daily-revenue.model.d.ts +9 -0
  121. package/dist/models/daily-revenue.model.js +6 -0
  122. package/dist/models/day-notes.model.d.ts +10 -0
  123. package/dist/models/day-notes.model.js +5 -0
  124. package/dist/models/days-off-pattern.model.d.ts +15 -0
  125. package/dist/models/days-off-pattern.model.js +5 -0
  126. package/dist/models/days-off.model.d.ts +6 -0
  127. package/dist/models/days-off.model.js +6 -0
  128. package/dist/models/document.model.d.ts +12 -0
  129. package/dist/models/document.model.js +2 -0
  130. package/dist/models/error-response.model.d.ts +8 -0
  131. package/dist/models/error-response.model.js +8 -0
  132. package/dist/models/group.model.d.ts +6 -0
  133. package/dist/models/group.model.js +6 -0
  134. package/dist/models/holiday-allowance-custom.model.d.ts +5 -0
  135. package/dist/models/holiday-allowance-custom.model.js +2 -0
  136. package/dist/models/holiday-allowance.model.d.ts +13 -0
  137. package/dist/models/holiday-allowance.model.js +5 -0
  138. package/dist/models/leave-embargo.model.d.ts +6 -0
  139. package/dist/models/leave-embargo.model.js +6 -0
  140. package/dist/models/leave-request.model.d.ts +14 -0
  141. package/dist/models/leave-request.model.js +5 -0
  142. package/dist/models/leave-type.model.d.ts +10 -0
  143. package/dist/models/leave-type.model.js +6 -0
  144. package/dist/models/leave.model.d.ts +6 -0
  145. package/dist/models/leave.model.js +6 -0
  146. package/dist/models/location.model.d.ts +11 -0
  147. package/dist/models/location.model.js +8 -0
  148. package/dist/models/logbook-category.model.d.ts +7 -0
  149. package/dist/models/logbook-category.model.js +6 -0
  150. package/dist/models/logbook-event.model.d.ts +5 -0
  151. package/dist/models/logbook-event.model.js +5 -0
  152. package/dist/models/memo.model.d.ts +8 -0
  153. package/dist/models/memo.model.js +2 -0
  154. package/dist/models/pay-period.model.d.ts +6 -0
  155. package/dist/models/pay-period.model.js +6 -0
  156. package/dist/models/role.model.d.ts +7 -0
  157. package/dist/models/role.model.js +6 -0
  158. package/dist/models/settings.model.d.ts +65 -0
  159. package/dist/models/settings.model.js +2 -0
  160. package/dist/models/shift.model.d.ts +24 -0
  161. package/dist/models/shift.model.js +24 -0
  162. package/dist/models/terminal.model.d.ts +19 -0
  163. package/dist/models/terminal.model.js +4 -0
  164. package/dist/models/user.model.d.ts +33 -0
  165. package/dist/models/user.model.js +10 -0
  166. package/dist/rotacloud.d.ts +20 -0
  167. package/dist/rotacloud.js +27 -0
  168. package/dist/services/accounts.service.d.ts +11 -0
  169. package/dist/services/accounts.service.js +17 -0
  170. package/dist/services/attendance.service.d.ts +38 -0
  171. package/dist/services/attendance.service.js +36 -0
  172. package/dist/services/days-off.service.d.ts +24 -0
  173. package/dist/services/days-off.service.js +42 -0
  174. package/dist/services/index.d.ts +10 -0
  175. package/dist/services/index.js +10 -0
  176. package/dist/services/leave-embargoes.service.d.ts +38 -0
  177. package/dist/services/leave-embargoes.service.js +36 -0
  178. package/dist/services/leave-request.service.d.ts +37 -0
  179. package/dist/services/leave-request.service.js +36 -0
  180. package/dist/services/leave.service.d.ts +40 -0
  181. package/dist/services/leave.service.js +42 -0
  182. package/dist/services/locations.service.d.ts +38 -0
  183. package/dist/services/locations.service.js +36 -0
  184. package/dist/services/roles.service.d.ts +38 -0
  185. package/dist/services/roles.service.js +36 -0
  186. package/dist/services/service.d.ts +20 -0
  187. package/dist/services/service.js +95 -0
  188. package/dist/services/shifts.service.d.ts +56 -0
  189. package/dist/services/shifts.service.js +45 -0
  190. package/dist/services/users.service.d.ts +38 -0
  191. package/dist/services/users.service.js +36 -0
  192. package/dist/version.d.ts +3 -0
  193. package/dist/version.js +1 -0
  194. package/package.json +1 -1
  195. package/src/version.ts +1 -1
@@ -0,0 +1,40 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiLeave } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { Leave } from '../models/leave.model.js';
5
+ import { LeaveQueryParams } from '../interfaces/query-params/leave-query-params.interface.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ import { LeaveType } from '../models/leave-type.model.js';
8
+ declare type RequiredProps = 'users' | 'type' | 'start_date' | 'end_date';
9
+ declare class LeaveService extends Service {
10
+ private apiPath;
11
+ constructor();
12
+ create(data: RequirementsOf<ApiLeave, RequiredProps>): Promise<Leave[]>;
13
+ create(data: RequirementsOf<ApiLeave, RequiredProps>, options: {
14
+ rawResponse: true;
15
+ params?: InternalQueryParams;
16
+ }): Promise<AxiosResponse<ApiLeave[], any>>;
17
+ create(data: RequirementsOf<ApiLeave, RequiredProps>, options: Options<InternalQueryParams>): Promise<Leave[]>;
18
+ get(id: number): Promise<Leave>;
19
+ get(id: number, options: {
20
+ rawResponse: true;
21
+ params?: InternalQueryParams;
22
+ }): Promise<AxiosResponse<ApiLeave, any>>;
23
+ get(id: number, options: Options<InternalQueryParams>): Promise<Leave>;
24
+ list(options?: Options<LeaveQueryParams & InternalQueryParams>): AsyncGenerator<Leave, void, unknown>;
25
+ listLeaveTypes(options?: Options<InternalQueryParams>): AsyncGenerator<LeaveType, void, unknown>;
26
+ listByPage(options?: Options<LeaveQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiLeave[], any>, any, unknown>;
27
+ update(id: number, data: Partial<ApiLeave>): Promise<Leave>;
28
+ update(id: number, data: Partial<ApiLeave>, options: {
29
+ rawResponse: true;
30
+ params?: InternalQueryParams;
31
+ }): Promise<AxiosResponse<ApiLeave, any>>;
32
+ update(id: number, data: Partial<ApiLeave>, options: Options<InternalQueryParams>): Promise<Leave>;
33
+ delete(id: number): Promise<number>;
34
+ delete(id: number, options: {
35
+ rawResponse: true;
36
+ params?: InternalQueryParams;
37
+ }): Promise<AxiosResponse<ApiLeave, any>>;
38
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
39
+ }
40
+ export { LeaveService };
@@ -0,0 +1,42 @@
1
+ import { Service } from './index.js';
2
+ import { Leave } from '../models/leave.model.js';
3
+ import { ErrorResponse } from '../models/error-response.model.js';
4
+ import { LeaveType } from '../models/leave-type.model.js';
5
+ class LeaveService extends Service {
6
+ constructor() {
7
+ super();
8
+ this.apiPath = '/leave';
9
+ }
10
+ create(data, options) {
11
+ return super.fetch({ url: `${this.apiPath}`, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : [...res.data.map((leave) => new Leave(leave))]), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
12
+ }
13
+ get(id, options) {
14
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new Leave(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
15
+ }
16
+ async *list(options) {
17
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
18
+ yield new Leave(res);
19
+ }
20
+ }
21
+ async *listLeaveTypes(options) {
22
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
23
+ yield new LeaveType(res);
24
+ }
25
+ }
26
+ listByPage(options) {
27
+ return super.iterator({ url: this.apiPath }, options).byPage();
28
+ }
29
+ update(id, data, options) {
30
+ return super
31
+ .fetch({
32
+ url: `${this.apiPath}/${id}`,
33
+ data,
34
+ method: 'POST',
35
+ })
36
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new Leave(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
37
+ }
38
+ delete(id, options) {
39
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
40
+ }
41
+ }
42
+ export { LeaveService };
@@ -0,0 +1,38 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiLocation } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { Location } from '../models/location.model.js';
5
+ import { LocationsQueryParams } from '../interfaces/query-params/locations-query-params.interface.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ declare type RequiredProps = 'name';
8
+ declare class LocationsService extends Service {
9
+ private apiPath;
10
+ constructor();
11
+ create(data: RequirementsOf<ApiLocation, RequiredProps>): Promise<Location>;
12
+ create(data: RequirementsOf<ApiLocation, RequiredProps>, options: {
13
+ rawResponse: true;
14
+ params?: InternalQueryParams;
15
+ }): Promise<AxiosResponse<ApiLocation, any>>;
16
+ create(data: RequirementsOf<ApiLocation, RequiredProps>, options: Options<InternalQueryParams>): Promise<ApiLocation>;
17
+ get(id: number): Promise<Location>;
18
+ get(id: number, options: {
19
+ rawResponse: true;
20
+ params?: InternalQueryParams;
21
+ }): Promise<AxiosResponse<ApiLocation, any>>;
22
+ get(id: number, options: Options<InternalQueryParams>): Promise<ApiLocation>;
23
+ list(options?: Options<LocationsQueryParams & InternalQueryParams>): AsyncGenerator<Location, void, unknown>;
24
+ listByPage(options?: Options<LocationsQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiLocation[], any>, any, unknown>;
25
+ update(id: number, data: Partial<ApiLocation>): Promise<Location>;
26
+ update(id: number, data: Partial<ApiLocation>, options: {
27
+ rawResponse: true;
28
+ params?: InternalQueryParams;
29
+ }): Promise<AxiosResponse<ApiLocation, any>>;
30
+ update(id: number, data: Partial<ApiLocation>, options: Options<InternalQueryParams>): Promise<ApiLocation>;
31
+ delete(id: number): Promise<number>;
32
+ delete(id: number, options: {
33
+ rawResponse: true;
34
+ params?: InternalQueryParams;
35
+ }): Promise<AxiosResponse<any, any>>;
36
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
37
+ }
38
+ export { LocationsService };
@@ -0,0 +1,36 @@
1
+ import { Service } from './index.js';
2
+ import { Location } from '../models/location.model.js';
3
+ import { ErrorResponse } from '../models/error-response.model.js';
4
+ class LocationsService extends Service {
5
+ constructor() {
6
+ super();
7
+ this.apiPath = '/locations';
8
+ }
9
+ create(data, options) {
10
+ return super.fetch({ url: `${this.apiPath}`, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : new Location(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
11
+ }
12
+ get(id, options) {
13
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new Location(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
14
+ }
15
+ async *list(options) {
16
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
17
+ yield new Location(res);
18
+ }
19
+ }
20
+ listByPage(options) {
21
+ return super.iterator({ url: this.apiPath }, options).byPage();
22
+ }
23
+ update(id, data, options) {
24
+ return super
25
+ .fetch({
26
+ url: `${this.apiPath}/${id}`,
27
+ data,
28
+ method: 'POST',
29
+ })
30
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new Location(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
31
+ }
32
+ delete(id, options) {
33
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
34
+ }
35
+ }
36
+ export { LocationsService };
@@ -0,0 +1,38 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiRole } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { Role } from '../models/role.model.js';
5
+ import { RolesQueryParams } from '../interfaces/query-params/roles-query-params.interface.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ declare type RequiredProps = 'name';
8
+ declare class RolesService extends Service {
9
+ private apiPath;
10
+ constructor();
11
+ create(data: RequirementsOf<ApiRole, RequiredProps>): Promise<Role>;
12
+ create(data: RequirementsOf<ApiRole, RequiredProps>, options: {
13
+ rawResponse: true;
14
+ params?: InternalQueryParams;
15
+ }): Promise<AxiosResponse<ApiRole, any>>;
16
+ create(data: RequirementsOf<ApiRole, RequiredProps>, options: Options<InternalQueryParams>): Promise<Role>;
17
+ get(id: number): Promise<Role>;
18
+ get(id: number, options: {
19
+ rawResponse: true;
20
+ params?: InternalQueryParams;
21
+ }): Promise<AxiosResponse<ApiRole, any>>;
22
+ get(id: number, options: Options<InternalQueryParams>): Promise<Role>;
23
+ list(options?: Options<RolesQueryParams & InternalQueryParams>): AsyncGenerator<Role, void, unknown>;
24
+ listByPage(options?: Options<RolesQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiRole[], any>, any, unknown>;
25
+ update(id: number, data: Partial<ApiRole>): Promise<Role>;
26
+ update(id: number, data: Partial<ApiRole>, options: {
27
+ rawResponse: true;
28
+ params?: InternalQueryParams;
29
+ }): Promise<AxiosResponse<ApiRole, any>>;
30
+ update(id: number, data: Partial<ApiRole>, options: Options<InternalQueryParams>): Promise<Role>;
31
+ delete(id: number): Promise<number>;
32
+ delete(id: number, options: {
33
+ rawResponse: true;
34
+ params?: InternalQueryParams;
35
+ }): Promise<AxiosResponse<any, any>>;
36
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
37
+ }
38
+ export { RolesService };
@@ -0,0 +1,36 @@
1
+ import { Service } from './index.js';
2
+ import { Role } from '../models/role.model.js';
3
+ import { ErrorResponse } from '../models/error-response.model.js';
4
+ class RolesService extends Service {
5
+ constructor() {
6
+ super();
7
+ this.apiPath = '/roles';
8
+ }
9
+ create(data, options) {
10
+ return super.fetch({ url: this.apiPath, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : new Role(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
11
+ }
12
+ get(id, options) {
13
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new Role(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
14
+ }
15
+ async *list(options) {
16
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
17
+ yield new Role(res);
18
+ }
19
+ }
20
+ listByPage(options) {
21
+ return super.iterator({ url: this.apiPath }, options).byPage();
22
+ }
23
+ update(id, data, options) {
24
+ return super
25
+ .fetch({
26
+ url: `${this.apiPath}/${id}`,
27
+ data,
28
+ method: 'POST',
29
+ })
30
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new Role(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
31
+ }
32
+ delete(id, options) {
33
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
34
+ }
35
+ }
36
+ export { RolesService };
@@ -0,0 +1,20 @@
1
+ import { AxiosRequestConfig, AxiosResponse } from 'axios';
2
+ export declare type RequirementsOf<T, K extends keyof T> = Required<Pick<T, K>> & Partial<T>;
3
+ export interface Options<T> {
4
+ rawResponse?: boolean;
5
+ params?: T;
6
+ }
7
+ export declare abstract class Service<ApiResponse = any> {
8
+ isLeaveRequest(endpoint?: string): boolean;
9
+ private buildQueryStr;
10
+ private getPagingObject;
11
+ fetch<T = ApiResponse>(httpOptions: AxiosRequestConfig, options?: any): Promise<AxiosResponse<T>>;
12
+ private listFetch;
13
+ private listResponses;
14
+ iterator<T = ApiResponse>(reqObject: any, options?: any): {
15
+ [Symbol.asyncIterator](): {
16
+ next(): Promise<IteratorResult<T, void>>;
17
+ };
18
+ byPage: () => AsyncGenerator<AxiosResponse<T[], any>, any, unknown>;
19
+ };
20
+ }
@@ -0,0 +1,95 @@
1
+ import axios from 'axios';
2
+ import { Rotacloud } from '../rotacloud.js';
3
+ import { Version } from '../version.js';
4
+ export class Service {
5
+ // rate limit tracking could be implemented here statically
6
+ isLeaveRequest(endpoint) {
7
+ return endpoint === '/leave_requests';
8
+ }
9
+ buildQueryStr(queryParams) {
10
+ const reducedParams = Object.entries(queryParams).reduce((params, [key, val]) => {
11
+ if (val !== undefined && val !== '') {
12
+ if (Array.isArray(val))
13
+ params.push(...val.map((item) => [`${key}[]`, String(item)]));
14
+ else
15
+ params.push([key, String(val)]);
16
+ }
17
+ return params;
18
+ }, []);
19
+ return new URLSearchParams(reducedParams).toString();
20
+ }
21
+ getPagingObject(res) {
22
+ const links = res.headers.link.split(',');
23
+ const keyVal = {};
24
+ links.forEach((link) => {
25
+ const exp = link.split(';');
26
+ const key = exp[1].replace(' rel="', '').replace('"', '').trim();
27
+ const value = exp[0].replace('<', '').replace('>', '').trim();
28
+ keyVal[key] = value;
29
+ });
30
+ return keyVal;
31
+ }
32
+ async fetch(httpOptions, options) {
33
+ const headers = {
34
+ Authorization: `Bearer ${Rotacloud.config.apiKey}`,
35
+ 'SDK-Version': Version.version,
36
+ };
37
+ if (Rotacloud.config.accountId) {
38
+ headers.Account = String(Rotacloud.config.accountId);
39
+ }
40
+ else {
41
+ // need to convert user field in payload to a header for creating leave_requests when using an API key
42
+ this.isLeaveRequest(httpOptions.url) ? (headers.User = `${httpOptions.data.user}`) : undefined;
43
+ }
44
+ const reqObject = {
45
+ ...httpOptions,
46
+ baseURL: Rotacloud.config.baseUri,
47
+ headers,
48
+ params: options?.params,
49
+ paramsSerializer: (params) => {
50
+ return params ? this.buildQueryStr(params) : '';
51
+ },
52
+ };
53
+ const response = await axios.request(reqObject);
54
+ return response;
55
+ }
56
+ async *listFetch(reqObject, options) {
57
+ let running = true;
58
+ do {
59
+ const res = await this.fetch(reqObject, options);
60
+ if (res.headers.link) {
61
+ const pagingObject = this.getPagingObject(res);
62
+ if (pagingObject.last) {
63
+ reqObject.url = pagingObject.next;
64
+ }
65
+ else {
66
+ running = false;
67
+ }
68
+ }
69
+ else {
70
+ running = false;
71
+ }
72
+ yield await res;
73
+ } while (running);
74
+ }
75
+ async *listResponses(reqObject, options) {
76
+ for await (const res of this.listFetch(reqObject, options)) {
77
+ yield* res.data;
78
+ }
79
+ }
80
+ iterator(reqObject, options) {
81
+ const iterator = this.listResponses(reqObject, options);
82
+ return {
83
+ [Symbol.asyncIterator]() {
84
+ return {
85
+ next() {
86
+ return iterator.next();
87
+ },
88
+ };
89
+ },
90
+ byPage: () => {
91
+ return this.listFetch(reqObject, options);
92
+ },
93
+ };
94
+ }
95
+ }
@@ -0,0 +1,56 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiShift } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { Shift } from '../models/shift.model.js';
5
+ import { ShiftsQueryParams } from '../interfaces/query-params/shifts-query-params.interface.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ declare type RequiredProps = 'end_time' | 'start_time' | 'location';
8
+ declare class ShiftsService extends Service {
9
+ private apiPath;
10
+ constructor();
11
+ create(data: RequirementsOf<ApiShift, RequiredProps>): Promise<Shift>;
12
+ create(data: RequirementsOf<ApiShift, RequiredProps>, options: {
13
+ rawResponse: true;
14
+ params?: InternalQueryParams;
15
+ }): Promise<AxiosResponse<ApiShift, any>>;
16
+ create(data: RequirementsOf<ApiShift, RequiredProps>, options: Options<InternalQueryParams>): Promise<Shift>;
17
+ get(id: number): Promise<Shift>;
18
+ get(id: number, options: {
19
+ rawResponse: true;
20
+ params?: InternalQueryParams;
21
+ }): Promise<AxiosResponse<ApiShift, any>>;
22
+ get(id: number, options: Options<InternalQueryParams>): Promise<Shift>;
23
+ list(options?: Options<ShiftsQueryParams & InternalQueryParams>): AsyncGenerator<Shift, void, unknown>;
24
+ listByPage(options?: Options<ShiftsQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiShift[], any>, any, unknown>;
25
+ update(id: number, data: Partial<ApiShift>): Promise<Shift>;
26
+ update(id: number, data: Partial<ApiShift>, options: {
27
+ rawResponse: true;
28
+ params?: InternalQueryParams;
29
+ }): Promise<AxiosResponse<ApiShift, any>>;
30
+ update(id: number, data: Partial<ApiShift>, options: Options<InternalQueryParams>): Promise<Shift>;
31
+ delete(id: number): Promise<number>;
32
+ delete(id: number, options: {
33
+ rawResponse: true;
34
+ params?: InternalQueryParams;
35
+ }): Promise<AxiosResponse<any, any>>;
36
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
37
+ acknowledge(data: number[]): Promise<number>;
38
+ acknowledge(data: number[], options: {
39
+ rawResponse: true;
40
+ params?: InternalQueryParams;
41
+ }): Promise<AxiosResponse<any, any>>;
42
+ acknowledge(data: number[], options: Options<InternalQueryParams>): Promise<number>;
43
+ publish(data: number[]): Promise<number>;
44
+ publish(data: number[], options: {
45
+ rawResponse: true;
46
+ params?: InternalQueryParams;
47
+ }): Promise<AxiosResponse<any, any>>;
48
+ publish(data: number[], options: Options<InternalQueryParams>): Promise<number>;
49
+ unpublish(data: number[]): Promise<number>;
50
+ unpublish(data: number[], options: {
51
+ rawResponse: true;
52
+ params?: InternalQueryParams;
53
+ }): Promise<AxiosResponse<any, any>>;
54
+ unpublish(data: number[], options: Options<InternalQueryParams>): Promise<number>;
55
+ }
56
+ export { ShiftsService };
@@ -0,0 +1,45 @@
1
+ import { Service } from './index.js';
2
+ import { Shift } from '../models/shift.model.js';
3
+ import { ErrorResponse } from '../models/error-response.model.js';
4
+ class ShiftsService extends Service {
5
+ constructor() {
6
+ super();
7
+ this.apiPath = '/shifts';
8
+ }
9
+ create(data, options) {
10
+ return super.fetch({ url: this.apiPath, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : new Shift(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
11
+ }
12
+ get(id, options) {
13
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new Shift(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
14
+ }
15
+ async *list(options) {
16
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
17
+ yield new Shift(res);
18
+ }
19
+ }
20
+ listByPage(options) {
21
+ return super.iterator({ url: this.apiPath }, options).byPage();
22
+ }
23
+ update(id, data, options) {
24
+ return super
25
+ .fetch({
26
+ url: `${this.apiPath}/${id}`,
27
+ data,
28
+ method: 'POST',
29
+ })
30
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new Shift(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
31
+ }
32
+ delete(id, options) {
33
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
34
+ }
35
+ acknowledge(data, options) {
36
+ return super.fetch({ url: '/shifts_acknowledged', data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
37
+ }
38
+ publish(data, options) {
39
+ return super.fetch({ url: '/shifts_published', data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
40
+ }
41
+ unpublish(data, options) {
42
+ return super.fetch({ url: '/shifts_published', data, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
43
+ }
44
+ }
45
+ export { ShiftsService };
@@ -0,0 +1,38 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiUser } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { User } from '../models/user.model.js';
5
+ import { UsersQueryParams } from '../interfaces/query-params/users-query-params.interface.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ declare type RequiredProps = 'first_name' | 'last_name';
8
+ declare class UsersService extends Service {
9
+ private apiPath;
10
+ constructor();
11
+ create(data: RequirementsOf<ApiUser, RequiredProps>): Promise<User>;
12
+ create(data: RequirementsOf<ApiUser, RequiredProps>, options: {
13
+ rawResponse: true;
14
+ params?: InternalQueryParams;
15
+ }): Promise<AxiosResponse<ApiUser, any>>;
16
+ create(data: RequirementsOf<ApiUser, RequiredProps>, options: Options<InternalQueryParams>): Promise<User>;
17
+ get(id: number): Promise<User>;
18
+ get(id: number, options: {
19
+ rawResponse: true;
20
+ params?: InternalQueryParams;
21
+ }): Promise<AxiosResponse<ApiUser, any>>;
22
+ get(id: number, options: Options<InternalQueryParams>): Promise<User>;
23
+ list(options?: Options<UsersQueryParams & InternalQueryParams>): AsyncGenerator<User, void, unknown>;
24
+ listByPage(options?: Options<UsersQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiUser[], any>, any, unknown>;
25
+ update(id: number, data: Partial<ApiUser>): Promise<User>;
26
+ update(id: number, data: Partial<ApiUser>, options: {
27
+ rawResponse: true;
28
+ params?: InternalQueryParams;
29
+ }): Promise<AxiosResponse<ApiUser, any>>;
30
+ update(id: number, data: Partial<ApiUser>, options: Options<InternalQueryParams>): Promise<User>;
31
+ delete(id: number): Promise<number>;
32
+ delete(id: number, options: {
33
+ rawResponse: true;
34
+ params?: InternalQueryParams;
35
+ }): Promise<AxiosResponse<any, any>>;
36
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
37
+ }
38
+ export { UsersService };
@@ -0,0 +1,36 @@
1
+ import { Service } from './index.js';
2
+ import { User } from '../models/user.model.js';
3
+ import { ErrorResponse } from '../models/error-response.model.js';
4
+ class UsersService extends Service {
5
+ constructor() {
6
+ super();
7
+ this.apiPath = '/users';
8
+ }
9
+ create(data, options) {
10
+ return super.fetch({ url: this.apiPath, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : new User(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
11
+ }
12
+ get(id, options) {
13
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new User(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
14
+ }
15
+ async *list(options) {
16
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
17
+ yield new User(res);
18
+ }
19
+ }
20
+ listByPage(options) {
21
+ return super.iterator({ url: this.apiPath }, options).byPage();
22
+ }
23
+ update(id, data, options) {
24
+ return super
25
+ .fetch({
26
+ url: `${this.apiPath}/${id}`,
27
+ data,
28
+ method: 'POST',
29
+ })
30
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new User(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
31
+ }
32
+ delete(id, options) {
33
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
34
+ }
35
+ }
36
+ export { UsersService };
@@ -0,0 +1,3 @@
1
+ export declare const Version: {
2
+ version: string;
3
+ };
@@ -0,0 +1 @@
1
+ export const Version = { version: "1.0.4" };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rotacloud",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "The RotaCloud SDK for the RotaCloud API",
5
5
  "engines": {
6
6
  "node": ">=14.17.0"
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const Version = { version: "1.0.1" }
1
+ export const Version = { version: "1.0.4" }