pha-hermes 1.3.1 → 1.4.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.
@@ -4,6 +4,7 @@ export declare class SFAuthenticator {
4
4
  authenticatedAxiosInstance: AxiosInstance;
5
5
  token: string | undefined;
6
6
  private refreshToken;
7
+ private tokenRefreshPromise;
7
8
  constructor(authenticatedAxiosInstance: AxiosInstance, baseUrl?: string);
8
9
  initializeAuth(clientId: string, clientSecret: string): Promise<void>;
9
10
  postToken(clientId?: string, clientSecret?: string): Promise<string>;
@@ -1,5 +1,5 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { Practitioner } from '../../models/practitioner';
2
+ import { Practitioner } from '../../models';
3
3
  export declare class SFPractitionerClient {
4
4
  private axiosInstance;
5
5
  constructor(axiosInstance: AxiosInstance);
@@ -5,8 +5,7 @@ export declare class SFTimesheetClient {
5
5
  constructor(axiosInstance: AxiosInstance);
6
6
  updateTimesheetHour(timesheetHourId: string, timesheet: TimesheetDayEntry): Promise<void>;
7
7
  getTimesheetId(workorderId: string): Promise<string>;
8
- getTimesheetsForPractitioner(personnelID: string): Promise<any>;
9
- getTimesheetsIdAndDateForPractitioner(personnelID: string): Promise<any>;
8
+ getTimesheetsForPractitioner(personnelID: string): Promise<any[]>;
10
9
  getTimesheetHoursIds(workorderId: string): Promise<string[]>;
11
10
  getTimesheetHours(workorderId: string): Promise<TimesheetDayEntry[]>;
12
11
  }
@@ -7,6 +7,11 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
7
7
  var axios = _interopDefault(require('axios'));
8
8
  var FormData = _interopDefault(require('form-data'));
9
9
 
10
+ function _arrayLikeToArray(r, a) {
11
+ (null == a || a > r.length) && (a = r.length);
12
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
13
+ return n;
14
+ }
10
15
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
11
16
  try {
12
17
  var i = n[a](c),
@@ -32,6 +37,23 @@ function _asyncToGenerator(n) {
32
37
  });
33
38
  };
34
39
  }
40
+ function _createForOfIteratorHelperLoose(r, e) {
41
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
42
+ if (t) return (t = t.call(r)).next.bind(t);
43
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
44
+ t && (r = t);
45
+ var o = 0;
46
+ return function () {
47
+ return o >= r.length ? {
48
+ done: !0
49
+ } : {
50
+ done: !1,
51
+ value: r[o++]
52
+ };
53
+ };
54
+ }
55
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
56
+ }
35
57
  function _regeneratorRuntime() {
36
58
  _regeneratorRuntime = function () {
37
59
  return e;
@@ -333,32 +355,98 @@ function _regeneratorRuntime() {
333
355
  }
334
356
  }, e;
335
357
  }
358
+ function _unsupportedIterableToArray(r, a) {
359
+ if (r) {
360
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
361
+ var t = {}.toString.call(r).slice(8, -1);
362
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
363
+ }
364
+ }
336
365
 
337
366
  var SFAuthenticator = /*#__PURE__*/function () {
338
367
  function SFAuthenticator(authenticatedAxiosInstance, baseUrl) {
339
368
  this.axiosTokenInstance = axios.create();
340
369
  this.token = undefined;
341
370
  this.refreshToken = undefined;
371
+ this.tokenRefreshPromise = null;
342
372
  this.axiosTokenInstance.defaults.baseURL = baseUrl != null ? baseUrl : 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com';
343
373
  this.authenticatedAxiosInstance = authenticatedAxiosInstance;
344
374
  }
345
375
  var _proto = SFAuthenticator.prototype;
346
376
  _proto.initializeAuth = /*#__PURE__*/function () {
347
- var _initializeAuth = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(clientId, clientSecret) {
377
+ var _initializeAuth = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clientId, clientSecret) {
378
+ var _this = this;
348
379
  var token;
349
- return _regeneratorRuntime().wrap(function _callee$(_context) {
350
- while (1) switch (_context.prev = _context.next) {
380
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
381
+ while (1) switch (_context2.prev = _context2.next) {
351
382
  case 0:
352
- _context.next = 2;
383
+ _context2.next = 2;
353
384
  return this.postToken(clientId, clientSecret);
354
385
  case 2:
355
- token = _context.sent;
386
+ token = _context2.sent;
356
387
  this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = "Bearer " + token;
357
- case 4:
388
+ this.authenticatedAxiosInstance.interceptors.response.use(function (response) {
389
+ return response;
390
+ }, /*#__PURE__*/function () {
391
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(error) {
392
+ var _error$response;
393
+ var originalRequest, newToken;
394
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
395
+ while (1) switch (_context.prev = _context.next) {
396
+ case 0:
397
+ originalRequest = error.config;
398
+ originalRequest._retryCount = originalRequest._retryCount || 0;
399
+ // If the error is 401 and we haven't exceeded max retries
400
+ if (!(((_error$response = error.response) == null ? void 0 : _error$response.status) === 401 && originalRequest._retryCount < 3)) {
401
+ _context.next = 22;
402
+ break;
403
+ }
404
+ originalRequest._retryCount++;
405
+ _context.prev = 4;
406
+ // Use existing token refresh if one is in progress
407
+ if (!_this.tokenRefreshPromise) {
408
+ _this.tokenRefreshPromise = _this.postToken(clientId, clientSecret);
409
+ }
410
+ _context.next = 8;
411
+ return _this.tokenRefreshPromise;
412
+ case 8:
413
+ newToken = _context.sent;
414
+ // Clear the refresh promise after it completes
415
+ _this.tokenRefreshPromise = null;
416
+ _this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = "Bearer " + newToken;
417
+ originalRequest.headers['Authorization'] = "Bearer " + newToken;
418
+ originalRequest.timeout = 5000;
419
+ _context.next = 15;
420
+ return Promise.race([_this.authenticatedAxiosInstance(originalRequest), new Promise(function (_, reject) {
421
+ return setTimeout(function () {
422
+ return reject(new Error('Retry request timeout'));
423
+ }, originalRequest.timeout);
424
+ })]);
425
+ case 15:
426
+ return _context.abrupt("return", _context.sent);
427
+ case 18:
428
+ _context.prev = 18;
429
+ _context.t0 = _context["catch"](4);
430
+ // Clear the refresh promise if it fails
431
+ _this.tokenRefreshPromise = null;
432
+ return _context.abrupt("return", Promise.reject(_context.t0));
433
+ case 22:
434
+ return _context.abrupt("return", Promise.reject(error));
435
+ case 23:
436
+ case "end":
437
+ return _context.stop();
438
+ }
439
+ }, _callee, null, [[4, 18]]);
440
+ }));
441
+ return function (_x3) {
442
+ return _ref.apply(this, arguments);
443
+ };
444
+ }());
445
+ case 5:
358
446
  case "end":
359
- return _context.stop();
447
+ return _context2.stop();
360
448
  }
361
- }, _callee, this);
449
+ }, _callee2, this);
362
450
  }));
