@hashgraphonline/standards-sdk 0.1.143-feat-solana-register.canary.b9faba1.72 → 0.1.143-feat-solana-register.canary.74520ad.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/hcs-16/tx.d.ts +1 -1
- package/dist/cjs/hcs-16/tx.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/feedback.d.ts +9 -0
- package/dist/cjs/services/registry-broker/client/feedback.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +189 -16
- package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/types.d.ts +19 -1
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-16/tx.d.ts +1 -1
- package/dist/es/hcs-16/tx.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/feedback.d.ts +9 -0
- package/dist/es/services/registry-broker/client/feedback.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +189 -16
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/services/registry-broker/types.d.ts +19 -1
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +9 -8
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +1 -1
- package/dist/es/standards-sdk.es102.js +1 -1
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es110.js +2 -1
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es125.js +1 -1
- package/dist/es/standards-sdk.es126.js +1 -1
- package/dist/es/standards-sdk.es128.js +3 -3
- package/dist/es/standards-sdk.es129.js +4 -4
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +3 -3
- package/dist/es/standards-sdk.es131.js +4 -4
- package/dist/es/standards-sdk.es132.js +4 -4
- package/dist/es/standards-sdk.es133.js +4 -4
- package/dist/es/standards-sdk.es134.js +2 -2
- package/dist/es/standards-sdk.es135.js +4 -4
- package/dist/es/standards-sdk.es136.js +55 -367
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +363 -14
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +15 -79
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +71 -77
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es140.js +80 -152
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +159 -7
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +7 -86
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +64 -43
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +65 -30
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +30 -34
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +34 -28
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +28 -138
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +133 -37
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +34 -12281
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es150.js +12286 -53
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +48 -74
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +80 -15
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +17 -871
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +923 -239
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +218 -223
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +247 -0
- package/dist/es/standards-sdk.es162.js.map +1 -0
- package/dist/es/standards-sdk.es17.js +9 -5
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +5 -4
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +3 -2
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es28.js +5 -4
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es36.js +3 -2
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +3 -3
- package/dist/es/standards-sdk.es38.js +1 -1
- package/dist/es/standards-sdk.es5.js +1 -1
- package/dist/es/standards-sdk.es54.js +1 -1
- package/dist/es/standards-sdk.es57.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es61.js +3 -2
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +2 -2
- package/dist/es/standards-sdk.es69.js +2 -2
- package/dist/es/standards-sdk.es70.js +1 -1
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/standards-sdk.es77.js +1 -1
- package/dist/es/standards-sdk.es78.js +2 -1
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +1 -1
- package/dist/es/standards-sdk.es8.js +1 -1
- package/dist/es/standards-sdk.es82.js +1 -1
- package/dist/es/standards-sdk.es84.js +1 -1
- package/dist/es/standards-sdk.es88.js +3 -3
- package/dist/es/standards-sdk.es92.js +2 -2
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +1 -1
- package/dist/es/standards-sdk.es98.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es110.js","sources":["../../src/utils/hrl-resolver.ts"],"sourcesContent":["import axios from 'axios';\nimport { Logger, LogLevel, ILogger } from './logger';\nimport { NetworkType } from './types';\nimport { HederaMirrorNode } from '../services';\n\n/**\n * Options for HRL resolution\n */\nexport interface HRLResolutionOptions {\n network: NetworkType;\n returnRaw?: boolean;\n cdnEndpoint?: string;\n}\n\n/**\n * Result of an HRL resolution operation\n */\nexport interface HRLResolutionResult {\n content: string | ArrayBuffer;\n contentType: string;\n topicId: string;\n isBinary: boolean;\n}\n\nexport interface ContentWithType {\n content: string | ArrayBuffer;\n contentType: string;\n isBinary: boolean;\n}\n\n/**\n * Utility class for resolving Hedera Resource Locators across the SDK\n */\nexport class HRLResolver {\n private logger: ILogger;\n private defaultEndpoint = 'https://kiloscribe.com/api/inscription-cdn';\n\n constructor(logLevel: LogLevel = 'info') {\n this.logger = Logger.getInstance({\n level: logLevel,\n module: 'HRLResolver',\n });\n }\n\n /**\n * Determines if a MIME type represents binary content\n */\n private isBinaryContentType(mimeType: string): boolean {\n const binaryTypes = [\n 'image/',\n 'audio/',\n 'video/',\n 'application/octet-stream',\n 'application/pdf',\n 'application/zip',\n 'application/gzip',\n 'application/x-binary',\n 'application/vnd.ms-',\n 'application/x-msdownload',\n 'application/x-shockwave-flash',\n 'font/',\n 'application/wasm',\n ];\n\n return binaryTypes.some(prefix => mimeType.startsWith(prefix));\n }\n\n /**\n * Parses an HRL string into its components\n */\n public parseHRL(hrl: string): { standard: string; topicId: string } | null {\n if (!hrl) {\n return null;\n }\n\n const hrlPattern = /^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/;\n const match = hrl.match(hrlPattern);\n\n if (!match) {\n return null;\n }\n\n return {\n standard: match[1],\n topicId: match[2],\n };\n }\n\n /**\n * Validates if a string is a valid HRL\n */\n public isValidHRL(hrl: string): boolean {\n if (!hrl || typeof hrl !== 'string') {\n return false;\n }\n\n const parsed = this.parseHRL(hrl);\n if (!parsed) {\n return false;\n }\n\n const topicIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n if (!topicIdPattern.test(parsed.topicId)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates if a string is a valid topic ID\n */\n public isValidTopicId(topicId: string): boolean {\n const topicIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n return topicIdPattern.test(topicId);\n }\n\n /**\n * Resolves content from either an HRL or a topic ID\n * If a topic ID is provided, it queries the topic memo to determine the HCS standard\n */\n public async resolve(\n hrlOrTopicId: string,\n options: HRLResolutionOptions,\n ): Promise<HRLResolutionResult> {\n if (this.isValidHRL(hrlOrTopicId)) {\n return this.resolveHRL(hrlOrTopicId, options);\n }\n\n if (!this.isValidTopicId(hrlOrTopicId)) {\n throw new Error(`Invalid HRL or topic ID format: ${hrlOrTopicId}`);\n }\n\n try {\n const mirrorNode = new HederaMirrorNode(options.network, this.logger);\n const topicInfo = await mirrorNode.getTopicInfo(hrlOrTopicId);\n const memo = topicInfo?.memo || '';\n\n let standard = '1';\n if (memo) {\n const hcsMatch = memo.match(/^hcs-(\\d+)/);\n if (hcsMatch && hcsMatch[1]) {\n standard = hcsMatch[1];\n }\n }\n\n const hrl = `hcs://${standard}/${hrlOrTopicId}`;\n return this.resolveHRL(hrl, options);\n } catch (error: any) {\n this.logger.error(\n `Failed to get topic info for ${hrlOrTopicId}: ${error.message}`,\n );\n const hrl = `hcs://1/${hrlOrTopicId}`;\n return this.resolveHRL(hrl, options);\n }\n }\n\n public async getContentWithType(\n hrl: string,\n options: HRLResolutionOptions,\n ): Promise<ContentWithType> {\n if (!this.isValidHRL(hrl)) {\n return {\n content: hrl,\n contentType: 'text/plain',\n isBinary: false,\n };\n }\n\n try {\n const result = await this.resolveHRL(hrl, options);\n return {\n content: result.content,\n contentType: result.contentType,\n isBinary: result.isBinary,\n };\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL for content and type: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Resolves HRL content with proper content type detection\n */\n public async resolveHRL(\n hrl: string,\n options: HRLResolutionOptions,\n ): Promise<HRLResolutionResult> {\n const parsed = this.parseHRL(hrl);\n\n if (!parsed) {\n throw new Error(`Invalid HRL format: ${hrl}`);\n }\n\n const { standard, topicId } = parsed;\n\n this.logger.debug(\n `Resolving HRL reference: standard=${standard}, topicId=${topicId}`,\n );\n\n try {\n const cdnEndpoint = options.cdnEndpoint || this.defaultEndpoint;\n const cdnUrl = `${cdnEndpoint}/${topicId}?network=${options.network}`;\n\n this.logger.debug(`Fetching content from CDN: ${cdnUrl}`);\n const headResponse = await axios.head(cdnUrl);\n const contentType = headResponse.headers['content-type'] || '';\n const isBinary = this.isBinaryContentType(contentType);\n\n if (isBinary || options.returnRaw) {\n const response = await axios.get(cdnUrl, {\n responseType: 'arraybuffer',\n });\n\n return {\n content: response.data,\n contentType,\n topicId,\n isBinary: true,\n };\n }\n\n if (contentType === 'application/json') {\n const response = await axios.get(cdnUrl, {\n responseType: 'json',\n });\n\n if (!response.data) {\n throw new Error(`Failed to fetch content from topic: ${topicId}`);\n }\n\n return {\n content: response.data,\n contentType,\n topicId,\n isBinary: false,\n };\n }\n\n const response = await axios.get(cdnUrl);\n\n if (!response.data) {\n throw new Error(`Failed to fetch content from topic: ${topicId}`);\n }\n\n let content: string;\n\n if (typeof response.data === 'object') {\n content =\n response.data.content ||\n response.data.text ||\n JSON.stringify(response.data);\n } else {\n content = response.data;\n }\n\n return {\n content,\n contentType,\n topicId,\n isBinary: false,\n };\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n}\n"],"names":["response"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es110.js","sources":["../../src/utils/hrl-resolver.ts"],"sourcesContent":["import axios from 'axios';\nimport { Logger, LogLevel, ILogger } from './logger';\nimport { NetworkType } from './types';\nimport { HederaMirrorNode } from '../services';\n\n/**\n * Options for HRL resolution\n */\nexport interface HRLResolutionOptions {\n network: NetworkType;\n returnRaw?: boolean;\n cdnEndpoint?: string;\n}\n\n/**\n * Result of an HRL resolution operation\n */\nexport interface HRLResolutionResult {\n content: string | ArrayBuffer;\n contentType: string;\n topicId: string;\n isBinary: boolean;\n}\n\nexport interface ContentWithType {\n content: string | ArrayBuffer;\n contentType: string;\n isBinary: boolean;\n}\n\n/**\n * Utility class for resolving Hedera Resource Locators across the SDK\n */\nexport class HRLResolver {\n private logger: ILogger;\n private defaultEndpoint = 'https://kiloscribe.com/api/inscription-cdn';\n\n constructor(logLevel: LogLevel = 'info') {\n this.logger = Logger.getInstance({\n level: logLevel,\n module: 'HRLResolver',\n });\n }\n\n /**\n * Determines if a MIME type represents binary content\n */\n private isBinaryContentType(mimeType: string): boolean {\n const binaryTypes = [\n 'image/',\n 'audio/',\n 'video/',\n 'application/octet-stream',\n 'application/pdf',\n 'application/zip',\n 'application/gzip',\n 'application/x-binary',\n 'application/vnd.ms-',\n 'application/x-msdownload',\n 'application/x-shockwave-flash',\n 'font/',\n 'application/wasm',\n ];\n\n return binaryTypes.some(prefix => mimeType.startsWith(prefix));\n }\n\n /**\n * Parses an HRL string into its components\n */\n public parseHRL(hrl: string): { standard: string; topicId: string } | null {\n if (!hrl) {\n return null;\n }\n\n const hrlPattern = /^hcs:\\/\\/(\\d+)\\/([0-9]+\\.[0-9]+\\.[0-9]+)$/;\n const match = hrl.match(hrlPattern);\n\n if (!match) {\n return null;\n }\n\n return {\n standard: match[1],\n topicId: match[2],\n };\n }\n\n /**\n * Validates if a string is a valid HRL\n */\n public isValidHRL(hrl: string): boolean {\n if (!hrl || typeof hrl !== 'string') {\n return false;\n }\n\n const parsed = this.parseHRL(hrl);\n if (!parsed) {\n return false;\n }\n\n const topicIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n if (!topicIdPattern.test(parsed.topicId)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates if a string is a valid topic ID\n */\n public isValidTopicId(topicId: string): boolean {\n const topicIdPattern = /^[0-9]+\\.[0-9]+\\.[0-9]+$/;\n return topicIdPattern.test(topicId);\n }\n\n /**\n * Resolves content from either an HRL or a topic ID\n * If a topic ID is provided, it queries the topic memo to determine the HCS standard\n */\n public async resolve(\n hrlOrTopicId: string,\n options: HRLResolutionOptions,\n ): Promise<HRLResolutionResult> {\n if (this.isValidHRL(hrlOrTopicId)) {\n return this.resolveHRL(hrlOrTopicId, options);\n }\n\n if (!this.isValidTopicId(hrlOrTopicId)) {\n throw new Error(`Invalid HRL or topic ID format: ${hrlOrTopicId}`);\n }\n\n try {\n const mirrorNode = new HederaMirrorNode(options.network, this.logger);\n const topicInfo = await mirrorNode.getTopicInfo(hrlOrTopicId);\n const memo = topicInfo?.memo || '';\n\n let standard = '1';\n if (memo) {\n const hcsMatch = memo.match(/^hcs-(\\d+)/);\n if (hcsMatch && hcsMatch[1]) {\n standard = hcsMatch[1];\n }\n }\n\n const hrl = `hcs://${standard}/${hrlOrTopicId}`;\n return this.resolveHRL(hrl, options);\n } catch (error: any) {\n this.logger.error(\n `Failed to get topic info for ${hrlOrTopicId}: ${error.message}`,\n );\n const hrl = `hcs://1/${hrlOrTopicId}`;\n return this.resolveHRL(hrl, options);\n }\n }\n\n public async getContentWithType(\n hrl: string,\n options: HRLResolutionOptions,\n ): Promise<ContentWithType> {\n if (!this.isValidHRL(hrl)) {\n return {\n content: hrl,\n contentType: 'text/plain',\n isBinary: false,\n };\n }\n\n try {\n const result = await this.resolveHRL(hrl, options);\n return {\n content: result.content,\n contentType: result.contentType,\n isBinary: result.isBinary,\n };\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL for content and type: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n\n /**\n * Resolves HRL content with proper content type detection\n */\n public async resolveHRL(\n hrl: string,\n options: HRLResolutionOptions,\n ): Promise<HRLResolutionResult> {\n const parsed = this.parseHRL(hrl);\n\n if (!parsed) {\n throw new Error(`Invalid HRL format: ${hrl}`);\n }\n\n const { standard, topicId } = parsed;\n\n this.logger.debug(\n `Resolving HRL reference: standard=${standard}, topicId=${topicId}`,\n );\n\n try {\n const cdnEndpoint = options.cdnEndpoint || this.defaultEndpoint;\n const cdnUrl = `${cdnEndpoint}/${topicId}?network=${options.network}`;\n\n this.logger.debug(`Fetching content from CDN: ${cdnUrl}`);\n const headResponse = await axios.head(cdnUrl);\n const contentType = headResponse.headers['content-type'] || '';\n const isBinary = this.isBinaryContentType(contentType);\n\n if (isBinary || options.returnRaw) {\n const response = await axios.get(cdnUrl, {\n responseType: 'arraybuffer',\n });\n\n return {\n content: response.data,\n contentType,\n topicId,\n isBinary: true,\n };\n }\n\n if (contentType === 'application/json') {\n const response = await axios.get(cdnUrl, {\n responseType: 'json',\n });\n\n if (!response.data) {\n throw new Error(`Failed to fetch content from topic: ${topicId}`);\n }\n\n return {\n content: response.data,\n contentType,\n topicId,\n isBinary: false,\n };\n }\n\n const response = await axios.get(cdnUrl);\n\n if (!response.data) {\n throw new Error(`Failed to fetch content from topic: ${topicId}`);\n }\n\n let content: string;\n\n if (typeof response.data === 'object') {\n content =\n response.data.content ||\n response.data.text ||\n JSON.stringify(response.data);\n } else {\n content = response.data;\n }\n\n return {\n content,\n contentType,\n topicId,\n isBinary: false,\n };\n } catch (e: any) {\n const error = e as Error;\n const logMessage = `Error resolving HRL reference: ${error.message}`;\n this.logger.error(logMessage);\n throw new Error(logMessage);\n }\n }\n}\n"],"names":["response"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PublicKey, PrivateKey } from "@hashgraph/sdk";
|
|
2
2
|
import { HCS7BaseClient } from "./standards-sdk.es10.js";
|
|
3
|
-
import { createNodeOperatorContext } from "./standards-sdk.
|
|
3
|
+
import { createNodeOperatorContext } from "./standards-sdk.es148.js";
|
|
4
4
|
import { buildHcs7CreateRegistryTx, buildHcs7SubmitMessageTx } from "./standards-sdk.es13.js";
|
|
5
5
|
class HCS7Client extends HCS7BaseClient {
|
|
6
6
|
constructor(config) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InscriptionSDK } from "./standards-sdk.
|
|
1
|
+
import { InscriptionSDK } from "./standards-sdk.es150.js";
|
|
2
2
|
import { Logger } from "./standards-sdk.es106.js";
|
|
3
3
|
import { ProgressReporter } from "./standards-sdk.es109.js";
|
|
4
4
|
import { TransactionParser } from "./standards-sdk.es111.js";
|
|
@@ -2,9 +2,9 @@ import * as path from "path";
|
|
|
2
2
|
import { Buffer } from "buffer";
|
|
3
3
|
import { randomBytes } from "crypto";
|
|
4
4
|
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
5
|
-
import { registerEncryptionKeyResponseSchema } from "./standards-sdk.
|
|
6
|
-
import { optionalImport } from "./standards-sdk.
|
|
7
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
5
|
+
import { registerEncryptionKeyResponseSchema } from "./standards-sdk.es160.js";
|
|
6
|
+
import { optionalImport } from "./standards-sdk.es152.js";
|
|
7
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
8
8
|
const getFs = async () => {
|
|
9
9
|
const fsModule = await optionalImport("node:fs");
|
|
10
10
|
if (fsModule && typeof fsModule.existsSync === "function" && typeof fsModule.readFileSync === "function" && typeof fsModule.writeFileSync === "function" && typeof fsModule.appendFileSync === "function") {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { searchResponseSchema, statsResponseSchema, registriesResponseSchema, additionalRegistryCatalogResponseSchema, popularResponseSchema, protocolsResponseSchema, detectProtocolResponseSchema, registrySearchByNamespaceSchema, vectorSearchResponseSchema, searchStatusResponseSchema, websocketStatsResponseSchema, metricsSummaryResponseSchema, searchFacetsResponseSchema } from "./standards-sdk.
|
|
2
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
3
|
-
import { buildSearchQuery } from "./standards-sdk.
|
|
4
|
-
import { RegistryBrokerError } from "./standards-sdk.
|
|
1
|
+
import { searchResponseSchema, statsResponseSchema, registriesResponseSchema, additionalRegistryCatalogResponseSchema, popularResponseSchema, protocolsResponseSchema, detectProtocolResponseSchema, registrySearchByNamespaceSchema, vectorSearchResponseSchema, searchStatusResponseSchema, websocketStatsResponseSchema, metricsSummaryResponseSchema, searchFacetsResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
import { buildSearchQuery } from "./standards-sdk.es161.js";
|
|
4
|
+
import { RegistryBrokerError } from "./standards-sdk.es138.js";
|
|
5
5
|
function buildVectorFallbackSearchParams(request) {
|
|
6
6
|
const params = {
|
|
7
7
|
q: request.query
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.
|
|
1
|
+
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es149.js";
|
|
2
2
|
import { HCS7ConfigType, HCS7Operation } from "./standards-sdk.es9.js";
|
|
3
3
|
function buildHcs7CreateRegistryTx(params) {
|
|
4
4
|
const memo = `hcs-7:indexed:${params.ttl}`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { adaptersResponseSchema, adapterDetailsResponseSchema, adapterRegistryCategoriesResponseSchema, adapterRegistryAdaptersResponseSchema, adapterRegistryCreateCategoryResponseSchema, adapterRegistrySubmitAdapterAcceptedResponseSchema, adapterRegistrySubmissionStatusResponseSchema } from "./standards-sdk.
|
|
2
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
3
|
-
import { toJsonObject } from "./standards-sdk.
|
|
1
|
+
import { adaptersResponseSchema, adapterDetailsResponseSchema, adapterRegistryCategoriesResponseSchema, adapterRegistryAdaptersResponseSchema, adapterRegistryCreateCategoryResponseSchema, adapterRegistrySubmitAdapterAcceptedResponseSchema, adapterRegistrySubmissionStatusResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
import { toJsonObject } from "./standards-sdk.es161.js";
|
|
4
4
|
RegistryBrokerClient.prototype.adapters = async function() {
|
|
5
5
|
const raw = await this.requestJson("/adapters", {
|
|
6
6
|
method: "GET"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema } from "./standards-sdk.
|
|
2
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
3
|
-
import { normalizeHexPrivateKey } from "./standards-sdk.
|
|
4
|
-
import { optionalImport } from "./standards-sdk.
|
|
1
|
+
import { creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
import { normalizeHexPrivateKey } from "./standards-sdk.es161.js";
|
|
4
|
+
import { optionalImport } from "./standards-sdk.es152.js";
|
|
5
5
|
async function loadX402Dependencies(client) {
|
|
6
6
|
const [{ default: axios }, x402Axios, x402Types] = await Promise.all([
|
|
7
7
|
import("axios"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { resolveResponseSchema, registrationQuoteResponseSchema, registerAgentResponseSchema, registrationProgressResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema } from "./standards-sdk.
|
|
2
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
3
|
-
import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError, MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS } from "./standards-sdk.
|
|
4
|
-
import { RegistryBrokerError } from "./standards-sdk.
|
|
1
|
+
import { resolveResponseSchema, registrationQuoteResponseSchema, registerAgentResponseSchema, registrationProgressResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError, MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS } from "./standards-sdk.es161.js";
|
|
4
|
+
import { RegistryBrokerError } from "./standards-sdk.es138.js";
|
|
5
5
|
async function performRegisterAgent(client, payload) {
|
|
6
6
|
const raw = await client.requestJson("/register", {
|
|
7
7
|
method: "POST",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Buffer } from "buffer";
|
|
2
|
-
import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.
|
|
3
|
-
import { canonicalizeLedgerNetwork } from "./standards-sdk.
|
|
4
|
-
import { createPrivateKeySignerAsync } from "./standards-sdk.
|
|
5
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
2
|
+
import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es160.js";
|
|
3
|
+
import { canonicalizeLedgerNetwork } from "./standards-sdk.es140.js";
|
|
4
|
+
import { createPrivateKeySignerAsync } from "./standards-sdk.es139.js";
|
|
5
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
6
6
|
async function loadViemAccount(privateKey) {
|
|
7
7
|
try {
|
|
8
8
|
const viem = await import("viem/accounts");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Buffer } from "buffer";
|
|
2
|
-
import { chatHistorySnapshotResponseSchema } from "./standards-sdk.
|
|
3
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
2
|
+
import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es160.js";
|
|
3
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
4
4
|
const conversationContexts = /* @__PURE__ */ new WeakMap();
|
|
5
5
|
function getConversationContextMap(client) {
|
|
6
6
|
const existing = conversationContexts.get(client);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createSessionResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema } from "./standards-sdk.
|
|
2
|
-
import { RegistryBrokerClient } from "./standards-sdk.
|
|
3
|
-
import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.
|
|
4
|
-
import { EncryptionUnavailableError, EncryptedChatManager } from "./standards-sdk.
|
|
1
|
+
import { createSessionResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.es161.js";
|
|
4
|
+
import { EncryptionUnavailableError, EncryptedChatManager } from "./standards-sdk.es162.js";
|
|
5
5
|
const encryptedManagers = /* @__PURE__ */ new WeakMap();
|
|
6
6
|
const chatApis = /* @__PURE__ */ new WeakMap();
|
|
7
7
|
function getEncryptedChatManager(client) {
|
|
@@ -1,369 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
return { client, encryption };
|
|
59
|
-
}
|
|
60
|
-
setApiKey(apiKey) {
|
|
61
|
-
this.setDefaultHeader("x-api-key", apiKey);
|
|
62
|
-
}
|
|
63
|
-
setLedgerApiKey(apiKey) {
|
|
64
|
-
this.setDefaultHeader("x-ledger-api-key", apiKey);
|
|
65
|
-
}
|
|
66
|
-
setDefaultHeader(name, value) {
|
|
67
|
-
if (!name || name.trim().length === 0) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const headerName = normaliseHeaderName(name);
|
|
71
|
-
if (!value || value.trim().length === 0) {
|
|
72
|
-
delete this.defaultHeaders[headerName];
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
this.defaultHeaders[headerName] = value.trim();
|
|
76
|
-
}
|
|
77
|
-
getDefaultHeaders() {
|
|
78
|
-
return { ...this.defaultHeaders };
|
|
79
|
-
}
|
|
80
|
-
async encryptionReady() {
|
|
81
|
-
if (!this.encryptionBootstrapPromise) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
await this.encryptionBootstrapPromise;
|
|
85
|
-
}
|
|
86
|
-
buildUrl(path) {
|
|
87
|
-
const normalisedPath = path.startsWith("/") ? path : `/${path}`;
|
|
88
|
-
return `${this.baseUrl}${normalisedPath}`;
|
|
89
|
-
}
|
|
90
|
-
async request(path, config) {
|
|
91
|
-
const headers = new Headers();
|
|
92
|
-
Object.entries(this.defaultHeaders).forEach(([key, value]) => {
|
|
93
|
-
headers.set(key, value);
|
|
94
|
-
});
|
|
95
|
-
if (config.headers) {
|
|
96
|
-
Object.entries(config.headers).forEach(([key, value]) => {
|
|
97
|
-
headers.set(key, value);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
if (!headers.has("accept")) {
|
|
101
|
-
headers.set("accept", "application/json");
|
|
102
|
-
}
|
|
103
|
-
if (!headers.has("user-agent") && !isBrowserRuntime()) {
|
|
104
|
-
headers.set("user-agent", DEFAULT_USER_AGENT);
|
|
105
|
-
}
|
|
106
|
-
const init = {
|
|
107
|
-
method: config.method ?? "GET",
|
|
108
|
-
headers
|
|
109
|
-
};
|
|
110
|
-
if (config.body !== void 0) {
|
|
111
|
-
init.body = JSON.stringify(config.body);
|
|
112
|
-
if (!headers.has("content-type")) {
|
|
113
|
-
headers.set("content-type", "application/json");
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const response = await this.fetchImpl(this.buildUrl(path), init);
|
|
117
|
-
if (response.ok) {
|
|
118
|
-
return response;
|
|
119
|
-
}
|
|
120
|
-
const errorBody = await this.extractErrorBody(response);
|
|
121
|
-
throw new RegistryBrokerError("Registry broker request failed", {
|
|
122
|
-
status: response.status,
|
|
123
|
-
statusText: response.statusText,
|
|
124
|
-
body: errorBody
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
async requestJson(path, config) {
|
|
128
|
-
const response = await this.request(path, config);
|
|
129
|
-
const contentType = response.headers?.get("content-type") ?? "";
|
|
130
|
-
if (!JSON_CONTENT_TYPE.test(contentType)) {
|
|
131
|
-
const body = await response.text();
|
|
132
|
-
throw new RegistryBrokerParseError(
|
|
133
|
-
"Expected JSON response from registry broker",
|
|
134
|
-
body
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
return await response.json();
|
|
138
|
-
}
|
|
139
|
-
async extractErrorBody(response) {
|
|
140
|
-
const contentType = response.headers?.get("content-type") ?? "";
|
|
141
|
-
if (JSON_CONTENT_TYPE.test(contentType)) {
|
|
142
|
-
try {
|
|
143
|
-
return await response.json();
|
|
144
|
-
} catch (error) {
|
|
145
|
-
return { parseError: String(error) };
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
return await response.text();
|
|
150
|
-
} catch (error) {
|
|
151
|
-
return { parseError: String(error) };
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
parseWithSchema(value, schema, context) {
|
|
155
|
-
try {
|
|
156
|
-
return schema.parse(value);
|
|
157
|
-
} catch (error) {
|
|
158
|
-
throw new RegistryBrokerParseError(
|
|
159
|
-
`Failed to parse ${context}`,
|
|
160
|
-
error instanceof ZodError || error instanceof Error ? error : String(error),
|
|
161
|
-
value
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
async delay(ms, signal) {
|
|
166
|
-
if (ms <= 0) {
|
|
167
|
-
if (signal?.aborted) {
|
|
168
|
-
throw createAbortError();
|
|
169
|
-
}
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
await new Promise((resolve, reject) => {
|
|
173
|
-
const timer = setTimeout(() => {
|
|
174
|
-
if (signal) {
|
|
175
|
-
signal.removeEventListener("abort", onAbort);
|
|
176
|
-
}
|
|
177
|
-
resolve();
|
|
178
|
-
}, ms);
|
|
179
|
-
const onAbort = () => {
|
|
180
|
-
clearTimeout(timer);
|
|
181
|
-
signal?.removeEventListener("abort", onAbort);
|
|
182
|
-
reject(createAbortError());
|
|
183
|
-
};
|
|
184
|
-
if (signal) {
|
|
185
|
-
if (signal.aborted) {
|
|
186
|
-
clearTimeout(timer);
|
|
187
|
-
reject(createAbortError());
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
assertNodeRuntime(feature) {
|
|
195
|
-
if (typeof process === "undefined" || !process.versions?.node) {
|
|
196
|
-
throw new Error(`${feature} is only available in Node.js environments`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
createEphemeralKeyPair() {
|
|
200
|
-
this.assertNodeRuntime("generateEphemeralKeyPair");
|
|
201
|
-
const privateKeyBytes = randomBytes(32);
|
|
202
|
-
const publicKey = secp256k1.getPublicKey(privateKeyBytes, true);
|
|
203
|
-
return {
|
|
204
|
-
privateKey: Buffer.from(privateKeyBytes).toString("hex"),
|
|
205
|
-
publicKey: Buffer.from(publicKey).toString("hex")
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
deriveSharedSecret(options) {
|
|
209
|
-
this.assertNodeRuntime("deriveSharedSecret");
|
|
210
|
-
const privateKey = this.hexToBuffer(options.privateKey);
|
|
211
|
-
const peerPublicKey = this.hexToBuffer(options.peerPublicKey);
|
|
212
|
-
const shared = secp256k1.getSharedSecret(privateKey, peerPublicKey, true);
|
|
213
|
-
return createHash("sha256").update(Buffer.from(shared)).digest();
|
|
214
|
-
}
|
|
215
|
-
buildCipherEnvelope(options) {
|
|
216
|
-
this.assertNodeRuntime("encryptCipherEnvelope");
|
|
217
|
-
const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);
|
|
218
|
-
const iv = randomBytes(12);
|
|
219
|
-
const cipher = createCipheriv("aes-256-gcm", sharedSecret, iv);
|
|
220
|
-
const aadSource = options.associatedData ?? options.sessionId;
|
|
221
|
-
const associatedDataEncoded = aadSource ? Buffer.from(aadSource, "utf8").toString("base64") : void 0;
|
|
222
|
-
if (aadSource) {
|
|
223
|
-
cipher.setAAD(Buffer.from(aadSource, "utf8"));
|
|
224
|
-
}
|
|
225
|
-
const ciphertext = Buffer.concat([
|
|
226
|
-
cipher.update(Buffer.from(options.plaintext, "utf8")),
|
|
227
|
-
cipher.final()
|
|
228
|
-
]);
|
|
229
|
-
const tag = cipher.getAuthTag();
|
|
230
|
-
const payload = Buffer.concat([ciphertext, tag]);
|
|
231
|
-
return {
|
|
232
|
-
algorithm: "aes-256-gcm",
|
|
233
|
-
ciphertext: payload.toString("base64"),
|
|
234
|
-
nonce: iv.toString("base64"),
|
|
235
|
-
associatedData: associatedDataEncoded,
|
|
236
|
-
keyLocator: {
|
|
237
|
-
sessionId: options.sessionId,
|
|
238
|
-
revision: options.revision ?? 1
|
|
239
|
-
},
|
|
240
|
-
recipients: options.recipients.map((recipient) => ({
|
|
241
|
-
...recipient,
|
|
242
|
-
encryptedShare: ""
|
|
243
|
-
}))
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
openCipherEnvelope(options) {
|
|
247
|
-
this.assertNodeRuntime("decryptCipherEnvelope");
|
|
248
|
-
const sharedSecret = this.normalizeSharedSecret(options.sharedSecret);
|
|
249
|
-
const payload = Buffer.from(options.envelope.ciphertext, "base64");
|
|
250
|
-
const nonce = Buffer.from(options.envelope.nonce, "base64");
|
|
251
|
-
const ciphertext = payload.slice(0, payload.length - 16);
|
|
252
|
-
const tag = payload.slice(payload.length - 16);
|
|
253
|
-
const decipher = createDecipheriv("aes-256-gcm", sharedSecret, nonce);
|
|
254
|
-
if (options.envelope.associatedData) {
|
|
255
|
-
decipher.setAAD(Buffer.from(options.envelope.associatedData, "base64"));
|
|
256
|
-
}
|
|
257
|
-
decipher.setAuthTag(tag);
|
|
258
|
-
const plaintext = Buffer.concat([
|
|
259
|
-
decipher.update(ciphertext),
|
|
260
|
-
decipher.final()
|
|
261
|
-
]);
|
|
262
|
-
return plaintext.toString(options.encoding ?? "utf8");
|
|
263
|
-
}
|
|
264
|
-
normalizeSharedSecret(input) {
|
|
265
|
-
if (Buffer.isBuffer(input)) {
|
|
266
|
-
return Buffer.from(input);
|
|
267
|
-
}
|
|
268
|
-
if (input instanceof Uint8Array) {
|
|
269
|
-
return Buffer.from(input);
|
|
270
|
-
}
|
|
271
|
-
if (typeof input === "string") {
|
|
272
|
-
return this.bufferFromString(input);
|
|
273
|
-
}
|
|
274
|
-
throw new Error("Unsupported shared secret input");
|
|
275
|
-
}
|
|
276
|
-
bufferFromString(value) {
|
|
277
|
-
const trimmed = value.trim();
|
|
278
|
-
if (!trimmed) {
|
|
279
|
-
throw new Error("sharedSecret string cannot be empty");
|
|
280
|
-
}
|
|
281
|
-
const normalized = trimmed.startsWith("0x") ? trimmed.slice(2) : trimmed;
|
|
282
|
-
if (/^[0-9a-fA-F]+$/.test(normalized) && normalized.length % 2 === 0) {
|
|
283
|
-
return Buffer.from(normalized, "hex");
|
|
284
|
-
}
|
|
285
|
-
return Buffer.from(trimmed, "base64");
|
|
286
|
-
}
|
|
287
|
-
hexToBuffer(value) {
|
|
288
|
-
const normalized = value.startsWith("0x") ? value.slice(2) : value;
|
|
289
|
-
if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {
|
|
290
|
-
throw new Error("Expected hex-encoded value");
|
|
291
|
-
}
|
|
292
|
-
return Buffer.from(normalized, "hex");
|
|
293
|
-
}
|
|
294
|
-
extractInsufficientCreditsDetails(error) {
|
|
295
|
-
if (!(error instanceof RegistryBrokerError) || error.status !== 402) {
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
298
|
-
const body = error.body;
|
|
299
|
-
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
300
|
-
return null;
|
|
301
|
-
}
|
|
302
|
-
const maybeShortfall = body["shortfallCredits"];
|
|
303
|
-
if (typeof maybeShortfall !== "number" || maybeShortfall <= 0) {
|
|
304
|
-
return null;
|
|
305
|
-
}
|
|
306
|
-
return { shortfallCredits: maybeShortfall };
|
|
307
|
-
}
|
|
308
|
-
extractErrorMessage(body) {
|
|
309
|
-
if (typeof body === "string") {
|
|
310
|
-
return body;
|
|
311
|
-
}
|
|
312
|
-
if (isJsonObject(body) && typeof body.error === "string") {
|
|
313
|
-
return body.error;
|
|
314
|
-
}
|
|
315
|
-
if (isJsonObject(body) && typeof body.message === "string") {
|
|
316
|
-
return body.message;
|
|
317
|
-
}
|
|
318
|
-
return void 0;
|
|
319
|
-
}
|
|
320
|
-
shouldAutoTopUpHistory(payload, error) {
|
|
321
|
-
if (!this.historyAutoTopUp || payload.historyTtlSeconds === void 0) {
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
if (!(error instanceof RegistryBrokerError)) {
|
|
325
|
-
return false;
|
|
326
|
-
}
|
|
327
|
-
if (error.status !== 402) {
|
|
328
|
-
return false;
|
|
329
|
-
}
|
|
330
|
-
const message = this.extractErrorMessage(error.body);
|
|
331
|
-
if (!message) {
|
|
332
|
-
return true;
|
|
333
|
-
}
|
|
334
|
-
const normalised = message.toLowerCase();
|
|
335
|
-
return normalised.includes("history") || normalised.includes("chat history");
|
|
336
|
-
}
|
|
337
|
-
async executeHistoryAutoTopUp(reason) {
|
|
338
|
-
if (!this.historyAutoTopUp) {
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
const hbarAmount = this.historyAutoTopUp.hbarAmount && this.historyAutoTopUp.hbarAmount > 0 ? this.historyAutoTopUp.hbarAmount : DEFAULT_HISTORY_TOP_UP_HBAR;
|
|
342
|
-
await this.purchaseCreditsWithHbar({
|
|
343
|
-
accountId: this.historyAutoTopUp.accountId,
|
|
344
|
-
privateKey: this.historyAutoTopUp.privateKey,
|
|
345
|
-
hbarAmount,
|
|
346
|
-
memo: this.historyAutoTopUp.memo ?? "registry-broker-client:chat-history-topup",
|
|
347
|
-
metadata: {
|
|
348
|
-
purpose: "chat-history",
|
|
349
|
-
reason
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
initializeEncryptionBootstrap(options) {
|
|
354
|
-
return this.bootstrapEncryptionOptions(options).then(() => void 0);
|
|
355
|
-
}
|
|
356
|
-
bootstrapEncryptionOptions(_options) {
|
|
357
|
-
return Promise.resolve(null);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
const isPendingRegisterAgentResponse = (response) => response.status === "pending";
|
|
361
|
-
const isPartialRegisterAgentResponse = (response) => response.status === "partial" && response.success === false;
|
|
362
|
-
const isSuccessRegisterAgentResponse = (response) => response.success === true && response.status !== "pending";
|
|
363
|
-
export {
|
|
364
|
-
RegistryBrokerClient,
|
|
365
|
-
isPartialRegisterAgentResponse,
|
|
366
|
-
isPendingRegisterAgentResponse,
|
|
367
|
-
isSuccessRegisterAgentResponse
|
|
1
|
+
import { agentFeedbackResponseSchema, agentFeedbackEligibilityResponseSchema, agentFeedbackSubmissionResponseSchema } from "./standards-sdk.es160.js";
|
|
2
|
+
import { RegistryBrokerClient } from "./standards-sdk.es137.js";
|
|
3
|
+
RegistryBrokerClient.prototype.getAgentFeedback = async function(uaid, options = {}) {
|
|
4
|
+
const normalized = uaid.trim();
|
|
5
|
+
if (!normalized) {
|
|
6
|
+
throw new Error("uaid is required");
|
|
7
|
+
}
|
|
8
|
+
const query = options.includeRevoked === true ? "?includeRevoked=true" : "";
|
|
9
|
+
const raw = await this.requestJson(
|
|
10
|
+
`/agents/${encodeURIComponent(normalized)}/feedback${query}`,
|
|
11
|
+
{ method: "GET" }
|
|
12
|
+
);
|
|
13
|
+
return this.parseWithSchema(
|
|
14
|
+
raw,
|
|
15
|
+
agentFeedbackResponseSchema,
|
|
16
|
+
"agent feedback response"
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
RegistryBrokerClient.prototype.checkAgentFeedbackEligibility = async function(uaid, payload) {
|
|
20
|
+
const normalized = uaid.trim();
|
|
21
|
+
if (!normalized) {
|
|
22
|
+
throw new Error("uaid is required");
|
|
23
|
+
}
|
|
24
|
+
const raw = await this.requestJson(
|
|
25
|
+
`/agents/${encodeURIComponent(normalized)}/feedback/eligibility`,
|
|
26
|
+
{
|
|
27
|
+
method: "POST",
|
|
28
|
+
body: payload,
|
|
29
|
+
headers: { "content-type": "application/json" }
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
return this.parseWithSchema(
|
|
33
|
+
raw,
|
|
34
|
+
agentFeedbackEligibilityResponseSchema,
|
|
35
|
+
"agent feedback eligibility response"
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
RegistryBrokerClient.prototype.submitAgentFeedback = async function(uaid, payload) {
|
|
39
|
+
const normalized = uaid.trim();
|
|
40
|
+
if (!normalized) {
|
|
41
|
+
throw new Error("uaid is required");
|
|
42
|
+
}
|
|
43
|
+
const raw = await this.requestJson(
|
|
44
|
+
`/agents/${encodeURIComponent(normalized)}/feedback`,
|
|
45
|
+
{
|
|
46
|
+
method: "POST",
|
|
47
|
+
body: payload,
|
|
48
|
+
headers: { "content-type": "application/json" }
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
return this.parseWithSchema(
|
|
52
|
+
raw,
|
|
53
|
+
agentFeedbackSubmissionResponseSchema,
|
|
54
|
+
"agent feedback submission response"
|
|
55
|
+
);
|
|
368
56
|
};
|
|
369
57
|
//# sourceMappingURL=standards-sdk.es136.js.map
|