@defuse-protocol/intents-sdk 0.78.1 → 0.80.0

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 (38) hide show
  1. package/README.md +3 -45
  2. package/dist/index.cjs +3 -2
  3. package/dist/index.d.cts +3 -3
  4. package/dist/index.d.ts +3 -3
  5. package/dist/index.js +3 -3
  6. package/dist/src/bridges/direct-bridge/direct-bridge.cjs +3 -0
  7. package/dist/src/bridges/direct-bridge/direct-bridge.js +4 -1
  8. package/dist/src/bridges/hot-bridge/hot-bridge.cjs +4 -1
  9. package/dist/src/bridges/hot-bridge/hot-bridge.js +5 -2
  10. package/dist/src/bridges/omni-bridge/omni-bridge-constants.cjs +5 -1
  11. package/dist/src/bridges/omni-bridge/omni-bridge-constants.js +3 -1
  12. package/dist/src/bridges/omni-bridge/omni-bridge-utils.cjs +2 -2
  13. package/dist/src/bridges/omni-bridge/omni-bridge-utils.js +2 -2
  14. package/dist/src/bridges/omni-bridge/omni-bridge.cjs +16 -15
  15. package/dist/src/bridges/omni-bridge/omni-bridge.js +19 -18
  16. package/dist/src/bridges/poa-bridge/poa-bridge-utils.cjs +0 -6
  17. package/dist/src/bridges/poa-bridge/poa-bridge-utils.js +0 -6
  18. package/dist/src/bridges/poa-bridge/poa-bridge.cjs +6 -4
  19. package/dist/src/bridges/poa-bridge/poa-bridge.js +7 -5
  20. package/dist/src/classes/errors.cjs +11 -0
  21. package/dist/src/classes/errors.d.cts +9 -1
  22. package/dist/src/classes/errors.d.ts +9 -1
  23. package/dist/src/classes/errors.js +11 -1
  24. package/dist/src/constants/{poa-tokens-routable-through-omni-bridge.cjs → poa-tokens-migrated-to-omni-bridge.cjs} +9 -7
  25. package/dist/src/constants/poa-tokens-migrated-to-omni-bridge.d.cts +10 -0
  26. package/dist/src/constants/poa-tokens-migrated-to-omni-bridge.d.ts +10 -0
  27. package/dist/src/constants/{poa-tokens-routable-through-omni-bridge.js → poa-tokens-migrated-to-omni-bridge.js} +9 -7
  28. package/dist/src/lib/compareAddresses.cjs +116 -0
  29. package/dist/src/lib/compareAddresses.js +115 -0
  30. package/dist/src/lib/validateAddress.cjs +2 -0
  31. package/dist/src/lib/validateAddress.js +2 -0
  32. package/dist/src/sdk.cjs +1 -3
  33. package/dist/src/sdk.d.cts +0 -7
  34. package/dist/src/sdk.d.ts +0 -7
  35. package/dist/src/sdk.js +1 -3
  36. package/package.json +4 -4
  37. package/dist/src/constants/poa-tokens-routable-through-omni-bridge.d.cts +0 -12
  38. package/dist/src/constants/poa-tokens-routable-through-omni-bridge.d.ts +0 -12
