@bitgo-beta/sdk-coin-canton 1.0.1-beta.67 → 1.0.1-beta.671

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 (172) hide show
  1. package/dist/src/canton.d.ts +22 -1
  2. package/dist/src/canton.d.ts.map +1 -1
  3. package/dist/src/canton.js +268 -10
  4. package/dist/src/cantonToken.d.ts +19 -0
  5. package/dist/src/cantonToken.d.ts.map +1 -0
  6. package/dist/src/cantonToken.js +52 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -1
  10. package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
  11. package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/allocationAllocateBuilder.js +250 -0
  13. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts +67 -0
  14. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/allocationAllocateWithdrawnBuilder.js +130 -0
  16. package/dist/src/lib/allocationRejectBuilder.d.ts +51 -0
  17. package/dist/src/lib/allocationRejectBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/allocationRejectBuilder.js +107 -0
  19. package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
  20. package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/allocationRequestBuilder.js +248 -0
  22. package/dist/src/lib/cantonCommandBuilder.d.ts +72 -0
  23. package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/cantonCommandBuilder.js +173 -0
  25. package/dist/src/lib/clearSigning.d.ts +58 -0
  26. package/dist/src/lib/clearSigning.d.ts.map +1 -0
  27. package/dist/src/lib/clearSigning.js +66 -0
  28. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
  29. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
  31. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
  32. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
  34. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts +58 -0
  35. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/endInvestorOnboardingOfferBuilder.js +112 -0
  37. package/dist/src/lib/iface.d.ts +130 -2
  38. package/dist/src/lib/iface.d.ts.map +1 -1
  39. package/dist/src/lib/iface.js +3 -1
  40. package/dist/src/lib/index.d.ts +13 -0
  41. package/dist/src/lib/index.d.ts.map +1 -1
  42. package/dist/src/lib/index.js +29 -2
  43. package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
  44. package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
  45. package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
  46. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
  47. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
  48. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
  49. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
  50. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
  52. package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
  53. package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
  54. package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
  55. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
  56. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
  57. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
  58. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
  59. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
  61. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
  62. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
  63. package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
  64. package/dist/src/lib/messages/index.d.ts +5 -0
  65. package/dist/src/lib/messages/index.d.ts.map +1 -0
  66. package/dist/src/lib/messages/index.js +21 -0
  67. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  68. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  69. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  70. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +8 -0
  71. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
  72. package/dist/src/lib/oneStepPreApprovalBuilder.js +15 -1
  73. package/dist/src/lib/resourcesInterface.d.ts +1 -1
  74. package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
  75. package/dist/src/lib/resourcesInterface.js +1 -1
  76. package/dist/src/lib/transaction/transaction.d.ts +17 -1
  77. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  78. package/dist/src/lib/transaction/transaction.js +290 -16
  79. package/dist/src/lib/transactionBuilderFactory.d.ts +22 -0
  80. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilderFactory.js +78 -1
  82. package/dist/src/lib/transferAcceptanceBuilder.d.ts +4 -4
  83. package/dist/src/lib/transferAcceptanceBuilder.d.ts.map +1 -1
  84. package/dist/src/lib/transferAcceptanceBuilder.js +6 -6
  85. package/dist/src/lib/transferBuilder.d.ts +84 -2
  86. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  87. package/dist/src/lib/transferBuilder.js +166 -2
  88. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
  89. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  90. package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
  91. package/dist/src/lib/transferRejectionBuilder.d.ts +59 -0
  92. package/dist/src/lib/transferRejectionBuilder.d.ts.map +1 -0
  93. package/dist/src/lib/transferRejectionBuilder.js +116 -0
  94. package/dist/src/lib/utils.d.ts +45 -3
  95. package/dist/src/lib/utils.d.ts.map +1 -1
  96. package/dist/src/lib/utils.js +742 -66
  97. package/dist/src/lib/walletInitBuilder.d.ts +2 -1
  98. package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
  99. package/dist/src/lib/walletInitBuilder.js +4 -1
  100. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -1
  101. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
  102. package/dist/src/lib/walletInitialization/walletInitTransaction.js +14 -1
  103. package/dist/src/register.d.ts.map +1 -1
  104. package/dist/src/register.js +5 -1
  105. package/dist/test/helper.d.ts +3 -0
  106. package/dist/test/helper.d.ts.map +1 -0
  107. package/dist/test/helper.js +9 -0
  108. package/dist/test/integration/canton.integration.d.ts +2 -0
  109. package/dist/test/integration/canton.integration.d.ts.map +1 -0
  110. package/dist/test/integration/canton.integration.js +157 -0
  111. package/dist/test/integration/canton.token.integration.d.ts +2 -0
  112. package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
  113. package/dist/test/integration/canton.token.integration.js +51 -0
  114. package/dist/test/resources.d.ts +226 -2
  115. package/dist/test/resources.d.ts.map +1 -1
  116. package/dist/test/resources.js +231 -7
  117. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
  118. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
  119. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +360 -0
  120. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts +2 -0
  121. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  122. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.js +133 -0
  123. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts +2 -0
  124. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts.map +1 -0
  125. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.js +121 -0
  126. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
  127. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
  128. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +407 -0
  129. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
  130. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
  131. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +340 -0
  132. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
  133. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  134. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +104 -0
  135. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
  136. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
  137. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
  138. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts +2 -0
  139. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  140. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.js +116 -0
  141. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +20 -1
  142. package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
  143. package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
  144. package/dist/test/unit/builder/transfer/transferBuilder.js +84 -0
  145. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +65 -15
  146. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
  147. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  148. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
  149. package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts +2 -0
  150. package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts.map +1 -0
  151. package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +96 -0
  152. package/dist/test/unit/canton.d.ts +2 -0
  153. package/dist/test/unit/canton.d.ts.map +1 -0
  154. package/dist/test/unit/canton.js +705 -0
  155. package/dist/test/unit/index.d.ts +5 -0
  156. package/dist/test/unit/index.d.ts.map +1 -1
  157. package/dist/test/unit/index.js +6 -1
  158. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
  159. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
  160. package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
  161. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
  162. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
  163. package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
  164. package/dist/test/unit/messages/clearSigning.d.ts +2 -0
  165. package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
  166. package/dist/test/unit/messages/clearSigning.js +72 -0
  167. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  168. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  169. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  170. package/dist/test/unit/utils.js +366 -9
  171. package/dist/tsconfig.tsbuildinfo +1 -1
  172. package/package.json +8 -8
