import { control, bucket, token } from './stores.js'; let control_value; control.subscribe(value => { control_value = value; }); let bucket_value; bucket.subscribe(value => { bucket_value = value; }); let token_value; token.subscribe(value => { token_value = value; }); class RequestError extends Error { constructor(res) { super(`Request returned status ${res.status} ${res.statusText}`); this.res = res; } } export async function fetcher(request) { const resp = await fetch(request); if (resp.status != 200) { throw new RequestError(resp); } return resp; } export function request(method, resource, body=null) { const sign = new URL(control_value + '/sign'); sign.searchParams.append('bucket', bucket_value); sign.searchParams.append('token', token_value); sign.searchParams.append('resource', resource); const req = new Request(sign.href, { method, body, }); return req; } export function listPhotos(maxKeys=1000, startAfter='') { const prefix = "photo/"; const params = new URLSearchParams(); params.set("list-type", "2"); params.set("metadata", "true"); params.set("encoding-type", "url"); params.set("prefix", prefix); params.set("delimiter", ""); params.set("max-keys", maxKeys); params.set("start-after", startAfter); return '?' + params.toString(); }