@bitgo-beta/sdk-coin-tempo 1.0.0-alpha.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/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/lib/constants.d.ts +8 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +11 -0
- package/dist/src/lib/iface.d.ts +12 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +6 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +21 -0
- package/dist/src/lib/keyPair.d.ts +28 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +100 -0
- package/dist/src/lib/utils.d.ts +25 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +40 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +11 -0
- package/dist/src/tempo.d.ts +72 -0
- package/dist/src/tempo.d.ts.map +1 -0
- package/dist/src/tempo.js +130 -0
- package/dist/src/ttempo.d.ts +10 -0
- package/dist/src/ttempo.d.ts.map +1 -0
- package/dist/src/ttempo.js +20 -0
- package/dist/test/integration/index.d.ts +10 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +11 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +55 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +46 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +52 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIlE,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;;;OAMG;IACG,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3E;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrE;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKnF;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAK1F;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAIlF"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Tempo = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const keyPair_1 = require("./lib/keyPair");
|
|
9
|
+
const utils_1 = __importDefault(require("./lib/utils"));
|
|
10
|
+
class Tempo extends sdk_core_1.BaseCoin {
|
|
11
|
+
constructor(bitgo, staticsCoin) {
|
|
12
|
+
super(bitgo);
|
|
13
|
+
if (!staticsCoin) {
|
|
14
|
+
throw new Error('missing required constructor parameter staticsCoin');
|
|
15
|
+
}
|
|
16
|
+
this._staticsCoin = staticsCoin;
|
|
17
|
+
}
|
|
18
|
+
static createInstance(bitgo, staticsCoin) {
|
|
19
|
+
return new Tempo(bitgo, staticsCoin);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Factor between the coin's base unit and its smallest subdivision
|
|
23
|
+
*/
|
|
24
|
+
getBaseFactor() {
|
|
25
|
+
return 1e18;
|
|
26
|
+
}
|
|
27
|
+
getChain() {
|
|
28
|
+
return 'tempo';
|
|
29
|
+
}
|
|
30
|
+
getFamily() {
|
|
31
|
+
return 'tempo';
|
|
32
|
+
}
|
|
33
|
+
getFullName() {
|
|
34
|
+
return 'Tempo';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Flag for sending value of 0
|
|
38
|
+
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
39
|
+
*/
|
|
40
|
+
valuelessTransferAllowed() {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Checks if this is a valid base58 or hex address
|
|
45
|
+
* @param address
|
|
46
|
+
*/
|
|
47
|
+
isValidAddress(address) {
|
|
48
|
+
return utils_1.default.isValidAddress(address);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generate ed25519 key pair
|
|
52
|
+
*
|
|
53
|
+
* @param seed
|
|
54
|
+
* @returns {Object} object with generated pub, prv
|
|
55
|
+
*/
|
|
56
|
+
generateKeyPair(seed) {
|
|
57
|
+
const keyPair = seed ? new keyPair_1.KeyPair({ seed }) : new keyPair_1.KeyPair();
|
|
58
|
+
const keys = keyPair.getKeys();
|
|
59
|
+
if (!keys.prv) {
|
|
60
|
+
throw new Error('Missing prv in key generation.');
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
pub: keys.pub,
|
|
64
|
+
prv: keys.prv,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Return boolean indicating whether input is valid public key for the coin.
|
|
69
|
+
*
|
|
70
|
+
* @param {String} pub the pub to be checked
|
|
71
|
+
* @returns {Boolean} is it valid?
|
|
72
|
+
*/
|
|
73
|
+
isValidPub(pub) {
|
|
74
|
+
return utils_1.default.isValidPublicKey(pub);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Verify that a transaction prebuild complies with the original intention
|
|
78
|
+
* @param params
|
|
79
|
+
* @param params.txPrebuild
|
|
80
|
+
* @param params.txParams
|
|
81
|
+
* @returns {boolean}
|
|
82
|
+
*/
|
|
83
|
+
async verifyTransaction(params) {
|
|
84
|
+
// TODO: Implement transaction verification
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if address is a wallet address
|
|
89
|
+
* @param params
|
|
90
|
+
*/
|
|
91
|
+
async isWalletAddress(params) {
|
|
92
|
+
// TODO: Implement address verification
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Audit a decrypted private key for security purposes
|
|
97
|
+
* @param params
|
|
98
|
+
*/
|
|
99
|
+
async auditDecryptedKey(params) {
|
|
100
|
+
// TODO: Implement key auditing logic if needed
|
|
101
|
+
// This method is typically used for security compliance
|
|
102
|
+
return Promise.resolve();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse a transaction from the raw transaction hex
|
|
106
|
+
* @param params
|
|
107
|
+
*/
|
|
108
|
+
async parseTransaction(params) {
|
|
109
|
+
// TODO: Implement transaction parsing
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Explain a transaction
|
|
114
|
+
* @param params
|
|
115
|
+
*/
|
|
116
|
+
async explainTransaction(params) {
|
|
117
|
+
// TODO: Implement transaction explanation
|
|
118
|
+
return {};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Sign a transaction
|
|
122
|
+
* @param params
|
|
123
|
+
*/
|
|
124
|
+
async signTransaction(params) {
|
|
125
|
+
// TODO: Implement transaction signing
|
|
126
|
+
return {};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.Tempo = Tempo;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBWThCO0FBRTlCLDJDQUF3RDtBQUN4RCx3REFBZ0M7QUFFaEMsTUFBYSxLQUFNLFNBQVEsbUJBQVE7SUFHakMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsT0FBZTtRQUM1QixPQUFPLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLElBQWE7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFZLEVBQUUsQ0FBQztRQUN2RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBVztRQUNwQixPQUFPLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQWdDO1FBQ3RELDJDQUEyQztRQUMzQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQTRCO1FBQ2hELHVDQUF1QztRQUN2QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBK0I7UUFDckQsK0NBQStDO1FBQy9DLHdEQUF3RDtRQUN4RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQStCO1FBQ3BELHNDQUFzQztRQUN0QyxPQUFPLEVBQXVCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUErQjtRQUN0RCwwQ0FBMEM7UUFDMUMsT0FBTyxFQUE0QixDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQThCO1FBQ2xELHNDQUFzQztRQUN0QyxPQUFPLEVBQXVCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBM0lELHNCQTJJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEtleVBhaXIgYXMgVGVtcG9LZXlQYWlyIH0gZnJvbSAnLi9saWIva2V5UGFpcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVGVtcG8gZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yIGJldHdlZW4gdGhlIGNvaW4ncyBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc2lvblxuICAgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWUxODtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGVtcG8nO1xuICB9XG5cbiAgcHVibGljIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGVtcG8nO1xuICB9XG5cbiAgcHVibGljIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdUZW1wbyc7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaXMgYSB2YWxpZCBiYXNlNTggb3IgaGV4IGFkZHJlc3NcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBlZDI1NTE5IGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIsIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBUZW1wb0tleVBhaXIoeyBzZWVkIH0pIDogbmV3IFRlbXBvS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy5wdWIsXG4gICAgICBwcnY6IGtleXMucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZFxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgYSB3YWxsZXQgYWRkcmVzc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCBhZGRyZXNzIHZlcmlmaWNhdGlvblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdWRpdCBhIGRlY3J5cHRlZCBwcml2YXRlIGtleSBmb3Igc2VjdXJpdHkgcHVycG9zZXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgYXVkaXREZWNyeXB0ZWRLZXkocGFyYW1zOiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCBrZXkgYXVkaXRpbmcgbG9naWMgaWYgbmVlZGVkXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIHNlY3VyaXR5IGNvbXBsaWFuY2VcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSB0cmFuc2FjdGlvbiBmcm9tIHRoZSByYXcgdHJhbnNhY3Rpb24gaGV4XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdHJhbnNhY3Rpb24gcGFyc2luZ1xuICAgIHJldHVybiB7fSBhcyBQYXJzZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb25cbiAgICByZXR1cm4ge30gYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdHJhbnNhY3Rpb24gc2lnbmluZ1xuICAgIHJldHVybiB7fSBhcyBTaWduZWRUcmFuc2FjdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseCoin, BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
3
|
+
import { Tempo } from './tempo';
|
|
4
|
+
export declare class Ttempo extends Tempo {
|
|
5
|
+
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
6
|
+
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
7
|
+
getChain(): string;
|
|
8
|
+
getFullName(): string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ttempo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttempo.d.ts","sourceRoot":"","sources":["../../src/ttempo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,MAAO,SAAQ,KAAK;IAC/B,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Ttempo = void 0;
|
|
4
|
+
const tempo_1 = require("./tempo");
|
|
5
|
+
class Ttempo extends tempo_1.Tempo {
|
|
6
|
+
constructor(bitgo, staticsCoin) {
|
|
7
|
+
super(bitgo, staticsCoin);
|
|
8
|
+
}
|
|
9
|
+
static createInstance(bitgo, staticsCoin) {
|
|
10
|
+
return new Ttempo(bitgo, staticsCoin);
|
|
11
|
+
}
|
|
12
|
+
getChain() {
|
|
13
|
+
return 'ttempo';
|
|
14
|
+
}
|
|
15
|
+
getFullName() {
|
|
16
|
+
return 'Testnet Tempo';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.Ttempo = Ttempo;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHRlbXBvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R0ZW1wby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxtQ0FBZ0M7QUFFaEMsTUFBYSxNQUFPLFNBQVEsYUFBSztJQUMvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBaEJELHdCQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRlbXBvIH0gZnJvbSAnLi90ZW1wbyc7XG5cbmV4cG9ydCBjbGFzcyBUdGVtcG8gZXh0ZW5kcyBUZW1wbyB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFR0ZW1wbyhiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3R0ZW1wbyc7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGVzdG5ldCBUZW1wbyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/integration/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration tests for Tempo
|
|
4
|
+
*
|
|
5
|
+
* These tests require a running Tempo node or testnet connection
|
|
6
|
+
* and are typically run separately from unit tests.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Add integration tests
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgVGVtcG9cbiAqXG4gKiBUaGVzZSB0ZXN0cyByZXF1aXJlIGEgcnVubmluZyBUZW1wbyBub2RlIG9yIHRlc3RuZXQgY29ubmVjdGlvblxuICogYW5kIGFyZSB0eXBpY2FsbHkgcnVuIHNlcGFyYXRlbHkgZnJvbSB1bml0IHRlc3RzLlxuICpcbiAqIFRPRE86IEFkZCBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5cbi8vIFBsYWNlaG9sZGVyIHRvIGVuc3VyZSB0ZXN0IGZpbGUgbG9hZHMgY29ycmVjdGx5XG5leHBvcnQge307XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tempo_1 = require("../../src/tempo");
|
|
4
|
+
const ttempo_1 = require("../../src/ttempo");
|
|
5
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
6
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
7
|
+
describe('Tempo Coin', function () {
|
|
8
|
+
let bitgo;
|
|
9
|
+
let basecoin;
|
|
10
|
+
const registerCoin = (name, coinClass) => {
|
|
11
|
+
bitgo.safeRegister(name, (bitgo) => {
|
|
12
|
+
// Create a mock statics coin
|
|
13
|
+
const mockStaticsCoin = {
|
|
14
|
+
name,
|
|
15
|
+
fullName: name === 'tempo' ? 'Tempo' : 'Testnet Tempo',
|
|
16
|
+
network: {
|
|
17
|
+
type: name === 'tempo' ? 'mainnet' : 'testnet',
|
|
18
|
+
},
|
|
19
|
+
features: [],
|
|
20
|
+
};
|
|
21
|
+
return coinClass.createInstance(bitgo, mockStaticsCoin);
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
before(function () {
|
|
25
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
26
|
+
registerCoin('tempo', tempo_1.Tempo);
|
|
27
|
+
bitgo.initializeTestVars();
|
|
28
|
+
basecoin = bitgo.coin('tempo');
|
|
29
|
+
});
|
|
30
|
+
it('should instantiate the coin', function () {
|
|
31
|
+
const basecoin = bitgo.coin('tempo');
|
|
32
|
+
basecoin.should.be.an.instanceof(tempo_1.Tempo);
|
|
33
|
+
});
|
|
34
|
+
it('should return the correct coin name', function () {
|
|
35
|
+
basecoin.getChain().should.equal('tempo');
|
|
36
|
+
basecoin.getFullName().should.equal('Tempo');
|
|
37
|
+
basecoin.getBaseFactor().should.equal(1e18);
|
|
38
|
+
});
|
|
39
|
+
describe('Testnet', function () {
|
|
40
|
+
let testnetBasecoin;
|
|
41
|
+
before(function () {
|
|
42
|
+
registerCoin('ttempo', ttempo_1.Ttempo);
|
|
43
|
+
testnetBasecoin = bitgo.coin('ttempo');
|
|
44
|
+
});
|
|
45
|
+
it('should instantiate the testnet coin', function () {
|
|
46
|
+
testnetBasecoin.should.be.an.instanceof(ttempo_1.Ttempo);
|
|
47
|
+
});
|
|
48
|
+
it('should return the correct testnet coin name', function () {
|
|
49
|
+
testnetBasecoin.getChain().should.equal('ttempo');
|
|
50
|
+
testnetBasecoin.getFullName().should.equal('Testnet Tempo');
|
|
51
|
+
testnetBasecoin.getBaseFactor().should.equal(1e18);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBd0M7QUFDeEMsNkNBQTBDO0FBQzFDLGlEQUErQztBQUMvQyxtREFBK0Q7QUFJL0QsUUFBUSxDQUFDLFlBQVksRUFBRTtJQUNyQixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFFYixNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxTQUF1QyxFQUFRLEVBQUU7UUFDbkYsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFnQixFQUFFLEVBQUU7WUFDNUMsNkJBQTZCO1lBQzdCLE1BQU0sZUFBZSxHQUE4QjtnQkFDakQsSUFBSTtnQkFDSixRQUFRLEVBQUUsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlO2dCQUN0RCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDeEM7Z0JBQ1IsUUFBUSxFQUFFLEVBQUU7YUFDTixDQUFDO1lBQ1QsT0FBTyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDeEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2xCLElBQUksZUFBZSxDQUFDO1FBRXBCLE1BQU0sQ0FBQztZQUNMLFlBQVksQ0FBQyxRQUFRLEVBQUUsZUFBTSxDQUFDLENBQUM7WUFDL0IsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7WUFDeEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RCxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbyB9IGZyb20gJy4uLy4uL3NyYy90ZW1wbyc7XG5pbXBvcnQgeyBUdGVtcG8gfSBmcm9tICcuLi8uLi9zcmMvdHRlbXBvJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5kZXNjcmliZSgnVGVtcG8gQ29pbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBjb25zdCByZWdpc3RlckNvaW4gPSAobmFtZTogc3RyaW5nLCBjb2luQ2xhc3M6IHR5cGVvZiBUZW1wbyB8IHR5cGVvZiBUdGVtcG8pOiB2b2lkID0+IHtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgKGJpdGdvOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIG1vY2sgc3RhdGljcyBjb2luXG4gICAgICBjb25zdCBtb2NrU3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4gPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZ1bGxOYW1lOiBuYW1lID09PSAndGVtcG8nID8gJ1RlbXBvJyA6ICdUZXN0bmV0IFRlbXBvJyxcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIHR5cGU6IG5hbWUgPT09ICd0ZW1wbycgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCcsXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9IGFzIGFueTtcbiAgICAgIHJldHVybiBjb2luQ2xhc3MuY3JlYXRlSW5zdGFuY2UoYml0Z28sIG1vY2tTdGF0aWNzQ29pbik7XG4gICAgfSk7XG4gIH07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICByZWdpc3RlckNvaW4oJ3RlbXBvJywgVGVtcG8pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVtcG8nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGVtcG8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb2luIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTE4KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rlc3RuZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHRlc3RuZXRCYXNlY29pbjtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICByZWdpc3RlckNvaW4oJ3R0ZW1wbycsIFR0ZW1wbyk7XG4gICAgICB0ZXN0bmV0QmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dGVtcG8nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIHRlc3RuZXQgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRlc3RuZXRCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUdGVtcG8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgdGVzdG5ldCBjb2luIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZXN0bmV0QmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3R0ZW1wbycpO1xuICAgICAgdGVzdG5ldEJhc2Vjb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IFRlbXBvJyk7XG4gICAgICB0ZXN0bmV0QmFzZWNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTE4KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const lib_1 = require("../../src/lib");
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
describe('Tempo KeyPair', function () {
|
|
9
|
+
describe('Key Generation', function () {
|
|
10
|
+
it('should generate a valid keypair without a seed', function () {
|
|
11
|
+
const keyPair = new lib_1.KeyPair();
|
|
12
|
+
const keys = keyPair.getKeys();
|
|
13
|
+
should_1.default.exist(keys.prv);
|
|
14
|
+
should_1.default.exist(keys.pub);
|
|
15
|
+
(0, should_1.default)(keys.prv).be.a.String();
|
|
16
|
+
keys.pub.should.be.a.String();
|
|
17
|
+
});
|
|
18
|
+
it('should generate a valid keypair with a seed', function () {
|
|
19
|
+
const seed = Buffer.from('0'.repeat(64), 'hex');
|
|
20
|
+
const keyPair = new lib_1.KeyPair({ seed });
|
|
21
|
+
const keys = keyPair.getKeys();
|
|
22
|
+
should_1.default.exist(keys.prv);
|
|
23
|
+
should_1.default.exist(keys.pub);
|
|
24
|
+
(0, should_1.default)(keys.prv).be.a.String();
|
|
25
|
+
keys.pub.should.be.a.String();
|
|
26
|
+
});
|
|
27
|
+
it('should generate the same keypair with the same seed', function () {
|
|
28
|
+
const seed = Buffer.from('0'.repeat(64), 'hex');
|
|
29
|
+
const keyPair1 = new lib_1.KeyPair({ seed });
|
|
30
|
+
const keyPair2 = new lib_1.KeyPair({ seed });
|
|
31
|
+
const keys1 = keyPair1.getKeys();
|
|
32
|
+
const keys2 = keyPair2.getKeys();
|
|
33
|
+
should_1.default.exist(keys1.prv);
|
|
34
|
+
should_1.default.exist(keys2.prv);
|
|
35
|
+
(0, should_1.default)(keys1.prv).equal(keys2.prv);
|
|
36
|
+
keys1.pub.should.equal(keys2.pub);
|
|
37
|
+
});
|
|
38
|
+
it('should generate an address from the keypair', function () {
|
|
39
|
+
const keyPair = new lib_1.KeyPair();
|
|
40
|
+
const address = keyPair.getAddress();
|
|
41
|
+
address.should.be.a.String();
|
|
42
|
+
address.length.should.be.greaterThan(0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUNBQXdDO0FBQ3hDLG9EQUE0QjtBQUU1QixRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFL0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUvQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFO1lBQ3hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVyQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmRlc2NyaWJlKCdUZW1wbyBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnS2V5IEdlbmVyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHZhbGlkIGtleXBhaXIgd2l0aG91dCBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGtleXMucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQoa2V5cy5wcnYpLmJlLmEuU3RyaW5nKCk7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB2YWxpZCBrZXlwYWlyIHdpdGggYSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCcwJy5yZXBlYXQoNjQpLCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBzZWVkIH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuXG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleXMucHViKTtcbiAgICAgIHNob3VsZChrZXlzLnBydikuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0aGUgc2FtZSBrZXlwYWlyIHdpdGggdGhlIHNhbWUgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnMCcucmVwZWF0KDY0KSwgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpcjEgPSBuZXcgS2V5UGFpcih7IHNlZWQgfSk7XG4gICAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKHsgc2VlZCB9KTtcblxuICAgICAgY29uc3Qga2V5czEgPSBrZXlQYWlyMS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBrZXlzMiA9IGtleVBhaXIyLmdldEtleXMoKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGtleXMxLnBydik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5czIucHJ2KTtcbiAgICAgIHNob3VsZChrZXlzMS5wcnYpLmVxdWFsKGtleXMyLnBydik7XG4gICAgICBrZXlzMS5wdWIuc2hvdWxkLmVxdWFsKGtleXMyLnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGFuIGFkZHJlc3MgZnJvbSB0aGUga2V5cGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuXG4gICAgICBhZGRyZXNzLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgYWRkcmVzcy5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
7
|
+
describe('Tempo Utils', function () {
|
|
8
|
+
describe('Address Validation', function () {
|
|
9
|
+
it('should validate a valid address', function () {
|
|
10
|
+
// TODO: Add valid address examples for Tempo
|
|
11
|
+
const validAddress = 'validAddress123';
|
|
12
|
+
utils_1.default.isValidAddress(validAddress).should.be.true();
|
|
13
|
+
});
|
|
14
|
+
it('should invalidate an invalid address', function () {
|
|
15
|
+
const invalidAddress = 'invalid!@#$';
|
|
16
|
+
utils_1.default.isValidAddress(invalidAddress).should.be.false();
|
|
17
|
+
});
|
|
18
|
+
it('should invalidate an empty address', function () {
|
|
19
|
+
utils_1.default.isValidAddress('').should.be.false();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('Public Key Validation', function () {
|
|
23
|
+
it('should validate a valid public key', function () {
|
|
24
|
+
// TODO: Add valid public key examples for Tempo
|
|
25
|
+
const validPubKey = '0'.repeat(64);
|
|
26
|
+
utils_1.default.isValidPublicKey(validPubKey).should.be.true();
|
|
27
|
+
});
|
|
28
|
+
it('should invalidate an invalid public key', function () {
|
|
29
|
+
const invalidPubKey = 'notahexstring';
|
|
30
|
+
utils_1.default.isValidPublicKey(invalidPubKey).should.be.false();
|
|
31
|
+
});
|
|
32
|
+
it('should invalidate a public key with wrong length', function () {
|
|
33
|
+
const wrongLengthPubKey = '0'.repeat(32);
|
|
34
|
+
utils_1.default.isValidPublicKey(wrongLengthPubKey).should.be.false();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('Private Key Validation', function () {
|
|
38
|
+
it('should validate a valid private key', function () {
|
|
39
|
+
const validPrvKey = '0'.repeat(64);
|
|
40
|
+
utils_1.default.isValidPrivateKey(validPrvKey).should.be.true();
|
|
41
|
+
});
|
|
42
|
+
it('should invalidate an invalid private key', function () {
|
|
43
|
+
const invalidPrvKey = 'notahexstring';
|
|
44
|
+
utils_1.default.isValidPrivateKey(invalidPrvKey).should.be.false();
|
|
45
|
+
});
|
|
46
|
+
it('should invalidate a private key with wrong length', function () {
|
|
47
|
+
const wrongLengthPrvKey = '0'.repeat(32);
|
|
48
|
+
utils_1.default.isValidPrivateKey(wrongLengthPrvKey).should.be.false();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1lBQ3BDLDZDQUE2QztZQUM3QyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztZQUN2QyxlQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7WUFDekMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDO1lBQ3JDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxlQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtRQUNoQyxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsZ0RBQWdEO1lBQ2hELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUU7WUFDNUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO1lBQ3RDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUU7UUFDakMsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsZUFBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUU7WUFDN0MsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO1lBQ3RDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFO1lBQ3RELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxlQUFLLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1RlbXBvIFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSB2YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVE9ETzogQWRkIHZhbGlkIGFkZHJlc3MgZXhhbXBsZXMgZm9yIFRlbXBvXG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3MgPSAndmFsaWRBZGRyZXNzMTIzJztcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW52YWxpZGF0ZSBhbiBpbnZhbGlkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9ICdpbnZhbGlkIUAjJCc7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhpbnZhbGlkQWRkcmVzcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgYW4gZW1wdHkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1B1YmxpYyBLZXkgVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgdmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRPRE86IEFkZCB2YWxpZCBwdWJsaWMga2V5IGV4YW1wbGVzIGZvciBUZW1wb1xuICAgICAgY29uc3QgdmFsaWRQdWJLZXkgPSAnMCcucmVwZWF0KDY0KTtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodmFsaWRQdWJLZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgYW4gaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZFB1YktleSA9ICdub3RhaGV4c3RyaW5nJztcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoaW52YWxpZFB1YktleSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgYSBwdWJsaWMga2V5IHdpdGggd3JvbmcgbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JvbmdMZW5ndGhQdWJLZXkgPSAnMCcucmVwZWF0KDMyKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkod3JvbmdMZW5ndGhQdWJLZXkpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJpdmF0ZSBLZXkgVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgdmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFBydktleSA9ICcwJy5yZXBlYXQoNjQpO1xuICAgICAgdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkodmFsaWRQcnZLZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgYW4gaW52YWxpZCBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRQcnZLZXkgPSAnbm90YWhleHN0cmluZyc7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShpbnZhbGlkUHJ2S2V5KS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW52YWxpZGF0ZSBhIHByaXZhdGUga2V5IHdpdGggd3JvbmcgbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JvbmdMZW5ndGhQcnZLZXkgPSAnMCcucmVwZWF0KDMyKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHdyb25nTGVuZ3RoUHJ2S2V5KS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|