@hashgraphonline/standards-sdk 0.1.168 → 0.1.170
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/README.md +1 -0
- package/dist/browser/hcs-11/client.d.ts.map +1 -1
- package/dist/browser/hcs-21/sdk.d.ts.map +1 -1
- package/dist/browser/hcs-27/base-client.d.ts +41 -0
- package/dist/browser/hcs-27/base-client.d.ts.map +1 -0
- package/dist/browser/hcs-27/index.d.ts +6 -0
- package/dist/browser/hcs-27/index.d.ts.map +1 -0
- package/dist/browser/hcs-27/memos.d.ts +5 -0
- package/dist/browser/hcs-27/memos.d.ts.map +1 -0
- package/dist/browser/hcs-27/merkle.d.ts +23 -0
- package/dist/browser/hcs-27/merkle.d.ts.map +1 -0
- package/dist/browser/hcs-27/sdk.d.ts +23 -0
- package/dist/browser/hcs-27/sdk.d.ts.map +1 -0
- package/dist/browser/hcs-27/types.d.ts +1611 -0
- package/dist/browser/hcs-27/types.d.ts.map +1 -0
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +29 -5
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser/utils/key-type-detector.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-27/base-client.d.ts +41 -0
- package/dist/cjs/hcs-27/base-client.d.ts.map +1 -0
- package/dist/cjs/hcs-27/index.d.ts +6 -0
- package/dist/cjs/hcs-27/index.d.ts.map +1 -0
- package/dist/cjs/hcs-27/memos.d.ts +5 -0
- package/dist/cjs/hcs-27/memos.d.ts.map +1 -0
- package/dist/cjs/hcs-27/merkle.d.ts +23 -0
- package/dist/cjs/hcs-27/merkle.d.ts.map +1 -0
- package/dist/cjs/hcs-27/sdk.d.ts +23 -0
- package/dist/cjs/hcs-27/sdk.d.ts.map +1 -0
- package/dist/cjs/hcs-27/types.d.ts +1611 -0
- package/dist/cjs/hcs-27/types.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/key-type-detector.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-21/sdk.d.ts.map +1 -1
- package/dist/es/hcs-27/base-client.d.ts +41 -0
- package/dist/es/hcs-27/base-client.d.ts.map +1 -0
- package/dist/es/hcs-27/index.d.ts +6 -0
- package/dist/es/hcs-27/index.d.ts.map +1 -0
- package/dist/es/hcs-27/memos.d.ts +5 -0
- package/dist/es/hcs-27/memos.d.ts.map +1 -0
- package/dist/es/hcs-27/merkle.d.ts +23 -0
- package/dist/es/hcs-27/merkle.d.ts.map +1 -0
- package/dist/es/hcs-27/sdk.d.ts +23 -0
- package/dist/es/hcs-27/sdk.d.ts.map +1 -0
- package/dist/es/hcs-27/types.d.ts +1611 -0
- package/dist/es/hcs-27/types.d.ts.map +1 -0
- package/dist/es/index.d.ts +1 -0
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +67 -38
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es112.js +151 -234
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +20 -471
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +263 -104
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +167 -138
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +315 -29
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +250 -10
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +448 -152
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +101 -25
- package/dist/es/standards-sdk.es119.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +155 -17
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +29 -155
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +9 -200
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +146 -754
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +27 -11
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +19 -564
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +140 -582
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +202 -12
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +790 -2
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +10 -84
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +567 -40
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +626 -2
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +12 -234
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +2 -1140
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +73 -292
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +36 -418
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +2 -355
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +198 -1079
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1107 -175
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +218 -1479
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +422 -1500
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +351 -13
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +1102 -73
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +203 -76
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +1459 -830
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +1499 -59
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +14 -156
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +87 -7
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +74 -79
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +934 -61
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +60 -30
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +159 -34
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +7 -48
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +70 -122
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +58 -35
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +30 -56
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +34 -84
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +48 -81
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +124 -186
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +34 -12474
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +5 -5
- package/dist/es/standards-sdk.es160.js +12477 -12
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +51 -68
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +67 -533
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +70 -161
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +187 -309
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +13 -342
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +538 -441
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +142 -301
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +310 -64
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +332 -158
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +441 -210
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +314 -222
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +65 -108
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +61 -114
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +151 -140
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +193 -156
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +221 -121
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +81 -293
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +114 -247
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +119 -110
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +12 -12
- package/dist/es/standards-sdk.es180.js +188 -0
- package/dist/es/standards-sdk.es180.js.map +1 -0
- package/dist/es/standards-sdk.es181.js +142 -0
- package/dist/es/standards-sdk.es181.js.map +1 -0
- package/dist/es/standards-sdk.es182.js +334 -0
- package/dist/es/standards-sdk.es182.js.map +1 -0
- package/dist/es/standards-sdk.es183.js +262 -0
- package/dist/es/standards-sdk.es183.js.map +1 -0
- package/dist/es/standards-sdk.es184.js +155 -0
- package/dist/es/standards-sdk.es184.js.map +1 -0
- package/dist/es/standards-sdk.es19.js +9 -9
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +12 -12
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +6 -6
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +7 -7
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +4 -4
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/dist/es/utils/key-type-detector.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es149.js","sources":["../../src/content-store/ContentStoreService.ts"],"sourcesContent":["/**\n * Content Store Service\n *\n * Provides utility functions for content storage and reference handling.\n */\n\nimport type { ContentStoreInterface } from './types';\nimport { Logger } from '../utils/logger';\n\n/**\n * Maximum content size before using references (50KB)\n */\nexport const REFERENCE_THRESHOLD = 50 * 1024;\n\n/**\n * Content store service for managing large content\n */\nexport class ContentStoreServiceImpl {\n private static _instance: ContentStoreServiceImpl;\n private contentStore: ContentStoreInterface | null = null;\n private logger = Logger.getInstance({ module: 'ContentStoreService' });\n\n static getInstance(): ContentStoreServiceImpl {\n if (!ContentStoreServiceImpl._instance) {\n ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();\n }\n return ContentStoreServiceImpl._instance;\n }\n\n /**\n * Set the content store instance\n */\n async setInstance(store: ContentStoreInterface): Promise<void> {\n if (this.contentStore) {\n this.logger.warn('Content store already set, replacing');\n }\n this.contentStore = store;\n this.logger.info('Content store instance set');\n }\n\n /**\n * Get the content store instance\n */\n getInstance(): ContentStoreInterface | null {\n return this.contentStore;\n }\n\n /**\n * Clear the content store instance\n */\n dispose(): void {\n this.contentStore = null;\n this.logger.info('Content store disposed');\n }\n\n /**\n * Check if content store is available\n */\n isAvailable(): boolean {\n return this.contentStore !== null;\n }\n}\n\n/**\n * Extract reference ID from input string\n */\nexport function extractReferenceId(input: string): string | null {\n const trimmed = input.trim();\n\n const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);\n if (exactMatch) {\n return exactMatch[1];\n }\n\n const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);\n if (embeddedMatch) {\n return embeddedMatch[1];\n }\n\n return null;\n}\n\n/**\n * Check if content should use reference based on size\n */\nexport function shouldUseReference(content: string | Buffer): boolean {\n const size =\n typeof content === 'string'\n ? Buffer.byteLength(content, 'utf8')\n : content.length;\n\n return size > REFERENCE_THRESHOLD;\n}\n\nexport const ContentStoreService = ContentStoreServiceImpl.getInstance();\n"],"names":[],"mappings":";AAYO,MAAM,sBAAsB,KAAK;AAKjC,MAAM,wBAAwB;AAAA,EAA9B,cAAA;AAEL,SAAQ,eAA6C;AACrD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,uBAAuB;AAAA,EAAA;AAAA,EAErE,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,WAAW;AACtC,8BAAwB,YAAY,IAAI,wBAAA;AAAA,IAC1C;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAA6C;AAC7D,QAAI,KAAK,cAAc;AACrB,WAAK,OAAO,KAAK,sCAAsC;AAAA,IACzD;AACA,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,4BAA4B;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,wBAAwB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AACF;AAKO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,UAAU,MAAM,KAAA;AAEtB,QAAM,aAAa,QAAQ,MAAM,2BAA2B;AAC5D,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAEA,QAAM,gBAAgB,QAAQ,MAAM,yBAAyB;AAC7D,MAAI,eAAe;AACjB,WAAO,cAAc,CAAC;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,OACJ,OAAO,YAAY,WACf,OAAO,WAAW,SAAS,MAAM,IACjC,QAAQ;AAEd,SAAO,OAAO;AAChB;AAEO,MAAM,sBAAsB,wBAAwB,YAAA;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es149.js","sources":["../../src/services/registry-broker/client/base-client.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n createCipheriv,\n createDecipheriv,\n createHash,\n randomBytes,\n} from 'crypto';\nimport { secp256k1 } from '@noble/curves/secp256k1.js';\nimport { ZodError, z } from 'zod';\nimport type {\n AgentFeedbackEligibilityRequest,\n AgentFeedbackEligibilityResponse,\n AgentFeedbackIndexResponse,\n AgentFeedbackEntriesIndexResponse,\n AgentFeedbackQuery,\n AgentFeedbackResponse,\n AgentFeedbackSubmissionRequest,\n AgentFeedbackSubmissionResponse,\n AutoTopUpOptions,\n ClientEncryptionOptions,\n CreateSessionRequestPayload,\n DeriveSharedSecretOptions,\n DecryptCipherEnvelopeOptions,\n EncryptCipherEnvelopeOptions,\n EphemeralKeyPair,\n HistoryAutoTopUpOptions,\n InitializeAgentClientOptions,\n JsonObject,\n JsonValue,\n RegisterAgentResponse,\n RegisterAgentPartialResponse,\n RegisterAgentPendingResponse,\n RegisterAgentSuccessResponse,\n RegistryBrokerClientOptions,\n AcceptConversationOptions,\n AcceptEncryptedChatSessionOptions,\n AdapterDetailsResponse,\n AdapterRegistryAdaptersResponse,\n AdapterRegistryCategoriesResponse,\n AdapterRegistryCategory,\n AdapterRegistrySubmitAdapterAcceptedResponse,\n AdapterRegistrySubmissionStatusResponse,\n AdaptersResponse,\n AdditionalRegistryCatalogResponse,\n AgentAuthConfig,\n AgentRegistrationRequest,\n ChatConversationHandle,\n ChatHistoryCompactionResponse,\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n CipherEnvelope,\n CompactHistoryRequestPayload,\n CreateAdapterRegistryCategoryRequest,\n CreateSessionResponse,\n CreditPurchaseResponse,\n DashboardStatsResponse,\n DetectProtocolResponse,\n EncryptionHandshakeRecord,\n EncryptionHandshakeSubmissionPayload,\n EncryptedChatSessionHandle,\n EnsureAgentKeyOptions,\n LedgerAuthenticationOptions,\n LedgerChallengeRequest,\n LedgerChallengeResponse,\n LedgerCredentialAuthOptions,\n LedgerVerifyRequest,\n LedgerVerifyResponse,\n MetricsSummaryResponse,\n MoltbookOwnerRegistrationUpdateRequest,\n MoltbookOwnerRegistrationUpdateResponse,\n PopularSearchesResponse,\n ProtocolDetectionMessage,\n ProtocolsResponse,\n RegisterAgentOptions,\n RegisterAgentQuoteResponse,\n RegisterEncryptionKeyPayload,\n RegisterEncryptionKeyResponse,\n RegistriesResponse,\n RegisterStatusResponse,\n RegistrationProgressRecord,\n RegistrationProgressWaitOptions,\n RegistrySearchByNamespaceResponse,\n RegistryStatsResponse,\n ResolvedAgentResponse,\n SearchFacetsResponse,\n SearchParams,\n SearchResult,\n SearchStatusResponse,\n SendMessageRequestPayload,\n SendMessageResponse,\n SessionEncryptionStatusResponse,\n SessionEncryptionSummary,\n SharedSecretInput,\n StartChatOptions,\n StartConversationOptions,\n StartEncryptedChatSessionOptions,\n SubmitAdapterRegistryAdapterRequest,\n UaidConnectionStatus,\n UaidValidationResponse,\n VectorSearchRequest,\n VectorSearchResponse,\n WebsocketStatsResponse,\n VerificationChallengeDetailsResponse,\n VerificationChallengeResponse,\n VerificationDnsStatusQuery,\n VerificationDnsStatusResponse,\n VerificationDnsVerifyRequest,\n VerificationOwnershipResponse,\n VerificationStatusResponse,\n VerificationVerifyResponse,\n VerificationVerifySenderResponse,\n X402MinimumsResponse,\n SkillRegistryConfigResponse,\n SkillSecurityBreakdownRequest,\n SkillSecurityBreakdownResponse,\n SkillBadgeQuery,\n SkillBadgeResponse,\n SkillCatalogQueryOptions,\n SkillCatalogResponse,\n SkillDeprecationRecord,\n SkillDeprecationSetRequest,\n SkillDeprecationsResponse,\n SkillRegistryJobStatusResponse,\n SkillListOptions,\n SkillRegistryListResponse,\n SkillRegistryCategoriesResponse,\n SkillRegistryMineResponse,\n SkillRegistryMyListResponse,\n SkillRegistryOwnershipResponse,\n SkillRegistryPublishRequest,\n SkillRegistryPublishResponse,\n SkillRegistryQuoteRequest,\n SkillRegistryQuoteResponse,\n SkillRegistryTagsResponse,\n SkillRegistryVoteRequest,\n SkillRegistryVoteStatusResponse,\n SkillRecommendedVersionResponse,\n SkillRecommendedVersionSetRequest,\n SkillResolverManifestResponse,\n SkillRegistryVersionsResponse,\n SkillVerificationDomainProofChallengeRequest,\n SkillVerificationDomainProofChallengeResponse,\n SkillVerificationDomainProofVerifyRequest,\n SkillVerificationDomainProofVerifyResponse,\n SkillVerificationRequestCreateRequest,\n SkillVerificationRequestCreateResponse,\n SkillVerificationStatusResponse,\n} from '../types';\nimport {\n agentFeedbackEligibilityResponseSchema,\n agentFeedbackEntriesIndexResponseSchema,\n agentFeedbackIndexResponseSchema,\n agentFeedbackResponseSchema,\n agentFeedbackSubmissionResponseSchema,\n registerAgentResponseSchema,\n} from '../schemas';\nimport type {\n ConversationContextInput,\n ConversationContextState,\n} from './chat-history';\nimport {\n attachDecryptedHistory as attachDecryptedHistoryImpl,\n decryptHistoryEntryFromContext as decryptHistoryEntryFromContextImpl,\n fetchHistorySnapshot as fetchHistorySnapshotImpl,\n registerConversationContextForEncryption as registerConversationContextForEncryptionImpl,\n resolveDecryptionContext as resolveDecryptionContextImpl,\n} from './chat-history';\nimport type { RegistryBrokerChatApi } from './chat';\nimport {\n acceptConversation as acceptConversationImpl,\n compactHistory as compactHistoryImpl,\n createChatApi,\n createPlaintextConversationHandle as createPlaintextConversationHandleImpl,\n createSession as createSessionImpl,\n endSession as endSessionImpl,\n fetchEncryptionStatus as fetchEncryptionStatusImpl,\n postEncryptionHandshake as postEncryptionHandshakeImpl,\n sendMessage as sendMessageImpl,\n startChat as startChatImpl,\n startConversation as startConversationImpl,\n} from './chat';\nimport { EncryptedChatManager } from './encrypted-chat-manager';\nimport type { RegistryBrokerEncryptionApi } from './encryption';\nimport {\n bootstrapEncryptionOptions as bootstrapEncryptionOptionsImpl,\n createEncryptionApi,\n generateEncryptionKeyPair as generateEncryptionKeyPairImpl,\n} from './encryption';\nimport {\n adapters as adaptersImpl,\n adaptersDetailed as adaptersDetailedImpl,\n adapterRegistryAdapters as adapterRegistryAdaptersImpl,\n adapterRegistryCategories as adapterRegistryCategoriesImpl,\n adapterRegistrySubmissionStatus as adapterRegistrySubmissionStatusImpl,\n createAdapterRegistryCategory as createAdapterRegistryCategoryImpl,\n submitAdapterRegistryAdapter as submitAdapterRegistryAdapterImpl,\n} from './adapters';\nimport {\n closeUaidConnection as closeUaidConnectionImpl,\n dashboardStats as dashboardStatsImpl,\n getRegistrationProgress as getRegistrationProgressImpl,\n getRegistrationQuote as getRegistrationQuoteImpl,\n getUaidConnectionStatus as getUaidConnectionStatusImpl,\n resolveUaid as resolveUaidImpl,\n updateAgent as updateAgentImpl,\n validateUaid as validateUaidImpl,\n waitForRegistrationCompletion as waitForRegistrationCompletionImpl,\n} from './agents';\nimport {\n createVerificationChallenge as createVerificationChallengeImpl,\n getRegisterStatus as getRegisterStatusImpl,\n getVerificationChallenge as getVerificationChallengeImpl,\n getVerificationDnsStatus as getVerificationDnsStatusImpl,\n getVerificationOwnership as getVerificationOwnershipImpl,\n getVerificationStatus as getVerificationStatusImpl,\n registerOwnedMoltbookAgent as registerOwnedMoltbookAgentImpl,\n verifyUaidDnsTxt as verifyUaidDnsTxtImpl,\n verifySenderOwnership as verifySenderOwnershipImpl,\n verifyVerificationChallenge as verifyVerificationChallengeImpl,\n} from './verification';\nimport type {\n BuyCreditsWithX402Params,\n PurchaseCreditsWithX402Params,\n X402PurchaseResult,\n} from './credits';\nimport {\n buyCreditsWithX402 as buyCreditsWithX402Impl,\n getX402Minimums as getX402MinimumsImpl,\n purchaseCreditsWithHbar as purchaseCreditsWithHbarImpl,\n purchaseCreditsWithX402 as purchaseCreditsWithX402Impl,\n} from './credits';\nimport {\n authenticateWithLedger as authenticateWithLedgerImpl,\n authenticateWithLedgerCredentials as authenticateWithLedgerCredentialsImpl,\n createLedgerChallenge as createLedgerChallengeImpl,\n verifyLedgerChallenge as verifyLedgerChallengeImpl,\n} from './ledger-auth';\nimport {\n detectProtocol as detectProtocolImpl,\n facets as facetsImpl,\n getAdditionalRegistries as getAdditionalRegistriesImpl,\n listProtocols as listProtocolsImpl,\n metricsSummary as metricsSummaryImpl,\n popularSearches as popularSearchesImpl,\n registries as registriesImpl,\n registrySearchByNamespace as registrySearchByNamespaceImpl,\n search as searchImpl,\n searchStatus as searchStatusImpl,\n stats as statsImpl,\n vectorSearch as vectorSearchImpl,\n websocketStats as websocketStatsImpl,\n} from './search';\nimport {\n createSkillDomainProofChallenge as createSkillDomainProofChallengeImpl,\n getRecommendedSkillVersion as getRecommendedSkillVersionImpl,\n getSkillBadge as getSkillBadgeImpl,\n getSkillDeprecations as getSkillDeprecationsImpl,\n getSkillOwnership as getSkillOwnershipImpl,\n getSkillPublishJob as getSkillPublishJobImpl,\n getSkillVerificationStatus as getSkillVerificationStatusImpl,\n getSkillVoteStatus as getSkillVoteStatusImpl,\n getSkillSecurityBreakdown as getSkillSecurityBreakdownImpl,\n getSkillsCatalog as getSkillsCatalogImpl,\n getMySkillsList as getMySkillsListImpl,\n listSkillCategories as listSkillCategoriesImpl,\n listSkillTags as listSkillTagsImpl,\n listSkills as listSkillsImpl,\n listMySkills as listMySkillsImpl,\n listSkillVersions as listSkillVersionsImpl,\n publishSkill as publishSkillImpl,\n quoteSkillPublish as quoteSkillPublishImpl,\n resolveSkillManifest as resolveSkillManifestImpl,\n resolveSkillMarkdown as resolveSkillMarkdownImpl,\n requestSkillVerification as requestSkillVerificationImpl,\n setRecommendedSkillVersion as setRecommendedSkillVersionImpl,\n setSkillDeprecation as setSkillDeprecationImpl,\n setSkillVote as setSkillVoteImpl,\n skillsConfig as skillsConfigImpl,\n verifySkillDomainProof as verifySkillDomainProofImpl,\n} from './skills';\nimport {\n createAbortError,\n DEFAULT_BASE_URL,\n DEFAULT_HISTORY_TOP_UP_HBAR,\n DEFAULT_USER_AGENT,\n JSON_CONTENT_TYPE,\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n isJsonObject,\n isBrowserRuntime,\n normaliseBaseUrl,\n normaliseHeaderName,\n serialiseAgentRegistrationRequest,\n} from './utils';\nimport {\n RegistryBrokerError,\n RegistryBrokerParseError,\n type ErrorDetails,\n} from './errors';\nexport interface InitializedAgentClient {\n client: RegistryBrokerClient;\n encryption?: { publicKey: string; privateKey?: string } | null;\n}\nexport interface GenerateEncryptionKeyPairOptions {\n keyType?: 'secp256k1';\n envVar?: string;\n envPath?: string;\n overwrite?: boolean;\n}\nexport interface RequestConfig {\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\nexport class RegistryBrokerClient {\n static async initializeAgent(\n options: InitializeAgentClientOptions,\n ): Promise<InitializedAgentClient> {\n const { uaid, ensureEncryptionKey = true, ...clientOptions } = options;\n const client = new RegistryBrokerClient(clientOptions);\n let encryption: { publicKey: string; privateKey?: string } | null = null;\n if (ensureEncryptionKey) {\n const ensureOptions =\n typeof ensureEncryptionKey === 'object'\n ? ensureEncryptionKey\n : { generateIfMissing: true };\n encryption = await client.encryption.ensureAgentKey({\n uaid,\n ...ensureOptions,\n });\n }\n return { client, encryption };\n }\n readonly baseUrl: string;\n readonly fetchImpl: typeof fetch;\n readonly defaultHeaders: Record<string, string>;\n readonly registrationAutoTopUp?: AutoTopUpOptions;\n readonly historyAutoTopUp?: HistoryAutoTopUpOptions;\n readonly encryptionOptions?: ClientEncryptionOptions;\n encryptionBootstrapPromise: Promise<void> | null = null;\n private chatApi: RegistryBrokerChatApi | null = null;\n private encryptedChatManager: EncryptedChatManager | null = null;\n private encryptionApi: RegistryBrokerEncryptionApi | null = null;\n private conversationContexts = new Map<string, ConversationContextState[]>();\n constructor(options: RegistryBrokerClientOptions = {}) {\n const {\n baseUrl = DEFAULT_BASE_URL,\n fetchImplementation,\n defaultHeaders,\n apiKey,\n accountId,\n ledgerApiKey,\n registrationAutoTopUp,\n historyAutoTopUp,\n encryption,\n } = options;\n this.baseUrl = normaliseBaseUrl(baseUrl);\n const resolvedFetch =\n fetchImplementation ??\n (typeof globalThis.fetch === 'function' ? globalThis.fetch : null);\n if (!resolvedFetch) {\n throw new Error(\n 'A fetch implementation is required for RegistryBrokerClient',\n );\n }\n this.fetchImpl = resolvedFetch;\n this.defaultHeaders = {\n ...(defaultHeaders ?? {}),\n };\n Object.entries(this.defaultHeaders).forEach(([key, value]) => {\n const headerName = normaliseHeaderName(key);\n if (headerName !== key) {\n delete this.defaultHeaders[key];\n this.defaultHeaders[headerName] = value;\n }\n });\n const existingLedgerHeader =\n this.defaultHeaders['x-ledger-api-key']?.trim();\n if (!this.defaultHeaders['x-api-key'] && existingLedgerHeader) {\n this.defaultHeaders['x-api-key'] = existingLedgerHeader;\n }\n if (apiKey) {\n this.defaultHeaders['x-api-key'] = apiKey;\n }\n if (typeof accountId === 'string' && accountId.trim().length > 0) {\n this.defaultHeaders['x-account-id'] = accountId.trim();\n }\n if (ledgerApiKey) {\n if (!this.defaultHeaders['x-api-key']) {\n this.defaultHeaders['x-api-key'] = ledgerApiKey;\n }\n }\n this.registrationAutoTopUp = registrationAutoTopUp;\n this.historyAutoTopUp = historyAutoTopUp;\n this.encryptionOptions = encryption;\n\n if (this.encryptionOptions) {\n this.encryptionBootstrapPromise = this.initializeEncryptionBootstrap(\n this.encryptionOptions,\n );\n }\n }\n\n get chat(): RegistryBrokerChatApi {\n if (this.chatApi) {\n return this.chatApi;\n }\n const api = createChatApi(this, this.getEncryptedChatManager());\n this.chatApi = api;\n return api;\n }\n\n get encryption(): RegistryBrokerEncryptionApi {\n if (this.encryptionApi) {\n return this.encryptionApi;\n }\n const api = createEncryptionApi(this);\n this.encryptionApi = api;\n return api;\n }\n\n setApiKey(apiKey?: string): void {\n this.setDefaultHeader('x-api-key', apiKey);\n }\n\n setLedgerApiKey(apiKey?: string): void {\n this.setDefaultHeader('x-api-key', apiKey);\n delete this.defaultHeaders['x-ledger-api-key'];\n }\n\n setDefaultHeader(name: string, value?: string | null): void {\n if (!name || name.trim().length === 0) {\n return;\n }\n const headerName = normaliseHeaderName(name);\n if (!value || value.trim().length === 0) {\n delete this.defaultHeaders[headerName];\n return;\n }\n this.defaultHeaders[headerName] = value.trim();\n }\n\n getDefaultHeaders(): Record<string, string> {\n return { ...this.defaultHeaders };\n }\n\n async encryptionReady(): Promise<void> {\n if (!this.encryptionBootstrapPromise) {\n return;\n }\n await this.encryptionBootstrapPromise;\n }\n\n buildUrl(path: string): string {\n const normalisedPath = path.startsWith('/') ? path : `/${path}`;\n return `${this.baseUrl}${normalisedPath}`;\n }\n\n async request(path: string, config: RequestConfig): Promise<Response> {\n const headers = new Headers();\n Object.entries(this.defaultHeaders).forEach(([key, value]) => {\n headers.set(key, value);\n });\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n if (!headers.has('accept')) {\n headers.set('accept', 'application/json');\n }\n if (!headers.has('user-agent') && !isBrowserRuntime()) {\n headers.set('user-agent', DEFAULT_USER_AGENT);\n }\n\n const init: RequestInit = {\n method: config.method ?? 'GET',\n headers,\n };\n\n if (config.body !== undefined) {\n init.body = JSON.stringify(config.body);\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n }\n\n const response = await this.fetchImpl(this.buildUrl(path), init);\n if (response.ok) {\n return response;\n }\n const errorBody = await this.extractErrorBody(response);\n throw new RegistryBrokerError('Registry broker request failed', {\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n });\n }\n\n async requestJson<T extends JsonValue = JsonValue>(\n path: string,\n config: RequestConfig,\n ): Promise<T> {\n const response = await this.request(path, config);\n const contentType = response.headers?.get('content-type') ?? '';\n if (!JSON_CONTENT_TYPE.test(contentType)) {\n const body = await response.text();\n throw new RegistryBrokerParseError(\n 'Expected JSON response from registry broker',\n body,\n );\n }\n return (await response.json()) as T;\n }\n\n async getAgentFeedback(\n uaid: string,\n options: AgentFeedbackQuery = {},\n ): Promise<AgentFeedbackResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const query = options.includeRevoked === true ? '?includeRevoked=true' : '';\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback${query}`,\n { method: 'GET' },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackResponseSchema,\n 'agent feedback response',\n );\n }\n\n async listAgentFeedbackIndex(\n options: { page?: number; limit?: number; registries?: string[] } = {},\n ): Promise<AgentFeedbackIndexResponse> {\n const params = new URLSearchParams();\n if (typeof options.page === 'number' && Number.isFinite(options.page)) {\n params.set('page', String(Math.trunc(options.page)));\n }\n if (typeof options.limit === 'number' && Number.isFinite(options.limit)) {\n params.set('limit', String(Math.trunc(options.limit)));\n }\n if (options.registries?.length) {\n params.set('registry', options.registries.join(','));\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n\n const raw = await this.requestJson<JsonValue>(`/agents/feedback${suffix}`, {\n method: 'GET',\n });\n return this.parseWithSchema(\n raw,\n agentFeedbackIndexResponseSchema,\n 'agent feedback index response',\n );\n }\n\n async listAgentFeedbackEntriesIndex(\n options: { page?: number; limit?: number; registries?: string[] } = {},\n ): Promise<AgentFeedbackEntriesIndexResponse> {\n const params = new URLSearchParams();\n if (typeof options.page === 'number' && Number.isFinite(options.page)) {\n params.set('page', String(Math.trunc(options.page)));\n }\n if (typeof options.limit === 'number' && Number.isFinite(options.limit)) {\n params.set('limit', String(Math.trunc(options.limit)));\n }\n if (options.registries?.length) {\n params.set('registry', options.registries.join(','));\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n\n const raw = await this.requestJson<JsonValue>(\n `/agents/feedback/entries${suffix}`,\n { method: 'GET' },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackEntriesIndexResponseSchema,\n 'agent feedback entries index response',\n );\n }\n\n async checkAgentFeedbackEligibility(\n uaid: string,\n payload: AgentFeedbackEligibilityRequest,\n ): Promise<AgentFeedbackEligibilityResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback/eligibility`,\n {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackEligibilityResponseSchema,\n 'agent feedback eligibility response',\n );\n }\n\n async submitAgentFeedback(\n uaid: string,\n payload: AgentFeedbackSubmissionRequest,\n ): Promise<AgentFeedbackSubmissionResponse> {\n const normalized = uaid.trim();\n if (!normalized) {\n throw new Error('uaid is required');\n }\n const raw = await this.requestJson<JsonValue>(\n `/agents/${encodeURIComponent(normalized)}/feedback`,\n {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n },\n );\n return this.parseWithSchema(\n raw,\n agentFeedbackSubmissionResponseSchema,\n 'agent feedback submission response',\n );\n }\n\n async search(params: SearchParams = {}): Promise<SearchResult> {\n return searchImpl(this, params);\n }\n\n async searchErc8004ByAgentId(params: {\n chainId: number;\n agentId: number | bigint | string;\n limit?: number;\n page?: number;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc' | string;\n }): Promise<SearchResult> {\n const chainId = Math.floor(params.chainId);\n if (!Number.isFinite(chainId) || chainId <= 0) {\n throw new Error('chainId must be a positive integer');\n }\n\n const rawAgentId =\n typeof params.agentId === 'bigint'\n ? params.agentId.toString()\n : String(params.agentId);\n const agentId = rawAgentId.trim();\n if (!agentId) {\n throw new Error('agentId is required');\n }\n\n const nativeId = `${chainId}:${agentId}`;\n\n return searchImpl(this, {\n registries: ['erc-8004'],\n limit: params.limit ?? 1,\n ...(typeof params.page === 'number' ? { page: params.page } : {}),\n ...(typeof params.sortBy === 'string' ? { sortBy: params.sortBy } : {}),\n ...(typeof params.sortOrder === 'string'\n ? { sortOrder: params.sortOrder }\n : {}),\n metadata: {\n nativeId: [nativeId],\n networkKey: [`eip155:${chainId}`],\n },\n });\n }\n\n async stats(): Promise<RegistryStatsResponse> {\n return statsImpl(this);\n }\n\n async registries(): Promise<RegistriesResponse> {\n return registriesImpl(this);\n }\n\n async getAdditionalRegistries(): Promise<AdditionalRegistryCatalogResponse> {\n return getAdditionalRegistriesImpl(this);\n }\n\n async popularSearches(): Promise<PopularSearchesResponse> {\n return popularSearchesImpl(this);\n }\n\n async listProtocols(): Promise<ProtocolsResponse> {\n return listProtocolsImpl(this);\n }\n\n async detectProtocol(\n message: ProtocolDetectionMessage,\n ): Promise<DetectProtocolResponse> {\n return detectProtocolImpl(this, message);\n }\n\n async registrySearchByNamespace(\n registry: string,\n query?: string,\n ): Promise<RegistrySearchByNamespaceResponse> {\n return registrySearchByNamespaceImpl(this, registry, query);\n }\n\n async vectorSearch(\n request: VectorSearchRequest,\n ): Promise<VectorSearchResponse> {\n return vectorSearchImpl(this, request);\n }\n\n async searchStatus(): Promise<SearchStatusResponse> {\n return searchStatusImpl(this);\n }\n\n async websocketStats(): Promise<WebsocketStatsResponse> {\n return websocketStatsImpl(this);\n }\n\n async metricsSummary(): Promise<MetricsSummaryResponse> {\n return metricsSummaryImpl(this);\n }\n\n async facets(adapter?: string): Promise<SearchFacetsResponse> {\n return facetsImpl(this, adapter);\n }\n\n async adapters(): Promise<AdaptersResponse> {\n return adaptersImpl(this);\n }\n\n async skillsConfig(): Promise<SkillRegistryConfigResponse> {\n return skillsConfigImpl(this);\n }\n\n async listSkills(\n options?: SkillListOptions,\n ): Promise<SkillRegistryListResponse> {\n return listSkillsImpl(this, options);\n }\n\n async getSkillSecurityBreakdown(\n params: SkillSecurityBreakdownRequest,\n ): Promise<SkillSecurityBreakdownResponse> {\n return getSkillSecurityBreakdownImpl(this, params);\n }\n\n async getSkillsCatalog(\n options?: SkillCatalogQueryOptions,\n ): Promise<SkillCatalogResponse> {\n return getSkillsCatalogImpl(this, options);\n }\n\n async listSkillVersions(params: {\n name: string;\n }): Promise<SkillRegistryVersionsResponse> {\n return listSkillVersionsImpl(this, params);\n }\n\n async listMySkills(params?: {\n limit?: number;\n }): Promise<SkillRegistryMineResponse> {\n return listMySkillsImpl(this, params);\n }\n\n async getMySkillsList(params?: {\n limit?: number;\n cursor?: string;\n accountId?: string;\n }): Promise<SkillRegistryMyListResponse> {\n return getMySkillsListImpl(this, params);\n }\n\n async quoteSkillPublish(\n payload: SkillRegistryQuoteRequest,\n ): Promise<SkillRegistryQuoteResponse> {\n return quoteSkillPublishImpl(this, payload);\n }\n\n async publishSkill(\n payload: SkillRegistryPublishRequest,\n ): Promise<SkillRegistryPublishResponse> {\n return publishSkillImpl(this, payload);\n }\n\n async getSkillPublishJob(\n jobId: string,\n params?: { accountId?: string },\n ): Promise<SkillRegistryJobStatusResponse> {\n return getSkillPublishJobImpl(this, jobId, params);\n }\n\n async getSkillOwnership(params: {\n name: string;\n accountId?: string;\n }): Promise<SkillRegistryOwnershipResponse> {\n return getSkillOwnershipImpl(this, params);\n }\n\n async getRecommendedSkillVersion(params: {\n name: string;\n }): Promise<SkillRecommendedVersionResponse> {\n return getRecommendedSkillVersionImpl(this, params);\n }\n\n async setRecommendedSkillVersion(\n payload: SkillRecommendedVersionSetRequest,\n ): Promise<SkillRecommendedVersionResponse> {\n return setRecommendedSkillVersionImpl(this, payload);\n }\n\n async getSkillDeprecations(params: {\n name: string;\n }): Promise<SkillDeprecationsResponse> {\n return getSkillDeprecationsImpl(this, params);\n }\n\n async setSkillDeprecation(\n payload: SkillDeprecationSetRequest,\n ): Promise<SkillDeprecationRecord> {\n return setSkillDeprecationImpl(this, payload);\n }\n\n async getSkillBadge(params: SkillBadgeQuery): Promise<SkillBadgeResponse> {\n return getSkillBadgeImpl(this, params);\n }\n\n async listSkillTags(): Promise<SkillRegistryTagsResponse> {\n return listSkillTagsImpl(this);\n }\n\n async listSkillCategories(): Promise<SkillRegistryCategoriesResponse> {\n return listSkillCategoriesImpl(this);\n }\n\n async resolveSkillMarkdown(skillRef: string): Promise<string> {\n return resolveSkillMarkdownImpl(this, skillRef);\n }\n\n async resolveSkillManifest(\n skillRef: string,\n ): Promise<SkillResolverManifestResponse> {\n return resolveSkillManifestImpl(this, skillRef);\n }\n\n async getSkillVoteStatus(params: {\n name: string;\n }): Promise<SkillRegistryVoteStatusResponse> {\n return getSkillVoteStatusImpl(this, params);\n }\n\n async setSkillVote(\n payload: SkillRegistryVoteRequest,\n ): Promise<SkillRegistryVoteStatusResponse> {\n return setSkillVoteImpl(this, payload);\n }\n\n async requestSkillVerification(\n payload: SkillVerificationRequestCreateRequest,\n ): Promise<SkillVerificationRequestCreateResponse> {\n return requestSkillVerificationImpl(this, payload);\n }\n\n async getSkillVerificationStatus(params: {\n name: string;\n version?: string;\n }): Promise<SkillVerificationStatusResponse> {\n return getSkillVerificationStatusImpl(this, params);\n }\n\n async createSkillDomainProofChallenge(\n payload: SkillVerificationDomainProofChallengeRequest,\n ): Promise<SkillVerificationDomainProofChallengeResponse> {\n return createSkillDomainProofChallengeImpl(this, payload);\n }\n\n async verifySkillDomainProof(\n payload: SkillVerificationDomainProofVerifyRequest,\n ): Promise<SkillVerificationDomainProofVerifyResponse> {\n return verifySkillDomainProofImpl(this, payload);\n }\n\n async adaptersDetailed(): Promise<AdapterDetailsResponse> {\n return adaptersDetailedImpl(this);\n }\n\n async adapterRegistryCategories(): Promise<AdapterRegistryCategoriesResponse> {\n return adapterRegistryCategoriesImpl(this);\n }\n\n async adapterRegistryAdapters(filters?: {\n category?: string;\n entity?: string;\n keywords?: string[];\n query?: string;\n limit?: number;\n offset?: number;\n }): Promise<AdapterRegistryAdaptersResponse> {\n return adapterRegistryAdaptersImpl(this, filters);\n }\n\n async createAdapterRegistryCategory(\n payload: CreateAdapterRegistryCategoryRequest,\n ): Promise<AdapterRegistryCategory> {\n return createAdapterRegistryCategoryImpl(this, payload);\n }\n\n async submitAdapterRegistryAdapter(\n payload: SubmitAdapterRegistryAdapterRequest,\n ): Promise<AdapterRegistrySubmitAdapterAcceptedResponse> {\n return submitAdapterRegistryAdapterImpl(this, payload);\n }\n\n async adapterRegistrySubmissionStatus(\n submissionId: string,\n ): Promise<AdapterRegistrySubmissionStatusResponse> {\n return adapterRegistrySubmissionStatusImpl(this, submissionId);\n }\n\n async resolveUaid(uaid: string): Promise<ResolvedAgentResponse> {\n return resolveUaidImpl(this, uaid);\n }\n\n async performRegisterAgent(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse> {\n const raw = await this.requestJson<JsonValue>('/register', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n return this.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'register agent response',\n );\n }\n\n private calculateHbarAmount(\n creditsToPurchase: number,\n creditsPerHbar: number,\n ): number {\n if (creditsPerHbar <= 0) {\n throw new Error('creditsPerHbar must be positive');\n }\n if (creditsToPurchase <= 0) {\n throw new Error('creditsToPurchase must be positive');\n }\n const rawHbar = creditsToPurchase / creditsPerHbar;\n const tinybars = Math.ceil(rawHbar * 1e8);\n return tinybars / 1e8;\n }\n\n private resolveCreditsToPurchase(shortfallCredits: number): number {\n if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {\n return 0;\n }\n return Math.max(\n Math.ceil(shortfallCredits),\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n );\n }\n\n async ensureCreditsForRegistration(\n payload: AgentRegistrationRequest,\n autoTopUp: RegisterAgentOptions['autoTopUp'],\n ): Promise<void> {\n const details = autoTopUp ?? null;\n if (!details) {\n return;\n }\n\n if (!details.accountId || !details.accountId.trim()) {\n throw new Error('autoTopUp.accountId is required');\n }\n\n if (!details.privateKey || !details.privateKey.trim()) {\n throw new Error('autoTopUp.privateKey is required');\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const quote = await this.getRegistrationQuote(payload);\n const shortfall = quote.shortfallCredits ?? 0;\n if (shortfall <= 0) {\n return;\n }\n const creditsToPurchase = this.resolveCreditsToPurchase(shortfall);\n if (creditsToPurchase <= 0) {\n return;\n }\n\n const creditsPerHbar = quote.creditsPerHbar ?? null;\n if (!creditsPerHbar || creditsPerHbar <= 0) {\n throw new Error('Unable to determine credits per HBAR for auto top-up');\n }\n\n const hbarAmount = this.calculateHbarAmount(\n creditsToPurchase,\n creditsPerHbar,\n );\n\n await this.purchaseCreditsWithHbar({\n accountId: details.accountId.trim(),\n privateKey: details.privateKey.trim(),\n hbarAmount,\n memo: details.memo ?? 'Registry Broker auto top-up',\n metadata: {\n shortfallCredits: shortfall,\n requiredCredits: quote.requiredCredits,\n purchasedCredits: creditsToPurchase,\n },\n });\n }\n\n const finalQuote = await this.getRegistrationQuote(payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n }\n\n async registerAgent(\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n ): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? this.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return this.performRegisterAgent(payload);\n }\n\n await this.ensureCreditsForRegistration(payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await this.performRegisterAgent(payload);\n } catch (error) {\n const shortfall = this.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await this.ensureCreditsForRegistration(payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n }\n\n async getRegistrationQuote(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentQuoteResponse> {\n return getRegistrationQuoteImpl(this, payload);\n }\n\n async updateAgent(\n uaid: string,\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse> {\n return updateAgentImpl(this, uaid, payload);\n }\n\n async getRegisterStatus(uaid: string): Promise<RegisterStatusResponse> {\n return getRegisterStatusImpl(this, uaid);\n }\n\n async registerOwnedMoltbookAgent(\n uaid: string,\n payload: MoltbookOwnerRegistrationUpdateRequest,\n ): Promise<MoltbookOwnerRegistrationUpdateResponse> {\n return registerOwnedMoltbookAgentImpl(this, uaid, payload);\n }\n\n async getRegistrationProgress(\n attemptId: string,\n ): Promise<RegistrationProgressRecord | null> {\n return getRegistrationProgressImpl(this, attemptId);\n }\n\n async waitForRegistrationCompletion(\n attemptId: string,\n options?: RegistrationProgressWaitOptions,\n ): Promise<RegistrationProgressRecord> {\n return waitForRegistrationCompletionImpl(this, attemptId, options);\n }\n\n async validateUaid(uaid: string): Promise<UaidValidationResponse> {\n return validateUaidImpl(this, uaid);\n }\n\n async getUaidConnectionStatus(uaid: string): Promise<UaidConnectionStatus> {\n return getUaidConnectionStatusImpl(this, uaid);\n }\n\n async closeUaidConnection(uaid: string): Promise<void> {\n return closeUaidConnectionImpl(this, uaid);\n }\n\n async dashboardStats(): Promise<DashboardStatsResponse> {\n return dashboardStatsImpl(this);\n }\n\n async purchaseCreditsWithHbar(params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n }): Promise<CreditPurchaseResponse> {\n return purchaseCreditsWithHbarImpl(this, params);\n }\n\n async getX402Minimums(): Promise<X402MinimumsResponse> {\n return getX402MinimumsImpl(this);\n }\n\n async purchaseCreditsWithX402(\n params: PurchaseCreditsWithX402Params,\n ): Promise<X402PurchaseResult> {\n return purchaseCreditsWithX402Impl(this, params);\n }\n\n async buyCreditsWithX402(\n params: BuyCreditsWithX402Params,\n ): Promise<X402PurchaseResult> {\n return buyCreditsWithX402Impl(this, params);\n }\n\n async generateEncryptionKeyPair(\n options: GenerateEncryptionKeyPairOptions = {},\n ): Promise<{\n privateKey: string;\n publicKey: string;\n envPath?: string;\n envVar: string;\n }> {\n return generateEncryptionKeyPairImpl(this, options);\n }\n\n async createLedgerChallenge(\n payload: LedgerChallengeRequest,\n ): Promise<LedgerChallengeResponse> {\n return createLedgerChallengeImpl(this, payload);\n }\n\n async verifyLedgerChallenge(\n payload: LedgerVerifyRequest,\n ): Promise<LedgerVerifyResponse> {\n return verifyLedgerChallengeImpl(this, payload);\n }\n\n async authenticateWithLedger(\n options: LedgerAuthenticationOptions,\n ): Promise<LedgerVerifyResponse> {\n return authenticateWithLedgerImpl(this, options);\n }\n\n async authenticateWithLedgerCredentials(\n options: LedgerCredentialAuthOptions,\n ): Promise<LedgerVerifyResponse> {\n return authenticateWithLedgerCredentialsImpl(this, options);\n }\n\n async getVerificationStatus(\n uaid: string,\n ): Promise<VerificationStatusResponse> {\n return getVerificationStatusImpl(this, uaid);\n }\n\n async createVerificationChallenge(\n uaid: string,\n ): Promise<VerificationChallengeResponse> {\n return createVerificationChallengeImpl(this, uaid);\n }\n\n async getVerificationChallenge(\n challengeId: string,\n ): Promise<VerificationChallengeDetailsResponse> {\n return getVerificationChallengeImpl(this, challengeId);\n }\n\n async verifyVerificationChallenge(params: {\n challengeId: string;\n method?: 'moltbook-post' | string;\n }): Promise<VerificationVerifyResponse> {\n return verifyVerificationChallengeImpl(this, params);\n }\n\n async getVerificationOwnership(\n uaid: string,\n ): Promise<VerificationOwnershipResponse> {\n return getVerificationOwnershipImpl(this, uaid);\n }\n\n async verifySenderOwnership(\n uaid: string,\n ): Promise<VerificationVerifySenderResponse> {\n return verifySenderOwnershipImpl(this, uaid);\n }\n\n async verifyUaidDnsTxt(\n payload: VerificationDnsVerifyRequest,\n ): Promise<VerificationDnsStatusResponse> {\n return verifyUaidDnsTxtImpl(this, payload);\n }\n\n async getVerificationDnsStatus(\n uaid: string,\n query?: VerificationDnsStatusQuery,\n ): Promise<VerificationDnsStatusResponse> {\n return getVerificationDnsStatusImpl(this, uaid, query);\n }\n\n async fetchHistorySnapshot(\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n ): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n return fetchHistorySnapshotImpl(\n this.conversationContexts,\n this,\n sessionId,\n options,\n );\n }\n\n attachDecryptedHistory(\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n ): ChatHistorySnapshotWithDecryptedEntries {\n return attachDecryptedHistoryImpl(\n this.conversationContexts,\n this,\n sessionId,\n snapshot,\n options,\n );\n }\n\n registerConversationContextForEncryption(\n context: ConversationContextInput,\n ): void {\n registerConversationContextForEncryptionImpl(\n this.conversationContexts,\n context,\n );\n }\n\n resolveDecryptionContext(\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n ): ConversationContextState | null {\n return resolveDecryptionContextImpl(\n this.conversationContexts,\n this,\n sessionId,\n options,\n );\n }\n\n decryptHistoryEntryFromContext(\n _sessionId: string,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n ): string | null {\n return decryptHistoryEntryFromContextImpl(this, entry, context);\n }\n\n async createSession(\n payload: CreateSessionRequestPayload,\n allowHistoryAutoTopUp = true,\n ): Promise<CreateSessionResponse> {\n return createSessionImpl(this, payload, allowHistoryAutoTopUp);\n }\n\n async startChat(options: StartChatOptions): Promise<ChatConversationHandle> {\n return startChatImpl(this, this.getEncryptedChatManager(), options);\n }\n\n async startConversation(\n options: StartConversationOptions,\n ): Promise<ChatConversationHandle> {\n return startConversationImpl(this, this.getEncryptedChatManager(), options);\n }\n\n async acceptConversation(\n options: AcceptConversationOptions,\n ): Promise<ChatConversationHandle> {\n return acceptConversationImpl(\n this,\n this.getEncryptedChatManager(),\n options,\n );\n }\n\n compactHistory(\n payload: CompactHistoryRequestPayload,\n ): Promise<ChatHistoryCompactionResponse> {\n return compactHistoryImpl(this, payload);\n }\n\n fetchEncryptionStatus(\n sessionId: string,\n ): Promise<SessionEncryptionStatusResponse> {\n return fetchEncryptionStatusImpl(this, sessionId);\n }\n\n postEncryptionHandshake(\n sessionId: string,\n payload: EncryptionHandshakeSubmissionPayload,\n ): Promise<EncryptionHandshakeRecord> {\n return postEncryptionHandshakeImpl(this, sessionId, payload);\n }\n\n sendMessage(\n payload: SendMessageRequestPayload,\n ): Promise<SendMessageResponse> {\n return sendMessageImpl(this, payload);\n }\n\n endSession(sessionId: string): Promise<void> {\n return endSessionImpl(this, sessionId);\n }\n\n createPlaintextConversationHandle(\n sessionId: string,\n summary: SessionEncryptionSummary | null,\n defaultAuth?: AgentAuthConfig,\n context?: { uaid?: string; agentUrl?: string },\n ): ChatConversationHandle {\n return createPlaintextConversationHandleImpl(\n this,\n sessionId,\n summary,\n defaultAuth,\n context,\n );\n }\n\n private getEncryptedChatManager(): EncryptedChatManager {\n if (this.encryptedChatManager) {\n return this.encryptedChatManager;\n }\n const manager = new EncryptedChatManager(this);\n this.encryptedChatManager = manager;\n return manager;\n }\n\n private async extractErrorBody(response: Response): Promise<JsonValue> {\n const contentType = response.headers?.get('content-type') ?? '';\n if (JSON_CONTENT_TYPE.test(contentType)) {\n try {\n return (await response.json()) as JsonValue;\n } catch (error) {\n return { parseError: String(error) };\n }\n }\n try {\n return await response.text();\n } catch (error) {\n return { parseError: String(error) };\n }\n }\n\n parseWithSchema<T>(\n value: JsonValue,\n schema: z.ZodSchema<T>,\n context: string,\n ): T {\n try {\n return schema.parse(value);\n } catch (error) {\n throw new RegistryBrokerParseError(\n `Failed to parse ${context}`,\n error instanceof ZodError || error instanceof Error\n ? error\n : String(error),\n value,\n );\n }\n }\n\n async delay(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n resolve();\n }, ms);\n\n const onAbort = (): void => {\n clearTimeout(timer);\n signal?.removeEventListener('abort', onAbort);\n reject(createAbortError());\n };\n\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timer);\n reject(createAbortError());\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n assertNodeRuntime(feature: string): void {\n if (typeof process === 'undefined' || !process.versions?.node) {\n throw new Error(`${feature} is only available in Node.js environments`);\n }\n }\n\n createEphemeralKeyPair(): EphemeralKeyPair {\n this.assertNodeRuntime('generateEphemeralKeyPair');\n const privateKeyBytes = randomBytes(32);\n const publicKey = secp256k1.getPublicKey(privateKeyBytes, true);\n return {\n privateKey: Buffer.from(privateKeyBytes).toString('hex'),\n publicKey: Buffer.from(publicKey).toString('hex'),\n };\n }\n\n deriveSharedSecret(options: DeriveSharedSecretOptions): Buffer {\n this.assertNodeRuntime('deriveSharedSecret');\n const privateKey = this.hexToBuffer(options.privateKey);\n const peerPublicKey = this.hexToBuffer(options.peerPublicKey);\n const shared = secp256k1.getSharedSecret(privateKey, peerPublicKey, true);\n return createHash('sha256').update(Buffer.from(shared)).digest();\n }\n\n buildCipherEnvelope(options: EncryptCipherEnvelopeOptions): CipherEnvelope {\n this.assertNodeRuntime('encryptCipherEnvelope');\n const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);\n const iv = randomBytes(12);\n const cipher = createCipheriv('aes-256-gcm', sharedSecret, iv);\n const aadSource = options.associatedData ?? options.sessionId;\n const associatedDataEncoded = aadSource\n ? Buffer.from(aadSource, 'utf8').toString('base64')\n : undefined;\n if (aadSource) {\n cipher.setAAD(Buffer.from(aadSource, 'utf8'));\n }\n const ciphertext = Buffer.concat([\n cipher.update(Buffer.from(options.plaintext, 'utf8')),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n const payload = Buffer.concat([ciphertext, tag]);\n\n return {\n algorithm: 'aes-256-gcm',\n ciphertext: payload.toString('base64'),\n nonce: iv.toString('base64'),\n associatedData: associatedDataEncoded,\n keyLocator: {\n sessionId: options.sessionId,\n revision: options.revision ?? 1,\n },\n recipients: options.recipients.map(recipient => ({\n ...recipient,\n encryptedShare: '',\n })),\n };\n }\n\n openCipherEnvelope(options: DecryptCipherEnvelopeOptions): string {\n this.assertNodeRuntime('decryptCipherEnvelope');\n const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);\n const payload = Buffer.from(options.envelope.ciphertext, 'base64');\n const nonce = Buffer.from(options.envelope.nonce, 'base64');\n const ciphertext = payload.slice(0, payload.length - 16);\n const tag = payload.slice(payload.length - 16);\n const decipher = createDecipheriv('aes-256-gcm', sharedSecret, nonce);\n if (options.envelope.associatedData) {\n decipher.setAAD(Buffer.from(options.envelope.associatedData, 'base64'));\n }\n decipher.setAuthTag(tag);\n const plaintext = Buffer.concat([\n decipher.update(ciphertext),\n decipher.final(),\n ]);\n return plaintext.toString(options.encoding ?? 'utf8');\n }\n\n normalizeSharedSecret(input: SharedSecretInput): Buffer {\n if (Buffer.isBuffer(input)) {\n return Buffer.from(input);\n }\n if (input instanceof Uint8Array) {\n return Buffer.from(input);\n }\n if (typeof input === 'string') {\n return this.bufferFromString(input);\n }\n throw new Error('Unsupported shared secret input');\n }\n\n bufferFromString(value: string): Buffer {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('sharedSecret string cannot be empty');\n }\n const normalized = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;\n if (/^[0-9a-fA-F]+$/.test(normalized) && normalized.length % 2 === 0) {\n return Buffer.from(normalized, 'hex');\n }\n return Buffer.from(trimmed, 'base64');\n }\n\n hexToBuffer(value: string): Uint8Array {\n const normalized = value.startsWith('0x') ? value.slice(2) : value;\n if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {\n throw new Error('Expected hex-encoded value');\n }\n return Buffer.from(normalized, 'hex');\n }\n\n extractInsufficientCreditsDetails(error: unknown): {\n shortfallCredits: number;\n } | null {\n if (!(error instanceof RegistryBrokerError) || error.status !== 402) {\n return null;\n }\n\n const body = error.body;\n if (!body || typeof body !== 'object' || Array.isArray(body)) {\n return null;\n }\n\n const maybeShortfall = (body as JsonObject)['shortfallCredits'];\n if (typeof maybeShortfall !== 'number' || maybeShortfall <= 0) {\n return null;\n }\n\n return { shortfallCredits: maybeShortfall };\n }\n\n private extractErrorMessage(body: JsonValue): string | undefined {\n if (typeof body === 'string') {\n return body;\n }\n if (isJsonObject(body) && typeof body.error === 'string') {\n return body.error;\n }\n if (isJsonObject(body) && typeof body.message === 'string') {\n return body.message;\n }\n return undefined;\n }\n\n shouldAutoTopUpHistory(\n payload: CreateSessionRequestPayload,\n error: Error | null,\n ): boolean {\n if (!this.historyAutoTopUp || payload.historyTtlSeconds === undefined) {\n return false;\n }\n if (!(error instanceof RegistryBrokerError)) {\n return false;\n }\n if (error.status !== 402) {\n return false;\n }\n const message = this.extractErrorMessage(error.body);\n if (!message) {\n return true;\n }\n const normalised = message.toLowerCase();\n return (\n normalised.includes('history') || normalised.includes('chat history')\n );\n }\n\n async executeHistoryAutoTopUp(reason: string): Promise<void> {\n if (!this.historyAutoTopUp) {\n return;\n }\n const hbarAmount =\n this.historyAutoTopUp.hbarAmount && this.historyAutoTopUp.hbarAmount > 0\n ? this.historyAutoTopUp.hbarAmount\n : DEFAULT_HISTORY_TOP_UP_HBAR;\n await this.purchaseCreditsWithHbar({\n accountId: this.historyAutoTopUp.accountId,\n privateKey: this.historyAutoTopUp.privateKey,\n hbarAmount,\n memo:\n this.historyAutoTopUp.memo ??\n 'registry-broker-client:chat-history-topup',\n metadata: {\n purpose: 'chat-history',\n reason,\n },\n });\n }\n\n initializeEncryptionBootstrap(\n options: ClientEncryptionOptions,\n ): Promise<void> {\n return this.bootstrapEncryptionOptions(options).then((): void => undefined);\n }\n\n bootstrapEncryptionOptions(\n options?: ClientEncryptionOptions,\n ): Promise<{ publicKey: string; privateKey?: string } | null> {\n return bootstrapEncryptionOptionsImpl(this, options);\n }\n}\n\nexport const isPendingRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentPendingResponse => response.status === 'pending';\n\nexport const isPartialRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentPartialResponse =>\n response.status === 'partial' && response.success === false;\n\nexport const isSuccessRegisterAgentResponse = (\n response: RegisterAgentResponse,\n): response is RegisterAgentSuccessResponse =>\n response.success === true && response.status !== 'pending';\n"],"names":["searchImpl","statsImpl","registriesImpl","getAdditionalRegistriesImpl","popularSearchesImpl","listProtocolsImpl","detectProtocolImpl","registrySearchByNamespaceImpl","vectorSearchImpl","searchStatusImpl","websocketStatsImpl","metricsSummaryImpl","facetsImpl","adaptersImpl","skillsConfigImpl","listSkillsImpl","getSkillSecurityBreakdownImpl","getSkillsCatalogImpl","listSkillVersionsImpl","listMySkillsImpl","getMySkillsListImpl","quoteSkillPublishImpl","publishSkillImpl","getSkillPublishJobImpl","getSkillOwnershipImpl","getRecommendedSkillVersionImpl","setRecommendedSkillVersionImpl","getSkillDeprecationsImpl","setSkillDeprecationImpl","getSkillBadgeImpl","listSkillTagsImpl","listSkillCategoriesImpl","resolveSkillMarkdownImpl","resolveSkillManifestImpl","getSkillVoteStatusImpl","setSkillVoteImpl","requestSkillVerificationImpl","getSkillVerificationStatusImpl","createSkillDomainProofChallengeImpl","verifySkillDomainProofImpl","adaptersDetailedImpl","adapterRegistryCategoriesImpl","adapterRegistryAdaptersImpl","createAdapterRegistryCategoryImpl","submitAdapterRegistryAdapterImpl","adapterRegistrySubmissionStatusImpl","resolveUaidImpl","getRegistrationQuoteImpl","updateAgentImpl","getRegisterStatusImpl","registerOwnedMoltbookAgentImpl","getRegistrationProgressImpl","waitForRegistrationCompletionImpl","validateUaidImpl","getUaidConnectionStatusImpl","closeUaidConnectionImpl","dashboardStatsImpl","purchaseCreditsWithHbarImpl","getX402MinimumsImpl","purchaseCreditsWithX402Impl","buyCreditsWithX402Impl","generateEncryptionKeyPairImpl","createLedgerChallengeImpl","verifyLedgerChallengeImpl","authenticateWithLedgerImpl","authenticateWithLedgerCredentialsImpl","getVerificationStatusImpl","createVerificationChallengeImpl","getVerificationChallengeImpl","verifyVerificationChallengeImpl","getVerificationOwnershipImpl","verifySenderOwnershipImpl","verifyUaidDnsTxtImpl","getVerificationDnsStatusImpl","fetchHistorySnapshotImpl","attachDecryptedHistoryImpl","registerConversationContextForEncryptionImpl","resolveDecryptionContextImpl","decryptHistoryEntryFromContextImpl","createSessionImpl","startChatImpl","startConversationImpl","acceptConversationImpl","compactHistoryImpl","fetchEncryptionStatusImpl","postEncryptionHandshakeImpl","sendMessageImpl","endSessionImpl","createPlaintextConversationHandleImpl","bootstrapEncryptionOptionsImpl"],"mappings":"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"}
|
|
@@ -1,33 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const HOL_CHAT_PROTOCOL_ID = "hol-chat";
|
|
2
|
+
const isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
const isHolChatOp = (value) => {
|
|
4
|
+
if (!isRecord(value)) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
if (value.p !== HOL_CHAT_PROTOCOL_ID) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (typeof value.request_id !== "string" || value.request_id.trim().length === 0) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const op = value.op;
|
|
14
|
+
if (op !== "payment_request" && op !== "payment_approve" && op !== "payment_decline" && op !== "payment_result" && op !== "job_status") {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
};
|
|
19
|
+
const parseHolChatOps = (ops) => {
|
|
20
|
+
if (!Array.isArray(ops)) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return ops.filter(isHolChatOp).map((op) => {
|
|
24
|
+
const next = {
|
|
25
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
26
|
+
op: op.op,
|
|
27
|
+
request_id: op.request_id.trim()
|
|
28
|
+
};
|
|
29
|
+
if (typeof op.m === "string" && op.m.trim().length > 0) {
|
|
30
|
+
next.m = op.m.trim();
|
|
31
|
+
}
|
|
32
|
+
if (isRecord(op.data)) {
|
|
33
|
+
next.data = { ...op.data };
|
|
34
|
+
}
|
|
35
|
+
return next;
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const buildPaymentApproveMessage = (input) => JSON.stringify({
|
|
39
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
40
|
+
op: "payment_approve",
|
|
41
|
+
request_id: input.requestId,
|
|
42
|
+
data: { job_id: input.jobId }
|
|
43
|
+
});
|
|
44
|
+
const buildPaymentDeclineMessage = (input) => JSON.stringify({
|
|
45
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
46
|
+
op: "payment_decline",
|
|
47
|
+
request_id: input.requestId
|
|
48
|
+
});
|
|
49
|
+
const buildJobStatusMessage = (input) => JSON.stringify({
|
|
50
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
51
|
+
op: "job_status",
|
|
52
|
+
request_id: input.requestId,
|
|
53
|
+
data: { job_id: input.jobId }
|
|
54
|
+
});
|
|
8
55
|
export {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
HCS10Client,
|
|
16
|
-
Hcs10MemoType,
|
|
17
|
-
PayloadSizeError,
|
|
18
|
-
Registration,
|
|
19
|
-
TopicCreationError,
|
|
20
|
-
buildHcs10ConfirmConnectionTx,
|
|
21
|
-
buildHcs10CreateConnectionTopicTx,
|
|
22
|
-
buildHcs10CreateInboundTopicTx,
|
|
23
|
-
buildHcs10CreateOutboundTopicTx,
|
|
24
|
-
buildHcs10CreateRegistryTopicTx,
|
|
25
|
-
buildHcs10OutboundConnectionCreatedRecordTx,
|
|
26
|
-
buildHcs10OutboundConnectionRequestRecordTx,
|
|
27
|
-
buildHcs10RegistryDeleteTx,
|
|
28
|
-
buildHcs10RegistryMigrateTx,
|
|
29
|
-
buildHcs10RegistryRegisterTx,
|
|
30
|
-
buildHcs10SendMessageTx,
|
|
31
|
-
buildHcs10SubmitConnectionRequestTx
|
|
56
|
+
HOL_CHAT_PROTOCOL_ID,
|
|
57
|
+
buildJobStatusMessage,
|
|
58
|
+
buildPaymentApproveMessage,
|
|
59
|
+
buildPaymentDeclineMessage,
|
|
60
|
+
isHolChatOp,
|
|
61
|
+
parseHolChatOps
|
|
32
62
|
};
|
|
33
63
|
//# sourceMappingURL=standards-sdk.es150.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es150.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standards-sdk.es150.js","sources":["../../src/services/registry-broker/hol-chat-ops.ts"],"sourcesContent":["export const HOL_CHAT_PROTOCOL_ID = 'hol-chat' as const;\n\nexport type HolChatOpName =\n | 'payment_request'\n | 'payment_approve'\n | 'payment_decline'\n | 'payment_result'\n | 'job_status';\n\nexport interface HolChatOpBase {\n p: typeof HOL_CHAT_PROTOCOL_ID;\n op: HolChatOpName;\n request_id: string;\n m?: string;\n data?: Record<string, unknown>;\n}\n\nexport type HolChatOp = HolChatOpBase;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n\nexport const isHolChatOp = (value: unknown): value is HolChatOp => {\n if (!isRecord(value)) {\n return false;\n }\n if (value.p !== HOL_CHAT_PROTOCOL_ID) {\n return false;\n }\n if (\n typeof value.request_id !== 'string' ||\n value.request_id.trim().length === 0\n ) {\n return false;\n }\n const op = value.op;\n if (\n op !== 'payment_request' &&\n op !== 'payment_approve' &&\n op !== 'payment_decline' &&\n op !== 'payment_result' &&\n op !== 'job_status'\n ) {\n return false;\n }\n return true;\n};\n\nexport const parseHolChatOps = (ops: unknown): HolChatOp[] => {\n if (!Array.isArray(ops)) {\n return [];\n }\n return ops.filter(isHolChatOp).map(op => {\n const next: HolChatOp = {\n p: HOL_CHAT_PROTOCOL_ID,\n op: op.op,\n request_id: op.request_id.trim(),\n };\n if (typeof op.m === 'string' && op.m.trim().length > 0) {\n next.m = op.m.trim();\n }\n if (isRecord(op.data)) {\n next.data = { ...op.data };\n }\n return next;\n });\n};\n\nexport const buildPaymentApproveMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_approve',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n\nexport const buildPaymentDeclineMessage = (input: {\n requestId: string;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_decline',\n request_id: input.requestId,\n });\n\nexport const buildJobStatusMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'job_status',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n"],"names":[],"mappings":"AAAO,MAAM,uBAAuB;AAmBpC,MAAM,WAAW,CAAC,UAChB,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAE9D,MAAM,cAAc,CAAC,UAAuC;AACjE,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,MAAM,sBAAsB;AACpC,WAAO;AAAA,EACT;AACA,MACE,OAAO,MAAM,eAAe,YAC5B,MAAM,WAAW,KAAA,EAAO,WAAW,GACnC;AACA,WAAO;AAAA,EACT;AACA,QAAM,KAAK,MAAM;AACjB,MACE,OAAO,qBACP,OAAO,qBACP,OAAO,qBACP,OAAO,oBACP,OAAO,cACP;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,kBAAkB,CAAC,QAA8B;AAC5D,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,WAAO,CAAA;AAAA,EACT;AACA,SAAO,IAAI,OAAO,WAAW,EAAE,IAAI,CAAA,OAAM;AACvC,UAAM,OAAkB;AAAA,MACtB,GAAG;AAAA,MACH,IAAI,GAAG;AAAA,MACP,YAAY,GAAG,WAAW,KAAA;AAAA,IAAK;AAEjC,QAAI,OAAO,GAAG,MAAM,YAAY,GAAG,EAAE,KAAA,EAAO,SAAS,GAAG;AACtD,WAAK,IAAI,GAAG,EAAE,KAAA;AAAA,IAChB;AACA,QAAI,SAAS,GAAG,IAAI,GAAG;AACrB,WAAK,OAAO,EAAE,GAAG,GAAG,KAAA;AAAA,IACtB;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,MAAM,6BAA6B,CAAC,UAIzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;AAEI,MAAM,6BAA6B,CAAC,UAGzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AACpB,CAAC;AAEI,MAAM,wBAAwB,CAAC,UAIpC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;"}
|
|
@@ -1,37 +1,162 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { CustomFeeType } from "./standards-sdk.es152.js";
|
|
2
|
+
import { HederaMirrorNode } from "./standards-sdk.es144.js";
|
|
3
|
+
class FeeConfigBuilder {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.customFees = [];
|
|
6
|
+
this.logger = options.logger;
|
|
7
|
+
this.mirrorNode = new HederaMirrorNode(options.network, options.logger);
|
|
8
|
+
this.defaultCollectorAccountId = options.defaultCollectorAccountId || "";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Static factory method to create a FeeConfigBuilder with a single HBAR fee.
|
|
12
|
+
* @param hbarAmount Amount in HBAR.
|
|
13
|
+
* @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
|
|
14
|
+
* @param network Network type ('mainnet' or 'testnet').
|
|
15
|
+
* @param logger Logger instance.
|
|
16
|
+
* @param exemptAccounts Optional array of account IDs exempt from this fee.
|
|
17
|
+
* @returns A configured FeeConfigBuilder instance.
|
|
18
|
+
*/
|
|
19
|
+
static forHbar(hbarAmount, collectorAccountId, network, logger, exemptAccounts = []) {
|
|
20
|
+
const builder = new FeeConfigBuilder({
|
|
21
|
+
network,
|
|
22
|
+
logger,
|
|
23
|
+
defaultCollectorAccountId: collectorAccountId
|
|
24
|
+
});
|
|
25
|
+
return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Static factory method to create a FeeConfigBuilder with a single token fee.
|
|
29
|
+
* Automatically fetches token decimals if not provided.
|
|
30
|
+
* @param tokenAmount Amount of tokens.
|
|
31
|
+
* @param feeTokenId Token ID for the fee.
|
|
32
|
+
* @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
|
|
33
|
+
* @param network Network type ('mainnet' or 'testnet').
|
|
34
|
+
* @param logger Logger instance.
|
|
35
|
+
* @param exemptAccounts Optional array of account IDs exempt from this fee.
|
|
36
|
+
* @param decimals Optional decimals for the token (fetched if omitted).
|
|
37
|
+
* @returns A Promise resolving to a configured FeeConfigBuilder instance.
|
|
38
|
+
*/
|
|
39
|
+
static async forToken(tokenAmount, feeTokenId, collectorAccountId, network, logger, exemptAccounts = [], decimals) {
|
|
40
|
+
const builder = new FeeConfigBuilder({
|
|
41
|
+
network,
|
|
42
|
+
logger,
|
|
43
|
+
defaultCollectorAccountId: collectorAccountId
|
|
44
|
+
});
|
|
45
|
+
await builder.addTokenFee(
|
|
46
|
+
tokenAmount,
|
|
47
|
+
feeTokenId,
|
|
48
|
+
collectorAccountId,
|
|
49
|
+
decimals,
|
|
50
|
+
exemptAccounts
|
|
51
|
+
);
|
|
52
|
+
return builder;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Adds an HBAR fee configuration to the builder.
|
|
56
|
+
* Allows chaining multiple fee additions.
|
|
57
|
+
* @param hbarAmount The amount in HBAR (e.g., 0.5).
|
|
58
|
+
* @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
|
|
59
|
+
* @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.
|
|
60
|
+
* @returns This FeeConfigBuilder instance for chaining.
|
|
61
|
+
*/
|
|
62
|
+
addHbarFee(hbarAmount, collectorAccountId, exemptAccountIds = []) {
|
|
63
|
+
if (hbarAmount <= 0) {
|
|
64
|
+
throw new Error("HBAR amount must be greater than zero");
|
|
65
|
+
}
|
|
66
|
+
this.customFees.push({
|
|
67
|
+
feeAmount: {
|
|
68
|
+
amount: hbarAmount * 1e8,
|
|
69
|
+
decimals: 0
|
|
70
|
+
},
|
|
71
|
+
feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
|
|
72
|
+
feeTokenId: void 0,
|
|
73
|
+
exemptAccounts: [...exemptAccountIds],
|
|
74
|
+
type: CustomFeeType.FIXED_FEE
|
|
75
|
+
});
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Adds a token fee configuration to the builder.
|
|
80
|
+
* Allows chaining multiple fee additions.
|
|
81
|
+
* Fetches token decimals automatically if not provided.
|
|
82
|
+
* @param tokenAmount The amount of the specified token.
|
|
83
|
+
* @param feeTokenId The ID of the token to charge the fee in.
|
|
84
|
+
* @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
|
|
85
|
+
* @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.
|
|
86
|
+
* @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.
|
|
87
|
+
* @returns A Promise resolving to this FeeConfigBuilder instance for chaining.
|
|
88
|
+
*/
|
|
89
|
+
async addTokenFee(tokenAmount, feeTokenId, collectorAccountId, decimals, exemptAccountIds = []) {
|
|
90
|
+
if (tokenAmount <= 0) {
|
|
91
|
+
throw new Error("Token amount must be greater than zero");
|
|
92
|
+
}
|
|
93
|
+
if (!feeTokenId) {
|
|
94
|
+
throw new Error("Fee token ID is required when adding a token fee");
|
|
95
|
+
}
|
|
96
|
+
let finalDecimals = decimals;
|
|
97
|
+
if (finalDecimals === void 0) {
|
|
98
|
+
try {
|
|
99
|
+
const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);
|
|
100
|
+
if (tokenInfo?.decimals) {
|
|
101
|
+
finalDecimals = parseInt(tokenInfo.decimals, 10);
|
|
102
|
+
this.logger.info(
|
|
103
|
+
`Fetched decimals for ${feeTokenId}: ${finalDecimals}`
|
|
104
|
+
);
|
|
105
|
+
} else {
|
|
106
|
+
this.logger.warn(
|
|
107
|
+
`Could not fetch decimals for ${feeTokenId}, defaulting to 0.`
|
|
108
|
+
);
|
|
109
|
+
finalDecimals = 0;
|
|
110
|
+
}
|
|
111
|
+
} catch (error) {
|
|
112
|
+
this.logger.error(
|
|
113
|
+
`Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`
|
|
114
|
+
);
|
|
115
|
+
finalDecimals = 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.customFees.push({
|
|
119
|
+
feeAmount: {
|
|
120
|
+
amount: tokenAmount * 10 ** finalDecimals,
|
|
121
|
+
decimals: finalDecimals
|
|
122
|
+
},
|
|
123
|
+
feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
|
|
124
|
+
feeTokenId,
|
|
125
|
+
exemptAccounts: [...exemptAccountIds],
|
|
126
|
+
type: CustomFeeType.FIXED_FEE
|
|
127
|
+
});
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Builds the final TopicFeeConfig object.
|
|
132
|
+
* @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.
|
|
133
|
+
* @throws Error if no fees have been added.
|
|
134
|
+
* @throws Error if more than 10 fees have been added.
|
|
135
|
+
*/
|
|
136
|
+
build() {
|
|
137
|
+
if (this.customFees.length === 0) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
"At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken"
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
if (this.customFees.length > 10) {
|
|
143
|
+
throw new Error("Maximum of 10 custom fees per topic allowed");
|
|
144
|
+
}
|
|
145
|
+
const allExemptAccounts = /* @__PURE__ */ new Set();
|
|
146
|
+
this.customFees.forEach((fee) => {
|
|
147
|
+
fee.exemptAccounts.forEach((account) => allExemptAccounts.add(account));
|
|
148
|
+
});
|
|
149
|
+
const resolvedCustomFees = this.customFees.map((fee) => ({
|
|
150
|
+
...fee,
|
|
151
|
+
feeCollectorAccountId: fee.feeCollectorAccountId || this.defaultCollectorAccountId
|
|
152
|
+
}));
|
|
153
|
+
return {
|
|
154
|
+
customFees: resolvedCustomFees,
|
|
155
|
+
exemptAccounts: Array.from(allExemptAccounts)
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
7
159
|
export {
|
|
8
|
-
|
|
9
|
-
AIAgentDetailsSchema,
|
|
10
|
-
AIAgentProfileSchema,
|
|
11
|
-
AIAgentType,
|
|
12
|
-
AgentBuilder,
|
|
13
|
-
BaseProfileSchema,
|
|
14
|
-
EndpointType,
|
|
15
|
-
FloraBuilder,
|
|
16
|
-
HCS11Client,
|
|
17
|
-
HCS11ProfileSchema,
|
|
18
|
-
InboundTopicType,
|
|
19
|
-
MCPServerBuilder,
|
|
20
|
-
MCPServerCapability,
|
|
21
|
-
MCPServerConnectionInfoSchema,
|
|
22
|
-
MCPServerDetailsSchema,
|
|
23
|
-
MCPServerHostSchema,
|
|
24
|
-
MCPServerProfileSchema,
|
|
25
|
-
MCPServerResourceSchema,
|
|
26
|
-
MCPServerToolSchema,
|
|
27
|
-
MCPServerVerificationSchema,
|
|
28
|
-
PersonBuilder,
|
|
29
|
-
PersonalProfileSchema,
|
|
30
|
-
ProfileType,
|
|
31
|
-
SUPPORTED_SOCIAL_PLATFORMS,
|
|
32
|
-
SocialLinkSchema,
|
|
33
|
-
VerificationType,
|
|
34
|
-
capabilityNameToCapabilityMap,
|
|
35
|
-
mcpServiceNameToCapabilityMap
|
|
160
|
+
FeeConfigBuilder
|
|
36
161
|
};
|
|
37
162
|
//# sourceMappingURL=standards-sdk.es151.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es151.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es151.js","sources":["../../src/fees/fee-config-builder.ts"],"sourcesContent":["import {\n FeeConfigBuilderInterface,\n TokenFeeConfig,\n TopicFeeConfig,\n CustomFeeType,\n} from './types';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * FeeConfigBuilder provides a fluent interface for creating fee configurations\n * for HCS-10 topics. This makes it easy to configure fees without dealing with\n * the complexity of the underlying fee structure.\n *\n * Example usage:\n *\n * // Super simple one-liner with the factory method\n * const simpleFeeConfig = FeeConfigBuilder.forHbar(5, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']);\n *\n * // With multiple fees:\n * const multipleFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: '0.0.12345',\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(1) // 1 HBAR fee\n * .withTokenFee(10, '0.0.54321') // 10 units of token 0.0.54321\n * .build();\n *\n * With Agent Builder\n * const agent = new AgentBuilder()\n * .setName('Fee Collector Agent')\n * .setDescription('An agent that collects fees')\n * .setInboundTopicType(InboundTopicType.FEE_BASED)\n * .setFeeConfig(FeeConfigBuilder.forHbar(1, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']))\n * .setNetwork('testnet')\n .build();\n\n * Directly with client\n * const client = new HCS10Client(config);\n * const connectionFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: client.getAccountAndSigner().accountId,\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(0.5) // 0.5 HBAR (simple!)\n * .build();\n\n * const result = await client.handleConnectionRequest(\n * inboundTopicId,\n * requestingAccountId,\n * connectionRequestId,\n * connectionFeeConfig\n * );\n*/\nexport interface FeeConfigBuilderOptions {\n network: NetworkType;\n logger: Logger;\n defaultCollectorAccountId?: string;\n}\n\nexport class FeeConfigBuilder implements FeeConfigBuilderInterface {\n private customFees: TokenFeeConfig[] = [];\n private mirrorNode: HederaMirrorNode;\n private logger: Logger;\n private defaultCollectorAccountId: string;\n\n constructor(options: FeeConfigBuilderOptions) {\n this.logger = options.logger;\n this.mirrorNode = new HederaMirrorNode(options.network, options.logger);\n this.defaultCollectorAccountId = options.defaultCollectorAccountId || '';\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single HBAR fee.\n * @param hbarAmount Amount in HBAR.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @returns A configured FeeConfigBuilder instance.\n */\n static forHbar(\n hbarAmount: number,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n ): FeeConfigBuilder {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single token fee.\n * Automatically fetches token decimals if not provided.\n * @param tokenAmount Amount of tokens.\n * @param feeTokenId Token ID for the fee.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @param decimals Optional decimals for the token (fetched if omitted).\n * @returns A Promise resolving to a configured FeeConfigBuilder instance.\n */\n static async forToken(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n decimals?: number,\n ): Promise<FeeConfigBuilder> {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n await builder.addTokenFee(\n tokenAmount,\n feeTokenId,\n collectorAccountId,\n decimals,\n exemptAccounts,\n );\n return builder;\n }\n\n /**\n * Adds an HBAR fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * @param hbarAmount The amount in HBAR (e.g., 0.5).\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.\n * @returns This FeeConfigBuilder instance for chaining.\n */\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds: string[] = [],\n ): FeeConfigBuilder {\n if (hbarAmount <= 0) {\n throw new Error('HBAR amount must be greater than zero');\n }\n\n this.customFees.push({\n feeAmount: {\n amount: hbarAmount * 100_000_000,\n decimals: 0,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: undefined,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Adds a token fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * Fetches token decimals automatically if not provided.\n * @param tokenAmount The amount of the specified token.\n * @param feeTokenId The ID of the token to charge the fee in.\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.\n * @returns A Promise resolving to this FeeConfigBuilder instance for chaining.\n */\n async addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds: string[] = [],\n ): Promise<FeeConfigBuilder> {\n if (tokenAmount <= 0) {\n throw new Error('Token amount must be greater than zero');\n }\n if (!feeTokenId) {\n throw new Error('Fee token ID is required when adding a token fee');\n }\n\n let finalDecimals = decimals;\n if (finalDecimals === undefined) {\n try {\n const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);\n if (tokenInfo?.decimals) {\n finalDecimals = parseInt(tokenInfo.decimals, 10);\n this.logger.info(\n `Fetched decimals for ${feeTokenId}: ${finalDecimals}`,\n );\n } else {\n this.logger.warn(\n `Could not fetch decimals for ${feeTokenId}, defaulting to 0.`,\n );\n finalDecimals = 0;\n }\n } catch (error) {\n this.logger.error(\n `Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`,\n );\n finalDecimals = 0;\n }\n }\n\n this.customFees.push({\n feeAmount: {\n amount: tokenAmount * 10 ** finalDecimals,\n decimals: finalDecimals,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: feeTokenId,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Builds the final TopicFeeConfig object.\n * @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.\n * @throws Error if no fees have been added.\n * @throws Error if more than 10 fees have been added.\n */\n build(): TopicFeeConfig {\n if (this.customFees.length === 0) {\n throw new Error(\n 'At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken',\n );\n }\n\n if (this.customFees.length > 10) {\n throw new Error('Maximum of 10 custom fees per topic allowed');\n }\n\n const allExemptAccounts = new Set<string>();\n this.customFees.forEach(fee => {\n fee.exemptAccounts.forEach(account => allExemptAccounts.add(account));\n });\n\n const resolvedCustomFees = this.customFees.map(fee => ({\n ...fee,\n feeCollectorAccountId:\n fee.feeCollectorAccountId || this.defaultCollectorAccountId,\n }));\n\n return {\n customFees: resolvedCustomFees,\n exemptAccounts: Array.from(allExemptAccounts),\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { HieroDidResolver } from "./standards-sdk.es60.js";
|
|
8
|
-
import { HCS11ProfileResolver } from "./standards-sdk.es61.js";
|
|
9
|
-
import { AID_DNS_WEB_PROFILE_ID, AidDnsWebProfileResolver } from "./standards-sdk.es62.js";
|
|
10
|
-
import { ANS_DNS_WEB_PROFILE_ID, AnsDnsWebProfileResolver } from "./standards-sdk.es63.js";
|
|
11
|
-
import { UAID_DNS_WEB_PROFILE_ID, UaidDnsWebProfileResolver } from "./standards-sdk.es64.js";
|
|
12
|
-
import { UAID_DID_RESOLUTION_PROFILE_ID, UaidDidResolutionProfileResolver } from "./standards-sdk.es65.js";
|
|
13
|
-
import { nodeDnsTxtLookup } from "./standards-sdk.es66.js";
|
|
14
|
-
import { HCS14Client } from "./standards-sdk.es67.js";
|
|
15
|
-
import { IssuerRegistry, defaultIssuerRegistry } from "./standards-sdk.es68.js";
|
|
16
|
-
import { HederaHieroIssuer } from "./standards-sdk.es69.js";
|
|
1
|
+
var CustomFeeType = /* @__PURE__ */ ((CustomFeeType2) => {
|
|
2
|
+
CustomFeeType2["FIXED_FEE"] = "FIXED_FEE";
|
|
3
|
+
CustomFeeType2["FRACTIONAL_FEE"] = "FRACTIONAL_FEE";
|
|
4
|
+
CustomFeeType2["ROYALTY_FEE"] = "ROYALTY_FEE";
|
|
5
|
+
return CustomFeeType2;
|
|
6
|
+
})(CustomFeeType || {});
|
|
17
7
|
export {
|
|
18
|
-
|
|
19
|
-
ANS_DNS_WEB_PROFILE_ID,
|
|
20
|
-
AidDnsWebProfileResolver,
|
|
21
|
-
AnsDnsWebProfileResolver,
|
|
22
|
-
CanonicalAgentDataSchema,
|
|
23
|
-
HCS11ProfileResolver,
|
|
24
|
-
HCS14Client,
|
|
25
|
-
HCS14_PROTOCOL_REGEX,
|
|
26
|
-
HederaHieroIssuer,
|
|
27
|
-
HieroDidResolver,
|
|
28
|
-
IssuerRegistry,
|
|
29
|
-
ResolverRegistry,
|
|
30
|
-
UAID_DID_RESOLUTION_PROFILE_ID,
|
|
31
|
-
UAID_DNS_WEB_PROFILE_ID,
|
|
32
|
-
UaidDidResolutionProfileResolver,
|
|
33
|
-
UaidDnsWebProfileResolver,
|
|
34
|
-
canonicalizeAgentData,
|
|
35
|
-
createUaid,
|
|
36
|
-
defaultIssuerRegistry,
|
|
37
|
-
defaultResolverRegistry,
|
|
38
|
-
isDidProfileResolverAdapter,
|
|
39
|
-
isDidResolverAdapter,
|
|
40
|
-
isEip155Caip10,
|
|
41
|
-
isHederaCaip10,
|
|
42
|
-
isHederaNetwork,
|
|
43
|
-
isUaidProfileResolverAdapter,
|
|
44
|
-
nodeDnsTxtLookup,
|
|
45
|
-
parseHcs14Did,
|
|
46
|
-
parseHederaCaip10,
|
|
47
|
-
registerDefaultResolvers,
|
|
48
|
-
toEip155Caip10,
|
|
49
|
-
toHederaCaip10
|
|
8
|
+
CustomFeeType
|
|
50
9
|
};
|
|
51
10
|
//# sourceMappingURL=standards-sdk.es152.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es152.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standards-sdk.es152.js","sources":["../../src/fees/types.ts"],"sourcesContent":["export interface FeeConfigBuilderInterface {\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds?: string[],\n ): FeeConfigBuilderInterface;\n addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds?: string[],\n ): Promise<FeeConfigBuilderInterface>;\n build(): TopicFeeConfig;\n}\n\nexport enum CustomFeeType {\n FIXED_FEE = 'FIXED_FEE',\n FRACTIONAL_FEE = 'FRACTIONAL_FEE',\n ROYALTY_FEE = 'ROYALTY_FEE',\n}\n\nexport type FeeAmount = {\n amount: number;\n decimals?: number;\n};\n\nexport interface TokenFeeConfig {\n feeAmount: FeeAmount;\n feeCollectorAccountId: string;\n feeTokenId?: string;\n exemptAccounts: string[];\n type: CustomFeeType;\n}\n\nexport interface TopicFeeConfig {\n customFees: TokenFeeConfig[];\n exemptAccounts: string[];\n}\n"],"names":["CustomFeeType"],"mappings":"AAgBO,IAAK,kCAAAA,mBAAL;AACLA,iBAAA,WAAA,IAAY;AACZA,iBAAA,gBAAA,IAAiB;AACjBA,iBAAA,aAAA,IAAc;AAHJ,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;"}
|