49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
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});
|
|
}
|