@bitgo/account-lib 2.17.2-rc.0.0 → 2.17.2-rc.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.
Files changed (101) hide show
  1. package/dist/browser/bitgo-account-lib.min.js +1 -1
  2. package/dist/browser/bitgo-account-lib.min.js.LICENSE.txt +132 -0
  3. package/dist/package.json +10 -3
  4. package/dist/resources/dot/index.ts +2 -0
  5. package/dist/resources/dot/mainnet.ts +2 -0
  6. package/dist/resources/dot/westend.ts +2 -0
  7. package/dist/resources/trx/protobuf/tron.js~account-lib_master +31380 -0
  8. package/dist/src/coin/algo/keyExclusionBuilder.d.ts +9 -0
  9. package/dist/src/coin/algo/keyExclusionBuilder.d.ts.map +1 -0
  10. package/dist/src/coin/algo/keyExclusionBuilder.js +83 -0
  11. package/dist/src/coin/algo/utils.d.ts +39 -22
  12. package/dist/src/coin/algo/utils.d.ts.map +1 -1
  13. package/dist/src/coin/algo/utils.js +88 -73
  14. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  15. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +1 -1
  16. package/dist/src/coin/cspr/utils.js +2 -2
  17. package/dist/src/coin/dot/errors.d.ts +8 -0
  18. package/dist/src/coin/dot/errors.d.ts.map +1 -0
  19. package/dist/src/coin/dot/errors.js +40 -0
  20. package/dist/src/coin/dot/iface.d.ts +153 -0
  21. package/dist/src/coin/dot/iface.d.ts.map +1 -0
  22. package/dist/src/coin/dot/iface.js +15 -0
  23. package/dist/src/coin/dot/index.d.ts +6 -0
  24. package/dist/src/coin/dot/index.d.ts.map +1 -1
  25. package/dist/src/coin/dot/index.js +14 -2
  26. package/dist/src/coin/dot/keyPair.d.ts +15 -2
  27. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  28. package/dist/src/coin/dot/keyPair.js +41 -6
  29. package/dist/src/coin/dot/stakingBuilder.d.ts +59 -0
  30. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -0
  31. package/dist/src/coin/dot/stakingBuilder.js +157 -0
  32. package/dist/src/coin/dot/transaction.d.ts +31 -3
  33. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  34. package/dist/src/coin/dot/transaction.js +268 -7
  35. package/dist/src/coin/dot/transactionBuilder.d.ts +105 -9
  36. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  37. package/dist/src/coin/dot/transactionBuilder.js +311 -15
  38. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +12 -16
  39. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  40. package/dist/src/coin/dot/transactionBuilderFactory.js +60 -25
  41. package/dist/src/coin/dot/transferBuilder.d.ts +62 -4
  42. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  43. package/dist/src/coin/dot/transferBuilder.js +158 -44
  44. package/dist/src/coin/dot/txnSchema.d.ts +10 -0
  45. package/dist/src/coin/dot/txnSchema.d.ts.map +1 -0
  46. package/dist/src/coin/dot/txnSchema.js +83 -0
  47. package/dist/src/coin/dot/unstakeBuilder.d.ts +38 -0
  48. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -0
  49. package/dist/src/coin/dot/unstakeBuilder.js +111 -0
  50. package/dist/src/coin/dot/utils.d.ts +69 -0
  51. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  52. package/dist/src/coin/dot/utils.js +144 -4
  53. package/dist/src/coin/dot/walletInitializationBuilder.d.ts +51 -5
  54. package/dist/src/coin/dot/walletInitializationBuilder.d.ts.map +1 -1
  55. package/dist/src/coin/dot/walletInitializationBuilder.js +108 -45
  56. package/dist/src/coin/sol/constants.d.ts +24 -0
  57. package/dist/src/coin/sol/constants.d.ts.map +1 -0
  58. package/dist/src/coin/sol/constants.js +35 -0
  59. package/dist/src/coin/sol/iface.d.ts +47 -0
  60. package/dist/src/coin/sol/iface.d.ts.map +1 -0
  61. package/dist/src/coin/sol/iface.js +3 -0
  62. package/dist/src/coin/sol/index.d.ts +5 -0
  63. package/dist/src/coin/sol/index.d.ts.map +1 -0
  64. package/dist/src/coin/sol/index.js +29 -0
  65. package/dist/src/coin/sol/instructionParamsFactory.d.ts +12 -0
  66. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -0
  67. package/dist/src/coin/sol/instructionParamsFactory.js +99 -0
  68. package/dist/src/coin/sol/keyPair.d.ts +45 -0
  69. package/dist/src/coin/sol/keyPair.d.ts.map +1 -0
  70. package/dist/src/coin/sol/keyPair.js +128 -0
  71. package/dist/src/coin/sol/solInstructionFactory.d.ts +10 -0
  72. package/dist/src/coin/sol/solInstructionFactory.d.ts.map +1 -0
  73. package/dist/src/coin/sol/solInstructionFactory.js +102 -0
  74. package/dist/src/coin/sol/transaction.d.ts +50 -0
  75. package/dist/src/coin/sol/transaction.d.ts.map +1 -0
  76. package/dist/src/coin/sol/transaction.js +269 -0
  77. package/dist/src/coin/sol/transactionBuilder.d.ts +96 -0
  78. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -0
  79. package/dist/src/coin/sol/transactionBuilder.js +316 -0
  80. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +34 -0
  81. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -0
  82. package/dist/src/coin/sol/transactionBuilderFactory.js +86 -0
  83. package/dist/src/coin/sol/transferBuilder.d.ts +26 -0
  84. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -0
  85. package/dist/src/coin/sol/transferBuilder.js +140 -0
  86. package/dist/src/coin/sol/utils.d.ts +104 -0
  87. package/dist/src/coin/sol/utils.d.ts.map +1 -0
  88. package/dist/src/coin/sol/utils.js +244 -0
  89. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +26 -0
  90. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -0
  91. package/dist/src/coin/sol/walletInitializationBuilder.js +141 -0
  92. package/dist/src/index.d.ts +4 -0
  93. package/dist/src/index.d.ts.map +1 -1
  94. package/dist/src/index.js +10 -2
  95. package/dist/src/utils/crypto.d.ts +8 -0
  96. package/dist/src/utils/crypto.d.ts.map +1 -1
  97. package/dist/src/utils/crypto.js +13 -2
  98. package/package.json +10 -3
  99. package/resources/dot/index.ts +2 -0
  100. package/resources/dot/mainnet.ts +2 -0
  101. package/resources/dot/westend.ts +2 -0