@@ -28,7 +28,6 @@ const caip2Mapping = {
28
28
  [Chains.Arbitrum]: "eth:42161",
29
29
  [Chains.Bitcoin]: "btc:mainnet",
30
30
  [Chains.BitcoinCash]: "bch:mainnet",
31
- [Chains.Solana]: "sol:mainnet",
32
31
  [Chains.Dogecoin]: "doge:mainnet",
33
32
  [Chains.XRPL]: "xrp:mainnet",
34
33
  [Chains.Zcash]: "zec:mainnet",
@@ -36,11 +35,9 @@ const caip2Mapping = {
36
35
  [Chains.Berachain]: "eth:80094",
37
36
  [Chains.Tron]: "tron:mainnet",
38
37
  [Chains.Sui]: "sui:mainnet",
39
- [Chains.Aptos]: "aptos:mainnet",
40
38
  [Chains.Movement]: "movement:mainnet",
41
39
  [Chains.Cardano]: "cardano:mainnet",
42
40
  [Chains.Litecoin]: "ltc:mainnet",
43
- [Chains.Starknet]: "starknet:mainnet",
44
41
  [Chains.Aleo]: "aleo:mainnet",
45
42
  [Chains.Dash]: "dash:mainnet",
46
43
  [Chains.Plasma]: "eth:9745"
@@ -55,7 +52,6 @@ const tokenPrefixMapping = {
55
52
  arb: Chains.Arbitrum,
56
53
  btc: Chains.Bitcoin,
57
54
  bch: Chains.BitcoinCash,
58
- sol: Chains.Solana,
59
55
  doge: Chains.Dogecoin,
60
56
  xrp: Chains.XRPL,
61
57
  zec: Chains.Zcash,
@@ -63,11 +59,9 @@ const tokenPrefixMapping = {
63
59
  bera: Chains.Berachain,
64
60
  tron: Chains.Tron,
65
61
  sui: Chains.Sui,
66
- aptos: Chains.Aptos,
67
62
  movement: Chains.Movement,
68
63
  cardano: Chains.Cardano,
69
64
  ltc: Chains.Litecoin,
70
- starknet: Chains.Starknet,
71
65
  aleo: Chains.Aleo,
72
66
  dash: Chains.Dash,
73
67
  plasma: Chains.Plasma
@@ -6,7 +6,8 @@ const require_estimate_fee = require('../../lib/estimate-fee.cjs');
6
6
  const require_parse_defuse_asset_id = require('../../lib/parse-defuse-asset-id.cjs');
7
7
  const require_validateAddress = require('../../lib/validateAddress.cjs');
8
8
  const require_bridge_name_enum = require('../../constants/bridge-name-enum.cjs');
9
- const require_poa_tokens_routable_through_omni_bridge = require('../../constants/poa-tokens-routable-through-omni-bridge.cjs');
9
+ const require_compareAddresses = require('../../lib/compareAddresses.cjs');
10
+ const require_poa_tokens_migrated_to_omni_bridge = require('../../constants/poa-tokens-migrated-to-omni-bridge.cjs');
10
11
  const require_errors$1 = require('./errors.cjs');
11
12
  const require_poa_bridge_utils = require('./poa-bridge-utils.cjs');
12
13
  let _defuse_protocol_internal_utils = require("@defuse-protocol/internal-utils");
@@ -15,12 +16,11 @@ _isaacs_ttlcache = require_rolldown_runtime.__toESM(_isaacs_ttlcache);
15
16
 
16
17
  //#region src/bridges/poa-bridge/poa-bridge.ts
17
18
  var PoaBridge = class {
18
- constructor({ envConfig, xrplRpcUrls, routeMigratedPoaTokensThroughOmniBridge }) {
19
+ constructor({ envConfig, xrplRpcUrls }) {
19
20
  this.route = require_route_enum.RouteEnum.PoaBridge;
20
21
  this.supportedTokensCache = new _isaacs_ttlcache.default({ ttl: 30 * 1e3 });
21
22
  this.envConfig = envConfig;
22
23
  this.xrplRpcUrls = xrplRpcUrls;
23
- this.routeMigratedPoaTokensThroughOmniBridge = routeMigratedPoaTokensThroughOmniBridge ?? false;
24
24
  }
25
25
  getPoaBridgeBaseURL() {
26
26
  if (!this.envConfig.poaBridgeBaseURL) throw new Error("POA Bridge is not available in this environment: poaBridgeBaseURL is not configured");
@@ -34,13 +34,14 @@ var PoaBridge = class {
34
34
  const assetInfo = this.parseAssetId(params.assetId);
35
35
  const isValid = assetInfo != null;
36
36
  if (!isValid && params.routeConfig != null) throw new require_errors.UnsupportedAssetIdError(params.assetId, "`assetId` does not match `routeConfig`.");
37
- if (this.routeMigratedPoaTokensThroughOmniBridge && assetInfo != null && require_poa_tokens_routable_through_omni_bridge.POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE[assetInfo.contractId] !== void 0 && params.routeConfig === void 0) return false;
37
+ if (assetInfo != null && require_poa_tokens_migrated_to_omni_bridge.POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE[assetInfo.contractId] !== void 0) return false;
38
38
  return isValid;
39
39
  }
40
40
  parseAssetId(assetId) {
41
41
  if (!this.envConfig.poaTokenFactoryContractID) return null;
42
42
  const parsed = require_parse_defuse_asset_id.parseDefuseAssetId(assetId);
43
43
  if (!parsed.contractId.endsWith(`.${this.envConfig.poaTokenFactoryContractID}`)) return null;
44
+ if (require_poa_tokens_migrated_to_omni_bridge.POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE[parsed.contractId] !== void 0) return null;
44
45
  let blockchain;
45
46
  try {
46
47
  blockchain = require_poa_bridge_utils.contractIdToCaip2(parsed.contractId);
@@ -76,6 +77,7 @@ var PoaBridge = class {
76
77
  const { tokens } = await this.getCachedSupportedTokens([require_poa_bridge_utils.toPoaNetwork(assetInfo.blockchain)], args.logger);
77
78
  const tokenInfo = tokens.find((token) => token.intents_token_id === args.assetId);
78
79
  if (tokenInfo == null) throw new require_errors.UnsupportedAssetIdError(args.assetId, "`assetId` is not supported in PoA bridge.");
80
+ if (tokenInfo.origin_chain_address !== "native" && require_compareAddresses.compareAddresses(tokenInfo.origin_chain_address, args.destinationAddress, assetInfo.blockchain)) throw new require_errors.DestinationAddressMatchesTokenAddressError(tokenInfo.origin_chain_address, args.assetId);
79
81
  if (!args.skipMinAmountValidation) {
80
82
  const minWithdrawalAmount = BigInt(tokenInfo.min_withdrawal_amount);
81
83
  if (args.amount < minWithdrawalAmount) throw new require_errors.MinWithdrawalAmountError(minWithdrawalAmount, args.amount, args.assetId);
@@ -1,11 +1,12 @@
1
- import { InvalidDestinationAddressForWithdrawalError, MinWithdrawalAmountError, UnsupportedAssetIdError } from "../../classes/errors.js";
1
+ import { DestinationAddressMatchesTokenAddressError, InvalidDestinationAddressForWithdrawalError, MinWithdrawalAmountError, UnsupportedAssetIdError } from "../../classes/errors.js";
2
2
  import { RouteEnum } from "../../constants/route-enum.js";
3
3
  import { Chains } from "../../lib/caip2.js";
4
4
  import { getUnderlyingFee } from "../../lib/estimate-fee.js";
5
5
  import { parseDefuseAssetId } from "../../lib/parse-defuse-asset-id.js";
6
6
  import { validateAddress } from "../../lib/validateAddress.js";
7
7
  import { BridgeNameEnum } from "../../constants/bridge-name-enum.js";
8
- import { POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE } from "../../constants/poa-tokens-routable-through-omni-bridge.js";
8
+ import { compareAddresses } from "../../lib/compareAddresses.js";
9
+ import { POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE } from "../../constants/poa-tokens-migrated-to-omni-bridge.js";
9
10
  import { XrplDepositAuthEnabledError, XrplDestinationTagRequiredError } from "./errors.js";
10
11
  import { contractIdToCaip2, createWithdrawIntentPrimitive, toPoaNetwork } from "./poa-bridge-utils.js";
11
12
  import { RpcRequestError, assert, poaBridge, utils, xrpl } from "@defuse-protocol/internal-utils";
@@ -13,12 +14,11 @@ import TTLCache from "@isaacs/ttlcache";
13
14
 
14
15
  //#region src/bridges/poa-bridge/poa-bridge.ts
15
16
  var PoaBridge = class {
16
- constructor({ envConfig, xrplRpcUrls, routeMigratedPoaTokensThroughOmniBridge }) {
17
+ constructor({ envConfig, xrplRpcUrls }) {
17
18
  this.route = RouteEnum.PoaBridge;
18
19
  this.supportedTokensCache = new TTLCache({ ttl: 30 * 1e3 });
19
20
  this.envConfig = envConfig;
20
21
  this.xrplRpcUrls = xrplRpcUrls;
21
- this.routeMigratedPoaTokensThroughOmniBridge = routeMigratedPoaTokensThroughOmniBridge ?? false;
22
22
  }
23
23
  getPoaBridgeBaseURL() {
24
24
  if (!this.envConfig.poaBridgeBaseURL) throw new Error("POA Bridge is not available in this environment: poaBridgeBaseURL is not configured");
@@ -32,13 +32,14 @@ var PoaBridge = class {
32
32
  const assetInfo = this.parseAssetId(params.assetId);
33
33
  const isValid = assetInfo != null;
34
34
  if (!isValid && params.routeConfig != null) throw new UnsupportedAssetIdError(params.assetId, "`assetId` does not match `routeConfig`.");
35
- if (this.routeMigratedPoaTokensThroughOmniBridge && assetInfo != null && POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE[assetInfo.contractId] !== void 0 && params.routeConfig === void 0) return false;
35
+ if (assetInfo != null && POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE[assetInfo.contractId] !== void 0) return false;
36
36
  return isValid;
37
37
  }
38
38
  parseAssetId(assetId) {
39
39
  if (!this.envConfig.poaTokenFactoryContractID) return null;
40
40
  const parsed = parseDefuseAssetId(assetId);
41
41
  if (!parsed.contractId.endsWith(`.${this.envConfig.poaTokenFactoryContractID}`)) return null;
42
+ if (POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE[parsed.contractId] !== void 0) return null;
42
43
  let blockchain;
43
44
  try {
44
45
  blockchain = contractIdToCaip2(parsed.contractId);
@@ -74,6 +75,7 @@ var PoaBridge = class {
74
75
  const { tokens } = await this.getCachedSupportedTokens([toPoaNetwork(assetInfo.blockchain)], args.logger);
75
76
  const tokenInfo = tokens.find((token) => token.intents_token_id === args.assetId);
76
77
  if (tokenInfo == null) throw new UnsupportedAssetIdError(args.assetId, "`assetId` is not supported in PoA bridge.");
78
+ if (tokenInfo.origin_chain_address !== "native" && compareAddresses(tokenInfo.origin_chain_address, args.destinationAddress, assetInfo.blockchain)) throw new DestinationAddressMatchesTokenAddressError(tokenInfo.origin_chain_address, args.assetId);
77
79
  if (!args.skipMinAmountValidation) {
78
80
  const minWithdrawalAmount = BigInt(tokenInfo.min_withdrawal_amount);
79
81
  if (args.amount < minWithdrawalAmount) throw new MinWithdrawalAmountError(minWithdrawalAmount, args.amount, args.assetId);
@@ -66,6 +66,16 @@ var UnsupportedAssetIdError = class extends _defuse_protocol_internal_utils.Base
66
66
  this.assetId = assetId;
67
67
  }
68
68
  };
69
+ var DestinationAddressMatchesTokenAddressError = class extends _defuse_protocol_internal_utils.BaseError {
70
+ constructor(tokenAddress, assetId) {
71
+ super("Destination address must not be the token contract address.", {
72
+ metaMessages: [`Asset ID: ${assetId}`, `Token address: ${tokenAddress}`],
73
+ name: "DestinationAddressMatchesTokenAddressError"
74
+ });
75
+ this.tokenAddress = tokenAddress;
76
+ this.assetId = assetId;
77
+ }
78
+ };
69
79
  var InvalidDestinationAddressForWithdrawalError = class extends _defuse_protocol_internal_utils.BaseError {
70
80
  constructor(destinationAddress, destinationChain) {
71
81
  super(`Invalid destination address.`, {
@@ -79,6 +89,7 @@ var InvalidDestinationAddressForWithdrawalError = class extends _defuse_protocol
79
89
  };
80
90
 
81
91
  //#endregion
92
+ exports.DestinationAddressMatchesTokenAddressError = DestinationAddressMatchesTokenAddressError;
82
93
  exports.FeeExceedsAmountError = FeeExceedsAmountError;
83
94
  exports.InvalidDestinationAddressForWithdrawalError = InvalidDestinationAddressForWithdrawalError;
84
95
  exports.MinWithdrawalAmountError = MinWithdrawalAmountError;
@@ -44,5 +44,13 @@ declare class UnsupportedAssetIdError extends BaseError {
44
44
  assetId: string;
45
45
  constructor(assetId: string, details: string);
46
46
  }
47
+ type DestinationAddressMatchesTokenAddressErrorType = DestinationAddressMatchesTokenAddressError & {
48
+ name: "DestinationAddressMatchesTokenAddressError";
49
+ };
50
+ declare class DestinationAddressMatchesTokenAddressError extends BaseError {
51
+ tokenAddress: string;
52
+ assetId: string;
53
+ constructor(tokenAddress: string, assetId: string);
54
+ }
47
55
  //#endregion
48
- export { FeeExceedsAmountError, FeeExceedsAmountErrorType, MinWithdrawalAmountError, MinWithdrawalAmountErrorType, TrustlineNotFoundError, TrustlineNotFoundErrorType, UnsupportedAssetIdError, UnsupportedAssetIdErrorType, UnsupportedDestinationMemoError, UnsupportedDestinationMemoErrorType };
56
+ export { DestinationAddressMatchesTokenAddressError, DestinationAddressMatchesTokenAddressErrorType, FeeExceedsAmountError, FeeExceedsAmountErrorType, MinWithdrawalAmountError, MinWithdrawalAmountErrorType, TrustlineNotFoundError, TrustlineNotFoundErrorType, UnsupportedAssetIdError, UnsupportedAssetIdErrorType, UnsupportedDestinationMemoError, UnsupportedDestinationMemoErrorType };
@@ -44,5 +44,13 @@ declare class UnsupportedAssetIdError extends BaseError {
44
44
  assetId: string;
45
45
  constructor(assetId: string, details: string);
46
46
  }
47
+ type DestinationAddressMatchesTokenAddressErrorType = DestinationAddressMatchesTokenAddressError & {
48
+ name: "DestinationAddressMatchesTokenAddressError";
49
+ };
50
+ declare class DestinationAddressMatchesTokenAddressError extends BaseError {
51
+ tokenAddress: string;
52
+ assetId: string;
53
+ constructor(tokenAddress: string, assetId: string);
54
+ }
47
55
  //#endregion
48
- export { FeeExceedsAmountError, FeeExceedsAmountErrorType, MinWithdrawalAmountError, MinWithdrawalAmountErrorType, TrustlineNotFoundError, TrustlineNotFoundErrorType, UnsupportedAssetIdError, UnsupportedAssetIdErrorType, UnsupportedDestinationMemoError, UnsupportedDestinationMemoErrorType };
56
+ export { DestinationAddressMatchesTokenAddressError, DestinationAddressMatchesTokenAddressErrorType, FeeExceedsAmountError, FeeExceedsAmountErrorType, MinWithdrawalAmountError, MinWithdrawalAmountErrorType, TrustlineNotFoundError, TrustlineNotFoundErrorType, UnsupportedAssetIdError, UnsupportedAssetIdErrorType, UnsupportedDestinationMemoError, UnsupportedDestinationMemoErrorType };
@@ -65,6 +65,16 @@ var UnsupportedAssetIdError = class extends BaseError {
65
65
  this.assetId = assetId;
66
66
  }
67
67
  };
68
+ var DestinationAddressMatchesTokenAddressError = class extends BaseError {
69
+ constructor(tokenAddress, assetId) {
70
+ super("Destination address must not be the token contract address.", {
71
+ metaMessages: [`Asset ID: ${assetId}`, `Token address: ${tokenAddress}`],
72
+ name: "DestinationAddressMatchesTokenAddressError"
73
+ });
74
+ this.tokenAddress = tokenAddress;
75
+ this.assetId = assetId;
76
+ }
77
+ };
68
78
  var InvalidDestinationAddressForWithdrawalError = class extends BaseError {
69
79
  constructor(destinationAddress, destinationChain) {
70
80
  super(`Invalid destination address.`, {
@@ -78,4 +88,4 @@ var InvalidDestinationAddressForWithdrawalError = class extends BaseError {
78
88
  };
79
89
 
80
90
  //#endregion
81
- export { FeeExceedsAmountError, InvalidDestinationAddressForWithdrawalError, MinWithdrawalAmountError, TrustlineNotFoundError, UnsupportedAssetIdError, UnsupportedDestinationMemoError };
91
+ export { DestinationAddressMatchesTokenAddressError, FeeExceedsAmountError, InvalidDestinationAddressForWithdrawalError, MinWithdrawalAmountError, TrustlineNotFoundError, UnsupportedAssetIdError, UnsupportedDestinationMemoError };
@@ -1,13 +1,11 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  let _omni_bridge_core = require("@omni-bridge/core");
3
3
 
4
- //#region src/constants/poa-tokens-routable-through-omni-bridge.ts
4
+ //#region src/constants/poa-tokens-migrated-to-omni-bridge.ts
5
5
  /**
6
- * These tokens can be routed through either PoA Bridge or Omni Bridge
7
- * depending on the SDK configuration. Use the `routeMigratedPoaTokensThroughOmniBridge`
8
- * feature flag to enable Omni Bridge routing for these tokens.
6
+ * These tokens originaly have been PoA Bridge tokens but have been migrated to Omni bridge.
9
7
  */
10
- const POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE = {
8
+ const POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE = {
11
9
  "sol-57d087fd8c460f612f8701f5499ad8b2eec5ab68.omft.near": _omni_bridge_core.ChainKind.Sol,
12
10
  "sol-c58e6539c2f2e097c251f8edf11f9c03e581f8d4.omft.near": _omni_bridge_core.ChainKind.Sol,
13
11
  "sol-b9c68f94ec8fd160137af8cdfe5e61cd68e2afba.omft.near": _omni_bridge_core.ChainKind.Sol,
@@ -19,8 +17,12 @@ const POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE = {
19
17
  "sol-1f00bb36e75cfc8e1274c1507cc3054f5b3f3ce1.omft.near": _omni_bridge_core.ChainKind.Sol,
20
18
  "sol-c634d063ceff771aff0c972ec396fd915a6bbd0e.omft.near": _omni_bridge_core.ChainKind.Sol,
21
19
  "sol-d600e625449a4d9380eaf5e3265e54c90d34e260.omft.near": _omni_bridge_core.ChainKind.Sol,
22
- "sol.omft.near": _omni_bridge_core.ChainKind.Sol
20
+ "sol.omft.near": _omni_bridge_core.ChainKind.Sol,
21
+ "aptos.omft.near": _omni_bridge_core.ChainKind.Aptos,
22
+ "aptos-34ee497f210c5a511e8d5b53bc56d75b63612bb5.omft.near": _omni_bridge_core.ChainKind.Aptos,
23
+ "aptos-88cb7619440a914fe6400149a12b443c3ac21d59.omft.near": _omni_bridge_core.ChainKind.Aptos,
24
+ "starknet.omft.near": _omni_bridge_core.ChainKind.Strk
23
25
  };
24
26
 
25
27
  //#endregion
26
- exports.POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE = POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE;
28
+ exports.POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE = POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE;
@@ -0,0 +1,10 @@
1
+ import { ChainKind } from "@omni-bridge/core";
2
+
3
+ //#region src/constants/poa-tokens-migrated-to-omni-bridge.d.ts
4
+
5
+ /**
6
+ * These tokens originaly have been PoA Bridge tokens but have been migrated to Omni bridge.
7
+ */
8
+ declare const POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE: Record<string, ChainKind>;
9
+ //#endregion
10
+ export { POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE };
@@ -0,0 +1,10 @@
1
+ import { ChainKind } from "@omni-bridge/core";
2
+
3
+ //#region src/constants/poa-tokens-migrated-to-omni-bridge.d.ts
4
+
5
+ /**
6
+ * These tokens originaly have been PoA Bridge tokens but have been migrated to Omni bridge.
7
+ */
8
+ declare const POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE: Record<string, ChainKind>;
9
+ //#endregion
10
+ export { POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE };
@@ -1,12 +1,10 @@
1
1
  import { ChainKind } from "@omni-bridge/core";
2
2
 
3
- //#region src/constants/poa-tokens-routable-through-omni-bridge.ts
3
+ //#region src/constants/poa-tokens-migrated-to-omni-bridge.ts
4
4
  /**
5
- * These tokens can be routed through either PoA Bridge or Omni Bridge
6
- * depending on the SDK configuration. Use the `routeMigratedPoaTokensThroughOmniBridge`
7
- * feature flag to enable Omni Bridge routing for these tokens.
5
+ * These tokens originaly have been PoA Bridge tokens but have been migrated to Omni bridge.
8
6
  */
9
- const POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE = {
7
+ const POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE = {
10
8
  "sol-57d087fd8c460f612f8701f5499ad8b2eec5ab68.omft.near": ChainKind.Sol,
11
9
  "sol-c58e6539c2f2e097c251f8edf11f9c03e581f8d4.omft.near": ChainKind.Sol,
12
10
  "sol-b9c68f94ec8fd160137af8cdfe5e61cd68e2afba.omft.near": ChainKind.Sol,
@@ -18,8 +16,12 @@ const POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE = {
18
16
  "sol-1f00bb36e75cfc8e1274c1507cc3054f5b3f3ce1.omft.near": ChainKind.Sol,
19
17
  "sol-c634d063ceff771aff0c972ec396fd915a6bbd0e.omft.near": ChainKind.Sol,
20
18
  "sol-d600e625449a4d9380eaf5e3265e54c90d34e260.omft.near": ChainKind.Sol,
21
- "sol.omft.near": ChainKind.Sol
19
+ "sol.omft.near": ChainKind.Sol,
20
+ "aptos.omft.near": ChainKind.Aptos,
21
+ "aptos-34ee497f210c5a511e8d5b53bc56d75b63612bb5.omft.near": ChainKind.Aptos,
22
+ "aptos-88cb7619440a914fe6400149a12b443c3ac21d59.omft.near": ChainKind.Aptos,
23
+ "starknet.omft.near": ChainKind.Strk
22
24
  };
23
25
 
24
26
  //#endregion
25
- export { POA_TOKENS_ROUTABLE_THROUGH_OMNI_BRIDGE };
27
+ export { POA_TOKENS_MIGRATED_TO_OMNI_BRIDGE };
@@ -0,0 +1,116 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_caip2 = require('./caip2.cjs');
3
+ const require_ton_address = require('./ton-address.cjs');
4
+ let viem = require("viem");
5
+ let _noble_hashes_sha2 = require("@noble/hashes/sha2");
6
+ let _scure_base = require("@scure/base");
7
+
8
+ //#region src/lib/compareAddresses.ts
9
+ /**
10
+ * Compares two addresses for equality using each chain's canonical form,
11
+ * e.g. to block transfers to the token's own address. Returns false (not
12
+ * throw) on malformed input.
13
+ */
14
+ function compareAddresses(a, b, blockchain) {
15
+ try {
16
+ switch (blockchain) {
17
+ case require_caip2.Chains.Ethereum:
18
+ case require_caip2.Chains.Optimism:
19
+ case require_caip2.Chains.BNB:
20
+ case require_caip2.Chains.Gnosis:
21
+ case require_caip2.Chains.Polygon:
22
+ case require_caip2.Chains.Monad:
23
+ case require_caip2.Chains.LayerX:
24
+ case require_caip2.Chains.Adi:
25
+ case require_caip2.Chains.Base:
26
+ case require_caip2.Chains.Arbitrum:
27
+ case require_caip2.Chains.Avalanche:
28
+ case require_caip2.Chains.Berachain:
29
+ case require_caip2.Chains.Plasma:
30
+ case require_caip2.Chains.Scroll:
31
+ case require_caip2.Chains.Abstract:
32
+ case require_caip2.Chains.HyperCore:
33
+ case require_caip2.Chains.HyperEvm: return (0, viem.getAddress)(a) === (0, viem.getAddress)(b);
34
+ case require_caip2.Chains.Aptos:
35
+ case require_caip2.Chains.Movement:
36
+ case require_caip2.Chains.Sui:
37
+ case require_caip2.Chains.Starknet: return compareHexAddress(a, b);
38
+ case require_caip2.Chains.TON: return compareTonAddress(a, b);
39
+ case require_caip2.Chains.Tron: return compareTronAddress(a, b);
40
+ case require_caip2.Chains.Stellar: return a.toUpperCase() === b.toUpperCase();
41
+ case require_caip2.Chains.Near:
42
+ case require_caip2.Chains.Bitcoin:
43
+ case require_caip2.Chains.BitcoinCash:
44
+ case require_caip2.Chains.Zcash:
45
+ case require_caip2.Chains.Dogecoin:
46
+ case require_caip2.Chains.Litecoin:
47
+ case require_caip2.Chains.Solana:
48
+ case require_caip2.Chains.Fogo:
49
+ case require_caip2.Chains.XRPL:
50
+ case require_caip2.Chains.Cardano:
51
+ case require_caip2.Chains.Aleo:
52
+ case require_caip2.Chains.Dash: return a === b;
53
+ default: return false;
54
+ }
55
+ } catch {
56
+ return false;
57
+ }
58
+ }
59
+ function compareHexAddress(a, b) {
60
+ const normalizedA = normalizeHexAddress(a);
61
+ const normalizedB = normalizeHexAddress(b);
62
+ if (normalizedA === null || normalizedB === null) return false;
63
+ return normalizedA === normalizedB;
64
+ }
65
+ function normalizeHexAddress(address) {
66
+ const withoutPrefix = address.toLowerCase().startsWith("0x") ? address.slice(2) : address;
67
+ if (withoutPrefix.length === 0 || !/^[0-9a-fA-F]+$/.test(withoutPrefix)) return null;
68
+ return withoutPrefix.replace(/^0+/, "").toLowerCase() || "0";
69
+ }
70
+ function compareTonAddress(a, b) {
71
+ const parsedA = require_ton_address.tryParseTonAddress(a);
72
+ const parsedB = require_ton_address.tryParseTonAddress(b);
73
+ if (parsedA === null || parsedB === null) return false;
74
+ return parsedA.workchainId === parsedB.workchainId && bytesEqual(parsedA.address, parsedB.address);
75
+ }
76
+ function compareTronAddress(a, b) {
77
+ const payloadA = decodeTronAddress(a);
78
+ const payloadB = decodeTronAddress(b);
79
+ if (payloadA === null || payloadB === null) return false;
80
+ return bytesEqual(payloadA, payloadB);
81
+ }
82
+ function decodeTronAddress(address) {
83
+ const base58Payload = decodeTronBase58Address(address);
84
+ if (base58Payload !== null) return base58Payload;
85
+ return decodeTronHexAddress(address);
86
+ }
87
+ function decodeTronBase58Address(address) {
88
+ try {
89
+ const decoded = _scure_base.base58.decode(address);
90
+ if (decoded.length !== 25) return null;
91
+ const payload = decoded.subarray(0, 21);
92
+ const checksum = decoded.subarray(21, 25);
93
+ const expectedChecksum = (0, _noble_hashes_sha2.sha256)((0, _noble_hashes_sha2.sha256)(payload)).subarray(0, 4);
94
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return null;
95
+ return payload[0] === 65 ? payload : null;
96
+ } catch {
97
+ return null;
98
+ }
99
+ }
100
+ function decodeTronHexAddress(address) {
101
+ try {
102
+ const decoded = _scure_base.hex.decode(address);
103
+ if (decoded.length !== 21) return null;
104
+ return decoded[0] === 65 ? decoded : null;
105
+ } catch {
106
+ return null;
107
+ }
108
+ }
109
+ function bytesEqual(a, b) {
110
+ if (a.length !== b.length) return false;
111
+ for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;
112
+ return true;
113
+ }
114
+
115
+ //#endregion
116
+ exports.compareAddresses = compareAddresses;
@@ -0,0 +1,115 @@
1
+ import { Chains } from "./caip2.js";
2
+ import { tryParseTonAddress } from "./ton-address.js";
3
+ import { getAddress } from "viem";
4
+ import { sha256 } from "@noble/hashes/sha2";
5
+ import { base58, hex } from "@scure/base";
6
+
7
+ //#region src/lib/compareAddresses.ts
8
+ /**
9
+ * Compares two addresses for equality using each chain's canonical form,
10
+ * e.g. to block transfers to the token's own address. Returns false (not
11
+ * throw) on malformed input.
12
+ */
13
+ function compareAddresses(a, b, blockchain) {
14
+ try {
15
+ switch (blockchain) {
16
+ case Chains.Ethereum:
17
+ case Chains.Optimism:
18
+ case Chains.BNB:
19
+ case Chains.Gnosis:
20
+ case Chains.Polygon:
21
+ case Chains.Monad:
22
+ case Chains.LayerX:
23
+ case Chains.Adi:
24
+ case Chains.Base:
25
+ case Chains.Arbitrum:
26
+ case Chains.Avalanche:
27
+ case Chains.Berachain:
28
+ case Chains.Plasma:
29
+ case Chains.Scroll:
30
+ case Chains.Abstract:
31
+ case Chains.HyperCore:
32
+ case Chains.HyperEvm: return getAddress(a) === getAddress(b);
33
+ case Chains.Aptos:
34
+ case Chains.Movement:
35
+ case Chains.Sui:
36
+ case Chains.Starknet: return compareHexAddress(a, b);
37
+ case Chains.TON: return compareTonAddress(a, b);
38
+ case Chains.Tron: return compareTronAddress(a, b);
39
+ case Chains.Stellar: return a.toUpperCase() === b.toUpperCase();
40
+ case Chains.Near:
41
+ case Chains.Bitcoin:
42
+ case Chains.BitcoinCash:
43
+ case Chains.Zcash:
44
+ case Chains.Dogecoin:
45
+ case Chains.Litecoin:
46
+ case Chains.Solana:
47
+ case Chains.Fogo:
48
+ case Chains.XRPL:
49
+ case Chains.Cardano:
50
+ case Chains.Aleo:
51
+ case Chains.Dash: return a === b;
52
+ default: return false;
53
+ }
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+ function compareHexAddress(a, b) {
59
+ const normalizedA = normalizeHexAddress(a);
60
+ const normalizedB = normalizeHexAddress(b);
61
+ if (normalizedA === null || normalizedB === null) return false;
62
+ return normalizedA === normalizedB;
63
+ }
64
+ function normalizeHexAddress(address) {
65
+ const withoutPrefix = address.toLowerCase().startsWith("0x") ? address.slice(2) : address;
66
+ if (withoutPrefix.length === 0 || !/^[0-9a-fA-F]+$/.test(withoutPrefix)) return null;
67
+ return withoutPrefix.replace(/^0+/, "").toLowerCase() || "0";
68
+ }
69
+ function compareTonAddress(a, b) {
70
+ const parsedA = tryParseTonAddress(a);
71
+ const parsedB = tryParseTonAddress(b);
72
+ if (parsedA === null || parsedB === null) return false;
73
+ return parsedA.workchainId === parsedB.workchainId && bytesEqual(parsedA.address, parsedB.address);
74
+ }
75
+ function compareTronAddress(a, b) {
76
+ const payloadA = decodeTronAddress(a);
77
+ const payloadB = decodeTronAddress(b);
78
+ if (payloadA === null || payloadB === null) return false;
79
+ return bytesEqual(payloadA, payloadB);
80
+ }
81
+ function decodeTronAddress(address) {
82
+ const base58Payload = decodeTronBase58Address(address);
83
+ if (base58Payload !== null) return base58Payload;
84
+ return decodeTronHexAddress(address);
85
+ }
86
+ function decodeTronBase58Address(address) {
87
+ try {
88
+ const decoded = base58.decode(address);
89
+ if (decoded.length !== 25) return null;
90
+ const payload = decoded.subarray(0, 21);
91
+ const checksum = decoded.subarray(21, 25);
92
+ const expectedChecksum = sha256(sha256(payload)).subarray(0, 4);
93
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return null;
94
+ return payload[0] === 65 ? payload : null;
95
+ } catch {
96
+ return null;
97
+ }
98
+ }
99
+ function decodeTronHexAddress(address) {
100
+ try {
101
+ const decoded = hex.decode(address);
102
+ if (decoded.length !== 21) return null;
103
+ return decoded[0] === 65 ? decoded : null;
104
+ } catch {
105
+ return null;
106
+ }
107
+ }
108
+ function bytesEqual(a, b) {
109
+ if (a.length !== b.length) return false;
110
+ for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;
111
+ return true;
112
+ }
113
+
114
+ //#endregion
115
+ export { compareAddresses };
@@ -57,6 +57,7 @@ function validateAddress(address, blockchain) {
57
57
  }
58
58
  }
59
59
  function validateEthAddress(address) {
60
+ if (address === "0x0000000000000000000000000000000000000000" || address.toLowerCase() === "0x000000000000000000000000000000000000dead") return false;
60
61
  return (0, viem.isAddress)(address, { strict: true });
61
62
  }
62
63
  /**
@@ -180,6 +181,7 @@ function verifyBchChecksum(address) {
180
181
  }
181
182
  function validateSolAddress(address) {
182
183
  try {
184
+ if (address === "11111111111111111111111111111111") return false;
183
185
  if (_scure_base.base58.decode(address).length !== 32) return false;
184
186
  return true;
185
187
  } catch {
@@ -56,6 +56,7 @@ function validateAddress(address, blockchain) {
56
56
  }
57
57
  }
58
58
  function validateEthAddress(address) {
59
+ if (address === "0x0000000000000000000000000000000000000000" || address.toLowerCase() === "0x000000000000000000000000000000000000dead") return false;
59
60
  return isAddress(address, { strict: true });
60
61
  }
61
62
  /**
@@ -179,6 +180,7 @@ function verifyBchChecksum(address) {
179
180
  }
180
181
  function validateSolAddress(address) {
181
182
  try {
183
+ if (address === "11111111111111111111111111111111") return false;
182
184
  if (base58.decode(address).length !== 32) return false;
183
185
  return true;
184
186
  } catch {
package/dist/src/sdk.cjs CHANGED
@@ -53,8 +53,7 @@ var IntentsSDK = class {
53
53
  }),
54
54
  new require_poa_bridge.PoaBridge({
55
55
  envConfig: this.envConfig,
56
- xrplRpcUrls,
57
- routeMigratedPoaTokensThroughOmniBridge: args.features?.routeMigratedPoaTokensThroughOmniBridge
56
+ xrplRpcUrls
58
57
  }),
59
58
  new require_hot_bridge.HotBridge({
60
59
  envConfig: this.envConfig,
@@ -75,7 +74,6 @@ var IntentsSDK = class {
75
74
  envConfig: this.envConfig,
76
75
  nearProvider,
77
76
  solverRelayApiKey: this.solverRelayApiKey,
78
- routeMigratedPoaTokensThroughOmniBridge: args.features?.routeMigratedPoaTokensThroughOmniBridge,
79
77
  bridgeConfig: args.bridgeConfigs?.[require_route_enum.RouteEnum.OmniBridge]
80
78
  }),
81
79
  new require_direct_bridge.DirectBridge({
@@ -38,13 +38,6 @@ interface IntentsSDKConfig {
38
38
  referral: string;
39
39
  solverRelayApiKey?: string;
40
40
  hotBridgeApiKey?: string;
41
- features?: {
42
- /**
43
- * Route migrated POA tokens (*.omft.near) through Omni Bridge.
44
- * Enable this to use Omni Bridge for POA tokens that have been migrated to the Omni infrastructure.
45
- */
46
- routeMigratedPoaTokensThroughOmniBridge?: boolean;
47
- };
48
41
  bridgeConfigs?: BridgeConfigs;
49
42
  }
50
43
  declare class IntentsSDK implements IIntentsSDK {
package/dist/src/sdk.d.ts CHANGED
@@ -38,13 +38,6 @@ interface IntentsSDKConfig {
38
38
  referral: string;
39
39
  solverRelayApiKey?: string;
40
40
  hotBridgeApiKey?: string;
41
- features?: {
42
- /**
43
- * Route migrated POA tokens (*.omft.near) through Omni Bridge.
44
- * Enable this to use Omni Bridge for POA tokens that have been migrated to the Omni infrastructure.
45
- */
46
- routeMigratedPoaTokensThroughOmniBridge?: boolean;
47
- };
48
41
  bridgeConfigs?: BridgeConfigs;
49
42
  }
50
43
  declare class IntentsSDK implements IIntentsSDK {
package/dist/src/sdk.js CHANGED
@@ -51,8 +51,7 @@ var IntentsSDK = class {
51
51
  }),
52
52
  new PoaBridge({
53
53
  envConfig: this.envConfig,
54
- xrplRpcUrls,
55
- routeMigratedPoaTokensThroughOmniBridge: args.features?.routeMigratedPoaTokensThroughOmniBridge
54
+ xrplRpcUrls
56
55
  }),
57
56
  new HotBridge$1({
58
57
  envConfig: this.envConfig,
@@ -73,7 +72,6 @@ var IntentsSDK = class {
73
72
  envConfig: this.envConfig,
74
73
  nearProvider,
75
74
  solverRelayApiKey: this.solverRelayApiKey,
76
- routeMigratedPoaTokensThroughOmniBridge: args.features?.routeMigratedPoaTokensThroughOmniBridge,
77
75
  bridgeConfig: args.bridgeConfigs?.[RouteEnum.OmniBridge]
78
76
  }),
79
77
  new DirectBridge({