1
0
Fork 0
photos/web/manage/src/http.js

55 lines
1.3 KiB
JavaScript

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();
}