pha-hermes 1.3.2 → 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>;
@@ -368,26 +368,85 @@ var SFAuthenticator = /*#__PURE__*/function () {
368
368
  this.axiosTokenInstance = axios.create();
369
369
  this.token = undefined;
370
370
  this.refreshToken = undefined;
371
+ this.tokenRefreshPromise = null;
371
372
  this.axiosTokenInstance.defaults.baseURL = baseUrl != null ? baseUrl : 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com';
372
373
  this.authenticatedAxiosInstance = authenticatedAxiosInstance;
373
374
  }
374
375
  var _proto = SFAuthenticator.prototype;
375
376
  _proto.initializeAuth = /*#__PURE__*/function () {
376
- 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;
377
379
  var token;
378
- return _regeneratorRuntime().wrap(function _callee$(_context) {
379
- while (1) switch (_context.prev = _context.next) {
380
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
381
+ while (1) switch (_context2.prev = _context2.next) {
380
382
  case 0:
381
- _context.next = 2;
383
+ _context2.next = 2;
382
384
  return this.postToken(clientId, clientSecret);
383
385
  case 2:
384
- token = _context.sent;
386
+ token = _context2.sent;
385
387
  this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = "Bearer " + token;
386
- 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:
387
446
  case "end":
388
- return _context.stop();
447
+ return _context2.stop();
389
448
  }
390
- }, _callee, this);
449
+ }, _callee2, this);
391
450
  }));
392
451
  function initializeAuth(_x, _x2) {
393
452
  return _initializeAuth.apply(this, arguments);
@@ -395,55 +454,55 @@ var SFAuthenticator = /*#__PURE__*/function () {
395
454
  return initializeAuth;
396
455
  }();
397
456
  _proto.postToken = /*#__PURE__*/function () {
398
- var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clientId, clientSecret) {
457
+ var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(clientId, clientSecret) {
399
458
  var _response$data;
400
459
  var tokenFormRequestBody, response;
401
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
402
- while (1) switch (_context2.prev = _context2.next) {
460
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
461
+ while (1) switch (_context3.prev = _context3.next) {
403
462
  case 0:
404
463
  tokenFormRequestBody = new FormData();
405
464
  if (!this.refreshToken) {
406
- _context2.next = 6;
465
+ _context3.next = 6;
407
466
  break;
408
467
  }
409
468
  tokenFormRequestBody.append('refresh_token', this.refreshToken);
410
469
  tokenFormRequestBody.append('grant_type', 'refresh_token');
411
- _context2.next = 13;
470
+ _context3.next = 13;
412
471
  break;
413
472
  case 6:
414
473
  if (!(clientId && clientSecret)) {
415
- _context2.next = 12;
474
+ _context3.next = 12;
416
475
  break;
417
476
  }
418
477
  tokenFormRequestBody.append('client_id', clientId);
419
478
  tokenFormRequestBody.append('client_secret', clientSecret);
420
479
  tokenFormRequestBody.append('grant_type', 'client_credentials');
421
- _context2.next = 13;
480
+ _context3.next = 13;
422
481
  break;
423
482
  case 12:
424
483
  throw new Error('Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided');
425
484
  case 13:
426
- _context2.next = 15;
485
+ _context3.next = 15;
427
486
  return this.axiosTokenInstance.post('/services/oauth2/token', tokenFormRequestBody, {
428
487
  headers: tokenFormRequestBody.getHeaders()
429
488
  });
430
489
  case 15:
431
- response = _context2.sent;
490
+ response = _context3.sent;
432
491
  this.token = response == null || (_response$data = response.data) == null ? void 0 : _response$data['access_token'];
433
492
  if (this.token) {
434
- _context2.next = 19;
493
+ _context3.next = 19;
435
494
  break;
436
495
  }
437
496
  throw new Error('Authentication failed, could not get the access token');
438
497
  case 19:
439
- return _context2.abrupt("return", this.token);
498
+ return _context3.abrupt("return", this.token);
440
499
  case 20:
441
500
  case "end":
442
- return _context2.stop();
501
+ return _context3.stop();
443
502
  }
444
- }, _callee2, this);
503
+ }, _callee3, this);
445
504
  }));
