emissions-api-sdk 1.0.1 → 1.0.3

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 (115) hide show
  1. package/README.md +9 -0
  2. package/dist/Constants.js +2 -1
  3. package/dist/api/Calculation.js +4 -4
  4. package/dist/api/Factor.js +7 -7
  5. package/dist/api/FactorSets.js +1 -1
  6. package/dist/api/Fugitive.js +4 -4
  7. package/dist/api/Location.js +4 -4
  8. package/dist/api/Mobile.js +4 -6
  9. package/dist/api/Stationary.js +4 -4
  10. package/dist/api/TransportationAndDistribution.js +5 -5
  11. package/dist/api/Usage.js +26 -0
  12. package/dist/coverage/clover.xml +346 -0
  13. package/dist/coverage/coverage-final.json +20 -0
  14. package/dist/coverage/lcov-report/base.css +224 -0
  15. package/dist/coverage/lcov-report/block-navigation.js +87 -0
  16. package/dist/coverage/lcov-report/favicon.png +0 -0
  17. package/dist/coverage/lcov-report/index.html +161 -0
  18. package/dist/coverage/lcov-report/prettify.css +1 -0
  19. package/dist/coverage/lcov-report/prettify.js +2 -0
  20. package/dist/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  21. package/dist/coverage/lcov-report/sorter.js +210 -0
  22. package/dist/coverage/lcov-report/src/Client.ts.html +838 -0
  23. package/dist/coverage/lcov-report/src/Constants.ts.html +214 -0
  24. package/dist/coverage/lcov-report/src/api/Calculation.ts.html +436 -0
  25. package/dist/coverage/lcov-report/src/api/Factor.ts.html +622 -0
  26. package/dist/coverage/lcov-report/src/api/FactorSets.ts.html +157 -0
  27. package/dist/coverage/lcov-report/src/api/Fugitive.ts.html +436 -0
  28. package/dist/coverage/lcov-report/src/api/Location.ts.html +433 -0
  29. package/dist/coverage/lcov-report/src/api/Mobile.ts.html +448 -0
  30. package/dist/coverage/lcov-report/src/api/Stationary.ts.html +442 -0
  31. package/dist/coverage/lcov-report/src/api/TransportationAndDistribution.ts.html +436 -0
  32. package/dist/coverage/lcov-report/src/api/Usage.ts.html +160 -0
  33. package/dist/coverage/lcov-report/src/api/index.html +236 -0
  34. package/dist/coverage/lcov-report/src/index.html +161 -0
  35. package/dist/coverage/lcov-report/src/request.ts.html +235 -0
  36. package/dist/coverage/lcov-report/src/utils.ts.html +139 -0
  37. package/dist/coverage/lcov-report/test/index.html +116 -0
  38. package/dist/coverage/lcov-report/test/mocks/CommonRequest.ts.html +142 -0
  39. package/dist/coverage/lcov-report/test/mocks/FactorRequest.ts.html +133 -0
  40. package/dist/coverage/lcov-report/test/mocks/GenericCalculationRequest.ts.html +142 -0
  41. package/dist/coverage/lcov-report/test/mocks/LocationRequest.ts.html +139 -0
  42. package/dist/coverage/lcov-report/test/mocks/SearchRequest.ts.html +142 -0
  43. package/dist/coverage/lcov-report/test/mocks/index.html +176 -0
  44. package/dist/coverage/lcov-report/test/testUtils.ts.html +97 -0
  45. package/dist/coverage/lcov.info +578 -0
  46. package/dist/index.js +2 -1
  47. package/dist/interfaces/response/AreaResponse.js +2 -0
  48. package/dist/interfaces/response/EmissionResponse.js +2 -0
  49. package/dist/interfaces/response/EmissionResponseWithDetails.js +2 -0
  50. package/dist/interfaces/response/FactorResponse.js +2 -0
  51. package/dist/interfaces/response/FactorSetResponse.js +2 -0
  52. package/dist/interfaces/response/SearchResponse.js +2 -0
  53. package/dist/interfaces/response/TypeResponse.js +2 -0
  54. package/dist/interfaces/response/UnitResponse.js +2 -0
  55. package/dist/interfaces/response/UsageResponse.js +5 -0
  56. package/dist/types/Constants.d.ts +1 -0
  57. package/dist/types/api/Calculation.d.ts +13 -8
  58. package/dist/types/api/Factor.d.ts +18 -13
  59. package/dist/types/api/FactorSets.d.ts +3 -2
  60. package/dist/types/api/Fugitive.d.ts +13 -8
  61. package/dist/types/api/Location.d.ts +13 -8
  62. package/dist/types/api/Mobile.d.ts +13 -10
  63. package/dist/types/api/Stationary.d.ts +13 -8
  64. package/dist/types/api/TransportationAndDistribution.d.ts +14 -9
  65. package/dist/types/api/Usage.d.ts +13 -0
  66. package/dist/types/index.d.ts +10 -0
  67. package/dist/types/interfaces/response/AreaResponse.d.ts +20 -0
  68. package/dist/types/interfaces/response/EmissionResponse.d.ts +31 -0
  69. package/dist/types/interfaces/response/EmissionResponseWithDetails.d.ts +144 -0
  70. package/dist/types/interfaces/response/FactorResponse.d.ts +53 -0
  71. package/dist/types/interfaces/response/FactorSetResponse.d.ts +38 -0
  72. package/dist/types/interfaces/response/SearchResponse.d.ts +41 -0
  73. package/dist/types/interfaces/response/TypeResponse.d.ts +7 -0
  74. package/dist/types/interfaces/response/UnitResponse.d.ts +16 -0
  75. package/dist/types/interfaces/response/UsageResponse.d.ts +17 -0
  76. package/docs/_sources/index.rst.txt +1 -0
  77. package/docs/_sources/reference.rst.txt +6 -0
  78. package/docs/_sources/troubleshooting.rst.txt +486 -0
  79. package/docs/authentication.html +1 -0
  80. package/docs/client.html +1 -0
  81. package/docs/genindex.html +5 -0
  82. package/docs/getting_started.html +1 -0
  83. package/docs/index.html +15 -0
  84. package/docs/objects.inv +0 -0
  85. package/docs/reference.html +71 -35
  86. package/docs/sdk.html +1 -0
  87. package/docs/search.html +1 -0
  88. package/docs/searchindex.js +1 -1
  89. package/docs/troubleshooting.html +777 -0
  90. package/package.json +1 -1
  91. package/sphinx-build/requirements.txt +5 -0
  92. package/sphinx-build/source/index.rst +1 -0
  93. package/sphinx-build/source/reference.rst +6 -0
  94. package/sphinx-build/source/troubleshooting.rst +486 -0
  95. package/src/Constants.ts +2 -0
  96. package/src/api/Calculation.ts +19 -14
  97. package/src/api/Factor.ts +27 -22
  98. package/src/api/FactorSets.ts +4 -3
  99. package/src/api/Fugitive.ts +19 -14
  100. package/src/api/Location.ts +20 -15
  101. package/src/api/Mobile.ts +19 -16
  102. package/src/api/Stationary.ts +19 -14
  103. package/src/api/TransportationAndDistribution.ts +21 -16
  104. package/src/api/Usage.ts +26 -0
  105. package/src/index.ts +35 -1
  106. package/src/interfaces/response/AreaResponse.ts +25 -0
  107. package/src/interfaces/response/EmissionResponse.ts +44 -0
  108. package/src/interfaces/response/EmissionResponseWithDetails.ts +183 -0
  109. package/src/interfaces/response/FactorResponse.ts +78 -0
  110. package/src/interfaces/response/FactorSetResponse.ts +52 -0
  111. package/src/interfaces/response/SearchResponse.ts +52 -0
  112. package/src/interfaces/response/TypeResponse.ts +7 -0
  113. package/src/interfaces/response/UnitResponse.ts +17 -0
  114. package/src/interfaces/response/UsageResponse.ts +23 -0
  115. package/test/apiTest.test.ts +35 -4
