@m-ld/gateway
Version:
m-ld gateway for services
72 lines • 6.11 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 { EndPoint, post, put, sendChunked, use } from './EndPoint.js';
import { Authorization } from '../server/index.js';
import { as, validate } from '../lib/index.js';
import { BadRequestError, NotFoundError } from './errors.js';
import { consume } from 'rx-flowable/consume';
import { Readable } from 'stream';
export class SubdomainEndPoint extends EndPoint {
constructor(outer) {
super(outer, '/domain/:account/:name');
}
get gateway() {
return this.outer.gateway;
}
bindSubdomainId(req) {
try {
req.set('id', this.gateway.ownedId(req.params).validate());
}
catch (e) {
// ownedId throws strings
throw new BadRequestError('Bad domain %s', req.params);
}
}
async bindAuthorisedWho(req) {
const auth = Authorization.fromRequest(req);
req.set('who', await auth.verifyUser(this.gateway, {
id: req.get('id'), forWrite: req.isUpload() ? 'Subdomain' : undefined
}));
}
async putSubdomain(req, res) {
const { useSignatures } = validate(req.body ?? {}, as.object({
useSignatures: as.boolean().optional()
}));
const { account, name } = req.get('id');
res.json(await this.gateway.subdomainConfig({
useSignatures, account, name
}, 'any', req.get('who')));
}
async pollUpdates(req, res) {
const sd = await this.gateway.getSubdomain(req.get('id'));
if (sd == null)
throw new NotFoundError;
res.setHeader('ETag', this.etag(sd));
res.setHeader('Location', this.lockUrl(req));
await sendChunked(res, consume(Readable.from(sd.poll())), 201);
}
lockUrl(req) {
const id = req.get('id');
return `/domain/${id.account}/${id.name}/state?lock`;
}
etag(sd) {
return `"${sd.tick}"`;
}
}
__decorate([
use
], SubdomainEndPoint.prototype, "bindSubdomainId", null);
__decorate([
use
], SubdomainEndPoint.prototype, "bindAuthorisedWho", null);
__decorate([
put
], SubdomainEndPoint.prototype, "putSubdomain", null);
__decorate([
post('/poll')
], SubdomainEndPoint.prototype, "pollUpdates", null);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZG9tYWluRW5kUG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9TdWJkb21haW5FbmRQb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFjLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsYUFBYSxFQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFRbEMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFFBQXFCO0lBQzFELFlBQVksS0FBa0I7UUFDNUIsS0FBSyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFHRCxlQUFlLENBQUMsR0FBcUI7UUFDbkMsSUFBSTtZQUNGLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzVEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVix5QkFBeUI7WUFDekIsTUFBTSxJQUFJLGVBQWUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLGlC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