rotacloud 1.0.2 → 1.0.5

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