emissions-api-sdk 1.0.9 → 1.0.11

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 (46) hide show
  1. package/README.md +18 -6
  2. package/dist/Client.js +69 -9
  3. package/dist/Constants.js +3 -2
  4. package/dist/coverage/clover.xml +72 -57
  5. package/dist/coverage/coverage-final.json +4 -4
  6. package/dist/coverage/lcov-report/index.html +18 -18
  7. package/dist/coverage/lcov-report/src/Client.ts.html +242 -50
  8. package/dist/coverage/lcov-report/src/Constants.ts.html +8 -5
  9. package/dist/coverage/lcov-report/src/api/Calculation.ts.html +1 -1
  10. package/dist/coverage/lcov-report/src/api/EconomicActivity.ts.html +1 -1
  11. package/dist/coverage/lcov-report/src/api/Factor.ts.html +1 -1
  12. package/dist/coverage/lcov-report/src/api/FactorSets.ts.html +1 -1
  13. package/dist/coverage/lcov-report/src/api/Fugitive.ts.html +1 -1
  14. package/dist/coverage/lcov-report/src/api/Location.ts.html +1 -1
  15. package/dist/coverage/lcov-report/src/api/Metadata.ts.html +1 -1
  16. package/dist/coverage/lcov-report/src/api/Mobile.ts.html +1 -1
  17. package/dist/coverage/lcov-report/src/api/RealEstate.ts.html +1 -1
  18. package/dist/coverage/lcov-report/src/api/Stationary.ts.html +1 -1
  19. package/dist/coverage/lcov-report/src/api/TransportationAndDistribution.ts.html +1 -1
  20. package/dist/coverage/lcov-report/src/api/TypeRecommender.ts.html +1 -1
  21. package/dist/coverage/lcov-report/src/api/Usage.ts.html +1 -1
  22. package/dist/coverage/lcov-report/src/api/index.html +1 -1
  23. package/dist/coverage/lcov-report/src/index.html +21 -21
  24. package/dist/coverage/lcov-report/src/request.ts.html +1 -1
  25. package/dist/coverage/lcov-report/src/utils.ts.html +5 -5
  26. package/dist/coverage/lcov-report/test/index.html +1 -1
  27. package/dist/coverage/lcov-report/test/mocks/CommonRequest.ts.html +1 -1
  28. package/dist/coverage/lcov-report/test/mocks/FactorRequest.ts.html +1 -1
  29. package/dist/coverage/lcov-report/test/mocks/GenericCalculationRequest.ts.html +1 -1
  30. package/dist/coverage/lcov-report/test/mocks/LocationRequest.ts.html +1 -1
  31. package/dist/coverage/lcov-report/test/mocks/SearchRequest.ts.html +1 -1
  32. package/dist/coverage/lcov-report/test/mocks/index.html +1 -1
  33. package/dist/coverage/lcov-report/test/testUtils.ts.html +4 -4
  34. package/dist/coverage/lcov.info +161 -121
  35. package/dist/types/Client.d.ts +26 -0
  36. package/dist/types/Constants.d.ts +2 -1
  37. package/dist/types/interfaces/Config.d.ts +6 -0
  38. package/docs/reference.html +8 -2
  39. package/docs/searchindex.js +1 -1
  40. package/package.json +2 -2
  41. package/src/Client.ts +79 -15
  42. package/src/Constants.ts +2 -1
  43. package/src/interfaces/Config.ts +7 -0
  44. package/test/client.test.ts +93 -1
  45. package/test/tokenRefresh.test.ts +91 -1
  46. 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">98.15% </span>
26
+ <span class="strong">97.85% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>213/217</span>
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">88.33% </span>
33
+ <span class="strong">91.56% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>53/60</span>
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.54% </span>
40
+ <span class="strong">93.75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>29/31</span>
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.06% </span>
47
+ <span class="strong">99.13% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>213/215</span>
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.45" class="pic high">
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.45" class="pct high">95.45%</td>
87
- <td data-value="88" class="abs high">84/88</td>
88
- <td data-value="87.23" class="pct high">87.23%</td>
89
- <td data-value="47" class="abs high">41/47</td>
90
- <td data-value="81.81" class="pct high">81.81%</td>
91
- <td data-value="11" class="abs high">9/11</td>
92
- <td data-value="97.67" class="pct high">97.67%</td>
93
- <td data-value="86" class="abs high">84/86</td>
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-23T08:39:48.484Z
149
+ at 2026-04-28T14:06:05.256Z
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">94% </span>
26
+ <span class="strong">93.84% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>47/50</span>
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">88.88% </span>
33
+ <span class="strong">92.64% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>40/45</span>
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">77.77% </span>
40
+ <span class="strong">80% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>7/9</span>
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">95.91% </span>
47
+ <span class="strong">96.82% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>47/49</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
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">&nbsp;</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">&nbsp;</span>
338
402
  <span class="cline-any cline-neutral">&nbsp;</span>
339
403
  <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">37x</span>
341
- <span class="cline-any cline-yes">37x</span>
342
- <span class="cline-any cline-yes">37x</span>
343
- <span class="cline-any cline-yes">37x</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
347
- <span class="cline-any cline-yes">36x</span>
348
- <span class="cline-any cline-yes">36x</span>
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">&nbsp;</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
349
425
  <span class="cline-any cline-neutral">&nbsp;</span>
350
426
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
358
428
  <span class="cline-any cline-neutral">&nbsp;</span>
