@hsuite/smart-engines-sdk 3.4.1 → 3.6.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,64 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.0 — 2026-06-01
4
+
5
+ **100% prod-ready arc.** Final cleanup pass after the 3.4.x publication. Closes every finding from two rounds of adversarial verification: legacy/dead-API code removed, BaaS dual-transport collapsed onto the shared HttpClient, path-traversal exposure closed via `encodePathParam` repo-wide, typed signer surfaces narrowed off `any`, test coverage taken from 62% → 90% statements / 49% → 81% branches / 64% → 85% functions / 63% → 91% lines, README + compodoc shipped, and one phantom test spec (615 lines that never imported the class it claimed to test) replaced with 43 real tests.
6
+
7
+ Shipped as 4 parallel PRs (#1032 docs/compodoc, #1033 legacy cleanup, #1034 arch+security, #1036 test coverage).
8
+
9
+ ### Breaking changes (typed-surface only; runtime preserved)
10
+
11
+ - **`BaasClientConfig.http` removed.** Field was typed as `ResilientHttpConfig` and accepted "for backward compatibility / future resilience layer integration" but was never wired at runtime — public users passing it got silently ignored. Removing the inert type closes the discrepancy. Callers passing `new BaasClient({ http: {} })` now get a TS2353 excess-property error; runtime behaviour unchanged. (#1033)
12
+ - **`SmartEngineClientConfig.http` removed.** Same pattern as above. (#1033)
13
+ - **`TokensClient.getDetails(chain, tokenId)` deleted.** Method was shadowed at the Nest route layer (`ValidatorController` won registration order vs `TokenMigrationController`) and never reached its declared handler. JSDoc itself said "prefer `client.getTokenInfo(...)` instead". Shipping a public method for a 404-shadowed endpoint = dead-on-arrival. (#1033)
14
+ - **`HederaTransactionsClient` constructor now requires `tssHttp`.** The previous `tssHttp ?? http` fallback was dead in this repo (single call site always passed both args). External callers passing one arg now get "Expected 2 arguments, but got 1". (#1033)
15
+ - **`signChallengeXRPL(wallet: XrplSigner)` narrowed**, was `wallet: any`. `XrplSigner.sign(message: string): string | { signedTransaction: string }`. Callers passing a hand-rolled `{ sign: () => Uint8Array }` no longer compile — the runtime never handled Uint8Array. (#1034)
16
+ - **`signChallengeHedera(privateKey: HederaSigner)` narrowed**, was `privateKey: any`. Structural type matches `@hashgraph/sdk`'s PrivateKey shape without importing the peer dep. (#1034)
17
+
18
+ ### Security
19
+
20
+ - **Path-traversal exposure closed**: replaced raw `encodeURIComponent` with the `%2F`-stripping `encodePathParam` helper across ~135 sites (collection IDs, document IDs, agent IDs, function IDs, DAO IDs, etc.). Regression test in `__tests__/path-traversal.spec.ts` feeds `'../../../etc/passwd'` style inputs and asserts the resulting URL stays sandboxed. (#1034)
21
+
22
+ ### Refactor
23
+
24
+ - **`BaasClient` dual transport collapsed.** Top-level `BaasClient.<method>` calls (e.g., `authenticate`) used a private fetch-based `request/get/post` infra; sub-clients used the shared `HttpClient`. Now everything goes through the shared client. Auth token state moved from `this.authToken` onto `HttpClient` via the new typed `setAuthToken/getAuthToken` accessors. Every `(this.http as any).authToken` peek across the SDK removed. (#1034)
25
+ - **`connectToCluster` bootstrap-resolution DRY'd.** ~25 lines of identical scaffolding between `SmartEngineClient.connectToCluster` and `BaasClient.connectToCluster` extracted to `discovery/resolve-cluster.ts`'s `resolveClusterEndpoint`. (#1034)
26
+ - `StorageClient.getFile` `@deprecated` JSDoc now pins removal to **4.0.0**. Forwards to `download(cid)` until then. (#1033)
27
+ - `SupportedChain` alias inlined to direct `ChainType` use. (#1033)
28
+ - `ValidatorDiscoveryClient` JSDoc no longer calls itself "legacy" — it's the intentional HCS-direct discovery fallback. (#1033)
29
+
30
+ ### Tests
31
+
32
+ - **Phantom `validator-auth.spec.ts` replaced**: the original 615 lines tested `new URL(...)` against the stdlib and never imported `ValidatorAuthClient`. Production was at 2.97% line coverage. Replaced with 43 real tests covering every public method + `ValidatorAuthError` + every failure path. (#1036)
33
+ - Added specs for `chains/{hedera,polkadot,solana,xrpl}.ts` (0% → 100%), `discovery/{mirror-node,validator-discovery}` (11-18% → 95%+), `nestjs/smart-engine.service` (30% → 100%), `_vendor/{retry,rate-limiter,errors-and-breaker,network-types}` (9-55% → 100%), gateway sub-clients, residual `client.ts` token/cluster/monitoring branches. (#1036)
34
+ - `jest.config.js` `**/index.ts` blanket exclusion replaced with a narrow allowlist of true barrel files — sub-client implementations in `index.ts` now count toward coverage. (#1036)
35
+
36
+ **Coverage gate (CLAUDE.md ≥80% bar):**
37
+
38
+ | Axis | 3.4.1 | 3.5.0 |
39
+ |------|-------|-------|
40
+ | Statements | 62.17% | **89.95%** |
41
+ | Branches | 49.51% | **81.33%** |
42
+ | Functions | 64.12% | **85.10%** |
43
+ | Lines | 62.63% | **91.39%** |
44
+
45
+ Test count: 637 → **1037** (+400).
46
+
47
+ ### Docs
48
+
49
+ - **README rewritten** for the 3.4.x+ surface: leads with `BaasClient.connectToCluster({ network: 'testnet' })` as the canonical entrypoint, sub-clients table enumerates every public field on `SmartEngineClient` + `BaasClient`, bundle section refreshed off the actual 3.5.0 figures. Stale 3.0.0 / 3.2.0 references gone. (#1032)
50
+ - **Compodoc wired**: `yarn workspace @hsuite/smart-engines-sdk docs` now generates `dist/docs/` against the repo-root `.compodocrc.json`. (#1032)
51
+ - **Stale `hsuite-smart-engines-sdk-3.2.0.tgz` deleted** from the package source. (#1032)
52
+ - Package-level `@example` in `src/index.ts` rewritten to lead with `connectToCluster`. (#1032)
53
+ - `@example` blocks added to `BridgeClient` / `EnvelopeClient` / `OperatorClient` / `ResourcesClient` / `HederaTssClient` / `DiscoveryClient`. (#1032)
54
+
55
+ ### Verified
56
+
57
+ - `yarn jest`: 67 suites, 1037 passing + 1 skipped = 1038 total, 0 failures.
58
+ - `yarn build:tsc`: clean.
59
+ - `yarn build`: all 6 subpath dist artifacts produced cleanly.
60
+ - `yarn workspace @hsuite/smart-engines-sdk docs`: compodoc generates `dist/docs/` cleanly.
61
+
3
62
  ## 3.4.1 — 2026-06-01
4
63
 
5
64
  **Patch release** restoring 3 subpath exports that the 3.4.0 publish dropped despite being present in source:
package/README.md CHANGED
@@ -21,9 +21,14 @@ npm install zod # peer (likely transitive in your app already)
21
21
 
22
22
  ---
23
23
 
24
- ## Quick start — Web3 auth + register a smart-app
24
+ ## Quick start — `connectToCluster`
25
25
 
26
- The canonical smart-app bootstrap flow:
26
+ `connectToCluster` is the canonical entrypoint: it auto-discovers an active
27
+ cluster via the service registry, picks one at random, runs Web3 auth, and
28
+ hands back a wired client. Zero hand-rolled URLs, zero validator pinning,
29
+ permissionless cluster join/leave is invisible to the SDK caller.
30
+
31
+ ### BaaS (smart-app primary path)
27
32
 
28
33
  ```ts
29
34
  import { BaasClient } from '@hsuite/smart-engines-sdk';
@@ -33,15 +38,12 @@ import { sign as xrplSign } from 'ripple-keypairs';
33
38
  // 1. Your XRPL wallet (real production: load XRPL_SEED from env / secret store)
34
39
  const wallet = Wallet.fromSeed(process.env.XRPL_SEED!);
35
40
 
36
- // 2. Construct the BaaS client
37
- const baas = new BaasClient({
38
- hostUrl: 'https://v3-testnet-gateway.hsuite.network',
39
- appId: 'pending', // will be replaced after register()
40
- pathPrefix: '/host', // gateway routes /host/* → smart-host
41
+ // 2. Connect to the network (zero-config — testnet | mainnet)
42
+ const baas = await BaasClient.connectToCluster({
43
+ network: 'testnet',
41
44
  });
42
45
 
43
- // 3. Authenticate via Web3 challenge-response
44
- // Cluster verifies with ripple-keypairs.verify(messageHex.toUpperCase(), signature, publicKey)
46
+ // 3. Web3 auth (challenge-response over the discovered cluster's gateway)
45
47
  await baas.authenticate({
46
48
  chain: 'xrpl',
47
49
  walletAddress: wallet.address,
@@ -72,6 +74,24 @@ baas.setAppId(init.appId);
72
74
  // (deploy) await baas.deployment.deploy(init.appId, { tag: 'v1', replicas: 1 });
73
75
  ```
74
76
 
77
+ ### SmartEngineClient (direct chain operations)
78
+
79
+ ```ts
80
+ import { SmartEngineClient } from '@hsuite/smart-engines-sdk';
81
+
82
+ const { client, cluster, session } = await SmartEngineClient.connectToCluster({
83
+ network: 'testnet', // resolves canonical gateway entrypoint
84
+ chain: 'xrpl',
85
+ address: wallet.address,
86
+ publicKey: wallet.publicKey,
87
+ signFn: (challenge) => /* sign the challenge */ '',
88
+ });
89
+
90
+ // All sub-clients are wired against the discovered cluster
91
+ await client.tss.signMPC({ chain: 'hedera', entityId: '...', transactionBytes: '0x...' });
92
+ await client.ipfs.upload(file, 'document.pdf');
93
+ ```
94
+
75
95
  **Why XRPL?** Per the Smart Engines V3 architecture, XRPL is canonical for
76
96
  smart-app authentication and registration. The cluster's validator/host pods
77
97
  pay their own HCS fees from pod-local operator accounts; smart-apps never
@@ -81,22 +101,90 @@ from the dev wallet used to authenticate.
81
101
 
82
102
  **Faster bootstrap?** Use the [`@hsuite/smart-engines-cli`](https://www.npmjs.com/package/@hsuite/smart-engines-cli) — `hsuite init` generates a fresh XRPL wallet + funds it via the testnet faucet + writes `.env.local`, then `hsuite subscribe` registers the smart-app in one command.
83
103
 
104
+ ### Manual override — pin a host directly
105
+
106
+ If you need to point the SDK at a specific gateway / host (private deployment,
107
+ local k3d cluster, conformance harness), bypass discovery and pass a URL:
108
+
109
+ ```ts
110
+ import { BaasClient, SmartEngineClient } from '@hsuite/smart-engines-sdk';
111
+
112
+ const baas = new BaasClient({
113
+ hostUrl: 'https://v3-testnet-gateway.hsuite.network',
114
+ appId: 'pending',
115
+ pathPrefix: '/host', // gateway routes /host/* → smart-host
116
+ });
117
+
118
+ const client = new SmartEngineClient({
119
+ baseUrl: 'https://v3-testnet-gateway.hsuite.network',
120
+ authToken: '<jwt-from-validator-auth-verify>',
121
+ });
122
+ ```
123
+
124
+ You can also pass `bootstrap: string[]` to `connectToCluster` for explicit
125
+ seed lists (private deployments).
126
+
84
127
  ---
85
128
 
86
129
  ## Available clients
87
130
 
131
+ The root `SmartEngineClient` exposes every sub-client below — each maps 1:1
132
+ to a server-side controller. `BaasClient` mirrors the host/BaaS surface.
133
+
134
+ ### Top-level clients
135
+
88
136
  | Client | Purpose |
89
137
  |---|---|
90
- | `BaasClient` | Authentication + database + storage + functions + messaging + deployment + agents |
91
- | `baas.rules.*` | Publish / get / list / simulate / deprecate canonical `ValidatorRules` documents on HCS |
92
- | `baas.entities.*` | Create canonical token / account / topic / agent entities (plus launchpad mega-helper), each bound to a published `ruleRef` |
93
- | `SmartEngineClient` | Chain operations: account create, token create / mint / burn / freeze / wipe, transfers, HCS topics, TSS, IPFS |
138
+ | `BaasClient` | Authentication + database + storage + functions + messaging + deployment + agents + rules + entities |
139
+ | `SmartEngineClient` | Chain operations + every typed sub-client below |
94
140
  | `SmartGatewayClient` | Gateway operations: routing, domains, DNS |
95
141
  | `ValidatorAuthClient` | Standalone Web3 challenge-response auth (lower-level than `BaasClient.authenticate`) |
96
- | `ValidatorDiscoveryClient` | HCS-registry-based validator discovery |
97
- | `TSSClient`, `IPFSClient`, `TransactionsClient`, `SettlementClient`, `SnapshotsClient` | Direct sub-client access for advanced flows |
142
+ | `ClusterDiscoveryClient` | Bootstrap-seed → active-cluster discovery (powers `connectToCluster`) |
143
+ | `ValidatorDiscoveryClient` | HCS-registry-based validator discovery (legacy `connectToNetwork` path) |
98
144
  | `MirrorNodeClient` | Hedera mirror-node helper (when your app does Hedera-side queries) |
99
145
 
146
+ ### `client.*` sub-clients on `SmartEngineClient`
147
+
148
+ | Field | Purpose |
149
+ |---|---|
150
+ | `client.subscription` | Application subscription management |
151
+ | `client.tss` | Threshold Signature Scheme — chain-agnostic MPC operations |
152
+ | `client.ipfs` | IPFS decentralized file storage |
153
+ | `client.transactions` | Chain-agnostic prepare-sign-submit (transaction sovereignty) |
154
+ | `client.hedera` | Hedera-specific transaction preparation (HCS topics, KYC, wipe) |
155
+ | `client.hedera.tss` | Hedera TSS immediate-execute (cluster signs + submits in one call) |
156
+ | `client.xrpl` | XRPL-specific transaction preparation (trust lines) |
157
+ | `client.solana` | Solana-specific transaction preparation (close-account) |
158
+ | `client.polkadot` | Polkadot-specific transaction preparation (asset setTeam/setMetadata) |
159
+ | `client.snapshots` | Token holder snapshot generation and retrieval |
160
+ | `client.historicalBalance` | Historical balance archive reads |
161
+ | `client.settlement` | Cross-chain settlement operations |
162
+ | `client.governance` | Governance proposal dry-run (simulate-only) |
163
+ | `client.dao` | DAO governance — DAOs, proposals, votes, treasury, members, dashboard |
164
+ | `client.personhood` | Personhood verification (HPP one-human-one-member) |
165
+ | `client.agents` | BaaS smart-agent lifecycle (register/fund/trade/withdraw/pause/resume/revoke) |
166
+ | `client.deployments` | BaaS smart-app deployment lifecycle (init/uploadFrontend/deploy/rollback/status) |
167
+ | `client.bridge` | Universal Token Bridge — port/return/claim across chains |
168
+ | `client.resources` | Network + per-app resource consumption (summary, history, ledger, nodes) |
169
+ | `client.envelope` | AES-256-GCM envelope encrypt/decrypt under the TSS-backed master KEK |
170
+ | `client.tokens` | Token migration — move existing tokens to TSS-controlled keys |
171
+ | `client.operator` | Operator account funding helpers (balance + top-up guidance) |
172
+ | `client.discovery` | Discovery — cluster registry + `client.discovery.platformImages` manifests |
173
+
174
+ ### `baas.*` sub-clients on `BaasClient`
175
+
176
+ | Field | Purpose |
177
+ |---|---|
178
+ | `baas.db` | Trustless database with state proofs and Merkle verification |
179
+ | `baas.storage` | Decentralized file storage |
180
+ | `baas.functions` | Serverless function deployment and invocation |
181
+ | `baas.messaging` | Real-time pub/sub messaging with channels, history, presence |
182
+ | `baas.deployment` | App deployment lifecycle (init/uploadFrontend/deploy/rollback/...) |
183
+ | `baas.agents` | Autonomous smart-agent management |
184
+ | `baas.customerSession` | Customer→smart-app session bridge (TokenGate Face B) |
185
+ | `baas.rules` | Publish / get / list / simulate / deprecate canonical `ValidatorRules` documents on HCS |
186
+ | `baas.entities` | Create canonical token / account / topic / agent entities (plus launchpad mega-helper), each bound to a published `ruleRef` |
187
+
100
188
  All clients accept the same `pathPrefix: '/host'` option when consumed via
101
189
  the cluster gateway. Set `pathPrefix: ''` for direct host access.
102
190
 
@@ -268,15 +356,18 @@ await baas.deployment.rollback(init.appId, { toTag: 'v0' });
268
356
  ## Chain operations via `SmartEngineClient`
269
357
 
270
358
  For direct chain operations independent of BaaS — e.g., a custodial backend
271
- that creates accounts and tokens on behalf of users:
359
+ that creates accounts and tokens on behalf of users — use the methods on the
360
+ `SmartEngineClient` returned by `connectToCluster`:
272
361
 
273
362
  ```ts
274
363
  import { SmartEngineClient } from '@hsuite/smart-engines-sdk';
275
364
 
276
- const client = new SmartEngineClient({
277
- baseUrl: 'https://v3-testnet-gateway.hsuite.network',
278
- // Auth via authToken (set after the Web3 challenge flow):
279
- authToken: '<jwt-from-validator-auth-verify>',
365
+ const { client } = await SmartEngineClient.connectToCluster({
366
+ network: 'testnet',
367
+ chain: 'xrpl',
368
+ address: wallet.address,
369
+ publicKey: wallet.publicKey,
370
+ signFn: async (challenge) => /* sign challenge */ '',
280
371
  });
281
372
 
282
373
  // Create an account on any supported chain
@@ -405,17 +496,23 @@ try {
405
496
 
406
497
  ## Bundle
407
498
 
408
- The SDK is a single 134 KB CJS bundle with workspace-only primitives
409
- vendored in. Single-file `.d.ts` (84 KB) for full type ergonomics.
499
+ The SDK ships as a single CJS bundle with workspace-only primitives
500
+ vendored in, plus subpath exports for the optional NestJS integration and
501
+ the customer-facing PQC verifiers. Build artifacts live under `dist/`:
410
502
 
411
503
  ```
412
- @hsuite/smart-engines-sdk@3.0.0
413
- dist/index.js 134 KB main bundle
414
- dist/index.d.ts 84 KB types
415
- dist/nestjs/index.js 104 KB NestJS integration
416
- dist/nestjs/index.d.ts 64 KB
504
+ dist/index.{js,d.ts} — main bundle + types
505
+ dist/nestjs/index.{js,d.ts} NestJS integration (optional)
506
+ dist/pqc-verify/index.{js,d.ts} PQC attestation verifier
507
+ dist/pqc-verify-envelope/index.{js,d.ts}PQC envelope verifier
508
+ dist/ipfs-access-key/index.{js,d.ts} — IPFS access-key helper
509
+ dist/k8s-secret-reader/index.{js,d.ts} — k8s secret reader (NestJS)
417
510
  ```
418
511
 
512
+ The PQC and k8s-secret-reader entries are subpath exports — import from
513
+ `@hsuite/smart-engines-sdk/pqc-verify` etc. so callers that don't need
514
+ `@noble/post-quantum` (~120 KB compressed) don't pull it in.
515
+
419
516
  ---
420
517
 
421
518
  ## License
package/dist/index.d.ts CHANGED
@@ -1866,12 +1866,15 @@ export type HttpClient = {
1866
1866
  delete<T = any>(path: string): Promise<T>;
1867
1867
  getText(path: string): Promise<string>;
1868
1868
  upload<T = any>(path: string, file: Blob | Buffer, filename: string, metadata?: Record<string, string>, fieldName?: string): Promise<T>;
1869
+ setAuthToken(token: string | undefined): void;
1870
+ getAuthToken(): string | undefined;
1869
1871
  };
1870
1872
  export type HttpClientConfig = {
1871
1873
  baseUrl: string;
1872
1874
  authToken?: string;
1873
1875
  apiKey?: string;
1874
1876
  timeout?: number;
1877
+ onUnauthorized?: () => Promise<void>;
1875
1878
  };
1876
1879
  export declare class SdkHttpError extends Error {
1877
1880
  readonly statusCode: number;
@@ -1958,10 +1961,49 @@ export declare class PlatformImagesClient {
1958
1961
  }>;
1959
1962
  verify(imageName: string, version: string, digest: string): Promise<DiscoveryVerifyResult>;
1960
1963
  }
1964
+ export type NetworkName = "testnet" | "mainnet";
1965
+ export interface NetworkPreset {
1966
+ readonly bootstrap: readonly string[];
1967
+ }
1968
+ export declare const KNOWN_NETWORKS: Readonly<Record<NetworkName, NetworkPreset>>;
1969
+ export declare function resolveNetwork(name: NetworkName): NetworkPreset;
1970
+ export declare function isKnownNetwork(name: string): name is NetworkName;
1971
+ export type ResolveClusterSeed = {
1972
+ bootstrap?: string[];
1973
+ network?: NetworkName;
1974
+ };
1975
+ export type ResolveClusterTrustAnchor = {
1976
+ network: "mainnet" | "testnet" | "previewnet";
1977
+ registryTopicId: string;
1978
+ mirrorNodeUrl?: string;
1979
+ };
1980
+ export type ResolveClusterConfig = ResolveClusterSeed & {
1981
+ allowInsecure?: boolean;
1982
+ trustAnchor?: ResolveClusterTrustAnchor;
1983
+ };
1984
+ export type ResolveClusterFailure = "no-seeds" | "no-clusters";
1985
+ export type ResolveClusterResult = {
1986
+ ok: true;
1987
+ cluster: ClusterInfo;
1988
+ } | {
1989
+ ok: false;
1990
+ reason: ResolveClusterFailure;
1991
+ };
1992
+ declare function resolveClusterEndpoint(config: ResolveClusterConfig): Promise<ResolveClusterResult>;
1961
1993
  export type AuthChain = "hedera" | "xrpl" | "polkadot" | "stellar" | "solana";
1962
1994
  export interface SecurityConfig {
1963
1995
  allowInsecure?: boolean;
1964
1996
  }
1997
+ export type HederaSigner = {
1998
+ sign(message: Uint8Array): Uint8Array | Buffer | {
1999
+ toBytes(): Uint8Array;
2000
+ };
2001
+ };
2002
+ export type XrplSigner = {
2003
+ sign(message: string): string | {
2004
+ signedTransaction: string;
2005
+ };
2006
+ };
1965
2007
  export interface ChallengeResponse {
1966
2008
  success: boolean;
1967
2009
  challenge: string;
@@ -2009,8 +2051,8 @@ export declare class ValidatorAuthClient {
2009
2051
  requestChallenge(validatorUrl: string, chain: AuthChain, address: string): Promise<ChallengeResponse>;
2010
2052
  authenticate(validatorUrl: string, request: AuthenticateRequest): Promise<AuthenticateResponse>;
2011
2053
  getSession(validatorUrl: string, token: string): Promise<SessionInfo>;
2012
- signChallengeHedera(challenge: string, privateKey: any): string;
2013
- signChallengeXRPL(challenge: string, wallet: any): string;
2054
+ signChallengeHedera(challenge: string, privateKey: HederaSigner): string;
2055
+ signChallengeXRPL(challenge: string, wallet: XrplSigner): string;
2014
2056
  authenticateWithSigner(validatorUrl: string, chain: AuthChain, address: string, publicKey: string, signFn: (challenge: string) => string | Promise<string>, metadata?: AuthenticateRequest["metadata"]): Promise<AuthenticateResponse>;
2015
2057
  }
2016
2058
  export declare class ValidatorAuthError extends Error {
@@ -2026,33 +2068,6 @@ export type Web3Signer = {
2026
2068
  wallet: Wallet;
2027
2069
  };
2028
2070
  export declare function createXrplWeb3Signer(seed: string): Web3Signer;
2029
- interface RetryConfig$1 {
2030
- maxRetries: number;
2031
- initialDelayMs: number;
2032
- maxDelayMs: number;
2033
- backoffMultiplier: number;
2034
- jitterFactor?: number;
2035
- }
2036
- export declare const DEFAULT_RETRY_CONFIG: RetryConfig$1;
2037
- export interface ResilientHttpConfig {
2038
- timeoutMs?: number;
2039
- retry?: Partial<RetryConfig$1>;
2040
- circuitBreaker?: Partial<CircuitBreakerConfig> | false;
2041
- onRetry?: (attempt: number, delay: number, status?: number) => void;
2042
- onCircuitBreakerStateChange?: (state: "closed" | "open" | "half_open") => void;
2043
- }
2044
- export declare function resilientFetch(url: string, init?: RequestInit, config?: ResilientHttpConfig): Promise<Response>;
2045
- export declare function createResilientFetchWithBreaker(config?: ResilientHttpConfig): {
2046
- fetch: (url: string, init?: RequestInit) => Promise<Response>;
2047
- getCircuitBreakerSnapshot: () => CircuitBreakerSnapshot | null;
2048
- };
2049
- export type NetworkName = "testnet" | "mainnet";
2050
- export interface NetworkPreset {
2051
- readonly bootstrap: readonly string[];
2052
- }
2053
- export declare const KNOWN_NETWORKS: Readonly<Record<NetworkName, NetworkPreset>>;
2054
- export declare function resolveNetwork(name: NetworkName): NetworkPreset;
2055
- export declare function isKnownNetwork(name: string): name is NetworkName;
2056
2071
  export type SubscriptionTierName = "free_testnet" | "starter" | "professional" | "enterprise";
2057
2072
  export type SubscriptionStatus = "pending_deposit" | "deposit_confirmed" | "active" | "expired" | "cancelled";
2058
2073
  export type DepositWalletStatus = "pending" | "locked" | "expired" | "slashed" | "released";
@@ -2104,6 +2119,13 @@ export type SubscriptionStatusResponse = {
2104
2119
  lockedUntil?: string;
2105
2120
  };
2106
2121
  subscriptionNftSerial?: number;
2122
+ chainNfts?: {
2123
+ xrpl?: {
2124
+ nftId?: string;
2125
+ issuerAddress?: string;
2126
+ offerTxId?: string;
2127
+ };
2128
+ } & Record<string, unknown>;
2107
2129
  expiresAt?: string;
2108
2130
  remainingBalance?: string;
2109
2131
  createdAt?: string;
@@ -2290,6 +2312,48 @@ export declare class SubscriptionClient {
2290
2312
  getBilling(appId: string, options?: GetBillingOptions): Promise<SubscriptionBillingResponse>;
2291
2313
  mintCustomer(request: MintCustomerSubscriptionRequest): Promise<MintCustomerSubscriptionResponse>;
2292
2314
  }
2315
+ export type FaucetChallenge = {
2316
+ challengeId: string;
2317
+ message: string;
2318
+ expiresInSeconds: number;
2319
+ };
2320
+ export type FaucetDispenseRequest = {
2321
+ chain: string;
2322
+ recipientAddress: string;
2323
+ challengeId: string;
2324
+ signature: string;
2325
+ publicKey?: string;
2326
+ };
2327
+ export type FaucetDispensed = {
2328
+ status: "dispensed";
2329
+ amount: string;
2330
+ txHash: string;
2331
+ remainingDailyAllowance: string;
2332
+ };
2333
+ export type FaucetTrustlineRequired = {
2334
+ status: "trustline_required";
2335
+ trustLine: {
2336
+ currency: string;
2337
+ issuer: string;
2338
+ limit: string;
2339
+ };
2340
+ };
2341
+ export type FaucetRateLimited = {
2342
+ status: "rate_limited";
2343
+ retryAfterSeconds: number;
2344
+ };
2345
+ export type FaucetDispenseResult = FaucetDispensed | FaucetTrustlineRequired | FaucetRateLimited;
2346
+ export type FaucetStatusResponse = {
2347
+ dispensedToday: string;
2348
+ [key: string]: unknown;
2349
+ };
2350
+ export declare class FaucetClient {
2351
+ private readonly http;
2352
+ constructor(http: HttpClient);
2353
+ requestChallenge(chain: string, recipientAddress: string): Promise<FaucetChallenge>;
2354
+ dispense(req: FaucetDispenseRequest): Promise<FaucetDispenseResult>;
2355
+ getStatus(chain: string, recipientAddress: string): Promise<FaucetStatusResponse>;
2356
+ }
2293
2357
  export type EntityType = "account" | "token" | "topic";
2294
2358
  export type EntityCreationOptions = {
2295
2359
  entityType: EntityType;
@@ -2890,7 +2954,7 @@ export type PrepareTokenWipeRequest = {
2890
2954
  export declare class HederaTransactionsClient {
2891
2955
  private readonly http;
2892
2956
  readonly tss: HederaTssClient;
2893
- constructor(http: HttpClient, tssHttp?: HttpClient);
2957
+ constructor(http: HttpClient, tssHttp: HttpClient);
2894
2958
  prepareTopicCreate(request: PrepareTopicCreateRequest): Promise<PreparedTransaction>;
2895
2959
  prepareTopicMessage(request: PrepareTopicMessageRequest): Promise<PreparedTransaction>;
2896
2960
  prepareTokenComplianceEnable(request: PrepareTokenComplianceEnableRequest): Promise<PreparedTransaction>;
@@ -3809,7 +3873,6 @@ export type BaasClientConfig = {
3809
3873
  services?: BaasService[];
3810
3874
  timeout?: number;
3811
3875
  allowInsecure?: boolean;
3812
- http?: ResilientHttpConfig;
3813
3876
  pathPrefix?: string;
3814
3877
  };
3815
3878
  export type BaasChallengeRequest = {
@@ -4076,6 +4139,7 @@ export type BaasDeployRequest = {
4076
4139
  tag: string;
4077
4140
  port?: number;
4078
4141
  replicas?: number;
4142
+ degree?: number;
4079
4143
  env?: Record<string, string>;
4080
4144
  resources?: {
4081
4145
  cpu?: string;
@@ -4423,18 +4487,6 @@ export type TokenMigrationsForTokenResponse = {
4423
4487
  migrations: TokenMigrationStatus[];
4424
4488
  count: number;
4425
4489
  };
4426
- export type TokenDetailsResponse = {
4427
- chain: string;
4428
- tokenId: string;
4429
- name?: string;
4430
- symbol?: string;
4431
- totalSupply?: string;
4432
- adminKey?: string | null;
4433
- supplyKey?: string | null;
4434
- tssControlled?: boolean;
4435
- entityId?: string;
4436
- message?: string;
4437
- };
4438
4490
  export declare class TokensClient {
4439
4491
  private readonly http;
4440
4492
  constructor(http: HttpClient);
@@ -4444,7 +4496,6 @@ export declare class TokensClient {
4444
4496
  error: string;
4445
4497
  }>;
4446
4498
  getMigrationsForToken(tokenId: string): Promise<TokenMigrationsForTokenResponse>;
4447
- getDetails(chain: string, tokenId: string): Promise<TokenDetailsResponse>;
4448
4499
  }
4449
4500
  export type OperatorChain = "hedera";
4450
4501
  export type OperatorTokenBalance = {
@@ -4479,7 +4530,6 @@ export interface SmartEngineClientConfig {
4479
4530
  authToken?: string;
4480
4531
  timeout?: number;
4481
4532
  allowInsecure?: boolean;
4482
- http?: ResilientHttpConfig;
4483
4533
  }
4484
4534
  export interface NetworkConnectionConfig {
4485
4535
  network: "mainnet" | "testnet" | "previewnet";
@@ -4536,6 +4586,7 @@ export declare class SmartEngineClient {
4536
4586
  private readonly txHttp;
4537
4587
  private lastHttpError?;
4538
4588
  readonly subscription: SubscriptionClient;
4589
+ readonly faucet: FaucetClient;
4539
4590
  readonly tss: TSSClient;
4540
4591
  readonly ipfs: IPFSClient;
4541
4592
  readonly transactions: TransactionsClient;
@@ -5131,6 +5182,26 @@ export declare class SmartGatewayClient {
5131
5182
  getMetrics(refresh?: boolean): Promise<GatewayMetricsResponse>;
5132
5183
  getMetricsSummary(): Promise<GatewayMetricsSummaryResponse>;
5133
5184
  }
5185
+ interface RetryConfig$1 {
5186
+ maxRetries: number;
5187
+ initialDelayMs: number;
5188
+ maxDelayMs: number;
5189
+ backoffMultiplier: number;
5190
+ jitterFactor?: number;
5191
+ }
5192
+ export declare const DEFAULT_RETRY_CONFIG: RetryConfig$1;
5193
+ export interface ResilientHttpConfig {
5194
+ timeoutMs?: number;
5195
+ retry?: Partial<RetryConfig$1>;
5196
+ circuitBreaker?: Partial<CircuitBreakerConfig> | false;
5197
+ onRetry?: (attempt: number, delay: number, status?: number) => void;
5198
+ onCircuitBreakerStateChange?: (state: "closed" | "open" | "half_open") => void;
5199
+ }
5200
+ export declare function resilientFetch(url: string, init?: RequestInit, config?: ResilientHttpConfig): Promise<Response>;
5201
+ export declare function createResilientFetchWithBreaker(config?: ResilientHttpConfig): {
5202
+ fetch: (url: string, init?: RequestInit) => Promise<Response>;
5203
+ getCircuitBreakerSnapshot: () => CircuitBreakerSnapshot | null;
5204
+ };
5134
5205
  declare function formatHederaAccountId(id: string): string;
5135
5206
  declare function parseHbar(amount: string): number;
5136
5207
  declare function hbarToTinybars(hbar: string | number): string;
@@ -5224,7 +5295,6 @@ export declare class StorageClient {
5224
5295
  delete(cid: string): Promise<{
5225
5296
  success: boolean;
5226
5297
  }>;
5227
- getFile(cid: string): Promise<BaasFileInfo>;
5228
5298
  listFiles(pagination?: {
5229
5299
  limit?: number;
5230
5300
  offset?: number;
@@ -25072,9 +25142,9 @@ export declare class BaasClient {
25072
25142
  private appId;
25073
25143
  private readonly timeout;
25074
25144
  private readonly allowInsecure;
25075
- private authToken;
25076
25145
  private readonly http;
25077
25146
  private lastHttpError?;
25147
+ private authContext?;
25078
25148
  readonly db: DatabaseClient;
25079
25149
  readonly storage: StorageClient;
25080
25150
  readonly functions: FunctionsClient;
@@ -25096,13 +25166,10 @@ export declare class BaasClient {
25096
25166
  };
25097
25167
  private requireAppId;
25098
25168
  authenticate(options: AuthenticateOptions): Promise<BaasAuthResult>;
25169
+ private reauthenticate;
25099
25170
  validateSession(): Promise<BaasSessionInfo>;
25100
25171
  logout(): Promise<void>;
25101
25172
  private requireAuth;
25102
- private getHeaders;
25103
- private post;
25104
- private get;
25105
- private request;
25106
25173
  }
25107
25174
  export declare class BaasError extends Error {
25108
25175
  readonly statusCode: number;
@@ -25202,7 +25269,7 @@ export type VerifyResult = {
25202
25269
  readonly thresholdMet?: boolean;
25203
25270
  };
25204
25271
  export declare function verifyPqcAttestation(cert: unknown, payload: unknown, registrySnapshot?: ValidatorRegistrySnapshot): Promise<VerifyResult>;
25205
- export type EnvelopeVersionLiteral = "kyber-aes-v1" | "aes-v0";
25272
+ export type EnvelopeVersionLiteral = "kyber-aes-v1";
25206
25273
  export type SchemaValidationResult = {
25207
25274
  ok: true;
25208
25275
  version: EnvelopeVersionLiteral;
@@ -25261,10 +25328,10 @@ declare namespace pqcVerifyEnvelope {
25261
25328
  export { EnvelopeVerificationResult, EnvelopeVersionLiteral, KYBER_MIN_TIMESTAMP_MS, SchemaValidationResult, VerificationDetails, VerifyEnvelopeOptions, validateEnvelopeSchema, verifyPqcEnvelope };
25262
25329
  }
25263
25330
  declare namespace discovery {
25264
- export { ClusterDiscoveryClient, ClusterDiscoveryConfig, ClusterEndpointsView, ClusterInfo, DiscoveryClient, DiscoveryClusterEndpoints, DiscoveryClusterRecord, DiscoveryNodeRecord, DiscoveryPlatformImageEnvelope, DiscoveryPlatformImageManifest, DiscoveryVerifyResult, MIRROR_NODE_URLS, MirrorNodeClient, MirrorNodeConfig, MirrorNodeError, PlatformImagesClient, TopicMessage, TopicMessagesResponse, ValidatorDiscoveryClient, ValidatorDiscoveryConfig, ValidatorInfo, ValidatorMetadata, ValidatorNetworkEndpoints };
25331
+ export { ClusterDiscoveryClient, ClusterDiscoveryConfig, ClusterEndpointsView, ClusterInfo, DiscoveryClient, DiscoveryClusterEndpoints, DiscoveryClusterRecord, DiscoveryNodeRecord, DiscoveryPlatformImageEnvelope, DiscoveryPlatformImageManifest, DiscoveryVerifyResult, MIRROR_NODE_URLS, MirrorNodeClient, MirrorNodeConfig, MirrorNodeError, PlatformImagesClient, ResolveClusterConfig, ResolveClusterFailure, ResolveClusterResult, ResolveClusterSeed, ResolveClusterTrustAnchor, TopicMessage, TopicMessagesResponse, ValidatorDiscoveryClient, ValidatorDiscoveryConfig, ValidatorInfo, ValidatorMetadata, ValidatorNetworkEndpoints, resolveClusterEndpoint };
25265
25332
  }
25266
25333
  declare namespace auth {
25267
- export { AuthChain, AuthenticateRequest, AuthenticateResponse, ChallengeResponse, SecurityConfig, SessionInfo, ValidatorAuthClient, ValidatorAuthConfig, ValidatorAuthError, Web3Signer, createXrplWeb3Signer };
25334
+ export { AuthChain, AuthenticateRequest, AuthenticateResponse, ChallengeResponse, HederaSigner, SecurityConfig, SessionInfo, ValidatorAuthClient, ValidatorAuthConfig, ValidatorAuthError, Web3Signer, XrplSigner, createXrplWeb3Signer };
25268
25335
  }
25269
25336
  declare namespace chains {
25270
25337
  export { bitcoin, hedera, polkadot, solana, stellar, xrpl };
@@ -25272,6 +25339,9 @@ declare namespace chains {
25272
25339
  declare namespace subscription {
25273
25340
  export { ActiveSubscriptionForWalletResponse, BalanceResponse, CancelTierChangeRequest, CancelTierChangeResponse, DepositWalletStatus, DowngradeSubscriptionRequest, DowngradeSubscriptionResponse, GetBillingOptions, MintCustomerSubscriptionRequest, MintCustomerSubscriptionResponse, MintNftResponse, PendingTierChange, SubscriptionBillingLedgerEntry, SubscriptionBillingResponse, SubscriptionClient, SubscriptionConfig, SubscriptionListResponse, SubscriptionRenewalRequest, SubscriptionRenewalResponse, SubscriptionRequest, SubscriptionResponse, SubscriptionStatus, SubscriptionStatusResponse, SubscriptionTierInfo, SubscriptionTierName, SubscriptionUsageStatusResponse, SubscriptionUsageSummaryResponse, UpgradeSubscriptionRequest, UpgradeSubscriptionResponse };
25274
25341
  }
25342
+ declare namespace faucet {
25343
+ export { FaucetChallenge, FaucetClient, FaucetDispenseRequest, FaucetDispenseResult, FaucetDispensed, FaucetRateLimited, FaucetStatusResponse, FaucetTrustlineRequired };
25344
+ }
25275
25345
  declare namespace bridge {
25276
25346
  export { BridgeChain, BridgeClaimRecord, BridgeClaimStatus, BridgeClient, BridgeConfig, BridgeDestinationConfig, BridgeDirection, BridgeGenesisBinding, BridgeMode, BridgeOperationConfig, BridgeRulesConfig, BridgeSourceConfig, BridgeStatus, BridgeSupply, BridgeTrustLevel, CreateBridgeRequest, CreateBridgeResponse, ListBridgesOptions, ListBridgesResponse, ListClaimsOptions, ListClaimsResponse, PortRequest, PortResult, ReturnRequest };
25277
25347
  }
@@ -25282,7 +25352,7 @@ declare namespace envelope {
25282
25352
  export { DecryptRequest, DecryptResponse, EncryptRequest, EncryptResponse, EncryptedEnvelope, EnvelopeClient };
25283
25353
  }
25284
25354
  declare namespace tokens {
25285
- export { ListMigrationsResponse, TokenDetailsResponse, TokenMigrationChain, TokenMigrationRequest, TokenMigrationResponse, TokenMigrationStatus, TokenMigrationStatusValue, TokenMigrationsForTokenResponse, TokensClient };
25355
+ export { ListMigrationsResponse, TokenMigrationChain, TokenMigrationRequest, TokenMigrationResponse, TokenMigrationStatus, TokenMigrationStatusValue, TokenMigrationsForTokenResponse, TokensClient };
25286
25356
  }
25287
25357
  declare namespace operator {
25288
25358
  export { OperatorBalanceResponse, OperatorChain, OperatorClient, OperatorTokenBalance, OperatorTopUpResponse };
@@ -25316,6 +25386,7 @@ export {
25316
25386
  dao,
25317
25387
  discovery,
25318
25388
  envelope,
25389
+ faucet,
25319
25390
  governance,
25320
25391
  operator,
25321
25392
  personhood,