363
451
  function initializeAuth(_x, _x2) {
364
452
  return _initializeAuth.apply(this, arguments);
@@ -366,55 +454,55 @@ var SFAuthenticator = /*#__PURE__*/function () {
366
454
  return initializeAuth;
367
455
  }();
368
456
  _proto.postToken = /*#__PURE__*/function () {
369
- var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clientId, clientSecret) {
457
+ var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(clientId, clientSecret) {
370
458
  var _response$data;
371
459
  var tokenFormRequestBody, response;
372
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
373
- while (1) switch (_context2.prev = _context2.next) {
460
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
461
+ while (1) switch (_context3.prev = _context3.next) {
374
462
  case 0:
375
463
  tokenFormRequestBody = new FormData();
376
464
  if (!this.refreshToken) {
377
- _context2.next = 6;
465
+ _context3.next = 6;
378
466
  break;
379
467
  }
380
468
  tokenFormRequestBody.append('refresh_token', this.refreshToken);
381
469
  tokenFormRequestBody.append('grant_type', 'refresh_token');
382
- _context2.next = 13;
470
+ _context3.next = 13;
383
471
  break;
384
472
  case 6:
385
473
  if (!(clientId && clientSecret)) {
386
- _context2.next = 12;
474
+ _context3.next = 12;
387
475
  break;
388
476
  }
389
477
  tokenFormRequestBody.append('client_id', clientId);
390
478
  tokenFormRequestBody.append('client_secret', clientSecret);
391
479
  tokenFormRequestBody.append('grant_type', 'client_credentials');
392
- _context2.next = 13;
480
+ _context3.next = 13;
393
481
  break;
394
482
  case 12:
395
483
  throw new Error('Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided');
396
484
  case 13:
397
- _context2.next = 15;
485
+ _context3.next = 15;
398
486
  return this.axiosTokenInstance.post('/services/oauth2/token', tokenFormRequestBody, {
399
487
  headers: tokenFormRequestBody.getHeaders()
400
488
  });
401
489
  case 15:
402
- response = _context2.sent;
490
+ response = _context3.sent;
403
491
  this.token = response == null || (_response$data = response.data) == null ? void 0 : _response$data['access_token'];
404
492
  if (this.token) {
405
- _context2.next = 19;
493
+ _context3.next = 19;
406
494
  break;
407
495
  }
408
496
  throw new Error('Authentication failed, could not get the access token');
409
497
  case 19:
410
- return _context2.abrupt("return", this.token);
498
+ return _context3.abrupt("return", this.token);
411
499
  case 20:
412
500
  case "end":
413
- return _context2.stop();
501
+ return _context3.stop();
414
502
  }
415
- }, _callee2, this);
503
+ }, _callee3, this);
416
504
  }));