446
- function postToken(_x3, _x4) {
505
+ function postToken(_x4, _x5) {
447
506
  return _postToken.apply(this, arguments);
448
507
  }
449
508
  return postToken;
@@ -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 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","_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","timesheets","_iterator","_step","_callee3$","_context3","_createForOfIteratorHelperLoose","done","value","push","WorkOrder__c","id","updatedAt","LastModifiedDate","getTimesheetHoursIds","_getTimesheetHoursIds","_callee4","timesheetId","_yield$this$axiosInst2","_callee4$","_context4","map","_ref","_x5","getTimesheetHours","_getTimesheetHours","_callee6","_this","timesheetHourIds","_callee6$","_context6","Promise","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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"}
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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"}
@@ -1,2 +1,2 @@
1
- "use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(exports,"__esModule",{value:!0});var e=t(require("axios")),r=t(require("form-data"));function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function a(t,e,r,n,a,o,i){try{var s=t[o](i),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,a)}function o(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function s(t){a(i,n,o,s,c,"next",t)}function c(t){a(i,n,o,s,c,"throw",t)}s(void 0)}))}}function i(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var a=0;return function(){return a>=t.length?{done:!0}:{done:!1,value:t[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(){s=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function f(t,e,r,n){var o=Object.create((e&&e.prototype instanceof m?e:m).prototype),i=new O(n||[]);return a(o,"_invoke",{value:H(t,r,i)}),o}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=f;var p="suspendedStart",d="executing",_="completed",v={};function m(){}function y(){}function g(){}var w={};h(w,i,(function(){return this}));var x=Object.getPrototypeOf,b=x&&x(x(D([])));b&&b!==r&&n.call(b,i)&&(w=b);var E=g.prototype=m.prototype=Object.create(w);function I(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function k(t,e){function r(a,o,i,s){var c=l(t[a],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,i,s)}),(function(t){r("throw",t,i,s)})):e.resolve(h).then((function(t){u.value=t,i(u)}),(function(t){return r("throw",t,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(t,n){function a(){return new e((function(e,a){r(t,n,e,a)}))}return o=o?o.then(a,a):a()}})}function H(e,r,n){var a=p;return function(o,i){if(a===d)throw Error("Generator is already running");if(a===_){if("throw"===o)throw i;return{value:t,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=L(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===p)throw a=_,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=l(e,r,n);if("normal"===u.type){if(a=n.done?_:"suspendedYield",u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=_,n.method="throw",n.arg=u.arg)}}}function L(e,r){var n=r.method,a=e.iterator[n];if(a===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,L(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=l(a,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function D(e){if(e||""===e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,o=function r(){for(;++a<e.length;)if(n.call(e,a))return r.value=e[a],r.done=!1,r;return r.value=t,r.done=!0,r};return o.next=o}}throw new TypeError(typeof e+" is not iterable")}return y.prototype=g,a(E,"constructor",{value:g,configurable:!0}),a(g,"constructor",{value:y,configurable:!0}),y.displayName=h(g,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===y||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,g):(t.__proto__=g,h(t,u,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},I(k.prototype),h(k.prototype,c,(function(){return this})),e.AsyncIterator=k,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new k(f(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},I(E),h(E,u,"Generator"),h(E,i,(function(){return this})),h(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=D,O.prototype={constructor:O,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(S),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function a(n,a){return s.type="throw",s.arg=e,r.next=n,a&&(r.method="next",r.arg=t),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),S(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var a=n.arg;S(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:D(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}var c=function(){function t(t,r){this.axiosTokenInstance=e.create(),this.token=void 0,this.refreshToken=void 0,this.axiosTokenInstance.defaults.baseURL=null!=r?r:"https://do0000000d247eaa--phealth.sandbox.my.salesforce.com",this.authenticatedAxiosInstance=t}var n=t.prototype;return n.initializeAuth=function(){var t=o(s().mark((function t(e,r){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.postToken(e,r);case 2:this.authenticatedAxiosInstance.defaults.headers.common.Authorization="Bearer "+t.sent;case 4:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),n.postToken=function(){var t=o(s().mark((function t(e,n){var a,o,i;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=new r,!this.refreshToken){t.next=6;break}o.append("refresh_token",this.refreshToken),o.append("grant_type","refresh_token"),t.next=13;break;case 6:if(!e||!n){t.next=12;break}o.append("client_id",e),o.append("client_secret",n),o.append("grant_type","client_credentials"),t.next=13;break;case 12:throw new Error("Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided");case 13:return t.next=15,this.axiosTokenInstance.post("/services/oauth2/token",o,{headers:o.getHeaders()});case 15:if(this.token=null==(i=t.sent)||null==(a=i.data)?void 0:a.access_token,this.token){t.next=19;break}throw new Error("Authentication failed, could not get the access token");case 19:return t.abrupt("return",this.token);case 20:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),t}(),u=function(){function t(t){this.axiosInstance=t}var e=t.prototype;return e.updateTimesheetHour=function(){var t=o(s().mark((function t(e,r){var n,a;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n="/services/data/"+d+"/sobjects/TimeSheetHour__c/"+e,t.next=4,this.axiosInstance.patch(n,{Date__c:r.date,Callback__c:r.callbackHours,HoursEBAdjusted__c:r.regularHours,Misc__c:r.miscHours,OT1__c:r.overtime1Hours,OT2__c:r.overtime2Hours,OnCall__c:r.onCallHours,Misc1__c:r.misc1HoursA,Misc_1_Hours__c:r.misc1HoursB,Misc_2_Hours__c:r.misc2Hours,Misc_3_Hours__c:r.misc3Hours,Misc_4_Hours__c:r.misc4Hours,Stat1__c:r.stat1Hours,Stat2__c:r.stat2Hours,In_Charge__c:r.inChargeHours,Shift_Travel_Stipend__c:r.shiftTravelPerDiemHours});case 4:if([200,204,304].includes((a=t.sent).status)){t.next=7;break}throw new Error("got error status code "+a.status);case 7:t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),console.error("Error Updating Timesheet Hour: ",t.t0.message);case 12:case"end":return t.stop()}}),t,this,[[0,9]])})));return function(e,r){return t.apply(this,arguments)}}(),e.getTimesheetId=function(){var t=o(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="/services/data/"+d+"/query",n="SELECT Id\n FROM Timesheet__c\n WHERE WorkOrder__c = '"+e+"'\n LIMIT 1",t.next=4,this.axiosInstance.get(r,{params:{q:n}});case 4:return t.abrupt("return",t.sent.data.records[0].Id);case 7:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetsForPractitioner=function(){var t=o(s().mark((function t(e){var r,n,a,o,c,u;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="/services/data/"+d+"/query",n="SELECT FIELDS(STANDARD), WorkOrder__c\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '"+e+"')",t.next=4,this.axiosInstance.get(r,{params:{q:n}});case 4:for(a=[],o=i(t.sent.data.records);!(c=o()).done;)a.push({workorderId:(u=c.value).WorkOrder__c,id:u.Id,updatedAt:u.LastModifiedDate});return t.abrupt("return",a);case 8:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetHoursIds=function(){var t=o(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getTimesheetId(e);case 2:return r="/services/data/"+d+"/query",n="SELECT Id\n FROM TimesheetHour__c\n WHERE Timesheet__c = '"+t.sent+"'",t.next=7,this.axiosInstance.get(r,{params:{q:n}});case 7:return t.abrupt("return",t.sent.data.records.map((function(t){return t.Id})));case 10:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetHours=function(){var t=o(s().mark((function t(e){var r=this;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getTimesheetHoursIds(e);case 2:return t.abrupt("return",Promise.all(t.sent.map(function(){var t=o(s().mark((function t(e){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.axiosInstance.get("/services/data/"+d+"/sobjects/TimeSheetHour__c/"+e).then((function(t){return t.data})).then(h));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())));case 4:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),t}();function h(t){return{id:t.Id,date:t.Date__c,callbackHours:t.Callback__c,regularHours:t.HoursEBAdjusted__c,miscHours:t.Misc__c,overtime1Hours:t.OT1__c,overtime2Hours:t.OT2__c,onCallHours:t.OnCall__c,misc1HoursA:t.Misc1__c,misc1HoursB:t.Misc_1_Hours__c,misc2Hours:t.Misc_2_Hours__c,misc3Hours:t.Misc_3_Hours__c,misc4Hours:t.Misc_4_Hours__c,stat1Hours:t.Stat1__c,stat2Hours:t.Stat2__c,inChargeHours:t.In_Charge__c,shiftTravelPerDiemHours:t.Shift_Travel_Stipend__c,lastModified:t.LastModifiedDate}}var f=function(){function t(t){this.axiosInstance=t}return t.prototype.fetchPractitioners=function(){var t=o(s().mark((function t(){var e;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,e="/services/data/"+d+"/query",t.next=5,this.axiosInstance.get(e,{params:{q:"\n SELECT Id, FirstName__c, LastName__c, Email__c, StaffID__c\n FROM Personnel__c\n WHERE Status__c = 'Active'\n "}});case 5:return t.abrupt("return",t.sent.data.records.map(l));case 10:throw t.prev=10,t.t0=t.catch(0),console.error("Error fetching practitioners: ",t.t0.message),t.t0;case 14:case"end":return t.stop()}}),t,this,[[0,10]])})));return function(){return t.apply(this,arguments)}}(),t}();function l(t){return{id:t.Id,firstName:t.FirstName__c,lastName:t.LastName__c,email:t.Email__c,staffId:t.StaffID__c}}var p=function(){function t(t){this.axiosInstance=t}return t.prototype.getWorkordersForPractitioner=function(){var t=o(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,r="/services/data/"+d+"/query",n=e?"SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c WHERE Personnel__c = '"+e+"'":"SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c",t.next=5,this.axiosInstance.get(r,{params:{q:n}}).then((function(t){return t.data.records.map((function(t){return{id:t.Id,establishmentId:t.HospitalID__c,establishmentName:t.HospitalName__c,role:t.ProfessionalDesignation__c,practitionerId:t.Personnel__c,startDate:new Date(t.startdate__c),endDate:new Date(t.EndDate__c),createdAt:new Date(t.CreatedDate),updatedAt:new Date(t.LastModifiedDate)}}))}));case 5:return t.abrupt("return",t.sent);case 8:throw t.prev=8,t.t0=t.catch(0),console.error("Error fetching work orders: ",t.t0.message),t.t0;case 12:case"end":return t.stop()}}),t,this,[[0,8]])})));return function(e){return t.apply(this,arguments)}}(),t}(),d="v57.0";exports.SFApiClient=function(){function t(t){this.instance=void 0,this.axiosInstance=e.create(),this.baseUrl=t,this.axiosInstance.defaults.baseURL=null!=t?t:"https://do0000000d247eaa--phealth.sandbox.my.salesforce.com",this.authenticator=new c(this.axiosInstance,this.baseUrl),this.timesheetClient=new u(this.axiosInstance),this.workorderClient=new p(this.axiosInstance),this.practitionerClient=new f(this.axiosInstance)}var r=t.prototype;return r.init=function(){var t=o(s().mark((function t(e,r){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.authenticator.initializeAuth(e,r);case 2:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),r.setInstance=function(t){this.instance=t},r.getInstance=function(){return this.instance},r.fetchRoles=function(){var t=o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.abrupt("return",this.axiosInstance.get("/services/data/"+d+"/query",{params:{q:"SELECT Label, Value FROM PicklistValueInfo WHERE EntityParticle.EntityDefinition.QualifiedApiName = 'WorkOrder__c' AND EntityParticle.QualifiedApiName = 'ProfessionalDesignation__c' AND isActive = true"}}).then((function(t){return t.data.records.map((function(t){return{label:t.Label,value:t.Value}}))})));case 6:throw t.prev=6,t.t0=t.catch(0),console.error("Error fetching roles: ",t.t0.message),t.t0;case 10:case"end":return t.stop()}}),t,this,[[0,6]])})));return function(){return t.apply(this,arguments)}}(),t}(),exports.SFAuthenticator=c,exports.SFPractitionerClient=f,exports.SFTimesheetClient=u;
1
+ "use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(exports,"__esModule",{value:!0});var e=t(require("axios")),r=t(require("form-data"));function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e,r,n,o,a,i){try{var s=t[a](i),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,o)}function a(t){return function(){var e=this,r=arguments;return new Promise((function(n,a){var i=t.apply(e,r);function s(t){o(i,n,a,s,c,"next",t)}function c(t){o(i,n,a,s,c,"throw",t)}s(void 0)}))}}function i(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(){s=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function f(t,e,r,n){var a=Object.create((e&&e.prototype instanceof m?e:m).prototype),i=new S(n||[]);return o(a,"_invoke",{value:H(t,r,i)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=f;var p="suspendedStart",d="executing",_="completed",v={};function m(){}function y(){}function g(){}var w={};h(w,i,(function(){return this}));var x=Object.getPrototypeOf,b=x&&x(x(O([])));b&&b!==r&&n.call(b,i)&&(w=b);var E=g.prototype=m.prototype=Object.create(w);function k(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function I(t,e){function r(o,a,i,s){var c=l(t[o],t,a);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,i,s)}),(function(t){r("throw",t,i,s)})):e.resolve(h).then((function(t){u.value=t,i(u)}),(function(t){return r("throw",t,i,s)}))}s(c.arg)}var a;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return a=a?a.then(o,o):o()}})}function H(e,r,n){var o=p;return function(a,i){if(o===d)throw Error("Generator is already running");if(o===_){if("throw"===a)throw i;return{value:t,done:!0}}for(n.method=a,n.arg=i;;){var s=n.delegate;if(s){var c=T(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===p)throw o=_,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var u=l(e,r,n);if("normal"===u.type){if(o=n.done?_:"suspendedYield",u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=_,n.method="throw",n.arg=u.arg)}}}function T(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,T(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var a=l(o,e.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,v;var i=a.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function L(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function S(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(L,this),this.reset(!0)}function O(e){if(e||""===e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return a.next=a}}throw new TypeError(typeof e+" is not iterable")}return y.prototype=g,o(E,"constructor",{value:g,configurable:!0}),o(g,"constructor",{value:y,configurable:!0}),y.displayName=h(g,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===y||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,g):(t.__proto__=g,h(t,u,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},k(I.prototype),h(I.prototype,c,(function(){return this})),e.AsyncIterator=I,e.async=function(t,r,n,o,a){void 0===a&&(a=Promise);var i=new I(f(t,r,n,o),a);return e.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},k(E),h(E,u,"Generator"),h(E,i,(function(){return this})),h(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=O,S.prototype={constructor:S,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return s.type="throw",s.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===t||"continue"===t)&&a.tryLoc<=e&&e<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=t,i.arg=e,a?(this.method="next",this.next=a.finallyLoc,v):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),P(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;P(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:O(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}var c=function(){function t(t,r){this.axiosTokenInstance=e.create(),this.token=void 0,this.refreshToken=void 0,this.tokenRefreshPromise=null,this.axiosTokenInstance.defaults.baseURL=null!=r?r:"https://do0000000d247eaa--phealth.sandbox.my.salesforce.com",this.authenticatedAxiosInstance=t}var n=t.prototype;return n.initializeAuth=function(){var t=a(s().mark((function t(e,r){var n=this;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.postToken(e,r);case 2:this.authenticatedAxiosInstance.defaults.headers.common.Authorization="Bearer "+t.sent,this.authenticatedAxiosInstance.interceptors.response.use((function(t){return t}),function(){var t=a(s().mark((function t(o){var a,i,c;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if((i=o.config)._retryCount=i._retryCount||0,!(401===(null==(a=o.response)?void 0:a.status)&&i._retryCount<3)){t.next=22;break}return i._retryCount++,t.prev=4,n.tokenRefreshPromise||(n.tokenRefreshPromise=n.postToken(e,r)),t.next=8,n.tokenRefreshPromise;case 8:return c=t.sent,n.tokenRefreshPromise=null,n.authenticatedAxiosInstance.defaults.headers.common.Authorization="Bearer "+c,i.headers.Authorization="Bearer "+c,i.timeout=5e3,t.next=15,Promise.race([n.authenticatedAxiosInstance(i),new Promise((function(t,e){return setTimeout((function(){return e(new Error("Retry request timeout"))}),i.timeout)}))]);case 15:return t.abrupt("return",t.sent);case 18:return t.prev=18,t.t0=t.catch(4),n.tokenRefreshPromise=null,t.abrupt("return",Promise.reject(t.t0));case 22:return t.abrupt("return",Promise.reject(o));case 23:case"end":return t.stop()}}),t,null,[[4,18]])})));return function(e){return t.apply(this,arguments)}}());case 5:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),n.postToken=function(){var t=a(s().mark((function t(e,n){var o,a,i;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=new r,!this.refreshToken){t.next=6;break}a.append("refresh_token",this.refreshToken),a.append("grant_type","refresh_token"),t.next=13;break;case 6:if(!e||!n){t.next=12;break}a.append("client_id",e),a.append("client_secret",n),a.append("grant_type","client_credentials"),t.next=13;break;case 12:throw new Error("Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided");case 13:return t.next=15,this.axiosTokenInstance.post("/services/oauth2/token",a,{headers:a.getHeaders()});case 15:if(this.token=null==(i=t.sent)||null==(o=i.data)?void 0:o.access_token,this.token){t.next=19;break}throw new Error("Authentication failed, could not get the access token");case 19:return t.abrupt("return",this.token);case 20:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),t}(),u=function(){function t(t){this.axiosInstance=t}var e=t.prototype;return e.updateTimesheetHour=function(){var t=a(s().mark((function t(e,r){var n,o;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n="/services/data/"+d+"/sobjects/TimeSheetHour__c/"+e,t.next=4,this.axiosInstance.patch(n,{Date__c:r.date,Callback__c:r.callbackHours,HoursEBAdjusted__c:r.regularHours,Misc__c:r.miscHours,OT1__c:r.overtime1Hours,OT2__c:r.overtime2Hours,OnCall__c:r.onCallHours,Misc1__c:r.misc1HoursA,Misc_1_Hours__c:r.misc1HoursB,Misc_2_Hours__c:r.misc2Hours,Misc_3_Hours__c:r.misc3Hours,Misc_4_Hours__c:r.misc4Hours,Stat1__c:r.stat1Hours,Stat2__c:r.stat2Hours,In_Charge__c:r.inChargeHours,Shift_Travel_Stipend__c:r.shiftTravelPerDiemHours});case 4:if([200,204,304].includes((o=t.sent).status)){t.next=7;break}throw new Error("got error status code "+o.status);case 7:t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),console.error("Error Updating Timesheet Hour: ",t.t0.message);case 12:case"end":return t.stop()}}),t,this,[[0,9]])})));return function(e,r){return t.apply(this,arguments)}}(),e.getTimesheetId=function(){var t=a(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="/services/data/"+d+"/query",n="SELECT Id\n FROM Timesheet__c\n WHERE WorkOrder__c = '"+e+"'\n LIMIT 1",t.next=4,this.axiosInstance.get(r,{params:{q:n}});case 4:return t.abrupt("return",t.sent.data.records[0].Id);case 7:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetsForPractitioner=function(){var t=a(s().mark((function t(e){var r,n,o,a,c,u;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="/services/data/"+d+"/query",n="SELECT FIELDS(STANDARD), WorkOrder__c\n FROM TimeSheet__c\n WHERE WorkOrder__c IN (SELECT Id\n FROM WorkOrder__c\n WHERE Personnel__c = '"+e+"')",t.next=4,this.axiosInstance.get(r,{params:{q:n}});case 4:for(o=[],a=i(t.sent.data.records);!(c=a()).done;)o.push({workorderId:(u=c.value).WorkOrder__c,id:u.Id,updatedAt:u.LastModifiedDate});return t.abrupt("return",o);case 8:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetHoursIds=function(){var t=a(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getTimesheetId(e);case 2:return r="/services/data/"+d+"/query",n="SELECT Id\n FROM TimesheetHour__c\n WHERE Timesheet__c = '"+t.sent+"'",t.next=7,this.axiosInstance.get(r,{params:{q:n}});case 7:return t.abrupt("return",t.sent.data.records.map((function(t){return t.Id})));case 10:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getTimesheetHours=function(){var t=a(s().mark((function t(e){var r=this;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getTimesheetHoursIds(e);case 2:return t.abrupt("return",Promise.all(t.sent.map(function(){var t=a(s().mark((function t(e){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.axiosInstance.get("/services/data/"+d+"/sobjects/TimeSheetHour__c/"+e).then((function(t){return t.data})).then(h));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())));case 4:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),t}();function h(t){return{id:t.Id,date:t.Date__c,callbackHours:t.Callback__c,regularHours:t.HoursEBAdjusted__c,miscHours:t.Misc__c,overtime1Hours:t.OT1__c,overtime2Hours:t.OT2__c,onCallHours:t.OnCall__c,misc1HoursA:t.Misc1__c,misc1HoursB:t.Misc_1_Hours__c,misc2Hours:t.Misc_2_Hours__c,misc3Hours:t.Misc_3_Hours__c,misc4Hours:t.Misc_4_Hours__c,stat1Hours:t.Stat1__c,stat2Hours:t.Stat2__c,inChargeHours:t.In_Charge__c,shiftTravelPerDiemHours:t.Shift_Travel_Stipend__c,lastModified:t.LastModifiedDate}}var f=function(){function t(t){this.axiosInstance=t}return t.prototype.fetchPractitioners=function(){var t=a(s().mark((function t(){var e;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,e="/services/data/"+d+"/query",t.next=5,this.axiosInstance.get(e,{params:{q:"\n SELECT Id, FirstName__c, LastName__c, Email__c, StaffID__c\n FROM Personnel__c\n WHERE Status__c = 'Active'\n "}});case 5:return t.abrupt("return",t.sent.data.records.map(l));case 10:throw t.prev=10,t.t0=t.catch(0),console.error("Error fetching practitioners: ",t.t0.message),t.t0;case 14:case"end":return t.stop()}}),t,this,[[0,10]])})));return function(){return t.apply(this,arguments)}}(),t}();function l(t){return{id:t.Id,firstName:t.FirstName__c,lastName:t.LastName__c,email:t.Email__c,staffId:t.StaffID__c}}var p=function(){function t(t){this.axiosInstance=t}return t.prototype.getWorkordersForPractitioner=function(){var t=a(s().mark((function t(e){var r,n;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,r="/services/data/"+d+"/query",n=e?"SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c WHERE Personnel__c = '"+e+"'":"SELECT Id, HospitalID__c, HospitalName__c, ProfessionalDesignation__c, Personnel__c, startdate__c, EndDate__c, CreatedDate, LastModifiedDate FROM WorkOrder__c",t.next=5,this.axiosInstance.get(r,{params:{q:n}}).then((function(t){return t.data.records.map((function(t){return{id:t.Id,establishmentId:t.HospitalID__c,establishmentName:t.HospitalName__c,role:t.ProfessionalDesignation__c,practitionerId:t.Personnel__c,startDate:new Date(t.startdate__c),endDate:new Date(t.EndDate__c),createdAt:new Date(t.CreatedDate),updatedAt:new Date(t.LastModifiedDate)}}))}));case 5:return t.abrupt("return",t.sent);case 8:throw t.prev=8,t.t0=t.catch(0),console.error("Error fetching work orders: ",t.t0.message),t.t0;case 12:case"end":return t.stop()}}),t,this,[[0,8]])})));return function(e){return t.apply(this,arguments)}}(),t}(),d="v57.0";exports.SFApiClient=function(){function t(t){this.instance=void 0,this.axiosInstance=e.create(),this.baseUrl=t,this.axiosInstance.defaults.baseURL=null!=t?t:"https://do0000000d247eaa--phealth.sandbox.my.salesforce.com",this.authenticator=new c(this.axiosInstance,this.baseUrl),this.timesheetClient=new u(this.axiosInstance),this.workorderClient=new p(this.axiosInstance),this.practitionerClient=new f(this.axiosInstance)}var r=t.prototype;return r.init=function(){var t=a(s().mark((function t(e,r){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.authenticator.initializeAuth(e,r);case 2:case"end":return t.stop()}}),t,this)})));return function(e,r){return t.apply(this,arguments)}}(),r.setInstance=function(t){this.instance=t},r.getInstance=function(){return this.instance},r.fetchRoles=function(){var t=a(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.abrupt("return",this.axiosInstance.get("/services/data/"+d+"/query",{params:{q:"SELECT Label, Value FROM PicklistValueInfo WHERE EntityParticle.EntityDefinition.QualifiedApiName = 'WorkOrder__c' AND EntityParticle.QualifiedApiName = 'ProfessionalDesignation__c' AND isActive = true"}}).then((function(t){return t.data.records.map((function(t){return{label:t.Label,value:t.Value}}))})));case 6:throw t.prev=6,t.t0=t.catch(0),console.error("Error fetching roles: ",t.t0.message),t.t0;case 10:case"end":return t.stop()}}),t,this,[[0,6]])})));return function(){return t.apply(this,arguments)}}(),t}(),exports.SFAuthenticator=c,exports.SFPractitionerClient=f,exports.SFTimesheetClient=u;
2
2
  //# sourceMappingURL=pha-hermes.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pha-hermes.cjs.production.min.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 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","this","axios","create","undefined","axiosTokenInstance","defaults","baseURL","_proto","prototype","initializeAuth","_initializeAuth","_asyncToGenerator","_regeneratorRuntime","mark","_callee","clientId","clientSecret","wrap","_context","prev","next","postToken","headers","common","sent","stop","_x","_x2","apply","arguments","_postToken","_callee2","_response$data","tokenFormRequestBody","response","_context2","FormData","refreshToken","append","Error","post","getHeaders","token","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","get","params","q","records","Id","getTimesheetsForPractitioner","_getTimesheetsForPractitioner","_callee3","personnelID","timesheets","_iterator","_step","_context3","_createForOfIteratorHelperLoose","done","push","value","WorkOrder__c","id","updatedAt","LastModifiedDate","getTimesheetHoursIds","_getTimesheetHoursIds","_callee4","_context4","map","_ref","_x5","getTimesheetHours","_getTimesheetHours","_callee6","_this","_context6","Promise","all","_ref2","_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":"koPAGaA,aAMT,SAAAA,EAAYC,EAA2CC,GALvDC,wBAAoCC,EAAMC,SAE1CF,gBAA4BG,EACpBH,uBAAmCG,EAGvCH,KAAKI,mBAAmBC,SAASC,cAC7BP,EAAAA,EAAW,8DACfC,KAAKF,2BAA6BA,EACrC,IAAAS,EAAAV,EAAAW,UAOc,OAPdD,EAEKE,0BAAc,IAAAC,EAAAC,EAAAC,IAAAC,MAApB,SAAAC,EAAqBC,EAAkBC,GAAoB,OAAAJ,IAAAK,eAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAAA,OAAAF,EAAAE,OACnCpB,KAAKqB,UAAUN,EAAUC,GAAa,OAC1DhB,KAAKF,2BAA2BO,SAASiB,QAAQC,OAAsB,wBAD5DL,EAAAM,KACiF,OAAA,UAAA,OAAAN,EAAAO,UAAAX,YAF5E,OAGnB,SAHmBY,EAAAC,GAAA,OAAAjB,EAAAkB,WAAAC,eAAAtB,EAKdc,qBAAS,IAAAS,EAAAnB,EAAAC,IAAAC,MAAf,SAAAkB,EAAgBhB,EAAmBC,GAAqB,IAAAgB,EAAAC,EAAAC,EAAA,OAAAtB,IAAAK,eAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,OACT,GAArCa,EAAuB,IAAIG,GAC7BpC,KAAKqC,cAAYF,EAAAf,OAAA,MACjBa,EAAqBK,OAAO,gBAAiBtC,KAAKqC,cAClDJ,EAAqBK,OAAO,aAAc,iBAAgBH,EAAAf,QAAA,MAAA,OAAA,IACnDL,IAAYC,GAAYmB,EAAAf,QAAA,MAC/Ba,EAAqBK,OAAO,YAAavB,GACzCkB,EAAqBK,OAAO,gBAAiBtB,GAC7CiB,EAAqBK,OAAO,aAAc,sBAAqBH,EAAAf,QAAA,MAAA,QAAA,MAEzD,IAAImB,MACN,oGACH,QAAA,OAAAJ,EAAAf,QAGkBpB,KAAKI,mBAAmBoC,KAC3C,yBACAP,EACA,CACIX,QAASW,EAAqBQ,eAErC,QAE4C,GAA7CzC,KAAK0C,aARCR,EAAQC,EAAAX,cAQOQ,EAARE,EAAUS,aAAVX,EAA+B,aACvChC,KAAK0C,OAAKP,EAAAf,QAAA,MAAA,MAAQ,IAAImB,MAAM,yDAAwD,QAAA,OAAAJ,EAAAS,gBAClF5C,KAAK0C,OAAK,QAAA,UAAA,OAAAP,EAAAV,UAAAM,YAzBN,OA0Bd,SA1Bcc,EAAAC,GAAA,OAAAhB,EAAAF,WAAAC,eAAAhC,KChBNkD,aAGT,SAAAA,EAAYC,GACRhD,KAAKgD,cAAgBA,EACxB,IAAAzC,EAAAwC,EAAAvC,UAqFsB,OArFtBD,EAEK0C,+BAAmB,IAAAC,EAAAvC,EAAAC,IAAAC,MAAzB,SAAAC,EAA0BqC,EAAyBC,GAA4B,IAAAC,EAAAnB,EAAA,OAAAtB,IAAAK,eAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAEkB,OAFlBF,EAAAC,OAEjEkC,oBAAwBC,gCAA4CH,EAAejC,EAAAE,OAClEpB,KAAKgD,cAAcO,MAAMF,EAAK,CACjDG,QAASJ,EAAUK,KACnBC,YAAaN,EAAUO,cACvBC,mBAAoBR,EAAUS,aAC9BC,QAASV,EAAUW,UACnBC,OAAQZ,EAAUa,eAClBC,OAAQd,EAAUe,eAClBC,UAAWhB,EAAUiB,YACrBC,SAAUlB,EAAUmB,YACpBC,gBAAiBpB,EAAUqB,YAC3BC,gBAAiBtB,EAAUuB,WAC3BC,gBAAiBxB,EAAUyB,WAC3BC,gBAAiB1B,EAAU2B,WAC3BC,SAAU5B,EAAU6B,WACpBC,SAAU9B,EAAU+B,WACpBC,aAAchC,EAAUiC,cACxBC,wBAAyBlC,EAAUmC,0BACrC,OAjBY,GAmBT,CAAC,IAAK,IAAK,KAAKC,UAnBftD,EAAQhB,EAAAM,MAmByBiE,SAAOvE,EAAAE,OAAA,MAAA,MACpC,IAAImB,+BAA+BL,EAASuD,QAAS,OAAAvE,EAAAE,QAAA,MAAA,OAAAF,EAAAC,OAAAD,EAAAwE,GAAAxE,WAE/DyE,QAAQC,MAAM,kCAAmC1E,EAAAwE,GAAMG,SAAQ,QAAA,UAAA,OAAA3E,EAAAO,UAAAX,oBAzB9C,OA2BxB,SA3BwBY,EAAAC,GAAA,OAAAuB,EAAAtB,WAAAC,eAAAtB,EA6BnBuF,0BAAc,IAAAC,EAAApF,EAAAC,IAAAC,MAApB,SAAAkB,EAAqBiE,GAAmB,IAAA3C,EAAA4C,EAAA,OAAArF,IAAAK,eAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,OAKc,OAH5CiC,oBAAwBC,WACxB2C,uGAEiCD,sCAAW7D,EAAAf,OAIxCpB,KAAKgD,cAAckD,IAAI7C,EAAK,CAClC8C,OAAQ,CAAEC,EAAGH,KACf,OAHiB,OAAA9D,EAAAS,gBAGjBT,EAAAX,KAHEmB,KAAQ0D,QAIG,GAAGC,IAAE,OAAA,UAAA,OAAAnE,EAAAV,UAAAM,YAZJ,OAanB,SAbmBc,GAAA,OAAAkD,EAAAnE,WAAAC,eAAAtB,EAedgG,wCAA4B,IAAAC,EAAA7F,EAAAC,IAAAC,MAAlC,SAAA4F,EAAmCC,GAAmB,IAAArD,EAAA4C,EAAAU,EAAAC,EAAAC,EAAAzD,EAAA,OAAAxC,IAAAK,eAAA6F,GAAA,cAAAA,EAAA3F,KAAA2F,EAAA1F,MAAA,OAOuB,OANnEiC,oBAAwBC,WAExB2C,oRAIwDS,OAAWI,EAAA1F,OAEtDpB,KAAKgD,cAAckD,IAAI7C,EAAK,CAAE8C,OAAQ,CAAEC,EAAGH,KAAU,OAIxE,IAFIU,EAAa,GAEjBC,EAAAG,EAJUD,EAAAtF,KAImBmB,KAAK0D,WAAOQ,EAAAD,KAAAI,MACrCL,EAAWM,KAAK,CACZjB,aAFG5C,EAASyD,EAAAK,OAEWC,aACvBC,GAAIhE,EAAUkD,GACde,UAAWjE,EAAUkE,mBAE5B,OAAAR,EAAAlE,gBAEM+D,GAAU,OAAA,UAAA,OAAAG,EAAArF,UAAAgF,YArBa,OAsBjC,SAtBiC3D,GAAA,OAAA0D,EAAA5E,WAAAC,eAAAtB,EAwB5BgH,gCAAoB,IAAAC,EAAA7G,EAAAC,IAAAC,MAA1B,SAAA4G,EAA2BzB,GAAmB,IAAA3C,EAAA4C,EAAA,OAAArF,IAAAK,eAAAyG,GAAA,cAAAA,EAAAvG,KAAAuG,EAAAtG,MAAA,OAAA,OAAAsG,EAAAtG,OAChBpB,KAAK8F,eAAeE,GAAY,OAKR,OAH5C3C,oBAAwBC,WACxB2C,2GAHWyB,EAAAlG,SAKiCkG,EAAAtG,OAGxCpB,KAAKgD,cAAckD,IAAI7C,EAAK,CAClC8C,OAAQ,CAAEC,EAAGH,KACf,OAHiB,OAAAyB,EAAA9E,gBAGjB8E,EAAAlG,KAHEmB,KAAQ0D,QAIGsB,KAAI,SAAAC,GAAK,OAAAA,EAAFtB,OAAY,QAAA,UAAA,OAAAoB,EAAAjG,UAAAgG,YAZZ,OAazB,SAbyBI,GAAA,OAAAL,EAAA5F,WAAAC,eAAAtB,EAepBuH,6BAAiB,IAAAC,EAAApH,EAAAC,IAAAC,MAAvB,SAAAmH,EAAwBhC,GAAmB,IAAAiC,OAAA,OAAArH,IAAAK,eAAAiH,GAAA,cAAAA,EAAA/G,KAAA+G,EAAA9G,MAAA,OAAA,OAAA8G,EAAA9G,OACRpB,KAAKuH,qBAAqBvB,GAAY,OAA/C,OAAAkC,EAAAtF,gBACfuF,QAAQC,IADOF,EAAA1G,KAEDmG,eAAG,IAAAU,EAAA1H,EAAAC,IAAAC,MAAC,SAAAyH,EAAMlB,GAAE,OAAAxG,IAAAK,eAAAsH,GAAA,cAAAA,EAAApH,KAAAoH,EAAAnH,MAAA,OAAA,OAAAmH,EAAA3F,gBACzBqF,EAAKjF,cACAkD,sBAAsB5C,gCAA4C8D,GAClEoB,MAAK,SAAAC,GAAG,OAAIA,EAAI9F,QAChB6F,KAAKE,IAAoB,OAAA,UAAA,OAAAH,EAAA9G,UAAA6G,OAAA,gBAAAK,GAAA,OAAAN,EAAAzG,WAAAC,kBAErC,OAAA,UAAA,OAAAqG,EAAAzG,UAAAuG,YATkB,OAUtB,SAVsBY,GAAA,OAAAb,EAAAnG,WAAAC,eAAAkB,KAa3B,SAAS2F,EAAoBG,GACzB,MAAO,CACHzB,GAAIyB,EAAIvC,GACR7C,KAAMoF,EAAIrF,QACVG,cAAekF,EAAInF,YACnBG,aAAcgF,EAAIjF,mBAClBG,UAAW8E,EAAI/E,QACfG,eAAgB4E,EAAI7E,OACpBG,eAAgB0E,EAAI3E,OACpBG,YAAawE,EAAIzE,UACjBG,YAAasE,EAAIvE,SACjBG,YAAaoE,EAAIrE,gBACjBG,WAAYkE,EAAInE,gBAChBG,WAAYgE,EAAIjE,gBAChBG,WAAY8D,EAAI/D,gBAChBG,WAAY4D,EAAI7D,SAChBG,WAAY0D,EAAI3D,SAChBG,cAAewD,EAAIzD,aACnBG,wBAAyBsD,EAAIvD,wBAC7BwD,aAAcD,EAAIvB,sBC1HbyB,aAGT,SAAAA,EAAY/F,GACRhD,KAAKgD,cAAgBA,EAGD,OAFvB+F,EAAAvI,UAEKwI,8BAAkB,IAAAC,EAAAtI,EAAAC,IAAAC,MAAxB,SAAAC,IAAA,IAAAuC,EAAA,OAAAzC,IAAAK,eAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAGmB,OAHnBF,EAAAC,OAEckC,oBAAwBC,WACnBpC,EAAAE,OAODpB,KAAKgD,cAAckD,IAAI7C,EAAK,CAClC8C,OAAQ,CAAEC,iLACZ,OAHiB,OAAAlF,EAAA0B,gBAGjB1B,EAAAM,KAHEmB,KAAQ0D,QAKGsB,IAAIuB,IAAe,QAE4B,MAF5BhI,EAAAC,QAAAD,EAAAwE,GAAAxE,WAElCyE,QAAQC,MAAM,iCAAkC1E,EAAAwE,GAAMG,SAAQ3E,EAAAwE,GAAA,QAAA,UAAA,OAAAxE,EAAAO,UAAAX,qBAhB9C,OAmBvB,WAnBuB,OAAAmI,EAAArH,WAAAC,eAAAkH,KAsB5B,SAASG,EAAeL,GACpB,MAAO,CACHzB,GAAIyB,EAAIvC,GACR6C,UAAWN,EAAIO,aACfC,SAAUR,EAAIS,YACdC,MAAOV,EAAIW,SACXC,QAASZ,EAAIa,gBCnCRC,aAGT,SAAAA,EAAY3G,GACRhD,KAAKgD,cAAgBA,EAIS,OAHjC2G,EAAAnJ,UAGKoJ,wCAA4B,IAAAC,EAAAlJ,EAAAC,IAAAC,MAAlC,SAAAC,EAAmCgJ,GAAuB,IAAAzG,EAAA4C,EAAA,OAAArF,IAAAK,eAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAKoH,OALpHF,EAAAC,OAE5CkC,oBAAwBC,WACxB2C,EAAQ6D,0LACgLA,uKACxB5I,EAAAE,OACzJpB,KAAKgD,cACbkD,IAAI7C,EAAK,CACN8C,OAAQ,CAAEC,EAAGH,KAEhBuC,MAAK,SAAAZ,GAAkB,OAAAA,EAAfjF,KAAQ0D,QACLsB,KACJ,SAACoC,GAAM,MAAiB,CACpB3C,GAAI2C,EAAOzD,GACX0D,gBAAiBD,EAAOE,cACxBC,kBAAmBH,EAAOI,gBAC1BC,KAAML,EAAOM,2BACbP,eAAgBC,EAAOO,aACvBC,UAAW,IAAIC,KAAKT,EAAOU,cAC3BC,QAAS,IAAIF,KAAKT,EAAOY,YACzBC,UAAW,IAAIJ,KAAKT,EAAOc,aAC3BxD,UAAW,IAAImD,KAAKT,EAAOzC,yBAGtC,OAAA,OAAApG,EAAA0B,gBAAA1B,EAAAM,MAAA,OAEuD,MAFvDN,EAAAC,OAAAD,EAAAwE,GAAAxE,WAELyE,QAAQC,MAAM,+BAAgC1E,EAAAwE,GAAMG,SAAQ3E,EAAAwE,GAAA,QAAA,UAAA,OAAAxE,EAAAO,UAAAX,oBA1BlC,OA6BjC,SA7BiCY,GAAA,OAAAmI,EAAAjI,WAAAC,eAAA8H,KCLzBrG,EAAyB,uCAWlC,SAAAwH,EAAY/K,GARJC,mBAAoCG,EACpCH,mBAA+BC,EAAMC,SAQzCF,KAAKD,QAAUA,EACfC,KAAKgD,cAAc3C,SAASC,cACxBP,EAAAA,EAAW,8DACfC,KAAK+K,cAAgB,IAAIlL,EAAgBG,KAAKgD,cAAehD,KAAKD,SAClEC,KAAKgL,gBAAkB,IAAIjI,EAAkB/C,KAAKgD,eAClDhD,KAAKiL,gBAAkB,IAAItB,EAAkB3J,KAAKgD,eAClDhD,KAAKkL,mBAAqB,IAAInC,EAAqB/I,KAAKgD,eAC3D,IAAAzC,EAAAuK,EAAAtK,UAce,OAdfD,EAEK4K,gBAAI,IAAAC,EAAAzK,EAAAC,IAAAC,MAAV,SAAAC,EAAWuK,EAAoBC,GAAsB,OAAA1K,IAAAK,eAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAAA,OAAAF,EAAAE,OAE3CpB,KAAK+K,cAActK,eAAe4K,EAAYC,GAAe,OAAA,UAAA,OAAApK,EAAAO,UAAAX,YAF7D,OAGT,SAHSY,EAAAC,GAAA,OAAAyJ,EAAAxJ,WAAAC,eAAAtB,EAKVgL,YAAA,SAAYC,GACRxL,KAAKwL,SAAWA,GACnBjL,EACDkL,YAAA,WACI,OAAOzL,KAAKwL,UACfjL,EAEKmL,sBAAU,IAAAC,EAAAhL,EAAAC,IAAAC,MAAhB,SAAAkB,IAAA,OAAAnB,IAAAK,eAAAkB,GAAA,cAAAA,EAAAhB,KAAAgB,EAAAf,MAAA,OAGmB,OAHnBe,EAAAhB,OAGmBgB,EAAAS,gBAIJ5C,KAAKgD,cACPkD,sBANyB5C,WAMhB,CACN6C,OAAQ,CAAEC,gQAEboC,MAAK,SAAAZ,GAAkB,OAAAA,EAAfjF,KAAQ0D,QACLsB,KACJ,SAACoC,GAAM,MAAY,CACf6B,MAAO7B,EAAO8B,MACd3E,MAAO6C,EAAO+B,cAGzB,OAEiD,MAFjD3J,EAAAhB,OAAAgB,EAAAuD,GAAAvD,WAELwD,QAAQC,MAAM,yBAA0BzD,EAAAuD,GAAMG,SAAQ1D,EAAAuD,GAAA,QAAA,UAAA,OAAAvD,EAAAV,UAAAM,oBApB9C,OAuBf,WAvBe,OAAA4J,EAAA/J,WAAAC,eAAAiJ"}
1
+ {"version":3,"file":"pha-hermes.cjs.production.min.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","this","axios","create","undefined","axiosTokenInstance","defaults","baseURL","_proto","prototype","initializeAuth","_initializeAuth","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","clientId","clientSecret","_this","wrap","_context2","prev","next","postToken","headers","common","sent","interceptors","response","use","_ref","_callee","error","_error$response","originalRequest","newToken","_context","config","_retryCount","status","tokenRefreshPromise","timeout","Promise","race","_","reject","setTimeout","Error","abrupt","t0","stop","_x3","apply","arguments","_x","_x2","_postToken","_callee3","_response$data","tokenFormRequestBody","_context3","FormData","refreshToken","append","post","getHeaders","token","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","get","params","q","records","Id","getTimesheetsForPractitioner","_getTimesheetsForPractitioner","personnelID","timesheets","_iterator","_step","_createForOfIteratorHelperLoose","done","push","value","WorkOrder__c","id","updatedAt","LastModifiedDate","getTimesheetHoursIds","_getTimesheetHoursIds","_callee4","_context4","map","getTimesheetHours","_getTimesheetHours","_callee6","_context6","all","_ref2","_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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"}
@@ -362,26 +362,85 @@ var SFAuthenticator = /*#__PURE__*/function () {
362
362
  this.axiosTokenInstance = axios.create();
363
363
  this.token = undefined;
364
364
  this.refreshToken = undefined;
365
+ this.tokenRefreshPromise = null;
365
366
  this.axiosTokenInstance.defaults.baseURL = baseUrl != null ? baseUrl : 'https://do0000000d247eaa--phealth.sandbox.my.salesforce.com';
366
367
  this.authenticatedAxiosInstance = authenticatedAxiosInstance;
367
368
  }
368
369
  var _proto = SFAuthenticator.prototype;
369
370
  _proto.initializeAuth = /*#__PURE__*/function () {
370
- var _initializeAuth = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(clientId, clientSecret) {
371
+ var _initializeAuth = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clientId, clientSecret) {
372
+ var _this = this;
371
373
  var token;
372
- return _regeneratorRuntime().wrap(function _callee$(_context) {
373
- while (1) switch (_context.prev = _context.next) {
374
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
375
+ while (1) switch (_context2.prev = _context2.next) {
374
376
  case 0:
375
- _context.next = 2;
377
+ _context2.next = 2;
376
378
  return this.postToken(clientId, clientSecret);
377
379
  case 2:
378
- token = _context.sent;
380
+ token = _context2.sent;
379
381
  this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = "Bearer " + token;
380
- case 4:
382
+ this.authenticatedAxiosInstance.interceptors.response.use(function (response) {
383
+ return response;
384
+ }, /*#__PURE__*/function () {
385
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(error) {
386
+ var _error$response;
387
+ var originalRequest, newToken;
388
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
389
+ while (1) switch (_context.prev = _context.next) {
390
+ case 0:
391
+ originalRequest = error.config;
392
+ originalRequest._retryCount = originalRequest._retryCount || 0;
393
+ // If the error is 401 and we haven't exceeded max retries
394
+ if (!(((_error$response = error.response) == null ? void 0 : _error$response.status) === 401 && originalRequest._retryCount < 3)) {
395
+ _context.next = 22;
396
+ break;
397
+ }
398
+ originalRequest._retryCount++;
399
+ _context.prev = 4;
400
+ // Use existing token refresh if one is in progress
401
+ if (!_this.tokenRefreshPromise) {
402
+ _this.tokenRefreshPromise = _this.postToken(clientId, clientSecret);
403
+ }
404
+ _context.next = 8;
405
+ return _this.tokenRefreshPromise;
406
+ case 8:
407
+ newToken = _context.sent;
408
+ // Clear the refresh promise after it completes
409
+ _this.tokenRefreshPromise = null;
410
+ _this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = "Bearer " + newToken;
411
+ originalRequest.headers['Authorization'] = "Bearer " + newToken;
412
+ originalRequest.timeout = 5000;
413
+ _context.next = 15;
414
+ return Promise.race([_this.authenticatedAxiosInstance(originalRequest), new Promise(function (_, reject) {
415
+ return setTimeout(function () {
416
+ return reject(new Error('Retry request timeout'));
417
+ }, originalRequest.timeout);
418
+ })]);
419
+ case 15:
420
+ return _context.abrupt("return", _context.sent);
421
+ case 18:
422
+ _context.prev = 18;
423
+ _context.t0 = _context["catch"](4);
424
+ // Clear the refresh promise if it fails
425
+ _this.tokenRefreshPromise = null;
426
+ return _context.abrupt("return", Promise.reject(_context.t0));
427
+ case 22:
428
+ return _context.abrupt("return", Promise.reject(error));
429
+ case 23:
430
+ case "end":
431
+ return _context.stop();
432
+ }
433
+ }, _callee, null, [[4, 18]]);
434
+ }));
435
+ return function (_x3) {
436
+ return _ref.apply(this, arguments);
437
+ };
438
+ }());
439
+ case 5:
381
440
  case "end":
382
- return _context.stop();
441
+ return _context2.stop();
383
442
  }
384
- }, _callee, this);
443
+ }, _callee2, this);
385
444
  }));
