@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.
Files changed (107) hide show
  1. package/README.md +51 -0
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/coverage-summary.json +10 -0
  5. package/coverage/favicon.png +0 -0
  6. package/coverage/index.html +161 -0
  7. package/coverage/lcov-report/base.css +224 -0
  8. package/coverage/lcov-report/block-navigation.js +87 -0
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +161 -0
  11. package/coverage/lcov-report/prettify.css +1 -0
  12. package/coverage/lcov-report/prettify.js +2 -0
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +210 -0
  15. package/coverage/lcov-report/src/handlers/index.html +146 -0
  16. package/coverage/lcov-report/src/handlers/session-handler.ts.html +223 -0
  17. package/coverage/lcov-report/src/handlers/signing-handler.ts.html +217 -0
  18. package/coverage/lcov-report/src/handlers/wallet-handler.ts.html +193 -0
  19. package/coverage/lcov-report/src/harness/index.html +116 -0
  20. package/coverage/lcov-report/src/harness/signing-harness.ts.html +352 -0
  21. package/coverage/lcov-report/src/index.html +146 -0
  22. package/coverage/lcov-report/src/memory-transport.ts.html +358 -0
  23. package/coverage/lcov-report/src/protocol/e2e-harness.ts.html +568 -0
  24. package/coverage/lcov-report/src/protocol/index.html +116 -0
  25. package/coverage/lcov-report/src/query-client.ts.html +277 -0
  26. package/coverage/lcov-report/src/reference-client.ts.html +691 -0
  27. package/coverage/lcov.info +981 -0
  28. package/coverage/prettify.css +1 -0
  29. package/coverage/prettify.js +2 -0
  30. package/coverage/sort-arrow-sprite.png +0 -0
  31. package/coverage/sorter.js +210 -0
  32. package/coverage/src/handlers/index.html +146 -0
  33. package/coverage/src/handlers/session-handler.ts.html +223 -0
  34. package/coverage/src/handlers/signing-handler.ts.html +217 -0
  35. package/coverage/src/handlers/wallet-handler.ts.html +193 -0
  36. package/coverage/src/harness/index.html +116 -0
  37. package/coverage/src/harness/signing-harness.ts.html +352 -0
  38. package/coverage/src/index.html +146 -0
  39. package/coverage/src/memory-transport.ts.html +358 -0
  40. package/coverage/src/protocol/e2e-harness.ts.html +568 -0
  41. package/coverage/src/protocol/index.html +116 -0
  42. package/coverage/src/query-client.ts.html +277 -0
  43. package/coverage/src/reference-client.ts.html +691 -0
  44. package/dist/handlers/session-handler.d.ts +22 -0
  45. package/dist/handlers/session-handler.d.ts.map +1 -0
  46. package/dist/handlers/session-handler.js +41 -0
  47. package/dist/handlers/session-handler.js.map +1 -0
  48. package/dist/handlers/signing-handler.d.ts +22 -0
  49. package/dist/handlers/signing-handler.d.ts.map +1 -0
  50. package/dist/handlers/signing-handler.js +39 -0
  51. package/dist/handlers/signing-handler.js.map +1 -0
  52. package/dist/handlers/wallet-handler.d.ts +22 -0
  53. package/dist/handlers/wallet-handler.d.ts.map +1 -0
  54. package/dist/handlers/wallet-handler.js +32 -0
  55. package/dist/handlers/wallet-handler.js.map +1 -0
  56. package/dist/harness/signing-harness.d.ts +47 -0
  57. package/dist/harness/signing-harness.d.ts.map +1 -0
  58. package/dist/harness/signing-harness.js +79 -0
  59. package/dist/harness/signing-harness.js.map +1 -0
  60. package/dist/index.d.ts +24 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +24 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/memory-transport-options.d.ts +27 -0
  65. package/dist/memory-transport-options.d.ts.map +1 -0
  66. package/dist/memory-transport-options.js +11 -0
  67. package/dist/memory-transport-options.js.map +1 -0
  68. package/dist/memory-transport.d.ts +55 -0
  69. package/dist/memory-transport.d.ts.map +1 -0
  70. package/dist/memory-transport.js +81 -0
  71. package/dist/memory-transport.js.map +1 -0
  72. package/dist/protocol/e2e-harness.d.ts +65 -0
  73. package/dist/protocol/e2e-harness.d.ts.map +1 -0
  74. package/dist/protocol/e2e-harness.js +130 -0
  75. package/dist/protocol/e2e-harness.js.map +1 -0
  76. package/dist/protocol/index.d.ts +22 -0
  77. package/dist/protocol/index.d.ts.map +1 -0
  78. package/dist/protocol/index.js +22 -0
  79. package/dist/protocol/index.js.map +1 -0
  80. package/dist/query-client.d.ts +41 -0
  81. package/dist/query-client.d.ts.map +1 -0
  82. package/dist/query-client.js +52 -0
  83. package/dist/query-client.js.map +1 -0
  84. package/dist/reference-client.d.ts +100 -0
  85. package/dist/reference-client.d.ts.map +1 -0
  86. package/dist/reference-client.js +149 -0
  87. package/dist/reference-client.js.map +1 -0
  88. package/package.json +46 -0
  89. package/src/handlers/session-handler.ts +46 -0
  90. package/src/handlers/signing-handler.ts +44 -0
  91. package/src/handlers/wallet-handler.ts +36 -0
  92. package/src/harness/signing-harness.ts +89 -0
  93. package/src/index.ts +24 -0
  94. package/src/memory-transport-options.ts +28 -0
  95. package/src/memory-transport.ts +91 -0
  96. package/src/protocol/e2e-harness.ts +161 -0
  97. package/src/protocol/index.ts +23 -0
  98. package/src/query-client.ts +64 -0
  99. package/src/reference-client.spec.ts +408 -0
  100. package/src/reference-client.ts +202 -0
  101. package/tests/e2e-harness.spec.ts +64 -0
  102. package/tests/realnet-session.spec.ts +303 -0
  103. package/tests/signing-harness.spec.ts +41 -0
  104. package/tsconfig.build.json +10 -0
  105. package/tsconfig.build.tsbuildinfo +1 -0
  106. package/tsconfig.json +17 -0
  107. package/vitest.config.ts +35 -0
