@sudoplatform/sudo-common 6.0.2 → 6.2.1

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 (193) hide show
  1. package/.gitignore +1 -0
  2. package/.yarn/releases/yarn-1.22.18.cjs +147520 -0
  3. package/.yarnrc +5 -0
  4. package/bin/outdated-with-suppression.sh +86 -9
  5. package/bin/suppress-outdated.sh +21 -3
  6. package/dependencies-report.json +118 -8
  7. package/docs/assets/highlight.css +1 -1
  8. package/docs/assets/main.js +2 -2
  9. package/docs/assets/search.js +1 -1
  10. package/docs/assets/style.css +32 -2
  11. package/docs/classes/AccountLockedError.html +3 -3
  12. package/docs/classes/AuthenticationError.html +3 -3
  13. package/docs/classes/Base64.html +2 -2
  14. package/docs/classes/Buffer.html +2 -2
  15. package/docs/classes/ConfigurationNotSetError.html +3 -3
  16. package/docs/classes/ConfigurationSetNotFoundError.html +3 -3
  17. package/docs/classes/DecodeError.html +3 -3
  18. package/docs/classes/DefaultConfigurationManager.html +13 -6
  19. package/docs/classes/DefaultLogger.html +7 -7
  20. package/docs/classes/DefaultSudoKeyArchive.html +13 -13
  21. package/docs/classes/DefaultSudoKeyManager.html +28 -28
  22. package/docs/classes/FatalError.html +3 -3
  23. package/docs/classes/IllegalArgumentError.html +3 -3
  24. package/docs/classes/IllegalStateError.html +3 -3
  25. package/docs/classes/InsufficientEntitlementsError.html +3 -3
  26. package/docs/classes/InvalidOwnershipProofError.html +3 -3
  27. package/docs/classes/InvalidTokenError.html +3 -3
  28. package/docs/classes/KeyArchiveDecodingError.html +3 -3
  29. package/docs/classes/KeyArchiveIncorrectPasswordError.html +3 -3
  30. package/docs/classes/KeyArchiveMissingError.html +3 -3
  31. package/docs/classes/KeyArchiveNoPasswordRequiredError.html +3 -3
  32. package/docs/classes/KeyArchivePasswordRequiredError.html +3 -3
  33. package/docs/classes/KeyArchiveTypeError.html +3 -3
  34. package/docs/classes/KeyArchiveUnknownKeyTypeError.html +3 -3
  35. package/docs/classes/KeyArchiveVersionError.html +3 -3
  36. package/docs/classes/KeyNotFoundError.html +3 -3
  37. package/docs/classes/KeyStoreNotExportableError.html +3 -3
  38. package/docs/classes/LimitExceededError.html +3 -3
  39. package/docs/classes/NoEntitlementsError.html +3 -3
  40. package/docs/classes/NotAuthorizedError.html +3 -3
  41. package/docs/classes/NotRegisteredError.html +3 -3
  42. package/docs/classes/NotSignedInError.html +3 -3
  43. package/docs/classes/OperationNotImplementedError.html +3 -3
  44. package/docs/classes/RegisterError.html +3 -3
  45. package/docs/classes/RequestFailedError.html +5 -5
  46. package/docs/classes/ServiceError.html +3 -3
  47. package/docs/classes/SignOutError.html +3 -3
  48. package/docs/classes/SudoCryptoProviderDefaults.html +1 -1
  49. package/docs/classes/UnknownGraphQLError.html +3 -3
  50. package/docs/classes/UnrecognizedAlgorithmError.html +3 -3
  51. package/docs/classes/UserNotConfirmedError.html +3 -3
  52. package/docs/classes/VersionMismatchError.html +3 -3
  53. package/docs/enums/CachePolicy.html +2 -2
  54. package/docs/enums/EncryptionAlgorithm.html +2 -2
  55. package/docs/enums/KeyArchiveKeyType.html +2 -2
  56. package/docs/enums/KeyDataKeyFormat.html +3 -3
  57. package/docs/enums/KeyDataKeyType.html +2 -2
  58. package/docs/enums/ListOperationResultStatus.html +4 -4
  59. package/docs/enums/PublicKeyFormat.html +1 -1
  60. package/docs/index.html +2 -2
  61. package/docs/interfaces/AsymmetricEncryptionOptions.html +2 -2
  62. package/docs/interfaces/BooleanFilter.html +2 -2
  63. package/docs/interfaces/ConfigurationManager.html +13 -6
  64. package/docs/interfaces/KeyData.html +2 -2
  65. package/docs/interfaces/ListOperationFailureResult.html +2 -2
  66. package/docs/interfaces/ListOperationPartialResult.html +4 -4
  67. package/docs/interfaces/ListOperationSuccessResult.html +3 -3
  68. package/docs/interfaces/ListOutput.html +2 -2
  69. package/docs/interfaces/Logger.html +7 -7
  70. package/docs/interfaces/Owner.html +1 -1
  71. package/docs/interfaces/PublicKey.html +1 -1
  72. package/docs/interfaces/ServiceCompatibilityInfo.html +17 -0
  73. package/docs/interfaces/StringFilter.html +2 -2
  74. package/docs/interfaces/SudoCryptoProvider.html +28 -28
  75. package/docs/interfaces/SudoKeyArchive.html +10 -10
  76. package/docs/interfaces/SudoKeyManager.html +28 -28
  77. package/docs/interfaces/SymmetricEncryptionOptions.html +2 -2
  78. package/docs/interfaces/ValidationResult.html +11 -0
  79. package/docs/modules.html +6 -6
  80. package/github/.gitignore +1 -0
  81. package/github/.yarn/releases/yarn-1.22.18.cjs +147520 -0
  82. package/github/.yarnrc +5 -0
  83. package/github/bin/outdated-with-suppression.sh +86 -9
  84. package/github/bin/suppress-outdated.sh +21 -3
  85. package/github/docs/assets/highlight.css +1 -1
  86. package/github/docs/assets/main.js +2 -2
  87. package/github/docs/assets/search.js +1 -1
  88. package/github/docs/assets/style.css +32 -2
  89. package/github/docs/classes/AccountLockedError.html +3 -3
  90. package/github/docs/classes/AuthenticationError.html +3 -3
  91. package/github/docs/classes/Base64.html +2 -2
  92. package/github/docs/classes/Buffer.html +2 -2
  93. package/github/docs/classes/ConfigurationNotSetError.html +3 -3
  94. package/github/docs/classes/ConfigurationSetNotFoundError.html +3 -3
  95. package/github/docs/classes/DecodeError.html +3 -3
  96. package/github/docs/classes/DefaultConfigurationManager.html +13 -6
  97. package/github/docs/classes/DefaultLogger.html +7 -7
  98. package/github/docs/classes/DefaultSudoKeyArchive.html +13 -13
  99. package/github/docs/classes/DefaultSudoKeyManager.html +28 -28
  100. package/github/docs/classes/FatalError.html +3 -3
  101. package/github/docs/classes/IllegalArgumentError.html +3 -3
  102. package/github/docs/classes/IllegalStateError.html +3 -3
  103. package/github/docs/classes/InsufficientEntitlementsError.html +3 -3
  104. package/github/docs/classes/InvalidOwnershipProofError.html +3 -3
  105. package/github/docs/classes/InvalidTokenError.html +3 -3
  106. package/github/docs/classes/KeyArchiveDecodingError.html +3 -3
  107. package/github/docs/classes/KeyArchiveIncorrectPasswordError.html +3 -3
  108. package/github/docs/classes/KeyArchiveMissingError.html +3 -3
  109. package/github/docs/classes/KeyArchiveNoPasswordRequiredError.html +3 -3
  110. package/github/docs/classes/KeyArchivePasswordRequiredError.html +3 -3
  111. package/github/docs/classes/KeyArchiveTypeError.html +3 -3
  112. package/github/docs/classes/KeyArchiveUnknownKeyTypeError.html +3 -3
  113. package/github/docs/classes/KeyArchiveVersionError.html +3 -3
  114. package/github/docs/classes/KeyNotFoundError.html +3 -3
  115. package/github/docs/classes/KeyStoreNotExportableError.html +3 -3
  116. package/github/docs/classes/LimitExceededError.html +3 -3
  117. package/github/docs/classes/NoEntitlementsError.html +3 -3
  118. package/github/docs/classes/NotAuthorizedError.html +3 -3
  119. package/github/docs/classes/NotRegisteredError.html +3 -3
  120. package/github/docs/classes/NotSignedInError.html +3 -3
  121. package/github/docs/classes/OperationNotImplementedError.html +3 -3
  122. package/github/docs/classes/RegisterError.html +3 -3
  123. package/github/docs/classes/RequestFailedError.html +5 -5
  124. package/github/docs/classes/ServiceError.html +3 -3
  125. package/github/docs/classes/SignOutError.html +3 -3
  126. package/github/docs/classes/SudoCryptoProviderDefaults.html +1 -1
  127. package/github/docs/classes/UnknownGraphQLError.html +3 -3
  128. package/github/docs/classes/UnrecognizedAlgorithmError.html +3 -3
  129. package/github/docs/classes/UserNotConfirmedError.html +3 -3
  130. package/github/docs/classes/VersionMismatchError.html +3 -3
  131. package/github/docs/enums/CachePolicy.html +2 -2
  132. package/github/docs/enums/EncryptionAlgorithm.html +2 -2
  133. package/github/docs/enums/KeyArchiveKeyType.html +2 -2
  134. package/github/docs/enums/KeyDataKeyFormat.html +3 -3
  135. package/github/docs/enums/KeyDataKeyType.html +2 -2
  136. package/github/docs/enums/ListOperationResultStatus.html +4 -4
  137. package/github/docs/enums/PublicKeyFormat.html +1 -1
  138. package/github/docs/index.html +2 -2
  139. package/github/docs/interfaces/AsymmetricEncryptionOptions.html +2 -2
  140. package/github/docs/interfaces/BooleanFilter.html +2 -2
  141. package/github/docs/interfaces/ConfigurationManager.html +13 -6
  142. package/github/docs/interfaces/KeyData.html +2 -2
  143. package/github/docs/interfaces/ListOperationFailureResult.html +2 -2
  144. package/github/docs/interfaces/ListOperationPartialResult.html +4 -4
  145. package/github/docs/interfaces/ListOperationSuccessResult.html +3 -3
  146. package/github/docs/interfaces/ListOutput.html +2 -2
  147. package/github/docs/interfaces/Logger.html +7 -7
  148. package/github/docs/interfaces/Owner.html +1 -1
  149. package/github/docs/interfaces/PublicKey.html +1 -1
  150. package/github/docs/interfaces/ServiceCompatibilityInfo.html +17 -0
  151. package/github/docs/interfaces/StringFilter.html +2 -2
  152. package/github/docs/interfaces/SudoCryptoProvider.html +28 -28
  153. package/github/docs/interfaces/SudoKeyArchive.html +10 -10
  154. package/github/docs/interfaces/SudoKeyManager.html +28 -28
  155. package/github/docs/interfaces/SymmetricEncryptionOptions.html +2 -2
  156. package/github/docs/interfaces/ValidationResult.html +11 -0
  157. package/github/docs/modules.html +6 -6
  158. package/github/package.json +30 -25
  159. package/github/src/configurationManager/defaultConfigurationManager.ts +156 -7
  160. package/github/src/errors/error.ts +5 -1
  161. package/github/test/integration/defaultConfigurationManager.spec.ts +85 -0
  162. package/github/test/unit/configurationManager/defaultConfigurationManager.spec.ts +506 -0
  163. package/{test → github/test/unit}/errors/error.spec.ts +4 -19
  164. package/github/test/{sudoKeyArchive → unit}/keyType.spec.ts +0 -0
  165. package/{test → github/test/unit}/logging/logger.spec.ts +1 -1
  166. package/github/test/{sudoKeyArchive → unit}/sudoKeyArchive.spec.ts +0 -0
  167. package/github/test/{sudoKeyManager → unit}/sudoKeyManager.spec.ts +0 -0
  168. package/github/test/{utils → unit/utils}/base64.spec.ts +1 -1
  169. package/github/test/{utils → unit/utils}/buffer.spec.ts +1 -1
  170. package/{test → github/test/unit}/utils/listOperationResult.spec.ts +1 -1
  171. package/github/tsconfig.test.json +3 -1
  172. package/github/yarn.lock +1852 -1342
  173. package/lib/configurationManager/defaultConfigurationManager.d.ts +57 -0
  174. package/lib/configurationManager/defaultConfigurationManager.js +102 -7
  175. package/lib/errors/error.d.ts +1 -1
  176. package/lib/errors/error.js +3 -0
  177. package/package.json +30 -25
  178. package/src/configurationManager/defaultConfigurationManager.ts +156 -7
  179. package/src/errors/error.ts +5 -1
  180. package/test/integration/defaultConfigurationManager.spec.ts +85 -0
  181. package/test/unit/configurationManager/defaultConfigurationManager.spec.ts +506 -0
  182. package/{github/test → test/unit}/errors/error.spec.ts +4 -19
  183. package/test/{sudoKeyArchive → unit}/keyType.spec.ts +0 -0
  184. package/{github/test → test/unit}/logging/logger.spec.ts +1 -1
  185. package/test/{sudoKeyArchive → unit}/sudoKeyArchive.spec.ts +0 -0
  186. package/test/{sudoKeyManager → unit}/sudoKeyManager.spec.ts +0 -0
  187. package/test/{utils → unit/utils}/base64.spec.ts +1 -1
  188. package/test/{utils → unit/utils}/buffer.spec.ts +1 -1
  189. package/{github/test → test/unit}/utils/listOperationResult.spec.ts +1 -1
  190. package/tsconfig.test.json +3 -1
  191. package/yarn.lock +1852 -1342
  192. package/github/test/configurationManager/defaultConfigurationManager.spec.ts +0 -185
  193. package/test/configurationManager/defaultConfigurationManager.spec.ts +0 -185
