emissions-api-sdk 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Client.js +69 -9
- package/dist/Constants.js +2 -1
- package/dist/coverage/clover.xml +72 -57
- package/dist/coverage/coverage-final.json +4 -4
- package/dist/coverage/lcov-report/index.html +18 -18
- package/dist/coverage/lcov-report/src/Client.ts.html +242 -50
- package/dist/coverage/lcov-report/src/Constants.ts.html +7 -4
- package/dist/coverage/lcov-report/src/api/Calculation.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/EconomicActivity.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Factor.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/FactorSets.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Fugitive.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Location.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Metadata.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Mobile.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/RealEstate.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Stationary.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/TransportationAndDistribution.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/TypeRecommender.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/Usage.ts.html +1 -1
- package/dist/coverage/lcov-report/src/api/index.html +1 -1
- package/dist/coverage/lcov-report/src/index.html +21 -21
- package/dist/coverage/lcov-report/src/request.ts.html +1 -1
- package/dist/coverage/lcov-report/src/utils.ts.html +5 -5
- package/dist/coverage/lcov-report/test/index.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/CommonRequest.ts.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/FactorRequest.ts.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/GenericCalculationRequest.ts.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/LocationRequest.ts.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/SearchRequest.ts.html +1 -1
- package/dist/coverage/lcov-report/test/mocks/index.html +1 -1
- package/dist/coverage/lcov-report/test/testUtils.ts.html +4 -4
- package/dist/coverage/lcov.info +161 -121
- package/dist/types/Client.d.ts +26 -0
- package/dist/types/Constants.d.ts +1 -0
- package/dist/types/interfaces/Config.d.ts +6 -0
- package/docs/reference.html +8 -2
- package/docs/searchindex.js +1 -1
- package/package.json +2 -2
- package/src/Client.ts +79 -15
- package/src/Constants.ts +1 -0
- package/src/interfaces/Config.ts +7 -0
- package/test/client.test.ts +93 -1
- package/test/tokenRefresh.test.ts +91 -1
- package/.secrets.baseline +0 -314
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">97.85% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>228/233</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">91.56% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>76/83</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">93.
|
|
40
|
+
<span class="strong">93.75% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>30/32</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">99.
|
|
47
|
+
<span class="strong">99.13% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>228/230</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="src"><a href="src/index.html">src</a></td>
|
|
83
|
-
<td data-value="95.
|
|
83
|
+
<td data-value="95.19" class="pic high">
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="95.
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="95.19" class="pct high">95.19%</td>
|
|
87
|
+
<td data-value="104" class="abs high">99/104</td>
|
|
88
|
+
<td data-value="91.42" class="pct high">91.42%</td>
|
|
89
|
+
<td data-value="70" class="abs high">64/70</td>
|
|
90
|
+
<td data-value="83.33" class="pct high">83.33%</td>
|
|
91
|
+
<td data-value="12" class="abs high">10/12</td>
|
|
92
|
+
<td data-value="98.01" class="pct high">98.01%</td>
|
|
93
|
+
<td data-value="101" class="abs high">99/101</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2026-04-
|
|
149
|
+
at 2026-04-28T12:54:24.682Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">93.84% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>61/65</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">92.64% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>63/68</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">80% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/10</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">96.82% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>61/63</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -314,7 +314,71 @@
|
|
|
314
314
|
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
315
|
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
316
|
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
|
|
318
382
|
<span class="cline-any cline-neutral"> </span>
|
|
319
383
|
<span class="cline-any cline-yes">5x</span>
|
|
320
384
|
<span class="cline-any cline-yes">5x</span>
|
|
@@ -337,23 +401,29 @@
|
|
|
337
401
|
<span class="cline-any cline-neutral"> </span>
|
|
338
402
|
<span class="cline-any cline-neutral"> </span>
|
|
339
403
|
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-
|
|
341
|
-
<span class="cline-any cline-yes">
|
|
342
|
-
<span class="cline-any cline-yes">
|
|
343
|
-
<span class="cline-any cline-yes">
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-yes">43x</span>
|
|
406
|
+
<span class="cline-any cline-yes">43x</span>
|
|
407
|
+
<span class="cline-any cline-yes">43x</span>
|
|
408
|
+
<span class="cline-any cline-yes">43x</span>
|
|
409
|
+
<span class="cline-any cline-yes">1x</span>
|
|
344
410
|
<span class="cline-any cline-yes">1x</span>
|
|
345
411
|
<span class="cline-any cline-yes">1x</span>
|
|
346
412
|
<span class="cline-any cline-neutral"> </span>
|
|
347
|
-
<span class="cline-any cline-yes">
|
|
348
|
-
<span class="cline-any cline-yes">
|
|
413
|
+
<span class="cline-any cline-yes">42x</span>
|
|
414
|
+
<span class="cline-any cline-yes">42x</span>
|
|
415
|
+
<span class="cline-any cline-yes">42x</span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-yes">43x</span>
|
|
419
|
+
<span class="cline-any cline-yes">43x</span>
|
|
420
|
+
<span class="cline-any cline-yes">43x</span>
|
|
421
|
+
<span class="cline-any cline-yes">43x</span>
|
|
422
|
+
<span class="cline-any cline-yes">43x</span>
|
|
423
|
+
<span class="cline-any cline-yes">43x</span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
349
425
|
<span class="cline-any cline-neutral"> </span>
|
|
350
426
|
<span class="cline-any cline-neutral"> </span>
|
|
351
|
-
<span class="cline-any cline-yes">37x</span>
|
|
352
|
-
<span class="cline-any cline-yes">37x</span>
|
|
353
|
-
<span class="cline-any cline-yes">37x</span>
|
|
354
|
-
<span class="cline-any cline-yes">37x</span>
|
|
355
|
-
<span class="cline-any cline-yes">37x</span>
|
|
356
|
-
<span class="cline-any cline-yes">37x</span>
|
|
357
427
|
<span class="cline-any cline-neutral"> </span>
|
|
358
428
|
<span class="cline-any cline-neutral"> </span>
|
|
359
429
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -391,29 +461,47 @@
|
|
|
391
461
|
<span class="cline-any cline-neutral"> </span>
|
|
392
462
|
<span class="cline-any cline-neutral"> </span>
|
|
393
463
|
<span class="cline-any cline-neutral"> </span>
|
|
394
|
-
<span class="cline-any cline-
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-yes">48x</span>
|
|
395
469
|
<span class="cline-any cline-yes">1x</span>
|
|
396
470
|
<span class="cline-any cline-neutral"> </span>
|
|
397
471
|
<span class="cline-any cline-neutral"> </span>
|
|
398
472
|
<span class="cline-any cline-neutral"> </span>
|
|
399
|
-
<span class="cline-any cline-yes">
|
|
473
|
+
<span class="cline-any cline-yes">47x</span>
|
|
400
474
|
<span class="cline-any cline-yes">1x</span>
|
|
401
475
|
<span class="cline-any cline-neutral"> </span>
|
|
402
476
|
<span class="cline-any cline-neutral"> </span>
|
|
403
477
|
<span class="cline-any cline-neutral"> </span>
|
|
404
|
-
<span class="cline-any cline-yes">
|
|
478
|
+
<span class="cline-any cline-yes">46x</span>
|
|
405
479
|
<span class="cline-any cline-yes">1x</span>
|
|
406
480
|
<span class="cline-any cline-neutral"> </span>
|
|
407
481
|
<span class="cline-any cline-neutral"> </span>
|
|
408
482
|
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-yes">45x</span>
|
|
484
|
+
<span class="cline-any cline-yes">1x</span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
409
486
|
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-yes">37x</span>
|
|
411
487
|
<span class="cline-any cline-neutral"> </span>
|
|
412
|
-
<span class="cline-any cline-yes">
|
|
488
|
+
<span class="cline-any cline-yes">44x</span>
|
|
489
|
+
<span class="cline-any cline-yes">1x</span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-yes">43x</span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-yes">43x</span>
|
|
413
497
|
<span class="cline-any cline-yes">1x</span>
|
|
414
498
|
<span class="cline-any cline-yes">1x</span>
|
|
499
|
+
<span class="cline-any cline-yes">42x</span>
|
|
500
|
+
<span class="cline-any cline-yes">6x</span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
502
|
<span class="cline-any cline-yes">36x</span>
|
|
416
|
-
<span class="cline-any cline-
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-yes">43x</span>
|
|
417
505
|
<span class="cline-any cline-neutral"> </span>
|
|
418
506
|
<span class="cline-any cline-neutral"> </span>
|
|
419
507
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -449,12 +537,12 @@
|
|
|
449
537
|
<span class="cline-any cline-neutral"> </span>
|
|
450
538
|
<span class="cline-any cline-neutral"> </span>
|
|
451
539
|
<span class="cline-any cline-neutral"> </span>
|
|
452
|
-
<span class="cline-any cline-yes">
|
|
540
|
+
<span class="cline-any cline-yes">77x</span>
|
|
453
541
|
<span class="cline-any cline-yes">1x</span>
|
|
454
542
|
<span class="cline-any cline-neutral"> </span>
|
|
455
543
|
<span class="cline-any cline-neutral"> </span>
|
|
456
544
|
<span class="cline-any cline-neutral"> </span>
|
|
457
|
-
<span class="cline-any cline-yes">
|
|
545
|
+
<span class="cline-any cline-yes">76x</span>
|
|
458
546
|
<span class="cline-any cline-neutral"> </span>
|
|
459
547
|
<span class="cline-any cline-neutral"> </span>
|
|
460
548
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -470,24 +558,32 @@
|
|
|
470
558
|
<span class="cline-any cline-neutral"> </span>
|
|
471
559
|
<span class="cline-any cline-neutral"> </span>
|
|
472
560
|
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-yes">6x</span>
|
|
562
|
+
<span class="cline-any cline-yes">5x</span>
|
|
563
|
+
<span class="cline-any cline-yes">5x</span>
|
|
564
|
+
<span class="cline-any cline-yes">3x</span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
566
|
<span class="cline-any cline-yes">3x</span>
|
|
474
567
|
<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
568
|
<span class="cline-any cline-neutral"> </span>
|
|
479
569
|
<span class="cline-any cline-neutral"> </span>
|
|
480
570
|
<span class="cline-any cline-neutral"> </span>
|
|
481
571
|
<span class="cline-any cline-neutral"> </span>
|
|
482
572
|
<span class="cline-any cline-neutral"> </span>
|
|
483
573
|
<span class="cline-any cline-yes">1x</span>
|
|
484
|
-
<span class="cline-any cline-yes">1x</span>
|
|
485
574
|
<span class="cline-any cline-neutral"> </span>
|
|
486
575
|
<span class="cline-any cline-neutral"> </span>
|
|
487
576
|
<span class="cline-any cline-neutral"> </span>
|
|
488
577
|
<span class="cline-any cline-neutral"> </span>
|
|
489
578
|
<span class="cline-any cline-neutral"> </span>
|
|
490
579
|
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-yes">3x</span>
|
|
581
|
+
<span class="cline-any cline-yes">3x</span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
587
|
<span class="cline-any cline-neutral"> </span>
|
|
492
588
|
<span class="cline-any cline-neutral"> </span>
|
|
493
589
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -500,7 +596,8 @@
|
|
|
500
596
|
<span class="cline-any cline-neutral"> </span>
|
|
501
597
|
<span class="cline-any cline-neutral"> </span>
|
|
502
598
|
<span class="cline-any cline-neutral"> </span>
|
|
503
|
-
<span class="cline-any cline-
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-yes">4x</span>
|
|
504
601
|
<span class="cline-any cline-neutral"> </span>
|
|
505
602
|
<span class="cline-any cline-neutral"> </span>
|
|
506
603
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -565,16 +662,48 @@
|
|
|
565
662
|
<span class="cline-any cline-yes">4x</span>
|
|
566
663
|
<span class="cline-any cline-yes">4x</span>
|
|
567
664
|
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-yes">8x</span>
|
|
685
|
+
<span class="cline-any cline-yes">8x</span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-yes">8x</span>
|
|
694
|
+
<span class="cline-any cline-yes">8x</span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
696
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import axios from "axios";
|
|
569
697
|
import { ClientConfig } from "./interfaces/Config";
|
|
570
698
|
import { findExpiryTime } from "./utils";
|
|
571
|
-
import { API_DOMAIN, TOKEN_GENERATION_API, CLIENT_SOURCE_EXCEL, CLIENT_SOURCE_SDK } from "./Constants";
|
|
699
|
+
import { API_DOMAIN, TOKEN_GENERATION_API, PAT_TOKEN_EXCHANGE_API, CLIENT_SOURCE_EXCEL, CLIENT_SOURCE_SDK } from "./Constants";
|
|
572
700
|
|
|
573
701
|
export class Client {
|
|
574
702
|
private static instance: Client | null = null;
|
|
575
703
|
|
|
576
704
|
private token: string;
|
|
577
705
|
private readonly apiKey: string;
|
|
706
|
+
private readonly patToken: string;
|
|
578
707
|
private readonly clientId: string;
|
|
579
708
|
private readonly orgId: string;
|
|
580
709
|
private expiresAt: number;
|
|
@@ -588,28 +717,30 @@ export class Client {
|
|
|
588
717
|
config: ClientConfig,
|
|
589
718
|
isUserProvidedToken = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
|
|
590
719
|
) {
|
|
591
|
-
const { apiKey="", clientId, orgId="", host, authUrl, isExcelAddIn=false } = config;
|
|
720
|
+
const { apiKey="", patToken="", clientId, orgId="", host, authUrl, isExcelAddIn=false } = config;
|
|
592
721
|
this.token = token;
|
|
593
722
|
this.clientId = clientId;
|
|
594
723
|
if (isUserProvidedToken) {
|
|
595
724
|
this.apiKey = "";
|
|
725
|
+
this.patToken = "";
|
|
596
726
|
this.orgId = "";
|
|
597
727
|
} else {
|
|
598
728
|
this.apiKey = apiKey;
|
|
729
|
+
this.patToken = patToken;
|
|
599
730
|
this.orgId = orgId;
|
|
600
731
|
}
|
|
601
732
|
|
|
602
733
|
const exp = findExpiryTime(token);
|
|
603
734
|
this.expiresAt = exp;
|
|
604
735
|
this.domain = <span class="branch-0 cbranch-no" title="branch not covered" >host </span>?? API_DOMAIN;
|
|
605
|
-
this.tokenDomain =
|
|
736
|
+
this.tokenDomain = authUrl ?? (patToken ? PAT_TOKEN_EXCHANGE_API : TOKEN_GENERATION_API);
|
|
606
737
|
this.isUserProvidedToken = isUserProvidedToken;
|
|
607
738
|
this.clientSource = isExcelAddIn === true ? <span class="branch-0 cbranch-no" title="branch not covered" >CLIENT_SOURCE_EXCEL </span>: CLIENT_SOURCE_SDK;
|
|
608
739
|
}
|
|
609
740
|
|
|
610
741
|
/**
|
|
611
742
|
* Initializes and returns a Client instance with the provided configuration.
|
|
612
|
-
*
|
|
743
|
+
*
|
|
613
744
|
* @static
|
|
614
745
|
* @param {ClientConfig} config - The client configuration object
|
|
615
746
|
* @return {Promise<void>} A promise that resolves when the client is initialized
|
|
@@ -617,7 +748,8 @@ export class Client {
|
|
|
617
748
|
* - custom "host" is provided without "authUrl"
|
|
618
749
|
* - token is provided without "clientId"
|
|
619
750
|
* - apiKey is provided without "clientId" or "orgId"
|
|
620
|
-
*
|
|
751
|
+
* - patToken is provided without "clientId" or with "orgId"
|
|
752
|
+
*
|
|
621
753
|
* @example
|
|
622
754
|
* // Initialize with authentication URL
|
|
623
755
|
* await Client.getClient({
|
|
@@ -626,19 +758,25 @@ export class Client {
|
|
|
626
758
|
* clientId: 'client123',
|
|
627
759
|
* orgId: 'org456'
|
|
628
760
|
* });
|
|
629
|
-
*
|
|
761
|
+
*
|
|
630
762
|
* // Initialize with existing token
|
|
631
763
|
* await Client.getClient({
|
|
632
764
|
* token: 'existing-jwt-token',
|
|
633
765
|
* clientId: 'client123'
|
|
634
766
|
* });
|
|
635
|
-
*
|
|
767
|
+
*
|
|
636
768
|
* // Initialize with API key
|
|
637
769
|
* await Client.getClient({
|
|
638
770
|
* apiKey: 'your-api-key',
|
|
639
771
|
* clientId: 'client123',
|
|
640
772
|
* orgId: 'org456'
|
|
641
773
|
* });
|
|
774
|
+
*
|
|
775
|
+
* // Initialize with PAT token
|
|
776
|
+
* await Client.getClient({
|
|
777
|
+
* patToken: 'your-personal-access-token',
|
|
778
|
+
* clientId: 'client123'
|
|
779
|
+
* });
|
|
642
780
|
*/
|
|
643
781
|
|
|
644
782
|
public static async getClient(config: ClientConfig): Promise<void> {
|
|
@@ -657,14 +795,28 @@ export class Client {
|
|
|
657
795
|
'If apiKey is provided , "clientId" and "OrgId" must also be provided.'
|
|
658
796
|
);
|
|
659
797
|
}
|
|
798
|
+
if(config.patToken && !config.clientId){
|
|
799
|
+
throw new Error(
|
|
800
|
+
'If patToken is provided, "clientId" must also be provided.'
|
|
801
|
+
);
|
|
802
|
+
}
|
|
803
|
+
if(config.patToken && config.orgId){
|
|
804
|
+
throw new Error(
|
|
805
|
+
'orgId should not be provided when using patToken.'
|
|
806
|
+
);
|
|
807
|
+
}
|
|
660
808
|
let token: string;
|
|
661
809
|
let isUserProvidedToken = false;
|
|
662
810
|
|
|
663
811
|
if (config.token && config.clientId) {
|
|
664
812
|
token = config.token;
|
|
665
813
|
isUserProvidedToken = true;
|
|
666
|
-
} else
|
|
667
|
-
|
|
814
|
+
} else if (config.patToken && config.clientId) {
|
|
815
|
+
token = await Client.requestTokenFromPAT(config);
|
|
816
|
+
} else {
|
|
817
|
+
token = await Client.requestToken(config);
|
|
818
|
+
}
|
|
819
|
+
Client.instance = new Client(token, config, isUserProvidedToken);
|
|
668
820
|
}
|
|
669
821
|
|
|
670
822
|
/**
|
|
@@ -725,12 +877,21 @@ export class Client {
|
|
|
725
877
|
const now = Math.floor(Date.now() / 1000);
|
|
726
878
|
if (this.expiresAt - now < 60) {
|
|
727
879
|
console.log("[SDK] Refreshing token...");
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
880
|
+
let token: string;
|
|
881
|
+
if (this.patToken) {
|
|
882
|
+
token = await Client.requestTokenFromPAT({
|
|
883
|
+
patToken: this.patToken,
|
|
884
|
+
clientId: this.clientId,
|
|
885
|
+
authUrl: this.tokenDomain,
|
|
886
|
+
});
|
|
887
|
+
} else {
|
|
888
|
+
token = await Client.requestToken({
|
|
889
|
+
apiKey: this.apiKey,
|
|
890
|
+
clientId: this.clientId,
|
|
891
|
+
orgId: this.orgId,
|
|
892
|
+
authUrl: this.tokenDomain,
|
|
893
|
+
});
|
|
894
|
+
}
|
|
734
895
|
this.token = token;
|
|
735
896
|
this.expiresAt = findExpiryTime(token);
|
|
736
897
|
}
|
|
@@ -816,6 +977,37 @@ export class Client {
|
|
|
816
977
|
<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
978
|
return String(res.data).trim();
|
|
818
979
|
}
|
|
980
|
+
|
|
981
|
+
/**
|
|
982
|
+
* Requests an authentication token by exchanging a Personal Access Token (PAT).
|
|
983
|
+
*
|
|
984
|
+
* @private
|
|
985
|
+
* @static
|
|
986
|
+
* @param {ClientConfig} config - The client configuration containing PAT and client details
|
|
987
|
+
* @return {Promise<string>} A promise that resolves to the authentication token string
|
|
988
|
+
* @throws {Error} Throws an error if the token response is empty
|
|
989
|
+
*
|
|
990
|
+
* @example
|
|
991
|
+
* // Internal usage within the Client class
|
|
992
|
+
* const token = await Client.requestTokenFromPAT({
|
|
993
|
+
* patToken: 'your-personal-access-token',
|
|
994
|
+
* clientId: 'client123',
|
|
995
|
+
* authUrl: 'https://custom-auth.example.com/exchange'
|
|
996
|
+
* });
|
|
997
|
+
*/
|
|
998
|
+
private static async requestTokenFromPAT(config: ClientConfig): Promise<string> {
|
|
999
|
+
const tokenUrl = config.authUrl ?? PAT_TOKEN_EXCHANGE_API;
|
|
1000
|
+
const res = await axios.post(tokenUrl, null, {
|
|
1001
|
+
headers: {
|
|
1002
|
+
"X-IBM-Client-Id": `saascore-${config.clientId}`,
|
|
1003
|
+
"X-IBM-Envizi-Pat": config.patToken,
|
|
1004
|
+
accept: "application/json",
|
|
1005
|
+
}
|
|
1006
|
+
});
|
|
1007
|
+
|
|
1008
|
+
<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>
|
|
1009
|
+
return String(res.data).trim();
|
|
1010
|
+
}
|
|
819
1011
|
}</pre></td></tr></table></pre>
|
|
820
1012
|
|
|
821
1013
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -823,7 +1015,7 @@ export class Client {
|
|
|
823
1015
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
824
1016
|
Code coverage generated by
|
|
825
1017
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
826
|
-
at 2026-04-
|
|
1018
|
+
at 2026-04-28T12:54:24.682Z
|
|
827
1019
|
</div>
|
|
828
1020
|
<script src="../prettify.js"></script>
|
|
829
1021
|
<script>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>24/24</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>24/24</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -89,7 +89,9 @@
|
|
|
89
89
|
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
90
|
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
91
|
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
|
|
94
|
+
<span class="cline-any cline-yes">5x</span>
|
|
93
95
|
<span class="cline-any cline-yes">5x</span>
|
|
94
96
|
<span class="cline-any cline-yes">5x</span>
|
|
95
97
|
<span class="cline-any cline-yes">5x</span>
|
|
@@ -117,6 +119,7 @@
|
|
|
117
119
|
<span class="cline-any cline-yes">5x</span>
|
|
118
120
|
<span class="cline-any cline-yes">5x</span></td><td class="text"><pre class="prettyprint lang-js">export const API_DOMAIN = "https://api.ibm.com/ghgemissions/run";
|
|
119
121
|
export const TOKEN_GENERATION_API = "https://api.ibm.com/saascore/run/authentication-retrieve/api-key";
|
|
122
|
+
export const PAT_TOKEN_EXCHANGE_API = "https://api.ibm.com/saascore/run/envizi-auth/exchange";
|
|
120
123
|
export const MOBILE_API_PATH = "/v3/carbon/mobile";
|
|
121
124
|
export const LOCATION_API_PATH = "/v3/carbon/location";
|
|
122
125
|
export const FUGITIVE_API_PATH = "/v3/carbon/fugitive";
|
|
@@ -148,7 +151,7 @@ export const CLIENT_SOURCE_SDK = "node-sdk";</pre></td></tr></table></pre>
|
|
|
148
151
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
149
152
|
Code coverage generated by
|
|
150
153
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
151
|
-
at 2026-04-
|
|
154
|
+
at 2026-04-28T12:54:24.682Z
|
|
152
155
|
</div>
|
|
153
156
|
<script src="../prettify.js"></script>
|
|
154
157
|
<script>
|
|
@@ -211,7 +211,7 @@ export async function calculate(
|
|
|
211
211
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
212
212
|
Code coverage generated by
|
|
213
213
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
214
|
-
at 2026-04-
|
|
214
|
+
at 2026-04-28T12:54:24.682Z
|
|
215
215
|
</div>
|
|
216
216
|
<script src="../../prettify.js"></script>
|
|
217
217
|
<script>
|
|
@@ -205,7 +205,7 @@ export async function calculate(
|
|
|
205
205
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
206
206
|
Code coverage generated by
|
|
207
207
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
208
|
-
at 2026-04-
|
|
208
|
+
at 2026-04-28T12:54:24.682Z
|
|
209
209
|
</div>
|
|
210
210
|
<script src="../../prettify.js"></script>
|
|
211
211
|
<script>
|