@pakt/psilo 0.0.2 → 0.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.
- package/README.md +288 -33
- package/dist/main.d.mts +821 -0
- package/dist/main.d.ts +612 -4
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -0
- package/dist/main.mjs +2 -0
- package/dist/main.mjs.map +1 -0
- package/package.json +19 -4
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Q=Object.create;var d=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols,_=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var E=(r,t,e)=>t in r?d(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,h=(r,t)=>{for(var e in t||(t={}))C.call(t,e)&&E(r,e,t[e]);if(v)for(var e of v(t))G.call(t,e)&&E(r,e,t[e]);return r};var o=(r,t)=>d(r,"name",{value:t,configurable:!0});var V=(r,t)=>{for(var e in t)d(r,e,{get:t[e],enumerable:!0})},z=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of K(t))!C.call(r,s)&&s!==e&&d(r,s,{get:()=>t[s],enumerable:!(n=B(t,s))||n.enumerable});return r};var X=(r,t,e)=>(e=r!=null?Q(_(r)):{},z(t||!r||!r.__esModule?d(e,"default",{value:r,enumerable:!0}):e,r)),Y=r=>z(d({},"__esModule",{value:!0}),r);var i=(r,t,e)=>(E(r,typeof t!="symbol"?t+"":t,e),e);var st={};V(st,{Connector:()=>l,ErrorUtils:()=>p,EscrowService:()=>m,PsiloSDK:()=>R,SDKError:()=>u,Status:()=>et,parseUrlWithQuery:()=>N});module.exports=Y(st);var oe=require("reflect-metadata");var g=require("typedi");var D=X(require("axios"));var j=class j extends Error{constructor(e,n,s){super(e);i(this,"code");i(this,"details");this.name="SDKError",this.code=n,this.details=s}};o(j,"SDKError");var u=j;var F=class F{constructor(t){i(this,"client");this.client=D.default.create({baseURL:t,headers:{"Content-Type":"application/json"}})}setHeader(t,e){this.client.defaults.headers.common[t]=e}removeHeader(t){delete this.client.defaults.headers.common[t]}handleResponse(t){var n,s,a;let e=t.data;if(e&&e.success===!1)throw new u(((n=e.error)==null?void 0:n.message)||"Unknown error",((s=e.error)==null?void 0:s.code)||"API_ERROR",(a=e.error)==null?void 0:a.details);return e}handleError(t){var e,n;if(D.default.isAxiosError(t)){let s=(e=t.response)==null?void 0:e.data;throw s&&s.error?new u(s.error.message||t.message,s.error.code||"REQUEST_ERROR",s.error.details):new u(t.message,t.code,(n=t.response)==null?void 0:n.data)}throw new u(t.message||"An unexpected error occurred","INTERNAL_ERROR")}async get(t,e){try{let n=await this.client.get(t,e);return this.handleResponse(n)}catch(n){this.handleError(n)}}async post(t,e,n){try{let s=await this.client.post(t,e,n);return this.handleResponse(s)}catch(s){this.handleError(s)}}async put(t,e,n){try{let s=await this.client.put(t,e,n);return this.handleResponse(s)}catch(s){this.handleError(s)}}async delete(t,e){try{let n=await this.client.delete(t,e);return this.handleResponse(n)}catch(n){this.handleError(n)}}};o(F,"Connector");var l=F;var b=require("typedi");var Z={delayFirstAttempt:!1,jitter:"none",maxDelay:1/0,numOfAttempts:10,retry:()=>!0,startingDelay:100,timeMultiple:2};function J(r){let t=h(h({},Z),r);return t.numOfAttempts<1&&(t.numOfAttempts=1),t}o(J,"getSanitizedOptions");function P(r){let t=Math.random()*r;return Math.round(t)}o(P,"fullJitter");function W(r){return r}o(W,"noJitter");function $(r){switch(r.jitter){case"full":return P;case"none":default:return W}}o($,"JitterFactory");var S=class S{constructor(t){i(this,"options");i(this,"attempt",0);this.options=t}apply(){return new Promise(t=>setTimeout(t,this.jitteredDelay))}setAttemptNumber(t){this.attempt=t}get jitteredDelay(){return $(this.options)(this.delay)}get delay(){let t=this.options.startingDelay,e=this.options.timeMultiple,n=this.numOfDelayedAttempts,s=t*Math.pow(e,n);return Math.min(s,this.options.maxDelay)}get numOfDelayedAttempts(){return this.attempt}};o(S,"Delay");var y=S;var M=class M extends y{async apply(){return this.isFirstAttempt?!0:super.apply()}get isFirstAttempt(){return this.attempt===0}get numOfDelayedAttempts(){return this.attempt-1}};o(M,"SkipFirstDelay");var O=M;var U=class U extends y{};o(U,"AlwaysDelay");var A=U;function q(r,t){let e=k(r);return e.setAttemptNumber(t),e}o(q,"DelayFactory");function k(r){return r.delayFirstAttempt?new A(r):new O(r)}o(k,"initDelayClass");async function I(r,t={}){let e=J(t);return await new tt(r,e).execute()}o(I,"backOff");var w,tt=(w=class{constructor(t,e){i(this,"request");i(this,"options");i(this,"attemptNumber",0);this.request=t,this.options=e}async execute(){for(;!this.attemptLimitReached;)try{return await this.applyDelay(),await this.request()}catch(t){if(this.attemptNumber++,!await this.options.retry(t,this.attemptNumber)||this.attemptLimitReached)throw t}throw new Error("Something went wrong.")}get attemptLimitReached(){return this.attemptNumber>=this.options.numOfAttempts}async applyDelay(){await q(this.options,this.attemptNumber).apply()}},o(w,"BackOff"),w);var et=function(r){return r.SUCCESS="success",r.ERROR="error",r}({}),p={newTryFail:async r=>{try{let t=await I(async()=>await r(),{startingDelay:50,timeMultiple:10,numOfAttempts:10,maxDelay:3550,delayFirstAttempt:!1});return h({},t)}catch(t){let e=p.toErrorWithMessage(t);return{data:null,status:"error",message:e?e.message:["Internal Server Error"],code:e.code}}},formatErrorMsg:r=>r.replace("attr.",""),toErrorWithMessage:r=>{var t;if(typeof r=="string")try{let e=JSON.parse(r);return e.data instanceof Array&&e.data.length>0?{message:e.data.map(n=>p.formatErrorMsg(n)),code:e.errorCode}:{message:[(t=e.message)!=null?t:r],code:e.errorCode}}catch(e){}if(p.isErrorWithMessage(r))return{message:[r.message]};try{return{message:[JSON.stringify(r,null,2)]}}catch(e){return{message:[String(r)]}}},isErrorWithMessage(r){return typeof r=="object"&&r!==null&&"message"in r&&typeof r.message=="string"}},N=o((r,t)=>{let e="?",n=Object.keys(t||{});return n.length===0?r:(n.map((s,a)=>{let c="&";(s===void 0||s==="undefined"||s===null||s==="null"||s.length===0)&&(e=e),a+1===n.length&&(c=""),e=e+`${s}=${t[s]}${c}`}),r+e)},"parseUrlWithQuery");function rt(r,t,e,n){var s=arguments.length,a=s<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(r,t,e,n);else for(var f=r.length-1;f>=0;f--)(c=r[f])&&(a=(s<3?c(a):s>3?c(t,e,a):c(t,e))||a);return s>3&&a&&Object.defineProperty(t,e,a),a}o(rt,"_ts_decorate");function H(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)}o(H,"_ts_metadata");var T=class T{constructor(t){i(this,"id");i(this,"connector");this.id=t,this.connector=b.Container.of(this.id).get(l)}async create(t){return p.newTryFail(async()=>await this.connector.post("/api/escrow/create",t))}async getStatus(t,e){return p.newTryFail(async()=>{let n=N("/api/escrow/status",{chainId:t,escrow:e});return await this.connector.get(n)})}async updateStatus(t){return p.newTryFail(async()=>await this.connector.post("/api/escrow/update",t))}async release(t,e,n){return p.newTryFail(async()=>{let s=h({chainId:t,escrowAddress:e},n||{});return await this.connector.post("/api/escrow/release",s)})}async getChains(){return p.newTryFail(async()=>await this.connector.get("/api/escrow/chains"))}async getAssets(t){return p.newTryFail(async()=>await this.connector.get(`/api/escrow/assets/${t}`))}};o(T,"EscrowService");var m=T;m=rt([(0,b.Service)({factory:r=>new m(r.id),transient:!0}),H("design:type",Function),H("design:paramtypes",[String])],m);function nt(r,t,e,n){var s=arguments.length,a=s<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(r,t,e,n);else for(var f=r.length-1;f>=0;f--)(c=r[f])&&(a=(s<3?c(a):s>3?c(t,e,a):c(t,e))||a);return s>3&&a&&Object.defineProperty(t,e,a),a}o(nt,"_ts_decorate");function L(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)}o(L,"_ts_metadata");var x=class x{constructor(t){i(this,"escrow");i(this,"connector");this.connector=g.Container.of(t).get(l),this.escrow=g.Container.of(t).get(m)}static async init(t){if(!t.baseUrl)throw new Error("PsiloSDK initialization requires a valid baseUrl");t.verbose&&console.log(`[PsiloSDK] Initializing SDK pointed to ${t.baseUrl}`);let e=x.generateRandomString(),n=new l(t.baseUrl);return g.Container.of(e).set(l,n),new x(e)}setAuthorizationHeader(t){this.connector.setHeader("Authorization",`Bearer ${t}`)}static generateRandomString(){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",e="";for(let n=0;n<60;n++)e+=t.charAt(Math.floor(Math.random()*t.length));return e}};o(x,"PsiloSDK");var R=x;R=nt([(0,g.Service)({transient:!0}),L("design:type",Function),L("design:paramtypes",[String])],R);0&&(module.exports={Connector,ErrorUtils,EscrowService,PsiloSDK,SDKError,Status,parseUrlWithQuery});
|
|
1
|
+
var ie=Object.create;var T=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,le=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var $=(s,e,t)=>e in s?T(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,v=(s,e)=>{for(var t in e||(e={}))J.call(e,t)&&$(s,t,e[t]);if(G)for(var t of G(e))ue.call(e,t)&&$(s,t,e[t]);return s};var c=(s,e)=>T(s,"name",{value:e,configurable:!0});var he=(s,e)=>{for(var t in e)T(s,t,{get:e[t],enumerable:!0})},z=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of pe(e))!J.call(s,r)&&r!==t&&T(s,r,{get:()=>e[r],enumerable:!(n=ce(e,r))||n.enumerable});return s};var ye=(s,e,t)=>(t=s!=null?ie(le(s)):{},z(e||!s||!s.__esModule?T(t,"default",{value:s,enumerable:!0}):t,s)),me=s=>z(T({},"__esModule",{value:!0}),s);var p=(s,e,t)=>($(s,typeof e!="symbol"?e+"":e,t),t);var je={};he(je,{AuthService:()=>d,Connector:()=>u,ErrorUtils:()=>a,EscrowService:()=>w,JobService:()=>g,MessagingService:()=>b,PsiloSDK:()=>x,SDKError:()=>f,Status:()=>ge,parseUrlWithQuery:()=>m});module.exports=me(je);var Zt=require("reflect-metadata");var y=require("typedi");var N=ye(require("axios"));var I=class I extends Error{constructor(t,n,r){super(t);p(this,"code");p(this,"details");this.name="SDKError",this.code=n,this.details=r}};c(I,"SDKError");var f=I;var _=class _{constructor(e){p(this,"client");this.client=N.default.create({baseURL:e,headers:{"Content-Type":"application/json"}})}setHeader(e,t){this.client.defaults.headers.common[e]=t}removeHeader(e){delete this.client.defaults.headers.common[e]}handleResponse(e){var n,r,o;let t=e.data;if(t&&t.success===!1)throw new f(((n=t.error)==null?void 0:n.message)||"Unknown error",((r=t.error)==null?void 0:r.code)||"API_ERROR",(o=t.error)==null?void 0:o.details);return t}handleError(e){var t,n;if(N.default.isAxiosError(e)){let r=(t=e.response)==null?void 0:t.data;throw r&&r.error?new f(r.error.message||e.message,r.error.code||"REQUEST_ERROR",r.error.details):new f(e.message,e.code,(n=e.response)==null?void 0:n.data)}throw new f(e.message||"An unexpected error occurred","INTERNAL_ERROR")}async get(e,t){try{let n=await this.client.get(e,t);return this.handleResponse(n)}catch(n){this.handleError(n)}}async post(e,t,n){try{let r=await this.client.post(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async put(e,t,n){try{let r=await this.client.put(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async patch(e,t,n){try{let r=await this.client.patch(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async delete(e,t){try{let n=await this.client.delete(e,t);return this.handleResponse(n)}catch(n){this.handleError(n)}}};c(_,"Connector");var u=_;var O=require("typedi");var fe={delayFirstAttempt:!1,jitter:"none",maxDelay:1/0,numOfAttempts:10,retry:()=>!0,startingDelay:100,timeMultiple:2};function B(s){let e=v(v({},fe),s);return e.numOfAttempts<1&&(e.numOfAttempts=1),e}c(B,"getSanitizedOptions");function H(s){let e=Math.random()*s;return Math.round(e)}c(H,"fullJitter");function Z(s){return s}c(Z,"noJitter");function K(s){switch(s.jitter){case"full":return H;case"none":default:return Z}}c(K,"JitterFactory");var C=class C{constructor(e){p(this,"options");p(this,"attempt",0);this.options=e}apply(){return new Promise(e=>setTimeout(e,this.jitteredDelay))}setAttemptNumber(e){this.attempt=e}get jitteredDelay(){return K(this.options)(this.delay)}get delay(){let e=this.options.startingDelay,t=this.options.timeMultiple,n=this.numOfDelayedAttempts,r=e*Math.pow(t,n);return Math.min(r,this.options.maxDelay)}get numOfDelayedAttempts(){return this.attempt}};c(C,"Delay");var R=C;var D=class D extends R{async apply(){return this.isFirstAttempt?!0:super.apply()}get isFirstAttempt(){return this.attempt===0}get numOfDelayedAttempts(){return this.attempt-1}};c(D,"SkipFirstDelay");var F=D;var U=class U extends R{};c(U,"AlwaysDelay");var S=U;function Q(s,e){let t=we(s);return t.setAttemptNumber(e),t}c(Q,"DelayFactory");function we(s){return s.delayFirstAttempt?new S(s):new F(s)}c(we,"initDelayClass");async function Y(s,e={}){let t=B(e);return await new de(s,t).execute()}c(Y,"backOff");var j,de=(j=class{constructor(e,t){p(this,"request");p(this,"options");p(this,"attemptNumber",0);this.request=e,this.options=t}async execute(){for(;!this.attemptLimitReached;)try{return await this.applyDelay(),await this.request()}catch(e){if(this.attemptNumber++,!await this.options.retry(e,this.attemptNumber)||this.attemptLimitReached)throw e}throw new Error("Something went wrong.")}get attemptLimitReached(){return this.attemptNumber>=this.options.numOfAttempts}async applyDelay(){await Q(this.options,this.attemptNumber).apply()}},c(j,"BackOff"),j);var ge=function(s){return s.SUCCESS="success",s.ERROR="error",s}({}),a={newTryFail:async s=>{try{let e=await Y(async()=>await s(),{startingDelay:50,timeMultiple:10,numOfAttempts:10,maxDelay:3550,delayFirstAttempt:!1});return v({},e)}catch(e){let t=a.toErrorWithMessage(e);return{data:null,status:"error",message:t?t.message:["Internal Server Error"],code:t.code}}},formatErrorMsg:s=>s.replace("attr.",""),toErrorWithMessage:s=>{var e;if(typeof s=="string")try{let t=JSON.parse(s);return t.data instanceof Array&&t.data.length>0?{message:t.data.map(n=>a.formatErrorMsg(n)),code:t.errorCode}:{message:[(e=t.message)!=null?e:s],code:t.errorCode}}catch(t){}if(a.isErrorWithMessage(s))return{message:[s.message]};try{return{message:[JSON.stringify(s,null,2)]}}catch(t){return{message:[String(s)]}}},isErrorWithMessage(s){return typeof s=="object"&&s!==null&&"message"in s&&typeof s.message=="string"}},m=c((s,e)=>{let t="?",n=Object.keys(e||{});return n.length===0?s:(n.map((r,o)=>{let i="&";(r===void 0||r==="undefined"||r===null||r==="null"||r.length===0)&&(t=t),o+1===n.length&&(i=""),t=t+`${r}=${e[r]}${i}`}),s+t)},"parseUrlWithQuery");function ve(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(ve,"_ts_decorate");function X(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(X,"_ts_metadata");var M=class M{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=O.Container.of(this.id).get(u)}async create(e){return a.newTryFail(async()=>await this.connector.post("/api/escrow/create",e))}async getStatus(e,t){return a.newTryFail(async()=>{let n=m("/api/escrow/status",{chainId:e,escrow:t});return await this.connector.get(n)})}async updateStatus(e){return a.newTryFail(async()=>await this.connector.post("/api/escrow/update",e))}async release(e,t,n){return a.newTryFail(async()=>{let r=v({chainId:e,escrowAddress:t},n||{});return await this.connector.post("/api/escrow/release",r)})}async getChains(){return a.newTryFail(async()=>await this.connector.get("/api/escrow/chains"))}async getAssets(e){return a.newTryFail(async()=>await this.connector.get(`/api/escrow/assets/${e}`))}};c(M,"EscrowService");var w=M;w=ve([(0,O.Service)({factory:s=>new w(s.id),transient:!0}),X("design:type",Function),X("design:paramtypes",[String])],w);var k=require("typedi"),P=require("ethers");function be(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(be,"_ts_decorate");function ee(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(ee,"_ts_metadata");var W=class W{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=k.Container.of(this.id).get(u)}async register(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/register",e))}async nonce(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/nonce",e))}async verify(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/verify",e))}async paktWeb3Login(e){let t=new P.Wallet(e),n=t.address,{message:r,tempToken:o}=await this._paktWeb3Request(n),i=await t.signMessage(r),l=await this._paktWeb3Validate(i,o);if(l.token)return l.token;if(!l.tempToken)throw new Error("Unexpected paktsuite web3/validate response: no token or tempToken");await this._paktWeb3Onboard(l.tempToken,n);let{message:h,tempToken:oe}=await this._paktWeb3Request(n),ae=await t.signMessage(h),q=await this._paktWeb3Validate(ae,oe);if(!q.token)throw new Error("Web3 authentication failed after onboarding");return q.token}static generateWallet(){let e=P.Wallet.createRandom();return{privateKey:e.privateKey,address:e.address}}async _paktWeb3Request(e){let t=await this.connector.post("/v1/auth/web3/request",{account:e});return{message:t.data.message,tempToken:t.data.tempToken.token}}async _paktWeb3Validate(e,t){var o,i,l;let n=await this.connector.post("/v1/auth/web3/validate",{signedMessage:e,tempToken:t}),r=(o=n.data)!=null?o:n;return{token:r==null?void 0:r.token,token_type:r==null?void 0:r.token_type,expiresIn:r==null?void 0:r.expiresIn,isVerified:r==null?void 0:r.isVerified,timeZone:r==null?void 0:r.timeZone,account:r==null?void 0:r.account,tempToken:(l=(i=r==null?void 0:r.tempToken)==null?void 0:i.token)!=null?l:r==null?void 0:r.tempToken}}async _paktWeb3Onboard(e,t){return this.connector.post("/v1/auth/web3/onboard",{tempToken:e,firstName:t,lastName:t,email:`${t.toLowerCase()}@pakt.internal`})}};c(W,"AuthService");var d=W;d=be([(0,k.Service)({factory:s=>new d(s.id),transient:!0}),ee("design:type",Function),ee("design:paramtypes",[String])],d);var te=require("socket.io-client");var L=class L{constructor(e,t){p(this,"messagingUrl");p(this,"token");p(this,"socket",null);this.messagingUrl=e,this.token=t}connect(){return new Promise((e,t)=>{this.socket=(0,te.io)(this.messagingUrl,{transports:["websocket"],auth:{authorization:`Bearer ${this.token}`}}),this.socket.once("connect",()=>{this.socket.emit("USER_CONNECT"),e()}),this.socket.once("connect_error",t)})}onBroadcast(e){var t;(t=this.socket)==null||t.on("BROADCAST_MESSAGE",e)}onUserStatus(e){var t;(t=this.socket)==null||t.on("USER_STATUS",e)}onJobInvite(e){var t;(t=this.socket)==null||t.on("JOB_INVITE",e)}sendMessage(e){var t;(t=this.socket)==null||t.emit("SEND_MESSAGE",e)}setTyping(e,t){var r;let n=t?"SENDER_IS_TYPING":"SENDER_STOPS_TYPING";(r=this.socket)==null||r.emit(n,{conversationId:e})}loadConversations(){return new Promise(e=>{var t,n;(t=this.socket)==null||t.emit("GET_ALL_CONVERSATIONS"),(n=this.socket)==null||n.once("GET_ALL_CONVERSATIONS",r=>{var o,i;e((i=(o=r.data)==null?void 0:o.messages)!=null?i:[])})})}createDirectConversation(e){return new Promise((t,n)=>{var r,o;(r=this.socket)==null||r.emit("INITIALIZE_CONVERSATION",{type:"DIRECT",recipientId:e}),(o=this.socket)==null||o.once("INITIALIZE_CONVERSATION",i=>{i.error?n(new Error(i.message)):t(i.data.conversation)})})}createGroupConversation(e,t){return new Promise((n,r)=>{var i,l;let o=e.map(h=>({user:h,role:"USER"}));(i=this.socket)==null||i.emit("INITIALIZE_CONVERSATION",{type:"GROUP",recipients:o,name:t}),(l=this.socket)==null||l.once("INITIALIZE_CONVERSATION",h=>{h.error?r(new Error(h.message)):n(h.data.conversation)})})}fetchConversation(e){return new Promise((t,n)=>{var r,o;(r=this.socket)==null||r.emit("FETCH_CONVERSATION_MESSAGES",{conversationId:e}),(o=this.socket)==null||o.once("FETCH_CONVERSATION_MESSAGES",i=>{i.error?n(new Error(i.message)):t(i.data)})})}markSeen(e){var t;(t=this.socket)==null||t.emit("MARK_MESSAGE_AS_SEEN",{conversationId:e,seen:Date.now().toString()})}disconnect(){var e;(e=this.socket)==null||e.disconnect(),this.socket=null}get connected(){var e,t;return(t=(e=this.socket)==null?void 0:e.connected)!=null?t:!1}};c(L,"MessagingService");var b=L;var A=require("typedi");function Te(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(Te,"_ts_decorate");function ne(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(ne,"_ts_metadata");var V=class V{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=A.Container.of(this.id).get(u)}async create(e){return a.newTryFail(async()=>await this.connector.post("/v1/job",e))}async list(e={}){return a.newTryFail(async()=>{let t=m("/v1/job",e);return await this.connector.get(t)})}async getStats(e={}){return a.newTryFail(async()=>{let t=m("/v1/job/stats",e);return await this.connector.get(t)})}async getById(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}`))}async delete(e){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}`))}async confirmTx(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/confirm-tx`,t))}async getInvites(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/invites`))}async inviteTalent(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite`,t))}async acceptInvite(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite/${t}/accept`))}async declineInvite(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite/${t}/decline`))}async cancelInvite(e,t){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}/invite/${t}`))}async getEscrowStatus(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/escrow/status`))}async prepareUpdate(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/escrow/update`,t))}async createDeliverables(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/deliverables`,t))}async replaceDeliverables(e,t){return a.newTryFail(async()=>await this.connector.put(`/v1/job/${e}/deliverables`,t))}async toggleDeliverableProgress(e,t,n){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}/deliverables/${t}`,n))}async bulkResetDeliverables(e,t){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}/deliverables/bulk`,t))}async update(e,t){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}`,t))}async listAllInvites(e={}){return a.newTryFail(async()=>{let t=m("/v1/job/invites",e);return await this.connector.get(t)})}async makeDeposit(e,t){return a.newTryFail(async()=>{let n=m(`/v1/job/${e}/make-deposit`,{talentId:t});return await this.connector.get(n)})}async validatePayment(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/payment/validate`))}async apply(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/apply`,t))}async withdrawApplication(e){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}/apply`))}async listApplications(e,t={}){return a.newTryFail(async()=>{let n=m(`/v1/job/${e}/applications`,t);return await this.connector.get(n)})}async acceptApplication(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/applications/${t}/accept`))}async rejectApplication(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/applications/${t}/reject`))}async requestCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel`,t))}async acceptCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel/accept`,t!=null?t:{}))}async declineCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel/decline`,t!=null?t:{}))}async getCancelRequest(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/cancel`))}async requestReviewChange(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change`,t))}async acceptReviewChange(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change/accept`))}async declineReviewChange(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change/decline`))}async getReviewChange(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/review-change`))}async completeJob(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/complete`,t!=null?t:{}))}async releasePayment(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/release`,t!=null?t:{}))}async submitReview(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review`,t))}};c(V,"JobService");var g=V;g=Te([(0,A.Service)({factory:s=>new g(s.id),transient:!0}),ne("design:type",Function),ne("design:paramtypes",[String])],g);function Re(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(Re,"_ts_decorate");function re(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(re,"_ts_metadata");var se={production:"https://devpaktworkapi.kapt.xyz",development:"http://localhost:9000"},E=class E{constructor(e){p(this,"auth");p(this,"escrow");p(this,"connector");p(this,"messaging");p(this,"job");this.connector=y.Container.of(e).get(u),this.auth=y.Container.of(e).get(d),this.escrow=y.Container.of(e).get(w),this.messaging=y.Container.of(e).get(b),this.job=y.Container.of(e).get(g)}static async init(e={}){var i,l,h;let t=(i=e.baseUrl)!=null?i:e.development?se.development:se.production;e.verbose&&console.log(`[PsiloSDK] Initializing SDK pointed to ${t}`);let n=E.generateRandomString(),r=new u(t);y.Container.of(n).set(u,r);let o=new b((l=e.messagingUrl)!=null?l:"",(h=e.token)!=null?h:"");return y.Container.of(n).set(b,o),new E(n)}setAuthorizationHeader(e){this.connector.setHeader("Authorization",`Bearer ${e}`)}static generateRandomString(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let n=0;n<60;n++)t+=e.charAt(Math.floor(Math.random()*e.length));return t}};c(E,"PsiloSDK");var x=E;x=Re([(0,y.Service)({transient:!0}),re("design:type",Function),re("design:paramtypes",[String])],x);0&&(module.exports={AuthService,Connector,ErrorUtils,EscrowService,JobService,MessagingService,PsiloSDK,SDKError,Status,parseUrlWithQuery});
|
|
2
2
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.ts","../src/services/index.ts","../src/connector/connector.ts","../src/utils/errors.ts","../src/services/escrow/escrow.ts","../src/utils/backOff/options.ts","../src/utils/backOff/jitter/full/full.jitter.ts","../src/utils/backOff/jitter/no/no.jitter.ts","../src/utils/backOff/jitter/jitter.factory.ts","../src/utils/backOff/delay/delay.base.ts","../src/utils/backOff/delay/skip-first/skip-first.delay.ts","../src/utils/backOff/delay/always/always.delay.ts","../src/utils/backOff/delay/delay.factory.ts","../src/utils/backOff/backoff.ts","../src/utils/response.ts","../src/services/auth/auth.ts","../src/services/messaging/messaging.ts","../src/services/job/job.ts"],"sourcesContent":["import \"reflect-metadata\";\nexport * from \"./services\";\nexport * from \"./utils\";\nexport * from \"./connector\";","import { Container, Service } from \"typedi\";\nimport { Connector } from \"../connector\";\nimport { EscrowService } from \"./escrow\";\nimport { AuthService } from \"./auth\";\nimport { MessagingService } from \"./messaging\";\nimport { JobService } from \"./job\";\n\nexport * from \"./escrow\";\nexport * from \"./auth\";\nexport * from \"./messaging\";\nexport * from \"./job\";\n\nconst BASE_URLS = {\n production: \"https://devpaktworkapi.kapt.xyz\",\n development: \"http://localhost:9000\",\n} as const;\n\nexport interface PsiloSDKConfig {\n development?: boolean;\n verbose?: boolean;\n baseUrl?: string;\n messagingUrl?: string;\n token?: string;\n}\n\n@Service({ transient: true })\nexport class PsiloSDK {\n public readonly auth: AuthService;\n public readonly escrow: EscrowService;\n public readonly connector: Connector;\n public readonly messaging: MessagingService;\n public readonly job: JobService;\n\n constructor(id: string) {\n this.connector = Container.of(id).get(Connector);\n this.auth = Container.of(id).get(AuthService);\n this.escrow = Container.of(id).get(EscrowService);\n this.messaging = Container.of(id).get(MessagingService);\n this.job = Container.of(id).get(JobService);\n }\n\n /**\n * Initialize Psilo SDK. This method must be called before any other method.\n * @param config\n */\n public static async init(config: PsiloSDKConfig = {}): Promise<PsiloSDK> {\n const resolvedUrl =\n config.baseUrl ??\n (config.development ? BASE_URLS.development : BASE_URLS.production);\n\n if (config.verbose) {\n console.log(`[PsiloSDK] Initializing SDK pointed to ${resolvedUrl}`);\n }\n\n const id = PsiloSDK.generateRandomString();\n\n const connector = new Connector(resolvedUrl);\n Container.of(id).set(Connector, connector);\n\n const messaging = new MessagingService(\n config.messagingUrl ?? \"\",\n config.token ?? \"\"\n );\n Container.of(id).set(MessagingService, messaging);\n\n return new PsiloSDK(id);\n }\n\n // Allow dynamic updating of headers if necessary (e.g. for Auth tokens down the line)\n public setAuthorizationHeader(token: string): void {\n this.connector.setHeader(\"Authorization\", `Bearer ${token}`);\n }\n\n /**\n * Generate Random String. This method is used to generate random strings.\n */\n private static generateRandomString(): string {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 60; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n }\n}\n\nexport default PsiloSDK;\n","import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SDKError } from \"../utils/errors\";\n\nexport class Connector {\n private readonly client: AxiosInstance;\n\n constructor(baseURL: string) {\n this.client = axios.create({\n baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n\n public setHeader(key: string, value: string): void {\n this.client.defaults.headers.common[key] = value;\n }\n\n public removeHeader(key: string): void {\n delete this.client.defaults.headers.common[key];\n }\n\n private handleResponse<T>(response: AxiosResponse<T>): T {\n const data = response.data as any;\n if (data && data.success === false) {\n throw new SDKError(\n data.error?.message || \"Unknown error\",\n data.error?.code || \"API_ERROR\",\n data.error?.details\n );\n }\n return data;\n }\n\n private handleError(error: any): never {\n if (axios.isAxiosError(error)) {\n const data = error.response?.data as any;\n if (data && data.error) {\n throw new SDKError(\n data.error.message || error.message,\n data.error.code || \"REQUEST_ERROR\",\n data.error.details\n );\n }\n throw new SDKError(error.message, error.code, error.response?.data);\n }\n throw new SDKError(error.message || \"An unexpected error occurred\", \"INTERNAL_ERROR\");\n }\n\n public async get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.get<T>(url, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.post<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.put<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async patch<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.patch<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.delete<T>(url, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","export class SDKError extends Error {\n public readonly code?: string;\n public readonly details?: any;\n\n constructor(message: string, code?: string, details?: any) {\n super(message);\n this.name = \"SDKError\";\n this.code = code;\n this.details = details;\n }\n}\n","import { Container, Service } from \"typedi\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto, parseUrlWithQuery } from \"../../utils/response\";\nimport {\n CreateEscrowDto,\n CreateEscrowResponse,\n EscrowStatusResponse,\n ReleaseDto,\n ReleaseResponse,\n UpdateEscrowStatusDto,\n EscrowModuleType,\n PrepareTransactionResponse,\n GetEscrowChainsResponseDto,\n GetEscrowAssetsResponseDto\n} from \"./escrow.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new EscrowService(data.id);\n },\n transient: true,\n})\nexport class EscrowService implements EscrowModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async create(data: CreateEscrowDto): Promise<ResponseDto<CreateEscrowResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<CreateEscrowResponse>>(\"/api/escrow/create\", data);\n return response as unknown as ResponseDto<CreateEscrowResponse>;\n });\n }\n\n public async getStatus(chainId: string, escrowAddress: string): Promise<ResponseDto<EscrowStatusResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const fetchUrl = parseUrlWithQuery(\"/api/escrow/status\", { chainId, escrow: escrowAddress });\n const response = await this.connector.get<StandardResponse<EscrowStatusResponse>>(fetchUrl);\n return response as unknown as ResponseDto<EscrowStatusResponse>;\n });\n }\n\n public async updateStatus(data: UpdateEscrowStatusDto): Promise<ResponseDto<PrepareTransactionResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<PrepareTransactionResponse>>(\"/api/escrow/update\", data);\n return response as unknown as ResponseDto<PrepareTransactionResponse>;\n });\n }\n\n public async release(chainId: string, escrowAddress: string, data?: ReleaseDto): Promise<ResponseDto<ReleaseResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const payload = { chainId, escrowAddress, ...(data || {}) };\n const response = await this.connector.post<StandardResponse<ReleaseResponse>>(\"/api/escrow/release\", payload);\n return response as unknown as ResponseDto<ReleaseResponse>;\n });\n }\n\n public async getChains(): Promise<ResponseDto<GetEscrowChainsResponseDto>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<GetEscrowChainsResponseDto>>(\"/api/escrow/chains\");\n return response as unknown as ResponseDto<GetEscrowChainsResponseDto>;\n });\n }\n\n public async getAssets(chainId: string): Promise<ResponseDto<GetEscrowAssetsResponseDto>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<GetEscrowAssetsResponseDto>>(`/api/escrow/assets/${chainId}`);\n return response as unknown as ResponseDto<GetEscrowAssetsResponseDto>;\n });\n }\n}\n","/**\n * Type of jitter to apply to the delay.\n * - `\"none\"`: no jitter is applied\n * - `\"full\"`: full jitter is applied (random value between `0` and `delay`)\n */\nexport type JitterType = \"none\" | \"full\";\n\nexport type BackoffOptions = Partial<IBackOffOptions>;\n\nexport interface IBackOffOptions {\n /**\n * Decides whether the `startingDelay` should be applied before the first call.\n * If `false`, the first call will occur without a delay.\n * @defaultValue `false`\n */\n delayFirstAttempt: boolean;\n /**\n * Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)\n * should be applied to the delay. Possible values are `\"full\"` and `\"none\"`.\n * @defaultValue `\"none\"`\n */\n jitter: JitterType;\n /**\n * The maximum delay, in milliseconds, between two consecutive attempts.\n * @defaultValue `Infinity`\n */\n maxDelay: number;\n /**\n * The maximum number of times to attempt the function.\n * Must be at least `1`.\n * @defaultValue `10`\n */\n numOfAttempts: number;\n /**\n * The `retry` function can be used to run logic after every failed attempt (e.g. logging a message,\n * assessing the last error, etc.).\n * It is called with the last error and the upcoming attempt number.\n * Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded.\n * Returning `false` will end the execution.\n * @defaultValue a function that always returns `true`.\n * @param e The last error thrown by the function.\n * @param attemptNumber The upcoming attempt number.\n * @returns `true` to retry the function, `false` to end the execution\n */\n retry: (e: any, attemptNumber: number) => boolean | Promise<boolean>;\n /**\n * The delay, in milliseconds, before executing the function for the first time.\n * @defaultValue `100`\n */\n startingDelay: number;\n /**\n * The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.\n * @defaultValue `2`\n */\n timeMultiple: number;\n}\n\nconst defaultOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n jitter: \"none\",\n maxDelay: Infinity,\n numOfAttempts: 10,\n retry: () => true,\n startingDelay: 100,\n timeMultiple: 2,\n};\n\nexport function getSanitizedOptions(options: BackoffOptions) {\n const sanitized: IBackOffOptions = { ...defaultOptions, ...options };\n\n if (sanitized.numOfAttempts < 1) {\n sanitized.numOfAttempts = 1;\n }\n\n return sanitized;\n}\n","export function fullJitter(delay: number) {\n const jitteredDelay = Math.random() * delay;\n return Math.round(jitteredDelay);\n}\n","export function noJitter(delay: number) {\n return delay;\n}\n","import { IBackOffOptions } from \"../options\";\nimport { fullJitter } from \"./full/full.jitter\";\nimport { noJitter } from \"./no/no.jitter\";\n\nexport type Jitter = (delay: number) => number;\n\nexport function JitterFactory(options: IBackOffOptions): Jitter {\n switch (options.jitter) {\n case \"full\":\n return fullJitter;\n\n case \"none\":\n default:\n return noJitter;\n }\n}\n","import { IDelay } from \"./delay.interface\";\nimport { IBackOffOptions } from \"../options\";\nimport { JitterFactory } from \"../jitter/jitter.factory\";\n\nexport abstract class Delay implements IDelay {\n protected attempt = 0;\n constructor(private options: IBackOffOptions) {}\n\n public apply() {\n return new Promise((resolve) => setTimeout(resolve, this.jitteredDelay));\n }\n\n public setAttemptNumber(attempt: number) {\n this.attempt = attempt;\n }\n\n private get jitteredDelay() {\n const jitter = JitterFactory(this.options);\n return jitter(this.delay);\n }\n\n private get delay() {\n const constant = this.options.startingDelay;\n const base = this.options.timeMultiple;\n const power = this.numOfDelayedAttempts;\n const delay = constant * Math.pow(base, power);\n\n return Math.min(delay, this.options.maxDelay);\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt;\n }\n}\n","import { Delay } from \"../delay.base\";\n\nexport class SkipFirstDelay extends Delay {\n public async apply() {\n return this.isFirstAttempt ? true : super.apply();\n }\n\n private get isFirstAttempt() {\n return this.attempt === 0;\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt - 1;\n }\n}\n","import { Delay } from \"../delay.base\";\n\nexport class AlwaysDelay extends Delay {}\n","import { IBackOffOptions } from \"../options\";\nimport { SkipFirstDelay } from \"./skip-first/skip-first.delay\";\nimport { AlwaysDelay } from \"./always/always.delay\";\nimport { IDelay } from \"./delay.interface\";\n\nexport function DelayFactory(options: IBackOffOptions, attempt: number): IDelay {\n const delay = initDelayClass(options);\n delay.setAttemptNumber(attempt);\n return delay;\n}\n\nfunction initDelayClass(options: IBackOffOptions) {\n if (!options.delayFirstAttempt) {\n return new SkipFirstDelay(options);\n }\n\n return new AlwaysDelay(options);\n}\n","import { IBackOffOptions, getSanitizedOptions, BackoffOptions } from \"./options\";\nimport { DelayFactory } from \"./delay/delay.factory\";\n\nexport type { BackoffOptions, IBackOffOptions };\n\n/**\n * Executes a function with exponential backoff.\n * @param request the function to be executed\n * @param options options to customize the backoff behavior\n * @returns Promise that resolves to the result of the `request` function\n */\nexport async function backOff<T>(request: () => Promise<T>, options: BackoffOptions = {}): Promise<T> {\n const sanitizedOptions = getSanitizedOptions(options);\n const backOff = new BackOff(request, sanitizedOptions);\n\n return await backOff.execute();\n}\n\nclass BackOff<T> {\n private attemptNumber = 0;\n\n constructor(private request: () => Promise<T>, private options: IBackOffOptions) {}\n\n public async execute(): Promise<T> {\n while (!this.attemptLimitReached) {\n try {\n await this.applyDelay();\n return await this.request();\n } catch (e) {\n this.attemptNumber++;\n const shouldRetry = await this.options.retry(e, this.attemptNumber);\n\n if (!shouldRetry || this.attemptLimitReached) {\n throw e;\n }\n }\n }\n\n throw new Error(\"Something went wrong.\");\n }\n\n private get attemptLimitReached() {\n return this.attemptNumber >= this.options.numOfAttempts;\n }\n\n private async applyDelay() {\n const delay = DelayFactory(this.options, this.attemptNumber);\n await delay.apply();\n }\n}\n","import { backOff } from \"./backOff/backoff\";\n\nexport enum Status {\n SUCCESS = \"success\",\n ERROR = \"error\",\n}\n\nexport interface ResponseDto<T> {\n data: T;\n status: Status;\n message?: string;\n code?: number;\n statusCode?: number;\n validation?: Record<string, any>;\n}\n\nexport type IAny = any;\n\ntype ErrorWithMessage = {\n message: string[] | object[] | any;\n code?: string;\n};\n\nexport const ErrorUtils = {\n newTryFail: async <T>(f: (() => Promise<T>) | (() => T)): Promise<T> => {\n try {\n const data = await backOff(\n async () => {\n return await f();\n },\n {\n startingDelay: 50,\n timeMultiple: 10,\n numOfAttempts: 10,\n maxDelay: 3550,\n delayFirstAttempt: false,\n },\n );\n\n return { ...data };\n } catch (e) {\n const parseErr = ErrorUtils.toErrorWithMessage(e);\n return {\n data: null as unknown as T,\n status: Status.ERROR,\n message: parseErr ? parseErr.message : [\"Internal Server Error\"],\n code: parseErr.code,\n } as unknown as T;\n }\n },\n formatErrorMsg: (message: string) => {\n return message.replace(\"attr.\", \"\");\n },\n toErrorWithMessage: (maybeError: unknown): ErrorWithMessage => {\n if (typeof maybeError === \"string\") {\n try {\n const error = JSON.parse(maybeError as string);\n if (error.data instanceof Array && error.data.length > 0) {\n return {\n message: (error.data as string[]).map((message) => ErrorUtils.formatErrorMsg(message)),\n code: error.errorCode,\n };\n }\n\n return {\n message: [error.message ?? maybeError],\n code: error.errorCode,\n };\n // eslint-disable-next-line no-empty\n } catch (_) {}\n }\n\n if (ErrorUtils.isErrorWithMessage(maybeError)) {\n return { message: [maybeError.message] };\n }\n\n try {\n return {\n message: [JSON.stringify(maybeError, null, 2)],\n };\n } catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return { message: [String(maybeError)] };\n }\n },\n isErrorWithMessage(e: unknown): e is ErrorWithMessage {\n return (\n typeof e === \"object\" &&\n e !== null &&\n \"message\" in e &&\n typeof (e as Record<string, unknown>).message === \"string\"\n );\n },\n};\n\nexport const parseUrlWithQuery = (url: string, filter: object | any) => {\n let querys = \"?\";\n const objectKeys = Object.keys(filter || {});\n if (objectKeys.length === 0) return url;\n objectKeys.map((key, i) => {\n let $and = \"&\";\n if (key === undefined || key === \"undefined\" || key === null || key === \"null\" || key.length === 0) {\n querys = querys;\n }\n if (i + 1 === objectKeys.length) {\n $and = \"\";\n }\n querys = querys + `${key}=${filter[key]}${$and}`;\n });\n return url + querys;\n};\n","import { Container, Service } from \"typedi\";\nimport { Wallet } from \"ethers\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto } from \"../../utils/response\";\nimport {\n AuthModuleType,\n NonceDto,\n NonceResponse,\n RegisterDto,\n RegisterResponse,\n VerifyDto,\n VerifyResponse,\n PaktWeb3RequestResponse,\n PaktWeb3ValidateResponse,\n PaktWeb3OnboardResponse,\n} from \"./auth.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new AuthService(data.id);\n },\n transient: true,\n})\nexport class AuthService implements AuthModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async register(data: RegisterDto): Promise<ResponseDto<RegisterResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<RegisterResponse>>(\"/api/auth/register\", data);\n return response as unknown as ResponseDto<RegisterResponse>;\n });\n }\n\n public async nonce(data: NonceDto): Promise<ResponseDto<NonceResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<NonceResponse>>(\"/api/auth/nonce\", data);\n return response as unknown as ResponseDto<NonceResponse>;\n });\n }\n\n public async verify(data: VerifyDto): Promise<ResponseDto<VerifyResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<VerifyResponse>>(\"/api/auth/verify\", data);\n return response as unknown as ResponseDto<VerifyResponse>;\n });\n }\n\n /**\n * Authenticate an agent with paktsuite using its Ethereum private key.\n *\n * Flow:\n * 1. request — server issues a one-time challenge message\n * 2. sign — agent signs the message with its private key\n * 3. validate — server recovers the signer address and issues a JWT\n *\n * On first run the server returns an onboard token instead of a JWT.\n * The method handles onboarding automatically (using the wallet address\n * as firstName, lastName, and email) then re-authenticates to get the JWT.\n *\n * @param privateKey Hex private key (with or without 0x prefix)\n * @returns Paktsuite JWT ready for socket.io auth\n */\n public async paktWeb3Login(privateKey: string): Promise<string> {\n const wallet = new Wallet(privateKey);\n const address = wallet.address;\n\n const { message, tempToken: challengeToken } =\n await this._paktWeb3Request(address);\n\n const signedMessage = await wallet.signMessage(message);\n const validateResult = await this._paktWeb3Validate(signedMessage, challengeToken);\n\n if (validateResult.token) {\n return validateResult.token;\n }\n\n // First login — onboard with wallet address as profile, then re-authenticate\n if (!validateResult.tempToken) {\n throw new Error(\"Unexpected paktsuite web3/validate response: no token or tempToken\");\n }\n\n await this._paktWeb3Onboard(validateResult.tempToken, address);\n\n const { message: msg2, tempToken: challengeToken2 } =\n await this._paktWeb3Request(address);\n\n const signedMessage2 = await wallet.signMessage(msg2);\n const finalResult = await this._paktWeb3Validate(signedMessage2, challengeToken2);\n\n if (!finalResult.token) {\n throw new Error(\"Web3 authentication failed after onboarding\");\n }\n\n return finalResult.token;\n }\n\n /**\n * Generate a fresh Ethereum wallet and return its private key and address.\n * The caller is responsible for persisting the private key to WALLET.md.\n */\n public static generateWallet(): { privateKey: string; address: string } {\n const wallet = Wallet.createRandom();\n return { privateKey: wallet.privateKey, address: wallet.address };\n }\n\n private async _paktWeb3Request(account: string): Promise<PaktWeb3RequestResponse> {\n const raw = await this.connector.post<any>(\"/v1/auth/web3/request\", { account });\n // Response shape: { message, data: { tempToken: { token, ... } } }\n return {\n message: raw.data.message,\n tempToken: raw.data.tempToken.token,\n };\n }\n\n private async _paktWeb3Validate(\n signedMessage: string,\n tempToken: string\n ): Promise<PaktWeb3ValidateResponse> {\n const raw = await this.connector.post<any>(\"/v1/auth/web3/validate\", { signedMessage, tempToken });\n // Response shape: { status, data: { token, ... } } (onboarded) or { status, data: { account, tempToken: { token } } }\n const d = raw.data ?? raw;\n return {\n token: d?.token,\n token_type: d?.token_type,\n expiresIn: d?.expiresIn,\n isVerified: d?.isVerified,\n timeZone: d?.timeZone,\n account: d?.account,\n tempToken: d?.tempToken?.token ?? d?.tempToken,\n };\n }\n\n private async _paktWeb3Onboard(\n tempToken: string,\n address: string\n ): Promise<PaktWeb3OnboardResponse> {\n return this.connector.post<PaktWeb3OnboardResponse>(\n \"/v1/auth/web3/onboard\",\n {\n tempToken,\n firstName: address,\n lastName: address,\n email: `${address.toLowerCase()}@pakt.internal`,\n }\n );\n }\n}\n","import { io, Socket } from \"socket.io-client\";\nimport type {\n BroadcastMessage,\n Conversation,\n FetchedConversation,\n JobInviteNotification,\n SendMessagePayload,\n UserStatusEvent,\n WsEnvelope,\n} from \"./messaging.dto\";\n\nexport class MessagingService {\n private socket: Socket | null = null;\n\n constructor(\n private readonly messagingUrl: string,\n private readonly token: string\n ) {}\n\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.socket = io(this.messagingUrl, {\n transports: [\"websocket\"],\n auth: { authorization: `Bearer ${this.token}` },\n });\n this.socket.once(\"connect\", () => {\n this.socket!.emit(\"USER_CONNECT\");\n resolve();\n });\n this.socket.once(\"connect_error\", reject);\n });\n }\n\n // BROADCAST_MESSAGE is emitted to the conversation room with the raw ChatMessage document.\n // The handler receives the message directly (no wsResponse envelope).\n onBroadcast(handler: (msg: BroadcastMessage) => void): void {\n this.socket?.on(\"BROADCAST_MESSAGE\", handler);\n }\n\n onUserStatus(handler: (event: UserStatusEvent) => void): void {\n this.socket?.on(\"USER_STATUS\", handler);\n }\n\n onJobInvite(handler: (invite: JobInviteNotification) => void): void {\n this.socket?.on(\"JOB_INVITE\", handler);\n }\n\n sendMessage(payload: SendMessagePayload): void {\n this.socket?.emit(\"SEND_MESSAGE\", payload);\n }\n\n setTyping(conversationId: string, typing: boolean): void {\n const event = typing ? \"SENDER_IS_TYPING\" : \"SENDER_STOPS_TYPING\";\n this.socket?.emit(event, { conversationId });\n }\n\n loadConversations(): Promise<Conversation[]> {\n return new Promise((resolve) => {\n this.socket?.emit(\"GET_ALL_CONVERSATIONS\");\n this.socket?.once(\n \"GET_ALL_CONVERSATIONS\",\n (data: WsEnvelope<{ messages: Conversation[] }>) => {\n resolve(data.data?.messages ?? []);\n }\n );\n });\n }\n\n createDirectConversation(recipientId: string): Promise<Conversation> {\n return new Promise((resolve, reject) => {\n this.socket?.emit(\"INITIALIZE_CONVERSATION\", {\n type: \"DIRECT\",\n recipientId,\n });\n this.socket?.once(\n \"INITIALIZE_CONVERSATION\",\n (data: WsEnvelope<{ conversation: Conversation }>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data.conversation);\n }\n }\n );\n });\n }\n\n createGroupConversation(\n recipientIds: string[],\n name?: string\n ): Promise<Conversation> {\n return new Promise((resolve, reject) => {\n const recipients = recipientIds.map((id) => ({ user: id, role: \"USER\" }));\n this.socket?.emit(\"INITIALIZE_CONVERSATION\", {\n type: \"GROUP\",\n recipients,\n name,\n });\n this.socket?.once(\n \"INITIALIZE_CONVERSATION\",\n (data: WsEnvelope<{ conversation: Conversation }>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data.conversation);\n }\n }\n );\n });\n }\n\n fetchConversation(conversationId: string): Promise<FetchedConversation> {\n return new Promise((resolve, reject) => {\n this.socket?.emit(\"FETCH_CONVERSATION_MESSAGES\", { conversationId });\n this.socket?.once(\n \"FETCH_CONVERSATION_MESSAGES\",\n (data: WsEnvelope<FetchedConversation>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data);\n }\n }\n );\n });\n }\n\n // paktsuite requires both conversationId and seen (timestamp string) to mark messages read\n markSeen(conversationId: string): void {\n this.socket?.emit(\"MARK_MESSAGE_AS_SEEN\", {\n conversationId,\n seen: Date.now().toString(),\n });\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n }\n\n get connected(): boolean {\n return this.socket?.connected ?? false;\n }\n}\n","import { Container, Service } from \"typedi\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto, parseUrlWithQuery } from \"../../utils/response\";\nimport {\n JobModuleType,\n CreateJobDto,\n ConfirmTxDto,\n InviteTalentDto,\n PrepareUpdateDto,\n ListJobsQuery,\n GetStatsQuery,\n CreateDeliverablesDto,\n ToggleDeliverableProgressDto,\n BulkResetDeliverablesDto,\n JobResponse,\n JobListResponse,\n JobStatsResponse,\n JobInviteResponse,\n JobDeliverableResponse,\n UpdateJobDto,\n ListAllInvitesQuery,\n MakeDepositResponse,\n ApplyJobDto,\n ApplicationResponse,\n ApplicationListResponse,\n ListApplicationsQuery,\n CancelJobDto,\n CancelRequestResponse,\n ResolveCancelDto,\n ReviewChangeDto,\n ChangeRequestResponse,\n CompleteJobDto,\n ReleaseJobPaymentDto,\n JobReviewDto,\n} from \"./job.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new JobService(data.id);\n },\n transient: true,\n})\nexport class JobService implements JobModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async create(dto: CreateJobDto): Promise<ResponseDto<{ job: JobResponse; escrowTx: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; escrowTx: any }>>(\"/v1/job\", dto);\n return response as unknown as ResponseDto<{ job: JobResponse; escrowTx: any }>;\n });\n }\n\n public async list(query: ListJobsQuery = {}): Promise<ResponseDto<JobListResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job\", query);\n const response = await this.connector.get<StandardResponse<JobListResponse>>(url);\n return response as unknown as ResponseDto<JobListResponse>;\n });\n }\n\n public async getStats(query: GetStatsQuery = {}): Promise<ResponseDto<JobStatsResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job/stats\", query);\n const response = await this.connector.get<StandardResponse<JobStatsResponse>>(url);\n return response as unknown as ResponseDto<JobStatsResponse>;\n });\n }\n\n public async getById(id: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async delete(id: string): Promise<ResponseDto<{ message: string }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ message: string }>>(`/v1/job/${id}`);\n return response as unknown as ResponseDto<{ message: string }>;\n });\n }\n\n public async confirmTx(id: string, dto: ConfirmTxDto): Promise<ResponseDto<JobResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<JobResponse>>(`/v1/job/${id}/confirm-tx`, dto);\n return response as unknown as ResponseDto<JobResponse>;\n });\n }\n\n public async getInvites(id: string): Promise<ResponseDto<JobInviteResponse[]>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<JobInviteResponse[]>>(`/v1/job/${id}/invites`);\n return response as unknown as ResponseDto<JobInviteResponse[]>;\n });\n }\n\n public async inviteTalent(id: string, dto: InviteTalentDto): Promise<ResponseDto<JobResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<JobResponse>>(`/v1/job/${id}/invite`, dto);\n return response as unknown as ResponseDto<JobResponse>;\n });\n }\n\n public async acceptInvite(id: string, inviteId: string): Promise<ResponseDto<{ job: JobResponse; acceptPayload: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; acceptPayload: any }>>(`/v1/job/${id}/invite/${inviteId}/accept`);\n return response as unknown as ResponseDto<{ job: JobResponse; acceptPayload: any }>;\n });\n }\n\n public async declineInvite(id: string, inviteId: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}/invite/${inviteId}/decline`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async cancelInvite(id: string, inviteeId: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}/invite/${inviteeId}`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async getEscrowStatus(id: string): Promise<ResponseDto<{ job: JobResponse; onChain: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ job: JobResponse; onChain: any }>>(`/v1/job/${id}/escrow/status`);\n return response as unknown as ResponseDto<{ job: JobResponse; onChain: any }>;\n });\n }\n\n public async prepareUpdate(id: string, dto: PrepareUpdateDto): Promise<ResponseDto<{ job: JobResponse; txPayload: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; txPayload: any }>>(`/v1/job/${id}/escrow/update`, dto);\n return response as unknown as ResponseDto<{ job: JobResponse; txPayload: any }>;\n });\n }\n\n public async createDeliverables(id: string, dto: CreateDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(`/v1/job/${id}/deliverables`, dto);\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async replaceDeliverables(id: string, dto: CreateDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.put<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(`/v1/job/${id}/deliverables`, dto);\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async toggleDeliverableProgress(\n id: string,\n deliverableId: string,\n dto: ToggleDeliverableProgressDto\n ): Promise<ResponseDto<{ deliverable: JobDeliverableResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ deliverable: JobDeliverableResponse }>>(\n `/v1/job/${id}/deliverables/${deliverableId}`,\n dto\n );\n return response as unknown as ResponseDto<{ deliverable: JobDeliverableResponse }>;\n });\n }\n\n public async bulkResetDeliverables(id: string, dto: BulkResetDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(\n `/v1/job/${id}/deliverables/bulk`,\n dto\n );\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async update(id: string, dto: UpdateJobDto): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}`, dto);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async listAllInvites(query: ListAllInvitesQuery = {}): Promise<ResponseDto<JobInviteResponse[]>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job/invites\", query);\n const response = await this.connector.get<StandardResponse<JobInviteResponse[]>>(url);\n return response as unknown as ResponseDto<JobInviteResponse[]>;\n });\n }\n\n public async makeDeposit(id: string, talentId?: string): Promise<ResponseDto<MakeDepositResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(`/v1/job/${id}/make-deposit`, { talentId });\n const response = await this.connector.get<StandardResponse<MakeDepositResponse>>(url);\n return response as unknown as ResponseDto<MakeDepositResponse>;\n });\n }\n\n public async validatePayment(id: string): Promise<ResponseDto<{ job: JobResponse; onChain: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; onChain: any }>>(`/v1/job/${id}/payment/validate`);\n return response as unknown as ResponseDto<{ job: JobResponse; onChain: any }>;\n });\n }\n\n public async apply(id: string, dto: ApplyJobDto): Promise<ResponseDto<{ application: ApplicationResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse }>>(`/v1/job/${id}/apply`, dto);\n return response as unknown as ResponseDto<{ application: ApplicationResponse }>;\n });\n }\n\n public async withdrawApplication(id: string): Promise<ResponseDto<{ message: string }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ message: string }>>(`/v1/job/${id}/apply`);\n return response as unknown as ResponseDto<{ message: string }>;\n });\n }\n\n public async listApplications(id: string, query: ListApplicationsQuery = {}): Promise<ResponseDto<ApplicationListResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(`/v1/job/${id}/applications`, query);\n const response = await this.connector.get<StandardResponse<ApplicationListResponse>>(url);\n return response as unknown as ResponseDto<ApplicationListResponse>;\n });\n }\n\n public async acceptApplication(id: string, appId: string): Promise<ResponseDto<{ application: ApplicationResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse; job: JobResponse }>>(\n `/v1/job/${id}/applications/${appId}/accept`\n );\n return response as unknown as ResponseDto<{ application: ApplicationResponse; job: JobResponse }>;\n });\n }\n\n public async rejectApplication(id: string, appId: string): Promise<ResponseDto<{ application: ApplicationResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse }>>(\n `/v1/job/${id}/applications/${appId}/reject`\n );\n return response as unknown as ResponseDto<{ application: ApplicationResponse }>;\n });\n }\n\n public async requestCancel(id: string, dto: CancelJobDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse }>>(`/v1/job/${id}/cancel`, dto);\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse }>;\n });\n }\n\n public async acceptCancel(id: string, dto?: ResolveCancelDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse; job: JobResponse }>>(\n `/v1/job/${id}/cancel/accept`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>;\n });\n }\n\n public async declineCancel(id: string, dto?: ResolveCancelDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse; job: JobResponse }>>(\n `/v1/job/${id}/cancel/decline`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>;\n });\n }\n\n public async getCancelRequest(id: string): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ cancelRequest: CancelRequestResponse | null }>>(`/v1/job/${id}/cancel`);\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse | null }>;\n });\n }\n\n public async requestReviewChange(id: string, dto: ReviewChangeDto): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change`, dto);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async acceptReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change/accept`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async declineReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change/decline`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async getReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ changeRequest: ChangeRequestResponse | null }>>(`/v1/job/${id}/review-change`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse | null }>;\n });\n }\n\n public async completeJob(id: string, dto?: CompleteJobDto): Promise<ResponseDto<{ job: JobResponse; markReadyTxHash: string | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; markReadyTxHash: string | null }>>(\n `/v1/job/${id}/complete`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ job: JobResponse; markReadyTxHash: string | null }>;\n });\n }\n\n public async releasePayment(id: string, dto?: ReleaseJobPaymentDto): Promise<ResponseDto<{ escrowReleaseTxHash: string | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ escrowReleaseTxHash: string | null }>>(\n `/v1/job/${id}/release`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ escrowReleaseTxHash: string | null }>;\n });\n }\n\n public async submitReview(id: string, dto: JobReviewDto): Promise<ResponseDto<any>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<any>>(`/v1/job/${id}/review`, dto);\n return response as unknown as ResponseDto<any>;\n });\n }\n}\n"],"mappings":"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","names":["main_exports","__export","AuthService","Connector","ErrorUtils","EscrowService","JobService","MessagingService","PsiloSDK","SDKError","Status","parseUrlWithQuery","__toCommonJS","import_reflect_metadata","import_typedi","import_axios","SDKError","Error","message","code","details","name","_SDKError","Connector","baseURL","client","axios","create","headers","setHeader","key","value","defaults","common","removeHeader","handleResponse","response","_a","_b","_c","data","success","SDKError","error","message","code","details","handleError","isAxiosError","get","url","config","post","put","patch","delete","_Connector","import_typedi","defaultOptions","delayFirstAttempt","jitter","maxDelay","Infinity","numOfAttempts","retry","startingDelay","timeMultiple","getSanitizedOptions","options","sanitized","__spreadValues","fullJitter","delay","jitteredDelay","Math","random","round","noJitter","delay","JitterFactory","options","jitter","fullJitter","noJitter","Delay","options","attempt","apply","Promise","resolve","setTimeout","jitteredDelay","setAttemptNumber","JitterFactory","delay","constant","startingDelay","base","timeMultiple","power","numOfDelayedAttempts","Math","pow","min","maxDelay","_Delay","SkipFirstDelay","Delay","apply","isFirstAttempt","attempt","numOfDelayedAttempts","_SkipFirstDelay","AlwaysDelay","Delay","_AlwaysDelay","DelayFactory","options","attempt","delay","initDelayClass","setAttemptNumber","delayFirstAttempt","AlwaysDelay","SkipFirstDelay","backOff","request","options","sanitizedOptions","getSanitizedOptions","BackOff","execute","_a","attemptNumber","attemptLimitReached","applyDelay","e","retry","Error","numOfAttempts","DelayFactory","apply","Status","ErrorUtils","newTryFail","f","data","backOff","startingDelay","timeMultiple","numOfAttempts","maxDelay","delayFirstAttempt","__spreadValues","e","parseErr","toErrorWithMessage","status","message","code","formatErrorMsg","replace","maybeError","_a","error","JSON","parse","Array","length","map","errorCode","_","isErrorWithMessage","stringify","String","parseUrlWithQuery","__name","url","filter","querys","objectKeys","Object","keys","key","i","$and","undefined","EscrowService","id","connector","Container","of","get","Connector","create","data","ErrorUtils","newTryFail","post","getStatus","chainId","escrowAddress","fetchUrl","parseUrlWithQuery","escrow","updateStatus","release","payload","__spreadValues","getChains","getAssets","_EscrowService","factory","transient","import_typedi","import_ethers","AuthService","id","connector","Container","of","get","Connector","register","data","ErrorUtils","newTryFail","post","nonce","verify","paktWeb3Login","privateKey","wallet","Wallet","address","message","tempToken","challengeToken","_paktWeb3Request","signedMessage","signMessage","validateResult","_paktWeb3Validate","token","Error","_paktWeb3Onboard","msg2","challengeToken2","signedMessage2","finalResult","generateWallet","createRandom","account","raw","d","token_type","expiresIn","isVerified","timeZone","firstName","lastName","email","toLowerCase","_AuthService","factory","transient","import_socket","MessagingService","messagingUrl","token","socket","connect","Promise","resolve","reject","io","transports","auth","authorization","once","emit","onBroadcast","handler","_a","on","onUserStatus","onJobInvite","sendMessage","payload","setTyping","conversationId","typing","event","loadConversations","_b","data","messages","createDirectConversation","recipientId","type","error","Error","message","conversation","createGroupConversation","recipientIds","name","recipients","map","id","user","role","fetchConversation","markSeen","seen","Date","now","toString","disconnect","connected","_MessagingService","import_typedi","JobService","id","connector","Container","of","get","Connector","create","dto","ErrorUtils","newTryFail","post","list","query","url","parseUrlWithQuery","getStats","getById","delete","confirmTx","getInvites","inviteTalent","acceptInvite","inviteId","declineInvite","cancelInvite","inviteeId","getEscrowStatus","prepareUpdate","createDeliverables","replaceDeliverables","put","toggleDeliverableProgress","deliverableId","patch","bulkResetDeliverables","update","listAllInvites","makeDeposit","talentId","validatePayment","apply","withdrawApplication","listApplications","acceptApplication","appId","rejectApplication","requestCancel","acceptCancel","declineCancel","getCancelRequest","requestReviewChange","acceptReviewChange","declineReviewChange","getReviewChange","completeJob","releasePayment","submitReview","_JobService","factory","data","transient","BASE_URLS","production","development","PsiloSDK","id","auth","escrow","connector","messaging","job","Container","of","get","Connector","AuthService","EscrowService","MessagingService","JobService","init","config","resolvedUrl","baseUrl","verbose","console","log","generateRandomString","set","messagingUrl","token","setAuthorizationHeader","setHeader","characters","result","i","charAt","Math","floor","random","length","_PsiloSDK","transient"]}
|
package/dist/main.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var P=Object.defineProperty;var M=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,ne=Object.prototype.propertyIsEnumerable;var S=(s,e,t)=>e in s?P(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,m=(s,e)=>{for(var t in e||(e={}))te.call(e,t)&&S(s,t,e[t]);if(M)for(var t of M(e))ne.call(e,t)&&S(s,t,e[t]);return s};var c=(s,e)=>P(s,"name",{value:e,configurable:!0});var p=(s,e,t)=>(S(s,typeof e!="symbol"?e+"":e,t),t);import"reflect-metadata";import{Container as v,Service as de}from"typedi";import W from"axios";var O=class O extends Error{constructor(t,n,r){super(t);p(this,"code");p(this,"details");this.name="SDKError",this.code=n,this.details=r}};c(O,"SDKError");var f=O;var k=class k{constructor(e){p(this,"client");this.client=W.create({baseURL:e,headers:{"Content-Type":"application/json"}})}setHeader(e,t){this.client.defaults.headers.common[e]=t}removeHeader(e){delete this.client.defaults.headers.common[e]}handleResponse(e){var n,r,o;let t=e.data;if(t&&t.success===!1)throw new f(((n=t.error)==null?void 0:n.message)||"Unknown error",((r=t.error)==null?void 0:r.code)||"API_ERROR",(o=t.error)==null?void 0:o.details);return t}handleError(e){var t,n;if(W.isAxiosError(e)){let r=(t=e.response)==null?void 0:t.data;throw r&&r.error?new f(r.error.message||e.message,r.error.code||"REQUEST_ERROR",r.error.details):new f(e.message,e.code,(n=e.response)==null?void 0:n.data)}throw new f(e.message||"An unexpected error occurred","INTERNAL_ERROR")}async get(e,t){try{let n=await this.client.get(e,t);return this.handleResponse(n)}catch(n){this.handleError(n)}}async post(e,t,n){try{let r=await this.client.post(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async put(e,t,n){try{let r=await this.client.put(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async patch(e,t,n){try{let r=await this.client.patch(e,t,n);return this.handleResponse(r)}catch(r){this.handleError(r)}}async delete(e,t){try{let n=await this.client.delete(e,t);return this.handleResponse(n)}catch(n){this.handleError(n)}}};c(k,"Connector");var u=k;import{Container as ie,Service as ce}from"typedi";var re={delayFirstAttempt:!1,jitter:"none",maxDelay:1/0,numOfAttempts:10,retry:()=>!0,startingDelay:100,timeMultiple:2};function L(s){let e=m(m({},re),s);return e.numOfAttempts<1&&(e.numOfAttempts=1),e}c(L,"getSanitizedOptions");function V(s){let e=Math.random()*s;return Math.round(e)}c(V,"fullJitter");function q(s){return s}c(q,"noJitter");function G(s){switch(s.jitter){case"full":return V;case"none":default:return q}}c(G,"JitterFactory");var A=class A{constructor(e){p(this,"options");p(this,"attempt",0);this.options=e}apply(){return new Promise(e=>setTimeout(e,this.jitteredDelay))}setAttemptNumber(e){this.attempt=e}get jitteredDelay(){return G(this.options)(this.delay)}get delay(){let e=this.options.startingDelay,t=this.options.timeMultiple,n=this.numOfDelayedAttempts,r=e*Math.pow(t,n);return Math.min(r,this.options.maxDelay)}get numOfDelayedAttempts(){return this.attempt}};c(A,"Delay");var b=A;var $=class $ extends b{async apply(){return this.isFirstAttempt?!0:super.apply()}get isFirstAttempt(){return this.attempt===0}get numOfDelayedAttempts(){return this.attempt-1}};c($,"SkipFirstDelay");var E=$;var I=class I extends b{};c(I,"AlwaysDelay");var x=I;function J(s,e){let t=se(s);return t.setAttemptNumber(e),t}c(J,"DelayFactory");function se(s){return s.delayFirstAttempt?new x(s):new E(s)}c(se,"initDelayClass");async function z(s,e={}){let t=L(e);return await new oe(s,t).execute()}c(z,"backOff");var R,oe=(R=class{constructor(e,t){p(this,"request");p(this,"options");p(this,"attemptNumber",0);this.request=e,this.options=t}async execute(){for(;!this.attemptLimitReached;)try{return await this.applyDelay(),await this.request()}catch(e){if(this.attemptNumber++,!await this.options.retry(e,this.attemptNumber)||this.attemptLimitReached)throw e}throw new Error("Something went wrong.")}get attemptLimitReached(){return this.attemptNumber>=this.options.numOfAttempts}async applyDelay(){await J(this.options,this.attemptNumber).apply()}},c(R,"BackOff"),R);var nt=function(s){return s.SUCCESS="success",s.ERROR="error",s}({}),a={newTryFail:async s=>{try{let e=await z(async()=>await s(),{startingDelay:50,timeMultiple:10,numOfAttempts:10,maxDelay:3550,delayFirstAttempt:!1});return m({},e)}catch(e){let t=a.toErrorWithMessage(e);return{data:null,status:"error",message:t?t.message:["Internal Server Error"],code:t.code}}},formatErrorMsg:s=>s.replace("attr.",""),toErrorWithMessage:s=>{var e;if(typeof s=="string")try{let t=JSON.parse(s);return t.data instanceof Array&&t.data.length>0?{message:t.data.map(n=>a.formatErrorMsg(n)),code:t.errorCode}:{message:[(e=t.message)!=null?e:s],code:t.errorCode}}catch(t){}if(a.isErrorWithMessage(s))return{message:[s.message]};try{return{message:[JSON.stringify(s,null,2)]}}catch(t){return{message:[String(s)]}}},isErrorWithMessage(s){return typeof s=="object"&&s!==null&&"message"in s&&typeof s.message=="string"}},y=c((s,e)=>{let t="?",n=Object.keys(e||{});return n.length===0?s:(n.map((r,o)=>{let i="&";(r===void 0||r==="undefined"||r===null||r==="null"||r.length===0)&&(t=t),o+1===n.length&&(i=""),t=t+`${r}=${e[r]}${i}`}),s+t)},"parseUrlWithQuery");function ae(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(ae,"_ts_decorate");function B(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(B,"_ts_metadata");var N=class N{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=ie.of(this.id).get(u)}async create(e){return a.newTryFail(async()=>await this.connector.post("/api/escrow/create",e))}async getStatus(e,t){return a.newTryFail(async()=>{let n=y("/api/escrow/status",{chainId:e,escrow:t});return await this.connector.get(n)})}async updateStatus(e){return a.newTryFail(async()=>await this.connector.post("/api/escrow/update",e))}async release(e,t,n){return a.newTryFail(async()=>{let r=m({chainId:e,escrowAddress:t},n||{});return await this.connector.post("/api/escrow/release",r)})}async getChains(){return a.newTryFail(async()=>await this.connector.get("/api/escrow/chains"))}async getAssets(e){return a.newTryFail(async()=>await this.connector.get(`/api/escrow/assets/${e}`))}};c(N,"EscrowService");var w=N;w=ae([ce({factory:s=>new w(s.id),transient:!0}),B("design:type",Function),B("design:paramtypes",[String])],w);import{Container as le,Service as ue}from"typedi";import{Wallet as Z}from"ethers";function pe(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(pe,"_ts_decorate");function H(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(H,"_ts_metadata");var _=class _{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=le.of(this.id).get(u)}async register(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/register",e))}async nonce(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/nonce",e))}async verify(e){return a.newTryFail(async()=>await this.connector.post("/api/auth/verify",e))}async paktWeb3Login(e){let t=new Z(e),n=t.address,{message:r,tempToken:o}=await this._paktWeb3Request(n),i=await t.signMessage(r),l=await this._paktWeb3Validate(i,o);if(l.token)return l.token;if(!l.tempToken)throw new Error("Unexpected paktsuite web3/validate response: no token or tempToken");await this._paktWeb3Onboard(l.tempToken,n);let{message:h,tempToken:X}=await this._paktWeb3Request(n),ee=await t.signMessage(h),U=await this._paktWeb3Validate(ee,X);if(!U.token)throw new Error("Web3 authentication failed after onboarding");return U.token}static generateWallet(){let e=Z.createRandom();return{privateKey:e.privateKey,address:e.address}}async _paktWeb3Request(e){let t=await this.connector.post("/v1/auth/web3/request",{account:e});return{message:t.data.message,tempToken:t.data.tempToken.token}}async _paktWeb3Validate(e,t){var o,i,l;let n=await this.connector.post("/v1/auth/web3/validate",{signedMessage:e,tempToken:t}),r=(o=n.data)!=null?o:n;return{token:r==null?void 0:r.token,token_type:r==null?void 0:r.token_type,expiresIn:r==null?void 0:r.expiresIn,isVerified:r==null?void 0:r.isVerified,timeZone:r==null?void 0:r.timeZone,account:r==null?void 0:r.account,tempToken:(l=(i=r==null?void 0:r.tempToken)==null?void 0:i.token)!=null?l:r==null?void 0:r.tempToken}}async _paktWeb3Onboard(e,t){return this.connector.post("/v1/auth/web3/onboard",{tempToken:e,firstName:t,lastName:t,email:`${t.toLowerCase()}@pakt.internal`})}};c(_,"AuthService");var d=_;d=pe([ue({factory:s=>new d(s.id),transient:!0}),H("design:type",Function),H("design:paramtypes",[String])],d);import{io as he}from"socket.io-client";var C=class C{constructor(e,t){p(this,"messagingUrl");p(this,"token");p(this,"socket",null);this.messagingUrl=e,this.token=t}connect(){return new Promise((e,t)=>{this.socket=he(this.messagingUrl,{transports:["websocket"],auth:{authorization:`Bearer ${this.token}`}}),this.socket.once("connect",()=>{this.socket.emit("USER_CONNECT"),e()}),this.socket.once("connect_error",t)})}onBroadcast(e){var t;(t=this.socket)==null||t.on("BROADCAST_MESSAGE",e)}onUserStatus(e){var t;(t=this.socket)==null||t.on("USER_STATUS",e)}onJobInvite(e){var t;(t=this.socket)==null||t.on("JOB_INVITE",e)}sendMessage(e){var t;(t=this.socket)==null||t.emit("SEND_MESSAGE",e)}setTyping(e,t){var r;let n=t?"SENDER_IS_TYPING":"SENDER_STOPS_TYPING";(r=this.socket)==null||r.emit(n,{conversationId:e})}loadConversations(){return new Promise(e=>{var t,n;(t=this.socket)==null||t.emit("GET_ALL_CONVERSATIONS"),(n=this.socket)==null||n.once("GET_ALL_CONVERSATIONS",r=>{var o,i;e((i=(o=r.data)==null?void 0:o.messages)!=null?i:[])})})}createDirectConversation(e){return new Promise((t,n)=>{var r,o;(r=this.socket)==null||r.emit("INITIALIZE_CONVERSATION",{type:"DIRECT",recipientId:e}),(o=this.socket)==null||o.once("INITIALIZE_CONVERSATION",i=>{i.error?n(new Error(i.message)):t(i.data.conversation)})})}createGroupConversation(e,t){return new Promise((n,r)=>{var i,l;let o=e.map(h=>({user:h,role:"USER"}));(i=this.socket)==null||i.emit("INITIALIZE_CONVERSATION",{type:"GROUP",recipients:o,name:t}),(l=this.socket)==null||l.once("INITIALIZE_CONVERSATION",h=>{h.error?r(new Error(h.message)):n(h.data.conversation)})})}fetchConversation(e){return new Promise((t,n)=>{var r,o;(r=this.socket)==null||r.emit("FETCH_CONVERSATION_MESSAGES",{conversationId:e}),(o=this.socket)==null||o.once("FETCH_CONVERSATION_MESSAGES",i=>{i.error?n(new Error(i.message)):t(i.data)})})}markSeen(e){var t;(t=this.socket)==null||t.emit("MARK_MESSAGE_AS_SEEN",{conversationId:e,seen:Date.now().toString()})}disconnect(){var e;(e=this.socket)==null||e.disconnect(),this.socket=null}get connected(){var e,t;return(t=(e=this.socket)==null?void 0:e.connected)!=null?t:!1}};c(C,"MessagingService");var T=C;import{Container as me,Service as fe}from"typedi";function ye(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(ye,"_ts_decorate");function K(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(K,"_ts_metadata");var D=class D{constructor(e){p(this,"id");p(this,"connector");this.id=e,this.connector=me.of(this.id).get(u)}async create(e){return a.newTryFail(async()=>await this.connector.post("/v1/job",e))}async list(e={}){return a.newTryFail(async()=>{let t=y("/v1/job",e);return await this.connector.get(t)})}async getStats(e={}){return a.newTryFail(async()=>{let t=y("/v1/job/stats",e);return await this.connector.get(t)})}async getById(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}`))}async delete(e){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}`))}async confirmTx(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/confirm-tx`,t))}async getInvites(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/invites`))}async inviteTalent(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite`,t))}async acceptInvite(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite/${t}/accept`))}async declineInvite(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/invite/${t}/decline`))}async cancelInvite(e,t){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}/invite/${t}`))}async getEscrowStatus(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/escrow/status`))}async prepareUpdate(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/escrow/update`,t))}async createDeliverables(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/deliverables`,t))}async replaceDeliverables(e,t){return a.newTryFail(async()=>await this.connector.put(`/v1/job/${e}/deliverables`,t))}async toggleDeliverableProgress(e,t,n){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}/deliverables/${t}`,n))}async bulkResetDeliverables(e,t){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}/deliverables/bulk`,t))}async update(e,t){return a.newTryFail(async()=>await this.connector.patch(`/v1/job/${e}`,t))}async listAllInvites(e={}){return a.newTryFail(async()=>{let t=y("/v1/job/invites",e);return await this.connector.get(t)})}async makeDeposit(e,t){return a.newTryFail(async()=>{let n=y(`/v1/job/${e}/make-deposit`,{talentId:t});return await this.connector.get(n)})}async validatePayment(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/payment/validate`))}async apply(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/apply`,t))}async withdrawApplication(e){return a.newTryFail(async()=>await this.connector.delete(`/v1/job/${e}/apply`))}async listApplications(e,t={}){return a.newTryFail(async()=>{let n=y(`/v1/job/${e}/applications`,t);return await this.connector.get(n)})}async acceptApplication(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/applications/${t}/accept`))}async rejectApplication(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/applications/${t}/reject`))}async requestCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel`,t))}async acceptCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel/accept`,t!=null?t:{}))}async declineCancel(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/cancel/decline`,t!=null?t:{}))}async getCancelRequest(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/cancel`))}async requestReviewChange(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change`,t))}async acceptReviewChange(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change/accept`))}async declineReviewChange(e){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review-change/decline`))}async getReviewChange(e){return a.newTryFail(async()=>await this.connector.get(`/v1/job/${e}/review-change`))}async completeJob(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/complete`,t!=null?t:{}))}async releasePayment(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/release`,t!=null?t:{}))}async submitReview(e,t){return a.newTryFail(async()=>await this.connector.post(`/v1/job/${e}/review`,t))}};c(D,"JobService");var g=D;g=ye([fe({factory:s=>new g(s.id),transient:!0}),K("design:type",Function),K("design:paramtypes",[String])],g);function we(s,e,t,n){var r=arguments.length,o=r<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,e,t,n);else for(var l=s.length-1;l>=0;l--)(i=s[l])&&(o=(r<3?i(o):r>3?i(e,t,o):i(e,t))||o);return r>3&&o&&Object.defineProperty(e,t,o),o}c(we,"_ts_decorate");function Q(s,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,e)}c(Q,"_ts_metadata");var Y={production:"https://devpaktworkapi.kapt.xyz",development:"http://localhost:9000"},j=class j{constructor(e){p(this,"auth");p(this,"escrow");p(this,"connector");p(this,"messaging");p(this,"job");this.connector=v.of(e).get(u),this.auth=v.of(e).get(d),this.escrow=v.of(e).get(w),this.messaging=v.of(e).get(T),this.job=v.of(e).get(g)}static async init(e={}){var i,l,h;let t=(i=e.baseUrl)!=null?i:e.development?Y.development:Y.production;e.verbose&&console.log(`[PsiloSDK] Initializing SDK pointed to ${t}`);let n=j.generateRandomString(),r=new u(t);v.of(n).set(u,r);let o=new T((l=e.messagingUrl)!=null?l:"",(h=e.token)!=null?h:"");return v.of(n).set(T,o),new j(n)}setAuthorizationHeader(e){this.connector.setHeader("Authorization",`Bearer ${e}`)}static generateRandomString(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let n=0;n<60;n++)t+=e.charAt(Math.floor(Math.random()*e.length));return t}};c(j,"PsiloSDK");var F=j;F=we([de({transient:!0}),Q("design:type",Function),Q("design:paramtypes",[String])],F);export{d as AuthService,u as Connector,a as ErrorUtils,w as EscrowService,g as JobService,T as MessagingService,F as PsiloSDK,f as SDKError,nt as Status,y as parseUrlWithQuery};
|
|
2
|
+
//# sourceMappingURL=main.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.ts","../src/services/index.ts","../src/connector/connector.ts","../src/utils/errors.ts","../src/services/escrow/escrow.ts","../src/utils/backOff/options.ts","../src/utils/backOff/jitter/full/full.jitter.ts","../src/utils/backOff/jitter/no/no.jitter.ts","../src/utils/backOff/jitter/jitter.factory.ts","../src/utils/backOff/delay/delay.base.ts","../src/utils/backOff/delay/skip-first/skip-first.delay.ts","../src/utils/backOff/delay/always/always.delay.ts","../src/utils/backOff/delay/delay.factory.ts","../src/utils/backOff/backoff.ts","../src/utils/response.ts","../src/services/auth/auth.ts","../src/services/messaging/messaging.ts","../src/services/job/job.ts"],"sourcesContent":["import \"reflect-metadata\";\nexport * from \"./services\";\nexport * from \"./utils\";\nexport * from \"./connector\";","import { Container, Service } from \"typedi\";\nimport { Connector } from \"../connector\";\nimport { EscrowService } from \"./escrow\";\nimport { AuthService } from \"./auth\";\nimport { MessagingService } from \"./messaging\";\nimport { JobService } from \"./job\";\n\nexport * from \"./escrow\";\nexport * from \"./auth\";\nexport * from \"./messaging\";\nexport * from \"./job\";\n\nconst BASE_URLS = {\n production: \"https://devpaktworkapi.kapt.xyz\",\n development: \"http://localhost:9000\",\n} as const;\n\nexport interface PsiloSDKConfig {\n development?: boolean;\n verbose?: boolean;\n baseUrl?: string;\n messagingUrl?: string;\n token?: string;\n}\n\n@Service({ transient: true })\nexport class PsiloSDK {\n public readonly auth: AuthService;\n public readonly escrow: EscrowService;\n public readonly connector: Connector;\n public readonly messaging: MessagingService;\n public readonly job: JobService;\n\n constructor(id: string) {\n this.connector = Container.of(id).get(Connector);\n this.auth = Container.of(id).get(AuthService);\n this.escrow = Container.of(id).get(EscrowService);\n this.messaging = Container.of(id).get(MessagingService);\n this.job = Container.of(id).get(JobService);\n }\n\n /**\n * Initialize Psilo SDK. This method must be called before any other method.\n * @param config\n */\n public static async init(config: PsiloSDKConfig = {}): Promise<PsiloSDK> {\n const resolvedUrl =\n config.baseUrl ??\n (config.development ? BASE_URLS.development : BASE_URLS.production);\n\n if (config.verbose) {\n console.log(`[PsiloSDK] Initializing SDK pointed to ${resolvedUrl}`);\n }\n\n const id = PsiloSDK.generateRandomString();\n\n const connector = new Connector(resolvedUrl);\n Container.of(id).set(Connector, connector);\n\n const messaging = new MessagingService(\n config.messagingUrl ?? \"\",\n config.token ?? \"\"\n );\n Container.of(id).set(MessagingService, messaging);\n\n return new PsiloSDK(id);\n }\n\n // Allow dynamic updating of headers if necessary (e.g. for Auth tokens down the line)\n public setAuthorizationHeader(token: string): void {\n this.connector.setHeader(\"Authorization\", `Bearer ${token}`);\n }\n\n /**\n * Generate Random String. This method is used to generate random strings.\n */\n private static generateRandomString(): string {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 60; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n }\n}\n\nexport default PsiloSDK;\n","import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SDKError } from \"../utils/errors\";\n\nexport class Connector {\n private readonly client: AxiosInstance;\n\n constructor(baseURL: string) {\n this.client = axios.create({\n baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n\n public setHeader(key: string, value: string): void {\n this.client.defaults.headers.common[key] = value;\n }\n\n public removeHeader(key: string): void {\n delete this.client.defaults.headers.common[key];\n }\n\n private handleResponse<T>(response: AxiosResponse<T>): T {\n const data = response.data as any;\n if (data && data.success === false) {\n throw new SDKError(\n data.error?.message || \"Unknown error\",\n data.error?.code || \"API_ERROR\",\n data.error?.details\n );\n }\n return data;\n }\n\n private handleError(error: any): never {\n if (axios.isAxiosError(error)) {\n const data = error.response?.data as any;\n if (data && data.error) {\n throw new SDKError(\n data.error.message || error.message,\n data.error.code || \"REQUEST_ERROR\",\n data.error.details\n );\n }\n throw new SDKError(error.message, error.code, error.response?.data);\n }\n throw new SDKError(error.message || \"An unexpected error occurred\", \"INTERNAL_ERROR\");\n }\n\n public async get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.get<T>(url, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.post<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.put<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async patch<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.patch<T>(url, data, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public async delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.delete<T>(url, config);\n return this.handleResponse<T>(response);\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","export class SDKError extends Error {\n public readonly code?: string;\n public readonly details?: any;\n\n constructor(message: string, code?: string, details?: any) {\n super(message);\n this.name = \"SDKError\";\n this.code = code;\n this.details = details;\n }\n}\n","import { Container, Service } from \"typedi\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto, parseUrlWithQuery } from \"../../utils/response\";\nimport {\n CreateEscrowDto,\n CreateEscrowResponse,\n EscrowStatusResponse,\n ReleaseDto,\n ReleaseResponse,\n UpdateEscrowStatusDto,\n EscrowModuleType,\n PrepareTransactionResponse,\n GetEscrowChainsResponseDto,\n GetEscrowAssetsResponseDto\n} from \"./escrow.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new EscrowService(data.id);\n },\n transient: true,\n})\nexport class EscrowService implements EscrowModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async create(data: CreateEscrowDto): Promise<ResponseDto<CreateEscrowResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<CreateEscrowResponse>>(\"/api/escrow/create\", data);\n return response as unknown as ResponseDto<CreateEscrowResponse>;\n });\n }\n\n public async getStatus(chainId: string, escrowAddress: string): Promise<ResponseDto<EscrowStatusResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const fetchUrl = parseUrlWithQuery(\"/api/escrow/status\", { chainId, escrow: escrowAddress });\n const response = await this.connector.get<StandardResponse<EscrowStatusResponse>>(fetchUrl);\n return response as unknown as ResponseDto<EscrowStatusResponse>;\n });\n }\n\n public async updateStatus(data: UpdateEscrowStatusDto): Promise<ResponseDto<PrepareTransactionResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<PrepareTransactionResponse>>(\"/api/escrow/update\", data);\n return response as unknown as ResponseDto<PrepareTransactionResponse>;\n });\n }\n\n public async release(chainId: string, escrowAddress: string, data?: ReleaseDto): Promise<ResponseDto<ReleaseResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const payload = { chainId, escrowAddress, ...(data || {}) };\n const response = await this.connector.post<StandardResponse<ReleaseResponse>>(\"/api/escrow/release\", payload);\n return response as unknown as ResponseDto<ReleaseResponse>;\n });\n }\n\n public async getChains(): Promise<ResponseDto<GetEscrowChainsResponseDto>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<GetEscrowChainsResponseDto>>(\"/api/escrow/chains\");\n return response as unknown as ResponseDto<GetEscrowChainsResponseDto>;\n });\n }\n\n public async getAssets(chainId: string): Promise<ResponseDto<GetEscrowAssetsResponseDto>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<GetEscrowAssetsResponseDto>>(`/api/escrow/assets/${chainId}`);\n return response as unknown as ResponseDto<GetEscrowAssetsResponseDto>;\n });\n }\n}\n","/**\n * Type of jitter to apply to the delay.\n * - `\"none\"`: no jitter is applied\n * - `\"full\"`: full jitter is applied (random value between `0` and `delay`)\n */\nexport type JitterType = \"none\" | \"full\";\n\nexport type BackoffOptions = Partial<IBackOffOptions>;\n\nexport interface IBackOffOptions {\n /**\n * Decides whether the `startingDelay` should be applied before the first call.\n * If `false`, the first call will occur without a delay.\n * @defaultValue `false`\n */\n delayFirstAttempt: boolean;\n /**\n * Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)\n * should be applied to the delay. Possible values are `\"full\"` and `\"none\"`.\n * @defaultValue `\"none\"`\n */\n jitter: JitterType;\n /**\n * The maximum delay, in milliseconds, between two consecutive attempts.\n * @defaultValue `Infinity`\n */\n maxDelay: number;\n /**\n * The maximum number of times to attempt the function.\n * Must be at least `1`.\n * @defaultValue `10`\n */\n numOfAttempts: number;\n /**\n * The `retry` function can be used to run logic after every failed attempt (e.g. logging a message,\n * assessing the last error, etc.).\n * It is called with the last error and the upcoming attempt number.\n * Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded.\n * Returning `false` will end the execution.\n * @defaultValue a function that always returns `true`.\n * @param e The last error thrown by the function.\n * @param attemptNumber The upcoming attempt number.\n * @returns `true` to retry the function, `false` to end the execution\n */\n retry: (e: any, attemptNumber: number) => boolean | Promise<boolean>;\n /**\n * The delay, in milliseconds, before executing the function for the first time.\n * @defaultValue `100`\n */\n startingDelay: number;\n /**\n * The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.\n * @defaultValue `2`\n */\n timeMultiple: number;\n}\n\nconst defaultOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n jitter: \"none\",\n maxDelay: Infinity,\n numOfAttempts: 10,\n retry: () => true,\n startingDelay: 100,\n timeMultiple: 2,\n};\n\nexport function getSanitizedOptions(options: BackoffOptions) {\n const sanitized: IBackOffOptions = { ...defaultOptions, ...options };\n\n if (sanitized.numOfAttempts < 1) {\n sanitized.numOfAttempts = 1;\n }\n\n return sanitized;\n}\n","export function fullJitter(delay: number) {\n const jitteredDelay = Math.random() * delay;\n return Math.round(jitteredDelay);\n}\n","export function noJitter(delay: number) {\n return delay;\n}\n","import { IBackOffOptions } from \"../options\";\nimport { fullJitter } from \"./full/full.jitter\";\nimport { noJitter } from \"./no/no.jitter\";\n\nexport type Jitter = (delay: number) => number;\n\nexport function JitterFactory(options: IBackOffOptions): Jitter {\n switch (options.jitter) {\n case \"full\":\n return fullJitter;\n\n case \"none\":\n default:\n return noJitter;\n }\n}\n","import { IDelay } from \"./delay.interface\";\nimport { IBackOffOptions } from \"../options\";\nimport { JitterFactory } from \"../jitter/jitter.factory\";\n\nexport abstract class Delay implements IDelay {\n protected attempt = 0;\n constructor(private options: IBackOffOptions) {}\n\n public apply() {\n return new Promise((resolve) => setTimeout(resolve, this.jitteredDelay));\n }\n\n public setAttemptNumber(attempt: number) {\n this.attempt = attempt;\n }\n\n private get jitteredDelay() {\n const jitter = JitterFactory(this.options);\n return jitter(this.delay);\n }\n\n private get delay() {\n const constant = this.options.startingDelay;\n const base = this.options.timeMultiple;\n const power = this.numOfDelayedAttempts;\n const delay = constant * Math.pow(base, power);\n\n return Math.min(delay, this.options.maxDelay);\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt;\n }\n}\n","import { Delay } from \"../delay.base\";\n\nexport class SkipFirstDelay extends Delay {\n public async apply() {\n return this.isFirstAttempt ? true : super.apply();\n }\n\n private get isFirstAttempt() {\n return this.attempt === 0;\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt - 1;\n }\n}\n","import { Delay } from \"../delay.base\";\n\nexport class AlwaysDelay extends Delay {}\n","import { IBackOffOptions } from \"../options\";\nimport { SkipFirstDelay } from \"./skip-first/skip-first.delay\";\nimport { AlwaysDelay } from \"./always/always.delay\";\nimport { IDelay } from \"./delay.interface\";\n\nexport function DelayFactory(options: IBackOffOptions, attempt: number): IDelay {\n const delay = initDelayClass(options);\n delay.setAttemptNumber(attempt);\n return delay;\n}\n\nfunction initDelayClass(options: IBackOffOptions) {\n if (!options.delayFirstAttempt) {\n return new SkipFirstDelay(options);\n }\n\n return new AlwaysDelay(options);\n}\n","import { IBackOffOptions, getSanitizedOptions, BackoffOptions } from \"./options\";\nimport { DelayFactory } from \"./delay/delay.factory\";\n\nexport type { BackoffOptions, IBackOffOptions };\n\n/**\n * Executes a function with exponential backoff.\n * @param request the function to be executed\n * @param options options to customize the backoff behavior\n * @returns Promise that resolves to the result of the `request` function\n */\nexport async function backOff<T>(request: () => Promise<T>, options: BackoffOptions = {}): Promise<T> {\n const sanitizedOptions = getSanitizedOptions(options);\n const backOff = new BackOff(request, sanitizedOptions);\n\n return await backOff.execute();\n}\n\nclass BackOff<T> {\n private attemptNumber = 0;\n\n constructor(private request: () => Promise<T>, private options: IBackOffOptions) {}\n\n public async execute(): Promise<T> {\n while (!this.attemptLimitReached) {\n try {\n await this.applyDelay();\n return await this.request();\n } catch (e) {\n this.attemptNumber++;\n const shouldRetry = await this.options.retry(e, this.attemptNumber);\n\n if (!shouldRetry || this.attemptLimitReached) {\n throw e;\n }\n }\n }\n\n throw new Error(\"Something went wrong.\");\n }\n\n private get attemptLimitReached() {\n return this.attemptNumber >= this.options.numOfAttempts;\n }\n\n private async applyDelay() {\n const delay = DelayFactory(this.options, this.attemptNumber);\n await delay.apply();\n }\n}\n","import { backOff } from \"./backOff/backoff\";\n\nexport enum Status {\n SUCCESS = \"success\",\n ERROR = \"error\",\n}\n\nexport interface ResponseDto<T> {\n data: T;\n status: Status;\n message?: string;\n code?: number;\n statusCode?: number;\n validation?: Record<string, any>;\n}\n\nexport type IAny = any;\n\ntype ErrorWithMessage = {\n message: string[] | object[] | any;\n code?: string;\n};\n\nexport const ErrorUtils = {\n newTryFail: async <T>(f: (() => Promise<T>) | (() => T)): Promise<T> => {\n try {\n const data = await backOff(\n async () => {\n return await f();\n },\n {\n startingDelay: 50,\n timeMultiple: 10,\n numOfAttempts: 10,\n maxDelay: 3550,\n delayFirstAttempt: false,\n },\n );\n\n return { ...data };\n } catch (e) {\n const parseErr = ErrorUtils.toErrorWithMessage(e);\n return {\n data: null as unknown as T,\n status: Status.ERROR,\n message: parseErr ? parseErr.message : [\"Internal Server Error\"],\n code: parseErr.code,\n } as unknown as T;\n }\n },\n formatErrorMsg: (message: string) => {\n return message.replace(\"attr.\", \"\");\n },\n toErrorWithMessage: (maybeError: unknown): ErrorWithMessage => {\n if (typeof maybeError === \"string\") {\n try {\n const error = JSON.parse(maybeError as string);\n if (error.data instanceof Array && error.data.length > 0) {\n return {\n message: (error.data as string[]).map((message) => ErrorUtils.formatErrorMsg(message)),\n code: error.errorCode,\n };\n }\n\n return {\n message: [error.message ?? maybeError],\n code: error.errorCode,\n };\n // eslint-disable-next-line no-empty\n } catch (_) {}\n }\n\n if (ErrorUtils.isErrorWithMessage(maybeError)) {\n return { message: [maybeError.message] };\n }\n\n try {\n return {\n message: [JSON.stringify(maybeError, null, 2)],\n };\n } catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return { message: [String(maybeError)] };\n }\n },\n isErrorWithMessage(e: unknown): e is ErrorWithMessage {\n return (\n typeof e === \"object\" &&\n e !== null &&\n \"message\" in e &&\n typeof (e as Record<string, unknown>).message === \"string\"\n );\n },\n};\n\nexport const parseUrlWithQuery = (url: string, filter: object | any) => {\n let querys = \"?\";\n const objectKeys = Object.keys(filter || {});\n if (objectKeys.length === 0) return url;\n objectKeys.map((key, i) => {\n let $and = \"&\";\n if (key === undefined || key === \"undefined\" || key === null || key === \"null\" || key.length === 0) {\n querys = querys;\n }\n if (i + 1 === objectKeys.length) {\n $and = \"\";\n }\n querys = querys + `${key}=${filter[key]}${$and}`;\n });\n return url + querys;\n};\n","import { Container, Service } from \"typedi\";\nimport { Wallet } from \"ethers\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto } from \"../../utils/response\";\nimport {\n AuthModuleType,\n NonceDto,\n NonceResponse,\n RegisterDto,\n RegisterResponse,\n VerifyDto,\n VerifyResponse,\n PaktWeb3RequestResponse,\n PaktWeb3ValidateResponse,\n PaktWeb3OnboardResponse,\n} from \"./auth.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new AuthService(data.id);\n },\n transient: true,\n})\nexport class AuthService implements AuthModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async register(data: RegisterDto): Promise<ResponseDto<RegisterResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<RegisterResponse>>(\"/api/auth/register\", data);\n return response as unknown as ResponseDto<RegisterResponse>;\n });\n }\n\n public async nonce(data: NonceDto): Promise<ResponseDto<NonceResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<NonceResponse>>(\"/api/auth/nonce\", data);\n return response as unknown as ResponseDto<NonceResponse>;\n });\n }\n\n public async verify(data: VerifyDto): Promise<ResponseDto<VerifyResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<VerifyResponse>>(\"/api/auth/verify\", data);\n return response as unknown as ResponseDto<VerifyResponse>;\n });\n }\n\n /**\n * Authenticate an agent with paktsuite using its Ethereum private key.\n *\n * Flow:\n * 1. request — server issues a one-time challenge message\n * 2. sign — agent signs the message with its private key\n * 3. validate — server recovers the signer address and issues a JWT\n *\n * On first run the server returns an onboard token instead of a JWT.\n * The method handles onboarding automatically (using the wallet address\n * as firstName, lastName, and email) then re-authenticates to get the JWT.\n *\n * @param privateKey Hex private key (with or without 0x prefix)\n * @returns Paktsuite JWT ready for socket.io auth\n */\n public async paktWeb3Login(privateKey: string): Promise<string> {\n const wallet = new Wallet(privateKey);\n const address = wallet.address;\n\n const { message, tempToken: challengeToken } =\n await this._paktWeb3Request(address);\n\n const signedMessage = await wallet.signMessage(message);\n const validateResult = await this._paktWeb3Validate(signedMessage, challengeToken);\n\n if (validateResult.token) {\n return validateResult.token;\n }\n\n // First login — onboard with wallet address as profile, then re-authenticate\n if (!validateResult.tempToken) {\n throw new Error(\"Unexpected paktsuite web3/validate response: no token or tempToken\");\n }\n\n await this._paktWeb3Onboard(validateResult.tempToken, address);\n\n const { message: msg2, tempToken: challengeToken2 } =\n await this._paktWeb3Request(address);\n\n const signedMessage2 = await wallet.signMessage(msg2);\n const finalResult = await this._paktWeb3Validate(signedMessage2, challengeToken2);\n\n if (!finalResult.token) {\n throw new Error(\"Web3 authentication failed after onboarding\");\n }\n\n return finalResult.token;\n }\n\n /**\n * Generate a fresh Ethereum wallet and return its private key and address.\n * The caller is responsible for persisting the private key to WALLET.md.\n */\n public static generateWallet(): { privateKey: string; address: string } {\n const wallet = Wallet.createRandom();\n return { privateKey: wallet.privateKey, address: wallet.address };\n }\n\n private async _paktWeb3Request(account: string): Promise<PaktWeb3RequestResponse> {\n const raw = await this.connector.post<any>(\"/v1/auth/web3/request\", { account });\n // Response shape: { message, data: { tempToken: { token, ... } } }\n return {\n message: raw.data.message,\n tempToken: raw.data.tempToken.token,\n };\n }\n\n private async _paktWeb3Validate(\n signedMessage: string,\n tempToken: string\n ): Promise<PaktWeb3ValidateResponse> {\n const raw = await this.connector.post<any>(\"/v1/auth/web3/validate\", { signedMessage, tempToken });\n // Response shape: { status, data: { token, ... } } (onboarded) or { status, data: { account, tempToken: { token } } }\n const d = raw.data ?? raw;\n return {\n token: d?.token,\n token_type: d?.token_type,\n expiresIn: d?.expiresIn,\n isVerified: d?.isVerified,\n timeZone: d?.timeZone,\n account: d?.account,\n tempToken: d?.tempToken?.token ?? d?.tempToken,\n };\n }\n\n private async _paktWeb3Onboard(\n tempToken: string,\n address: string\n ): Promise<PaktWeb3OnboardResponse> {\n return this.connector.post<PaktWeb3OnboardResponse>(\n \"/v1/auth/web3/onboard\",\n {\n tempToken,\n firstName: address,\n lastName: address,\n email: `${address.toLowerCase()}@pakt.internal`,\n }\n );\n }\n}\n","import { io, Socket } from \"socket.io-client\";\nimport type {\n BroadcastMessage,\n Conversation,\n FetchedConversation,\n JobInviteNotification,\n SendMessagePayload,\n UserStatusEvent,\n WsEnvelope,\n} from \"./messaging.dto\";\n\nexport class MessagingService {\n private socket: Socket | null = null;\n\n constructor(\n private readonly messagingUrl: string,\n private readonly token: string\n ) {}\n\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.socket = io(this.messagingUrl, {\n transports: [\"websocket\"],\n auth: { authorization: `Bearer ${this.token}` },\n });\n this.socket.once(\"connect\", () => {\n this.socket!.emit(\"USER_CONNECT\");\n resolve();\n });\n this.socket.once(\"connect_error\", reject);\n });\n }\n\n // BROADCAST_MESSAGE is emitted to the conversation room with the raw ChatMessage document.\n // The handler receives the message directly (no wsResponse envelope).\n onBroadcast(handler: (msg: BroadcastMessage) => void): void {\n this.socket?.on(\"BROADCAST_MESSAGE\", handler);\n }\n\n onUserStatus(handler: (event: UserStatusEvent) => void): void {\n this.socket?.on(\"USER_STATUS\", handler);\n }\n\n onJobInvite(handler: (invite: JobInviteNotification) => void): void {\n this.socket?.on(\"JOB_INVITE\", handler);\n }\n\n sendMessage(payload: SendMessagePayload): void {\n this.socket?.emit(\"SEND_MESSAGE\", payload);\n }\n\n setTyping(conversationId: string, typing: boolean): void {\n const event = typing ? \"SENDER_IS_TYPING\" : \"SENDER_STOPS_TYPING\";\n this.socket?.emit(event, { conversationId });\n }\n\n loadConversations(): Promise<Conversation[]> {\n return new Promise((resolve) => {\n this.socket?.emit(\"GET_ALL_CONVERSATIONS\");\n this.socket?.once(\n \"GET_ALL_CONVERSATIONS\",\n (data: WsEnvelope<{ messages: Conversation[] }>) => {\n resolve(data.data?.messages ?? []);\n }\n );\n });\n }\n\n createDirectConversation(recipientId: string): Promise<Conversation> {\n return new Promise((resolve, reject) => {\n this.socket?.emit(\"INITIALIZE_CONVERSATION\", {\n type: \"DIRECT\",\n recipientId,\n });\n this.socket?.once(\n \"INITIALIZE_CONVERSATION\",\n (data: WsEnvelope<{ conversation: Conversation }>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data.conversation);\n }\n }\n );\n });\n }\n\n createGroupConversation(\n recipientIds: string[],\n name?: string\n ): Promise<Conversation> {\n return new Promise((resolve, reject) => {\n const recipients = recipientIds.map((id) => ({ user: id, role: \"USER\" }));\n this.socket?.emit(\"INITIALIZE_CONVERSATION\", {\n type: \"GROUP\",\n recipients,\n name,\n });\n this.socket?.once(\n \"INITIALIZE_CONVERSATION\",\n (data: WsEnvelope<{ conversation: Conversation }>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data.conversation);\n }\n }\n );\n });\n }\n\n fetchConversation(conversationId: string): Promise<FetchedConversation> {\n return new Promise((resolve, reject) => {\n this.socket?.emit(\"FETCH_CONVERSATION_MESSAGES\", { conversationId });\n this.socket?.once(\n \"FETCH_CONVERSATION_MESSAGES\",\n (data: WsEnvelope<FetchedConversation>) => {\n if (data.error) {\n reject(new Error(data.message));\n } else {\n resolve(data.data);\n }\n }\n );\n });\n }\n\n // paktsuite requires both conversationId and seen (timestamp string) to mark messages read\n markSeen(conversationId: string): void {\n this.socket?.emit(\"MARK_MESSAGE_AS_SEEN\", {\n conversationId,\n seen: Date.now().toString(),\n });\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n }\n\n get connected(): boolean {\n return this.socket?.connected ?? false;\n }\n}\n","import { Container, Service } from \"typedi\";\nimport { Connector, StandardResponse } from \"../../connector\";\nimport { ErrorUtils, ResponseDto, parseUrlWithQuery } from \"../../utils/response\";\nimport {\n JobModuleType,\n CreateJobDto,\n ConfirmTxDto,\n InviteTalentDto,\n PrepareUpdateDto,\n ListJobsQuery,\n GetStatsQuery,\n CreateDeliverablesDto,\n ToggleDeliverableProgressDto,\n BulkResetDeliverablesDto,\n JobResponse,\n JobListResponse,\n JobStatsResponse,\n JobInviteResponse,\n JobDeliverableResponse,\n UpdateJobDto,\n ListAllInvitesQuery,\n MakeDepositResponse,\n ApplyJobDto,\n ApplicationResponse,\n ApplicationListResponse,\n ListApplicationsQuery,\n CancelJobDto,\n CancelRequestResponse,\n ResolveCancelDto,\n ReviewChangeDto,\n ChangeRequestResponse,\n CompleteJobDto,\n ReleaseJobPaymentDto,\n JobReviewDto,\n} from \"./job.dto\";\n\n@Service({\n factory: (data: { id: string }) => {\n return new JobService(data.id);\n },\n transient: true,\n})\nexport class JobService implements JobModuleType {\n private id: string;\n private connector: Connector;\n\n constructor(id: string) {\n this.id = id;\n this.connector = Container.of(this.id).get(Connector);\n }\n\n public async create(dto: CreateJobDto): Promise<ResponseDto<{ job: JobResponse; escrowTx: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; escrowTx: any }>>(\"/v1/job\", dto);\n return response as unknown as ResponseDto<{ job: JobResponse; escrowTx: any }>;\n });\n }\n\n public async list(query: ListJobsQuery = {}): Promise<ResponseDto<JobListResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job\", query);\n const response = await this.connector.get<StandardResponse<JobListResponse>>(url);\n return response as unknown as ResponseDto<JobListResponse>;\n });\n }\n\n public async getStats(query: GetStatsQuery = {}): Promise<ResponseDto<JobStatsResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job/stats\", query);\n const response = await this.connector.get<StandardResponse<JobStatsResponse>>(url);\n return response as unknown as ResponseDto<JobStatsResponse>;\n });\n }\n\n public async getById(id: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async delete(id: string): Promise<ResponseDto<{ message: string }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ message: string }>>(`/v1/job/${id}`);\n return response as unknown as ResponseDto<{ message: string }>;\n });\n }\n\n public async confirmTx(id: string, dto: ConfirmTxDto): Promise<ResponseDto<JobResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<JobResponse>>(`/v1/job/${id}/confirm-tx`, dto);\n return response as unknown as ResponseDto<JobResponse>;\n });\n }\n\n public async getInvites(id: string): Promise<ResponseDto<JobInviteResponse[]>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<JobInviteResponse[]>>(`/v1/job/${id}/invites`);\n return response as unknown as ResponseDto<JobInviteResponse[]>;\n });\n }\n\n public async inviteTalent(id: string, dto: InviteTalentDto): Promise<ResponseDto<JobResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<JobResponse>>(`/v1/job/${id}/invite`, dto);\n return response as unknown as ResponseDto<JobResponse>;\n });\n }\n\n public async acceptInvite(id: string, inviteId: string): Promise<ResponseDto<{ job: JobResponse; acceptPayload: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; acceptPayload: any }>>(`/v1/job/${id}/invite/${inviteId}/accept`);\n return response as unknown as ResponseDto<{ job: JobResponse; acceptPayload: any }>;\n });\n }\n\n public async declineInvite(id: string, inviteId: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}/invite/${inviteId}/decline`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async cancelInvite(id: string, inviteeId: string): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}/invite/${inviteeId}`);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async getEscrowStatus(id: string): Promise<ResponseDto<{ job: JobResponse; onChain: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ job: JobResponse; onChain: any }>>(`/v1/job/${id}/escrow/status`);\n return response as unknown as ResponseDto<{ job: JobResponse; onChain: any }>;\n });\n }\n\n public async prepareUpdate(id: string, dto: PrepareUpdateDto): Promise<ResponseDto<{ job: JobResponse; txPayload: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; txPayload: any }>>(`/v1/job/${id}/escrow/update`, dto);\n return response as unknown as ResponseDto<{ job: JobResponse; txPayload: any }>;\n });\n }\n\n public async createDeliverables(id: string, dto: CreateDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(`/v1/job/${id}/deliverables`, dto);\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async replaceDeliverables(id: string, dto: CreateDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.put<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(`/v1/job/${id}/deliverables`, dto);\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async toggleDeliverableProgress(\n id: string,\n deliverableId: string,\n dto: ToggleDeliverableProgressDto\n ): Promise<ResponseDto<{ deliverable: JobDeliverableResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ deliverable: JobDeliverableResponse }>>(\n `/v1/job/${id}/deliverables/${deliverableId}`,\n dto\n );\n return response as unknown as ResponseDto<{ deliverable: JobDeliverableResponse }>;\n });\n }\n\n public async bulkResetDeliverables(id: string, dto: BulkResetDeliverablesDto): Promise<ResponseDto<{ deliverables: JobDeliverableResponse[] }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ deliverables: JobDeliverableResponse[] }>>(\n `/v1/job/${id}/deliverables/bulk`,\n dto\n );\n return response as unknown as ResponseDto<{ deliverables: JobDeliverableResponse[] }>;\n });\n }\n\n public async update(id: string, dto: UpdateJobDto): Promise<ResponseDto<{ job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.patch<StandardResponse<{ job: JobResponse }>>(`/v1/job/${id}`, dto);\n return response as unknown as ResponseDto<{ job: JobResponse }>;\n });\n }\n\n public async listAllInvites(query: ListAllInvitesQuery = {}): Promise<ResponseDto<JobInviteResponse[]>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(\"/v1/job/invites\", query);\n const response = await this.connector.get<StandardResponse<JobInviteResponse[]>>(url);\n return response as unknown as ResponseDto<JobInviteResponse[]>;\n });\n }\n\n public async makeDeposit(id: string, talentId?: string): Promise<ResponseDto<MakeDepositResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(`/v1/job/${id}/make-deposit`, { talentId });\n const response = await this.connector.get<StandardResponse<MakeDepositResponse>>(url);\n return response as unknown as ResponseDto<MakeDepositResponse>;\n });\n }\n\n public async validatePayment(id: string): Promise<ResponseDto<{ job: JobResponse; onChain: any }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; onChain: any }>>(`/v1/job/${id}/payment/validate`);\n return response as unknown as ResponseDto<{ job: JobResponse; onChain: any }>;\n });\n }\n\n public async apply(id: string, dto: ApplyJobDto): Promise<ResponseDto<{ application: ApplicationResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse }>>(`/v1/job/${id}/apply`, dto);\n return response as unknown as ResponseDto<{ application: ApplicationResponse }>;\n });\n }\n\n public async withdrawApplication(id: string): Promise<ResponseDto<{ message: string }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.delete<StandardResponse<{ message: string }>>(`/v1/job/${id}/apply`);\n return response as unknown as ResponseDto<{ message: string }>;\n });\n }\n\n public async listApplications(id: string, query: ListApplicationsQuery = {}): Promise<ResponseDto<ApplicationListResponse>> {\n return ErrorUtils.newTryFail(async () => {\n const url = parseUrlWithQuery(`/v1/job/${id}/applications`, query);\n const response = await this.connector.get<StandardResponse<ApplicationListResponse>>(url);\n return response as unknown as ResponseDto<ApplicationListResponse>;\n });\n }\n\n public async acceptApplication(id: string, appId: string): Promise<ResponseDto<{ application: ApplicationResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse; job: JobResponse }>>(\n `/v1/job/${id}/applications/${appId}/accept`\n );\n return response as unknown as ResponseDto<{ application: ApplicationResponse; job: JobResponse }>;\n });\n }\n\n public async rejectApplication(id: string, appId: string): Promise<ResponseDto<{ application: ApplicationResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ application: ApplicationResponse }>>(\n `/v1/job/${id}/applications/${appId}/reject`\n );\n return response as unknown as ResponseDto<{ application: ApplicationResponse }>;\n });\n }\n\n public async requestCancel(id: string, dto: CancelJobDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse }>>(`/v1/job/${id}/cancel`, dto);\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse }>;\n });\n }\n\n public async acceptCancel(id: string, dto?: ResolveCancelDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse; job: JobResponse }>>(\n `/v1/job/${id}/cancel/accept`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>;\n });\n }\n\n public async declineCancel(id: string, dto?: ResolveCancelDto): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ cancelRequest: CancelRequestResponse; job: JobResponse }>>(\n `/v1/job/${id}/cancel/decline`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse; job: JobResponse }>;\n });\n }\n\n public async getCancelRequest(id: string): Promise<ResponseDto<{ cancelRequest: CancelRequestResponse | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ cancelRequest: CancelRequestResponse | null }>>(`/v1/job/${id}/cancel`);\n return response as unknown as ResponseDto<{ cancelRequest: CancelRequestResponse | null }>;\n });\n }\n\n public async requestReviewChange(id: string, dto: ReviewChangeDto): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change`, dto);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async acceptReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change/accept`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async declineReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ changeRequest: ChangeRequestResponse }>>(`/v1/job/${id}/review-change/decline`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse }>;\n });\n }\n\n public async getReviewChange(id: string): Promise<ResponseDto<{ changeRequest: ChangeRequestResponse | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.get<StandardResponse<{ changeRequest: ChangeRequestResponse | null }>>(`/v1/job/${id}/review-change`);\n return response as unknown as ResponseDto<{ changeRequest: ChangeRequestResponse | null }>;\n });\n }\n\n public async completeJob(id: string, dto?: CompleteJobDto): Promise<ResponseDto<{ job: JobResponse; markReadyTxHash: string | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ job: JobResponse; markReadyTxHash: string | null }>>(\n `/v1/job/${id}/complete`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ job: JobResponse; markReadyTxHash: string | null }>;\n });\n }\n\n public async releasePayment(id: string, dto?: ReleaseJobPaymentDto): Promise<ResponseDto<{ escrowReleaseTxHash: string | null }>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<{ escrowReleaseTxHash: string | null }>>(\n `/v1/job/${id}/release`,\n dto ?? {}\n );\n return response as unknown as ResponseDto<{ escrowReleaseTxHash: string | null }>;\n });\n }\n\n public async submitReview(id: string, dto: JobReviewDto): Promise<ResponseDto<any>> {\n return ErrorUtils.newTryFail(async () => {\n const response = await this.connector.post<StandardResponse<any>>(`/v1/job/${id}/review`, dto);\n return response as unknown as ResponseDto<any>;\n });\n }\n}\n"],"mappings":"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","names":["Container","Service","axios","SDKError","Error","message","code","details","name","_SDKError","Connector","baseURL","client","axios","create","headers","setHeader","key","value","defaults","common","removeHeader","handleResponse","response","_a","_b","_c","data","success","SDKError","error","message","code","details","handleError","isAxiosError","get","url","config","post","put","patch","delete","_Connector","Container","Service","defaultOptions","delayFirstAttempt","jitter","maxDelay","Infinity","numOfAttempts","retry","startingDelay","timeMultiple","getSanitizedOptions","options","sanitized","__spreadValues","fullJitter","delay","jitteredDelay","Math","random","round","noJitter","delay","JitterFactory","options","jitter","fullJitter","noJitter","Delay","options","attempt","apply","Promise","resolve","setTimeout","jitteredDelay","setAttemptNumber","JitterFactory","delay","constant","startingDelay","base","timeMultiple","power","numOfDelayedAttempts","Math","pow","min","maxDelay","_Delay","SkipFirstDelay","Delay","apply","isFirstAttempt","attempt","numOfDelayedAttempts","_SkipFirstDelay","AlwaysDelay","Delay","_AlwaysDelay","DelayFactory","options","attempt","delay","initDelayClass","setAttemptNumber","delayFirstAttempt","AlwaysDelay","SkipFirstDelay","backOff","request","options","sanitizedOptions","getSanitizedOptions","BackOff","execute","_a","attemptNumber","attemptLimitReached","applyDelay","e","retry","Error","numOfAttempts","DelayFactory","apply","Status","ErrorUtils","newTryFail","f","data","backOff","startingDelay","timeMultiple","numOfAttempts","maxDelay","delayFirstAttempt","__spreadValues","e","parseErr","toErrorWithMessage","status","message","code","formatErrorMsg","replace","maybeError","_a","error","JSON","parse","Array","length","map","errorCode","_","isErrorWithMessage","stringify","String","parseUrlWithQuery","__name","url","filter","querys","objectKeys","Object","keys","key","i","$and","undefined","EscrowService","id","connector","Container","of","get","Connector","create","data","ErrorUtils","newTryFail","post","getStatus","chainId","escrowAddress","fetchUrl","parseUrlWithQuery","escrow","updateStatus","release","payload","__spreadValues","getChains","getAssets","_EscrowService","factory","transient","Container","Service","Wallet","AuthService","id","connector","Container","of","get","Connector","register","data","ErrorUtils","newTryFail","post","nonce","verify","paktWeb3Login","privateKey","wallet","Wallet","address","message","tempToken","challengeToken","_paktWeb3Request","signedMessage","signMessage","validateResult","_paktWeb3Validate","token","Error","_paktWeb3Onboard","msg2","challengeToken2","signedMessage2","finalResult","generateWallet","createRandom","account","raw","d","token_type","expiresIn","isVerified","timeZone","firstName","lastName","email","toLowerCase","_AuthService","factory","transient","io","MessagingService","messagingUrl","token","socket","connect","Promise","resolve","reject","io","transports","auth","authorization","once","emit","onBroadcast","handler","_a","on","onUserStatus","onJobInvite","sendMessage","payload","setTyping","conversationId","typing","event","loadConversations","_b","data","messages","createDirectConversation","recipientId","type","error","Error","message","conversation","createGroupConversation","recipientIds","name","recipients","map","id","user","role","fetchConversation","markSeen","seen","Date","now","toString","disconnect","connected","_MessagingService","Container","Service","JobService","id","connector","Container","of","get","Connector","create","dto","ErrorUtils","newTryFail","post","list","query","url","parseUrlWithQuery","getStats","getById","delete","confirmTx","getInvites","inviteTalent","acceptInvite","inviteId","declineInvite","cancelInvite","inviteeId","getEscrowStatus","prepareUpdate","createDeliverables","replaceDeliverables","put","toggleDeliverableProgress","deliverableId","patch","bulkResetDeliverables","update","listAllInvites","makeDeposit","talentId","validatePayment","apply","withdrawApplication","listApplications","acceptApplication","appId","rejectApplication","requestCancel","acceptCancel","declineCancel","getCancelRequest","requestReviewChange","acceptReviewChange","declineReviewChange","getReviewChange","completeJob","releasePayment","submitReview","_JobService","factory","data","transient","BASE_URLS","production","development","PsiloSDK","id","auth","escrow","connector","messaging","job","Container","of","get","Connector","AuthService","EscrowService","MessagingService","JobService","init","config","resolvedUrl","baseUrl","verbose","console","log","generateRandomString","set","messagingUrl","token","setAuthorizationHeader","setHeader","characters","result","i","charAt","Math","floor","random","length","_PsiloSDK","transient"]}
|
package/package.json
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pakt/psilo",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "SDK for interacting with Pakt Psilo Escrow Contracts via MCP",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist/main.js",
|
|
7
|
-
"./dist/main.
|
|
7
|
+
"./dist/main.js.map",
|
|
8
|
+
"./dist/main.mjs",
|
|
9
|
+
"./dist/main.mjs.map",
|
|
10
|
+
"./dist/main.d.ts",
|
|
11
|
+
"./dist/main.d.mts"
|
|
8
12
|
],
|
|
9
13
|
"exports": {
|
|
10
|
-
".":
|
|
11
|
-
|
|
14
|
+
".": {
|
|
15
|
+
"import": {
|
|
16
|
+
"types": "./dist/main.d.mts",
|
|
17
|
+
"default": "./dist/main.mjs"
|
|
18
|
+
},
|
|
19
|
+
"require": {
|
|
20
|
+
"types": "./dist/main.d.ts",
|
|
21
|
+
"default": "./dist/main.js"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
12
24
|
},
|
|
13
25
|
"main": "./dist/main.js",
|
|
26
|
+
"module": "./dist/main.mjs",
|
|
14
27
|
"types": "./dist/main.d.ts",
|
|
15
28
|
"scripts": {
|
|
16
29
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -49,7 +62,9 @@
|
|
|
49
62
|
"dependencies": {
|
|
50
63
|
"axios": "^1.11.0",
|
|
51
64
|
"crypto-js": "^4.1.1",
|
|
65
|
+
"ethers": "^6.16.0",
|
|
52
66
|
"reflect-metadata": "^0.1.13",
|
|
67
|
+
"socket.io-client": "^4.8.3",
|
|
53
68
|
"typedi": "^0.10.0"
|
|
54
69
|
}
|
|
55
70
|
}
|