386
445
  function initializeAuth(_x, _x2) {
387
446
  return _initializeAuth.apply(this, arguments);
@@ -389,55 +448,55 @@ var SFAuthenticator = /*#__PURE__*/function () {
389
448
  return initializeAuth;
390
449
  }();
391
450
  _proto.postToken = /*#__PURE__*/function () {
392
- var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clientId, clientSecret) {
451
+ var _postToken = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(clientId, clientSecret) {
393
452
  var _response$data;
394
453
  var tokenFormRequestBody, response;
395
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
396
- while (1) switch (_context2.prev = _context2.next) {
454
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
455
+ while (1) switch (_context3.prev = _context3.next) {
397
456
  case 0:
398
457
  tokenFormRequestBody = new FormData();
399
458
  if (!this.refreshToken) {
400
- _context2.next = 6;
459
+ _context3.next = 6;
401
460
  break;
402
461
  }
403
462
  tokenFormRequestBody.append('refresh_token', this.refreshToken);
404
463
  tokenFormRequestBody.append('grant_type', 'refresh_token');
405
- _context2.next = 13;
464
+ _context3.next = 13;
406
465
  break;
407
466
  case 6:
408
467
  if (!(clientId && clientSecret)) {
409
- _context2.next = 12;
468
+ _context3.next = 12;
410
469
  break;
411
470
  }
412
471
  tokenFormRequestBody.append('client_id', clientId);
413
472
  tokenFormRequestBody.append('client_secret', clientSecret);
414
473
  tokenFormRequestBody.append('grant_type', 'client_credentials');
415
- _context2.next = 13;
474
+ _context3.next = 13;
416
475
  break;
417
476
  case 12:
418
477
  throw new Error('Authentication failed, either the RefreshToken, or ClientId and ClientSecret need to be provided');
419
478
  case 13:
420
- _context2.next = 15;
479
+ _context3.next = 15;
421
480
  return this.axiosTokenInstance.post('/services/oauth2/token', tokenFormRequestBody, {
422
481
  headers: tokenFormRequestBody.getHeaders()
423
482
  });
424
483
  case 15:
425
- response = _context2.sent;
484
+ response = _context3.sent;
426
485
  this.token = response == null || (_response$data = response.data) == null ? void 0 : _response$data['access_token'];
427
486
  if (this.token) {
428
- _context2.next = 19;
487
+ _context3.next = 19;
429
488
  break;
430
489
  }
431
490
  throw new Error('Authentication failed, could not get the access token');
432
491
  case 19:
433
- return _context2.abrupt("return", this.token);
492
+ return _context3.abrupt("return", this.token);
434
493
  case 20:
435
494
  case "end":
436
- return _context2.stop();
495
+ return _context3.stop();
437
496
  }
438
- }, _callee2, this);
497
+ }, _callee3, this);
439
498
  }));