@@ -0,0 +1,506 @@
1
+ import { DefaultConfigurationManager } from '../../../src/configurationManager/defaultConfigurationManager'
2
+ import * as t from 'io-ts'
3
+ import { ConfigurationSetNotFoundError } from '../../../src/errors/error'
4
+ import AWS from 'aws-sdk'
5
+
6
+ describe('configuration manager', () => {
7
+ const config = {
8
+ federatedSignIn: {
9
+ appClientId: '120q904mra9d5l4psmvdbrgm49',
10
+ signInRedirectUri: 'http://localhost:3000/callback',
11
+ signOutRedirectUri: 'http://localhost:3000/',
12
+ webDomain: 'id-dev-fsso-sudoplatform.auth.us-east-1.amazoncognito.com',
13
+ identityProvider: 'Auth0',
14
+ },
15
+ apiService: {
16
+ apiUrl:
17
+ 'https://xy7zw5ys7rahrponv7h26vjn6y.appsync-api.us-east-1.amazonaws.com/graphql',
18
+ region: 'us-east-1',
19
+ },
20
+ identityService: {
21
+ region: 'us-east-1',
22
+ poolId: 'us-east-1_ZiPDToF73',
23
+ clientId: '120q904mra9d5l4psmvdbrgm49',
24
+ identityPoolId: 'us-east-1:8fe6d8ed-cd77-4622-b1bb-3f0c147638ad',
25
+ apiUrl:
26
+ 'https://mqn7cjrzcrd75jpsma3xw4744a.appsync-api.us-east-1.amazonaws.com/graphql',
27
+ apiKey: 'da2-xejsa343urfifmzkycmz3rqdom',
28
+ bucket: 'ids-userdata-id-dev-fsso-userdatabucket2d841c35-j9x47k5042fk',
29
+ transientBucket:
30
+ 'ids-userdata-id-dev-fsso-transientuserdatabucket0-1enoeyoho1sjl',
31
+ },
32
+ secureVaultService: {
33
+ region: 'us-east-1',
34
+ poolId: 'us-east-1_6NalHLdlq',
35
+ clientId: 'pcg1ma18cluamqrif79viaj04',
36
+ apiUrl:
37
+ 'https://u2ysyzwojzaahbsq5toulhdt4e.appsync-api.us-east-1.amazonaws.com/graphql',
38
+ pbkdfRounds: 100000,
39
+ },
40
+ }
41
+
42
+ const IdentityServiceConfig = t.type({
43
+ region: t.string,
44
+ poolId: t.string,
45
+ clientId: t.string,
46
+ apiUrl: t.string,
47
+ })
48
+
49
+ const ApiServiceConfig = t.type({
50
+ apiUrl: t.string,
51
+ region: t.string,
52
+ })
53
+
54
+ const SdkConfig = t.type({
55
+ identityService: IdentityServiceConfig,
56
+ apiService: ApiServiceConfig,
57
+ })
58
+
59
+ type IdentityServiceConfig = t.TypeOf<typeof IdentityServiceConfig>
60
+ type ApiServiceConfig = t.TypeOf<typeof ApiServiceConfig>
61
+ type SdkConfig = t.TypeOf<typeof SdkConfig>
62
+
63
+ describe('getConfigSet', () => {
64
+ it('should return entire config set when empty namespace supplied', () => {
65
+ const configSet = DefaultConfigurationManager.getInstance()
66
+ .setConfig(JSON.stringify(config))
67
+ .getConfigSet()
68
+
69
+ expect(configSet).toStrictEqual(config)
70
+ })
71
+
72
+ it('should return subset of configuration when matching namespace supplied', () => {
73
+ const expected = {
74
+ region: 'us-east-1',
75
+ poolId: 'us-east-1_ZiPDToF73',
76
+ clientId: '120q904mra9d5l4psmvdbrgm49',
77
+ identityPoolId: 'us-east-1:8fe6d8ed-cd77-4622-b1bb-3f0c147638ad',
78
+ apiUrl:
79
+ 'https://mqn7cjrzcrd75jpsma3xw4744a.appsync-api.us-east-1.amazonaws.com/graphql',
80
+ apiKey: 'da2-xejsa343urfifmzkycmz3rqdom',
81
+ bucket: 'ids-userdata-id-dev-fsso-userdatabucket2d841c35-j9x47k5042fk',
82
+ transientBucket:
83
+ 'ids-userdata-id-dev-fsso-transientuserdatabucket0-1enoeyoho1sjl',
84
+ }
85
+
86
+ const configSet = DefaultConfigurationManager.getInstance()
87
+ .setConfig(JSON.stringify(config))
88
+ .getConfigSet('identityService')
89
+
90
+ expect(configSet).toStrictEqual(expected)
91
+ })
92
+
93
+ it('should return nothing when no matching namespace supplied', () => {
94
+ const configSet = DefaultConfigurationManager.getInstance()
95
+ .setConfig(JSON.stringify(config))
96
+ .getConfigSet('randomNoMatchingNamespace')
97
+
98
+ expect(configSet).toBeFalsy()
99
+ })
100
+ })
101
+
102
+ describe('bindConfigSet<T>', () => {
103
+ it('should find config set then bind to given type', () => {
104
+ const result = DefaultConfigurationManager.getInstance()
105
+ .setConfig(JSON.stringify(config))
106
+ .bindConfigSet<IdentityServiceConfig>(
107
+ IdentityServiceConfig,
108
+ 'identityService',
109
+ )
110
+
111
+ expect(result).toBeTruthy()
112
+ expect(result['apiUrl']).toBeTruthy()
113
+ })
114
+
115
+ it('should throw when configuration set not found', () => {
116
+ expect(() => {
117
+ DefaultConfigurationManager.getInstance()
118
+ .setConfig(JSON.stringify(config))
119
+ .bindConfigSet<IdentityServiceConfig>(
120
+ IdentityServiceConfig,
121
+ 'randomNamespace',
122
+ )
123
+ }).toThrow(ConfigurationSetNotFoundError)
124
+ })
125
+
126
+ it('should still bind when no nampespace provided', () => {
127
+ const result = DefaultConfigurationManager.getInstance()
128
+ .setConfig(JSON.stringify(config))
129
+ .bindConfigSet<SdkConfig>(SdkConfig)
130
+
131
+ expect(result).toBeTruthy()
132
+ expect(result['identityService'].apiUrl).toBeTruthy()
133
+ })
134
+ })
135
+
136
+ describe('validateConfig', () => {
137
+ it('should return empty result when config not set', async () => {
138
+ const manager = DefaultConfigurationManager.getInstance()
139
+
140
+ await expect(manager.validateConfig()).resolves.toEqual({
141
+ deprecated: [],
142
+ incompatible: [],
143
+ })
144
+ })
145
+
146
+ it('should return empty result when config does not have identity service config', async () => {
147
+ const badConfig = {
148
+ bad: 'bad',
149
+ }
150
+
151
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
152
+ JSON.stringify(badConfig),
153
+ )
154
+
155
+ await expect(manager.validateConfig()).resolves.toEqual({
156
+ deprecated: [],
157
+ incompatible: [],
158
+ })
159
+ })
160
+
161
+ it('should return empty result when config does not have service info bucket name', async () => {
162
+ const badConfig = {
163
+ identityService: {
164
+ region: 'dummy_region',
165
+ },
166
+ }
167
+
168
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
169
+ JSON.stringify(badConfig),
170
+ )
171
+
172
+ await expect(manager.validateConfig()).resolves.toEqual({
173
+ deprecated: [],
174
+ incompatible: [],
175
+ })
176
+ })
177
+
178
+ it('should return empty result when service info document does not have .json extension', async () => {
179
+ const config = {
180
+ identityService: {
181
+ region: 'us-east-1',
182
+ serviceInfoBucket: 'dummy_bucket',
183
+ },
184
+ }
185
+
186
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
187
+ JSON.stringify(config),
188
+ )
189
+
190
+ jest.mock('aws-sdk')
191
+
192
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
193
+ .fn()
194
+ .mockImplementation((operation) => {
195
+ if (operation === 'listObjects') {
196
+ return {
197
+ promise() {
198
+ return Promise.resolve({
199
+ Contents: [{ Key: 'identityService' }],
200
+ })
201
+ },
202
+ }
203
+ }
204
+ })
205
+
206
+ await expect(manager.validateConfig()).resolves.toEqual({
207
+ deprecated: [],
208
+ incompatible: [],
209
+ })
210
+ })
211
+
212
+ it('should return empty result when service info document does not match the client config', async () => {
213
+ const config = {
214
+ identityService: {
215
+ region: 'us-east-1',
216
+ serviceInfoBucket: 'dummy_bucket',
217
+ },
218
+ }
219
+
220
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
221
+ JSON.stringify(config),
222
+ )
223
+
224
+ jest.mock('aws-sdk')
225
+
226
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
227
+ .fn()
228
+ .mockImplementation((operation) => {
229
+ if (operation === 'listObjects') {
230
+ return {
231
+ promise() {
232
+ return Promise.resolve({
233
+ Contents: [{ Key: 'sudoService' }],
234
+ })
235
+ },
236
+ }
237
+ }
238
+ })
239
+
240
+ await expect(manager.validateConfig()).resolves.toEqual({
241
+ deprecated: [],
242
+ incompatible: [],
243
+ })
244
+ })
245
+
246
+ it('should return empty result when there is no service info document', async () => {
247
+ const config = {
248
+ identityService: {
249
+ region: 'us-east-1',
250
+ serviceInfoBucket: 'dummy_bucket',
251
+ },
252
+ }
253
+
254
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
255
+ JSON.stringify(config),
256
+ )
257
+
258
+ jest.mock('aws-sdk')
259
+
260
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
261
+ .fn()
262
+ .mockImplementation((operation) => {
263
+ if (operation === 'listObjects') {
264
+ return {
265
+ promise() {
266
+ return Promise.resolve({
267
+ Contents: [],
268
+ })
269
+ },
270
+ }
271
+ }
272
+ })
273
+
274
+ await expect(manager.validateConfig()).resolves.toEqual({
275
+ deprecated: [],
276
+ incompatible: [],
277
+ })
278
+ })
279
+
280
+ it('should return incompatible service info if less than min version', async () => {
281
+ const config = {
282
+ identityService: {
283
+ version: 1,
284
+ region: 'us-east-1',
285
+ serviceInfoBucket: 'dummy_bucket',
286
+ },
287
+ }
288
+
289
+ const serviceInfo = {
290
+ identityService: {
291
+ minVersion: 2,
292
+ },
293
+ }
294
+
295
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
296
+ JSON.stringify(config),
297
+ )
298
+
299
+ jest.mock('aws-sdk')
300
+
301
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
302
+ .fn()
303
+ .mockImplementation((operation, params) => {
304
+ if (operation === 'listObjects') {
305
+ return {
306
+ promise() {
307
+ return Promise.resolve({
308
+ Contents: [{ Key: 'identityService.json' }],
309
+ })
310
+ },
311
+ }
312
+ } else if (
313
+ params.Key === 'identityService.json' &&
314
+ params.Bucket === 'dummy_bucket'
315
+ ) {
316
+ return {
317
+ promise() {
318
+ return Promise.resolve({ Body: JSON.stringify(serviceInfo) })
319
+ },
320
+ }
321
+ }
322
+ })
323
+
324
+ await expect(manager.validateConfig()).resolves.toEqual({
325
+ deprecated: [],
326
+ incompatible: [
327
+ {
328
+ configVersion: 1,
329
+ minSupportedVersion: 2,
330
+ name: 'identityService',
331
+ },
332
+ ],
333
+ })
334
+ })
335
+
336
+ it('should return empty result if greater than min version', async () => {
337
+ const config = {
338
+ identityService: {
339
+ version: 3,
340
+ region: 'us-east-1',
341
+ serviceInfoBucket: 'dummy_bucket',
342
+ },
343
+ }
344
+
345
+ const serviceInfo = {
346
+ identityService: {
347
+ minVersion: 2,
348
+ },
349
+ }
350
+
351
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
352
+ JSON.stringify(config),
353
+ )
354
+
355
+ jest.mock('aws-sdk')
356
+
357
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
358
+ .fn()
359
+ .mockImplementation((operation, params) => {
360
+ if (operation === 'listObjects') {
361
+ return {
362
+ promise() {
363
+ return Promise.resolve({
364
+ Contents: [{ Key: 'identityService.json' }],
365
+ })
366
+ },
367
+ }
368
+ } else if (
369
+ params.Key === 'identityService.json' &&
370
+ params.Bucket === 'dummy_bucket'
371
+ ) {
372
+ return {
373
+ promise() {
374
+ return Promise.resolve({ Body: JSON.stringify(serviceInfo) })
375
+ },
376
+ }
377
+ }
378
+ })
379
+
380
+ await expect(manager.validateConfig()).resolves.toEqual({
381
+ deprecated: [],
382
+ incompatible: [],
383
+ })
384
+ })
385
+
386
+ it('should return deprecated service info if equal to deprecated version', async () => {
387
+ const config = {
388
+ identityService: {
389
+ version: 2,
390
+ region: 'us-east-1',
391
+ serviceInfoBucket: 'dummy_bucket',
392
+ },
393
+ }
394
+
395
+ const serviceInfo = {
396
+ identityService: {
397
+ minVersion: 1,
398
+ deprecated: 2,
399
+ deprecationGrace: 1,
400
+ },
401
+ }
402
+
403
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
404
+ JSON.stringify(config),
405
+ )
406
+
407
+ jest.mock('aws-sdk')
408
+
409
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
410
+ .fn()
411
+ .mockImplementation((operation, params) => {
412
+ if (operation === 'listObjects') {
413
+ return {
414
+ promise() {
415
+ return Promise.resolve({
416
+ Contents: [{ Key: 'identityService.json' }],
417
+ })
418
+ },
419
+ }
420
+ } else if (
421
+ params.Key === 'identityService.json' &&
422
+ params.Bucket === 'dummy_bucket'
423
+ ) {
424
+ return {
425
+ promise() {
426
+ return Promise.resolve({ Body: JSON.stringify(serviceInfo) })
427
+ },
428
+ }
429
+ }
430
+ })
431
+
432
+ await expect(manager.validateConfig()).resolves.toEqual({
433
+ deprecated: [
434
+ {
435
+ configVersion: 2,
436
+ minSupportedVersion: 1,
437
+ deprecatedVersion: 2,
438
+ deprecationGrace: new Date(1),
439
+ name: 'identityService',
440
+ },
441
+ ],
442
+ incompatible: [],
443
+ })
444
+ })
445
+
446
+ it('should return deprecated service info if less than deprecated version', async () => {
447
+ const config = {
448
+ identityService: {
449
+ version: 2,
450
+ region: 'us-east-1',
451
+ serviceInfoBucket: 'dummy_bucket',
452
+ },
453
+ }
454
+
455
+ const serviceInfo = {
456
+ identityService: {
457
+ minVersion: 1,
458
+ deprecated: 3,
459
+ deprecationGrace: 1,
460
+ },
461
+ }
462
+
463
+ const manager = DefaultConfigurationManager.getInstance().setConfig(
464
+ JSON.stringify(config),
465
+ )
466
+
467
+ jest.mock('aws-sdk')
468
+
469
+ AWS.Service.prototype.makeUnauthenticatedRequest = jest
470
+ .fn()
471
+ .mockImplementation((operation, params) => {
472
+ if (operation === 'listObjects') {
473
+ return {
474
+ promise() {
475
+ return Promise.resolve({
476
+ Contents: [{ Key: 'identityService.json' }],
477
+ })
478
+ },
479
+ }
480
+ } else if (
481
+ params.Key === 'identityService.json' &&
482
+ params.Bucket === 'dummy_bucket'
483
+ ) {
484
+ return {
485
+ promise() {
486
+ return Promise.resolve({ Body: JSON.stringify(serviceInfo) })
487
+ },
488
+ }
489
+ }
490
+ })
491
+
492
+ await expect(manager.validateConfig()).resolves.toEqual({
493
+ deprecated: [
494
+ {
495
+ configVersion: 2,
496
+ minSupportedVersion: 1,
497
+ deprecatedVersion: 3,
498
+ deprecationGrace: new Date(1),
499
+ name: 'identityService',
500
+ },
501
+ ],
502
+ incompatible: [],
503
+ })
504
+ })
505
+ })
506
+ })
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  AccountLockedError,
3
- AppSyncError,
4
3
  AppSyncNetworkError,
