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.
Files changed (155) hide show
  1. package/README.md +33 -2
  2. package/dist/Constants.js +23 -1
  3. package/dist/api/Calculation.js +78 -15
  4. package/dist/api/Factor.js +99 -18
  5. package/dist/api/FactorSets.js +1 -1
  6. package/dist/api/Fugitive.js +76 -13
  7. package/dist/api/Location.js +76 -15
  8. package/dist/api/Mobile.js +65 -1
  9. package/dist/api/Stationary.js +78 -15
  10. package/dist/api/TransportationAndDistribution.js +77 -14
  11. package/dist/coverage/clover.xml +191 -81
  12. package/dist/coverage/coverage-final.json +11 -11
  13. package/dist/coverage/lcov-report/index.html +16 -16
  14. package/dist/coverage/lcov-report/src/Client.ts.html +23 -23
  15. package/dist/coverage/lcov-report/src/Constants.ts.html +82 -4
  16. package/dist/coverage/lcov-report/src/api/Calculation.ts.html +245 -26
  17. package/dist/coverage/lcov-report/src/api/Factor.ts.html +313 -34
  18. package/dist/coverage/lcov-report/src/api/FactorSets.ts.html +8 -5
  19. package/dist/coverage/lcov-report/src/api/Fugitive.ts.html +246 -24
  20. package/dist/coverage/lcov-report/src/api/Location.ts.html +245 -26
  21. package/dist/coverage/lcov-report/src/api/Mobile.ts.html +240 -12
  22. package/dist/coverage/lcov-report/src/api/Stationary.ts.html +248 -26
  23. package/dist/coverage/lcov-report/src/api/TransportationAndDistribution.ts.html +250 -25
  24. package/dist/coverage/lcov-report/src/api/index.html +25 -25
  25. package/dist/coverage/lcov-report/src/index.html +7 -7
  26. package/dist/coverage/lcov-report/src/request.ts.html +1 -1
  27. package/dist/coverage/lcov-report/src/utils.ts.html +5 -5
  28. package/dist/coverage/lcov-report/test/index.html +1 -1
  29. package/dist/coverage/lcov-report/test/mocks/CommonRequest.ts.html +1 -1
  30. package/dist/coverage/lcov-report/test/mocks/FactorRequest.ts.html +1 -1
  31. package/dist/coverage/lcov-report/test/mocks/GenericCalculationRequest.ts.html +1 -1
  32. package/dist/coverage/lcov-report/test/mocks/LocationRequest.ts.html +1 -1
  33. package/dist/coverage/lcov-report/test/mocks/SearchRequest.ts.html +1 -1
  34. package/dist/coverage/lcov-report/test/mocks/index.html +1 -1
  35. package/dist/coverage/lcov-report/test/testUtils.ts.html +1 -1
  36. package/dist/coverage/lcov.info +287 -133
  37. package/dist/interfaces/response/AreaResponse.js +2 -0
  38. package/dist/interfaces/response/EmissionResponse.js +2 -0
  39. package/dist/interfaces/response/EmissionResponseWithDetails.js +2 -0
  40. package/dist/interfaces/response/FactorResponse.js +2 -0
  41. package/dist/interfaces/response/FactorSetResponse.js +2 -0
  42. package/dist/interfaces/response/SearchResponse.js +2 -0
  43. package/dist/interfaces/response/TypeResponse.js +2 -0
  44. package/dist/interfaces/response/UnitResponse.js +2 -0
  45. package/dist/types/Constants.d.ts +22 -0
  46. package/dist/types/api/Calculation.d.ts +59 -16
  47. package/dist/types/api/Factor.d.ts +73 -20
  48. package/dist/types/api/FactorSets.d.ts +3 -2
  49. package/dist/types/api/Fugitive.d.ts +57 -14
  50. package/dist/types/api/Location.d.ts +57 -16
  51. package/dist/types/api/Mobile.d.ts +46 -2
  52. package/dist/types/api/Stationary.d.ts +59 -16
  53. package/dist/types/api/TransportationAndDistribution.d.ts +58 -15
  54. package/dist/types/index.d.ts +8 -0
  55. package/dist/types/interfaces/response/AreaResponse.d.ts +20 -0
  56. package/dist/types/interfaces/response/EmissionResponse.d.ts +31 -0
  57. package/dist/types/interfaces/response/EmissionResponseWithDetails.d.ts +144 -0
  58. package/dist/types/interfaces/response/FactorResponse.d.ts +53 -0
  59. package/dist/types/interfaces/response/FactorSetResponse.d.ts +38 -0
  60. package/dist/types/interfaces/response/SearchResponse.d.ts +41 -0
  61. package/dist/types/interfaces/response/TypeResponse.d.ts +7 -0
  62. package/dist/types/interfaces/response/UnitResponse.d.ts +7 -0
  63. package/docs/.nojekyll +0 -0
  64. package/docs/_sources/authentication.rst.txt +164 -0
  65. package/docs/_sources/client.rst.txt +137 -0
  66. package/docs/_sources/getting_started.rst.txt +164 -0
  67. package/docs/_sources/index.rst.txt +30 -0
  68. package/docs/_sources/reference.rst.txt +129 -0
  69. package/docs/_sources/sdk.rst.txt +13 -0
  70. package/docs/_sources/troubleshooting.rst.txt +486 -0
  71. package/docs/_static/basic.css +914 -0
  72. package/docs/_static/custom.css +16 -0
  73. package/docs/_static/debug.css +69 -0
  74. package/docs/_static/doctools.js +149 -0
  75. package/docs/_static/documentation_options.js +13 -0
  76. package/docs/_static/file.png +0 -0
  77. package/docs/_static/language_data.js +192 -0
  78. package/docs/_static/minus.png +0 -0
  79. package/docs/_static/plus.png +0 -0
  80. package/docs/_static/pygments.css +232 -0
  81. package/docs/_static/scripts/furo-extensions.js +0 -0
  82. package/docs/_static/scripts/furo.js +3 -0
  83. package/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
  84. package/docs/_static/scripts/furo.js.map +1 -0
  85. package/docs/_static/searchtools.js +632 -0
  86. package/docs/_static/skeleton.css +296 -0
  87. package/docs/_static/sphinx_highlight.js +154 -0
  88. package/docs/_static/sphinx_js.css +0 -0
  89. package/docs/_static/styles/furo-extensions.css +2 -0
  90. package/docs/_static/styles/furo-extensions.css.map +1 -0
  91. package/docs/_static/styles/furo.css +2 -0
  92. package/docs/_static/styles/furo.css.map +1 -0
  93. package/docs/authentication.html +523 -0
  94. package/docs/client.html +477 -0
  95. package/docs/genindex.html +492 -0
  96. package/docs/getting_started.html +491 -0
  97. package/docs/index.html +357 -0
  98. package/docs/objects.inv +0 -0
  99. package/docs/reference.html +1584 -0
  100. package/docs/sdk.html +334 -0
  101. package/docs/search.html +297 -0
  102. package/docs/searchindex.js +1 -0
  103. package/docs/troubleshooting.html +786 -0
  104. package/package.json +1 -1
  105. package/sphinx-build/Makefile +49 -0
  106. package/sphinx-build/requirements.txt +5 -0
  107. package/sphinx-build/source/_static/custom.css +16 -0
  108. package/sphinx-build/source/authentication.rst +164 -0
  109. package/sphinx-build/source/client.rst +137 -0
  110. package/sphinx-build/source/conf.py +56 -0
  111. package/sphinx-build/source/getting_started.rst +164 -0
  112. package/sphinx-build/source/index.rst +30 -0
  113. package/sphinx-build/source/reference.rst +129 -0
  114. package/sphinx-build/source/sdk.rst +13 -0
  115. package/sphinx-build/source/troubleshooting.rst +486 -0
  116. package/src/Constants.ts +26 -0
  117. package/src/api/Calculation.ts +94 -20
  118. package/src/api/Factor.ts +122 -28
  119. package/src/api/FactorSets.ts +4 -3
  120. package/src/api/Fugitive.ts +93 -18
  121. package/src/api/Location.ts +94 -20
  122. package/src/api/Mobile.ts +83 -6
  123. package/src/api/Stationary.ts +95 -20
  124. package/src/api/TransportationAndDistribution.ts +95 -19
  125. package/src/index.ts +33 -1
  126. package/src/interfaces/response/AreaResponse.ts +25 -0
  127. package/src/interfaces/response/EmissionResponse.ts +44 -0
  128. package/src/interfaces/response/EmissionResponseWithDetails.ts +183 -0
  129. package/src/interfaces/response/FactorResponse.ts +78 -0
  130. package/src/interfaces/response/FactorSetResponse.ts +52 -0
  131. package/src/interfaces/response/SearchResponse.ts +52 -0
  132. package/src/interfaces/response/TypeResponse.ts +7 -0
  133. package/src/interfaces/response/UnitResponse.ts +7 -0
  134. package/test/apiTest.test.ts +173 -6
  135. package/dist/api/Factors.js +0 -98
  136. package/dist/api/FugitiveEmission.js +0 -40
  137. package/dist/api/GenericCalculation.js +0 -41
  138. package/dist/api/LocationEmission.js +0 -41
  139. package/dist/api/MobileEmission.js +0 -41
  140. package/dist/api/StationaryEmission.js +0 -41
  141. package/dist/api/TransportationDistributionEmission.js +0 -40
  142. package/dist/coverage/lcov-report/src/api/Factors.ts.html +0 -403
  143. package/dist/coverage/lcov-report/src/api/FugitiveEmission.ts.html +0 -214
  144. package/dist/coverage/lcov-report/src/api/GenericCalculation.ts.html +0 -217
  145. package/dist/coverage/lcov-report/src/api/LocationEmission.ts.html +0 -214
  146. package/dist/coverage/lcov-report/src/api/MobileEmission.ts.html +0 -220
  147. package/dist/coverage/lcov-report/src/api/StationaryEmission.ts.html +0 -220
  148. package/dist/coverage/lcov-report/src/api/TransportationDistributionEmission.ts.html +0 -211
  149. package/dist/types/api/Factors.d.ts +0 -68
  150. package/dist/types/api/FugitiveEmission.d.ts +0 -27
  151. package/dist/types/api/GenericCalculation.d.ts +0 -28
  152. package/dist/types/api/LocationEmission.d.ts +0 -28
  153. package/dist/types/api/MobileEmission.d.ts +0 -28
  154. package/dist/types/api/StationaryEmission.d.ts +0 -28
  155. package/dist/types/api/TransportationDistributionEmission.d.ts +0 -27
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emissions-api-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "sdk for IBM Emissions APIs",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -0,0 +1,49 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD := sphinx-build
8
+ SOURCEDIR := source
9
+ BUILDDIR := build
10
+ DOCS_DIR := ../docs
11
+
12
+ # Put it first so that "make" without argument is like "make help".
13
+ help:
14
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
15
+
16
+ .PHONY: help Makefile
17
+
18
+ # Catch-all target: route all unknown targets to Sphinx using the new
19
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
20
+ %: Makefile
21
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
22
+
23
+ # Clean build directory
24
+ .PHONY: clean
25
+ clean:
26
+ @echo "Cleaning build directory..."
27
+ @rm -rf $(BUILDDIR)
28
+ @echo "Done."
29
+
30
+ # Build HTML documentation
31
+ .PHONY: html
32
+ html:
33
+ @echo "Building HTML documentation..."
34
+ @$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html
35
+ @echo "Done. Output is in $(BUILDDIR)/html"
36
+
37
+ # Clean and build HTML
38
+ .PHONY: all
39
+ all: clean html
40
+ @echo "Documentation build complete."
41
+
42
+ # Copy built HTML to docs directory for GitHub Pages
43
+ .PHONY: pages
44
+ pages: all
45
+ @echo "Copying documentation to docs directory..."
46
+ @rm -rf $(DOCS_DIR)/*
47
+ @mkdir -p $(DOCS_DIR)
48
+ @cp -r $(BUILDDIR)/html/* $(DOCS_DIR)/
49
+ @echo "Done. GitHub Pages content is in $(DOCS_DIR)"
@@ -0,0 +1,5 @@
1
+ sphinx==8.1.3
2
+ furo==2025.7.19
3
+ nbsphinx==0.9.7
4
+ sphinxcontrib-httpdomain==1.8.1
5
+ pandoc
@@ -0,0 +1,16 @@
1
+ div.nbinput.container div.input_area {
2
+ border: 1px solid #e0e0e0;
3
+ border-radius: 4px;
4
+ background: #f8f8f8;
5
+ }
6
+
7
+ div.nboutput.container div.output_area {
8
+ border: 1px solid #e0e0e0;
9
+ border-radius: 4px;
10
+ background: #fcfcfc;
11
+ }
12
+
13
+ /* Make code cells more readable */
14
+ .highlight {
15
+ background: #f8f8f8;
16
+ }
@@ -0,0 +1,164 @@
1
+ ==============
2
+ Authentication
3
+ ==============
4
+
5
+ Overview
6
+ --------
7
+
8
+ The IBM Envizi - Emissions API Node.js SDK uses OAuth 2.0 Bearer Tokens for authentication. This page explains the authentication process, options, and security best practices in detail.
9
+
10
+ Authentication Methods
11
+ ----------------------
12
+
13
+ The SDK provides two authentication methods:
14
+
15
+ API Key Authentication (Recommended)
16
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17
+
18
+ This method automatically handles token generation and refreshing:
19
+
20
+ .. code-block:: javascript
21
+
22
+ import { Client } from 'emissions-api-sdk';
23
+
24
+ await Client.getClient({
25
+ apiKey: process.env.ENVIZI_API_KEY,
26
+ clientId: process.env.ENVIZI_CLIENT_ID,
27
+ orgId: process.env.ENVIZI_ORG_ID
28
+ });
29
+
30
+ **Required parameters:**
31
+ - ``apiKey``: Your API key for authentication
32
+ - ``clientId``: Your client identifier
33
+ - ``orgId``: Your organization identifier
34
+
35
+ Token retrieval
36
+ ^^^^^^^^^^^^^^^
37
+ When you call ``Client.getClient()`` with ``apiKey``:
38
+
39
+ - **Method**: ``GET`` to the token endpoint (default: ``https://api.ibm.com/saascore/run/authentication-retrieve/api-key``)
40
+ - **Headers**:
41
+ - ``X-Api-Key: <apiKey>``
42
+ - ``X-IBM-Client-Id: saascore-<clientId>``
43
+ - ``Accept: application/json``
44
+ - **Query param**: ``orgId=<orgId>``
45
+ - **Response**: a bearer token (string) which the SDK trims, caches, and uses for API calls.
46
+
47
+ Pre-generated Token Authentication
48
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49
+
50
+ For scenarios where token generation is handled externally:
51
+
52
+ .. code-block:: javascript
53
+
54
+ import { Client } from 'emissions-api-sdk';
55
+
56
+ await Client.getClient({
57
+ token: process.env.JWT_TOKEN,
58
+ clientId: process.env.ENVIZI_CLIENT_ID
59
+ });
60
+
61
+ **Required parameters:**
62
+ - ``token``: A pre-generated authentication token
63
+ - ``clientId``: Your client identifier
64
+
65
+ Token lifetime & refresh
66
+ ^^^^^^^^^^^^^^^^^^^^^^^^
67
+ - The SDK decodes the JWT’s ``exp`` and stores it.
68
+ - In user-provided token mode, no refresh occurs; re-initialize with a fresh token when needed.
69
+
70
+ Authentication Flow
71
+ -------------------
72
+
73
+ The authentication process follows these steps:
74
+
75
+ 1. **Initialization**:
76
+ - User provides authentication credentials
77
+ - Client validates the credentials format
78
+
79
+ 2. **Token Generation** (API Key method):
80
+ - Client sends API key to authentication service
81
+ - Authentication service validates credentials
82
+ - Authentication service returns a token with expiration time
83
+ - Client stores the token securely
84
+
85
+ 3. **Token Validation**:
86
+ - Before each API request, token validity is checked
87
+ - If valid, the token is included in the request
88
+ - If expired or near expiration, token is refreshed
89
+
90
+ 4. **Token Refreshing**:
91
+ - Client detects when token is approaching expiration
92
+ - Client automatically requests a new token
93
+ - New token replaces the old one for future requests
94
+
95
+ Authentication Headers
96
+ ----------------------
97
+
98
+ The SDK automatically includes the necessary headers for authentication:
99
+
100
+ For token generation:
101
+ - ``X-Api-Key``: Your API key
102
+ - ``X-IBM-Client-Id``: saascore-{your-client-id}
103
+
104
+ For API requests:
105
+ - ``Authorization``: Bearer {token}
106
+ - ``X-IBM-Client-Id``: ghgemissions-{your-client-id}
107
+ - ``X-Client-Source``: node-sdk
108
+
109
+ Architecture Diagram
110
+ --------------------
111
+
112
+ ::
113
+
114
+ +-----------------+ +-------------------------+
115
+ | Your application| | Token Service (GET) |
116
+ | (init once) | | authUrl / default URL |
117
+ +--------+--------+ +-----------+-------------+
118
+ | ^
119
+ | getClient({apiKey, clientId, | (managed mode only:
120
+ | orgId, [authUrl], [host]}) | X-Api-Key, saascore-Client-Id,
121
+ v | orgId => returns JWT)
122
+ +--------+--------------------------------+-------------+
123
+ | Client (singleton) |
124
+ | - token, exp, domain, clientId |
125
+ | - refresh before expiry (managed mode) |
126
+ +--------+--------------------------------+-------------+
127
+ | ^
128
+ | makeApiRequest(...) |
129
+ v |
130
+ +--------+--------------------------------+-------------+
131
+ | Request layer (axios) |
132
+ | Adds headers: |
133
+ | - Authorization: Bearer <token> |
134
+ | - X-IBM-Client-Id: ghgemissions-<clientId> |
135
+ | - X-Client-Source: excel | node-sdk |
136
+ +--------+--------------------------------+-------------+
137
+ |
138
+ v
139
+ +--------+--------------------------------+-------------+
140
+ | Emissions API (host/domain) |
141
+ +-------------------------------------------------------+
142
+
143
+
144
+ Security Best Practices
145
+ -----------------------
146
+
147
+ 1. **Use environment variables** for credentials:
148
+
149
+ .. code-block:: javascript
150
+
151
+ await Client.getClient({
152
+ apiKey: process.env.ENVIZI_API_KEY,
153
+ clientId: process.env.ENVIZI_CLIENT_ID,
154
+ orgId: process.env.ENVIZI_ORG_ID
155
+ });
156
+
157
+ 2. **Never hardcode** credentials in your application code
158
+ 3. **Implement proper access controls** for API keys
159
+ 4. **Use secure environment variables** for production deployments
160
+ 5. **Implement least privilege** principles for API access
161
+
162
+
163
+ For more information about the Client that manages authentication, see the :doc:`client` page.
164
+
@@ -0,0 +1,137 @@
1
+ ======
2
+ Client
3
+ ======
4
+
5
+ Overview
6
+ --------
7
+
8
+ The Client is the central component of the IBM Envizi - Emissions API Node.js SDK. It handles authentication, maintains connections to the API, and provides a unified interface for all API operations.
9
+
10
+ .. code-block:: none
11
+
12
+ +----------------------+
13
+ | Application |<-----------+
14
+ +----------------------+ |
15
+ | |
16
+ v |
17
+ +----------------------+ |
18
+ | Client |<-----------+
19
+ +----------------------+ |
20
+ | |
21
+ v |
22
+ +----------------------+ +----------------------+
23
+ | Authentication |---->| API Module Requests |
24
+ +----------------------+ +----------------------+
25
+
26
+ Client Initialization
27
+ ---------------------
28
+
29
+ The Client is designed as a singleton to ensure consistent authentication across your application. Initialize it once at application startup:
30
+
31
+ 1. Managed token (SDK fetches & refreshes)
32
+
33
+ .. code-block:: javascript
34
+
35
+ import { Client } from 'emissions-api-sdk';
36
+
37
+ await Client.getClient({
38
+ apiKey: process.env.ENVIZI_API_KEY,
39
+ clientId: process.env.ENVIZI_CLIENT_ID,
40
+ orgId: process.env.ENVIZI_ORG_ID
41
+ });
42
+
43
+ 2. User-provided token (SDK will **not** refresh it)
44
+
45
+ .. code-block:: javascript
46
+
47
+ import { Client } from "emissions-api-sdk";
48
+
49
+ await Client.getClient({
50
+ clientId: process.env.ENVIZI_CLIENT_ID,
51
+ token: process.env.TOKEN
52
+ });
53
+
54
+ Configuration Options
55
+ ---------------------
56
+
57
+ The Client accepts the following configuration parameters:
58
+
59
+ .. list-table::
60
+ :header-rows: 1
61
+ :widths: 20 15 65
62
+
63
+ * - Parameter
64
+ - Required
65
+ - Description
66
+ * - apiKey
67
+ - Yes*
68
+ - API key for authentication (required unless using token)
69
+ * - clientId
70
+ - Yes
71
+ - Client ID for API access
72
+ * - orgId
73
+ - Yes*
74
+ - Organization ID (required with apiKey)
75
+ * - token
76
+ - Yes*
77
+ - Pre-generated token (required if not using apiKey)
78
+ * - host
79
+ - No
80
+ - Custom API endpoint (defaults to production)
81
+ * - authUrl
82
+ - No
83
+ - Custom authentication endpoint (defaults to production)
84
+
85
+ .. note::
86
+ Either ``apiKey+orgId`` OR ``token`` is required
87
+
88
+ Client Responsibilities
89
+ -----------------------
90
+
91
+ The Client handles several key responsibilities:
92
+
93
+ 1. **Singleton Management**: Ensures only one Client instance exists
94
+ 2. **Configuration Validation**: Verifies required parameters
95
+ 3. **Token Generation**: Obtains tokens from the authentication service
96
+ 4. **Token Refreshing**: Automatically refreshes tokens before expiration
97
+ 5. **Request Authentication**: Adds proper headers to all API requests
98
+
99
+ Error Handling
100
+ --------------
101
+
102
+ Handle authentication errors gracefully:
103
+
104
+ .. code-block:: javascript
105
+
106
+ try {
107
+ await Client.getClient({
108
+ apiKey: process.env.ENVIZI_API_KEY,
109
+ clientId: process.env.ENVIZI_CLIENT_ID,
110
+ orgId: process.env.ENVIZI_ORG_ID
111
+ });
112
+ } catch (error) {
113
+ console.error("Authentication error:", error.message);
114
+ // Implement appropriate error handling
115
+ if (error.response) {
116
+ // Handle specific HTTP error responses
117
+ console.error("Status:", error.response.status);
118
+ console.error("Details:", error.response.data);
119
+ }
120
+ }
121
+
122
+
123
+ Best Practices
124
+ --------------
125
+
126
+ For optimal Client usage:
127
+
128
+ 1. **Initialize once** at application startup
129
+ 2. **Store credentials securely** using environment variables
130
+ 3. **Implement proper error handling** for authentication failures
131
+ 4. **Let the SDK handle** token refreshing automatically
132
+ 5. **Reuse the Client instance** across your application
133
+
134
+ Authentication Integration
135
+ --------------------------
136
+
137
+ The Client works closely with the Authentication module to manage tokens. For detailed information about the authentication process, supported methods, and security best practices, see the :doc:`authentication` page.
@@ -0,0 +1,56 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+ #
3
+ # For the full list of built-in configuration values, see the documentation:
4
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
5
+
6
+ # -- Project information -----------------------------------------------------
7
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
8
+
9
+ project = 'IBM Envizi - Emissions API Node.js SDK'
10
+ copyright = '2025, IBM Corporation'
11
+ author = 'Ridham Thumar'
12
+
13
+ # -- General configuration ---------------------------------------------------
14
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
15
+ import os
16
+ import sys
17
+ sys.path.insert(0, os.path.abspath('../..'))
18
+
19
+ # Language used for content
20
+ language = 'en'
21
+
22
+ # Source file suffix
23
+ source_suffix = {
24
+ '.rst': 'restructuredtext',
25
+ }
26
+
27
+ # The master document
28
+ master_doc = 'index'
29
+
30
+ extensions = [
31
+ 'sphinx.ext.autodoc',
32
+ 'sphinx.ext.viewcode',
33
+ 'sphinx_js'
34
+ ]
35
+
36
+ js_language = 'typescript'
37
+
38
+ js_source_path = '../../src'
39
+
40
+ primary_domain = 'js'
41
+
42
+
43
+ templates_path = ['_templates']
44
+ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
45
+
46
+
47
+ # -- Options for HTML output -------------------------------------------------
48
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
49
+
50
+ html_theme = 'furo'
51
+ html_static_path = ['_static']
52
+
53
+ # Add CSS to improve notebook appearance
54
+ html_css_files = [
55
+ 'custom.css',
56
+ ]
@@ -0,0 +1,164 @@
1
+ ===============
2
+ Getting Started
3
+ ===============
4
+
5
+ Prerequisites
6
+ -------------
7
+
8
+ Before using the SDK, ensure you have:
9
+
10
+ - **Node.js** installed
11
+ - Active internet connection
12
+ - Sign up for the preview waitlist `IBMid sign up <https://www.ibm.com/account/reg/us-en/signup?formid=urx-53659>`_ page.
13
+ - API credentials (``apiKey``, ``tenantId``, ``orgId``), are available on the Emissions API `Overview Page <https://www-dev.supply-chain.ibm.com/envizi/emissions-api-home/overview?cuiURL=%2Femissions-api-home%2Foverview>`_ after sign up
14
+
15
+
16
+ Installation
17
+ ------------
18
+
19
+ You can install the SDK using `npm <https://www.npmjs.com/package/emissions-api-sdk>`_ or `yarn <https://yarnpkg.com/package?q=emissions-api-sdk&name=emissions-api-sdk>`_:
20
+
21
+ Using npm:
22
+
23
+ .. code-block:: bash
24
+
25
+ npm install emissions-api-sdk
26
+
27
+
28
+ Using yarn:
29
+
30
+ .. code-block:: bash
31
+
32
+ yarn install emissions-api-sdk
33
+
34
+
35
+ Basic Import
36
+ ~~~~~~~~~~~~
37
+
38
+ After installation, you can import the SDK in your project:
39
+
40
+ .. code-block:: javascript
41
+
42
+ // Import the entire SDK
43
+ const enviziSDK = require('emissions-api-sdk');
44
+
45
+ // Or using ES modules
46
+ import { Client, LocationEmission } from 'emissions-api-sdk';
47
+
48
+
49
+ Authentication
50
+ --------------
51
+
52
+ Initialize the client with your API credentials:
53
+
54
+ The SDK provides two authentication methods:
55
+
56
+ - Using an **API key** with following required Headers:
57
+ - ``X-Api-Key``: Your API key
58
+ - ``X-IBM-Client-Id``: saascore-{your-client-id}
59
+ - ``accept``: application/json
60
+
61
+ - Using a **Pre-generated token**
62
+ - Token Generation Endpoint: https://api.ibm.com/saascore/run/authentication-retrieve/api-key
63
+
64
+ Using API Key (Recommended)
65
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
66
+
67
+ .. code-block:: javascript
68
+
69
+ import { Client } from 'emissions-api-sdk';
70
+
71
+ async function initialize() {
72
+ try {
73
+ await Client.getClient({
74
+ apiKey: "your-api-key",
75
+ clientId: "your-client-id",
76
+ orgId: "your-org-id"
77
+ });
78
+ console.log("Client initialized successfully");
79
+ } catch (error) {
80
+ console.error("Failed to initialize client:", error);
81
+ }
82
+ }
83
+
84
+ initialize();
85
+
86
+ Using Pre-generated Token
87
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
88
+
89
+ If you already have a token, you can use it directly:
90
+
91
+ .. code-block:: javascript
92
+
93
+ import { Client } from 'emissions-api-sdk';
94
+
95
+ async function initialize() {
96
+ try {
97
+ await Client.getClient({
98
+ token: "your-pre-generated-token",
99
+ clientId: "your-client-id"
100
+ });
101
+ console.log("Client initialized successfully");
102
+ } catch (error) {
103
+ console.error("Failed to initialize client:", error);
104
+ }
105
+ }
106
+
107
+ initialize();
108
+
109
+ First API Call
110
+ --------------
111
+
112
+ After initializing the client, you can make your first API call. Here's an example of calculating location-based emissions:
113
+
114
+ .. code-block:: javascript
115
+
116
+ import { Client, LocationEmission } from 'emissions-api-sdk';
117
+
118
+ async function calculateEmissions() {
119
+ try {
120
+ // Initialize client
121
+ await Client.getClient({
122
+ apiKey: "your-api-key",
123
+ clientId: "your-client-id",
124
+ orgId: "your-org-id"
125
+ });
126
+
127
+ // Make API call
128
+ const result = await LocationEmission.calculate({
129
+ "location": {
130
+ "country": "USA",
131
+ "stateProvince": "california"
132
+ },
133
+ "activity": {
134
+ "type": "electricity",
135
+ "value": 1,
136
+ "unit": "kWh"
137
+ }
138
+ });
139
+
140
+ console.log("Emission calculation result:", result);
141
+ } catch (error) {
142
+ console.error("Error calculating emissions:", error);
143
+ }
144
+ }
145
+
146
+ calculateEmissions();
147
+
148
+ Example Response
149
+ ----------------
150
+
151
+ The API returns emission calculation results in JSON format. Here's an example response:
152
+
153
+ .. code-block:: json
154
+
155
+ {
156
+ "transactionId": "95a7efe7-02ae-47a3-a7fd-831bfca7cecd",
157
+ "totalCO2e": 0.20750174,
158
+ "CO2": 0.20681091,
159
+ "CH4": 0.00033022,
160
+ "N2O": 0.00036061,
161
+ "indirectCO2e": 0.01115131,
162
+ "unit": "kgCO2e",
163
+ "description": "The electricity emissions factor used to calculate this result was obtained from the year 2022 Managed - eGRID & US Climate Leaders factor set for the area United States and the region California."
164
+ }
@@ -0,0 +1,30 @@
1
+ IBM Envizi - Emissions API Node.js SDK
2
+ ======================================
3
+
4
+ .. toctree::
5
+ :maxdepth: 2
6
+ :caption: Contents:
7
+
8
+ getting_started
9
+ sdk
10
+ reference
11
+ troubleshooting
12
+
13
+ Introduction
14
+ ============
15
+
16
+ IBM Envizi - Emissions API (Emissions API) is a managed factor database and calculation engine for embedding greenhouse gas (GHG) emissions calculations into operational decision making.
17
+
18
+ The **emissions-api-sdk** is a Node.js SDK for using Emissions API in your projects.
19
+
20
+ Supported Emission Types
21
+ ------------------------
22
+
23
+ * **Location** – emissions from region-specific factors
24
+ * **Fugitive** – emissions from leaks or fugitive sources
25
+ * **Mobile** – emissions from vehicles and mobile equipment
26
+ * **Stationary** – emissions from fixed fuel consumption
27
+ * **Transportation & distribution** – logistics and supply chain activities
28
+ * **Generic** – custom emission calculations
29
+
30
+ The SDK is designed for embedding emission calculations in applications, building sustainability dashboards, automating large-scale datasets, and tracking carbon footprints.