codekingpro/portable-devtools
114k
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.Signed = exports.MetadataKind = void 0;
7exports.isMetadataKind = isMetadataKind;
8const util_1 = __importDefault(require("util"));
9const error_1 = require("./error");
10const utils_1 = require("./utils");
11const SPECIFICATION_VERSION = ['1', '0', '31'];
12var MetadataKind;
13(function (MetadataKind) {
14 MetadataKind["Root"] = "root";
15 MetadataKind["Timestamp"] = "timestamp";
16 MetadataKind["Snapshot"] = "snapshot";
17 MetadataKind["Targets"] = "targets";
18})(MetadataKind || (exports.MetadataKind = MetadataKind = {}));
19function isMetadataKind(value) {
20 return (typeof value === 'string' &&
21 Object.values(MetadataKind).includes(value));
22}
23/***
24 * A base class for the signed part of TUF metadata.
25 *
26 * Objects with base class Signed are usually included in a ``Metadata`` object
27 * on the signed attribute. This class provides attributes and methods that
28 * are common for all TUF metadata types (roles).
29 */
30class Signed {
31 specVersion;
32 expires;
33 version;
34 unrecognizedFields;
35 constructor(options) {
36 this.specVersion = options.specVersion || SPECIFICATION_VERSION.join('.');
37 const specList = this.specVersion.split('.');
38 if (!(specList.length === 2 || specList.length === 3) ||
39 !specList.every((item) => isNumeric(item))) {
40 throw new error_1.ValueError('Failed to parse specVersion');
41 }
42 // major version must match
43 if (specList[0] != SPECIFICATION_VERSION[0]) {
44 throw new error_1.ValueError('Unsupported specVersion');
45 }
46 this.expires = options.expires;
47 this.version = options.version;
48 this.unrecognizedFields = options.unrecognizedFields || {};
49 }
50 equals(other) {
51 if (!(other instanceof Signed)) {
52 return false;
53 }
54 return (this.specVersion === other.specVersion &&
55 this.expires === other.expires &&
56 this.version === other.version &&
57 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields));
58 }
59 isExpired(referenceTime) {
60 if (!referenceTime) {
61 referenceTime = new Date();
62 }
63 return referenceTime >= new Date(this.expires);
64 }
65 static commonFieldsFromJSON(data) {
66 const { spec_version, expires, version, ...rest } = data;
67 if (!utils_1.guard.isDefined(spec_version)) {
68 throw new error_1.ValueError('spec_version is not defined');
69 }
70 else if (typeof spec_version !== 'string') {
71 throw new TypeError('spec_version must be a string');
72 }
73 if (!utils_1.guard.isDefined(expires)) {
74 throw new error_1.ValueError('expires is not defined');
75 }
76 else if (!(typeof expires === 'string')) {
77 throw new TypeError('expires must be a string');
78 }
79 if (!utils_1.guard.isDefined(version)) {
80 throw new error_1.ValueError('version is not defined');
81 }
82 else if (!(typeof version === 'number')) {
83 throw new TypeError('version must be a number');
84 }
85 return {
86 specVersion: spec_version,
87 expires,
88 version,
89 unrecognizedFields: rest,
90 };
91 }
92}
93exports.Signed = Signed;
94function isNumeric(str) {
95 return !isNaN(Number(str));
96}
97 