@skyway-sdk/token
Version: 
The official Next Generation JavaScript SDK for SkyWay
132 lines • 4.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SkyWayAuthToken = void 0;
const common_1 = require("@skyway-sdk/common");
const jsrsasign_1 = __importDefault(require("jsrsasign"));
const jwt_decode_1 = __importDefault(require("jwt-decode"));
const zod_1 = require("zod");
// import { fromZodError } from 'zod-validation-error'; // 下記にかいてある理由によりコメントアウト
const _1 = require(".");
const log = new common_1.Logger('packages/token/src/encoder.ts');
class SkyWayAuthToken {
    constructor(props) {
        let parsedProps;
        try {
            parsedProps = _1.AuthTokenSchema.parse(props);
        }
        catch (error) {
            if (error instanceof zod_1.z.ZodError) {
                // TODO: zod-validation-errorを利用するとkarmaでエラーが発生するため,今後エラーメッセージ生成の対応をする
                /**
                const validationError = fromZodError(error);
                throw new SkyWayError({
                  path: log.prefix,
                  info: {
                    ...tokenErrors.invalidParameter,
                    detail: validationError.toString(), // detailをzodでのvalidationエラーに変更
                  },
                  error: validationError,
                });
                */
                throw new common_1.SkyWayError({
                    path: log.prefix,
                    info: _1.tokenErrors.invalidParameter,
                    error: new Error('Received invalid token. Please check your SkyWayAuthToken.'),
                });
            }
            else {
                throw new common_1.SkyWayError({
                    path: log.prefix,
                    info: _1.tokenErrors.invalidParameter,
                    error: new Error('Received invalid token. Please check your SkyWayAuthToken.'),
                });
            }
        }
        Object.assign(this, parsedProps);
    }
    static Decode(token) {
        try {
            const props = (0, jwt_decode_1.default)(token);
            const authToken = new SkyWayAuthToken(props);
            authToken.tokenString = token;
            return authToken;
        }
        catch (error) {
            throw new common_1.SkyWayError({
                path: log.prefix,
                info: _1.tokenErrors.invalidParameter,
                error,
            });
        }
    }
    encode(secret) {
        const payload = {
            jti: this.jti,
            iat: this.iat,
            exp: this.exp,
            scope: this.scope,
            version: this.version,
        };
        this.tokenString = jsrsasign_1.default.KJUR.jws.JWS.sign('HS256', JSON.stringify({ alg: 'HS256', typ: 'JWT' }), JSON.stringify(payload), secret);
        return this.tokenString;
    }
    /**@internal */
    toJSON() {
        return {
            jti: this.jti,
            iat: this.iat,
            exp: this.exp,
            scope: this.scope,
            encoded: this.tokenString,
            version: this.version,
        };
    }
    /**@internal */
    getAppId() {
        switch (this.version) {
            case undefined:
            case 1:
            case 2: {
                const scope = this.scope;
                return scope.app.id;
            }
            case 3: {
                const scope = this.scope;
                return scope.appId;
            }
            default:
                throw new common_1.SkyWayError({
                    path: log.prefix,
                    info: _1.tokenErrors.invalidParameter,
                    error: new Error(`invalid token version: version ${this.version} is not supported.`),
                });
        }
    }
    /**@internal */
    getAnalyticsEnabled() {
        var _a, _b, _c;
        switch (this.version) {
            case undefined:
            case 1:
            case 2: {
                const scope = this.scope;
                return (_a = scope.app.analytics) !== null && _a !== void 0 ? _a : false;
            }
            case 3: {
                const scope = this.scope;
                return (_c = (_b = scope.analytics) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true;
            }
            default:
                throw new common_1.SkyWayError({
                    path: log.prefix,
                    info: _1.tokenErrors.invalidParameter,
                    error: new Error(`invalid token version: version ${this.version} is not supported.`),
                });
        }
    }
}
exports.SkyWayAuthToken = SkyWayAuthToken;
//# sourceMappingURL=encoder.js.map