workforce-sdk
Version:
Workforce Payment System Integration SDK
3 lines (2 loc) • 5.95 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t{constructor(){this.session=null,this.isAuthenticated=!1}createSession(t){return this.session={id:t.id||t.emiratesId,phoneNumber:t.phoneNumber,name:t.name,employer:t.employer,monthlySalary:t.monthlySalary,earnedSalary:t.earnedSalary,availableBalance:t.availableBalance,createdAt:(new Date).toISOString(),lastActivity:(new Date).toISOString()},this.isAuthenticated=!0,this.session}getSession(){return this.session}clearSession(){this.session=null,this.isAuthenticated=!1}isUserAuthenticated(){return this.isAuthenticated&&null!==this.session}}class e{checkEligibility(t){const e=this.getIneligibilityReasons(t);return{isEligible:0===e.length,reasons:e}}getIneligibilityReasons(t){const e=[];return t.id||t.emiratesId||e.push("Missing identification"),t.phoneNumber||e.push("Missing phone number"),t.employer||e.push("Missing employer information"),(!t.monthlySalary||t.monthlySalary<=0)&&e.push("Invalid monthly salary"),(!t.earnedSalary||t.earnedSalary<=0)&&e.push("Invalid earned salary"),e}calculateLimits(t){const e=t.earnedSalary||0,s=Math.floor(.25*e);return{earnedSalary:e,availableBalance:s,maxWithdrawal:s}}calculateFees(t,e){const s=Math.floor(.05*t),i=Math.floor(.05*s),a=s+i;return{amount:t,earlyAccessFee:s,vat:i,totalFee:a,youReceive:t-a}}}class s{constructor(){this.transactions=[]}addTransaction(t){const e={id:`txn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,...t,timestamp:(new Date).toISOString(),status:"pending"};return this.transactions.push(e),e}getTransactionHistory(t,e=10){return this.transactions.filter(e=>e.userId===t).sort((t,e)=>new Date(e.timestamp)-new Date(t.timestamp)).slice(0,e)}updateTransactionStatus(t,e){const s=this.transactions.find(e=>e.id===t);return s&&(s.status=e,s.updatedAt=(new Date).toISOString()),s}formatTransactionDate(t){return new Date(t).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}}class i{constructor(t={}){this.endpoint=t.endpoint||"https://api.example.com",this.debug=t.debug||!1}async validateUser(t,e){return this.debug,await new Promise(t=>setTimeout(t,1e3)),{isValid:!0,userId:t.value,eligibility:"eligible",limits:{maxWithdrawal:1e3,dailyLimit:500}}}async checkEligibility(t){return this.debug,await new Promise(t=>setTimeout(t,800)),{isEligible:!0,reason:"User meets all eligibility criteria",limits:{maxWithdrawal:1e3,dailyLimit:500}}}async processWithdrawal(t,e){return this.debug,await new Promise(t=>setTimeout(t,2e3)),{success:!0,transactionId:`wps_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,receipt:this.generateReceipt(t),processedAt:(new Date).toISOString()}}generateReceipt(t){const e=this.calculateFees(t.amount);return{receiptNumber:`RCP_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,amount:t.amount,fees:e,totalFee:e.totalFee,youReceive:e.youReceive,processedAt:(new Date).toISOString(),status:"completed"}}calculateFees(t){const e=Math.floor(.05*t),s=Math.floor(.05*e),i=e+s;return{earlyAccessFee:e,vat:s,totalFee:i,youReceive:t-i}}}class a{constructor(t){this.systemIntegration=t}async initiateWithdrawal(t,e,s="salary"){const i={userId:t.id||t.emiratesId,amount:e,type:s,timestamp:(new Date).toISOString(),status:"pending"},a=await this.validateWithdrawalRequest(t,e);if(!a.isValid)throw new Error(a.reason);return{...i,callback:this.createCallback(i)}}async validateWithdrawalRequest(t,e){return e<=0?{isValid:!1,reason:"Invalid withdrawal amount"}:e>t.availableBalance?{isValid:!1,reason:"Insufficient available balance"}:{isValid:!0,reason:"Withdrawal request is valid"}}createCallback(t){return{validateUser:async e=>await this.systemIntegration.validateUser(e,t),processWithdrawal:async e=>await this.systemIntegration.processWithdrawal(t,e)}}}class n{constructor(n={}){this.config={debug:n.debug||!1,endpoint:n.endpoint||"https://api.example.com",currency:n.currency||"USD",country:n.country||"US",version:n.version||"1.0.0"},this.userSession=new t,this.userEligibility=new e,this.transactionHistory=new s,this.systemIntegration=new i(this.config),this.withdrawalHandler=new a(this.systemIntegration)}async onboardUser(t){try{const e=this.userEligibility.checkEligibility(t);if(!e.isEligible)throw new Error(`User not eligible: ${e.reasons.join(", ")}`);const s=this.userEligibility.calculateLimits(t),i={...t,...s},a=this.userSession.createSession(i);return this.config.debug,{success:!0,user:a,message:"User onboarded successfully"}}catch(t){throw this.config.debug,t}}getUserDetails(){if(!this.userSession.isUserAuthenticated())throw new Error("User not authenticated");const t=this.userSession.getSession(),e=this.userEligibility.calculateLimits(t);return{...t,...e,isAuthenticated:!0}}getTransactionHistory(){if(!this.userSession.isUserAuthenticated())throw new Error("User not authenticated");const t=this.userSession.getSession(),e=this.transactionHistory.getTransactionHistory(t.id);return{availableBalance:t.availableBalance,transactions:e,totalTransactions:e.length}}calculateWithdrawalFees(t){if(!this.userSession.isUserAuthenticated())throw new Error("User not authenticated");const e=this.userSession.getSession();return this.userEligibility.calculateFees(t,e)}async handleWithdrawalRequest(t,e="salary"){if(!this.userSession.isUserAuthenticated())throw new Error("User not authenticated");const s=this.userSession.getSession();try{const i=await this.withdrawalHandler.initiateWithdrawal(s,t,e);return this.transactionHistory.addTransaction({userId:s.id,type:"withdrawal",amount:t,status:"pending",withdrawalId:i.id}),this.config.debug,i}catch(t){throw this.config.debug,t}}exitSDK(){this.userSession.clearSession(),this.config.debug}log(t,e=null){this.config.debug}}exports.SystemIntegration=i,exports.TransactionHistory=s,exports.UserEligibility=e,exports.UserSession=t,exports.WithdrawalHandler=a,exports.WorkforceSDK=n,exports.default=n;
//# sourceMappingURL=index.js.map