apacuana-sdk-core 0.1.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 (53) hide show
  1. package/.babelrc +3 -0
  2. package/.eslintrc.cjs +22 -0
  3. package/CHANGELOG.md +1 -0
  4. package/README.md +291 -0
  5. package/coverage/clover.xml +171 -0
  6. package/coverage/coverage-final.json +8 -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/certs.js.html +175 -0
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +161 -0
  12. package/coverage/lcov-report/prettify.css +1 -0
  13. package/coverage/lcov-report/prettify.js +2 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +196 -0
  16. package/coverage/lcov-report/src/api/certs.js.html +295 -0
  17. package/coverage/lcov-report/src/api/index.html +146 -0
  18. package/coverage/lcov-report/src/api/revocations.js.html +214 -0
  19. package/coverage/lcov-report/src/api/signatures.js.html +334 -0
  20. package/coverage/lcov-report/src/api/users.js.html +307 -0
  21. package/coverage/lcov-report/src/config/index.html +116 -0
  22. package/coverage/lcov-report/src/config/index.js.html +175 -0
  23. package/coverage/lcov-report/src/errors/index.html +116 -0
  24. package/coverage/lcov-report/src/errors/index.js.html +145 -0
  25. package/coverage/lcov-report/src/index.html +116 -0
  26. package/coverage/lcov-report/src/index.js.html +286 -0
  27. package/coverage/lcov-report/src/utils/constant.js.html +145 -0
  28. package/coverage/lcov-report/src/utils/helpers.js.html +583 -0
  29. package/coverage/lcov-report/src/utils/index.html +131 -0
  30. package/coverage/lcov.info +303 -0
  31. package/dist/index.js +32927 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/index.mjs +32925 -0
  34. package/dist/index.mjs.map +1 -0
  35. package/jest.config.cjs +7 -0
  36. package/package.json +47 -0
  37. package/rollup.config.js +32 -0
  38. package/src/api/certs.js +70 -0
  39. package/src/api/revocations.js +43 -0
  40. package/src/api/signatures.js +77 -0
  41. package/src/api/users.js +74 -0
  42. package/src/auth/index.js +24 -0
  43. package/src/config/index.js +41 -0
  44. package/src/errors/index.js +20 -0
  45. package/src/index.js +67 -0
  46. package/src/utils/constant.js +20 -0
  47. package/src/utils/helpers.js +166 -0
  48. package/src/utils/httpClient.js +187 -0
  49. package/tests/api/certs.test.js +6 -0
  50. package/tests/api/revocations.test.js +6 -0
  51. package/tests/api/signatures.test.js +6 -0
  52. package/tests/api/users.test.js +115 -0
  53. package/tests/index.test.js +122 -0
