@hsuite/native-connect-client 1.0.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/README.md +51 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-summary.json +10 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +161 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +161 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/src/handlers/index.html +146 -0
- package/coverage/lcov-report/src/handlers/session-handler.ts.html +223 -0
- package/coverage/lcov-report/src/handlers/signing-handler.ts.html +217 -0
- package/coverage/lcov-report/src/handlers/wallet-handler.ts.html +193 -0
- package/coverage/lcov-report/src/harness/index.html +116 -0
- package/coverage/lcov-report/src/harness/signing-harness.ts.html +352 -0
- package/coverage/lcov-report/src/index.html +146 -0
- package/coverage/lcov-report/src/memory-transport.ts.html +358 -0
- package/coverage/lcov-report/src/protocol/e2e-harness.ts.html +568 -0
- package/coverage/lcov-report/src/protocol/index.html +116 -0
- package/coverage/lcov-report/src/query-client.ts.html +277 -0
- package/coverage/lcov-report/src/reference-client.ts.html +691 -0
- package/coverage/lcov.info +981 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/handlers/index.html +146 -0
- package/coverage/src/handlers/session-handler.ts.html +223 -0
- package/coverage/src/handlers/signing-handler.ts.html +217 -0
- package/coverage/src/handlers/wallet-handler.ts.html +193 -0
- package/coverage/src/harness/index.html +116 -0
- package/coverage/src/harness/signing-harness.ts.html +352 -0
- package/coverage/src/index.html +146 -0
- package/coverage/src/memory-transport.ts.html +358 -0
- package/coverage/src/protocol/e2e-harness.ts.html +568 -0
- package/coverage/src/protocol/index.html +116 -0
- package/coverage/src/query-client.ts.html +277 -0
- package/coverage/src/reference-client.ts.html +691 -0
- package/dist/handlers/session-handler.d.ts +22 -0
- package/dist/handlers/session-handler.d.ts.map +1 -0
- package/dist/handlers/session-handler.js +41 -0
- package/dist/handlers/session-handler.js.map +1 -0
- package/dist/handlers/signing-handler.d.ts +22 -0
- package/dist/handlers/signing-handler.d.ts.map +1 -0
- package/dist/handlers/signing-handler.js +39 -0
- package/dist/handlers/signing-handler.js.map +1 -0
- package/dist/handlers/wallet-handler.d.ts +22 -0
- package/dist/handlers/wallet-handler.d.ts.map +1 -0
- package/dist/handlers/wallet-handler.js +32 -0
- package/dist/handlers/wallet-handler.js.map +1 -0
- package/dist/harness/signing-harness.d.ts +47 -0
- package/dist/harness/signing-harness.d.ts.map +1 -0
- package/dist/harness/signing-harness.js +79 -0
- package/dist/harness/signing-harness.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-transport-options.d.ts +27 -0
- package/dist/memory-transport-options.d.ts.map +1 -0
- package/dist/memory-transport-options.js +11 -0
- package/dist/memory-transport-options.js.map +1 -0
- package/dist/memory-transport.d.ts +55 -0
- package/dist/memory-transport.d.ts.map +1 -0
- package/dist/memory-transport.js +81 -0
- package/dist/memory-transport.js.map +1 -0
- package/dist/protocol/e2e-harness.d.ts +65 -0
- package/dist/protocol/e2e-harness.d.ts.map +1 -0
- package/dist/protocol/e2e-harness.js +130 -0
- package/dist/protocol/e2e-harness.js.map +1 -0
- package/dist/protocol/index.d.ts +22 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +22 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/query-client.d.ts +41 -0
- package/dist/query-client.d.ts.map +1 -0
- package/dist/query-client.js +52 -0
- package/dist/query-client.js.map +1 -0
- package/dist/reference-client.d.ts +100 -0
- package/dist/reference-client.d.ts.map +1 -0
- package/dist/reference-client.js +149 -0
- package/dist/reference-client.js.map +1 -0
- package/package.json +46 -0
- package/src/handlers/session-handler.ts +46 -0
- package/src/handlers/signing-handler.ts +44 -0
- package/src/handlers/wallet-handler.ts +36 -0
- package/src/harness/signing-harness.ts +89 -0
- package/src/index.ts +24 -0
- package/src/memory-transport-options.ts +28 -0
- package/src/memory-transport.ts +91 -0
- package/src/protocol/e2e-harness.ts +161 -0
- package/src/protocol/index.ts +23 -0
- package/src/query-client.ts +64 -0
- package/src/reference-client.spec.ts +408 -0
- package/src/reference-client.ts +202 -0
- package/tests/e2e-harness.spec.ts +64 -0
- package/tests/realnet-session.spec.ts +303 -0
- package/tests/signing-harness.spec.ts +41 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +17 -0
- package/vitest.config.ts +35 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Session lifecycle RPC handler registration for reference client.
|
|
12
|
+
* Provides mock session request handling for testing dApp-wallet session flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/session-handler
|
|
15
|
+
*/
|
|
16
|
+
import { RpcRouter } from '@hsuite/native-connect-sdk';
|
|
17
|
+
/**
|
|
18
|
+
* @description Register session lifecycle RPC handlers
|
|
19
|
+
* @param router - RPC router to register handlers on
|
|
20
|
+
*/
|
|
21
|
+
export declare const registerSessionHandlers: (router: RpcRouter) => void;
|
|
22
|
+
//# sourceMappingURL=session-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/session-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAa,MAAM,4BAA4B,CAAC;AAGlE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,KAAG,IAqB3D,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Session lifecycle RPC handler registration for reference client.
|
|
12
|
+
* Provides mock session request handling for testing dApp-wallet session flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/session-handler
|
|
15
|
+
*/
|
|
16
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
17
|
+
import { SessionRequestSchema } from '@hsuite/native-connect-types';
|
|
18
|
+
/**
|
|
19
|
+
* @description Register session lifecycle RPC handlers
|
|
20
|
+
* @param router - RPC router to register handlers on
|
|
21
|
+
*/
|
|
22
|
+
export const registerSessionHandlers = (router) => {
|
|
23
|
+
const logger = getLogger().scoped?.('ReferenceClient:SessionHandler') ?? getLogger();
|
|
24
|
+
router.register('session/request', async (params) => {
|
|
25
|
+
const request = SessionRequestSchema.parse(params);
|
|
26
|
+
logger.info('Session request received', {
|
|
27
|
+
appId: request.appId,
|
|
28
|
+
appName: request.appName,
|
|
29
|
+
permissions: request.permissions,
|
|
30
|
+
timestamp: request.timestamp,
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
approved: true,
|
|
34
|
+
accounts: [],
|
|
35
|
+
metadata: request.metadata ?? {},
|
|
36
|
+
ledgerId: request.ledgerId,
|
|
37
|
+
networkId: request.networkId,
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=session-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-handler.js","sourceRoot":"","sources":["../../src/handlers/session-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAa,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAiB,EAAQ,EAAE;IACjE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,gCAAgC,CAAC,IAAI,SAAS,EAAE,CAAC;IAErF,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Mock signing RPC handler registration for reference client.
|
|
12
|
+
* Provides simulated signing responses for testing transaction signing flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/signing-handler
|
|
15
|
+
*/
|
|
16
|
+
import { RpcRouter } from '@hsuite/native-connect-sdk';
|
|
17
|
+
/**
|
|
18
|
+
* @description Register mock signing handlers for testing
|
|
19
|
+
* @param router - RPC router to register handlers on
|
|
20
|
+
*/
|
|
21
|
+
export declare const registerSigningHandlers: (router: RpcRouter) => void;
|
|
22
|
+
//# sourceMappingURL=signing-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/signing-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAa,MAAM,4BAA4B,CAAC;AAGlE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,KAAG,IAmB3D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Mock signing RPC handler registration for reference client.
|
|
12
|
+
* Provides simulated signing responses for testing transaction signing flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/signing-handler
|
|
15
|
+
*/
|
|
16
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
17
|
+
import { SignPayloadSchema } from '@hsuite/native-connect-types';
|
|
18
|
+
/**
|
|
19
|
+
* @description Register mock signing handlers for testing
|
|
20
|
+
* @param router - RPC router to register handlers on
|
|
21
|
+
*/
|
|
22
|
+
export const registerSigningHandlers = (router) => {
|
|
23
|
+
const logger = getLogger().scoped?.('ReferenceClient:SigningHandler') ?? getLogger();
|
|
24
|
+
router.register('ledger/sign', async (params) => {
|
|
25
|
+
const payload = SignPayloadSchema.parse(params);
|
|
26
|
+
logger.info('Simulated signing request', {
|
|
27
|
+
ledgerId: payload.ledgerId,
|
|
28
|
+
account: payload.accountAddress,
|
|
29
|
+
nonce: payload.nonce,
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
signature: 'simulated-signature',
|
|
33
|
+
publicKey: payload.accountAddress,
|
|
34
|
+
payloadHash: 'hash',
|
|
35
|
+
algorithm: 'secp256k1',
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=signing-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-handler.js","sourceRoot":"","sources":["../../src/handlers/signing-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAa,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAiB,EAAQ,EAAE;IACjE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,gCAAgC,CAAC,IAAI,SAAS,EAAE,CAAC;IAErF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;YACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,cAAc;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,qBAAqB;YAChC,SAAS,EAAE,OAAO,CAAC,cAAc;YACjC,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,WAAW;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Wallet RPC handler registration for reference client.
|
|
12
|
+
* Provides handlers for account and configuration query methods.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/wallet-handler
|
|
15
|
+
*/
|
|
16
|
+
import { RpcRouter } from '@hsuite/native-connect-sdk';
|
|
17
|
+
/**
|
|
18
|
+
* @description Register wallet RPC handlers for account and config queries
|
|
19
|
+
* @param router - RPC router to register handlers on
|
|
20
|
+
*/
|
|
21
|
+
export declare const registerWalletHandlers: (router: RpcRouter) => void;
|
|
22
|
+
//# sourceMappingURL=wallet-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/wallet-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAa,MAAM,4BAA4B,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,KAAG,IAY1D,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Wallet RPC handler registration for reference client.
|
|
12
|
+
* Provides handlers for account and configuration query methods.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/handlers/wallet-handler
|
|
15
|
+
*/
|
|
16
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
17
|
+
/**
|
|
18
|
+
* @description Register wallet RPC handlers for account and config queries
|
|
19
|
+
* @param router - RPC router to register handlers on
|
|
20
|
+
*/
|
|
21
|
+
export const registerWalletHandlers = (router) => {
|
|
22
|
+
const logger = getLogger().scoped?.('ReferenceClient:WalletHandler') ?? getLogger();
|
|
23
|
+
router.register('wallet/accounts', async () => {
|
|
24
|
+
logger.info('wallet/accounts requested');
|
|
25
|
+
return { accounts: [] };
|
|
26
|
+
});
|
|
27
|
+
router.register('wallet/get-config', async () => {
|
|
28
|
+
logger.info('wallet/get-config requested');
|
|
29
|
+
return { network: 'xrpl:testnet' };
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=wallet-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-handler.js","sourceRoot":"","sources":["../../src/handlers/wallet-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAa,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAElE;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAQ,EAAE;IAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,+BAA+B,CAAC,IAAI,SAAS,EAAE,CAAC;IAEpF,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Test harness wiring reference client to in-memory transport.
|
|
12
|
+
* Provides complete RPC client/server setup for testing signing flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/harness/signing-harness
|
|
15
|
+
*/
|
|
16
|
+
import { ReferenceClient } from '../reference-client';
|
|
17
|
+
import { RpcRouter } from '@hsuite/native-connect-sdk';
|
|
18
|
+
import type { RpcRequest, RpcResponse } from '@hsuite/native-connect-types';
|
|
19
|
+
/**
|
|
20
|
+
* @class SigningHarness
|
|
21
|
+
* @description Test harness wiring reference client to in-memory transport.
|
|
22
|
+
*
|
|
23
|
+
* Provides:
|
|
24
|
+
* - Complete RPC client/server setup for testing
|
|
25
|
+
* - Router-based request handling
|
|
26
|
+
* - Automatic transport wiring for bidirectional communication
|
|
27
|
+
*/
|
|
28
|
+
export declare class SigningHarness {
|
|
29
|
+
private readonly router;
|
|
30
|
+
private readonly transport;
|
|
31
|
+
private readonly server;
|
|
32
|
+
private readonly client;
|
|
33
|
+
private readonly serverListener;
|
|
34
|
+
constructor(router: RpcRouter, onResponse?: (response: RpcResponse) => void);
|
|
35
|
+
get referenceClient(): ReferenceClient;
|
|
36
|
+
/**
|
|
37
|
+
* @description Send RPC request through harness
|
|
38
|
+
* @param request - RPC request payload
|
|
39
|
+
* @returns Promise resolving to RPC response
|
|
40
|
+
*/
|
|
41
|
+
send(request: RpcRequest): Promise<RpcResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* @description Cleanup harness resources
|
|
44
|
+
*/
|
|
45
|
+
destroy(): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=signing-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-harness.d.ts","sourceRoot":"","sources":["../../src/harness/signing-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAa,SAAS,EAAY,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,8BAA8B,CAAC;AAEzF;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;gBAG9C,MAAM,EAAE,SAAS,EAClC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI;IA6B9C,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrD;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Test harness wiring reference client to in-memory transport.
|
|
12
|
+
* Provides complete RPC client/server setup for testing signing flows.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/harness/signing-harness
|
|
15
|
+
*/
|
|
16
|
+
import { ReferenceClient } from '../reference-client';
|
|
17
|
+
import { MemoryTransport } from '../memory-transport';
|
|
18
|
+
import { RpcServer, RpcCodec } from '@hsuite/native-connect-sdk';
|
|
19
|
+
/**
|
|
20
|
+
* @class SigningHarness
|
|
21
|
+
* @description Test harness wiring reference client to in-memory transport.
|
|
22
|
+
*
|
|
23
|
+
* Provides:
|
|
24
|
+
* - Complete RPC client/server setup for testing
|
|
25
|
+
* - Router-based request handling
|
|
26
|
+
* - Automatic transport wiring for bidirectional communication
|
|
27
|
+
*/
|
|
28
|
+
export class SigningHarness {
|
|
29
|
+
router;
|
|
30
|
+
transport = new MemoryTransport();
|
|
31
|
+
server;
|
|
32
|
+
client;
|
|
33
|
+
serverListener;
|
|
34
|
+
constructor(router, onResponse) {
|
|
35
|
+
this.router = router;
|
|
36
|
+
this.server = new RpcServer({
|
|
37
|
+
codec: new RpcCodec(),
|
|
38
|
+
transport: {
|
|
39
|
+
send: (message) => this.transport.send(message, 'server'),
|
|
40
|
+
},
|
|
41
|
+
handler: (request) => this.router.handle(request),
|
|
42
|
+
});
|
|
43
|
+
this.serverListener = (envelope) => {
|
|
44
|
+
void this.server.handle(envelope);
|
|
45
|
+
};
|
|
46
|
+
this.transport.onServerMessage(this.serverListener);
|
|
47
|
+
this.client = new ReferenceClient({
|
|
48
|
+
transport: {
|
|
49
|
+
send: (message, from) => this.transport.send(message, from),
|
|
50
|
+
onMessage: (listener) => this.transport.onMessage(listener),
|
|
51
|
+
offMessage: (listener) => this.transport.offMessage(listener),
|
|
52
|
+
onServerMessage: (listener) => this.transport.onServerMessage(listener),
|
|
53
|
+
offServerMessage: (listener) => this.transport.offServerMessage(listener),
|
|
54
|
+
},
|
|
55
|
+
server: this.server,
|
|
56
|
+
timeoutMs: 2000,
|
|
57
|
+
onResponse,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
get referenceClient() {
|
|
61
|
+
return this.client;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @description Send RPC request through harness
|
|
65
|
+
* @param request - RPC request payload
|
|
66
|
+
* @returns Promise resolving to RPC response
|
|
67
|
+
*/
|
|
68
|
+
async send(request) {
|
|
69
|
+
return this.client.send({ ...request, timestamp: request.timestamp ?? Date.now() });
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @description Cleanup harness resources
|
|
73
|
+
*/
|
|
74
|
+
destroy() {
|
|
75
|
+
this.client.destroy();
|
|
76
|
+
this.transport.offServerMessage(this.serverListener);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=signing-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-harness.js","sourceRoot":"","sources":["../../src/harness/signing-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAa,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG5E;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IAON;IANF,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IAClC,MAAM,CAAY;IAClB,MAAM,CAAkB;IACxB,cAAc,CAAkC;IAEjE,YACmB,MAAiB,EAClC,UAA4C;QAD3B,WAAM,GAAN,MAAM,CAAW;QAGlC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,KAAK,EAAE,IAAI,QAAQ,EAAE;YACrB,SAAS,EAAE;gBACT,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC1D;YACD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,CAAC,QAAQ,EAAE,EAAE;YACjC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC;YAChC,SAAS,EAAE;gBACT,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC3D,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC7D,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACvE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC;aAC1E;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI;YACf,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,OAAmB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Public API for the HSuite Connect Client package.
|
|
12
|
+
* Reference client implementation for HSuite Wallet SDK providing developer-facing
|
|
13
|
+
* RPC client, in-memory transport for testing, handler registration utilities,
|
|
14
|
+
* and end-to-end testing harnesses.
|
|
15
|
+
*
|
|
16
|
+
* @module @hsuite/native-connect-client
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
export * from './reference-client';
|
|
20
|
+
export * from './query-client';
|
|
21
|
+
export * from './memory-transport';
|
|
22
|
+
export * from './protocol';
|
|
23
|
+
export { PostMessageTransport } from '@hsuite/native-connect-sdk';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Public API for the HSuite Connect Client package.
|
|
12
|
+
* Reference client implementation for HSuite Wallet SDK providing developer-facing
|
|
13
|
+
* RPC client, in-memory transport for testing, handler registration utilities,
|
|
14
|
+
* and end-to-end testing harnesses.
|
|
15
|
+
*
|
|
16
|
+
* @module @hsuite/native-connect-client
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
export * from './reference-client';
|
|
20
|
+
export * from './query-client';
|
|
21
|
+
export * from './memory-transport';
|
|
22
|
+
export * from './protocol';
|
|
23
|
+
export { PostMessageTransport } from '@hsuite/native-connect-sdk';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file Configuration options for MemoryTransport network simulation.
|
|
12
|
+
* Allows simulating real-world network conditions during testing.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/memory-transport-options
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* @description Configuration options for MemoryTransport network simulation
|
|
18
|
+
* @property {number} [latencyMs] - Base network latency in milliseconds
|
|
19
|
+
* @property {number} [jitterMs] - Random jitter added to latency
|
|
20
|
+
* @property {number} [dropRate] - Probability (0-1) of message drop
|
|
21
|
+
*/
|
|
22
|
+
export interface MemoryTransportOptions {
|
|
23
|
+
latencyMs?: number;
|
|
24
|
+
jitterMs?: number;
|
|
25
|
+
dropRate?: number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=memory-transport-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-transport-options.d.ts","sourceRoot":"","sources":["../src/memory-transport-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=memory-transport-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-transport-options.js","sourceRoot":"","sources":["../src/memory-transport-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
import type { RpcEnvelope } from '@hsuite/native-connect-types';
|
|
11
|
+
/**
|
|
12
|
+
* @class MemoryTransport
|
|
13
|
+
* @description In-memory transport for testing RPC communication.
|
|
14
|
+
*
|
|
15
|
+
* Provides:
|
|
16
|
+
* - Synchronous message delivery between client and server emitters
|
|
17
|
+
* - Message isolation via deep cloning to prevent mutation
|
|
18
|
+
* - Pending promise queue for ordered delivery
|
|
19
|
+
*/
|
|
20
|
+
export declare class MemoryTransport {
|
|
21
|
+
private readonly clientEmitter;
|
|
22
|
+
private readonly serverEmitter;
|
|
23
|
+
private pending;
|
|
24
|
+
/**
|
|
25
|
+
* @description Send message from client or server
|
|
26
|
+
* @param message - RPC envelope to send
|
|
27
|
+
* @param from - Origin of message (client or server)
|
|
28
|
+
*/
|
|
29
|
+
send(message: RpcEnvelope, from?: 'client' | 'server'): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @description Register listener for client-bound messages
|
|
32
|
+
* @param listener - Message callback
|
|
33
|
+
*/
|
|
34
|
+
onMessage(listener: (message: RpcEnvelope) => void): void;
|
|
35
|
+
/**
|
|
36
|
+
* @description Unregister client message listener
|
|
37
|
+
* @param listener - Message callback to remove
|
|
38
|
+
*/
|
|
39
|
+
offMessage(listener: (message: RpcEnvelope) => void): void;
|
|
40
|
+
/**
|
|
41
|
+
* @description Register listener for server-bound messages
|
|
42
|
+
* @param listener - Message callback
|
|
43
|
+
*/
|
|
44
|
+
onServerMessage(listener: (message: RpcEnvelope) => void): void;
|
|
45
|
+
/**
|
|
46
|
+
* @description Unregister server message listener
|
|
47
|
+
* @param listener - Message callback to remove
|
|
48
|
+
*/
|
|
49
|
+
offServerMessage(listener: (message: RpcEnvelope) => void): void;
|
|
50
|
+
/**
|
|
51
|
+
* @description Wait for all pending messages to be delivered
|
|
52
|
+
*/
|
|
53
|
+
drain(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=memory-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-transport.d.ts","sourceRoot":"","sources":["../src/memory-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAMhE;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,GAAE,QAAQ,GAAG,QAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IASrF;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIzD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAI1D;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAI/D;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIhE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @file In-memory transport implementation for testing RPC communication.
|
|
12
|
+
* Provides isolated message delivery between client and server without network I/O.
|
|
13
|
+
*
|
|
14
|
+
* @module @hsuite/native-connect-client/memory-transport
|
|
15
|
+
*/
|
|
16
|
+
import { EventEmitter } from 'eventemitter3';
|
|
17
|
+
function cloneEnvelope(envelope) {
|
|
18
|
+
return JSON.parse(JSON.stringify(envelope));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @class MemoryTransport
|
|
22
|
+
* @description In-memory transport for testing RPC communication.
|
|
23
|
+
*
|
|
24
|
+
* Provides:
|
|
25
|
+
* - Synchronous message delivery between client and server emitters
|
|
26
|
+
* - Message isolation via deep cloning to prevent mutation
|
|
27
|
+
* - Pending promise queue for ordered delivery
|
|
28
|
+
*/
|
|
29
|
+
export class MemoryTransport {
|
|
30
|
+
clientEmitter = new EventEmitter();
|
|
31
|
+
serverEmitter = new EventEmitter();
|
|
32
|
+
pending = Promise.resolve();
|
|
33
|
+
/**
|
|
34
|
+
* @description Send message from client or server
|
|
35
|
+
* @param message - RPC envelope to send
|
|
36
|
+
* @param from - Origin of message (client or server)
|
|
37
|
+
*/
|
|
38
|
+
async send(message, from = 'client') {
|
|
39
|
+
const cloned = cloneEnvelope(message);
|
|
40
|
+
this.pending = this.pending.then(() => {
|
|
41
|
+
const target = from === 'client' ? this.serverEmitter : this.clientEmitter;
|
|
42
|
+
target.emit('message', cloned);
|
|
43
|
+
});
|
|
44
|
+
await this.pending;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @description Register listener for client-bound messages
|
|
48
|
+
* @param listener - Message callback
|
|
49
|
+
*/
|
|
50
|
+
onMessage(listener) {
|
|
51
|
+
this.clientEmitter.on('message', listener);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Unregister client message listener
|
|
55
|
+
* @param listener - Message callback to remove
|
|
56
|
+
*/
|
|
57
|
+
offMessage(listener) {
|
|
58
|
+
this.clientEmitter.off('message', listener);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Register listener for server-bound messages
|
|
62
|
+
* @param listener - Message callback
|
|
63
|
+
*/
|
|
64
|
+
onServerMessage(listener) {
|
|
65
|
+
this.serverEmitter.on('message', listener);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @description Unregister server message listener
|
|
69
|
+
* @param listener - Message callback to remove
|
|
70
|
+
*/
|
|
71
|
+
offServerMessage(listener) {
|
|
72
|
+
this.serverEmitter.off('message', listener);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description Wait for all pending messages to be delivered
|
|
76
|
+
*/
|
|
77
|
+
async drain() {
|
|
78
|
+
await this.pending;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=memory-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-transport.js","sourceRoot":"","sources":["../src/memory-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,SAAS,aAAa,CAAC,QAAqB;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAgB,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IACT,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;IAC5C,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpC;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB,EAAE,OAA4B,QAAQ;QACnE,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAwC;QAChD,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,QAAwC;QACjD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,QAAwC;QACtD,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAwC;QACvD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;CACF"}
|