@bitgo-beta/sdk-coin-sol 7.6.4-beta.556 → 7.6.4-beta.558

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.
@@ -20,4 +20,5 @@ export { WalletInitializationBuilder } from './walletInitializationBuilder';
20
20
  export { Interface, Utils };
21
21
  export { MessageBuilderFactory } from './messages';
22
22
  export { explainSolTransaction, ExplainTransactionWasmOptions } from './explainTransactionWasm';
23
+ export { MintExtensionReadResult, assertExtensionCompatibility, extensionTypeNames, mapModeledExtensions, parseMintExtensions, readMintExtensions, } from './tokenExtensions';
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.explainSolTransaction = exports.MessageBuilderFactory = exports.Utils = exports.Interface = exports.WalletInitializationBuilder = exports.TransferBuilderV2 = exports.TransferBuilder = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.TokenTransferBuilder = exports.StakingWithdrawBuilder = exports.StakingRawMsgAuthorizeBuilder = exports.StakingDelegateBuilder = exports.StakingDeactivateBuilder = exports.StakingAuthorizeBuilder = exports.StakingActivateBuilder = exports.KeyPair = exports.CustomInstructionBuilder = exports.CloseAtaBuilder = exports.AtaInitializationBuilder = void 0;
36
+ exports.readMintExtensions = exports.parseMintExtensions = exports.mapModeledExtensions = exports.extensionTypeNames = exports.assertExtensionCompatibility = exports.explainSolTransaction = exports.MessageBuilderFactory = exports.Utils = exports.Interface = exports.WalletInitializationBuilder = exports.TransferBuilderV2 = exports.TransferBuilder = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.TokenTransferBuilder = exports.StakingWithdrawBuilder = exports.StakingRawMsgAuthorizeBuilder = exports.StakingDelegateBuilder = exports.StakingDeactivateBuilder = exports.StakingAuthorizeBuilder = exports.StakingActivateBuilder = exports.KeyPair = exports.CustomInstructionBuilder = exports.CloseAtaBuilder = exports.AtaInitializationBuilder = void 0;
37
37
  const Interface = __importStar(require("./iface"));
38
38
  exports.Interface = Interface;
39
39
  const Utils = __importStar(require("./utils"));
@@ -76,4 +76,10 @@ var messages_1 = require("./messages");
76
76
  Object.defineProperty(exports, "MessageBuilderFactory", { enumerable: true, get: function () { return messages_1.MessageBuilderFactory; } });
77
77
  var explainTransactionWasm_1 = require("./explainTransactionWasm");
