55 lines
1.3 KiB
JavaScript
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();
|
|
}
|