@skyway-sdk/token
Version:
The official Next Generation JavaScript SDK for SkyWay
78 lines • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.matchScopeIdentifier = exports.nowInSec = void 0;
const common_1 = require("@skyway-sdk/common");
const _1 = require(".");
const log = new common_1.Logger('packages/token/src/util.ts');
/**@private */
const nowInSec = () => Math.floor(Date.now() / 1000);
exports.nowInSec = nowInSec;
/**@internal */
function matchId(
// 指定されてない場合は `*` として扱う(何でもマッチする)
queryId = '*', id) {
if (queryId === '*') {
return true;
}
// queryId が指定されているにも関わらず、id がない場合は NG
if (id === undefined) {
return false;
}
return queryId === id;
}
/**@internal */
function matchName(tokenVersion,
// 指定されてない場合は `*` として扱う(何でもマッチする)
queryName = '*', name) {
if (queryName === '*') {
return true;
}
switch (tokenVersion) {
case 1:
// queryName が指定されているにも関わらず、name がない場合は NG
if (name === undefined) {
return false;
}
// 完全一致の場合マッチしていると判定する
return queryName === name;
case 2:
case 3:
// v2, 3 の場合、`*` を部分一致として解釈し、一致している場合マッチしていると判定する
return matchVersion2ScopeName(queryName, name);
default: {
// should never reach here
throw new common_1.SkyWayError({
path: log.prefix,
info: _1.tokenErrors.invalidParameter,
error: new Error(`invalid token version: version ${tokenVersion} is not supported.`),
});
}
}
}
/**@internal */
function matchVersion2ScopeName(query, name) {
const m = query.match(/\*/g);
if (m && m.length > 8) {
return false;
}
// nameがundefinedの場合は、tokenName文字列が*でのみ構成されている場合のみtrue
if (name === undefined) {
if (query.match(/^\**$/)) {
return true;
}
return false;
}
const replacedName = query
.replace(/\./g, '\\.') // 「.」をエスケープ
.replace(/\*/g, '.*') // *を「.*」に置換
.replace(/\\\.\*/g, '\\*'); // 「\.*」を「\*」に置換
const regex = new RegExp(`^${replacedName}$`);
return regex.test(name);
}
/**@internal */
function matchScopeIdentifier(query, channelIdentifier, tokenVersion) {
return (matchId(channelIdentifier.id, query.id) &&
matchName(tokenVersion, channelIdentifier.name, query.name));
}
exports.matchScopeIdentifier = matchScopeIdentifier;
//# sourceMappingURL=util.js.map