UNPKG

caip-hedera

Version:
1 lines 33.6 kB
{"version":3,"file":"index.mjs","sources":["../node_modules/caip/dist/index.mjs","../src/utils.ts","../src/spec.ts","../src/assetName.ts","../src/hedera.ts"],"sourcesContent":["function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar CAIP2 = {\n name: \"chainId\",\n regex: \"[-:a-zA-Z0-9]{5,41}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\"\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\"\n }\n }\n }\n};\nvar CAIP10 = {\n name: \"accountId\",\n regex: \"[-:a-zA-Z0-9]{7,106}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\"\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\"\n },\n 2: {\n name: \"address\",\n regex: \"[a-zA-Z0-9]{1,64}\"\n }\n }\n }\n};\nvar AssetName$1 = {\n name: \"assetName\",\n regex: \"[-:a-zA-Z0-9]{5,73}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\"\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,64}\"\n }\n }\n }\n};\nvar CAIP19AssetType = {\n name: \"assetType\",\n regex: \"[-:a-zA-Z0-9]{11,115}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName$1\n }\n }\n};\nvar CAIP19AssetId = {\n name: \"assetId\",\n regex: \"[-:a-zA-Z0-9]{13,148}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName$1,\n 2: {\n name: \"tokenId\",\n regex: \"[-a-zA-Z0-9]{1,32}\"\n }\n }\n }\n};\nvar CAIP = {\n \"2\": CAIP2,\n \"10\": CAIP10,\n \"19\": {\n assetName: AssetName$1,\n assetType: CAIP19AssetType,\n assetId: CAIP19AssetId\n }\n};\n\nfunction splitParams(id, spec) {\n return id.split(spec.parameters.delimiter);\n}\nfunction getParams(id, spec) {\n var arr = splitParams(id, spec);\n var params = {};\n arr.forEach(function (value, index) {\n params[spec.parameters.values[index].name] = value;\n });\n return params;\n}\nfunction joinParams(params, spec) {\n return Object.values(spec.parameters.values).map(function (parameter) {\n var param = params[parameter.name];\n return typeof param === \"string\" ? param : joinParams(param, parameter);\n }).join(spec.parameters.delimiter);\n}\nfunction isValidId(id, spec) {\n if (!new RegExp(spec.regex).test(id)) return false;\n var params = splitParams(id, spec);\n if (params.length !== Object.keys(spec.parameters.values).length) return false;\n var matches = params.map(function (param, index) {\n return new RegExp(spec.parameters.values[index].regex).test(param);\n }).filter(function (x) {\n return !!x;\n });\n if (matches.length !== params.length) return false;\n return true;\n}\n\nvar ChainId = /*#__PURE__*/function () {\n function ChainId(params) {\n if (typeof params === \"string\") {\n params = ChainId.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n ChainId.parse = function parse(id) {\n if (!isValidId(id, this.spec)) {\n throw new Error(\"Invalid \" + this.spec.name + \" provided: \" + id);\n }\n\n return new ChainId(getParams(id, this.spec)).toJSON();\n };\n\n ChainId.format = function format(params) {\n return joinParams(params, this.spec);\n };\n\n var _proto = ChainId.prototype;\n\n _proto.toString = function toString() {\n return ChainId.format(this.toJSON());\n };\n\n _proto.toJSON = function toJSON() {\n return {\n namespace: this.namespace,\n reference: this.reference\n };\n };\n\n return ChainId;\n}();\nChainId.spec = CAIP[\"2\"];\n\nvar AccountId = /*#__PURE__*/function () {\n function AccountId(params) {\n if (typeof params === \"string\") {\n params = AccountId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.address = params.address;\n }\n\n AccountId.parse = function parse(id) {\n if (!isValidId(id, this.spec)) {\n throw new Error(\"Invalid \" + this.spec.name + \" provided: \" + id);\n }\n\n var _getParams = getParams(id, this.spec),\n namespace = _getParams.namespace,\n reference = _getParams.reference,\n address = _getParams.address;\n\n var chainId = new ChainId({\n namespace: namespace,\n reference: reference\n });\n return new AccountId({\n chainId: chainId,\n address: address\n }).toJSON();\n };\n\n AccountId.format = function format(params) {\n var chainId = new ChainId(params.chainId);\n\n var splitParams = _extends({}, chainId.toJSON(), {\n address: params.address\n });\n\n return joinParams(splitParams, this.spec);\n };\n\n var _proto = AccountId.prototype;\n\n _proto.toString = function toString() {\n return AccountId.format(this.toJSON());\n };\n\n _proto.toJSON = function toJSON() {\n return {\n chainId: this.chainId.toJSON(),\n address: this.address\n };\n };\n\n return AccountId;\n}();\nAccountId.spec = CAIP[\"10\"];\n\nvar AssetName = /*#__PURE__*/function () {\n function AssetName(params) {\n if (typeof params === \"string\") {\n params = AssetName.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n AssetName.parse = function parse(id) {\n if (!isValidId(id, this.spec)) {\n throw new Error(\"Invalid \" + this.spec.name + \" provided: \" + id);\n }\n\n return new AssetName(getParams(id, this.spec)).toJSON();\n };\n\n AssetName.format = function format(params) {\n return joinParams(params, this.spec);\n };\n\n var _proto = AssetName.prototype;\n\n _proto.toString = function toString() {\n return AssetName.format(this.toJSON());\n };\n\n _proto.toJSON = function toJSON() {\n return {\n namespace: this.namespace,\n reference: this.reference\n };\n };\n\n return AssetName;\n}();\nAssetName.spec = CAIP[\"19\"].assetName;\n\nvar AssetType = /*#__PURE__*/function () {\n function AssetType(params) {\n if (typeof params === \"string\") {\n params = AssetType.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n }\n\n AssetType.parse = function parse(id) {\n if (!isValidId(id, this.spec)) {\n throw new Error(\"Invalid \" + this.spec.name + \" provided: \" + id);\n }\n\n return new AssetType(getParams(id, this.spec)).toJSON();\n };\n\n AssetType.format = function format(params) {\n return joinParams(params, this.spec);\n };\n\n var _proto = AssetType.prototype;\n\n _proto.toString = function toString() {\n return AssetType.format(this.toJSON());\n };\n\n _proto.toJSON = function toJSON() {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName\n };\n };\n\n return AssetType;\n}();\nAssetType.spec = CAIP[\"19\"].assetType;\n\nvar AssetId = /*#__PURE__*/function () {\n function AssetId(params) {\n if (typeof params === \"string\") {\n params = AssetId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n this.tokenId = params.tokenId;\n }\n\n AssetId.parse = function parse(id) {\n if (!isValidId(id, this.spec)) {\n throw new Error(\"Invalid \" + this.spec.name + \" provided: \" + id);\n }\n\n return new AssetId(getParams(id, this.spec)).toJSON();\n };\n\n AssetId.format = function format(params) {\n return joinParams(params, this.spec);\n };\n\n var _proto = AssetId.prototype;\n\n _proto.toString = function toString() {\n return AssetId.format(this.toJSON());\n };\n\n _proto.toJSON = function toJSON() {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName.toJSON(),\n tokenId: this.tokenId\n };\n };\n\n return AssetId;\n}();\nAssetId.spec = CAIP[\"19\"].assetId;\n\nexport { AccountId, AssetId, AssetType, ChainId };\n//# sourceMappingURL=index.mjs.map\n","import { IdentifierSpec, Params } from \"./types\";\n\nexport function splitParams(id: string, spec: IdentifierSpec): string[] {\n return id.split(spec.parameters.delimiter);\n}\n\nexport function getParams<T>(id: string, spec: IdentifierSpec): T {\n const arr = splitParams(id, spec);\n const params = {};\n arr.forEach((value, index) => {\n params[spec.parameters.values[index].name] = value;\n });\n return params as T;\n}\n\nexport function joinParams(params: Params, spec: IdentifierSpec): string {\n return Object.values(spec.parameters.values)\n .map(parameter => {\n const param = params[parameter.name];\n return typeof param === \"string\"\n ? param\n : joinParams(param, parameter as IdentifierSpec);\n })\n .join(spec.parameters.delimiter);\n}\n\nexport function isValidId(id: string, spec: IdentifierSpec): boolean {\n // console.log(\"id\", id);\n // console.log(\"spec\", spec);\n // console.log(\"before regex\");\n if (!new RegExp(spec.regex).test(id)) return false;\n // console.log(\"after regex\");\n // console.log(\"before split\");\n const params = splitParams(id, spec);\n // console.log(\"after split\");\n // console.log(\"params\", params);\n // console.log(\"before length\");\n if (params.length !== Object.keys(spec.parameters.values).length)\n return false;\n // console.log(\"after length\");\n // console.log(\"before matches\");\n const matches = params\n .map((param, index) => {\n // console.log(`PARAM ${param} INDEX ${index}`);\n // console.log(spec.parameters.values[index].regex);\n return new RegExp(spec.parameters.values[index].regex).test(param);\n })\n .filter(x => !!x);\n if (matches.length !== params.length) return false;\n // console.log(\"after matches\");\n return true;\n}\n","import { IdentifierSpec } from \"./types\";\n\nconst CAIP2: IdentifierSpec = {\n name: \"chainId\",\n regex: \"hedera:[-a-zA-Z0-9]{5,32}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"hedera\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{5,32}\",\n },\n },\n },\n};\n\nconst CAIP10: IdentifierSpec = {\n name: \"accountId\",\n regex:\n \"hedera:[-a-zA-Z0-9]{5,32}:[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"hedera\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{5,32}\",\n },\n 2: {\n name: \"address\",\n regex: \"[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}\",\n },\n },\n },\n};\n\n// represents namespace:reference in CAIP-19\nconst AssetName: IdentifierSpec = {\n name: \"assetName\",\n regex: \"[-a-zA-Z]{3,5}:[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-zA-Z]{3,5}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}\",\n },\n },\n },\n};\n\nconst CAIP19_AssetType: IdentifierSpec = {\n name: \"assetType\",\n regex:\n \"hedera:[-a-zA-Z0-9]{5,32}/[-a-zA-Z]{3,5}:[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n },\n },\n};\n\nconst CAIP19_AssetId: IdentifierSpec = {\n name: \"assetId\",\n regex:\n \"hedera:[-a-zA-Z0-9]{5,32}/[-a-zA-Z]{3,5}:[0-9]{1,19}.[0-9]{1,19}.[0-9]{1,19}(-[a-z]{5}){0,1}/[0-9]{1,19}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n 2: {\n name: \"tokenId\",\n regex: \"[0-9]{1,19}\",\n },\n },\n },\n};\n\nexport const Specs = [\n CAIP2,\n CAIP10,\n AssetName,\n CAIP19_AssetType,\n CAIP19_AssetId,\n];\n","import { Specs } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetNameParams {\n namespace: string;\n reference: string;\n}\n\nexport class AssetName {\n public static spec: IdentifierSpec = Specs[2];\n\n public static parse(id: string): AssetNameParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetName(getParams<AssetNameParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetNameParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public namespace: string;\n public reference: string;\n\n constructor(params: AssetNameParams | string) {\n if (typeof params === \"string\") {\n params = AssetName.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n public toString(): string {\n return AssetName.format(this.toJSON());\n }\n\n public toJSON(): AssetNameParams {\n return {\n namespace: this.namespace,\n reference: this.reference,\n };\n }\n}\n","import * as caip from \"caip\";\nimport * as utils from \"./utils\";\nimport { Specs } from \"./spec\";\nimport { AssetName, AssetNameParams } from \"./assetName\";\n\nexport interface HederaParams {\n namespace?: string | null;\n reference?: string | null;\n chainId?: string | caip.ChainIdParams | null;\n address?: string | null;\n assetName?: string | AssetNameParams | null;\n tokenId?: string | null;\n}\n\nexport class Hedera {\n public static parse(id: string): HederaParams {\n let params: HederaParams = {\n namespace: null,\n reference: null,\n chainId: null,\n address: null,\n assetName: null,\n tokenId: null,\n };\n\n if (new RegExp(Specs[4].regex).test(id) === true) {\n if (!utils.isValidId(id, Specs[4])) {\n throw new Error(`Invalid ${Specs[4].name} provided ${id}`);\n }\n params = utils.getParams<caip.AssetIdParams>(id, Specs[4]);\n } else if (new RegExp(Specs[3].regex).test(id) === true) {\n if (!utils.isValidId(id, Specs[3])) {\n throw new Error(`Invalid ${Specs[3].name} provided ${id}`);\n }\n params = utils.getParams<caip.AssetTypeParams>(id, Specs[3]);\n } else if (new RegExp(Specs[1].regex).test(id) === true) {\n if (!utils.isValidId(id, Specs[1])) {\n throw new Error(`Invalid ${Specs[1].name} provided ${id}`);\n }\n\n const { namespace, reference, address } = utils.getParams<\n caip.AccountIdSplitParams\n >(id, Specs[1]);\n params = {\n chainId: { namespace: namespace, reference: reference },\n address: address,\n };\n } else if (new RegExp(Specs[0].regex).test(id) === true) {\n if (!utils.isValidId(id, Specs[0])) {\n throw new Error(`Invalid ${Specs[0].name} provided ${id}`);\n }\n\n params = utils.getParams<caip.ChainIdParams>(id, Specs[0]);\n }\n return new Hedera(params).toJSON();\n }\n\n public static format(params: HederaParams): string {\n if (params.hasOwnProperty(\"tokenId\")) {\n return utils.joinParams(params as any, Specs[4]);\n } else if (params.hasOwnProperty(\"assetName\")) {\n return utils.joinParams(params as any, Specs[3]);\n } else if (params.hasOwnProperty(\"address\")) {\n const pars: caip.AccountIdParams = params as caip.AccountIdParams;\n const chain = new caip.ChainId(params.chainId as caip.ChainIdParams);\n const splitParams: caip.AccountIdSplitParams = {\n ...chain.toJSON(),\n address: pars.address,\n };\n return utils.joinParams(splitParams as any, Specs[1]);\n } else if (params.hasOwnProperty(\"namespace\")) {\n return utils.joinParams(params as any, Specs[0]);\n }\n return \"\";\n }\n\n public namespace?: string | null;\n public reference?: string | null;\n public chainId?: caip.ChainId | null;\n public address?: string | null;\n public assetName?: AssetName | null;\n public tokenId?: string | null;\n\n constructor(params: HederaParams | string) {\n if (typeof params === \"string\") {\n params = Hedera.parse(params);\n }\n\n this.namespace = params.namespace != null ? params.namespace : null;\n this.reference = params.reference != null ? params.reference : null;\n this.chainId =\n params.chainId != null\n ? new caip.ChainId(params.chainId as string | caip.ChainIdParams)\n : null;\n this.address = params.address != null ? params.address : null;\n\n this.assetName =\n params.assetName != null\n ? new AssetName(params.assetName as string | AssetNameParams)\n : null;\n this.tokenId = params.tokenId != null ? params.tokenId : null;\n }\n\n public toString(): string {\n return Hedera.format(this.toJSON());\n }\n\n public toJSON(): HederaParams {\n const json: HederaParams = {};\n\n // Only include properties that are not null or undefined\n if (this.namespace !== null && this.namespace !== undefined) {\n json.namespace = this.namespace;\n }\n if (this.reference !== null && this.reference !== undefined) {\n json.reference = this.reference;\n }\n if (this.chainId !== null && this.chainId !== undefined) {\n json.chainId = this.chainId.toJSON();\n }\n if (this.address !== null && this.address !== undefined) {\n json.address = this.address;\n }\n if (this.assetName !== null && this.assetName !== undefined) {\n json.assetName = this.assetName.toJSON();\n }\n if (this.tokenId !== null && this.tokenId !== undefined) {\n json.tokenId = this.tokenId;\n }\n\n return json;\n }\n}\n"],"names":["CAIP2","CAIP10","AssetName$1","splitParams","getParams","joinParams","isValidId","id","spec","split","parameters","delimiter","arr","params","forEach","value","index","values","name","Object","map","parameter","param","join","RegExp","regex","test","length","keys","matches","filter","x","AssetName","CAIP19_AssetType","CAIP19_AssetId","Specs","parse","Error","toJSON","format","namespace","reference","_proto","prototype","toString","Hedera","chainId","address","assetName","tokenId","utils","_utils$getParams","hasOwnProperty","pars","chain","caip","_extends","json","undefined"],"mappings":"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"}