UNPKG

@controlplane/cli

Version:

Control Plane Corporation CLI

49 lines 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.safeCplnName = exports.parseSaToken = exports.nextName = void 0; const base64url_1 = require("base64url"); const crypto = require("crypto"); const base32Encode = require('base32-encode'); function nextName(prefix, length) { if (!length || length < 8) { length = 8; } if (prefix === undefined) { const first = 'xbgjkmqacpez'; prefix = first[Math.floor(Math.random() * Math.floor(first.length))]; length -= 1; } const buf = crypto.randomBytes(length); return prefix + base32Encode(buf, 'Crockford').toLowerCase().substring(0, length); } exports.nextName = nextName; function parseSaToken(s) { if (!s) { return null; } if (s.startsWith('s')) { // maybe a service account let key = base64url_1.default.decode(s.split('.')[1] || ''); let parts = key.split('.'); if (parts.length != 3) { return null; } return { org: parts[0], name: parts[1], }; } return null; } exports.parseSaToken = parseSaToken; function safeCplnName(maxLength, ...components) { var buf = crypto.createHash('sha1').update(components.join('-')).digest(); if (maxLength < 13) { throw new Error(`maxLength must be >= 13`); } const maxHash = 8; const hash = base32Encode(buf, 'Crockford').substring(0, maxHash).toLowerCase(); return components.join('-').substring(0, maxLength - maxHash - 1) + '-' + hash; } exports.safeCplnName = safeCplnName; //# sourceMappingURL=names.js.map