@thalalabs/surf 0.0.1

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 (122) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/build/cjs/core/Client.js +80 -0
  4. package/build/cjs/core/Client.js.map +1 -0
  5. package/build/cjs/core/WalletClient.js +52 -0
  6. package/build/cjs/core/WalletClient.js.map +1 -0
  7. package/build/cjs/core/createEntryPayload.js +91 -0
  8. package/build/cjs/core/createEntryPayload.js.map +1 -0
  9. package/build/cjs/core/createViewPayload.js +78 -0
  10. package/build/cjs/core/createViewPayload.js.map +1 -0
  11. package/build/cjs/core/index.js +13 -0
  12. package/build/cjs/core/index.js.map +1 -0
  13. package/build/cjs/ensureTypes.js +40 -0
  14. package/build/cjs/ensureTypes.js.map +1 -0
  15. package/build/cjs/hooks/index.js +8 -0
  16. package/build/cjs/hooks/index.js.map +1 -0
  17. package/build/cjs/hooks/useSubmitTransaction.js +88 -0
  18. package/build/cjs/hooks/useSubmitTransaction.js.map +1 -0
  19. package/build/cjs/hooks/useWalletClient.js +14 -0
  20. package/build/cjs/hooks/useWalletClient.js.map +1 -0
  21. package/build/cjs/index.js +8 -0
  22. package/build/cjs/index.js.map +1 -0
  23. package/build/cjs/package.json +1 -0
  24. package/build/cjs/types/abi.js +3 -0
  25. package/build/cjs/types/abi.js.map +1 -0
  26. package/build/cjs/types/abiClient.js +3 -0
  27. package/build/cjs/types/abiClient.js.map +1 -0
  28. package/build/cjs/types/client.js +3 -0
  29. package/build/cjs/types/client.js.map +1 -0
  30. package/build/cjs/types/common.js +3 -0
  31. package/build/cjs/types/common.js.map +1 -0
  32. package/build/cjs/types/index.js +3 -0
  33. package/build/cjs/types/index.js.map +1 -0
  34. package/build/cjs/types/walletClient.js +3 -0
  35. package/build/cjs/types/walletClient.js.map +1 -0
  36. package/build/esm/core/Client.js +75 -0
  37. package/build/esm/core/Client.js.map +1 -0
  38. package/build/esm/core/WalletClient.js +48 -0
  39. package/build/esm/core/WalletClient.js.map +1 -0
  40. package/build/esm/core/createEntryPayload.js +87 -0
  41. package/build/esm/core/createEntryPayload.js.map +1 -0
  42. package/build/esm/core/createViewPayload.js +74 -0
  43. package/build/esm/core/createViewPayload.js.map +1 -0
  44. package/build/esm/core/index.js +5 -0
  45. package/build/esm/core/index.js.map +1 -0
  46. package/build/esm/ensureTypes.js +34 -0
  47. package/build/esm/ensureTypes.js.map +1 -0
  48. package/build/esm/hooks/index.js +3 -0
  49. package/build/esm/hooks/index.js.map +1 -0
  50. package/build/esm/hooks/useSubmitTransaction.js +84 -0
  51. package/build/esm/hooks/useSubmitTransaction.js.map +1 -0
  52. package/build/esm/hooks/useWalletClient.js +10 -0
  53. package/build/esm/hooks/useWalletClient.js.map +1 -0
  54. package/build/esm/index.js +2 -0
  55. package/build/esm/index.js.map +1 -0
  56. package/build/esm/package.json +1 -0
  57. package/build/esm/types/abi.js +2 -0
  58. package/build/esm/types/abi.js.map +1 -0
  59. package/build/esm/types/abiClient.js +2 -0
  60. package/build/esm/types/abiClient.js.map +1 -0
  61. package/build/esm/types/client.js +2 -0
  62. package/build/esm/types/client.js.map +1 -0
  63. package/build/esm/types/common.js +2 -0
  64. package/build/esm/types/common.js.map +1 -0
  65. package/build/esm/types/index.js +2 -0
  66. package/build/esm/types/index.js.map +1 -0
  67. package/build/esm/types/walletClient.js +2 -0
  68. package/build/esm/types/walletClient.js.map +1 -0
  69. package/build/types/core/Client.d.ts +20 -0
  70. package/build/types/core/Client.d.ts.map +1 -0
  71. package/build/types/core/WalletClient.d.ts +17 -0
  72. package/build/types/core/WalletClient.d.ts.map +1 -0
  73. package/build/types/core/createEntryPayload.d.ts +4 -0
  74. package/build/types/core/createEntryPayload.d.ts.map +1 -0
  75. package/build/types/core/createViewPayload.d.ts +4 -0
  76. package/build/types/core/createViewPayload.d.ts.map +1 -0
  77. package/build/types/core/index.d.ts +5 -0
  78. package/build/types/core/index.d.ts.map +1 -0
  79. package/build/types/ensureTypes.d.ts +4 -0
  80. package/build/types/ensureTypes.d.ts.map +1 -0
  81. package/build/types/hooks/index.d.ts +3 -0
  82. package/build/types/hooks/index.d.ts.map +1 -0
  83. package/build/types/hooks/useSubmitTransaction.d.ts +19 -0
  84. package/build/types/hooks/useSubmitTransaction.d.ts.map +1 -0
  85. package/build/types/hooks/useWalletClient.d.ts +8 -0
  86. package/build/types/hooks/useWalletClient.d.ts.map +1 -0
  87. package/build/types/index.d.ts +3 -0
  88. package/build/types/index.d.ts.map +1 -0
  89. package/build/types/types/abi.d.ts +31 -0
  90. package/build/types/types/abi.d.ts.map +1 -0
  91. package/build/types/types/abiClient.d.ts +18 -0
  92. package/build/types/types/abiClient.d.ts.map +1 -0
  93. package/build/types/types/client.d.ts +24 -0
  94. package/build/types/types/client.d.ts.map +1 -0
  95. package/build/types/types/common.d.ts +60 -0
  96. package/build/types/types/common.d.ts.map +1 -0
  97. package/build/types/types/index.d.ts +5 -0
  98. package/build/types/types/index.d.ts.map +1 -0
  99. package/build/types/types/walletClient.d.ts +9 -0
  100. package/build/types/types/walletClient.d.ts.map +1 -0
  101. package/package.json +78 -0
  102. package/src/core/Client.ts +120 -0
  103. package/src/core/WalletClient.ts +64 -0
  104. package/src/core/__tests__/createEntryPayload.test.ts +262 -0
  105. package/src/core/__tests__/createViewPayload.test.ts +297 -0
  106. package/src/core/__tests__/submitTransaction.test.ts +112 -0
  107. package/src/core/__tests__/useABI.test.ts +139 -0
  108. package/src/core/__tests__/view.test.ts +145 -0
  109. package/src/core/createEntryPayload.ts +128 -0
  110. package/src/core/createViewPayload.ts +100 -0
  111. package/src/core/index.ts +4 -0
  112. package/src/ensureTypes.ts +42 -0
  113. package/src/hooks/index.ts +2 -0
  114. package/src/hooks/useSubmitTransaction.ts +117 -0
  115. package/src/hooks/useWalletClient.ts +10 -0
  116. package/src/index.ts +10 -0
  117. package/src/types/abi.ts +35 -0
  118. package/src/types/abiClient.ts +19 -0
  119. package/src/types/client.ts +32 -0
  120. package/src/types/common.ts +157 -0
  121. package/src/types/index.ts +9 -0
  122. package/src/types/walletClient.ts +10 -0
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSubmitTransaction = void 0;
4
+ const react_1 = require("react");
5
+ const wallet_adapter_react_1 = require("@aptos-labs/wallet-adapter-react");
6
+ const aptos_1 = require("aptos");
7
+ function isRawPayload(payload) {
8
+ return payload.rawPayload !== undefined;
9
+ }
10
+ const useSubmitTransaction = () => {
11
+ const { signAndSubmitTransaction } = (0, wallet_adapter_react_1.useWallet)();
12
+ const [isIdle, setIsIdle] = (0, react_1.useState)(true);
13
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
14
+ const [data, setResult] = (0, react_1.useState)();
15
+ const [error, setError] = (0, react_1.useState)();
16
+ const idRef = (0, react_1.useRef)(0);
17
+ function reset() {
18
+ setIsIdle(true);
19
+ setIsLoading(false);
20
+ setResult(undefined);
21
+ setError(undefined);
22
+ idRef.current = idRef.current + 1;
23
+ }
24
+ async function submitTransaction(payload, { nodeUrl, onSuccess, onFailed, max_gas_amount }) {
25
+ if (signAndSubmitTransaction === undefined) {
26
+ return;
27
+ }
28
+ const id = idRef.current;
29
+ if (!isIdle) {
30
+ throw new Error("Transaction is already in progress");
31
+ }
32
+ setIsLoading(true);
33
+ setIsIdle(false);
34
+ const request = isRawPayload(payload) ? payload.rawPayload : payload;
35
+ try {
36
+ const { hash } = await signAndSubmitTransaction({
37
+ type: "entry_function_payload",
38
+ ...request,
39
+ arguments: request.arguments.map((arg) => {
40
+ if (Array.isArray(arg)) {
41
+ return arg.map((item) => item.toString());
42
+ }
43
+ else if (typeof arg === "object") {
44
+ throw new Error(`a value of struct type: ${arg} is not supported`);
45
+ }
46
+ else {
47
+ return arg.toString();
48
+ }
49
+ }),
50
+ }, { max_gas_amount });
51
+ const client = new aptos_1.AptosClient(nodeUrl);
52
+ const result = (await client.waitForTransactionWithResult(hash, {
53
+ checkSuccess: true,
54
+ }));
55
+ if (id === idRef.current) {
56
+ try {
57
+ onSuccess?.(result);
58
+ }
59
+ catch (e) {
60
+ console.error(e);
61
+ }
62
+ setResult(result);
63
+ }
64
+ }
65
+ catch (e) {
66
+ if (id === idRef.current) {
67
+ const error = e instanceof Error ? e :
68
+ e ? new Error(String(e)) :
69
+ new Error("unknown error");
70
+ try {
71
+ onFailed?.(error);
72
+ }
73
+ catch (e2) {
74
+ console.error(e2);
75
+ }
76
+ setError(error);
77
+ }
78
+ }
79
+ finally {
80
+ if (id === idRef.current) {
81
+ setIsLoading(false);
82
+ }
83
+ }
84
+ }
85
+ return { submitTransaction, reset, isLoading, isIdle, data, error };
86
+ };
87
+ exports.useSubmitTransaction = useSubmitTransaction;
88
+ //# sourceMappingURL=useSubmitTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubmitTransaction.js","sourceRoot":"","sources":["../../../src/hooks/useSubmitTransaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useWalletClient = void 0;
4
+ const wallet_adapter_react_1 = require("@aptos-labs/wallet-adapter-react");
5
+ const core_1 = require("../core");
6
+ const useWalletClient = ({ nodeUrl }) => {
7
+ const wallet = (0, wallet_adapter_react_1.useWallet)();
8
+ return {
9
+ connected: wallet.connected,
10
+ client: wallet.connected ? new core_1.MoveTsWalletClient({ wallet, nodeUrl }) : undefined
11
+ };
12
+ };
13
+ exports.useWalletClient = useWalletClient;
14
+ //# sourceMappingURL=useWalletClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWalletClient.js","sourceRoot":"","sources":["../../../src/hooks/useWalletClient.ts"],"names":[],"mappings":";;;AAAA,2EAA6D;AAC7D,kCAA6C;AAEtC,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,EAAuB,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,IAAA,gCAAS,GAAE,CAAC;IAC3B,OAAO;QACH,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,yBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACrF,CAAC;AACN,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createClient = exports.createEntryPayload = exports.createViewPayload = void 0;
4
+ var core_1 = require("./core");
5
+ Object.defineProperty(exports, "createViewPayload", { enumerable: true, get: function () { return core_1.createViewPayload; } });
6
+ Object.defineProperty(exports, "createEntryPayload", { enumerable: true, get: function () { return core_1.createEntryPayload; } });
7
+ Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return core_1.createClient; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAIgB;AAHZ,yGAAA,iBAAiB,OAAA;AACjB,0GAAA,kBAAkB,OAAA;AAClB,oGAAA,YAAY,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.js","sourceRoot":"","sources":["../../../src/types/abi.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=abiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abiClient.js","sourceRoot":"","sources":["../../../src/types/abiClient.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/types/client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=walletClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletClient.js","sourceRoot":"","sources":["../../../src/types/walletClient.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { AptosClient, TxnBuilderTypes } from "aptos";
2
+ import { createViewPayload } from "./createViewPayload";
3
+ import { createEntryPayload } from "./createEntryPayload";
4
+ export function createClient(options) {
5
+ return new Client(new AptosClient(options.nodeUrl));
6
+ }
7
+ export class Client {
8
+ client;
9
+ constructor(client) {
10
+ this.client = client;
11
+ }
12
+ async view(payload, options) {
13
+ const result = await this.client.view(payload.viewRequest, options?.ledger_version);
14
+ return result.map((value, i) => payload.decoders[i] ?
15
+ payload.decoders[i](value) :
16
+ value);
17
+ }
18
+ async submitTransaction(payload, options) {
19
+ const rawTxn = await this.generateRawTxn(payload, options);
20
+ const bcsTxn = AptosClient.generateBCSTransaction(options.account, rawTxn);
21
+ const transactionRes = await this.client.submitSignedBCSTransaction(bcsTxn);
22
+ await this.client.waitForTransaction(transactionRes.hash, {
23
+ timeoutSecs: 120,
24
+ checkSuccess: true,
25
+ });
26
+ return transactionRes;
27
+ }
28
+ async simulateTransaction(payload, options) {
29
+ const rawTxn = await this.generateRawTxn(payload, options);
30
+ const transactionRes = (await this.client.simulateTransaction(options.account, rawTxn))[0];
31
+ if (!transactionRes) {
32
+ throw new Error("Failed to simulate transaction");
33
+ }
34
+ return transactionRes;
35
+ }
36
+ useABI(abi) {
37
+ return {
38
+ view: new Proxy({}, {
39
+ get: (_, prop) => {
40
+ const functionName = prop.toString();
41
+ return (...args) => {
42
+ const payload = createViewPayload(abi, {
43
+ function: functionName,
44
+ type_arguments: args[0].type_arguments,
45
+ arguments: args[0].arguments,
46
+ });
47
+ return this.view(payload);
48
+ };
49
+ }
50
+ }),
51
+ entry: new Proxy({}, {
52
+ get: (_, prop) => {
53
+ const functionName = prop.toString();
54
+ return (...args) => {
55
+ const payload = createEntryPayload(abi, {
56
+ function: functionName,
57
+ type_arguments: args[0].type_arguments,
58
+ arguments: args[0].arguments,
59
+ });
60
+ return args[0].isSimulation ?
61
+ this.simulateTransaction(payload, { account: args[0].account }) :
62
+ this.submitTransaction(payload, { account: args[0].account });
63
+ };
64
+ }
65
+ })
66
+ };
67
+ }
68
+ async generateRawTxn(payload, options) {
69
+ const { account } = options;
70
+ const entryFunctionPayload = new TxnBuilderTypes.TransactionPayloadEntryFunction(payload.entryRequest);
71
+ const rawTxn = await this.client.generateRawTransaction(account.address(), entryFunctionPayload);
72
+ return rawTxn;
73
+ }
74
+ }
75
+ //# sourceMappingURL=Client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/core/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,UAAU,YAAY,CAAC,OAA4B;IACrD,OAAO,IAAI,MAAM,CACb,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CACnC,CAAC;AACN,CAAC;AAED,MAAM,OAAO,MAAM;IACP,MAAM,CAAc;IAE5B,YAAY,MAAmB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,OAA6B,EAC7B,OAAqB;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACjC,OAAO,CAAC,WAAW,EACnB,OAAO,EAAE,cAAc,CAC1B,CAAC;QAIF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,KAAK,CACD,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC1B,OAAqB,EACrB,OAAqB;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAG3D,MAAM,MAAM,GAAG,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAG3E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAC/D,MAAM,CACT,CAAC;QAIF,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,EAAE;YACtD,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC5B,OAAqB,EACrB,OAAqB;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE3D,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACrD;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAoB,GAAM;QACnC,OAAO;YACH,IAAI,EAAE,IAAI,KAAK,CAAC,EAAsB,EAAE;gBACpC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;oBACb,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;wBACf,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE;4BACnC,QAAQ,EAAE,YAAY;4BACtB,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc;4BACtC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;yBAC/B,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC,CAAC;gBACN,CAAC;aACJ,CAAC;YACF,KAAK,EAAE,IAAI,KAAK,CAAC,EAAuB,EAAE;gBACtC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;oBACb,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;wBACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE;4BACpC,QAAQ,EAAE,YAAY;4BACtB,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc;4BACtC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;yBAC/B,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;4BACzB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BACjE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtE,CAAC,CAAC;gBACN,CAAC;aACJ,CAAC;SACL,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAqB,EAAE,OAAqB;QACrE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC5B,MAAM,oBAAoB,GAAG,IAAI,eAAe,CAAC,+BAA+B,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAGvG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CACnD,OAAO,CAAC,OAAO,EAAE,EACjB,oBAAoB,CACvB,CAAC;QACF,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -0,0 +1,48 @@
1
+ import { AptosClient } from "aptos";
2
+ import { createEntryPayload } from "./createEntryPayload";
3
+ export class WalletClient {
4
+ wallet;
5
+ client;
6
+ constructor({ wallet, nodeUrl }) {
7
+ this.wallet = wallet;
8
+ this.client = new AptosClient(nodeUrl);
9
+ }
10
+ async submitTransaction(payload, _ = undefined) {
11
+ const request = payload.rawPayload;
12
+ const { hash } = await this.wallet.signAndSubmitTransaction({
13
+ type: "entry_function_payload",
14
+ ...request,
15
+ arguments: request.arguments.map((arg) => {
16
+ if (Array.isArray(arg)) {
17
+ return arg.map((item) => item.toString());
18
+ }
19
+ else if (typeof arg === "object") {
20
+ throw new Error(`a value of struct type: ${arg} is not supported`);
21
+ }
22
+ else {
23
+ return arg.toString();
24
+ }
25
+ }),
26
+ });
27
+ const result = (await this.client.waitForTransactionWithResult(hash, {
28
+ checkSuccess: true,
29
+ }));
30
+ return result;
31
+ }
32
+ useABI(abi) {
33
+ return new Proxy({}, {
34
+ get: (_, prop) => {
35
+ const functionName = prop.toString();
36
+ return (...args) => {
37
+ const payload = createEntryPayload(abi, {
38
+ function: functionName,
39
+ type_arguments: args[0].type_arguments,
40
+ arguments: args[0].arguments,
41
+ });
42
+ return this.submitTransaction(payload);
43
+ };
44
+ }
45
+ });
46
+ }
47
+ }
48
+ //# sourceMappingURL=WalletClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletClient.js","sourceRoot":"","sources":["../../../src/core/WalletClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAS,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,OAAO,YAAY;IACb,MAAM,CAAS;IACf,MAAM,CAAc;IAE5B,YAAY,EAAE,MAAM,EAAE,OAAO,EAG5B;QACG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC1B,OAAqB,EACrB,IAA8B,SAAS;QAEvC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;QAGnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;YACxD,IAAI,EAAE,wBAAwB;YAC9B,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAEpB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAClD;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,mBAAmB,CAAC,CAAC;iBACtE;qBAAM;oBACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;iBACzB;YACL,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAsC,CAAC;QAEzC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,MAAM,CAAoB,GAAM;QACnC,OAAO,IAAI,KAAK,CAAC,EAAwB,EAAE;YACvC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;gBACb,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;oBACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE;wBACpC,QAAQ,EAAE,YAAY;wBACtB,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc;wBACtC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC/B,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC,CAAC;YACN,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,87 @@
1
+ import { BCS, TxnBuilderTypes, TypeTagParser } from "aptos";
2
+ import { ensureBigInt, ensureBoolean, ensureNumber } from "../ensureTypes";
3
+ export function createEntryPayload(abi, payload) {
4
+ const fnAbi = abi.exposed_functions.filter(f => f.name === payload.function)[0];
5
+ const typeArguments = payload.type_arguments;
6
+ const valArguments = payload.arguments;
7
+ const abiArgs = fnAbi.params[0] === '&signer'
8
+ ? fnAbi.params.slice(1)
9
+ : fnAbi.params;
10
+ if (fnAbi === undefined)
11
+ throw new Error(`Function ${payload.function} not found in ABI`);
12
+ if (abiArgs.length !== valArguments.length)
13
+ throw new Error(`Function ${payload.function} expects ${fnAbi.params.length} arguments, but ${payload.arguments.length} were provided`);
14
+ if (fnAbi.generic_type_params.length !== typeArguments.length)
15
+ throw new Error(`Function ${payload.function} expects ${fnAbi.generic_type_params.length} type arguments, but ${payload.type_arguments.length} were provided`);
16
+ return {
17
+ rawPayload: {
18
+ ...payload,
19
+ function: `${abi.address}::${abi.name}::${payload.function}`,
20
+ },
21
+ entryRequest: TxnBuilderTypes.EntryFunction.natural(`${abi.address}::${abi.name}`, payload.function, typeArguments
22
+ .map((arg) => {
23
+ const typeTagStruct = new TypeTagParser(arg).parseTypeTag();
24
+ return new TxnBuilderTypes.TypeTagStruct(new TxnBuilderTypes.StructTag(typeTagStruct.value.address, typeTagStruct.value.module_name, typeTagStruct.value.name, typeTagStruct.value.type_args));
25
+ }), valArguments.map((arg, i) => {
26
+ const type = abiArgs[i];
27
+ const serializer = new BCS.Serializer();
28
+ argToBCS(type, arg, serializer);
29
+ return serializer.getBytes();
30
+ }))
31
+ };
32
+ }
33
+ function argToBCS(type, arg, serializer) {
34
+ const regex = /vector<([^]+)>/;
35
+ const match = type.match(regex);
36
+ if (match) {
37
+ const innerType = match[1];
38
+ if (innerType === 'u8') {
39
+ if (arg instanceof Uint8Array) {
40
+ serializer.serializeBytes(arg);
41
+ return;
42
+ }
43
+ if (typeof arg === "string") {
44
+ serializer.serializeStr(arg);
45
+ return;
46
+ }
47
+ }
48
+ if (!Array.isArray(arg)) {
49
+ throw new Error("Invalid vector args.");
50
+ }
51
+ serializer.serializeU32AsUleb128(arg.length);
52
+ arg.forEach((arg) => argToBCS(innerType, arg, serializer));
53
+ return;
54
+ }
55
+ switch (type) {
56
+ case 'bool':
57
+ serializer.serializeBool(ensureBoolean(arg));
58
+ break;
59
+ case 'address':
60
+ TxnBuilderTypes.AccountAddress.fromHex(arg).serialize(serializer);
61
+ break;
62
+ case 'u8':
63
+ serializer.serializeU8(ensureNumber(arg));
64
+ break;
65
+ case 'u16':
66
+ serializer.serializeU16(ensureNumber(arg));
67
+ break;
68
+ case 'u32':
69
+ serializer.serializeU32(ensureNumber(arg));
70
+ break;
71
+ case 'u64':
72
+ serializer.serializeU64(ensureBigInt(arg));
73
+ break;
74
+ case 'u128':
75
+ serializer.serializeU128(ensureBigInt(arg));
76
+ break;
77
+ case 'u256':
78
+ serializer.serializeU256(ensureBigInt(arg));
79
+ break;
80
+ case '0x1::string::String':
81
+ serializer.serializeStr(arg);
82
+ break;
83
+ default:
84
+ throw new Error(`type "${type}" not supported`);
85
+ }
86
+ }
87
+ //# sourceMappingURL=createEntryPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createEntryPayload.js","sourceRoot":"","sources":["../../../src/core/createEntryPayload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { HexString } from "aptos";
2
+ import { ensureNumber } from "../ensureTypes";
3
+ export function createViewPayload(abi, payload) {
4
+ const fnAbi = abi.exposed_functions.filter(f => f.name === payload.function)[0];
5
+ const type_arguments = payload.type_arguments;
6
+ const val_arguments = payload.arguments;
7
+ if (fnAbi === undefined)
8
+ throw new Error(`Function ${payload.function} not found in ABI`);
9
+ if (fnAbi.params.length !== val_arguments.length)
10
+ throw new Error(`Function ${payload.function} expects ${fnAbi.params.length} arguments, but ${payload.arguments.length} were provided`);
11
+ if (fnAbi.generic_type_params.length !== type_arguments.length)
12
+ throw new Error(`Function ${payload.function} expects ${fnAbi.generic_type_params.length} type arguments, but ${payload.type_arguments.length} were provided`);
13
+ const args = fnAbi.params.map((type, i) => {
14
+ if (['u8', 'u16', 'u32'].includes(type)) {
15
+ return ensureNumber(payload.arguments[i]);
16
+ }
17
+ else if (['u64', 'u128', 'u256'].includes(type)) {
18
+ return payload.arguments[i].toString();
19
+ }
20
+ else if (type.includes("vector")) {
21
+ return encodeVector(type, payload.arguments[i]);
22
+ }
23
+ else {
24
+ return payload.arguments[i];
25
+ }
26
+ });
27
+ const decoders = fnAbi.return.map((type) => {
28
+ if (['u64', 'u128', 'u256'].includes(type)) {
29
+ return decodeBigint;
30
+ }
31
+ else {
32
+ return null;
33
+ }
34
+ });
35
+ return {
36
+ viewRequest: {
37
+ function: `${abi.address}::${abi.name}::${payload.function}`,
38
+ arguments: args,
39
+ type_arguments: payload.type_arguments,
40
+ },
41
+ decoders,
42
+ };
43
+ }
44
+ function decodeBigint(value) {
45
+ return BigInt(value);
46
+ }
47
+ function encodeVector(type, value) {
48
+ const regex = /vector<([^]+)>/;
49
+ const match = type.match(regex);
50
+ if (!match) {
51
+ throw new Error(`Unsupported type: ${type}`);
52
+ }
53
+ if (match[1] === "u8") {
54
+ return HexString.fromUint8Array(new Uint8Array(value.map((v) => {
55
+ const result = ensureNumber(v);
56
+ if (result < 0 || result > 255)
57
+ throw new Error(`Invalid u8 value: ${result}`);
58
+ return result;
59
+ }))).hexString;
60
+ }
61
+ else if (["u16", "u32"].includes(match[1])) {
62
+ return value;
63
+ }
64
+ else if (["u64", "u128", "u256"].includes(match[1])) {
65
+ return value.map((v) => v.toString());
66
+ }
67
+ else if (match[1] === "bool") {
68
+ return value;
69
+ }
70
+ else {
71
+ return value;
72
+ }
73
+ }
74
+ //# sourceMappingURL=createViewPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createViewPayload.js","sourceRoot":"","sources":["../../../src/core/createViewPayload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { WalletClient as MoveTsWalletClient } from "./WalletClient";
2
+ export { Client as MoveTsClient, createClient } from "./Client";
3
+ export { createViewPayload } from "./createViewPayload";
4
+ export { createEntryPayload } from "./createEntryPayload";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,34 @@
1
+ function assertType(val, types, message) {
2
+ if (!types?.includes(typeof val)) {
3
+ throw new Error(message || `Invalid arg: ${val} type should be ${types instanceof Array ? types.join(" or ") : types}`);
4
+ }
5
+ }
6
+ export function ensureBoolean(val) {
7
+ assertType(val, ["boolean", "string"]);
8
+ if (typeof val === "boolean") {
9
+ return val;
10
+ }
11
+ if (val === "true") {
12
+ return true;
13
+ }
14
+ if (val === "false") {
15
+ return false;
16
+ }
17
+ throw new Error("Invalid boolean string.");
18
+ }
19
+ export function ensureNumber(val) {
20
+ assertType(val, ["number", "string"]);
21
+ if (typeof val === "number") {
22
+ return val;
23
+ }
24
+ const res = Number.parseInt(val, 10);
25
+ if (Number.isNaN(res)) {
26
+ throw new Error("Invalid number string.");
27
+ }
28
+ return res;
29
+ }
30
+ export function ensureBigInt(val) {
31
+ assertType(val, ["number", "bigint", "string"]);
32
+ return BigInt(val);
33
+ }
34
+ //# sourceMappingURL=ensureTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureTypes.js","sourceRoot":"","sources":["../../src/ensureTypes.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,GAAQ,EAAE,KAAwB,EAAE,OAAgB;IACpE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACX,OAAO,IAAI,gBAAgB,GAAG,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CACzG,CAAC;KACL;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAqB;IAC/C,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;QAC1B,OAAO,GAAG,CAAC;KACd;IAED,IAAI,GAAG,KAAK,MAAM,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,GAAG,KAAK,OAAO,EAAE;QACjB,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAoB;IAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,OAAO,GAAG,CAAC;KACd;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC7C;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAA6B;IACtD,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useSubmitTransaction } from "./useSubmitTransaction";
2
+ export { useWalletClient } from "./useWalletClient";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { useState, useRef } from "react";
2
+ import { useWallet } from "@aptos-labs/wallet-adapter-react";
3
+ import { AptosClient } from "aptos";
4
+ function isRawPayload(payload) {
5
+ return payload.rawPayload !== undefined;
6
+ }
7
+ export const useSubmitTransaction = () => {
8
+ const { signAndSubmitTransaction } = useWallet();
9
+ const [isIdle, setIsIdle] = useState(true);
10
+ const [isLoading, setIsLoading] = useState(false);
11
+ const [data, setResult] = useState();
12
+ const [error, setError] = useState();
13
+ const idRef = useRef(0);
14
+ function reset() {
15
+ setIsIdle(true);
16
+ setIsLoading(false);
17
+ setResult(undefined);
18
+ setError(undefined);
19
+ idRef.current = idRef.current + 1;
20
+ }
21
+ async function submitTransaction(payload, { nodeUrl, onSuccess, onFailed, max_gas_amount }) {
22
+ if (signAndSubmitTransaction === undefined) {
23
+ return;
24
+ }
25
+ const id = idRef.current;
26
+ if (!isIdle) {
27
+ throw new Error("Transaction is already in progress");
28
+ }
29
+ setIsLoading(true);
30
+ setIsIdle(false);
31
+ const request = isRawPayload(payload) ? payload.rawPayload : payload;
32
+ try {
33
+ const { hash } = await signAndSubmitTransaction({
34
+ type: "entry_function_payload",
35
+ ...request,
36
+ arguments: request.arguments.map((arg) => {
37
+ if (Array.isArray(arg)) {
38
+ return arg.map((item) => item.toString());
39
+ }
40
+ else if (typeof arg === "object") {
41
+ throw new Error(`a value of struct type: ${arg} is not supported`);
42
+ }
43
+ else {
44
+ return arg.toString();
45
+ }
46
+ }),
47
+ }, { max_gas_amount });
48
+ const client = new AptosClient(nodeUrl);
49
+ const result = (await client.waitForTransactionWithResult(hash, {
50
+ checkSuccess: true,
51
+ }));
52
+ if (id === idRef.current) {
53
+ try {
54
+ onSuccess?.(result);
55
+ }
56
+ catch (e) {
57
+ console.error(e);
58
+ }
59
+ setResult(result);
60
+ }
61
+ }
62
+ catch (e) {
63
+ if (id === idRef.current) {
64
+ const error = e instanceof Error ? e :
65
+ e ? new Error(String(e)) :
66
+ new Error("unknown error");
67
+ try {
68
+ onFailed?.(error);
69
+ }
70
+ catch (e2) {
71
+ console.error(e2);
72
+ }
73
+ setError(error);
74
+ }
75
+ }
76
+ finally {
77
+ if (id === idRef.current) {
78
+ setIsLoading(false);
79
+ }
80
+ }
81
+ }
82
+ return { submitTransaction, reset, isLoading, isIdle, data, error };
83
+ };
84
+ //# sourceMappingURL=useSubmitTransaction.js.map