@hashgraphonline/standards-sdk 0.1.146-chore-jsr-improvements.canary.46c0c0f.91 → 0.1.146-chore-jsr-improvements.canary.62a5b19.93
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/services/registry-broker/client/adapters.d.ts +4 -19
- package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/agents.d.ts +4 -15
- package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +64 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts +4 -22
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/chat.d.ts +4 -32
- package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/credits.d.ts +4 -39
- package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +4 -34
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/encryption.d.ts +4 -32
- package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +4 -9
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/search-helpers.d.ts +16 -0
- package/dist/cjs/services/registry-broker/client/search-helpers.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/search.d.ts +5 -18
- package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +4 -0
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +3 -3
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/services/registry-broker/client/adapters.d.ts +4 -19
- package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/agents.d.ts +4 -15
- package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts +64 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/chat-history.d.ts +4 -22
- package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/chat.d.ts +4 -32
- package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/credits.d.ts +4 -39
- package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +4 -34
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/encryption.d.ts +4 -32
- package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts +4 -9
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/search-helpers.d.ts +16 -0
- package/dist/es/services/registry-broker/client/search-helpers.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/search.d.ts +5 -18
- package/dist/es/services/registry-broker/client/search.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +4 -0
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +9 -17
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +1 -1
- package/dist/es/standards-sdk.es103.js +1 -1
- package/dist/es/standards-sdk.es109.js +2 -10
- 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 +5 -5
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +1 -1
- package/dist/es/standards-sdk.es121.js +1 -1
- package/dist/es/standards-sdk.es122.js +5 -5
- package/dist/es/standards-sdk.es124.js +1 -1
- package/dist/es/standards-sdk.es125.js +1 -1
- package/dist/es/standards-sdk.es127.js +624 -155
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +15 -205
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +74 -97
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es130.js +78 -112
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +51 -238
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +146 -167
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +8 -123
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +77 -317
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +61 -460
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +30 -17
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +34 -81
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +28 -87
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +932 -59
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es140.js +12263 -133
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +138 -7
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +36 -80
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +49 -58
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +84 -30
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +17 -34
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +172 -28
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +299 -115
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +340 -36
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +453 -959
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es150.js +267 -12225
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +74 -15
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +132 -49
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +2 -10
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +5 -13
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +3 -11
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es27.js +5 -13
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es35.js +3 -11
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +3 -3
- package/dist/es/standards-sdk.es37.js +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +1 -1
- package/dist/es/standards-sdk.es58.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +3 -11
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +2 -2
- package/dist/es/standards-sdk.es68.js +2 -2
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +1 -1
- package/dist/es/standards-sdk.es76.js +1 -1
- package/dist/es/standards-sdk.es77.js +2 -10
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +1 -1
- package/dist/es/standards-sdk.es83.js +1 -1
- package/dist/es/standards-sdk.es87.js +3 -3
- package/dist/es/standards-sdk.es91.js +1 -1
- package/dist/es/standards-sdk.es92.js +1 -1
- package/dist/es/standards-sdk.es97.js +1 -1
- package/dist/es/standards-sdk.es99.js +1 -1
- package/package.json +1 -1
- package/dist/es/standards-sdk.es153.js +0 -87
- package/dist/es/standards-sdk.es153.js.map +0 -1
- package/dist/es/standards-sdk.es154.js +0 -175
- package/dist/es/standards-sdk.es154.js.map +0 -1
- package/dist/es/standards-sdk.es155.js +0 -325
- package/dist/es/standards-sdk.es155.js.map +0 -1
- package/dist/es/standards-sdk.es156.js +0 -349
- package/dist/es/standards-sdk.es156.js.map +0 -1
- package/dist/es/standards-sdk.es157.js +0 -456
- package/dist/es/standards-sdk.es157.js.map +0 -1
- package/dist/es/standards-sdk.es158.js +0 -334
- package/dist/es/standards-sdk.es158.js.map +0 -1
- package/dist/es/standards-sdk.es159.js +0 -79
- package/dist/es/standards-sdk.es159.js.map +0 -1
- package/dist/es/standards-sdk.es160.js +0 -242
- package/dist/es/standards-sdk.es160.js.map +0 -1
- package/dist/es/standards-sdk.es161.js +0 -247
- package/dist/es/standards-sdk.es161.js.map +0 -1
|
@@ -1,124 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
function calculateHbarAmountParam(hbarAmount) {
|
|
33
|
-
const tinybars = Math.ceil(hbarAmount * 1e8);
|
|
34
|
-
if (tinybars <= 0) {
|
|
35
|
-
throw new Error("Calculated purchase amount must be positive");
|
|
36
|
-
}
|
|
37
|
-
return tinybars / 1e8;
|
|
38
|
-
}
|
|
39
|
-
RegistryBrokerClient.prototype.purchaseCreditsWithHbar = async function(params) {
|
|
40
|
-
const body = {
|
|
41
|
-
accountId: params.accountId,
|
|
42
|
-
payerKey: params.privateKey,
|
|
43
|
-
hbarAmount: calculateHbarAmountParam(params.hbarAmount)
|
|
44
|
-
};
|
|
45
|
-
if (params.memo) {
|
|
46
|
-
body.memo = params.memo;
|
|
1
|
+
const normalise = (value) => value.trim().toLowerCase();
|
|
2
|
+
const HEDERA_NETWORK_ALIASES = /* @__PURE__ */ new Map([
|
|
3
|
+
["hedera:mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
|
|
4
|
+
["mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
|
|
5
|
+
["hedera-mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
|
|
6
|
+
["hedera_mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
|
|
7
|
+
["hedera:testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
|
|
8
|
+
["testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
|
|
9
|
+
["hedera-testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
|
|
10
|
+
["hedera_testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }]
|
|
11
|
+
]);
|
|
12
|
+
const EVM_NETWORK_CHAIN_IDS = {
|
|
13
|
+
abstract: 2741,
|
|
14
|
+
"abstract-testnet": 11124,
|
|
15
|
+
base: 8453,
|
|
16
|
+
"base-sepolia": 84532,
|
|
17
|
+
avalanche: 43114,
|
|
18
|
+
"avalanche-fuji": 43113,
|
|
19
|
+
iotex: 4689,
|
|
20
|
+
sei: 1329,
|
|
21
|
+
"sei-testnet": 1328,
|
|
22
|
+
polygon: 137,
|
|
23
|
+
"polygon-amoy": 80002,
|
|
24
|
+
peaq: 3338
|
|
25
|
+
};
|
|
26
|
+
const CHAIN_ID_TO_ALIAS = new Map(
|
|
27
|
+
Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias])
|
|
28
|
+
);
|
|
29
|
+
const parseChainId = (value) => {
|
|
30
|
+
if (/^eip155:\d+$/i.test(value)) {
|
|
31
|
+
return Number.parseInt(value.split(":")[1], 10);
|
|
47
32
|
}
|
|
48
|
-
if (
|
|
49
|
-
|
|
33
|
+
if (/^\d+$/.test(value)) {
|
|
34
|
+
return Number.parseInt(value, 10);
|
|
50
35
|
}
|
|
51
|
-
|
|
52
|
-
method: "POST",
|
|
53
|
-
headers: { "content-type": "application/json" },
|
|
54
|
-
body
|
|
55
|
-
});
|
|
56
|
-
return this.parseWithSchema(
|
|
57
|
-
raw,
|
|
58
|
-
creditPurchaseResponseSchema,
|
|
59
|
-
"credit purchase response"
|
|
60
|
-
);
|
|
61
|
-
};
|
|
62
|
-
RegistryBrokerClient.prototype.getX402Minimums = async function() {
|
|
63
|
-
const raw = await this.requestJson(
|
|
64
|
-
"/credits/purchase/x402/minimums",
|
|
65
|
-
{ method: "GET" }
|
|
66
|
-
);
|
|
67
|
-
return this.parseWithSchema(
|
|
68
|
-
raw,
|
|
69
|
-
x402MinimumsResponseSchema,
|
|
70
|
-
"x402 minimums response"
|
|
71
|
-
);
|
|
36
|
+
return void 0;
|
|
72
37
|
};
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
38
|
+
const normaliseEvmNetwork = (value) => {
|
|
39
|
+
const trimmed = normalise(value);
|
|
40
|
+
let chainId = parseChainId(trimmed);
|
|
41
|
+
let alias;
|
|
42
|
+
if (chainId === void 0) {
|
|
43
|
+
const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];
|
|
44
|
+
if (mapped !== void 0) {
|
|
45
|
+
chainId = mapped;
|
|
46
|
+
alias = trimmed;
|
|
47
|
+
}
|
|
48
|
+
} else if (CHAIN_ID_TO_ALIAS.has(chainId)) {
|
|
49
|
+
alias = CHAIN_ID_TO_ALIAS.get(chainId);
|
|
77
50
|
}
|
|
78
|
-
if (
|
|
79
|
-
throw new Error(
|
|
51
|
+
if (chainId === void 0) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
'Unsupported EVM ledger network. Provide an alias like "base-sepolia" or a canonical eip155:<chainId> string.'
|
|
54
|
+
);
|
|
80
55
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
56
|
+
return {
|
|
57
|
+
canonical: `eip155:${chainId}`,
|
|
58
|
+
kind: "evm",
|
|
59
|
+
chainId,
|
|
60
|
+
legacyName: alias
|
|
84
61
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
62
|
+
};
|
|
63
|
+
const normaliseHederaNetwork = (value) => {
|
|
64
|
+
const trimmed = normalise(value);
|
|
65
|
+
const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);
|
|
66
|
+
if (!mapping) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy "mainnet"/"testnet" also accepted).'
|
|
69
|
+
);
|
|
93
70
|
}
|
|
94
|
-
const paymentClient = createPaymentClient(params.walletClient);
|
|
95
|
-
const response = await paymentClient.post("/credits/purchase/x402", body);
|
|
96
|
-
const parsed = this.parseWithSchema(
|
|
97
|
-
response.data,
|
|
98
|
-
x402CreditPurchaseResponseSchema,
|
|
99
|
-
"x402 credit purchase response"
|
|
100
|
-
);
|
|
101
|
-
const responseHeaders = response.headers ?? {};
|
|
102
|
-
const paymentHeader = typeof responseHeaders["x-payment-response"] === "string" ? responseHeaders["x-payment-response"] : void 0;
|
|
103
|
-
const decodedPayment = paymentHeader !== void 0 ? decodePaymentResponse(paymentHeader) : void 0;
|
|
104
71
|
return {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
72
|
+
canonical: mapping.canonical,
|
|
73
|
+
kind: "hedera",
|
|
74
|
+
hederaNetwork: mapping.hederaNetwork
|
|
108
75
|
};
|
|
109
76
|
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
});
|
|
77
|
+
const canonicalizeLedgerNetwork = (network) => {
|
|
78
|
+
if (typeof network !== "string" || network.trim().length === 0) {
|
|
79
|
+
throw new Error("Ledger network is required.");
|
|
80
|
+
}
|
|
81
|
+
const trimmed = normalise(network);
|
|
82
|
+
if (trimmed.startsWith("hedera:") || trimmed.includes("hedera-") || trimmed.includes("hedera_") || trimmed === "mainnet" || trimmed === "testnet") {
|
|
83
|
+
return normaliseHederaNetwork(trimmed);
|
|
84
|
+
}
|
|
85
|
+
return normaliseEvmNetwork(trimmed);
|
|
86
|
+
};
|
|
87
|
+
export {
|
|
88
|
+
canonicalizeLedgerNetwork
|
|
123
89
|
};
|
|
124
90
|
//# sourceMappingURL=standards-sdk.es130.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es130.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 { 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\ninterface PurchaseCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n walletClient: object;\n}\n\ninterface 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\ntype 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\ndeclare module './base-client' {\n interface RegistryBrokerClient {\n purchaseCreditsWithHbar(params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n }): Promise<CreditPurchaseResponse>;\n getX402Minimums(): Promise<X402MinimumsResponse>;\n purchaseCreditsWithX402(\n params: PurchaseCreditsWithX402Params,\n ): Promise<X402PurchaseResult>;\n buyCreditsWithX402(\n params: BuyCreditsWithX402Params,\n ): Promise<X402PurchaseResult>;\n }\n}\n\nRegistryBrokerClient.prototype.purchaseCreditsWithHbar = async function (\n this: 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 this.requestJson<JsonValue>('/credits/purchase', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n return this.parseWithSchema(\n raw,\n creditPurchaseResponseSchema,\n 'credit purchase response',\n );\n};\n\nRegistryBrokerClient.prototype.getX402Minimums = async function (\n this: RegistryBrokerClient,\n): Promise<X402MinimumsResponse> {\n const raw = await this.requestJson<JsonValue>(\n '/credits/purchase/x402/minimums',\n { method: 'GET' },\n );\n return this.parseWithSchema(\n raw,\n x402MinimumsResponseSchema,\n 'x402 minimums response',\n );\n};\n\nRegistryBrokerClient.prototype.purchaseCreditsWithX402 = async function (\n this: RegistryBrokerClient,\n params: PurchaseCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const { createPaymentClient, decodePaymentResponse } =\n await loadX402Dependencies(this);\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 = this.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\nRegistryBrokerClient.prototype.buyCreditsWithX402 = async function (\n this: RegistryBrokerClient,\n params: BuyCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const network: X402NetworkId = params.network ?? 'base';\n const { createX402Signer } = await loadX402Dependencies(this);\n const normalizedKey = normalizeHexPrivateKey(params.evmPrivateKey);\n const walletClient = await createX402Signer(network, normalizedKey);\n\n return this.purchaseCreditsWithX402({\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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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es130.js","sources":["../../src/services/registry-broker/ledger-network.ts"],"sourcesContent":["type HederaNetwork = 'mainnet' | 'testnet';\ntype LedgerNetworkKind = 'hedera' | 'evm';\n\nexport interface CanonicalLedgerNetwork {\n canonical: string;\n kind: LedgerNetworkKind;\n hederaNetwork?: HederaNetwork;\n chainId?: number;\n legacyName?: string;\n}\n\nconst normalise = (value: string): string => value.trim().toLowerCase();\n\nconst HEDERA_NETWORK_ALIASES = new Map<\n string,\n { canonical: `hedera:${HederaNetwork}`; hederaNetwork: HederaNetwork }\n>([\n ['hedera:mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera-mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera_mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera:testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera-testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera_testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n]);\n\nconst EVM_NETWORK_CHAIN_IDS: Record<string, number> = {\n abstract: 2741,\n 'abstract-testnet': 11124,\n base: 8453,\n 'base-sepolia': 84532,\n avalanche: 43114,\n 'avalanche-fuji': 43113,\n iotex: 4689,\n sei: 1329,\n 'sei-testnet': 1328,\n polygon: 137,\n 'polygon-amoy': 80002,\n peaq: 3338,\n};\n\nconst CHAIN_ID_TO_ALIAS = new Map<number, string>(\n Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias]),\n);\n\nconst parseChainId = (value: string): number | undefined => {\n if (/^eip155:\\d+$/i.test(value)) {\n return Number.parseInt(value.split(':')[1]!, 10);\n }\n if (/^\\d+$/.test(value)) {\n return Number.parseInt(value, 10);\n }\n return undefined;\n};\n\nconst normaliseEvmNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n let chainId = parseChainId(trimmed);\n let alias: string | undefined;\n\n if (chainId === undefined) {\n const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];\n if (mapped !== undefined) {\n chainId = mapped;\n alias = trimmed;\n }\n } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {\n alias = CHAIN_ID_TO_ALIAS.get(chainId);\n }\n\n if (chainId === undefined) {\n throw new Error(\n 'Unsupported EVM ledger network. Provide an alias like \"base-sepolia\" or a canonical eip155:<chainId> string.',\n );\n }\n\n return {\n canonical: `eip155:${chainId}`,\n kind: 'evm',\n chainId,\n legacyName: alias,\n };\n};\n\nconst normaliseHederaNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);\n if (!mapping) {\n throw new Error(\n 'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy \"mainnet\"/\"testnet\" also accepted).',\n );\n }\n return {\n canonical: mapping.canonical,\n kind: 'hedera',\n hederaNetwork: mapping.hederaNetwork,\n };\n};\n\nexport const canonicalizeLedgerNetwork = (\n network: string,\n): CanonicalLedgerNetwork => {\n if (typeof network !== 'string' || network.trim().length === 0) {\n throw new Error('Ledger network is required.');\n }\n const trimmed = normalise(network);\n if (\n trimmed.startsWith('hedera:') ||\n trimmed.includes('hedera-') ||\n trimmed.includes('hedera_') ||\n trimmed === 'mainnet' ||\n trimmed === 'testnet'\n ) {\n return normaliseHederaNetwork(trimmed);\n }\n return normaliseEvmNetwork(trimmed);\n};\n"],"names":[],"mappings":"AAWA,MAAM,YAAY,CAAC,UAA0B,MAAM,KAAA,EAAO,YAAA;AAE1D,MAAM,6CAA6B,IAGjC;AAAA,EACA,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAC9E,CAAC;AAED,MAAM,wBAAgD;AAAA,EACpD,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,eAAe;AAAA,EACf,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,MAAM;AACR;AAEA,MAAM,oBAAoB,IAAI;AAAA,EAC5B,OAAO,QAAQ,qBAAqB,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC;AACxE;AAEA,MAAM,eAAe,CAAC,UAAsC;AAC1D,MAAI,gBAAgB,KAAK,KAAK,GAAG;AAC/B,WAAO,OAAO,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,GAAI,EAAE;AAAA,EACjD;AACA,MAAI,QAAQ,KAAK,KAAK,GAAG;AACvB,WAAO,OAAO,SAAS,OAAO,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAAC,UAA0C;AACrE,QAAM,UAAU,UAAU,KAAK;AAC/B,MAAI,UAAU,aAAa,OAAO;AAClC,MAAI;AAEJ,MAAI,YAAY,QAAW;AACzB,UAAM,SAAS,sBAAsB,OAAO;AAC5C,QAAI,WAAW,QAAW;AACxB,gBAAU;AACV,cAAQ;AAAA,IACV;AAAA,EACF,WAAW,kBAAkB,IAAI,OAAO,GAAG;AACzC,YAAQ,kBAAkB,IAAI,OAAO;AAAA,EACvC;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,WAAW,UAAU,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;AAEA,MAAM,yBAAyB,CAAC,UAA0C;AACxE,QAAM,UAAU,UAAU,KAAK;AAC/B,QAAM,UAAU,uBAAuB,IAAI,OAAO;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EAAA;AAE3B;AAEO,MAAM,4BAA4B,CACvC,YAC2B;AAC3B,MAAI,OAAO,YAAY,YAAY,QAAQ,KAAA,EAAO,WAAW,GAAG;AAC9D,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,QAAM,UAAU,UAAU,OAAO;AACjC,MACE,QAAQ,WAAW,SAAS,KAC5B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,SAAS,KAC1B,YAAY,aACZ,YAAY,WACZ;AACA,WAAO,uBAAuB,OAAO;AAAA,EACvC;AACA,SAAO,oBAAoB,OAAO;AACpC;"}
|
|
@@ -1,250 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const raw = await client.requestJson("/register", {
|
|
7
|
-
method: "POST",
|
|
8
|
-
body: serialiseAgentRegistrationRequest(payload),
|
|
9
|
-
headers: { "content-type": "application/json" }
|
|
10
|
-
});
|
|
11
|
-
return client.parseWithSchema(
|
|
12
|
-
raw,
|
|
13
|
-
registerAgentResponseSchema,
|
|
14
|
-
"register agent response"
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
function calculateHbarAmount(creditsToPurchase, creditsPerHbar) {
|
|
18
|
-
if (creditsPerHbar <= 0) {
|
|
19
|
-
throw new Error("creditsPerHbar must be positive");
|
|
20
|
-
}
|
|
21
|
-
if (creditsToPurchase <= 0) {
|
|
22
|
-
throw new Error("creditsToPurchase must be positive");
|
|
23
|
-
}
|
|
24
|
-
const rawHbar = creditsToPurchase / creditsPerHbar;
|
|
25
|
-
const tinybars = Math.ceil(rawHbar * 1e8);
|
|
26
|
-
return tinybars / 1e8;
|
|
27
|
-
}
|
|
28
|
-
function resolveCreditsToPurchase(shortfallCredits) {
|
|
29
|
-
if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {
|
|
30
|
-
return 0;
|
|
31
|
-
}
|
|
32
|
-
return Math.max(
|
|
33
|
-
Math.ceil(shortfallCredits),
|
|
34
|
-
MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
async function ensureCreditsForRegistration(client, payload, autoTopUp) {
|
|
38
|
-
const details = autoTopUp ?? null;
|
|
39
|
-
if (!details) {
|
|
40
|
-
return;
|
|
1
|
+
const HOL_CHAT_PROTOCOL_ID = "hol-chat";
|
|
2
|
+
const isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
const isHolChatOp = (value) => {
|
|
4
|
+
if (!isRecord(value)) {
|
|
5
|
+
return false;
|
|
41
6
|
}
|
|
42
|
-
if (
|
|
43
|
-
|
|
7
|
+
if (value.p !== HOL_CHAT_PROTOCOL_ID) {
|
|
8
|
+
return false;
|
|
44
9
|
}
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
49
|
-
const quote = await client.getRegistrationQuote(payload);
|
|
50
|
-
const shortfall = quote.shortfallCredits ?? 0;
|
|
51
|
-
if (shortfall <= 0) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const creditsToPurchase = resolveCreditsToPurchase(shortfall);
|
|
55
|
-
if (creditsToPurchase <= 0) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const creditsPerHbar = quote.creditsPerHbar ?? null;
|
|
59
|
-
if (!creditsPerHbar || creditsPerHbar <= 0) {
|
|
60
|
-
throw new Error("Unable to determine credits per HBAR for auto top-up");
|
|
61
|
-
}
|
|
62
|
-
const hbarAmount = calculateHbarAmount(creditsToPurchase, creditsPerHbar);
|
|
63
|
-
await client.purchaseCreditsWithHbar({
|
|
64
|
-
accountId: details.accountId.trim(),
|
|
65
|
-
privateKey: details.privateKey.trim(),
|
|
66
|
-
hbarAmount,
|
|
67
|
-
memo: details.memo ?? "Registry Broker auto top-up",
|
|
68
|
-
metadata: {
|
|
69
|
-
shortfallCredits: shortfall,
|
|
70
|
-
requiredCredits: quote.requiredCredits,
|
|
71
|
-
purchasedCredits: creditsToPurchase
|
|
72
|
-
}
|
|
73
|
-
});
|
|
10
|
+
if (typeof value.request_id !== "string" || value.request_id.trim().length === 0) {
|
|
11
|
+
return false;
|
|
74
12
|
}
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
77
|
-
|
|
13
|
+
const op = value.op;
|
|
14
|
+
if (op !== "payment_request" && op !== "payment_approve" && op !== "payment_decline" && op !== "payment_result" && op !== "job_status") {
|
|
15
|
+
return false;
|
|
78
16
|
}
|
|
79
|
-
|
|
80
|
-
RegistryBrokerClient.prototype.resolveUaid = async function(uaid) {
|
|
81
|
-
const raw = await this.requestJson(
|
|
82
|
-
`/resolve/${encodeURIComponent(uaid)}`,
|
|
83
|
-
{
|
|
84
|
-
method: "GET"
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
return this.parseWithSchema(
|
|
88
|
-
raw,
|
|
89
|
-
resolveResponseSchema,
|
|
90
|
-
"resolve UAID response"
|
|
91
|
-
);
|
|
17
|
+
return true;
|
|
92
18
|
};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return performRegisterAgent(this, payload);
|
|
19
|
+
const parseHolChatOps = (ops) => {
|
|
20
|
+
if (!Array.isArray(ops)) {
|
|
21
|
+
return [];
|
|
97
22
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
await ensureCreditsForRegistration(this, payload, autoTopUp);
|
|
107
|
-
retried = true;
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
throw error;
|
|
23
|
+
return ops.filter(isHolChatOp).map((op) => {
|
|
24
|
+
const next = {
|
|
25
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
26
|
+
op: op.op,
|
|
27
|
+
request_id: op.request_id.trim()
|
|
28
|
+
};
|
|
29
|
+
if (typeof op.m === "string" && op.m.trim().length > 0) {
|
|
30
|
+
next.m = op.m.trim();
|
|
111
31
|
}
|
|
112
|
-
|
|
113
|
-
};
|
|
114
|
-
RegistryBrokerClient.prototype.getRegistrationQuote = async function(payload) {
|
|
115
|
-
const raw = await this.requestJson("/register/quote", {
|
|
116
|
-
method: "POST",
|
|
117
|
-
body: serialiseAgentRegistrationRequest(payload),
|
|
118
|
-
headers: { "content-type": "application/json" }
|
|
119
|
-
});
|
|
120
|
-
return this.parseWithSchema(
|
|
121
|
-
raw,
|
|
122
|
-
registrationQuoteResponseSchema,
|
|
123
|
-
"registration quote response"
|
|
124
|
-
);
|
|
125
|
-
};
|
|
126
|
-
RegistryBrokerClient.prototype.updateAgent = async function(uaid, payload) {
|
|
127
|
-
const raw = await this.requestJson(
|
|
128
|
-
`/register/${encodeURIComponent(uaid)}`,
|
|
129
|
-
{
|
|
130
|
-
method: "PUT",
|
|
131
|
-
body: serialiseAgentRegistrationRequest(payload),
|
|
132
|
-
headers: { "content-type": "application/json" }
|
|
32
|
+
if (isRecord(op.data)) {
|
|
33
|
+
next.data = { ...op.data };
|
|
133
34
|
}
|
|
134
|
-
|
|
135
|
-
return this.parseWithSchema(
|
|
136
|
-
raw,
|
|
137
|
-
registerAgentResponseSchema,
|
|
138
|
-
"update agent response"
|
|
139
|
-
);
|
|
140
|
-
};
|
|
141
|
-
RegistryBrokerClient.prototype.getRegistrationProgress = async function(attemptId) {
|
|
142
|
-
const normalisedAttemptId = attemptId.trim();
|
|
143
|
-
if (!normalisedAttemptId) {
|
|
144
|
-
throw new Error("attemptId is required");
|
|
145
|
-
}
|
|
146
|
-
try {
|
|
147
|
-
const raw = await this.requestJson(
|
|
148
|
-
`/register/progress/${encodeURIComponent(normalisedAttemptId)}`,
|
|
149
|
-
{ method: "GET" }
|
|
150
|
-
);
|
|
151
|
-
const parsed = this.parseWithSchema(
|
|
152
|
-
raw,
|
|
153
|
-
registrationProgressResponseSchema,
|
|
154
|
-
"registration progress response"
|
|
155
|
-
);
|
|
156
|
-
return parsed.progress;
|
|
157
|
-
} catch (error) {
|
|
158
|
-
if (error instanceof RegistryBrokerError && error.status === 404) {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
throw error;
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
RegistryBrokerClient.prototype.waitForRegistrationCompletion = async function(attemptId, options = {}) {
|
|
165
|
-
const normalisedAttemptId = attemptId.trim();
|
|
166
|
-
if (!normalisedAttemptId) {
|
|
167
|
-
throw new Error("attemptId is required");
|
|
168
|
-
}
|
|
169
|
-
const interval = Math.max(
|
|
170
|
-
250,
|
|
171
|
-
options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS
|
|
172
|
-
);
|
|
173
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;
|
|
174
|
-
const throwOnFailure = options.throwOnFailure ?? true;
|
|
175
|
-
const signal = options.signal;
|
|
176
|
-
const startedAt = Date.now();
|
|
177
|
-
while (true) {
|
|
178
|
-
if (signal?.aborted) {
|
|
179
|
-
throw createAbortError();
|
|
180
|
-
}
|
|
181
|
-
const progress = await this.getRegistrationProgress(normalisedAttemptId);
|
|
182
|
-
if (progress) {
|
|
183
|
-
options.onProgress?.(progress);
|
|
184
|
-
if (progress.status === "completed") {
|
|
185
|
-
return progress;
|
|
186
|
-
}
|
|
187
|
-
if (progress.status === "partial" || progress.status === "failed") {
|
|
188
|
-
if (throwOnFailure) {
|
|
189
|
-
throw new RegistryBrokerError(
|
|
190
|
-
"Registration did not complete successfully",
|
|
191
|
-
{
|
|
192
|
-
status: 409,
|
|
193
|
-
statusText: progress.status,
|
|
194
|
-
body: progress
|
|
195
|
-
}
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
return progress;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (Date.now() - startedAt >= timeoutMs) {
|
|
202
|
-
throw new Error(
|
|
203
|
-
`Registration progress polling timed out after ${timeoutMs}ms`
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
await this.delay(interval, signal);
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
RegistryBrokerClient.prototype.validateUaid = async function(uaid) {
|
|
210
|
-
const raw = await this.requestJson(
|
|
211
|
-
`/uaids/validate/${encodeURIComponent(uaid)}`,
|
|
212
|
-
{
|
|
213
|
-
method: "GET"
|
|
214
|
-
}
|
|
215
|
-
);
|
|
216
|
-
return this.parseWithSchema(
|
|
217
|
-
raw,
|
|
218
|
-
uaidValidationResponseSchema,
|
|
219
|
-
"UAID validation response"
|
|
220
|
-
);
|
|
221
|
-
};
|
|
222
|
-
RegistryBrokerClient.prototype.getUaidConnectionStatus = async function(uaid) {
|
|
223
|
-
const raw = await this.requestJson(
|
|
224
|
-
`/uaids/connections/${encodeURIComponent(uaid)}/status`,
|
|
225
|
-
{
|
|
226
|
-
method: "GET"
|
|
227
|
-
}
|
|
228
|
-
);
|
|
229
|
-
return this.parseWithSchema(
|
|
230
|
-
raw,
|
|
231
|
-
uaidConnectionStatusSchema,
|
|
232
|
-
"UAID connection status"
|
|
233
|
-
);
|
|
234
|
-
};
|
|
235
|
-
RegistryBrokerClient.prototype.closeUaidConnection = async function(uaid) {
|
|
236
|
-
await this.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {
|
|
237
|
-
method: "DELETE"
|
|
35
|
+
return next;
|
|
238
36
|
});
|
|
239
37
|
};
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
38
|
+
const buildPaymentApproveMessage = (input) => JSON.stringify({
|
|
39
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
40
|
+
op: "payment_approve",
|
|
41
|
+
request_id: input.requestId,
|
|
42
|
+
data: { job_id: input.jobId }
|
|
43
|
+
});
|
|
44
|
+
const buildPaymentDeclineMessage = (input) => JSON.stringify({
|
|
45
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
46
|
+
op: "payment_decline",
|
|
47
|
+
request_id: input.requestId
|
|
48
|
+
});
|
|
49
|
+
const buildJobStatusMessage = (input) => JSON.stringify({
|
|
50
|
+
p: HOL_CHAT_PROTOCOL_ID,
|
|
51
|
+
op: "job_status",
|
|
52
|
+
request_id: input.requestId,
|
|
53
|
+
data: { job_id: input.jobId }
|
|
54
|
+
});
|
|
55
|
+
export {
|
|
56
|
+
HOL_CHAT_PROTOCOL_ID,
|
|
57
|
+
buildJobStatusMessage,
|
|
58
|
+
buildPaymentApproveMessage,
|
|
59
|
+
buildPaymentDeclineMessage,
|
|
60
|
+
isHolChatOp,
|
|
61
|
+
parseHolChatOps
|
|
249
62
|
};
|
|
250
63
|
//# sourceMappingURL=standards-sdk.es131.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es131.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 { RegistryBrokerClient } from './base-client';\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\ndeclare module './base-client' {\n interface RegistryBrokerClient {\n resolveUaid(uaid: string): Promise<ResolvedAgentResponse>;\n registerAgent(\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n ): Promise<RegisterAgentResponse>;\n getRegistrationQuote(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentQuoteResponse>;\n updateAgent(\n uaid: string,\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse>;\n getRegistrationProgress(\n attemptId: string,\n ): Promise<RegistrationProgressRecord | null>;\n waitForRegistrationCompletion(\n attemptId: string,\n options?: RegistrationProgressWaitOptions,\n ): Promise<RegistrationProgressRecord>;\n validateUaid(uaid: string): Promise<UaidValidationResponse>;\n getUaidConnectionStatus(uaid: string): Promise<UaidConnectionStatus>;\n closeUaidConnection(uaid: string): Promise<void>;\n dashboardStats(): Promise<DashboardStatsResponse>;\n }\n}\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 client.getRegistrationQuote(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 client.purchaseCreditsWithHbar({\n accountId: details.accountId.trim(),\n privateKey: details.privateKey.trim(),\n hbarAmount,\n memo: details.memo ?? 'Registry Broker auto top-up',\n metadata: {\n shortfallCredits: shortfall,\n requiredCredits: quote.requiredCredits,\n purchasedCredits: creditsToPurchase,\n },\n });\n }\n\n const finalQuote = await client.getRegistrationQuote(payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n}\n\nRegistryBrokerClient.prototype.resolveUaid = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<ResolvedAgentResponse> {\n const raw = await this.requestJson<JsonValue>(\n `/resolve/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n resolveResponseSchema,\n 'resolve UAID response',\n );\n};\n\nRegistryBrokerClient.prototype.registerAgent = async function (\n this: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? this.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return performRegisterAgent(this, payload);\n }\n\n await ensureCreditsForRegistration(this, payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await performRegisterAgent(this, payload);\n } catch (error) {\n const shortfall = this.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await ensureCreditsForRegistration(this, payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n};\n\nRegistryBrokerClient.prototype.getRegistrationQuote = async function (\n this: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentQuoteResponse> {\n const raw = await this.requestJson<JsonValue>('/register/quote', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n\n return this.parseWithSchema(\n raw,\n registrationQuoteResponseSchema,\n 'registration quote response',\n );\n};\n\nRegistryBrokerClient.prototype.updateAgent = async function (\n this: RegistryBrokerClient,\n uaid: string,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await this.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 this.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'update agent response',\n );\n};\n\nRegistryBrokerClient.prototype.getRegistrationProgress = async function (\n this: 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 this.requestJson<JsonValue>(\n `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,\n { method: 'GET' },\n );\n\n const parsed = this.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\nRegistryBrokerClient.prototype.waitForRegistrationCompletion = async function (\n this: 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 this.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 this.delay(interval, signal);\n }\n};\n\nRegistryBrokerClient.prototype.validateUaid = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidValidationResponse> {\n const raw = await this.requestJson<JsonValue>(\n `/uaids/validate/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n uaidValidationResponseSchema,\n 'UAID validation response',\n );\n};\n\nRegistryBrokerClient.prototype.getUaidConnectionStatus = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidConnectionStatus> {\n const raw = await this.requestJson<JsonValue>(\n `/uaids/connections/${encodeURIComponent(uaid)}/status`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n uaidConnectionStatusSchema,\n 'UAID connection status',\n );\n};\n\nRegistryBrokerClient.prototype.closeUaidConnection = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<void> {\n await this.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {\n method: 'DELETE',\n });\n};\n\nRegistryBrokerClient.prototype.dashboardStats = async function (\n this: RegistryBrokerClient,\n): Promise<DashboardStatsResponse> {\n const raw = await this.requestJson<JsonValue>('/dashboard/stats', {\n method: 'GET',\n });\n return this.parseWithSchema(\n raw,\n dashboardStatsResponseSchema,\n 'dashboard stats response',\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es131.js","sources":["../../src/services/registry-broker/hol-chat-ops.ts"],"sourcesContent":["export const HOL_CHAT_PROTOCOL_ID = 'hol-chat' as const;\n\nexport type HolChatOpName =\n | 'payment_request'\n | 'payment_approve'\n | 'payment_decline'\n | 'payment_result'\n | 'job_status';\n\nexport interface HolChatOpBase {\n p: typeof HOL_CHAT_PROTOCOL_ID;\n op: HolChatOpName;\n request_id: string;\n m?: string;\n data?: Record<string, unknown>;\n}\n\nexport type HolChatOp = HolChatOpBase;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n\nexport const isHolChatOp = (value: unknown): value is HolChatOp => {\n if (!isRecord(value)) {\n return false;\n }\n if (value.p !== HOL_CHAT_PROTOCOL_ID) {\n return false;\n }\n if (\n typeof value.request_id !== 'string' ||\n value.request_id.trim().length === 0\n ) {\n return false;\n }\n const op = value.op;\n if (\n op !== 'payment_request' &&\n op !== 'payment_approve' &&\n op !== 'payment_decline' &&\n op !== 'payment_result' &&\n op !== 'job_status'\n ) {\n return false;\n }\n return true;\n};\n\nexport const parseHolChatOps = (ops: unknown): HolChatOp[] => {\n if (!Array.isArray(ops)) {\n return [];\n }\n return ops.filter(isHolChatOp).map(op => {\n const next: HolChatOp = {\n p: HOL_CHAT_PROTOCOL_ID,\n op: op.op,\n request_id: op.request_id.trim(),\n };\n if (typeof op.m === 'string' && op.m.trim().length > 0) {\n next.m = op.m.trim();\n }\n if (isRecord(op.data)) {\n next.data = { ...op.data };\n }\n return next;\n });\n};\n\nexport const buildPaymentApproveMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_approve',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n\nexport const buildPaymentDeclineMessage = (input: {\n requestId: string;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_decline',\n request_id: input.requestId,\n });\n\nexport const buildJobStatusMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'job_status',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n"],"names":[],"mappings":"AAAO,MAAM,uBAAuB;AAmBpC,MAAM,WAAW,CAAC,UAChB,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAE9D,MAAM,cAAc,CAAC,UAAuC;AACjE,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,MAAM,sBAAsB;AACpC,WAAO;AAAA,EACT;AACA,MACE,OAAO,MAAM,eAAe,YAC5B,MAAM,WAAW,KAAA,EAAO,WAAW,GACnC;AACA,WAAO;AAAA,EACT;AACA,QAAM,KAAK,MAAM;AACjB,MACE,OAAO,qBACP,OAAO,qBACP,OAAO,qBACP,OAAO,oBACP,OAAO,cACP;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,kBAAkB,CAAC,QAA8B;AAC5D,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,WAAO,CAAA;AAAA,EACT;AACA,SAAO,IAAI,OAAO,WAAW,EAAE,IAAI,CAAA,OAAM;AACvC,UAAM,OAAkB;AAAA,MACtB,GAAG;AAAA,MACH,IAAI,GAAG;AAAA,MACP,YAAY,GAAG,WAAW,KAAA;AAAA,IAAK;AAEjC,QAAI,OAAO,GAAG,MAAM,YAAY,GAAG,EAAE,KAAA,EAAO,SAAS,GAAG;AACtD,WAAK,IAAI,GAAG,EAAE,KAAA;AAAA,IAChB;AACA,QAAI,SAAS,GAAG,IAAI,GAAG;AACrB,WAAK,OAAO,EAAE,GAAG,GAAG,KAAA;AAAA,IACtB;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,MAAM,6BAA6B,CAAC,UAIzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;AAEI,MAAM,6BAA6B,CAAC,UAGzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AACpB,CAAC;AAEI,MAAM,wBAAwB,CAAC,UAIpC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;"}
|