/** * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2022 * @license Apache-2.0 */ import Operation from "../Operation.mjs"; import "reflect-metadata"; // Required as a shim for the amf library import { AMF0, AMF3 } from "@astronautlabs/amf"; /** * AMF Decode operation */ class AMFDecode extends Operation { /** * AMFDecode constructor */ constructor() { super(); this.name = "AMF Decode"; this.module = "Encodings"; this.description = "Action Message Format (AMF) is a binary format used to serialize object graphs such as ActionScript objects and XML, or send messages between an Adobe Flash client and a remote service, usually a Flash Media Server or third party alternatives."; this.infoURL = "https://wikipedia.org/wiki/Action_Message_Format"; this.inputType = "ArrayBuffer"; this.outputType = "JSON"; this.args = [ { name: "Format", type: "option", value: ["AMF0", "AMF3"], defaultIndex: 1 } ]; } /** * @param {ArrayBuffer} input * @param {Object[]} args * @returns {JSON} */ run(input, args) { const [format] = args; const handler = format === "AMF0" ? AMF0 : AMF3; const encoded = new Uint8Array(input); return handler.Value.deserialize(encoded); } } export default AMFDecode;