@folks-router/js-sdk 0.1.1 → 0.3.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 (90) hide show
  1. package/README.md +18 -5
  2. package/dist/FolksRouterClient.d.mts +2 -1
  3. package/dist/FolksRouterClient.d.ts +2 -1
  4. package/dist/FolksRouterClient.js +7 -6
  5. package/dist/FolksRouterClient.js.map +1 -1
  6. package/dist/FolksRouterClient.mjs +6 -5
  7. package/dist/abiContracts/index.js +2 -2
  8. package/dist/abiContracts/index.js.map +1 -1
  9. package/dist/abiContracts/index.mjs +1 -1
  10. package/dist/checks.d.mts +6 -0
  11. package/dist/checks.d.ts +6 -0
  12. package/dist/checks.js +12 -0
  13. package/dist/checks.js.map +1 -0
  14. package/dist/checks.mjs +12 -0
  15. package/dist/checks.mjs.map +1 -0
  16. package/dist/{chunk-PT53HHNS.js → chunk-BVY7JBOW.js} +6 -6
  17. package/dist/chunk-BVY7JBOW.js.map +1 -0
  18. package/dist/chunk-DHU34JLH.mjs +74 -0
  19. package/dist/chunk-DHU34JLH.mjs.map +1 -0
  20. package/dist/{chunk-275BCIHG.mjs → chunk-EYGQH356.mjs} +13 -1
  21. package/dist/chunk-EYGQH356.mjs.map +1 -0
  22. package/dist/{chunk-FEVMPFNU.mjs → chunk-GQO2R6ON.mjs} +2 -2
  23. package/dist/{chunk-QLPM3CZI.js → chunk-GRBEXEIP.js} +6 -6
  24. package/dist/chunk-GRBEXEIP.js.map +1 -0
  25. package/dist/{chunk-HEZCGFMA.js → chunk-GTEUZNDL.js} +8 -2
  26. package/dist/chunk-GTEUZNDL.js.map +1 -0
  27. package/dist/{chunk-SAI2MUH2.mjs → chunk-GWQ2U3UO.mjs} +3 -3
  28. package/dist/{chunk-T37SGVC7.js → chunk-IVNVWRCM.js} +2 -2
  29. package/dist/chunk-IVNVWRCM.js.map +1 -0
  30. package/dist/{chunk-UBBN3ZYC.mjs → chunk-LE66KKNU.mjs} +10 -4
  31. package/dist/chunk-LE66KKNU.mjs.map +1 -0
  32. package/dist/chunk-MEC4OKES.js.map +1 -1
  33. package/dist/chunk-SADXHAXY.js +74 -0
  34. package/dist/chunk-SADXHAXY.js.map +1 -0
  35. package/dist/chunk-V4ANJGMA.js +76 -0
  36. package/dist/chunk-V4ANJGMA.js.map +1 -0
  37. package/dist/chunk-VGT24JDM.mjs +7 -0
  38. package/dist/{chunk-Z537KBSF.mjs.map → chunk-VGT24JDM.mjs.map} +1 -1
  39. package/dist/{chunk-J5OA3X2H.js → chunk-WKV4G7E6.js} +13 -1
  40. package/dist/chunk-WKV4G7E6.js.map +1 -0
  41. package/dist/chunk-WPZIOEUM.mjs +76 -0
  42. package/dist/chunk-WPZIOEUM.mjs.map +1 -0
  43. package/dist/{chunk-XVPB7BHI.js → chunk-WSXBJBEU.js} +2 -2
  44. package/dist/chunk-WSXBJBEU.js.map +1 -0
  45. package/dist/chunk-YMVA5ZDD.mjs +7 -0
  46. package/dist/{chunk-P22I3FWL.mjs.map → chunk-YMVA5ZDD.mjs.map} +1 -1
  47. package/dist/constants/mainnetConstants.d.mts +1 -1
  48. package/dist/constants/mainnetConstants.d.ts +1 -1
  49. package/dist/constants/mainnetConstants.js +2 -2
  50. package/dist/constants/mainnetConstants.js.map +1 -1
  51. package/dist/constants/mainnetConstants.mjs +1 -1
  52. package/dist/constants/testnetConstants.d.mts +1 -1
  53. package/dist/constants/testnetConstants.d.ts +1 -1
  54. package/dist/constants/testnetConstants.js +2 -2
  55. package/dist/constants/testnetConstants.js.map +1 -1
  56. package/dist/constants/testnetConstants.mjs +1 -1
  57. package/dist/index.d.mts +1 -0
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.js +13 -9
  60. package/dist/index.js.map +1 -1
  61. package/dist/index.mjs +13 -9
  62. package/dist/referrer.js +3 -3
  63. package/dist/referrer.js.map +1 -1
  64. package/dist/referrer.mjs +2 -2
  65. package/dist/swap.js +4 -4
  66. package/dist/swap.js.map +1 -1
  67. package/dist/swap.mjs +3 -3
  68. package/dist/types.d.mts +1 -1
  69. package/dist/types.d.ts +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/utils.js +2 -2
  72. package/dist/utils.js.map +1 -1
  73. package/dist/utils.mjs +1 -1
  74. package/package.json +4 -4
  75. package/dist/chunk-275BCIHG.mjs.map +0 -1
  76. package/dist/chunk-HEZCGFMA.js.map +0 -1
  77. package/dist/chunk-J5OA3X2H.js.map +0 -1
  78. package/dist/chunk-P22I3FWL.mjs +0 -7
  79. package/dist/chunk-PT53HHNS.js.map +0 -1
  80. package/dist/chunk-PYVHIBBZ.mjs +0 -133
  81. package/dist/chunk-PYVHIBBZ.mjs.map +0 -1
  82. package/dist/chunk-QLPM3CZI.js.map +0 -1
  83. package/dist/chunk-T37SGVC7.js.map +0 -1
  84. package/dist/chunk-UBBN3ZYC.mjs.map +0 -1
  85. package/dist/chunk-XNH4DJ6G.js +0 -133
  86. package/dist/chunk-XNH4DJ6G.js.map +0 -1
  87. package/dist/chunk-XVPB7BHI.js.map +0 -1
  88. package/dist/chunk-Z537KBSF.mjs +0 -7
  89. /package/dist/{chunk-FEVMPFNU.mjs.map → chunk-GQO2R6ON.mjs.map} +0 -0
  90. /package/dist/{chunk-SAI2MUH2.mjs.map → chunk-GWQ2U3UO.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/abiContracts/index.ts","../src/abiContracts/router.json"],"sourcesContent":["import { ABIContract } from \"algosdk\";\nimport routerABI from \"./router.json\";\n\nexport const routerABIContract = new ABIContract(routerABI);\n","{\n \"name\": \"router\",\n \"methods\": [\n {\n \"name\": \"opt_into_assets\",\n \"args\": [\n {\n \"type\": \"uint64[]\",\n \"name\": \"opt_in_assets\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"swap_forward\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"end_swap_txn_offset_index\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"input_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"percent_input_asset\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"increase_budget\"\n },\n {\n \"type\": \"(uint64,bool,uint64,uint64,uint64,address,uint64,uint64,address,address,uint64,uint64)[]\",\n \"name\": \"forward_path\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"fi_end_swap\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"output_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"min_received\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee\"\n },\n {\n \"type\": \"address\",\n \"name\": \"referrer\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"fo_end_swap\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"output_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"exact_received\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee\"\n },\n {\n \"type\": \"address\",\n \"name\": \"referrer\"\n },\n {\n \"type\": \"(uint64,bool,uint64,uint64,uint64,address,uint64,uint64,address,address,uint64,uint64)[]\",\n \"name\": \"excess_path\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n }\n ],\n \"networks\": {}\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;;;ACA5B;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,IACT;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAY,CAAC;AACf;;;AD9FO,IAAM,oBAAoB,IAAI,YAAY,cAAS;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP,IAAM,SAAS,YAAY,CAAC;AAK5B,SAAS,oBACP,SACA,MACA,IACA,QACA,QACa;AACb,SAAO,YAAY,IACf,wCAAwC,MAAM,IAAI,QAAW,QAAW,QAAQ,QAAW,SAAS,MAAM,IAC1G,kCAAkC,MAAM,IAAI,QAAQ,QAAW,QAAW,MAAM;AACtF;AAEA,IAAM,WAAW,OAAO,GAAG;AAE3B,SAAS,SAAS,IAAY,IAAY,OAAuB;AAC/D,SAAQ,KAAK,KAAM;AACrB","sourcesContent":["import {\n makeAssetTransferTxnWithSuggestedParams,\n makePaymentTxnWithSuggestedParams,\n SuggestedParams,\n Transaction,\n} from \"algosdk\";\n\nconst signer = async () => [];\n\n/**\n * Transfer algo or asset. 0 assetId indicates algo transfer, else asset transfer.\n */\nfunction transferAlgoOrAsset(\n assetId: number,\n from: string,\n to: string,\n amount: number | bigint,\n params: SuggestedParams,\n): Transaction {\n return assetId !== 0\n ? makeAssetTransferTxnWithSuggestedParams(from, to, undefined, undefined, amount, undefined, assetId, params)\n : makePaymentTxnWithSuggestedParams(from, to, amount, undefined, undefined, params);\n}\n\nconst ONE_4_DP = BigInt(1e4);\n\nfunction mulScale(n1: bigint, n2: bigint, scale: bigint): bigint {\n return (n1 * n2) / scale;\n}\n\nexport { signer, transferAlgoOrAsset, ONE_4_DP, mulScale };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/abiContracts/index.ts","../src/abiContracts/router.json"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;;;ACA5B;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,IACT;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAY,CAAC;AACf;;;AD9FO,IAAM,oBAAoB,IAAI,YAAY,cAAS","sourcesContent":["import { ABIContract } from \"algosdk\";\nimport routerABI from \"./router.json\";\n\nexport const routerABIContract = new ABIContract(routerABI);\n","{\n \"name\": \"router\",\n \"methods\": [\n {\n \"name\": \"opt_into_assets\",\n \"args\": [\n {\n \"type\": \"uint64[]\",\n \"name\": \"opt_in_assets\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"swap_forward\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"end_swap_txn_offset_index\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"input_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"percent_input_asset\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"increase_budget\"\n },\n {\n \"type\": \"(uint64,bool,uint64,uint64,uint64,address,uint64,uint64,address,address,uint64,uint64)[]\",\n \"name\": \"forward_path\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"fi_end_swap\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"output_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"min_received\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee\"\n },\n {\n \"type\": \"address\",\n \"name\": \"referrer\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n },\n {\n \"name\": \"fo_end_swap\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"output_asset_id\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"exact_received\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee\"\n },\n {\n \"type\": \"address\",\n \"name\": \"referrer\"\n },\n {\n \"type\": \"(uint64,bool,uint64,uint64,uint64,address,uint64,uint64,address,address,uint64,uint64)[]\",\n \"name\": \"excess_path\"\n }\n ],\n \"returns\": {\n \"type\": \"void\"\n }\n }\n ],\n \"networks\": {}\n}\n"]}
