@starbase/client
Version:
Starbase Channels Client
1 lines • 1.88 kB
JavaScript
;function Client(serverPath){const ParsePath=requestPath=>{let reqPath,parts=(reqPath=requestPath?requestPath.toString():"/").toString().replace(/\/\//g,"/").replace(/^\//,"").replace(/\/$/,"").replace(/\/\//g,"/").split("/"),channel="/"+parts.slice(0,-1).join("/"),key=parts.slice(-1)[0],slash="";return"/"!==channel&&(slash="/"),{path:channel+slash+key,channel:channel,key:key,slash:slash,dsPath:"!"+channel+"!"+key}};let token=null,tokenHandler=null;const request=req=>new Promise(async(resolve,reject)=>{tokenHandler&&"function"==typeof tokenHandler&&(token=await tokenHandler());let body={};body.path=req.path||null,body.method=req.method||null,body.data=req.data||null,body.token=req.token||token||null,fetch(serverPath,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(body)}).then(async response=>{let result=await response.json();return response.status>399?reject(result):resolve(result)}).catch(err=>reject({code:500,message:err.message||err.toString()||"Error!"}))}),setToken=newToken=>(token=newToken,!0),Channel=requestPath=>{let parsedPath=ParsePath(requestPath).path;return{channel:()=>parsedPath,setToken:token=>{setToken(token)},setTokenHandler:cb=>{(cb=>(tokenHandler=cb,!0))(cb)},request:req=>request({method:req.method||null,path:req.path||parsedPath,data:req.data||null,token:req.token||null}),put:data=>((path,data)=>request({method:"put",path:path,data:data}))(parsedPath,data),get:query=>((path,query)=>request({method:"get",path:path,data:query}))(parsedPath,query),del:()=>(path=>request({method:"del",path:path}))(parsedPath),list:query=>((path,data)=>request({method:"list",path:path,data:data}))(parsedPath,query),parse:(path=null)=>ParsePath((path||parsedPath).toString()),path:path=>{path||(path="/");let slash="";return"/"!==parsedPath&&(slash="/"),Channel(parsedPath+slash+path)}}};return Channel("/")}