UNPKG

node-apk

Version:

A library to parse Android application manifest and signature

67 lines (66 loc) 2.88 kB
"use strict"; /* * Copyright (c) 2021 XdevL. All rights reserved. * * This work is licensed under the terms of the MIT license. * For a copy, see <https://opensource.org/licenses/MIT>. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = __importDefault(require("fs")); var android_1 = require("./android"); var certificate_1 = __importDefault(require("./certificate")); var resources_1 = require("./resources"); var source_1 = __importDefault(require("./source")); var xml_1 = __importDefault(require("./xml")); var zip_1 = require("./zip"); var Apk = /** @class */ (function () { function Apk(input) { if (typeof input === "string") { this.loader = function () { return fs_1.default.promises.readFile(input); }; } else { this.loader = function () { return Promise.resolve(input); }; } } Apk.prototype.getCertificateInfo = function () { var _this = this; return zip_1.ZipEntry.index(this.loader).then(function (map) { return Promise.all(Array.from(map.values()) .filter(function (entry) { return entry.name.startsWith("META-INF/") && entry.name.endsWith(".RSA"); }) .map(function (certEntry) { return _this.bufferize(certEntry.stream()).then(function (buffer) { return certificate_1.default.fromPkcs7(buffer); }); })).then(function (certs) { var _a; return (_a = []).concat.apply(_a, certs); }); }); }; Apk.prototype.getManifestInfo = function () { return this.extract("AndroidManifest.xml") .then(function (buffer) { return new android_1.Manifest(new xml_1.default(new source_1.default(buffer))); }); }; Apk.prototype.getResources = function () { return this.extract("resources.arsc") .then(function (buffer) { return new resources_1.Resources(new source_1.default(buffer)); }); }; Apk.prototype.extract = function (key) { var _this = this; return zip_1.ZipEntry.lookup(this.loader, key) .then(function (entry) { return entry.stream(); }) .then(function (stream) { return _this.bufferize(stream); }); }; Apk.prototype.close = function () { return undefined; }; Apk.prototype.bufferize = function (stream) { return new Promise(function (resolve, reject) { var buffers = []; stream.on("data", function (buffer) { return buffers.push(buffer); }); stream.on("end", function () { return resolve(Buffer.concat(buffers)); }); stream.on("error", function (error) { return reject(error); }); }); }; return Apk; }()); exports.default = Apk;