{"version":3,"sources":["blockchain_adapter.ts"],"sourcesContent":["import { Datex, f, instance } from \"../mod.ts\";\nimport { Disjunction, Endpoint } from \"../datex_all.ts\";\nimport {endpoint, property} from \"../datex_all.ts\";\nimport { Logger } from \"../utils/logger.ts\";\n\nconst logger = new Logger(\"Blockchain Adapter\");\n\n/**\n * Blockchain type definitions\n */\n\nexport enum BCEntryType {\n\tENDPOINT_REGISTRATION, // register a new endpoint\n\tENDPOINT_PROPERTY, // set a endpoint property\n\tENDPOINT_DEFAULT, // set the endpoint default value\n\n\tPOINTER, // save a BC pointer value\n\tPOINTER_PROPERTY // set a property of a BC pointer\n}\n\n// index type for blockchain entries (branded number)\nexport type entry_index<T extends BCEntryType = BCEntryType> = number & { __type: T }\n\nexport type property_entry_index = entry_index<BCEntryType.ENDPOINT_PROPERTY|BCEntryType.POINTER_PROPERTY>\nexport type pointer_entry_index = entry_index<BCEntryType.POINTER>\n\n// used for reverse name resolution\nexport type TRACABLE_DATA = {\n\ttrace?: property_entry_index\n}\n\n\n\nexport type ENDPOINT_REGISTRATION_DATA = TRACABLE_DATA & {\n\tendpoint: Endpoint, \n\tkeys: [verify:ArrayBuffer, encrypt:ArrayBuffer],\n} \nexport type ENDPOINT_PROPERTY_DATA = {\n\tkey: unknown,\n\tvalue: unknown,\n\treadonly?: boolean,\n}\nexport type ENDPOINT_DEFAULT_DATA = {\n\tvalue: unknown,\n}\n\nexport type POINTER_DATA = TRACABLE_DATA & {\n\tvalue: unknown,\n\treadonly?: boolean\n} \nexport type POINTER_PROPERTY_DATA = {\n\tpointer: pointer_entry_index,\n\tkey: unknown,\n\tvalue: unknown,\n\treadonly?: boolean,\n}\n\n\nexport type BCData<T extends BCEntryType> = \n\tT extends BCEntryType.ENDPOINT_REGISTRATION ? ENDPOINT_REGISTRATION_DATA :(\n\tT extends BCEntryType.ENDPOINT_PROPERTY     ? ENDPOINT_PROPERTY_DATA     :(\n\tT extends BCEntryType.ENDPOINT_DEFAULT      ? ENDPOINT_DEFAULT_DATA      :(\n\tT extends BCEntryType.POINTER               ? POINTER_DATA               :(\n\tT extends BCEntryType.POINTER_PROPERTY      ? POINTER_PROPERTY_DATA      \n\t: never))))\n\n\n@sync export class BCEntry<T extends BCEntryType = BCEntryType> {\n\t@property index!: number\n\t@property type!:T\n\t@property data!:BCData<T>\n\t@property creator?:Endpoint\n\t@property signature?:ArrayBuffer\n\n\tconstructor(data?: {\n\t\tindex: number,\n\t\ttype:T,\n\t\tdata:BCData<T>,\n\t\tcreator?:Endpoint,\n\t\tsignature?:ArrayBuffer\n\t}) {\n\t\tif (data?.index) this.index = data.index;\n\t\tif (data?.type) this.type = data.type;\n\t\tif (data?.data) this.data = data.data;\n\t\tif (data?.creator) this.creator = data.creator;\n\t\tif (data?.signature) this.signature = data.signature;\n\t}\n\n\tpublic async sign(){\n\t\tconst data_dx = Datex.Compiler.encodeValue(this.data);\n\t\tthis.creator = Datex.Runtime.endpoint.main;\n\t\tthis.signature = await Datex.Crypto.sign(data_dx);\n\t\treturn this;\n\t}\n}\n\n\n/**\n * Blockchain interface (using @+unyt2 relay node)\n */\nconst relayNode = new Disjunction(f('@+unyt2'));\n\n@endpoint(relayNode) export class Blockchain {\n\n\tstatic setRelayNode(node: Endpoint) {\n\t\tlogger.debug(\"using blockchain relay node: \" + node);\n\t\trelayNode.clear();\n\t\trelayNode.add(node);\n\t}\n\tstatic getRelayNode() {\n\t\treturn [...relayNode][0];\n\t}\n\n\t/**\n\t * Methods that must be implemented on an endpoint that has access to the blockchain:#\n\t */\n\t// Add a blockchain entry like: new Registration, Endpoint Assignment (Registration&Verification + Property), new Verification, new Property Assignment, new Pointer\n\t@property static addEntry<T extends BCEntryType>(entry: BCEntry<T>): Promise<number> {}\n\t// get any entry by the index\n\t@property static getEntry(index: number): Promise<BCEntry<BCEntryType> | undefined> {}\n\t// Public keys for encryption of messages and verification of signatures\n\t@property static getEndpointPublicKeys(endpoint: Endpoint):Promise<[ArrayBuffer, ArrayBuffer]> {}\n\t// Get the (authority) endpoint that certified an endpoint\n\t@property static getEndpointCertifier(endpoint: Endpoint):Promise<Endpoint|undefined> {}\n\t// get entry for endpoint registration\n\t@property static getEndpointEntry(endpoint: Endpoint): Promise<BCEntry<BCEntryType.ENDPOINT_REGISTRATION> | undefined> {}\n\t// gets an endpoint property like @endpoint.name\n\t@property static getEndpointProperty(endpoint: Endpoint, key: unknown): any {}\n\t// gets an endpoint default value\n\t@property static getEndpointDefault(endpoint: Endpoint): any {}\n\t// get latest entry for an endpoint property\n\t@property static getEndpointPropertyEntry(endpoint: Endpoint, key: unknown): Promise<BCEntry<BCEntryType.ENDPOINT_PROPERTY> | undefined> {}\n\t// get a pointer value\n\t@property static getPointer(id: number) : any {}\n\t@property static getPointerEntry(id: number): Promise<BCEntry<BCEntryType.POINTER> | undefined> {}\n\t// traces backe the alias name of an endpoint or object (e.g. @@3456677564 -> get @unyt )\n\t@property static resolveAlias(target: Endpoint|BCEntry<BCEntryType.POINTER|BCEntryType.ENDPOINT_REGISTRATION>): Promise<string|undefined> {}\n\t// returns an existing registered endpoint instances, if hash is registered, otherwise finds an available instance and returns\n\t@property static getEndpointInstance(endpoint: Endpoint, hash: string): Promise<Endpoint> {}\n\t/**\n\t * implemented blockchain util methods (validation, ...)\n\t */\n\n\tstatic isEntryOfType<T extends BCEntryType>(entry: BCEntry<BCEntryType>, type: T): entry is BCEntry<T> {\n\t\treturn entry.type == type;\n\t}\n\n\tstatic async validateEntry(entry: BCEntry<BCEntryType>, allow_unsigned = false){\n\t\t// creator set?\n\t\tif (!entry.creator && entry.type != BCEntryType.ENDPOINT_REGISTRATION) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): missing creator`);\n\n\t\t// validate signature\n\t\tif (!allow_unsigned && !entry.signature) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): signature required`);\n\t\tif (entry.signature) await this.validateEntrySignature(entry);\n\n\t\t// check if endpoint is already registered\n\t\tif (this.isEntryOfType(entry, BCEntryType.ENDPOINT_REGISTRATION)) {\n\t\t\tif (!(entry.data.keys instanceof Array && entry.data.keys.length == 2 && entry.data.keys[0] instanceof ArrayBuffer && entry.data.keys[1] instanceof ArrayBuffer)) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): invalid keys`);\n\t\t\tif (await this.getEndpointPublicKeys(entry.data.endpoint)) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): endpoint already registered`);\n\t\t\tif (entry.creator && entry.data.endpoint.equals(entry.creator)) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): endpoint cannot certify itself`);\n\t\t}\n\n\t\t// check if endpoint is already registered\n\t\tif (this.isEntryOfType(entry, BCEntryType.ENDPOINT_PROPERTY)) {\n\t\t\tif ((await this.getEndpointPropertyEntry(entry.creator!, entry.data.key))?.data.readonly) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): cannot update readonly property`);\n\t\t}\n\n\n\t\tlogger.success(\"validated block: \" + BCEntryType[entry.type])\n\t}\n\n\tstatic async validateEntrySignature(entry: BCEntry<BCEntryType>){\n\t\tif (!entry.signature) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): missing signature`);\n\t\tif (!entry.creator) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): missing creator`);\n\n\t\tconst data_dx = Datex.Compiler.encodeValue(entry.data);\n\t\tconst valid = await Datex.Crypto.verify(data_dx, entry.signature, entry.creator);\n\t\tif (!valid) throw new Error(`invalid Blockchain entry (${BCEntryType[entry.type]}): invalid signature`);\n\t}\n\n}\n\n\nexport class BlockchainActions {\n\n\t/**\n\t * Register a new endpoint with corresponding public keys in the blockchain\n\t * @param endpoint the new endpoint\n\t * @param keys endpoint public keys (verify + encrypt)\n\t * @param sign optional, let the current endpoint sign the block\n\t * @param trace entry id of a linked property assignment (for reverse alias resolution)\n\t * @returns \n\t */\n\tpublic static async registerEndpoint(endpoint: Endpoint, keys: [verify:ArrayBuffer, encrypt:ArrayBuffer], sign = false, trace?:property_entry_index) {\n\t\tconst entry = instance(BCEntry<BCEntryType.ENDPOINT_REGISTRATION>, {\n\t\t\ttype: BCEntryType.ENDPOINT_REGISTRATION,\n\t\t\tdata: {\n\t\t\t\tendpoint,\n\t\t\t\tkeys,\n\t\t\t\ttrace\n\t\t\t}\n\t\t});\n\t\tif (sign) await entry.sign(); // sign (optional)\n\t\tawait Blockchain.validateEntry(entry, !sign); // check if valid before sending\n\t\treturn Blockchain.addEntry(entry)\n\t}\n\n\t/**\n\t * Store a endpoint property (@example.xy) in the blockchain / distributed storage\n\t * @param key property key\n\t * @param value property value\n\t * @param readonly set to true if the property should not be modified ever\n\t * @returns \n\t */\n\tpublic static async storeEndpointProperty(key: unknown, value: unknown, readonly = false) {\n\t\tconst entry = instance(BCEntry<BCEntryType.ENDPOINT_PROPERTY>, {\n\t\t\ttype: BCEntryType.ENDPOINT_PROPERTY,\n\t\t\tdata: {\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t\treadonly,\n\t\t\t}\n\t\t});\n\t\tawait entry.sign(); // always sign\n\t\tawait Blockchain.validateEntry(entry); // check if valid before sending\n\t\treturn Blockchain.addEntry(entry)\n\t}\n\n\t/**\n\t * Store the endpoint default value (get @example) in the blockchain / distributed storage\n\t * @param value default value\n\t * @returns \n\t */\n\tpublic static async storeEndpointDefault(value: unknown) {\n\t\tconst entry = instance(BCEntry<BCEntryType.ENDPOINT_DEFAULT>, {\n\t\t\ttype: BCEntryType.ENDPOINT_DEFAULT,\n\t\t\tdata: {\n\t\t\t\tvalue,\n\t\t\t}\n\t\t});\n\t\tawait entry.sign(); // always sign\n\t\tawait Blockchain.validateEntry(entry); // check if valid before sending\n\t\treturn Blockchain.addEntry(entry)\n\t}\n\n\t/**\n\t * Store a pointer in the blockchain / distributed storage\n\t * @param value pointer value\n\t * @param readonly set to true if the pointer should not be modified ever\n\t * @param trace entry id of a linked property assignment (for reverse alias resolution)\n\t * @returns the BC pointer id (entry index)\n\t */\n\tpublic static async storePointer(value: unknown, readonly = false, trace?:property_entry_index) {\n\t\tconst entry = instance(BCEntry<BCEntryType.POINTER>, {\n\t\t\ttype: BCEntryType.POINTER,\n\t\t\tdata: {\n\t\t\t\tvalue,\n\t\t\t\treadonly,\n\t\t\t\ttrace\n\t\t\t}\n\t\t});\n\t\tawait entry.sign(); // always sign\n\t\tawait Blockchain.validateEntry(entry); // check if valid before sending\n\t\treturn Blockchain.addEntry(entry)\n\t}\n\n\t/**\n\t * Store a pointer property in the blockchain / distributed storage\n\t * @param value pointer value\n\t * @param readonly set to true if the pointer should not be modified ever\n\t * @param trace entry id of a linked property assignment (for reverse alias resolution)\n\t * @returns the BC pointer id (entry index)\n\t */\n\tpublic static async storePointerProperty(pointer:pointer_entry_index, key:unknown, value: unknown, readonly = false) {\n\t\tconst entry = instance(BCEntry<BCEntryType.POINTER_PROPERTY>, {\n\t\t\ttype: BCEntryType.POINTER_PROPERTY,\n\t\t\tdata: {\n\t\t\t\tpointer,\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t\treadonly\n\t\t\t}\n\t\t});\n\t\tawait entry.sign(); // always sign\n\t\tawait Blockchain.validateEntry(entry); // check if valid before sending\n\t\treturn Blockchain.addEntry(entry)\n\t}\n\n\t/**\n\t * Create a new sub endpoint for the current endpoint\n\t * @param name name of the endpoint property (@example.*name*)\n\t * @param sub_endpoint the actual endpoint to which the sub endpoint resolves\n\t * @param keys public keys for the sub endpoint (verify + encrypt)\n\t */\n\tpublic static async registerSubEndpoint(name:string, sub_endpoint: Endpoint, keys: [verify:ArrayBuffer, encrypt:ArrayBuffer]) {\n\t\t// store as property of current endpoint\n\t\tconst trace = (await this.storeEndpointProperty(name, sub_endpoint))!;\n\n\t\t// register new sub endpoint, signed by the current endpoint\n\t\tawait this.registerEndpoint(sub_endpoint, keys, true, trace);\n\t}\n\n}"],"names":["index","type","data","creator","signature","BCEntryType","Datex","f","instance","Disjunction","endpoint","property","Logger","logger","BCEntry","sync","constructor","sign","data_dx","Compiler","encodeValue","Runtime","main","Crypto","relayNode","Blockchain","addEntry","getEntry","getEndpointPublicKeys","getEndpointCertifier","getEndpointEntry","getEndpointProperty","getEndpointDefault","getEndpointPropertyEntry","getPointer","getPointerEntry","resolveAlias","getEndpointInstance","setRelayNode","node","debug","clear","add","getRelayNode","entry","key","id","target","hash","isEntryOfType","validateEntry","allow_unsigned","Error","validateEntrySignature","keys","Array","length","ArrayBuffer","equals","readonly","success","verify","BlockchainActions","registerEndpoint","trace","storeEndpointProperty","value","storeEndpointDefault","storePointer","storePointerProperty","pointer","registerSubEndpoint","name","sub_endpoint"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/network/","file":"blockchain_adapter.ts"}