UNPKG

@m-ld/gateway

Version:

m-ld gateway for services

48 lines 4.76 kB
import { fetchJson as defaultFetchJson } from '@m-ld/io-web-runtime/dist/server/fetch'; import { AuthKey } from '../lib/index.js'; import { as, validate } from '../lib/validate.js'; export class AblyKeyStore { constructor(cfg, fetchJson = defaultFetchJson) { const config = validate(cfg, as.object({ ably: as.object({ apiKey: as.string().required() }).required() }).unknown()); const [appId] = config.auth.key.split('.'); this.fetchJson = ((path, params, options) => fetchJson(`https://control.ably.net/v1/apps/${appId}/${path}`, params, { headers: { Authorization: `Bearer ${config.ably.apiKey}` }, ...options })); this.domainName = config['@domain']; } /** * @see https://ably.com/docs/api/control-api#tag/keys/paths/~1apps~1{app_id}~1keys/post */ async mintKey(name) { return this.ablyToAuthDetail(await this.fetchJson('keys', {}, { method: 'POST', body: JSON.stringify({ name, capability: this.keyCapability() }) })); } /** * Note: this call works even if both name and capability are missing; and can * therefore be used to check if a keyid exists * * @see https://ably.com/docs/api/control-api#tag/keys/paths/~1apps~1{app_id}~1keys/post */ async pingKey(keyid, getAuthorisedTsIds) { return this.ablyToAuthDetail(await this.fetchJson(`keys/${keyid}`, {}, { method: 'PATCH', body: JSON.stringify({ capability: this.keyCapability(...await getAuthorisedTsIds()) }) })); } ablyToAuthDetail({ key, name, status }) { return { key: AuthKey.fromString(key), name, revoked: status === 1 }; } keyCapability(...tsIds) { return Object.assign({ // Ably keys must have a capability. Assign a notification channels as a minimum. [`${this.domainName}:notify`]: ['subscribe'] }, ...tsIds.map(tsId => ({ [`${tsId.toDomain()}:*`]: ['publish', 'subscribe', 'presence'] }))); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJseUtleVN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FibHkvQWJseUtleVN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLElBQUksZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RixPQUFPLEVBQWtCLE9BQU8sRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBWWxELE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQVksR0FBa0IsRUFBRSxTQUFTLEdBQUcsZ0JBQWdCO1FBQzFELE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDeEQsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7U0FDL0QsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQ3BELG9DQUFvQyxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFO1lBQzNELE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU87U0FDdkUsQ0FBQyxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7U0FDakYsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQWEsRUFBRSxrQkFBc0M7UUFDakUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ3JFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO2FBQzlELENBQUM7U0FDSCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUVuQztRQUNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUcsS0FBdUI7UUFDdEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLGlGQUFpRjtZQUNqRixDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDN0MsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUM7U0FDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiJ9