@bitgo-beta/sdk-coin-sol 2.4.3-beta.998 → 7.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bigint-buffer-guard.d.ts +1 -0
- package/dist/src/bigint-buffer-guard.d.ts.map +1 -0
- package/dist/src/bigint-buffer-guard.js +29 -0
- package/dist/src/config/token2022StaticConfig.d.ts +3 -0
- package/dist/src/config/token2022StaticConfig.d.ts.map +1 -0
- package/dist/src/config/token2022StaticConfig.js +50 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +35 -2
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +41 -2
- package/dist/src/lib/customInstructionBuilder.d.ts +72 -0
- package/dist/src/lib/customInstructionBuilder.d.ts.map +1 -0
- package/dist/src/lib/customInstructionBuilder.js +289 -0
- package/dist/src/lib/iface.d.ts +79 -5
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/src/lib/instructionParamsFactory.js +364 -78
- package/dist/src/lib/jitoStakePoolOperations.d.ts +113 -0
- package/dist/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
- package/dist/src/lib/jitoStakePoolOperations.js +200 -0
- package/dist/src/lib/solInstructionFactory.d.ts.map +1 -1
- package/dist/src/lib/solInstructionFactory.js +266 -69
- package/dist/src/lib/stakingActivateBuilder.d.ts +16 -5
- package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingActivateBuilder.js +23 -10
- package/dist/src/lib/stakingDeactivateBuilder.d.ts +16 -5
- package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingDeactivateBuilder.js +43 -20
- package/dist/src/lib/token2022Config.d.ts +44 -0
- package/dist/src/lib/token2022Config.d.ts.map +1 -0
- package/dist/src/lib/token2022Config.js +27 -0
- package/dist/src/lib/tokenTransferBuilder.js +7 -7
- package/dist/src/lib/transaction.d.ts +31 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +134 -46
- package/dist/src/lib/transactionBuilder.d.ts +18 -2
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +78 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts +5 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +10 -1
- package/dist/src/lib/utils.d.ts +34 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +88 -24
- package/dist/src/sol.d.ts +36 -13
- package/dist/src/sol.d.ts.map +1 -1
- package/dist/src/sol.js +230 -38
- package/dist/test/fixtures/sol.d.ts +1152 -0
- package/dist/test/fixtures/sol.d.ts.map +1 -0
- package/dist/test/fixtures/sol.js +1433 -0
- package/dist/test/resources/sol.d.ts +238 -0
- package/dist/test/resources/sol.d.ts.map +1 -0
- package/dist/test/resources/sol.js +320 -0
- package/dist/test/unit/fixtures/solBackupKey.d.ts +5 -0
- package/dist/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
- package/dist/test/unit/fixtures/solBackupKey.js +8 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -0
- package/dist/test/unit/instructionParamsFactory.d.ts +2 -0
- package/dist/test/unit/instructionParamsFactory.d.ts.map +1 -0
- package/dist/test/unit/instructionParamsFactory.js +412 -0
- package/dist/test/unit/instructionParamsFactory.staking.d.ts +2 -0
- package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
- package/dist/test/unit/instructionParamsFactory.staking.js +1059 -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 +177 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/messages/messageBuilderFactory.js +118 -0
- package/dist/test/unit/messages/simpleMessageBuilder.d.ts +2 -0
- package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/test/unit/messages/simpleMessageBuilder.js +194 -0
- package/dist/test/unit/sol.d.ts +2 -0
- package/dist/test/unit/sol.d.ts.map +1 -0
- package/dist/test/unit/sol.js +3108 -0
- package/dist/test/unit/solInstructionFactory.d.ts +2 -0
- package/dist/test/unit/solInstructionFactory.d.ts.map +1 -0
- package/dist/test/unit/solInstructionFactory.js +454 -0
- package/dist/test/unit/solToken.d.ts +2 -0
- package/dist/test/unit/solToken.d.ts.map +1 -0
- package/dist/test/unit/solToken.js +31 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +983 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
- package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +495 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +286 -0
- package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
- package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walletInitBuilder.js +259 -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 +505 -0
- package/dist/test/unit/versionedTransaction.d.ts +2 -0
- package/dist/test/unit/versionedTransaction.d.ts.map +1 -0
- package/dist/test/unit/versionedTransaction.js +207 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +14 -9
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -1223
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const src_1 = require("../../src");
|
|
41
|
+
const should_1 = __importDefault(require("should"));
|
|
42
|
+
const testData = __importStar(require("../resources/sol"));
|
|
43
|
+
const utils_1 = require("../../src/lib/utils");
|
|
44
|
+
describe('Sol KeyPair', function () {
|
|
45
|
+
const defaultSeed = { seed: testData.accountWithSeed.seed };
|
|
46
|
+
describe('should create a valid KeyPair', () => {
|
|
47
|
+
it('from an empty value', () => {
|
|
48
|
+
const keyPair = new src_1.KeyPair();
|
|
49
|
+
should_1.default.exists(keyPair.getKeys().prv);
|
|
50
|
+
should_1.default.exists(keyPair.getKeys().pub);
|
|
51
|
+
keyPair.getKeys().prv?.length.should.be.belowOrEqual(88);
|
|
52
|
+
keyPair.getKeys().prv?.length.should.be.aboveOrEqual(76);
|
|
53
|
+
keyPair.getKeys().pub.length.should.be.belowOrEqual(44);
|
|
54
|
+
keyPair.getKeys().pub.length.should.be.aboveOrEqual(32);
|
|
55
|
+
});
|
|
56
|
+
it('from a private key', () => {
|
|
57
|
+
const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
|
|
58
|
+
should_1.default.equal(keyPair.getKeys().pub, testData.accountWithSeed.publicKey);
|
|
59
|
+
should_1.default.equal(keyPair.getKeys().prv, testData.accountWithSeed.privateKey.base58);
|
|
60
|
+
should_1.default.equal(keyPair.getKeys(true).pub, testData.accountWithSeed.publicKey);
|
|
61
|
+
should_1.default.deepEqual(keyPair.getKeys(true).prv, testData.accountWithSeed.privateKey.uint8Array);
|
|
62
|
+
});
|
|
63
|
+
it('from an public key', () => {
|
|
64
|
+
const keyPair = new src_1.KeyPair({ pub: testData.accountWithSeed.publicKey });
|
|
65
|
+
should_1.default.equal(keyPair.getKeys().pub, testData.accountWithSeed.publicKey);
|
|
66
|
+
});
|
|
67
|
+
it('should always generate and regenerate valid key pairs', () => {
|
|
68
|
+
for (let i = 0; i < 50; i++) {
|
|
69
|
+
const keyPair = new src_1.KeyPair();
|
|
70
|
+
(0, utils_1.isValidPublicKey)(keyPair.getKeys().pub).should.be.true();
|
|
71
|
+
(0, utils_1.isValidAddress)(keyPair.getAddress()).should.be.true();
|
|
72
|
+
const prv = keyPair.getKeys().prv;
|
|
73
|
+
should_1.default.exist(prv);
|
|
74
|
+
// verify key pair can be re-generated from private portion
|
|
75
|
+
const regeneratedKeyPairFromPrv = new src_1.KeyPair({ prv: prv });
|
|
76
|
+
regeneratedKeyPairFromPrv.getKeys().should.deepEqual(keyPair.getKeys());
|
|
77
|
+
regeneratedKeyPairFromPrv.getAddress().should.equal(keyPair.getAddress());
|
|
78
|
+
regeneratedKeyPairFromPrv.should.deepEqual(keyPair);
|
|
79
|
+
should_1.default.exist(regeneratedKeyPairFromPrv.getKeys().prv);
|
|
80
|
+
// verify key pair can be re-generated from public portion
|
|
81
|
+
const pub = keyPair.getKeys().pub;
|
|
82
|
+
const regeneratedKeyPairFromPub = new src_1.KeyPair({ pub: pub });
|
|
83
|
+
regeneratedKeyPairFromPub.getKeys().pub.should.deepEqual(keyPair.getKeys().pub);
|
|
84
|
+
regeneratedKeyPairFromPub.getAddress().should.equal(keyPair.getAddress());
|
|
85
|
+
should_1.default.not.exist(regeneratedKeyPairFromPub.getKeys().prv);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('should fail to create a KeyPair', function () {
|
|
90
|
+
it('from invalid options', () => {
|
|
91
|
+
// @ts-expect-error Testing for an params, should throw error
|
|
92
|
+
(0, should_1.default)(() => new src_1.KeyPair({ random: 'random' })).throwError('Invalid key pair options');
|
|
93
|
+
});
|
|
94
|
+
it('from an invalid seed', () => {
|
|
95
|
+
const seed = { seed: Buffer.alloc(8) }; // Seed should be 512 bits (64 bytes)
|
|
96
|
+
assert_1.default.throws(() => new src_1.KeyPair(seed));
|
|
97
|
+
});
|
|
98
|
+
it('from an invalid public key', () => {
|
|
99
|
+
const source = {
|
|
100
|
+
pub: '01D63D',
|
|
101
|
+
};
|
|
102
|
+
assert_1.default.throws(() => new src_1.KeyPair(source));
|
|
103
|
+
});
|
|
104
|
+
it('from an invalid private key', () => {
|
|
105
|
+
const source = {
|
|
106
|
+
prv: '82A34E',
|
|
107
|
+
};
|
|
108
|
+
assert_1.default.throws(() => new src_1.KeyPair(source));
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('getAddress', function () {
|
|
112
|
+
it('should get an address', () => {
|
|
113
|
+
const keyPair = new src_1.KeyPair(defaultSeed);
|
|
114
|
+
const address = keyPair.getAddress();
|
|
115
|
+
address.should.equal(testData.accountWithSeed.publicKey);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('getKeys', function () {
|
|
119
|
+
it('should get public keys in base58 and private in Uint8Array', () => {
|
|
120
|
+
const keyPair = new src_1.KeyPair(defaultSeed);
|
|
121
|
+
const { prv, pub } = keyPair.getKeys(true);
|
|
122
|
+
prv?.should.deepEqual(testData.accountWithSeed.privateKey.uint8Array);
|
|
123
|
+
pub.should.equal(testData.accountWithSeed.publicKey);
|
|
124
|
+
});
|
|
125
|
+
it('should get private and public keys base58', () => {
|
|
126
|
+
const keyPair = new src_1.KeyPair(defaultSeed);
|
|
127
|
+
const { prv, pub } = keyPair.getKeys();
|
|
128
|
+
prv?.should.equal(testData.accountWithSeed.privateKey.base58);
|
|
129
|
+
pub.should.equal(testData.accountWithSeed.publicKey);
|
|
130
|
+
});
|
|
131
|
+
it('should get private and public keys for a random seed', () => {
|
|
132
|
+
const keyPair = new src_1.KeyPair();
|
|
133
|
+
const { prv, pub } = keyPair.getKeys();
|
|
134
|
+
should_1.default.exist(prv);
|
|
135
|
+
should_1.default.exist(pub);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('signMessage and verifySignature', function () {
|
|
139
|
+
const message = 'test message pls ignore';
|
|
140
|
+
it('should succeed to sign a msg ', () => {
|
|
141
|
+
const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
|
|
142
|
+
const signedMessage = keyPair.signMessage(message);
|
|
143
|
+
signedMessage.should.deepEqual(testData.SIGNED_MESSAGE_SIGNATURE);
|
|
144
|
+
});
|
|
145
|
+
it('should fail to sign a msg if prv key is missing', () => {
|
|
146
|
+
const keyPair = new src_1.KeyPair({ pub: testData.pubKeys.validPubKeys[0] });
|
|
147
|
+
(0, should_1.default)(() => keyPair.signMessage(message)).throwError('Missing private key');
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('verifySignature', function () {
|
|
151
|
+
it('should succeed to verify a signature', () => {
|
|
152
|
+
const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
|
|
153
|
+
const signature = testData.SIGNED_MESSAGE_SIGNATURE;
|
|
154
|
+
const message = 'test message pls ignore';
|
|
155
|
+
keyPair.verifySignature(message, signature).should.equal(true);
|
|
156
|
+
});
|
|
157
|
+
it('should succeed to verify a signature if the msg is a UInt8Array', () => {
|
|
158
|
+
const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
|
|
159
|
+
const signature = testData.SIGNED_MESSAGE_SIGNATURE;
|
|
160
|
+
const message = new Uint8Array(Buffer.from('test message pls ignore'));
|
|
161
|
+
keyPair.verifySignature(message, signature).should.equal(true);
|
|
162
|
+
});
|
|
163
|
+
it('should fail to verify a signature if the prv key is not correct', () => {
|
|
164
|
+
const keyPair = new src_1.KeyPair({ prv: testData.extraAccounts.prv1 });
|
|
165
|
+
const signature = testData.SIGNED_MESSAGE_SIGNATURE;
|
|
166
|
+
const message = 'test message pls ignore';
|
|
167
|
+
keyPair.verifySignature(message, signature).should.equal(false);
|
|
168
|
+
});
|
|
169
|
+
it('should fail to verify a signature if the message is not correct', () => {
|
|
170
|
+
const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
|
|
171
|
+
const signature = testData.SIGNED_MESSAGE_SIGNATURE;
|
|
172
|
+
const message = 'incorrect msg';
|
|
173
|
+
keyPair.verifySignature(message, signature).should.equal(false);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUFvQztBQUNwQyxvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLCtDQUF1RTtBQUV2RSxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFNUQsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxFQUFFLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0s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ZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBpc1ZhbGlkUHVibGljS2V5LCBpc1ZhbGlkQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgnU29sIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlZmF1bHRTZWVkID0geyBzZWVkOiB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQuc2VlZCB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgY3JlYXRlIGEgdmFsaWQgS2V5UGFpcicsICgpID0+IHtcbiAgICBpdCgnZnJvbSBhbiBlbXB0eSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlQYWlyLmdldEtleXMoKS5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlQYWlyLmdldEtleXMoKS5wdWIpO1xuICAgICAga2V5UGFpci5nZXRLZXlzKCkucHJ2Py5sZW5ndGguc2hvdWxkLmJlLmJlbG93T3JFcXVhbCg4OCk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5wcnY/Lmxlbmd0aC5zaG91bGQuYmUuYWJvdmVPckVxdWFsKDc2KTtcbiAgICAgIGtleVBhaXIuZ2V0S2V5cygpLnB1Yi5sZW5ndGguc2hvdWxkLmJlLmJlbG93T3JFcXVhbCg0NCk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5wdWIubGVuZ3RoLnNob3VsZC5iZS5hYm92ZU9yRXF1YWwoMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1YiwgdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHJ2LCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTgpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cyh0cnVlKS5wdWIsIHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChrZXlQYWlyLmdldEtleXModHJ1ZSkucHJ2LCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS51aW50OEFycmF5KTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wdWJsaWNLZXkgfSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHViLCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHVibGljS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWx3YXlzIGdlbmVyYXRlIGFuZCByZWdlbmVyYXRlIHZhbGlkIGtleSBwYWlycycsICgpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7IGkrKykge1xuICAgICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgICAgaXNWYWxpZFB1YmxpY0tleShrZXlQYWlyLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGlzVmFsaWRBZGRyZXNzKGtleVBhaXIuZ2V0QWRkcmVzcygpKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICAgIHNob3VsZC5leGlzdChwcnYpO1xuXG4gICAgICAgIC8vIHZlcmlmeSBrZXkgcGFpciBjYW4gYmUgcmUtZ2VuZXJhdGVkIGZyb20gcHJpdmF0ZSBwb3J0aW9uXG4gICAgICAgIGNvbnN0IHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QcnYgPSBuZXcgS2V5UGFpcih7IHBydjogcHJ2IH0pO1xuICAgICAgICByZWdlbmVyYXRlZEtleVBhaXJGcm9tUHJ2LmdldEtleXMoKS5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIuZ2V0S2V5cygpKTtcbiAgICAgICAgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5nZXRBZGRyZXNzKCkuc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0QWRkcmVzcygpKTtcbiAgICAgICAgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIpO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5nZXRLZXlzKCkucHJ2KTtcblxuICAgICAgICAvLyB2ZXJpZnkga2V5IHBhaXIgY2FuIGJlIHJlLWdlbmVyYXRlZCBmcm9tIHB1YmxpYyBwb3J0aW9uXG4gICAgICAgIGNvbnN0IHB1YiA9IGtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICAgICAgY29uc3QgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVB1YiA9IG5ldyBLZXlQYWlyKHsgcHViOiBwdWIgfSk7XG4gICAgICAgIHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QdWIuZ2V0S2V5cygpLnB1Yi5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICAgIHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QdWIuZ2V0QWRkcmVzcygpLnNob3VsZC5lcXVhbChrZXlQYWlyLmdldEFkZHJlc3MoKSk7XG4gICAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVB1Yi5nZXRLZXlzKCkucHJ2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Zyb20gaW52YWxpZCBvcHRpb25zJywgKCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBhbiBwYXJhbXMsIHNob3VsZCB0aHJvdyBlcnJvclxuICAgICAgc2hvdWxkKCgpID0+IG5ldyBLZXlQYWlyKHsgcmFuZG9tOiAncmFuZG9tJyB9KSkudGhyb3dFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoOCkgfTsgLy8gIFNlZWQgc2hvdWxkIGJlIDUxMiBiaXRzICg2NCBieXRlcylcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc2VlZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwdWI6ICcwMUQ2M0QnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwcnY6ICc4MkEzNEUnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoZGVmYXVsdFNlZWQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHB1YmxpYyBrZXlzIGluIGJhc2U1OCBhbmQgcHJpdmF0ZSBpbiBVaW50OEFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKGRlZmF1bHRTZWVkKTtcbiAgICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cyh0cnVlKTtcbiAgICAgIHBydj8uc2hvdWxkLmRlZXBFcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS51aW50OEFycmF5KTtcbiAgICAgIHB1Yi5zaG91bGQuZXF1YWwodGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBwcml2YXRlIGFuZCBwdWJsaWMga2V5cyBiYXNlNTgnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoZGVmYXVsdFNlZWQpO1xuICAgICAgY29uc3QgeyBwcnYsIHB1YiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBwcnY/LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTgpO1xuICAgICAgcHViLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHVibGljS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGZvciBhIHJhbmRvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHB1Yik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduTWVzc2FnZSBhbmQgdmVyaWZ5U2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHNpZ24gYSBtc2cgJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTggfSk7XG4gICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0ga2V5UGFpci5zaWduTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIHNpZ25lZE1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbCh0ZXN0RGF0YS5TSUdORURfTUVTU0FHRV9TSUdOQVRVUkUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gYSBtc2cgaWYgcHJ2IGtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS5wdWJLZXlzLnZhbGlkUHViS2V5c1swXSB9KTtcbiAgICAgIHNob3VsZCgoKSA9PiBrZXlQYWlyLnNpZ25NZXNzYWdlKG1lc3NhZ2UpKS50aHJvd0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlTaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhIHNpZ25hdHVyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGVzdERhdGEuU0lHTkVEX01FU1NBR0VfU0lHTkFUVVJFO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICd0ZXN0IG1lc3NhZ2UgcGxzIGlnbm9yZSc7XG4gICAgICBrZXlQYWlyLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlLCBzaWduYXR1cmUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgYSBzaWduYXR1cmUgaWYgdGhlIG1zZyBpcyBhIFVJbnQ4QXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wcml2YXRlS2V5LmJhc2U1OCB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRlc3REYXRhLlNJR05FRF9NRVNTQUdFX1NJR05BVFVSRTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnKSk7XG4gICAgICBrZXlQYWlyLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlLCBzaWduYXR1cmUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgYSBzaWduYXR1cmUgaWYgdGhlIHBydiBrZXkgaXMgbm90IGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MSB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRlc3REYXRhLlNJR05FRF9NRVNTQUdFX1NJR05BVFVSRTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnO1xuICAgICAga2V5UGFpci52ZXJpZnlTaWduYXR1cmUobWVzc2FnZSwgc2lnbmF0dXJlKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHNpZ25hdHVyZSBpZiB0aGUgbWVzc2FnZSBpcyBub3QgY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGVzdERhdGEuU0lHTkVEX01FU1NBR0VfU0lHTkFUVVJFO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdpbmNvcnJlY3QgbXNnJztcbiAgICAgIGtleVBhaXIudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2UsIHNpZ25hdHVyZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/messageBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 sinon_1 = __importDefault(require("sinon"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const src_1 = require("../../../src");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
describe('Solana MessageBuilderFactory', function () {
|
|
11
|
+
let sandbox;
|
|
12
|
+
let factory;
|
|
13
|
+
const coinConfig = { name: 'tsol' };
|
|
14
|
+
// Common test data
|
|
15
|
+
const signatureBase64 = Buffer.from('signature1').toString('base64');
|
|
16
|
+
const testBroadcastMessage = {
|
|
17
|
+
type: sdk_core_1.MessageStandardType.SIMPLE,
|
|
18
|
+
payload: 'test message',
|
|
19
|
+
serializedSignatures: [
|
|
20
|
+
{
|
|
21
|
+
publicKey: 'pubkey1',
|
|
22
|
+
signature: signatureBase64,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
signers: ['signer1'],
|
|
26
|
+
metadata: {},
|
|
27
|
+
};
|
|
28
|
+
const unsupportedMessageTypes = [
|
|
29
|
+
sdk_core_1.MessageStandardType.UNKNOWN,
|
|
30
|
+
sdk_core_1.MessageStandardType.EIP191,
|
|
31
|
+
sdk_core_1.MessageStandardType.CIP8,
|
|
32
|
+
'UNSUPPORTED',
|
|
33
|
+
];
|
|
34
|
+
// Helper functions
|
|
35
|
+
const assertSimpleMessageBuilder = (builder) => {
|
|
36
|
+
should_1.default.exist(builder);
|
|
37
|
+
builder.should.be.instanceof(sdk_core_1.SimpleMessageBuilder);
|
|
38
|
+
};
|
|
39
|
+
const assertBuilderMessageProperties = async (builder, expectedPayload) => {
|
|
40
|
+
const message = await builder.build();
|
|
41
|
+
message.getType().should.equal(sdk_core_1.MessageStandardType.SIMPLE);
|
|
42
|
+
message.getPayload().should.equal(expectedPayload);
|
|
43
|
+
message.getSignatures().should.have.length(1);
|
|
44
|
+
message.getSigners().should.have.length(1);
|
|
45
|
+
message.getSigners()[0].should.equal('signer1');
|
|
46
|
+
message.getMetadata().should.be.an.Object();
|
|
47
|
+
return message;
|
|
48
|
+
};
|
|
49
|
+
const assertSignatureProperties = (message) => {
|
|
50
|
+
const signature = message.getSignatures()[0];
|
|
51
|
+
signature.should.have.properties(['publicKey', 'signature']);
|
|
52
|
+
signature.publicKey.pub.should.equal('pubkey1');
|
|
53
|
+
signature.signature.toString('base64').should.equal(signatureBase64);
|
|
54
|
+
};
|
|
55
|
+
const assertBroadcastFormatProperties = async (message, expectedSerializedSignatures) => {
|
|
56
|
+
const rebroadcastMessage = await message.toBroadcastFormat();
|
|
57
|
+
rebroadcastMessage.should.have.properties(['type', 'payload', 'serializedSignatures', 'signers', 'metadata']);
|
|
58
|
+
rebroadcastMessage.type.should.equal(sdk_core_1.MessageStandardType.SIMPLE);
|
|
59
|
+
rebroadcastMessage.payload.should.equal('test message');
|
|
60
|
+
rebroadcastMessage.serializedSignatures?.should.deepEqual(expectedSerializedSignatures);
|
|
61
|
+
rebroadcastMessage.signers?.should.deepEqual(['signer1']);
|
|
62
|
+
};
|
|
63
|
+
beforeEach(function () {
|
|
64
|
+
sandbox = sinon_1.default.createSandbox();
|
|
65
|
+
factory = new src_1.MessageBuilderFactory(coinConfig);
|
|
66
|
+
});
|
|
67
|
+
afterEach(function () {
|
|
68
|
+
sandbox.restore();
|
|
69
|
+
});
|
|
70
|
+
describe('getMessageBuilder', function () {
|
|
71
|
+
it('should return SimpleMessageBuilder for SIMPLE type', function () {
|
|
72
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
73
|
+
assertSimpleMessageBuilder(builder);
|
|
74
|
+
});
|
|
75
|
+
it('should throw error for unsupported message type', function () {
|
|
76
|
+
unsupportedMessageTypes.forEach((type) => {
|
|
77
|
+
should_1.default.throws(() => factory.getMessageBuilder(type), new RegExp(`Invalid message standard ${type}`));
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('fromBroadcastFormat', function () {
|
|
82
|
+
it('should get the correct builder type from broadcastable message', async function () {
|
|
83
|
+
const builder = factory.fromBroadcastFormat(testBroadcastMessage);
|
|
84
|
+
assertSimpleMessageBuilder(builder);
|
|
85
|
+
const message = await assertBuilderMessageProperties(builder, 'test message');
|
|
86
|
+
assertSignatureProperties(message);
|
|
87
|
+
await assertBroadcastFormatProperties(message, testBroadcastMessage.serializedSignatures);
|
|
88
|
+
});
|
|
89
|
+
it('should throw for unsupported message type in broadcastable message', function () {
|
|
90
|
+
const broadcastMessage = {
|
|
91
|
+
...testBroadcastMessage,
|
|
92
|
+
type: sdk_core_1.MessageStandardType.EIP191,
|
|
93
|
+
};
|
|
94
|
+
should_1.default.throws(() => factory.fromBroadcastFormat(broadcastMessage), new RegExp(`Invalid message standard ${sdk_core_1.MessageStandardType.EIP191}`));
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('fromBroadcastString', function () {
|
|
98
|
+
it('should parse broadcastable string and return correct builder type', async function () {
|
|
99
|
+
const broadcastString = JSON.stringify(testBroadcastMessage);
|
|
100
|
+
const broadcastHex = Buffer.from(broadcastString).toString('hex');
|
|
101
|
+
const builder = factory.fromBroadcastString(broadcastHex);
|
|
102
|
+
assertSimpleMessageBuilder(builder);
|
|
103
|
+
const message = await assertBuilderMessageProperties(builder, 'test message');
|
|
104
|
+
assertSignatureProperties(message);
|
|
105
|
+
await assertBroadcastFormatProperties(message, testBroadcastMessage.serializedSignatures);
|
|
106
|
+
});
|
|
107
|
+
it('should throw for invalid JSON string', function () {
|
|
108
|
+
try {
|
|
109
|
+
factory.fromBroadcastString('abcdefg'); // Invalid hex string
|
|
110
|
+
fail('Expected error not thrown');
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
error.should.be.instanceof(SyntaxError);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLGtEQUEwQjtBQUMxQixvREFBNEI7QUFDNUIsc0NBQXFEO0FBQ3JELG1EQU84QjtBQUU5QixRQUFRLENBQUMsOEJBQThCLEVBQUU7SUFDdkMsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksT0FBOEIsQ0FBQztJQUNuQyxNQUFNLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQWMsQ0FBQztJQUVoRCxtQkFBbUI7SUFDbkIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckUsTUFBTSxvQkFBb0IsR0FBeUI7UUFDakQsSUFBSSxFQUFFLDhCQUFtQixDQUFDLE1BQU07UUFDaEMsT0FBTyxFQUFFLGNBQWM7UUFDdkIsb0JBQW9CLEVBQUU7WUFDcEI7Z0JBQ0UsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFNBQVMsRUFBRSxlQUFlO2FBQzNCO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDcEIsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FBRztRQUM5Qiw4QkFBbUIsQ0FBQyxPQUFPO1FBQzNCLDhCQUFtQixDQUFDLE1BQU07UUFDMUIsOEJBQW1CLENBQUMsSUFBSTtRQUN4QixhQUFvQztLQUNyQyxDQUFDO0lBRUYsbUJBQW1CO0lBQ25CLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDOUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLCtCQUFvQixDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO0lBRUYsTUFBTSw4QkFBOEIsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxlQUF1QixFQUFFLEVBQUU7UUFDakcsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLFVBQVUsRUFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsV0FBVyxFQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQWlCLEVBQUUsRUFBRTtRQUN0RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztJQUVGLE1BQU0sK0JBQStCLEdBQUcsS0FBSyxFQUMzQyxPQUFpQixFQUNqQiw0QkFBb0QsRUFDcEQsRUFBRTtRQUNGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3RCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEQsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3hGLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUM7SUFFRixVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsZUFBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxJQUFJLDJCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEUsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztZQUN4RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsRSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM5RSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxNQUFNLCtCQUErQixDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFO1lBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLEdBQUcsb0JBQW9CO2dCQUN2QixJQUFJLEVBQUUsOEJBQW1CLENBQUMsTUFBTTthQUNqQyxDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEVBQ25ELElBQUksTUFBTSxDQUFDLDRCQUE0Qiw4QkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTFELDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sOEJBQThCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzlFLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLE1BQU0sK0JBQStCLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7WUFDekMsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtnQkFDN0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQge1xuICBCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgSU1lc3NhZ2UsXG4gIElNZXNzYWdlQnVpbGRlcixcbiAgTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgU2VyaWFsaXplZFNpZ25hdHVyZSxcbiAgU2ltcGxlTWVzc2FnZUJ1aWxkZXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ1NvbGFuYSBNZXNzYWdlQnVpbGRlckZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBmYWN0b3J5OiBNZXNzYWdlQnVpbGRlckZhY3Rvcnk7XG4gIGNvbnN0IGNvaW5Db25maWcgPSB7IG5hbWU6ICd0c29sJyB9IGFzIEJhc2VDb2luO1xuXG4gIC8vIENvbW1vbiB0ZXN0IGRhdGFcbiAgY29uc3Qgc2lnbmF0dXJlQmFzZTY0ID0gQnVmZmVyLmZyb20oJ3NpZ25hdHVyZTEnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIGNvbnN0IHRlc3RCcm9hZGNhc3RNZXNzYWdlOiBCcm9hZGNhc3RhYmxlTWVzc2FnZSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSxcbiAgICBwYXlsb2FkOiAndGVzdCBtZXNzYWdlJyxcbiAgICBzZXJpYWxpemVkU2lnbmF0dXJlczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNLZXk6ICdwdWJrZXkxJyxcbiAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVCYXNlNjQsXG4gICAgICB9LFxuICAgIF0sXG4gICAgc2lnbmVyczogWydzaWduZXIxJ10sXG4gICAgbWV0YWRhdGE6IHt9LFxuICB9O1xuXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVzc2FnZVR5cGVzID0gW1xuICAgIE1lc3NhZ2VTdGFuZGFyZFR5cGUuVU5LTk9XTixcbiAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkNJUDgsXG4gICAgJ1VOU1VQUE9SVEVEJyBhcyBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICBdO1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbnNcbiAgY29uc3QgYXNzZXJ0U2ltcGxlTWVzc2FnZUJ1aWxkZXIgPSAoYnVpbGRlcjogSU1lc3NhZ2VCdWlsZGVyKSA9PiB7XG4gICAgc2hvdWxkLmV4aXN0KGJ1aWxkZXIpO1xuICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2ltcGxlTWVzc2FnZUJ1aWxkZXIpO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydEJ1aWxkZXJNZXNzYWdlUHJvcGVydGllcyA9IGFzeW5jIChidWlsZGVyOiBJTWVzc2FnZUJ1aWxkZXIsIGV4cGVjdGVkUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBtZXNzYWdlLmdldFR5cGUoKS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgIG1lc3NhZ2UuZ2V0UGF5bG9hZCgpIS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgbWVzc2FnZS5nZXRTaWduZXJzKCkuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgIG1lc3NhZ2UuZ2V0U2lnbmVycygpWzBdLnNob3VsZC5lcXVhbCgnc2lnbmVyMScpO1xuICAgIG1lc3NhZ2UuZ2V0TWV0YWRhdGEoKSEuc2hvdWxkLmJlLmFuLk9iamVjdCgpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMgPSAobWVzc2FnZTogSU1lc3NhZ2UpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKVswXTtcbiAgICBzaWduYXR1cmUuc2hvdWxkLmhhdmUucHJvcGVydGllcyhbJ3B1YmxpY0tleScsICdzaWduYXR1cmUnXSk7XG4gICAgc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIuc2hvdWxkLmVxdWFsKCdwdWJrZXkxJyk7XG4gICAgc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnYmFzZTY0Jykuc2hvdWxkLmVxdWFsKHNpZ25hdHVyZUJhc2U2NCk7XG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0QnJvYWRjYXN0Rm9ybWF0UHJvcGVydGllcyA9IGFzeW5jIChcbiAgICBtZXNzYWdlOiBJTWVzc2FnZSxcbiAgICBleHBlY3RlZFNlcmlhbGl6ZWRTaWduYXR1cmVzPzogU2VyaWFsaXplZFNpZ25hdHVyZVtdXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlYnJvYWRjYXN0TWVzc2FnZSA9IGF3YWl0IG1lc3NhZ2UudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZWJyb2FkY2FzdE1lc3NhZ2Uuc2hvdWxkLmhhdmUucHJvcGVydGllcyhbJ3R5cGUnLCAncGF5bG9hZCcsICdzZXJpYWxpemVkU2lnbmF0dXJlcycsICdzaWduZXJzJywgJ21ldGFkYXRhJ10pO1xuICAgIHJlYnJvYWRjYXN0TWVzc2FnZS50eXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgcmVicm9hZGNhc3RNZXNzYWdlLnBheWxvYWQuc2hvdWxkLmVxdWFsKCd0ZXN0IG1lc3NhZ2UnKTtcbiAgICByZWJyb2FkY2FzdE1lc3NhZ2Uuc2VyaWFsaXplZFNpZ25hdHVyZXM/LnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRTZXJpYWxpemVkU2lnbmF0dXJlcyk7XG4gICAgcmVicm9hZGNhc3RNZXNzYWdlLnNpZ25lcnM/LnNob3VsZC5kZWVwRXF1YWwoWydzaWduZXIxJ10pO1xuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgZmFjdG9yeSA9IG5ldyBNZXNzYWdlQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRNZXNzYWdlQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBTaW1wbGVNZXNzYWdlQnVpbGRlciBmb3IgU0lNUExFIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBhc3NlcnRTaW1wbGVNZXNzYWdlQnVpbGRlcihidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3VwcG9ydGVkTWVzc2FnZVR5cGVzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKHR5cGUpLCBuZXcgUmVnRXhwKGBJbnZhbGlkIG1lc3NhZ2Ugc3RhbmRhcmQgJHt0eXBlfWApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdldCB0aGUgY29ycmVjdCBidWlsZGVyIHR5cGUgZnJvbSBicm9hZGNhc3RhYmxlIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tQnJvYWRjYXN0Rm9ybWF0KHRlc3RCcm9hZGNhc3RNZXNzYWdlKTtcbiAgICAgIGFzc2VydFNpbXBsZU1lc3NhZ2VCdWlsZGVyKGJ1aWxkZXIpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYXNzZXJ0QnVpbGRlck1lc3NhZ2VQcm9wZXJ0aWVzKGJ1aWxkZXIsICd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMobWVzc2FnZSk7XG4gICAgICBhd2FpdCBhc3NlcnRCcm9hZGNhc3RGb3JtYXRQcm9wZXJ0aWVzKG1lc3NhZ2UsIHRlc3RCcm9hZGNhc3RNZXNzYWdlLnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZSBpbiBicm9hZGNhc3RhYmxlIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RNZXNzYWdlID0ge1xuICAgICAgICAuLi50ZXN0QnJvYWRjYXN0TWVzc2FnZSxcbiAgICAgICAgdHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEsXG4gICAgICB9O1xuXG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBmYWN0b3J5LmZyb21Ccm9hZGNhc3RGb3JtYXQoYnJvYWRjYXN0TWVzc2FnZSksXG4gICAgICAgIG5ldyBSZWdFeHAoYEludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCAke01lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxfWApXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGJyb2FkY2FzdGFibGUgc3RyaW5nIGFuZCByZXR1cm4gY29ycmVjdCBidWlsZGVyIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0ZXN0QnJvYWRjYXN0TWVzc2FnZSk7XG4gICAgICBjb25zdCBicm9hZGNhc3RIZXggPSBCdWZmZXIuZnJvbShicm9hZGNhc3RTdHJpbmcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoYnJvYWRjYXN0SGV4KTtcblxuICAgICAgYXNzZXJ0U2ltcGxlTWVzc2FnZUJ1aWxkZXIoYnVpbGRlcik7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYXNzZXJ0QnVpbGRlck1lc3NhZ2VQcm9wZXJ0aWVzKGJ1aWxkZXIsICd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMobWVzc2FnZSk7XG4gICAgICBhd2FpdCBhc3NlcnRCcm9hZGNhc3RGb3JtYXRQcm9wZXJ0aWVzKG1lc3NhZ2UsIHRlc3RCcm9hZGNhc3RNZXNzYWdlLnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgSlNPTiBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoJ2FiY2RlZmcnKTsgLy8gSW52YWxpZCBoZXggc3RyaW5nXG4gICAgICAgIGZhaWwoJ0V4cGVjdGVkIGVycm9yIG5vdCB0aHJvd24nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9yLnNob3VsZC5iZS5pbnN0YW5jZW9mKFN5bnRheEVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleMessageBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/simpleMessageBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
42
|
+
const bs58 = __importStar(require("bs58"));
|
|
43
|
+
const src_1 = require("../../../src");
|
|
44
|
+
describe('Solana SimpleMessageBuilder', function () {
|
|
45
|
+
let sandbox;
|
|
46
|
+
let factory;
|
|
47
|
+
const coinConfig = { name: 'tsol' };
|
|
48
|
+
beforeEach(function () {
|
|
49
|
+
sandbox = sinon_1.default.createSandbox();
|
|
50
|
+
factory = new src_1.MessageBuilderFactory(coinConfig);
|
|
51
|
+
});
|
|
52
|
+
afterEach(function () {
|
|
53
|
+
sandbox.restore();
|
|
54
|
+
});
|
|
55
|
+
describe('build', function () {
|
|
56
|
+
it('should build a SimpleMessage with correct payload', async function () {
|
|
57
|
+
const payload = 'Hello, Solana!';
|
|
58
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
59
|
+
builder.setPayload(payload);
|
|
60
|
+
const message = await builder.build();
|
|
61
|
+
should_1.default.exist(message);
|
|
62
|
+
message.should.be.instanceof(sdk_core_1.SimpleMessage);
|
|
63
|
+
should_1.default.equal(message.getType(), sdk_core_1.MessageStandardType.SIMPLE);
|
|
64
|
+
should_1.default.equal(message.getPayload(), payload);
|
|
65
|
+
});
|
|
66
|
+
it('should build a SimpleMessage with signatures', async function () {
|
|
67
|
+
const payload = 'Sign this message';
|
|
68
|
+
const signatures = [
|
|
69
|
+
{
|
|
70
|
+
publicKey: { pub: 'solPubKey1' },
|
|
71
|
+
signature: Buffer.from('solSignature1'),
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
75
|
+
builder.setPayload(payload).setSignatures(signatures);
|
|
76
|
+
const message = await builder.build();
|
|
77
|
+
should_1.default.exist(message);
|
|
78
|
+
should_1.default.equal(message.getPayload(), payload);
|
|
79
|
+
should_1.default.deepEqual(message.getSignatures(), signatures);
|
|
80
|
+
});
|
|
81
|
+
it('should build a SimpleMessage with signers', async function () {
|
|
82
|
+
const payload = 'Message with signers';
|
|
83
|
+
const signers = ['solSigner1', 'solSigner2'];
|
|
84
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
85
|
+
builder.setPayload(payload).setSigners(signers);
|
|
86
|
+
const message = await builder.build();
|
|
87
|
+
should_1.default.exist(message);
|
|
88
|
+
should_1.default.equal(message.getPayload(), payload);
|
|
89
|
+
should_1.default.deepEqual(message.getSigners(), signers);
|
|
90
|
+
});
|
|
91
|
+
it('should build a SimpleMessage with metadata', async function () {
|
|
92
|
+
const payload = 'Message with metadata';
|
|
93
|
+
const metadata = { solNetwork: 'testnet', timestamp: 1625097600 };
|
|
94
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
95
|
+
builder.setPayload(payload).setMetadata(metadata);
|
|
96
|
+
const message = await builder.build();
|
|
97
|
+
should_1.default.exist(message);
|
|
98
|
+
should_1.default.equal(message.getPayload(), payload);
|
|
99
|
+
const messageMetadata = message.getMetadata();
|
|
100
|
+
should_1.default.equal(messageMetadata?.solNetwork, metadata.solNetwork);
|
|
101
|
+
should_1.default.equal(messageMetadata?.timestamp, metadata.timestamp);
|
|
102
|
+
});
|
|
103
|
+
it('should throw error when building without payload', async function () {
|
|
104
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
105
|
+
await (0, should_1.default)(builder.build()).be.rejectedWith('Message payload must be set before building the message');
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('getSignablePayload', function () {
|
|
109
|
+
it('should return Buffer with correct payload', async function () {
|
|
110
|
+
const payload = 'Signable Solana message';
|
|
111
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
112
|
+
builder.setPayload(payload);
|
|
113
|
+
const message = await builder.build();
|
|
114
|
+
const signablePayload = await message.getSignablePayload();
|
|
115
|
+
should_1.default.exist(signablePayload);
|
|
116
|
+
Buffer.isBuffer(signablePayload).should.be.true();
|
|
117
|
+
signablePayload.toString().should.equal(payload);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('toBroadcastFormat', function () {
|
|
121
|
+
it('should convert SimpleMessage to broadcastable format', async function () {
|
|
122
|
+
const payload = 'Broadcast me';
|
|
123
|
+
const signers = ['solAddress1'];
|
|
124
|
+
const signatures = [
|
|
125
|
+
{
|
|
126
|
+
publicKey: { pub: 'solPubKey1' },
|
|
127
|
+
signature: Buffer.from('solSignature1'),
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
131
|
+
builder.setPayload(payload).setSigners(signers).setSignatures(signatures);
|
|
132
|
+
const message = await builder.build();
|
|
133
|
+
const broadcastFormat = await message.toBroadcastFormat();
|
|
134
|
+
should_1.default.exist(broadcastFormat);
|
|
135
|
+
should_1.default.equal(broadcastFormat.type, sdk_core_1.MessageStandardType.SIMPLE);
|
|
136
|
+
should_1.default.equal(broadcastFormat.payload, payload);
|
|
137
|
+
should_1.default.deepEqual(broadcastFormat.signers, signers);
|
|
138
|
+
should_1.default.exist(broadcastFormat.serializedSignatures);
|
|
139
|
+
const serializedSignatures = broadcastFormat.serializedSignatures;
|
|
140
|
+
should_1.default.equal(serializedSignatures?.length, 1);
|
|
141
|
+
should_1.default.equal(serializedSignatures?.[0].publicKey, 'solPubKey1');
|
|
142
|
+
should_1.default.equal(serializedSignatures?.[0].signature, Buffer.from('solSignature1').toString('base64'));
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('fromBroadcastFormat', function () {
|
|
146
|
+
it('should rebuild message from broadcastable format', async function () {
|
|
147
|
+
const broadcastMessage = {
|
|
148
|
+
type: sdk_core_1.MessageStandardType.SIMPLE,
|
|
149
|
+
payload: 'Solana test message',
|
|
150
|
+
serializedSignatures: [
|
|
151
|
+
{
|
|
152
|
+
publicKey: 'solPubKey1',
|
|
153
|
+
signature: Buffer.from('solSignature1').toString('base64'),
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
signers: ['solSigner1'],
|
|
157
|
+
metadata: { network: 'testnet', encoding: 'utf8' },
|
|
158
|
+
};
|
|
159
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
|
|
160
|
+
const message = await builder.fromBroadcastFormat(broadcastMessage);
|
|
161
|
+
should_1.default.exist(message);
|
|
162
|
+
should_1.default.equal(message.getType(), sdk_core_1.MessageStandardType.SIMPLE);
|
|
163
|
+
should_1.default.equal(message.getPayload(), broadcastMessage.payload);
|
|
164
|
+
should_1.default.deepEqual(message.getSigners(), broadcastMessage.signers);
|
|
165
|
+
should_1.default.exist(message.getSignatures());
|
|
166
|
+
should_1.default.equal(message.getSignatures().length, 1);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('fromBroadcastString', function () {
|
|
170
|
+
it('should parse broadcastable string and return correct builder type', async function () {
|
|
171
|
+
const broadcastHex = '7b2274797065223a2253494d504c45222c227061796c6f6164223a2253544152203438373934363720746f2061646472317178763965397a70353578763336307767686c3830366430327933353839397a6b6b7132726874667876377836777963746a3279726667766572353775333037776c35363735667267773232396476713538776b6a76657564357571666e6d74657a2033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c2273657269616c697a65645369676e617475726573223a5b7b227075626c69634b6579223a22475a6d6a57464a543964556e70574e714a61626e524d7134747779714372396b584663337a4d4765506d6139222c227369676e6174757265223a22675235434446464f5242522f6756416b4b624a4635534d6f36495063674a376a6976694f2f7631535a7056514b6a67566e6f414f45695855614472656d6c4735516743775942725a6132486a547739386c65396e44673d3d227d5d2c227369676e657273223a5b22475a6d6a57464a543964556e70574e714a61626e524d7134747779714372396b584663337a4d4765506d6139225d2c226d65746164617461223a7b22656e636f64696e67223a2275746638227d2c227369676e61626c655061796c6f6164223a2255315242556941304f4463354e445933494852764947466b5a484978635868324f575535656e41314e5868324d7a59776432646f624467774e6d51774d6e6b7a4e5467354f58707261334579636d68305a6e68324e33673264336c6a64476f7965584a6d5a335a6c636a553364544d774e3364734e5459334e575a795a3363794d6a6c6b646e45314f486472616e5a6c645751316458466d626d31305a586f674d7a46684e6d4a68596a557759546730596a67304d7a6c685a474e6d596a63344e6d4a694d6a41794d4759324f4441335a545a6c4f475a6b595459794f5749304d6a51784d54426d597a6469596a466a4e6d493459673d3d227d';
|
|
172
|
+
const coinConfig = { name: 'sol' };
|
|
173
|
+
const factory = new src_1.MessageBuilderFactory(coinConfig);
|
|
174
|
+
const builder = factory.fromBroadcastString(broadcastHex);
|
|
175
|
+
const message = await builder.build();
|
|
176
|
+
const payload = message.getPayload();
|
|
177
|
+
const payloadParts = payload.split(' ');
|
|
178
|
+
const address = message.getSigners()[0];
|
|
179
|
+
address.should.equal('GZmjWFJT9dUnpWNqJabnRMq4twyqCr9kXFc3zMGePma9');
|
|
180
|
+
const destinationAddress = payloadParts[3];
|
|
181
|
+
destinationAddress.should.equal('addr1qxv9e9zp55xv360wghl806d02y35899zkkq2rhtfxv7x6wyctj2yrfgver57u307wl5675frgw229dvq58wkjveud5uqfnmtez');
|
|
182
|
+
const amount = Number(payloadParts[1]);
|
|
183
|
+
amount.should.equal(4879467);
|
|
184
|
+
const signatureBuff = message.getSignatures()[0].signature;
|
|
185
|
+
const signatureBase58 = bs58.encode(signatureBuff);
|
|
186
|
+
signatureBase58.should.equal('3aj7xDGJrFAbNF6GLrWTHpy8UW94i6xFADJ1KdomDLaCDjUyz8Gj5vPc5mZLduFhRAUCU4BUcnBWu5te1DbMXCFf');
|
|
187
|
+
const signatureHex = signatureBuff.toString('hex');
|
|
188
|
+
signatureHex.should.equal('811e420c514e44147f81502429b245e52328e883dc809ee38af88efefd526695502a38159e800e1225d4683ade9a51b94200b0601ad96b61e34f0f7c95ef670e');
|
|
189
|
+
const publicKeyHex = message.getSignatures()[0].publicKey.pub;
|
|
190
|
+
publicKeyHex.should.equal('GZmjWFJT9dUnpWNqJabnRMq4twyqCr9kXFc3zMGePma9');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlTWVzc2FnZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbWVzc2FnZXMvc2ltcGxlTWVzc2FnZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLG1EQUFnRztBQUNoRywyQ0FBNkI7QUFDN0Isc0NBQXFEO0FBRXJELFFBQVEsQ0FBQyw2QkFBNkIsRUFBRTtJQUN0QyxJQUFJLE9BQTJCLENBQUM7SUFDaEMsSUFBSSxPQUE4QixDQUFDO0lBQ25DLE1BQU0sVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBYyxDQUFDO0lBRWhELFVBQVUsQ0FBQztRQUNULE9BQU8sR0FBRyxlQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEMsT0FBTyxHQUFHLElBQUksMkJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUM7UUFDUixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ2hCLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLO1lBQzNELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFD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QUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzdCLHlHQUF5RyxDQUMxRyxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTdCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDMUIsMEZBQTBGLENBQzNGLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2QixrSUFBa0ksQ0FDbkksQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQzlELFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCcm9hZGNhc3RhYmxlTWVzc2FnZSwgTWVzc2FnZVN0YW5kYXJkVHlwZSwgU2ltcGxlTWVzc2FnZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU29sYW5hIFNpbXBsZU1lc3NhZ2VCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICBsZXQgZmFjdG9yeTogTWVzc2FnZUJ1aWxkZXJGYWN0b3J5O1xuICBjb25zdCBjb2luQ29uZmlnID0geyBuYW1lOiAndHNvbCcgfSBhcyBCYXNlQ29pbjtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGZhY3RvcnkgPSBuZXcgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIFNpbXBsZU1lc3NhZ2Ugd2l0aCBjb3JyZWN0IHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ0hlbGxvLCBTb2xhbmEhJztcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdChtZXNzYWdlKTtcbiAgICAgIG1lc3NhZ2Uuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2ltcGxlTWVzc2FnZSk7XG4gICAgICBzaG91bGQuZXF1YWwobWVzc2FnZS5nZXRUeXBlKCksIE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFBheWxvYWQoKSwgcGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgU2ltcGxlTWVzc2FnZSB3aXRoIHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ1NpZ24gdGhpcyBtZXNzYWdlJztcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJsaWNLZXk6IHsgcHViOiAnc29sUHViS2V5MScgfSxcbiAgICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKCdzb2xTaWduYXR1cmUxJyksXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQocGF5bG9hZCkuc2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdChtZXNzYWdlKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFBheWxvYWQoKSwgcGF5bG9hZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0U2lnbmF0dXJlcygpLCBzaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBTaW1wbGVNZXNzYWdlIHdpdGggc2lnbmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnTWVzc2FnZSB3aXRoIHNpZ25lcnMnO1xuICAgICAgY29uc3Qgc2lnbmVycyA9IFsnc29sU2lnbmVyMScsICdzb2xTaWduZXIyJ107XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKS5zZXRTaWduZXJzKHNpZ25lcnMpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0UGF5bG9hZCgpLCBwYXlsb2FkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobWVzc2FnZS5nZXRTaWduZXJzKCksIHNpZ25lcnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIFNpbXBsZU1lc3NhZ2Ugd2l0aCBtZXRhZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnTWVzc2FnZSB3aXRoIG1ldGFkYXRhJztcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0geyBzb2xOZXR3b3JrOiAndGVzdG5ldCcsIHRpbWVzdGFtcDogMTYyNTA5NzYwMCB9O1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQocGF5bG9hZCkuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0UGF5bG9hZCgpLCBwYXlsb2FkKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IG1lc3NhZ2UuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlTWV0YWRhdGE/LnNvbE5ldHdvcmssIG1ldGFkYXRhLnNvbE5ldHdvcmspO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2VNZXRhZGF0YT8udGltZXN0YW1wLCBtZXRhZGF0YS50aW1lc3RhbXApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGJ1aWxkaW5nIHdpdGhvdXQgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGF3YWl0IHNob3VsZChidWlsZGVyLmJ1aWxkKCkpLmJlLnJlamVjdGVkV2l0aCgnTWVzc2FnZSBwYXlsb2FkIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgbWVzc2FnZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIEJ1ZmZlciB3aXRoIGNvcnJlY3QgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnU2lnbmFibGUgU29sYW5hIG1lc3NhZ2UnO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgICAgYnVpbGRlci5zZXRQYXlsb2FkKHBheWxvYWQpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHNpZ25hYmxlUGF5bG9hZCk7XG4gICAgICBCdWZmZXIuaXNCdWZmZXIoc2lnbmFibGVQYXlsb2FkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndG9Ccm9hZGNhc3RGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFNpbXBsZU1lc3NhZ2UgdG8gYnJvYWRjYXN0YWJsZSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ0Jyb2FkY2FzdCBtZSc7XG4gICAgICBjb25zdCBzaWduZXJzID0gWydzb2xBZGRyZXNzMSddO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHB1YmxpY0tleTogeyBwdWI6ICdzb2xQdWJLZXkxJyB9LFxuICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oJ3NvbFNpZ25hdHVyZTEnKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKS5zZXRTaWduZXJzKHNpZ25lcnMpLnNldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBicm9hZGNhc3RGb3JtYXQgPSBhd2FpdCBtZXNzYWdlLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChicm9hZGNhc3RGb3JtYXQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJyb2FkY2FzdEZvcm1hdC50eXBlLCBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBzaG91bGQuZXF1YWwoYnJvYWRjYXN0Rm9ybWF0LnBheWxvYWQsIHBheWxvYWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChicm9hZGNhc3RGb3JtYXQuc2lnbmVycywgc2lnbmVycyk7XG4gICAgICBzaG91bGQuZXhpc3QoYnJvYWRjYXN0Rm9ybWF0LnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTaWduYXR1cmVzID0gYnJvYWRjYXN0Rm9ybWF0LnNlcmlhbGl6ZWRTaWduYXR1cmVzO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5bMF0ucHVibGljS2V5LCAnc29sUHViS2V5MScpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5bMF0uc2lnbmF0dXJlLCBCdWZmZXIuZnJvbSgnc29sU2lnbmF0dXJlMScpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tQnJvYWRjYXN0Rm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVidWlsZCBtZXNzYWdlIGZyb20gYnJvYWRjYXN0YWJsZSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RNZXNzYWdlOiBCcm9hZGNhc3RhYmxlTWVzc2FnZSA9IHtcbiAgICAgICAgdHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUsXG4gICAgICAgIHBheWxvYWQ6ICdTb2xhbmEgdGVzdCBtZXNzYWdlJyxcbiAgICAgICAgc2VyaWFsaXplZFNpZ25hdHVyZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6ICdzb2xQdWJLZXkxJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oJ3NvbFNpZ25hdHVyZTEnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2lnbmVyczogWydzb2xTaWduZXIxJ10sXG4gICAgICAgIG1ldGFkYXRhOiB7IG5ldHdvcms6ICd0ZXN0bmV0JywgZW5jb2Rpbmc6ICd1dGY4JyB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuZnJvbUJyb2FkY2FzdEZvcm1hdChicm9hZGNhc3RNZXNzYWdlKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0VHlwZSgpLCBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBzaG91bGQuZXF1YWwobWVzc2FnZS5nZXRQYXlsb2FkKCksIGJyb2FkY2FzdE1lc3NhZ2UucGF5bG9hZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0U2lnbmVycygpLCBicm9hZGNhc3RNZXNzYWdlLnNpZ25lcnMpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UuZ2V0U2lnbmF0dXJlcygpKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFNpZ25hdHVyZXMoKS5sZW5ndGgsIDEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGJyb2FkY2FzdGFibGUgc3RyaW5nIGFuZCByZXR1cm4gY29ycmVjdCBidWlsZGVyIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RIZXggPVxuICAgICAgICAnN2IyMjc0Nzk3MDY1MjIzYTIyNTM0OTRkNTA0YzQ1MjIyYzIyNzA2MTc5NmM2ZjYxNjQyMjNhMjI1MzU0NDE1MjIwMzQzODM3MzkzNDM2MzcyMDc0NmYyMDYxNjQ2NDcyMzE3MTc4NzYzOTY1Mzk3YTcwMzUzNTc4NzYzMzM2MzA3NzY3Njg2YzM4MzAzNjY0MzAzMjc5MzMzNTM4MzkzOTdhNmI2YjcxMzI3MjY4NzQ2Njc4NzYzNzc4MzY3Nzc5NjM3NDZhMzI3OTcyNjY2Nzc2NjU3MjM1Mzc3NTMzMzAzNzc3NmMzNTM2MzczNTY2NzI2Nzc3MzIzMjM5NjQ3NjcxMzUzODc3NmI2YTc2NjU3NTY0MzU3NTcxNjY2ZTZkNzQ2NTdhMjAzMzMxNjEzNjYyNjE2MjM1MzA2MTM4MzQ2MjM4MzQzMzM5NjE2NDYzNjY2MjM3MzgzNjYyNjIzMjMwMzIzMDY2MzYzODMwMzc2NTM2NjUzODY2NjQ2MTM2MzIzOTYyMzQzMjM0MzEzMTMwNjY2MzM3NjI2MjMxNjMzNjYyMzg2MjIyMmMyMjczNjU3MjY5NjE2YzY5N2E2NTY0NTM2OTY3NmU2MTc0NzU3MjY1NzMyMjNhNWI3YjIyNzA3NTYyNmM2OTYzNGI2NTc5MjIzYTIyNDc1YTZkNmE1NzQ2NGE1NDM5NjQ1NTZlNzA1NzRlNzE0YTYxNjI2ZTUyNGQ3MTM0NzQ3Nzc5NzE0MzcyMzk2YjU4NDY2MzMzN2E0ZDQ3NjU1MDZkNjEzOTIyMmMyMjczNjk2NzZlNjE3NDc1NzI2NTIyM2EyMjY3NTIzNTQzNDQ0NjQ2NGY1MjQyNTIyZjY3NTY0MTZiNGI2MjRhNDYzNTUzNGQ2ZjM2NDk1MDYzNjc0YTM3NmE2OTc2Njk0ZjJmNzYzMTUzNWE3MDU2NTE0YjZhNjc1NjZlNmY0MTRmNDU2OTU4NTU2MTQ0NzI2NTZkNmM0NzM1NTE2NzQzNzc1OTQyNzI1YTYxMzI0ODZhNTQ3NzM5Mzg2YzY1Mzk2ZTQ0NjczZDNkMjI3ZDVkMmMyMjczNjk2NzZlNjU3MjczMjIzYTViMjI0NzVhNmQ2YTU3NDY0YTU0Mzk2NDU1NmU3MDU3NGU3MTRhNjE2MjZlNTI0ZDcxMzQ3NDc3Nzk3MTQzNzIzOTZiNTg0NjYzMzM3YTRkNDc2NTUwNmQ2MTM5MjI1ZDJjMjI2ZDY1NzQ2MTY0NjE3NDYxMjIzYTdiMjI2NTZlNjM2ZjY0Njk2ZTY3MjIzYTIyNzU3NDY2MzgyMjdkMmMyMjczNjk2NzZlNjE2MjZjNjU1MDYxNzk2YzZmNjE2NDIyM2EyMjU1MzE1MjQyNTU2OTQxMzA0ZjQ0NjMzNTRlNDQ1OTMzNDk0ODUyNzY0OTQ3NDY2YjVhNDg0OTc4NjM1ODY4MzI0ZjU3NTUzNTY1NmU0MTMxNGU1ODY4MzI0ZDdhNTk3NzY0MzI2NDZmNjI0NDY3Nzc0ZTZkNTE3NzRkNmU2YjdhNGU1NDY3MzU0ZjU4NzA3MjYxMzM0NTc5NjM2ZDY4MzA1YTZlNjgzMjRlMzM2NzMyNjQzMzZjNmE2NDQ3NmY3OTY1NTg0YTZkNWEzMzVhNmM2MzZhNTUzMzY0NTQ0ZDc3NGUzMzY0NzM0ZTU0NTkzMzRlNTc1YTc5NWEzMzYzNzk0ZDZhNmM2YjY0NmU0NTMxNGY0ODY0NzI2MTZlNWE2YzY0NTc1MTMxNjQ1ODQ2NmQ2MjZkMzEzMDVhNTg2ZjY3NGQ3YTQ2Njg0ZTZkNGE2ODU5NmE1NTc3NTk1NDY3MzA1OTZhNjczMDRkN2E2YzY4NWE0NzRlNmQ1OTZhNjMzNDRlNmQ0YTY5NGQ2YTQxNzk0ZDQ3NTkzMjRmNDQ0MTMzNWE1NDVhNmM0ZjQ3NWE2YjU5NTQ1OTc5NGY1NzQ5MzA0ZDZhNTE3ODRkNTQ0MjZkNTk3YTY0Njk1OTZhNDY2YTRlNmQ0OTM0NTk2NzNkM2QyMjdkJztcbiAgICAgIGNvbnN0IGNvaW5Db25maWcgPSB7IG5hbWU6ICdzb2wnIH0gYXMgQmFzZUNvaW47XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoYnJvYWRjYXN0SGV4KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlLmdldFBheWxvYWQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRQYXJ0cyA9IHBheWxvYWQuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBtZXNzYWdlLmdldFNpZ25lcnMoKVswXTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmVxdWFsKCdHWm1qV0ZKVDlkVW5wV05xSmFiblJNcTR0d3lxQ3I5a1hGYzN6TUdlUG1hOScpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gcGF5bG9hZFBhcnRzWzNdO1xuICAgICAgZGVzdGluYXRpb25BZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ2FkZHIxcXh2OWU5enA1NXh2MzYwd2dobDgwNmQwMnkzNTg5OXpra3Eycmh0Znh2N3g2d3ljdGoyeXJmZ3ZlcjU3dTMwN3dsNTY3NWZyZ3cyMjlkdnE1OHdranZldWQ1dXFmbm10ZXonXG4gICAgICApO1xuICAgICAgY29uc3QgYW1vdW50ID0gTnVtYmVyKHBheWxvYWRQYXJ0c1sxXSk7XG4gICAgICBhbW91bnQuc2hvdWxkLmVxdWFsKDQ4Nzk0NjcpO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVCdWZmID0gbWVzc2FnZS5nZXRTaWduYXR1cmVzKClbMF0uc2lnbmF0dXJlO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlQmFzZTU4ID0gYnM1OC5lbmNvZGUoc2lnbmF0dXJlQnVmZik7XG4gICAgICBzaWduYXR1cmVCYXNlNTguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnM2FqN3hER0pyRkFiTkY2R0xyV1RIcHk4VVc5NGk2eEZBREoxS2RvbURMYUNEalV5ejhHajV2UGM1bVpMZHVGaFJBVUNVNEJVY25CV3U1dGUxRGJNWENGZidcbiAgICAgICk7XG4gICAgICBjb25zdCBzaWduYXR1cmVIZXggPSBzaWduYXR1cmVCdWZmLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIHNpZ25hdHVyZUhleC5zaG91bGQuZXF1YWwoXG4gICAgICAgICc4MTFlNDIwYzUxNGU0NDE0N2Y4MTUwMjQyOWIyNDVlNTIzMjhlODgzZGM4MDllZTM4YWY4OGVmZWZkNTI2Njk1NTAyYTM4MTU5ZTgwMGUxMjI1ZDQ2ODNhZGU5YTUxYjk0MjAwYjA2MDFhZDk2YjYxZTM0ZjBmN2M5NWVmNjcwZSdcbiAgICAgICk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlIZXggPSBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKVswXS5wdWJsaWNLZXkucHViO1xuICAgICAgcHVibGljS2V5SGV4LnNob3VsZC5lcXVhbCgnR1ptaldGSlQ5ZFVucFdOcUphYm5STXE0dHd5cUNyOWtYRmMzek1HZVBtYTknKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sol.d.ts","sourceRoot":"","sources":["../../../test/unit/sol.ts"],"names":[],"mappings":""}
|