@bitgo-beta/sdk-coin-canton 1.0.1-beta.9 → 1.0.1-beta.91

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 (106) hide show
  1. package/dist/resources/hash/hash.d.ts +5 -0
  2. package/dist/resources/hash/hash.js +298 -0
  3. package/dist/resources/proto/damlTransaction.js +100 -0
  4. package/dist/resources/proto/damlTransactionNode.js +71 -0
  5. package/dist/resources/proto/damlTransactionNodeSeed.js +56 -0
  6. package/dist/resources/proto/metadata/metadataGlobalKeyMappingEntry.js +53 -0
  7. package/dist/resources/proto/metadata/metadataInputContract.js +80 -0
  8. package/dist/resources/proto/metadata/metadataSubmitterInfo.js +62 -0
  9. package/dist/resources/proto/metadata.js +189 -0
  10. package/dist/resources/proto/node/empty.js +36 -0
  11. package/dist/resources/proto/node/globalKey.js +81 -0
  12. package/dist/resources/proto/node/identifier.js +73 -0
  13. package/dist/resources/proto/node/node.js +664 -0
  14. package/dist/resources/proto/node/timestamp.js +145 -0
  15. package/dist/resources/proto/node/value.js +838 -0
  16. package/dist/resources/proto/preparedTransaction.d.ts +8 -0
  17. package/dist/resources/proto/preparedTransaction.js +66 -0
  18. package/dist/src/canton.d.ts +15 -2
  19. package/dist/src/canton.d.ts.map +1 -1
  20. package/dist/src/canton.js +67 -6
  21. package/dist/src/index.d.ts +1 -0
  22. package/dist/src/index.d.ts.map +1 -1
  23. package/dist/src/index.js +2 -1
  24. package/dist/src/lib/constant.d.ts +16 -0
  25. package/dist/src/lib/constant.d.ts.map +1 -0
  26. package/dist/src/lib/constant.js +19 -0
  27. package/dist/src/lib/iface.d.ts +107 -0
  28. package/dist/src/lib/iface.d.ts.map +1 -1
  29. package/dist/src/lib/iface.js +1 -1
  30. package/dist/src/lib/index.d.ts +7 -1
  31. package/dist/src/lib/index.d.ts.map +1 -1
  32. package/dist/src/lib/index.js +15 -3
  33. package/dist/src/lib/keyPair.d.ts +7 -1
  34. package/dist/src/lib/keyPair.d.ts.map +1 -1
  35. package/dist/src/lib/keyPair.js +24 -4
  36. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +51 -0
  37. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -0
  38. package/dist/src/lib/oneStepPreApprovalBuilder.js +101 -0
  39. package/dist/src/lib/resourcesInterface.d.ts +214 -0
  40. package/dist/src/lib/resourcesInterface.d.ts.map +1 -0
  41. package/dist/src/lib/resourcesInterface.js +3 -0
  42. package/dist/src/lib/transaction/transaction.d.ts +24 -0
  43. package/dist/src/lib/transaction/transaction.d.ts.map +1 -0
  44. package/dist/src/lib/transaction/transaction.js +206 -0
  45. package/dist/src/lib/transactionBuilder.d.ts +10 -17
  46. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  47. package/dist/src/lib/transactionBuilder.js +31 -27
  48. package/dist/src/lib/transactionBuilderFactory.d.ts +15 -3
  49. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  50. package/dist/src/lib/transactionBuilderFactory.js +56 -6
  51. package/dist/src/lib/transferAcceptanceBuilder.d.ts +59 -0
  52. package/dist/src/lib/transferAcceptanceBuilder.d.ts.map +1 -0
  53. package/dist/src/lib/transferAcceptanceBuilder.js +116 -0
  54. package/dist/src/lib/transferAcknowledgeBuilder.d.ts +72 -0
  55. package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -0
  56. package/dist/src/lib/transferAcknowledgeBuilder.js +133 -0
  57. package/dist/src/lib/transferBuilder.d.ts +5 -1
  58. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  59. package/dist/src/lib/transferBuilder.js +8 -1
  60. package/dist/src/lib/transferRejectionBuilder.d.ts +59 -0
  61. package/dist/src/lib/transferRejectionBuilder.d.ts.map +1 -0
  62. package/dist/src/lib/transferRejectionBuilder.js +116 -0
  63. package/dist/src/lib/utils.d.ts +101 -0
  64. package/dist/src/lib/utils.d.ts.map +1 -1
  65. package/dist/src/lib/utils.js +258 -3
  66. package/dist/src/lib/walletInitBuilder.d.ts +101 -0
  67. package/dist/src/lib/walletInitBuilder.d.ts.map +1 -0
  68. package/dist/src/lib/walletInitBuilder.js +232 -0
  69. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +17 -0
  70. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -0
  71. package/dist/src/lib/walletInitialization/walletInitTransaction.js +100 -0
  72. package/dist/test/helper.d.ts +3 -0
  73. package/dist/test/helper.d.ts.map +1 -0
  74. package/dist/test/helper.js +9 -0
  75. package/dist/test/integration/canton.integration.d.ts +2 -0
  76. package/dist/test/integration/canton.integration.d.ts.map +1 -0
  77. package/dist/test/integration/canton.integration.js +40 -0
  78. package/dist/test/resources.d.ts +79 -0
  79. package/dist/test/resources.d.ts.map +1 -0
  80. package/dist/test/resources.js +94 -0
  81. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.d.ts +2 -0
  82. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.d.ts.map +1 -0
  83. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +66 -0
  84. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts +2 -0
  85. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts.map +1 -0
  86. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +57 -0
  87. package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts +2 -0
  88. package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts.map +1 -0
  89. package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +32 -0
  90. package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts +2 -0
  91. package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts.map +1 -0
  92. package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +57 -0
  93. package/dist/test/unit/builder/walletInit/walletInitBuilder.d.ts +2 -0
  94. package/dist/test/unit/builder/walletInit/walletInitBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/builder/walletInit/walletInitBuilder.js +65 -0
  96. package/dist/test/unit/keyPair.d.ts +2 -0
  97. package/dist/test/unit/keyPair.d.ts.map +1 -0
  98. package/dist/test/unit/keyPair.js +72 -0
  99. package/dist/test/unit/utils.d.ts +2 -0
  100. package/dist/test/unit/utils.d.ts.map +1 -0
  101. package/dist/test/unit/utils.js +76 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +29 -10
  104. package/dist/src/lib/transaction.d.ts +0 -8
  105. package/dist/src/lib/transaction.d.ts.map +0 -1
  106. package/dist/src/lib/transaction.js +0 -17