@@ -0,0 +1,838 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/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> Client.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">94% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>47/50</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">88.88% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>40/45</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">77.77% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>7/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">95.91% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>47/49</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>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">4x</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-yes">4x</span>
320
+ <span class="cline-any cline-yes">4x</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">4x</span>
323
+ <span class="cline-any cline-yes">4x</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&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-yes">38x</span>
341
+ <span class="cline-any cline-yes">38x</span>
342
+ <span class="cline-any cline-yes">38x</span>
343
+ <span class="cline-any cline-yes">38x</span>
344
+ <span class="cline-any cline-yes">1x</span>
345
+ <span class="cline-any cline-yes">1x</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-yes">37x</span>
348
+ <span class="cline-any cline-yes">37x</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-yes">38x</span>
352
+ <span class="cline-any cline-yes">38x</span>
353
+ <span class="cline-any cline-yes">38x</span>
354
+ <span class="cline-any cline-yes">38x</span>
355
+ <span class="cline-any cline-yes">38x</span>
356
+ <span class="cline-any cline-yes">38x</span>
357
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&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-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</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-yes">41x</span>
395
+ <span class="cline-any cline-yes">1x</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>
399
+ <span class="cline-any cline-yes">40x</span>
400
+ <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-yes">39x</span>
405
+ <span class="cline-any cline-yes">1x</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-yes">38x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-yes">38x</span>
413
+ <span class="cline-any cline-yes">1x</span>
414
+ <span class="cline-any cline-yes">1x</span>
415
+ <span class="cline-any cline-yes">37x</span>
416
+ <span class="cline-any cline-yes">38x</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-yes">68x</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-yes">73x</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-yes">72x</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-yes">3x</span>
474
+ <span class="cline-any cline-yes">2x</span>
475
+ <span class="cline-any cline-yes">2x</span>
476
+ <span class="cline-any cline-yes">1x</span>
477
+ <span class="cline-any cline-yes">1x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-yes">1x</span>
484
+ <span class="cline-any cline-yes">1x</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-yes">2x</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-yes">4x</span>
554
+ <span class="cline-any cline-yes">4x</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-yes">4x</span>
566
+ <span class="cline-any cline-yes">4x</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import axios from "axios";
569
+ import { ClientConfig } from "./interfaces/Config";
570
+ import { findExpiryTime } from "./utils";
571
+ import { API_DOMAIN, TOKEN_GENERATION_API, CLIENT_SOURCE_EXCEL, CLIENT_SOURCE_SDK } from "./Constants";
572
+ &nbsp;
573
+ export class Client {
574
+ private static instance: Client | null = null;
575
+ &nbsp;
576
+ private token: string;
577
+ private readonly apiKey: string;
578
+ private readonly clientId: string;
579
+ private readonly orgId: string;
580
+ private expiresAt: number;
581
+ private readonly domain: string;
582
+ private readonly tokenDomain: string;
583
+ private readonly isUserProvidedToken: boolean;
584
+ private readonly clientSource: string;
585
+ &nbsp;
586
+ private constructor(
587
+ token: string,
588
+ config: ClientConfig,
589
+ isUserProvidedToken = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
590
+ ) {
591
+ const { apiKey="", clientId, orgId="", host, authUrl, isExcelAddIn=false } = config;
592
+ this.token = token;
593
+ this.clientId = clientId;
594
+ if (isUserProvidedToken) {
595
+ this.apiKey = "";
596
+ this.orgId = "";
597
+ } else {
598
+ this.apiKey = apiKey;
599
+ this.orgId = orgId;
600
+ }
601
+ &nbsp;
602
+ const exp = findExpiryTime(token);
603
+ this.expiresAt = exp;
604
+ this.domain = <span class="branch-0 cbranch-no" title="branch not covered" >host </span>?? API_DOMAIN;
605
+ this.tokenDomain = <span class="branch-0 cbranch-no" title="branch not covered" >authUrl </span>?? TOKEN_GENERATION_API;
606
+ this.isUserProvidedToken = isUserProvidedToken;
607
+ this.clientSource = isExcelAddIn === true ? <span class="branch-0 cbranch-no" title="branch not covered" >CLIENT_SOURCE_EXCEL </span>: CLIENT_SOURCE_SDK;
608
+ }
609
+ &nbsp;
610
+ /**
611
+ * Initializes and returns a Client instance with the provided configuration.
612
+ *
613
+ * @static
614
+ * @param {ClientConfig} config - The client configuration object
615
+ * @return {Promise&lt;void&gt;} A promise that resolves when the client is initialized
616
+ * @throws {Error} Throws an error if:
617
+ * - custom "host" is provided without "authUrl"
618
+ * - token is provided without "clientId"
619
+ * - apiKey is provided without "clientId" or "orgId"
620
+ *
621
+ * @example
622
+ * // Initialize with authentication URL
623
+ * await Client.getClient({
624
+ * host: 'https://api.example.com',
625
+ * authUrl: 'https://auth.example.com',
626
+ * clientId: 'client123',
627
+ * orgId: 'org456'
628
+ * });
629
+ *
630
+ * // Initialize with existing token
631
+ * await Client.getClient({
632
+ * token: 'existing-jwt-token',
633
+ * clientId: 'client123'
634
+ * });
635
+ *
636
+ * // Initialize with API key
637
+ * await Client.getClient({
638
+ * apiKey: 'your-api-key',
639
+ * clientId: 'client123',
640
+ * orgId: 'org456'
641
+ * });
642
+ */
643
+ &nbsp;
644
+ public static async getClient(config: ClientConfig): Promise&lt;void&gt; {
645
+ if (config.host &amp;&amp; !config.authUrl) {
646
+ throw new Error(
647
+ 'If custom "host" is provided, "authUrl" must also be provided.'
648
+ );
649
+ }
650
+ if (config.token &amp;&amp; !config.clientId) {
651
+ throw new Error(
652
+ 'If token is provided directly, "clientId" must also be provided.'
653
+ );
654
+ }
655
+ if(config.apiKey &amp;&amp; (!config.orgId || !config.clientId)){
656
+ throw new Error(
657
+ 'If apiKey is provided , "clientId" and "OrgId" must also be provided.'
658
+ );
659
+ }
660
+ let token: string;
661
+ let isUserProvidedToken = false;
662
+ &nbsp;
663
+ if (config.token &amp;&amp; config.clientId) {
664
+ token = config.token;
665
+ isUserProvidedToken = true;
666
+ } else token = await Client.requestToken(config);
667
+ Client.instance = new Client(token, config,isUserProvidedToken);
668
+ }
669
+ &nbsp;
670
+ /**
671
+ * Returns the domain URL configured for the client.
672
+ *
673
+ * @return {string} The domain URL string
674
+ *
675
+ * @example
676
+ * const client = Client.getInstance();
677
+ * const apiDomain = client.getDomain();
678
+ * console.log(apiDomain); // e.g., 'https://api.example.com'
679
+ */
680
+ public getDomain(): string {
681
+ return this.domain;
682
+ }
683
+ &nbsp;
684
+ /**
685
+ * Returns the singleton instance of the Client.
686
+ *
687
+ * @static
688
+ * @return {Client} The singleton Client instance
689
+ * @throws {Error} Throws an error if the Client has not been initialized with getClient()
690
+ *
691
+ * @example
692
+ * // First initialize the client
693
+ * await Client.getClient({
694
+ * clientId: 'client123',
695
+ * orgId: 'org456'
696
+ * });
697
+ *
698
+ * // Then get the instance
699
+ * const client = Client.getInstance();
700
+ * // Use the client...
701
+ */
702
+ public static getInstance(): Client {
703
+ if (!Client.instance) {
704
+ throw new Error(
705
+ "Client is not initialized. Call Client.getClient() first."
706
+ );
707
+ }
708
+ return Client.instance;
709
+ }
710
+ &nbsp;
711
+ /**
712
+ * Refreshes the authentication token if it's about to expire.
713
+ * Only refreshes if the token was not provided by the user and is expiring within 60 seconds.
714
+ *
715
+ * @return {Promise&lt;void&gt;} A promise that resolves when the token refresh is complete
716
+ *
717
+ * @example
718
+ * const client = Client.getInstance();
719
+ * // Ensure token is fresh before making API requests
720
+ * await client.refreshToken();
721
+ * // Proceed with API requests...
722
+ */
723
+ public async refreshToken(): Promise&lt;void&gt; {
724
+ if (!this.isUserProvidedToken) {
725
+ const now = Math.floor(Date.now() / 1000);
726
+ if (this.expiresAt - now &lt; 60) {
727
+ console.log("[SDK] Refreshing token...");
728
+ const token = await Client.requestToken({
729
+ apiKey: this.apiKey,
730
+ clientId: this.clientId,
731
+ orgId: this.orgId,
732
+ authUrl: this.tokenDomain,
733
+ });
734
+ this.token = token;
735
+ this.expiresAt = findExpiryTime(token);
736
+ }
737
+ }
738
+ }
739
+ &nbsp;
740
+ /**
741
+ * Returns the authorization header object with the Bearer token.
742
+ *
743
+ * @return {Record&lt;string, string&gt;} An object containing the Authorization header with the Bearer token
744
+ *
745
+ * @example
746
+ * const client = Client.getInstance();
747
+ * const headers = {
748
+ * 'Content-Type': 'application/json',
749
+ * ...client.getAuthHeader()
750
+ * };
751
+ * // headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer token...' }
752
+ */
753
+ public getAuthHeader(): Record&lt;string, string&gt; {
754
+ return { Authorization: `Bearer ${this.token}` };
755
+ }
756
+
757
+ /**
758
+ * Returns the client ID configured for this client instance.
759
+ *
760
+ * @return {string} The client ID string
761
+ *
762
+ * @example
763
+ * const client = Client.getInstance();
764
+ * const clientId = client.getClientId();
765
+ * console.log(clientId); // e.g., 'client123'
766
+ */
767
+ public <span class="fstat-no" title="function not covered" >getClientId(</span>): string {
768
+ <span class="cstat-no" title="statement not covered" > return this.clientId;</span>
769
+ }
770
+ &nbsp;
771
+ /**
772
+ * Returns the client source identifier for this client instance.
773
+ *
774
+ * @return {string} The client source string
775
+ *
776
+ * @example
777
+ * const client = Client.getInstance();
778
+ * const source = client.getClientSource();
779
+ * console.log(source); // e.g., 'web', 'mobile', 'sdk'
780
+ */
781
+ public <span class="fstat-no" title="function not covered" >getClientSource(</span>) : string {
782
+ <span class="cstat-no" title="statement not covered" > return this.clientSource;</span>
783
+ }
784
+ &nbsp;
785
+ /**
786
+ * Requests an authentication token from the token generation API.
787
+ *
788
+ * @private
789
+ * @static
790
+ * @param {ClientConfig} config - The client configuration containing authentication details
791
+ * @return {Promise&lt;string&gt;} A promise that resolves to the authentication token string
792
+ * @throws {Error} Throws an error if the token response is empty
793
+ *
794
+ * @example
795
+ * // Internal usage within the Client class
796
+ * const token = await Client.requestToken({
797
+ * apiKey: 'your-api-key',
798
+ * clientId: 'client123',
799
+ * orgId: 'org456',
800
+ * authUrl: 'https://custom-auth.example.com/token'
801
+ * });
802
+ */
803
+ private static async requestToken(config: ClientConfig): Promise&lt;string&gt; {
804
+ const tokenUrl = config.authUrl ?? TOKEN_GENERATION_API;
805
+ const res = await axios.get(tokenUrl, {
806
+ headers: {
807
+ "X-Api-Key": config.apiKey,
808
+ "X-IBM-Client-Id": `saascore-${config.clientId}`,
809
+ accept: "application/json",
810
+ },
811
+ params: {
812
+ orgId: config.orgId
813
+ }
814
+ });
815
+ &nbsp;
816
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.data) <span class="cstat-no" title="statement not covered" >throw new Error("Token response is empty");</span>
817
+ return String(res.data).trim();
818
+ }
819
+ }</pre></td></tr></table></pre>
820
+
821
+ <div class='push'></div><!-- for sticky footer -->
822
+ </div><!-- /wrapper -->
823
+ <div class='footer quiet pad2 space-top1 center small'>
824
+ Code coverage generated by
825
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
826
+ at 2025-12-23T04:53:24.226Z
827
+ </div>
828
+ <script src="../prettify.js"></script>
829
+ <script>
830
+ window.onload = function () {
831
+ prettyPrint();
832
+ };
833
+ </script>
834
+ <script src="../sorter.js"></script>
835
+ <script src="../block-navigation.js"></script>
836
+ </body>
837
+ </html>
838
+