359
429
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -391,29 +461,47 @@
391
461
  <span class="cline-any cline-neutral">&nbsp;</span>
392
462
  <span class="cline-any cline-neutral">&nbsp;</span>
393
463
  <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-yes">40x</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-yes">48x</span>
395
469
  <span class="cline-any cline-yes">1x</span>
396
470
  <span class="cline-any cline-neutral">&nbsp;</span>
397
471
  <span class="cline-any cline-neutral">&nbsp;</span>
398
472
  <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-yes">39x</span>
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">&nbsp;</span>
402
476
  <span class="cline-any cline-neutral">&nbsp;</span>
403
477
  <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-yes">38x</span>
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">&nbsp;</span>
407
481
  <span class="cline-any cline-neutral">&nbsp;</span>
408
482
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
409
486
  <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-yes">37x</span>
411
487
  <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-yes">37x</span>
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">&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-yes">43x</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
415
502
  <span class="cline-any cline-yes">36x</span>
416
- <span class="cline-any cline-yes">37x</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-yes">43x</span>
417
505
  <span class="cline-any cline-neutral">&nbsp;</span>
418
506
  <span class="cline-any cline-neutral">&nbsp;</span>
419
507
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -449,12 +537,12 @@
449
537
  <span class="cline-any cline-neutral">&nbsp;</span>
450
538
  <span class="cline-any cline-neutral">&nbsp;</span>
451
539
  <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-yes">71x</span>
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">&nbsp;</span>
455
543
  <span class="cline-any cline-neutral">&nbsp;</span>
456
544
  <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-yes">70x</span>
545
+ <span class="cline-any cline-yes">76x</span>
458
546
  <span class="cline-any cline-neutral">&nbsp;</span>
459
547
  <span class="cline-any cline-neutral">&nbsp;</span>
460
548
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -470,24 +558,32 @@
470
558
  <span class="cline-any cline-neutral">&nbsp;</span>
471
559
  <span class="cline-any cline-neutral">&nbsp;</span>
472
560
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
479
569
  <span class="cline-any cline-neutral">&nbsp;</span>
480
570
  <span class="cline-any cline-neutral">&nbsp;</span>
481
571
  <span class="cline-any cline-neutral">&nbsp;</span>
482
572
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
486
575
  <span class="cline-any cline-neutral">&nbsp;</span>
487
576
  <span class="cline-any cline-neutral">&nbsp;</span>
488
577
  <span class="cline-any cline-neutral">&nbsp;</span>
489
578
  <span class="cline-any cline-neutral">&nbsp;</span>
490
579
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
587
  <span class="cline-any cline-neutral">&nbsp;</span>
492
588
  <span class="cline-any cline-neutral">&nbsp;</span>
493
589
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -500,7 +596,8 @@
500
596
  <span class="cline-any cline-neutral">&nbsp;</span>
501
597
  <span class="cline-any cline-neutral">&nbsp;</span>
502
598
  <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">2x</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-yes">4x</span>
504
601
  <span class="cline-any cline-neutral">&nbsp;</span>
505
602
  <span class="cline-any cline-neutral">&nbsp;</span>
506
603
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
568
696
  <span class="cline-any cline-neutral">&nbsp;</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
  &nbsp;
573
701
  export class Client {
574
702
  private static instance: Client | null = null;
575
703
  &nbsp;
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
  &nbsp;
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 = <span class="branch-0 cbranch-no" title="branch not covered" >authUrl </span>?? TOKEN_GENERATION_API;
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
  &nbsp;
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&lt;void&gt;} 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
  &nbsp;
644
782
  public static async getClient(config: ClientConfig): Promise&lt;void&gt; {
@@ -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 &amp;&amp; !config.clientId){
799
+ throw new Error(
800
+ 'If patToken is provided, "clientId" must also be provided.'
801
+ );
802
+ }
803
+ if(config.patToken &amp;&amp; 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
  &nbsp;
663
811
  if (config.token &amp;&amp; config.clientId) {
664
812
  token = config.token;
665
813
  isUserProvidedToken = true;
666
- } else token = await Client.requestToken(config);
667
- Client.instance = new Client(token, config,isUserProvidedToken);
814
+ } else if (config.patToken &amp;&amp; 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
  &nbsp;
670
822
  /**
@@ -725,12 +877,21 @@ export class Client {
725
877
  const now = Math.floor(Date.now() / 1000);
726
878
  if (this.expiresAt - now &lt; 60) {
727
879
  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
- });
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
+ &nbsp;
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&lt;string&gt;} 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&lt;string&gt; {
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
+ &nbsp;
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-23T08:39:48.484Z
1018
+ at 2026-04-28T14:06:05.256Z
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'>23/23</span>
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'>23/23</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
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>
@@ -115,8 +117,9 @@
115
117
  <span class="cline-any cline-yes">5x</span>
116
118
  <span class="cline-any cline-yes">5x</span>
117
119
  <span class="cline-any cline-yes">5x</span>
118
- <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";
120
+ <span class="cline-any cline-yes">5x</span></td><td class="text"><pre class="prettyprint lang-js">export const API_DOMAIN = "https://api.envizi.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-23T08:39:48.484Z
154
+ at 2026-04-28T14:06:05.256Z
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-23T08:39:48.484Z
214
+ at 2026-04-28T14:06:05.256Z
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-23T08:39:48.484Z
208
+ at 2026-04-28T14:06:05.256Z
209
209
  </div>
210
210
  <script src="../../prettify.js"></script>
211
211
  <script>