@hashgraphonline/standards-sdk 0.0.66 → 0.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/hcs-10/base-client.d.ts +20 -5
- package/dist/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts +12 -2
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/standards-sdk.es101.js +16 -2282
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +4 -15
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +39 -5
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +39 -38
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +34 -37
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +75 -34
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +2281 -77
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +1 -1
- package/dist/es/standards-sdk.es114.js +2 -2
- package/dist/es/standards-sdk.es12.js +2 -2
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es17.js +1 -1
- package/dist/es/standards-sdk.es18.js +2 -2
- package/dist/es/standards-sdk.es21.js +3 -36
- package/dist/es/standards-sdk.es21.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +4167 -48
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +4 -6626
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +36 -3
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +48 -2
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +6525 -939
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +2 -5
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +961 -4087
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +4 -2
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +2 -84
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es34.js +3 -23
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +143 -127
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +350 -77
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +4 -193
- package/dist/es/standards-sdk.es37.js.map +1 -1
- package/dist/es/standards-sdk.es38.js +158 -417
- package/dist/es/standards-sdk.es38.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +75 -19
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es40.js +103 -128
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es41.js +48 -14
- package/dist/es/standards-sdk.es41.js.map +1 -1
- package/dist/es/standards-sdk.es42.js +9 -28
- package/dist/es/standards-sdk.es42.js.map +1 -1
- package/dist/es/standards-sdk.es43.js +91 -23
- package/dist/es/standards-sdk.es43.js.map +1 -1
- package/dist/es/standards-sdk.es44.js +3 -20
- package/dist/es/standards-sdk.es44.js.map +1 -1
- package/dist/es/standards-sdk.es45.js +2 -44
- package/dist/es/standards-sdk.es45.js.map +1 -1
- package/dist/es/standards-sdk.es46.js +108 -13
- package/dist/es/standards-sdk.es46.js.map +1 -1
- package/dist/es/standards-sdk.es47.js +71 -58
- package/dist/es/standards-sdk.es47.js.map +1 -1
- package/dist/es/standards-sdk.es48.js +4 -1287
- package/dist/es/standards-sdk.es48.js.map +1 -1
- package/dist/es/standards-sdk.es49.js +4 -31
- package/dist/es/standards-sdk.es49.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +67 -18
- package/dist/es/standards-sdk.es5.js.map +1 -1
- package/dist/es/standards-sdk.es50.js +220 -5
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +53 -154
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +68 -792
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +21 -172
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +162 -131
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +90 -3
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/standards-sdk.es56.js +5 -363
- package/dist/es/standards-sdk.es56.js.map +1 -1
- package/dist/es/standards-sdk.es57.js +142 -5
- package/dist/es/standards-sdk.es57.js.map +1 -1
- package/dist/es/standards-sdk.es58.js +185 -169
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +437 -80
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es60.js +21 -110
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +130 -43
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +17 -9
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +22 -90
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +28 -3
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +21 -2
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +36 -105
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +15 -71
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +60 -5
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +1288 -4
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +52 -7
- package/dist/es/standards-sdk.es7.js.map +1 -1
- package/dist/es/standards-sdk.es70.js +131 -204
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +81 -55
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +32 -69
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +154 -16
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +790 -24
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +29 -23
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +61 -36
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +50 -3
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +8 -162
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +60 -27
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +3 -3
- package/dist/es/standards-sdk.es8.js.map +1 -1
- package/dist/es/standards-sdk.es80.js +6 -63
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +12 -47
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +7 -10
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +41 -61
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +2 -6
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +134 -13
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +171 -6
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +27 -45
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +26 -2
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +38 -136
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +1 -1
- package/dist/es/standards-sdk.es90.js +93 -164
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +2 -101
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +16 -2
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +408 -15
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +17 -405
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +1 -1
- package/dist/es/standards-sdk.es98.js +3 -3
- package/dist/umd/hcs-10/base-client.d.ts +20 -5
- package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
- package/dist/umd/hcs-10/sdk.d.ts +12 -2
- package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +1 -1
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +9 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es69.js","sources":["../../node_modules/axios/lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n"],"names":[],"mappings":";AAWe,SAAS,aAAa,SAAS;AAC5C,SAAO,MAAM,SAAS,OAAO,KAAM,QAAQ,iBAAiB;AAC9D;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es69.js","sources":["../../node_modules/ethers/lib.esm/abi/fragments.js"],"sourcesContent":["/**\n * A fragment is a single item from an ABI, which may represent any of:\n *\n * - [Functions](FunctionFragment)\n * - [Events](EventFragment)\n * - [Constructors](ConstructorFragment)\n * - Custom [Errors](ErrorFragment)\n * - [Fallback or Receive](FallbackFragment) functions\n *\n * @_subsection api/abi/abi-coder:Fragments [about-fragments]\n */\nimport { defineProperties, getBigInt, getNumber, assert, assertPrivate, assertArgument } from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\nclass TokenString {\n #offset;\n #tokens;\n get offset() { return this.#offset; }\n get length() { return this.#tokens.length - this.#offset; }\n constructor(tokens) {\n this.#offset = 0;\n this.#tokens = tokens.slice();\n }\n clone() { return new TokenString(this.#tokens); }\n reset() { this.#offset = 0; }\n #subTokenString(from = 0, to = 0) {\n return new TokenString(this.#tokens.slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n }));\n }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n const top = this.peek();\n throw new Error(`expected ${type}; got ${top.type} ${JSON.stringify(top.text)}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n this.#offset = top.match + 1;\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (this.#offset < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(this.#subTokenString(this.#offset + 1, link));\n this.#offset = link;\n }\n this.#offset = top.match + 1;\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (this.#offset >= this.#tokens.length) {\n throw new Error(\"out-of-bounds\");\n }\n return this.#tokens[this.#offset];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n const result = this.peek();\n this.#offset++;\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = this.#offset; i < this.#tokens.length; i++) {\n const token = this.#tokens[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return `<TokenString ${tokens.join(\" \")}>`;\n }\n}\nfunction lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespacePrefix);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdPrefix);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumberPrefix);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens at offset ${tokens.offset}: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n assertArgument(match, \"invalid type\", \"type\", type);\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n/**\n * Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n /**\n * The local name of the parameter (or ``\"\"`` if unbound)\n */\n name;\n /**\n * The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n * ``\"uint256[3][]\"``)\n */\n type;\n /**\n * The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n */\n baseType;\n /**\n * True if the parameters is indexed.\n *\n * For non-indexable types this is ``null``.\n */\n indexed;\n /**\n * The components for the tuple.\n *\n * For non-tuple types this is ``null``.\n */\n components;\n /**\n * The array length, or ``-1`` for dynamic-lengthed arrays.\n *\n * For non-array types this is ``null``.\n */\n arrayLength;\n /**\n * The type of each child in the array.\n *\n * For non-array types this is ``null``.\n */\n arrayChildren;\n /**\n * @private\n */\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n /**\n * Return a string representation of this type.\n *\n * For example,\n *\n * ``sighash\" => \"(uint256,address)\"``\n *\n * ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n *\n * ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n const name = this.name || \"\";\n if (this.isArray()) {\n const result = JSON.parse(this.arrayChildren.format(\"json\"));\n result.name = name;\n result.type += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n return JSON.stringify(result);\n }\n const result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== \"sighash\") {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === \"full\" && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n /**\n * Returns true if %%this%% is an Array type.\n *\n * This provides a type gaurd ensuring that [[arrayChildren]]\n * and [[arrayLength]] are non-null.\n */\n isArray() {\n return (this.baseType === \"array\");\n }\n /**\n * Returns true if %%this%% is a Tuple type.\n *\n * This provides a type gaurd ensuring that [[components]]\n * is non-null.\n */\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n /**\n * Returns true if %%this%% is an Indexable type.\n *\n * This provides a type gaurd ensuring that [[indexed]]\n * is non-null.\n */\n isIndexable() {\n return (this.indexed != null);\n }\n /**\n * Walks the **ParamType** with %%value%%, calling %%process%%\n * on each type, destructing the %%value%% recursively.\n */\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v) => (_this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v, i) => (_this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n #walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n childType.#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invalid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (result.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n components[index].#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n }\n /**\n * Walks the **ParamType** with %%value%%, asynchronously calling\n * %%process%% on each type, destructing the %%value%% recursively.\n *\n * This can be used to resolve ENS names by walking and resolving each\n * ``\"address\"`` type.\n */\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n this.#walkAsync(promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n /**\n * Creates a new **ParamType** for %%obj%%.\n *\n * If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n * otherwise the ``indexed`` keyword will throw an error.\n */\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ParamType.from(lex(obj), allowIndexed);\n }\n catch (error) {\n assertArgument(false, \"invalid param type\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(obj, setify([\"tuple\"])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = obj.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(obj.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (obj.length && obj.peekType(\"BRACKET\")) {\n const bracket = obj.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(obj, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (obj.peekType(\"ID\") ? obj.pop().text : \"\");\n if (obj.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n const name = obj.name;\n assertArgument(!name || (typeof (name) === \"string\" && name.match(regexId)), \"invalid name\", \"obj.name\", name);\n let indexed = obj.indexed;\n if (indexed != null) {\n assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type === \"tuple\" || type.startsWith(\"tuple(\" /* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n }\n /**\n * Returns true if %%value%% is a **ParamType**.\n */\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n/**\n * An abstract class to represent An individual fragment from a parse ABI.\n */\nexport class Fragment {\n /**\n * The type of the fragment.\n */\n type;\n /**\n * The inputs for the fragment.\n */\n inputs;\n /**\n * @private\n */\n constructor(guard, type, inputs) {\n assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n /**\n * Creates a new **Fragment** for %%obj%%, wich can be any supported\n * ABI frgament type.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n // Try parsing JSON...\n try {\n Fragment.from(JSON.parse(obj));\n }\n catch (e) { }\n // ...otherwise, use the human-readable lexer\n return Fragment.from(lex(obj));\n }\n if (obj instanceof TokenString) {\n // Human-readable ABI (already lexed)\n const type = obj.peekKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n }\n else if (typeof (obj) === \"object\") {\n // JSON ABI\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n assert(false, `unsupported type: ${obj.type}`, \"UNSUPPORTED_OPERATION\", {\n operation: \"Fragment.from\"\n });\n }\n assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n }\n /**\n * Returns true if %%value%% is a [[ConstructorFragment]].\n */\n static isConstructor(value) {\n return ConstructorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[ErrorFragment]].\n */\n static isError(value) {\n return ErrorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[EventFragment]].\n */\n static isEvent(value) {\n return EventFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[FunctionFragment]].\n */\n static isFunction(value) {\n return FunctionFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[StructFragment]].\n */\n static isStruct(value) {\n return StructFragment.isFragment(value);\n }\n}\n/**\n * An abstract class to represent An individual fragment\n * which has a name from a parse ABI.\n */\nexport class NamedFragment extends Fragment {\n /**\n * The name of the fragment.\n */\n name;\n /**\n * @private\n */\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n assertArgument(typeof (name) === \"string\" && name.match(regexId), \"invalid identifier\", \"name\", name);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n}\n/**\n * A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"error\", name, inputs);\n Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n }\n /**\n * The Custom Error selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this fragment as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n /**\n * Returns a new **ErrorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ErrorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ErrorFragment.from(lex(obj));\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"error\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new ErrorFragment(_guard, name, inputs);\n }\n return new ErrorFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **ErrorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ErrorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n /**\n * Whether this event is anonymous.\n */\n anonymous;\n /**\n * @private\n */\n constructor(guard, name, inputs, anonymous) {\n super(guard, \"event\", name, inputs);\n Object.defineProperty(this, internal, { value: EventFragmentInternal });\n defineProperties(this, { anonymous });\n }\n /**\n * The Event topic hash.\n */\n get topicHash() {\n return id(this.format(\"sighash\"));\n }\n /**\n * Returns a string representation of this event as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\" && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n /**\n * Return the topic hash for an event with %%name%% and %%params%%.\n */\n static getTopicHash(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new EventFragment(_guard, name, params, false);\n return fragment.topicHash;\n }\n /**\n * Returns a new **EventFragment** for %%obj%%.\n */\n static from(obj) {\n if (EventFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return EventFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"event\", obj);\n const inputs = consumeParams(obj, true);\n const anonymous = !!consumeKeywords(obj, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(obj);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n return new EventFragment(_guard, obj.name, obj.inputs ? obj.inputs.map((p) => ParamType.from(p, true)) : [], !!obj.anonymous);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **EventFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === EventFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n /**\n * Whether the constructor can receive an endowment.\n */\n payable;\n /**\n * The recommended gas limit for deployment or ``null``.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n defineProperties(this, { payable, gas });\n }\n /**\n * Returns a string representation of this constructor as %%format%%.\n */\n format(format) {\n assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n if (format === \"json\") {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n if (this.payable) {\n result.push(\"payable\");\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n /**\n * Returns a new **ConstructorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ConstructorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ConstructorFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n consumeKeywords(obj, setify([\"constructor\"]));\n const inputs = consumeParams(obj);\n const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n }\n return new ConstructorFragment(_guard, \"constructor\", obj.inputs ? obj.inputs.map(ParamType.from) : [], !!obj.payable, (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **ConstructorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ConstructorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n constructor(guard, inputs, payable) {\n super(guard, \"fallback\", inputs);\n Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n defineProperties(this, { payable });\n }\n /**\n * Returns a string representation of this fallback as %%format%%.\n */\n format(format) {\n const type = ((this.inputs.length === 0) ? \"receive\" : \"fallback\");\n if (format === \"json\") {\n const stateMutability = (this.payable ? \"payable\" : \"nonpayable\");\n return JSON.stringify({ type, stateMutability });\n }\n return `${type}()${this.payable ? \" payable\" : \"\"}`;\n }\n /**\n * Returns a new **FallbackFragment** for %%obj%%.\n */\n static from(obj) {\n if (FallbackFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FallbackFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const errorObj = obj.toString();\n const topIsValid = obj.peekKeyword(setify([\"fallback\", \"receive\"]));\n assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n const type = obj.popKeyword(setify([\"fallback\", \"receive\"]));\n // receive()\n if (type === \"receive\") {\n const inputs = consumeParams(obj);\n assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n consumeKeywords(obj, setify([\"payable\"]));\n consumeEoi(obj);\n return new FallbackFragment(_guard, [], true);\n }\n // fallback() [payable]\n // fallback(bytes) [payable] returns (bytes)\n let inputs = consumeParams(obj);\n if (inputs.length) {\n assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\", \"invalid fallback inputs\", \"obj.inputs\", inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n else {\n inputs = [ParamType.from(\"bytes\")];\n }\n const mutability = consumeMutability(obj);\n assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n const outputs = consumeParams(obj);\n assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\", \"invalid fallback outputs\", \"obj.outputs\", outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n consumeEoi(obj);\n return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n }\n if (obj.type === \"receive\") {\n return new FallbackFragment(_guard, [], true);\n }\n if (obj.type === \"fallback\") {\n const inputs = [ParamType.from(\"bytes\")];\n const payable = (obj.stateMutability === \"payable\");\n return new FallbackFragment(_guard, inputs, payable);\n }\n assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FallbackFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FallbackFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n /**\n * If the function is constant (e.g. ``pure`` or ``view`` functions).\n */\n constant;\n /**\n * The returned types for the result of calling this function.\n */\n outputs;\n /**\n * The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n * or ``pure``)\n */\n stateMutability;\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n /**\n * The recommended gas limit to send when calling this function.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, \"function\", name, inputs);\n Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n /**\n * The Function selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this function as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\") {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n /**\n * Return the selector for a function with %%name%% and %%params%%.\n */\n static getSelector(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new FunctionFragment(_guard, name, \"view\", params, [], null);\n return fragment.selector;\n }\n /**\n * Returns a new **FunctionFragment** for %%obj%%.\n */\n static from(obj) {\n if (FunctionFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FunctionFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"function\", obj);\n const inputs = consumeParams(obj);\n const mutability = consumeMutability(obj);\n let outputs = [];\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(obj);\n }\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n let stateMutability = obj.stateMutability;\n // Use legacy Solidity ABI logic if stateMutability is missing\n if (stateMutability == null) {\n stateMutability = \"payable\";\n if (typeof (obj.constant) === \"boolean\") {\n stateMutability = \"view\";\n if (!obj.constant) {\n stateMutability = \"payable\";\n if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n }\n else if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n // @TODO: verifyState for stateMutability (e.g. throw if\n // payable: false but stateMutability is \"nonpayable\")\n return new FunctionFragment(_guard, obj.name, stateMutability, obj.inputs ? obj.inputs.map(ParamType.from) : [], obj.outputs ? obj.outputs.map(ParamType.from) : [], (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FunctionFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FunctionFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"struct\", name, inputs);\n Object.defineProperty(this, internal, { value: StructFragmentInternal });\n }\n /**\n * Returns a string representation of this struct as %%format%%.\n */\n format() {\n throw new Error(\"@TODO\");\n }\n /**\n * Returns a new **StructFragment** for %%obj%%.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n try {\n return StructFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"struct\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new StructFragment(_guard, name, inputs);\n }\n return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n // @TODO: fix this return type\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **StructFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === StructFragmentInternal);\n }\n}\n//# sourceMappingURL=fragments.js.map"],"names":["result","value","type","indexed","name","inputs"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import Buffer from "./standards-sdk.es20.js";
|
|
2
2
|
import { Client, PrivateKey, AccountCreateTransaction, Hbar, CustomFixedFee, AccountId, KeyList, TopicCreateTransaction, PublicKey, TopicMessageSubmitTransaction, TopicId, Transaction } from "@hashgraph/sdk";
|
|
3
3
|
import { AccountCreationError, TopicCreationError, ConnectionConfirmationError, PayloadSizeError } from "./standards-sdk.es6.js";
|
|
4
|
-
import { InscriptionSDK } from "./standards-sdk.
|
|
4
|
+
import { InscriptionSDK } from "./standards-sdk.es26.js";
|
|
5
5
|
import { Logger } from "./standards-sdk.es14.js";
|
|
6
6
|
import { HCS10BaseClient, Hcs10MemoType } from "./standards-sdk.es5.js";
|
|
7
|
-
import { m as mimeTypesExports } from "./standards-sdk.
|
|
7
|
+
import { m as mimeTypesExports } from "./standards-sdk.es21.js";
|
|
8
8
|
import { InboundTopicType } from "./standards-sdk.es13.js";
|
|
9
9
|
import { HCS11Client } from "./standards-sdk.es12.js";
|
|
10
10
|
import { accountIdsToExemptKeys } from "./standards-sdk.es15.js";
|
|
@@ -323,7 +323,7 @@ class HCS10Client extends HCS10BaseClient {
|
|
|
323
323
|
}
|
|
324
324
|
/**
|
|
325
325
|
* Handles a connection request from another account
|
|
326
|
-
* @param inboundTopicId Inbound topic ID
|
|
326
|
+
* @param inboundTopicId Inbound topic ID of your agent
|
|
327
327
|
* @param requestingAccountId Requesting account ID
|
|
328
328
|
* @param connectionRequestId Connection request ID
|
|
329
329
|
* @param connectionFeeConfig Optional fee configuration for the connection topic
|
|
@@ -385,12 +385,36 @@ class HCS10Client extends HCS10BaseClient {
|
|
|
385
385
|
connectionRequestId,
|
|
386
386
|
"Connection accepted. Looking forward to collaborating!"
|
|
387
387
|
);
|
|
388
|
+
const accountTopics = await this.retrieveCommunicationTopics(accountId);
|
|
389
|
+
const requestingAccountTopics = await this.retrieveCommunicationTopics(
|
|
390
|
+
requestingAccountId
|
|
391
|
+
);
|
|
392
|
+
const requestingAccountOperatorId = `${requestingAccountTopics.inboundTopic}@${requestingAccountId}`;
|
|
393
|
+
await this.recordOutboundConnectionConfirmation({
|
|
394
|
+
outboundTopicId: accountTopics.outboundTopic,
|
|
395
|
+
requestorOutboundTopicId: requestingAccountTopics.outboundTopic,
|
|
396
|
+
connectionRequestId,
|
|
397
|
+
confirmedRequestId: confirmedConnectionSequenceNumber,
|
|
398
|
+
connectionTopicId,
|
|
399
|
+
operatorId: requestingAccountOperatorId,
|
|
400
|
+
memo: `Connection established with ${requestingAccountId}`
|
|
401
|
+
});
|
|
388
402
|
return {
|
|
389
403
|
connectionTopicId,
|
|
390
404
|
confirmedConnectionSequenceNumber,
|
|
391
405
|
operatorId
|
|
392
406
|
};
|
|
393
407
|
}
|
|
408
|
+
/**
|
|
409
|
+
* Confirms a connection request from another account
|
|
410
|
+
* @param inboundTopicId Inbound topic ID
|
|
411
|
+
* @param connectionTopicId Connection topic ID
|
|
412
|
+
* @param connectedAccountId Connected account ID
|
|
413
|
+
* @param connectionId Connection ID
|
|
414
|
+
* @param memo Memo for the connection request
|
|
415
|
+
* @param submitKey Optional submit key
|
|
416
|
+
* @returns Sequence number of the confirmed connection
|
|
417
|
+
*/
|
|
394
418
|
async confirmConnection(inboundTopicId, connectionTopicId, connectedAccountId, connectionId, memo, submitKey) {
|
|
395
419
|
const operatorId = await this.getOperatorId();
|
|
396
420
|
this.logger.info(`Confirming connection with ID ${connectionId}`);
|
|
@@ -572,7 +596,7 @@ class HCS10Client extends HCS10BaseClient {
|
|
|
572
596
|
this.logger.info(
|
|
573
597
|
`Submitted connection request to topic ID: ${inboundTopicId}`
|
|
574
598
|
);
|
|
575
|
-
const outboundTopic = await this.
|
|
599
|
+
const outboundTopic = await this.retrieveCommunicationTopics(accountId);
|
|
576
600
|
const responseSequenceNumber = response.topicSequenceNumber?.toNumber();
|
|
577
601
|
if (!responseSequenceNumber) {
|
|
578
602
|
throw new Error("Failed to get response sequence number");
|
|
@@ -639,7 +663,7 @@ class HCS10Client extends HCS10BaseClient {
|
|
|
639
663
|
* @param delayMs Delay between attempts in milliseconds
|
|
640
664
|
* @returns Connection confirmation details
|
|
641
665
|
*/
|
|
642
|
-
async waitForConnectionConfirmation(inboundTopicId, connectionRequestId, maxAttempts = 60, delayMs = 2e3) {
|
|
666
|
+
async waitForConnectionConfirmation(inboundTopicId, connectionRequestId, maxAttempts = 60, delayMs = 2e3, recordConfirmation = true) {
|
|
643
667
|
this.logger.info(
|
|
644
668
|
`Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`
|
|
645
669
|
);
|
|
@@ -657,13 +681,34 @@ class HCS10Client extends HCS10BaseClient {
|
|
|
657
681
|
if (connectionCreatedMessages.length > 0) {
|
|
658
682
|
for (const message of connectionCreatedMessages) {
|
|
659
683
|
if (Number(message.connection_id) === Number(connectionRequestId)) {
|
|
660
|
-
|
|
661
|
-
return {
|
|
684
|
+
const confirmationResult = {
|
|
662
685
|
connectionTopicId: message.connection_topic_id,
|
|
663
686
|
sequence_number: Number(message.sequence_number),
|
|
664
687
|
confirmedBy: message.operator_id,
|
|
665
688
|
memo: message.m
|
|
666
689
|
};
|
|
690
|
+
const confirmedByAccountId = this.extractAccountFromOperatorId(
|
|
691
|
+
confirmationResult.confirmedBy
|
|
692
|
+
);
|
|
693
|
+
const account = this.getAccountAndSigner();
|
|
694
|
+
const confirmedByConnectionTopics = await this.retrieveCommunicationTopics(confirmedByAccountId);
|
|
695
|
+
const agentConnectionTopics = await this.retrieveCommunicationTopics(account.accountId);
|
|
696
|
+
this.logger.info(
|
|
697
|
+
"Connection confirmation found",
|
|
698
|
+
confirmationResult
|
|
699
|
+
);
|
|
700
|
+
if (recordConfirmation) {
|
|
701
|
+
await this.recordOutboundConnectionConfirmation({
|
|
702
|
+
requestorOutboundTopicId: confirmedByConnectionTopics.outboundTopic,
|
|
703
|
+
outboundTopicId: agentConnectionTopics.outboundTopic,
|
|
704
|
+
connectionRequestId,
|
|
705
|
+
confirmedRequestId: confirmationResult.sequence_number,
|
|
706
|
+
connectionTopicId: confirmationResult.connectionTopicId,
|
|
707
|
+
operatorId: confirmationResult.confirmedBy,
|
|
708
|
+
memo: confirmationResult.memo || "Connection confirmed"
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
return confirmationResult;
|
|
667
712
|
}
|
|
668
713
|
}
|
|
669
714
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es7.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n AgentCreationState,\n RegistrationProgressCallback,\n InscribePfpResponse,\n} from './types';\nimport {\n HCS11Client,\n AgentMetadata as HCS11AgentMetadata,\n SocialLink,\n SocialPlatform,\n InboundTopicType,\n AgentMetadata,\n} from '../hcs-11';\nimport { FeeConfigBuilderInterface, TopicFeeConfig } from '../fees';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\nimport { Hcs10MemoType } from './base-client';\nimport { AgentBuilder } from '../hcs-11/agent-builder';\nimport { inscribe } from '../inscribe/inscriber';\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic for an agent\n * @param accountId The account ID associated with the inbound topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param ttl Optional Time-To-Live for the topic memo, defaults to 60\n * @param feeConfigBuilder Optional fee configuration builder for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n ttl: number = 60,\n feeConfigBuilder?: FeeConfigBuilderInterface\n ): Promise<string> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl,\n });\n\n let submitKey: boolean | PublicKey | KeyList | undefined;\n let feeConfig: TopicFeeConfig | undefined;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n submitKey = false;\n break;\n case InboundTopicType.CONTROLLED:\n submitKey = true;\n break;\n case InboundTopicType.FEE_BASED:\n submitKey = true;\n if (!feeConfigBuilder) {\n throw new Error(\n 'Fee configuration builder is required for fee-based topics'\n );\n }\n feeConfig = feeConfigBuilder.build();\n break;\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n\n return this.createTopic(memo, true, submitKey, feeConfig);\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @param ttl Optional Time-To-Live for the topic memos, defaults to 60\n * @returns Object with topic IDs\n */\n async createAgent(\n builder: AgentBuilder,\n ttl: number = 60\n ): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl,\n });\n const outboundTopicId = await this.createTopic(outboundMemo, true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n ttl,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.bio,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n config.pfpBuffer && config.pfpBuffer.length > 0\n ? config.pfpBuffer\n : undefined,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n inboundTopicId,\n outboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentBio Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentBio: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.warn(\n `Failed to inscribe profile picture: ${pfpResult.error}, proceeding without pfp`\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n pfpTopicId = existingPfpTopicId;\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as HCS11AgentMetadata);\n\n const formattedSocials: SocialLink[] | undefined = metadata.socials\n ? (Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => ({\n platform: platform as SocialPlatform,\n handle: handle as string,\n })) as SocialLink[])\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentBio,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @param ttl Optional ttl parameter with default\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface,\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId: connectionRequestId,\n });\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n const operatorId = await this.getOperatorId();\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const result = await this.submitPayload(\n inboundTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async sendMessage(\n connectionTopicId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n waitMaxAttempts?: number;\n waitIntervalMs?: number;\n }\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const operatorId = await this.getOperatorId();\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName,\n {\n progressCallback: options?.progressCallback,\n waitMaxAttempts: options?.waitMaxAttempts,\n waitIntervalMs: options?.waitIntervalMs,\n }\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n this.logger.info('Submitting message to connection topic', payload);\n return await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n const frozenTransaction = transaction.freezeWith(this.client);\n const signedTransaction = await frozenTransaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const accountResponse = this.getAccountAndSigner();\n if (!accountResponse.accountId) {\n throw new Error('Operator account ID is not set');\n }\n const operatorId = await this.getOperatorId();\n const accountId = accountResponse.accountId;\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n accountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n m: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(accountId);\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n });\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n waitMaxAttempts?: number;\n waitIntervalMs?: number;\n }\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const inscriptionOptions = {\n mode: 'file' as const,\n waitForConfirmation: true,\n waitMaxAttempts: options?.waitMaxAttempts || 30,\n waitIntervalMs: options?.waitIntervalMs || 4000,\n progressCallback: options?.progressCallback,\n logging: {\n level: this.logger.getLevel ? this.logger.getLevel() : 'info',\n },\n };\n\n const response = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n },\n inscriptionOptions,\n sdk\n );\n\n if (!response.confirmed || !response.inscription) {\n throw new Error('Inscription was not confirmed');\n }\n\n return response.inscription;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n this.logger.info('Connection confirmation found');\n return {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n /**\n * Creates and registers an agent with a Guarded registry.\n *\n * This function performs the following steps:\n * 1. Creates a new account if no existing account is provided.\n * 2. Initializes an HCS10 client with the new account.\n * 3. Creates an agent on the client.\n * 4. Registers the agent with the Hashgraph Online Guarded Registry.\n *\n * @param builder The agent builder object\n * @param options Optional configuration including progress callback and state management\n * @returns Agent registration result\n */\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n baseUrl?: string;\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const baseUrl = options?.baseUrl || this.guardedRegistryBaseUrl;\n let state = options?.existingState || undefined;\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: { state },\n });\n }\n\n const account = config.existingAccount || (await this.createAccount());\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Created account or using existing account',\n progressPercent: 20,\n details: { state, account },\n });\n }\n\n const agentClient = new HCS10Client({\n network: config.network,\n operatorId: account.accountId,\n operatorPrivateKey: account.privateKey,\n operatorPublicKey: PrivateKey.fromString(\n account.privateKey\n ).publicKey.toString(),\n logLevel: 'info' as LogLevel,\n guardedRegistryBaseUrl: baseUrl,\n });\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Initialized agent client',\n progressPercent: 30,\n details: { state },\n });\n }\n\n const { outboundTopicId, inboundTopicId, pfpTopicId, profileTopicId } =\n await agentClient.createAgent(builder);\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Created agent with topics and profile',\n progressPercent: 60,\n details: {\n state,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n },\n });\n }\n\n const operatorId = `${inboundTopicId}@${account.accountId}`;\n\n const registrationResult =\n await agentClient.registerAgentWithGuardedRegistry(\n account.accountId,\n config.network,\n {\n progressCallback: (data) => {\n const adjustedPercent = 60 + (data.progressPercent || 0) * 0.4;\n if (progressCallback) {\n progressCallback({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: {\n ...data.details,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: data.details?.state || state,\n },\n });\n }\n },\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n return registrationResult;\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent creation and registration complete',\n progressPercent: 100,\n details: {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: registrationResult.state,\n },\n });\n }\n\n return {\n ...registrationResult,\n metadata: {\n accountId: account.accountId,\n privateKey: account.privateKey,\n operatorId,\n inboundTopicId,\n outboundTopicId,\n profileTopicId,\n pfpTopicId,\n },\n };\n } catch (error: any) {\n this.logger.error(\n `Failed to create and register agent: ${error.message}`\n );\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry\n * @param accountId Account ID to register\n * @param inboundTopicId Inbound topic ID for the agent\n * @param network Network type ('mainnet' or 'testnet')\n * @param options Optional configuration including progress callback and confirmation settings\n * @returns Registration result\n */\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n const progressCallback = options?.progressCallback;\n let state =\n options?.existingState ||\n ({\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: {\n state,\n },\n });\n }\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Submitting registration to registry',\n progressPercent: 30,\n details: {\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n await transaction.execute(this.client);\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'confirming',\n message: 'Confirming registration transaction',\n progressPercent: 60,\n details: {\n accountId,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (!state.createdResources) {\n state.createdResources = [];\n }\n if (registrationResult.transactionId) {\n state.createdResources.push(\n `registration:${registrationResult.transactionId}`\n );\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent registration complete',\n progressPercent: 100,\n details: {\n confirmed,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Failed to register agent: ${error.message}`);\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry. Should be called by a registry.\n * @param registryTopicId - The topic ID of the guarded registry.\n * @param accountId - The account ID of the agent\n * @param inboundTopicId - The topic ID of the inbound topic\n * @param memo - The memo of the agent\n * @param submitKey - The submit key of the agent\n */\n async registerAgent(\n registryTopicId: string,\n accountId: string,\n inboundTopicId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n this.logger.info('Registering agent');\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: accountId,\n inbound_topic_id: inboundTopicId,\n m: memo,\n };\n\n await this.submitPayload(registryTopicId, payload, submitKey);\n }\n\n async getInboundTopicType(topicId: string): Promise<InboundTopicType> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n throw new Error('Topic does not exist');\n }\n\n const hasSubmitKey = topicInfo.submit_key && topicInfo.submit_key.key;\n\n if (!hasSubmitKey) {\n return InboundTopicType.PUBLIC;\n }\n\n const hasFeeScheduleKey =\n topicInfo.fee_schedule_key && topicInfo.fee_schedule_key.key;\n\n if (hasFeeScheduleKey && topicInfo.custom_fees) {\n const customFees = topicInfo.custom_fees;\n\n if (\n customFees &&\n customFees.fixed_fees &&\n customFees.fixed_fees.length > 0\n ) {\n this.logger.info(\n `Topic ${topicId} is fee-based with ${customFees.fixed_fees.length} custom fees`\n );\n return InboundTopicType.FEE_BASED;\n }\n }\n\n return InboundTopicType.CONTROLLED;\n } catch (error: any) {\n this.logger.error(`Error determining topic type: ${error.message}`);\n throw new Error(`Failed to determine topic type: ${error.message}`);\n }\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es7.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n AgentCreationState,\n RegistrationProgressCallback,\n InscribePfpResponse,\n} from './types';\nimport {\n HCS11Client,\n AgentMetadata as HCS11AgentMetadata,\n SocialLink,\n SocialPlatform,\n InboundTopicType,\n AgentMetadata,\n} from '../hcs-11';\nimport { FeeConfigBuilderInterface, TopicFeeConfig } from '../fees';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\nimport { Hcs10MemoType } from './base-client';\nimport { AgentBuilder } from '../hcs-11/agent-builder';\nimport { inscribe } from '../inscribe/inscriber';\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic for an agent\n * @param accountId The account ID associated with the inbound topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param ttl Optional Time-To-Live for the topic memo, defaults to 60\n * @param feeConfigBuilder Optional fee configuration builder for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n ttl: number = 60,\n feeConfigBuilder?: FeeConfigBuilderInterface\n ): Promise<string> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl,\n });\n\n let submitKey: boolean | PublicKey | KeyList | undefined;\n let feeConfig: TopicFeeConfig | undefined;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n submitKey = false;\n break;\n case InboundTopicType.CONTROLLED:\n submitKey = true;\n break;\n case InboundTopicType.FEE_BASED:\n submitKey = true;\n if (!feeConfigBuilder) {\n throw new Error(\n 'Fee configuration builder is required for fee-based topics'\n );\n }\n feeConfig = feeConfigBuilder.build();\n break;\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n\n return this.createTopic(memo, true, submitKey, feeConfig);\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @param ttl Optional Time-To-Live for the topic memos, defaults to 60\n * @returns Object with topic IDs\n */\n async createAgent(\n builder: AgentBuilder,\n ttl: number = 60\n ): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl,\n });\n const outboundTopicId = await this.createTopic(outboundMemo, true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n ttl,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.bio,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n config.pfpBuffer && config.pfpBuffer.length > 0\n ? config.pfpBuffer\n : undefined,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n inboundTopicId,\n outboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentBio Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentBio: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.warn(\n `Failed to inscribe profile picture: ${pfpResult.error}, proceeding without pfp`\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n pfpTopicId = existingPfpTopicId;\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as HCS11AgentMetadata);\n\n const formattedSocials: SocialLink[] | undefined = metadata.socials\n ? (Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => ({\n platform: platform as SocialPlatform,\n handle: handle as string,\n })) as SocialLink[])\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentBio,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID of your agent\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @param ttl Optional ttl parameter with default\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface,\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId: connectionRequestId,\n });\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n const accountTopics = await this.retrieveCommunicationTopics(accountId);\n\n const requestingAccountTopics = await this.retrieveCommunicationTopics(\n requestingAccountId\n );\n\n const requestingAccountOperatorId = `${requestingAccountTopics.inboundTopic}@${requestingAccountId}`;\n\n await this.recordOutboundConnectionConfirmation({\n outboundTopicId: accountTopics.outboundTopic,\n requestorOutboundTopicId: requestingAccountTopics.outboundTopic,\n connectionRequestId: connectionRequestId,\n confirmedRequestId: confirmedConnectionSequenceNumber,\n connectionTopicId,\n operatorId: requestingAccountOperatorId,\n memo: `Connection established with ${requestingAccountId}`,\n });\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n /**\n * Confirms a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param connectionTopicId Connection topic ID\n * @param connectedAccountId Connected account ID\n * @param connectionId Connection ID\n * @param memo Memo for the connection request\n * @param submitKey Optional submit key\n * @returns Sequence number of the confirmed connection\n */\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n const operatorId = await this.getOperatorId();\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const result = await this.submitPayload(\n inboundTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async sendMessage(\n connectionTopicId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n waitMaxAttempts?: number;\n waitIntervalMs?: number;\n }\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const operatorId = await this.getOperatorId();\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName,\n {\n progressCallback: options?.progressCallback,\n waitMaxAttempts: options?.waitMaxAttempts,\n waitIntervalMs: options?.waitIntervalMs,\n }\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n this.logger.info('Submitting message to connection topic', payload);\n return await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n const frozenTransaction = transaction.freezeWith(this.client);\n const signedTransaction = await frozenTransaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const accountResponse = this.getAccountAndSigner();\n if (!accountResponse.accountId) {\n throw new Error('Operator account ID is not set');\n }\n const operatorId = await this.getOperatorId();\n const accountId = accountResponse.accountId;\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n accountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n m: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveCommunicationTopics(accountId);\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(outboundTopic.outboundTopic, {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n });\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n waitMaxAttempts?: number;\n waitIntervalMs?: number;\n }\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const inscriptionOptions = {\n mode: 'file' as const,\n waitForConfirmation: true,\n waitMaxAttempts: options?.waitMaxAttempts || 30,\n waitIntervalMs: options?.waitIntervalMs || 4000,\n progressCallback: options?.progressCallback,\n logging: {\n level: this.logger.getLevel ? this.logger.getLevel() : 'info',\n },\n };\n\n const response = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName,\n mimeType,\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n },\n inscriptionOptions,\n sdk\n );\n\n if (!response.confirmed || !response.inscription) {\n throw new Error('Inscription was not confirmed');\n }\n\n return response.inscription;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000,\n recordConfirmation = true\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n const confirmationResult = {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n\n const confirmedByAccountId = this.extractAccountFromOperatorId(\n confirmationResult.confirmedBy\n );\n\n const account = this.getAccountAndSigner();\n const confirmedByConnectionTopics =\n await this.retrieveCommunicationTopics(confirmedByAccountId);\n\n const agentConnectionTopics =\n await this.retrieveCommunicationTopics(account.accountId);\n\n this.logger.info(\n 'Connection confirmation found',\n confirmationResult\n );\n\n if (recordConfirmation) {\n /**\n * Record's the confirmation of the connection request from the\n * confirmedBy account to the agent account.\n */\n await this.recordOutboundConnectionConfirmation({\n requestorOutboundTopicId:\n confirmedByConnectionTopics.outboundTopic,\n outboundTopicId: agentConnectionTopics.outboundTopic,\n connectionRequestId,\n confirmedRequestId: confirmationResult.sequence_number,\n connectionTopicId: confirmationResult.connectionTopicId,\n operatorId: confirmationResult.confirmedBy,\n memo: confirmationResult.memo || 'Connection confirmed',\n });\n }\n\n return confirmationResult;\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n /**\n * Creates and registers an agent with a Guarded registry.\n *\n * This function performs the following steps:\n * 1. Creates a new account if no existing account is provided.\n * 2. Initializes an HCS10 client with the new account.\n * 3. Creates an agent on the client.\n * 4. Registers the agent with the Hashgraph Online Guarded Registry.\n *\n * @param builder The agent builder object\n * @param options Optional configuration including progress callback and state management\n * @returns Agent registration result\n */\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n baseUrl?: string;\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const baseUrl = options?.baseUrl || this.guardedRegistryBaseUrl;\n let state = options?.existingState || undefined;\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: { state },\n });\n }\n\n const account = config.existingAccount || (await this.createAccount());\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Created account or using existing account',\n progressPercent: 20,\n details: { state, account },\n });\n }\n\n const agentClient = new HCS10Client({\n network: config.network,\n operatorId: account.accountId,\n operatorPrivateKey: account.privateKey,\n operatorPublicKey: PrivateKey.fromString(\n account.privateKey\n ).publicKey.toString(),\n logLevel: 'info' as LogLevel,\n guardedRegistryBaseUrl: baseUrl,\n });\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Initialized agent client',\n progressPercent: 30,\n details: { state },\n });\n }\n\n const { outboundTopicId, inboundTopicId, pfpTopicId, profileTopicId } =\n await agentClient.createAgent(builder);\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Created agent with topics and profile',\n progressPercent: 60,\n details: {\n state,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n },\n });\n }\n\n const operatorId = `${inboundTopicId}@${account.accountId}`;\n\n const registrationResult =\n await agentClient.registerAgentWithGuardedRegistry(\n account.accountId,\n config.network,\n {\n progressCallback: (data) => {\n const adjustedPercent = 60 + (data.progressPercent || 0) * 0.4;\n if (progressCallback) {\n progressCallback({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: {\n ...data.details,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: data.details?.state || state,\n },\n });\n }\n },\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n return registrationResult;\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent creation and registration complete',\n progressPercent: 100,\n details: {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: registrationResult.state,\n },\n });\n }\n\n return {\n ...registrationResult,\n metadata: {\n accountId: account.accountId,\n privateKey: account.privateKey,\n operatorId,\n inboundTopicId,\n outboundTopicId,\n profileTopicId,\n pfpTopicId,\n },\n };\n } catch (error: any) {\n this.logger.error(\n `Failed to create and register agent: ${error.message}`\n );\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry\n * @param accountId Account ID to register\n * @param inboundTopicId Inbound topic ID for the agent\n * @param network Network type ('mainnet' or 'testnet')\n * @param options Optional configuration including progress callback and confirmation settings\n * @returns Registration result\n */\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n const progressCallback = options?.progressCallback;\n let state =\n options?.existingState ||\n ({\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: {\n state,\n },\n });\n }\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Submitting registration to registry',\n progressPercent: 30,\n details: {\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n await transaction.execute(this.client);\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'confirming',\n message: 'Confirming registration transaction',\n progressPercent: 60,\n details: {\n accountId,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (!state.createdResources) {\n state.createdResources = [];\n }\n if (registrationResult.transactionId) {\n state.createdResources.push(\n `registration:${registrationResult.transactionId}`\n );\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent registration complete',\n progressPercent: 100,\n details: {\n confirmed,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Failed to register agent: ${error.message}`);\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry. Should be called by a registry.\n * @param registryTopicId - The topic ID of the guarded registry.\n * @param accountId - The account ID of the agent\n * @param inboundTopicId - The topic ID of the inbound topic\n * @param memo - The memo of the agent\n * @param submitKey - The submit key of the agent\n */\n async registerAgent(\n registryTopicId: string,\n accountId: string,\n inboundTopicId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n this.logger.info('Registering agent');\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: accountId,\n inbound_topic_id: inboundTopicId,\n m: memo,\n };\n\n await this.submitPayload(registryTopicId, payload, submitKey);\n }\n\n async getInboundTopicType(topicId: string): Promise<InboundTopicType> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n throw new Error('Topic does not exist');\n }\n\n const hasSubmitKey = topicInfo.submit_key && topicInfo.submit_key.key;\n\n if (!hasSubmitKey) {\n return InboundTopicType.PUBLIC;\n }\n\n const hasFeeScheduleKey =\n topicInfo.fee_schedule_key && topicInfo.fee_schedule_key.key;\n\n if (hasFeeScheduleKey && topicInfo.custom_fees) {\n const customFees = topicInfo.custom_fees;\n\n if (\n customFees &&\n customFees.fixed_fees &&\n customFees.fixed_fees.length > 0\n ) {\n this.logger.info(\n `Topic ${topicId} is fee-based with ${customFees.fixed_fees.length} custom fees`\n );\n return InboundTopicType.FEE_BASED;\n }\n }\n\n return InboundTopicType.CONTROLLED;\n } catch (error: any) {\n this.logger.error(`Error determining topic type: ${error.message}`);\n throw new Error(`Failed to determine topic type: ${error.message}`);\n }\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":";;;;;;;;;;;AAwDO,MAAM,oBAAoB,gBAAgB;AAAA,EAQ/C,YAAY,QAAyB;AAC7B,UAAA;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IAAA,CACnB;AACI,SAAA,SACH,OAAO,YAAY,YAAY,OAAO,WAAW,IAAI,OAAO,WAAW;AACzE,SAAK,qBAAqB,WAAW,WAAW,OAAO,kBAAkB;AACzE,SAAK,UAAU,OAAO;AACtB,SAAK,OAAO;AAAA,MACV,OAAO;AAAA,MACP,KAAK,mBAAmB,SAAS;AAAA,IACnC;AACK,SAAA,SAAS,OAAO,YAAY;AAAA,MAC/B,OAAO,OAAO,YAAY;AAAA,MAC1B,QAAQ;AAAA,IAAA,CACT;AACI,SAAA,yBACH,OAAO,0BAA0B;AAE9B,SAAA,cAAc,IAAI,YAAY;AAAA,MACjC,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,QACJ,YAAY,OAAO;AAAA,QACnB,YAAY,OAAO;AAAA,MACrB;AAAA,MACA,UAAU,OAAO;AAAA,IAAA,CAClB;AAAA,EAAA;AAAA,EAGI,YAAY;AACjB,WAAO,KAAK;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,MAAM,gBAAgD;AAC/C,SAAA,OAAO,KAAK,sBAAsB;AACjC,UAAA,SAAS,WAAW,SAAS;AAEnC,UAAM,qBAAqB,IAAI,yBAAyB,EACrD,OAAO,OAAO,SAAS,EACvB,kBAAkB,IAAI,KAAK,EAAE,CAAC;AAE5B,SAAA,OAAO,MAAM,wCAAwC;AAC1D,UAAM,kBAAkB,MAAM,mBAAmB,QAAQ,KAAK,MAAM;AACpE,UAAM,iBAAiB,MAAM,gBAAgB,WAAW,KAAK,MAAM;AACnE,UAAM,eAAe,eAAe;AAEpC,QAAI,CAAC,cAAc;AACZ,WAAA,OAAO,MAAM,4CAA4C;AAC9D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IAAA;AAGF,SAAK,OAAO;AAAA,MACV,iCAAiC,aAAa,UAAU;AAAA,IAC1D;AACO,WAAA;AAAA,MACL,WAAW,aAAa,SAAS;AAAA,MACjC,YAAY,OAAO,SAAS;AAAA,IAC9B;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWF,MAAM,mBACJ,WACA,WACA,MAAc,IACd,kBACiB;AACjB,UAAM,OAAO,KAAK,mBAAmB,cAAc,SAAS;AAAA,MAC1D;AAAA,MACA;AAAA,IAAA,CACD;AAEG,QAAA;AACA,QAAA;AAEJ,YAAQ,WAAW;AAAA,MACjB,KAAK,iBAAiB;AACR,oBAAA;AACZ;AAAA,MACF,KAAK,iBAAiB;AACR,oBAAA;AACZ;AAAA,MACF,KAAK,iBAAiB;AACR,oBAAA;AACZ,YAAI,CAAC,kBAAkB;AACrB,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QAAA;AAEF,oBAAY,iBAAiB,MAAM;AACnC;AAAA,MACF;AACE,cAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,IAAA;AAGlE,WAAO,KAAK,YAAY,MAAM,MAAM,WAAW,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1D,MAAM,YACJ,SACA,MAAc,IACgB;AACxB,UAAA,SAAS,QAAQ,MAAM;AAC7B,UAAM,eAAe,KAAK,mBAAmB,cAAc,UAAU;AAAA,MACnE;AAAA,IAAA,CACD;AACD,UAAM,kBAAkB,MAAM,KAAK,YAAY,cAAc,MAAM,IAAI;AACvE,SAAK,OAAO,KAAK,kCAAkC,eAAe,EAAE;AAEpE,UAAM,YAAY,KAAK,OAAO,mBAAmB,SAAS;AAC1D,QAAI,CAAC,WAAW;AACR,YAAA,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAGpD,UAAA,iBAAiB,MAAM,KAAK;AAAA,MAChC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,OAAO,qBAAqB,iBAAiB,YACzC,OAAO,YACP;AAAA,IACN;AAEI,QAAA,aAAa,OAAO,sBAAsB;AAE9C,QAAI,CAAC,cAAc,OAAO,aAAa,OAAO,UAAU,SAAS,GAAG;AAC7D,WAAA,OAAO,KAAK,gCAAgC;AAC3C,YAAA,YAAY,MAAM,KAAK;AAAA,QAC3B,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AACA,mBAAa,UAAU;AACvB,WAAK,OAAO;AAAA,QACV,4CAA4C,UAAU;AAAA,MACxD;AAAA,IAAA,WACS,OAAO,oBAAoB;AACpC,WAAK,OAAO;AAAA,QACV,iDAAiD,OAAO,kBAAkB;AAAA,MAC5E;AAAA,IAAA;AAGI,UAAA,gBAAgB,MAAM,KAAK;AAAA,MAC/B,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,aAAa,OAAO,UAAU,SAAS,IAC1C,OAAO,YACP;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AACA,UAAM,iBAAiB,cAAc;AACrC,SAAK,OAAO,KAAK,iCAAiC,cAAc,EAAE;AAE3D,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,YACJ,QACA,UAC8B;AAC1B,QAAA;AACG,WAAA,OAAO,KAAK,gDAAgD;AAE3D,YAAA,cAAc,MAAM,KAAK,YAAY;AAAA,QACzC;AAAA,QACA;AAAA,MACF;AAEI,UAAA,CAAC,YAAY,SAAS;AACxB,aAAK,OAAO;AAAA,UACV,uCAAuC,YAAY,KAAK;AAAA,QAC1D;AACA,cAAM,IAAI;AAAA,UACR,aAAa,SAAS;AAAA,QACxB;AAAA,MAAA;AAGF,WAAK,OAAO;AAAA,QACV,yDAAyD,YAAY,YAAY;AAAA,MACnF;AACO,aAAA;AAAA,QACL,YAAY,YAAY;AAAA,QACxB,eAAe,YAAY;AAAA,QAC3B,SAAS;AAAA,MACX;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,qCAAqC,MAAM,OAAO,EAAE;AAC/D,aAAA;AAAA,QACL,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,MACf;AAAA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeF,MAAM,kBACJ,WACA,UACA,gBACA,iBACA,eAAyB,CAAA,GACzB,UACA,WACA,aACA,oBACoC;AAChC,QAAA;AACF,UAAI,aAAa,sBAAsB;AAEnC,UAAA,CAAC,cAAc,aAAa,aAAa;AACtC,aAAA,OAAO,KAAK,+CAA+C;AAChE,cAAM,YAAY,MAAM,KAAK,YAAY,WAAW,WAAW;AAC3D,YAAA,CAAC,UAAU,SAAS;AACtB,eAAK,OAAO;AAAA,YACV,uCAAuC,UAAU,KAAK;AAAA,UACxD;AAAA,QAAA,OACK;AACL,uBAAa,UAAU;AAAA,QAAA;AAAA,iBAEhB,oBAAoB;AAC7B,aAAK,OAAO;AAAA,UACV,iDAAiD,kBAAkB;AAAA,QACrE;AACa,qBAAA;AAAA,MAAA;AAGT,YAAA,YAAY,KAAK,YAAY,yBAAyB;AAAA,QAC1D,MAAM,SAAS,QAAQ;AAAA,MAAA,CACF;AAEjB,YAAA,mBAA6C,SAAS,UACvD,OAAO,QAAQ,SAAS,OAAO,EAC7B,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,EAC9B,IAAI,CAAC,CAAC,UAAU,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,MAAA,EACA,IACJ;AAEE,YAAA,UAAU,KAAK,YAAY;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,SAAS;AAAA,QAClB;AAAA,UACE,OAAO,UAAU,YAAA,EAAc,QAAQ,QAAQ,GAAG;AAAA,UAClD,KAAK;AAAA,UACL,cAAc,aAAa,WAAW,UAAU,KAAK;AAAA,UACrD,SAAS;AAAA,UACT,YAAY,SAAS;AAAA,UACrB;AAAA,UACA;AAAA,UACA,SAAS,SAAS;AAAA,QAAA;AAAA,MAEtB;AAEM,YAAA,gBAAgB,MAAM,KAAK,YAAY;AAAA,QAC3C;AAAA,QACA;AAAA,MACF;AAEI,UAAA,CAAC,cAAc,SAAS;AAC1B,aAAK,OAAO,MAAM,+BAA+B,cAAc,KAAK,EAAE;AACtE,cAAM,IAAI,MAAM,cAAc,SAAS,4BAA4B;AAAA,MAAA;AAGrE,WAAK,OAAO;AAAA,QACV,oCAAoC,cAAc,cAAc,qBAAqB,cAAc,aAAa;AAAA,MAClH;AAEO,aAAA;AAAA,QACL,gBAAgB,cAAc;AAAA,QAC9B;AAAA,QACA,eAAe,cAAc;AAAA,QAC7B,SAAS;AAAA,MACX;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,iCAAiC,MAAM,OAAO,EAAE;AAC3D,aAAA;AAAA,QACL,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,MACf;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,MAAc,UACZ,aACA,WACA,2BAAqC,CAAA,GACtB;AACX,QAAA,CAAC,KAAK,OAAO,mBAAmB;AAClC;AAAA,IAAA;AAGG,SAAA,OAAO,KAAK,mCAAmC;AAE9C,UAAA,YAAY,IAAI,eAAA,EACnB,UAAU,OAAO,UAAU,UAAU,MAAM,CAAC,EAC5C;AAAA,MACC,UAAU,WAAW,UAAU,qBAAqB;AAAA,IACtD;AAEF,QAAI,mBAAmB;AAAA,MACrB,GAAI,UAAU,kBAAkB,CAAC;AAAA,MACjC,GAAG;AAAA,IACL;AAEQ,YAAA,IAAI,oBAAoB,gBAAgB;AAE5C,QAAA,iBAAiB,SAAS,GAAG;AAC/B,YAAM,yBAAyB,MAAM,KAAK,IAAI,IAAI,gBAAgB,CAAC;AACnE,YAAM,yBAAyB,uBAAuB;AAAA,QACpD,CAAC,YAAY,YAAY,KAAK,OAAO,mBAAmB,SAAS;AAAA,MACnE;AAEA,UAAI,aAA0B,CAAC;AAC3B,UAAA,uBAAuB,SAAS,GAAG;AACjC,YAAA;AACF,uBAAa,MAAM;AAAA,YACjB;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,iBACO,OAAO;AACd,eAAK,OAAO;AAAA,YACV,8BAA8B,KAAK;AAAA,UACrC;AAAA,QAAA;AAAA,MACF;AAGE,UAAA,WAAW,SAAS,GAAG;AACzB,oBAAY,iBAAiB,UAAU;AAAA,MAAA;AAAA,IACzC;AAIC,gBAAA,kBAAkB,KAAK,OAAO,iBAAiB,EAC/C,cAAc,CAAC,SAAS,CAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY9B,MAAM,wBACJ,gBACA,qBACA,qBACA,qBACA,MAAc,IAC4B;AAC1C,UAAM,OAAO,KAAK,mBAAmB,cAAc,YAAY;AAAA,MAC7D;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAAA,CACf;AACD,SAAK,OAAO;AAAA,MACV,+BAA+B,mBAAmB,SAAS,mBAAmB;AAAA,IAChF;AAEA,UAAM,YAAY,KAAK,UAAU,EAAE,mBAAmB,SAAS;AAC/D,QAAI,CAAC,WAAW;AACR,YAAA,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAG1D,QAAI,eAAe,MAAM,KAAK,WAAW,aAAa,mBAAmB;AACzE,UAAM,aAAa,MAAM,KAAK,WAAW,aAAa,SAAS;AAE/D,QAAI,CAAC,YAAY;AACT,YAAA,IAAI,MAAM,+BAA+B;AAAA,IAAA;AAGjD,UAAM,eAAe,IAAI,QAAQ,CAAC,YAAY,YAAY,GAAG,CAAC;AAE1D,QAAA;AAEA,QAAA;AACF,UAAI,qBAAqB;AACjB,cAAA,YAAY,oBAAoB,MAAM;AAC5C,cAAM,oBAAoB;AAAA,UACxB,GAAG;AAAA,UACH,gBAAgB,CAAC,GAAI,UAAU,kBAAkB,CAAG,CAAA;AAAA,QACtD;AAEA,4BAAoB,MAAM,KAAK;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA,OACK;AACL,4BAAoB,MAAM,KAAK;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAGF,WAAK,OAAO,KAAK,oCAAoC,iBAAiB,EAAE;AAAA,aACjE,OAAO;AACd,WAAK,OAAO,MAAM,sCAAsC,KAAK,EAAE;AAC/D,YAAM,IAAI;AAAA,QACR,sCAAsC,KAAK;AAAA,MAC7C;AAAA,IAAA;AAGF,UAAM,aAAa,GAAG,cAAc,IAAI,SAAS;AAE3C,UAAA,oCAAoC,MAAM,KAAK;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,gBAAgB,MAAM,KAAK,4BAA4B,SAAS;AAEhE,UAAA,0BAA0B,MAAM,KAAK;AAAA,MACzC;AAAA,IACF;AAEA,UAAM,8BAA8B,GAAG,wBAAwB,YAAY,IAAI,mBAAmB;AAElG,UAAM,KAAK,qCAAqC;AAAA,MAC9C,iBAAiB,cAAc;AAAA,MAC/B,0BAA0B,wBAAwB;AAAA,MAClD;AAAA,MACA,oBAAoB;AAAA,MACpB;AAAA,MACA,YAAY;AAAA,MACZ,MAAM,+BAA+B,mBAAmB;AAAA,IAAA,CACzD;AAEM,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaF,MAAM,kBACJ,gBACA,mBACA,oBACA,cACA,MACA,WACiB;AACX,UAAA,aAAa,MAAM,KAAK,cAAc;AAC5C,SAAK,OAAO,KAAK,iCAAiC,YAAY,EAAE;AAChE,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,MACf,GAAG;AAAA,IACL;AAEM,UAAA,kBAAkB,MAAM,KAAK;AAAA,MACjC;AAAA,MACA,KAAK,OAAO,mBAAmB,cAAc;AAAA,IAC/C;AAEM,UAAA,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,IAClB;AAEM,UAAA,iBAAiB,OAAO,qBAAqB,SAAS;AAE5D,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IAAA;AAGK,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,YACJ,mBACA,MACA,MACA,WACA,SAK6B;AACvB,UAAA,kBAAkB,MAAM,KAAK;AAAA,MACjC;AAAA,MACA,KAAK,OAAO,mBAAmB,cAAc;AAAA,IAC/C;AAEM,UAAA,aAAa,MAAM,KAAK,cAAc;AAE5C,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,aAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL;AAEM,UAAA,gBAAgB,KAAK,UAAU,OAAO;AAC5C,UAAM,iBAAiB,OAAO,KAAK,aAAa,EAAE,SAAS;AAE3D,QAAI,gBAAgB;AAClB,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACI,UAAA;AACI,cAAA,gBAAgB,OAAO,KAAK,IAAI;AACtC,cAAM,WAAW,WAAW,KAAK,IAAA,CAAK;AAChC,cAAA,oBAAoB,MAAM,KAAK;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,YACE,kBAAkB,SAAS;AAAA,YAC3B,iBAAiB,SAAS;AAAA,YAC1B,gBAAgB,SAAS;AAAA,UAAA;AAAA,QAE7B;AAEA,YAAI,mBAAmB,UAAU;AACvB,kBAAA,OAAO,WAAW,kBAAkB,QAAQ;AACpD,eAAK,OAAO;AAAA,YACV,0CAA0C,kBAAkB,QAAQ;AAAA,UACtE;AAAA,QAAA,OACK;AACC,gBAAA,IAAI,MAAM,0CAA0C;AAAA,QAAA;AAAA,eAErD,OAAO;AACT,aAAA,OAAO,MAAM,mCAAmC,KAAK;AAC1D,cAAM,IAAI;AAAA,UACR,mCACE,iBAAiB,QAAQ,MAAM,UAAU,eAC3C;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAGG,SAAA,OAAO,KAAK,0CAA0C,OAAO;AAClE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EAAA;AAAA,EAGF,MAAM,YACJ,MACA,UACA,WACA,WACiB;AACZ,SAAA,OAAO,KAAK,gBAAgB;AACjC,UAAM,cAAc,IAAI,yBAAyB,aAAa,IAAI;AAElE,QAAI,UAAU;AACZ,UACE,OAAO,aAAa,aACpB,YACA,KAAK,OAAO,mBACZ;AACY,oBAAA,YAAY,KAAK,OAAO,iBAAiB;AACzC,oBAAA,sBAAsB,KAAK,OAAO,iBAAkB;AAAA,MACvD,WAAA,oBAAoB,aAAa,oBAAoB,SAAS;AACvE,oBAAY,YAAY,QAAQ;AAC5B,YAAA,KAAK,OAAO,mBAAmB;AACrB,sBAAA,sBAAsB,KAAK,OAAO,iBAAiB;AAAA,QAAA;AAAA,MACjE;AAAA,IACF;AAGF,QAAI,WAAW;AACb,UACE,OAAO,cAAc,aACrB,aACA,KAAK,OAAO,mBACZ;AACY,oBAAA,aAAa,KAAK,OAAO,iBAAiB;AAAA,MAEtD,WAAA,qBAAqB,aACrB,qBAAqB,SACrB;AACA,oBAAY,aAAa,SAAS;AAAA,MAAA;AAAA,IACpC;AAGF,QAAI,WAAW;AACP,YAAA,KAAK,UAAU,aAAa,SAAS;AAAA,IAAA;AAGxC,SAAA,OAAO,MAAM,sCAAsC;AACxD,UAAM,aAAa,MAAM,YAAY,QAAQ,KAAK,MAAM;AACxD,UAAM,UAAU,MAAM,WAAW,WAAW,KAAK,MAAM;AAEnD,QAAA,CAAC,QAAQ,SAAS;AACf,WAAA,OAAO,MAAM,yCAAyC;AACrD,YAAA,IAAI,MAAM,yCAAyC;AAAA,IAAA;AAGrD,UAAA,UAAU,QAAQ,QAAQ,SAAS;AAClC,WAAA;AAAA,EAAA;AAAA,EAGT,MAAa,cACX,SACA,SACA,WACA,cAAuB,OACM;AAC7B,UAAM,UACJ,OAAO,YAAY,WAAW,UAAU,KAAK,UAAU,OAAO;AAEhE,UAAM,qBAAqB,OAAO,WAAW,SAAS,MAAM;AAC5D,QAAI,qBAAqB,KAAM;AAC7B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IAAA;AAGI,UAAA,cAAc,IAAI,8BACrB,EAAA,WAAW,QAAQ,WAAW,OAAO,CAAC,EACtC,WAAW,OAAO;AAErB,QAAI,aAAa;AACf,WAAK,OAAO;AAAA,QACV;AAAA,MACF;AACA,kBAAY,qBAAqB,IAAI,KAAK,KAAK,SAAS,CAAC;AACzD,kBAAY,mBAAmB,qBAAqB;AAAA,IAAA;AAGlD,QAAA;AACJ,QAAI,WAAW;AACb,YAAM,oBAAoB,YAAY,WAAW,KAAK,MAAM;AAC5D,YAAM,oBAAoB,MAAM,kBAAkB,KAAK,SAAS;AAChE,4BAAsB,MAAM,kBAAkB,QAAQ,KAAK,MAAM;AAAA,IAAA,OAC5D;AACL,4BAAsB,MAAM,YAAY,QAAQ,KAAK,MAAM;AAAA,IAAA;AAG7D,UAAM,UAAU,MAAM,oBAAoB,WAAW,KAAK,MAAM;AAChE,QAAI,CAAC,SAAS;AACP,WAAA,OAAO,MAAM,2CAA2C;AACvD,YAAA,IAAI,MAAM,2CAA2C;AAAA,IAAA;AAExD,SAAA,OAAO,KAAK,gCAAgC;AAC1C,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,wBACJ,gBACA,MAC6B;AACvB,UAAA,kBAAkB,KAAK,oBAAoB;AAC7C,QAAA,CAAC,gBAAgB,WAAW;AACxB,YAAA,IAAI,MAAM,gCAAgC;AAAA,IAAA;AAE5C,UAAA,aAAa,MAAM,KAAK,cAAc;AAC5C,UAAM,YAAY,gBAAgB;AAE5B,UAAA,kBAAkB,MAAM,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAEI,QAAA,CAAC,gBAAgB,WAAW;AAC9B,YAAM,IAAI,MAAM,2BAA2B,gBAAgB,MAAM,EAAE;AAAA,IAAA;AAGrE,UAAM,2BAA2B;AAAA,MAC/B,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAEA,UAAM,cAAc,gBAAgB;AAC9B,UAAA,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,SAAK,OAAO;AAAA,MACV,6CAA6C,cAAc;AAAA,IAC7D;AAEA,UAAM,gBAAgB,MAAM,KAAK,4BAA4B,SAAS;AAEhE,UAAA,yBAAyB,SAAS,qBAAqB,SAAS;AAEtE,QAAI,CAAC,wBAAwB;AACrB,YAAA,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAGpD,UAAA,KAAK,cAAc,cAAc,eAAe;AAAA,MACpD,GAAG;AAAA,MACH,mBAAmB,cAAc;AAAA,MACjC,uBAAuB;AAAA,IAAA,CACxB;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,aACJ,QACA,UACA,SAKqC;AAChC,SAAA,OAAO,KAAK,iBAAiB;AAC9B,QAAA,CAAC,KAAK,OAAO,mBAAmB;AAC7B,WAAA,OAAO,MAAM,gCAAgC;AAC5C,YAAA,IAAI,MAAM,gCAAgC;AAAA,IAAA;AAG9C,QAAA,CAAC,KAAK,oBAAoB;AACvB,WAAA,OAAO,MAAM,iCAAiC;AAC7C,YAAA,IAAI,MAAM,iCAAiC;AAAA,IAAA;AAGnD,UAAM,WAAWA,iBAAAA,OAAY,QAAQ,KAAK;AAEpC,UAAA,MAAM,MAAM,eAAe,eAAe;AAAA,MAC9C,MAAM;AAAA,MACN,WAAW,KAAK,OAAO,kBAAkB,SAAS;AAAA,MAClD,YAAY,KAAK,mBAAmB,SAAS;AAAA,MAC7C,SAAS,KAAK;AAAA,IAAA,CACf;AAED,UAAM,qBAAqB;AAAA,MACzB,MAAM;AAAA,MACN,qBAAqB;AAAA,MACrB,iBAAiB,SAAS,mBAAmB;AAAA,MAC7C,gBAAgB,SAAS,kBAAkB;AAAA,MAC3C,kBAAkB,SAAS;AAAA,MAC3B,SAAS;AAAA,QACP,OAAO,KAAK,OAAO,WAAW,KAAK,OAAO,aAAa;AAAA,MAAA;AAAA,IAE3D;AAEA,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW,KAAK,OAAO,kBAAkB,SAAS;AAAA,QAClD,YAAY,KAAK,mBAAmB,SAAS;AAAA,QAC7C,SAAS,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,aAAa,CAAC,SAAS,aAAa;AAC1C,YAAA,IAAI,MAAM,+BAA+B;AAAA,IAAA;AAGjD,WAAO,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,MAAM,8BACJ,gBACA,qBACA,cAAc,IACd,UAAU,KACV,qBAAqB,MAC2B;AAChD,SAAK,OAAO;AAAA,MACV,wDAAwD,cAAc,mBAAmB,mBAAmB;AAAA,IAC9G;AAEA,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,WAAK,OAAO;AAAA,QACV,WAAW,UAAU,CAAC,IAAI,WAAW;AAAA,MACvC;AACA,YAAM,WAAW,MAAM,KAAK,WAAW,iBAAiB,cAAc;AAEtE,YAAM,4BAA4B,SAAS;AAAA,QACzC,CAAC,MAAM,EAAE,OAAO;AAAA,MAClB;AAEA,WAAK,OAAO;AAAA,QACV,SAAS,0BAA0B,MAAM;AAAA,MAC3C;AAEI,UAAA,0BAA0B,SAAS,GAAG;AACxC,mBAAW,WAAW,2BAA2B;AAC/C,cAAI,OAAO,QAAQ,aAAa,MAAM,OAAO,mBAAmB,GAAG;AACjE,kBAAM,qBAAqB;AAAA,cACzB,mBAAmB,QAAQ;AAAA,cAC3B,iBAAiB,OAAO,QAAQ,eAAe;AAAA,cAC/C,aAAa,QAAQ;AAAA,cACrB,MAAM,QAAQ;AAAA,YAChB;AAEA,kBAAM,uBAAuB,KAAK;AAAA,cAChC,mBAAmB;AAAA,YACrB;AAEM,kBAAA,UAAU,KAAK,oBAAoB;AACzC,kBAAM,8BACJ,MAAM,KAAK,4BAA4B,oBAAoB;AAE7D,kBAAM,wBACJ,MAAM,KAAK,4BAA4B,QAAQ,SAAS;AAE1D,iBAAK,OAAO;AAAA,cACV;AAAA,cACA;AAAA,YACF;AAEA,gBAAI,oBAAoB;AAKtB,oBAAM,KAAK,qCAAqC;AAAA,gBAC9C,0BACE,4BAA4B;AAAA,gBAC9B,iBAAiB,sBAAsB;AAAA,gBACvC;AAAA,gBACA,oBAAoB,mBAAmB;AAAA,gBACvC,mBAAmB,mBAAmB;AAAA,gBACtC,YAAY,mBAAmB;AAAA,gBAC/B,MAAM,mBAAmB,QAAQ;AAAA,cAAA,CAClC;AAAA,YAAA;AAGI,mBAAA;AAAA,UAAA;AAAA,QACT;AAAA,MACF;AAGE,UAAA,UAAU,cAAc,GAAG;AAC7B,aAAK,OAAO;AAAA,UACV,2CAA2C,OAAO;AAAA,QACpD;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAAA,MAAA;AAAA,IAC7D;AAGF,UAAM,IAAI;AAAA,MACR,2CAA2C,WAAW,4BAA4B,mBAAmB;AAAA,IACvG;AAAA,EAAA;AAAA,EAGF,sBAAmD;AAC1C,WAAA;AAAA,MACL,WAAW,KAAK,OAAO,kBAAmB,SAAS;AAAA,MACnD,QAAQ,KAAK;AAAA,IACf;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBF,MAAM,uBACJ,SACA,SAKkC;AAC9B,QAAA;AACI,YAAA,SAAS,QAAQ,MAAM;AAC7B,YAAM,mBAAmB,SAAS;AAC5B,YAAA,UAAU,SAAS,WAAW,KAAK;AACrC,UAAA,QAAQ,SAAS,iBAAiB;AAEtC,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS,EAAE,MAAM;AAAA,QAAA,CAClB;AAAA,MAAA;AAGH,YAAM,UAAU,OAAO,mBAAoB,MAAM,KAAK,cAAc;AAEpE,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS,EAAE,OAAO,QAAQ;AAAA,QAAA,CAC3B;AAAA,MAAA;AAGG,YAAA,cAAc,IAAI,YAAY;AAAA,QAClC,SAAS,OAAO;AAAA,QAChB,YAAY,QAAQ;AAAA,QACpB,oBAAoB,QAAQ;AAAA,QAC5B,mBAAmB,WAAW;AAAA,UAC5B,QAAQ;AAAA,QAAA,EACR,UAAU,SAAS;AAAA,QACrB,UAAU;AAAA,QACV,wBAAwB;AAAA,MAAA,CACzB;AAED,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS,EAAE,MAAM;AAAA,QAAA,CAClB;AAAA,MAAA;AAGG,YAAA,EAAE,iBAAiB,gBAAgB,YAAY,mBACnD,MAAM,YAAY,YAAY,OAAO;AAEvC,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAGH,YAAM,aAAa,GAAG,cAAc,IAAI,QAAQ,SAAS;AAEnD,YAAA,qBACJ,MAAM,YAAY;AAAA,QAChB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP;AAAA,UACE,kBAAkB,CAAC,SAAS;AAC1B,kBAAM,kBAAkB,MAAM,KAAK,mBAAmB,KAAK;AAC3D,gBAAI,kBAAkB;AACH,+BAAA;AAAA,gBACf,OAAO,KAAK;AAAA,gBACZ,SAAS,KAAK;AAAA,gBACd,iBAAiB;AAAA,gBACjB,SAAS;AAAA,kBACP,GAAG,KAAK;AAAA,kBACR;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,OAAO,KAAK,SAAS,SAAS;AAAA,gBAAA;AAAA,cAChC,CACD;AAAA,YAAA;AAAA,UAEL;AAAA,UACA,eAAe;AAAA,QAAA;AAAA,MAEnB;AAEE,UAAA,CAAC,mBAAmB,SAAS;AACxB,eAAA;AAAA,MAAA;AAGT,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO,mBAAmB;AAAA,UAAA;AAAA,QAC5B,CACD;AAAA,MAAA;AAGI,aAAA;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,WAAW,QAAQ;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,aACO,OAAY;AACnB,WAAK,OAAO;AAAA,QACV,wCAAwC,MAAM,OAAO;AAAA,MACvD;AACO,aAAA;AAAA,QACL,OAAO,MAAM;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWF,MAAM,iCACJ,WACA,UAAkB,KAAK,SACvB,SAMkC;AAC9B,QAAA;AACG,WAAA,OAAO,KAAK,yCAAyC;AAEpD,YAAA,cAAc,SAAS,eAAe;AACtC,YAAA,UAAU,SAAS,WAAW;AACpC,YAAM,mBAAmB,SAAS;AAC9B,UAAA,QACF,SAAS,iBACR;AAAA,QACC,cAAc;AAAA,QACd,qBAAqB;AAAA,QACrB,kBAAkB,CAAA;AAAA,MACpB;AAEF,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAGG,YAAA,qBAAqB,MAAM,KAAK;AAAA,QACpC;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAEI,UAAA,CAAC,mBAAmB,SAAS;AACxB,eAAA;AAAA,UACL,GAAG;AAAA,UACH;AAAA,QACF;AAAA,MAAA;AAGF,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP,eAAe,mBAAmB;AAAA,YAClC;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAGH,UAAI,mBAAmB,aAAa;AAClC,cAAM,cAAc,YAAY;AAAA,UAC9B,OAAO,KAAK,mBAAmB,aAAa,QAAQ;AAAA,QACtD;AAEK,aAAA,OAAO,KAAK,qCAAqC;AAChD,cAAA,YAAY,QAAQ,KAAK,MAAM;AAChC,aAAA,OAAO,KAAK,iDAAiD;AAAA,MAAA;AAGpE,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP;AAAA,YACA,eAAe,mBAAmB;AAAA,YAClC;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAGG,YAAA,YAAY,MAAM,KAAK;AAAA,QAC3B,mBAAmB;AAAA,QACnB;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP;AAEA,YAAM,eAAe;AACrB,YAAM,sBAAsB;AACxB,UAAA,CAAC,MAAM,kBAAkB;AAC3B,cAAM,mBAAmB,CAAC;AAAA,MAAA;AAE5B,UAAI,mBAAmB,eAAe;AACpC,cAAM,iBAAiB;AAAA,UACrB,gBAAgB,mBAAmB,aAAa;AAAA,QAClD;AAAA,MAAA;AAGF,UAAI,kBAAkB;AACH,yBAAA;AAAA,UACf,OAAO;AAAA,UACP,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,YACP;AAAA,YACA,eAAe,mBAAmB;AAAA,YAClC;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAGI,aAAA;AAAA,QACL,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,aACO,OAAY;AACnB,WAAK,OAAO,MAAM,6BAA6B,MAAM,OAAO,EAAE;AACvD,aAAA;AAAA,QACL,OAAO,MAAM;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWF,MAAM,cACJ,iBACA,WACA,gBACA,MACA,WACe;AACV,SAAA,OAAO,KAAK,mBAAmB;AACpC,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,GAAG;AAAA,IACL;AAEA,UAAM,KAAK,cAAc,iBAAiB,SAAS,SAAS;AAAA,EAAA;AAAA,EAG9D,MAAM,oBAAoB,SAA4C;AAChE,QAAA;AACF,YAAM,YAAY,MAAM,KAAK,WAAW,aAAa,OAAO;AAE5D,UAAI,CAAC,WAAW;AACR,cAAA,IAAI,MAAM,sBAAsB;AAAA,MAAA;AAGxC,YAAM,eAAe,UAAU,cAAc,UAAU,WAAW;AAElE,UAAI,CAAC,cAAc;AACjB,eAAO,iBAAiB;AAAA,MAAA;AAG1B,YAAM,oBACJ,UAAU,oBAAoB,UAAU,iBAAiB;AAEvD,UAAA,qBAAqB,UAAU,aAAa;AAC9C,cAAM,aAAa,UAAU;AAE7B,YACE,cACA,WAAW,cACX,WAAW,WAAW,SAAS,GAC/B;AACA,eAAK,OAAO;AAAA,YACV,SAAS,OAAO,sBAAsB,WAAW,WAAW,MAAM;AAAA,UACpE;AACA,iBAAO,iBAAiB;AAAA,QAAA;AAAA,MAC1B;AAGF,aAAO,iBAAiB;AAAA,aACjB,OAAY;AACnB,WAAK,OAAO,MAAM,iCAAiC,MAAM,OAAO,EAAE;AAClE,YAAM,IAAI,MAAM,mCAAmC,MAAM,OAAO,EAAE;AAAA,IAAA;AAAA,EACpE;AAAA,EAGF,aAAqB;AACnB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,YAAoB;AAClB,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
|