5
4
  IllegalArgumentError,
6
5
  InsufficientEntitlementsError,
7
6
  InvalidTokenError,
8
7
  isAppSyncNetworkError,
8
+ LimitExceededError,
9
9
  mapGraphQLToClientError,
10
10
  mapNetworkErrorToClientError,
11
11
  NoEntitlementsError,
@@ -13,7 +13,7 @@ import {
13
13
  RequestFailedError,
14
14
  ServiceError,
15
15
  UnknownGraphQLError,
16
- } from '../../src/errors/error'
16
+ } from '../../../src/errors/error'
17
17
 
18
18
  describe('error', () => {
19
19
  const message = 'graphql-error'
@@ -26,34 +26,19 @@ describe('error', () => {
26
26
  ${'sudoplatform.InvalidArgumentError'} | ${new IllegalArgumentError()}
27
27
  ${'sudoplatform.NoEntitlementsError'} | ${new NoEntitlementsError()}
28
28
  ${'sudoplatform.ServiceError'} | ${new ServiceError(message)}
29
+ ${'sudoplatform.LimitExceededError'} | ${new LimitExceededError()}
29
30
  `('should map common error $code properly', ({ code, error }) => {
30
31
  expect(
31
32
  mapGraphQLToClientError({
32
33
  message,
33
- path: [],
34
- locations: [],
35
- nodes: [],
36
- positions: [],
37
- source: undefined,
38
- originalError: undefined,
39
- extensions: [],
40
- name: code,
41
34
  errorType: code,
42
35
  }),
43
36
  ).toEqual(error)
44
37
  })
45
38
 
46
39
  it('should map an unrecognized error to UnknownGraphQLError', () => {
47
- const unrecognized: AppSyncError = {
40
+ const unrecognized = {
48
41
  message,
49
- path: [],
50
- locations: [],
51
- nodes: [],
52
- positions: [],
53
- source: undefined,
54
- originalError: undefined,
55
- extensions: [],
56
- name: 'unrecognized',
57
42
  errorType: 'unrecognized',
58
43
  }
59
44
  expect(mapGraphQLToClientError(unrecognized)).toEqual(
File without changes
@@ -1,4 +1,4 @@
1
- import { DefaultLogger } from '../../src/logging/logger'
1
+ import { DefaultLogger } from '../../../src/logging/logger'
2
2
 
3
3
  afterEach(() => {
4
4
  jest.clearAllMocks()
@@ -1,4 +1,4 @@
1
- import { Base64 } from '../../src/utils/base64'
1
+ import { Base64 } from '../../../src/utils/base64'
2
2
 
3
3
  describe('Base64', () => {
4
4
  const dummyDataB64 = 'ZHVtbXlfZGF0YQ==' // b64(dummy_data)
@@ -1,4 +1,4 @@
1
- import { Buffer as BufferUtil } from '../../src/utils/buffer'
1
+ import { Buffer as BufferUtil } from '../../../src/utils/buffer'
2
2
 
3
3
  describe('Buffer', () => {
4
4
  it('split()', () => {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ListOperationResult,
3
3
  ListOperationResultStatus,
4
- } from '../../src/types/types'
4
+ } from '../../../src/types/types'
5
5
 
6
6
  type Item = {
7
7
  id: string
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "extends": "./tsconfig.json",
3
3
  "include": ["src/**/*.ts", "test/**/*.ts"],
4
- "outDir": "test-lib",
4
+ "compilerOptions": {
5
+ "outDir": "test-lib"
6
+ }
5
7
  }