{"version":3,"sources":["addressing.ts"],"sourcesContent":["import { BinaryCode } from \"../compiler/binary_codes.ts\";\nimport { Pointer } from \"../runtime/pointers.ts\";\nimport type { ValueConsumer } from \"./abstract_types.ts\";\nimport { ValueError } from \"./errors.ts\";\nimport { Compiler, ProtocolDataTypesMap } from \"../compiler/compiler.ts\";\nimport type { datex_scope, dxb_header, trace } from \"../utils/global_types.ts\";\nimport { base64ToArrayBuffer, buffer2hex, hex2buffer } from \"../utils/utils.ts\";\nimport { clause, Disjunction } from \"./logic.ts\";\nimport { Runtime, StaticScope } from \"../runtime/runtime.ts\";\nimport { logger } from \"../utils/global_values.ts\";\nimport { Datex } from \"../mod.ts\";\nimport { ProtocolDataType } from \"../compiler/protocol_types.ts\";\nimport { ESCAPE_SEQUENCES } from \"../utils/logger.ts\";\nimport { deleteCookie, getCookie } from \"../utils/cookies.ts\";\nimport { Crypto } from \"../runtime/crypto.ts\";\nimport { CommunicationInterfaceSocket } from \"../network/communication-interface.ts\";\nimport { communicationHub } from \"../network/communication-hub.ts\";\n\ntype target_prefix_person = \"@\";\ntype target_prefix_id = \"@@\";\ntype target_prefix_institution = \"@+\";\ntype target_prefix = target_prefix_person | target_prefix_id | target_prefix_institution;\n\nexport type filter_target_name_person = `${target_prefix_person}${string}`;\nexport type filter_target_name_id = `${target_prefix_id}${string}`;\nexport type filter_target_name_institution = `${target_prefix_institution}${string}`;\ntype _endpoint_name = filter_target_name_person | filter_target_name_id | filter_target_name_institution\nexport type endpoint_name = `${_endpoint_name}${_endpoint_name|''}`\n\nexport type endpoint_by_endpoint_name<name extends endpoint_name> = \n     name extends filter_target_name_id ? IdEndpoint : \n    (name extends filter_target_name_institution ?Institution :\n    (name extends filter_target_name_person ? Person : never));\n\n\n\nexport enum ElType {\n\tPERSON, LABEL, INSTITUTION, BOT, FLAG\n}\n\nexport type target_clause = clause<Target>\nexport type endpoints = Endpoint|Disjunction<Endpoint>\n\nexport class Target implements ValueConsumer {\n\n\t// TODO: remove entry when Endpoint WeakRef was garbage collected\n\tprotected static targets = new Map<string, WeakRef<Endpoint>>();   // target string -> target element\n\tstatic readonly prefix:target_prefix = \"@\"\n\tstatic readonly type:BinaryCode\n\n\n\t// @implements LogicalComparator<T>\n    static logicalMatch(value: Target, against: Target) {\n\t\treturn (\n\t\t\tagainst === BROADCAST ||\n\t\t\tvalue === against || \n\t\t\t(value instanceof Endpoint && value.main === against) ||\n\t\t\t(value instanceof Endpoint && against instanceof Endpoint && value.equals(against))\n\t\t)\n\t}\n\t\n\t// TODO filter\n\thandleApply(value:any, SCOPE:datex_scope) {\n\t\t// if (params[0] instanceof Endpoint) return Target.get(this.name, this.subspaces, this.instance, params[0], <any> this.constructor);\n\t\t// else return this;\n\t}\n\t\n\tpublic static getClassFromBinaryCode(binary_code?:BinaryCode): typeof Person | typeof Institution | typeof IdEndpoint | undefined {\n\t\tswitch (binary_code) {\n\t\t\tcase BinaryCode.PERSON_ALIAS: return Person;\n\t\t\tcase BinaryCode.INSTITUTION_ALIAS: return Institution;\n\t\t\tcase BinaryCode.ENDPOINT: return IdEndpoint;\n\n\t\t\tcase BinaryCode.PERSON_ALIAS_WILDCARD: return Person;\n\t\t\tcase BinaryCode.INSTITUTION_ALIAS_WILDCARD: return Institution;\n\t\t\tcase BinaryCode.ENDPOINT_WILDCARD: return IdEndpoint;\n\t\t}\n\t}\n\n\tpublic static isWildcardBinaryCode(binary_code?:BinaryCode): boolean {\n\t\tswitch (binary_code) {\n\t\t\tcase BinaryCode.PERSON_ALIAS_WILDCARD:\n\t\t\tcase BinaryCode.INSTITUTION_ALIAS_WILDCARD:\n\t\t\tcase BinaryCode.BOT_WILDCARD:\n\t\t\tcase BinaryCode.ENDPOINT_WILDCARD:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t/** create new Filter element or return stored \n\t * @param name: 'user' or '@user' or '@user/3'\n\t * @param instance: instance as extra parameter (optional)\n\t*/\n\tpublic static get<T extends endpoint_name>(name:T, instance?:string|number):endpoint_by_endpoint_name<T>|WildcardTarget\n\tpublic static get<T extends typeof Endpoint=typeof Endpoint>(name:string|Uint8Array, instance?:string|number|Uint8Array, type?:BinaryCode|T):InstanceType<T>|WildcardTarget\n\tpublic static get<T extends typeof Endpoint=typeof Endpoint>(name:string|Uint8Array, instance?:string|number|Uint8Array, filter_class_or_type?:BinaryCode|T):InstanceType<T>|WildcardTarget {\n\t\t\n\t\t// @ts-ignore\n\t\tif (name?.includes(\".\")) throw \"invalid target: includes '.'\"\n\n\t\tlet classType = this.getClassFromBinaryCode(<BinaryCode>filter_class_or_type) ?? <any>filter_class_or_type;\n\t\t// handle string\n\t\tif (typeof name == \"string\") {\n\t\t\t// institution\n\t\t\tif (name.startsWith(\"@+\")) {\n\t\t\t\tname = name.substring(2);\n\t\t\t\tclassType = Institution;\n\t\t\t}\n\t\t\t// id\n\t\t\telse if (name.startsWith(\"@@\")) {\n\t\t\t\tname = name.substring(2);\n\t\t\t\tclassType = IdEndpoint;\n\t\t\t}\n\t\t\t// individual\n\t\t\telse if (name.startsWith(\"@\")) {\n\t\t\t\tname = name.substring(1);\n\t\t\t\tclassType = Person;\n\t\t\t}\n\n\t\t\t// split instance and subspaces\n\t\t\tlet split = name.split(\"/\");\n\t\t\tname = split[0];\n\t\t\tif (split[1]) instance = split[1];\n\t\t\tsplit = name.split(\":\");\n\t\t\tname = split[0];\n\n\t\t}\n\n\t\tif (typeof classType != \"function\") throw new SyntaxError(\"Invalid Target: \" + name);\n\n\t\t// target or wildcard target?\n\t\tconst target = new classType(name, instance);\n\t\tif (typeof filter_class_or_type == \"number\" && this.isWildcardBinaryCode(filter_class_or_type)) return WildcardTarget.getWildcardTarget(target);\n\t\telse return <InstanceType<T>>target;\n\t}\n}\n\n/** parent class for all filters (@user, ...) */\nexport class Endpoint extends Target {\n\tprotected static readonly DEFAULT_INSTANCE = new Uint8Array(2);\n\n\t#name:string\n\t#binary = new Uint8Array(18) // 18 bytes\n\t#instance?:string\n\t#instance_binary:Uint8Array // 2 bytes\n\t#alias?: string\n\t#certifier?: Endpoint\n\n\t#properties = new Map<unknown,unknown>()\n\t#entrypoint?: unknown\n\n\t#n: string\n\t// n: string // show for debugging\n\n\tget name() {return this.#name}\n\tget instance() {return this.#instance}\n\tget instance_number() {return parseInt(this.#instance, 16)}\n\tget instance_binary() {return this.#instance_binary}\n\tget prefix() {return (<typeof Endpoint>this.constructor).prefix}\n\tget type() {return (<typeof Endpoint>this.constructor).type}\n\tget main():Endpoint {return (this.#instance == \"0000\" || !this.#instance) ? this : this.getInstance(\"\")} // target without instance\n\tget binary() {return this.#binary}\n\tget alias() {return this.#alias}\n\tget certifier() {return this.#certifier}\n\n\tget properties() {\n\t\treturn this.#properties;\n\t}\n\tget entrypoint() {\n\t\treturn this.#entrypoint;\n\t}\n\n\n\tprotected nameToBinary(name:string){return new TextEncoder().encode(name)}\n\tprotected nameFromBinary(name:Uint8Array){return new TextDecoder().decode(name).split(\"\\u0000\")?.[0]}\n\n\t// important!! do not call constructor directly (constructor only public for typescript types to work properly)\n\tconstructor(name:string|Uint8Array, instance?:string|number|Uint8Array) {\n\t\tsuper();\n\n\t\t// Buffer to string\n\t\tif (name instanceof Uint8Array) {\n\t\t\tif (name.byteLength > 18) throw new ValueError(\"Endpoint id/name must be <=18 bytes\")\n\t\t\tthis.#binary.set(name);\n\t\t}\n\t\telse if (typeof name === \"string\") {\n\t\t\tconst name_bin = this.nameToBinary(name);\n\t\t\tif (name_bin.byteLength > 18) throw new ValueError(\"Endpoint id/name must be <=18 bytes\")\n\t\t\tthis.#binary.set(name_bin);\n\t\t}\n\t\telse {\n\t\t\tthrow new ValueError(\"<Target> name must be a <text> or a <Buffer>\");\n\t\t}\n\t\t\n\t\tthis.#name = this.nameFromBinary(this.#binary);\n\n\t\t// Instance buffer/string/int\n\t\tif (instance instanceof Uint8Array) {\n\t\t\tthis.#instance_binary = instance;\n\t\t\tthis.#instance = buffer2hex(instance);\n\t\t}\n\t\telse if (typeof instance == \"number\") {\n\t\t\tthis.#instance_binary = new Uint8Array([(instance>>8) & 0xff, instance & 0xff]);\n\t\t\tthis.#instance = buffer2hex(this.#instance_binary);\n\t\t}\n\t\telse if (typeof instance == \"string\" && instance) {\n\t\t\tthis.#instance_binary = hex2buffer(instance);\n\t\t\tthis.#instance = instance.toUpperCase();\n\t\t}\n\t\telse {\n\t\t\tthis.#instance_binary = Endpoint.DEFAULT_INSTANCE;\n\t\t\tthis.#instance = buffer2hex(this.#instance_binary);\n\t\t}\n\n\t\tif ((this.#instance_binary.byteLength??0) > 2) throw new ValueError(\"Endpoint instance must be <=2 bytes\")\n\n\t\t// get toString() value\n\t\tthis.#n = this.toString()\n\t\t// this.n = this.#n; // just for debugging/display purposes\n\t\t\n\t\t// target already exists? return existing filtertarget\n\t\tif (Target.targets.has(this.#n) && Target.targets.get(this.#n)?.deref()) {\n\t\t\treturn Target.targets.get(this.#n)!.deref()!;\n\t\t}\n\t\t// add to filter target list\n\t\telse {\n\t\t\tconst ref = new WeakRef(this);\n\t\t\tEndpoint.registry.register(this, this.#n);\n\t\t\tTarget.targets.set(this.#n, ref);\n\t\t}\n\t}\n\tstatic registry: FinalizationRegistry<string> = new FinalizationRegistry((key)=>{\n\t\tTarget.targets.delete(key);\n\t});\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.#n;\n\t}\n\n\t// create string representation of filter (-> '@user')\n\toverride toString(with_instance=true): string {\n\t\treturn this._toString(with_instance);\n\t}\n\t// return string for JSON\n\ttoJSON() {\n\t\treturn 'dx::' + this.toString() \n\t}\n\n\tpublic async getProperty(key:unknown) {\n\t\tif (!communicationHub.connected && this !== Datex.Runtime.endpoint) {\n\t\t\t// logger.error(\"cannot get endpoint property\");\n\t\t\treturn new UnresolvedEndpointProperty(this, key)\n\t\t}\n\t\ttry {\n\t\t\tconst res = await datex(\"#public.(?)\", [key], this);\n\t\t\tif (res!==undefined) {\n\t\t\t\tthis.#properties.set(key, res)\n\t\t\t\treturn res;\n\t\t\t}\n\t\t} \n\t\t// probably network error, endpoint not reachable\n\t\tcatch (e) {\n\t\t\tlogger.debug(\"error getting '\" + this + \".\" + key + \"': \" + e.message)\n\t\t}\n\t\t// fallback: Blockchain\n\t\tconst res = Runtime.Blockchain.getEndpointProperty(this, key);\n\t\tthis.#properties.set(key, res)\n\t\treturn res;\n\t}\n\n\tpublic setProperty(key:unknown, value:unknown) {\n\t\tif (this !== Runtime.endpoint) throw new ValueError(\"cannot set endpoint property of remote endpoint\")\n\t\tStaticScope.scopes.set(key, <any>value)\n\t\t// this.#properties.set(key, value);\n\t}\n\n\tpublic async getEntrypoint(){\n\t\ttry {\n\t\t\tconst res = await datex(\"#entrypoint\", [], this);\n\t\t\tif (res!==undefined) return this.#entrypoint = res;\n\t\t} \n\t\t// probably network error, endpoint not reachable\n\t\tcatch {}\n\t\t// fallback: Blockchain\n\t\treturn this.#entrypoint = Runtime.Blockchain.getEndpointDefault(this);\n\t}\n\n\tpublic async getAlias(useCache = true){\n\t\t// use cached alias\n\t\tif (this.#alias && useCache) return this.#alias;\n\n\t\t// resolve alias from Blockchain\n\t\ttry {\n\t\t\tthis.#alias = <string | undefined> await Runtime.Blockchain.resolveAlias(this);\n\t\t}\n\t\tcatch (e){\n\t\t\t// console.debug(\"failed to resolve alias for \" + this, e)\n\t\t}\n\t\treturn this.#alias\n\t}\n\n\t/**\n\t * Generates a network trace\n\t * (for routing debugging)\n\t */\n\tpublic async trace(previous?: {header: dxb_header, trace: trace[], socket?: CommunicationInterfaceSocket}):Promise<trace[]> {\n\t\tif (previous) {\n\t\t\tconsole.log(ProtocolDataTypesMap[previous.header.type??ProtocolDataType.TRACE]+\" from \" + previous.header.sender + \" to \" + this);\n\t\t}\n\t\tconst trace = previous?.trace ?? [];\n\t\tconst properties = previous?.socket?.interfaceProperties;\n\t\ttrace.push({endpoint:Runtime.endpoint, socket: {type: properties?.type??\"unknown\", name: properties?.name}, timestamp: new Date()});\n\n\t\tconst res = await Runtime.datexOut(['?', [trace], {type:previous?.header?.type ?? ProtocolDataType.TRACE, sign:false, inc: 0, sid: previous?.header?.sid }], this, previous?.header?.sid, true, false, undefined, false, 60_000, previous?.socket);\n\t\treturn res;\n\t}\n\n\tpublic async printTrace() {\n\t\tconst format = (val:any) => Runtime.valueToDatexStringExperimental(val, true, true);\n\n\t\tlet traceStack: trace[]\n\t\ttry {\n\t\t\ttraceStack = await this.trace();\n\t\t}\n\t\tcatch {\n\t\t\tlet title = `${ESCAPE_SEQUENCES.BOLD}DATEX Network Trace\\n${ESCAPE_SEQUENCES.RESET}`;\n\t\t\ttitle += `${format(Runtime.endpoint)}${ESCAPE_SEQUENCES.RESET} ──▶ ${format(this)}${ESCAPE_SEQUENCES.RESET}\\n\\n`\n\t\t\ttitle += `${ESCAPE_SEQUENCES.RED}Error: Endpoint not reachable`\n\t\t\tconsole.log(title);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!traceStack) throw new Error(\"Invalid trace\");\n\n\t\tconst resolvedEndpointData = traceStack.find((data) => traceStack.indexOf(data)!=0 && (data.endpoint == this || data.endpoint.main == this || (data.endpoint == Runtime.endpoint && (this as any)==Datex.LOCAL_ENDPOINT)))!;\n\t\tconst resolveEndpointIndex = traceStack.indexOf(resolvedEndpointData);\n\t\tconst resolvedEndpoint = resolvedEndpointData.endpoint;\n\t\tconst hopsToDest = resolveEndpointIndex;\n\t\tconst hopsFromDest = traceStack.length - resolveEndpointIndex - 1;\n\n\t\tlet title = `${ESCAPE_SEQUENCES.BOLD}DATEX Network Trace\\n${ESCAPE_SEQUENCES.RESET}`;\n\t\ttitle += `${format(Runtime.endpoint)}${ESCAPE_SEQUENCES.RESET} ──▶ ${format(resolvedEndpoint)}${ESCAPE_SEQUENCES.RESET}\\n\\n`\n\t\tlet pre = ''\n\t\tconst rtt = traceStack.at(-1)!.timestamp.getTime() - traceStack.at(0)!.timestamp.getTime();\n\n\t\tpre += `-----------------------------\\n`\n\t\tpre += `${ESCAPE_SEQUENCES.BOLD}Round-Trip Time:       ${ESCAPE_SEQUENCES.RESET}${rtt}ms\\n`\n\t\tpre += `${ESCAPE_SEQUENCES.BOLD}Hops to Destination:   ${ESCAPE_SEQUENCES.RESET}${hopsToDest}\\n`\n\t\tpre += `${ESCAPE_SEQUENCES.BOLD}Hops from Destination: ${ESCAPE_SEQUENCES.RESET}${hopsFromDest}\\n`\n\t\tpre += `-----------------------------\\n\\n`\n\n\t\tpre += `\\n${ESCAPE_SEQUENCES.BOLD}Hops:${ESCAPE_SEQUENCES.RESET}\\n\\n`;\n\n\t\tlet index = 0;\n\t\tfor (let i = 0; i<traceStack.length; i++) {\n\t\t\tconst current = traceStack[i];\n\t\t\tconst next = traceStack[i+1];\n\t\t\tif (!next) break;\n\n\t\t\tif (i == hopsToDest) {\n\t\t\t\tindex = 0;\n\t\t\t\tpre += `\\n${ESCAPE_SEQUENCES.BOLD}Return Trip:${ESCAPE_SEQUENCES.RESET}\\n\\n`;\n\t\t\t}\n\n\t\t\tindex++;\n\t\t\tpre += `${ESCAPE_SEQUENCES.BOLD} #${index} ${ESCAPE_SEQUENCES.RESET}(${next.socket ? next.socket.type : '[update endpoint to show interface type]'}${next.socket?.name ? ' ' + next.socket.name : ''})${ESCAPE_SEQUENCES.RESET}:\\n  ${format(current.endpoint)}${ESCAPE_SEQUENCES.RESET} ──▶ ${format(next.endpoint)}${ESCAPE_SEQUENCES.RESET}\\n\\n`\n\t\t}\n\n\n\t\tconsole.log(title+pre)\n\t}\n\n\n\tpublic async getCertifier(){\n\t\t// resolve alias from Blockchain\n\t\treturn this.#certifier = <Endpoint | undefined> Runtime.Blockchain.getEndpointCertifier(this);\n\t}\n\n\n\tprotected _toString(with_instance=true): endpoint_name {\n\t\treturn `${this.prefix}${this.name}${with_instance&&(this.instance&&this.instance!=\"0000\")? \"/\"+this.instance : \"\"}`\n\t}\n\n\t\n\t/** returns a certain instance of an existing filter */\n\tpublic getInstance(instance:string|number|Uint8Array): Endpoint {\n\t\treturn Target.get(this.name, instance, <any> this.constructor);\n\t}\n\t\n\t// returns if two endpoints point to the same endpoint (id or user/...)\n\tpublic equals(other: Endpoint) {\n\t\treturn other === this;\n\t}\n\n\tdeclare private interface_channel_info:{[channel_name:string]:any}\n\tpublic setInterfaceChannels(info:{[channel_name:string]:any}){\n\t\tthis.interface_channel_info = info\n\t}\n\n\tpublic getInterfaceChannelInfo(channel?:string):any {\n\t\treturn channel ?\n\t\t\tthis.interface_channel_info[channel] :\n\t\t\tthis.interface_channel_info ? \n\t\t\t\tObject.values(this.interface_channel_info)[0] \n\t\t\t\t: undefined;\n\t}\n\n\n\t/* handle current online status */\n\n\t#online?: Promise<boolean>\n\t#current_online?: boolean\n\t\n\t#onlinePointer?: Pointer<boolean>;\n\tpublic get online() {\n\t\tif (this.#onlinePointer)\n\t\t\treturn this.#onlinePointer;\n\t\tconst interval = setInterval(()=>this.isOnline(), 10_000);\n\t\tthis.isOnline();\n\t\tthis.#onlinePointer = $$(this.#current_online ?? false) as Pointer<boolean>;\n\t\tthis.#onlinePointer.onGargabeCollection(()=> clearInterval(interval));\n\t\treturn this.#onlinePointer;\n\t}\n\n\n\t// max allowed time for DATEX online ping response\n\tstatic max_ping_response_time = 2000;\n\tstatic max_ping_response_time_unyt_node = 5000;\n\tstatic unyt_nodes = [\n\t\t\"@+unyt1\",\n\t\t\"@+unyt2\",\n\t\t\"@+unyt3\"\n\t]\n\n\t// online state cache reload time if currently online/offline\n\tstatic cache_life_offline = 3_000;\n\tstatic cache_life_online = 15_000;\n\n\t/**\n\t * Override online state (e.g. when retrieving a GOODBYE or other message)\n\t * Gets reset after some time (Endpoint.cache_life_offline/Endpoint.cache_life_online)\n\t * @param online \n\t */\n\tpublic setOnline(online = true) {\n\t\tif (this.#current_online === online) return; // no change\n\n\t\tif (!online) {\n\t\t\tcommunicationHub.handler.handleOfflineEndpoint(this);\n\t\t}\n\n\t\tthis.#online = new Promise(resolve => resolve(online));\n\t\tthis.#current_online = online;\n\t\tif (this.#onlinePointer) this.#onlinePointer.val = online;\n\t\t// reset overriden online state after some time\n\t\tthis.#resetOnlineCache();\n\t}\n\n\n\t// returns (cached) online status\n\tpublic async isOnline(): Promise<boolean> {\n\t\tif (\n\t\t\t// is own endpoint or main node\n\t\t\tRuntime.endpoint.equals(this) || \n\t\t\tRuntime.main_node?.equals(this) || \n\t\t\tthis as Endpoint === LOCAL_ENDPOINT ||\n\t\t\t// has direct socket connection\n\t\t\tcommunicationHub.handler.hasDirectSocket(this)\n\t\t) {\n\t\t\tthis.#current_online = true;\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif (this.#online != undefined) return this.#online;\n\t\t\n\n\t\tconst prev_online = this.#current_online;\n\n\t\tlet resolve_online:Function|undefined\n\t\tthis.#online = new Promise(resolve=>resolve_online=resolve)\n\n\t\ttry {\n\t\t\t// ping\n\t\t\tawait Runtime.datexOut(\n\t\t\t\t['', [], {sign:false, encrypt:false}], \n\t\t\t\tthis, \n\t\t\t\tundefined, \n\t\t\t\ttrue, \n\t\t\t\tfalse, \n\t\t\t\tundefined, \n\t\t\t\tfalse, \n\t\t\t\tEndpoint.unyt_nodes.includes(this.main.toString()) ? \n\t\t\t\t\tEndpoint.max_ping_response_time_unyt_node : \n\t\t\t\t\tEndpoint.max_ping_response_time\n\t\t\t\t);\n\t\t\tresolve_online!(this.#current_online = true)\n\t\t}\n\t\t// could not reach endpoint\n\t\tcatch {\n\t\t\tcommunicationHub.handler.handleOfflineEndpoint(this);\n\t\t\tresolve_online!(this.#current_online = false)\n\t\t}\n\n\t\t// log if online state changed\n\t\tif (prev_online !== this.#current_online) {\n\t\t\tif (this.#onlinePointer) this.#onlinePointer.val = this.#current_online;\n\t\t\tif (this.#current_online) logger.debug `new online state for ${this.toString()}: #color(green)online`\n\t\t\telse logger.debug `new online state for ${this.toString()}: #color(red)offline`\n\t\t}\n\n\t\t// clear online state after some time\n\t\tthis.#resetOnlineCache();\n\n\t\treturn this.#online;\n\t}\n\n\t/**\n\t * Resets the current online state cache after some time (Endpoint.cache_life_offline/Endpoint.cache_life_online)\n\t */\n\t#resetOnlineCache() {\n\t\tsetTimeout(() => this.#online=undefined, this.#current_online ? Endpoint.cache_life_online : Endpoint.cache_life_offline);\n\t}\n\n\t/**\n\t * Ignore HELLO messages from this endpoint (don't clean up subscriptions)\n\t */\n\tpublic ignoreHello = false;\n\n\t// get endpoint from string\n\tpublic static fromString(string:string) {\n\t\t// normal DATEX endpoint\n\t\ttry {\n\t\t\treturn Target.get(string)\n\t\t}\n\t\t// TODO Id Endpoint from ipv6 address, ...\n\t\tcatch {\n\t\t\tthrow \"cannot resolve endpoint name\"\n\t\t}\n\t}\n\n\tpublic static async fromStringAsync(string:string) {\n\t\t// TODO: regex\n\t\t// normal DATEX endpoint\n\t\tconst val = await datex(string);\n\t\tif (!(val instanceof Endpoint || val instanceof UnresolvedEndpointProperty)) throw new ValueError(`Could not parse endpoint string: \"${string}\" - Not an endpoint`);\n\t\treturn val;\n\t}\n\t\n\t/**\n\t * Get endpoint + keys from \"datex-endpoint\" cookie and \"new_keys\" entry\n\t * Only works one time (\"new_keys\" localStorage entry is removewd)\n\t * Deletes the cookie if not a valid endpoint or no \"new_keys\" entry exists, and returns null\n\t * @returns\n\t */\n\tpublic static getFromCookie() {\n\t\tconst cookieEndpoint = getCookie(\"datex-endpoint\");\n\t\tif (cookieEndpoint) return Target.get(cookieEndpoint) as Endpoint;\n\t\telse return null;\n\t}\n\n\tpublic static createNewID():filter_target_name_id{\n\t\tconst id = new DataView(new ArrayBuffer(16));\n        const timestamp = Math.round((new Date().getTime() - Compiler.BIG_BANG_TIME));\n        id.setBigUint64(0, BigInt(timestamp), true); // timestamp\n        id.setBigUint64(8, BigInt(Math.floor(Math.random() * (2**64))), true); // random number\n        return `@@${buffer2hex(new Uint8Array(id.buffer))}`;\n\t}\n\n\tpublic static getNewEndpoint():IdEndpoint{\n\t\treturn IdEndpoint.get(Endpoint.createNewID())\n\t}\n\n\t// get prefix for pointer (with address type) (same as dxb representation of endpoint)\n\tpublic getPointerPrefix(){\n\t\treturn new Uint8Array([\n\t\t\tthis.type,\n\t\t\t...this.binary, \n\t\t\t...this.instance_binary\n\t\t])\n\t}\n\n\tpublic getStaticPointerPrefix(){\n\t\treturn new Uint8Array([\n\t\t\tPointer.POINTER_TYPE.STATIC,\n\t\t\t...this.binary\n\t\t])\n\t}\n\n}\n\n\nexport class UnresolvedEndpointProperty {\n\tconstructor(public parent:Endpoint, public property:any) {}\n\n\tresolve() {\n\t\treturn datex `${this.parent}.${this.property}`;\n\t}\n\n\ttoString() {\n\t\treturn `${this.parent}.${this.property}`;\n\t}\n\n\t// to make compatible with Endpoint.getAlias()\n\tgetAlias() {\n\t\treturn this.toString()\n\t}\n}\n\n\n\nexport class WildcardTarget extends Target {\n\n\tprivate static wildcard_targets = new WeakMap<Endpoint, WildcardTarget>()\n\n\tpublic static getWildcardTarget(target: Endpoint){\n\t\tif (this.wildcard_targets.has(target)) return this.wildcard_targets.get(target)!;\n\t\telse {\n\t\t\tconst wildcard_target = new WildcardTarget(target);\n\t\t\tthis.wildcard_targets.get(target);\n\t\t\treturn wildcard_target;\n\t\t}\n\t}\n\n\toverride toString() {\n\t\treturn this.target?.toString() ?? \"### invalid wildcard target ###\";\n\t}\n\n\tconstructor(public target:Endpoint) {super()}\n}\n\n\nexport class Person extends Endpoint {\n\tstatic override prefix:target_prefix = \"@\"\n\tstatic override type = BinaryCode.PERSON_ALIAS\n\tstatic override get(name:string, instance?:string){return <Person>super.get(name, instance, Person)}\n}\nexport class Institution extends Endpoint {\n\tstatic override prefix:target_prefix = \"@+\"\n\tstatic override type = BinaryCode.INSTITUTION_ALIAS\n\tstatic override get(name:string, instance?:string){return <Institution>super.get(name, instance, Institution)}\n}\nexport class IdEndpoint extends Endpoint {\n\tstatic override prefix:target_prefix = \"@@\"\n\tstatic override type = BinaryCode.ENDPOINT\n\tstatic override get(name:string|Uint8Array, instance?:string){return <IdEndpoint>super.get(name, instance, IdEndpoint)}\n\toverride nameToBinary(name:string){\n\t\tif (name == \"local\") return new Uint8Array(18);\n\t\telse if (name == \"any\") return Uint8Array.from(Array(18).fill(0xff));\n\t\treturn hex2buffer(name)\n\t}\n\toverride nameFromBinary(name:Uint8Array){\n\t\tconst string = buffer2hex(name).replace(/(00)*$/, ''); \n\t\tif (string == \"\") return \"local\"\n\t\telse if (string == \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\") return \"any\"\n\t\telse return string;\n\t}\n}\n\n// default local endpoint\nexport const LOCAL_ENDPOINT = IdEndpoint.get(\"@@local\");\nexport const BROADCAST      = IdEndpoint.get(\"@@any\");"],"names":["ElType","BinaryCode","Pointer","ValueError","Compiler","ProtocolDataTypesMap","buffer2hex","hex2buffer","Runtime","StaticScope","logger","Datex","ProtocolDataType","ESCAPE_SEQUENCES","getCookie","communicationHub","Target","targets","Map","prefix","type","logicalMatch","value","against","BROADCAST","Endpoint","main","equals","handleApply","SCOPE","getClassFromBinaryCode","binary_code","PERSON_ALIAS","Person","INSTITUTION_ALIAS","Institution","ENDPOINT","IdEndpoint","PERSON_ALIAS_WILDCARD","INSTITUTION_ALIAS_WILDCARD","ENDPOINT_WILDCARD","isWildcardBinaryCode","BOT_WILDCARD","get","name","instance","filter_class_or_type","includes","classType","startsWith","substring","split","SyntaxError","target","WildcardTarget","getWildcardTarget","Symbol","toStringTag","DEFAULT_INSTANCE","Uint8Array","instance_number","parseInt","instance_binary","constructor","getInstance","binary","alias","certifier","properties","entrypoint","nameToBinary","TextEncoder","encode","nameFromBinary","TextDecoder","decode","byteLength","set","name_bin","toUpperCase","toString","has","deref","ref","WeakRef","registry","register","FinalizationRegistry","key","delete","with_instance","_toString","toJSON","getProperty","connected","endpoint","UnresolvedEndpointProperty","res","datex","undefined","e","debug","message","Blockchain","getEndpointProperty","setProperty","scopes","getEntrypoint","getEndpointDefault","getAlias","useCache","resolveAlias","trace","previous","console","log","header","TRACE","sender","socket","interfaceProperties","push","timestamp","Date","datexOut","sign","inc","sid","printTrace","traceStack","format","val","valueToDatexStringExperimental","title","BOLD","RESET","RED","Error","resolvedEndpointData","find","data","indexOf","LOCAL_ENDPOINT","resolveEndpointIndex","resolvedEndpoint","hopsFromDest","length","pre","rtt","at","getTime","index","i","current","next","getCertifier","getEndpointCertifier","other","setInterfaceChannels","info","interface_channel_info","getInterfaceChannelInfo","channel","Object","values","online","interval","setInterval","isOnline","$$","onGargabeCollection","clearInterval","max_ping_response_time","max_ping_response_time_unyt_node","unyt_nodes","cache_life_offline","cache_life_online","setOnline","handler","handleOfflineEndpoint","Promise","resolve","resolve_online","main_node","hasDirectSocket","prev_online","encrypt","setTimeout","ignoreHello","fromString","string","fromStringAsync","getFromCookie","cookieEndpoint","createNewID","id","DataView","ArrayBuffer","Math","round","BIG_BANG_TIME","setBigUint64","BigInt","floor","random","buffer","getNewEndpoint","getPointerPrefix","getStaticPointerPrefix","POINTER_TYPE","STATIC","parent","property","wildcard_targets","WeakMap","wildcard_target","from","Array","fill","replace"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/types/","file":"addressing.ts"}