@sudoplatform/sudo-common 7.1.2 → 7.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/lib/configurationManager/defaultConfigurationManager.js +3 -5
  2. package/package.json +2 -3
  3. package/.babelrc +0 -10
  4. package/.eslintrc.js +0 -91
  5. package/.gitignore +0 -14
  6. package/.gitlab-ci.yml +0 -101
  7. package/.npmignore +0 -1
  8. package/.prettierignore +0 -3
  9. package/.prettierrc.js +0 -7
  10. package/.publisher.json +0 -7
  11. package/.vscode/settings.json +0 -5
  12. package/.yarn/releases/yarn-1.22.19.cjs +0 -147529
  13. package/.yarnrc +0 -5
  14. package/bin/outdated-with-suppression.sh +0 -203
  15. package/bin/suppress-audit.sh +0 -15
  16. package/bin/suppress-outdated.sh +0 -60
  17. package/bin/yarn-audit-with-suppression.sh +0 -19
  18. package/dependencies-report.json +0 -640
  19. package/docs/.nojekyll +0 -1
  20. package/docs/assets/highlight.css +0 -57
  21. package/docs/assets/main.js +0 -54
  22. package/docs/assets/search.js +0 -1
  23. package/docs/assets/style.css +0 -1224
  24. package/docs/assets/widgets.png +0 -0
  25. package/docs/assets/widgets@2x.png +0 -0
  26. package/docs/classes/AccountLockedError.html +0 -163
  27. package/docs/classes/AuthenticationError.html +0 -169
  28. package/docs/classes/Base64.html +0 -245
  29. package/docs/classes/Buffer.html +0 -158
  30. package/docs/classes/ConfigurationNotSetError.html +0 -164
  31. package/docs/classes/ConfigurationSetNotFoundError.html +0 -168
  32. package/docs/classes/DecodeError.html +0 -168
  33. package/docs/classes/DefaultConfigurationManager.html +0 -213
  34. package/docs/classes/DefaultLogger.html +0 -291
  35. package/docs/classes/DefaultSudoKeyArchive.html +0 -363
  36. package/docs/classes/DefaultSudoKeyManager.html +0 -814
  37. package/docs/classes/FatalError.html +0 -169
  38. package/docs/classes/IllegalArgumentError.html +0 -168
  39. package/docs/classes/IllegalStateError.html +0 -169
  40. package/docs/classes/InsufficientEntitlementsError.html +0 -164
  41. package/docs/classes/InvalidOwnershipProofError.html +0 -163
  42. package/docs/classes/InvalidTokenError.html +0 -163
  43. package/docs/classes/KeyArchiveDecodingError.html +0 -168
  44. package/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
  45. package/docs/classes/KeyArchiveMissingError.html +0 -168
  46. package/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
  47. package/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
  48. package/docs/classes/KeyArchiveTypeError.html +0 -168
  49. package/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
  50. package/docs/classes/KeyArchiveVersionError.html +0 -168
  51. package/docs/classes/KeyNotFoundError.html +0 -168
  52. package/docs/classes/KeyStoreNotExportableError.html +0 -168
  53. package/docs/classes/LimitExceededError.html +0 -164
  54. package/docs/classes/NoEntitlementsError.html +0 -163
  55. package/docs/classes/NotAuthorizedError.html +0 -169
  56. package/docs/classes/NotRegisteredError.html +0 -168
  57. package/docs/classes/NotSignedInError.html +0 -164
  58. package/docs/classes/OperationNotImplementedError.html +0 -168
  59. package/docs/classes/RegisterError.html +0 -169
  60. package/docs/classes/RequestFailedError.html +0 -189
  61. package/docs/classes/ServiceError.html +0 -170
  62. package/docs/classes/SignOutError.html +0 -168
  63. package/docs/classes/SudoCryptoProviderDefaults.html +0 -106
  64. package/docs/classes/UnknownGraphQLError.html +0 -169
  65. package/docs/classes/UnrecognizedAlgorithmError.html +0 -168
  66. package/docs/classes/UserNotConfirmedError.html +0 -164
  67. package/docs/classes/VersionMismatchError.html +0 -166
  68. package/docs/enums/CachePolicy.html +0 -72
  69. package/docs/enums/EncryptionAlgorithm.html +0 -80
  70. package/docs/enums/KeyArchiveKeyType.html +0 -86
  71. package/docs/enums/KeyDataKeyFormat.html +0 -92
  72. package/docs/enums/KeyDataKeyType.html +0 -85
  73. package/docs/enums/ListOperationResultStatus.html +0 -85
  74. package/docs/enums/PublicKeyFormat.html +0 -68
  75. package/docs/functions/isAppSyncNetworkError.html +0 -147
  76. package/docs/functions/isInsecureKeyArchive.html +0 -147
  77. package/docs/functions/isSecureKeyArchive.html +0 -147
  78. package/docs/functions/isUnrecognizedKeyArchive.html +0 -147
  79. package/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
  80. package/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
  81. package/docs/functions/mapGraphQLToClientError.html +0 -154
  82. package/docs/functions/mapNetworkErrorToClientError.html +0 -154
  83. package/docs/index.html +0 -146
  84. package/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
  85. package/docs/interfaces/BooleanFilter.html +0 -75
  86. package/docs/interfaces/ConfigurationManager.html +0 -200
  87. package/docs/interfaces/KeyData.html +0 -106
  88. package/docs/interfaces/ListOperationFailureResult.html +0 -76
  89. package/docs/interfaces/ListOperationPartialResult.html +0 -102
  90. package/docs/interfaces/ListOperationSuccessResult.html +0 -90
  91. package/docs/interfaces/ListOutput.html +0 -80
  92. package/docs/interfaces/Logger.html +0 -251
  93. package/docs/interfaces/Owner.html +0 -72
  94. package/docs/interfaces/PublicKey.html +0 -72
  95. package/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
  96. package/docs/interfaces/StringFilter.html +0 -82
  97. package/docs/interfaces/SudoCryptoProvider.html +0 -865
  98. package/docs/interfaces/SudoKeyArchive.html +0 -257
  99. package/docs/interfaces/SudoKeyManager.html +0 -848
  100. package/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
  101. package/docs/interfaces/ValidationResult.html +0 -83
  102. package/docs/modules.html +0 -248
  103. package/docs/types/AppSyncError.html +0 -138
  104. package/docs/types/AppSyncNetworkError.html +0 -138
  105. package/docs/types/InsecureKeyArchive.html +0 -138
  106. package/docs/types/KeyArchive.html +0 -138
  107. package/docs/types/KeyArchiveKeyInfo.html +0 -154
  108. package/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
  109. package/docs/types/ListOperationResult.html +0 -148
  110. package/docs/types/SecureKeyArchive.html +0 -138
  111. package/docs/types/Subset.html +0 -144
  112. package/docs/types/UnrecognizedKeyArchive.html +0 -138
  113. package/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
  114. package/docs/variables/InsecureKeyArchiveCodec.html +0 -138
  115. package/docs/variables/InsecureKeyArchiveType.html +0 -138
  116. package/docs/variables/KeyArchiveCodec.html +0 -138
  117. package/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
  118. package/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
  119. package/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
  120. package/docs/variables/SecureKeyArchiveCodec.html +0 -138
  121. package/docs/variables/SecureKeyArchiveType.html +0 -138
  122. package/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
  123. package/github/.babelrc +0 -10
  124. package/github/.eslintrc.js +0 -91
  125. package/github/.gitignore +0 -14
  126. package/github/.gitlab-ci.yml +0 -101
  127. package/github/.npmignore +0 -1
  128. package/github/.prettierignore +0 -3
  129. package/github/.prettierrc.js +0 -7
  130. package/github/.publisher.json +0 -7
  131. package/github/.vscode/settings.json +0 -5
  132. package/github/.yarn/releases/yarn-1.22.19.cjs +0 -147529
  133. package/github/.yarnrc +0 -5
  134. package/github/CHANGELOG.md +0 -51
  135. package/github/README.md +0 -8
  136. package/github/bin/outdated-with-suppression.sh +0 -203
  137. package/github/bin/suppress-audit.sh +0 -15
  138. package/github/bin/suppress-outdated.sh +0 -60
  139. package/github/bin/yarn-audit-with-suppression.sh +0 -19
  140. package/github/docs/.nojekyll +0 -1
  141. package/github/docs/assets/highlight.css +0 -57
  142. package/github/docs/assets/main.js +0 -54
  143. package/github/docs/assets/search.js +0 -1
  144. package/github/docs/assets/style.css +0 -1224
  145. package/github/docs/assets/widgets.png +0 -0
  146. package/github/docs/assets/widgets@2x.png +0 -0
  147. package/github/docs/classes/AccountLockedError.html +0 -163
  148. package/github/docs/classes/AuthenticationError.html +0 -169
  149. package/github/docs/classes/Base64.html +0 -245
  150. package/github/docs/classes/Buffer.html +0 -158
  151. package/github/docs/classes/ConfigurationNotSetError.html +0 -164
  152. package/github/docs/classes/ConfigurationSetNotFoundError.html +0 -168
  153. package/github/docs/classes/DecodeError.html +0 -168
  154. package/github/docs/classes/DefaultConfigurationManager.html +0 -213
  155. package/github/docs/classes/DefaultLogger.html +0 -291
  156. package/github/docs/classes/DefaultSudoKeyArchive.html +0 -363
  157. package/github/docs/classes/DefaultSudoKeyManager.html +0 -814
  158. package/github/docs/classes/FatalError.html +0 -169
  159. package/github/docs/classes/IllegalArgumentError.html +0 -168
  160. package/github/docs/classes/IllegalStateError.html +0 -169
  161. package/github/docs/classes/InsufficientEntitlementsError.html +0 -164
  162. package/github/docs/classes/InvalidOwnershipProofError.html +0 -163
  163. package/github/docs/classes/InvalidTokenError.html +0 -163
  164. package/github/docs/classes/KeyArchiveDecodingError.html +0 -168
  165. package/github/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
  166. package/github/docs/classes/KeyArchiveMissingError.html +0 -168
  167. package/github/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
  168. package/github/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
  169. package/github/docs/classes/KeyArchiveTypeError.html +0 -168
  170. package/github/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
  171. package/github/docs/classes/KeyArchiveVersionError.html +0 -168
  172. package/github/docs/classes/KeyNotFoundError.html +0 -168
  173. package/github/docs/classes/KeyStoreNotExportableError.html +0 -168
  174. package/github/docs/classes/LimitExceededError.html +0 -164
  175. package/github/docs/classes/NoEntitlementsError.html +0 -163
  176. package/github/docs/classes/NotAuthorizedError.html +0 -169
  177. package/github/docs/classes/NotRegisteredError.html +0 -168
  178. package/github/docs/classes/NotSignedInError.html +0 -164
  179. package/github/docs/classes/OperationNotImplementedError.html +0 -168
  180. package/github/docs/classes/RegisterError.html +0 -169
  181. package/github/docs/classes/RequestFailedError.html +0 -189
  182. package/github/docs/classes/ServiceError.html +0 -170
  183. package/github/docs/classes/SignOutError.html +0 -168
  184. package/github/docs/classes/SudoCryptoProviderDefaults.html +0 -106
  185. package/github/docs/classes/UnknownGraphQLError.html +0 -169
  186. package/github/docs/classes/UnrecognizedAlgorithmError.html +0 -168
  187. package/github/docs/classes/UserNotConfirmedError.html +0 -164
  188. package/github/docs/classes/VersionMismatchError.html +0 -166
  189. package/github/docs/enums/CachePolicy.html +0 -72
  190. package/github/docs/enums/EncryptionAlgorithm.html +0 -80
  191. package/github/docs/enums/KeyArchiveKeyType.html +0 -86
  192. package/github/docs/enums/KeyDataKeyFormat.html +0 -92
  193. package/github/docs/enums/KeyDataKeyType.html +0 -85
  194. package/github/docs/enums/ListOperationResultStatus.html +0 -85
  195. package/github/docs/enums/PublicKeyFormat.html +0 -68
  196. package/github/docs/functions/isAppSyncNetworkError.html +0 -147
  197. package/github/docs/functions/isInsecureKeyArchive.html +0 -147
  198. package/github/docs/functions/isSecureKeyArchive.html +0 -147
  199. package/github/docs/functions/isUnrecognizedKeyArchive.html +0 -147
  200. package/github/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
  201. package/github/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
  202. package/github/docs/functions/mapGraphQLToClientError.html +0 -154
  203. package/github/docs/functions/mapNetworkErrorToClientError.html +0 -154
  204. package/github/docs/index.html +0 -146
  205. package/github/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
  206. package/github/docs/interfaces/BooleanFilter.html +0 -75
  207. package/github/docs/interfaces/ConfigurationManager.html +0 -200
  208. package/github/docs/interfaces/KeyData.html +0 -106
  209. package/github/docs/interfaces/ListOperationFailureResult.html +0 -76
  210. package/github/docs/interfaces/ListOperationPartialResult.html +0 -102
  211. package/github/docs/interfaces/ListOperationSuccessResult.html +0 -90
  212. package/github/docs/interfaces/ListOutput.html +0 -80
  213. package/github/docs/interfaces/Logger.html +0 -251
  214. package/github/docs/interfaces/Owner.html +0 -72
  215. package/github/docs/interfaces/PublicKey.html +0 -72
  216. package/github/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
  217. package/github/docs/interfaces/StringFilter.html +0 -82
  218. package/github/docs/interfaces/SudoCryptoProvider.html +0 -865
  219. package/github/docs/interfaces/SudoKeyArchive.html +0 -257
  220. package/github/docs/interfaces/SudoKeyManager.html +0 -848
  221. package/github/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
  222. package/github/docs/interfaces/ValidationResult.html +0 -83
  223. package/github/docs/modules.html +0 -248
  224. package/github/docs/types/AppSyncError.html +0 -138
  225. package/github/docs/types/AppSyncNetworkError.html +0 -138
  226. package/github/docs/types/InsecureKeyArchive.html +0 -138
  227. package/github/docs/types/KeyArchive.html +0 -138
  228. package/github/docs/types/KeyArchiveKeyInfo.html +0 -154
  229. package/github/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
  230. package/github/docs/types/ListOperationResult.html +0 -148
  231. package/github/docs/types/SecureKeyArchive.html +0 -138
  232. package/github/docs/types/Subset.html +0 -144
  233. package/github/docs/types/UnrecognizedKeyArchive.html +0 -138
  234. package/github/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
  235. package/github/docs/variables/InsecureKeyArchiveCodec.html +0 -138
  236. package/github/docs/variables/InsecureKeyArchiveType.html +0 -138
  237. package/github/docs/variables/KeyArchiveCodec.html +0 -138
  238. package/github/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
  239. package/github/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
  240. package/github/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
  241. package/github/docs/variables/SecureKeyArchiveCodec.html +0 -138
  242. package/github/docs/variables/SecureKeyArchiveType.html +0 -138
  243. package/github/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
  244. package/github/jest.config.json +0 -14
  245. package/github/package.json +0 -91
  246. package/github/src/configurationManager/defaultConfigurationManager.ts +0 -281
  247. package/github/src/errors/error.ts +0 -469
  248. package/github/src/index.ts +0 -8
  249. package/github/src/logging/bunyanLogger.ts +0 -47
  250. package/github/src/logging/logger.ts +0 -164
  251. package/github/src/sudoKeyArchive/index.ts +0 -4
  252. package/github/src/sudoKeyArchive/keyArchive.ts +0 -120
  253. package/github/src/sudoKeyArchive/keyInfo.ts +0 -47
  254. package/github/src/sudoKeyArchive/keyType.ts +0 -50
  255. package/github/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
  256. package/github/src/sudoKeyManager/index.ts +0 -4
  257. package/github/src/sudoKeyManager/keyData.ts +0 -60
  258. package/github/src/sudoKeyManager/publicKey.ts +0 -9
  259. package/github/src/sudoKeyManager/sudoCryptoProvider.ts +0 -416
  260. package/github/src/sudoKeyManager/sudoKeyManager.ts +0 -609
  261. package/github/src/types/types.ts +0 -129
  262. package/github/src/utils/base64.ts +0 -75
  263. package/github/src/utils/buffer.ts +0 -39
  264. package/github/test/integration/defaultConfigurationManager.spec.ts +0 -85
  265. package/github/test/matchers.ts +0 -122
  266. package/github/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
  267. package/github/test/unit/errors/error.spec.ts +0 -115
  268. package/github/test/unit/keyType.spec.ts +0 -54
  269. package/github/test/unit/logging/logger.spec.ts +0 -182
  270. package/github/test/unit/sudoKeyArchive.spec.ts +0 -1609
  271. package/github/test/unit/sudoKeyManager.spec.ts +0 -1045
  272. package/github/test/unit/utils/base64.spec.ts +0 -45
  273. package/github/test/unit/utils/buffer.spec.ts +0 -45
  274. package/github/test/unit/utils/listOperationResult.spec.ts +0 -84
  275. package/github/tsconfig.json +0 -20
  276. package/github/tsconfig.test.json +0 -7
  277. package/github/yarn.lock +0 -5922
  278. package/jest.config.json +0 -14
  279. package/src/configurationManager/defaultConfigurationManager.ts +0 -281
  280. package/src/errors/error.ts +0 -469
  281. package/src/index.ts +0 -8
  282. package/src/logging/bunyanLogger.ts +0 -47
  283. package/src/logging/logger.ts +0 -164
  284. package/src/sudoKeyArchive/index.ts +0 -4
  285. package/src/sudoKeyArchive/keyArchive.ts +0 -120
  286. package/src/sudoKeyArchive/keyInfo.ts +0 -47
  287. package/src/sudoKeyArchive/keyType.ts +0 -50
  288. package/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
  289. package/src/sudoKeyManager/index.ts +0 -4
  290. package/src/sudoKeyManager/keyData.ts +0 -60
  291. package/src/sudoKeyManager/publicKey.ts +0 -9
  292. package/src/sudoKeyManager/sudoCryptoProvider.ts +0 -416
  293. package/src/sudoKeyManager/sudoKeyManager.ts +0 -609
  294. package/src/types/types.ts +0 -129
  295. package/src/utils/base64.ts +0 -75
  296. package/src/utils/buffer.ts +0 -39
  297. package/test/integration/defaultConfigurationManager.spec.ts +0 -85
  298. package/test/matchers.ts +0 -122
  299. package/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
  300. package/test/unit/errors/error.spec.ts +0 -115
  301. package/test/unit/keyType.spec.ts +0 -54
  302. package/test/unit/logging/logger.spec.ts +0 -182
  303. package/test/unit/sudoKeyArchive.spec.ts +0 -1609
  304. package/test/unit/sudoKeyManager.spec.ts +0 -1045
  305. package/test/unit/utils/base64.spec.ts +0 -45
  306. package/test/unit/utils/buffer.spec.ts +0 -45
  307. package/test/unit/utils/listOperationResult.spec.ts +0 -84
  308. package/tsconfig.json +0 -20
  309. package/tsconfig.test.json +0 -7
  310. package/yarn.lock +0 -5922
