@smartsides/oracle-ebs-sdk 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,6 +52,7 @@ declare class BaseClient {
52
52
  constructor(config: OracleEBSConfig);
53
53
  setToken(token: string): void;
54
54
  clearToken(): void;
55
+ protected getToken(): string | null;
55
56
  protected get<T>(url: string, options?: Options): Promise<APIResponse<T>>;
56
57
  protected post<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>>;
57
58
  protected put<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>>;
@@ -320,7 +321,7 @@ interface GetPayslipRunBalancesResponse {
320
321
  }
321
322
 
322
323
  declare class PayslipModule extends BaseClient {
323
- private getEmployeeNumber;
324
+ private getEmployeeNumberFromToken;
324
325
  getHeader(params: GetPayslipHeaderParams): Promise<PayslipHeader>;
325
326
  getDetails(params: GetPayslipDetailsParams): Promise<GetPayslipDetailsResponse>;
326
327
  getLeaveDetails(params: GetPayslipLeaveDetailsParams): Promise<GetPayslipLeaveDetailsResponse>;
@@ -52,6 +52,7 @@ declare class BaseClient {
52
52
  constructor(config: OracleEBSConfig);
53
53
  setToken(token: string): void;
54
54
  clearToken(): void;
55
+ protected getToken(): string | null;
55
56
  protected get<T>(url: string, options?: Options): Promise<APIResponse<T>>;
56
57
  protected post<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>>;
57
58
  protected put<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>>;
@@ -320,7 +321,7 @@ interface GetPayslipRunBalancesResponse {
320
321
  }
321
322
 
322
323
  declare class PayslipModule extends BaseClient {
323
- private getEmployeeNumber;
324
+ private getEmployeeNumberFromToken;
324
325
  getHeader(params: GetPayslipHeaderParams): Promise<PayslipHeader>;
325
326
  getDetails(params: GetPayslipDetailsParams): Promise<GetPayslipDetailsResponse>;
326
327
  getLeaveDetails(params: GetPayslipLeaveDetailsParams): Promise<GetPayslipLeaveDetailsResponse>;
@@ -1,6 +1,6 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
2
  import { UseMutationOptions, UseQueryOptions } from '@tanstack/react-query';
3
- import { G as GetAbsenceTypesParams, j as GetSitSegmentsParams, Q as GetDffSegmentsParams, O as OracleEBSClient, b as LoginResponse, L as LoginCredentials, U as UserContext, e as GetAbsenceTypesResponse, g as GetLeaveHistoryResponse, i as CreateLeaveRequestResponse, h as CreateLeaveRequestInput, k as GetSitSegmentsResponse, m as SaveAndPreviewSitRequestResponse, l as SaveAndPreviewSitRequestInput, o as SubmitSitRequestResponse, n as SubmitSitRequestInput, s as GetNotificationsResponse, u as GetNotificationDetailsParams, t as NotificationDetails, v as ProcessApprovalResponse, P as ProcessApprovalInput, y as GetPayslipHeaderParams, z as PayslipHeader, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, F as PersonalInformation, I as GetEmployeeHierarchyResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, V as GetDffSegmentsResponse, W as HealthCheckResponse } from '../OracleEBSClient-C378mm5O.mjs';
3
+ import { G as GetAbsenceTypesParams, j as GetSitSegmentsParams, Q as GetDffSegmentsParams, O as OracleEBSClient, b as LoginResponse, L as LoginCredentials, U as UserContext, e as GetAbsenceTypesResponse, g as GetLeaveHistoryResponse, i as CreateLeaveRequestResponse, h as CreateLeaveRequestInput, k as GetSitSegmentsResponse, m as SaveAndPreviewSitRequestResponse, l as SaveAndPreviewSitRequestInput, o as SubmitSitRequestResponse, n as SubmitSitRequestInput, s as GetNotificationsResponse, u as GetNotificationDetailsParams, t as NotificationDetails, v as ProcessApprovalResponse, P as ProcessApprovalInput, y as GetPayslipHeaderParams, z as PayslipHeader, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, F as PersonalInformation, I as GetEmployeeHierarchyResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, V as GetDffSegmentsResponse, W as HealthCheckResponse } from '../OracleEBSClient-D1dA5P_r.mjs';
4
4
  import 'ky';
5
5
 
6
6
  declare const queryKeys: {
@@ -1,6 +1,6 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
2
  import { UseMutationOptions, UseQueryOptions } from '@tanstack/react-query';
3
- import { G as GetAbsenceTypesParams, j as GetSitSegmentsParams, Q as GetDffSegmentsParams, O as OracleEBSClient, b as LoginResponse, L as LoginCredentials, U as UserContext, e as GetAbsenceTypesResponse, g as GetLeaveHistoryResponse, i as CreateLeaveRequestResponse, h as CreateLeaveRequestInput, k as GetSitSegmentsResponse, m as SaveAndPreviewSitRequestResponse, l as SaveAndPreviewSitRequestInput, o as SubmitSitRequestResponse, n as SubmitSitRequestInput, s as GetNotificationsResponse, u as GetNotificationDetailsParams, t as NotificationDetails, v as ProcessApprovalResponse, P as ProcessApprovalInput, y as GetPayslipHeaderParams, z as PayslipHeader, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, F as PersonalInformation, I as GetEmployeeHierarchyResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, V as GetDffSegmentsResponse, W as HealthCheckResponse } from '../OracleEBSClient-C378mm5O.js';
3
+ import { G as GetAbsenceTypesParams, j as GetSitSegmentsParams, Q as GetDffSegmentsParams, O as OracleEBSClient, b as LoginResponse, L as LoginCredentials, U as UserContext, e as GetAbsenceTypesResponse, g as GetLeaveHistoryResponse, i as CreateLeaveRequestResponse, h as CreateLeaveRequestInput, k as GetSitSegmentsResponse, m as SaveAndPreviewSitRequestResponse, l as SaveAndPreviewSitRequestInput, o as SubmitSitRequestResponse, n as SubmitSitRequestInput, s as GetNotificationsResponse, u as GetNotificationDetailsParams, t as NotificationDetails, v as ProcessApprovalResponse, P as ProcessApprovalInput, y as GetPayslipHeaderParams, z as PayslipHeader, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, F as PersonalInformation, I as GetEmployeeHierarchyResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, V as GetDffSegmentsResponse, W as HealthCheckResponse } from '../OracleEBSClient-D1dA5P_r.js';
4
4
  import 'ky';
5
5
 
6
6
  declare const queryKeys: {
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as APIResponse, d as AbsenceType, X as AccrualBalance, C as CacheOptions, w as CloseFyiParams, x as CloseFyiResponse, h as CreateLeaveRequestInput, i as CreateLeaveRequestResponse, M as DffSegment, H as EmployeeHierarchyNode, G as GetAbsenceTypesParams, e as GetAbsenceTypesResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, Q as GetDffSegmentsParams, V as GetDffSegmentsResponse, I as GetEmployeeHierarchyResponse, g as GetLeaveHistoryResponse, u as GetNotificationDetailsParams, s as GetNotificationsResponse, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, y as GetPayslipHeaderParams, p as GetSitHistoryParams, r as GetSitHistoryResponse, j as GetSitSegmentsParams, k as GetSitSegmentsResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, W as HealthCheckResponse, f as LeaveHistoryRecord, L as LoginCredentials, b as LoginResponse, N as Notification, t as NotificationDetails, O as OracleEBSClient, a as OracleEBSConfig, D as PayslipDetail, z as PayslipHeader, F as PersonalInformation, P as ProcessApprovalInput, v as ProcessApprovalResponse, c as Responsibility, R as RetryOptions, l as SaveAndPreviewSitRequestInput, m as SaveAndPreviewSitRequestResponse, q as SitHistoryRecord, S as SitSegment, n as SubmitSitRequestInput, o as SubmitSitRequestResponse, T as TableColumn, U as UserContext } from './OracleEBSClient-C378mm5O.mjs';
1
+ export { A as APIResponse, d as AbsenceType, X as AccrualBalance, C as CacheOptions, w as CloseFyiParams, x as CloseFyiResponse, h as CreateLeaveRequestInput, i as CreateLeaveRequestResponse, M as DffSegment, H as EmployeeHierarchyNode, G as GetAbsenceTypesParams, e as GetAbsenceTypesResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, Q as GetDffSegmentsParams, V as GetDffSegmentsResponse, I as GetEmployeeHierarchyResponse, g as GetLeaveHistoryResponse, u as GetNotificationDetailsParams, s as GetNotificationsResponse, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, y as GetPayslipHeaderParams, p as GetSitHistoryParams, r as GetSitHistoryResponse, j as GetSitSegmentsParams, k as GetSitSegmentsResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, W as HealthCheckResponse, f as LeaveHistoryRecord, L as LoginCredentials, b as LoginResponse, N as Notification, t as NotificationDetails, O as OracleEBSClient, a as OracleEBSConfig, D as PayslipDetail, z as PayslipHeader, F as PersonalInformation, P as ProcessApprovalInput, v as ProcessApprovalResponse, c as Responsibility, R as RetryOptions, l as SaveAndPreviewSitRequestInput, m as SaveAndPreviewSitRequestResponse, q as SitHistoryRecord, S as SitSegment, n as SubmitSitRequestInput, o as SubmitSitRequestResponse, T as TableColumn, U as UserContext } from './OracleEBSClient-D1dA5P_r.mjs';
2
2
  import 'ky';
3
3
 
4
4
  declare class APIError extends Error {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as APIResponse, d as AbsenceType, X as AccrualBalance, C as CacheOptions, w as CloseFyiParams, x as CloseFyiResponse, h as CreateLeaveRequestInput, i as CreateLeaveRequestResponse, M as DffSegment, H as EmployeeHierarchyNode, G as GetAbsenceTypesParams, e as GetAbsenceTypesResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, Q as GetDffSegmentsParams, V as GetDffSegmentsResponse, I as GetEmployeeHierarchyResponse, g as GetLeaveHistoryResponse, u as GetNotificationDetailsParams, s as GetNotificationsResponse, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, y as GetPayslipHeaderParams, p as GetSitHistoryParams, r as GetSitHistoryResponse, j as GetSitSegmentsParams, k as GetSitSegmentsResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, W as HealthCheckResponse, f as LeaveHistoryRecord, L as LoginCredentials, b as LoginResponse, N as Notification, t as NotificationDetails, O as OracleEBSClient, a as OracleEBSConfig, D as PayslipDetail, z as PayslipHeader, F as PersonalInformation, P as ProcessApprovalInput, v as ProcessApprovalResponse, c as Responsibility, R as RetryOptions, l as SaveAndPreviewSitRequestInput, m as SaveAndPreviewSitRequestResponse, q as SitHistoryRecord, S as SitSegment, n as SubmitSitRequestInput, o as SubmitSitRequestResponse, T as TableColumn, U as UserContext } from './OracleEBSClient-C378mm5O.js';
1
+ export { A as APIResponse, d as AbsenceType, X as AccrualBalance, C as CacheOptions, w as CloseFyiParams, x as CloseFyiResponse, h as CreateLeaveRequestInput, i as CreateLeaveRequestResponse, M as DffSegment, H as EmployeeHierarchyNode, G as GetAbsenceTypesParams, e as GetAbsenceTypesResponse, Y as GetAccrualBalancesParams, Z as GetAccrualBalancesResponse, Q as GetDffSegmentsParams, V as GetDffSegmentsResponse, I as GetEmployeeHierarchyResponse, g as GetLeaveHistoryResponse, u as GetNotificationDetailsParams, s as GetNotificationsResponse, B as GetPayslipDetailsParams, E as GetPayslipDetailsResponse, y as GetPayslipHeaderParams, p as GetSitHistoryParams, r as GetSitHistoryResponse, j as GetSitSegmentsParams, k as GetSitSegmentsResponse, J as GetTableColumnsParams, K as GetTableColumnsResponse, W as HealthCheckResponse, f as LeaveHistoryRecord, L as LoginCredentials, b as LoginResponse, N as Notification, t as NotificationDetails, O as OracleEBSClient, a as OracleEBSConfig, D as PayslipDetail, z as PayslipHeader, F as PersonalInformation, P as ProcessApprovalInput, v as ProcessApprovalResponse, c as Responsibility, R as RetryOptions, l as SaveAndPreviewSitRequestInput, m as SaveAndPreviewSitRequestResponse, q as SitHistoryRecord, S as SitSegment, n as SubmitSitRequestInput, o as SubmitSitRequestResponse, T as TableColumn, U as UserContext } from './OracleEBSClient-D1dA5P_r.js';
2
2
  import 'ky';
3
3
 
4
4
  declare class APIError extends Error {
package/dist/index.js CHANGED
@@ -141,6 +141,12 @@ var BaseClient = class {
141
141
  clearToken() {
142
142
  this.token = void 0;
143
143
  }
144
+ /**
145
+ * Get current authentication token
146
+ */
147
+ getToken() {
148
+ return this.token || null;
149
+ }
144
150
  /**
145
151
  * Make a GET request
146
152
  */
@@ -392,19 +398,42 @@ var NotificationsModule = class extends BaseClient {
392
398
  }
393
399
  };
394
400
 
401
+ // src/utils/jwt.ts
402
+ function decodeJWT(token) {
403
+ try {
404
+ const parts = token.split(".");
405
+ if (parts.length !== 3) {
406
+ return null;
407
+ }
408
+ const payload = parts[1];
409
+ const base64 = payload.replace(/-/g, "+").replace(/_/g, "/");
410
+ const jsonPayload = decodeURIComponent(
411
+ atob(base64).split("").map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")
412
+ );
413
+ return JSON.parse(jsonPayload);
414
+ } catch (error) {
415
+ console.error("Failed to decode JWT:", error);
416
+ return null;
417
+ }
418
+ }
419
+
395
420
  // src/modules/PayslipModule.ts
396
421
  var PayslipModule = class extends BaseClient {
397
422
  /**
398
- * Get employee number from authenticated user
423
+ * Get employee number from JWT token
399
424
  */
400
- async getEmployeeNumber(providedEmployeeNumber) {
425
+ getEmployeeNumberFromToken(providedEmployeeNumber) {
401
426
  if (providedEmployeeNumber) {
402
427
  return providedEmployeeNumber;
403
428
  }
404
- const response = await this.get("employee/personal-info");
405
- const employeeNumber = response.data?.EMPLOYEE_NUMBER || response.data?.employeeNumber;
429
+ const token = this.getToken();
430
+ if (!token) {
431
+ throw new Error("No authentication token available. Please login first.");
432
+ }
433
+ const payload = decodeJWT(token);
434
+ const employeeNumber = payload?.EMPLOYEE_NUMBER;
406
435
  if (!employeeNumber) {
407
- throw new Error("Employee number not found in user profile");
436
+ throw new Error("Employee number not found in authentication token");
408
437
  }
409
438
  return employeeNumber;
410
439
  }
@@ -412,7 +441,7 @@ var PayslipModule = class extends BaseClient {
412
441
  * Get payslip header
413
442
  */
414
443
  async getHeader(params) {
415
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
444
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
416
445
  const searchParams = new URLSearchParams();
417
446
  searchParams.set("employeeNumber", employeeNumber);
418
447
  searchParams.set("periodName", params.periodName);
@@ -423,7 +452,7 @@ var PayslipModule = class extends BaseClient {
423
452
  * Get payslip details
424
453
  */
425
454
  async getDetails(params) {
426
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
455
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
427
456
  const searchParams = new URLSearchParams();
428
457
  searchParams.set("employeeNumber", employeeNumber);
429
458
  searchParams.set("periodName", params.periodName);
@@ -434,7 +463,7 @@ var PayslipModule = class extends BaseClient {
434
463
  * Get payslip leave details
435
464
  */
436
465
  async getLeaveDetails(params) {
437
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
466
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
438
467
  const searchParams = new URLSearchParams();
439
468
  searchParams.set("employeeNumber", employeeNumber);
440
469
  searchParams.set("periodName", params.periodName);
@@ -445,7 +474,7 @@ var PayslipModule = class extends BaseClient {
445
474
  * Get payslip run balances
446
475
  */
447
476
  async getRunBalances(params) {
448
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
477
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
449
478
  const searchParams = new URLSearchParams();
450
479
  searchParams.set("employeeNumber", employeeNumber);
451
480
  searchParams.set("periodName", params.periodName);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/config.ts","../src/errors/index.ts","../src/client/BaseClient.ts","../src/modules/AuthModule.ts","../src/modules/LeavesModule.ts","../src/modules/SitRequestsModule.ts","../src/modules/NotificationsModule.ts","../src/modules/PayslipModule.ts","../src/modules/EmployeeModule.ts","../src/modules/AccrualBalancesModule.ts","../src/modules/FormsModule.ts","../src/modules/HealthModule.ts","../src/client/OracleEBSClient.ts"],"names":["ky"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SDK Configuration\n */\nexport interface OracleEBSConfig {\n /** Base URL of the API */\n baseUrl: string;\n\n /** JWT token for authentication */\n token?: string;\n\n /** Request timeout in milliseconds */\n timeout?: number;\n\n /** Number of retries for failed requests */\n retries?: number;\n\n /** Retry delay in milliseconds */\n retryDelay?: number;\n\n /** Cache configuration */\n cache?: {\n enabled?: boolean;\n ttl?: number; // seconds\n };\n\n /** Logging configuration */\n logging?: {\n enabled?: boolean;\n level?: 'debug' | 'info' | 'warn' | 'error';\n };\n\n /** Custom error handler */\n onError?: (error: Error) => void;\n\n /** Custom request interceptor */\n onRequest?: (request: Request) => Request | Promise<Request>;\n\n /** Custom response interceptor */\n onResponse?: (response: Response) => Response | Promise<Response>;\n}\n\nexport const defaultConfig: Partial<OracleEBSConfig> = {\n timeout: 30000,\n retries: 3,\n retryDelay: 1000,\n cache: {\n enabled: true,\n ttl: 300,\n },\n logging: {\n enabled: false,\n level: 'info',\n },\n};\n","/**\n * Base API Error class\n */\nexport class APIError extends Error {\n public readonly statusCode: number;\n public readonly code: string;\n public readonly details?: any;\n\n constructor(message: string, statusCode: number, code: string, details?: any) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.code = code;\n this.details = details;\n Object.setPrototypeOf(this, APIError.prototype);\n }\n}\n\n/**\n * Validation Error (400)\n */\nexport class ValidationError extends APIError {\n public readonly fields?: Record<string, string[]>;\n\n constructor(message: string, fields?: Record<string, string[]>, details?: any) {\n super(message, 400, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n this.fields = fields;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Unauthorized Error (401)\n */\nexport class UnauthorizedError extends APIError {\n constructor(message: string = 'Unauthorized', details?: any) {\n super(message, 401, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n Object.setPrototypeOf(this, UnauthorizedError.prototype);\n }\n}\n\n/**\n * Forbidden Error (403)\n */\nexport class ForbiddenError extends APIError {\n constructor(message: string = 'Forbidden', details?: any) {\n super(message, 403, 'FORBIDDEN', details);\n this.name = 'ForbiddenError';\n Object.setPrototypeOf(this, ForbiddenError.prototype);\n }\n}\n\n/**\n * Not Found Error (404)\n */\nexport class NotFoundError extends APIError {\n constructor(message: string = 'Resource not found', details?: any) {\n super(message, 404, 'NOT_FOUND', details);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Network Error\n */\nexport class NetworkError extends APIError {\n constructor(message: string = 'Network error occurred', details?: any) {\n super(message, 0, 'NETWORK_ERROR', details);\n this.name = 'NetworkError';\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\n/**\n * Timeout Error (408)\n */\nexport class TimeoutError extends APIError {\n constructor(message: string = 'Request timeout', details?: any) {\n super(message, 408, 'TIMEOUT', details);\n this.name = 'TimeoutError';\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\n/**\n * Server Error (500+)\n */\nexport class ServerError extends APIError {\n constructor(message: string = 'Internal server error', statusCode: number = 500, details?: any) {\n super(message, statusCode, 'SERVER_ERROR', details);\n this.name = 'ServerError';\n Object.setPrototypeOf(this, ServerError.prototype);\n }\n}\n","import ky, { type KyInstance, type Options } from 'ky';\nimport type { OracleEBSConfig } from './config';\nimport { defaultConfig } from './config';\nimport {\n APIError,\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n NotFoundError,\n NetworkError,\n TimeoutError,\n ServerError,\n} from '../errors';\nimport type { APIResponse } from '../types/common';\n\nexport class BaseClient {\n protected client: KyInstance;\n protected config: OracleEBSConfig;\n protected token?: string;\n\n constructor(config: OracleEBSConfig) {\n this.config = { ...defaultConfig, ...config };\n this.token = config.token;\n\n this.client = ky.create({\n prefixUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n retry: {\n limit: this.config.retries || 0,\n methods: ['get', 'post', 'put', 'delete'],\n statusCodes: [408, 413, 429, 500, 502, 503, 504],\n },\n hooks: {\n beforeRequest: [\n (request) => {\n // Add authorization header\n if (this.token) {\n request.headers.set('Authorization', `Bearer ${this.token}`);\n }\n\n // Add content type\n if (!request.headers.has('Content-Type')) {\n request.headers.set('Content-Type', 'application/json');\n }\n\n // Custom request interceptor\n if (this.config.onRequest) {\n return this.config.onRequest(request);\n }\n\n return request;\n },\n ],\n beforeRetry: [\n ({ request, retryCount }) => {\n this.log('warn', `Retrying request (${retryCount}):`, request.url);\n },\n ],\n afterResponse: [\n async (_request, _options, response) => {\n // Custom response interceptor\n if (this.config.onResponse) {\n return this.config.onResponse(response);\n }\n return response;\n },\n ],\n },\n });\n }\n\n /**\n * Set authentication token\n */\n setToken(token: string): void {\n this.token = token;\n }\n\n /**\n * Clear authentication token\n */\n clearToken(): void {\n this.token = undefined;\n }\n\n /**\n * Make a GET request\n */\n protected async get<T>(url: string, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `GET ${url}`);\n const response = await this.client.get(url, options).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a POST request\n */\n protected async post<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `POST ${url}`);\n const response = await this.client.post(url, { json: data, ...options }).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a PUT request\n */\n protected async put<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `PUT ${url}`);\n const response = await this.client.put(url, { json: data, ...options }).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a DELETE request\n */\n protected async delete<T>(url: string, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `DELETE ${url}`);\n const response = await this.client.delete(url, options).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Handle API errors\n */\n protected handleError(error: any): Error {\n // Only log if logging is enabled\n if (this.config.logging?.enabled) {\n this.log('error', 'API Error:', error);\n }\n\n // Network errors\n if (error.name === 'TypeError' || error.message?.includes('fetch')) {\n const networkError = new NetworkError('Network error occurred', error);\n this.config.onError?.(networkError);\n return networkError;\n }\n\n // Timeout errors\n if (error.name === 'TimeoutError') {\n const timeoutError = new TimeoutError('Request timeout', error);\n this.config.onError?.(timeoutError);\n return timeoutError;\n }\n\n // HTTP errors\n if (error.response) {\n const status = error.response.status;\n const message = error.response.statusText || 'An error occurred';\n\n let apiError: APIError;\n\n switch (status) {\n case 400:\n apiError = new ValidationError(message);\n break;\n case 401:\n apiError = new UnauthorizedError(message);\n break;\n case 403:\n apiError = new ForbiddenError(message);\n break;\n case 404:\n apiError = new NotFoundError(message);\n break;\n case 408:\n apiError = new TimeoutError(message);\n break;\n case 500:\n case 502:\n case 503:\n case 504:\n apiError = new ServerError(message, status);\n break;\n default:\n apiError = new APIError(message, status, 'API_ERROR');\n }\n\n this.config.onError?.(apiError);\n return apiError;\n }\n\n // Unknown error\n const unknownError = new APIError(\n error.message || 'An unknown error occurred',\n 0,\n 'UNKNOWN_ERROR'\n );\n this.config.onError?.(unknownError);\n return unknownError;\n }\n\n /**\n * Log messages\n */\n protected log(level: 'debug' | 'info' | 'warn' | 'error', ...args: any[]): void {\n if (!this.config.logging?.enabled) return;\n\n const configLevel = this.config.logging.level || 'info';\n const levels = ['debug', 'info', 'warn', 'error'];\n const currentLevelIndex = levels.indexOf(level);\n const configLevelIndex = levels.indexOf(configLevel);\n\n if (currentLevelIndex >= configLevelIndex) {\n console[level]('[OracleEBS SDK]', ...args);\n }\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n LoginCredentials,\n LoginResponse,\n UserContext,\n} from '../types/auth';\n\nexport class AuthModule extends BaseClient {\n /**\n * Login with username and password\n */\n async login(credentials: LoginCredentials): Promise<LoginResponse> {\n const response = await this.post<LoginResponse>('auth/login', credentials);\n\n // Automatically set token after successful login\n if (response.data?.access_token) {\n this.setToken(response.data.access_token);\n }\n\n return response.data!;\n }\n\n /**\n * Logout (clear token)\n */\n async logout(): Promise<void> {\n this.clearToken();\n }\n\n /**\n * Get user context\n */\n async getUserContext(): Promise<UserContext> {\n const response = await this.get<UserContext>('user-context');\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetAbsenceTypesParams,\n GetAbsenceTypesResponse,\n GetLeaveHistoryResponse,\n CreateLeaveRequestInput,\n CreateLeaveRequestResponse,\n} from '../types/leaves';\n\nexport class LeavesModule extends BaseClient {\n /**\n * Get restricted absence types for the authenticated user\n */\n async getRestrictedTypes(params?: GetAbsenceTypesParams): Promise<GetAbsenceTypesResponse> {\n const searchParams = new URLSearchParams();\n if (params?.effectiveDate) {\n searchParams.set('effectiveDate', params.effectiveDate);\n }\n\n const url = `leaves/restricted-absence-types${searchParams.toString() ? `?${searchParams}` : ''}`;\n const response = await this.get<GetAbsenceTypesResponse>(url);\n return response.data!;\n }\n\n /**\n * Get combined leave history for the authenticated user\n */\n async getHistory(): Promise<GetLeaveHistoryResponse> {\n const response = await this.get<GetLeaveHistoryResponse>('leaves/combined-leave-history');\n return response.data!;\n }\n\n /**\n * Create a new leave request\n */\n async createRequest(input: CreateLeaveRequestInput): Promise<CreateLeaveRequestResponse> {\n const response = await this.post<CreateLeaveRequestResponse>('leaves/requests', input);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetSitSegmentsParams,\n GetSitSegmentsResponse,\n SaveAndPreviewSitRequestInput,\n SaveAndPreviewSitRequestResponse,\n SubmitSitRequestInput,\n SubmitSitRequestResponse,\n GetSitHistoryParams,\n GetSitHistoryResponse,\n} from '../types/sit-requests';\n\nexport class SitRequestsModule extends BaseClient {\n /**\n * Get SIT segments for form configuration\n */\n async getSegments(params: GetSitSegmentsParams): Promise<GetSitSegmentsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('idFlexNum', params.idFlexNum);\n\n const response = await this.get<GetSitSegmentsResponse>(`sit-requests/segments?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Save and preview SIT request\n */\n async saveAndPreview(input: SaveAndPreviewSitRequestInput): Promise<SaveAndPreviewSitRequestResponse> {\n const response = await this.post<SaveAndPreviewSitRequestResponse>('sit-requests/save-and-preview', input);\n return response.data!;\n }\n\n /**\n * Submit SIT request\n */\n async submit(input: SubmitSitRequestInput): Promise<SubmitSitRequestResponse> {\n const response = await this.post<SubmitSitRequestResponse>('sit-requests/submit', input);\n return response.data!;\n }\n\n /**\n * Get SIT request history\n */\n async getHistory(params?: GetSitHistoryParams): Promise<GetSitHistoryResponse> {\n const searchParams = new URLSearchParams();\n if (params?.startDate) searchParams.set('startDate', params.startDate);\n if (params?.endDate) searchParams.set('endDate', params.endDate);\n\n const url = `sit-requests/history${searchParams.toString() ? `?${searchParams}` : ''}`;\n const response = await this.get<GetSitHistoryResponse>(url);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetNotificationsResponse,\n GetNotificationDetailsParams,\n NotificationDetails,\n ProcessApprovalInput,\n ProcessApprovalResponse,\n CloseFyiParams,\n CloseFyiResponse,\n} from '../types/notifications';\n\nexport class NotificationsModule extends BaseClient {\n /**\n * Get notification list for the authenticated user\n */\n async getList(): Promise<GetNotificationsResponse> {\n const response = await this.get<GetNotificationsResponse>('notifications/list');\n return response.data!;\n }\n\n /**\n * Get notification details\n */\n async getDetails(params: GetNotificationDetailsParams): Promise<NotificationDetails> {\n const searchParams = new URLSearchParams();\n searchParams.set('notificationId', params.notificationId);\n\n const response = await this.get<NotificationDetails>(`notifications/details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Process approval action (approve/reject)\n */\n async processApproval(input: ProcessApprovalInput): Promise<ProcessApprovalResponse> {\n const response = await this.post<ProcessApprovalResponse>('notifications/process-approval', input);\n return response.data!;\n }\n\n /**\n * Close FYI notification\n */\n async closeFyi(params: CloseFyiParams): Promise<CloseFyiResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('notificationId', params.notificationId);\n\n const response = await this.get<CloseFyiResponse>(`notifications/close-fyi?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetPayslipHeaderParams,\n PayslipHeader,\n GetPayslipDetailsParams,\n GetPayslipDetailsResponse,\n GetPayslipLeaveDetailsParams,\n GetPayslipLeaveDetailsResponse,\n GetPayslipRunBalancesParams,\n GetPayslipRunBalancesResponse,\n} from '../types/payslip';\n\nexport class PayslipModule extends BaseClient {\n /**\n * Get employee number from authenticated user\n */\n private async getEmployeeNumber(providedEmployeeNumber?: string): Promise<string> {\n if (providedEmployeeNumber) {\n return providedEmployeeNumber;\n }\n\n // Fetch from employee personal info\n const response = await this.get<any>('employee/personal-info');\n const employeeNumber = response.data?.EMPLOYEE_NUMBER || response.data?.employeeNumber;\n\n if (!employeeNumber) {\n throw new Error('Employee number not found in user profile');\n }\n\n return employeeNumber;\n }\n\n /**\n * Get payslip header\n */\n async getHeader(params: GetPayslipHeaderParams): Promise<PayslipHeader> {\n const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<PayslipHeader>(`payslip/header?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip details\n */\n async getDetails(params: GetPayslipDetailsParams): Promise<GetPayslipDetailsResponse> {\n const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipDetailsResponse>(`payslip/details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip leave details\n */\n async getLeaveDetails(params: GetPayslipLeaveDetailsParams): Promise<GetPayslipLeaveDetailsResponse> {\n const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipLeaveDetailsResponse>(`payslip/leave-details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip run balances\n */\n async getRunBalances(params: GetPayslipRunBalancesParams): Promise<GetPayslipRunBalancesResponse> {\n const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipRunBalancesResponse>(`payslip/run-balances?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n PersonalInformation,\n GetEmployeeHierarchyResponse,\n} from '../types/employee';\n\nexport class EmployeeModule extends BaseClient {\n /**\n * Get personal information for the authenticated user\n */\n async getPersonalInfo(): Promise<PersonalInformation> {\n const response = await this.get<PersonalInformation>('personal-information/details');\n return response.data!;\n }\n\n /**\n * Get employee hierarchy\n */\n async getHierarchy(): Promise<GetEmployeeHierarchyResponse> {\n const response = await this.get<GetEmployeeHierarchyResponse>('employee-hierarchy');\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetAccrualBalancesParams,\n GetAccrualBalancesResponse,\n} from '../types/accrual-balances';\n\nexport class AccrualBalancesModule extends BaseClient {\n /**\n * Get accrual balances for the authenticated user\n */\n async getBalances(params: GetAccrualBalancesParams): Promise<GetAccrualBalancesResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('calculationDate', params.calculationDate);\n\n const response = await this.get<GetAccrualBalancesResponse>(`accrual-balances?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetTableColumnsParams,\n GetTableColumnsResponse,\n GetDffSegmentsParams,\n GetDffSegmentsResponse,\n} from '../types/forms';\n\nexport class FormsModule extends BaseClient {\n /**\n * Get table columns for form generation\n */\n async getTableColumns(params: GetTableColumnsParams): Promise<GetTableColumnsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('tableName', params.tableName);\n\n const response = await this.get<GetTableColumnsResponse>(`forms/table-columns?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get DFF segments for additional fields\n */\n async getDffSegments(params: GetDffSegmentsParams): Promise<GetDffSegmentsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('applicationId', params.applicationId);\n searchParams.set('flexfieldName', params.flexfieldName);\n\n const response = await this.get<GetDffSegmentsResponse>(`forms/dff-segments?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type { HealthCheckResponse } from '../types/health';\n\nexport class HealthModule extends BaseClient {\n /**\n * Check system health\n */\n async check(): Promise<HealthCheckResponse> {\n // Health endpoint doesn't use /api/v1 prefix\n const response = await this.client.get('../health').json<HealthCheckResponse>();\n return response;\n }\n\n /**\n * Simple ping to check if server is running\n */\n async ping(): Promise<string> {\n const response = await this.client.get('../').text();\n return response;\n }\n}\n","import type { OracleEBSConfig } from './config';\nimport { AuthModule } from '../modules/AuthModule';\nimport { LeavesModule } from '../modules/LeavesModule';\nimport { SitRequestsModule } from '../modules/SitRequestsModule';\nimport { NotificationsModule } from '../modules/NotificationsModule';\nimport { PayslipModule } from '../modules/PayslipModule';\nimport { EmployeeModule } from '../modules/EmployeeModule';\nimport { AccrualBalancesModule } from '../modules/AccrualBalancesModule';\nimport { FormsModule } from '../modules/FormsModule';\nimport { HealthModule } from '../modules/HealthModule';\n\n/**\n * Main Oracle EBS SDK Client\n * \n * @example\n * ```typescript\n * const client = new OracleEBSClient({\n * baseUrl: 'http://localhost:3000/api/v1',\n * logging: { enabled: true },\n * });\n * \n * // Login\n * await client.auth.login({ username, password });\n * \n * // Get leave types\n * const types = await client.leaves.getRestrictedTypes();\n * \n * // Create leave request\n * const request = await client.leaves.createRequest({\n * absenceTypeId: '71',\n * startDate: '2026-01-20',\n * endDate: '2026-01-22',\n * days: 3,\n * });\n * ```\n */\nexport class OracleEBSClient {\n public readonly auth: AuthModule;\n public readonly leaves: LeavesModule;\n public readonly sitRequests: SitRequestsModule;\n public readonly notifications: NotificationsModule;\n public readonly payslip: PayslipModule;\n public readonly employee: EmployeeModule;\n public readonly accrualBalances: AccrualBalancesModule;\n public readonly forms: FormsModule;\n public readonly health: HealthModule;\n\n constructor(config: OracleEBSConfig) {\n this.auth = new AuthModule(config);\n this.leaves = new LeavesModule(config);\n this.sitRequests = new SitRequestsModule(config);\n this.notifications = new NotificationsModule(config);\n this.payslip = new PayslipModule(config);\n this.employee = new EmployeeModule(config);\n this.accrualBalances = new AccrualBalancesModule(config);\n this.forms = new FormsModule(config);\n this.health = new HealthModule(config);\n }\n\n /**\n * Set authentication token for all modules\n */\n setToken(token: string): void {\n this.auth.setToken(token);\n this.leaves.setToken(token);\n this.sitRequests.setToken(token);\n this.notifications.setToken(token);\n this.payslip.setToken(token);\n this.employee.setToken(token);\n this.accrualBalances.setToken(token);\n this.forms.setToken(token);\n this.health.setToken(token);\n }\n\n /**\n * Clear authentication token from all modules\n */\n clearToken(): void {\n this.auth.clearToken();\n this.leaves.clearToken();\n this.sitRequests.clearToken();\n this.notifications.clearToken();\n this.payslip.clearToken();\n this.employee.clearToken();\n this.accrualBalances.clearToken();\n this.forms.clearToken();\n this.health.clearToken();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/client/config.ts","../src/errors/index.ts","../src/client/BaseClient.ts","../src/modules/AuthModule.ts","../src/modules/LeavesModule.ts","../src/modules/SitRequestsModule.ts","../src/modules/NotificationsModule.ts","../src/utils/jwt.ts","../src/modules/PayslipModule.ts","../src/modules/EmployeeModule.ts","../src/modules/AccrualBalancesModule.ts","../src/modules/FormsModule.ts","../src/modules/HealthModule.ts","../src/client/OracleEBSClient.ts"],"names":["ky"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SDK Configuration\n */\nexport interface OracleEBSConfig {\n /** Base URL of the API */\n baseUrl: string;\n\n /** JWT token for authentication */\n token?: string;\n\n /** Request timeout in milliseconds */\n timeout?: number;\n\n /** Number of retries for failed requests */\n retries?: number;\n\n /** Retry delay in milliseconds */\n retryDelay?: number;\n\n /** Cache configuration */\n cache?: {\n enabled?: boolean;\n ttl?: number; // seconds\n };\n\n /** Logging configuration */\n logging?: {\n enabled?: boolean;\n level?: 'debug' | 'info' | 'warn' | 'error';\n };\n\n /** Custom error handler */\n onError?: (error: Error) => void;\n\n /** Custom request interceptor */\n onRequest?: (request: Request) => Request | Promise<Request>;\n\n /** Custom response interceptor */\n onResponse?: (response: Response) => Response | Promise<Response>;\n}\n\nexport const defaultConfig: Partial<OracleEBSConfig> = {\n timeout: 30000,\n retries: 3,\n retryDelay: 1000,\n cache: {\n enabled: true,\n ttl: 300,\n },\n logging: {\n enabled: false,\n level: 'info',\n },\n};\n","/**\n * Base API Error class\n */\nexport class APIError extends Error {\n public readonly statusCode: number;\n public readonly code: string;\n public readonly details?: any;\n\n constructor(message: string, statusCode: number, code: string, details?: any) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.code = code;\n this.details = details;\n Object.setPrototypeOf(this, APIError.prototype);\n }\n}\n\n/**\n * Validation Error (400)\n */\nexport class ValidationError extends APIError {\n public readonly fields?: Record<string, string[]>;\n\n constructor(message: string, fields?: Record<string, string[]>, details?: any) {\n super(message, 400, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n this.fields = fields;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Unauthorized Error (401)\n */\nexport class UnauthorizedError extends APIError {\n constructor(message: string = 'Unauthorized', details?: any) {\n super(message, 401, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n Object.setPrototypeOf(this, UnauthorizedError.prototype);\n }\n}\n\n/**\n * Forbidden Error (403)\n */\nexport class ForbiddenError extends APIError {\n constructor(message: string = 'Forbidden', details?: any) {\n super(message, 403, 'FORBIDDEN', details);\n this.name = 'ForbiddenError';\n Object.setPrototypeOf(this, ForbiddenError.prototype);\n }\n}\n\n/**\n * Not Found Error (404)\n */\nexport class NotFoundError extends APIError {\n constructor(message: string = 'Resource not found', details?: any) {\n super(message, 404, 'NOT_FOUND', details);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Network Error\n */\nexport class NetworkError extends APIError {\n constructor(message: string = 'Network error occurred', details?: any) {\n super(message, 0, 'NETWORK_ERROR', details);\n this.name = 'NetworkError';\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\n/**\n * Timeout Error (408)\n */\nexport class TimeoutError extends APIError {\n constructor(message: string = 'Request timeout', details?: any) {\n super(message, 408, 'TIMEOUT', details);\n this.name = 'TimeoutError';\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\n/**\n * Server Error (500+)\n */\nexport class ServerError extends APIError {\n constructor(message: string = 'Internal server error', statusCode: number = 500, details?: any) {\n super(message, statusCode, 'SERVER_ERROR', details);\n this.name = 'ServerError';\n Object.setPrototypeOf(this, ServerError.prototype);\n }\n}\n","import ky, { type KyInstance, type Options } from 'ky';\nimport type { OracleEBSConfig } from './config';\nimport { defaultConfig } from './config';\nimport {\n APIError,\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n NotFoundError,\n NetworkError,\n TimeoutError,\n ServerError,\n} from '../errors';\nimport type { APIResponse } from '../types/common';\n\nexport class BaseClient {\n protected client: KyInstance;\n protected config: OracleEBSConfig;\n protected token?: string;\n\n constructor(config: OracleEBSConfig) {\n this.config = { ...defaultConfig, ...config };\n this.token = config.token;\n\n this.client = ky.create({\n prefixUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n retry: {\n limit: this.config.retries || 0,\n methods: ['get', 'post', 'put', 'delete'],\n statusCodes: [408, 413, 429, 500, 502, 503, 504],\n },\n hooks: {\n beforeRequest: [\n (request) => {\n // Add authorization header\n if (this.token) {\n request.headers.set('Authorization', `Bearer ${this.token}`);\n }\n\n // Add content type\n if (!request.headers.has('Content-Type')) {\n request.headers.set('Content-Type', 'application/json');\n }\n\n // Custom request interceptor\n if (this.config.onRequest) {\n return this.config.onRequest(request);\n }\n\n return request;\n },\n ],\n beforeRetry: [\n ({ request, retryCount }) => {\n this.log('warn', `Retrying request (${retryCount}):`, request.url);\n },\n ],\n afterResponse: [\n async (_request, _options, response) => {\n // Custom response interceptor\n if (this.config.onResponse) {\n return this.config.onResponse(response);\n }\n return response;\n },\n ],\n },\n });\n }\n\n /**\n * Set authentication token\n */\n setToken(token: string): void {\n this.token = token;\n }\n\n /**\n * Clear authentication token\n */\n clearToken(): void {\n this.token = undefined;\n }\n\n /**\n * Get current authentication token\n */\n protected getToken(): string | null {\n return this.token || null;\n }\n\n /**\n * Make a GET request\n */\n protected async get<T>(url: string, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `GET ${url}`);\n const response = await this.client.get(url, options).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a POST request\n */\n protected async post<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `POST ${url}`);\n const response = await this.client.post(url, { json: data, ...options }).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a PUT request\n */\n protected async put<T>(url: string, data?: any, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `PUT ${url}`);\n const response = await this.client.put(url, { json: data, ...options }).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Make a DELETE request\n */\n protected async delete<T>(url: string, options?: Options): Promise<APIResponse<T>> {\n try {\n this.log('info', `DELETE ${url}`);\n const response = await this.client.delete(url, options).json<APIResponse<T>>();\n return response;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Handle API errors\n */\n protected handleError(error: any): Error {\n // Only log if logging is enabled\n if (this.config.logging?.enabled) {\n this.log('error', 'API Error:', error);\n }\n\n // Network errors\n if (error.name === 'TypeError' || error.message?.includes('fetch')) {\n const networkError = new NetworkError('Network error occurred', error);\n this.config.onError?.(networkError);\n return networkError;\n }\n\n // Timeout errors\n if (error.name === 'TimeoutError') {\n const timeoutError = new TimeoutError('Request timeout', error);\n this.config.onError?.(timeoutError);\n return timeoutError;\n }\n\n // HTTP errors\n if (error.response) {\n const status = error.response.status;\n const message = error.response.statusText || 'An error occurred';\n\n let apiError: APIError;\n\n switch (status) {\n case 400:\n apiError = new ValidationError(message);\n break;\n case 401:\n apiError = new UnauthorizedError(message);\n break;\n case 403:\n apiError = new ForbiddenError(message);\n break;\n case 404:\n apiError = new NotFoundError(message);\n break;\n case 408:\n apiError = new TimeoutError(message);\n break;\n case 500:\n case 502:\n case 503:\n case 504:\n apiError = new ServerError(message, status);\n break;\n default:\n apiError = new APIError(message, status, 'API_ERROR');\n }\n\n this.config.onError?.(apiError);\n return apiError;\n }\n\n // Unknown error\n const unknownError = new APIError(\n error.message || 'An unknown error occurred',\n 0,\n 'UNKNOWN_ERROR'\n );\n this.config.onError?.(unknownError);\n return unknownError;\n }\n\n /**\n * Log messages\n */\n protected log(level: 'debug' | 'info' | 'warn' | 'error', ...args: any[]): void {\n if (!this.config.logging?.enabled) return;\n\n const configLevel = this.config.logging.level || 'info';\n const levels = ['debug', 'info', 'warn', 'error'];\n const currentLevelIndex = levels.indexOf(level);\n const configLevelIndex = levels.indexOf(configLevel);\n\n if (currentLevelIndex >= configLevelIndex) {\n console[level]('[OracleEBS SDK]', ...args);\n }\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n LoginCredentials,\n LoginResponse,\n UserContext,\n} from '../types/auth';\n\nexport class AuthModule extends BaseClient {\n /**\n * Login with username and password\n */\n async login(credentials: LoginCredentials): Promise<LoginResponse> {\n const response = await this.post<LoginResponse>('auth/login', credentials);\n\n // Automatically set token after successful login\n if (response.data?.access_token) {\n this.setToken(response.data.access_token);\n }\n\n return response.data!;\n }\n\n /**\n * Logout (clear token)\n */\n async logout(): Promise<void> {\n this.clearToken();\n }\n\n /**\n * Get user context\n */\n async getUserContext(): Promise<UserContext> {\n const response = await this.get<UserContext>('user-context');\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetAbsenceTypesParams,\n GetAbsenceTypesResponse,\n GetLeaveHistoryResponse,\n CreateLeaveRequestInput,\n CreateLeaveRequestResponse,\n} from '../types/leaves';\n\nexport class LeavesModule extends BaseClient {\n /**\n * Get restricted absence types for the authenticated user\n */\n async getRestrictedTypes(params?: GetAbsenceTypesParams): Promise<GetAbsenceTypesResponse> {\n const searchParams = new URLSearchParams();\n if (params?.effectiveDate) {\n searchParams.set('effectiveDate', params.effectiveDate);\n }\n\n const url = `leaves/restricted-absence-types${searchParams.toString() ? `?${searchParams}` : ''}`;\n const response = await this.get<GetAbsenceTypesResponse>(url);\n return response.data!;\n }\n\n /**\n * Get combined leave history for the authenticated user\n */\n async getHistory(): Promise<GetLeaveHistoryResponse> {\n const response = await this.get<GetLeaveHistoryResponse>('leaves/combined-leave-history');\n return response.data!;\n }\n\n /**\n * Create a new leave request\n */\n async createRequest(input: CreateLeaveRequestInput): Promise<CreateLeaveRequestResponse> {\n const response = await this.post<CreateLeaveRequestResponse>('leaves/requests', input);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetSitSegmentsParams,\n GetSitSegmentsResponse,\n SaveAndPreviewSitRequestInput,\n SaveAndPreviewSitRequestResponse,\n SubmitSitRequestInput,\n SubmitSitRequestResponse,\n GetSitHistoryParams,\n GetSitHistoryResponse,\n} from '../types/sit-requests';\n\nexport class SitRequestsModule extends BaseClient {\n /**\n * Get SIT segments for form configuration\n */\n async getSegments(params: GetSitSegmentsParams): Promise<GetSitSegmentsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('idFlexNum', params.idFlexNum);\n\n const response = await this.get<GetSitSegmentsResponse>(`sit-requests/segments?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Save and preview SIT request\n */\n async saveAndPreview(input: SaveAndPreviewSitRequestInput): Promise<SaveAndPreviewSitRequestResponse> {\n const response = await this.post<SaveAndPreviewSitRequestResponse>('sit-requests/save-and-preview', input);\n return response.data!;\n }\n\n /**\n * Submit SIT request\n */\n async submit(input: SubmitSitRequestInput): Promise<SubmitSitRequestResponse> {\n const response = await this.post<SubmitSitRequestResponse>('sit-requests/submit', input);\n return response.data!;\n }\n\n /**\n * Get SIT request history\n */\n async getHistory(params?: GetSitHistoryParams): Promise<GetSitHistoryResponse> {\n const searchParams = new URLSearchParams();\n if (params?.startDate) searchParams.set('startDate', params.startDate);\n if (params?.endDate) searchParams.set('endDate', params.endDate);\n\n const url = `sit-requests/history${searchParams.toString() ? `?${searchParams}` : ''}`;\n const response = await this.get<GetSitHistoryResponse>(url);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetNotificationsResponse,\n GetNotificationDetailsParams,\n NotificationDetails,\n ProcessApprovalInput,\n ProcessApprovalResponse,\n CloseFyiParams,\n CloseFyiResponse,\n} from '../types/notifications';\n\nexport class NotificationsModule extends BaseClient {\n /**\n * Get notification list for the authenticated user\n */\n async getList(): Promise<GetNotificationsResponse> {\n const response = await this.get<GetNotificationsResponse>('notifications/list');\n return response.data!;\n }\n\n /**\n * Get notification details\n */\n async getDetails(params: GetNotificationDetailsParams): Promise<NotificationDetails> {\n const searchParams = new URLSearchParams();\n searchParams.set('notificationId', params.notificationId);\n\n const response = await this.get<NotificationDetails>(`notifications/details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Process approval action (approve/reject)\n */\n async processApproval(input: ProcessApprovalInput): Promise<ProcessApprovalResponse> {\n const response = await this.post<ProcessApprovalResponse>('notifications/process-approval', input);\n return response.data!;\n }\n\n /**\n * Close FYI notification\n */\n async closeFyi(params: CloseFyiParams): Promise<CloseFyiResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('notificationId', params.notificationId);\n\n const response = await this.get<CloseFyiResponse>(`notifications/close-fyi?${searchParams}`);\n return response.data!;\n }\n}\n","/**\n * JWT Utility Functions\n */\n\nexport interface JWTPayload {\n USER_ID?: string;\n PERSON_ID?: string;\n EMPLOYEE_NUMBER?: string;\n [key: string]: any;\n}\n\n/**\n * Decode a JWT token without verification\n * Note: This does NOT verify the signature - that's the backend's job\n * We only decode to extract claims from an already-validated token\n */\nexport function decodeJWT(token: string): JWTPayload | null {\n try {\n // JWT format: header.payload.signature\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n\n // Decode base64url payload (second part)\n const payload = parts[1];\n\n // Convert base64url to base64\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n\n // Decode base64 to string\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n\n return JSON.parse(jsonPayload);\n } catch (error) {\n console.error('Failed to decode JWT:', error);\n return null;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetPayslipHeaderParams,\n PayslipHeader,\n GetPayslipDetailsParams,\n GetPayslipDetailsResponse,\n GetPayslipLeaveDetailsParams,\n GetPayslipLeaveDetailsResponse,\n GetPayslipRunBalancesParams,\n GetPayslipRunBalancesResponse,\n} from '../types/payslip';\nimport { decodeJWT } from '../utils/jwt';\n\nexport class PayslipModule extends BaseClient {\n /**\n * Get employee number from JWT token\n */\n private getEmployeeNumberFromToken(providedEmployeeNumber?: string): string {\n if (providedEmployeeNumber) {\n return providedEmployeeNumber;\n }\n\n // Get token\n const token = this.getToken();\n if (!token) {\n throw new Error('No authentication token available. Please login first.');\n }\n\n // Decode JWT to extract employee number\n const payload = decodeJWT(token);\n const employeeNumber = payload?.EMPLOYEE_NUMBER;\n\n if (!employeeNumber) {\n throw new Error('Employee number not found in authentication token');\n }\n\n return employeeNumber;\n }\n\n /**\n * Get payslip header\n */\n async getHeader(params: GetPayslipHeaderParams): Promise<PayslipHeader> {\n const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<PayslipHeader>(`payslip/header?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip details\n */\n async getDetails(params: GetPayslipDetailsParams): Promise<GetPayslipDetailsResponse> {\n const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipDetailsResponse>(`payslip/details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip leave details\n */\n async getLeaveDetails(params: GetPayslipLeaveDetailsParams): Promise<GetPayslipLeaveDetailsResponse> {\n const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipLeaveDetailsResponse>(`payslip/leave-details?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get payslip run balances\n */\n async getRunBalances(params: GetPayslipRunBalancesParams): Promise<GetPayslipRunBalancesResponse> {\n const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);\n\n const searchParams = new URLSearchParams();\n searchParams.set('employeeNumber', employeeNumber);\n searchParams.set('periodName', params.periodName);\n\n const response = await this.get<GetPayslipRunBalancesResponse>(`payslip/run-balances?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n PersonalInformation,\n GetEmployeeHierarchyResponse,\n} from '../types/employee';\n\nexport class EmployeeModule extends BaseClient {\n /**\n * Get personal information for the authenticated user\n */\n async getPersonalInfo(): Promise<PersonalInformation> {\n const response = await this.get<PersonalInformation>('personal-information/details');\n return response.data!;\n }\n\n /**\n * Get employee hierarchy\n */\n async getHierarchy(): Promise<GetEmployeeHierarchyResponse> {\n const response = await this.get<GetEmployeeHierarchyResponse>('employee-hierarchy');\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetAccrualBalancesParams,\n GetAccrualBalancesResponse,\n} from '../types/accrual-balances';\n\nexport class AccrualBalancesModule extends BaseClient {\n /**\n * Get accrual balances for the authenticated user\n */\n async getBalances(params: GetAccrualBalancesParams): Promise<GetAccrualBalancesResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('calculationDate', params.calculationDate);\n\n const response = await this.get<GetAccrualBalancesResponse>(`accrual-balances?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type {\n GetTableColumnsParams,\n GetTableColumnsResponse,\n GetDffSegmentsParams,\n GetDffSegmentsResponse,\n} from '../types/forms';\n\nexport class FormsModule extends BaseClient {\n /**\n * Get table columns for form generation\n */\n async getTableColumns(params: GetTableColumnsParams): Promise<GetTableColumnsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('tableName', params.tableName);\n\n const response = await this.get<GetTableColumnsResponse>(`forms/table-columns?${searchParams}`);\n return response.data!;\n }\n\n /**\n * Get DFF segments for additional fields\n */\n async getDffSegments(params: GetDffSegmentsParams): Promise<GetDffSegmentsResponse> {\n const searchParams = new URLSearchParams();\n searchParams.set('applicationId', params.applicationId);\n searchParams.set('flexfieldName', params.flexfieldName);\n\n const response = await this.get<GetDffSegmentsResponse>(`forms/dff-segments?${searchParams}`);\n return response.data!;\n }\n}\n","import { BaseClient } from '../client/BaseClient';\nimport type { HealthCheckResponse } from '../types/health';\n\nexport class HealthModule extends BaseClient {\n /**\n * Check system health\n */\n async check(): Promise<HealthCheckResponse> {\n // Health endpoint doesn't use /api/v1 prefix\n const response = await this.client.get('../health').json<HealthCheckResponse>();\n return response;\n }\n\n /**\n * Simple ping to check if server is running\n */\n async ping(): Promise<string> {\n const response = await this.client.get('../').text();\n return response;\n }\n}\n","import type { OracleEBSConfig } from './config';\nimport { AuthModule } from '../modules/AuthModule';\nimport { LeavesModule } from '../modules/LeavesModule';\nimport { SitRequestsModule } from '../modules/SitRequestsModule';\nimport { NotificationsModule } from '../modules/NotificationsModule';\nimport { PayslipModule } from '../modules/PayslipModule';\nimport { EmployeeModule } from '../modules/EmployeeModule';\nimport { AccrualBalancesModule } from '../modules/AccrualBalancesModule';\nimport { FormsModule } from '../modules/FormsModule';\nimport { HealthModule } from '../modules/HealthModule';\n\n/**\n * Main Oracle EBS SDK Client\n * \n * @example\n * ```typescript\n * const client = new OracleEBSClient({\n * baseUrl: 'http://localhost:3000/api/v1',\n * logging: { enabled: true },\n * });\n * \n * // Login\n * await client.auth.login({ username, password });\n * \n * // Get leave types\n * const types = await client.leaves.getRestrictedTypes();\n * \n * // Create leave request\n * const request = await client.leaves.createRequest({\n * absenceTypeId: '71',\n * startDate: '2026-01-20',\n * endDate: '2026-01-22',\n * days: 3,\n * });\n * ```\n */\nexport class OracleEBSClient {\n public readonly auth: AuthModule;\n public readonly leaves: LeavesModule;\n public readonly sitRequests: SitRequestsModule;\n public readonly notifications: NotificationsModule;\n public readonly payslip: PayslipModule;\n public readonly employee: EmployeeModule;\n public readonly accrualBalances: AccrualBalancesModule;\n public readonly forms: FormsModule;\n public readonly health: HealthModule;\n\n constructor(config: OracleEBSConfig) {\n this.auth = new AuthModule(config);\n this.leaves = new LeavesModule(config);\n this.sitRequests = new SitRequestsModule(config);\n this.notifications = new NotificationsModule(config);\n this.payslip = new PayslipModule(config);\n this.employee = new EmployeeModule(config);\n this.accrualBalances = new AccrualBalancesModule(config);\n this.forms = new FormsModule(config);\n this.health = new HealthModule(config);\n }\n\n /**\n * Set authentication token for all modules\n */\n setToken(token: string): void {\n this.auth.setToken(token);\n this.leaves.setToken(token);\n this.sitRequests.setToken(token);\n this.notifications.setToken(token);\n this.payslip.setToken(token);\n this.employee.setToken(token);\n this.accrualBalances.setToken(token);\n this.forms.setToken(token);\n this.health.setToken(token);\n }\n\n /**\n * Clear authentication token from all modules\n */\n clearToken(): void {\n this.auth.clearToken();\n this.leaves.clearToken();\n this.sitRequests.clearToken();\n this.notifications.clearToken();\n this.payslip.clearToken();\n this.employee.clearToken();\n this.accrualBalances.clearToken();\n this.forms.clearToken();\n this.health.clearToken();\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -135,6 +135,12 @@ var BaseClient = class {
135
135
  clearToken() {
136
136
  this.token = void 0;
137
137
  }
138
+ /**
139
+ * Get current authentication token
140
+ */
141
+ getToken() {
142
+ return this.token || null;
143
+ }
138
144
  /**
139
145
  * Make a GET request
140
146
  */
@@ -386,19 +392,42 @@ var NotificationsModule = class extends BaseClient {
386
392
  }
387
393
  };
388
394
 
395
+ // src/utils/jwt.ts
396
+ function decodeJWT(token) {
397
+ try {
398
+ const parts = token.split(".");
399
+ if (parts.length !== 3) {
400
+ return null;
401
+ }
402
+ const payload = parts[1];
403
+ const base64 = payload.replace(/-/g, "+").replace(/_/g, "/");
404
+ const jsonPayload = decodeURIComponent(
405
+ atob(base64).split("").map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")
406
+ );
407
+ return JSON.parse(jsonPayload);
408
+ } catch (error) {
409
+ console.error("Failed to decode JWT:", error);
410
+ return null;
411
+ }
412
+ }
413
+
389
414
  // src/modules/PayslipModule.ts
390
415
  var PayslipModule = class extends BaseClient {
391
416
  /**
392
- * Get employee number from authenticated user
417
+ * Get employee number from JWT token
393
418
  */
394
- async getEmployeeNumber(providedEmployeeNumber) {
419
+ getEmployeeNumberFromToken(providedEmployeeNumber) {
395
420
  if (providedEmployeeNumber) {
396
421
  return providedEmployeeNumber;
397
422
  }
398
- const response = await this.get("employee/personal-info");
399
- const employeeNumber = response.data?.EMPLOYEE_NUMBER || response.data?.employeeNumber;
423
+ const token = this.getToken();
424
+ if (!token) {
425
+ throw new Error("No authentication token available. Please login first.");
426
+ }
427
+ const payload = decodeJWT(token);
428
+ const employeeNumber = payload?.EMPLOYEE_NUMBER;
400
429
  if (!employeeNumber) {
401
- throw new Error("Employee number not found in user profile");
430
+ throw new Error("Employee number not found in authentication token");
402
431
  }
403
432
  return employeeNumber;
404
433
  }
@@ -406,7 +435,7 @@ var PayslipModule = class extends BaseClient {
406
435
  * Get payslip header
407
436
  */
408
437
  async getHeader(params) {
409
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
438
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
410
439
  const searchParams = new URLSearchParams();
411
440
  searchParams.set("employeeNumber", employeeNumber);
412
441
  searchParams.set("periodName", params.periodName);
@@ -417,7 +446,7 @@ var PayslipModule = class extends BaseClient {
417
446
  * Get payslip details
418
447
  */
419
448
  async getDetails(params) {
420
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
449
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
421
450
  const searchParams = new URLSearchParams();
422
451
  searchParams.set("employeeNumber", employeeNumber);
423
452
  searchParams.set("periodName", params.periodName);
@@ -428,7 +457,7 @@ var PayslipModule = class extends BaseClient {
428
457
  * Get payslip leave details
429
458
  */
430
459
  async getLeaveDetails(params) {
431
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
460
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
432
461
  const searchParams = new URLSearchParams();
433
462
  searchParams.set("employeeNumber", employeeNumber);
434
463
  searchParams.set("periodName", params.periodName);
@@ -439,7 +468,7 @@ var PayslipModule = class extends BaseClient {
439
468
  * Get payslip run balances
440
469
  */
441
470
  async getRunBalances(params) {
442
- const employeeNumber = await this.getEmployeeNumber(params.employeeNumber);
471
+ const employeeNumber = this.getEmployeeNumberFromToken(params.employeeNumber);
443
472
  const searchParams = new URLSearchParams();
444
473
  searchParams.set("employeeNumber", employeeNumber);
445
474
  searchParams.set("periodName", params.periodName);