417
- function postToken(_x3, _x4) {
505
+ function postToken(_x4, _x5) {
418
506
  return _postToken.apply(this, arguments);
419
507
  }
420
508
  return postToken;
@@ -511,7 +599,7 @@ var SFTimesheetClient = /*#__PURE__*/function () {
511
599
  }();
512
600
  _proto.getTimesheetsForPractitioner = /*#__PURE__*/function () {
513
601
  var _getTimesheetsForPractitioner = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(personnelID) {
514
- var url, query, data;
602
+ var url, query, data, timesheets, _iterator, _step, timesheet;
515
603
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
516
604
  while (1) switch (_context3.prev = _context3.next) {
517
605
  case 0:
@@ -525,8 +613,17 @@ var SFTimesheetClient = /*#__PURE__*/function () {
525
613
  });
526
614
  case 4:
527
615
  data = _context3.sent;
528
- return _context3.abrupt("return", data.data.records);
529
- case 6:
616
+ timesheets = [];
617
+ for (_iterator = _createForOfIteratorHelperLoose(data.data.records); !(_step = _iterator()).done;) {
618
+ timesheet = _step.value;
619
+ timesheets.push({
620
+ workorderId: timesheet.WorkOrder__c,
621
+ id: timesheet.Id,
622
+ updatedAt: timesheet.LastModifiedDate
623
+ });
624
+ }
625
+ return _context3.abrupt("return", timesheets);
626
+ case 8:
530
627
  case "end":
531
628
  return _context3.stop();
532
629
  }
@@ -537,114 +634,79 @@ var SFTimesheetClient = /*#__PURE__*/function () {
537
634
  }
538
635
  return getTimesheetsForPractitioner;
539
636
  }();
540
- _proto.getTimesheetsIdAndDateForPractitioner = /*#__PURE__*/function () {
541
- var _getTimesheetsIdAndDateForPractitioner = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(personnelID) {
542
- var url, query, data;
543
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
544
- while (1) switch (_context4.prev = _context4.next) {
545
- case 0:
546
- url = "/services/data/" + SF_API_VERSION + "/query";
547
- query = "SELECT Id, LastModifiedDate\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '" + personnelID + "')";
548
- _context4.next = 4;
549
- return this.axiosInstance.get(url, {
550
- params: {
551
- q: query
552
- }
553
- });
554
- case 4:
555
- data = _context4.sent;
556
- return _context4.abrupt("return", data.data.records.map(function (_ref) {
557
- var Id = _ref.Id,
558
- LastModifiedDate = _ref.LastModifiedDate;
559
- return {
560
- Id: Id,
561
- LastModifiedDate: LastModifiedDate
562
- };
563
- }));
564
- case 6:
565
- case "end":
566
- return _context4.stop();
567
- }
568
- }, _callee4, this);
569
- }));
570
- function getTimesheetsIdAndDateForPractitioner(_x5) {
571
- return _getTimesheetsIdAndDateForPractitioner.apply(this, arguments);
572
- }
573
- return getTimesheetsIdAndDateForPractitioner;
574
- }();
575
637
  _proto.getTimesheetHoursIds = /*#__PURE__*/function () {
576
- var _getTimesheetHoursIds = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(workorderId) {
638
+ var _getTimesheetHoursIds = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(workorderId) {
577
639
  var timesheetId, url, query, _yield$this$axiosInst2, records;
578
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
579
- while (1) switch (_context5.prev = _context5.next) {
640
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
641
+ while (1) switch (_context4.prev = _context4.next) {
580
642
  case 0:
581
- _context5.next = 2;
643
+ _context4.next = 2;
582
644
  return this.getTimesheetId(workorderId);
583
645
  case 2:
584
- timesheetId = _context5.sent;
646
+ timesheetId = _context4.sent;
585
647
  // First we find the correct timesheet hours id
586
648
  url = "/services/data/" + SF_API_VERSION + "/query";
587
649
  query = "SELECT Id\n FROM TimesheetHour__c\n WHERE Timesheet__c = '" + timesheetId + "'";
588
- _context5.next = 7;
650
+ _context4.next = 7;
589
651
  return this.axiosInstance.get(url, {
590
652
  params: {
591
653
  q: query
592
654
  }
593
655
  });
594
656
  case 7:
595
- _yield$this$axiosInst2 = _context5.sent;
657
+ _yield$this$axiosInst2 = _context4.sent;
596
658
  records = _yield$this$axiosInst2.data.records;
597
- return _context5.abrupt("return", records.map(function (_ref2) {
598
- var Id = _ref2.Id;
659
+ return _context4.abrupt("return", records.map(function (_ref) {
660
+ var Id = _ref.Id;
599
661
  return Id;
600
662
  }));
601
663
  case 10:
602
664
  case "end":
603
- return _context5.stop();
665
+ return _context4.stop();
604
666
  }
605
- }, _callee5, this);
667
+ }, _callee4, this);
606
668
  }));
607
- function getTimesheetHoursIds(_x6) {
669
+ function getTimesheetHoursIds(_x5) {
608
670
  return _getTimesheetHoursIds.apply(this, arguments);
609
671
  }
610
672
  return getTimesheetHoursIds;
611
673
  }();
