@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.
- package/lib/configurationManager/defaultConfigurationManager.js +3 -5
- package/package.json +2 -3
- package/.babelrc +0 -10
- package/.eslintrc.js +0 -91
- package/.gitignore +0 -14
- package/.gitlab-ci.yml +0 -101
- package/.npmignore +0 -1
- package/.prettierignore +0 -3
- package/.prettierrc.js +0 -7
- package/.publisher.json +0 -7
- package/.vscode/settings.json +0 -5
- package/.yarn/releases/yarn-1.22.19.cjs +0 -147529
- package/.yarnrc +0 -5
- package/bin/outdated-with-suppression.sh +0 -203
- package/bin/suppress-audit.sh +0 -15
- package/bin/suppress-outdated.sh +0 -60
- package/bin/yarn-audit-with-suppression.sh +0 -19
- package/dependencies-report.json +0 -640
- package/docs/.nojekyll +0 -1
- package/docs/assets/highlight.css +0 -57
- package/docs/assets/main.js +0 -54
- package/docs/assets/search.js +0 -1
- package/docs/assets/style.css +0 -1224
- package/docs/assets/widgets.png +0 -0
- package/docs/assets/widgets@2x.png +0 -0
- package/docs/classes/AccountLockedError.html +0 -163
- package/docs/classes/AuthenticationError.html +0 -169
- package/docs/classes/Base64.html +0 -245
- package/docs/classes/Buffer.html +0 -158
- package/docs/classes/ConfigurationNotSetError.html +0 -164
- package/docs/classes/ConfigurationSetNotFoundError.html +0 -168
- package/docs/classes/DecodeError.html +0 -168
- package/docs/classes/DefaultConfigurationManager.html +0 -213
- package/docs/classes/DefaultLogger.html +0 -291
- package/docs/classes/DefaultSudoKeyArchive.html +0 -363
- package/docs/classes/DefaultSudoKeyManager.html +0 -814
- package/docs/classes/FatalError.html +0 -169
- package/docs/classes/IllegalArgumentError.html +0 -168
- package/docs/classes/IllegalStateError.html +0 -169
- package/docs/classes/InsufficientEntitlementsError.html +0 -164
- package/docs/classes/InvalidOwnershipProofError.html +0 -163
- package/docs/classes/InvalidTokenError.html +0 -163
- package/docs/classes/KeyArchiveDecodingError.html +0 -168
- package/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
- package/docs/classes/KeyArchiveMissingError.html +0 -168
- package/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
- package/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
- package/docs/classes/KeyArchiveTypeError.html +0 -168
- package/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
- package/docs/classes/KeyArchiveVersionError.html +0 -168
- package/docs/classes/KeyNotFoundError.html +0 -168
- package/docs/classes/KeyStoreNotExportableError.html +0 -168
- package/docs/classes/LimitExceededError.html +0 -164
- package/docs/classes/NoEntitlementsError.html +0 -163
- package/docs/classes/NotAuthorizedError.html +0 -169
- package/docs/classes/NotRegisteredError.html +0 -168
- package/docs/classes/NotSignedInError.html +0 -164
- package/docs/classes/OperationNotImplementedError.html +0 -168
- package/docs/classes/RegisterError.html +0 -169
- package/docs/classes/RequestFailedError.html +0 -189
- package/docs/classes/ServiceError.html +0 -170
- package/docs/classes/SignOutError.html +0 -168
- package/docs/classes/SudoCryptoProviderDefaults.html +0 -106
- package/docs/classes/UnknownGraphQLError.html +0 -169
- package/docs/classes/UnrecognizedAlgorithmError.html +0 -168
- package/docs/classes/UserNotConfirmedError.html +0 -164
- package/docs/classes/VersionMismatchError.html +0 -166
- package/docs/enums/CachePolicy.html +0 -72
- package/docs/enums/EncryptionAlgorithm.html +0 -80
- package/docs/enums/KeyArchiveKeyType.html +0 -86
- package/docs/enums/KeyDataKeyFormat.html +0 -92
- package/docs/enums/KeyDataKeyType.html +0 -85
- package/docs/enums/ListOperationResultStatus.html +0 -85
- package/docs/enums/PublicKeyFormat.html +0 -68
- package/docs/functions/isAppSyncNetworkError.html +0 -147
- package/docs/functions/isInsecureKeyArchive.html +0 -147
- package/docs/functions/isSecureKeyArchive.html +0 -147
- package/docs/functions/isUnrecognizedKeyArchive.html +0 -147
- package/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
- package/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
- package/docs/functions/mapGraphQLToClientError.html +0 -154
- package/docs/functions/mapNetworkErrorToClientError.html +0 -154
- package/docs/index.html +0 -146
- package/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
- package/docs/interfaces/BooleanFilter.html +0 -75
- package/docs/interfaces/ConfigurationManager.html +0 -200
- package/docs/interfaces/KeyData.html +0 -106
- package/docs/interfaces/ListOperationFailureResult.html +0 -76
- package/docs/interfaces/ListOperationPartialResult.html +0 -102
- package/docs/interfaces/ListOperationSuccessResult.html +0 -90
- package/docs/interfaces/ListOutput.html +0 -80
- package/docs/interfaces/Logger.html +0 -251
- package/docs/interfaces/Owner.html +0 -72
- package/docs/interfaces/PublicKey.html +0 -72
- package/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
- package/docs/interfaces/StringFilter.html +0 -82
- package/docs/interfaces/SudoCryptoProvider.html +0 -865
- package/docs/interfaces/SudoKeyArchive.html +0 -257
- package/docs/interfaces/SudoKeyManager.html +0 -848
- package/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
- package/docs/interfaces/ValidationResult.html +0 -83
- package/docs/modules.html +0 -248
- package/docs/types/AppSyncError.html +0 -138
- package/docs/types/AppSyncNetworkError.html +0 -138
- package/docs/types/InsecureKeyArchive.html +0 -138
- package/docs/types/KeyArchive.html +0 -138
- package/docs/types/KeyArchiveKeyInfo.html +0 -154
- package/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
- package/docs/types/ListOperationResult.html +0 -148
- package/docs/types/SecureKeyArchive.html +0 -138
- package/docs/types/Subset.html +0 -144
- package/docs/types/UnrecognizedKeyArchive.html +0 -138
- package/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
- package/docs/variables/InsecureKeyArchiveCodec.html +0 -138
- package/docs/variables/InsecureKeyArchiveType.html +0 -138
- package/docs/variables/KeyArchiveCodec.html +0 -138
- package/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
- package/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
- package/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
- package/docs/variables/SecureKeyArchiveCodec.html +0 -138
- package/docs/variables/SecureKeyArchiveType.html +0 -138
- package/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
- package/github/.babelrc +0 -10
- package/github/.eslintrc.js +0 -91
- package/github/.gitignore +0 -14
- package/github/.gitlab-ci.yml +0 -101
- package/github/.npmignore +0 -1
- package/github/.prettierignore +0 -3
- package/github/.prettierrc.js +0 -7
- package/github/.publisher.json +0 -7
- package/github/.vscode/settings.json +0 -5
- package/github/.yarn/releases/yarn-1.22.19.cjs +0 -147529
- package/github/.yarnrc +0 -5
- package/github/CHANGELOG.md +0 -51
- package/github/README.md +0 -8
- package/github/bin/outdated-with-suppression.sh +0 -203
- package/github/bin/suppress-audit.sh +0 -15
- package/github/bin/suppress-outdated.sh +0 -60
- package/github/bin/yarn-audit-with-suppression.sh +0 -19
- package/github/docs/.nojekyll +0 -1
- package/github/docs/assets/highlight.css +0 -57
- package/github/docs/assets/main.js +0 -54
- package/github/docs/assets/search.js +0 -1
- package/github/docs/assets/style.css +0 -1224
- package/github/docs/assets/widgets.png +0 -0
- package/github/docs/assets/widgets@2x.png +0 -0
- package/github/docs/classes/AccountLockedError.html +0 -163
- package/github/docs/classes/AuthenticationError.html +0 -169
- package/github/docs/classes/Base64.html +0 -245
- package/github/docs/classes/Buffer.html +0 -158
- package/github/docs/classes/ConfigurationNotSetError.html +0 -164
- package/github/docs/classes/ConfigurationSetNotFoundError.html +0 -168
- package/github/docs/classes/DecodeError.html +0 -168
- package/github/docs/classes/DefaultConfigurationManager.html +0 -213
- package/github/docs/classes/DefaultLogger.html +0 -291
- package/github/docs/classes/DefaultSudoKeyArchive.html +0 -363
- package/github/docs/classes/DefaultSudoKeyManager.html +0 -814
- package/github/docs/classes/FatalError.html +0 -169
- package/github/docs/classes/IllegalArgumentError.html +0 -168
- package/github/docs/classes/IllegalStateError.html +0 -169
- package/github/docs/classes/InsufficientEntitlementsError.html +0 -164
- package/github/docs/classes/InvalidOwnershipProofError.html +0 -163
- package/github/docs/classes/InvalidTokenError.html +0 -163
- package/github/docs/classes/KeyArchiveDecodingError.html +0 -168
- package/github/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
- package/github/docs/classes/KeyArchiveMissingError.html +0 -168
- package/github/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
- package/github/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
- package/github/docs/classes/KeyArchiveTypeError.html +0 -168
- package/github/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
- package/github/docs/classes/KeyArchiveVersionError.html +0 -168
- package/github/docs/classes/KeyNotFoundError.html +0 -168
- package/github/docs/classes/KeyStoreNotExportableError.html +0 -168
- package/github/docs/classes/LimitExceededError.html +0 -164
- package/github/docs/classes/NoEntitlementsError.html +0 -163
- package/github/docs/classes/NotAuthorizedError.html +0 -169
- package/github/docs/classes/NotRegisteredError.html +0 -168
- package/github/docs/classes/NotSignedInError.html +0 -164
- package/github/docs/classes/OperationNotImplementedError.html +0 -168
- package/github/docs/classes/RegisterError.html +0 -169
- package/github/docs/classes/RequestFailedError.html +0 -189
- package/github/docs/classes/ServiceError.html +0 -170
- package/github/docs/classes/SignOutError.html +0 -168
- package/github/docs/classes/SudoCryptoProviderDefaults.html +0 -106
- package/github/docs/classes/UnknownGraphQLError.html +0 -169
- package/github/docs/classes/UnrecognizedAlgorithmError.html +0 -168
- package/github/docs/classes/UserNotConfirmedError.html +0 -164
- package/github/docs/classes/VersionMismatchError.html +0 -166
- package/github/docs/enums/CachePolicy.html +0 -72
- package/github/docs/enums/EncryptionAlgorithm.html +0 -80
- package/github/docs/enums/KeyArchiveKeyType.html +0 -86
- package/github/docs/enums/KeyDataKeyFormat.html +0 -92
- package/github/docs/enums/KeyDataKeyType.html +0 -85
- package/github/docs/enums/ListOperationResultStatus.html +0 -85
- package/github/docs/enums/PublicKeyFormat.html +0 -68
- package/github/docs/functions/isAppSyncNetworkError.html +0 -147
- package/github/docs/functions/isInsecureKeyArchive.html +0 -147
- package/github/docs/functions/isSecureKeyArchive.html +0 -147
- package/github/docs/functions/isUnrecognizedKeyArchive.html +0 -147
- package/github/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
- package/github/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
- package/github/docs/functions/mapGraphQLToClientError.html +0 -154
- package/github/docs/functions/mapNetworkErrorToClientError.html +0 -154
- package/github/docs/index.html +0 -146
- package/github/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
- package/github/docs/interfaces/BooleanFilter.html +0 -75
- package/github/docs/interfaces/ConfigurationManager.html +0 -200
- package/github/docs/interfaces/KeyData.html +0 -106
- package/github/docs/interfaces/ListOperationFailureResult.html +0 -76
- package/github/docs/interfaces/ListOperationPartialResult.html +0 -102
- package/github/docs/interfaces/ListOperationSuccessResult.html +0 -90
- package/github/docs/interfaces/ListOutput.html +0 -80
- package/github/docs/interfaces/Logger.html +0 -251
- package/github/docs/interfaces/Owner.html +0 -72
- package/github/docs/interfaces/PublicKey.html +0 -72
- package/github/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
- package/github/docs/interfaces/StringFilter.html +0 -82
- package/github/docs/interfaces/SudoCryptoProvider.html +0 -865
- package/github/docs/interfaces/SudoKeyArchive.html +0 -257
- package/github/docs/interfaces/SudoKeyManager.html +0 -848
- package/github/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
- package/github/docs/interfaces/ValidationResult.html +0 -83
- package/github/docs/modules.html +0 -248
- package/github/docs/types/AppSyncError.html +0 -138
- package/github/docs/types/AppSyncNetworkError.html +0 -138
- package/github/docs/types/InsecureKeyArchive.html +0 -138
- package/github/docs/types/KeyArchive.html +0 -138
- package/github/docs/types/KeyArchiveKeyInfo.html +0 -154
- package/github/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
- package/github/docs/types/ListOperationResult.html +0 -148
- package/github/docs/types/SecureKeyArchive.html +0 -138
- package/github/docs/types/Subset.html +0 -144
- package/github/docs/types/UnrecognizedKeyArchive.html +0 -138
- package/github/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
- package/github/docs/variables/InsecureKeyArchiveCodec.html +0 -138
- package/github/docs/variables/InsecureKeyArchiveType.html +0 -138
- package/github/docs/variables/KeyArchiveCodec.html +0 -138
- package/github/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
- package/github/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
- package/github/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
- package/github/docs/variables/SecureKeyArchiveCodec.html +0 -138
- package/github/docs/variables/SecureKeyArchiveType.html +0 -138
- package/github/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
- package/github/jest.config.json +0 -14
- package/github/package.json +0 -91
- package/github/src/configurationManager/defaultConfigurationManager.ts +0 -281
- package/github/src/errors/error.ts +0 -469
- package/github/src/index.ts +0 -8
- package/github/src/logging/bunyanLogger.ts +0 -47
- package/github/src/logging/logger.ts +0 -164
- package/github/src/sudoKeyArchive/index.ts +0 -4
- package/github/src/sudoKeyArchive/keyArchive.ts +0 -120
- package/github/src/sudoKeyArchive/keyInfo.ts +0 -47
- package/github/src/sudoKeyArchive/keyType.ts +0 -50
- package/github/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
- package/github/src/sudoKeyManager/index.ts +0 -4
- package/github/src/sudoKeyManager/keyData.ts +0 -60
- package/github/src/sudoKeyManager/publicKey.ts +0 -9
- package/github/src/sudoKeyManager/sudoCryptoProvider.ts +0 -416
- package/github/src/sudoKeyManager/sudoKeyManager.ts +0 -609
- package/github/src/types/types.ts +0 -129
- package/github/src/utils/base64.ts +0 -75
- package/github/src/utils/buffer.ts +0 -39
- package/github/test/integration/defaultConfigurationManager.spec.ts +0 -85
- package/github/test/matchers.ts +0 -122
- package/github/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
- package/github/test/unit/errors/error.spec.ts +0 -115
- package/github/test/unit/keyType.spec.ts +0 -54
- package/github/test/unit/logging/logger.spec.ts +0 -182
- package/github/test/unit/sudoKeyArchive.spec.ts +0 -1609
- package/github/test/unit/sudoKeyManager.spec.ts +0 -1045
- package/github/test/unit/utils/base64.spec.ts +0 -45
- package/github/test/unit/utils/buffer.spec.ts +0 -45
- package/github/test/unit/utils/listOperationResult.spec.ts +0 -84
- package/github/tsconfig.json +0 -20
- package/github/tsconfig.test.json +0 -7
- package/github/yarn.lock +0 -5922
- package/jest.config.json +0 -14
- package/src/configurationManager/defaultConfigurationManager.ts +0 -281
- package/src/errors/error.ts +0 -469
- package/src/index.ts +0 -8
- package/src/logging/bunyanLogger.ts +0 -47
- package/src/logging/logger.ts +0 -164
- package/src/sudoKeyArchive/index.ts +0 -4
- package/src/sudoKeyArchive/keyArchive.ts +0 -120
- package/src/sudoKeyArchive/keyInfo.ts +0 -47
- package/src/sudoKeyArchive/keyType.ts +0 -50
- package/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
- package/src/sudoKeyManager/index.ts +0 -4
- package/src/sudoKeyManager/keyData.ts +0 -60
- package/src/sudoKeyManager/publicKey.ts +0 -9
- package/src/sudoKeyManager/sudoCryptoProvider.ts +0 -416
- package/src/sudoKeyManager/sudoKeyManager.ts +0 -609
- package/src/types/types.ts +0 -129
- package/src/utils/base64.ts +0 -75
- package/src/utils/buffer.ts +0 -39
- package/test/integration/defaultConfigurationManager.spec.ts +0 -85
- package/test/matchers.ts +0 -122
- package/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
- package/test/unit/errors/error.spec.ts +0 -115
- package/test/unit/keyType.spec.ts +0 -54
- package/test/unit/logging/logger.spec.ts +0 -182
- package/test/unit/sudoKeyArchive.spec.ts +0 -1609
- package/test/unit/sudoKeyManager.spec.ts +0 -1045
- package/test/unit/utils/base64.spec.ts +0 -45
- package/test/unit/utils/buffer.spec.ts +0 -45
- package/test/unit/utils/listOperationResult.spec.ts +0 -84
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -7
- 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
|
-
}
|