440
- function postToken(_x3, _x4) {
499
+ function postToken(_x4, _x5) {
441
500
  return _postToken.apply(this, arguments);
442
501
  }
443
502
  return postToken;
@@ -1 +1 @@
1
- {"version":3,"file":"pha-hermes.esm.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 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","_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","timesheets","_iterator","_step","_callee3$","_context3","_createForOfIteratorHelperLoose","done","value","push","WorkOrder__c","id","updatedAt","LastModifiedDate","getTimesheetHoursIds","_getTimesheetHoursIds","_callee4","timesheetId","_yield$this$axiosInst2","_callee4$","_context4","map","_ref","_x5","getTimesheetHours","_getTimesheetHours","_callee6","_this","timesheetHourIds","_callee6$","_context6","Promise","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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"}
1
+ {"version":3,"file":"pha-hermes.esm.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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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.2",
2
+ "version": "1.4.0",
3
3
  "main": "dist/index.js",
4
4
  "typings": "dist/index.d.ts",
5
5
  "files": [
@@ -6,6 +6,7 @@ export class SFAuthenticator {
6
6
  authenticatedAxiosInstance: AxiosInstance
7
7
  token: string | undefined = undefined
8
8
  private refreshToken: string | undefined = undefined
9
+ private tokenRefreshPromise: Promise<string> | null = null
9
10
 
10
11
  constructor(authenticatedAxiosInstance: AxiosInstance, baseUrl?: string) {
11
12
  this.axiosTokenInstance.defaults.baseURL =
@@ -16,6 +17,51 @@ export class SFAuthenticator {
16
17
  async initializeAuth(clientId: string, clientSecret: string) {
17
18
  const token = await this.postToken(clientId, clientSecret)
18
19
  this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] = `Bearer ${token}`
20
+
21
+ this.authenticatedAxiosInstance.interceptors.response.use(
22
+ response => response,
23
+ async error => {
24
+ const originalRequest = error.config
25
+ originalRequest._retryCount = originalRequest._retryCount || 0
26
+
27
+ // If the error is 401 and we haven't exceeded max retries
28
+ if (error.response?.status === 401 && originalRequest._retryCount < 3) {
29
+ originalRequest._retryCount++
30
+
31
+ try {
32
+ // Use existing token refresh if one is in progress
33
+ if (!this.tokenRefreshPromise) {
34
+ this.tokenRefreshPromise = this.postToken(clientId, clientSecret)
35
+ }
36
+
37
+ const newToken = await this.tokenRefreshPromise
38
+ // Clear the refresh promise after it completes
39
+ this.tokenRefreshPromise = null
40
+
41
+ this.authenticatedAxiosInstance.defaults.headers.common['Authorization'] =
42
+ `Bearer ${newToken}`
43
+ originalRequest.headers['Authorization'] = `Bearer ${newToken}`
44
+
45
+ originalRequest.timeout = 5000
46
+
47
+ return await Promise.race([
48
+ this.authenticatedAxiosInstance(originalRequest),
49
+ new Promise((_, reject) =>
50
+ setTimeout(
51
+ () => reject(new Error('Retry request timeout')),
52
+ originalRequest.timeout
53
+ )
54
+ )
55
+ ])
56
+ } catch (refreshError) {
57
+ // Clear the refresh promise if it fails
58
+ this.tokenRefreshPromise = null
59
+ return Promise.reject(refreshError)
60
+ }
61
+ }
62
+ return Promise.reject(error)
63
+ }
64
+ )
19
65
  }
20
66
 
21
67
  async postToken(clientId?: string, clientSecret?: string): Promise<string> {