const SITE='https://teahub.xyz/tea/site'; function endpoint(path){ if(path==='session')return SITE+'/session'; if(path==='repositories')return SITE+'/repositories'; return SITE+'/chat/persimmons/'+path; } async function request(path,body){ const options={credentials:'include',cache:'no-store',headers:{Accept:'application/json'}}; if(body!==undefined){ options.method='POST'; options.headers['Content-Type']='text/plain;charset=UTF-8'; options.body=JSON.stringify(body); } const response=await fetch(endpoint(path),options); let data={}; try{data=await response.json()}catch{} if(!response.ok){ const error=new Error(data.error||('Request failed ('+response.status+')')); error.status=response.status; throw error; } return data; } export const session=()=>request('session'); export const repositories=()=>request('repositories'); export const listUser=()=>request('list'); export const listRepository=repo=>request('list?repository='+encodeURIComponent(repo)); export function createConnection(metadata,value){ return request('create',{...metadata,credential:value}); } export function rotateConnection(item,value){ const vault={vault_kind:item.vault_kind||'user'}; if(vault.vault_kind==='repository')vault.repository=item.repository; return request('rotate',{id:item.id,credential:value,...vault}); } export function revokeConnection(item){ const vault={vault_kind:item.vault_kind||'user'}; if(vault.vault_kind==='repository')vault.repository=item.repository; return request('revoke',{id:item.id,...vault}); } export function deleteConnection(item){ const vault={vault_kind:item.vault_kind||'user'}; if(vault.vault_kind==='repository')vault.repository=item.repository; return request('delete',{id:item.id,...vault}); }