{"version":3,"file":"encoder.mjs","names":[],"sources":["../../../src/common/msg/encoder.ts"],"sourcesContent":["import { decrypt, encrypt } from '../crypto'\nimport { ensureUint8Array, jsonToUint8Array, Uint8ArrayToJson } from '../data/bin'\n\nexport interface Encoder<T = any> {\n  encode: (data: T) => Promise<Uint8Array>\n  decode: (data: Uint8Array) => Promise<T>\n}\n\nexport class NoopEncoder<T> implements Encoder<T> {\n  async encode(data: any): Promise<Uint8Array> {\n    return data\n  }\n\n  async decode(data: Uint8Array): Promise<any> {\n    return data\n  }\n}\n\nexport class JsonEncoder<T> implements Encoder<T> {\n  async encode(data: any): Promise<Uint8Array> {\n    return jsonToUint8Array(data)\n  }\n\n  async decode(data: Uint8Array): Promise<any> {\n    return Uint8ArrayToJson(ensureUint8Array(data))\n  }\n}\n\nexport class CryptoEncoder<T> implements Encoder<T> {\n  key: CryptoKey\n\n  constructor(key: CryptoKey) {\n    this.key = key\n  }\n\n  async encode(data: any): Promise<Uint8Array> {\n    const plain = jsonToUint8Array(data)\n    return await encrypt(plain, this.key)\n  }\n\n  async decode(data: Uint8Array): Promise<any> {\n    const plain = await decrypt(ensureUint8Array(data), this.key)\n    return Uint8ArrayToJson(ensureUint8Array(plain))\n  }\n}\n"],"mappings":";;;;AAQA,IAAa,cAAb,MAAkD;CAChD,MAAM,OAAO,MAAgC;AAC3C,SAAO;;CAGT,MAAM,OAAO,MAAgC;AAC3C,SAAO;;;AAIX,IAAa,cAAb,MAAkD;CAChD,MAAM,OAAO,MAAgC;AAC3C,SAAO,iBAAiB,KAAK;;CAG/B,MAAM,OAAO,MAAgC;AAC3C,SAAO,iBAAiB,iBAAiB,KAAK,CAAC;;;AAInD,IAAa,gBAAb,MAAoD;CAClD;CAEA,YAAY,KAAgB;AAC1B,OAAK,MAAM;;CAGb,MAAM,OAAO,MAAgC;AAE3C,SAAO,MAAM,QADC,iBAAiB,KAAK,EACR,KAAK,IAAI;;CAGvC,MAAM,OAAO,MAAgC;AAE3C,SAAO,iBAAiB,iBADV,MAAM,QAAQ,iBAAiB,KAAK,EAAE,KAAK,IAAI,CACd,CAAC"}