612
674
  _proto.getTimesheetHours = /*#__PURE__*/function () {
613
- var _getTimesheetHours = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(workorderId) {
675
+ var _getTimesheetHours = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(workorderId) {
614
676
  var _this = this;
615
677
  var timesheetHourIds;
616
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
617
- while (1) switch (_context7.prev = _context7.next) {
678
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
679
+ while (1) switch (_context6.prev = _context6.next) {
618
680
  case 0:
619
- _context7.next = 2;
681
+ _context6.next = 2;
620
682
  return this.getTimesheetHoursIds(workorderId);
621
683
  case 2:
622
- timesheetHourIds = _context7.sent;
623
- return _context7.abrupt("return", Promise.all(timesheetHourIds.map(/*#__PURE__*/function () {
624
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(id) {
625
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
626
- while (1) switch (_context6.prev = _context6.next) {
684
+ timesheetHourIds = _context6.sent;
685
+ return _context6.abrupt("return", Promise.all(timesheetHourIds.map(/*#__PURE__*/function () {
686
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(id) {
687
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
688
+ while (1) switch (_context5.prev = _context5.next) {
627
689
  case 0:
628
- return _context6.abrupt("return", _this.axiosInstance.get("/services/data/" + SF_API_VERSION + "/sobjects/TimeSheetHour__c/" + id).then(function (res) {
690
+ return _context5.abrupt("return", _this.axiosInstance.get("/services/data/" + SF_API_VERSION + "/sobjects/TimeSheetHour__c/" + id).then(function (res) {
629
691
  return res.data;
630
692
  }).then(toTimesheetDayEntry));
631
693
  case 1:
632
694
  case "end":
633
- return _context6.stop();
695
+ return _context5.stop();
634
696
  }
635
- }, _callee6);
697
+ }, _callee5);
636
698
  }));
637
- return function (_x8) {
638
- return _ref3.apply(this, arguments);
699
+ return function (_x7) {
700
+ return _ref2.apply(this, arguments);
639
701
  };
640
702
  }())));
641
703
  case 4:
642
704
  case "end":
643
- return _context7.stop();
705
+ return _context6.stop();
644
706
  }
645
- }, _callee7, this);
707
+ }, _callee6, this);
646
708
  }));
647
- function getTimesheetHours(_x7) {
709
+ function getTimesheetHours(_x6) {
648
710
  return _getTimesheetHours.apply(this, arguments);
649
711
  }
650
712
  return getTimesheetHours;
@@ -1 +1 @@
1
- {"version":3,"file":"pha-hermes.cjs.development.js","sources":["../src/api/auth/auth.ts","../src/api/timesheet/timesheetClient.ts","../src/api/practitioner/practitionerClient.ts","../src/api/workorder/workorderClient.ts","../src/api/apiClient.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\nimport FormData from 'form-data'\n\nexport class SFAuthenticator {\n axiosTokenInstance: AxiosInstance = axios.create()\n authenticatedAxiosInstance: AxiosInstance\n token: string | undefined = undefined\n private refreshToken: string | undefined = undefined\n\n constructor(authenticatedAxiosInstance: AxiosInstance, baseUrl?: string) {\n this.axiosTokenInstance.defaults.baseURL =\n baseUrl ?? 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com'\n this.authenticatedAxiosInstance = authenticatedAxiosInstance\n }\n\n async initializeAuth(clientId: string, clientSecret: string) {\n const token = await this.postToken(clientId, clientSecret)\n this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = `Bearer ${token}`\n }\n\n async postToken(clientId?: string, clientSecret?: string): Promise<string> {\n const tokenFormRequestBody = new FormData()\n if (this.refreshToken) {\n tokenFormRequestBody.append('refresh_token', this.refreshToken)\n tokenFormRequestBody.append('grant_type', 'refresh_token')\n } else if (clientId && clientSecret) {\n tokenFormRequestBody.append('client_id', clientId)\n tokenFormRequestBody.append('client_secret', clientSecret)\n tokenFormRequestBody.append('grant_type', 'client_credentials')\n } else {\n throw new Error(\n 'Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided'\n )\n }\n\n const response = await this.axiosTokenInstance.post(\n '/services/oauth2/token',\n tokenFormRequestBody,\n {\n headers: tokenFormRequestBody.getHeaders()\n }\n )\n\n this.token = response?.data?.['access_token']\n if (!this.token) throw new Error('Authentication failed, could not get the access token')\n return this.token\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { TimesheetDayEntry } from '../../models'\nimport { SF_API_VERSION } from '../apiClient'\n\nexport class SFTimesheetClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n async updateTimesheetHour(timesheetHourId: string, timesheet: TimesheetDayEntry) {\n try {\n const url = `/services/data/${SF_API_VERSION}/sobjects/TimeSheetHour__c/${timesheetHourId}`\n const response = await this.axiosInstance.patch(url, {\n Date__c: timesheet.date,\n Callback__c: timesheet.callbackHours,\n HoursEBAdjusted__c: timesheet.regularHours,\n Misc__c: timesheet.miscHours,\n OT1__c: timesheet.overtime1Hours,\n OT2__c: timesheet.overtime2Hours,\n OnCall__c: timesheet.onCallHours,\n Misc1__c: timesheet.misc1HoursA,\n Misc_1_Hours__c: timesheet.misc1HoursB,\n Misc_2_Hours__c: timesheet.misc2Hours,\n Misc_3_Hours__c: timesheet.misc3Hours,\n Misc_4_Hours__c: timesheet.misc4Hours,\n Stat1__c: timesheet.stat1Hours,\n Stat2__c: timesheet.stat2Hours,\n In_Charge__c: timesheet.inChargeHours,\n Shift_Travel_Stipend__c: timesheet.shiftTravelPerDiemHours\n })\n\n if (![200, 204, 304].includes(response.status))\n throw new Error(`got error status code ${response.status}`)\n } catch (error) {\n console.error('Error Updating Timesheet Hour: ', error.message)\n }\n }\n\n async getTimesheetId(workorderId: string): Promise<string> {\n // First we find the correct timesheet id\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Id\n FROM Timesheet__c\n WHERE WorkOrder__c = '${workorderId}'\n LIMIT 1`\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n return records[0].Id\n }\n\n async getTimesheetsForPractitioner(personnelID: string) {\n const url = `/services/data/${SF_API_VERSION}/query`\n\n const query = `SELECT FIELDS(STANDARD), WorkOrder__c\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '${personnelID}')`\n\n const data = await this.axiosInstance.get(url, { params: { q: query } })\n\n return data.data.records\n }\n\n async getTimesheetsIdAndDateForPractitioner(personnelID: string) {\n const url = `/services/data/${SF_API_VERSION}/query`\n\n const query = `SELECT Id, LastModifiedDate\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '${personnelID}')`\n\n const data = await this.axiosInstance.get(url, { params: { q: query } })\n\n return data.data.records.map(({ Id, LastModifiedDate }) => ({ Id, LastModifiedDate }))\n }\n\n\n async getTimesheetHoursIds(workorderId: string): Promise<string[]> {\n const timesheetId = await this.getTimesheetId(workorderId)\n // First we find the correct timesheet hours id\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Id\n FROM TimesheetHour__c\n WHERE Timesheet__c = '${timesheetId}'`\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n return records.map(({ Id }) => Id)\n }\n\n async getTimesheetHours(workorderId: string): Promise<TimesheetDayEntry[]> {\n const timesheetHourIds = await this.getTimesheetHoursIds(workorderId)\n return Promise.all(\n timesheetHourIds.map(async id =>\n this.axiosInstance\n .get(`/services/data/${SF_API_VERSION}/sobjects/TimeSheetHour__c/${id}`)\n .then(res => res.data)\n .then(toTimesheetDayEntry)\n )\n )\n }\n}\n\nfunction toTimesheetDayEntry(raw: any): TimesheetDayEntry {\n return {\n id: raw.Id,\n date: raw.Date__c,\n callbackHours: raw.Callback__c,\n regularHours: raw.HoursEBAdjusted__c,\n miscHours: raw.Misc__c,\n overtime1Hours: raw.OT1__c,\n overtime2Hours: raw.OT2__c,\n onCallHours: raw.OnCall__c,\n misc1HoursA: raw.Misc1__c,\n misc1HoursB: raw.Misc_1_Hours__c,\n misc2Hours: raw.Misc_2_Hours__c,\n misc3Hours: raw.Misc_3_Hours__c,\n misc4Hours: raw.Misc_4_Hours__c,\n stat1Hours: raw.Stat1__c,\n stat2Hours: raw.Stat2__c,\n inChargeHours: raw.In_Charge__c,\n shiftTravelPerDiemHours: raw.Shift_Travel_Stipend__c,\n lastModified: raw.LastModifiedDate\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { Practitioner } from '../../models/practitioner'\nimport { SF_API_VERSION } from '../apiClient'\n\nexport class SFPractitionerClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n async fetchPractitioners(): Promise<Practitioner[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `\n SELECT Id, FirstName__c, LastName__c, Email__c, StaffID__c\n FROM Personnel__c\n WHERE Status__c = 'Active'\n `\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n\n return records.map(toPractitioner)\n } catch (error) {\n console.error('Error fetching practitioners: ', error.message)\n throw error\n }\n }\n}\n\nfunction toPractitioner(raw: any): Practitioner {\n return {\n id: raw.Id,\n firstName: raw.FirstName__c,\n lastName: raw.LastName__c,\n email: raw.Email__c,\n staffId: raw.StaffID__c\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { SF_API_VERSION } from '../apiClient'\nimport { Workorder } from '../../models'\n\nexport class SFWorkorderClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n\n async getWorkordersForPractitioner(practitionerId?: string): Promise<Workorder[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = practitionerId\n ? `SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c WHERE Personnel__c = '${practitionerId}'`\n : `SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c`\n return await this.axiosInstance\n .get(url, {\n params: { q: query }\n })\n .then(({ data: { records } }) =>\n records.map(\n (record): Workorder => ({\n id: record.Id,\n establishmentId: record.HospitalID__c,\n establishmentName: record.HospitalName__c,\n role: record.ProfessionalDesignation__c,\n practitionerId: record.Personnel__c,\n startDate: new Date(record.startdate__c),\n endDate: new Date(record.EndDate__c),\n createdAt: new Date(record.CreatedDate),\n updatedAt: new Date(record.LastModifiedDate)\n })\n )\n )\n } catch (error) {\n console.error('Error fetching work orders: ', error.message)\n throw error\n }\n }\n}","import axios, { AxiosInstance } from 'axios'\nimport { SFAuthenticator } from './auth/auth'\nimport { SFTimesheetClient } from './timesheet/timesheetClient'\nimport { SFPractitionerClient } from './practitioner/practitionerClient'\nimport { Role } from '../models'\nimport { SFWorkorderClient } from './workorder/workorderClient'\n\nexport const SF_API_VERSION: string = 'v57.0'\n\nexport class SFApiClient {\n private instance: SFApiClient | undefined = undefined\n private axiosInstance: AxiosInstance = axios.create()\n private authenticator: SFAuthenticator\n private baseUrl: string\n timesheetClient: SFTimesheetClient\n workorderClient: SFWorkorderClient\n practitionerClient: SFPractitionerClient\n\n constructor(baseUrl?: string) {\n this.baseUrl = baseUrl\n this.axiosInstance.defaults.baseURL =\n baseUrl ?? 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com'\n this.authenticator = new SFAuthenticator(this.axiosInstance, this.baseUrl)\n this.timesheetClient = new SFTimesheetClient(this.axiosInstance)\n this.workorderClient = new SFWorkorderClient(this.axiosInstance)\n this.practitionerClient = new SFPractitionerClient(this.axiosInstance)\n }\n\n async init(sfClientId: string, sfClientSecret: string) {\n // creates authenticator and adds token to axios instance\n await this.authenticator.initializeAuth(sfClientId, sfClientSecret)\n }\n\n setInstance(instance: SFApiClient) {\n this.instance = instance\n }\n getInstance(): SFApiClient {\n return this.instance\n }\n\n async fetchRoles(): Promise<Role[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Label, Value FROM PicklistValueInfo \\\n WHERE EntityParticle.EntityDefinition.QualifiedApiName = 'WorkOrder__c'\\\n AND EntityParticle.QualifiedApiName = 'ProfessionalDesignation__c' \\\n AND isActive = true`\n return this.axiosInstance\n .get(url, {\n params: { q: query }\n })\n .then(({ data: { records } }) =>\n records.map(\n (record): Role => ({\n label: record.Label,\n value: record.Value\n })\n )\n )\n } catch (error) {\n console.error('Error fetching roles: ', error.message)\n throw error\n }\n }\n}\n"],"names":["SFAuthenticator","authenticatedAxiosInstance","baseUrl","axios","create","undefined","axiosTokenInstance","defaults","baseURL","_proto","prototype","initializeAuth","_initializeAuth","_asyncToGenerator","_regeneratorRuntime","mark","_callee","clientId","clientSecret","token","wrap","_callee$","_context","prev","next","postToken","sent","headers","common","stop","_x","_x2","apply","arguments","_postToken","_callee2","_response$data","tokenFormRequestBody","response","_callee2$","_context2","FormData","refreshToken","append","Error","post","getHeaders","data","abrupt","_x3","_x4","SFTimesheetClient","axiosInstance","updateTimesheetHour","_updateTimesheetHour","timesheetHourId","timesheet","url","SF_API_VERSION","patch","Date__c","date","Callback__c","callbackHours","HoursEBAdjusted__c","regularHours","Misc__c","miscHours","OT1__c","overtime1Hours","OT2__c","overtime2Hours","OnCall__c","onCallHours","Misc1__c","misc1HoursA","Misc_1_Hours__c","misc1HoursB","Misc_2_Hours__c","misc2Hours","Misc_3_Hours__c","misc3Hours","Misc_4_Hours__c","misc4Hours","Stat1__c","stat1Hours","Stat2__c","stat2Hours","In_Charge__c","inChargeHours","Shift_Travel_Stipend__c","shiftTravelPerDiemHours","includes","status","t0","console","error","message","getTimesheetId","_getTimesheetId","workorderId","query","_yield$this$axiosInst","records","get","params","q","Id","getTimesheetsForPractitioner","_getTimesheetsForPractitioner","_callee3","personnelID","_callee3$","_context3","getTimesheetsIdAndDateForPractitioner","_getTimesheetsIdAndDateForPractitioner","_callee4","_callee4$","_context4","map","_ref","LastModifiedDate","_x5","getTimesheetHoursIds","_getTimesheetHoursIds","_callee5","timesheetId","_yield$this$axiosInst2","_callee5$","_context5","_ref2","_x6","getTimesheetHours","_getTimesheetHours","_callee7","_this","timesheetHourIds","_callee7$","_context7","Promise","all","_ref3","_callee6","id","_callee6$","_context6","then","res","toTimesheetDayEntry","_x8","_x7","raw","lastModified","SFPractitionerClient","fetchPractitioners","_fetchPractitioners","toPractitioner","firstName","FirstName__c","lastName","LastName__c","email","Email__c","staffId","StaffID__c","SFWorkorderClient","getWorkordersForPractitioner","_getWorkordersForPractitioner","practitionerId","record","establishmentId","HospitalID__c","establishmentName","HospitalName__c","role","ProfessionalDesignation__c","Personnel__c","startDate","Date","startdate__c","endDate","EndDate__c","createdAt","CreatedDate","updatedAt","SFApiClient","authenticator","timesheetClient","workorderClient","practitionerClient","init","_init","sfClientId","sfClientSecret","setInstance","instance","getInstance","fetchRoles","_fetchRoles","label","Label","value","Value"],"mappings":"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"}
1
+ {"version":3,"file":"pha-hermes.cjs.development.js","sources":["../src/api/auth/auth.ts","../src/api/timesheet/timesheetClient.ts","../src/api/practitioner/practitionerClient.ts","../src/api/workorder/workorderClient.ts","../src/api/apiClient.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\nimport FormData from 'form-data'\n\nexport class SFAuthenticator {\n axiosTokenInstance: AxiosInstance = axios.create()\n authenticatedAxiosInstance: AxiosInstance\n token: string | undefined = undefined\n private refreshToken: string | undefined = undefined\n private tokenRefreshPromise: Promise<string> | null = null\n\n constructor(authenticatedAxiosInstance: AxiosInstance, baseUrl?: string) {\n this.axiosTokenInstance.defaults.baseURL =\n baseUrl ?? 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com'\n this.authenticatedAxiosInstance = authenticatedAxiosInstance\n }\n\n async initializeAuth(clientId: string, clientSecret: string) {\n const token = await this.postToken(clientId, clientSecret)\n this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = `Bearer ${token}`\n\n this.authenticatedAxiosInstance.interceptors.response.use(\n response => response,\n async error => {\n const originalRequest = error.config\n originalRequest._retryCount = originalRequest._retryCount || 0\n\n // If the error is 401 and we haven't exceeded max retries\n if (error.response?.status === 401 && originalRequest._retryCount < 3) {\n originalRequest._retryCount++\n\n try {\n // Use existing token refresh if one is in progress\n if (!this.tokenRefreshPromise) {\n this.tokenRefreshPromise = this.postToken(clientId, clientSecret)\n }\n\n const newToken = await this.tokenRefreshPromise\n // Clear the refresh promise after it completes\n this.tokenRefreshPromise = null\n\n this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] =\n `Bearer ${newToken}`\n originalRequest.headers['Authorization'] = `Bearer ${newToken}`\n\n originalRequest.timeout = 5000\n\n return await Promise.race([\n this.authenticatedAxiosInstance(originalRequest),\n new Promise((_, reject) =>\n setTimeout(\n () => reject(new Error('Retry request timeout')),\n originalRequest.timeout\n )\n )\n ])\n } catch (refreshError) {\n // Clear the refresh promise if it fails\n this.tokenRefreshPromise = null\n return Promise.reject(refreshError)\n }\n }\n return Promise.reject(error)\n }\n )\n }\n\n async postToken(clientId?: string, clientSecret?: string): Promise<string> {\n const tokenFormRequestBody = new FormData()\n if (this.refreshToken) {\n tokenFormRequestBody.append('refresh_token', this.refreshToken)\n tokenFormRequestBody.append('grant_type', 'refresh_token')\n } else if (clientId && clientSecret) {\n tokenFormRequestBody.append('client_id', clientId)\n tokenFormRequestBody.append('client_secret', clientSecret)\n tokenFormRequestBody.append('grant_type', 'client_credentials')\n } else {\n throw new Error(\n 'Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided'\n )\n }\n\n const response = await this.axiosTokenInstance.post(\n '/services/oauth2/token',\n tokenFormRequestBody,\n {\n headers: tokenFormRequestBody.getHeaders()\n }\n )\n\n this.token = response?.data?.['access_token']\n if (!this.token) throw new Error('Authentication failed, could not get the access token')\n return this.token\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { TimesheetDayEntry } from '../../models'\nimport { SF_API_VERSION } from '../apiClient'\n\nexport class SFTimesheetClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n async updateTimesheetHour(timesheetHourId: string, timesheet: TimesheetDayEntry) {\n try {\n const url = `/services/data/${SF_API_VERSION}/sobjects/TimeSheetHour__c/${timesheetHourId}`\n const response = await this.axiosInstance.patch(url, {\n Date__c: timesheet.date,\n Callback__c: timesheet.callbackHours,\n HoursEBAdjusted__c: timesheet.regularHours,\n Misc__c: timesheet.miscHours,\n OT1__c: timesheet.overtime1Hours,\n OT2__c: timesheet.overtime2Hours,\n OnCall__c: timesheet.onCallHours,\n Misc1__c: timesheet.misc1HoursA,\n Misc_1_Hours__c: timesheet.misc1HoursB,\n Misc_2_Hours__c: timesheet.misc2Hours,\n Misc_3_Hours__c: timesheet.misc3Hours,\n Misc_4_Hours__c: timesheet.misc4Hours,\n Stat1__c: timesheet.stat1Hours,\n Stat2__c: timesheet.stat2Hours,\n In_Charge__c: timesheet.inChargeHours,\n Shift_Travel_Stipend__c: timesheet.shiftTravelPerDiemHours\n })\n\n if (![200, 204, 304].includes(response.status))\n throw new Error(`got error status code ${response.status}`)\n } catch (error) {\n console.error('Error Updating Timesheet Hour: ', error.message)\n }\n }\n\n async getTimesheetId(workorderId: string): Promise<string> {\n // First we find the correct timesheet id\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Id\n FROM Timesheet__c\n WHERE WorkOrder__c = '${workorderId}'\n LIMIT 1`\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n return records[0].Id\n }\n\n async getTimesheetsForPractitioner(personnelID: string) {\n const url = `/services/data/${SF_API_VERSION}/query`\n\n const query = `SELECT FIELDS(STANDARD), WorkOrder__c\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '${personnelID}')`\n\n const data = await this.axiosInstance.get(url, { params: { q: query } })\n\n let timesheets = []\n\n for (const timesheet of data.data.records) {\n timesheets.push({\n workorderId: timesheet.WorkOrder__c,\n id: timesheet.Id,\n updatedAt: timesheet.LastModifiedDate\n })\n }\n\n return timesheets\n }\n\n async getTimesheetHoursIds(workorderId: string): Promise<string[]> {\n const timesheetId = await this.getTimesheetId(workorderId)\n // First we find the correct timesheet hours id\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Id\n FROM TimesheetHour__c\n WHERE Timesheet__c = '${timesheetId}'`\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n return records.map(({ Id }) => Id)\n }\n\n async getTimesheetHours(workorderId: string): Promise<TimesheetDayEntry[]> {\n const timesheetHourIds = await this.getTimesheetHoursIds(workorderId)\n return Promise.all(\n timesheetHourIds.map(async id =>\n this.axiosInstance\n .get(`/services/data/${SF_API_VERSION}/sobjects/TimeSheetHour__c/${id}`)\n .then(res => res.data)\n .then(toTimesheetDayEntry)\n )\n )\n }\n}\n\nfunction toTimesheetDayEntry(raw: any): TimesheetDayEntry {\n return {\n id: raw.Id,\n date: raw.Date__c,\n callbackHours: raw.Callback__c,\n regularHours: raw.HoursEBAdjusted__c,\n miscHours: raw.Misc__c,\n overtime1Hours: raw.OT1__c,\n overtime2Hours: raw.OT2__c,\n onCallHours: raw.OnCall__c,\n misc1HoursA: raw.Misc1__c,\n misc1HoursB: raw.Misc_1_Hours__c,\n misc2Hours: raw.Misc_2_Hours__c,\n misc3Hours: raw.Misc_3_Hours__c,\n misc4Hours: raw.Misc_4_Hours__c,\n stat1Hours: raw.Stat1__c,\n stat2Hours: raw.Stat2__c,\n inChargeHours: raw.In_Charge__c,\n shiftTravelPerDiemHours: raw.Shift_Travel_Stipend__c,\n lastModified: raw.LastModifiedDate\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { Practitioner } from '../../models'\nimport { SF_API_VERSION } from '../apiClient'\n\nexport class SFPractitionerClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n async fetchPractitioners(): Promise<Practitioner[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `\n SELECT Id, FirstName__c, LastName__c, Email__c, StaffID__c\n FROM Personnel__c\n WHERE Status__c = 'Active'\n `\n const {\n data: { records }\n } = await this.axiosInstance.get(url, {\n params: { q: query }\n })\n\n return records.map(toPractitioner)\n } catch (error) {\n console.error('Error fetching practitioners: ', error.message)\n throw error\n }\n }\n}\n\nfunction toPractitioner(raw: any): Practitioner {\n return {\n id: raw.Id,\n firstName: raw.FirstName__c,\n lastName: raw.LastName__c,\n email: raw.Email__c,\n staffId: raw.StaffID__c\n }\n}\n","import { AxiosInstance } from 'axios'\nimport { SF_API_VERSION } from '../apiClient'\nimport { Workorder } from '../../models'\n\nexport class SFWorkorderClient {\n private axiosInstance: AxiosInstance\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosInstance = axiosInstance\n }\n\n\n async getWorkordersForPractitioner(practitionerId?: string): Promise<Workorder[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = practitionerId\n ? `SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c WHERE Personnel__c = '${practitionerId}'`\n : `SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c`\n return await this.axiosInstance\n .get(url, {\n params: { q: query }\n })\n .then(({ data: { records } }) =>\n records.map(\n (record): Workorder => ({\n id: record.Id,\n establishmentId: record.HospitalID__c,\n establishmentName: record.HospitalName__c,\n role: record.ProfessionalDesignation__c,\n practitionerId: record.Personnel__c,\n startDate: new Date(record.startdate__c),\n endDate: new Date(record.EndDate__c),\n createdAt: new Date(record.CreatedDate),\n updatedAt: new Date(record.LastModifiedDate)\n })\n )\n )\n } catch (error) {\n console.error('Error fetching work orders: ', error.message)\n throw error\n }\n }\n}","import axios, { AxiosInstance } from 'axios'\nimport { SFAuthenticator } from './auth/auth'\nimport { SFTimesheetClient } from './timesheet/timesheetClient'\nimport { SFPractitionerClient } from './practitioner/practitionerClient'\nimport { Role } from '../models'\nimport { SFWorkorderClient } from './workorder/workorderClient'\n\nexport const SF_API_VERSION: string = 'v57.0'\n\nexport class SFApiClient {\n private instance: SFApiClient | undefined = undefined\n private axiosInstance: AxiosInstance = axios.create()\n private authenticator: SFAuthenticator\n private baseUrl: string\n timesheetClient: SFTimesheetClient\n workorderClient: SFWorkorderClient\n practitionerClient: SFPractitionerClient\n\n constructor(baseUrl?: string) {\n this.baseUrl = baseUrl\n this.axiosInstance.defaults.baseURL =\n baseUrl ?? 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com'\n this.authenticator = new SFAuthenticator(this.axiosInstance, this.baseUrl)\n this.timesheetClient = new SFTimesheetClient(this.axiosInstance)\n this.workorderClient = new SFWorkorderClient(this.axiosInstance)\n this.practitionerClient = new SFPractitionerClient(this.axiosInstance)\n }\n\n async init(sfClientId: string, sfClientSecret: string) {\n // creates authenticator and adds token to axios instance\n await this.authenticator.initializeAuth(sfClientId, sfClientSecret)\n }\n\n setInstance(instance: SFApiClient) {\n this.instance = instance\n }\n getInstance(): SFApiClient {\n return this.instance\n }\n\n async fetchRoles(): Promise<Role[]> {\n try {\n const url = `/services/data/${SF_API_VERSION}/query`\n const query = `SELECT Label, Value FROM PicklistValueInfo \\\n WHERE EntityParticle.EntityDefinition.QualifiedApiName = 'WorkOrder__c'\\\n AND EntityParticle.QualifiedApiName = 'ProfessionalDesignation__c' \\\n AND isActive = true`\n return this.axiosInstance\n .get(url, {\n params: { q: query }\n })\n .then(({ data: { records } }) =>\n records.map(\n (record): Role => ({\n label: record.Label,\n value: record.Value\n })\n )\n )\n } catch (error) {\n console.error('Error fetching roles: ', error.message)\n throw error\n }\n }\n}\n"],"names":["SFAuthenticator","authenticatedAxiosInstance","baseUrl","axios","create","undefined","axiosTokenInstance","defaults","baseURL","_proto","prototype","initializeAuth","_initializeAuth","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","clientId","clientSecret","_this","token","wrap","_callee2$","_context2","prev","next","postToken","sent","headers","common","interceptors","response","use","_ref","_callee","error","_error$response","originalRequest","newToken","_callee$","_context","config","_retryCount","status","tokenRefreshPromise","timeout","Promise","race","_","reject","setTimeout","Error","abrupt","t0","stop","_x3","apply","arguments","_x","_x2","_postToken","_callee3","_response$data","tokenFormRequestBody","_callee3$","_context3","FormData","refreshToken","append","post","getHeaders","data","_x4","_x5","SFTimesheetClient","axiosInstance","updateTimesheetHour","_updateTimesheetHour","timesheetHourId","timesheet","url","SF_API_VERSION","patch","Date__c","date","Callback__c","callbackHours","HoursEBAdjusted__c","regularHours","Misc__c","miscHours","OT1__c","overtime1Hours","OT2__c","overtime2Hours","OnCall__c","onCallHours","Misc1__c","misc1HoursA","Misc_1_Hours__c","misc1HoursB","Misc_2_Hours__c","misc2Hours","Misc_3_Hours__c","misc3Hours","Misc_4_Hours__c","misc4Hours","Stat1__c","stat1Hours","Stat2__c","stat2Hours","In_Charge__c","inChargeHours","Shift_Travel_Stipend__c","shiftTravelPerDiemHours","includes","console","message","getTimesheetId","_getTimesheetId","workorderId","query","_yield$this$axiosInst","records","get","params","q","Id","getTimesheetsForPractitioner","_getTimesheetsForPractitioner","personnelID","timesheets","_iterator","_step","_createForOfIteratorHelperLoose","done","value","push","WorkOrder__c","id","updatedAt","LastModifiedDate","getTimesheetHoursIds","_getTimesheetHoursIds","_callee4","timesheetId","_yield$this$axiosInst2","_callee4$","_context4","map","getTimesheetHours","_getTimesheetHours","_callee6","timesheetHourIds","_callee6$","_context6","all","_ref2","_callee5","_callee5$","_context5","then","res","toTimesheetDayEntry","_x7","_x6","raw","lastModified","SFPractitionerClient","fetchPractitioners","_fetchPractitioners","toPractitioner","firstName","FirstName__c","lastName","LastName__c","email","Email__c","staffId","StaffID__c","SFWorkorderClient","getWorkordersForPractitioner","_getWorkordersForPractitioner","practitionerId","record","establishmentId","HospitalID__c","establishmentName","HospitalName__c","role","ProfessionalDesignation__c","Personnel__c","startDate","Date","startdate__c","endDate","EndDate__c","createdAt","CreatedDate","SFApiClient","authenticator","timesheetClient","workorderClient","practitionerClient","init","_init","sfClientId","sfClientSecret","setInstance","instance","getInstance","fetchRoles","_fetchRoles","label","Label","Value"],"mappings":"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"}