UNPKG

@m-ld/gateway

Version:

m-ld gateway for services

88 lines 6.79 kB
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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