@@ -0,0 +1,583 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/utils/helpers.js</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/utils</a> helpers.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">8.92% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>5/56</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/45</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/7</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">9.43% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>5/53</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 low'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-yes">1x</span>
239
+ <span class="cline-any cline-no">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-no">&nbsp;</span>
243
+ <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
249
+ <span class="cline-any cline-no">&nbsp;</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-no">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-no">&nbsp;</span>
260
+ <span class="cline-any cline-no">&nbsp;</span>
261
+ <span class="cline-any cline-no">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-no">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-no">&nbsp;</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-no">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-no">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-yes">1x</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as pkijs from "pkijs";
399
+ import * as asn1js from "asn1js";
400
+ import { getCrypto } from "pkijs";
401
+ import { STATUS_CERTIFICATE, VERIFICATION_STATUS } from "./constant";
402
+ import { ApacuanaAPIError } from "../errors/index";
403
+ &nbsp;
404
+ const getCertificateStatus = <span class="fstat-no" title="function not covered" >(u</span>serData, certificateInDevice) =&gt; {
405
+ <span class="cstat-no" title="statement not covered" > if (!userData) {</span>
406
+ <span class="cstat-no" title="statement not covered" > throw new Error("El parámetro userData es requerido.");</span>
407
+ }
408
+ <span class="cstat-no" title="statement not covered" > if (typeof certificateInDevice !== "boolean") {</span>
409
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
410
+ "El parámetro certificateInDevice es requerido y debe ser un valor booleano."
411
+ );
412
+ }
413
+ &nbsp;
414
+ <span class="cstat-no" title="statement not covered" > if (userData?.verificationstatus?.id !== VERIFICATION_STATUS.APPROVED)</span>
415
+ <span class="cstat-no" title="statement not covered" > return STATUS_CERTIFICATE.request;</span>
416
+ <span class="cstat-no" title="statement not covered" > if (</span>
417
+ userData?.certificationId &amp;&amp;
418
+ !userData?.cangenerate &amp;&amp;
419
+ !userData?.requestscert?.pending &amp;&amp;
420
+ !certificateInDevice &amp;&amp;
421
+ userData?.certificatestatus !== STATUS_CERTIFICATE.revoque
422
+ )
423
+ <span class="cstat-no" title="statement not covered" > return STATUS_CERTIFICATE.certificate_another_device;</span>
424
+ &nbsp;
425
+ <span class="cstat-no" title="statement not covered" > if (userData?.requestscert?.pending &amp;&amp; userData?.certificationId)</span>
426
+ <span class="cstat-no" title="statement not covered" > return STATUS_CERTIFICATE.request_revoque;</span>
427
+ <span class="cstat-no" title="statement not covered" > if (</span>
428
+ !userData?.cangenerate &amp;&amp;
429
+ userData?.certificatestatus === STATUS_CERTIFICATE.revoque
430
+ )
431
+ <span class="cstat-no" title="statement not covered" > return STATUS_CERTIFICATE.revoque;</span>
432
+ &nbsp;
433
+ <span class="cstat-no" title="statement not covered" > if (!userData?.approvedUser) <span class="cstat-no" title="statement not covered" >return STATUS_CERTIFICATE.request;</span></span>
434
+ <span class="cstat-no" title="statement not covered" > if (userData?.cangenerate) <span class="cstat-no" title="statement not covered" >return STATUS_CERTIFICATE.generate;</span></span>
435
+ &nbsp;
436
+ <span class="cstat-no" title="statement not covered" > if (userData?.certificationId) <span class="cstat-no" title="statement not covered" >return STATUS_CERTIFICATE.current;</span></span>
437
+ &nbsp;
438
+ <span class="cstat-no" title="statement not covered" > return STATUS_CERTIFICATE.revoque;</span>
439
+ };
440
+ &nbsp;
441
+ const generateKeyPair = <span class="fstat-no" title="function not covered" >as</span>ync (
442
+ signAlg = <span class="branch-0 cbranch-no" title="branch not covered" >"RSASSA-PKCS1-v1_5",</span>
443
+ hashAlg = <span class="branch-0 cbranch-no" title="branch not covered" >"SHA-256"</span>
444
+ ) =&gt; {
445
+ <span class="cstat-no" title="statement not covered" > try {</span>
446
+ const crypto = <span class="cstat-no" title="statement not covered" >getCrypto();</span>
447
+ <span class="cstat-no" title="statement not covered" > if (!crypto) {</span>
448
+ <span class="cstat-no" title="statement not covered" > throw new Error("API criptográfica no disponible a través de pkijs.");</span>
449
+ }
450
+ &nbsp;
451
+ const keyPair = <span class="cstat-no" title="statement not covered" >await crypto.generateKey(</span>
452
+ {
453
+ name: signAlg,
454
+ modulusLength: 2048,
455
+ publicExponent: new Uint8Array([1, 0, 1]),
456
+ hash: { name: hashAlg },
457
+ },
458
+ true,
459
+ ["sign", "verify"]
460
+ );
461
+ &nbsp;
462
+ <span class="cstat-no" title="statement not covered" > return keyPair;</span>
463
+ } catch (error) {
464
+ <span class="cstat-no" title="statement not covered" > console.error("Error durante la generación del par de claves:", error);</span>
465
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
466
+ `Fallo en la generación del par de claves: ${error.message}`,
467
+ 0,
468
+ "KEY_PAIR_GENERATION_ERROR"
469
+ );
470
+ }
471
+ };
472
+ &nbsp;
473
+ const generateCSR = <span class="fstat-no" title="function not covered" >as</span>ync (keyPair, userData, hashAlg = <span class="branch-0 cbranch-no" title="branch not covered" >"SHA-256")</span> =&gt; {
474
+ <span class="cstat-no" title="statement not covered" > try {</span>
475
+ const { publicKey, privateKey } = <span class="cstat-no" title="statement not covered" >keyPair;</span>
476
+ &nbsp;
477
+ // 1. Validar los parámetros de entrada.
478
+ <span class="cstat-no" title="statement not covered" > if (!keyPair || !publicKey || !privateKey) {</span>
479
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
480
+ "Par de claves no válido. Es necesario un CryptoKeyPair."
481
+ );
482
+ }
483
+ <span class="cstat-no" title="statement not covered" > if (!userData || !userData.email) {</span>
484
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
485
+ "Datos de usuario incompletos. El correo electrónico es requerido."
486
+ );
487
+ }
488
+ &nbsp;
489
+ const pkcs10 = <span class="cstat-no" title="statement not covered" >new pkijs.CertificationRequest();</span>
490
+ <span class="cstat-no" title="statement not covered" > pkcs10.version = 0;</span>
491
+ &nbsp;
492
+ const subjectAttributes = <span class="cstat-no" title="statement not covered" >[</span>
493
+ {
494
+ type: "2.5.4.6", // OID para 'Country' (C)
495
+ value: new asn1js.PrintableString({ value: userData.country || "VE" }),
496
+ },
497
+ {
498
+ type: "2.5.4.3", // OID para 'Common Name' (CN)
499
+ value: new asn1js.Utf8String({ value: userData.commonName || "N/A" }),
500
+ },
501
+ {
502
+ type: "1.2.840.113549.1.9.1", // OID para 'E-mail' (E)
503
+ value: new asn1js.IA5String({ value: userData.email }),
504
+ },
505
+ // Puedes agregar más atributos aquí, como:
506
+ // {
507
+ // type: '2.5.4.8', // OID para 'State or Province' (ST)
508
+ // value: new asn1js.Utf8String({ value: userData.state || 'N/A' }),
509
+ // },
510
+ // {
511
+ // type: '2.5.4.7', // OID para 'Locality' (L)
512
+ // value: new asn1js.Utf8String({ value: userData.locality || 'N/A' }),
513
+ // },
514
+ ].filter(<span class="fstat-no" title="function not covered" >(a</span>ttr) =&gt; <span class="cstat-no" title="statement not covered" >attr.value.value)</span>; // Filtra atributos sin valor.
515
+ &nbsp;
516
+ // 3. Asignar los atributos al Subject.
517
+ <span class="cstat-no" title="statement not covered" > subjectAttributes.forEach(<span class="fstat-no" title="function not covered" >(a</span>ttr) =&gt;</span>
518
+ <span class="cstat-no" title="statement not covered" > pkcs10.subject.typesAndValues.push(new pkijs.AttributeTypeAndValue(attr))</span>
519
+ );
520
+ &nbsp;
521
+ // 4. Importar la clave pública y firmar la solicitud con la clave privada.
522
+ <span class="cstat-no" title="statement not covered" > await pkcs10.subjectPublicKeyInfo.importKey(publicKey);</span>
523
+ <span class="cstat-no" title="statement not covered" > await pkcs10.sign(privateKey, hashAlg);</span>
524
+ &nbsp;
525
+ // 5. Codificar el CSR para el envío.
526
+ const csr = <span class="cstat-no" title="statement not covered" >pkcs10.toSchema().toBER(false);</span>
527
+ &nbsp;
528
+ // 6. Retornar el CSR y el Subject.
529
+ <span class="cstat-no" title="statement not covered" > return {</span>
530
+ csr,
531
+ subject: pkcs10.subject,
532
+ };
533
+ } catch (error) {
534
+ // Manejo de errores centralizado.
535
+ <span class="cstat-no" title="statement not covered" > console.error("Error durante la generación del CSR:", error);</span>
536
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
537
+ `Fallo en la generación del CSR: ${error.message}`,
538
+ 0,
539
+ "CSR_GENERATION_ERROR"
540
+ );
541
+ }
542
+ };
543
+ &nbsp;
544
+ // Función para convertir ArrayBuffer a Base64
545
+ const arrayBufferToBase64 = <span class="fstat-no" title="function not covered" >(b</span>uffer) =&gt; {
546
+ const binary = <span class="cstat-no" title="statement not covered" >String.fromCharCode.apply(null, new Uint8Array(buffer));</span>
547
+ <span class="cstat-no" title="statement not covered" > return window.btoa(binary);</span>
548
+ };
549
+ &nbsp;
550
+ export async function <span class="fstat-no" title="function not covered" >exportPrivateKey(</span>key) {
551
+ const crypto = <span class="cstat-no" title="statement not covered" >getCrypto();</span>
552
+ const exported = <span class="cstat-no" title="statement not covered" >await crypto.exportKey("pkcs8", key);</span>
553
+ const exportablePrivateKey = <span class="cstat-no" title="statement not covered" >new Uint8Array(exported);</span>
554
+ <span class="cstat-no" title="statement not covered" > return arrayBufferToBase64(exportablePrivateKey);</span>
555
+ }
556
+ &nbsp;
557
+ export const helpers = {
558
+ getCertificateStatus,
559
+ generateKeyPair,
560
+ generateCSR,
561
+ exportPrivateKey,
562
+ arrayBufferToBase64,
563
+ };
564
+ &nbsp;</pre></td></tr></table></pre>
565
+
566
+ <div class='push'></div><!-- for sticky footer -->
567
+ </div><!-- /wrapper -->
568
+ <div class='footer quiet pad2 space-top1 center small'>
569
+ Code coverage generated by
570
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
571
+ at 2025-08-15T20:05:10.802Z
572
+ </div>
573
+ <script src="../../prettify.js"></script>
574
+ <script>
575
+ window.onload = function () {
576
+ prettyPrint();
577
+ };
578
+ </script>
579
+ <script src="../../sorter.js"></script>
580
+ <script src="../../block-navigation.js"></script>
581
+ </body>
582
+ </html>
583
+