@@ -0,0 +1,232 @@
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.WalletInitBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const keyPair_1 = require("./keyPair");
9
+ const utils_1 = __importDefault(require("./utils"));
10
+ const walletInitTransaction_1 = require("./walletInitialization/walletInitTransaction");
11
+ const constant_1 = require("./constant");
12
+ class WalletInitBuilder extends sdk_core_1.BaseTransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ this._signatures = [];
16
+ this._localParticipantObservationOnly = false;
17
+ this._otherConfirmingParticipantUids = [];
18
+ this._confirmationThreshold = 1;
19
+ this._observingParticipantUids = [];
20
+ this._transaction = new walletInitTransaction_1.WalletInitTransaction(_coinConfig);
21
+ }
22
+ initBuilder(tx) {
23
+ this._transaction = tx;
24
+ }
25
+ buildImplementation() {
26
+ throw new Error('Not implemented');
27
+ }
28
+ fromImplementation(rawTransaction, isFirstSigner) {
29
+ throw new Error('Not implemented');
30
+ }
31
+ signImplementation(key) {
32
+ throw new Error('Not implemented');
33
+ }
34
+ get transaction() {
35
+ return this._transaction;
36
+ }
37
+ set transaction(transaction) {
38
+ this._transaction.preparedParty = transaction;
39
+ }
40
+ validateAddress(address, addressFormat) {
41
+ if (!utils_1.default.isValidAddress(address.address)) {
42
+ throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
43
+ }
44
+ }
45
+ validateKey(key) {
46
+ let keyPair;
47
+ try {
48
+ keyPair = new keyPair_1.KeyPair({ prv: key.key });
49
+ }
50
+ catch {
51
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
52
+ }
53
+ if (!keyPair.getKeys().prv) {
54
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
55
+ }
56
+ }
57
+ validateRawTransaction(rawTransaction) {
58
+ if (!rawTransaction || !this._transaction.preparedParty) {
59
+ throw new sdk_core_1.BuildTransactionError('invalid raw transaction');
60
+ }
61
+ const localHash = utils_1.default.computeHashFromCreatePartyResponse(rawTransaction);
62
+ if (localHash !== this._transaction.preparedParty.multiHash) {
63
+ throw new sdk_core_1.BuildTransactionError('invalid raw transaction, hash not matching');
64
+ }
65
+ }
66
+ validateTransaction(transaction) {
67
+ if (!transaction?.preparedParty) {
68
+ return;
69
+ }
70
+ const localHash = utils_1.default.computeHashFromCreatePartyResponse(transaction.preparedParty.topologyTransactions);
71
+ if (localHash !== this._transaction.preparedParty.multiHash) {
72
+ throw new sdk_core_1.BuildTransactionError('invalid transaction');
73
+ }
74
+ }
75
+ // not implemented because wallet initialization doesn't require any value
76
+ validateValue(value) {
77
+ throw new Error('Not implemented');
78
+ }
79
+ /** @inheritDoc */
80
+ addSignature(publicKey, signature) {
81
+ if (!this.transaction) {
82
+ throw new sdk_core_1.InvalidTransactionError('transaction is empty!');
83
+ }
84
+ this._signatures.push({ publicKey, signature });
85
+ this.transaction.signatures = signature.toString('base64');
86
+ }
87
+ /**
88
+ * Sets the public key used for signing.
89
+ *
90
+ * @param key - The public key of the wallet.
91
+ * @returns The current builder instance for chaining.
92
+ * @throws Error if key is not a valid public key
93
+ */
94
+ publicKey(key) {
95
+ utils_1.default.isValidPublicKey(key);
96
+ this._publicKey = {
97
+ format: constant_1.PUBLIC_KEY_FORMAT,
98
+ keyData: key,
99
+ keySpec: constant_1.PUBLIC_KEY_SPEC,
100
+ };
101
+ return this;
102
+ }
103
+ /**
104
+ * Sets the party hint (alias or name) used during wallet initialization.
105
+ *
106
+ * @param hint - A 5-character non-empty string representing the party hint.
107
+ * @returns The current builder instance for chaining.
108
+ * @throws Error if the hint is empty or more than 5 characters long.
109
+ */
110
+ partyHint(hint) {
111
+ const trimmedHint = hint.trim();
112
+ if (!trimmedHint) {
113
+ throw new Error('partyHint cannot be empty');
114
+ }
115
+ if (trimmedHint.length > 5) {
116
+ throw new Error('partyHint must be less than 6 characters long');
117
+ }
118
+ this._partyHint = trimmedHint;
119
+ return this;
120
+ }
121
+ /**
122
+ * Sets whether the local participant should be added in observation-only mode.
123
+ *
124
+ * @param flag - Boolean flag indicating observation-only status.
125
+ * @returns The current builder instance for chaining.
126
+ */
127
+ localParticipantObservationOnly(flag) {
128
+ this._localParticipantObservationOnly = flag;
129
+ return this;
130
+ }
131
+ /**
132
+ * Adds a confirming participant UID to the list of other confirming participants.
133
+ *
134
+ * @param uid - A non-empty string UID of another confirming participant.
135
+ * @returns The current builder instance for chaining.
136
+ * @throws Error if the UID is empty.
137
+ */
138
+ otherConfirmingParticipantUid(uid) {
139
+ const trimmedUid = uid.trim();
140
+ if (!trimmedUid) {
141
+ throw new Error('otherConfirmingParticipantUid cannot be empty');
142
+ }
143
+ if (!this._otherConfirmingParticipantUids) {
144
+ this._otherConfirmingParticipantUids = [];
145
+ }
146
+ this._otherConfirmingParticipantUids.push(trimmedUid);
147
+ return this;
148
+ }
149
+ /**
150
+ * Sets the confirmation threshold for the wallet initialization.
151
+ *
152
+ * @param threshold - A positive integer indicating how many confirmations are required.
153
+ * @returns The current builder instance for chaining.
154
+ * @throws Error if the threshold is not a positive integer.
155
+ */
156
+ confirmationThreshold(threshold) {
157
+ if (!Number.isInteger(threshold) || threshold <= 0) {
158
+ throw new Error('confirmationThreshold must be a positive integer');
159
+ }
160
+ this._confirmationThreshold = threshold;
161
+ return this;
162
+ }
163
+ /**
164
+ * Adds an observing participant UID to the list of observers.
165
+ *
166
+ * @param uid - A non-empty string UID of the observing participant.
167
+ * @returns The current builder instance for chaining.
168
+ * @throws Error if the UID is empty.
169
+ */
170
+ observingParticipantUid(uid) {
171
+ const trimmedUid = uid.trim();
172
+ if (!trimmedUid) {
173
+ throw new Error('observingParticipantUid cannot be empty');
174
+ }
175
+ if (!this._observingParticipantUids) {
176
+ this._observingParticipantUids = [];
177
+ }
178
+ this._observingParticipantUids.push(trimmedUid);
179
+ return this;
180
+ }
181
+ /**
182
+ * Builds and returns the WalletInitRequest object from the builder's internal state.
183
+ *
184
+ * This method performs validation before constructing the object. If required fields are
185
+ * missing or invalid, it throws an error.
186
+ *
187
+ * @returns {WalletInitRequest} - A fully constructed and validated request object for wallet initialization.
188
+ * @throws {Error} If any required field is missing or fails validation.
189
+ */
190
+ toRequestObject() {
191
+ this.validate();
192
+ return {
193
+ publicKey: this._publicKey,
194
+ partyHint: this._partyHint,
195
+ localParticipantObservationOnly: this._localParticipantObservationOnly,
196
+ otherConfirmingParticipantUids: this._otherConfirmingParticipantUids,
197
+ confirmationThreshold: this._confirmationThreshold,
198
+ observingParticipantUids: this._observingParticipantUids,
199
+ };
200
+ }
201
+ /**
202
+ * Validates the internal state of the builder before building the request object.
203
+ *
204
+ * Checks for:
205
+ * - Presence of a synchronizer ID.
206
+ * - `partyHint` must not be empty and must be at most 5 characters long.
207
+ * - Public key must include `keyData`, `format`, and `keySpec`.
208
+ * - Confirmation threshold must be a positive integer.
209
+ * - Confirming and observing participant UID lists must be arrays.
210
+ *
211
+ * @private
212
+ * @throws {Error} If any required field is missing or invalid.
213
+ */
214
+ validate() {
215
+ if (!this._partyHint || this._partyHint.length > 5)
216
+ throw new Error('Invalid partyHint');
217
+ if (!this._publicKey || !this._publicKey.keyData || !this._publicKey.format || !this._publicKey.keySpec) {
218
+ throw new Error('Invalid publicKey');
219
+ }
220
+ if (!Number.isInteger(this._confirmationThreshold) || this._confirmationThreshold <= 0) {
221
+ throw new Error('Invalid confirmationThreshold');
222
+ }
223
+ if (!Array.isArray(this._otherConfirmingParticipantUids)) {
224
+ throw new Error('otherConfirmingParticipantUids must be an array');
225
+ }
226
+ if (!Array.isArray(this._observingParticipantUids)) {
227
+ throw new Error('observingParticipantUids must be an array');
228
+ }
229
+ }
230
+ }
231
+ exports.WalletInitBuilder = WalletInitBuilder;
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dhbGxldEluaXRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLG1EQVE4QjtBQUc5Qix1Q0FBb0M7QUFFcEMsb0RBQTRCO0FBQzVCLHdGQUFxRjtBQUNyRix5Q0FBZ0U7QUFFaEUsTUFBYSxpQkFBa0IsU0FBUSxpQ0FBc0I7SUFXM0QsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFWYixnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFJOUIscUNBQWdDLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLG9DQUErQixHQUFhLEVBQUUsQ0FBQztRQUMvQywyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsOEJBQXlCLEdBQWEsRUFBRSxDQUFDO1FBSS9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQXlCO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxtQkFBbUI7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxjQUFtQixFQUFFLGFBQXVCO1FBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRVMsa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBMEI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFh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Q0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hHLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFqUEQsOENBaVBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBJUHVibGljS2V5LCBQcmVwYXJlZFBhcnR5LCBXYWxsZXRJbml0UmVxdWVzdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgV2FsbGV0SW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi93YWxsZXRJbml0aWFsaXphdGlvbi93YWxsZXRJbml0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgUFVCTElDX0tFWV9GT1JNQVQsIFBVQkxJQ19LRVlfU1BFQyB9IGZyb20gJy4vY29uc3RhbnQnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0SW5pdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFdhbGxldEluaXRUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcblxuICBwcml2YXRlIF9wdWJsaWNLZXk6IElQdWJsaWNLZXk7XG4gIHByaXZhdGUgX3BhcnR5SGludDogc3RyaW5nO1xuICBwcml2YXRlIF9sb2NhbFBhcnRpY2lwYW50T2JzZXJ2YXRpb25Pbmx5ID0gZmFsc2U7XG4gIHByaXZhdGUgX290aGVyQ29uZmlybWluZ1BhcnRpY2lwYW50VWlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfY29uZmlybWF0aW9uVGhyZXNob2xkID0gMTtcbiAgcHJpdmF0ZSBfb2JzZXJ2aW5nUGFydGljaXBhbnRVaWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBXYWxsZXRJbml0VHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFdhbGxldEluaXRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFdhbGxldEluaXRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBhbnksIGlzRmlyc3RTaWduZXI/OiBib29sZWFuKTogV2FsbGV0SW5pdFRyYW5zYWN0aW9uIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBXYWxsZXRJbml0VHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgdHJhbnNhY3Rpb24oKTogV2FsbGV0SW5pdFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFByZXBhcmVkUGFydHkpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5wcmVwYXJlZFBhcnR5ID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBsZXQga2V5UGFpcjogS2V5UGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gICAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uIHx8ICF0aGlzLl90cmFuc2FjdGlvbi5wcmVwYXJlZFBhcnR5KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBsb2NhbEhhc2ggPSB1dGlscy5jb21wdXRlSGFzaEZyb21DcmVhdGVQYXJ0eVJlc3BvbnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBpZiAobG9jYWxIYXNoICE9PSB0aGlzLl90cmFuc2FjdGlvbi5wcmVwYXJlZFBhcnR5Lm11bHRpSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24sIGhhc2ggbm90IG1hdGNoaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFdhbGxldEluaXRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24/LnByZXBhcmVkUGFydHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbG9jYWxIYXNoID0gdXRpbHMuY29tcHV0ZUhhc2hGcm9tQ3JlYXRlUGFydHlSZXNwb25zZSh0cmFuc2FjdGlvbi5wcmVwYXJlZFBhcnR5LnRvcG9sb2d5VHJhbnNhY3Rpb25zKTtcbiAgICBpZiAobG9jYWxIYXNoICE9PSB0aGlzLl90cmFuc2FjdGlvbi5wcmVwYXJlZFBhcnR5Lm11bHRpSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignaW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5vdCBpbXBsZW1lbnRlZCBiZWNhdXNlIHdhbGxldCBpbml0aWFsaXphdGlvbiBkb2Vzbid0IHJlcXVpcmUgYW55IHZhbHVlXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd0cmFuc2FjdGlvbiBpcyBlbXB0eSEnKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmVzID0gc2lnbmF0dXJlLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwdWJsaWMga2V5IHVzZWQgZm9yIHNpZ25pbmcuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgcHVibGljIGtleSBvZiB0aGUgd2FsbGV0LlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICogQHRocm93cyBFcnJvciBpZiBrZXkgaXMgbm90IGEgdmFsaWQgcHVibGljIGtleVxuICAgKi9cbiAgcHVibGljS2V5KGtleTogc3RyaW5nKTogdGhpcyB7XG4gICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleShrZXkpO1xuICAgIHRoaXMuX3B1YmxpY0tleSA9IHtcbiAgICAgIGZvcm1hdDogUFVCTElDX0tFWV9GT1JNQVQsXG4gICAgICBrZXlEYXRhOiBrZXksXG4gICAgICBrZXlTcGVjOiBQVUJMSUNfS0VZX1NQRUMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXJ0eSBoaW50IChhbGlhcyBvciBuYW1lKSB1c2VkIGR1cmluZyB3YWxsZXQgaW5pdGlhbGl6YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBoaW50IC0gQSA1LWNoYXJhY3RlciBub24tZW1wdHkgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFydHkgaGludC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGhpbnQgaXMgZW1wdHkgb3IgbW9yZSB0aGFuIDUgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcGFydHlIaW50KGhpbnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHRyaW1tZWRIaW50ID0gaGludC50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkSGludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJ0eUhpbnQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICh0cmltbWVkSGludC5sZW5ndGggPiA1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnR5SGludCBtdXN0IGJlIGxlc3MgdGhhbiA2IGNoYXJhY3RlcnMgbG9uZycpO1xuICAgIH1cbiAgICB0aGlzLl9wYXJ0eUhpbnQgPSB0cmltbWVkSGludDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgdGhlIGxvY2FsIHBhcnRpY2lwYW50IHNob3VsZCBiZSBhZGRlZCBpbiBvYnNlcnZhdGlvbi1vbmx5IG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBmbGFnIC0gQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgb2JzZXJ2YXRpb24tb25seSBzdGF0dXMuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgbG9jYWxQYXJ0aWNpcGFudE9ic2VydmF0aW9uT25seShmbGFnOiBib29sZWFuKTogdGhpcyB7XG4gICAgdGhpcy5fbG9jYWxQYXJ0aWNpcGFudE9ic2VydmF0aW9uT25seSA9IGZsYWc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbmZpcm1pbmcgcGFydGljaXBhbnQgVUlEIHRvIHRoZSBsaXN0IG9mIG90aGVyIGNvbmZpcm1pbmcgcGFydGljaXBhbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gdWlkIC0gQSBub24tZW1wdHkgc3RyaW5nIFVJRCBvZiBhbm90aGVyIGNvbmZpcm1pbmcgcGFydGljaXBhbnQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBVSUQgaXMgZW1wdHkuXG4gICAqL1xuICBvdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZCh1aWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHRyaW1tZWRVaWQgPSB1aWQudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZFVpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9vdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZHMpIHtcbiAgICAgIHRoaXMuX290aGVyQ29uZmlybWluZ1BhcnRpY2lwYW50VWlkcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLl9vdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZHMucHVzaCh0cmltbWVkVWlkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb25maXJtYXRpb24gdGhyZXNob2xkIGZvciB0aGUgd2FsbGV0IGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyZXNob2xkIC0gQSBwb3NpdGl2ZSBpbnRlZ2VyIGluZGljYXRpbmcgaG93IG1hbnkgY29uZmlybWF0aW9ucyBhcmUgcmVxdWlyZWQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSB0aHJlc2hvbGQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICovXG4gIGNvbmZpcm1hdGlvblRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHRoaXMge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih0aHJlc2hvbGQpIHx8IHRocmVzaG9sZCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbmZpcm1hdGlvblRocmVzaG9sZCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICB0aGlzLl9jb25maXJtYXRpb25UaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBvYnNlcnZpbmcgcGFydGljaXBhbnQgVUlEIHRvIHRoZSBsaXN0IG9mIG9ic2VydmVycy5cbiAgICpcbiAgICogQHBhcmFtIHVpZCAtIEEgbm9uLWVtcHR5IHN0cmluZyBVSUQgb2YgdGhlIG9ic2VydmluZyBwYXJ0aWNpcGFudC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIFVJRCBpcyBlbXB0eS5cbiAgICovXG4gIG9ic2VydmluZ1BhcnRpY2lwYW50VWlkKHVpZDogc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdHJpbW1lZFVpZCA9IHVpZC50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkVWlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29ic2VydmluZ1BhcnRpY2lwYW50VWlkIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX29ic2VydmluZ1BhcnRpY2lwYW50VWlkcykge1xuICAgICAgdGhpcy5fb2JzZXJ2aW5nUGFydGljaXBhbnRVaWRzID0gW107XG4gICAgfVxuICAgIHRoaXMuX29ic2VydmluZ1BhcnRpY2lwYW50VWlkcy5wdXNoKHRyaW1tZWRVaWQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgV2FsbGV0SW5pdFJlcXVlc3Qgb2JqZWN0IGZyb20gdGhlIGJ1aWxkZXIncyBpbnRlcm5hbCBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdmFsaWRhdGlvbiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBvYmplY3QuIElmIHJlcXVpcmVkIGZpZWxkcyBhcmVcbiAgICogbWlzc2luZyBvciBpbnZhbGlkLCBpdCB0aHJvd3MgYW4gZXJyb3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtXYWxsZXRJbml0UmVxdWVzdH0gLSBBIGZ1bGx5IGNvbnN0cnVjdGVkIGFuZCB2YWxpZGF0ZWQgcmVxdWVzdCBvYmplY3QgZm9yIHdhbGxldCBpbml0aWFsaXphdGlvbi5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGFueSByZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nIG9yIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICB0b1JlcXVlc3RPYmplY3QoKTogV2FsbGV0SW5pdFJlcXVlc3Qge1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHVibGljS2V5OiB0aGlzLl9wdWJsaWNLZXksXG4gICAgICBwYXJ0eUhpbnQ6IHRoaXMuX3BhcnR5SGludCxcbiAgICAgIGxvY2FsUGFydGljaXBhbnRPYnNlcnZhdGlvbk9ubHk6IHRoaXMuX2xvY2FsUGFydGljaXBhbnRPYnNlcnZhdGlvbk9ubHksXG4gICAgICBvdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZHM6IHRoaXMuX290aGVyQ29uZmlybWluZ1BhcnRpY2lwYW50VWlkcyxcbiAgICAgIGNvbmZpcm1hdGlvblRocmVzaG9sZDogdGhpcy5fY29uZmlybWF0aW9uVGhyZXNob2xkLFxuICAgICAgb2JzZXJ2aW5nUGFydGljaXBhbnRVaWRzOiB0aGlzLl9vYnNlcnZpbmdQYXJ0aWNpcGFudFVpZHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBidWlsZGVyIGJlZm9yZSBidWlsZGluZyB0aGUgcmVxdWVzdCBvYmplY3QuXG4gICAqXG4gICAqIENoZWNrcyBmb3I6XG4gICAqIC0gUHJlc2VuY2Ugb2YgYSBzeW5jaHJvbml6ZXIgSUQuXG4gICAqIC0gYHBhcnR5SGludGAgbXVzdCBub3QgYmUgZW1wdHkgYW5kIG11c3QgYmUgYXQgbW9zdCA1IGNoYXJhY3RlcnMgbG9uZy5cbiAgICogLSBQdWJsaWMga2V5IG11c3QgaW5jbHVkZSBga2V5RGF0YWAsIGBmb3JtYXRgLCBhbmQgYGtleVNwZWNgLlxuICAgKiAtIENvbmZpcm1hdGlvbiB0aHJlc2hvbGQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqIC0gQ29uZmlybWluZyBhbmQgb2JzZXJ2aW5nIHBhcnRpY2lwYW50IFVJRCBsaXN0cyBtdXN0IGJlIGFycmF5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHRocm93cyB7RXJyb3J9IElmIGFueSByZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGFydHlIaW50IHx8IHRoaXMuX3BhcnR5SGludC5sZW5ndGggPiA1KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFydHlIaW50Jyk7XG4gICAgaWYgKCF0aGlzLl9wdWJsaWNLZXkgfHwgIXRoaXMuX3B1YmxpY0tleS5rZXlEYXRhIHx8ICF0aGlzLl9wdWJsaWNLZXkuZm9ybWF0IHx8ICF0aGlzLl9wdWJsaWNLZXkua2V5U3BlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1YmxpY0tleScpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodGhpcy5fY29uZmlybWF0aW9uVGhyZXNob2xkKSB8fCB0aGlzLl9jb25maXJtYXRpb25UaHJlc2hvbGQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbmZpcm1hdGlvblRocmVzaG9sZCcpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fb3RoZXJDb25maXJtaW5nUGFydGljaXBhbnRVaWRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdGhlckNvbmZpcm1pbmdQYXJ0aWNpcGFudFVpZHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fb2JzZXJ2aW5nUGFydGljaXBhbnRVaWRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvYnNlcnZpbmdQYXJ0aWNpcGFudFVpZHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,17 @@
1
+ import { BaseKey, BaseTransaction } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { PreparedParty, TransactionExplanation, WalletInitTxData } from '../iface';
4
+ export declare class WalletInitTransaction extends BaseTransaction {
5
+ private _preparedParty;
6
+ constructor(coinConfig: Readonly<CoinConfig>);
7
+ get preparedParty(): PreparedParty;
8
+ set preparedParty(transaction: PreparedParty);
9
+ canSign(key: BaseKey): boolean;
10
+ set signatures(signature: string);
11
+ toBroadcastFormat(): string;
12
+ toJson(): WalletInitTxData;
13
+ get signablePayload(): Buffer;
14
+ fromRawTransaction(rawTx: string): void;
15
+ explainTransaction(): TransactionExplanation;
16
+ }
17
+ //# sourceMappingURL=walletInitTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletInitTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/walletInitialization/walletInitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAA4C,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAGL,aAAa,EACb,sBAAsB,EAEtB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAGlB,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,OAAO,CAAC,cAAc,CAAgB;gBAE1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,IAAI,aAAa,CAAC,WAAW,EAAE,aAAa,EAI3C;IAED,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,IAAI,UAAU,CAAC,SAAS,EAAE,MAAM,EAE/B;IAED,iBAAiB,IAAI,MAAM;IA6B3B,MAAM,IAAI,gBAAgB;IAY1B,IAAI,eAAe,IAAI,MAAM,CAK5B;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBvC,kBAAkB,IAAI,sBAAsB;CAa7C"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalletInitTransaction = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const constant_1 = require("../constant");
6
+ class WalletInitTransaction extends sdk_core_1.BaseTransaction {
7
+ constructor(coinConfig) {
8
+ super(coinConfig);
9
+ }
10
+ get preparedParty() {
11
+ return this._preparedParty;
12
+ }
13
+ set preparedParty(transaction) {
14
+ this._preparedParty = transaction;
15
+ this._id = transaction.multiHash;
16
+ this._type = sdk_core_1.TransactionType.WalletInitialization;
17
+ }
18
+ canSign(key) {
19
+ return false;
20
+ }
21
+ set signatures(signature) {
22
+ this._signatures.push(signature);
23
+ }
24
+ toBroadcastFormat() {
25
+ if (!this._preparedParty) {
26
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
27
+ }
28
+ const multiHashSignatures = [];
29
+ if (this.signature.length > 0) {
30
+ this.signature.map((signature) => {
31
+ const multiHashSignature = {
32
+ format: constant_1.SIGNATURE_FORMAT,
33
+ signature: signature,
34
+ signedBy: this._preparedParty.publicKeyFingerprint,
35
+ signingAlgorithmSpec: constant_1.SIGNATURE_ALGORITHM_SPEC,
36
+ };
37
+ multiHashSignatures.push(multiHashSignature);
38
+ });
39
+ }
40
+ const walletInitBroadcastData = {
41
+ preparedParty: this._preparedParty,
42
+ onboardingTransactions: this._preparedParty.topologyTransactions.map((txn) => {
43
+ const onboardingTransaction = {
44
+ transaction: txn,
45
+ };
46
+ return onboardingTransaction;
47
+ }),
48
+ multiHashSignatures: multiHashSignatures,
49
+ };
50
+ return Buffer.from(JSON.stringify(walletInitBroadcastData)).toString('base64');
51
+ }
52
+ toJson() {
53
+ if (!this._preparedParty) {
54
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
55
+ }
56
+ const result = {
57
+ id: this.id,
58
+ type: this._type,
59
+ preparedParty: this._preparedParty,
60
+ };
61
+ return result;
62
+ }
63
+ get signablePayload() {
64
+ if (!this._preparedParty) {
65
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
66
+ }
67
+ return Buffer.from(this._preparedParty.multiHash, 'base64');
68
+ }
69
+ fromRawTransaction(rawTx) {
70
+ try {
71
+ const decoded = JSON.parse(Buffer.from(rawTx, 'base64').toString('utf8'));
72
+ this._preparedParty = decoded.preparedParty;
73
+ this._type = sdk_core_1.TransactionType.WalletInitialization;
74
+ this._id = decoded.preparedParty.multiHash;
75
+ if (decoded.multiHashSignatures.length > 0) {
76
+ decoded.multiHashSignatures.map((multiHashSignature) => {
77
+ this.signatures = multiHashSignature.signature;
78
+ });
79
+ }
80
+ }
81
+ catch (e) {
82
+ throw new sdk_core_1.InvalidTransactionError('Unable to parse raw transaction data');
83
+ }
84
+ }
85
+ explainTransaction() {
86
+ const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
87
+ return {
88
+ id: this.id,
89
+ displayOrder,
90
+ outputs: [],
91
+ outputAmount: '0',
92
+ changeOutputs: [],
93
+ changeAmount: '0',
94
+ fee: { fee: '0' },
95
+ type: this.type,
96
+ };
97
+ }
98
+ }
99
+ exports.WalletInitTransaction = WalletInitTransaction;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdFRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi93YWxsZXRJbml0aWFsaXphdGlvbi93YWxsZXRJbml0VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTBHO0FBVTFHLDBDQUF5RTtBQUV6RSxNQUFhLHFCQUFzQixTQUFRLDBCQUFlO0lBR3hELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLFdBQTBCO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsb0JBQW9CLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxNQUFNLG1CQUFtQixHQUF5QixFQUFFLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dC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LEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxZQUFZO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxZQUFZLEVBQUUsR0FBRztZQUNqQixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsR0FBRztZQUNqQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdEdELHNEQXNHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIE11bHRpSGFzaFNpZ25hdHVyZSxcbiAgT25ib2FyZGluZ1RyYW5zYWN0aW9uLFxuICBQcmVwYXJlZFBhcnR5LFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBXYWxsZXRJbml0QnJvYWRjYXN0RGF0YSxcbiAgV2FsbGV0SW5pdFR4RGF0YSxcbn0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IHsgU0lHTkFUVVJFX0FMR09SSVRITV9TUEVDLCBTSUdOQVRVUkVfRk9STUFUIH0gZnJvbSAnLi4vY29uc3RhbnQnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0SW5pdFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfcHJlcGFyZWRQYXJ0eTogUHJlcGFyZWRQYXJ0eTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHByZXBhcmVkUGFydHkoKTogUHJlcGFyZWRQYXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVkUGFydHk7XG4gIH1cblxuICBzZXQgcHJlcGFyZWRQYXJ0eSh0cmFuc2FjdGlvbjogUHJlcGFyZWRQYXJ0eSkge1xuICAgIHRoaXMuX3ByZXBhcmVkUGFydHkgPSB0cmFuc2FjdGlvbjtcbiAgICB0aGlzLl9pZCA9IHRyYW5zYWN0aW9uLm11bHRpSGFzaDtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uO1xuICB9XG5cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXQgc2lnbmF0dXJlcyhzaWduYXR1cmU6IHN0cmluZykge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUpO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3ByZXBhcmVkUGFydHkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aUhhc2hTaWduYXR1cmVzOiBNdWx0aUhhc2hTaWduYXR1cmVbXSA9IFtdO1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNpZ25hdHVyZS5tYXAoKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBtdWx0aUhhc2hTaWduYXR1cmU6IE11bHRpSGFzaFNpZ25hdHVyZSA9IHtcbiAgICAgICAgICBmb3JtYXQ6IFNJR05BVFVSRV9GT1JNQVQsXG4gICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmUsXG4gICAgICAgICAgc2lnbmVkQnk6IHRoaXMuX3ByZXBhcmVkUGFydHkucHVibGljS2V5RmluZ2VycHJpbnQsXG4gICAgICAgICAgc2lnbmluZ0FsZ29yaXRobVNwZWM6IFNJR05BVFVSRV9BTEdPUklUSE1fU1BFQyxcbiAgICAgICAgfTtcbiAgICAgICAgbXVsdGlIYXNoU2lnbmF0dXJlcy5wdXNoKG11bHRpSGFzaFNpZ25hdHVyZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgd2FsbGV0SW5pdEJyb2FkY2FzdERhdGE6IFdhbGxldEluaXRCcm9hZGNhc3REYXRhID0ge1xuICAgICAgcHJlcGFyZWRQYXJ0eTogdGhpcy5fcHJlcGFyZWRQYXJ0eSxcbiAgICAgIG9uYm9hcmRpbmdUcmFuc2FjdGlvbnM6IHRoaXMuX3ByZXBhcmVkUGFydHkudG9wb2xvZ3lUcmFuc2FjdGlvbnMubWFwKCh0eG4pID0+IHtcbiAgICAgICAgY29uc3Qgb25ib2FyZGluZ1RyYW5zYWN0aW9uOiBPbmJvYXJkaW5nVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb246IHR4bixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9uYm9hcmRpbmdUcmFuc2FjdGlvbjtcbiAgICAgIH0pLFxuICAgICAgbXVsdGlIYXNoU2lnbmF0dXJlczogbXVsdGlIYXNoU2lnbmF0dXJlcyxcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh3YWxsZXRJbml0QnJvYWRjYXN0RGF0YSkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBXYWxsZXRJbml0VHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3ByZXBhcmVkUGFydHkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFdhbGxldEluaXRUeERhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUgYXMgVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgcHJlcGFyZWRQYXJ0eTogdGhpcy5fcHJlcGFyZWRQYXJ0eSxcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLl9wcmVwYXJlZFBhcnR5KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3ByZXBhcmVkUGFydHkubXVsdGlIYXNoLCAnYmFzZTY0Jyk7XG4gIH1cblxuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkOiBXYWxsZXRJbml0QnJvYWRjYXN0RGF0YSA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpKTtcbiAgICAgIHRoaXMuX3ByZXBhcmVkUGFydHkgPSBkZWNvZGVkLnByZXBhcmVkUGFydHk7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uO1xuICAgICAgdGhpcy5faWQgPSBkZWNvZGVkLnByZXBhcmVkUGFydHkubXVsdGlIYXNoO1xuICAgICAgaWYgKGRlY29kZWQubXVsdGlIYXNoU2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlY29kZWQubXVsdGlIYXNoU2lnbmF0dXJlcy5tYXAoKG11bHRpSGFzaFNpZ25hdHVyZTogTXVsdGlIYXNoU2lnbmF0dXJlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaWduYXR1cmVzID0gbXVsdGlIYXNoU2lnbmF0dXJlLnNpZ25hdHVyZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdVbmFibGUgdG8gcGFyc2UgcmF3IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG4gIH1cblxuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJzAnIH0sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { TransactionBuilderFactory } from '../src';
2
+ export declare function getCantonBuilderFactory(coinName: string): TransactionBuilderFactory;
3
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../test/helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AAEnD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,yBAAyB,CAEnF"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCantonBuilderFactory = getCantonBuilderFactory;
4
+ const statics_1 = require("@bitgo-beta/statics");
5
+ const src_1 = require("../src");
6
+ function getCantonBuilderFactory(coinName) {
7
+ return new src_1.TransactionBuilderFactory(statics_1.coins.get(coinName));
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC9oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwREFFQztBQUxELGlEQUE0QztBQUM1QyxnQ0FBbUQ7QUFFbkQsU0FBZ0IsdUJBQXVCLENBQUMsUUFBZ0I7SUFDdEQsT0FBTyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9zcmMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FudG9uQnVpbGRlckZhY3RvcnkoY29pbk5hbWU6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canton.integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canton.integration.d.ts","sourceRoot":"","sources":["../../../test/integration/canton.integration.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
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 assert_1 = __importDefault(require("assert"));
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const helper_1 = require("../helper");
9
+ const resources_1 = require("../resources");
10
+ describe('Canton integration tests', function () {
11
+ describe('Explain raw transaction', function () {
12
+ const factory = (0, helper_1.getCantonBuilderFactory)('tcanton');
13
+ it('should explain raw wallet init transaction', function () {
14
+ const builder = factory.from(resources_1.WalletInitRawTransaction);
15
+ const txn = builder.transaction;
16
+ const explainTxData = txn.explainTransaction();
17
+ (0, assert_1.default)(explainTxData);
18
+ assert_1.default.equal(explainTxData.id, resources_1.GenerateTopologyResponse.multiHash);
19
+ assert_1.default.equal(explainTxData.type, sdk_core_1.TransactionType.WalletInitialization);
20
+ });
21
+ it('should explain raw transfer acceptance transaction', function () {
22
+ const builder = factory.from(resources_1.TransferAcceptRawTransaction);
23
+ const txn = builder.transaction;
24
+ const explainTxData = txn.explainTransaction();
25
+ (0, assert_1.default)(explainTxData);
26
+ (0, assert_1.default)(explainTxData.id);
27
+ assert_1.default.equal(explainTxData.type, sdk_core_1.TransactionType.TransferAccept);
28
+ assert_1.default.equal(explainTxData.inputAmount, '5.0000000000');
29
+ });
30
+ it('should explain raw transfer rejection transaction', function () {
31
+ const builder = factory.from(resources_1.TransferRejectRawTransaction);
32
+ const txn = builder.transaction;
33
+ const explainTxData = txn.explainTransaction();
34
+ (0, assert_1.default)(explainTxData);
35
+ assert_1.default.equal(explainTxData.type, sdk_core_1.TransactionType.TransferReject);
36
+ assert_1.default.equal(explainTxData.inputAmount, '5.0000000000');
37
+ });
38
+ });
39
+ });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9pbnRlZ3JhdGlvbi9jYW50b24uaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsbURBQXVEO0FBRXZELHNDQUFvRDtBQUNwRCw0Q0FLc0I7QUFFdEIsUUFBUSxDQUFDLDBCQUEwQixFQUFFO0lBQ25DLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFBLGdDQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUF3QixDQUFDLENBQUM7WUFDdkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxvQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUE0QixDQUFDLENBQUM7WUFDM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEIsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUE0QixDQUFDLENBQUM7WUFDM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldENhbnRvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7XG4gIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZSxcbiAgVHJhbnNmZXJBY2NlcHRSYXdUcmFuc2FjdGlvbixcbiAgVHJhbnNmZXJSZWplY3RSYXdUcmFuc2FjdGlvbixcbiAgV2FsbGV0SW5pdFJhd1RyYW5zYWN0aW9uLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnQ2FudG9uIGludGVncmF0aW9uIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnRXhwbGFpbiByYXcgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IGdldENhbnRvbkJ1aWxkZXJGYWN0b3J5KCd0Y2FudG9uJyk7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIHJhdyB3YWxsZXQgaW5pdCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oV2FsbGV0SW5pdFJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHR4biA9IGJ1aWxkZXIudHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBleHBsYWluVHhEYXRhID0gdHhuLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgYXNzZXJ0KGV4cGxhaW5UeERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhaW5UeERhdGEuaWQsIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZS5tdWx0aUhhc2gpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhaW5UeERhdGEudHlwZSwgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiByYXcgdHJhbnNmZXIgYWNjZXB0YW5jZSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oVHJhbnNmZXJBY2NlcHRSYXdUcmFuc2FjdGlvbik7XG4gICAgICBjb25zdCB0eG4gPSBidWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgZXhwbGFpblR4RGF0YSA9IHR4bi5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGFzc2VydChleHBsYWluVHhEYXRhKTtcbiAgICAgIGFzc2VydChleHBsYWluVHhEYXRhLmlkKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYWluVHhEYXRhLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlckFjY2VwdCk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFpblR4RGF0YS5pbnB1dEFtb3VudCwgJzUuMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIHJhdyB0cmFuc2ZlciByZWplY3Rpb24gdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKFRyYW5zZmVyUmVqZWN0UmF3VHJhbnNhY3Rpb24pO1xuICAgICAgY29uc3QgdHhuID0gYnVpbGRlci50cmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGV4cGxhaW5UeERhdGEgPSB0eG4uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBhc3NlcnQoZXhwbGFpblR4RGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFpblR4RGF0YS50eXBlLCBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3QpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhaW5UeERhdGEuaW5wdXRBbW91bnQsICc1LjAwMDAwMDAwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==