@hashgraphonline/standards-sdk 0.1.159 → 0.1.160
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-12/validation/schemas.d.ts +4 -4
- package/dist/cjs/hcs-14/index.d.ts +5 -0
- package/dist/cjs/hcs-14/index.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
- package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/dns.d.ts +3 -0
- package/dist/cjs/hcs-14/resolvers/dns.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
- package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts +9 -0
- package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/registry.d.ts +21 -1
- package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/types.d.ts +106 -5
- package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
- package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
- package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
- package/dist/cjs/hcs-14/sdk.d.ts +16 -1
- package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
- package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +1548 -0
- package/dist/cjs/services/registry-broker/schemas.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-12/validation/schemas.d.ts +4 -4
- package/dist/es/hcs-14/index.d.ts +5 -0
- package/dist/es/hcs-14/index.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
- package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/dns.d.ts +3 -0
- package/dist/es/hcs-14/resolvers/dns.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
- package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/profile-utils.d.ts +9 -0
- package/dist/es/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/registry.d.ts +21 -1
- package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/types.d.ts +106 -5
- package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
- package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
- package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
- package/dist/es/hcs-14/sdk.d.ts +16 -1
- package/dist/es/hcs-14/sdk.d.ts.map +1 -1
- package/dist/es/inscribe/inscriber.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +1548 -0
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +96 -83
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +41 -224
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +249 -97
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +95 -27
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +97 -80
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +29 -30
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +229 -249
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +103 -468
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +32 -103
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +79 -155
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +28 -31
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +250 -10
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +451 -115
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +101 -25
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +155 -17
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +29 -155
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +9 -200
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +109 -757
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +27 -11
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +19 -564
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +140 -582
- 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 +202 -12
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +790 -2
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +10 -84
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +567 -40
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +602 -2
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +12 -234
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +2 -1140
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +73 -292
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +36 -418
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +2 -355
- 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 +198 -1079
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +1107 -175
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +218 -1479
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +422 -1236
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +351 -13
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +1102 -73
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +203 -76
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +1459 -785
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1254 -59
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +14 -156
- 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 +87 -7
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +74 -79
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +889 -61
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +60 -30
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +159 -34
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +7 -28
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +70 -122
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +58 -35
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +30 -12482
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +34 -242
- 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 +41 -172
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +115 -299
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +36 -340
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +12427 -398
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +142 -301
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +310 -64
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +342 -13
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +444 -64
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +330 -55
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +60 -68
- 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 +14 -169
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +179 -159
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +49 -232
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +71 -106
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +70 -115
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +60 -148
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +149 -162
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +195 -112
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +208 -300
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +106 -246
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +107 -97
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +164 -0
- package/dist/es/standards-sdk.es171.js.map +1 -0
- package/dist/es/standards-sdk.es172.js +188 -0
- package/dist/es/standards-sdk.es172.js.map +1 -0
- package/dist/es/standards-sdk.es173.js +142 -0
- package/dist/es/standards-sdk.es173.js.map +1 -0
- package/dist/es/standards-sdk.es174.js +334 -0
- package/dist/es/standards-sdk.es174.js.map +1 -0
- package/dist/es/standards-sdk.es175.js +262 -0
- package/dist/es/standards-sdk.es175.js.map +1 -0
- package/dist/es/standards-sdk.es176.js +119 -0
- package/dist/es/standards-sdk.es176.js.map +1 -0
- package/dist/es/standards-sdk.es18.js +12 -12
- 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.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.es58.js +194 -13
- package/dist/es/standards-sdk.es58.js.map +1 -1
- 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 +100 -192
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +172 -24
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +204 -77
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +130 -3
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +41 -95
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +245 -88
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +32 -17
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +96 -77
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +4 -458
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +72 -295
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es70.js +86 -194
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +16 -69
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +69 -63
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +458 -143
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +298 -43
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +174 -370
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +71 -495
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +71 -365
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +137 -83
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +69 -125
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es80.js +402 -6
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +492 -43
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +350 -86
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +88 -347
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +125 -281
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +6 -59
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +43 -45
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +86 -135
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +333 -52
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +277 -26
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +59 -23
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +26 -217
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +104 -236
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +51 -141
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +22 -137
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +20 -44
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +227 -252
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +248 -68
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +108 -52
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +144 -29
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/package.json +13 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es170.js","sources":["../../src/services/registry-broker/client/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es170.js","sources":["../../src/services/registry-broker/client/credits.ts"],"sourcesContent":["import type {\n CreditPurchaseResponse,\n JsonObject,\n JsonValue,\n X402CreditPurchaseResponse,\n X402MinimumsResponse,\n} from '../types';\nimport {\n creditPurchaseResponseSchema,\n x402CreditPurchaseResponseSchema,\n x402MinimumsResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { normalizeHexPrivateKey, type X402NetworkId } from './utils';\nimport { optionalImport } from '../../../utils/dynamic-import';\n\ntype PaymentHeaders = Record<string, string | string[] | undefined>;\ntype PaymentClient = {\n post: (\n url: string,\n body: JsonObject,\n ) => Promise<{ data: JsonValue; headers?: PaymentHeaders }>;\n};\n\nexport interface PurchaseCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n walletClient: object;\n}\n\nexport interface BuyCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n evmPrivateKey: string;\n network?: X402NetworkId;\n rpcUrl?: string;\n}\n\nexport type X402PurchaseResult = X402CreditPurchaseResponse & {\n paymentResponseHeader?: string;\n paymentResponse?: unknown;\n};\n\ntype LoadX402DependenciesResult = {\n createPaymentClient: (walletClient: object) => PaymentClient;\n decodePaymentResponse: (value: string) => unknown;\n createX402Signer: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n};\n\nasync function loadX402Dependencies(\n client: RegistryBrokerClient,\n): Promise<LoadX402DependenciesResult> {\n type X402AxiosModule = {\n withPaymentInterceptor: (client: unknown, walletClient: object) => unknown;\n decodeXPaymentResponse: (value: string) => unknown;\n };\n type X402TypesModule = {\n createSigner: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n };\n\n const [{ default: axios }, x402Axios, x402Types] = await Promise.all([\n import('axios'),\n optionalImport<X402AxiosModule>('x402-axios'),\n optionalImport<X402TypesModule>('x402/types'),\n ]);\n\n if (!x402Axios || !x402Types) {\n throw new Error(\n 'x402-axios and x402/types are required for X402 flows. Install them to enable ledger payments.',\n );\n }\n\n const withPaymentInterceptor = x402Axios.withPaymentInterceptor;\n const decodePaymentResponse = x402Axios.decodeXPaymentResponse;\n const createX402Signer = x402Types.createSigner;\n\n const createPaymentClient = (walletClient: object): PaymentClient => {\n const axiosClient = axios.create({\n baseURL: client.baseUrl,\n headers: {\n ...client.getDefaultHeaders(),\n 'content-type': 'application/json',\n },\n });\n const paymentClient = withPaymentInterceptor(axiosClient, walletClient);\n return paymentClient as PaymentClient;\n };\n\n return { createPaymentClient, decodePaymentResponse, createX402Signer };\n}\n\nfunction calculateHbarAmountParam(hbarAmount: number): number {\n const tinybars = Math.ceil(hbarAmount * 1e8);\n if (tinybars <= 0) {\n throw new Error('Calculated purchase amount must be positive');\n }\n return tinybars / 1e8;\n}\n\nexport async function purchaseCreditsWithHbar(\n client: RegistryBrokerClient,\n params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n },\n): Promise<CreditPurchaseResponse> {\n const body: JsonObject = {\n accountId: params.accountId,\n payerKey: params.privateKey,\n hbarAmount: calculateHbarAmountParam(params.hbarAmount),\n };\n\n if (params.memo) {\n body.memo = params.memo;\n }\n\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const raw = await client.requestJson<JsonValue>('/credits/purchase', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n return client.parseWithSchema(\n raw,\n creditPurchaseResponseSchema,\n 'credit purchase response',\n );\n}\n\nexport async function getX402Minimums(\n client: RegistryBrokerClient,\n): Promise<X402MinimumsResponse> {\n const raw = await client.requestJson<JsonValue>(\n '/credits/purchase/x402/minimums',\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n x402MinimumsResponseSchema,\n 'x402 minimums response',\n );\n}\n\nexport async function purchaseCreditsWithX402(\n client: RegistryBrokerClient,\n params: PurchaseCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const { createPaymentClient, decodePaymentResponse } =\n await loadX402Dependencies(client);\n\n if (!Number.isFinite(params.credits) || params.credits <= 0) {\n throw new Error('credits must be a positive number');\n }\n if (\n params.usdAmount !== undefined &&\n (!Number.isFinite(params.usdAmount) || params.usdAmount <= 0)\n ) {\n throw new Error('usdAmount must be a positive number when provided');\n }\n\n const body: JsonObject = {\n accountId: params.accountId,\n credits: params.credits,\n };\n\n if (params.usdAmount !== undefined) {\n body.usdAmount = params.usdAmount;\n }\n if (params.description) {\n body.description = params.description;\n }\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const paymentClient = createPaymentClient(params.walletClient);\n\n const response = await paymentClient.post('/credits/purchase/x402', body);\n\n const parsed = client.parseWithSchema(\n response.data,\n x402CreditPurchaseResponseSchema,\n 'x402 credit purchase response',\n );\n\n const responseHeaders = response.headers ?? {};\n const paymentHeader =\n typeof responseHeaders['x-payment-response'] === 'string'\n ? responseHeaders['x-payment-response']\n : undefined;\n const decodedPayment =\n paymentHeader !== undefined\n ? decodePaymentResponse(paymentHeader)\n : undefined;\n\n return {\n ...parsed,\n paymentResponseHeader: paymentHeader,\n paymentResponse: decodedPayment,\n };\n}\n\nexport async function buyCreditsWithX402(\n client: RegistryBrokerClient,\n params: BuyCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const network: X402NetworkId = params.network ?? 'base';\n const { createX402Signer } = await loadX402Dependencies(client);\n const normalizedKey = normalizeHexPrivateKey(params.evmPrivateKey);\n const walletClient = await createX402Signer(network, normalizedKey);\n\n return purchaseCreditsWithX402(client, {\n accountId: params.accountId,\n credits: params.credits,\n usdAmount: params.usdAmount,\n description: params.description,\n metadata: params.metadata,\n walletClient,\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { resolveResponseSchema, registrationQuoteResponseSchema, registerAgentResponseSchema, registrationProgressResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema } from "./standards-sdk.es138.js";
|
|
2
|
+
import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError } from "./standards-sdk.es168.js";
|
|
3
|
+
import { RegistryBrokerError } from "./standards-sdk.es139.js";
|
|
4
|
+
async function resolveUaid(client, uaid) {
|
|
5
|
+
const raw = await client.requestJson(
|
|
6
|
+
`/resolve/${encodeURIComponent(uaid)}`,
|
|
7
|
+
{
|
|
8
|
+
method: "GET"
|
|
9
|
+
}
|
|
10
|
+
);
|
|
11
|
+
return client.parseWithSchema(
|
|
12
|
+
raw,
|
|
13
|
+
resolveResponseSchema,
|
|
14
|
+
"resolve UAID response"
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
async function getRegistrationQuote(client, payload) {
|
|
18
|
+
const raw = await client.requestJson("/register/quote", {
|
|
19
|
+
method: "POST",
|
|
20
|
+
body: serialiseAgentRegistrationRequest(payload),
|
|
21
|
+
headers: { "content-type": "application/json" }
|
|
22
|
+
});
|
|
23
|
+
return client.parseWithSchema(
|
|
24
|
+
raw,
|
|
25
|
+
registrationQuoteResponseSchema,
|
|
26
|
+
"registration quote response"
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
async function updateAgent(client, uaid, payload) {
|
|
30
|
+
const raw = await client.requestJson(
|
|
31
|
+
`/register/${encodeURIComponent(uaid)}`,
|
|
32
|
+
{
|
|
33
|
+
method: "PUT",
|
|
34
|
+
body: serialiseAgentRegistrationRequest(payload),
|
|
35
|
+
headers: { "content-type": "application/json" }
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
return client.parseWithSchema(
|
|
39
|
+
raw,
|
|
40
|
+
registerAgentResponseSchema,
|
|
41
|
+
"update agent response"
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
async function getRegistrationProgress(client, attemptId) {
|
|
45
|
+
const normalisedAttemptId = attemptId.trim();
|
|
46
|
+
if (!normalisedAttemptId) {
|
|
47
|
+
throw new Error("attemptId is required");
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const raw = await client.requestJson(
|
|
51
|
+
`/register/progress/${encodeURIComponent(normalisedAttemptId)}`,
|
|
52
|
+
{ method: "GET" }
|
|
53
|
+
);
|
|
54
|
+
const parsed = client.parseWithSchema(
|
|
55
|
+
raw,
|
|
56
|
+
registrationProgressResponseSchema,
|
|
57
|
+
"registration progress response"
|
|
58
|
+
);
|
|
59
|
+
return parsed.progress;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
if (error instanceof RegistryBrokerError && error.status === 404) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function waitForRegistrationCompletion(client, attemptId, options = {}) {
|
|
68
|
+
const normalisedAttemptId = attemptId.trim();
|
|
69
|
+
if (!normalisedAttemptId) {
|
|
70
|
+
throw new Error("attemptId is required");
|
|
71
|
+
}
|
|
72
|
+
const interval = Math.max(
|
|
73
|
+
250,
|
|
74
|
+
options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS
|
|
75
|
+
);
|
|
76
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;
|
|
77
|
+
const throwOnFailure = options.throwOnFailure ?? true;
|
|
78
|
+
const signal = options.signal;
|
|
79
|
+
const startedAt = Date.now();
|
|
80
|
+
while (true) {
|
|
81
|
+
if (signal?.aborted) {
|
|
82
|
+
throw createAbortError();
|
|
83
|
+
}
|
|
84
|
+
const progress = await client.getRegistrationProgress(normalisedAttemptId);
|
|
85
|
+
if (progress) {
|
|
86
|
+
options.onProgress?.(progress);
|
|
87
|
+
if (progress.status === "completed") {
|
|
88
|
+
return progress;
|
|
89
|
+
}
|
|
90
|
+
if (progress.status === "partial" || progress.status === "failed") {
|
|
91
|
+
if (throwOnFailure) {
|
|
92
|
+
throw new RegistryBrokerError(
|
|
93
|
+
"Registration did not complete successfully",
|
|
94
|
+
{
|
|
95
|
+
status: 409,
|
|
96
|
+
statusText: progress.status,
|
|
97
|
+
body: progress
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return progress;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (Date.now() - startedAt >= timeoutMs) {
|
|
105
|
+
throw new Error(
|
|
106
|
+
`Registration progress polling timed out after ${timeoutMs}ms`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
await client.delay(interval, signal);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function validateUaid(client, uaid) {
|
|
113
|
+
const raw = await client.requestJson(
|
|
114
|
+
`/uaids/validate/${encodeURIComponent(uaid)}`,
|
|
115
|
+
{
|
|
116
|
+
method: "GET"
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
return client.parseWithSchema(
|
|
120
|
+
raw,
|
|
121
|
+
uaidValidationResponseSchema,
|
|
122
|
+
"UAID validation response"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
async function getUaidConnectionStatus(client, uaid) {
|
|
126
|
+
const raw = await client.requestJson(
|
|
127
|
+
`/uaids/connections/${encodeURIComponent(uaid)}/status`,
|
|
128
|
+
{
|
|
129
|
+
method: "GET"
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
return client.parseWithSchema(
|
|
133
|
+
raw,
|
|
134
|
+
uaidConnectionStatusSchema,
|
|
135
|
+
"UAID connection status"
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
async function closeUaidConnection(client, uaid) {
|
|
139
|
+
await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {
|
|
140
|
+
method: "DELETE"
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async function dashboardStats(client) {
|
|
144
|
+
const raw = await client.requestJson("/dashboard/stats", {
|
|
145
|
+
method: "GET"
|
|
146
|
+
});
|
|
147
|
+
return client.parseWithSchema(
|
|
148
|
+
raw,
|
|
149
|
+
dashboardStatsResponseSchema,
|
|
150
|
+
"dashboard stats response"
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
export {
|
|
154
|
+
closeUaidConnection,
|
|
155
|
+
dashboardStats,
|
|
156
|
+
getRegistrationProgress,
|
|
157
|
+
getRegistrationQuote,
|
|
158
|
+
getUaidConnectionStatus,
|
|
159
|
+
resolveUaid,
|
|
160
|
+
updateAgent,
|
|
161
|
+
validateUaid,
|
|
162
|
+
waitForRegistrationCompletion
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=standards-sdk.es171.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standards-sdk.es171.js","sources":["../../src/services/registry-broker/client/agents.ts"],"sourcesContent":["import type {\n AgentRegistrationRequest,\n DashboardStatsResponse,\n JsonValue,\n RegisterAgentOptions,\n RegisterAgentQuoteResponse,\n RegisterAgentResponse,\n RegistrationProgressRecord,\n RegistrationProgressWaitOptions,\n ResolvedAgentResponse,\n UaidConnectionStatus,\n UaidValidationResponse,\n} from '../types';\nimport {\n dashboardStatsResponseSchema,\n registerAgentResponseSchema,\n registrationProgressResponseSchema,\n registrationQuoteResponseSchema,\n resolveResponseSchema,\n uaidConnectionStatusSchema,\n uaidValidationResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { purchaseCreditsWithHbar } from './credits';\nimport {\n createAbortError,\n DEFAULT_PROGRESS_INTERVAL_MS,\n DEFAULT_PROGRESS_TIMEOUT_MS,\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n serialiseAgentRegistrationRequest,\n} from './utils';\nimport { RegistryBrokerError } from './errors';\n\nasync function performRegisterAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>('/register', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'register agent response',\n );\n}\n\nfunction 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\nfunction 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\nasync function ensureCreditsForRegistration(\n client: RegistryBrokerClient,\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 getRegistrationQuote(client, payload);\n const shortfall = quote.shortfallCredits ?? 0;\n if (shortfall <= 0) {\n return;\n }\n const creditsToPurchase = 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 = calculateHbarAmount(creditsToPurchase, creditsPerHbar);\n\n await purchaseCreditsWithHbar(client, {\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 getRegistrationQuote(client, payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n}\n\nexport async function resolveUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<ResolvedAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/resolve/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n resolveResponseSchema,\n 'resolve UAID response',\n );\n}\n\nexport async function registerAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? client.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return performRegisterAgent(client, payload);\n }\n\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await performRegisterAgent(client, payload);\n } catch (error) {\n const shortfall = client.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n}\n\nexport async function getRegistrationQuote(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentQuoteResponse> {\n const raw = await client.requestJson<JsonValue>('/register/quote', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n registrationQuoteResponseSchema,\n 'registration quote response',\n );\n}\n\nexport async function updateAgent(\n client: RegistryBrokerClient,\n uaid: string,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/register/${encodeURIComponent(uaid)}`,\n {\n method: 'PUT',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'update agent response',\n );\n}\n\nexport async function getRegistrationProgress(\n client: RegistryBrokerClient,\n attemptId: string,\n): Promise<RegistrationProgressRecord | null> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n try {\n const raw = await client.requestJson<JsonValue>(\n `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,\n { method: 'GET' },\n );\n\n const parsed = client.parseWithSchema(\n raw,\n registrationProgressResponseSchema,\n 'registration progress response',\n );\n\n return parsed.progress;\n } catch (error) {\n if (error instanceof RegistryBrokerError && error.status === 404) {\n return null;\n }\n throw error;\n }\n}\n\nexport async function waitForRegistrationCompletion(\n client: RegistryBrokerClient,\n attemptId: string,\n options: RegistrationProgressWaitOptions = {},\n): Promise<RegistrationProgressRecord> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n const interval = Math.max(\n 250,\n options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS,\n );\n const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;\n const throwOnFailure = options.throwOnFailure ?? true;\n const signal = options.signal;\n const startedAt = Date.now();\n\n while (true) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n\n const progress = await client.getRegistrationProgress(normalisedAttemptId);\n\n if (progress) {\n options.onProgress?.(progress);\n\n if (progress.status === 'completed') {\n return progress;\n }\n\n if (progress.status === 'partial' || progress.status === 'failed') {\n if (throwOnFailure) {\n throw new RegistryBrokerError(\n 'Registration did not complete successfully',\n {\n status: 409,\n statusText: progress.status,\n body: progress,\n },\n );\n }\n return progress;\n }\n }\n\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(\n `Registration progress polling timed out after ${timeoutMs}ms`,\n );\n }\n\n await client.delay(interval, signal);\n }\n}\n\nexport async function validateUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidValidationResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/validate/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidValidationResponseSchema,\n 'UAID validation response',\n );\n}\n\nexport async function getUaidConnectionStatus(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidConnectionStatus> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/connections/${encodeURIComponent(uaid)}/status`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidConnectionStatusSchema,\n 'UAID connection status',\n );\n}\n\nexport async function closeUaidConnection(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<void> {\n await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {\n method: 'DELETE',\n });\n}\n\nexport async function dashboardStats(\n client: RegistryBrokerClient,\n): Promise<DashboardStatsResponse> {\n const raw = await client.requestJson<JsonValue>('/dashboard/stats', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n dashboardStatsResponseSchema,\n 'dashboard stats response',\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Buffer } from "buffer";
|
|
2
|
+
import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es138.js";
|
|
3
|
+
import { canonicalizeLedgerNetwork } from "./standards-sdk.es140.js";
|
|
4
|
+
import { createPrivateKeySignerAsync } from "./standards-sdk.es141.js";
|
|
5
|
+
async function loadViemAccount(privateKey) {
|
|
6
|
+
try {
|
|
7
|
+
const viem = await import("viem/accounts");
|
|
8
|
+
return viem.privateKeyToAccount(privateKey);
|
|
9
|
+
} catch (error) {
|
|
10
|
+
const err = new Error(
|
|
11
|
+
'EVM ledger authentication requires the optional dependency "viem". Install it to use evmPrivateKey flows.'
|
|
12
|
+
);
|
|
13
|
+
err.cause = error;
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async function resolveLedgerAuthSignature(message, options) {
|
|
18
|
+
if (typeof options.sign === "function") {
|
|
19
|
+
const result = await options.sign(message);
|
|
20
|
+
if (!result || typeof result.signature !== "string" || result.signature.length === 0) {
|
|
21
|
+
throw new Error("Custom ledger signer failed to produce a signature.");
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
if (!options.signer || typeof options.signer.sign !== "function") {
|
|
26
|
+
throw new Error(
|
|
27
|
+
"Ledger authentication requires a Hedera Signer or custom sign function."
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
const payload = Buffer.from(message, "utf8");
|
|
31
|
+
const signatures = await options.signer.sign([payload]);
|
|
32
|
+
const signatureEntry = signatures?.[0];
|
|
33
|
+
if (!signatureEntry) {
|
|
34
|
+
throw new Error("Signer did not return any signatures.");
|
|
35
|
+
}
|
|
36
|
+
let derivedPublicKey;
|
|
37
|
+
if (signatureEntry.publicKey) {
|
|
38
|
+
derivedPublicKey = signatureEntry.publicKey.toString();
|
|
39
|
+
} else if (typeof options.signer.getAccountKey === "function") {
|
|
40
|
+
const accountKey = await options.signer.getAccountKey();
|
|
41
|
+
if (accountKey && typeof accountKey.toString === "function") {
|
|
42
|
+
derivedPublicKey = accountKey.toString();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
signature: Buffer.from(signatureEntry.signature).toString("base64"),
|
|
47
|
+
signatureKind: "raw",
|
|
48
|
+
publicKey: derivedPublicKey
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async function createLedgerChallenge(client, payload) {
|
|
52
|
+
const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
|
|
53
|
+
const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
|
|
54
|
+
const raw = await client.requestJson("/auth/ledger/challenge", {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: { "content-type": "application/json" },
|
|
57
|
+
body: {
|
|
58
|
+
accountId: payload.accountId,
|
|
59
|
+
network
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return client.parseWithSchema(
|
|
63
|
+
raw,
|
|
64
|
+
ledgerChallengeResponseSchema,
|
|
65
|
+
"ledger challenge response"
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
async function verifyLedgerChallenge(client, payload) {
|
|
69
|
+
const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
|
|
70
|
+
const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
|
|
71
|
+
const body = {
|
|
72
|
+
challengeId: payload.challengeId,
|
|
73
|
+
accountId: payload.accountId,
|
|
74
|
+
network,
|
|
75
|
+
signature: payload.signature
|
|
76
|
+
};
|
|
77
|
+
if (payload.signatureKind) {
|
|
78
|
+
body.signatureKind = payload.signatureKind;
|
|
79
|
+
}
|
|
80
|
+
if (payload.publicKey) {
|
|
81
|
+
body.publicKey = payload.publicKey;
|
|
82
|
+
}
|
|
83
|
+
if (typeof payload.expiresInMinutes === "number") {
|
|
84
|
+
body.expiresInMinutes = payload.expiresInMinutes;
|
|
85
|
+
}
|
|
86
|
+
const raw = await client.requestJson("/auth/ledger/verify", {
|
|
87
|
+
method: "POST",
|
|
88
|
+
headers: { "content-type": "application/json" },
|
|
89
|
+
body
|
|
90
|
+
});
|
|
91
|
+
const result = client.parseWithSchema(
|
|
92
|
+
raw,
|
|
93
|
+
ledgerVerifyResponseSchema,
|
|
94
|
+
"ledger verification response"
|
|
95
|
+
);
|
|
96
|
+
client.setLedgerApiKey(result.key);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
async function authenticateWithLedger(client, options) {
|
|
100
|
+
const challenge = await client.createLedgerChallenge({
|
|
101
|
+
accountId: options.accountId,
|
|
102
|
+
network: options.network
|
|
103
|
+
});
|
|
104
|
+
const signed = await resolveLedgerAuthSignature(challenge.message, options);
|
|
105
|
+
const verification = await client.verifyLedgerChallenge({
|
|
106
|
+
challengeId: challenge.challengeId,
|
|
107
|
+
accountId: options.accountId,
|
|
108
|
+
network: options.network,
|
|
109
|
+
signature: signed.signature,
|
|
110
|
+
signatureKind: signed.signatureKind,
|
|
111
|
+
publicKey: signed.publicKey,
|
|
112
|
+
expiresInMinutes: options.expiresInMinutes
|
|
113
|
+
});
|
|
114
|
+
return verification;
|
|
115
|
+
}
|
|
116
|
+
async function authenticateWithLedgerCredentials(client, options) {
|
|
117
|
+
const {
|
|
118
|
+
accountId,
|
|
119
|
+
network,
|
|
120
|
+
signer,
|
|
121
|
+
sign,
|
|
122
|
+
hederaPrivateKey,
|
|
123
|
+
evmPrivateKey,
|
|
124
|
+
expiresInMinutes,
|
|
125
|
+
setAccountHeader = true,
|
|
126
|
+
label,
|
|
127
|
+
logger
|
|
128
|
+
} = options;
|
|
129
|
+
const resolvedNetwork = canonicalizeLedgerNetwork(network);
|
|
130
|
+
const labelSuffix = label ? ` for ${label}` : "";
|
|
131
|
+
const networkPayload = resolvedNetwork.canonical;
|
|
132
|
+
const authOptions = {
|
|
133
|
+
accountId,
|
|
134
|
+
network: networkPayload,
|
|
135
|
+
expiresInMinutes
|
|
136
|
+
};
|
|
137
|
+
if (sign) {
|
|
138
|
+
authOptions.sign = sign;
|
|
139
|
+
} else if (signer) {
|
|
140
|
+
authOptions.signer = signer;
|
|
141
|
+
} else if (hederaPrivateKey) {
|
|
142
|
+
if (resolvedNetwork.kind !== "hedera" || !resolvedNetwork.hederaNetwork) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
"hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks."
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
authOptions.signer = await createPrivateKeySignerAsync({
|
|
148
|
+
accountId,
|
|
149
|
+
privateKey: hederaPrivateKey,
|
|
150
|
+
network: resolvedNetwork.hederaNetwork
|
|
151
|
+
});
|
|
152
|
+
} else if (evmPrivateKey) {
|
|
153
|
+
if (resolvedNetwork.kind !== "evm") {
|
|
154
|
+
throw new Error(
|
|
155
|
+
"evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>)."
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
const formattedKey = evmPrivateKey.startsWith("0x") ? evmPrivateKey : `0x${evmPrivateKey}`;
|
|
159
|
+
const account = await loadViemAccount(formattedKey);
|
|
160
|
+
authOptions.sign = async (message) => ({
|
|
161
|
+
signature: await account.signMessage({ message }),
|
|
162
|
+
signatureKind: "evm",
|
|
163
|
+
publicKey: account.publicKey
|
|
164
|
+
});
|
|
165
|
+
} else {
|
|
166
|
+
throw new Error(
|
|
167
|
+
"Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger."
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
logger?.info?.(
|
|
171
|
+
`Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`
|
|
172
|
+
);
|
|
173
|
+
const verification = await client.authenticateWithLedger(authOptions);
|
|
174
|
+
if (setAccountHeader) {
|
|
175
|
+
client.setDefaultHeader("x-account-id", verification.accountId);
|
|
176
|
+
}
|
|
177
|
+
logger?.info?.(
|
|
178
|
+
`Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`
|
|
179
|
+
);
|
|
180
|
+
return verification;
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
authenticateWithLedger,
|
|
184
|
+
authenticateWithLedgerCredentials,
|
|
185
|
+
createLedgerChallenge,
|
|
186
|
+
verifyLedgerChallenge
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=standards-sdk.es172.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standards-sdk.es172.js","sources":["../../src/services/registry-broker/client/ledger-auth.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type { SignerSignature } from '@hashgraph/sdk';\nimport type {\n JsonObject,\n JsonValue,\n LedgerAuthenticationOptions,\n LedgerAuthenticationSignerResult,\n LedgerChallengeRequest,\n LedgerChallengeResponse,\n LedgerCredentialAuthOptions,\n LedgerVerifyRequest,\n LedgerVerifyResponse,\n} from '../types';\nimport {\n ledgerChallengeResponseSchema,\n ledgerVerifyResponseSchema,\n} from '../schemas';\nimport { canonicalizeLedgerNetwork } from '../ledger-network';\nimport { createPrivateKeySignerAsync } from '../private-key-signer';\nimport type { RegistryBrokerClient } from './base-client';\n\nasync function loadViemAccount(privateKey: `0x${string}`): Promise<{\n publicKey: string;\n signMessage: (input: { message: string }) => Promise<string>;\n}> {\n try {\n const viem = await import('viem/accounts');\n return viem.privateKeyToAccount(privateKey);\n } catch (error) {\n const err = new Error(\n 'EVM ledger authentication requires the optional dependency \"viem\". Install it to use evmPrivateKey flows.',\n );\n (err as { cause?: unknown }).cause = error;\n throw err;\n }\n}\n\nasync function resolveLedgerAuthSignature(\n message: string,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerAuthenticationSignerResult> {\n if (typeof options.sign === 'function') {\n const result = await options.sign(message);\n if (\n !result ||\n typeof result.signature !== 'string' ||\n result.signature.length === 0\n ) {\n throw new Error('Custom ledger signer failed to produce a signature.');\n }\n return result;\n }\n\n if (!options.signer || typeof options.signer.sign !== 'function') {\n throw new Error(\n 'Ledger authentication requires a Hedera Signer or custom sign function.',\n );\n }\n\n const payload = Buffer.from(message, 'utf8');\n const signatures: SignerSignature[] = await options.signer.sign([payload]);\n const signatureEntry = signatures?.[0];\n if (!signatureEntry) {\n throw new Error('Signer did not return any signatures.');\n }\n\n let derivedPublicKey: string | undefined;\n if (signatureEntry.publicKey) {\n derivedPublicKey = signatureEntry.publicKey.toString();\n } else if (typeof options.signer.getAccountKey === 'function') {\n const accountKey = await options.signer.getAccountKey();\n if (accountKey && typeof accountKey.toString === 'function') {\n derivedPublicKey = accountKey.toString();\n }\n }\n\n return {\n signature: Buffer.from(signatureEntry.signature).toString('base64'),\n signatureKind: 'raw',\n publicKey: derivedPublicKey,\n };\n}\n\nexport async function createLedgerChallenge(\n client: RegistryBrokerClient,\n payload: LedgerChallengeRequest,\n): Promise<LedgerChallengeResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const raw = await client.requestJson<JsonValue>('/auth/ledger/challenge', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: {\n accountId: payload.accountId,\n network,\n },\n });\n\n return client.parseWithSchema(\n raw,\n ledgerChallengeResponseSchema,\n 'ledger challenge response',\n );\n}\n\nexport async function verifyLedgerChallenge(\n client: RegistryBrokerClient,\n payload: LedgerVerifyRequest,\n): Promise<LedgerVerifyResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const body: JsonObject = {\n challengeId: payload.challengeId,\n accountId: payload.accountId,\n network,\n signature: payload.signature,\n };\n\n if (payload.signatureKind) {\n body.signatureKind = payload.signatureKind;\n }\n if (payload.publicKey) {\n body.publicKey = payload.publicKey;\n }\n if (typeof payload.expiresInMinutes === 'number') {\n body.expiresInMinutes = payload.expiresInMinutes;\n }\n\n const raw = await client.requestJson<JsonValue>('/auth/ledger/verify', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n const result = client.parseWithSchema(\n raw,\n ledgerVerifyResponseSchema,\n 'ledger verification response',\n );\n\n client.setLedgerApiKey(result.key);\n return result;\n}\n\nexport async function authenticateWithLedger(\n client: RegistryBrokerClient,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerVerifyResponse> {\n const challenge = await client.createLedgerChallenge({\n accountId: options.accountId,\n network: options.network,\n });\n const signed = await resolveLedgerAuthSignature(challenge.message, options);\n const verification = await client.verifyLedgerChallenge({\n challengeId: challenge.challengeId,\n accountId: options.accountId,\n network: options.network,\n signature: signed.signature,\n signatureKind: signed.signatureKind,\n publicKey: signed.publicKey,\n expiresInMinutes: options.expiresInMinutes,\n });\n return verification;\n}\n\nexport async function authenticateWithLedgerCredentials(\n client: RegistryBrokerClient,\n options: LedgerCredentialAuthOptions,\n): Promise<LedgerVerifyResponse> {\n const {\n accountId,\n network,\n signer,\n sign,\n hederaPrivateKey,\n evmPrivateKey,\n expiresInMinutes,\n setAccountHeader = true,\n label,\n logger,\n } = options;\n\n const resolvedNetwork = canonicalizeLedgerNetwork(network);\n const labelSuffix = label ? ` for ${label}` : '';\n\n const networkPayload = resolvedNetwork.canonical;\n\n const authOptions: LedgerAuthenticationOptions = {\n accountId,\n network: networkPayload,\n expiresInMinutes,\n };\n\n if (sign) {\n authOptions.sign = sign;\n } else if (signer) {\n authOptions.signer = signer;\n } else if (hederaPrivateKey) {\n if (resolvedNetwork.kind !== 'hedera' || !resolvedNetwork.hederaNetwork) {\n throw new Error(\n 'hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks.',\n );\n }\n authOptions.signer = await createPrivateKeySignerAsync({\n accountId,\n privateKey: hederaPrivateKey,\n network: resolvedNetwork.hederaNetwork,\n });\n } else if (evmPrivateKey) {\n if (resolvedNetwork.kind !== 'evm') {\n throw new Error(\n 'evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>).',\n );\n }\n const formattedKey = evmPrivateKey.startsWith('0x')\n ? (evmPrivateKey as `0x${string}`)\n : (`0x${evmPrivateKey}` as `0x${string}`);\n const account = await loadViemAccount(formattedKey);\n authOptions.sign = async message => ({\n signature: await account.signMessage({ message }),\n signatureKind: 'evm',\n publicKey: account.publicKey,\n });\n } else {\n throw new Error(\n 'Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger.',\n );\n }\n\n logger?.info?.(\n `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`,\n );\n const verification = await client.authenticateWithLedger(authOptions);\n if (setAccountHeader) {\n client.setDefaultHeader('x-account-id', verification.accountId);\n }\n logger?.info?.(\n `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`,\n );\n return verification;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Buffer } from "buffer";
|
|
2
|
+
import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es138.js";
|
|
3
|
+
function identitiesMatch(a, b) {
|
|
4
|
+
if (!a && !b) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if (!a || !b) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (a.ledgerAccountId && b.ledgerAccountId && a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (a.userId && b.userId && a.userId === b.userId) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
async function fetchHistorySnapshot(conversationContexts, client, sessionId, options) {
|
|
25
|
+
if (!sessionId || sessionId.trim().length === 0) {
|
|
26
|
+
throw new Error("sessionId is required to fetch chat history");
|
|
27
|
+
}
|
|
28
|
+
const raw = await client.requestJson(
|
|
29
|
+
`/chat/session/${encodeURIComponent(sessionId)}/history`,
|
|
30
|
+
{
|
|
31
|
+
method: "GET"
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
const snapshot = client.parseWithSchema(
|
|
35
|
+
raw,
|
|
36
|
+
chatHistorySnapshotResponseSchema,
|
|
37
|
+
"chat history snapshot response"
|
|
38
|
+
);
|
|
39
|
+
return attachDecryptedHistory(
|
|
40
|
+
conversationContexts,
|
|
41
|
+
client,
|
|
42
|
+
sessionId,
|
|
43
|
+
snapshot,
|
|
44
|
+
options
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
function attachDecryptedHistory(conversationContexts, client, sessionId, snapshot, options) {
|
|
48
|
+
const shouldDecrypt = options?.decrypt !== void 0 ? options.decrypt : client.encryptionOptions?.autoDecryptHistory === true;
|
|
49
|
+
if (!shouldDecrypt) {
|
|
50
|
+
return snapshot;
|
|
51
|
+
}
|
|
52
|
+
const requiresContext = snapshot.history.some(
|
|
53
|
+
(entry) => Boolean(entry.cipherEnvelope)
|
|
54
|
+
);
|
|
55
|
+
if (!requiresContext) {
|
|
56
|
+
return {
|
|
57
|
+
...snapshot,
|
|
58
|
+
decryptedHistory: snapshot.history.map((entry) => ({
|
|
59
|
+
entry,
|
|
60
|
+
plaintext: entry.content
|
|
61
|
+
}))
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const context = resolveDecryptionContext(
|
|
65
|
+
conversationContexts,
|
|
66
|
+
client,
|
|
67
|
+
sessionId,
|
|
68
|
+
options
|
|
69
|
+
);
|
|
70
|
+
if (!context) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
"Unable to decrypt chat history: encryption context unavailable"
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
const decryptedHistory = snapshot.history.map((entry) => ({
|
|
76
|
+
entry,
|
|
77
|
+
plaintext: decryptHistoryEntryFromContext(client, entry, context)
|
|
78
|
+
}));
|
|
79
|
+
return { ...snapshot, decryptedHistory };
|
|
80
|
+
}
|
|
81
|
+
function registerConversationContextForEncryption(conversationContexts, context) {
|
|
82
|
+
const normalized = {
|
|
83
|
+
sessionId: context.sessionId,
|
|
84
|
+
sharedSecret: Buffer.from(context.sharedSecret),
|
|
85
|
+
identity: context.identity ? { ...context.identity } : void 0
|
|
86
|
+
};
|
|
87
|
+
const entries = conversationContexts.get(context.sessionId) ?? [];
|
|
88
|
+
const existingIndex = entries.findIndex(
|
|
89
|
+
(existing) => identitiesMatch(existing.identity, normalized.identity)
|
|
90
|
+
);
|
|
91
|
+
if (existingIndex >= 0) {
|
|
92
|
+
entries[existingIndex] = normalized;
|
|
93
|
+
} else {
|
|
94
|
+
entries.push(normalized);
|
|
95
|
+
}
|
|
96
|
+
conversationContexts.set(context.sessionId, entries);
|
|
97
|
+
}
|
|
98
|
+
function resolveDecryptionContext(conversationContexts, client, sessionId, options) {
|
|
99
|
+
if (options?.sharedSecret) {
|
|
100
|
+
return {
|
|
101
|
+
sessionId,
|
|
102
|
+
sharedSecret: client.normalizeSharedSecret(options.sharedSecret),
|
|
103
|
+
identity: options.identity
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const contexts = conversationContexts.get(sessionId);
|
|
107
|
+
if (!contexts || contexts.length === 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
if (options?.identity) {
|
|
111
|
+
const match = contexts.find(
|
|
112
|
+
(context) => identitiesMatch(context.identity, options.identity)
|
|
113
|
+
);
|
|
114
|
+
if (match) {
|
|
115
|
+
return match;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return contexts[0];
|
|
119
|
+
}
|
|
120
|
+
function decryptHistoryEntryFromContext(client, entry, context) {
|
|
121
|
+
const envelope = entry.cipherEnvelope;
|
|
122
|
+
if (!envelope) {
|
|
123
|
+
return entry.content;
|
|
124
|
+
}
|
|
125
|
+
const secret = Buffer.from(context.sharedSecret);
|
|
126
|
+
try {
|
|
127
|
+
return client.encryption.decryptCipherEnvelope({
|
|
128
|
+
envelope,
|
|
129
|
+
sharedSecret: secret
|
|
130
|
+
});
|
|
131
|
+
} catch (_error) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export {
|
|
136
|
+
attachDecryptedHistory,
|
|
137
|
+
decryptHistoryEntryFromContext,
|
|
138
|
+
fetchHistorySnapshot,
|
|
139
|
+
registerConversationContextForEncryption,
|
|
140
|
+
resolveDecryptionContext
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=standards-sdk.es173.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standards-sdk.es173.js","sources":["../../src/services/registry-broker/client/chat-history.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type {\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n JsonValue,\n RecipientIdentity,\n} from '../types';\nimport { chatHistorySnapshotResponseSchema } from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nexport interface ConversationContextInput {\n sessionId: string;\n sharedSecret: Uint8Array | Buffer;\n identity?: RecipientIdentity;\n}\n\nexport interface ConversationContextState {\n sessionId: string;\n sharedSecret: Buffer;\n identity?: RecipientIdentity;\n}\n\nfunction identitiesMatch(\n a?: RecipientIdentity,\n b?: RecipientIdentity,\n): boolean {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {\n return true;\n }\n if (\n a.ledgerAccountId &&\n b.ledgerAccountId &&\n a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()\n ) {\n return true;\n }\n if (a.userId && b.userId && a.userId === b.userId) {\n return true;\n }\n if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {\n return true;\n }\n return false;\n}\n\nexport async function fetchHistorySnapshot(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required to fetch chat history');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/history`,\n {\n method: 'GET',\n },\n );\n const snapshot = client.parseWithSchema(\n raw,\n chatHistorySnapshotResponseSchema,\n 'chat history snapshot response',\n );\n return attachDecryptedHistory(\n conversationContexts,\n client,\n sessionId,\n snapshot,\n options,\n );\n}\n\nexport function attachDecryptedHistory(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n): ChatHistorySnapshotWithDecryptedEntries {\n const shouldDecrypt =\n options?.decrypt !== undefined\n ? options.decrypt\n : client.encryptionOptions?.autoDecryptHistory === true;\n if (!shouldDecrypt) {\n return snapshot;\n }\n const requiresContext = snapshot.history.some(entry =>\n Boolean(entry.cipherEnvelope),\n );\n if (!requiresContext) {\n return {\n ...snapshot,\n decryptedHistory: snapshot.history.map(entry => ({\n entry,\n plaintext: entry.content,\n })),\n };\n }\n const context = resolveDecryptionContext(\n conversationContexts,\n client,\n sessionId,\n options,\n );\n if (!context) {\n throw new Error(\n 'Unable to decrypt chat history: encryption context unavailable',\n );\n }\n const decryptedHistory = snapshot.history.map(entry => ({\n entry,\n plaintext: decryptHistoryEntryFromContext(client, entry, context),\n }));\n return { ...snapshot, decryptedHistory };\n}\n\nexport function registerConversationContextForEncryption(\n conversationContexts: Map<string, ConversationContextState[]>,\n context: ConversationContextInput,\n): void {\n const normalized: ConversationContextState = {\n sessionId: context.sessionId,\n sharedSecret: Buffer.from(context.sharedSecret),\n identity: context.identity ? { ...context.identity } : undefined,\n };\n const entries = conversationContexts.get(context.sessionId) ?? [];\n const existingIndex = entries.findIndex(existing =>\n identitiesMatch(existing.identity, normalized.identity),\n );\n if (existingIndex >= 0) {\n entries[existingIndex] = normalized;\n } else {\n entries.push(normalized);\n }\n conversationContexts.set(context.sessionId, entries);\n}\n\nexport function resolveDecryptionContext(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): ConversationContextState | null {\n if (options?.sharedSecret) {\n return {\n sessionId,\n sharedSecret: client.normalizeSharedSecret(options.sharedSecret),\n identity: options.identity,\n };\n }\n const contexts = conversationContexts.get(sessionId);\n if (!contexts || contexts.length === 0) {\n return null;\n }\n if (options?.identity) {\n const match = contexts.find(context =>\n identitiesMatch(context.identity, options.identity),\n );\n if (match) {\n return match;\n }\n }\n return contexts[0];\n}\n\nexport function decryptHistoryEntryFromContext(\n client: RegistryBrokerClient,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n): string | null {\n const envelope = entry.cipherEnvelope;\n if (!envelope) {\n return entry.content;\n }\n const secret = Buffer.from(context.sharedSecret);\n try {\n return client.encryption.decryptCipherEnvelope({\n envelope,\n sharedSecret: secret,\n });\n } catch (_error) {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|