emissions-api-sdk 1.0.0 → 1.0.2
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/README.md +33 -2
- package/dist/Constants.js +23 -1
- package/dist/api/Calculation.js +78 -15
- package/dist/api/Factor.js +99 -18
- package/dist/api/FactorSets.js +1 -1
- package/dist/api/Fugitive.js +76 -13
- package/dist/api/Location.js +76 -15
- package/dist/api/Mobile.js +65 -1
- package/dist/api/Stationary.js +78 -15
- package/dist/api/TransportationAndDistribution.js +77 -14
- package/dist/coverage/clover.xml +191 -81
- package/dist/coverage/coverage-final.json +11 -11
- package/dist/coverage/lcov-report/index.html +16 -16
- package/dist/coverage/lcov-report/src/Client.ts.html +23 -23
- package/dist/coverage/lcov-report/src/Constants.ts.html +82 -4
- package/dist/coverage/lcov-report/src/api/Calculation.ts.html +245 -26
- package/dist/coverage/lcov-report/src/api/Factor.ts.html +313 -34
- package/dist/coverage/lcov-report/src/api/FactorSets.ts.html +8 -5
- package/dist/coverage/lcov-report/src/api/Fugitive.ts.html +246 -24
- package/dist/coverage/lcov-report/src/api/Location.ts.html +245 -26
- package/dist/coverage/lcov-report/src/api/Mobile.ts.html +240 -12
- package/dist/coverage/lcov-report/src/api/Stationary.ts.html +248 -26
- package/dist/coverage/lcov-report/src/api/TransportationAndDistribution.ts.html +250 -25
- package/dist/coverage/lcov-report/src/api/index.html +25 -25
- package/dist/coverage/lcov-report/src/index.html +7 -7
- 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 +1 -1
- package/dist/coverage/lcov.info +287 -133
- package/dist/interfaces/response/AreaResponse.js +2 -0
- package/dist/interfaces/response/EmissionResponse.js +2 -0
- package/dist/interfaces/response/EmissionResponseWithDetails.js +2 -0
- package/dist/interfaces/response/FactorResponse.js +2 -0
- package/dist/interfaces/response/FactorSetResponse.js +2 -0
- package/dist/interfaces/response/SearchResponse.js +2 -0
- package/dist/interfaces/response/TypeResponse.js +2 -0
- package/dist/interfaces/response/UnitResponse.js +2 -0
- package/dist/types/Constants.d.ts +22 -0
- package/dist/types/api/Calculation.d.ts +59 -16
- package/dist/types/api/Factor.d.ts +73 -20
- package/dist/types/api/FactorSets.d.ts +3 -2
- package/dist/types/api/Fugitive.d.ts +57 -14
- package/dist/types/api/Location.d.ts +57 -16
- package/dist/types/api/Mobile.d.ts +46 -2
- package/dist/types/api/Stationary.d.ts +59 -16
- package/dist/types/api/TransportationAndDistribution.d.ts +58 -15
- package/dist/types/index.d.ts +8 -0
- package/dist/types/interfaces/response/AreaResponse.d.ts +20 -0
- package/dist/types/interfaces/response/EmissionResponse.d.ts +31 -0
- package/dist/types/interfaces/response/EmissionResponseWithDetails.d.ts +144 -0
- package/dist/types/interfaces/response/FactorResponse.d.ts +53 -0
- package/dist/types/interfaces/response/FactorSetResponse.d.ts +38 -0
- package/dist/types/interfaces/response/SearchResponse.d.ts +41 -0
- package/dist/types/interfaces/response/TypeResponse.d.ts +7 -0
- package/dist/types/interfaces/response/UnitResponse.d.ts +7 -0
- package/docs/.nojekyll +0 -0
- package/docs/_sources/authentication.rst.txt +164 -0
- package/docs/_sources/client.rst.txt +137 -0
- package/docs/_sources/getting_started.rst.txt +164 -0
- package/docs/_sources/index.rst.txt +30 -0
- package/docs/_sources/reference.rst.txt +129 -0
- package/docs/_sources/sdk.rst.txt +13 -0
- package/docs/_sources/troubleshooting.rst.txt +486 -0
- package/docs/_static/basic.css +914 -0
- package/docs/_static/custom.css +16 -0
- package/docs/_static/debug.css +69 -0
- package/docs/_static/doctools.js +149 -0
- package/docs/_static/documentation_options.js +13 -0
- package/docs/_static/file.png +0 -0
- package/docs/_static/language_data.js +192 -0
- package/docs/_static/minus.png +0 -0
- package/docs/_static/plus.png +0 -0
- package/docs/_static/pygments.css +232 -0
- package/docs/_static/scripts/furo-extensions.js +0 -0
- package/docs/_static/scripts/furo.js +3 -0
- package/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
- package/docs/_static/scripts/furo.js.map +1 -0
- package/docs/_static/searchtools.js +632 -0
- package/docs/_static/skeleton.css +296 -0
- package/docs/_static/sphinx_highlight.js +154 -0
- package/docs/_static/sphinx_js.css +0 -0
- package/docs/_static/styles/furo-extensions.css +2 -0
- package/docs/_static/styles/furo-extensions.css.map +1 -0
- package/docs/_static/styles/furo.css +2 -0
- package/docs/_static/styles/furo.css.map +1 -0
- package/docs/authentication.html +523 -0
- package/docs/client.html +477 -0
- package/docs/genindex.html +492 -0
- package/docs/getting_started.html +491 -0
- package/docs/index.html +357 -0
- package/docs/objects.inv +0 -0
- package/docs/reference.html +1584 -0
- package/docs/sdk.html +334 -0
- package/docs/search.html +297 -0
- package/docs/searchindex.js +1 -0
- package/docs/troubleshooting.html +786 -0
- package/package.json +1 -1
- package/sphinx-build/Makefile +49 -0
- package/sphinx-build/requirements.txt +5 -0
- package/sphinx-build/source/_static/custom.css +16 -0
- package/sphinx-build/source/authentication.rst +164 -0
- package/sphinx-build/source/client.rst +137 -0
- package/sphinx-build/source/conf.py +56 -0
- package/sphinx-build/source/getting_started.rst +164 -0
- package/sphinx-build/source/index.rst +30 -0
- package/sphinx-build/source/reference.rst +129 -0
- package/sphinx-build/source/sdk.rst +13 -0
- package/sphinx-build/source/troubleshooting.rst +486 -0
- package/src/Constants.ts +26 -0
- package/src/api/Calculation.ts +94 -20
- package/src/api/Factor.ts +122 -28
- package/src/api/FactorSets.ts +4 -3
- package/src/api/Fugitive.ts +93 -18
- package/src/api/Location.ts +94 -20
- package/src/api/Mobile.ts +83 -6
- package/src/api/Stationary.ts +95 -20
- package/src/api/TransportationAndDistribution.ts +95 -19
- package/src/index.ts +33 -1
- package/src/interfaces/response/AreaResponse.ts +25 -0
- package/src/interfaces/response/EmissionResponse.ts +44 -0
- package/src/interfaces/response/EmissionResponseWithDetails.ts +183 -0
- package/src/interfaces/response/FactorResponse.ts +78 -0
- package/src/interfaces/response/FactorSetResponse.ts +52 -0
- package/src/interfaces/response/SearchResponse.ts +52 -0
- package/src/interfaces/response/TypeResponse.ts +7 -0
- package/src/interfaces/response/UnitResponse.ts +7 -0
- package/test/apiTest.test.ts +173 -6
- package/dist/api/Factors.js +0 -98
- package/dist/api/FugitiveEmission.js +0 -40
- package/dist/api/GenericCalculation.js +0 -41
- package/dist/api/LocationEmission.js +0 -41
- package/dist/api/MobileEmission.js +0 -41
- package/dist/api/StationaryEmission.js +0 -41
- package/dist/api/TransportationDistributionEmission.js +0 -40
- package/dist/coverage/lcov-report/src/api/Factors.ts.html +0 -403
- package/dist/coverage/lcov-report/src/api/FugitiveEmission.ts.html +0 -214
- package/dist/coverage/lcov-report/src/api/GenericCalculation.ts.html +0 -217
- package/dist/coverage/lcov-report/src/api/LocationEmission.ts.html +0 -214
- package/dist/coverage/lcov-report/src/api/MobileEmission.ts.html +0 -220
- package/dist/coverage/lcov-report/src/api/StationaryEmission.ts.html +0 -220
- package/dist/coverage/lcov-report/src/api/TransportationDistributionEmission.ts.html +0 -211
- package/dist/types/api/Factors.d.ts +0 -68
- package/dist/types/api/FugitiveEmission.d.ts +0 -27
- package/dist/types/api/GenericCalculation.d.ts +0 -28
- package/dist/types/api/LocationEmission.d.ts +0 -28
- package/dist/types/api/MobileEmission.d.ts +0 -28
- package/dist/types/api/StationaryEmission.d.ts +0 -28
- package/dist/types/api/TransportationDistributionEmission.d.ts +0 -27
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
=========
|
|
2
|
+
Reference
|
|
3
|
+
=========
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
.. js:autoclass:: Client
|
|
7
|
+
:members:
|
|
8
|
+
|
|
9
|
+
.. js:autofunction:: request.makeApiRequest
|
|
10
|
+
|
|
11
|
+
.. js:autofunction:: utils.findExpiryTime
|
|
12
|
+
|
|
13
|
+
API
|
|
14
|
+
===
|
|
15
|
+
|
|
16
|
+
.. js:autofunction:: Factor.retrieveFactor
|
|
17
|
+
|
|
18
|
+
.. js:autofunction:: Fugitive.calculate
|
|
19
|
+
|
|
20
|
+
.. js:autofunction:: Calculation.calculate
|
|
21
|
+
|
|
22
|
+
.. js:autofunction:: Location.calculate
|
|
23
|
+
|
|
24
|
+
.. js:autofunction:: Mobile.calculate
|
|
25
|
+
|
|
26
|
+
.. js:autofunction:: Stationary.calculate
|
|
27
|
+
|
|
28
|
+
.. js:autofunction:: TransportationAndDistribution.calculate
|
|
29
|
+
|
|
30
|
+
Metadata APIs
|
|
31
|
+
===========
|
|
32
|
+
|
|
33
|
+
getTypes
|
|
34
|
+
--------
|
|
35
|
+
|
|
36
|
+
.. js:autofunction:: Factor.getTypes
|
|
37
|
+
|
|
38
|
+
.. js:autofunction:: Calculation.getTypes
|
|
39
|
+
|
|
40
|
+
.. js:autofunction:: Location.getTypes
|
|
41
|
+
|
|
42
|
+
.. js:autofunction:: Mobile.getTypes
|
|
43
|
+
|
|
44
|
+
.. js:autofunction:: Stationary.getTypes
|
|
45
|
+
|
|
46
|
+
.. js:autofunction:: TransportationAndDistribution.getTypes
|
|
47
|
+
|
|
48
|
+
.. js:autofunction:: Fugitive.getTypes
|
|
49
|
+
|
|
50
|
+
getArea
|
|
51
|
+
-------
|
|
52
|
+
|
|
53
|
+
.. js:autofunction:: Factor.getArea
|
|
54
|
+
|
|
55
|
+
.. js:autofunction:: Factor.getSearchArea
|
|
56
|
+
|
|
57
|
+
.. js:autofunction:: Calculation.getArea
|
|
58
|
+
|
|
59
|
+
.. js:autofunction:: Location.getArea
|
|
60
|
+
|
|
61
|
+
.. js:autofunction:: Mobile.getArea
|
|
62
|
+
|
|
63
|
+
.. js:autofunction:: Stationary.getArea
|
|
64
|
+
|
|
65
|
+
.. js:autofunction:: TransportationAndDistribution.getArea
|
|
66
|
+
|
|
67
|
+
.. js:autofunction:: Fugitive.getArea
|
|
68
|
+
|
|
69
|
+
getUnits
|
|
70
|
+
--------
|
|
71
|
+
|
|
72
|
+
.. js:autofunction:: Factor.getUnits
|
|
73
|
+
|
|
74
|
+
.. js:autofunction:: Calculation.getUnits
|
|
75
|
+
|
|
76
|
+
.. js:autofunction:: Location.getUnits
|
|
77
|
+
|
|
78
|
+
.. js:autofunction:: Mobile.getUnits
|
|
79
|
+
|
|
80
|
+
.. js:autofunction:: Stationary.getUnits
|
|
81
|
+
|
|
82
|
+
.. js:autofunction:: TransportationAndDistribution.getUnits
|
|
83
|
+
|
|
84
|
+
.. js:autofunction:: Fugitive.getUnits
|
|
85
|
+
|
|
86
|
+
Interfaces
|
|
87
|
+
==========
|
|
88
|
+
|
|
89
|
+
.. js:autoclass:: Api.LocationRequestWithoutFactorId
|
|
90
|
+
|
|
91
|
+
.. js:autoclass:: Api.LocationRequestWithFactorId
|
|
92
|
+
|
|
93
|
+
.. js:autoclass:: Api.CommonRequestWithoutFactorId
|
|
94
|
+
|
|
95
|
+
.. js:autoclass:: Api.CommonRequestWithFactorId
|
|
96
|
+
|
|
97
|
+
.. js:autoclass:: Api.GenericCalculationRequestWithoutFactorId
|
|
98
|
+
|
|
99
|
+
.. js:autoclass:: Api.GenericCalculationRequestWithFactorId
|
|
100
|
+
|
|
101
|
+
.. js:autoclass:: Api.FactorRequestWithoutFactorId
|
|
102
|
+
|
|
103
|
+
.. js:autoclass:: Api.FactorRequestWithFactorId
|
|
104
|
+
|
|
105
|
+
.. js:autoclass:: Api.SearchRequest
|
|
106
|
+
|
|
107
|
+
.. js:autoclass:: common.Location
|
|
108
|
+
|
|
109
|
+
.. js:autoclass:: common.Time
|
|
110
|
+
|
|
111
|
+
.. js:autoclass:: common.Activity
|
|
112
|
+
|
|
113
|
+
.. js:autoclass:: common.ActivityWithFactorId
|
|
114
|
+
|
|
115
|
+
.. js:autoclass:: common.CombinedUnitsActivity
|
|
116
|
+
|
|
117
|
+
.. js:autoclass:: common.CombinedUnitsActivityWithFactorId
|
|
118
|
+
|
|
119
|
+
.. js:autoclass:: common.FactorActivity
|
|
120
|
+
|
|
121
|
+
.. js:autoclass:: common.FactorActivityWithFactorId
|
|
122
|
+
|
|
123
|
+
.. js:autoclass:: common.SearchActivity
|
|
124
|
+
|
|
125
|
+
.. js:autoclass:: common.Pagination
|
|
126
|
+
|
|
127
|
+
.. js:autoclass:: Config.RequestConfig
|
|
128
|
+
|
|
129
|
+
.. js:autoclass:: Config.ClientConfig
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
===
|
|
2
|
+
SDK
|
|
3
|
+
===
|
|
4
|
+
|
|
5
|
+
The IBM Envizi - Emissions API Node.js SDK provides a structured approach to interact with the Emissions API. This section covers the key components and usage patterns.
|
|
6
|
+
|
|
7
|
+
.. toctree::
|
|
8
|
+
:maxdepth: 2
|
|
9
|
+
|
|
10
|
+
client
|
|
11
|
+
authentication
|
|
12
|
+
|
|
13
|
+
.. Made with Bob
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
Troubleshooting Guide
|
|
2
|
+
=====================
|
|
3
|
+
|
|
4
|
+
Overview
|
|
5
|
+
--------
|
|
6
|
+
|
|
7
|
+
This document lists all SDK-specific errors that can occur when using the Emissions API Node.js SDK. These errors are related to SDK initialization and client management.
|
|
8
|
+
|
|
9
|
+
----
|
|
10
|
+
|
|
11
|
+
SDK Initialization Errors
|
|
12
|
+
--------------------------
|
|
13
|
+
|
|
14
|
+
Configuration Errors
|
|
15
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
16
|
+
|
|
17
|
+
These errors occur when ``Client.getClient()`` is called with invalid or missing configuration parameters.
|
|
18
|
+
|
|
19
|
+
1. Missing Auth URL with Custom Host
|
|
20
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
21
|
+
|
|
22
|
+
**Error Message:**
|
|
23
|
+
|
|
24
|
+
.. code-block:: text
|
|
25
|
+
|
|
26
|
+
Error: If custom "host" is provided, "authUrl" must also be provided.
|
|
27
|
+
|
|
28
|
+
**Cause:** Custom host URL provided without corresponding authentication URL
|
|
29
|
+
|
|
30
|
+
**Solution:** Provide both ``host`` and ``authUrl`` parameters together
|
|
31
|
+
|
|
32
|
+
**Sample Function Call That Causes This Error:**
|
|
33
|
+
|
|
34
|
+
.. code-block:: typescript
|
|
35
|
+
|
|
36
|
+
await Client.getClient({
|
|
37
|
+
host: 'https://api.ibm.com',
|
|
38
|
+
clientId: 'client123',
|
|
39
|
+
orgId: 'org456'
|
|
40
|
+
// Missing authUrl parameter
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
----
|
|
44
|
+
|
|
45
|
+
2. Missing Client ID with Token
|
|
46
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
47
|
+
|
|
48
|
+
**Error Message:**
|
|
49
|
+
|
|
50
|
+
.. code-block:: text
|
|
51
|
+
|
|
52
|
+
Error: If token is provided directly, "clientId" must also be provided.
|
|
53
|
+
|
|
54
|
+
**Cause:** Pre-existing token provided without client ID
|
|
55
|
+
|
|
56
|
+
**Solution:** Provide ``clientId`` parameter when using a token
|
|
57
|
+
|
|
58
|
+
**Sample Function Call That Causes This Error:**
|
|
59
|
+
|
|
60
|
+
.. code-block:: typescript
|
|
61
|
+
|
|
62
|
+
await Client.getClient({
|
|
63
|
+
token: 'your-jwt-token'
|
|
64
|
+
// Missing clientId parameter
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
----
|
|
68
|
+
|
|
69
|
+
3. Missing Parameters with API Key
|
|
70
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
71
|
+
|
|
72
|
+
**Error Message:**
|
|
73
|
+
|
|
74
|
+
.. code-block:: text
|
|
75
|
+
|
|
76
|
+
Error: If apiKey is provided , "clientId" and "OrgId" must also be provided.
|
|
77
|
+
|
|
78
|
+
**Cause:** API key authentication requires both client ID and organization ID
|
|
79
|
+
|
|
80
|
+
**Solution:** Provide ``apiKey``, ``clientId``, and ``orgId`` parameters together
|
|
81
|
+
|
|
82
|
+
**Sample Function Call That Causes This Error:**
|
|
83
|
+
|
|
84
|
+
.. code-block:: typescript
|
|
85
|
+
|
|
86
|
+
// Missing orgId
|
|
87
|
+
await Client.getClient({
|
|
88
|
+
apiKey: 'your-api-key',
|
|
89
|
+
clientId: 'client123'
|
|
90
|
+
// Missing orgId parameter
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Or missing clientId
|
|
94
|
+
await Client.getClient({
|
|
95
|
+
apiKey: 'your-api-key',
|
|
96
|
+
orgId: 'org456'
|
|
97
|
+
// Missing clientId parameter
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
----
|
|
101
|
+
|
|
102
|
+
Authentication Errors (HTTP 401)
|
|
103
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
104
|
+
|
|
105
|
+
These errors occur when authentication credentials are invalid or expired.
|
|
106
|
+
|
|
107
|
+
4. Invalid API Key
|
|
108
|
+
^^^^^^^^^^^^^^^^^^
|
|
109
|
+
|
|
110
|
+
**Error Response:**
|
|
111
|
+
|
|
112
|
+
.. code-block:: json
|
|
113
|
+
|
|
114
|
+
{
|
|
115
|
+
"httpCode": "401",
|
|
116
|
+
"httpMessage": "Unauthorized",
|
|
117
|
+
"moreInformation": "Cannot pass the security checks that are required by the target API or operation, Enable debug headers for more details."
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
**Cause:** API key is invalid, expired, or revoked
|
|
121
|
+
|
|
122
|
+
**Solution:** Verify API key from IBM Cloud console and ensure it has proper permissions
|
|
123
|
+
|
|
124
|
+
**Sample Function Call That Causes This Error:**
|
|
125
|
+
|
|
126
|
+
.. code-block:: typescript
|
|
127
|
+
|
|
128
|
+
await Client.getClient({
|
|
129
|
+
apiKey: 'invalid_api_key_12345',
|
|
130
|
+
clientId: 'client123',
|
|
131
|
+
orgId: 'org456',
|
|
132
|
+
host: 'https://api.ibm.com',
|
|
133
|
+
authUrl: 'https://api.ibm.com/auth-url'
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
----
|
|
137
|
+
|
|
138
|
+
5. Invalid Organization ID
|
|
139
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
140
|
+
|
|
141
|
+
**Error Response:**
|
|
142
|
+
|
|
143
|
+
.. code-block:: json
|
|
144
|
+
|
|
145
|
+
{
|
|
146
|
+
"httpCode": "401",
|
|
147
|
+
"httpMessage": "Unauthorized",
|
|
148
|
+
"moreInformation": "Cannot pass the security checks that are required by the target API or operation, Enable debug headers for more details."
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
**Cause:** Organization ID doesn't match account or user lacks access
|
|
152
|
+
|
|
153
|
+
**Solution:** Verify organization ID from IBM Cloud account settings
|
|
154
|
+
|
|
155
|
+
**Sample Function Call That Causes This Error:**
|
|
156
|
+
|
|
157
|
+
.. code-block:: typescript
|
|
158
|
+
|
|
159
|
+
await Client.getClient({
|
|
160
|
+
apiKey: 'your-valid-api-key',
|
|
161
|
+
clientId: 'client123',
|
|
162
|
+
orgId: 'invalid-org-id-12345',
|
|
163
|
+
host: 'https://api.ibm.com',
|
|
164
|
+
authUrl: 'https://api.ibm.com/auth-url'
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
----
|
|
168
|
+
|
|
169
|
+
6. Invalid Client ID
|
|
170
|
+
^^^^^^^^^^^^^^^^^^^^^
|
|
171
|
+
|
|
172
|
+
**Error Response:**
|
|
173
|
+
|
|
174
|
+
.. code-block:: json
|
|
175
|
+
|
|
176
|
+
{
|
|
177
|
+
"httpCode": "401",
|
|
178
|
+
"httpMessage": "Unauthorized",
|
|
179
|
+
"moreInformation": "Invalid client id or secret."
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
**Cause:** Client ID is invalid or doesn't match credentials
|
|
183
|
+
|
|
184
|
+
**Solution:** Verify client ID from IBM Cloud credentials
|
|
185
|
+
|
|
186
|
+
**Sample Function Call That Causes This Error:**
|
|
187
|
+
|
|
188
|
+
.. code-block:: typescript
|
|
189
|
+
|
|
190
|
+
await Client.getClient({
|
|
191
|
+
apiKey: 'your-valid-api-key',
|
|
192
|
+
clientId: 'invalid-client-id-12345',
|
|
193
|
+
orgId: 'org456',
|
|
194
|
+
host: 'https://api.ibm.com',
|
|
195
|
+
authUrl: 'https://api.ibm.com/auth-url'
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
----
|
|
199
|
+
|
|
200
|
+
7. Empty Token Response
|
|
201
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
202
|
+
|
|
203
|
+
**Error Message:**
|
|
204
|
+
|
|
205
|
+
.. code-block:: text
|
|
206
|
+
|
|
207
|
+
Error: Token response is empty
|
|
208
|
+
|
|
209
|
+
**Cause:** Authentication server returned an empty or null token in the response body
|
|
210
|
+
|
|
211
|
+
**Solution:**
|
|
212
|
+
|
|
213
|
+
- Verify the ``authUrl`` is correct and points to a valid authentication endpoint
|
|
214
|
+
- Ensure the authentication service is responding correctly
|
|
215
|
+
- Check that the API key, client ID, and org ID combination is valid
|
|
216
|
+
- Verify the authentication endpoint is returning a token in the response
|
|
217
|
+
- Contact support if the authentication service is not responding properly
|
|
218
|
+
|
|
219
|
+
**Sample Function Call That Causes This Error:**
|
|
220
|
+
|
|
221
|
+
.. code-block:: typescript
|
|
222
|
+
|
|
223
|
+
await Client.getClient({
|
|
224
|
+
apiKey: 'your-api-key',
|
|
225
|
+
clientId: 'client123',
|
|
226
|
+
orgId: 'org456',
|
|
227
|
+
host: 'https://api.ibm.com/',
|
|
228
|
+
authUrl: 'https://valid-url-but-returns-empty-token.example.com/token'
|
|
229
|
+
// Valid URL but returns empty token in response
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
**Note:** If the authUrl is completely invalid or unreachable (e.g., wrong domain), you'll get a network error (ENOTFOUND) instead of this error. This error specifically occurs when the authentication endpoint responds but returns an empty token.
|
|
233
|
+
|
|
234
|
+
----
|
|
235
|
+
|
|
236
|
+
8. Missing Expiry Field in Token
|
|
237
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
238
|
+
|
|
239
|
+
**Error Message:**
|
|
240
|
+
|
|
241
|
+
.. code-block:: text
|
|
242
|
+
|
|
243
|
+
Error: exp field is missing in the token
|
|
244
|
+
|
|
245
|
+
**Cause:** The provided JWT token does not contain the required ``exp`` (expiry) field
|
|
246
|
+
|
|
247
|
+
**Solution:**
|
|
248
|
+
|
|
249
|
+
- Ensure the token is a valid JWT with an expiry field
|
|
250
|
+
- Regenerate the token if it's malformed
|
|
251
|
+
- Verify the token was generated correctly by the authentication service
|
|
252
|
+
|
|
253
|
+
**Sample Function Call That Causes This Error:**
|
|
254
|
+
|
|
255
|
+
.. code-block:: typescript
|
|
256
|
+
|
|
257
|
+
await Client.getClient({
|
|
258
|
+
token: 'malformed-jwt-token-without-exp-field',
|
|
259
|
+
clientId: 'client123'
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
**Note:** This error occurs when using token-based authentication with a JWT that doesn't include the standard ``exp`` (expiration time) claim.
|
|
263
|
+
|
|
264
|
+
----
|
|
265
|
+
|
|
266
|
+
Client Instance Errors
|
|
267
|
+
-----------------------
|
|
268
|
+
|
|
269
|
+
Client Not Initialized
|
|
270
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
271
|
+
|
|
272
|
+
**Error Message:**
|
|
273
|
+
|
|
274
|
+
.. code-block:: text
|
|
275
|
+
|
|
276
|
+
Error: Client is not initialized. Call Client.getClient() first.
|
|
277
|
+
|
|
278
|
+
**Cause:** Attempting to use ``Client.getInstance()`` or API methods before calling ``Client.getClient()``
|
|
279
|
+
|
|
280
|
+
**Solution:** Always call ``Client.getClient()`` before using any SDK methods
|
|
281
|
+
|
|
282
|
+
**When This Occurs:**
|
|
283
|
+
|
|
284
|
+
- Calling ``Client.getInstance()`` before initialization
|
|
285
|
+
- Calling any API method (Stationary.calculate(), Mobile.calculate(), etc.) before initialization
|
|
286
|
+
- Application restart without re-initializing the client
|
|
287
|
+
|
|
288
|
+
**Sample Function Calls That Cause This Error:**
|
|
289
|
+
|
|
290
|
+
.. code-block:: typescript
|
|
291
|
+
|
|
292
|
+
// Error 1: Calling getInstance() before initialization
|
|
293
|
+
const client = Client.getInstance(); // Throws error
|
|
294
|
+
|
|
295
|
+
// Error 2: Calling API methods before initialization
|
|
296
|
+
await Stationary.calculate({
|
|
297
|
+
time: { date: "2025-01-04" },
|
|
298
|
+
location: { country: "usa" },
|
|
299
|
+
activity: { type: "Coal - Lignite", unit: "KJ", value: 3 }
|
|
300
|
+
}); // Throws error
|
|
301
|
+
|
|
302
|
+
// Error 3: Calling any other API method
|
|
303
|
+
await Mobile.calculate({...}); // Throws error
|
|
304
|
+
await Fugitive.calculate({...}); // Throws error
|
|
305
|
+
await Location.getUnits("steam"); // Throws error
|
|
306
|
+
|
|
307
|
+
----
|
|
308
|
+
|
|
309
|
+
Token Management
|
|
310
|
+
----------------
|
|
311
|
+
|
|
312
|
+
Automatic Token Refresh
|
|
313
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
314
|
+
|
|
315
|
+
The SDK automatically refreshes authentication tokens when they are about to expire (within 60 seconds). Token refresh failures will cause subsequent API calls to fail with 401 errors.
|
|
316
|
+
|
|
317
|
+
**Note:** Token refresh only occurs for tokens generated by the SDK, not for user-provided tokens.
|
|
318
|
+
|
|
319
|
+
----
|
|
320
|
+
|
|
321
|
+
Error Summary Table
|
|
322
|
+
-------------------
|
|
323
|
+
|
|
324
|
+
.. list-table::
|
|
325
|
+
:header-rows: 1
|
|
326
|
+
:widths: 20 40 10 30
|
|
327
|
+
|
|
328
|
+
* - Error Type
|
|
329
|
+
- Error Message
|
|
330
|
+
- HTTP Code
|
|
331
|
+
- Solution
|
|
332
|
+
* - Configuration
|
|
333
|
+
- ``If custom "host" is provided, "authUrl" must also be provided.``
|
|
334
|
+
- N/A
|
|
335
|
+
- Provide both host and authUrl
|
|
336
|
+
* - Configuration
|
|
337
|
+
- ``If token is provided directly, "clientId" must also be provided.``
|
|
338
|
+
- N/A
|
|
339
|
+
- Provide clientId with token
|
|
340
|
+
* - Configuration
|
|
341
|
+
- ``If apiKey is provided , "clientId" and "OrgId" must also be provided.``
|
|
342
|
+
- N/A
|
|
343
|
+
- Provide all three parameters
|
|
344
|
+
* - Authentication
|
|
345
|
+
- ``Cannot pass the security checks...``
|
|
346
|
+
- 401
|
|
347
|
+
- Verify API key and org ID
|
|
348
|
+
* - Authentication
|
|
349
|
+
- ``Invalid client id or secret``
|
|
350
|
+
- 401
|
|
351
|
+
- Verify client ID
|
|
352
|
+
* - Authentication
|
|
353
|
+
- ``Token response is empty``
|
|
354
|
+
- N/A
|
|
355
|
+
- Check network and authUrl
|
|
356
|
+
* - Token
|
|
357
|
+
- ``exp field is missing in the token``
|
|
358
|
+
- N/A
|
|
359
|
+
- Use valid JWT with exp field
|
|
360
|
+
* - Instance
|
|
361
|
+
- ``Client is not initialized. Call Client.getClient() first.``
|
|
362
|
+
- N/A
|
|
363
|
+
- Call getClient() first
|
|
364
|
+
|
|
365
|
+
----
|
|
366
|
+
|
|
367
|
+
Required Configuration Parameters
|
|
368
|
+
----------------------------------
|
|
369
|
+
|
|
370
|
+
When calling ``Client.getClient()``, the following parameters are required based on authentication method:
|
|
371
|
+
|
|
372
|
+
API Key Authentication (Recommended)
|
|
373
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
374
|
+
|
|
375
|
+
- ``apiKey`` - Your IBM Cloud API key
|
|
376
|
+
- ``clientId`` - Your client ID
|
|
377
|
+
- ``orgId`` - Your organization ID
|
|
378
|
+
- ``host`` - API host URL
|
|
379
|
+
- ``authUrl`` - Authentication URL
|
|
380
|
+
|
|
381
|
+
Token Authentication
|
|
382
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
383
|
+
|
|
384
|
+
- ``token`` - Pre-existing JWT token
|
|
385
|
+
- ``clientId`` - Your client ID
|
|
386
|
+
|
|
387
|
+
----
|
|
388
|
+
|
|
389
|
+
Initialization Checklist
|
|
390
|
+
-------------------------
|
|
391
|
+
|
|
392
|
+
Before using the SDK, ensure:
|
|
393
|
+
|
|
394
|
+
- [ ] All required configuration parameters are provided
|
|
395
|
+
- [ ] Credentials are valid and not expired
|
|
396
|
+
- [ ] Correct environment URLs are used
|
|
397
|
+
- [ ] ``Client.getClient()`` is called before any API methods
|
|
398
|
+
- [ ] Error handling is implemented for initialization failures
|
|
399
|
+
- [ ] Credentials are stored securely (environment variables recommended)
|
|
400
|
+
|
|
401
|
+
----
|
|
402
|
+
|
|
403
|
+
Common Scenarios
|
|
404
|
+
----------------
|
|
405
|
+
|
|
406
|
+
Scenario 1: Application Startup
|
|
407
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
408
|
+
|
|
409
|
+
**Issue:** SDK must be initialized when application starts
|
|
410
|
+
|
|
411
|
+
**Solution:** Call ``Client.getClient()`` in application initialization code before using any API methods
|
|
412
|
+
|
|
413
|
+
Scenario 2: Invalid Credentials
|
|
414
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
415
|
+
|
|
416
|
+
**Issue:** 401 Unauthorized errors during initialization
|
|
417
|
+
|
|
418
|
+
**Solution:** Verify all credentials (API key, client ID, org ID) from IBM Cloud console
|
|
419
|
+
|
|
420
|
+
Scenario 3: Missing Configuration
|
|
421
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
422
|
+
|
|
423
|
+
**Issue:** Configuration error thrown before API call
|
|
424
|
+
|
|
425
|
+
**Solution:** Ensure all required parameters are provided based on authentication method
|
|
426
|
+
|
|
427
|
+
Scenario 4: Client Not Initialized
|
|
428
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
429
|
+
|
|
430
|
+
**Issue:** Error when calling API methods
|
|
431
|
+
|
|
432
|
+
**Solution:** Verify ``Client.getClient()`` was called successfully before using API methods
|
|
433
|
+
|
|
434
|
+
----
|
|
435
|
+
|
|
436
|
+
Troubleshooting Steps
|
|
437
|
+
----------------------
|
|
438
|
+
|
|
439
|
+
1. **Verify Configuration**
|
|
440
|
+
|
|
441
|
+
- Check all required parameters are provided
|
|
442
|
+
- Ensure no parameters are empty or null
|
|
443
|
+
- Verify host and authUrl match your environment
|
|
444
|
+
|
|
445
|
+
2. **Verify Credentials**
|
|
446
|
+
|
|
447
|
+
- Confirm API key is valid and not expired
|
|
448
|
+
- Check organization ID matches your IBM Cloud account
|
|
449
|
+
- Verify client ID is correct
|
|
450
|
+
|
|
451
|
+
3. **Check Initialization**
|
|
452
|
+
|
|
453
|
+
- Ensure ``Client.getClient()`` is called before API methods
|
|
454
|
+
- Verify initialization completed without errors
|
|
455
|
+
- Check for any error messages during initialization
|
|
456
|
+
|
|
457
|
+
4. **Network and Service**
|
|
458
|
+
|
|
459
|
+
- Verify network connectivity
|
|
460
|
+
- Check authentication service availability
|
|
461
|
+
- Ensure firewall allows connections to IBM Cloud
|
|
462
|
+
|
|
463
|
+
----
|
|
464
|
+
|
|
465
|
+
Support
|
|
466
|
+
-------
|
|
467
|
+
|
|
468
|
+
For issues not covered in this guide:
|
|
469
|
+
|
|
470
|
+
1. Verify SDK version is up to date
|
|
471
|
+
2. Check IBM Cloud service status
|
|
472
|
+
3. Review error messages and HTTP status codes
|
|
473
|
+
4. Contact IBM Support with:
|
|
474
|
+
|
|
475
|
+
- Error message and stack trace
|
|
476
|
+
- SDK version
|
|
477
|
+
- Environment details
|
|
478
|
+
- Steps to reproduce (excluding sensitive credentials)
|
|
479
|
+
|
|
480
|
+
----
|
|
481
|
+
|
|
482
|
+
**Last Updated:** 2025-11-24
|
|
483
|
+
|
|
484
|
+
**SDK Version:** 1.0.1
|
|
485
|
+
|
|
486
|
+
**Coverage:** SDK initialization, client instance, and authentication errors
|
package/src/Constants.ts
CHANGED
|
@@ -9,6 +9,32 @@ export const TRANSPORTATION_AND_DISTRIBUTION_API_PATH = "/v3/carbon/transportati
|
|
|
9
9
|
export const FACTOR_API_PATH = "/v3/carbon/factor";
|
|
10
10
|
export const FACTOR_SET_API_PATH = "/v3/carbon/factorset";
|
|
11
11
|
export const SEARCH_API_PATH = "/v3/carbon/factor/search";
|
|
12
|
+
|
|
13
|
+
export const CALCULATION_TYPES = "/v3/carbon/calculation/types";
|
|
14
|
+
export const LOCATION_TYPES = "/v3/carbon/location/types";
|
|
15
|
+
export const FUGITIVE_API_TYPES = "/v3/carbon/fugitive/types";
|
|
16
|
+
export const MOBILE_API_TYPES = "/v3/carbon/mobile/types";
|
|
17
|
+
export const STATIONARY_API_TYPES = "/v3/carbon/stationary/types";
|
|
18
|
+
export const FACTOR_API_TYPES = "/v3/carbon/factor/types";
|
|
19
|
+
export const TRANSPORTATION_AND_DISTRIBUTION_API_TYPES = "/v3/carbon/transportation-and-distribution/types";
|
|
20
|
+
|
|
21
|
+
export const FUGITIVE_API_AREA = "/v3/carbon/fugitive/area";
|
|
22
|
+
export const GENERAL_API_AREA = "/v3/carbon/calculation/area";
|
|
23
|
+
export const LOCATION_API_AREA = "/v3/carbon/location/area";
|
|
24
|
+
export const MOBILE_API_AREA = "/v3/carbon/mobile/area";
|
|
25
|
+
export const STATIONARY_API_AREA = "/v3/carbon/stationary/area";
|
|
26
|
+
export const TRANSPORTATION_AND_DISTRIBUTION_API_AREA = "/v3/carbon/transportation-and-distribution/area";
|
|
27
|
+
export const SEARCH_API_AREA = "/v3/carbon/factor/search/area";
|
|
28
|
+
export const FACTOR_API_AREA = "/v3/carbon/factor/area";
|
|
29
|
+
|
|
30
|
+
export const FUGITIVE_API_UNITS = "/v3/carbon/fugitive/units";
|
|
31
|
+
export const LOCATION_API_UNITS = "/v3/carbon/location/units";
|
|
32
|
+
export const MOBILE_API_UNITS = "/v3/carbon/mobile/units";
|
|
33
|
+
export const STATIONARY_API_UNITS = "/v3/carbon/stationary/units";
|
|
34
|
+
export const GENERAL_API_UNITS = "/v3/carbon/calculation/units";
|
|
35
|
+
export const FACTOR_API_UNITS = "/v3/carbon/factor/units";
|
|
36
|
+
export const TRANSPORTATION_AND_DISTRIBUTION_API_UNITS = "/v3/carbon/transportation-and-distribution/units";
|
|
37
|
+
|
|
12
38
|
export const GET = "GET";
|
|
13
39
|
export const POST = "POST";
|
|
14
40
|
export const CLIENT_SOURCE_HEADER = "X-Client-Source";
|