@@ -1,7 +0,0 @@
1
- // src/constants/testnetConstants.ts
2
- var TestnetFolksRouterAppId = 430586725;
3
-
4
- export {
5
- TestnetFolksRouterAppId
6
- };
7
- //# sourceMappingURL=chunk-P22I3FWL.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/swap.ts"],"names":[],"mappings":";;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,8BACP,OACA,YACA,UACA,QACe;AAEf,QAAM,SAAS,SAAS,SAAS;AACjC,QAAM,aAAa,oBAAoB,GAAG,YAAY,sBAAsB,KAAK,GAAG,QAAQ,MAAM;AAGlG,QAAM,MAAM,IAAI,0BAA0B;AAC1C,MAAI,cAAc;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA,OAAO;AAAA,IACP,QAAQ,gBAAgB,kBAAkB,SAAS,iBAAiB;AAAA,IACpE,YAAY,CAAC,QAAQ;AAAA,IACrB,kBAAkB;AAAA,IAClB,iBAAiB,EAAE,GAAG,QAAQ,MAAM,IAAI,SAAS,UAAU,IAAK;AAAA,EAClE,CAAC;AACD,QAAM,OAAO,IAAI,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM;AAC7C,QAAI,QAAQ;AACZ,WAAO;AAAA,EACT,CAAC;AACD,SAAO,cAAc,CAAC,YAAY,KAAK,CAAC,CAAE,CAAC;AAC7C","sourcesContent":["import {\n assignGroupID,\n AtomicTransactionComposer,\n getApplicationAddress,\n getMethodByName,\n SuggestedParams,\n Transaction,\n} from \"algosdk\";\nimport { routerABIContract } from \"./abiContracts\";\nimport { signer, transferAlgoOrAsset } from \"./utils\";\n\nfunction prepareEnableAssetToBeSwapped(\n appId: number,\n senderAddr: string,\n assetIds: number[],\n params: SuggestedParams,\n): Transaction[] {\n // payment txn\n const amount = assetIds.length * 0.1e6;\n const paymentTxn = transferAlgoOrAsset(0, senderAddr, getApplicationAddress(appId), amount, params);\n\n // opt in txn\n const atc = new AtomicTransactionComposer();\n atc.addMethodCall({\n sender: senderAddr,\n signer,\n appID: appId,\n method: getMethodByName(routerABIContract.methods, \"opt_into_assets\"),\n methodArgs: [assetIds],\n appForeignAssets: assetIds,\n suggestedParams: { ...params, fee: (1 + assetIds.length) * 1000 },\n });\n const txns = atc.buildGroup().map(({ txn }) => {\n txn.group = undefined;\n return txn;\n });\n return assignGroupID([paymentTxn, txns[0]!]);\n}\n\nexport { prepareEnableAssetToBeSwapped };\n"]}
@@ -1,133 +0,0 @@
1
- import {
2
- TestnetFolksRouterAppId
3
- } from "./chunk-P22I3FWL.mjs";
4
- import {
5
- ONE_4_DP,
6
- mulScale
7
- } from "./chunk-UBBN3ZYC.mjs";
8
- import {
9
- routerABIContract
10
- } from "./chunk-275BCIHG.mjs";
11
- import {
12
- MainnetFolksRouterAppId
13
- } from "./chunk-Z537KBSF.mjs";
14
-
15
- // src/FolksRouterClient.ts
16
- import {
17
- ABIType,
18
- decodeUnsignedTransaction,
19
- encodeAddress,
20
- getApplicationAddress,
21
- OnApplicationComplete,
22
- TransactionType
23
- } from "algosdk";
24
- import axios from "axios";
25
- var BASE_URL = "https://api.folksrouter.io";
26
- var FolksRouterClient = class {
27
- constructor(network, apiKey) {
28
- let url = BASE_URL;
29
- if (network === "testnet" /* TESTNET */)
30
- url += "/testnet";
31
- url += "/v1";
32
- if (apiKey !== void 0) {
33
- url += "/pro";
34
- }
35
- this.network = network;
36
- this.api = axios.create({ baseURL: url, headers: { "x-api-key": apiKey } });
37
- }
38
- async fetchSwapQuote(params, maxGroupSize, feeBps, referrer) {
39
- const { fromAssetId, toAssetId, amount, swapMode } = params;
40
- const { data } = await this.api.get("/fetch/quote", {
41
- params: {
42
- network: this.network,
43
- fromAsset: fromAssetId,
44
- toAsset: toAssetId,
45
- amount,
46
- type: swapMode,
47
- maxGroupSize,
48
- feeBps,
49
- referrer
50
- }
51
- });
52
- if (!data.success)
53
- throw Error(data.errors);
54
- const { quoteAmount, priceImpact, microalgoTxnsFee, txnPayload } = data.result;
55
- return {
56
- quoteAmount: BigInt(quoteAmount),
57
- priceImpact,
58
- microalgoTxnsFee,
59
- txnPayload
60
- };
61
- }
62
- async prepareSwapTransactions(params, userAddress, slippageBps, swapQuote) {
63
- const { fromAssetId, toAssetId, amount, swapMode } = params;
64
- const { data } = await this.api.get("/prepare/swap", {
65
- params: {
66
- userAddress,
67
- slippageBps,
68
- txnPayload: swapQuote.txnPayload
69
- }
70
- });
71
- if (!data.success)
72
- throw Error(data.errors);
73
- const unsignedTxns = data.result.map(
74
- (txn) => decodeUnsignedTransaction(Buffer.from(txn, "base64"))
75
- );
76
- const folksRouterAppId = this.network == "mainnet" /* MAINNET */ ? MainnetFolksRouterAppId : TestnetFolksRouterAppId;
77
- const folksRouterAddr = getApplicationAddress(folksRouterAppId);
78
- const getHexSelector = (method) => Buffer.from(routerABIContract.getMethodByName(method).getSelector()).toString("hex");
79
- const uint8ArrayToHex = (uint8Array) => Buffer.from(uint8Array).toString("hex");
80
- const sendAssetTxn = unsignedTxns[0];
81
- const swapForwardTxns = unsignedTxns.slice(1, -1);
82
- const swapEndTxn = unsignedTxns[unsignedTxns.length - 1];
83
- if (sendAssetTxn.reKeyTo !== void 0)
84
- throw Error("Unexpected rekey");
85
- if (sendAssetTxn.closeRemainderTo !== void 0)
86
- throw Error("Unexpected close remainder to");
87
- if (encodeAddress(sendAssetTxn.to.publicKey) !== folksRouterAddr)
88
- throw Error("Incorrect receiver");
89
- if (!(fromAssetId === 0 && sendAssetTxn.type == TransactionType.pay) && !(fromAssetId === sendAssetTxn.assetIndex && sendAssetTxn.type === TransactionType.axfer))
90
- throw Error("Sending incorrect algo/asset");
91
- const sendAmount = BigInt(sendAssetTxn.amount);
92
- swapForwardTxns.forEach((txn, i) => {
93
- if (txn.appIndex !== folksRouterAppId)
94
- throw Error("Incorrect application index");
95
- if (txn.type !== TransactionType.appl && txn.appOnComplete !== OnApplicationComplete.NoOpOC)
96
- throw Error("Incorrect transaction type");
97
- const swapForwardSelector = uint8ArrayToHex(txn.appArgs.at(0));
98
- if (swapForwardSelector !== getHexSelector("swap_forward"))
99
- throw Error("Incorrect selector");
100
- });
101
- if (swapEndTxn.appIndex !== folksRouterAppId)
102
- throw Error("Incorrect application index");
103
- if (swapEndTxn.type !== TransactionType.appl && swapEndTxn.appOnComplete !== OnApplicationComplete.NoOpOC)
104
- throw Error("Incorrect transaction type");
105
- const swapEndSelector = uint8ArrayToHex(swapEndTxn.appArgs.at(0));
106
- const isFixedInput = swapEndSelector === getHexSelector("fi_end_swap");
107
- const isFixedOutput = swapEndSelector === getHexSelector("fo_end_swap");
108
- if (isFixedInput && swapMode !== "FIXED_INPUT" /* FIXED_INPUT */ || isFixedOutput && swapMode !== "FIXED_OUTPUT" /* FIXED_OUTPUT */)
109
- throw Error("Incorrect swap mode");
110
- if (ABIType.from("uint64").decode(swapEndTxn.appArgs.at(1)) !== BigInt(toAssetId))
111
- throw Error("Receiving incorrect algo/asset");
112
- const receiveAmount = ABIType.from("uint64").decode(swapEndTxn.appArgs.at(2));
113
- const slippageAmount = mulScale(swapQuote.quoteAmount, BigInt(slippageBps), ONE_4_DP);
114
- if (isFixedInput) {
115
- if (amount !== sendAmount)
116
- throw Error("Sending incorrect fixed input amount");
117
- if (swapQuote.quoteAmount - slippageAmount !== receiveAmount)
118
- throw Error("Receiving incorrect fixed input amount");
119
- }
120
- if (isFixedOutput) {
121
- if (swapQuote.quoteAmount + slippageAmount !== sendAmount)
122
- throw Error("Sending incorrect fixed output amount");
123
- if (amount !== receiveAmount)
124
- throw Error("Receiving incorrect fixed output amount");
125
- }
126
- return data.result;
127
- }
128
- };
129
-
130
- export {
131
- FolksRouterClient
132
- };
133
- //# sourceMappingURL=chunk-PYVHIBBZ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/FolksRouterClient.ts"],"sourcesContent":["import {\n ABIType,\n decodeUnsignedTransaction,\n encodeAddress,\n getApplicationAddress,\n OnApplicationComplete,\n Transaction,\n TransactionType,\n} from \"algosdk\";\nimport axios, { AxiosInstance } from \"axios\";\nimport { MainnetFolksRouterAppId } from \"./constants/mainnetConstants\";\nimport { TestnetFolksRouterAppId } from \"./constants/testnetConstants\";\nimport { Network, SwapMode, SwapParams, SwapQuote, SwapTransactions } from \"./types\";\nimport { routerABIContract } from \"./abiContracts\";\nimport { mulScale, ONE_4_DP } from \"./utils\";\n\nconst BASE_URL = \"https://api.folksrouter.io\";\n\nexport class FolksRouterClient {\n private readonly network: Network;\n private readonly api: AxiosInstance;\n\n constructor(network: Network, apiKey?: string) {\n // construct url\n let url = BASE_URL;\n if (network === Network.TESTNET) url += \"/testnet\";\n url += \"/v1\";\n if (apiKey !== undefined) {\n url += \"/pro\";\n }\n\n // set\n this.network = network;\n this.api = axios.create({ baseURL: url, headers: { \"x-api-key\": apiKey } });\n }\n\n public async fetchSwapQuote(\n params: SwapParams,\n maxGroupSize?: number,\n feeBps?: number | bigint,\n referrer?: string,\n ): Promise<SwapQuote> {\n const { fromAssetId, toAssetId, amount, swapMode } = params;\n\n const { data } = await this.api.get(\"/fetch/quote\", {\n params: {\n network: this.network,\n fromAsset: fromAssetId,\n toAsset: toAssetId,\n amount,\n type: swapMode,\n maxGroupSize,\n feeBps,\n referrer,\n },\n });\n if (!data.success) throw Error(data.errors);\n\n const { quoteAmount, priceImpact, microalgoTxnsFee, txnPayload } = data.result;\n\n return {\n quoteAmount: BigInt(quoteAmount),\n priceImpact,\n microalgoTxnsFee,\n txnPayload,\n };\n }\n\n public async prepareSwapTransactions(\n params: SwapParams,\n userAddress: string,\n slippageBps: number | bigint,\n swapQuote: SwapQuote,\n ): Promise<SwapTransactions> {\n const { fromAssetId, toAssetId, amount, swapMode } = params;\n\n // fetch transactions\n const { data } = await this.api.get(\"/prepare/swap\", {\n params: {\n userAddress,\n slippageBps,\n txnPayload: swapQuote.txnPayload,\n },\n });\n if (!data.success) throw Error(data.errors);\n\n // check transactions\n const unsignedTxns: Transaction[] = data.result.map((txn: string) =>\n decodeUnsignedTransaction(Buffer.from(txn, \"base64\")),\n );\n const folksRouterAppId = this.network == Network.MAINNET ? MainnetFolksRouterAppId : TestnetFolksRouterAppId;\n const folksRouterAddr = getApplicationAddress(folksRouterAppId);\n const getHexSelector = (method: string) =>\n Buffer.from(routerABIContract.getMethodByName(method).getSelector()).toString(\"hex\");\n const uint8ArrayToHex = (uint8Array: Uint8Array) => Buffer.from(uint8Array).toString(\"hex\");\n\n const sendAssetTxn = unsignedTxns[0]!;\n const swapForwardTxns = unsignedTxns.slice(1, -1)!;\n const swapEndTxn = unsignedTxns[unsignedTxns.length - 1]!;\n\n // send algo/asset\n if (sendAssetTxn.reKeyTo !== undefined) throw Error(\"Unexpected rekey\");\n if (sendAssetTxn.closeRemainderTo !== undefined) throw Error(\"Unexpected close remainder to\");\n if (encodeAddress(sendAssetTxn.to.publicKey) !== folksRouterAddr) throw Error(\"Incorrect receiver\");\n if (\n !(fromAssetId === 0 && sendAssetTxn.type == TransactionType.pay) &&\n !(fromAssetId === sendAssetTxn.assetIndex && sendAssetTxn.type === TransactionType.axfer)\n )\n throw Error(\"Sending incorrect algo/asset\");\n const sendAmount = BigInt(sendAssetTxn.amount);\n\n // swap forward txns\n swapForwardTxns.forEach((txn, i) => {\n if (txn.appIndex !== folksRouterAppId) throw Error(\"Incorrect application index\");\n if (txn.type !== TransactionType.appl && txn.appOnComplete !== OnApplicationComplete.NoOpOC)\n throw Error(\"Incorrect transaction type\");\n const swapForwardSelector = uint8ArrayToHex(txn.appArgs!.at(0)!);\n if (swapForwardSelector !== getHexSelector(\"swap_forward\")) throw Error(\"Incorrect selector\");\n });\n\n // receive algo/asset\n if (swapEndTxn.appIndex !== folksRouterAppId) throw Error(\"Incorrect application index\");\n if (swapEndTxn.type !== TransactionType.appl && swapEndTxn.appOnComplete !== OnApplicationComplete.NoOpOC)\n throw Error(\"Incorrect transaction type\");\n const swapEndSelector = uint8ArrayToHex(swapEndTxn.appArgs!.at(0)!);\n const isFixedInput = swapEndSelector === getHexSelector(\"fi_end_swap\");\n const isFixedOutput = swapEndSelector === getHexSelector(\"fo_end_swap\");\n if ((isFixedInput && swapMode !== SwapMode.FIXED_INPUT) || (isFixedOutput && swapMode !== SwapMode.FIXED_OUTPUT))\n throw Error(\"Incorrect swap mode\");\n if (ABIType.from(\"uint64\").decode(swapEndTxn.appArgs!.at(1)!) !== BigInt(toAssetId))\n throw Error(\"Receiving incorrect algo/asset\");\n const receiveAmount = ABIType.from(\"uint64\").decode(swapEndTxn.appArgs!.at(2)!) as bigint;\n\n // check amounts\n const slippageAmount = mulScale(swapQuote.quoteAmount, BigInt(slippageBps), ONE_4_DP);\n if (isFixedInput) {\n if (amount !== sendAmount) throw Error(\"Sending incorrect fixed input amount\");\n if (swapQuote.quoteAmount - slippageAmount !== receiveAmount)\n throw Error(\"Receiving incorrect fixed input amount\");\n }\n if (isFixedOutput) {\n if (swapQuote.quoteAmount + slippageAmount !== sendAmount) throw Error(\"Sending incorrect fixed output amount\");\n if (amount !== receiveAmount) throw Error(\"Receiving incorrect fixed output amount\");\n }\n\n // return\n return data.result;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/referrer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assignGroupID,\n decodeAddress,\n encodeAddress,\n encodeUnsignedTransaction,\n LogicSigAccount,\n SuggestedParams,\n Transaction,\n} from \"algosdk\";\nimport { ReferrerGroupTransaction } from \"./types\";\nimport { transferAlgoOrAsset } from \"./utils\";\n\nfunction getReferrerLogicSig(referrerAddr: string): LogicSigAccount {\n const prefix = Uint8Array.from([\n 9, 32, 3, 1, 4, 0, 128, 12, 70, 79, 76, 75, 83, 95, 82, 79, 85, 84, 69, 82, 72, 49, 1, 36, 18, 68, 49, 32, 50, 3,\n 18, 68, 49, 9, 50, 3, 18, 68, 49, 21, 50, 3, 18, 68, 49, 16, 34, 18, 49, 16, 35, 18, 17, 68, 49, 16, 35, 18, 49, 20,\n 49, 0, 18, 16, 64, 0, 53, 49, 16, 35, 18, 64, 0, 41, 49, 7, 128, 32,\n ]);\n const suffix = Uint8Array.from([\n 18, 68, 66, 0, 79, 49, 20, 66, 255, 212, 49, 22, 34, 9, 56, 16, 34, 18, 68, 49, 22, 34, 9, 56, 0, 49, 0, 19, 68, 49,\n 22, 34, 9, 56, 7, 49, 0, 18, 68, 49, 22, 34, 9, 56, 8, 50, 1, 18, 68, 49, 22, 34, 9, 56, 32, 50, 3, 18, 68, 49, 22,\n 34, 9, 56, 9, 50, 3, 18, 68, 49, 22, 34, 9, 56, 21, 50, 3, 18, 68, 49, 18, 36, 18, 68, 34, 67,\n ]);\n return new LogicSigAccount(new Uint8Array([...prefix, ...decodeAddress(referrerAddr).publicKey, ...suffix]));\n}\n\nconst buildReferrerGroupTransaction = (txns: Transaction[], lsig: LogicSigAccount): ReferrerGroupTransaction =>\n assignGroupID(txns).map((txn) => ({\n unsignedTxn: encodeUnsignedTransaction(txn),\n lsig: encodeAddress(txn.from.publicKey) === lsig.address() ? lsig.toByte() : undefined,\n }));\n\nfunction prepareReferrerOptIntoAsset(\n senderAddr: string,\n referrerAddr: string,\n assetId: number,\n params: SuggestedParams,\n): ReferrerGroupTransaction {\n const lsig = getReferrerLogicSig(referrerAddr);\n\n // generate transactions\n const MIN_BALANCE = BigInt(0.1e6);\n const minBalancePayment = transferAlgoOrAsset(0, senderAddr, lsig.address(), MIN_BALANCE, { ...params, fee: 2000 });\n const assetOptIn = transferAlgoOrAsset(assetId, lsig.address(), lsig.address(), 0, { ...params, fee: 0 });\n\n // group, encode and attach lsig\n return buildReferrerGroupTransaction([minBalancePayment, assetOptIn], lsig);\n}\n\nfunction prepareClaimReferrerFees(\n senderAddr: string,\n referrerAddr: string,\n assetId: number,\n amount: number | bigint,\n params: SuggestedParams,\n): ReferrerGroupTransaction {\n const lsig = getReferrerLogicSig(referrerAddr);\n\n // generate transactions\n const groupFeePayment = transferAlgoOrAsset(0, senderAddr, senderAddr, 0, { ...params, fee: 2000 });\n const claim = transferAlgoOrAsset(assetId, lsig.address(), referrerAddr, amount, { ...params, fee: 0 });\n\n // group, encode and attach lsig\n return buildReferrerGroupTransaction([groupFeePayment, claim], lsig);\n}\n\nexport { getReferrerLogicSig, prepareReferrerOptIntoAsset, prepareClaimReferrerFees };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants/testnetConstants.ts"],"names":[],"mappings":";AAAA,IAAM,0BAA0B","sourcesContent":["const TestnetFolksRouterAppId = 430586725;\n\nexport { TestnetFolksRouterAppId };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import {\n makeAssetTransferTxnWithSuggestedParams,\n makePaymentTxnWithSuggestedParams,\n SuggestedParams,\n Transaction,\n} from \"algosdk\";\n\nconst signer = async () => [];\n\n/**\n * Transfer algo or asset. 0 assetId indicates algo transfer, else asset transfer.\n */\nfunction transferAlgoOrAsset(\n assetId: number,\n from: string,\n to: string,\n amount: number | bigint,\n params: SuggestedParams,\n): Transaction {\n return assetId !== 0\n ? makeAssetTransferTxnWithSuggestedParams(from, to, undefined, undefined, amount, undefined, assetId, params)\n : makePaymentTxnWithSuggestedParams(from, to, amount, undefined, undefined, params);\n}\n\nconst ONE_4_DP = BigInt(1e4);\n\nfunction mulScale(n1: bigint, n2: bigint, scale: bigint): bigint {\n return (n1 * n2) / scale;\n}\n\nexport { signer, transferAlgoOrAsset, ONE_4_DP, mulScale };\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP,IAAM,SAAS,YAAY,CAAC;AAK5B,SAAS,oBACP,SACA,MACA,IACA,QACA,QACa;AACb,SAAO,YAAY,IACf,wCAAwC,MAAM,IAAI,QAAW,QAAW,QAAQ,QAAW,SAAS,MAAM,IAC1G,kCAAkC,MAAM,IAAI,QAAQ,QAAW,QAAW,MAAM;AACtF;AAEA,IAAM,WAAW,OAAO,GAAG;AAE3B,SAAS,SAAS,IAAY,IAAY,OAAuB;AAC/D,SAAQ,KAAK,KAAM;AACrB;","names":[]}
@@ -1,133 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
- var _chunkT37SGVC7js = require('./chunk-T37SGVC7.js');
4
-
5
-
6
-
7
- var _chunkHEZCGFMAjs = require('./chunk-HEZCGFMA.js');
8
-
9
-
10
- var _chunkJ5OA3X2Hjs = require('./chunk-J5OA3X2H.js');
11
-
12
-
13
- var _chunkXVPB7BHIjs = require('./chunk-XVPB7BHI.js');
14
-
15
- // src/FolksRouterClient.ts
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
- var _algosdk = require('algosdk');
24
- var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);
25
- var BASE_URL = "https://api.folksrouter.io";
26
- var FolksRouterClient = class {
27
- constructor(network, apiKey) {
28
- let url = BASE_URL;
29
- if (network === "testnet" /* TESTNET */)
30
- url += "/testnet";
31
- url += "/v1";
32
- if (apiKey !== void 0) {
33
- url += "/pro";
34
- }
35
- this.network = network;
36
- this.api = _axios2.default.create({ baseURL: url, headers: { "x-api-key": apiKey } });
37
- }
38
- async fetchSwapQuote(params, maxGroupSize, feeBps, referrer) {
39
- const { fromAssetId, toAssetId, amount, swapMode } = params;
40
- const { data } = await this.api.get("/fetch/quote", {
41
- params: {
42
- network: this.network,
43
- fromAsset: fromAssetId,
44
- toAsset: toAssetId,
45
- amount,
46
- type: swapMode,
47
- maxGroupSize,
48
- feeBps,
49
- referrer
50
- }
51
- });
52
- if (!data.success)
53
- throw Error(data.errors);
54
- const { quoteAmount, priceImpact, microalgoTxnsFee, txnPayload } = data.result;
55
- return {
56
- quoteAmount: BigInt(quoteAmount),
57
- priceImpact,
58
- microalgoTxnsFee,
59
- txnPayload
60
- };
61
- }
62
- async prepareSwapTransactions(params, userAddress, slippageBps, swapQuote) {
63
- const { fromAssetId, toAssetId, amount, swapMode } = params;
64
- const { data } = await this.api.get("/prepare/swap", {
65
- params: {
66
- userAddress,
67
- slippageBps,
68
- txnPayload: swapQuote.txnPayload
69
- }
70
- });
71
- if (!data.success)
72
- throw Error(data.errors);
73
- const unsignedTxns = data.result.map(
74
- (txn) => _algosdk.decodeUnsignedTransaction.call(void 0, Buffer.from(txn, "base64"))
75
- );
76
- const folksRouterAppId = this.network == "mainnet" /* MAINNET */ ? _chunkXVPB7BHIjs.MainnetFolksRouterAppId : _chunkT37SGVC7js.TestnetFolksRouterAppId;
77
- const folksRouterAddr = _algosdk.getApplicationAddress.call(void 0, folksRouterAppId);
78
- const getHexSelector = (method) => Buffer.from(_chunkJ5OA3X2Hjs.routerABIContract.getMethodByName(method).getSelector()).toString("hex");
79
- const uint8ArrayToHex = (uint8Array) => Buffer.from(uint8Array).toString("hex");
80
- const sendAssetTxn = unsignedTxns[0];
81
- const swapForwardTxns = unsignedTxns.slice(1, -1);
82
- const swapEndTxn = unsignedTxns[unsignedTxns.length - 1];
83
- if (sendAssetTxn.reKeyTo !== void 0)
84
- throw Error("Unexpected rekey");
85
- if (sendAssetTxn.closeRemainderTo !== void 0)
86
- throw Error("Unexpected close remainder to");
87
- if (_algosdk.encodeAddress.call(void 0, sendAssetTxn.to.publicKey) !== folksRouterAddr)
88
- throw Error("Incorrect receiver");
89
- if (!(fromAssetId === 0 && sendAssetTxn.type == _algosdk.TransactionType.pay) && !(fromAssetId === sendAssetTxn.assetIndex && sendAssetTxn.type === _algosdk.TransactionType.axfer))
90
- throw Error("Sending incorrect algo/asset");
91
- const sendAmount = BigInt(sendAssetTxn.amount);
92
- swapForwardTxns.forEach((txn, i) => {
93
- if (txn.appIndex !== folksRouterAppId)
94
- throw Error("Incorrect application index");
95
- if (txn.type !== _algosdk.TransactionType.appl && txn.appOnComplete !== _algosdk.OnApplicationComplete.NoOpOC)
96
- throw Error("Incorrect transaction type");
97
- const swapForwardSelector = uint8ArrayToHex(txn.appArgs.at(0));
98
- if (swapForwardSelector !== getHexSelector("swap_forward"))
99
- throw Error("Incorrect selector");
100
- });
101
- if (swapEndTxn.appIndex !== folksRouterAppId)
102
- throw Error("Incorrect application index");
103
- if (swapEndTxn.type !== _algosdk.TransactionType.appl && swapEndTxn.appOnComplete !== _algosdk.OnApplicationComplete.NoOpOC)
104
- throw Error("Incorrect transaction type");
105
- const swapEndSelector = uint8ArrayToHex(swapEndTxn.appArgs.at(0));
106
- const isFixedInput = swapEndSelector === getHexSelector("fi_end_swap");
107
- const isFixedOutput = swapEndSelector === getHexSelector("fo_end_swap");
108
- if (isFixedInput && swapMode !== "FIXED_INPUT" /* FIXED_INPUT */ || isFixedOutput && swapMode !== "FIXED_OUTPUT" /* FIXED_OUTPUT */)
109
- throw Error("Incorrect swap mode");
110
- if (_algosdk.ABIType.from("uint64").decode(swapEndTxn.appArgs.at(1)) !== BigInt(toAssetId))
111
- throw Error("Receiving incorrect algo/asset");
112
- const receiveAmount = _algosdk.ABIType.from("uint64").decode(swapEndTxn.appArgs.at(2));
113
- const slippageAmount = _chunkHEZCGFMAjs.mulScale.call(void 0, swapQuote.quoteAmount, BigInt(slippageBps), _chunkHEZCGFMAjs.ONE_4_DP);
114
- if (isFixedInput) {
115
- if (amount !== sendAmount)
116
- throw Error("Sending incorrect fixed input amount");
117
- if (swapQuote.quoteAmount - slippageAmount !== receiveAmount)
118
- throw Error("Receiving incorrect fixed input amount");
119
- }
120
- if (isFixedOutput) {
121
- if (swapQuote.quoteAmount + slippageAmount !== sendAmount)
122
- throw Error("Sending incorrect fixed output amount");
123
- if (amount !== receiveAmount)
124
- throw Error("Receiving incorrect fixed output amount");
125
- }
126
- return data.result;
127
- }
128
- };
129
-
130
-
131
-
132
- exports.FolksRouterClient = FolksRouterClient;
133
- //# sourceMappingURL=chunk-XNH4DJ6G.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/FolksRouterClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ABIType,\n decodeUnsignedTransaction,\n encodeAddress,\n getApplicationAddress,\n OnApplicationComplete,\n Transaction,\n TransactionType,\n} from \"algosdk\";\nimport axios, { AxiosInstance } from \"axios\";\nimport { MainnetFolksRouterAppId } from \"./constants/mainnetConstants\";\nimport { TestnetFolksRouterAppId } from \"./constants/testnetConstants\";\nimport { Network, SwapMode, SwapParams, SwapQuote, SwapTransactions } from \"./types\";\nimport { routerABIContract } from \"./abiContracts\";\nimport { mulScale, ONE_4_DP } from \"./utils\";\n\nconst BASE_URL = \"https://api.folksrouter.io\";\n\nexport class FolksRouterClient {\n private readonly network: Network;\n private readonly api: AxiosInstance;\n\n constructor(network: Network, apiKey?: string) {\n // construct url\n let url = BASE_URL;\n if (network === Network.TESTNET) url += \"/testnet\";\n url += \"/v1\";\n if (apiKey !== undefined) {\n url += \"/pro\";\n }\n\n // set\n this.network = network;\n this.api = axios.create({ baseURL: url, headers: { \"x-api-key\": apiKey } });\n }\n\n public async fetchSwapQuote(\n params: SwapParams,\n maxGroupSize?: number,\n feeBps?: number | bigint,\n referrer?: string,\n ): Promise<SwapQuote> {\n const { fromAssetId, toAssetId, amount, swapMode } = params;\n\n const { data } = await this.api.get(\"/fetch/quote\", {\n params: {\n network: this.network,\n fromAsset: fromAssetId,\n toAsset: toAssetId,\n amount,\n type: swapMode,\n maxGroupSize,\n feeBps,\n referrer,\n },\n });\n if (!data.success) throw Error(data.errors);\n\n const { quoteAmount, priceImpact, microalgoTxnsFee, txnPayload } = data.result;\n\n return {\n quoteAmount: BigInt(quoteAmount),\n priceImpact,\n microalgoTxnsFee,\n txnPayload,\n };\n }\n\n public async prepareSwapTransactions(\n params: SwapParams,\n userAddress: string,\n slippageBps: number | bigint,\n swapQuote: SwapQuote,\n ): Promise<SwapTransactions> {\n const { fromAssetId, toAssetId, amount, swapMode } = params;\n\n // fetch transactions\n const { data } = await this.api.get(\"/prepare/swap\", {\n params: {\n userAddress,\n slippageBps,\n txnPayload: swapQuote.txnPayload,\n },\n });\n if (!data.success) throw Error(data.errors);\n\n // check transactions\n const unsignedTxns: Transaction[] = data.result.map((txn: string) =>\n decodeUnsignedTransaction(Buffer.from(txn, \"base64\")),\n );\n const folksRouterAppId = this.network == Network.MAINNET ? MainnetFolksRouterAppId : TestnetFolksRouterAppId;\n const folksRouterAddr = getApplicationAddress(folksRouterAppId);\n const getHexSelector = (method: string) =>\n Buffer.from(routerABIContract.getMethodByName(method).getSelector()).toString(\"hex\");\n const uint8ArrayToHex = (uint8Array: Uint8Array) => Buffer.from(uint8Array).toString(\"hex\");\n\n const sendAssetTxn = unsignedTxns[0]!;\n const swapForwardTxns = unsignedTxns.slice(1, -1)!;\n const swapEndTxn = unsignedTxns[unsignedTxns.length - 1]!;\n\n // send algo/asset\n if (sendAssetTxn.reKeyTo !== undefined) throw Error(\"Unexpected rekey\");\n if (sendAssetTxn.closeRemainderTo !== undefined) throw Error(\"Unexpected close remainder to\");\n if (encodeAddress(sendAssetTxn.to.publicKey) !== folksRouterAddr) throw Error(\"Incorrect receiver\");\n if (\n !(fromAssetId === 0 && sendAssetTxn.type == TransactionType.pay) &&\n !(fromAssetId === sendAssetTxn.assetIndex && sendAssetTxn.type === TransactionType.axfer)\n )\n throw Error(\"Sending incorrect algo/asset\");\n const sendAmount = BigInt(sendAssetTxn.amount);\n\n // swap forward txns\n swapForwardTxns.forEach((txn, i) => {\n if (txn.appIndex !== folksRouterAppId) throw Error(\"Incorrect application index\");\n if (txn.type !== TransactionType.appl && txn.appOnComplete !== OnApplicationComplete.NoOpOC)\n throw Error(\"Incorrect transaction type\");\n const swapForwardSelector = uint8ArrayToHex(txn.appArgs!.at(0)!);\n if (swapForwardSelector !== getHexSelector(\"swap_forward\")) throw Error(\"Incorrect selector\");\n });\n\n // receive algo/asset\n if (swapEndTxn.appIndex !== folksRouterAppId) throw Error(\"Incorrect application index\");\n if (swapEndTxn.type !== TransactionType.appl && swapEndTxn.appOnComplete !== OnApplicationComplete.NoOpOC)\n throw Error(\"Incorrect transaction type\");\n const swapEndSelector = uint8ArrayToHex(swapEndTxn.appArgs!.at(0)!);\n const isFixedInput = swapEndSelector === getHexSelector(\"fi_end_swap\");\n const isFixedOutput = swapEndSelector === getHexSelector(\"fo_end_swap\");\n if ((isFixedInput && swapMode !== SwapMode.FIXED_INPUT) || (isFixedOutput && swapMode !== SwapMode.FIXED_OUTPUT))\n throw Error(\"Incorrect swap mode\");\n if (ABIType.from(\"uint64\").decode(swapEndTxn.appArgs!.at(1)!) !== BigInt(toAssetId))\n throw Error(\"Receiving incorrect algo/asset\");\n const receiveAmount = ABIType.from(\"uint64\").decode(swapEndTxn.appArgs!.at(2)!) as bigint;\n\n // check amounts\n const slippageAmount = mulScale(swapQuote.quoteAmount, BigInt(slippageBps), ONE_4_DP);\n if (isFixedInput) {\n if (amount !== sendAmount) throw Error(\"Sending incorrect fixed input amount\");\n if (swapQuote.quoteAmount - slippageAmount !== receiveAmount)\n throw Error(\"Receiving incorrect fixed input amount\");\n }\n if (isFixedOutput) {\n if (swapQuote.quoteAmount + slippageAmount !== sendAmount) throw Error(\"Sending incorrect fixed output amount\");\n if (amount !== receiveAmount) throw Error(\"Receiving incorrect fixed output amount\");\n }\n\n // return\n return data.result;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants/mainnetConstants.ts"],"names":[],"mappings":";AAAA,IAAM,0BAA0B","sourcesContent":["const MainnetFolksRouterAppId = 1212658560;\n\nexport { MainnetFolksRouterAppId };\n"]}
@@ -1,7 +0,0 @@
1
- // src/constants/mainnetConstants.ts
2
- var MainnetFolksRouterAppId = 1212658560;
3
-
4
- export {
5
- MainnetFolksRouterAppId
6
- };
7
- //# sourceMappingURL=chunk-Z537KBSF.mjs.map