@m-ld/gateway
Version:
m-ld gateway for services
88 lines • 6.79 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { del, EndPoint, get, post, sendChunked, use } from './EndPoint.js';
import { MethodNotAllowedError, NotFoundError, PreconditionFailedError } from './errors.js';
export class SubdomainStateEndPoint extends EndPoint {
constructor(outer) {
super(outer, '/state');
}
async bindSubdomain(req) {
const sdc = await this.outer.gateway.getSubdomain(req.get('id'));
if (sdc == null)
throw new NotFoundError;
req.set('subdomain', sdc);
}
checkETagMatches(req) {
const mustMatch = req.header('if-match');
if (mustMatch) {
const etag = this.outer.etag(req.get('subdomain'));
if (mustMatch !== etag)
throw new PreconditionFailedError('if-match "%s" did not match etag "%s"', mustMatch, etag);
}
}
async getState(req, res) {
const sd = req.get('subdomain');
res.setHeader('ETag', this.outer.etag(sd));
if ('query' in req.params || 'q' in req.params) {
const query = JSON.parse(req.params.query || req.params.q);
await sendChunked(res, sd.state.read(query).consume);
}
else if ('lock' in req.params) {
res.send(sd.locked);
}
else {
throw new MethodNotAllowedError;
}
}
async setState(req, res) {
const sd = req.get('subdomain');
const wasLocked = sd.locked;
await sd.write(req.body);
res.setHeader('ETag', this.outer.etag(sd));
if ('lock' in req.params) {
res.setHeader('Location', this.outer.lockUrl(req));
res.send(201);
}
else {
if (!wasLocked) // SubdomainClone always locks on write
await sd.unlock();
res.send(200);
}
}
async deleteState(req, res) {
// Cannot delete the state generally, but can delete a lock
if ('lock' in req.params) {
const sd = req.get('subdomain');
if (sd.locked) {
await sd.unlock();
res.send(200);
}
else {
throw new NotFoundError;
}
}
else {
throw new MethodNotAllowedError;
}
}
}
__decorate([
use
], SubdomainStateEndPoint.prototype, "bindSubdomain", null);
__decorate([
use
], SubdomainStateEndPoint.prototype, "checkETagMatches", null);
__decorate([
get
], SubdomainStateEndPoint.prototype, "getState", null);
__decorate([
post
], SubdomainStateEndPoint.prototype, "setState", null);
__decorate([
del
], SubdomainStateEndPoint.prototype, "deleteState", null);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZG9tYWluU3RhdGVFbmRQb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL1N1YmRvbWFpblN0YXRlRW5kUG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNNUYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFFBQTJCO0lBQ3JFLFlBQVksS0FBd0I7UUFDbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQTBCO1FBQzVDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLEdBQUcsSUFBSSxJQUFJO1lBQ2IsTUFBTSxJQUFJLGFBQWEsQ0FBQztRQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsR0FBMEI7UUFDekMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLFNBQVMsS0FBSyxJQUFJO2dCQUNwQixNQUFNLElBQUksdUJBQXVC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