{"version":3,"file":"old.cjs","sources":["../../../../../../../src/mods/tor/binary/cells/old.ts"],"sourcesContent":["import { Opaque, Readable, Writable } from \"@hazae41/binary\";\nimport { Cursor } from \"@hazae41/cursor\";\nimport { SecretCircuit } from \"mods/tor/circuit.js\";\nimport { SecretTorClientDuplex } from \"mods/tor/client.js\";\nimport { ExpectedCircuitError, InvalidCommandError, UnexpectedCircuitError } from \"./errors.js\";\n\nexport interface OldCellable {\n  readonly old: true\n  readonly circuit: boolean,\n  readonly command: number\n}\n\nexport namespace OldCellable {\n\n  export interface Circuitful {\n    readonly old: true\n    readonly circuit: true,\n    readonly command: number\n  }\n\n  export interface Circuitless {\n    readonly old: true\n    readonly circuit: false,\n    readonly command: number\n  }\n\n}\n\nexport type OldCell<T extends Writable> =\n  | OldCell.Circuitful<T>\n  | OldCell.Circuitless<T>\n\nexport namespace OldCell {\n\n  export type PAYLOAD_LEN = 509\n  export const PAYLOAD_LEN = 509\n\n  export class Raw<T extends Writable> {\n\n    constructor(\n      readonly circuit: number,\n      readonly command: number,\n      readonly fragment: T\n    ) { }\n\n    unpackOrNull(tor: SecretTorClientDuplex) {\n      if (this.circuit === 0)\n        return new Circuitless(undefined, this.command, this.fragment)\n\n      const circuit = tor.circuits.inner.get(this.circuit)\n\n      if (circuit == null)\n        return undefined\n\n      return new Circuitful(circuit, this.command, this.fragment)\n    }\n\n    sizeOrThrow() {\n      return this.command === 7\n        ? 2 + 1 + 2 + this.fragment.sizeOrThrow()\n        : 2 + 1 + PAYLOAD_LEN;\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      if (this.command === 7) {\n        cursor.writeUint16OrThrow(this.circuit)\n        cursor.writeUint8OrThrow(this.command)\n\n        const size = this.fragment.sizeOrThrow()\n        cursor.writeUint16OrThrow(size)\n\n        this.fragment.writeOrThrow(cursor)\n\n        return\n      }\n\n      cursor.writeUint16OrThrow(this.circuit)\n      cursor.writeUint8OrThrow(this.command)\n\n      const payload = cursor.readOrThrow(PAYLOAD_LEN)\n      const subcursor = new Cursor(payload)\n\n      this.fragment.writeOrThrow(subcursor)\n\n      subcursor.fillOrThrow(0, subcursor.remaining)\n    }\n\n    static readOrThrow(cursor: Cursor) {\n      const circuit = cursor.readUint16OrThrow()\n      const command = cursor.readUint8OrThrow()\n\n      if (command === 7) {\n        const length = cursor.readUint16OrThrow()\n        const bytes = cursor.readAndCopyOrThrow(length)\n        const payload = new Opaque(bytes)\n\n        return new Raw(circuit, command, payload)\n      }\n\n      const bytes = cursor.readAndCopyOrThrow(PAYLOAD_LEN)\n      const payload = new Opaque(bytes)\n\n      return new Raw(circuit, command, payload)\n    }\n\n  }\n\n  export class Circuitful<T extends Writable> {\n    readonly #raw: Raw<T>\n\n    constructor(\n      readonly circuit: SecretCircuit,\n      readonly command: number,\n      readonly fragment: T\n    ) {\n      this.#raw = new Raw<T>(circuit.id, command, fragment)\n    }\n\n    static from<T extends OldCellable.Circuitful & Writable>(circuit: SecretCircuit, cellable: T) {\n      return new Circuitful(circuit, cellable.command, cellable)\n    }\n\n    sizeOrThrow() {\n      return this.#raw.sizeOrThrow()\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      this.#raw.writeOrThrow(cursor)\n    }\n\n    static intoOrThrow<T extends Writable>(cell: OldCell<Opaque>, readable: OldCellable.Circuitful & Readable<T>) {\n      if (cell.command !== readable.command)\n        throw new InvalidCommandError()\n      if (cell.circuit == null)\n        throw new ExpectedCircuitError()\n\n      const fragment = cell.fragment.readIntoOrThrow(readable)\n\n      return new Circuitful(cell.circuit, readable.command, fragment)\n    }\n\n  }\n\n  export class Circuitless<T extends Writable> {\n    readonly #raw: Raw<T>\n\n    constructor(\n      readonly circuit: undefined,\n      readonly command: number,\n      readonly fragment: T\n    ) {\n      this.#raw = new Raw<T>(0, command, fragment)\n    }\n\n    static from<T extends OldCellable.Circuitless & Writable>(circuit: undefined, cellable: T) {\n      return new Circuitless(circuit, cellable.command, cellable)\n    }\n\n    sizeOrThrow() {\n      return this.#raw.sizeOrThrow()\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      this.#raw.writeOrThrow(cursor)\n    }\n\n    static intoOrThrow<T extends Writable>(cell: OldCell<Opaque>, readable: OldCellable.Circuitless & Readable<T>) {\n      if (cell.command !== readable.command)\n        throw new InvalidCommandError()\n      if (cell.circuit != null)\n        throw new UnexpectedCircuitError()\n\n      const fragment = cell.fragment.readIntoOrThrow(readable)\n\n      return new Circuitless(cell.circuit, readable.command, fragment)\n    }\n\n  }\n}"],"names":["OldCell","cursor","Cursor","Opaque","InvalidCommandError","ExpectedCircuitError","UnexpectedCircuitError"],"mappings":"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"}