import { decodeMessage, encodeMessage, enumeration, MaxLengthError, message, streamMessage } from 'protons-runtime' import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' import type { Codec, DecodeOptions } from 'protons-runtime' import type { Uint8ArrayList } from 'uint8arraylist' export interface HopMessage { type?: HopMessage.Type peer?: Peer reservation?: Reservation limit?: Limit status?: Status } export namespace HopMessage { export enum Type { RESERVE = 'RESERVE', CONNECT = 'CONNECT', STATUS = 'STATUS' } enum __TypeValues { RESERVE = 0, CONNECT = 1, STATUS = 2 } export namespace Type { export const codec = (): Codec => { return enumeration(__TypeValues) } } let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if (obj.type != null) { w.uint32(8) HopMessage.Type.codec().encode(obj.type, w) } if (obj.peer != null) { w.uint32(18) Peer.codec().encode(obj.peer, w) } if (obj.reservation != null) { w.uint32(26) Reservation.codec().encode(obj.reservation, w) } if (obj.limit != null) { w.uint32(34) Limit.codec().encode(obj.limit, w) } if (obj.status != null) { w.uint32(40) Status.codec().encode(obj.status, w) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = {} const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.type = HopMessage.Type.codec().decode(reader) break } case 2: { obj.peer = Peer.codec().decode(reader, reader.uint32(), { limits: opts.limits?.peer }) break } case 3: { obj.reservation = Reservation.codec().decode(reader, reader.uint32(), { limits: opts.limits?.reservation }) break } case 4: { obj.limit = Limit.codec().decode(reader, reader.uint32(), { limits: opts.limits?.limit }) break } case 5: { obj.status = Status.codec().decode(reader) break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.type`, value: HopMessage.Type.codec().decode(reader) } break } case 2: { yield * Peer.codec().stream(reader, reader.uint32(), `${prefix}.peer`, { limits: opts.limits?.peer }) break } case 3: { yield * Reservation.codec().stream(reader, reader.uint32(), `${prefix}.reservation`, { limits: opts.limits?.reservation }) break } case 4: { yield * Limit.codec().stream(reader, reader.uint32(), `${prefix}.limit`, { limits: opts.limits?.limit }) break } case 5: { yield { field: `${prefix}.status`, value: Status.codec().decode(reader) } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface HopMessageTypeFieldEvent { field: '$.type' value: HopMessage.Type } export interface HopMessagePeerIdFieldEvent { field: '$.peer.id' value: Uint8Array } export interface HopMessagePeerAddrsFieldEvent { field: '$.peer.addrs[]' index: number value: Uint8Array } export interface HopMessageReservationExpireFieldEvent { field: '$.reservation.expire' value: bigint } export interface HopMessageReservationAddrsFieldEvent { field: '$.reservation.addrs[]' index: number value: Uint8Array } export interface HopMessageReservationVoucherPublicKeyFieldEvent { field: '$.reservation.voucher.publicKey' value: Uint8Array } export interface HopMessageReservationVoucherPayloadTypeFieldEvent { field: '$.reservation.voucher.payloadType' value: Uint8Array } export interface HopMessageReservationVoucherPayloadRelayFieldEvent { field: '$.reservation.voucher.payload.relay' value: Uint8Array } export interface HopMessageReservationVoucherPayloadPeerFieldEvent { field: '$.reservation.voucher.payload.peer' value: Uint8Array } export interface HopMessageReservationVoucherPayloadExpirationFieldEvent { field: '$.reservation.voucher.payload.expiration' value: bigint } export interface HopMessageReservationVoucherSignatureFieldEvent { field: '$.reservation.voucher.signature' value: Uint8Array } export interface HopMessageLimitDurationFieldEvent { field: '$.limit.duration' value: number } export interface HopMessageLimitDataFieldEvent { field: '$.limit.data' value: bigint } export interface HopMessageStatusFieldEvent { field: '$.status' value: Status } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, HopMessage.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): HopMessage { return decodeMessage(buf, HopMessage.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, HopMessage.codec(), opts) } } export interface StopMessage { type?: StopMessage.Type peer?: Peer limit?: Limit status?: Status } export namespace StopMessage { export enum Type { CONNECT = 'CONNECT', STATUS = 'STATUS' } enum __TypeValues { CONNECT = 0, STATUS = 1 } export namespace Type { export const codec = (): Codec => { return enumeration(__TypeValues) } } let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if (obj.type != null) { w.uint32(8) StopMessage.Type.codec().encode(obj.type, w) } if (obj.peer != null) { w.uint32(18) Peer.codec().encode(obj.peer, w) } if (obj.limit != null) { w.uint32(26) Limit.codec().encode(obj.limit, w) } if (obj.status != null) { w.uint32(32) Status.codec().encode(obj.status, w) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = {} const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.type = StopMessage.Type.codec().decode(reader) break } case 2: { obj.peer = Peer.codec().decode(reader, reader.uint32(), { limits: opts.limits?.peer }) break } case 3: { obj.limit = Limit.codec().decode(reader, reader.uint32(), { limits: opts.limits?.limit }) break } case 4: { obj.status = Status.codec().decode(reader) break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.type`, value: StopMessage.Type.codec().decode(reader) } break } case 2: { yield * Peer.codec().stream(reader, reader.uint32(), `${prefix}.peer`, { limits: opts.limits?.peer }) break } case 3: { yield * Limit.codec().stream(reader, reader.uint32(), `${prefix}.limit`, { limits: opts.limits?.limit }) break } case 4: { yield { field: `${prefix}.status`, value: Status.codec().decode(reader) } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface StopMessageTypeFieldEvent { field: '$.type' value: StopMessage.Type } export interface StopMessagePeerIdFieldEvent { field: '$.peer.id' value: Uint8Array } export interface StopMessagePeerAddrsFieldEvent { field: '$.peer.addrs[]' index: number value: Uint8Array } export interface StopMessageLimitDurationFieldEvent { field: '$.limit.duration' value: number } export interface StopMessageLimitDataFieldEvent { field: '$.limit.data' value: bigint } export interface StopMessageStatusFieldEvent { field: '$.status' value: Status } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, StopMessage.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): StopMessage { return decodeMessage(buf, StopMessage.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, StopMessage.codec(), opts) } } export interface Peer { id: Uint8Array addrs: Uint8Array[] } export namespace Peer { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if ((obj.id != null && obj.id.byteLength > 0)) { w.uint32(10) w.bytes(obj.id) } if (obj.addrs != null && obj.addrs.length > 0) { for (const value of obj.addrs) { w.uint32(18) w.bytes(value) } } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = { id: uint8ArrayAlloc(0), addrs: [] } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.id = reader.bytes() break } case 2: { if (opts.limits?.addrs != null && obj.addrs.length === opts.limits.addrs) { throw new MaxLengthError('Decode error - repeated field "addrs" had too many elements') } obj.addrs.push(reader.bytes()) break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const obj = { addrs: 0 } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.id`, value: reader.bytes() } break } case 2: { if (opts.limits?.addrs != null && obj.addrs === opts.limits.addrs) { throw new MaxLengthError('Streaming decode error - repeated field "addrs" had too many elements') } yield { field: `${prefix}.addrs[]`, index: obj.addrs, value: reader.bytes() } obj.addrs++ break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface PeerIdFieldEvent { field: '$.id' value: Uint8Array } export interface PeerAddrsFieldEvent { field: '$.addrs[]' index: number value: Uint8Array } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, Peer.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Peer { return decodeMessage(buf, Peer.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, Peer.codec(), opts) } } export interface Reservation { expire: bigint addrs: Uint8Array[] voucher?: Envelope } export namespace Reservation { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if ((obj.expire != null && obj.expire !== 0n)) { w.uint32(8) w.uint64(obj.expire) } if (obj.addrs != null && obj.addrs.length > 0) { for (const value of obj.addrs) { w.uint32(18) w.bytes(value) } } if (obj.voucher != null) { w.uint32(26) Envelope.codec().encode(obj.voucher, w) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = { expire: 0n, addrs: [] } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.expire = reader.uint64() break } case 2: { if (opts.limits?.addrs != null && obj.addrs.length === opts.limits.addrs) { throw new MaxLengthError('Decode error - repeated field "addrs" had too many elements') } obj.addrs.push(reader.bytes()) break } case 3: { obj.voucher = Envelope.codec().decode(reader, reader.uint32(), { limits: opts.limits?.voucher }) break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const obj = { addrs: 0 } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.expire`, value: reader.uint64() } break } case 2: { if (opts.limits?.addrs != null && obj.addrs === opts.limits.addrs) { throw new MaxLengthError('Streaming decode error - repeated field "addrs" had too many elements') } yield { field: `${prefix}.addrs[]`, index: obj.addrs, value: reader.bytes() } obj.addrs++ break } case 3: { yield * Envelope.codec().stream(reader, reader.uint32(), `${prefix}.voucher`, { limits: opts.limits?.voucher }) break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface ReservationExpireFieldEvent { field: '$.expire' value: bigint } export interface ReservationAddrsFieldEvent { field: '$.addrs[]' index: number value: Uint8Array } export interface ReservationVoucherPublicKeyFieldEvent { field: '$.voucher.publicKey' value: Uint8Array } export interface ReservationVoucherPayloadTypeFieldEvent { field: '$.voucher.payloadType' value: Uint8Array } export interface ReservationVoucherPayloadRelayFieldEvent { field: '$.voucher.payload.relay' value: Uint8Array } export interface ReservationVoucherPayloadPeerFieldEvent { field: '$.voucher.payload.peer' value: Uint8Array } export interface ReservationVoucherPayloadExpirationFieldEvent { field: '$.voucher.payload.expiration' value: bigint } export interface ReservationVoucherSignatureFieldEvent { field: '$.voucher.signature' value: Uint8Array } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, Reservation.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Reservation { return decodeMessage(buf, Reservation.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, Reservation.codec(), opts) } } export interface Limit { duration?: number data?: bigint } export namespace Limit { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if (obj.duration != null) { w.uint32(8) w.uint32(obj.duration) } if (obj.data != null) { w.uint32(16) w.uint64(obj.data) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = {} const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.duration = reader.uint32() break } case 2: { obj.data = reader.uint64() break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.duration`, value: reader.uint32() } break } case 2: { yield { field: `${prefix}.data`, value: reader.uint64() } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface LimitDurationFieldEvent { field: '$.duration' value: number } export interface LimitDataFieldEvent { field: '$.data' value: bigint } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, Limit.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Limit { return decodeMessage(buf, Limit.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, Limit.codec(), opts) } } export enum Status { UNUSED = 'UNUSED', OK = 'OK', RESERVATION_REFUSED = 'RESERVATION_REFUSED', RESOURCE_LIMIT_EXCEEDED = 'RESOURCE_LIMIT_EXCEEDED', PERMISSION_DENIED = 'PERMISSION_DENIED', CONNECTION_FAILED = 'CONNECTION_FAILED', NO_RESERVATION = 'NO_RESERVATION', MALFORMED_MESSAGE = 'MALFORMED_MESSAGE', UNEXPECTED_MESSAGE = 'UNEXPECTED_MESSAGE' } enum __StatusValues { UNUSED = 0, OK = 100, RESERVATION_REFUSED = 200, RESOURCE_LIMIT_EXCEEDED = 201, PERMISSION_DENIED = 202, CONNECTION_FAILED = 203, NO_RESERVATION = 204, MALFORMED_MESSAGE = 400, UNEXPECTED_MESSAGE = 401 } export namespace Status { export const codec = (): Codec => { return enumeration(__StatusValues) } } export interface ReservationVoucher { relay: Uint8Array peer: Uint8Array expiration: bigint } export namespace ReservationVoucher { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if ((obj.relay != null && obj.relay.byteLength > 0)) { w.uint32(10) w.bytes(obj.relay) } if ((obj.peer != null && obj.peer.byteLength > 0)) { w.uint32(18) w.bytes(obj.peer) } if ((obj.expiration != null && obj.expiration !== 0n)) { w.uint32(24) w.uint64(obj.expiration) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = { relay: uint8ArrayAlloc(0), peer: uint8ArrayAlloc(0), expiration: 0n } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.relay = reader.bytes() break } case 2: { obj.peer = reader.bytes() break } case 3: { obj.expiration = reader.uint64() break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.relay`, value: reader.bytes() } break } case 2: { yield { field: `${prefix}.peer`, value: reader.bytes() } break } case 3: { yield { field: `${prefix}.expiration`, value: reader.uint64() } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface ReservationVoucherRelayFieldEvent { field: '$.relay' value: Uint8Array } export interface ReservationVoucherPeerFieldEvent { field: '$.peer' value: Uint8Array } export interface ReservationVoucherExpirationFieldEvent { field: '$.expiration' value: bigint } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, ReservationVoucher.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): ReservationVoucher { return decodeMessage(buf, ReservationVoucher.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, ReservationVoucher.codec(), opts) } } export interface Envelope { publicKey: Uint8Array payloadType: Uint8Array payload?: ReservationVoucher signature: Uint8Array } export namespace Envelope { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if ((obj.publicKey != null && obj.publicKey.byteLength > 0)) { w.uint32(10) w.bytes(obj.publicKey) } if ((obj.payloadType != null && obj.payloadType.byteLength > 0)) { w.uint32(18) w.bytes(obj.payloadType) } if (obj.payload != null) { w.uint32(26) ReservationVoucher.codec().encode(obj.payload, w) } if ((obj.signature != null && obj.signature.byteLength > 0)) { w.uint32(42) w.bytes(obj.signature) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = { publicKey: uint8ArrayAlloc(0), payloadType: uint8ArrayAlloc(0), signature: uint8ArrayAlloc(0) } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.publicKey = reader.bytes() break } case 2: { obj.payloadType = reader.bytes() break } case 3: { obj.payload = ReservationVoucher.codec().decode(reader, reader.uint32(), { limits: opts.limits?.payload }) break } case 5: { obj.signature = reader.bytes() break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.publicKey`, value: reader.bytes() } break } case 2: { yield { field: `${prefix}.payloadType`, value: reader.bytes() } break } case 3: { yield * ReservationVoucher.codec().stream(reader, reader.uint32(), `${prefix}.payload`, { limits: opts.limits?.payload }) break } case 5: { yield { field: `${prefix}.signature`, value: reader.bytes() } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface EnvelopePublicKeyFieldEvent { field: '$.publicKey' value: Uint8Array } export interface EnvelopePayloadTypeFieldEvent { field: '$.payloadType' value: Uint8Array } export interface EnvelopePayloadRelayFieldEvent { field: '$.payload.relay' value: Uint8Array } export interface EnvelopePayloadPeerFieldEvent { field: '$.payload.peer' value: Uint8Array } export interface EnvelopePayloadExpirationFieldEvent { field: '$.payload.expiration' value: bigint } export interface EnvelopeSignatureFieldEvent { field: '$.signature' value: Uint8Array } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, Envelope.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Envelope { return decodeMessage(buf, Envelope.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, Envelope.codec(), opts) } }