@sudoplatform/sudo-common 7.1.3 → 8.0.0
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/bin/outdated-with-suppression.sh +203 -0
- package/bin/suppress-audit.sh +15 -0
- package/bin/suppress-outdated.sh +60 -0
- package/bin/yarn-audit-with-suppression.sh +19 -0
- package/cjs/configurationManager/defaultConfigurationManager.d.ts +123 -0
- package/cjs/configurationManager/defaultConfigurationManager.js +122 -0
- package/cjs/configurationManager/defaultConfigurationManager.js.map +1 -0
- package/cjs/errors/error.d.ts +263 -0
- package/cjs/errors/error.js +442 -0
- package/cjs/errors/error.js.map +1 -0
- package/cjs/index.d.ts +9 -0
- package/cjs/index.js +13 -0
- package/cjs/index.js.map +1 -0
- package/cjs/logging/bunyanLogger.d.ts +8 -0
- package/cjs/logging/bunyanLogger.js +36 -0
- package/cjs/logging/bunyanLogger.js.map +1 -0
- package/cjs/logging/logger.d.ts +87 -0
- package/cjs/logging/logger.js +77 -0
- package/cjs/logging/logger.js.map +1 -0
- package/cjs/sudoKeyArchive/index.d.ts +4 -0
- package/cjs/sudoKeyArchive/index.js +8 -0
- package/cjs/sudoKeyArchive/index.js.map +1 -0
- package/cjs/sudoKeyArchive/keyArchive.d.ts +137 -0
- package/cjs/sudoKeyArchive/keyArchive.js +84 -0
- package/cjs/sudoKeyArchive/keyArchive.js.map +1 -0
- package/cjs/sudoKeyArchive/keyInfo.d.ts +41 -0
- package/cjs/sudoKeyArchive/keyInfo.js +17 -0
- package/cjs/sudoKeyArchive/keyInfo.js.map +1 -0
- package/cjs/sudoKeyArchive/keyType.d.ts +13 -0
- package/cjs/sudoKeyArchive/keyType.js +39 -0
- package/cjs/sudoKeyArchive/keyType.js.map +1 -0
- package/cjs/sudoKeyArchive/sudoKeyArchive.d.ts +190 -0
- package/cjs/sudoKeyArchive/sudoKeyArchive.js +373 -0
- package/cjs/sudoKeyArchive/sudoKeyArchive.js.map +1 -0
- package/cjs/sudoKeyManager/index.d.ts +4 -0
- package/cjs/sudoKeyManager/index.js +8 -0
- package/cjs/sudoKeyManager/index.js.map +1 -0
- package/cjs/sudoKeyManager/keyData.d.ts +56 -0
- package/cjs/sudoKeyManager/keyData.js +46 -0
- package/cjs/sudoKeyManager/keyData.js.map +1 -0
- package/cjs/sudoKeyManager/publicKey.d.ts +8 -0
- package/cjs/sudoKeyManager/publicKey.js +9 -0
- package/cjs/sudoKeyManager/publicKey.js.map +1 -0
- package/cjs/sudoKeyManager/sudoCryptoProvider.d.ts +324 -0
- package/cjs/sudoKeyManager/sudoCryptoProvider.js +12 -0
- package/cjs/sudoKeyManager/sudoCryptoProvider.js.map +1 -0
- package/cjs/sudoKeyManager/sudoKeyManager.d.ts +344 -0
- package/cjs/sudoKeyManager/sudoKeyManager.js +140 -0
- package/cjs/sudoKeyManager/sudoKeyManager.js.map +1 -0
- package/cjs/types/types.d.ts +115 -0
- package/cjs/types/types.js +45 -0
- package/cjs/types/types.js.map +1 -0
- package/cjs/utils/base64.d.ts +44 -0
- package/cjs/utils/base64.js +71 -0
- package/cjs/utils/base64.js.map +1 -0
- package/cjs/utils/buffer.d.ts +13 -0
- package/cjs/utils/buffer.js +37 -0
- package/cjs/utils/buffer.js.map +1 -0
- package/cjs/utils/stream.d.ts +6 -0
- package/cjs/utils/stream.js +70 -0
- package/cjs/utils/stream.js.map +1 -0
- package/lib/configurationManager/defaultConfigurationManager.js +106 -156
- package/lib/configurationManager/defaultConfigurationManager.js.map +1 -0
- package/lib/errors/error.js +226 -438
- package/lib/errors/error.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +10 -109
- package/lib/index.js.map +1 -0
- package/lib/logging/bunyanLogger.js +29 -41
- package/lib/logging/bunyanLogger.js.map +1 -0
- package/lib/logging/logger.js +66 -92
- package/lib/logging/logger.js.map +1 -0
- package/lib/sudoKeyArchive/index.js +5 -57
- package/lib/sudoKeyArchive/index.js.map +1 -0
- package/lib/sudoKeyArchive/keyArchive.d.ts +8 -8
- package/lib/sudoKeyArchive/keyArchive.js +69 -96
- package/lib/sudoKeyArchive/keyArchive.js.map +1 -0
- package/lib/sudoKeyArchive/keyInfo.js +11 -49
- package/lib/sudoKeyArchive/keyInfo.js.map +1 -0
- package/lib/sudoKeyArchive/keyType.js +27 -37
- package/lib/sudoKeyArchive/keyType.js.map +1 -0
- package/lib/sudoKeyArchive/sudoKeyArchive.js +351 -444
- package/lib/sudoKeyArchive/sudoKeyArchive.js.map +1 -0
- package/lib/sudoKeyManager/index.js +5 -57
- package/lib/sudoKeyManager/index.js.map +1 -0
- package/lib/sudoKeyManager/keyData.js +38 -33
- package/lib/sudoKeyManager/keyData.js.map +1 -0
- package/lib/sudoKeyManager/publicKey.js +5 -12
- package/lib/sudoKeyManager/publicKey.js.map +1 -0
- package/lib/sudoKeyManager/sudoCryptoProvider.js +8 -26
- package/lib/sudoKeyManager/sudoCryptoProvider.js.map +1 -0
- package/lib/sudoKeyManager/sudoKeyManager.js +135 -173
- package/lib/sudoKeyManager/sudoKeyManager.js.map +1 -0
- package/lib/types/types.js +27 -33
- package/lib/types/types.js.map +1 -0
- package/lib/utils/base64.js +63 -93
- package/lib/utils/base64.js.map +1 -0
- package/lib/utils/buffer.js +28 -46
- package/lib/utils/buffer.js.map +1 -0
- package/lib/utils/stream.d.ts +6 -0
- package/lib/utils/stream.js +63 -0
- package/lib/utils/stream.js.map +1 -0
- package/package.json +35 -27
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for Base64 encoding and decoding.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Base64 {
|
|
5
|
+
private static URLSafeEncodeTransform;
|
|
6
|
+
private static URLSafeDecodeTransform;
|
|
7
|
+
static decode(encoded: string): ArrayBuffer;
|
|
8
|
+
static encode(buffer: ArrayBuffer): string;
|
|
9
|
+
static decodeString(encoded: string): string;
|
|
10
|
+
static encodeString(string: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Encode a URL safe ArrayBuffer
|
|
13
|
+
* @param {ArrayBuffer} input buffer to be encoded
|
|
14
|
+
* @returns {string} encoded string
|
|
15
|
+
*/
|
|
16
|
+
static urlSafeEncode({ input }: {
|
|
17
|
+
input: ArrayBuffer;
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* Decode into a URL safe ArrayBuffer
|
|
21
|
+
* @param {string} input string to be decoded
|
|
22
|
+
* @returns {ArrayBuffer} decoded ArrayBuffer
|
|
23
|
+
*/
|
|
24
|
+
static urlSafeDecode({ encoded }: {
|
|
25
|
+
encoded: string;
|
|
26
|
+
}): ArrayBuffer;
|
|
27
|
+
/**
|
|
28
|
+
* Encode a URL safe string
|
|
29
|
+
* @param {string} input string to be encoded
|
|
30
|
+
* @returns {string} encoded string
|
|
31
|
+
*/
|
|
32
|
+
static urlSafeEncodeString({ input }: {
|
|
33
|
+
input: string;
|
|
34
|
+
}): string;
|
|
35
|
+
/**
|
|
36
|
+
* Decode a URL safe string
|
|
37
|
+
* @param {string} input string to be decoded
|
|
38
|
+
* @returns {string} decoded string
|
|
39
|
+
*/
|
|
40
|
+
static urlSafeDecodeString({ encoded }: {
|
|
41
|
+
encoded: string;
|
|
42
|
+
}): string;
|
|
43
|
+
static UrlSafeValidate(encoded: string): boolean;
|
|
44
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Base64 = void 0;
|
|
4
|
+
const buffer_1 = require("./buffer");
|
|
5
|
+
/**
|
|
6
|
+
* Utility class for Base64 encoding and decoding.
|
|
7
|
+
*/
|
|
8
|
+
class Base64 {
|
|
9
|
+
static URLSafeEncodeTransform(input) {
|
|
10
|
+
return input
|
|
11
|
+
.replace(/\+/g, '-') // Convert '+' to '-'
|
|
12
|
+
.replace(/\//g, '_') // Convert '/' to '_'
|
|
13
|
+
.replace(/=+$/, ''); // Remove ending '='
|
|
14
|
+
}
|
|
15
|
+
static URLSafeDecodeTransform(input) {
|
|
16
|
+
return input
|
|
17
|
+
.replace(/\-/g, '+') // Convert '-' to '+'
|
|
18
|
+
.replace(/\_/g, '/'); // Convert '_' to '/'
|
|
19
|
+
}
|
|
20
|
+
static decode(encoded) {
|
|
21
|
+
return buffer_1.Buffer.fromString(atob(encoded));
|
|
22
|
+
}
|
|
23
|
+
static encode(buffer) {
|
|
24
|
+
return btoa(buffer_1.Buffer.toString(buffer));
|
|
25
|
+
}
|
|
26
|
+
static decodeString(encoded) {
|
|
27
|
+
return atob(encoded);
|
|
28
|
+
}
|
|
29
|
+
static encodeString(string) {
|
|
30
|
+
return btoa(string);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Encode a URL safe ArrayBuffer
|
|
34
|
+
* @param {ArrayBuffer} input buffer to be encoded
|
|
35
|
+
* @returns {string} encoded string
|
|
36
|
+
*/
|
|
37
|
+
static urlSafeEncode({ input }) {
|
|
38
|
+
return this.URLSafeEncodeTransform(this.encode(input));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Decode into a URL safe ArrayBuffer
|
|
42
|
+
* @param {string} input string to be decoded
|
|
43
|
+
* @returns {ArrayBuffer} decoded ArrayBuffer
|
|
44
|
+
*/
|
|
45
|
+
static urlSafeDecode({ encoded }) {
|
|
46
|
+
encoded = this.URLSafeDecodeTransform(encoded);
|
|
47
|
+
return this.decode(encoded);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Encode a URL safe string
|
|
51
|
+
* @param {string} input string to be encoded
|
|
52
|
+
* @returns {string} encoded string
|
|
53
|
+
*/
|
|
54
|
+
static urlSafeEncodeString({ input }) {
|
|
55
|
+
return this.URLSafeEncodeTransform(this.encodeString(input));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Decode a URL safe string
|
|
59
|
+
* @param {string} input string to be decoded
|
|
60
|
+
* @returns {string} decoded string
|
|
61
|
+
*/
|
|
62
|
+
static urlSafeDecodeString({ encoded }) {
|
|
63
|
+
encoded = this.URLSafeDecodeTransform(encoded);
|
|
64
|
+
return Buffer.from(this.decode(encoded)).toString('utf8');
|
|
65
|
+
}
|
|
66
|
+
static UrlSafeValidate(encoded) {
|
|
67
|
+
return /^[A-Za-z0-9\-_]+$/.test(encoded);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.Base64 = Base64;
|
|
71
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAC/C;;GAEG;AACH,MAAa,MAAM;IACT,MAAM,CAAC,sBAAsB,CAAC,KAAa;QACjD,OAAO,KAAK;aACT,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,qBAAqB;aACzC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,qBAAqB;aACzC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAC,oBAAoB;IAC5C,CAAC;IACO,MAAM,CAAC,sBAAsB,CAAC,KAAa;QACjD,OAAO,KAAK;aACT,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,qBAAqB;aACzC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA,CAAC,qBAAqB;IAC9C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,eAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAmB;QAC/B,OAAO,IAAI,CAAC,eAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAe;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAA0B;QACpD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,EAAuB;QACnD,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAqB;QACrD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAuB;QACzD,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAe;QACpC,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;CACF;AAtED,wBAsEC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for operating on ArrayBuffer.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Buffer {
|
|
5
|
+
static concat(lhs: ArrayBuffer, rhs: ArrayBuffer): ArrayBuffer;
|
|
6
|
+
static split(buffer: ArrayBuffer, lhsLength: number): {
|
|
7
|
+
lhs: ArrayBuffer;
|
|
8
|
+
rhs: ArrayBuffer;
|
|
9
|
+
};
|
|
10
|
+
static toString(buffer: ArrayBuffer): string;
|
|
11
|
+
static fromString(s: string): Uint8Array;
|
|
12
|
+
static isArrayBuffer(u: unknown): u is ArrayBuffer;
|
|
13
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Buffer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Utility class for operating on ArrayBuffer.
|
|
6
|
+
*/
|
|
7
|
+
class Buffer {
|
|
8
|
+
static concat(lhs, rhs) {
|
|
9
|
+
const combined = new Uint8Array(lhs.byteLength + rhs.byteLength);
|
|
10
|
+
combined.set(new Uint8Array(lhs), 0);
|
|
11
|
+
combined.set(new Uint8Array(rhs), lhs.byteLength);
|
|
12
|
+
return combined.buffer;
|
|
13
|
+
}
|
|
14
|
+
static split(buffer, lhsLength) {
|
|
15
|
+
const array = new Uint8Array(buffer);
|
|
16
|
+
const lhs = array.slice(0, lhsLength);
|
|
17
|
+
const rhs = array.slice(lhsLength, array.length);
|
|
18
|
+
return { lhs, rhs };
|
|
19
|
+
}
|
|
20
|
+
static toString(buffer) {
|
|
21
|
+
let s = '';
|
|
22
|
+
const bytes = new Uint8Array(buffer);
|
|
23
|
+
const len = bytes.byteLength;
|
|
24
|
+
for (let i = 0; i < len; i++) {
|
|
25
|
+
s += String.fromCharCode(bytes[i]);
|
|
26
|
+
}
|
|
27
|
+
return s;
|
|
28
|
+
}
|
|
29
|
+
static fromString(s) {
|
|
30
|
+
return Uint8Array.from(s, (c) => c.charCodeAt(0));
|
|
31
|
+
}
|
|
32
|
+
static isArrayBuffer(u) {
|
|
33
|
+
return ArrayBuffer.isView(u);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.Buffer = Buffer;
|
|
37
|
+
//# sourceMappingURL=buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,MAAM;IACjB,MAAM,CAAC,MAAM,CAAC,GAAgB,EAAE,GAAgB;QAC9C,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAA;QAChE,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,KAAK,CACV,MAAmB,EACnB,SAAiB;QAEjB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAChD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAmB;QACjC,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAA;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;SACnC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,CAAS;QACzB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,CAAU;QAC7B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;CACF;AAnCD,wBAmCC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
export declare function isBodyReadableStream(body: ReadableStream | Readable | Blob): body is ReadableStream;
|
|
4
|
+
export declare function isBodyBlob(body: ReadableStream | Readable | Blob): body is Blob;
|
|
5
|
+
export declare function isBodyReadable(body: ReadableStream | Readable | Blob): body is Readable;
|
|
6
|
+
export declare const bodyToString: (body: ReadableStream | Readable | Blob) => Promise<string>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bodyToString = exports.isBodyReadable = exports.isBodyBlob = exports.isBodyReadableStream = void 0;
|
|
4
|
+
const error_1 = require("../errors/error");
|
|
5
|
+
/**
|
|
6
|
+
* Read a ReadableStream in to a string.
|
|
7
|
+
*
|
|
8
|
+
* This is used in browser environments
|
|
9
|
+
*
|
|
10
|
+
* @param stream The ReadableStream to read
|
|
11
|
+
*
|
|
12
|
+
* @returns The string
|
|
13
|
+
*/
|
|
14
|
+
const readableStreamToString = async (stream) => {
|
|
15
|
+
const reader = stream.getReader();
|
|
16
|
+
const decoder = new TextDecoder('utf-8');
|
|
17
|
+
let string = '';
|
|
18
|
+
while (true) {
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
20
|
+
const { done, value } = await reader.read();
|
|
21
|
+
if (done) {
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
25
|
+
string += decoder.decode(value, { stream: true });
|
|
26
|
+
}
|
|
27
|
+
string += decoder.decode();
|
|
28
|
+
return string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Read a Readable in to a string.
|
|
32
|
+
*
|
|
33
|
+
* This is used in node environments
|
|
34
|
+
*
|
|
35
|
+
* @param readable The Readable to read
|
|
36
|
+
*
|
|
37
|
+
* @returns The string
|
|
38
|
+
*/
|
|
39
|
+
const readableToString = (readable) => new Promise((resolve, reject) => {
|
|
40
|
+
const chunks = [];
|
|
41
|
+
readable.on('data', (chunk) => chunks.push(chunk));
|
|
42
|
+
readable.on('error', reject);
|
|
43
|
+
readable.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
44
|
+
});
|
|
45
|
+
function isBodyReadableStream(body) {
|
|
46
|
+
return typeof body.getReader === 'function';
|
|
47
|
+
}
|
|
48
|
+
exports.isBodyReadableStream = isBodyReadableStream;
|
|
49
|
+
function isBodyBlob(body) {
|
|
50
|
+
return typeof body === 'object' && body.hasOwnProperty('size');
|
|
51
|
+
}
|
|
52
|
+
exports.isBodyBlob = isBodyBlob;
|
|
53
|
+
function isBodyReadable(body) {
|
|
54
|
+
return !isBodyReadableStream(body) && !isBodyBlob(body);
|
|
55
|
+
}
|
|
56
|
+
exports.isBodyReadable = isBodyReadable;
|
|
57
|
+
const bodyToString = async (body) => {
|
|
58
|
+
if (isBodyReadableStream(body)) {
|
|
59
|
+
return readableStreamToString(body);
|
|
60
|
+
}
|
|
61
|
+
if (isBodyReadable(body)) {
|
|
62
|
+
return readableToString(body);
|
|
63
|
+
}
|
|
64
|
+
if (isBodyBlob(body)) {
|
|
65
|
+
return body.text();
|
|
66
|
+
}
|
|
67
|
+
throw new error_1.FatalError('Unknown body type');
|
|
68
|
+
};
|
|
69
|
+
exports.bodyToString = bodyToString;
|
|
70
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":";;;AACA,2CAA4C;AAE5C;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAG,KAAK,EAClC,MAAsB,EACL,EAAE;IACnB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAEjC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,OAAO,IAAI,EAAE;QACX,mEAAmE;QACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAC3C,IAAI,IAAI,EAAE;YACR,MAAK;SACN;QACD,iEAAiE;QACjE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;KAClD;IACD,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAA;IAC1B,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAmB,EAAE,CAC/D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEJ,SAAgB,oBAAoB,CAClC,IAAsC;IAEtC,OAAO,OAAQ,IAAuB,CAAC,SAAS,KAAK,UAAU,CAAA;AACjE,CAAC;AAJD,oDAIC;AAED,SAAgB,UAAU,CACxB,IAAsC;IAEtC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC;AAJD,gCAIC;AAED,SAAgB,cAAc,CAC5B,IAAsC;IAEtC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACzD,CAAC;AAJD,wCAIC;AAEM,MAAM,YAAY,GAAG,KAAK,EAC/B,IAAsC,EACrB,EAAE;IACnB,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE;QAC9B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAA;KACpC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAA;KAC9B;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;KACnB;IAED,MAAM,IAAI,kBAAU,CAAC,mBAAmB,CAAC,CAAA;AAC3C,CAAC,CAAA;AAhBY,QAAA,YAAY,gBAgBxB"}
|
|
@@ -1,168 +1,118 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _s = _interopRequireDefault(require("aws-sdk/clients/s3"));
|
|
13
|
-
|
|
14
|
-
var _PathReporter = require("io-ts/lib/PathReporter");
|
|
15
|
-
|
|
16
|
-
var _error = require("../errors/error");
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
-
|
|
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 { PathReporter } from 'io-ts/lib/PathReporter';
|
|
9
|
+
import { ConfigurationNotSetError, DecodeError, ConfigurationSetNotFoundError, FatalError, } from '../errors/error';
|
|
10
|
+
import { S3Client, ListObjectsCommand, GetObjectCommand, } from '@aws-sdk/client-s3';
|
|
11
|
+
import { bodyToString } from '../utils/stream';
|
|
22
12
|
/**
|
|
23
13
|
* Singleton to manage configuration
|
|
24
14
|
*/
|
|
25
|
-
class DefaultConfigurationManager {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
_defineProperty(this, "_config", void 0);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static getInstance() {
|
|
32
|
-
if (!DefaultConfigurationManager.instance) {
|
|
33
|
-
DefaultConfigurationManager.instance = new DefaultConfigurationManager();
|
|
15
|
+
export class DefaultConfigurationManager {
|
|
16
|
+
constructor() {
|
|
17
|
+
// Do Nothing.
|
|
34
18
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this._config = config;
|
|
41
|
-
return DefaultConfigurationManager.instance;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getConfigSet(namespace) {
|
|
45
|
-
if (!this._config) {
|
|
46
|
-
throw new _error.ConfigurationNotSetError();
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!DefaultConfigurationManager.instance) {
|
|
21
|
+
DefaultConfigurationManager.instance = new DefaultConfigurationManager();
|
|
22
|
+
}
|
|
23
|
+
return DefaultConfigurationManager.instance;
|
|
47
24
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return configSet;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
bind(configSet, codec) {
|
|
55
|
-
// Decode and validate config
|
|
56
|
-
return (0, _pipeable.pipe)(codec.decode(configSet), (0, _Either.fold)(errors => {
|
|
57
|
-
throw new _error.DecodeError(_PathReporter.PathReporter.report((0, _Either.left)(errors)).join('\n'));
|
|
58
|
-
}, v => v));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
bindConfigSet(codec, namespace) {
|
|
62
|
-
const configSet = this.getConfigSet(namespace);
|
|
63
|
-
|
|
64
|
-
if (!configSet) {
|
|
65
|
-
throw new _error.ConfigurationSetNotFoundError(namespace);
|
|
25
|
+
setConfig(config) {
|
|
26
|
+
this._config = config;
|
|
27
|
+
return DefaultConfigurationManager.instance;
|
|
66
28
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (!this._config) {
|
|
75
|
-
return {
|
|
76
|
-
incompatible: [],
|
|
77
|
-
deprecated: []
|
|
78
|
-
};
|
|
29
|
+
getConfigSet(namespace) {
|
|
30
|
+
if (!this._config) {
|
|
31
|
+
throw new ConfigurationNotSetError();
|
|
32
|
+
}
|
|
33
|
+
const parsed = JSON.parse(this._config);
|
|
34
|
+
const configSet = namespace ? parsed[namespace] : parsed;
|
|
35
|
+
return configSet;
|
|
79
36
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (!(region && bucket)) {
|
|
86
|
-
return {
|
|
87
|
-
incompatible: [],
|
|
88
|
-
deprecated: []
|
|
89
|
-
};
|
|
37
|
+
bind(configSet, codec) {
|
|
38
|
+
// Decode and validate config
|
|
39
|
+
return pipe(codec.decode(configSet), fold((errors) => {
|
|
40
|
+
throw new DecodeError(PathReporter.report(left(errors)).join('\n'));
|
|
41
|
+
}, (v) => v));
|
|
90
42
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const objects = await s3Client.makeUnauthenticatedRequest('listObjects', {
|
|
98
|
-
Bucket: bucket
|
|
99
|
-
}).promise();
|
|
100
|
-
|
|
101
|
-
if (!((_objects$Contents = objects.Contents) !== null && _objects$Contents !== void 0 && _objects$Contents.length)) {
|
|
102
|
-
return {
|
|
103
|
-
incompatible: [],
|
|
104
|
-
deprecated: []
|
|
105
|
-
};
|
|
43
|
+
bindConfigSet(codec, namespace) {
|
|
44
|
+
const configSet = this.getConfigSet(namespace);
|
|
45
|
+
if (!configSet) {
|
|
46
|
+
throw new ConfigurationSetNotFoundError(namespace);
|
|
47
|
+
}
|
|
48
|
+
return this.bind(configSet, codec);
|
|
106
49
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
50
|
+
async validateConfig() {
|
|
51
|
+
if (!this._config) {
|
|
52
|
+
return { incompatible: [], deprecated: [] };
|
|
53
|
+
}
|
|
54
|
+
const config = JSON.parse(this._config);
|
|
55
|
+
const region = config.identityService?.region;
|
|
56
|
+
const bucket = config.identityService?.serviceInfoBucket;
|
|
57
|
+
if (!(region && bucket)) {
|
|
58
|
+
return { incompatible: [], deprecated: [] };
|
|
59
|
+
}
|
|
60
|
+
const s3Client = new S3Client({
|
|
61
|
+
region: region,
|
|
62
|
+
// We want these request to be unauthenticated
|
|
63
|
+
// so we provide a no-op signer for the requests
|
|
64
|
+
signer: { sign: (request) => Promise.resolve(request) },
|
|
65
|
+
});
|
|
66
|
+
const incompatible = [];
|
|
67
|
+
const deprecated = [];
|
|
68
|
+
const listObjectsCommand = new ListObjectsCommand({
|
|
69
|
+
Bucket: bucket,
|
|
70
|
+
});
|
|
71
|
+
const objects = await s3Client.send(listObjectsCommand);
|
|
72
|
+
if (!objects.Contents?.length) {
|
|
73
|
+
return { incompatible: [], deprecated: [] };
|
|
74
|
+
}
|
|
75
|
+
const keys = objects.Contents.map((object) => object.Key);
|
|
76
|
+
// Only fetch the service info docs for the services that are present in client config
|
|
77
|
+
// to minimize the network calls.
|
|
78
|
+
const keysToFetch = keys.filter((key) => key.endsWith('.json') && config[key.replace('.json', '')]);
|
|
79
|
+
for (const key of keysToFetch) {
|
|
80
|
+
const getObject = new GetObjectCommand({
|
|
81
|
+
Key: key,
|
|
82
|
+
Bucket: bucket,
|
|
83
|
+
});
|
|
84
|
+
const object = await s3Client.send(getObject);
|
|
85
|
+
if (!object.Body) {
|
|
86
|
+
throw new FatalError('No S3 object body');
|
|
87
|
+
}
|
|
88
|
+
const body = await bodyToString(object.Body);
|
|
89
|
+
const json = JSON.parse(body);
|
|
90
|
+
const serviceName = key.replace('.json', '');
|
|
91
|
+
const serviceInfo = json[serviceName];
|
|
92
|
+
const serviceConfig = config[serviceName];
|
|
93
|
+
if (serviceInfo && serviceConfig) {
|
|
94
|
+
const currentVersion = serviceConfig.version ?? 1;
|
|
95
|
+
const deprecationGrace = serviceInfo.deprecationGrace ?? -1;
|
|
96
|
+
const compatibilityInfo = {
|
|
97
|
+
name: serviceName,
|
|
98
|
+
configVersion: currentVersion,
|
|
99
|
+
minSupportedVersion: serviceInfo.minVersion,
|
|
100
|
+
deprecatedVersion: serviceInfo.deprecated,
|
|
101
|
+
deprecationGrace: deprecationGrace != -1 ? new Date(deprecationGrace) : undefined,
|
|
102
|
+
};
|
|
103
|
+
// If the service config in `sudoplatformconfig.json` is less than the
|
|
104
|
+
// minimum supported version then the client is incompatible.
|
|
105
|
+
if (currentVersion < (compatibilityInfo.minSupportedVersion ?? 0)) {
|
|
106
|
+
incompatible.push(compatibilityInfo);
|
|
107
|
+
}
|
|
108
|
+
// If the service config is less than or equal to the deprecated version
|
|
109
|
+
// then it will be made incompatible after the deprecation grace.
|
|
110
|
+
if (currentVersion <= (compatibilityInfo.deprecatedVersion ?? 0)) {
|
|
111
|
+
deprecated.push(compatibilityInfo);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
154
114
|
}
|
|
155
|
-
|
|
115
|
+
return { incompatible, deprecated };
|
|
156
116
|
}
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
incompatible,
|
|
160
|
-
deprecated
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
117
|
}
|
|
165
|
-
|
|
166
|
-
exports.DefaultConfigurationManager = DefaultConfigurationManager;
|
|
167
|
-
|
|
168
|
-
_defineProperty(DefaultConfigurationManager, "instance", void 0);
|
|
118
|
+
//# sourceMappingURL=defaultConfigurationManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultConfigurationManager.js","sourceRoot":"","sources":["../../src/configurationManager/defaultConfigurationManager.ts"],"names":[],"mappings":"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"}
|