78
78
  Object.defineProperty(exports, "explainSolTransaction", { enumerable: true, get: function () { return explainTransactionWasm_1.explainSolTransaction; } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFxQztBQW9CNUIsOEJBQVM7QUFuQmxCLCtDQUFpQztBQW1CYixzQkFBSztBQWpCekIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLHFFQUFvRTtBQUEzRCxrSUFBQSx1QkFBdUIsT0FBQTtBQUNoQyx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFDakMsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxtRUFBa0U7QUFBekQsZ0lBQUEsc0JBQXNCLE9BQUE7QUFDL0IsK0RBQThEO0FBQXJELDRIQUFBLG9CQUFvQixPQUFBO0FBQzdCLDZDQUE0QztBQUFuQywwR0FBQSxXQUFXLE9BQUE7QUFDcEIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLHlFQUF3RTtBQUEvRCxzSUFBQSx5QkFBeUIsT0FBQTtBQUNsQyxxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLHlEQUF3RDtBQUEvQyxzSEFBQSxpQkFBaUIsT0FBQTtBQUMxQiw2RUFBNEU7QUFBbkUsMElBQUEsMkJBQTJCLE9BQUE7QUFFcEMsdUNBQW1EO0FBQTFDLGlIQUFBLHFCQUFxQixPQUFBO0FBQzlCLG1FQUFnRztBQUF2RiwrSEFBQSxxQkFBcUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEludGVyZmFjZSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgeyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0YUluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBDbG9zZUF0YUJ1aWxkZXIgfSBmcm9tICcuL2Nsb3NlQXRhQnVpbGRlcic7XG5leHBvcnQgeyBDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2N1c3RvbUluc3RydWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmV4cG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ0F1dGhvcml6ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdBdXRob3JpemVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlciB9IGZyb20gJy4vc3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdEZWxlZ2F0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1Jhd01zZ0F1dGhvcml6ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdSYXdNc2dBdXRob3JpemVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdXaXRoZHJhd0J1aWxkZXInO1xuZXhwb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Rva2VuVHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlclYyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXJWMic7XG5leHBvcnQgeyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3dhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBJbnRlcmZhY2UsIFV0aWxzIH07XG5leHBvcnQgeyBNZXNzYWdlQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL21lc3NhZ2VzJztcbmV4cG9ydCB7IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbiwgRXhwbGFpblRyYW5zYWN0aW9uV2FzbU9wdGlvbnMgfSBmcm9tICcuL2V4cGxhaW5UcmFuc2FjdGlvbldhc20nO1xuIl19
79
+ var tokenExtensions_1 = require("./tokenExtensions");
80
+ Object.defineProperty(exports, "assertExtensionCompatibility", { enumerable: true, get: function () { return tokenExtensions_1.assertExtensionCompatibility; } });
81
+ Object.defineProperty(exports, "extensionTypeNames", { enumerable: true, get: function () { return tokenExtensions_1.extensionTypeNames; } });
82
+ Object.defineProperty(exports, "mapModeledExtensions", { enumerable: true, get: function () { return tokenExtensions_1.mapModeledExtensions; } });
83
+ Object.defineProperty(exports, "parseMintExtensions", { enumerable: true, get: function () { return tokenExtensions_1.parseMintExtensions; } });
84
+ Object.defineProperty(exports, "readMintExtensions", { enumerable: true, get: function () { return tokenExtensions_1.readMintExtensions; } });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFxQztBQW9CNUIsOEJBQVM7QUFuQmxCLCtDQUFpQztBQW1CYixzQkFBSztBQWpCekIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLHFFQUFvRTtBQUEzRCxrSUFBQSx1QkFBdUIsT0FBQTtBQUNoQyx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFDakMsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxtRUFBa0U7QUFBekQsZ0lBQUEsc0JBQXNCLE9BQUE7QUFDL0IsK0RBQThEO0FBQXJELDRIQUFBLG9CQUFvQixPQUFBO0FBQzdCLDZDQUE0QztBQUFuQywwR0FBQSxXQUFXLE9BQUE7QUFDcEIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLHlFQUF3RTtBQUEvRCxzSUFBQSx5QkFBeUIsT0FBQTtBQUNsQyxxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLHlEQUF3RDtBQUEvQyxzSEFBQSxpQkFBaUIsT0FBQTtBQUMxQiw2RUFBNEU7QUFBbkUsMElBQUEsMkJBQTJCLE9BQUE7QUFFcEMsdUNBQW1EO0FBQTFDLGlIQUFBLHFCQUFxQixPQUFBO0FBQzlCLG1FQUFnRztBQUF2RiwrSEFBQSxxQkFBcUIsT0FBQTtBQUM5QixxREFPMkI7QUFMekIsK0hBQUEsNEJBQTRCLE9BQUE7QUFDNUIscUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsdUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsc0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIscUhBQUEsa0JBQWtCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJbnRlcmZhY2UgZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHsgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyIH0gZnJvbSAnLi9hdGFJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgQ2xvc2VBdGFCdWlsZGVyIH0gZnJvbSAnLi9jbG9zZUF0YUJ1aWxkZXInO1xuZXhwb3J0IHsgQ3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9jdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBTdGFraW5nQWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQWN0aXZhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdBdXRob3JpemVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQXV0aG9yaXplQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nRGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nRGVsZWdhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdSYXdNc2dBdXRob3JpemVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nUmF3TXNnQXV0aG9yaXplQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nV2l0aGRyYXdCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nV2l0aGRyYXdCdWlsZGVyJztcbmV4cG9ydCB7IFRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90b2tlblRyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5leHBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2ZlckJ1aWxkZXJWMiB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyVjInO1xuZXhwb3J0IHsgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIH0gZnJvbSAnLi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgSW50ZXJmYWNlLCBVdGlscyB9O1xuZXhwb3J0IHsgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgeyBleHBsYWluU29sVHJhbnNhY3Rpb24sIEV4cGxhaW5UcmFuc2FjdGlvbldhc21PcHRpb25zIH0gZnJvbSAnLi9leHBsYWluVHJhbnNhY3Rpb25XYXNtJztcbmV4cG9ydCB7XG4gIE1pbnRFeHRlbnNpb25SZWFkUmVzdWx0LFxuICBhc3NlcnRFeHRlbnNpb25Db21wYXRpYmlsaXR5LFxuICBleHRlbnNpb25UeXBlTmFtZXMsXG4gIG1hcE1vZGVsZWRFeHRlbnNpb25zLFxuICBwYXJzZU1pbnRFeHRlbnNpb25zLFxuICByZWFkTWludEV4dGVuc2lvbnMsXG59IGZyb20gJy4vdG9rZW5FeHRlbnNpb25zJztcbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { SolTokenExtensions, SolTokenExtensionType } from '@bitgo-beta/statics';
2
+ import { type Mint } from '@solana/spl-token';
3
+ import { Commitment, Connection, PublicKey } from '@solana/web3.js';
4
+ /**
5
+ * Result of reading a Token-2022 mint's extension data.
6
+ *
7
+ * `detectedTypeNames` lists EVERY extension present on the mint — including ones BitGo does
8
+ * not model — so callers can run the onboarding safety gate (`getUnsupportedSolTokenExtensions`).
9
+ * `extensions` is the typed, storable config for the extensions BitGo does model.
10
+ */
11
+ export interface MintExtensionReadResult {
12
+ detectedTypeNames: string[];
13
+ extensions: SolTokenExtensions;
14
+ }
15
+ /** Human-readable names of every extension type present on the mint. */
16
+ export declare function extensionTypeNames(mintInfo: Mint): string[];
17
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
18
+ export declare function mapModeledExtensions(detectedTypeNames: readonly string[]): SolTokenExtensionType[];
19
+ /**
20
+ * Enforce the protocol-level incompatibility: Transfer Hook and Confidential
21
+ * Transfer cannot coexist on the same mint. Pure — unit-testable without chain data.
22
+ */
23
+ export declare function assertExtensionCompatibility(detectedTypeNames: readonly string[]): void;
24
+ /**
25
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
26
+ * so it can be unit-tested against recorded mint fixtures.
27
+ */
28
+ export declare function parseMintExtensions(mintInfo: Mint): MintExtensionReadResult;
29
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
30
+ export declare function readMintExtensions(connection: Connection, mint: string | PublicKey, commitment?: Commitment): Promise<MintExtensionReadResult>;
31
+ //# sourceMappingURL=tokenExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExtensions.d.ts","sourceRoot":"","sources":["../../../../src/lib/tokenExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAUL,KAAK,IAAI,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAcD,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,CAK3D;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,qBAAqB,EAAE,CASlG;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAMvF;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,GAAG,uBAAuB,CAyD3E;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,UAAwB,GACnC,OAAO,CAAC,uBAAuB,CAAC,CAIlC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extensionTypeNames = extensionTypeNames;
4
+ exports.mapModeledExtensions = mapModeledExtensions;
5
+ exports.assertExtensionCompatibility = assertExtensionCompatibility;
6
+ exports.parseMintExtensions = parseMintExtensions;
7
+ exports.readMintExtensions = readMintExtensions;
8
+ const statics_1 = require("@bitgo-beta/statics");
9
+ const spl_token_1 = require("@solana/spl-token");
10
+ const web3_js_1 = require("@solana/web3.js");
11
+ /** Map from `@solana/spl-token` ExtensionType names to BitGo's modeled extension types. */
12
+ const EXTENSION_NAME_MAP = {
13
+ TransferFeeConfig: statics_1.SolTokenExtensionType.TransferFee,
14
+ TransferHook: statics_1.SolTokenExtensionType.TransferHook,
15
+ PermanentDelegate: statics_1.SolTokenExtensionType.PermanentDelegate,
16
+ InterestBearingConfig: statics_1.SolTokenExtensionType.InterestBearing,
17
+ DefaultAccountState: statics_1.SolTokenExtensionType.DefaultAccountState,
18
+ ScaledUiAmountConfig: statics_1.SolTokenExtensionType.ScaledUiAmount,
19
+ };
20
+ const CONFIDENTIAL_TRANSFER_NAMES = ['ConfidentialTransferMint', 'ConfidentialTransferFeeConfig'];
21
+ /** Human-readable names of every extension type present on the mint. */
22
+ function extensionTypeNames(mintInfo) {
23
+ if (mintInfo.tlvData.length === 0) {
24
+ return [];
25
+ }
26
+ return (0, spl_token_1.getExtensionTypes)(mintInfo.tlvData).map((t) => spl_token_1.ExtensionType[t] ?? `unknown(${t})`);
27
+ }
28
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
29
+ function mapModeledExtensions(detectedTypeNames) {
30
+ const modeled = [];
31
+ for (const name of detectedTypeNames) {
32
+ const mapped = EXTENSION_NAME_MAP[name];
33
+ if (mapped !== undefined && !modeled.includes(mapped)) {
34
+ modeled.push(mapped);
35
+ }
36
+ }
37
+ return modeled;
38
+ }
39
+ /**
40
+ * Enforce the protocol-level incompatibility: Transfer Hook and Confidential
41
+ * Transfer cannot coexist on the same mint. Pure — unit-testable without chain data.
42
+ */
43
+ function assertExtensionCompatibility(detectedTypeNames) {
44
+ const hasHook = detectedTypeNames.includes('TransferHook');
45
+ const hasConfidential = detectedTypeNames.some((n) => CONFIDENTIAL_TRANSFER_NAMES.includes(n));
46
+ if (hasHook && hasConfidential) {
47
+ throw new Error('Mint declares both Transfer Hook and Confidential Transfer, which cannot coexist');
48
+ }
49
+ }
50
+ function toBase58(key) {
51
+ return key ? key.toBase58() : undefined;
52
+ }
53
+ /**
54
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
55
+ * so it can be unit-tested against recorded mint fixtures.
56
+ */
57
+ function parseMintExtensions(mintInfo) {
58
+ const detectedTypeNames = extensionTypeNames(mintInfo);
59
+ assertExtensionCompatibility(detectedTypeNames);
60
+ const extensions = { detected: mapModeledExtensions(detectedTypeNames) };
61
+ const authorities = {
62
+ mintAuthority: toBase58(mintInfo.mintAuthority),
63
+ freezeAuthority: toBase58(mintInfo.freezeAuthority),
64
+ };
65
+ const feeConfig = (0, spl_token_1.getTransferFeeConfig)(mintInfo);
66
+ if (feeConfig) {
67
+ extensions.transferFee = {
68
+ transferFeeBasisPoints: feeConfig.newerTransferFee.transferFeeBasisPoints,
69
+ maximumFee: feeConfig.newerTransferFee.maximumFee.toString(),
70
+ };
71
+ authorities.transferFeeConfigAuthority = toBase58(feeConfig.transferFeeConfigAuthority);
72
+ authorities.withdrawWithheldAuthority = toBase58(feeConfig.withdrawWithheldAuthority);
73
+ }
74
+ const hook = (0, spl_token_1.getTransferHook)(mintInfo);
75
+ if (hook) {
76
+ extensions.transferHookProgramId = hook.programId.toBase58();
77
+ }
78
+ const delegate = (0, spl_token_1.getPermanentDelegate)(mintInfo);
79
+ if (delegate?.delegate) {
80
+ authorities.permanentDelegate = delegate.delegate.toBase58();
81
+ }
82
+ const interest = (0, spl_token_1.getInterestBearingMintConfigState)(mintInfo);
83
+ if (interest) {
84
+ extensions.interestBearing = { rateBasisPoints: interest.currentRate };
85
+ authorities.rateAuthority = toBase58(interest.rateAuthority);
86
+ }
87
+ // DefaultAccountState is a single byte (AccountState). Decoded generically to avoid depending
88
+ // on a version-specific typed getter. permissionlessThaw is NOT on-chain — resolved separately
89
+ // at onboarding; defaults false until confirmed.
90
+ const defaultStateData = (0, spl_token_1.getExtensionData)(spl_token_1.ExtensionType.DefaultAccountState, mintInfo.tlvData);
91
+ if (defaultStateData) {
92
+ extensions.defaultAccountState = {
93
+ frozen: defaultStateData[0] === spl_token_1.AccountState.Frozen,
94
+ permissionlessThaw: false,
95
+ };
96
+ }
97
+ // NOTE: ScaledUiAmount config parsing (initialMultiplier) is intentionally deferred — the typed
98
+ // getter is not available in @solana/spl-token@0.4.9. The extension is still *detected* above
99
+ // (so the safety gate sees it); populating scaledUiAmount.initialMultiplier is a follow-up that
100
+ // bumps @solana/spl-token to a version exposing getScaledUiAmountConfig. See PR for 3.4.
101
+ if (Object.values(authorities).some((v) => v !== undefined)) {
102
+ extensions.authorities = authorities;
103
+ }
104
+ return { detectedTypeNames, extensions };
105
+ }
106
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
107
+ async function readMintExtensions(connection, mint, commitment = 'finalized') {
108
+ const mintPubkey = typeof mint === 'string' ? new web3_js_1.PublicKey(mint) : mint;
109
+ const mintInfo = await (0, spl_token_1.getMint)(connection, mintPubkey, commitment, spl_token_1.TOKEN_2022_PROGRAM_ID);
110
+ return parseMintExtensions(mintInfo);
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5FeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b2tlbkV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5Q0EsZ0RBS0M7QUFHRCxvREFTQztBQU1ELG9FQU1DO0FBVUQsa0RBeURDO0FBR0QsZ0RBUUM7QUFwSkQsaURBQWdGO0FBQ2hGLGlEQVkyQjtBQUMzQiw2Q0FBb0U7QUFjcEUsMkZBQTJGO0FBQzNGLE1BQU0sa0JBQWtCLEdBQW9EO0lBQzFFLGlCQUFpQixFQUFFLCtCQUFxQixDQUFDLFdBQVc7SUFDcEQsWUFBWSxFQUFFLCtCQUFxQixDQUFDLFlBQVk7SUFDaEQsaUJBQWlCLEVBQUUsK0JBQXFCLENBQUMsaUJBQWlCO0lBQzFELHFCQUFxQixFQUFFLCtCQUFxQixDQUFDLGVBQWU7SUFDNUQsbUJBQW1CLEVBQUUsK0JBQXFCLENBQUMsbUJBQW1CO0lBQzlELG9CQUFvQixFQUFFLCtCQUFxQixDQUFDLGNBQWM7Q0FDM0QsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0FBRWxHLHdFQUF3RTtBQUN4RSxTQUFnQixrQkFBa0IsQ0FBQyxRQUFjO0lBQy9DLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHlCQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFFRCxvR0FBb0c7QUFDcEcsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW9DO0lBQ3ZFLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7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QUFDLENBQUM7SUFDMUYsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29sVG9rZW5FeHRlbnNpb25zLCBTb2xUb2tlbkV4dGVuc2lvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFjY291bnRTdGF0ZSxcbiAgRXh0ZW5zaW9uVHlwZSxcbiAgZ2V0RXh0ZW5zaW9uRGF0YSxcbiAgZ2V0RXh0ZW5zaW9uVHlwZXMsXG4gIGdldEludGVyZXN0QmVhcmluZ01pbnRDb25maWdTdGF0ZSxcbiAgZ2V0TWludCxcbiAgZ2V0UGVybWFuZW50RGVsZWdhdGUsXG4gIGdldFRyYW5zZmVyRmVlQ29uZmlnLFxuICBnZXRUcmFuc2Zlckhvb2ssXG4gIHR5cGUgTWludCxcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxufSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQgeyBDb21taXRtZW50LCBDb25uZWN0aW9uLCBQdWJsaWNLZXkgfSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuXG4vKipcbiAqIFJlc3VsdCBvZiByZWFkaW5nIGEgVG9rZW4tMjAyMiBtaW50J3MgZXh0ZW5zaW9uIGRhdGEuXG4gKlxuICogYGRldGVjdGVkVHlwZU5hbWVzYCBsaXN0cyBFVkVSWSBleHRlbnNpb24gcHJlc2VudCBvbiB0aGUgbWludCDigJQgaW5jbHVkaW5nIG9uZXMgQml0R28gZG9lc1xuICogbm90IG1vZGVsIOKAlCBzbyBjYWxsZXJzIGNhbiBydW4gdGhlIG9uYm9hcmRpbmcgc2FmZXR5IGdhdGUgKGBnZXRVbnN1cHBvcnRlZFNvbFRva2VuRXh0ZW5zaW9uc2ApLlxuICogYGV4dGVuc2lvbnNgIGlzIHRoZSB0eXBlZCwgc3RvcmFibGUgY29uZmlnIGZvciB0aGUgZXh0ZW5zaW9ucyBCaXRHbyBkb2VzIG1vZGVsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbnRFeHRlbnNpb25SZWFkUmVzdWx0IHtcbiAgZGV0ZWN0ZWRUeXBlTmFtZXM6IHN0cmluZ1tdO1xuICBleHRlbnNpb25zOiBTb2xUb2tlbkV4dGVuc2lvbnM7XG59XG5cbi8qKiBNYXAgZnJvbSBgQHNvbGFuYS9zcGwtdG9rZW5gIEV4dGVuc2lvblR5cGUgbmFtZXMgdG8gQml0R28ncyBtb2RlbGVkIGV4dGVuc2lvbiB0eXBlcy4gKi9cbmNvbnN0IEVYVEVOU0lPTl9OQU1FX01BUDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU29sVG9rZW5FeHRlbnNpb25UeXBlPj4gPSB7XG4gIFRyYW5zZmVyRmVlQ29uZmlnOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuVHJhbnNmZXJGZWUsXG4gIFRyYW5zZmVySG9vazogU29sVG9rZW5FeHRlbnNpb25UeXBlLlRyYW5zZmVySG9vayxcbiAgUGVybWFuZW50RGVsZWdhdGU6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5QZXJtYW5lbnREZWxlZ2F0ZSxcbiAgSW50ZXJlc3RCZWFyaW5nQ29uZmlnOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuSW50ZXJlc3RCZWFyaW5nLFxuICBEZWZhdWx0QWNjb3VudFN0YXRlOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuRGVmYXVsdEFjY291bnRTdGF0ZSxcbiAgU2NhbGVkVWlBbW91bnRDb25maWc6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5TY2FsZWRVaUFtb3VudCxcbn07XG5cbmNvbnN0IENPTkZJREVOVElBTF9UUkFOU0ZFUl9OQU1FUyA9IFsnQ29uZmlkZW50aWFsVHJhbnNmZXJNaW50JywgJ0NvbmZpZGVudGlhbFRyYW5zZmVyRmVlQ29uZmlnJ107XG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBuYW1lcyBvZiBldmVyeSBleHRlbnNpb24gdHlwZSBwcmVzZW50IG9uIHRoZSBtaW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2lvblR5cGVOYW1lcyhtaW50SW5mbzogTWludCk6IHN0cmluZ1tdIHtcbiAgaWYgKG1pbnRJbmZvLnRsdkRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBnZXRFeHRlbnNpb25UeXBlcyhtaW50SW5mby50bHZEYXRhKS5tYXAoKHQpID0+IEV4dGVuc2lvblR5cGVbdF0gPz8gYHVua25vd24oJHt0fSlgKTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgZGV0ZWN0ZWQgZXh0ZW5zaW9ucyB0aGF0IEJpdEdvIG1vZGVscy4gUHVyZSDigJQgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGNoYWluIGRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwTW9kZWxlZEV4dGVuc2lvbnMoZGV0ZWN0ZWRUeXBlTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogU29sVG9rZW5FeHRlbnNpb25UeXBlW10ge1xuICBjb25zdCBtb2RlbGVkOiBTb2xUb2tlbkV4dGVuc2lvblR5cGVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgZGV0ZWN0ZWRUeXBlTmFtZXMpIHtcbiAgICBjb25zdCBtYXBwZWQgPSBFWFRFTlNJT05fTkFNRV9NQVBbbmFtZV07XG4gICAgaWYgKG1hcHBlZCAhPT0gdW5kZWZpbmVkICYmICFtb2RlbGVkLmluY2x1ZGVzKG1hcHBlZCkpIHtcbiAgICAgIG1vZGVsZWQucHVzaChtYXBwZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kZWxlZDtcbn1cblxuLyoqXG4gKiBFbmZvcmNlIHRoZSBwcm90b2NvbC1sZXZlbCBpbmNvbXBhdGliaWxpdHk6IFRyYW5zZmVyIEhvb2sgYW5kIENvbmZpZGVudGlhbFxuICogVHJhbnNmZXIgY2Fubm90IGNvZXhpc3Qgb24gdGhlIHNhbWUgbWludC4gUHVyZSDigJQgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGNoYWluIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeHRlbnNpb25Db21wYXRpYmlsaXR5KGRldGVjdGVkVHlwZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBoYXNIb29rID0gZGV0ZWN0ZWRUeXBlTmFtZXMuaW5jbHVkZXMoJ1RyYW5zZmVySG9vaycpO1xuICBjb25zdCBoYXNDb25maWRlbnRpYWwgPSBkZXRlY3RlZFR5cGVOYW1lcy5zb21lKChuKSA9PiBDT05GSURFTlRJQUxfVFJBTlNGRVJfTkFNRVMuaW5jbHVkZXMobikpO1xuICBpZiAoaGFzSG9vayAmJiBoYXNDb25maWRlbnRpYWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pbnQgZGVjbGFyZXMgYm90aCBUcmFuc2ZlciBIb29rIGFuZCBDb25maWRlbnRpYWwgVHJhbnNmZXIsIHdoaWNoIGNhbm5vdCBjb2V4aXN0Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9CYXNlNTgoa2V5OiBQdWJsaWNLZXkgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGtleSA/IGtleS50b0Jhc2U1OCgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgZGVjb2RlZCBUb2tlbi0yMDIyIGBNaW50YCBpbnRvIEJpdEdvJ3MgZXh0ZW5zaW9uIG1vZGVsLiBTZXBhcmF0ZWQgZnJvbSB0aGUgUlBDIGNhbGxcbiAqIHNvIGl0IGNhbiBiZSB1bml0LXRlc3RlZCBhZ2FpbnN0IHJlY29yZGVkIG1pbnQgZml4dHVyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1pbnRFeHRlbnNpb25zKG1pbnRJbmZvOiBNaW50KTogTWludEV4dGVuc2lvblJlYWRSZXN1bHQge1xuICBjb25zdCBkZXRlY3RlZFR5cGVOYW1lcyA9IGV4dGVuc2lvblR5cGVOYW1lcyhtaW50SW5mbyk7XG4gIGFzc2VydEV4dGVuc2lvbkNvbXBhdGliaWxpdHkoZGV0ZWN0ZWRUeXBlTmFtZXMpO1xuXG4gIGNvbnN0IGV4dGVuc2lvbnM6IFNvbFRva2VuRXh0ZW5zaW9ucyA9IHsgZGV0ZWN0ZWQ6IG1hcE1vZGVsZWRFeHRlbnNpb25zKGRldGVjdGVkVHlwZU5hbWVzKSB9O1xuICBjb25zdCBhdXRob3JpdGllczogTm9uTnVsbGFibGU8U29sVG9rZW5FeHRlbnNpb25zWydhdXRob3JpdGllcyddPiA9IHtcbiAgICBtaW50QXV0aG9yaXR5OiB0b0Jhc2U1OChtaW50SW5mby5taW50QXV0aG9yaXR5KSxcbiAgICBmcmVlemVBdXRob3JpdHk6IHRvQmFzZTU4KG1pbnRJbmZvLmZyZWV6ZUF1dGhvcml0eSksXG4gIH07XG5cbiAgY29uc3QgZmVlQ29uZmlnID0gZ2V0VHJhbnNmZXJGZWVDb25maWcobWludEluZm8pO1xuICBpZiAoZmVlQ29uZmlnKSB7XG4gICAgZXh0ZW5zaW9ucy50cmFuc2ZlckZlZSA9IHtcbiAgICAgIHRyYW5zZmVyRmVlQmFzaXNQb2ludHM6IGZlZUNvbmZpZy5uZXdlclRyYW5zZmVyRmVlLnRyYW5zZmVyRmVlQmFzaXNQb2ludHMsXG4gICAgICBtYXhpbXVtRmVlOiBmZWVDb25maWcubmV3ZXJUcmFuc2ZlckZlZS5tYXhpbXVtRmVlLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgICBhdXRob3JpdGllcy50cmFuc2ZlckZlZUNvbmZpZ0F1dGhvcml0eSA9IHRvQmFzZTU4KGZlZUNvbmZpZy50cmFuc2ZlckZlZUNvbmZpZ0F1dGhvcml0eSk7XG4gICAgYXV0aG9yaXRpZXMud2l0aGRyYXdXaXRoaGVsZEF1dGhvcml0eSA9IHRvQmFzZTU4KGZlZUNvbmZpZy53aXRoZHJhd1dpdGhoZWxkQXV0aG9yaXR5KTtcbiAgfVxuXG4gIGNvbnN0IGhvb2sgPSBnZXRUcmFuc2Zlckhvb2sobWludEluZm8pO1xuICBpZiAoaG9vaykge1xuICAgIGV4dGVuc2lvbnMudHJhbnNmZXJIb29rUHJvZ3JhbUlkID0gaG9vay5wcm9ncmFtSWQudG9CYXNlNTgoKTtcbiAgfVxuXG4gIGNvbnN0IGRlbGVnYXRlID0gZ2V0UGVybWFuZW50RGVsZWdhdGUobWludEluZm8pO1xuICBpZiAoZGVsZWdhdGU/LmRlbGVnYXRlKSB7XG4gICAgYXV0aG9yaXRpZXMucGVybWFuZW50RGVsZWdhdGUgPSBkZWxlZ2F0ZS5kZWxlZ2F0ZS50b0Jhc2U1OCgpO1xuICB9XG5cbiAgY29uc3QgaW50ZXJlc3QgPSBnZXRJbnRlcmVzdEJlYXJpbmdNaW50Q29uZmlnU3RhdGUobWludEluZm8pO1xuICBpZiAoaW50ZXJlc3QpIHtcbiAgICBleHRlbnNpb25zLmludGVyZXN0QmVhcmluZyA9IHsgcmF0ZUJhc2lzUG9pbnRzOiBpbnRlcmVzdC5jdXJyZW50UmF0ZSB9O1xuICAgIGF1dGhvcml0aWVzLnJhdGVBdXRob3JpdHkgPSB0b0Jhc2U1OChpbnRlcmVzdC5yYXRlQXV0aG9yaXR5KTtcbiAgfVxuXG4gIC8vIERlZmF1bHRBY2NvdW50U3RhdGUgaXMgYSBzaW5nbGUgYnl0ZSAoQWNjb3VudFN0YXRlKS4gRGVjb2RlZCBnZW5lcmljYWxseSB0byBhdm9pZCBkZXBlbmRpbmdcbiAgLy8gb24gYSB2ZXJzaW9uLXNwZWNpZmljIHR5cGVkIGdldHRlci4gcGVybWlzc2lvbmxlc3NUaGF3IGlzIE5PVCBvbi1jaGFpbiDigJQgcmVzb2x2ZWQgc2VwYXJhdGVseVxuICAvLyBhdCBvbmJvYXJkaW5nOyBkZWZhdWx0cyBmYWxzZSB1bnRpbCBjb25maXJtZWQuXG4gIGNvbnN0IGRlZmF1bHRTdGF0ZURhdGEgPSBnZXRFeHRlbnNpb25EYXRhKEV4dGVuc2lvblR5cGUuRGVmYXVsdEFjY291bnRTdGF0ZSwgbWludEluZm8udGx2RGF0YSk7XG4gIGlmIChkZWZhdWx0U3RhdGVEYXRhKSB7XG4gICAgZXh0ZW5zaW9ucy5kZWZhdWx0QWNjb3VudFN0YXRlID0ge1xuICAgICAgZnJvemVuOiBkZWZhdWx0U3RhdGVEYXRhWzBdID09PSBBY2NvdW50U3RhdGUuRnJvemVuLFxuICAgICAgcGVybWlzc2lvbmxlc3NUaGF3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gTk9URTogU2NhbGVkVWlBbW91bnQgY29uZmlnIHBhcnNpbmcgKGluaXRpYWxNdWx0aXBsaWVyKSBpcyBpbnRlbnRpb25hbGx5IGRlZmVycmVkIOKAlCB0aGUgdHlwZWRcbiAgLy8gZ2V0dGVyIGlzIG5vdCBhdmFpbGFibGUgaW4gQHNvbGFuYS9zcGwtdG9rZW5AMC40LjkuIFRoZSBleHRlbnNpb24gaXMgc3RpbGwgKmRldGVjdGVkKiBhYm92ZVxuICAvLyAoc28gdGhlIHNhZmV0eSBnYXRlIHNlZXMgaXQpOyBwb3B1bGF0aW5nIHNjYWxlZFVpQW1vdW50LmluaXRpYWxNdWx0aXBsaWVyIGlzIGEgZm9sbG93LXVwIHRoYXRcbiAgLy8gYnVtcHMgQHNvbGFuYS9zcGwtdG9rZW4gdG8gYSB2ZXJzaW9uIGV4cG9zaW5nIGdldFNjYWxlZFVpQW1vdW50Q29uZmlnLiBTZWUgUFIgZm9yIDMuNC5cblxuICBpZiAoT2JqZWN0LnZhbHVlcyhhdXRob3JpdGllcykuc29tZSgodikgPT4gdiAhPT0gdW5kZWZpbmVkKSkge1xuICAgIGV4dGVuc2lvbnMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcztcbiAgfVxuXG4gIHJldHVybiB7IGRldGVjdGVkVHlwZU5hbWVzLCBleHRlbnNpb25zIH07XG59XG5cbi8qKiBGZXRjaCBhIFRva2VuLTIwMjIgbWludCBhbmQgcGFyc2UgaXRzIGV4dGVuc2lvbnMuIFVzZXMgYGZpbmFsaXplZGAgY29tbWl0bWVudCBydWxlcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTWludEV4dGVuc2lvbnMoXG4gIGNvbm5lY3Rpb246IENvbm5lY3Rpb24sXG4gIG1pbnQ6IHN0cmluZyB8IFB1YmxpY0tleSxcbiAgY29tbWl0bWVudDogQ29tbWl0bWVudCA9ICdmaW5hbGl6ZWQnXG4pOiBQcm9taXNlPE1pbnRFeHRlbnNpb25SZWFkUmVzdWx0PiB7XG4gIGNvbnN0IG1pbnRQdWJrZXkgPSB0eXBlb2YgbWludCA9PT0gJ3N0cmluZycgPyBuZXcgUHVibGljS2V5KG1pbnQpIDogbWludDtcbiAgY29uc3QgbWludEluZm8gPSBhd2FpdCBnZXRNaW50KGNvbm5lY3Rpb24sIG1pbnRQdWJrZXksIGNvbW1pdG1lbnQsIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gIHJldHVybiBwYXJzZU1pbnRFeHRlbnNpb25zKG1pbnRJbmZvKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=tokenExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExtensions.d.ts","sourceRoot":"","sources":["../../../../test/unit/tokenExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("should");
4
+ const statics_1 = require("@bitgo-beta/statics");
5
+ const tokenExtensions_1 = require("../../src/lib/tokenExtensions");
6
+ describe('Sol Token-2022 mint extension parsing', function () {
7
+ describe('mapModeledExtensions', function () {
8
+ it('maps spl-token extension names to modeled BitGo types', function () {
9
+ (0, tokenExtensions_1.mapModeledExtensions)(['TransferFeeConfig', 'PermanentDelegate']).should.eql([
10
+ statics_1.SolTokenExtensionType.TransferFee,
11
+ statics_1.SolTokenExtensionType.PermanentDelegate,
12
+ ]);
13
+ });
14
+ it('ignores extensions BitGo does not model', function () {
15
+ (0, tokenExtensions_1.mapModeledExtensions)(['ImmutableOwner', 'MetadataPointer', 'TransferHook']).should.eql([
16
+ statics_1.SolTokenExtensionType.TransferHook,
17
+ ]);
18
+ });
19
+ it('deduplicates', function () {
20
+ (0, tokenExtensions_1.mapModeledExtensions)(['TransferFeeConfig', 'TransferFeeConfig']).should.eql([statics_1.SolTokenExtensionType.TransferFee]);
21
+ });
22
+ });
23
+ describe('assertExtensionCompatibility', function () {
24
+ it('throws when Transfer Hook and Confidential Transfer coexist', function () {
25
+ (() => (0, tokenExtensions_1.assertExtensionCompatibility)(['TransferHook', 'ConfidentialTransferMint'])).should.throw(/cannot coexist/);
26
+ });
27
+ it('allows Transfer Hook without Confidential Transfer', function () {
28
+ (() => (0, tokenExtensions_1.assertExtensionCompatibility)(['TransferHook', 'TransferFeeConfig'])).should.not.throw();
29
+ });
30
+ });
31
+ });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5FeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQixpREFBNEQ7QUFDNUQsbUVBQW1HO0FBRW5HLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtJQUNoRCxRQUFRLENBQUMsc0JBQXNCLEVBQUU7UUFDL0IsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1lBQzFELElBQUEsc0NBQW9CLEVBQUMsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDMUUsK0JBQXFCLENBQUMsV0FBVztnQkFDakMsK0JBQXFCLENBQUMsaUJBQWlCO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLElBQUEsc0NBQW9CLEVBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ3JGLCtCQUFxQixDQUFDLFlBQVk7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsY0FBYyxFQUFFO1lBQ2pCLElBQUEsc0NBQW9CLEVBQUMsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLCtCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtRQUN2QyxFQUFFLENBQUMsNkRBQTZELEVBQUU7WUFDaEUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDhDQUE0QixFQUFDLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsOENBQTRCLEVBQUMsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBTb2xUb2tlbkV4dGVuc2lvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGFzc2VydEV4dGVuc2lvbkNvbXBhdGliaWxpdHksIG1hcE1vZGVsZWRFeHRlbnNpb25zIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90b2tlbkV4dGVuc2lvbnMnO1xuXG5kZXNjcmliZSgnU29sIFRva2VuLTIwMjIgbWludCBleHRlbnNpb24gcGFyc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ21hcE1vZGVsZWRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdtYXBzIHNwbC10b2tlbiBleHRlbnNpb24gbmFtZXMgdG8gbW9kZWxlZCBCaXRHbyB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcE1vZGVsZWRFeHRlbnNpb25zKFsnVHJhbnNmZXJGZWVDb25maWcnLCAnUGVybWFuZW50RGVsZWdhdGUnXSkuc2hvdWxkLmVxbChbXG4gICAgICAgIFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5UcmFuc2ZlckZlZSxcbiAgICAgICAgU29sVG9rZW5FeHRlbnNpb25UeXBlLlBlcm1hbmVudERlbGVnYXRlLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaWdub3JlcyBleHRlbnNpb25zIEJpdEdvIGRvZXMgbm90IG1vZGVsJywgZnVuY3Rpb24gKCkge1xuICAgICAgbWFwTW9kZWxlZEV4dGVuc2lvbnMoWydJbW11dGFibGVPd25lcicsICdNZXRhZGF0YVBvaW50ZXInLCAnVHJhbnNmZXJIb29rJ10pLnNob3VsZC5lcWwoW1xuICAgICAgICBTb2xUb2tlbkV4dGVuc2lvblR5cGUuVHJhbnNmZXJIb29rLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVkdXBsaWNhdGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbWFwTW9kZWxlZEV4dGVuc2lvbnMoWydUcmFuc2ZlckZlZUNvbmZpZycsICdUcmFuc2ZlckZlZUNvbmZpZyddKS5zaG91bGQuZXFsKFtTb2xUb2tlbkV4dGVuc2lvblR5cGUuVHJhbnNmZXJGZWVdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydEV4dGVuc2lvbkNvbXBhdGliaWxpdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Rocm93cyB3aGVuIFRyYW5zZmVyIEhvb2sgYW5kIENvbmZpZGVudGlhbCBUcmFuc2ZlciBjb2V4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IGFzc2VydEV4dGVuc2lvbkNvbXBhdGliaWxpdHkoWydUcmFuc2Zlckhvb2snLCAnQ29uZmlkZW50aWFsVHJhbnNmZXJNaW50J10pKS5zaG91bGQudGhyb3coL2Nhbm5vdCBjb2V4aXN0Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWxsb3dzIFRyYW5zZmVyIEhvb2sgd2l0aG91dCBDb25maWRlbnRpYWwgVHJhbnNmZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYXNzZXJ0RXh0ZW5zaW9uQ29tcGF0aWJpbGl0eShbJ1RyYW5zZmVySG9vaycsICdUcmFuc2ZlckZlZUNvbmZpZyddKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19