package/jest.config.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "testEnvironment": "jsdom",
3
- "testMatch": ["<rootDir>/test/**/*.spec.ts"],
4
- "testPathIgnorePatterns": ["/node_modules/", "/lib/"],
5
- "clearMocks": true,
6
- "collectCoverageFrom": ["src/**/*.ts", "!**/*.d.ts", "!node_modules/**"],
7
- "coverageReporters": ["text", "json-summary"],
8
- "coverageDirectory": "<rootDir>/build/coverage",
9
- "globals": {
10
- "ts-jest": {
11
- "tsConfig": "tsconfig.test.json"
12
- }
13
- }
14
- }
@@ -1,281 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unsafe-return */
3
- /* eslint-disable @typescript-eslint/no-unsafe-call */
4
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
5
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
6
- import { fold, left } from 'fp-ts/lib/Either'
7
- import { pipe } from 'fp-ts/lib/pipeable'
8
- import * as t from 'io-ts'
9
- import * as AWS from 'aws-sdk'
10
- import { PathReporter } from 'io-ts/lib/PathReporter'
11
- import {
12
- ConfigurationNotSetError,
13
- DecodeError,
14
- ConfigurationSetNotFoundError,
15
- } from '../errors/error'
16
-
17
- /**
18
- * Service compatibility information.
19
- */
20
- export interface ServiceCompatibilityInfo {
21
- /**
22
- * The name of the service associated with the compatibility info. This matches one of the
23
- * service name present in sudoplatformconfig.json.
24
- */
25
- name: string
26
- /**
27
- * The version of the service config present in sudoplatformconfig.json. It defaults
28
- * to 1 if not present.
29
- */
30
- configVersion: number
31
- /**
32
- * The minimum supported service config version currently supported by the backend.
33
- */
34
- minSupportedVersion?: number
35
- /**
36
- * Any service config version less than or equal to this version is considered deprecated
37
- * and the backend may remove the support for those versions after a grace period.
38
- */
39
- deprecatedVersion?: number
40
- /**
41
- * After this time any deprecated service config versions will no longer be compatible
42
- * with the backend. It is recommended to warn the user prior to the deprecation grace.
43
- */
44
- deprecationGrace?: Date
45
- }
46
-
47
- /**
48
- * Result returned by `validateConfig` API if an incompatible client config is found when compared
49
- * to the deployed backend services.
50
- */
51
- export interface ValidationResult {
52
- /**
53
- * The list of incompatible services. The client must be upgraded to the latest
54
- * version in order to use these services.
55
- */
56
- incompatible: ServiceCompatibilityInfo[]
57
- /**
58
- * The list of services that will be made incompatible with the current version of the
59
- * client. The users should be warned that after the specified grace period these services will be
60
- * made incompatible.
61
- */
62
- deprecated: ServiceCompatibilityInfo[]
63
- }
64
-
65
- /**
66
- * Interface that encapsulates the APIs common to all configuration manager implementations.
67
- * A configuration manager should be a singleton that holds reference to a parsed config
68
- * and returns the configuration set specific to a given namespace.
69
- */
70
- export interface ConfigurationManager {
71
- /**
72
- * Set config that will be parsed as JSON
73
- *
74
- * @param config A string representation of configuration
75
- *
76
- * @returns ConfigurationManager
77
- */
78
- setConfig(config: string): ConfigurationManager
79
-
80
- /**
81
- * Get a subset of configuration by namespace
82
- *
83
- * @param namespace The key for the nested json object
84
- *
85
- * @returns Configuration set specific to a given namespace
86
- *
87
- * @throws {@link ConfigurationNotSetError}
88
- */
89
- getConfigSet(namespace?: string): string | undefined
90
-
91
- /**
92
- * Decode a configuration set to a given type
93
- *
94
- * @param configSet Configuration set specific to a given namespace
95
- * @param codec The codec to bind the configuration set to
96
- *
97
- * @returns Configuration as a given type
98
- *
99
- * @throws {@link DecodeError}
100
- */
101
- bind<T>(configSet: unknown, codec: t.Mixed): T
102
-
103
- /**
104
- * Get a configuration by namespace and decode and validate
105
- * that configuration set to a given type. If no namespace
106
- * provided, try and use the whole configuration object
107
- * to bind to the given type.
108
- *
109
- * @param namespace The key for the nested json object or undefined
110
- * @param codec The codec to bind the configuration set to
111
- *
112
- * @returns Configuration as a given type
113
- *
114
- * @throws {@link ConfigurationNotSetError}
115
- * @throws {@link ConfigurationSetNotFoundError}
116
- * @throws {@link DecodeError}
117
- */
118
- bindConfigSet<T>(codec: t.Mixed, namespace?: string): T
119
-
120
- /**
121
- * Validates the client configuration (sudoplatformconfig.json) against the currently deployed set of
122
- * backend services. If the client configuration is valid, i.e. the client is compatible will all deployed
123
- * backend services, then the call will complete with `success` result. If any part of the client
124
- * configuration is incompatible then a detailed information on the incompatible service will be
125
- * returned in `failure` result. See `SudoConfigManagerError.compatibilityIssueFound` for more details.
126
- *
127
- * @return validation result with the details of incompatible or deprecated service configurations.
128
- */
129
- validateConfig(): Promise<ValidationResult>
130
- }
131
-
132
- /**
133
- * Singleton to manage configuration
134
- */
135
- export class DefaultConfigurationManager implements ConfigurationManager {
136
- private static instance: DefaultConfigurationManager
137
-
138
- private _config: string | undefined
139
-
140
- private constructor() {
141
- // Do Nothing.
142
- }
143
-
144
- public static getInstance(): DefaultConfigurationManager {
145
- if (!DefaultConfigurationManager.instance) {
146
- DefaultConfigurationManager.instance = new DefaultConfigurationManager()
147
- }
148
-
149
- return DefaultConfigurationManager.instance
150
- }
151
-
152
- public setConfig(config: string): DefaultConfigurationManager {
153
- this._config = config
154
-
155
- return DefaultConfigurationManager.instance
156
- }
157
-
158
- public getConfigSet(namespace?: string): string {
159
- if (!this._config) {
160
- throw new ConfigurationNotSetError()
161
- }
162
-
163
- const parsed = JSON.parse(this._config)
164
- const configSet = namespace ? parsed[namespace] : parsed
165
-
166
- return configSet
167
- }
168
-
169
- public bind<T>(configSet: unknown, codec: t.Mixed): T {
170
- // Decode and validate config
171
- return pipe(
172
- codec.decode(configSet),
173
- fold(
174
- (errors: t.Errors): T => {
175
- throw new DecodeError(PathReporter.report(left(errors)).join('\n'))
176
- },
177
- (v: T): T => v,
178
- ),
179
- )
180
- }
181
-
182
- public bindConfigSet<T>(codec: t.Mixed, namespace?: string): T {
183
- const configSet = this.getConfigSet(namespace)
184
-
185
- if (!configSet) {
186
- throw new ConfigurationSetNotFoundError(namespace)
187
- }
188
-
189
- return this.bind<T>(configSet, codec)
190
- }
191
-
192
- public async validateConfig(): Promise<ValidationResult> {
193
- if (!this._config) {
194
- return { incompatible: [], deprecated: [] }
195
- }
196
-
197
- const config = JSON.parse(this._config)
198
-
199
- const region = config.identityService?.region
200
- const bucket = config.identityService?.serviceInfoBucket
201
-
202
- if (!(region && bucket)) {
203
- return { incompatible: [], deprecated: [] }
204
- }
205
-
206
- const s3Client = new AWS.S3({ region: region })
207
-
208
- const incompatible: ServiceCompatibilityInfo[] = []
209
- const deprecated: ServiceCompatibilityInfo[] = []
210
-
211
- const objects = await s3Client
212
- .makeUnauthenticatedRequest('listObjects', {
213
- Bucket: bucket,
214
- })
215
- .promise()
216
-
217
- if (!objects.Contents?.length) {
218
- return { incompatible: [], deprecated: [] }
219
- }
220
-
221
- const keys = objects.Contents.map((object: any) => object.Key)
222
-
223
- // Only fetch the service info docs for the services that are present in client config
224
- // to minimize the network calls.
225
- const keysToFetch = keys.filter(
226
- (key: string) =>
227
- key.endsWith('.json') && config[key.replace('.json', '')],
228
- )
229
-
230
- for (const key of keysToFetch) {
231
- const object = await s3Client
232
- .makeUnauthenticatedRequest('getObject', {
233
- Key: key,
234
- Bucket: bucket,
235
- })
236
- .promise()
237
-
238
- let body: string
239
-
240
- if (typeof object.Body === 'string') {
241
- body = object.Body
242
- } else if (ArrayBuffer.isView(object.Body)) {
243
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
244
- body = new TextDecoder().decode(object.Body)
245
- } else {
246
- continue
247
- }
248
-
249
- const json = JSON.parse(body)
250
- const serviceName = key.replace('.json', '')
251
- const serviceInfo: any = json[serviceName]
252
- const serviceConfig: any = config[serviceName]
253
- if (serviceInfo && serviceConfig) {
254
- const currentVersion: number = serviceConfig.version ?? 1
255
- const deprecationGrace: number = serviceInfo.deprecationGrace ?? -1
256
- const compatibilityInfo: ServiceCompatibilityInfo = {
257
- name: serviceName,
258
- configVersion: currentVersion,
259
- minSupportedVersion: serviceInfo.minVersion,
260
- deprecatedVersion: serviceInfo.deprecated,
261
- deprecationGrace:
262
- deprecationGrace != -1 ? new Date(deprecationGrace) : undefined,
263
- }
264
-
265
- // If the service config in `sudoplatformconfig.json` is less than the
266
- // minimum supported version then the client is incompatible.
267
- if (currentVersion < (compatibilityInfo.minSupportedVersion ?? 0)) {
268
- incompatible.push(compatibilityInfo)
269
- }
270
-
271
- // If the service config is less than or equal to the deprecated version
272
- // then it will be made incompatible after the deprecation grace.
273
- if (currentVersion <= (compatibilityInfo.deprecatedVersion ?? 0)) {
274
- deprecated.push(compatibilityInfo)
275
- }
276
- }
277
- }
278
-
279
- return { incompatible, deprecated }
280
- }
281
- }