@@ -1,9 +1,19 @@
1
- import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
1
+ import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, CantonCommandParams, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, PopulatedIntent, PrebuildTransactionWithIntentOptions, SignedTransaction, SignTransactionOptions, TokenEnablementConfig, TransactionExplanation as BaseTransactionExplanation, TransactionParams, TransactionType, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
+ export interface TransactionExplanation extends BaseTransactionExplanation {
4
+ type: TransactionType;
5
+ }
6
+ export interface ExplainTransactionOptions {
7
+ txHex: string;
8
+ }
9
+ export interface CantonTransactionParams extends TransactionParams {
10
+ cantonCommandParams?: CantonCommandParams;
11
+ }
3
12
  export declare class Canton extends BaseCoin {
4
13
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
5
14
  protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
6
15
  static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
16
+ private getBuilder;
7
17
  /** @inheritDoc */
8
18
  getBaseFactor(): number;
9
19
  /** @inheritDoc */
@@ -14,6 +24,8 @@ export declare class Canton extends BaseCoin {
14
24
  getFullName(): string;
15
25
  /** @inheritDoc */
16
26
  supportsTss(): boolean;
27
+ /** @inheritDoc */
28
+ supportsMessageSigning(): boolean;
17
29
  /** inherited doc */
18
30
  getDefaultMultisigType(): MultisigType;
19
31
  /** inherited doc */
@@ -21,6 +33,8 @@ export declare class Canton extends BaseCoin {
21
33
  getMPCAlgorithm(): MPCAlgorithm;
22
34
  /** @inheritDoc */
23
35
  verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
36
+ private verifyCantonCommandTransaction;
37
+ private relativeSkipPaths;
24
38
  /** @inheritDoc */
25
39
  isWalletAddress(params: TssVerifyAddressOptions): Promise<boolean>;
26
40
  /** @inheritDoc */
@@ -28,12 +42,19 @@ export declare class Canton extends BaseCoin {
28
42
  /** @inheritDoc */
29
43
  generateKeyPair(seed?: Buffer): KeyPair;
30
44
  /** @inheritDoc */
45
+ explainTransaction(params: ExplainTransactionOptions): Promise<TransactionExplanation>;
46
+ /** @inheritDoc */
31
47
  isValidPub(pub: string): boolean;
32
48
  /** @inheritDoc */
33
49
  isValidAddress(address: string): boolean;
34
50
  /** @inheritDoc */
51
+ getTokenEnablementConfig(): TokenEnablementConfig;
52
+ getAddressFromPublicKey(publicKeyHex: string): string;
53
+ /** @inheritDoc */
35
54
  signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
36
55
  /** @inheritDoc */
37
56
  auditDecryptedKey({ multiSigType, prv, publicKey }: AuditDecryptedKeyParams): void;
57
+ /** @inheritDoc */
58
+ setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions): void;
38
59
  }
39
60
  //# sourceMappingURL=canton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EAEtB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAKzE,qBAAa,MAAO,SAAQ,QAAQ;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,kBAAkB;IACX,aAAa,IAAI,MAAM;IAI9B,kBAAkB;IACX,QAAQ,IAAI,MAAM;IAIzB,kBAAkB;IACX,SAAS,IAAI,MAAM;IAI1B,kBAAkB;IACX,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,oBAAoB;IACpB,uCAAuC,IAAI,OAAO;IAIlD,eAAe,IAAI,YAAY;IAI/B,kBAAkB;IACZ,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB3E,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI7E,kBAAkB;IAClB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,kBAAkB;IAClB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMxC,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;CAMnF"}
1
+ {"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EAER,SAAS,EAET,mBAAmB,EAMnB,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,oCAAoC,EACpC,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,IAAI,0BAA0B,EACpD,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAOzE,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,qBAAa,MAAO,SAAQ,QAAQ;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,OAAO,CAAC,UAAU;IAIlB,kBAAkB;IACX,aAAa,IAAI,MAAM;IAI9B,kBAAkB;IACX,QAAQ,IAAI,MAAM;IAIzB,kBAAkB;IACX,SAAS,IAAI,MAAM;IAI1B,kBAAkB;IACX,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,kBAAkB;IAClB,sBAAsB,IAAI,OAAO;IAIjC,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,oBAAoB;IACpB,uCAAuC,IAAI,OAAO;IAIlD,eAAe,IAAI,YAAY;IAI/B,kBAAkB;IACZ,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8F3E,OAAO,CAAC,8BAA8B;IAoItC,OAAO,CAAC,iBAAiB;IAWzB,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBxE,kBAAkB;IACZ,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAcnF,kBAAkB;IAClB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,kBAAkB;IAClB,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAatF,kBAAkB;IAClB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMxC,kBAAkB;IAClB,wBAAwB,IAAI,qBAAqB;IAOjD,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAKrD,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;IAOlF,kBAAkB;IAClB,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;CAsC3G"}
@@ -21,6 +21,9 @@ class Canton extends sdk_core_1.BaseCoin {
21
21
  static createInstance(bitgo, staticsCoin) {
22
22
  return new Canton(bitgo, staticsCoin);
23
23
  }
24
+ getBuilder() {
25
+ return new lib_1.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
26
+ }
24
27
  /** @inheritDoc */
25
28
  getBaseFactor() {
26
29
  return 1e10;
@@ -41,6 +44,10 @@ class Canton extends sdk_core_1.BaseCoin {
41
44
  supportsTss() {
42
45
  return true;
43
46
  }
47
+ /** @inheritDoc */
48
+ supportsMessageSigning() {
49
+ return true;
50
+ }
44
51
  /** inherited doc */
45
52
  getDefaultMultisigType() {
46
53
  return sdk_core_1.multisigTypes.tss;
@@ -55,31 +62,218 @@ class Canton extends sdk_core_1.BaseCoin {
55
62
  /** @inheritDoc */
56
63
  async verifyTransaction(params) {
57
64
  const coinConfig = statics_1.coins.get(this.getChain());
58
- // extract `txParams` when verifying other transaction types
59
- const { txPrebuild: txPrebuild } = params;
65
+ const { txPrebuild: txPrebuild, txParams } = params;
60
66
  const rawTx = txPrebuild.txHex;
61
67
  if (!rawTx) {
62
68
  throw new Error('missing required tx prebuild property txHex');
63
69
  }
64
70
  const txBuilder = new lib_1.TransactionBuilderFactory(coinConfig).from(rawTx);
65
71
  const transaction = txBuilder.transaction;
72
+ const explainedTx = transaction.explainTransaction();
66
73
  switch (transaction.type) {
67
- case sdk_core_1.TransactionType.WalletInitialization: {
68
- // there is no input for this type of transaction, so always return true
74
+ case sdk_core_1.TransactionType.WalletInitialization:
75
+ case sdk_core_1.TransactionType.TransferAccept:
76
+ case sdk_core_1.TransactionType.TransferReject:
77
+ case sdk_core_1.TransactionType.TransferAcknowledge:
78
+ case sdk_core_1.TransactionType.TransferOfferWithdrawn:
79
+ case sdk_core_1.TransactionType.CosignDelegationAccept:
80
+ case sdk_core_1.TransactionType.CosignDelegationProposal:
81
+ case sdk_core_1.TransactionType.AllocationAllocate:
82
+ case sdk_core_1.TransactionType.AllocationRequest:
83
+ case sdk_core_1.TransactionType.EndInvestorOnboardingOffer:
84
+ // There is no recipient info to verify for these transaction types, so always return true.
85
+ return true;
86
+ case sdk_core_1.TransactionType.CantonCommand:
87
+ return this.verifyCantonCommandTransaction(transaction, txParams.cantonCommandParams);
88
+ case sdk_core_1.TransactionType.OneStepPreApproval:
89
+ // Canton is always a TSS wallet. The SDK's buildTokenEnablements passes enableTokens
90
+ // through unchanged for TSS wallets (no conversion to recipients), so txParams.enableTokens
91
+ // is the only source of user intent here.
92
+ //
93
+ // Receiver validation: the receiver of a OneStepPreApproval is always the wallet's root address.
94
+ // We use enableToken.address if explicitly provided, otherwise fall back to
95
+ // wallet.coinSpecific().rootAddress (the Canton party ID stored at wallet creation time).
96
+ // Token name validation: checked when the token is resolvable from statics.
97
+ if (txParams.type === 'enabletoken' &&
98
+ txParams.enableTokens !== undefined &&
99
+ txParams.enableTokens.length > 0) {
100
+ const txData = transaction.toJson();
101
+ const enableToken = txParams.enableTokens[0];
102
+ const walletRootAddress = params.wallet?.coinSpecific?.()?.rootAddress;
103
+ const expectedReceiver = enableToken.address ?? walletRootAddress;
104
+ if (expectedReceiver) {
105
+ // Strip ?memoId suffix if present in the stored address
106
+ const [expectedReceiverBase] = expectedReceiver.split('?memoId=');
107
+ if (txData.receiver !== expectedReceiverBase) {
108
+ throw new Error(`OneStepPreApproval receiver mismatch: expected '${expectedReceiverBase}', got '${txData.receiver}'`);
109
+ }
110
+ }
111
+ if (txData.token !== undefined && txData.token !== enableToken.name) {
112
+ throw new Error(`OneStepPreApproval token name mismatch: expected '${enableToken.name}', got '${txData.token}'`);
113
+ }
114
+ }
115
+ return true;
116
+ case sdk_core_1.TransactionType.Send:
117
+ if (txParams.recipients !== undefined) {
118
+ const filteredRecipients = txParams.recipients?.map((recipient) => {
119
+ const { address, amount, tokenName } = recipient;
120
+ const [addressPart, memoId] = address.split('?memoId=');
121
+ return {
122
+ address: addressPart,
123
+ amount,
124
+ ...(memoId && { memo: memoId }),
125
+ ...(tokenName && { tokenName }),
126
+ };
127
+ });
128
+ const filteredOutputs = explainedTx.outputs?.map((output) => {
129
+ const { address, amount, tokenName, memo } = output;
130
+ return {
131
+ address,
132
+ amount,
133
+ ...(memo && { memo }),
134
+ ...(tokenName && { tokenName }),
135
+ };
136
+ });
137
+ if (JSON.stringify(filteredRecipients) !== JSON.stringify(filteredOutputs)) {
138
+ throw new Error('Tx outputs do not match with expected txParams recipients');
139
+ }
140
+ }
69
141
  return true;
70
- }
71
142
  default: {
72
143
  throw new Error(`unknown transaction type, ${transaction.type}`);
73
144
  }
74
145
  }
75
146
  }
147
+ verifyCantonCommandTransaction(transaction, userParams) {
148
+ if (!userParams) {
149
+ return true;
150
+ }
151
+ const cantonTx = transaction;
152
+ const rawPrepared = cantonTx.prepareCommand?.preparedTransaction;
153
+ if (!rawPrepared) {
154
+ throw new Error('CantonCommand verifyTransaction: missing preparedTransaction protobuf on tx prebuild');
155
+ }
156
+ const decodedCommand = utils_1.default.extractCantonCommandInfo(rawPrepared);
157
+ const userCommand = userParams.command;
158
+ // Input shape is enforced by mpcUtils at build time; here we resolve which branch is present.
159
+ const hasCreate = 'CreateCommand' in userCommand && utils_1.default.isPlainObject(userCommand.CreateCommand);
160
+ const hasExercise = 'ExerciseCommand' in userCommand && utils_1.default.isPlainObject(userCommand.ExerciseCommand);
161
+ if (!hasCreate && !hasExercise) {
162
+ throw new Error(`CantonCommand verifyTransaction: command must contain a CreateCommand or ExerciseCommand wrapper`);
163
+ }
164
+ if (hasCreate && hasExercise) {
165
+ throw new Error(`CantonCommand verifyTransaction: command must contain exactly one of CreateCommand or ExerciseCommand, not both`);
166
+ }
167
+ const userKind = hasCreate ? 'CreateCommand' : 'ExerciseCommand';
168
+ if (decodedCommand.kind !== userKind) {
169
+ throw new Error(`CantonCommand verifyTransaction: command kind mismatch — expected ${userKind}, got ${decodedCommand.kind}`);
170
+ }
171
+ const userInner = userKind === 'CreateCommand'
172
+ ? userCommand.CreateCommand
173
+ : userCommand.ExerciseCommand;
174
+ if (!userInner?.templateId) {
175
+ throw new Error(`CantonCommand verifyTransaction: ${userKind}.templateId must be a non-empty string`);
176
+ }
177
+ // templateId (moduleName + entityName; package id is mutable, so ignored)
178
+ const parsed = utils_1.default.parseCantonTemplateId(userInner.templateId);
179
+ if (!parsed) {
180
+ throw new Error(`CantonCommand verifyTransaction: invalid user templateId '${userInner.templateId}' — expected format 'Pkg:Module:Entity'`);
181
+ }
182
+ if (decodedCommand.templateId.moduleName !== parsed.moduleName ||
183
+ decodedCommand.templateId.entityName !== parsed.entityName) {
184
+ throw new Error(`CantonCommand verifyTransaction: templateId mismatch — expected '${parsed.moduleName}:${parsed.entityName}', got '${decodedCommand.templateId.moduleName}:${decodedCommand.templateId.entityName}'`);
185
+ }
186
+ // Build the inject-as skip set once for use across the contractId and argument checks
187
+ const skipPaths = utils_1.default.normalizeInjectAs(userParams.resolveContracts);
188
+ // metadata.submitterInfo.actAs must contain exactly the same parties as the user's actAs
189
+ if (!Array.isArray(userParams.actAs) || userParams.actAs.length === 0) {
190
+ throw new Error(`CantonCommand verifyTransaction: actAs must be a non-empty array of party IDs`);
191
+ }
192
+ if (!userParams.actAs.every((p) => typeof p === 'string' && p.trim() !== '')) {
193
+ throw new Error(`CantonCommand verifyTransaction: all actAs entries must be non-empty strings`);
194
+ }
195
+ const submitterActAs = cantonTx.cantonCommandActAsParties ?? [];
196
+ if (!utils_1.default.sameElements(submitterActAs, userParams.actAs)) {
197
+ throw new Error(`CantonCommand verifyTransaction: submitterInfo.actAs [${submitterActAs.join(', ')}] does not match user actAs [${userParams.actAs.join(', ')}]`);
198
+ }
199
+ if (userKind === 'ExerciseCommand') {
200
+ const exerciseInner = userInner;
201
+ // choice id
202
+ if (decodedCommand.choice !== exerciseInner.choice) {
203
+ throw new Error(`CantonCommand verifyTransaction: choice mismatch — expected '${exerciseInner.choice}', got '${decodedCommand.choice ?? ''}'`);
204
+ }
205
+ // every on-chain actingParty must be in the user's actAs (prevents privilege escalation)
206
+ const onChainActors = decodedCommand.actingParties ?? [];
207
+ for (const actor of onChainActors) {
208
+ if (!userParams.actAs.includes(actor)) {
209
+ throw new Error(`CantonCommand verifyTransaction: unauthorized acting party '${actor}' on root exercise (not in user actAs)`);
210
+ }
211
+ }
212
+ // contractId — skip when absent/empty or when IMS will inject it via resolveContracts
213
+ if (exerciseInner.contractId !== undefined &&
214
+ exerciseInner.contractId !== '' &&
215
+ !skipPaths.has('ExerciseCommand.contractId')) {
216
+ if (decodedCommand.contractId !== exerciseInner.contractId) {
217
+ throw new Error(`CantonCommand verifyTransaction: contractId mismatch — expected '${exerciseInner.contractId}', got '${decodedCommand.contractId ?? ''}'`);
218
+ }
219
+ }
220
+ // deep argument compare
221
+ const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'ExerciseCommand.choiceArgument.');
222
+ utils_1.default.assertDeepCantonMatch(exerciseInner.choiceArgument, decodedCommand.argument, argumentSkipPaths);
223
+ }
224
+ else {
225
+ const createInner = userInner;
226
+ // deep argument compare
227
+ const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'CreateCommand.createArguments.');
228
+ utils_1.default.assertDeepCantonMatch(createInner.createArguments, decodedCommand.argument, argumentSkipPaths);
229
+ }
230
+ return true;
231
+ }
232
+ relativeSkipPaths(skipPaths, prefix) {
233
+ const out = new Set();
234
+ for (const p of skipPaths) {
235
+ if (p.startsWith(prefix)) {
236
+ const stripped = p.slice(prefix.length);
237
+ if (stripped)
238
+ out.add(stripped);
239
+ }
240
+ }
241
+ return out;
242
+ }
76
243
  /** @inheritDoc */
77
- isWalletAddress(params) {
78
- throw new Error('Method not implemented.');
244
+ async isWalletAddress(params) {
245
+ // TODO: refactor this and use the `verifyEddsaMemoBasedWalletAddress` once published from sdk-core
246
+ // https://bitgoinc.atlassian.net/browse/COIN-6347
247
+ const { keychains, address: newAddress, index } = params;
248
+ const [addressPart, memoId] = newAddress.split('?memoId=');
249
+ if (!this.isValidAddress(addressPart)) {
250
+ throw new sdk_core_1.InvalidAddressError(`invalid address: ${newAddress}`);
251
+ }
252
+ if (memoId && memoId !== `${index}`) {
253
+ throw new sdk_core_1.InvalidAddressError(`invalid memoId index: ${memoId}`);
254
+ }
255
+ const commonKeychain = (0, sdk_core_1.extractCommonKeychain)(keychains);
256
+ const MPC = await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();
257
+ const derivationPath = 'm/0';
258
+ const derivedPublicKey = MPC.deriveUnhardened(commonKeychain, derivationPath).slice(0, 64);
259
+ const publicKeyBase64 = Buffer.from(derivedPublicKey, 'hex').toString('base64');
260
+ const rootAddressFingerprint = utils_1.default.getAddressFromPublicKey(publicKeyBase64);
261
+ const rootAddress = `${rootAddressFingerprint.slice(0, 5)}::${rootAddressFingerprint}`;
262
+ return addressPart === rootAddress;
79
263
  }
80
264
  /** @inheritDoc */
81
- parseTransaction(params) {
82
- throw new Error('Method not implemented.');
265
+ async parseTransaction(params) {
266
+ const txHex = params.txHex;
267
+ if (!txHex) {
268
+ // Message-only signing requests (e.g. CANTON_SIGN_TRANSACTION, CANTON_SIGN_TOPOLOGY)
269
+ // have no transaction hex to parse — return an empty result.
270
+ return {};
271
+ }
272
+ const transactionExplanation = await this.explainTransaction({ txHex });
273
+ if (!transactionExplanation) {
274
+ throw new Error('Invalid transaction');
275
+ }
276
+ return transactionExplanation;
83
277
  }
84
278
  /** @inheritDoc */
85
279
  generateKeyPair(seed) {
@@ -94,6 +288,20 @@ class Canton extends sdk_core_1.BaseCoin {
94
288
  };
95
289
  }
96
290
  /** @inheritDoc */
291
+ explainTransaction(params) {
292
+ const factory = this.getBuilder();
293
+ let rebuiltTransaction;
294
+ const txRaw = params.txHex;
295
+ try {
296
+ const txBuilder = factory.from(txRaw);
297
+ rebuiltTransaction = txBuilder.transaction;
298
+ }
299
+ catch (e) {
300
+ throw new Error('Invalid transaction');
301
+ }
302
+ return rebuiltTransaction.explainTransaction();
303
+ }
304
+ /** @inheritDoc */
97
305
  isValidPub(pub) {
98
306
  return utils_1.default.isValidPublicKey(pub);
99
307
  }
@@ -104,6 +312,17 @@ class Canton extends sdk_core_1.BaseCoin {
104
312
  return utils_1.default.isValidAddress(address);
105
313
  }
106
314
  /** @inheritDoc */
315
+ getTokenEnablementConfig() {
316
+ return {
317
+ requiresTokenEnablement: true,
318
+ supportsMultipleTokenEnablements: false,
319
+ };
320
+ }
321
+ getAddressFromPublicKey(publicKeyHex) {
322
+ const publicKeyBase64 = Buffer.from(publicKeyHex, 'hex').toString('base64');
323
+ return utils_1.default.getAddressFromPublicKey(publicKeyBase64);
324
+ }
325
+ /** @inheritDoc */
107
326
  signTransaction(params) {
108
327
  throw new Error('Method not implemented.');
109
328
  }
@@ -114,6 +333,45 @@ class Canton extends sdk_core_1.BaseCoin {
114
333
  }
115
334
  (0, sdk_lib_mpc_1.auditEddsaPrivateKey)(prv, publicKey ?? '');
116
335
  }
336
+ /** @inheritDoc */
337
+ setCoinSpecificFieldsInIntent(intent, params) {
338
+ if (params.txRequestId) {
339
+ intent.txRequestId = params.txRequestId;
340
+ }
341
+ if (params.transferOfferId) {
342
+ intent.transferOfferId = params.transferOfferId;
343
+ }
344
+ if (params.unspents) {
345
+ intent.unspents = params.unspents;
346
+ }
347
+ if (params.cantonCommandParams) {
348
+ intent.cantonCommandParams = params.cantonCommandParams;
349
+ }
350
+ if (params.endInvestorPartyId) {
351
+ intent.endInvestorPartyId = params.endInvestorPartyId;
352
+ }
353
+ if (params.reason) {
354
+ intent.reason = params.reason;
355
+ }
356
+ if (params.operator) {
357
+ intent.operator = params.operator;
358
+ }
359
+ if (params.provider) {
360
+ intent.provider = params.provider;
361
+ }
362
+ if (params.compliance) {
363
+ intent.compliance = params.compliance;
364
+ }
365
+ if (params.registrar) {
366
+ intent.registrar = params.registrar;
367
+ }
368
+ if (params.clientOnboarder) {
369
+ intent.clientOnboarder = params.clientOnboarder;
370
+ }
371
+ if (params.expirationIso) {
372
+ intent.expirationIso = params.expirationIso;
373
+ }
374
+ }
117
375
  }
118
376
  exports.Canton = Canton;
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFlOEI7QUFDOUIseURBQStEO0FBQy9ELGlEQUF5RTtBQUN6RSwrQkFBa0Q7QUFDbEQsMkNBQXlEO0FBQ3pELHdEQUFnQztBQUVoQyxNQUFhLE1BQU8sU0FBUSxtQkFBUTtJQUdsQyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtJQUNYLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxTQUFTO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLHdCQUFhLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsdUNBQXVDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJ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QTdIRCx3QkE2SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYXVkaXRFZGRzYVByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBDYW50b25LZXlQYWlyIH0gZnJvbSAnLi9saWIva2V5UGFpcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ2FudG9uIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBDYW50b24oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTEwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdjYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQ2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICByZXF1aXJlc1dhbGxldEluaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VkZHNhJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKTtcbiAgICAvLyBleHRyYWN0IGB0eFBhcmFtc2Agd2hlbiB2ZXJpZnlpbmcgb3RoZXIgdHJhbnNhY3Rpb24gdHlwZXNcbiAgICBjb25zdCB7IHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIHN3aXRjaCAodHJhbnNhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246IHtcbiAgICAgICAgLy8gdGhlcmUgaXMgbm8gaW5wdXQgZm9yIHRoaXMgdHlwZSBvZiB0cmFuc2FjdGlvbiwgc28gYWx3YXlzIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHJhbnNhY3Rpb24gdHlwZSwgJHt0cmFuc2FjdGlvbi50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQ2FudG9uS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQ2FudG9uS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjYW50b24gYWRkcmVzc2VzIGFyZSBvZiB0aGUgZm9ybSwgcGFydHlIaW50OjpmaW5nZXJwcmludFxuICAgIC8vIHdoZXJlIHBhcnR5SGludCBpcyBvZiBsZW5ndGggNSBhbmQgZmluZ2VycHJpbnQgaXMgNjggY2hhcmFjdGVycyBsb25nXG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwcnYsIHB1YmxpY0tleSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgIT09IG11bHRpc2lnVHlwZXMudHNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpU2lnVHlwZScpO1xuICAgIH1cbiAgICBhdWRpdEVkZHNhUHJpdmF0ZUtleShwcnYsIHB1YmxpY0tleSA/PyAnJyk7XG4gIH1cbn1cbiJdfQ==
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREE0QjhCO0FBQzlCLHlEQUErRDtBQUMvRCxpREFBeUU7QUFDekUsK0JBQWtEO0FBQ2xELDJDQUF5RDtBQUd6RCx3REFBZ0M7QUFjaEMsTUFBYSxNQUFPLFNBQVEsbUJBQVE7SUFHbEMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGtCQUFrQjtJQUNYLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxTQUFTO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHNC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LE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNWJELHdCQTRiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBCYXNlQ29pbixcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBCaXRHb0Jhc2UsXG4gIENhbnRvbkNvbW1hbmQsXG4gIENhbnRvbkNvbW1hbmRQYXJhbXMsXG4gIENhbnRvbkNyZWF0ZUNvbW1hbmQsXG4gIENhbnRvbkV4ZXJjaXNlQ29tbWFuZCxcbiAgRUREU0FNZXRob2RzLFxuICBleHRyYWN0Q29tbW9uS2V5Y2hhaW4sXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFBvcHVsYXRlZEludGVudCxcbiAgUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVG9rZW5FbmFibGVtZW50Q29uZmlnLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBhdWRpdEVkZHNhUHJpdmF0ZUtleSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIENhbnRvbktleVBhaXIgfSBmcm9tICcuL2xpYi9rZXlQYWlyJztcbmltcG9ydCB7IENhbnRvbkNvbW1hbmRLaW5kLCBUeERhdGEgfSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eEhleDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXJhbXMge1xuICBjYW50b25Db21tYW5kUGFyYW1zPzogQ2FudG9uQ29tbWFuZFBhcmFtcztcbn1cblxuZXhwb3J0IGNsYXNzIENhbnRvbiBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgQ2FudG9uKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTEwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdjYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQ2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c01lc3NhZ2VTaWduaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLnRzcztcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIHJlcXVpcmVzV2FsbGV0SW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWRkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpO1xuICAgIGNvbnN0IHsgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgc3dpdGNoICh0cmFuc2FjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3Q6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlckFja25vd2xlZGdlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJPZmZlcldpdGhkcmF3bjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvc2lnbkRlbGVnYXRpb25BY2NlcHQ6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db3NpZ25EZWxlZ2F0aW9uUHJvcG9zYWw6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uUmVxdWVzdDpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkVuZEludmVzdG9yT25ib2FyZGluZ09mZmVyOlxuICAgICAgICAvLyBUaGVyZSBpcyBubyByZWNpcGllbnQgaW5mbyB0byB2ZXJpZnkgZm9yIHRoZXNlIHRyYW5zYWN0aW9uIHR5cGVzLCBzbyBhbHdheXMgcmV0dXJuIHRydWUuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ2FudG9uQ29tbWFuZDpcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5Q2FudG9uQ29tbWFuZFRyYW5zYWN0aW9uKFxuICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgICh0eFBhcmFtcyBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcykuY2FudG9uQ29tbWFuZFBhcmFtc1xuICAgICAgICApO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuT25lU3RlcFByZUFwcHJvdmFsOlxuICAgICAgICAvLyBDYW50b24gaXMgYWx3YXlzIGEgVFNTIHdhbGxldC4gVGhlIFNESydzIGJ1aWxkVG9rZW5FbmFibGVtZW50cyBwYXNzZXMgZW5hYmxlVG9rZW5zXG4gICAgICAgIC8vIHRocm91Z2ggdW5jaGFuZ2VkIGZvciBUU1Mgd2FsbGV0cyAobm8gY29udmVyc2lvbiB0byByZWNpcGllbnRzKSwgc28gdHhQYXJhbXMuZW5hYmxlVG9rZW5zXG4gICAgICAgIC8vIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiB1c2VyIGludGVudCBoZXJlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBSZWNlaXZlciB2YWxpZGF0aW9uOiB0aGUgcmVjZWl2ZXIgb2YgYSBPbmVTdGVwUHJlQXBwcm92YWwgaXMgYWx3YXlzIHRoZSB3YWxsZXQncyByb290IGFkZHJlc3MuXG4gICAgICAgIC8vIFdlIHVzZSBlbmFibGVUb2tlbi5hZGRyZXNzIGlmIGV4cGxpY2l0bHkgcHJvdmlkZWQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gd2FsbGV0LmNvaW5TcGVjaWZpYygpLnJvb3RBZGRyZXNzICh0aGUgQ2FudG9uIHBhcnR5IElEIHN0b3JlZCBhdCB3YWxsZXQgY3JlYXRpb24gdGltZSkuXG4gICAgICAgIC8vIFRva2VuIG5hbWUgdmFsaWRhdGlvbjogY2hlY2tlZCB3aGVuIHRoZSB0b2tlbiBpcyByZXNvbHZhYmxlIGZyb20gc3RhdGljcy5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR4UGFyYW1zLnR5cGUgPT09ICdlbmFibGV0b2tlbicgJiZcbiAgICAgICAgICB0eFBhcmFtcy5lbmFibGVUb2tlbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR4UGFyYW1zLmVuYWJsZVRva2Vucy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHR4RGF0YSA9IHRyYW5zYWN0aW9uLnRvSnNvbigpIGFzIFR4RGF0YTtcbiAgICAgICAgICBjb25zdCBlbmFibGVUb2tlbiA9IHR4UGFyYW1zLmVuYWJsZVRva2Vuc1swXTtcbiAgICAgICAgICBjb25zdCB3YWxsZXRSb290QWRkcmVzcyA9IHBhcmFtcy53YWxsZXQ/LmNvaW5TcGVjaWZpYz8uKCk/LnJvb3RBZGRyZXNzO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVjZWl2ZXIgPSBlbmFibGVUb2tlbi5hZGRyZXNzID8/IHdhbGxldFJvb3RBZGRyZXNzO1xuICAgICAgICAgIGlmIChleHBlY3RlZFJlY2VpdmVyKSB7XG4gICAgICAgICAgICAvLyBTdHJpcCA/bWVtb0lkIHN1ZmZpeCBpZiBwcmVzZW50IGluIHRoZSBzdG9yZWQgYWRkcmVzc1xuICAgICAgICAgICAgY29uc3QgW2V4cGVjdGVkUmVjZWl2ZXJCYXNlXSA9IGV4cGVjdGVkUmVjZWl2ZXIuc3BsaXQoJz9tZW1vSWQ9Jyk7XG4gICAgICAgICAgICBpZiAodHhEYXRhLnJlY2VpdmVyICE9PSBleHBlY3RlZFJlY2VpdmVyQmFzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYE9uZVN0ZXBQcmVBcHByb3ZhbCByZWNlaXZlciBtaXNtYXRjaDogZXhwZWN0ZWQgJyR7ZXhwZWN0ZWRSZWNlaXZlckJhc2V9JywgZ290ICcke3R4RGF0YS5yZWNlaXZlcn0nYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHhEYXRhLnRva2VuICE9PSB1bmRlZmluZWQgJiYgdHhEYXRhLnRva2VuICE9PSBlbmFibGVUb2tlbi5uYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBPbmVTdGVwUHJlQXBwcm92YWwgdG9rZW4gbmFtZSBtaXNtYXRjaDogZXhwZWN0ZWQgJyR7ZW5hYmxlVG9rZW4ubmFtZX0nLCBnb3QgJyR7dHhEYXRhLnRva2VufSdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGlmICh0eFBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlY2lwaWVudHMgPSB0eFBhcmFtcy5yZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCBhbW91bnQsIHRva2VuTmFtZSB9ID0gcmVjaXBpZW50O1xuICAgICAgICAgICAgY29uc3QgW2FkZHJlc3NQYXJ0LCBtZW1vSWRdID0gYWRkcmVzcy5zcGxpdCgnP21lbW9JZD0nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NQYXJ0LFxuICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICAgIC4uLihtZW1vSWQgJiYgeyBtZW1vOiBtZW1vSWQgfSksXG4gICAgICAgICAgICAgIC4uLih0b2tlbk5hbWUgJiYgeyB0b2tlbk5hbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHM/Lm1hcCgob3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZHJlc3MsIGFtb3VudCwgdG9rZW5OYW1lLCBtZW1vIH0gPSBvdXRwdXQ7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICAgIC4uLihtZW1vICYmIHsgbWVtbyB9KSxcbiAgICAgICAgICAgICAgLi4uKHRva2VuTmFtZSAmJiB7IHRva2VuTmFtZSB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkUmVjaXBpZW50cykgIT09IEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkT3V0cHV0cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkbyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHJhbnNhY3Rpb24gdHlwZSwgJHt0cmFuc2FjdGlvbi50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q2FudG9uQ29tbWFuZFRyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24sXG4gICAgdXNlclBhcmFtczogQ2FudG9uQ29tbWFuZFBhcmFtcyB8IHVuZGVmaW5lZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXVzZXJQYXJhbXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnRvblR4ID0gdHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcmF3UHJlcGFyZWQgPSBjYW50b25UeC5wcmVwYXJlQ29tbWFuZD8ucHJlcGFyZWRUcmFuc2FjdGlvbjtcbiAgICBpZiAoIXJhd1ByZXBhcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IG1pc3NpbmcgcHJlcGFyZWRUcmFuc2FjdGlvbiBwcm90b2J1ZiBvbiB0eCBwcmVidWlsZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZWRDb21tYW5kID0gdXRpbHMuZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKHJhd1ByZXBhcmVkKTtcbiAgICBjb25zdCB1c2VyQ29tbWFuZCA9IHVzZXJQYXJhbXMuY29tbWFuZCBhcyBQYXJ0aWFsPENhbnRvbkNvbW1hbmQ+O1xuXG4gICAgLy8gSW5wdXQgc2hhcGUgaXMgZW5mb3JjZWQgYnkgbXBjVXRpbHMgYXQgYnVpbGQgdGltZTsgaGVyZSB3ZSByZXNvbHZlIHdoaWNoIGJyYW5jaCBpcyBwcmVzZW50LlxuICAgIGNvbnN0IGhhc0NyZWF0ZSA9ICdDcmVhdGVDb21tYW5kJyBpbiB1c2VyQ29tbWFuZCAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHVzZXJDb21tYW5kLkNyZWF0ZUNvbW1hbmQpO1xuICAgIGNvbnN0IGhhc0V4ZXJjaXNlID0gJ0V4ZXJjaXNlQ29tbWFuZCcgaW4gdXNlckNvbW1hbmQgJiYgdXRpbHMuaXNQbGFpbk9iamVjdCh1c2VyQ29tbWFuZC5FeGVyY2lzZUNvbW1hbmQpO1xuICAgIGlmICghaGFzQ3JlYXRlICYmICFoYXNFeGVyY2lzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29tbWFuZCBtdXN0IGNvbnRhaW4gYSBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZCB3cmFwcGVyYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGhhc0NyZWF0ZSAmJiBoYXNFeGVyY2lzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29tbWFuZCBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgb2YgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQsIG5vdCBib3RoYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcktpbmQ6IENhbnRvbkNvbW1hbmRLaW5kID0gaGFzQ3JlYXRlID8gJ0NyZWF0ZUNvbW1hbmQnIDogJ0V4ZXJjaXNlQ29tbWFuZCc7XG4gICAgaWYgKGRlY29kZWRDb21tYW5kLmtpbmQgIT09IHVzZXJLaW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBjb21tYW5kIGtpbmQgbWlzbWF0Y2gg4oCUIGV4cGVjdGVkICR7dXNlcktpbmR9LCBnb3QgJHtkZWNvZGVkQ29tbWFuZC5raW5kfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklubmVyID1cbiAgICAgIHVzZXJLaW5kID09PSAnQ3JlYXRlQ29tbWFuZCdcbiAgICAgICAgPyAodXNlckNvbW1hbmQgYXMgQ2FudG9uQ3JlYXRlQ29tbWFuZCkuQ3JlYXRlQ29tbWFuZFxuICAgICAgICA6ICh1c2VyQ29tbWFuZCBhcyBDYW50b25FeGVyY2lzZUNvbW1hbmQpLkV4ZXJjaXNlQ29tbWFuZDtcblxuICAgIGlmICghdXNlcklubmVyPy50ZW1wbGF0ZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246ICR7dXNlcktpbmR9LnRlbXBsYXRlSWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wbGF0ZUlkIChtb2R1bGVOYW1lICsgZW50aXR5TmFtZTsgcGFja2FnZSBpZCBpcyBtdXRhYmxlLCBzbyBpZ25vcmVkKVxuICAgIGNvbnN0IHBhcnNlZCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCh1c2VySW5uZXIudGVtcGxhdGVJZCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGludmFsaWQgdXNlciB0ZW1wbGF0ZUlkICcke3VzZXJJbm5lci50ZW1wbGF0ZUlkfScg4oCUIGV4cGVjdGVkIGZvcm1hdCAnUGtnOk1vZHVsZTpFbnRpdHknYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGVjb2RlZENvbW1hbmQudGVtcGxhdGVJZC5tb2R1bGVOYW1lICE9PSBwYXJzZWQubW9kdWxlTmFtZSB8fFxuICAgICAgZGVjb2RlZENvbW1hbmQudGVtcGxhdGVJZC5lbnRpdHlOYW1lICE9PSBwYXJzZWQuZW50aXR5TmFtZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogdGVtcGxhdGVJZCBtaXNtYXRjaCDigJQgZXhwZWN0ZWQgJyR7cGFyc2VkLm1vZHVsZU5hbWV9OiR7cGFyc2VkLmVudGl0eU5hbWV9JywgZ290ICcke2RlY29kZWRDb21tYW5kLnRlbXBsYXRlSWQubW9kdWxlTmFtZX06JHtkZWNvZGVkQ29tbWFuZC50ZW1wbGF0ZUlkLmVudGl0eU5hbWV9J2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGhlIGluamVjdC1hcyBza2lwIHNldCBvbmNlIGZvciB1c2UgYWNyb3NzIHRoZSBjb250cmFjdElkIGFuZCBhcmd1bWVudCBjaGVja3NcbiAgICBjb25zdCBza2lwUGF0aHMgPSB1dGlscy5ub3JtYWxpemVJbmplY3RBcyh1c2VyUGFyYW1zLnJlc29sdmVDb250cmFjdHMpO1xuXG4gICAgLy8gbWV0YWRhdGEuc3VibWl0dGVySW5mby5hY3RBcyBtdXN0IGNvbnRhaW4gZXhhY3RseSB0aGUgc2FtZSBwYXJ0aWVzIGFzIHRoZSB1c2VyJ3MgYWN0QXNcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXNlclBhcmFtcy5hY3RBcykgfHwgdXNlclBhcmFtcy5hY3RBcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogYWN0QXMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBwYXJ0eSBJRHNgKTtcbiAgICB9XG4gICAgaWYgKCF1c2VyUGFyYW1zLmFjdEFzLmV2ZXJ5KChwKSA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgcC50cmltKCkgIT09ICcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBhbGwgYWN0QXMgZW50cmllcyBtdXN0IGJlIG5vbi1lbXB0eSBzdHJpbmdzYCk7XG4gICAgfVxuICAgIGNvbnN0IHN1Ym1pdHRlckFjdEFzID0gY2FudG9uVHguY2FudG9uQ29tbWFuZEFjdEFzUGFydGllcyA/PyBbXTtcbiAgICBpZiAoIXV0aWxzLnNhbWVFbGVtZW50cyhzdWJtaXR0ZXJBY3RBcywgdXNlclBhcmFtcy5hY3RBcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IHN1Ym1pdHRlckluZm8uYWN0QXMgWyR7c3VibWl0dGVyQWN0QXMuam9pbihcbiAgICAgICAgICAnLCAnXG4gICAgICAgICl9XSBkb2VzIG5vdCBtYXRjaCB1c2VyIGFjdEFzIFske3VzZXJQYXJhbXMuYWN0QXMuam9pbignLCAnKX1dYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodXNlcktpbmQgPT09ICdFeGVyY2lzZUNvbW1hbmQnKSB7XG4gICAgICBjb25zdCBleGVyY2lzZUlubmVyID0gdXNlcklubmVyIGFzIENhbnRvbkV4ZXJjaXNlQ29tbWFuZFsnRXhlcmNpc2VDb21tYW5kJ107XG5cbiAgICAgIC8vIGNob2ljZSBpZFxuICAgICAgaWYgKGRlY29kZWRDb21tYW5kLmNob2ljZSAhPT0gZXhlcmNpc2VJbm5lci5jaG9pY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBjaG9pY2UgbWlzbWF0Y2gg4oCUIGV4cGVjdGVkICcke2V4ZXJjaXNlSW5uZXIuY2hvaWNlfScsIGdvdCAnJHtcbiAgICAgICAgICAgIGRlY29kZWRDb21tYW5kLmNob2ljZSA/PyAnJ1xuICAgICAgICAgIH0nYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBldmVyeSBvbi1jaGFpbiBhY3RpbmdQYXJ0eSBtdXN0IGJlIGluIHRoZSB1c2VyJ3MgYWN0QXMgKHByZXZlbnRzIHByaXZpbGVnZSBlc2NhbGF0aW9uKVxuICAgICAgY29uc3Qgb25DaGFpbkFjdG9ycyA9IGRlY29kZWRDb21tYW5kLmFjdGluZ1BhcnRpZXMgPz8gW107XG4gICAgICBmb3IgKGNvbnN0IGFjdG9yIG9mIG9uQ2hhaW5BY3RvcnMpIHtcbiAgICAgICAgaWYgKCF1c2VyUGFyYW1zLmFjdEFzLmluY2x1ZGVzKGFjdG9yKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiB1bmF1dGhvcml6ZWQgYWN0aW5nIHBhcnR5ICcke2FjdG9yfScgb24gcm9vdCBleGVyY2lzZSAobm90IGluIHVzZXIgYWN0QXMpYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29udHJhY3RJZCDigJQgc2tpcCB3aGVuIGFic2VudC9lbXB0eSBvciB3aGVuIElNUyB3aWxsIGluamVjdCBpdCB2aWEgcmVzb2x2ZUNvbnRyYWN0c1xuICAgICAgaWYgKFxuICAgICAgICBleGVyY2lzZUlubmVyLmNvbnRyYWN0SWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBleGVyY2lzZUlubmVyLmNvbnRyYWN0SWQgIT09ICcnICYmXG4gICAgICAgICFza2lwUGF0aHMuaGFzKCdFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGRlY29kZWRDb21tYW5kLmNvbnRyYWN0SWQgIT09IGV4ZXJjaXNlSW5uZXIuY29udHJhY3RJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBjb250cmFjdElkIG1pc21hdGNoIOKAlCBleHBlY3RlZCAnJHtleGVyY2lzZUlubmVyLmNvbnRyYWN0SWR9JywgZ290ICcke1xuICAgICAgICAgICAgICBkZWNvZGVkQ29tbWFuZC5jb250cmFjdElkID8/ICcnXG4gICAgICAgICAgICB9J2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGRlZXAgYXJndW1lbnQgY29tcGFyZVxuICAgICAgY29uc3QgYXJndW1lbnRTa2lwUGF0aHMgPSB0aGlzLnJlbGF0aXZlU2tpcFBhdGhzKHNraXBQYXRocywgJ0V4ZXJjaXNlQ29tbWFuZC5jaG9pY2VBcmd1bWVudC4nKTtcbiAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChleGVyY2lzZUlubmVyLmNob2ljZUFyZ3VtZW50LCBkZWNvZGVkQ29tbWFuZC5hcmd1bWVudCwgYXJndW1lbnRTa2lwUGF0aHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjcmVhdGVJbm5lciA9IHVzZXJJbm5lciBhcyBDYW50b25DcmVhdGVDb21tYW5kWydDcmVhdGVDb21tYW5kJ107XG5cbiAgICAgIC8vIGRlZXAgYXJndW1lbnQgY29tcGFyZVxuICAgICAgY29uc3QgYXJndW1lbnRTa2lwUGF0aHMgPSB0aGlzLnJlbGF0aXZlU2tpcFBhdGhzKHNraXBQYXRocywgJ0NyZWF0ZUNvbW1hbmQuY3JlYXRlQXJndW1lbnRzLicpO1xuICAgICAgdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGNyZWF0ZUlubmVyLmNyZWF0ZUFyZ3VtZW50cywgZGVjb2RlZENvbW1hbmQuYXJndW1lbnQsIGFyZ3VtZW50U2tpcFBhdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsYXRpdmVTa2lwUGF0aHMoc2tpcFBhdGhzOiBTZXQ8c3RyaW5nPiwgcHJlZml4OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBwIG9mIHNraXBQYXRocykge1xuICAgICAgaWYgKHAuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IHN0cmlwcGVkID0gcC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgaWYgKHN0cmlwcGVkKSBvdXQuYWRkKHN0cmlwcGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgYW5kIHVzZSB0aGUgYHZlcmlmeUVkZHNhTWVtb0Jhc2VkV2FsbGV0QWRkcmVzc2Agb25jZSBwdWJsaXNoZWQgZnJvbSBzZGstY29yZVxuICAgIC8vIGh0dHBzOi8vYml0Z29pbmMuYXRsYXNzaWFuLm5ldC9icm93c2UvQ09JTi02MzQ3XG4gICAgY29uc3QgeyBrZXljaGFpbnMsIGFkZHJlc3M6IG5ld0FkZHJlc3MsIGluZGV4IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgW2FkZHJlc3NQYXJ0LCBtZW1vSWRdID0gbmV3QWRkcmVzcy5zcGxpdCgnP21lbW9JZD0nKTtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzc1BhcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke25ld0FkZHJlc3N9YCk7XG4gICAgfVxuICAgIGlmIChtZW1vSWQgJiYgbWVtb0lkICE9PSBgJHtpbmRleH1gKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBtZW1vSWQgaW5kZXg6ICR7bWVtb0lkfWApO1xuICAgIH1cbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IGV4dHJhY3RDb21tb25LZXljaGFpbihrZXljaGFpbnMpO1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVERFNBTWV0aG9kcy5nZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICBjb25zdCBkZXJpdmVkUHVibGljS2V5ID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW4sIGRlcml2YXRpb25QYXRoKS5zbGljZSgwLCA2NCk7XG4gICAgY29uc3QgcHVibGljS2V5QmFzZTY0ID0gQnVmZmVyLmZyb20oZGVyaXZlZFB1YmxpY0tleSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCByb290QWRkcmVzc0ZpbmdlcnByaW50ID0gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5QmFzZTY0KTtcbiAgICBjb25zdCByb290QWRkcmVzcyA9IGAke3Jvb3RBZGRyZXNzRmluZ2VycHJpbnQuc2xpY2UoMCwgNSl9Ojoke3Jvb3RBZGRyZXNzRmluZ2VycHJpbnR9YDtcbiAgICByZXR1cm4gYWRkcmVzc1BhcnQgPT09IHJvb3RBZGRyZXNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgLy8gTWVzc2FnZS1vbmx5IHNpZ25pbmcgcmVxdWVzdHMgKGUuZy4gQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04sIENBTlRPTl9TSUdOX1RPUE9MT0dZKVxuICAgICAgLy8gaGF2ZSBubyB0cmFuc2FjdGlvbiBoZXggdG8gcGFyc2Ug4oCUIHJldHVybiBhbiBlbXB0eSByZXN1bHQuXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgIGlmICghdHJhbnNhY3Rpb25FeHBsYW5hdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIHVua25vd24gYXMgUGFyc2VkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBDYW50b25LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBDYW50b25LZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyKCk7XG4gICAgbGV0IHJlYnVpbHRUcmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHR4UmF3ID0gcGFyYW1zLnR4SGV4O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHhSYXcpO1xuICAgICAgcmVidWlsdFRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVidWlsdFRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIGNhbnRvbiBhZGRyZXNzZXMgYXJlIG9mIHRoZSBmb3JtLCBwYXJ0eUhpbnQ6OmZpbmdlcnByaW50XG4gICAgLy8gd2hlcmUgcGFydHlIaW50IGlzIG9mIGxlbmd0aCA1IGFuZCBmaW5nZXJwcmludCBpcyA2OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXlIZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHVibGljS2V5QmFzZTY0ID0gQnVmZmVyLmZyb20ocHVibGljS2V5SGV4LCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIHJldHVybiB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXlCYXNlNjQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwcnYsIHB1YmxpY0tleSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgIT09IG11bHRpc2lnVHlwZXMudHNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpU2lnVHlwZScpO1xuICAgIH1cbiAgICBhdWRpdEVkZHNhUHJpdmF0ZUtleShwcnYsIHB1YmxpY0tleSA/PyAnJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc2V0Q29pblNwZWNpZmljRmllbGRzSW5JbnRlbnQoaW50ZW50OiBQb3B1bGF0ZWRJbnRlbnQsIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtcy50eFJlcXVlc3RJZCkge1xuICAgICAgaW50ZW50LnR4UmVxdWVzdElkID0gcGFyYW1zLnR4UmVxdWVzdElkO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnRyYW5zZmVyT2ZmZXJJZCkge1xuICAgICAgaW50ZW50LnRyYW5zZmVyT2ZmZXJJZCA9IHBhcmFtcy50cmFuc2Zlck9mZmVySWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMudW5zcGVudHMpIHtcbiAgICAgIGludGVudC51bnNwZW50cyA9IHBhcmFtcy51bnNwZW50cztcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jYW50b25Db21tYW5kUGFyYW1zKSB7XG4gICAgICBpbnRlbnQuY2FudG9uQ29tbWFuZFBhcmFtcyA9IHBhcmFtcy5jYW50b25Db21tYW5kUGFyYW1zO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmVuZEludmVzdG9yUGFydHlJZCkge1xuICAgICAgaW50ZW50LmVuZEludmVzdG9yUGFydHlJZCA9IHBhcmFtcy5lbmRJbnZlc3RvclBhcnR5SWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMucmVhc29uKSB7XG4gICAgICBpbnRlbnQucmVhc29uID0gcGFyYW1zLnJlYXNvbjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5vcGVyYXRvcikge1xuICAgICAgaW50ZW50Lm9wZXJhdG9yID0gcGFyYW1zLm9wZXJhdG9yO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnByb3ZpZGVyKSB7XG4gICAgICBpbnRlbnQucHJvdmlkZXIgPSBwYXJhbXMucHJvdmlkZXI7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY29tcGxpYW5jZSkge1xuICAgICAgaW50ZW50LmNvbXBsaWFuY2UgPSBwYXJhbXMuY29tcGxpYW5jZTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5yZWdpc3RyYXIpIHtcbiAgICAgIGludGVudC5yZWdpc3RyYXIgPSBwYXJhbXMucmVnaXN0cmFyO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNsaWVudE9uYm9hcmRlcikge1xuICAgICAgaW50ZW50LmNsaWVudE9uYm9hcmRlciA9IHBhcmFtcy5jbGllbnRPbmJvYXJkZXI7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZXhwaXJhdGlvbklzbykge1xuICAgICAgaW50ZW50LmV4cGlyYXRpb25Jc28gPSBwYXJhbXMuZXhwaXJhdGlvbklzbztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
2
+ import { CantonTokenConfig } from '@bitgo-beta/statics';
3
+ import { Canton } from './canton';
4
+ export declare class CantonToken extends Canton {
5
+ readonly tokenConfig: CantonTokenConfig;
6
+ constructor(bitgo: BitGoBase, tokenConfig: CantonTokenConfig);
7
+ static createTokenConstructor(config: CantonTokenConfig): CoinConstructor;
8
+ static createTokenConstructors(tokenConfig?: CantonTokenConfig[]): NamedCoinConstructor[];
9
+ get name(): string;
10
+ get coin(): string;
11
+ get baseUrl(): string;
12
+ get contractAddress(): string;
13
+ get decimalPlaces(): number;
14
+ getChain(): string;
15
+ getBaseChain(): string;
16
+ getFullName(): string;
17
+ getBaseFactor(): number;
18
+ }
19
+ //# sourceMappingURL=cantonToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cantonToken.d.ts","sourceRoot":"","sources":["../../src/cantonToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAS,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,WAAY,SAAQ,MAAM;IACrC,SAAgB,WAAW,EAAE,iBAAiB,CAAC;gBAEnC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB;IAM5D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe;IAIzE,MAAM,CAAC,uBAAuB,CAC5B,WAAW,GAAE,iBAAiB,EAAuE,GACpG,oBAAoB,EAAE;IASzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CantonToken = void 0;
4
+ const statics_1 = require("@bitgo-beta/statics");
5
+ const canton_1 = require("./canton");
6
+ class CantonToken extends canton_1.Canton {
7
+ constructor(bitgo, tokenConfig) {
8
+ const staticsCoin = tokenConfig.network === statics_1.NetworkType.MAINNET ? statics_1.coins.get('canton') : statics_1.coins.get('tcanton');
9
+ super(bitgo, staticsCoin);
10
+ this.tokenConfig = tokenConfig;
11
+ }
12
+ static createTokenConstructor(config) {
13
+ return (bitgo) => new CantonToken(bitgo, config);
14
+ }
15
+ static createTokenConstructors(tokenConfig = [...statics_1.tokens.bitcoin.canton.tokens, ...statics_1.tokens.testnet.canton.tokens]) {
16
+ const tokensCtors = [];
17
+ for (const token of tokenConfig) {
18
+ const tokenConstructor = CantonToken.createTokenConstructor(token);
19
+ tokensCtors.push({ name: token.type, coinConstructor: tokenConstructor });
20
+ }
21
+ return tokensCtors;
22
+ }
23
+ get name() {
24
+ return this.tokenConfig.name;
25
+ }
26
+ get coin() {
27
+ return this.tokenConfig.coin;
28
+ }
29
+ get baseUrl() {
30
+ return this.tokenConfig.baseUrl;
31
+ }
32
+ get contractAddress() {
33
+ return this.tokenConfig.contractAddress;
34
+ }
35
+ get decimalPlaces() {
36
+ return this.tokenConfig.decimalPlaces;
37
+ }
38
+ getChain() {
39
+ return this.tokenConfig.type;
40
+ }
41
+ getBaseChain() {
42
+ return this.coin;
43
+ }
44
+ getFullName() {
45
+ return 'Canton Token';
46
+ }
47
+ getBaseFactor() {
48
+ return Math.pow(10, this.tokenConfig.decimalPlaces);
49
+ }
50
+ }
51
+ exports.CantonToken = CantonToken;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FudG9uVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQW9GO0FBRXBGLHFDQUFrQztBQUVsQyxNQUFhLFdBQVksU0FBUSxlQUFNO0lBR3JDLFlBQVksS0FBZ0IsRUFBRSxXQUE4QjtRQUMxRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdHLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUF5QjtRQUNyRCxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQzVCLGNBQW1DLENBQUMsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUVyRyxNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUEzREQsa0NBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlLCBDb2luQ29uc3RydWN0b3IsIE5hbWVkQ29pbkNvbnN0cnVjdG9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIENhbnRvblRva2VuQ29uZmlnLCBOZXR3b3JrVHlwZSwgdG9rZW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IENhbnRvbiB9IGZyb20gJy4vY2FudG9uJztcblxuZXhwb3J0IGNsYXNzIENhbnRvblRva2VuIGV4dGVuZHMgQ2FudG9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBDYW50b25Ub2tlbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogQ2FudG9uVG9rZW5Db25maWcpIHtcbiAgICBjb25zdCBzdGF0aWNzQ29pbiA9IHRva2VuQ29uZmlnLm5ldHdvcmsgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyBjb2lucy5nZXQoJ2NhbnRvbicpIDogY29pbnMuZ2V0KCd0Y2FudG9uJyk7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgICB0aGlzLnRva2VuQ29uZmlnID0gdG9rZW5Db25maWc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IENhbnRvblRva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBDYW50b25Ub2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhcbiAgICB0b2tlbkNvbmZpZzogQ2FudG9uVG9rZW5Db25maWdbXSA9IFsuLi50b2tlbnMuYml0Y29pbi5jYW50b24udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5jYW50b24udG9rZW5zXVxuICApOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICBjb25zdCB0b2tlbnNDdG9yczogTmFtZWRDb2luQ29uc3RydWN0b3JbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5Db25maWcpIHtcbiAgICAgIGNvbnN0IHRva2VuQ29uc3RydWN0b3IgPSBDYW50b25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuKTtcbiAgICAgIHRva2Vuc0N0b3JzLnB1c2goeyBuYW1lOiB0b2tlbi50eXBlLCBjb2luQ29uc3RydWN0b3I6IHRva2VuQ29uc3RydWN0b3IgfSk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnNDdG9ycztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIGdldCBjb2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29pbjtcbiAgfVxuXG4gIGdldCBiYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuYmFzZVVybDtcbiAgfVxuXG4gIGdldCBjb250cmFjdEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5jb250cmFjdEFkZHJlc3M7XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2luO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0NhbnRvbiBUb2tlbic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXMpO1xuICB9XG59XG4iXX0=
@@ -2,4 +2,5 @@ export * from './lib';
2
2
  export * from './canton';
3
3
  export * from './tcanton';
4
4
  export * from './register';
5
+ export * from './cantonToken';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
package/dist/src/index.js CHANGED
@@ -18,4 +18,5 @@ __exportStar(require("./lib"), exports);
18
18
  __exportStar(require("./canton"), exports);
19
19
  __exportStar(require("./tcanton"), exports);
20
20
  __exportStar(require("./register"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliJztcbmV4cG9ydCAqIGZyb20gJy4vY2FudG9uJztcbmV4cG9ydCAqIGZyb20gJy4vdGNhbnRvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbiJdfQ==
21
+ __exportStar(require("./cantonToken"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQixnREFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG5leHBvcnQgKiBmcm9tICcuL2NhbnRvbic7XG5leHBvcnQgKiBmcm9tICcuL3RjYW50b24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlcic7XG5leHBvcnQgKiBmcm9tICcuL2NhbnRvblRva2VuJztcbiJdfQ==