@@ -0,0 +1,691 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/reference-client.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> reference-client.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">99% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>200/202</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">91.42% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>32/35</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">90% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/10</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">99% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>200/202</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
269
+ <span class="cline-any cline-yes">1x</span>
270
+ <span class="cline-any cline-yes">1x</span>
271
+ <span class="cline-any cline-yes">1x</span>
272
+ <span class="cline-any cline-yes">1x</span>
273
+ <span class="cline-any cline-yes">1x</span>
274
+ <span class="cline-any cline-yes">1x</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">1x</span>
277
+ <span class="cline-any cline-yes">1x</span>
278
+ <span class="cline-any cline-yes">1x</span>
279
+ <span class="cline-any cline-yes">1x</span>
280
+ <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-yes">1x</span>
282
+ <span class="cline-any cline-yes">1x</span>
283
+ <span class="cline-any cline-yes">1x</span>
284
+ <span class="cline-any cline-yes">1x</span>
285
+ <span class="cline-any cline-yes">1x</span>
286
+ <span class="cline-any cline-yes">1x</span>
287
+ <span class="cline-any cline-yes">1x</span>
288
+ <span class="cline-any cline-yes">1x</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-yes">1x</span>
291
+ <span class="cline-any cline-yes">1x</span>
292
+ <span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-yes">1x</span>
294
+ <span class="cline-any cline-yes">1x</span>
295
+ <span class="cline-any cline-yes">1x</span>
296
+ <span class="cline-any cline-yes">1x</span>
297
+ <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">1x</span>
299
+ <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">1x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-yes">1x</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-yes">1x</span>
312
+ <span class="cline-any cline-yes">1x</span>
313
+ <span class="cline-any cline-yes">1x</span>
314
+ <span class="cline-any cline-yes">1x</span>
315
+ <span class="cline-any cline-yes">1x</span>
316
+ <span class="cline-any cline-yes">1x</span>
317
+ <span class="cline-any cline-yes">1x</span>
318
+ <span class="cline-any cline-yes">1x</span>
319
+ <span class="cline-any cline-yes">1x</span>
320
+ <span class="cline-any cline-yes">1x</span>
321
+ <span class="cline-any cline-yes">1x</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">1x</span>
327
+ <span class="cline-any cline-yes">1x</span>
328
+ <span class="cline-any cline-yes">1x</span>
329
+ <span class="cline-any cline-yes">1x</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-yes">1x</span>
332
+ <span class="cline-any cline-yes">1x</span>
333
+ <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-yes">1x</span>
335
+ <span class="cline-any cline-yes">1x</span>
336
+ <span class="cline-any cline-yes">1x</span>
337
+ <span class="cline-any cline-yes">1x</span>
338
+ <span class="cline-any cline-yes">1x</span>
339
+ <span class="cline-any cline-yes">1x</span>
340
+ <span class="cline-any cline-yes">1x</span>
341
+ <span class="cline-any cline-yes">1x</span>
342
+ <span class="cline-any cline-yes">19x</span>
343
+ <span class="cline-any cline-yes">19x</span>
344
+ <span class="cline-any cline-yes">19x</span>
345
+ <span class="cline-any cline-yes">19x</span>
346
+ <span class="cline-any cline-yes">19x</span>
347
+ <span class="cline-any cline-yes">19x</span>
348
+ <span class="cline-any cline-yes">19x</span>
349
+ <span class="cline-any cline-yes">19x</span>
350
+ <span class="cline-any cline-yes">19x</span>
351
+ <span class="cline-any cline-yes">19x</span>
352
+ <span class="cline-any cline-yes">19x</span>
353
+ <span class="cline-any cline-yes">19x</span>
354
+ <span class="cline-any cline-yes">19x</span>
355
+ <span class="cline-any cline-yes">19x</span>
356
+ <span class="cline-any cline-yes">19x</span>
357
+ <span class="cline-any cline-yes">19x</span>
358
+ <span class="cline-any cline-yes">19x</span>
359
+ <span class="cline-any cline-yes">19x</span>
360
+ <span class="cline-any cline-yes">19x</span>
361
+ <span class="cline-any cline-yes">19x</span>
362
+ <span class="cline-any cline-yes">19x</span>
363
+ <span class="cline-any cline-yes">19x</span>
364
+ <span class="cline-any cline-yes">19x</span>
365
+ <span class="cline-any cline-yes">19x</span>
366
+ <span class="cline-any cline-yes">19x</span>
367
+ <span class="cline-any cline-yes">19x</span>
368
+ <span class="cline-any cline-yes">19x</span>
369
+ <span class="cline-any cline-yes">19x</span>
370
+ <span class="cline-any cline-yes">19x</span>
371
+ <span class="cline-any cline-yes">19x</span>
372
+ <span class="cline-any cline-yes">8x</span>
373
+ <span class="cline-any cline-yes">8x</span>
374
+ <span class="cline-any cline-yes">8x</span>
375
+ <span class="cline-any cline-yes">8x</span>
376
+ <span class="cline-any cline-yes">8x</span>
377
+ <span class="cline-any cline-yes">1x</span>
378
+ <span class="cline-any cline-yes">1x</span>
379
+ <span class="cline-any cline-yes">8x</span>
380
+ <span class="cline-any cline-yes">8x</span>
381
+ <span class="cline-any cline-yes">8x</span>
382
+ <span class="cline-any cline-yes">7x</span>
383
+ <span class="cline-any cline-yes">7x</span>
384
+ <span class="cline-any cline-yes">7x</span>
385
+ <span class="cline-any cline-yes">8x</span>
386
+ <span class="cline-any cline-yes">8x</span>
387
+ <span class="cline-any cline-yes">8x</span>
388
+ <span class="cline-any cline-yes">8x</span>
389
+ <span class="cline-any cline-yes">8x</span>
390
+ <span class="cline-any cline-yes">8x</span>
391
+ <span class="cline-any cline-yes">19x</span>
392
+ <span class="cline-any cline-yes">19x</span>
393
+ <span class="cline-any cline-yes">19x</span>
394
+ <span class="cline-any cline-yes">19x</span>
395
+ <span class="cline-any cline-yes">19x</span>
396
+ <span class="cline-any cline-yes">19x</span>
397
+ <span class="cline-any cline-yes">19x</span>
398
+ <span class="cline-any cline-yes">1x</span>
399
+ <span class="cline-any cline-yes">1x</span>
400
+ <span class="cline-any cline-yes">19x</span>
401
+ <span class="cline-any cline-yes">19x</span>
402
+ <span class="cline-any cline-yes">19x</span>
403
+ <span class="cline-any cline-yes">19x</span>
404
+ <span class="cline-any cline-yes">19x</span>
405
+ <span class="cline-any cline-yes">21x</span>
406
+ <span class="cline-any cline-yes">21x</span>
407
+ <span class="cline-any cline-yes">21x</span>
408
+ <span class="cline-any cline-yes">19x</span>
409
+ <span class="cline-any cline-yes">19x</span>
410
+ <span class="cline-any cline-yes">12x</span>
411
+ <span class="cline-any cline-yes">12x</span>
412
+ <span class="cline-any cline-yes">11x</span>
413
+ <span class="cline-any cline-yes">11x</span>
414
+ <span class="cline-any cline-yes">12x</span>
415
+ <span class="cline-any cline-yes">3x</span>
416
+ <span class="cline-any cline-yes">3x</span>
417
+ <span class="cline-any cline-yes">3x</span>
418
+ <span class="cline-any cline-yes">2x</span>
419
+ <span class="cline-any cline-yes">2x</span>
420
+ <span class="cline-any cline-yes">2x</span>
421
+ <span class="cline-any cline-yes">2x</span>
422
+ <span class="cline-any cline-yes">2x</span>
423
+ <span class="cline-any cline-yes">2x</span>
424
+ <span class="cline-any cline-yes">2x</span>
425
+ <span class="cline-any cline-yes">2x</span>
426
+ <span class="cline-any cline-yes">2x</span>
427
+ <span class="cline-any cline-yes">3x</span>
428
+ <span class="cline-any cline-yes">3x</span>
429
+ <span class="cline-any cline-yes">3x</span>
430
+ <span class="cline-any cline-yes">3x</span>
431
+ <span class="cline-any cline-yes">3x</span>
432
+ <span class="cline-any cline-yes">3x</span>
433
+ <span class="cline-any cline-yes">3x</span>
434
+ <span class="cline-any cline-yes">3x</span>
435
+ <span class="cline-any cline-yes">8x</span>
436
+ <span class="cline-any cline-yes">8x</span>
437
+ <span class="cline-any cline-yes">8x</span>
438
+ <span class="cline-any cline-yes">12x</span>
439
+ <span class="cline-any cline-yes">12x</span>
440
+ <span class="cline-any cline-yes">12x</span>
441
+ <span class="cline-any cline-yes">12x</span>
442
+ <span class="cline-any cline-yes">7x</span>
443
+ <span class="cline-any cline-yes">7x</span>
444
+ <span class="cline-any cline-yes">7x</span>
445
+ <span class="cline-any cline-yes">8x</span>
446
+ <span class="cline-any cline-yes">12x</span>
447
+ <span class="cline-any cline-yes">12x</span>
448
+ <span class="cline-any cline-yes">12x</span>
449
+ <span class="cline-any cline-yes">12x</span>
450
+ <span class="cline-any cline-yes">12x</span>
451
+ <span class="cline-any cline-yes">12x</span>
452
+ <span class="cline-any cline-yes">12x</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-yes">1x</span>
455
+ <span class="cline-any cline-yes">1x</span>
456
+ <span class="cline-any cline-yes">12x</span>
457
+ <span class="cline-any cline-yes">19x</span>
458
+ <span class="cline-any cline-yes">19x</span>
459
+ <span class="cline-any cline-yes">11x</span>
460
+ <span class="cline-any cline-yes">11x</span>
461
+ <span class="cline-any cline-yes">19x</span>
462
+ <span class="cline-any cline-yes">19x</span>
463
+ <span class="cline-any cline-yes">16x</span>
464
+ <span class="cline-any cline-yes">16x</span>
465
+ <span class="cline-any cline-yes">19x</span>
466
+ <span class="cline-any cline-yes">19x</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-yes">19x</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
471
+ * HSuite Native Connect
472
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
473
+ *
474
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
475
+ *
476
+ * This file is part of HSuite Native Connect. For commercial licensing,
477
+ * visit https://hsuite.finance/licensing
478
+ */
479
+ &nbsp;
480
+ /**
481
+ * @file Reference client implementation for dApp developers.
482
+ * Provides a complete RPC client with bidirectional message routing,
483
+ * timeout protection, and event-driven lifecycle hooks.
484
+ *
485
+ * @module @hsuite/native-connect-client/reference-client
486
+ */
487
+ &nbsp;
488
+ import EventEmitter from 'eventemitter3';
489
+ import { RpcClient, RpcCodec, RpcServer, RpcRouter, getLogger } from '@hsuite/native-connect-sdk';
490
+ import type { RpcRequest, RpcResponse, RpcEnvelope } from '@hsuite/native-connect-types';
491
+ import { RpcRequestSchema, RpcErrorSchema, RpcSuccessSchema } from '@hsuite/native-connect-types';
492
+ &nbsp;
493
+ /**
494
+ * @description Transport abstraction for RPC message exchange
495
+ * @property {function} send - Send RPC envelope to peer
496
+ * @property {function} onMessage - Register listener for incoming messages
497
+ * @property {function} [offMessage] - Unregister message listener
498
+ * @property {function} [onServerMessage] - Register listener for server-originated messages
499
+ * @property {function} [offServerMessage] - Unregister server message listener
500
+ */
501
+ export interface ReferenceClientTransport {
502
+ send(message: RpcEnvelope, from?: 'client' | 'server'): Promise&lt;void&gt;;
503
+ onMessage(listener: (message: RpcEnvelope) =&gt; void): void;
504
+ offMessage?(listener: (message: RpcEnvelope) =&gt; void): void;
505
+ onServerMessage?(listener: (message: RpcEnvelope) =&gt; void): void;
506
+ offServerMessage?(listener: (message: RpcEnvelope) =&gt; void): void;
507
+ }
508
+ &nbsp;
509
+ /**
510
+ * @description Configuration for reference client instantiation
511
+ * @property {ReferenceClientTransport} transport - Transport layer for message exchange
512
+ * @property {number} [timeoutMs] - Request timeout in milliseconds
513
+ * @property {RpcServer} [server] - Optional RPC server for bidirectional communication
514
+ * @property {function} [onResponse] - Callback invoked on response receipt
515
+ */
516
+ export interface ReferenceClientOptions {
517
+ transport: ReferenceClientTransport;
518
+ timeoutMs?: number;
519
+ server?: RpcServer;
520
+ onResponse?(response: RpcResponse): void;
521
+ }
522
+ &nbsp;
523
+ /**
524
+ * @description Events emitted by reference client
525
+ */
526
+ export type ReferenceClientEvent = 'request' | 'response' | 'response:error' | 'error';
527
+ &nbsp;
528
+ /**
529
+ * @class ReferenceClient
530
+ * @augments EventEmitter
531
+ * @description Developer-facing RPC client for HSuite SDK integration testing.
532
+ *
533
+ * This is a reference implementation designed for dApp developers to understand
534
+ * and test wallet communication patterns. It demonstrates the complete RPC
535
+ * request/response lifecycle with proper timeout handling and error recovery.
536
+ *
537
+ * Features:
538
+ * - Request/response RPC communication with timeout protection
539
+ * - Bidirectional message routing for client-server scenarios
540
+ * - Event emission for request/response lifecycle hooks
541
+ * - Handler registration for incoming RPC methods
542
+ */
543
+ export class ReferenceClient extends EventEmitter&lt;ReferenceClientEvent | string&gt; {
544
+ private readonly rpc: RpcClient;
545
+ private readonly codec = new RpcCodec();
546
+ private readonly pending = new Map&lt;string | number, (response: RpcResponse) =&gt; void&gt;();
547
+ private readonly timeoutMs: number;
548
+ private readonly messageListener: (envelope: RpcEnvelope) =&gt; void;
549
+ private readonly server?: RpcServer;
550
+ private readonly router = new RpcRouter();
551
+ private readonly logger = getLogger().scoped?.('ReferenceClient'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
552
+ &nbsp;
553
+ constructor(private readonly options: ReferenceClientOptions) {
554
+ super();
555
+ this.timeoutMs = options.timeoutMs ?? 5000;
556
+ this.rpc = new RpcClient({
557
+ transport: options.transport,
558
+ codec: this.codec,
559
+ timeoutMs: this.timeoutMs,
560
+ });
561
+ this.server = options.server;
562
+ this.messageListener = (envelope) =&gt; this.handleEnvelope(envelope);
563
+ options.transport.onMessage(this.messageListener);
564
+ options.transport.onServerMessage?.((envelope) =&gt; this.handleEnvelope(envelope));
565
+ }
566
+ &nbsp;
567
+ /**
568
+ * @description Send RPC request and await response with timeout
569
+ * @param request - RPC request payload
570
+ * @returns Promise resolving to RPC response
571
+ * @throws Error if request times out
572
+ */
573
+ async send&lt;T = unknown&gt;(request: RpcRequest): Promise&lt;RpcResponse&lt;T&gt;&gt; {
574
+ const id = request.id ?? crypto.randomUUID();
575
+ const finalRequest: RpcRequest = { ...request, id, timestamp: request.timestamp ?? Date.now() };
576
+ this.logger.debug('Sending RPC request', { method: finalRequest.method, id: String(id) });
577
+ const promise = new Promise&lt;RpcResponse&lt;T&gt;&gt;((resolve, reject) =&gt; {
578
+ const timeout = setTimeout(() =&gt; {
579
+ this.pending.delete(id);
580
+ reject(new Error(`RPC request ${String(id)} timed out after ${this.timeoutMs}ms`));
581
+ }, this.timeoutMs);
582
+ &nbsp;
583
+ this.pending.set(id, (response) =&gt; {
584
+ clearTimeout(timeout);
585
+ this.logger.debug('RPC response received', { id: String(id), method: finalRequest.method });
586
+ resolve(response as RpcResponse&lt;T&gt;);
587
+ });
588
+ });
589
+ &nbsp;
590
+ await this.rpc.send(finalRequest);
591
+ return promise;
592
+ }
593
+ &nbsp;
594
+ /**
595
+ * @description Register handler for incoming RPC method
596
+ * @param method - RPC method name
597
+ * @param handler - Handler function returning response data
598
+ */
599
+ register(method: string, handler: Parameters&lt;typeof RpcRouter.prototype.register&gt;[1]): void {
600
+ this.router.register(method, handler);
601
+ }
602
+ &nbsp;
603
+ /**
604
+ * @description Dispose client and cleanup listeners
605
+ */
606
+ destroy(): void {
607
+ this.pending.clear();
608
+ this.options.transport.offMessage?.(this.messageListener);
609
+ }
610
+ &nbsp;
611
+ private async handleEnvelope(envelope: RpcEnvelope): Promise&lt;void&gt; {
612
+ try {
613
+ const decoded = await this.codec.decode(envelope);
614
+ const payload = decoded.payload;
615
+ &nbsp;
616
+ if (this.isRequest(payload)) {
617
+ const handled = this.server ? await this.server.handle(decoded) : undefined;
618
+ &nbsp;
619
+ if (!handled) {
620
+ const response = await this.router.handle(payload);
621
+ const responseEnvelope = await this.codec.encodeResponse(response);
622
+ await this.options.transport.send(responseEnvelope, 'server');
623
+ &nbsp;
624
+ this.logger.debug('RPC response sent from local router', {
625
+ method: payload.method,
626
+ id: String(payload.id),
627
+ });
628
+ }
629
+ &nbsp;
630
+ this.emit('request', payload);
631
+ this.logger.info('RPC request handled locally', {
632
+ method: payload.method,
633
+ id: String(payload.id),
634
+ });
635
+ return;
636
+ }
637
+ &nbsp;
638
+ const result = payload as RpcResponse;
639
+ const id =
640
+ typeof result.id === <span class="branch-0 cbranch-no" title="branch not covered" >'string' || typeof result.id === 'number' ? r</span>esult.<span class="branch-0 cbranch-no" title="branch not covered" >id : 'unknown';</span>
641
+ const callback = this.pending.get(id);
642
+ &nbsp;
643
+ if (callback) {
644
+ callback(result);
645
+ this.pending.delete(id);
646
+ }
647
+ &nbsp;
648
+ this.options.onResponse?.(result);
649
+ this.emit(this.isError(result) ? 'response:error' : 'response', result);
650
+ this.logger.info('RPC response processed', {
651
+ id: String(result.id),
652
+ status: this.isError(result) ? 'error' : 'success',
653
+ });
654
+ } catch (error) {
655
+ this.emit('error', error);
656
+ this.logger.error('RPC envelope handling failed', { error });
657
+ }
658
+ }
659
+ &nbsp;
660
+ private isRequest(payload: unknown): payload is RpcRequest {
661
+ return RpcRequestSchema.safeParse(payload).success;
662
+ }
663
+ &nbsp;
664
+ private isError(payload: RpcResponse): payload is ReturnType&lt;typeof RpcErrorSchema.parse&gt; {
665
+ return RpcErrorSchema.safeParse(payload).success;
666
+ }
667
+ &nbsp;
668
+ private <span class="fstat-no" title="function not covered" >isSuccess&lt;T&gt;(payload: RpcResponse&lt;T&gt;): payload is RpcResponse&lt;T&gt; &amp; { result: T } {</span>
669
+ <span class="cstat-no" title="statement not covered" > return RpcSuccessSchema.safeParse(payload).success;</span>
670
+ <span class="cstat-no" title="statement not covered" > }</span>
671
+ }
672
+ &nbsp;</pre></td></tr></table></pre>
673
+
674
+ <div class='push'></div><!-- for sticky footer -->
675
+ </div><!-- /wrapper -->
676
+ <div class='footer quiet pad2 space-top1 center small'>
677
+ Code coverage generated by
678
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
679
+ at 2026-06-02T14:29:49.177Z
680
+ </div>
681
+ <script src="../prettify.js"></script>
682
+ <script>
683
+ window.onload = function () {
684
+ prettyPrint();
685
+ };
686
+ </script>
687
+ <script src="../sorter.js"></script>
688
+ <script src="../block-navigation.js"></script>
689
+ </body>
690
+ </html>
691
+