@@ -0,0 +1,128 @@
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.KeyPair = void 0;
7
+ var web3_js_1 = require("@solana/web3.js");
8
+ var tweetnacl_1 = __importDefault(require("tweetnacl"));
9
+ var errors_1 = require("../baseCoin/errors");
10
+ var iface_1 = require("../baseCoin/iface");
11
+ var constants_1 = require("./constants");
12
+ var utils_1 = require("./utils");
13
+ // The Solana Key Pair is an ED25519 but the current ED25519 implementation doesnt return base58 strings
14
+ // TODO(): Refactor to ED25519 Keypair instead of BaseKeyPair
15
+ var KeyPair = /** @class */ (function () {
16
+ /**
17
+ * Public constructor. By default, creates a key pair with a random master seed.
18
+ *
19
+ * @param { KeyPairOptions } source Either a master seed, a private key, or a public key
20
+ */
21
+ function KeyPair(source) {
22
+ var kp;
23
+ if (!source) {
24
+ kp = web3_js_1.Keypair.generate();
25
+ this.setKP(kp);
26
+ }
27
+ else if (iface_1.isSeed(source)) {
28
+ kp = web3_js_1.Keypair.fromSeed(source.seed.slice(0, constants_1.SEED_LENGTH));
29
+ this.setKP(kp);
30
+ }
31
+ else if (iface_1.isPrivateKey(source)) {
32
+ this.recordKeysFromPrivateKey(source.prv);
33
+ }
34
+ else if (iface_1.isPublicKey(source)) {
35
+ this.recordKeysFromPublicKey(source.pub);
36
+ }
37
+ else {
38
+ throw new Error('Invalid key pair options');
39
+ }
40
+ }
41
+ KeyPair.prototype.setKP = function (keyPair) {
42
+ this.keyPair = {
43
+ prv: utils_1.Uint8ArrayTobase58(keyPair.secretKey),
44
+ pub: keyPair.publicKey.toString(),
45
+ };
46
+ };
47
+ /** @inheritdoc */
48
+ KeyPair.prototype.recordKeysFromPrivateKey = function (prv) {
49
+ if (utils_1.isValidPrivateKey(prv)) {
50
+ var prvKey = utils_1.base58ToUint8Array(prv);
51
+ var keyPair = web3_js_1.Keypair.fromSecretKey(prvKey);
52
+ this.setKP(keyPair);
53
+ }
54
+ else {
55
+ throw new errors_1.InvalidKey('Invalid private key');
56
+ }
57
+ };
58
+ /** @inheritdoc */
59
+ KeyPair.prototype.recordKeysFromPublicKey = function (pub) {
60
+ if (utils_1.isValidPublicKey(pub)) {
61
+ this.keyPair = { pub: pub };
62
+ }
63
+ else {
64
+ throw new errors_1.InvalidKey('Invalid public key: ' + pub);
65
+ }
66
+ };
67
+ /**
68
+ * Solana default keys format public key as a base58 string and secret key as Uint8Array
69
+ *
70
+ * @param {boolean} raw defines if the prv key is returned in Uint8Array, default is base58
71
+ * @returns {SolanaKeys} The keys in the defined format
72
+ */
73
+ KeyPair.prototype.getKeys = function (raw) {
74
+ if (raw === void 0) { raw = false; }
75
+ var result = { pub: this.keyPair.pub };
76
+ if (!!this.keyPair.prv) {
77
+ if (raw) {
78
+ result.prv = utils_1.base58ToUint8Array(this.keyPair.prv);
79
+ }
80
+ else {
81
+ result.prv = this.keyPair.prv;
82
+ }
83
+ }
84
+ return result;
85
+ };
86
+ /** @inheritdoc */
87
+ KeyPair.prototype.getAddress = function () {
88
+ var keys = this.getKeys();
89
+ return keys.pub;
90
+ };
91
+ /**
92
+ * Generates a signature for an arbitrary string with the current private key using the ed25519 public-key signature
93
+ * system.
94
+ *
95
+ * @param {string} message to produce a signature for
96
+ * @returns {Uint8Array} The signature produced for the message
97
+ * @throws if there is no private key
98
+ */
99
+ KeyPair.prototype.signMessage = function (message) {
100
+ var messageToSign = new Uint8Array(Buffer.from(message));
101
+ var prv = this.keyPair.prv;
102
+ if (!prv) {
103
+ throw new Error('Missing private key');
104
+ }
105
+ return tweetnacl_1.default.sign.detached(messageToSign, utils_1.base58ToUint8Array(prv));
106
+ };
107
+ /**
108
+ * Verifies a message signature using the current public key.
109
+ *
110
+ * @param {string} message signed
111
+ * @param {Uint8Array} signature to verify
112
+ * @returns {boolean} True if the message was signed with the current key pair
113
+ */
114
+ KeyPair.prototype.verifySignature = function (message, signature) {
115
+ var messageToVerify;
116
+ if (typeof message === 'string') {
117
+ messageToVerify = new Uint8Array(Buffer.from(message));
118
+ }
119
+ else {
120
+ messageToVerify = message;
121
+ }
122
+ var pub = new web3_js_1.PublicKey(this.keyPair.pub);
123
+ return tweetnacl_1.default.sign.detached.verify(messageToVerify, signature, pub.toBuffer());
124
+ };
125
+ return KeyPair;
126
+ }());
127
+ exports.KeyPair = KeyPair;
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2luL3NvbC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJDQUFtRTtBQUNuRSx3REFBNkI7QUFFN0IsNkNBQWdEO0FBQ2hELDJDQUFtRztBQUNuRyx5Q0FBMEM7QUFFMUMsaUNBQXNHO0FBRXRHLHdHQUF3RztBQUN4Ryw2REFBNkQ7QUFDN0Q7SUFHRTs7OztPQUlHO0lBQ0gsaUJBQVksTUFBdUI7UUFDakMsSUFBSSxFQUFjLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLEVBQUUsR0FBRyxpQkFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEI7YUFBTSxJQUFJLGNBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixFQUFFLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHVCQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEI7YUFBTSxJQUFJLG9CQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksbUJBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRU8sdUJBQUssR0FBYixVQUFjLE9BQW1CO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixHQUFHLEVB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QUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDSCxjQUFDO0FBQUQsQ0FBQyxBQTlHRCxJQThHQztBQTlHWSwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleXBhaXIgYXMgU29sS2V5cGFpciwgUHVibGljS2V5IH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgeyBCYXNlS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEludmFsaWRLZXkgfSBmcm9tICcuLi9iYXNlQ29pbi9lcnJvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEtleXMsIGlzUHJpdmF0ZUtleSwgaXNQdWJsaWNLZXksIGlzU2VlZCwgS2V5UGFpck9wdGlvbnMgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5pbXBvcnQgeyBTRUVEX0xFTkdUSCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNvbGFuYUtleXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGJhc2U1OFRvVWludDhBcnJheSwgaXNWYWxpZFByaXZhdGVLZXksIGlzVmFsaWRQdWJsaWNLZXksIFVpbnQ4QXJyYXlUb2Jhc2U1OCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vLyBUaGUgU29sYW5hIEtleSBQYWlyIGlzIGFuIEVEMjU1MTkgYnV0IHRoZSBjdXJyZW50IEVEMjU1MTkgaW1wbGVtZW50YXRpb24gZG9lc250IHJldHVybiBiYXNlNTggc3RyaW5nc1xuLy8gVE9ETygpOiBSZWZhY3RvciB0byBFRDI1NTE5IEtleXBhaXIgaW5zdGVhZCBvZiBCYXNlS2V5UGFpclxuZXhwb3J0IGNsYXNzIEtleVBhaXIgaW1wbGVtZW50cyBCYXNlS2V5UGFpciB7XG4gIHByb3RlY3RlZCBrZXlQYWlyOiBEZWZhdWx0S2V5cztcbiAgcHJvdGVjdGVkIHNvdXJjZT86IEtleVBhaXJPcHRpb25zO1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBsZXQga3A6IFNvbEtleXBhaXI7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIGtwID0gU29sS2V5cGFpci5nZW5lcmF0ZSgpO1xuICAgICAgdGhpcy5zZXRLUChrcCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAga3AgPSBTb2xLZXlwYWlyLmZyb21TZWVkKHNvdXJjZS5zZWVkLnNsaWNlKDAsIFNFRURfTEVOR1RIKSk7XG4gICAgICB0aGlzLnNldEtQKGtwKTtcbiAgICB9IGVsc2UgaWYgKGlzUHJpdmF0ZUtleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRLUChrZXlQYWlyOiBTb2xLZXlwYWlyKTogdm9pZCB7XG4gICAgdGhpcy5rZXlQYWlyID0ge1xuICAgICAgcHJ2OiBVaW50OEFycmF5VG9iYXNlNTgoa2V5UGFpci5zZWNyZXRLZXkpLFxuICAgICAgcHViOiBrZXlQYWlyLnB1YmxpY0tleS50b1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHBydjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzVmFsaWRQcml2YXRlS2V5KHBydikpIHtcbiAgICAgIGNvbnN0IHBydktleSA9IGJhc2U1OFRvVWludDhBcnJheShwcnYpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IFNvbEtleXBhaXIuZnJvbVNlY3JldEtleShwcnZLZXkpO1xuICAgICAgdGhpcy5zZXRLUChrZXlQYWlyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRLZXkoJ0ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNWYWxpZFB1YmxpY0tleShwdWIpKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSB7IHB1YiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEtleSgnSW52YWxpZCBwdWJsaWMga2V5OiAnICsgcHViKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29sYW5hIGRlZmF1bHQga2V5cyBmb3JtYXQgcHVibGljIGtleSBhcyBhIGJhc2U1OCBzdHJpbmcgYW5kIHNlY3JldCBrZXkgYXMgVWludDhBcnJheVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJhdyBkZWZpbmVzIGlmIHRoZSBwcnYga2V5IGlzIHJldHVybmVkIGluIFVpbnQ4QXJyYXksIGRlZmF1bHQgaXMgYmFzZTU4XG4gICAqIEByZXR1cm5zIHtTb2xhbmFLZXlzfSBUaGUga2V5cyBpbiB0aGUgZGVmaW5lZCBmb3JtYXRcbiAgICovXG4gIGdldEtleXMocmF3ID0gZmFsc2UpOiBTb2xhbmFLZXlzIHtcbiAgICBjb25zdCByZXN1bHQ6IFNvbGFuYUtleXMgPSB7IHB1YjogdGhpcy5rZXlQYWlyLnB1YiB9O1xuICAgIGlmICghIXRoaXMua2V5UGFpci5wcnYpIHtcbiAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgcmVzdWx0LnBydiA9IGJhc2U1OFRvVWludDhBcnJheSh0aGlzLmtleVBhaXIucHJ2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wcnYgPSB0aGlzLmtleVBhaXIucHJ2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXlzID0gdGhpcy5nZXRLZXlzKCk7XG4gICAgcmV0dXJuIGtleXMucHViO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHNpZ25hdHVyZSBmb3IgYW4gYXJiaXRyYXJ5IHN0cmluZyB3aXRoIHRoZSBjdXJyZW50IHByaXZhdGUga2V5IHVzaW5nIHRoZSBlZDI1NTE5IHB1YmxpYy1rZXkgc2lnbmF0dXJlXG4gICAqIHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgdG8gcHJvZHVjZSBhIHNpZ25hdHVyZSBmb3JcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFRoZSBzaWduYXR1cmUgcHJvZHVjZWQgZm9yIHRoZSBtZXNzYWdlXG4gICAqIEB0aHJvd3MgaWYgdGhlcmUgaXMgbm8gcHJpdmF0ZSBrZXlcbiAgICovXG4gIHNpZ25NZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1NpZ24gPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG4gICAgY29uc3QgeyBwcnYgfSA9IHRoaXMua2V5UGFpcjtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHJldHVybiBuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZVRvU2lnbiwgYmFzZTU4VG9VaW50OEFycmF5KHBydikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgbWVzc2FnZSBzaWduYXR1cmUgdXNpbmcgdGhlIGN1cnJlbnQgcHVibGljIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Ugc2lnbmVkXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gc2lnbmF0dXJlIHRvIHZlcmlmeVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgc2lnbmVkIHdpdGggdGhlIGN1cnJlbnQga2V5IHBhaXJcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBVaW50OEFycmF5IHwgc3RyaW5nLCBzaWduYXR1cmU6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgICBsZXQgbWVzc2FnZVRvVmVyaWZ5O1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2VUb1ZlcmlmeSA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZVRvVmVyaWZ5ID0gbWVzc2FnZTtcbiAgICB9XG4gICAgY29uc3QgcHViID0gbmV3IFB1YmxpY0tleSh0aGlzLmtleVBhaXIucHViKTtcbiAgICByZXR1cm4gbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeShtZXNzYWdlVG9WZXJpZnksIHNpZ25hdHVyZSwgcHViLnRvQnVmZmVyKCkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { TransactionInstruction } from '@solana/web3.js';
2
+ import { InstructionParams } from './iface';
3
+ /**
4
+ * Construct Solana instructions from instructions params
5
+ *
6
+ * @param {InstructionParams} instructionToBuild - the data containing the instruction params
7
+ * @returns {TransactionInstruction[]} An array containing supported Solana instructions
8
+ */
9
+ export declare function solInstructionFactory(instructionToBuild: InstructionParams): TransactionInstruction[];
10
+ //# sourceMappingURL=solInstructionFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solInstructionFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/sol/solInstructionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAInF,OAAO,EAAE,iBAAiB,EAAqC,MAAM,SAAS,CAAC;AAE/E;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,sBAAsB,EAAE,CAarG"}
@@ -0,0 +1,102 @@
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.solInstructionFactory = void 0;
7
+ var web3_js_1 = require("@solana/web3.js");
8
+ var assert_1 = __importDefault(require("assert"));
9
+ var bignumber_js_1 = __importDefault(require("bignumber.js"));
10
+ var constants_1 = require("./constants");
11
+ /**
12
+ * Construct Solana instructions from instructions params
13
+ *
14
+ * @param {InstructionParams} instructionToBuild - the data containing the instruction params
15
+ * @returns {TransactionInstruction[]} An array containing supported Solana instructions
16
+ */
17
+ function solInstructionFactory(instructionToBuild) {
18
+ switch (instructionToBuild.type) {
19
+ case constants_1.InstructionBuilderTypes.NonceAdvance:
20
+ return advanceNonceInstruction(instructionToBuild);
21
+ case constants_1.InstructionBuilderTypes.Memo:
22
+ return memoInstruction(instructionToBuild);
23
+ case constants_1.InstructionBuilderTypes.Transfer:
24
+ return transferInstruction(instructionToBuild);
25
+ case constants_1.InstructionBuilderTypes.CreateNonceAccount:
26
+ return createNonceAccountInstruction(instructionToBuild);
27
+ default:
28
+ throw new Error("Invalid instruction type or not supported");
29
+ }
30
+ }
31
+ exports.solInstructionFactory = solInstructionFactory;
32
+ /**
33
+ * Construct Advance Nonce Solana instructions
34
+ *
35
+ * @param {Nonce} data - the data to build the instruction
36
+ * @returns {TransactionInstruction[]} An array containing Advance Nonce Solana instruction
37
+ */
38
+ function advanceNonceInstruction(data) {
39
+ var _a = data.params, authWalletAddress = _a.authWalletAddress, walletNonceAddress = _a.walletNonceAddress;
40
+ assert_1.default(authWalletAddress, 'Missing authWalletAddress param');
41
+ assert_1.default(walletNonceAddress, 'Missing walletNonceAddress param');
42
+ var nonceInstruction = web3_js_1.SystemProgram.nonceAdvance({
43
+ noncePubkey: new web3_js_1.PublicKey(walletNonceAddress),
44
+ authorizedPubkey: new web3_js_1.PublicKey(authWalletAddress),
45
+ });
46
+ return [nonceInstruction];
47
+ }
48
+ /**
49
+ * Construct Memo Solana instructions
50
+ *
51
+ * @param {Memo} data - the data to build the instruction
52
+ * @returns {TransactionInstruction[]} An array containing Memo Solana instruction
53
+ */
54
+ function memoInstruction(data) {
55
+ var memo = data.params.memo;
56
+ assert_1.default(memo, 'Missing memo param');
57
+ var memoInstruction = new web3_js_1.TransactionInstruction({
58
+ keys: [],
59
+ programId: new web3_js_1.PublicKey(constants_1.MEMO_PROGRAM_PK),
60
+ data: Buffer.from(memo),
61
+ });
62
+ return [memoInstruction];
63
+ }
64
+ /**
65
+ * Construct Transfer Solana instructions
66
+ *
67
+ * @param {Transfer} data - the data to build the instruction
68
+ * @returns {TransactionInstruction[]} An array containing Transfer Solana instruction
69
+ */
70
+ function transferInstruction(data) {
71
+ var _a = data.params, fromAddress = _a.fromAddress, toAddress = _a.toAddress, amount = _a.amount;
72
+ assert_1.default(fromAddress, 'Missing fromAddress param');
73
+ assert_1.default(toAddress, 'Missing toAddress param');
74
+ assert_1.default(amount, 'Missing toAddress param');
75
+ var transferInstruction = web3_js_1.SystemProgram.transfer({
76
+ fromPubkey: new web3_js_1.PublicKey(fromAddress),
77
+ toPubkey: new web3_js_1.PublicKey(toAddress),
78
+ lamports: new bignumber_js_1.default(amount).toNumber(),
79
+ });
80
+ return [transferInstruction];
81
+ }
82
+ /**
83
+ * Construct Create and Initialize Nonce Solana instructions
84
+ *
85
+ * @param {WalletInit} data - the data to build the instruction
86
+ * @returns {TransactionInstruction[]} An array containing Create and Initialize Nonce Solana instruction
87
+ */
88
+ function createNonceAccountInstruction(data) {
89
+ var _a = data.params, fromAddress = _a.fromAddress, nonceAddress = _a.nonceAddress, authAddress = _a.authAddress, amount = _a.amount;
90
+ assert_1.default(fromAddress, 'Missing fromAddress param');
91
+ assert_1.default(nonceAddress, 'Missing nonceAddress param');
92
+ assert_1.default(authAddress, 'Missing authAddress param');
93
+ assert_1.default(amount, 'Missing amount param');
94
+ var nonceAccountInstruction = web3_js_1.SystemProgram.createNonceAccount({
95
+ fromPubkey: new web3_js_1.PublicKey(fromAddress),
96
+ noncePubkey: new web3_js_1.PublicKey(nonceAddress),
97
+ authorizedPubkey: new web3_js_1.PublicKey(authAddress),
98
+ lamports: new bignumber_js_1.default(amount).toNumber(),
99
+ });
100
+ return nonceAccountInstruction.instructions;
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vc29sL3NvbEluc3RydWN0aW9uRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQ0FBbUY7QUFDbkYsa0RBQTRCO0FBQzVCLDhEQUFxQztBQUNyQyx5Q0FBdUU7QUFHdkU7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDL0IsS0FBSyxtQ0FBdUIsQ0FBQyxZQUFZO1lBQ3ZDLE9BQU8sdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyRCxLQUFLLG1DQUF1QixDQUFDLElBQUk7WUFDL0IsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxLQUFLLG1DQUF1QixDQUFDLFFBQVE7WUFDbkMsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELEtBQUssbUNBQXVCLENBQUMsa0JBQWtCO1lBQzdDLE9BQU8sNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztLQUNoRTtBQUNILENBQUM7QUFiRCxzREFhQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxJQUFXO0lBRXhDLElBQUEsS0FDRSxJQUFJLE9BRDJDLEVBQXZDLGlCQUFpQix1QkFBQSxFQUFFLGtCQUFrQix3QkFBRSxDQUMxQztJQUNULGdCQUFNLENBQUMsaUJBQWlCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztJQUM3RCxnQkFBTSxDQUFDLGtCQUFrQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDL0QsSUFBTSxnQkFBZ0IsR0FBRyx1QkFBYSxDQUFDLFlBQVksQ0FBQztRQUNsRCxXQUFXLEVBQUUsSUFBSSxtQkFBUyxDQUFDLGtCQUFrQixDQUFDO1FBQzlDLGdCQUFnQixFQUFFLElBQUksbUJBQVMsQ0FBQyxpQkFBaUIsQ0FBQztLQUNuRCxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFVO0lBRXJCLElBQUEsSUFBSSxHQUNaLElBQUksWUFEUSxDQUNQO0lBQ1QsZ0JBQU0sQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNuQyxJQUFNLGVBQWUsR0FBRyxJQUFJLGdDQUFzQixDQUFDO1FBQ2pELElBQUksRUFBRSxFQUFFO1FBQ1IsU0FBUyxFQUFFLElBQUksbUJBQVMsQ0FBQywyQkFBZSxDQUFDO1FBQ3pDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztLQUN4QixDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFjO0lBRXZDLElBQUEsS0FDRSxJQUFJLE9BRG9DLEVBQWhDLFdBQVcsaUJBQUEsRUFBRSxTQUFTLGVBQUEsRUFBRSxNQUFNLFlBQUUsQ0FDbkM7SUFDVCxnQkFBTSxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ2pELGdCQUFNLENBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsZ0JBQU0sQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUMxQyxJQUFNLG1CQUFtQixHQUFHLHVCQUFhLENBQUMsUUFBUSxDQUFDO1FBQ2pELFVBQVUsRUFBRSxJQUFJLG1CQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLFFBQVEsRUFBRSxJQUFJLG1CQUFTLENBQUMsU0FBUyxDQUFDO1FBQ2xDLFFBQVEsRUFBRSxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsNkJBQTZCLENBQUMsSUFBZ0I7SUFFbkQsSUFBQSxLQUNFLElBQUksT0FEb0QsRUFBaEQsV0FBVyxpQkFBQSxFQUFFLFlBQVksa0JBQUEsRUFBRSxXQUFXLGlCQUFBLEVBQUUsTUFBTSxZQUFFLENBQ25EO0lBQ1QsZ0JBQU0sQ0FBQyxXQUFXLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUNqRCxnQkFBTSxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ25ELGdCQUFNLENBQUMsV0FBVyxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDakQsZ0JBQU0sQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUN2QyxJQUFNLHVCQUF1QixHQUFHLHVCQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDL0QsVUFBVSxFQUFFLElBQUksbUJBQVMsQ0FBQyxXQUFXLENBQUM7UUFDdEMsV0FBVyxFQUFFLElBQUksbUJBQVMsQ0FBQyxZQUFZLENBQUM7UUFDeEMsZ0JBQWdCLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFdBQVcsQ0FBQztRQUM1QyxRQUFRLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtLQUMzQyxDQUFDLENBQUM7SUFDSCxPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHVibGljS2V5LCBTeXN0ZW1Qcm9ncmFtLCBUcmFuc2FjdGlvbkluc3RydWN0aW9uIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLCBNRU1PX1BST0dSQU1fUEsgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJbnN0cnVjdGlvblBhcmFtcywgTWVtbywgTm9uY2UsIFRyYW5zZmVyLCBXYWxsZXRJbml0IH0gZnJvbSAnLi9pZmFjZSc7XG5cbi8qKlxuICogQ29uc3RydWN0IFNvbGFuYSBpbnN0cnVjdGlvbnMgZnJvbSBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtJbnN0cnVjdGlvblBhcmFtc30gaW5zdHJ1Y3Rpb25Ub0J1aWxkIC0gdGhlIGRhdGEgY29udGFpbmluZyB0aGUgaW5zdHJ1Y3Rpb24gcGFyYW1zXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2xJbnN0cnVjdGlvbkZhY3RvcnkoaW5zdHJ1Y3Rpb25Ub0J1aWxkOiBJbnN0cnVjdGlvblBhcmFtcyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIHN3aXRjaCAoaW5zdHJ1Y3Rpb25Ub0J1aWxkLnR5cGUpIHtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZTpcbiAgICAgIHJldHVybiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTWVtbzpcbiAgICAgIHJldHVybiBtZW1vSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyOlxuICAgICAgcmV0dXJuIHRyYW5zZmVySW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZU5vbmNlQWNjb3VudDpcbiAgICAgIHJldHVybiBjcmVhdGVOb25jZUFjY291bnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW5zdHJ1Y3Rpb24gdHlwZSBvciBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQWR2YW5jZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtOb25jZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBBZHZhbmNlIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbihkYXRhOiBOb25jZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgYXV0aFdhbGxldEFkZHJlc3MsIHdhbGxldE5vbmNlQWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGF1dGhXYWxsZXRBZGRyZXNzLCAnTWlzc2luZyBhdXRoV2FsbGV0QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQod2FsbGV0Tm9uY2VBZGRyZXNzLCAnTWlzc2luZyB3YWxsZXROb25jZUFkZHJlc3MgcGFyYW0nKTtcbiAgY29uc3Qgbm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0ubm9uY2VBZHZhbmNlKHtcbiAgICBub25jZVB1YmtleTogbmV3IFB1YmxpY0tleSh3YWxsZXROb25jZUFkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoYXV0aFdhbGxldEFkZHJlc3MpLFxuICB9KTtcbiAgcmV0dXJuIFtub25jZUluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgTWVtbyBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtNZW1vfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIE1lbW8gU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIG1lbW9JbnN0cnVjdGlvbihkYXRhOiBNZW1vKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBtZW1vIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQobWVtbywgJ01pc3NpbmcgbWVtbyBwYXJhbScpO1xuICBjb25zdCBtZW1vSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAga2V5czogW10sXG4gICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KE1FTU9fUFJPR1JBTV9QSyksXG4gICAgZGF0YTogQnVmZmVyLmZyb20obWVtbyksXG4gIH0pO1xuICByZXR1cm4gW21lbW9JbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zZmVyfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiB0cmFuc2Zlckluc3RydWN0aW9uKGRhdGE6IFRyYW5zZmVyKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgdG9BZGRyZXNzLCBhbW91bnQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHRvQWRkcmVzcywgJ01pc3NpbmcgdG9BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkodG9BZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuICByZXR1cm4gW3RyYW5zZmVySW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7V2FsbGV0SW5pdH0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKGRhdGE6IFdhbGxldEluaXQpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBub25jZUFkZHJlc3MsIGF1dGhBZGRyZXNzLCBhbW91bnQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG5vbmNlQWRkcmVzcywgJ01pc3Npbmcgbm9uY2VBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhdXRoQWRkcmVzcywgJ01pc3NpbmcgYXV0aEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudEluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5jcmVhdGVOb25jZUFjY291bnQoe1xuICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KG5vbmNlQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcbiAgcmV0dXJuIG5vbmNlQWNjb3VudEluc3RydWN0aW9uLmluc3RydWN0aW9ucztcbn1cbiJdfQ==
@@ -0,0 +1,50 @@
1
+ import { BaseTransaction, TransactionType } from '../baseCoin';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import { Transaction as SolTransaction } from '@solana/web3.js';
4
+ import { TxData } from './iface';
5
+ import { KeyPair } from '.';
6
+ export declare class Transaction extends BaseTransaction {
7
+ private _solTransaction;
8
+ protected _type: TransactionType;
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ get solTransaction(): SolTransaction;
11
+ set solTransaction(tx: SolTransaction);
12
+ set id(id: string);
13
+ get id(): string;
14
+ /** @inheritDoc */
15
+ get signature(): string[];
16
+ /**
17
+ * Set the transaction type.
18
+ *
19
+ * @param {TransactionType} transactionType The transaction type to be set.
20
+ */
21
+ setTransactionType(transactionType: TransactionType): void;
22
+ /** @inheritdoc */
23
+ canSign(): boolean;
24
+ /**
25
+ * Signs transaction.
26
+ *
27
+ * @param {KeyPair} keyPair Signer keys.
28
+ */
29
+ sign(keyPair: KeyPair[] | KeyPair): Promise<void>;
30
+ /** @inheritdoc */
31
+ toBroadcastFormat(): string;
32
+ /**
33
+ * Sets this transaction payload
34
+ *
35
+ * @param rawTransaction
36
+ */
37
+ fromRawTransaction(rawTransaction: string): void;
38
+ /** @inheritdoc */
39
+ toJson(): TxData;
40
+ /**
41
+ * Get the nonce from the Solana Transaction
42
+ * Throws if not set
43
+ */
44
+ private getNonce;
45
+ /**
46
+ * Load the input and output data on this transaction.
47
+ */
48
+ loadInputsAndOutputs(): void;
49
+ }
50
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/coin/sol/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAgC,WAAW,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAK5B,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,eAAe,CAAiB;IACxC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,IAAI,cAAc,CAAC,EAAE,EAAE,cAAc,EAEpC;IAED,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAEhB;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,kBAAkB;IAClB,IAAI,SAAS,IAAI,MAAM,EAAE,CAUxB;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D,kBAAkB;IAClB,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvD,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAiB3B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAuBhD,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAchB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,oBAAoB,IAAI,IAAI;CAkC7B"}
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.Transaction = void 0;
58
+ var baseCoin_1 = require("../baseCoin");
59
+ var errors_1 = require("../baseCoin/errors");
60
+ var web3_js_1 = require("@solana/web3.js");
61
+ var bs58_1 = __importDefault(require("bs58"));
62
+ var utils_1 = require("./utils");
63
+ var instructionParamsFactory_1 = require("./instructionParamsFactory");
64
+ var constants_1 = require("./constants");
65
+ var Transaction = /** @class */ (function (_super) {
66
+ __extends(Transaction, _super);
67
+ function Transaction(_coinConfig) {
68
+ return _super.call(this, _coinConfig) || this;
69
+ }
70
+ Object.defineProperty(Transaction.prototype, "solTransaction", {
71
+ get: function () {
72
+ return this._solTransaction;
73
+ },
74
+ set: function (tx) {
75
+ this._solTransaction = tx;
76
+ },
77
+ enumerable: false,
78
+ configurable: true
79
+ });
80
+ Object.defineProperty(Transaction.prototype, "id", {
81
+ get: function () {
82
+ return this._id;
83
+ },
84
+ set: function (id) {
85
+ this._id = id;
86
+ },
87
+ enumerable: false,
88
+ configurable: true
89
+ });
90
+ Object.defineProperty(Transaction.prototype, "signature", {
91
+ /** @inheritDoc */
92
+ get: function () {
93
+ var signatures = [];
94
+ for (var _i = 0, _a = this._solTransaction.signatures; _i < _a.length; _i++) {
95
+ var solSignature = _a[_i];
96
+ if (solSignature.signature) {
97
+ signatures.push(bs58_1.default.encode(solSignature.signature));
98
+ }
99
+ }
100
+ return signatures;
101
+ },
102
+ enumerable: false,
103
+ configurable: true
104
+ });
105
+ /**
106
+ * Set the transaction type.
107
+ *
108
+ * @param {TransactionType} transactionType The transaction type to be set.
109
+ */
110
+ Transaction.prototype.setTransactionType = function (transactionType) {
111
+ this._type = transactionType;
112
+ };
113
+ /** @inheritdoc */
114
+ Transaction.prototype.canSign = function () {
115
+ return true;
116
+ };
117
+ /**
118
+ * Signs transaction.
119
+ *
120
+ * @param {KeyPair} keyPair Signer keys.
121
+ */
122
+ Transaction.prototype.sign = function (keyPair) {
123
+ return __awaiter(this, void 0, void 0, function () {
124
+ var keyPairs, signers, _i, keyPairs_1, kp, keys;
125
+ var _a;
126
+ return __generator(this, function (_b) {
127
+ if (!this._solTransaction || !this._solTransaction.recentBlockhash) {
128
+ throw new errors_1.SigningError('Nonce is required before signing');
129
+ }
130
+ if (!this._solTransaction || !this._solTransaction.feePayer) {
131
+ throw new errors_1.SigningError('feePayer is required before signing');
132
+ }
133
+ keyPairs = keyPair instanceof Array ? keyPair : [keyPair];
134
+ signers = [];
135
+ for (_i = 0, keyPairs_1 = keyPairs; _i < keyPairs_1.length; _i++) {
136
+ kp = keyPairs_1[_i];
137
+ keys = kp.getKeys(true);
138
+ if (!keys.prv) {
139
+ throw new errors_1.SigningError('Missing private key');
140
+ }
141
+ signers.push({ publicKey: new web3_js_1.PublicKey(keys.pub), secretKey: keys.prv });
142
+ }
143
+ try {
144
+ (_a = this._solTransaction).partialSign.apply(_a, signers);
145
+ }
146
+ catch (e) {
147
+ throw e;
148
+ }
149
+ return [2 /*return*/];
150
+ });
151
+ });
152
+ };
153
+ /** @inheritdoc */
154
+ Transaction.prototype.toBroadcastFormat = function () {
155
+ if (!this._solTransaction) {
156
+ throw new errors_1.ParseTransactionError('Empty transaction');
157
+ }
158
+ // The signatures can have null signatures (which means they are required but yet unsigned)
159
+ // In order to be able to serializer the txs, we have to change the requireAllSignatures based
160
+ // on if the TX is fully signed or not
161
+ var requireAllSignatures = utils_1.requiresAllSignatures(this._solTransaction.signatures);
162
+ try {
163
+ // Based on the recomendation encoding found here https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction
164
+ // We use base64 encoding
165
+ return this._solTransaction.serialize({ requireAllSignatures: requireAllSignatures }).toString('base64');
166
+ }
167
+ catch (e) {
168
+ throw e;
169
+ }
170
+ };
171
+ /**
172
+ * Sets this transaction payload
173
+ *
174
+ * @param rawTransaction
175
+ */
176
+ Transaction.prototype.fromRawTransaction = function (rawTransaction) {
177
+ try {
178
+ utils_1.isValidRawTransaction(rawTransaction);
179
+ this._solTransaction = web3_js_1.Transaction.from(Buffer.from(rawTransaction, 'base64'));
180
+ if (this._solTransaction.signature && this._solTransaction.signature !== null) {
181
+ this._id = bs58_1.default.encode(this._solTransaction.signature);
182
+ }
183
+ var transactionType = utils_1.getTransactionType(this._solTransaction);
184
+ switch (transactionType) {
185
+ case baseCoin_1.TransactionType.WalletInitialization:
186
+ this.setTransactionType(baseCoin_1.TransactionType.WalletInitialization);
187
+ break;
188
+ case baseCoin_1.TransactionType.Send:
189
+ this.setTransactionType(baseCoin_1.TransactionType.Send);
190
+ break;
191
+ }
192
+ this.loadInputsAndOutputs();
193
+ }
194
+ catch (e) {
195
+ throw e;
196
+ }
197
+ };
198
+ /** @inheritdoc */
199
+ Transaction.prototype.toJson = function () {
200
+ var _a;
201
+ if (!this._solTransaction) {
202
+ throw new errors_1.ParseTransactionError('Empty transaction');
203
+ }
204
+ var result = {
205
+ id: this.id,
206
+ feePayer: (_a = this._solTransaction.feePayer) === null || _a === void 0 ? void 0 : _a.toString(),
207
+ nonce: this.getNonce(),
208
+ numSignatures: this.signature.length,
209
+ instructionsData: instructionParamsFactory_1.instructionParamsFactory(this._type, this._solTransaction.instructions),
210
+ };
211
+ return result;
212
+ };
213
+ /**
214
+ * Get the nonce from the Solana Transaction
215
+ * Throws if not set
216
+ */
217
+ Transaction.prototype.getNonce = function () {
218
+ if (this._solTransaction.recentBlockhash) {
219
+ return this._solTransaction.recentBlockhash;
220
+ }
221
+ else if (this._solTransaction.nonceInfo) {
222
+ return this._solTransaction.nonceInfo.nonce;
223
+ }
224
+ else {
225
+ throw new errors_1.InvalidTransactionError('Nonce is not set');
226
+ }
227
+ };
228
+ /**
229
+ * Load the input and output data on this transaction.
230
+ */
231
+ Transaction.prototype.loadInputsAndOutputs = function () {
232
+ var _a;
233
+ if (!this._solTransaction || ((_a = this._solTransaction.instructions) === null || _a === void 0 ? void 0 : _a.length) === 0) {
234
+ return;
235
+ }
236
+ var outputs = [];
237
+ var inputs = [];
238
+ var instructionParams = instructionParamsFactory_1.instructionParamsFactory(this.type, this._solTransaction.instructions);
239
+ for (var _i = 0, instructionParams_1 = instructionParams; _i < instructionParams_1.length; _i++) {
240
+ var instruction = instructionParams_1[_i];
241
+ switch (instruction.type) {
242
+ case constants_1.InstructionBuilderTypes.CreateNonceAccount:
243
+ inputs.push({
244
+ address: instruction.params.fromAddress,
245
+ value: instruction.params.amount,
246
+ coin: this._coinConfig.name,
247
+ });
248
+ break;
249
+ case constants_1.InstructionBuilderTypes.Transfer:
250
+ inputs.push({
251
+ address: instruction.params.fromAddress,
252
+ value: instruction.params.amount,
253
+ coin: this._coinConfig.name,
254
+ });
255
+ outputs.push({
256
+ address: instruction.params.toAddress,
257
+ value: instruction.params.amount,
258
+ coin: this._coinConfig.name,
259
+ });
260
+ break;
261
+ }
262
+ }
263
+ this._outputs = outputs;
264
+ this._inputs = inputs;
265
+ };
266
+ return Transaction;
267
+ }(baseCoin_1.BaseTransaction));
268
+ exports.Transaction = Transaction;
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9zb2wvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQStEO0FBRS9ELDZDQUFrRztBQUNsRywyQ0FBOEY7QUFFOUYsOENBQTBCO0FBQzFCLGlDQUEyRjtBQUUzRix1RUFBc0U7QUFDdEUseUNBQXNEO0FBR3REO0lBQWlDLCtCQUFlO0lBSTlDLHFCQUFZLFdBQWlDO2VBQzNDLGtCQUFNLFdBQVcsQ0FBQztJQUNwQixDQUFDO0lBRUQsc0JBQUksdUNBQWM7YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQzthQUVELFVBQW1CLEVBQWtCO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7OztPQUpBO0lBTUQsc0JBQUksMkJBQUU7YUFJTjtZQUNFLE9BQU8sSUFBSSxDQUFDLEdBQWEsQ0FBQztRQUM1QixDQUFDO2FBTkQsVUFBTyxFQUFVO1lBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQzs7O09BQUE7SUFPRCxzQkFBSSxrQ0FBUztRQURiLGtCQUFrQjthQUNsQjtZQUNFLElBQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztZQUVoQyxLQUEyQixVQUErQixFQUEvQixLQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUEvQixjQUErQixFQUEvQixJQUErQixFQUFFO2dCQUF2RCxJQUFNLFlBQVksU0FBQTtnQkFDckIsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO29CQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hEO2FB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LENBQUMsTUFBTSxDQUFDLFdBQVc7d0JBQ3ZDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07d0JBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7cUJBQzVCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNYLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVM7d0JBQ3JDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07d0JBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7cUJBQzVCLENBQUMsQ0FBQztvQkFDSCxNQUFNO2FBQ1Q7U0FDRjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUEvTEQsQ0FBaUMsMEJBQWUsR0ErTC9DO0FBL0xZLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFBhcnNlVHJhbnNhY3Rpb25FcnJvciwgU2lnbmluZ0Vycm9yIH0gZnJvbSAnLi4vYmFzZUNvaW4vZXJyb3JzJztcbmltcG9ydCB7IEJsb2NraGFzaCwgUHVibGljS2V5LCBTaWduZXIsIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7IFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IGdldFRyYW5zYWN0aW9uVHlwZSwgaXNWYWxpZFJhd1RyYW5zYWN0aW9uLCByZXF1aXJlc0FsbFNpZ25hdHVyZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuJztcbmltcG9ydCB7IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeSB9IGZyb20gJy4vaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5JztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRW50cnkgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3NvbFRyYW5zYWN0aW9uOiBTb2xUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHNvbFRyYW5zYWN0aW9uKCk6IFNvbFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXQgc29sVHJhbnNhY3Rpb24odHg6IFNvbFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fc29sVHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIHNldCBpZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSBpZDtcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZCBhcyBzdHJpbmc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0IHNpZ25hdHVyZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc29sU2lnbmF0dXJlIG9mIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgIGlmIChzb2xTaWduYXR1cmUuc2lnbmF0dXJlKSB7XG4gICAgICAgIHNpZ25hdHVyZXMucHVzaChiYXNlNTguZW5jb2RlKHNvbFNpZ25hdHVyZS5zaWduYXR1cmUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgU2lnbmVyIGtleXMuXG4gICAqL1xuICBhc3luYyBzaWduKGtleVBhaXI6IEtleVBhaXJbXSB8IEtleVBhaXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3NvbFRyYW5zYWN0aW9uIHx8ICF0aGlzLl9zb2xUcmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ05vbmNlIGlzIHJlcXVpcmVkIGJlZm9yZSBzaWduaW5nJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24gfHwgIXRoaXMuX3NvbFRyYW5zYWN0aW9uLmZlZVBheWVyKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdmZWVQYXllciBpcyByZXF1aXJlZCBiZWZvcmUgc2lnbmluZycpO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlycyA9IGtleVBhaXIgaW5zdGFuY2VvZiBBcnJheSA/IGtleVBhaXIgOiBba2V5UGFpcl07XG4gICAgY29uc3Qgc2lnbmVyczogU2lnbmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtwIG9mIGtleVBhaXJzKSB7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cyh0cnVlKTtcbiAgICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgICAgc2lnbmVycy5wdXNoKHsgcHVibGljS2V5OiBuZXcgUHVibGljS2V5KGtleXMucHViKSwgc2VjcmV0S2V5OiBrZXlzLnBydiBhcyBVaW50OEFycmF5IH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc29sVHJhbnNhY3Rpb24ucGFydGlhbFNpZ24oLi4uc2lnbmVycyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3NvbFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICAvLyBUaGUgc2lnbmF0dXJlcyBjYW4gaGF2ZSBudWxsIHNpZ25hdHVyZXMgKHdoaWNoIG1lYW5zIHRoZXkgYXJlIHJlcXVpcmVkIGJ1dCB5ZXQgdW5zaWduZWQpXG4gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzZXJpYWxpemVyIHRoZSB0eHMsIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSByZXF1aXJlQWxsU2lnbmF0dXJlcyBiYXNlZFxuICAgIC8vIG9uIGlmIHRoZSBUWCBpcyBmdWxseSBzaWduZWQgb3Igbm90XG4gICAgY29uc3QgcmVxdWlyZUFsbFNpZ25hdHVyZXMgPSByZXF1aXJlc0FsbFNpZ25hdHVyZXModGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlcyk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJhc2VkIG9uIHRoZSByZWNvbWVuZGF0aW9uIGVuY29kaW5nIGZvdW5kIGhlcmUgaHR0cHM6Ly9kb2NzLnNvbGFuYS5jb20vZGV2ZWxvcGluZy9jbGllbnRzL2pzb25ycGMtYXBpI3NlbmR0cmFuc2FjdGlvblxuICAgICAgLy8gV2UgdXNlIGJhc2U2NCBlbmNvZGluZ1xuICAgICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7IHJlcXVpcmVBbGxTaWduYXR1cmVzIH0pLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbiA9IFNvbFRyYW5zYWN0aW9uLmZyb20oQnVmZmVyLmZyb20ocmF3VHJhbnNhY3Rpb24sICdiYXNlNjQnKSk7XG5cbiAgICAgIGlmICh0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lkID0gYmFzZTU4LmVuY29kZSh0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25UeXBlID0gZ2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMuX3NvbFRyYW5zYWN0aW9uKTtcbiAgICAgIHN3aXRjaCAodHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBmZWVQYXllcjogdGhpcy5fc29sVHJhbnNhY3Rpb24uZmVlUGF5ZXI/LnRvU3RyaW5nKCksXG4gICAgICBub25jZTogdGhpcy5nZXROb25jZSgpLFxuICAgICAgbnVtU2lnbmF0dXJlczogdGhpcy5zaWduYXR1cmUubGVuZ3RoLFxuICAgICAgaW5zdHJ1Y3Rpb25zRGF0YTogaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5KHRoaXMuX3R5cGUsIHRoaXMuX3NvbFRyYW5zYWN0aW9uLmluc3RydWN0aW9ucyksXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbm9uY2UgZnJvbSB0aGUgU29sYW5hIFRyYW5zYWN0aW9uXG4gICAqIFRocm93cyBpZiBub3Qgc2V0XG4gICAqL1xuICBwcml2YXRlIGdldE5vbmNlKCk6IEJsb2NraGFzaCB7XG4gICAgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mbykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mby5ub25jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdOb25jZSBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zb2xUcmFuc2FjdGlvbiB8fCB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5wdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25QYXJhbXMgPSBpbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkodGhpcy50eXBlLCB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvblBhcmFtcykge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlTm9uY2VBY2NvdW50OlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyOlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxufVxuIl19