UNPKG

workforce-sdk

Version:
3 lines (2 loc) 5.86 kB
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,i=Math.floor(.25*e);return{earnedSalary:e,availableBalance:i,maxWithdrawal:i}}calculateFees(t,e){const i=Math.floor(.05*t),s=Math.floor(.05*i),a=i+s;return{amount:t,earlyAccessFee:i,vat:s,totalFee:a,youReceive:t-a}}}class i{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 i=this.transactions.find(e=>e.id===t);return i&&(i.status=e,i.updatedAt=(new Date).toISOString()),i}formatTransactionDate(t){return new Date(t).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}}class s{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),i=Math.floor(.05*e),s=e+i;return{earlyAccessFee:e,vat:i,totalFee:s,youReceive:t-s}}}class a{constructor(t){this.systemIntegration=t}async initiateWithdrawal(t,e,i="salary"){const s={userId:t.id||t.emiratesId,amount:e,type:i,timestamp:(new Date).toISOString(),status:"pending"},a=await this.validateWithdrawalRequest(t,e);if(!a.isValid)throw new Error(a.reason);return{...s,callback:this.createCallback(s)}}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 i,this.systemIntegration=new s(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 i=this.userEligibility.calculateLimits(t),s={...t,...i},a=this.userSession.createSession(s);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 i=this.userSession.getSession();try{const s=await this.withdrawalHandler.initiateWithdrawal(i,t,e);return this.transactionHistory.addTransaction({userId:i.id,type:"withdrawal",amount:t,status:"pending",withdrawalId:s.id}),this.config.debug,s}catch(t){throw this.config.debug,t}}exitSDK(){this.userSession.clearSession(),this.config.debug}log(t,e=null){this.config.debug}}export{s as SystemIntegration,i as TransactionHistory,e as UserEligibility,t as UserSession,a as WithdrawalHandler,n as WorkforceSDK,n as default}; //# sourceMappingURL=index.esm.js.map