@haneullabs/wallet-sdk 0.1.0 → 0.1.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 (197) hide show
  1. package/CHANGELOG.md +47 -18
  2. package/dist/auto-approvals/analyzer.d.mts +83 -0
  3. package/dist/auto-approvals/analyzer.d.mts.map +1 -0
  4. package/dist/auto-approvals/analyzer.mjs +43 -0
  5. package/dist/auto-approvals/analyzer.mjs.map +1 -0
  6. package/dist/auto-approvals/index.d.mts +6 -0
  7. package/dist/auto-approvals/intent.d.mts +9 -0
  8. package/dist/auto-approvals/intent.d.mts.map +1 -0
  9. package/dist/auto-approvals/intent.mjs +40 -0
  10. package/dist/auto-approvals/intent.mjs.map +1 -0
  11. package/dist/auto-approvals/manager.d.mts +38 -0
  12. package/dist/auto-approvals/manager.d.mts.map +1 -0
  13. package/dist/auto-approvals/manager.mjs +192 -0
  14. package/dist/auto-approvals/manager.mjs.map +1 -0
  15. package/dist/auto-approvals/schemas/index.d.mts +2 -0
  16. package/dist/auto-approvals/schemas/policy.d.mts +149 -0
  17. package/dist/auto-approvals/schemas/policy.d.mts.map +1 -0
  18. package/dist/auto-approvals/schemas/policy.mjs +49 -0
  19. package/dist/auto-approvals/schemas/policy.mjs.map +1 -0
  20. package/dist/auto-approvals/schemas/state.d.mts +115 -0
  21. package/dist/auto-approvals/schemas/state.d.mts.map +1 -0
  22. package/dist/auto-approvals/schemas/state.mjs +20 -0
  23. package/dist/auto-approvals/schemas/state.mjs.map +1 -0
  24. package/dist/index.d.mts +16 -0
  25. package/dist/index.mjs +9 -0
  26. package/dist/transaction-analyzer/analyzer.d.mts +39 -0
  27. package/dist/transaction-analyzer/analyzer.d.mts.map +1 -0
  28. package/dist/transaction-analyzer/analyzer.mjs +46 -0
  29. package/dist/transaction-analyzer/analyzer.mjs.map +1 -0
  30. package/dist/transaction-analyzer/index.d.mts +8 -0
  31. package/dist/transaction-analyzer/rules/accessLevel.mjs +65 -0
  32. package/dist/transaction-analyzer/rules/accessLevel.mjs.map +1 -0
  33. package/dist/transaction-analyzer/rules/coin-flows.d.mts +12 -0
  34. package/dist/transaction-analyzer/rules/coin-flows.d.mts.map +1 -0
  35. package/dist/transaction-analyzer/rules/coin-flows.mjs +122 -0
  36. package/dist/transaction-analyzer/rules/coin-flows.mjs.map +1 -0
  37. package/dist/transaction-analyzer/rules/coin-value.d.mts +25 -0
  38. package/dist/transaction-analyzer/rules/coin-value.d.mts.map +1 -0
  39. package/dist/transaction-analyzer/rules/coin-value.mjs +36 -0
  40. package/dist/transaction-analyzer/rules/coin-value.mjs.map +1 -0
  41. package/dist/transaction-analyzer/rules/coins.d.mts +12 -0
  42. package/dist/transaction-analyzer/rules/coins.d.mts.map +1 -0
  43. package/dist/transaction-analyzer/rules/coins.mjs +48 -0
  44. package/dist/transaction-analyzer/rules/coins.mjs.map +1 -0
  45. package/dist/transaction-analyzer/rules/commands.d.mts +79 -0
  46. package/dist/transaction-analyzer/rules/commands.d.mts.map +1 -0
  47. package/dist/transaction-analyzer/rules/commands.mjs +141 -0
  48. package/dist/transaction-analyzer/rules/commands.mjs.map +1 -0
  49. package/dist/transaction-analyzer/rules/core.mjs +48 -0
  50. package/dist/transaction-analyzer/rules/core.mjs.map +1 -0
  51. package/dist/transaction-analyzer/rules/functions.mjs +31 -0
  52. package/dist/transaction-analyzer/rules/functions.mjs.map +1 -0
  53. package/dist/transaction-analyzer/rules/index.d.mts +2125 -0
  54. package/dist/transaction-analyzer/rules/index.d.mts.map +1 -0
  55. package/dist/transaction-analyzer/rules/index.mjs +34 -0
  56. package/dist/transaction-analyzer/rules/index.mjs.map +1 -0
  57. package/dist/transaction-analyzer/rules/inputs.d.mts +20 -0
  58. package/dist/transaction-analyzer/rules/inputs.d.mts.map +1 -0
  59. package/dist/transaction-analyzer/rules/inputs.mjs +38 -0
  60. package/dist/transaction-analyzer/rules/inputs.mjs.map +1 -0
  61. package/dist/transaction-analyzer/rules/objects.d.mts +12 -0
  62. package/dist/transaction-analyzer/rules/objects.d.mts.map +1 -0
  63. package/dist/transaction-analyzer/rules/objects.mjs +92 -0
  64. package/dist/transaction-analyzer/rules/objects.mjs.map +1 -0
  65. package/dist/util.d.mts +7 -0
  66. package/dist/util.d.mts.map +1 -0
  67. package/package.json +27 -25
  68. package/dist/cjs/auto-approvals/analyzer.d.ts +0 -71
  69. package/dist/cjs/auto-approvals/analyzer.js +0 -70
  70. package/dist/cjs/auto-approvals/analyzer.js.map +0 -7
  71. package/dist/cjs/auto-approvals/index.d.ts +0 -6
  72. package/dist/cjs/auto-approvals/index.js +0 -33
  73. package/dist/cjs/auto-approvals/index.js.map +0 -7
  74. package/dist/cjs/auto-approvals/intent.d.ts +0 -5
  75. package/dist/cjs/auto-approvals/intent.js +0 -65
  76. package/dist/cjs/auto-approvals/intent.js.map +0 -7
  77. package/dist/cjs/auto-approvals/manager.d.ts +0 -31
  78. package/dist/cjs/auto-approvals/manager.js +0 -328
  79. package/dist/cjs/auto-approvals/manager.js.map +0 -7
  80. package/dist/cjs/auto-approvals/schemas/index.d.ts +0 -4
  81. package/dist/cjs/auto-approvals/schemas/index.js +0 -28
  82. package/dist/cjs/auto-approvals/schemas/index.js.map +0 -7
  83. package/dist/cjs/auto-approvals/schemas/policy.d.ts +0 -145
  84. package/dist/cjs/auto-approvals/schemas/policy.js +0 -79
  85. package/dist/cjs/auto-approvals/schemas/policy.js.map +0 -7
  86. package/dist/cjs/auto-approvals/schemas/state.d.ts +0 -115
  87. package/dist/cjs/auto-approvals/schemas/state.js +0 -49
  88. package/dist/cjs/auto-approvals/schemas/state.js.map +0 -7
  89. package/dist/cjs/index.d.ts +0 -2
  90. package/dist/cjs/index.js +0 -20
  91. package/dist/cjs/index.js.map +0 -7
  92. package/dist/cjs/package.json +0 -5
  93. package/dist/cjs/transaction-analyzer/analyzer.d.ts +0 -34
  94. package/dist/cjs/transaction-analyzer/analyzer.js +0 -94
  95. package/dist/cjs/transaction-analyzer/analyzer.js.map +0 -7
  96. package/dist/cjs/transaction-analyzer/index.d.ts +0 -9
  97. package/dist/cjs/transaction-analyzer/index.js +0 -28
  98. package/dist/cjs/transaction-analyzer/index.js.map +0 -7
  99. package/dist/cjs/transaction-analyzer/rules/accessLevel.d.ts +0 -29
  100. package/dist/cjs/transaction-analyzer/rules/accessLevel.js +0 -106
  101. package/dist/cjs/transaction-analyzer/rules/accessLevel.js.map +0 -7
  102. package/dist/cjs/transaction-analyzer/rules/coin-flows.d.ts +0 -313
  103. package/dist/cjs/transaction-analyzer/rules/coin-flows.js +0 -179
  104. package/dist/cjs/transaction-analyzer/rules/coin-flows.js.map +0 -7
  105. package/dist/cjs/transaction-analyzer/rules/coin-value.d.ts +0 -42
  106. package/dist/cjs/transaction-analyzer/rules/coin-value.js +0 -60
  107. package/dist/cjs/transaction-analyzer/rules/coin-value.js.map +0 -7
  108. package/dist/cjs/transaction-analyzer/rules/coins.d.ts +0 -337
  109. package/dist/cjs/transaction-analyzer/rules/coins.js +0 -78
  110. package/dist/cjs/transaction-analyzer/rules/coins.js.map +0 -7
  111. package/dist/cjs/transaction-analyzer/rules/commands.d.ts +0 -366
  112. package/dist/cjs/transaction-analyzer/rules/commands.js +0 -148
  113. package/dist/cjs/transaction-analyzer/rules/commands.js.map +0 -7
  114. package/dist/cjs/transaction-analyzer/rules/core.d.ts +0 -314
  115. package/dist/cjs/transaction-analyzer/rules/core.js +0 -73
  116. package/dist/cjs/transaction-analyzer/rules/core.js.map +0 -7
  117. package/dist/cjs/transaction-analyzer/rules/functions.d.ts +0 -292
  118. package/dist/cjs/transaction-analyzer/rules/functions.js +0 -58
  119. package/dist/cjs/transaction-analyzer/rules/functions.js.map +0 -7
  120. package/dist/cjs/transaction-analyzer/rules/index.d.ts +0 -2244
  121. package/dist/cjs/transaction-analyzer/rules/index.js +0 -52
  122. package/dist/cjs/transaction-analyzer/rules/index.js.map +0 -7
  123. package/dist/cjs/transaction-analyzer/rules/inputs.d.ts +0 -313
  124. package/dist/cjs/transaction-analyzer/rules/inputs.js +0 -49
  125. package/dist/cjs/transaction-analyzer/rules/inputs.js.map +0 -7
  126. package/dist/cjs/transaction-analyzer/rules/objects.d.ts +0 -359
  127. package/dist/cjs/transaction-analyzer/rules/objects.js +0 -124
  128. package/dist/cjs/transaction-analyzer/rules/objects.js.map +0 -7
  129. package/dist/cjs/util.d.ts +0 -5
  130. package/dist/cjs/util.js +0 -17
  131. package/dist/cjs/util.js.map +0 -7
  132. package/dist/esm/auto-approvals/analyzer.d.ts +0 -71
  133. package/dist/esm/auto-approvals/analyzer.js +0 -50
  134. package/dist/esm/auto-approvals/analyzer.js.map +0 -7
  135. package/dist/esm/auto-approvals/index.d.ts +0 -6
  136. package/dist/esm/auto-approvals/index.js +0 -12
  137. package/dist/esm/auto-approvals/index.js.map +0 -7
  138. package/dist/esm/auto-approvals/intent.d.ts +0 -5
  139. package/dist/esm/auto-approvals/intent.js +0 -45
  140. package/dist/esm/auto-approvals/intent.js.map +0 -7
  141. package/dist/esm/auto-approvals/manager.d.ts +0 -31
  142. package/dist/esm/auto-approvals/manager.js +0 -308
  143. package/dist/esm/auto-approvals/manager.js.map +0 -7
  144. package/dist/esm/auto-approvals/schemas/index.d.ts +0 -4
  145. package/dist/esm/auto-approvals/schemas/index.js +0 -8
  146. package/dist/esm/auto-approvals/schemas/index.js.map +0 -7
  147. package/dist/esm/auto-approvals/schemas/policy.d.ts +0 -145
  148. package/dist/esm/auto-approvals/schemas/policy.js +0 -49
  149. package/dist/esm/auto-approvals/schemas/policy.js.map +0 -7
  150. package/dist/esm/auto-approvals/schemas/state.d.ts +0 -115
  151. package/dist/esm/auto-approvals/schemas/state.js +0 -19
  152. package/dist/esm/auto-approvals/schemas/state.js.map +0 -7
  153. package/dist/esm/index.d.ts +0 -2
  154. package/dist/esm/index.js +0 -3
  155. package/dist/esm/index.js.map +0 -7
  156. package/dist/esm/package.json +0 -5
  157. package/dist/esm/transaction-analyzer/analyzer.d.ts +0 -34
  158. package/dist/esm/transaction-analyzer/analyzer.js +0 -74
  159. package/dist/esm/transaction-analyzer/analyzer.js.map +0 -7
  160. package/dist/esm/transaction-analyzer/index.d.ts +0 -9
  161. package/dist/esm/transaction-analyzer/index.js +0 -8
  162. package/dist/esm/transaction-analyzer/index.js.map +0 -7
  163. package/dist/esm/transaction-analyzer/rules/accessLevel.d.ts +0 -29
  164. package/dist/esm/transaction-analyzer/rules/accessLevel.js +0 -86
  165. package/dist/esm/transaction-analyzer/rules/accessLevel.js.map +0 -7
  166. package/dist/esm/transaction-analyzer/rules/coin-flows.d.ts +0 -313
  167. package/dist/esm/transaction-analyzer/rules/coin-flows.js +0 -159
  168. package/dist/esm/transaction-analyzer/rules/coin-flows.js.map +0 -7
  169. package/dist/esm/transaction-analyzer/rules/coin-value.d.ts +0 -42
  170. package/dist/esm/transaction-analyzer/rules/coin-value.js +0 -40
  171. package/dist/esm/transaction-analyzer/rules/coin-value.js.map +0 -7
  172. package/dist/esm/transaction-analyzer/rules/coins.d.ts +0 -337
  173. package/dist/esm/transaction-analyzer/rules/coins.js +0 -58
  174. package/dist/esm/transaction-analyzer/rules/coins.js.map +0 -7
  175. package/dist/esm/transaction-analyzer/rules/commands.d.ts +0 -366
  176. package/dist/esm/transaction-analyzer/rules/commands.js +0 -128
  177. package/dist/esm/transaction-analyzer/rules/commands.js.map +0 -7
  178. package/dist/esm/transaction-analyzer/rules/core.d.ts +0 -314
  179. package/dist/esm/transaction-analyzer/rules/core.js +0 -53
  180. package/dist/esm/transaction-analyzer/rules/core.js.map +0 -7
  181. package/dist/esm/transaction-analyzer/rules/functions.d.ts +0 -292
  182. package/dist/esm/transaction-analyzer/rules/functions.js +0 -38
  183. package/dist/esm/transaction-analyzer/rules/functions.js.map +0 -7
  184. package/dist/esm/transaction-analyzer/rules/index.d.ts +0 -2244
  185. package/dist/esm/transaction-analyzer/rules/index.js +0 -32
  186. package/dist/esm/transaction-analyzer/rules/index.js.map +0 -7
  187. package/dist/esm/transaction-analyzer/rules/inputs.d.ts +0 -313
  188. package/dist/esm/transaction-analyzer/rules/inputs.js +0 -29
  189. package/dist/esm/transaction-analyzer/rules/inputs.js.map +0 -7
  190. package/dist/esm/transaction-analyzer/rules/objects.d.ts +0 -359
  191. package/dist/esm/transaction-analyzer/rules/objects.js +0 -104
  192. package/dist/esm/transaction-analyzer/rules/objects.js.map +0 -7
  193. package/dist/esm/util.d.ts +0 -5
  194. package/dist/esm/util.js +0 -1
  195. package/dist/esm/util.js.map +0 -7
  196. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  197. package/dist/tsconfig.tsbuildinfo +0 -1
package/CHANGELOG.md CHANGED
@@ -1,12 +1,41 @@
1
- # @haneullabs/wallet-sdk
1
+ # @mysten/wallet-sdk
2
+
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 99d1e00: Add default export condition
8
+ - Updated dependencies [99d1e00]
9
+ - @mysten/wallet-standard@0.20.1
10
+ - @mysten/bcs@2.0.2
11
+
12
+ ## 0.1.0
13
+
14
+ ### Minor Changes
15
+
16
+ - e00788c: Update to @mysten/sui@2.0
17
+ - e00788c: Update to use SuiJsonRpcClient instead of SuiClient
18
+
19
+ Updated all type signatures, internal usages, examples, and documentation to use
20
+ `SuiJsonRpcClient` from `@mysten/sui/jsonRpc` instead of the deprecated `SuiClient` from
21
+ `@mysten/sui/client`.
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [e00788c]
26
+ - Updated dependencies [e00788c]
27
+ - Updated dependencies [e00788c]
28
+ - Updated dependencies [e00788c]
29
+ - @mysten/wallet-standard@0.20.0
30
+ - @mysten/bcs@2.0.0
2
31
 
3
32
  ## 0.0.8
4
33
 
5
34
  ### Patch Changes
6
35
 
7
36
  - Updated dependencies [29e8b92]
8
- - @haneullabs/haneul@1.45.2
9
- - @haneullabs/wallet-standard@0.19.9
37
+ - @mysten/sui@1.45.2
38
+ - @mysten/wallet-standard@0.19.9
10
39
 
11
40
  ## 0.0.7
12
41
 
@@ -14,8 +43,8 @@
14
43
 
15
44
  - e3811f1: update valibot
16
45
  - Updated dependencies [e3811f1]
17
- - @haneullabs/haneul@1.45.1
18
- - @haneullabs/wallet-standard@0.19.8
46
+ - @mysten/sui@1.45.1
47
+ - @mysten/wallet-standard@0.19.8
19
48
 
20
49
  ## 0.0.6
21
50
 
@@ -28,34 +57,34 @@
28
57
  ### Patch Changes
29
58
 
30
59
  - Updated dependencies [88bdbac]
31
- - @haneullabs/haneul@1.45.0
32
- - @haneullabs/wallet-standard@0.19.7
60
+ - @mysten/sui@1.45.0
61
+ - @mysten/wallet-standard@0.19.7
33
62
 
34
63
  ## 0.0.4
35
64
 
36
65
  ### Patch Changes
37
66
 
38
67
  - Updated dependencies [44d9b4f]
39
- - @haneullabs/haneul@1.44.0
40
- - @haneullabs/wallet-standard@0.19.6
68
+ - @mysten/sui@1.44.0
69
+ - @mysten/wallet-standard@0.19.6
41
70
 
42
71
  ## 0.0.3
43
72
 
44
73
  ### Patch Changes
45
74
 
46
75
  - Updated dependencies [89fa2dc]
47
- - @haneullabs/bcs@1.9.2
48
- - @haneullabs/haneul@1.43.2
49
- - @haneullabs/wallet-standard@0.19.5
76
+ - @mysten/bcs@1.9.2
77
+ - @mysten/sui@1.43.2
78
+ - @mysten/wallet-standard@0.19.5
50
79
 
51
80
  ## 0.0.2
52
81
 
53
82
  ### Patch Changes
54
83
 
55
84
  - Updated dependencies [a37829f]
56
- - @haneullabs/bcs@1.9.1
57
- - @haneullabs/haneul@1.43.1
58
- - @haneullabs/wallet-standard@0.19.4
85
+ - @mysten/bcs@1.9.1
86
+ - @mysten/sui@1.43.1
87
+ - @mysten/wallet-standard@0.19.4
59
88
 
60
89
  ## 0.0.1
61
90
 
@@ -64,6 +93,6 @@
64
93
  - Updated dependencies [f3b19a7]
65
94
  - Updated dependencies [f3b19a7]
66
95
  - Updated dependencies [bf9f85c]
67
- - @haneullabs/haneul@1.43.0
68
- - @haneullabs/bcs@1.9.0
69
- - @haneullabs/wallet-standard@0.19.3
96
+ - @mysten/sui@1.43.0
97
+ - @mysten/bcs@1.9.0
98
+ - @mysten/wallet-standard@0.19.3
@@ -0,0 +1,83 @@
1
+ import { Analyzer, AnalyzerResult } from "../transaction-analyzer/analyzer.mjs";
2
+ import { CoinFlow } from "../transaction-analyzer/rules/coin-flows.mjs";
3
+ import "../transaction-analyzer/index.mjs";
4
+ import * as _haneullabs_haneul_client0 from "@haneullabs/haneul/client";
5
+
6
+ //#region src/auto-approvals/analyzer.d.ts
7
+ declare const autoApprovalAnalyzer: Analyzer<{
8
+ operationType: string | null;
9
+ bytes: Uint8Array<ArrayBufferLike>;
10
+ coinFlows: {
11
+ outflows: CoinFlow[];
12
+ };
13
+ accessLevel: Record<string, "read" | "mutate" | "transfer">;
14
+ ownedObjects: {
15
+ ownerAddress: string | null;
16
+ objectId: string;
17
+ version: string;
18
+ digest: string;
19
+ owner: _haneullabs_haneul_client0.HaneulClientTypes.ObjectOwner;
20
+ type: string;
21
+ content: Uint8Array<ArrayBuffer>;
22
+ previousTransaction: undefined;
23
+ objectBcs: undefined;
24
+ json: undefined;
25
+ }[];
26
+ digest: string;
27
+ coinValues: {
28
+ total: number;
29
+ coinTypesWithoutPrice: string[];
30
+ coinTypes: {
31
+ coinType: string;
32
+ decimals: number;
33
+ price: number;
34
+ amount: bigint;
35
+ convertedAmount: number;
36
+ }[];
37
+ };
38
+ }, {
39
+ client: _haneullabs_haneul_client0.BaseClient & {
40
+ core: _haneullabs_haneul_client0.CoreClient;
41
+ };
42
+ getCoinPrices: (coinTypes: string[]) => Promise<{
43
+ coinType: string;
44
+ decimals: number;
45
+ price: number | null;
46
+ }[]>;
47
+ }, {
48
+ operationType: string | null;
49
+ bytes: Uint8Array<ArrayBufferLike>;
50
+ coinFlows: {
51
+ outflows: CoinFlow[];
52
+ };
53
+ coinValues: {
54
+ total: number;
55
+ coinTypesWithoutPrice: string[];
56
+ coinTypes: {
57
+ coinType: string;
58
+ decimals: number;
59
+ price: number;
60
+ amount: bigint;
61
+ convertedAmount: number;
62
+ }[];
63
+ };
64
+ accessLevel: Record<string, "read" | "mutate" | "transfer">;
65
+ ownedObjects: {
66
+ ownerAddress: string | null;
67
+ objectId: string;
68
+ version: string;
69
+ digest: string;
70
+ owner: _haneullabs_haneul_client0.HaneulClientTypes.ObjectOwner;
71
+ type: string;
72
+ content: Uint8Array<ArrayBuffer>;
73
+ previousTransaction: undefined;
74
+ objectBcs: undefined;
75
+ json: undefined;
76
+ }[];
77
+ digest: string;
78
+ }>;
79
+ type AutoApprovalAnalysis = typeof autoApprovalAnalyzer extends Analyzer<infer R, any, any> ? R : never;
80
+ type AutoApprovalResult = AnalyzerResult<AutoApprovalAnalysis>;
81
+ //#endregion
82
+ export { AutoApprovalAnalysis, AutoApprovalResult, autoApprovalAnalyzer };
83
+ //# sourceMappingURL=analyzer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.mts","names":[],"sources":["../../src/auto-approvals/analyzer.ts"],"sourcesContent":[],"mappings":";;;;;;cA6Ba,sBAAoB;;;;;EAApB,CAAA;;;;;;;;;;;;;;;;;;IAAoB,SAAA,EAAA;MAAA,QAAA,EAAA,MAAA;MA2BrB,QAAA,EAAA,MAAoB;MAEpB,KAAA,EAAA,MAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAFlB,oBAAA,UACJ,6BAA6B;KACzB,kBAAA,GAAqB,eAAe"}
@@ -0,0 +1,43 @@
1
+ import { createAnalyzer } from "../transaction-analyzer/analyzer.mjs";
2
+ import { analyzers } from "../transaction-analyzer/rules/index.mjs";
3
+ import { OPERATION_INTENT, extractOperationType } from "./intent.mjs";
4
+
5
+ //#region src/auto-approvals/analyzer.ts
6
+ const operationType = createAnalyzer({
7
+ dependencies: { bytes: analyzers.bytes },
8
+ analyze: (_options, tx) => {
9
+ let operationType$1 = null;
10
+ tx.addIntentResolver(OPERATION_INTENT, extractOperationType((type) => {
11
+ operationType$1 = type;
12
+ }));
13
+ return async () => {
14
+ return { result: operationType$1 };
15
+ };
16
+ }
17
+ });
18
+ const autoApprovalAnalyzer = createAnalyzer({
19
+ dependencies: {
20
+ operationType,
21
+ bytes: analyzers.bytes,
22
+ coinFlows: analyzers.coinFlows,
23
+ coinValues: analyzers.coinValues,
24
+ accessLevel: analyzers.accessLevel,
25
+ ownedObjects: analyzers.ownedObjects,
26
+ digest: analyzers.digest
27
+ },
28
+ analyze: () => async ({ bytes, coinFlows, accessLevel, ownedObjects, digest, operationType: operationType$1, coinValues }) => {
29
+ return { result: {
30
+ operationType: operationType$1,
31
+ bytes,
32
+ coinFlows,
33
+ accessLevel,
34
+ ownedObjects,
35
+ digest,
36
+ coinValues
37
+ } };
38
+ }
39
+ });
40
+
41
+ //#endregion
42
+ export { autoApprovalAnalyzer };
43
+ //# sourceMappingURL=analyzer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.mjs","names":["operationType"],"sources":["../../src/auto-approvals/analyzer.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Analyzer, AnalyzerResult } from '../transaction-analyzer/analyzer.js';\nimport { createAnalyzer } from '../transaction-analyzer/index.js';\nimport { analyzers } from '../transaction-analyzer/index.js';\nimport { extractOperationType, OPERATION_INTENT } from './intent.js';\n\nconst operationType = createAnalyzer({\n\tdependencies: {\n\t\tbytes: analyzers.bytes,\n\t},\n\tanalyze: (_options, tx) => {\n\t\tlet operationType: string | null = null;\n\t\ttx.addIntentResolver(\n\t\t\tOPERATION_INTENT,\n\t\t\textractOperationType((type) => {\n\t\t\t\toperationType = type;\n\t\t\t}),\n\t\t);\n\n\t\treturn async () => {\n\t\t\treturn {\n\t\t\t\tresult: operationType,\n\t\t\t};\n\t\t};\n\t},\n});\n\nexport const autoApprovalAnalyzer = createAnalyzer({\n\tdependencies: {\n\t\toperationType,\n\t\tbytes: analyzers.bytes,\n\t\tcoinFlows: analyzers.coinFlows,\n\t\tcoinValues: analyzers.coinValues,\n\t\taccessLevel: analyzers.accessLevel,\n\t\townedObjects: analyzers.ownedObjects,\n\t\tdigest: analyzers.digest,\n\t},\n\tanalyze:\n\t\t() =>\n\t\tasync ({ bytes, coinFlows, accessLevel, ownedObjects, digest, operationType, coinValues }) => {\n\t\t\treturn {\n\t\t\t\tresult: {\n\t\t\t\t\toperationType,\n\t\t\t\t\tbytes,\n\t\t\t\t\tcoinFlows,\n\t\t\t\t\taccessLevel,\n\t\t\t\t\townedObjects,\n\t\t\t\t\tdigest,\n\t\t\t\t\tcoinValues,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n});\n\nexport type AutoApprovalAnalysis =\n\ttypeof autoApprovalAnalyzer extends Analyzer<infer R, any, any> ? R : never;\nexport type AutoApprovalResult = AnalyzerResult<AutoApprovalAnalysis>;\n"],"mappings":";;;;;AAQA,MAAM,gBAAgB,eAAe;CACpC,cAAc,EACb,OAAO,UAAU,OACjB;CACD,UAAU,UAAU,OAAO;EAC1B,IAAIA,kBAA+B;AACnC,KAAG,kBACF,kBACA,sBAAsB,SAAS;AAC9B,qBAAgB;IACf,CACF;AAED,SAAO,YAAY;AAClB,UAAO,EACN,QAAQA,iBACR;;;CAGH,CAAC;AAEF,MAAa,uBAAuB,eAAe;CAClD,cAAc;EACb;EACA,OAAO,UAAU;EACjB,WAAW,UAAU;EACrB,YAAY,UAAU;EACtB,aAAa,UAAU;EACvB,cAAc,UAAU;EACxB,QAAQ,UAAU;EAClB;CACD,eAEC,OAAO,EAAE,OAAO,WAAW,aAAa,cAAc,QAAQ,gCAAe,iBAAiB;AAC7F,SAAO,EACN,QAAQ;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA,EACD;;CAEH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { OPERATION_INTENT, extractOperationType, operationType } from "./intent.mjs";
2
+ import { AutoApprovalAnalysis, AutoApprovalResult, autoApprovalAnalyzer } from "./analyzer.mjs";
3
+ import { AutoApprovalState, AutoApprovalStateSchema } from "./schemas/state.mjs";
4
+ import { AutoApprovalOperation, AutoApprovalPolicy, AutoApprovalPolicySchema, AutoApprovalSettings, AutoApprovalSettingsSchema, PolicyPermission } from "./schemas/policy.mjs";
5
+ import { AutoApprovalCheck, AutoApprovalIssue, AutoApprovalManager } from "./manager.mjs";
6
+ import "./schemas/index.mjs";
@@ -0,0 +1,9 @@
1
+ import { Transaction, TransactionDataBuilder, TransactionResult } from "@haneullabs/haneul/transactions";
2
+
3
+ //#region src/auto-approvals/intent.d.ts
4
+ declare const OPERATION_INTENT = "@haneullabs/wallet-kit/AutoApprovalOperation";
5
+ declare function operationType(operationType: string): (tx: Transaction) => TransactionResult;
6
+ declare function extractOperationType(cb: (operationType: string) => void): (transactionData: TransactionDataBuilder, _options: unknown, next: () => Promise<void>) => Promise<void>;
7
+ //#endregion
8
+ export { OPERATION_INTENT, extractOperationType, operationType };
9
+ //# sourceMappingURL=intent.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.mts","names":[],"sources":["../../src/auto-approvals/intent.ts"],"sourcesContent":[],"mappings":";;;cAOa,gBAAA;AAAA,iBAEG,aAAA,CAFa,aAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,EAGhB,WAHgB,EAAA,GAGF,iBAHE;AAEb,iBAmBA,oBAAA,CAlBW,EAAA,EAAA,CAAA,aAAiB,EAAA,MAAA,EAAA,GAAA,IAAA,CAAA,EAAA,CAAA,eAAA,EAoBzB,sBApByB,EAAA,QAAA,EAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAsB9B,OAtB8B,CAAA,IAAA,CAAA,EAAA,GAsBjB,OAtBiB,CAAA,IAAA,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { TransactionCommands } from "@haneullabs/haneul/transactions";
2
+
3
+ //#region src/auto-approvals/intent.ts
4
+ const OPERATION_INTENT = "@haneullabs/wallet-kit/AutoApprovalOperation";
5
+ function operationType(operationType$1) {
6
+ return (tx) => {
7
+ tx.addIntentResolver(OPERATION_INTENT, (transactionData, _options, next) => {
8
+ replaceOperationTypeIntent(transactionData);
9
+ return next();
10
+ });
11
+ return tx.add(TransactionCommands.Intent({
12
+ name: OPERATION_INTENT,
13
+ inputs: {},
14
+ data: { operationType: operationType$1 }
15
+ }));
16
+ };
17
+ }
18
+ function extractOperationType(cb) {
19
+ return (transactionData, _options, next) => {
20
+ replaceOperationTypeIntent(transactionData, cb);
21
+ return next();
22
+ };
23
+ }
24
+ function replaceOperationTypeIntent(transactionData, cb) {
25
+ let intentFound = false;
26
+ for (let index = 0; index < transactionData.commands.length; index++) {
27
+ const command = transactionData.commands[index];
28
+ if (command.$kind === "$Intent" && command.$Intent.name === OPERATION_INTENT) {
29
+ if (intentFound) throw new Error("Multiple operation type intents found in transaction");
30
+ intentFound = true;
31
+ const operationType$1 = command.$Intent.data.operationType;
32
+ transactionData.replaceCommand(index, []);
33
+ cb?.(operationType$1);
34
+ }
35
+ }
36
+ }
37
+
38
+ //#endregion
39
+ export { OPERATION_INTENT, extractOperationType, operationType };
40
+ //# sourceMappingURL=intent.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.mjs","names":["operationType"],"sources":["../../src/auto-approvals/intent.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionResult } from '@haneullabs/haneul/transactions';\nimport type { TransactionDataBuilder } from '@haneullabs/haneul/transactions';\nimport { TransactionCommands } from '@haneullabs/haneul/transactions';\n\nexport const OPERATION_INTENT = '@haneullabs/wallet-kit/AutoApprovalOperation';\n\nexport function operationType(operationType: string) {\n\treturn (tx: Transaction): TransactionResult => {\n\t\ttx.addIntentResolver(OPERATION_INTENT, (transactionData, _options, next) => {\n\t\t\treplaceOperationTypeIntent(transactionData);\n\t\t\treturn next();\n\t\t});\n\n\t\tconst result = tx.add(\n\t\t\tTransactionCommands.Intent({\n\t\t\t\tname: OPERATION_INTENT,\n\t\t\t\tinputs: {},\n\t\t\t\tdata: { operationType },\n\t\t\t}),\n\t\t);\n\n\t\treturn result;\n\t};\n}\n\nexport function extractOperationType(cb: (operationType: string) => void) {\n\treturn (\n\t\ttransactionData: TransactionDataBuilder,\n\t\t_options: unknown,\n\t\tnext: () => Promise<void>,\n\t) => {\n\t\treplaceOperationTypeIntent(transactionData, cb);\n\t\treturn next();\n\t};\n}\n\nfunction replaceOperationTypeIntent(\n\ttransactionData: TransactionDataBuilder,\n\tcb?: (operationType: string) => void,\n) {\n\tlet intentFound = false;\n\tfor (let index = 0; index < transactionData.commands.length; index++) {\n\t\tconst command = transactionData.commands[index];\n\t\tif (command.$kind === '$Intent' && command.$Intent.name === OPERATION_INTENT) {\n\t\t\tif (intentFound) {\n\t\t\t\tthrow new Error('Multiple operation type intents found in transaction');\n\t\t\t}\n\t\t\tintentFound = true;\n\t\t\tconst operationType = command.$Intent.data.operationType as string;\n\t\t\ttransactionData.replaceCommand(index, []);\n\t\t\tcb?.(operationType);\n\t\t}\n\t}\n}\n"],"mappings":";;;AAOA,MAAa,mBAAmB;AAEhC,SAAgB,cAAc,iBAAuB;AACpD,SAAQ,OAAuC;AAC9C,KAAG,kBAAkB,mBAAmB,iBAAiB,UAAU,SAAS;AAC3E,8BAA2B,gBAAgB;AAC3C,UAAO,MAAM;IACZ;AAUF,SARe,GAAG,IACjB,oBAAoB,OAAO;GAC1B,MAAM;GACN,QAAQ,EAAE;GACV,MAAM,EAAE,gCAAe;GACvB,CAAC,CACF;;;AAMH,SAAgB,qBAAqB,IAAqC;AACzE,SACC,iBACA,UACA,SACI;AACJ,6BAA2B,iBAAiB,GAAG;AAC/C,SAAO,MAAM;;;AAIf,SAAS,2BACR,iBACA,IACC;CACD,IAAI,cAAc;AAClB,MAAK,IAAI,QAAQ,GAAG,QAAQ,gBAAgB,SAAS,QAAQ,SAAS;EACrE,MAAM,UAAU,gBAAgB,SAAS;AACzC,MAAI,QAAQ,UAAU,aAAa,QAAQ,QAAQ,SAAS,kBAAkB;AAC7E,OAAI,YACH,OAAM,IAAI,MAAM,uDAAuD;AAExE,iBAAc;GACd,MAAMA,kBAAgB,QAAQ,QAAQ,KAAK;AAC3C,mBAAgB,eAAe,OAAO,EAAE,CAAC;AACzC,QAAKA,gBAAc"}
@@ -0,0 +1,38 @@
1
+ import { AutoApprovalResult } from "./analyzer.mjs";
2
+ import { AutoApprovalState } from "./schemas/state.mjs";
3
+ import { AutoApprovalSettings } from "./schemas/policy.mjs";
4
+ import { HaneulClientTypes } from "@haneullabs/haneul/client";
5
+
6
+ //#region src/auto-approvals/manager.d.ts
7
+ interface AutoApprovalManagerOptions {
8
+ policy: string;
9
+ state: string | null;
10
+ }
11
+ interface AutoApprovalIssue {
12
+ message: string;
13
+ }
14
+ interface AutoApprovalCheck {
15
+ matchesPolicy: boolean;
16
+ canAutoApprove: boolean;
17
+ policyIssues: AutoApprovalIssue[];
18
+ settingsIssues: AutoApprovalIssue[];
19
+ analysisIssues: AutoApprovalIssue[];
20
+ }
21
+ declare class AutoApprovalManager {
22
+ #private;
23
+ constructor(options: AutoApprovalManagerOptions);
24
+ checkTransaction(analysis: AutoApprovalResult): AutoApprovalCheck;
25
+ commitTransaction(analysis: AutoApprovalResult): void;
26
+ revertTransaction(analysis: AutoApprovalResult): void;
27
+ applyTransactionEffects(analysis: AutoApprovalResult, result: HaneulClientTypes.Transaction<{
28
+ balanceChanges: true;
29
+ }>): void;
30
+ reset(): void;
31
+ export(): string;
32
+ getState(): AutoApprovalState;
33
+ getSettings(): AutoApprovalSettings | null;
34
+ updateSettings(settings: AutoApprovalSettings): void;
35
+ }
36
+ //#endregion
37
+ export { AutoApprovalCheck, AutoApprovalIssue, AutoApprovalManager };
38
+ //# sourceMappingURL=manager.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.mts","names":[],"sources":["../../src/auto-approvals/manager.ts"],"sourcesContent":[],"mappings":";;;;;;UAYiB,0BAAA;;EAAA,KAAA,EAAA,MAAA,GAAA,IAAA;AAKjB;AAIiB,UAJA,iBAAA,CAIiB;EAGnB,OAAA,EAAA,MAAA;;AAEE,UALA,iBAAA,CAKA;EAAiB,aAAA,EAAA,OAAA;EAGrB,cAAA,EAAA,OAAmB;EAGV,YAAA,EARP,iBAQO,EAAA;EA0BM,cAAA,EAjCX,iBAiCW,EAAA;EAAqB,cAAA,EAhChC,iBAgCgC,EAAA;;AAuNpB,cApPhB,mBAAA,CAoPgB;EAsDjB,CAAA,OAAA;EACF,WAAA,CAAA,OAAkB,EAxSN,0BAwSM;EAwDf,gBAAA,CAAA,QAAA,EAtUe,kBAsUf,CAAA,EAtUoC,iBAsUpC;EAIG,iBAAA,CAAA,QAAA,EA5Ja,kBA4Jb,CAAA,EAAA,IAAA;EAIU,iBAAA,CAAA,QAAA,EAvHG,kBAuHH,CAAA,EAAA,IAAA;EAAoB,uBAAA,CAAA,QAAA,EAjElC,kBAiEkC,EAAA,MAAA,EAhEpC,iBAAA,CAAkB,WAgEkB,CAAA;;;;;cARjC;iBAIG;2BAIU"}
@@ -0,0 +1,192 @@
1
+ import { AutoApprovalPolicySchema, AutoApprovalSettingsSchema } from "./schemas/policy.mjs";
2
+ import { AutoApprovalStateSchema } from "./schemas/state.mjs";
3
+ import { parseStructTag } from "@haneullabs/haneul/utils";
4
+ import { parse, safeParse } from "valibot";
5
+
6
+ //#region src/auto-approvals/manager.ts
7
+ var AutoApprovalManager = class {
8
+ #state;
9
+ constructor(options) {
10
+ let state = null;
11
+ if (options.state) {
12
+ const parseResult = safeParse(AutoApprovalStateSchema, JSON.parse(options.state));
13
+ if (parseResult.success) {
14
+ const providedPolicy = parse(AutoApprovalPolicySchema, JSON.parse(options.policy));
15
+ const currentPolicy = parseResult.output.policy;
16
+ if (JSON.stringify(currentPolicy) === JSON.stringify(providedPolicy)) state = parseResult.output;
17
+ }
18
+ }
19
+ this.#state = state ?? parse(AutoApprovalStateSchema, {
20
+ schemaVersion: "1.0.0",
21
+ policy: parse(AutoApprovalPolicySchema, JSON.parse(options.policy)),
22
+ settings: null,
23
+ pendingDigests: []
24
+ });
25
+ }
26
+ checkTransaction(analysis) {
27
+ const results = {
28
+ matchesPolicy: false,
29
+ canAutoApprove: false,
30
+ analysisIssues: [...analysis.issues ?? []],
31
+ policyIssues: [],
32
+ settingsIssues: []
33
+ };
34
+ if (results.analysisIssues.length > 0) return results;
35
+ const policyIssues = this.#matchesPolicy(analysis);
36
+ if (policyIssues.length > 0) {
37
+ results.policyIssues = policyIssues;
38
+ return results;
39
+ } else results.matchesPolicy = true;
40
+ const settingsIssues = this.#canAutoApprove(analysis);
41
+ if (settingsIssues.length > 0) {
42
+ results.settingsIssues = settingsIssues;
43
+ return results;
44
+ } else results.canAutoApprove = true;
45
+ return results;
46
+ }
47
+ #matchesPolicy(analysis) {
48
+ const issues = [];
49
+ if (analysis.issues) {
50
+ issues.push({ message: "Transaction analysis failed" });
51
+ return issues;
52
+ }
53
+ if (!analysis.result.operationType) {
54
+ issues.push({ message: "Operation type not found in Transaction" });
55
+ return issues;
56
+ }
57
+ const operation = this.#state.policy.operations.find((op) => op.id === analysis.result.operationType);
58
+ if (!operation) {
59
+ issues.push({ message: "Operation not found in policy" });
60
+ return issues;
61
+ }
62
+ if (!operation.permissions.anyBalance) {
63
+ for (const flow of analysis.result.coinFlows.outflows) if (!operation.permissions.balances?.find((b) => b.coinType === flow.coinType)) issues.push({ message: `Operation does not have permission to use coin type ${flow.coinType}` });
64
+ }
65
+ for (const obj of analysis.result.ownedObjects) {
66
+ if (isCoinType(obj.type)) continue;
67
+ const accessLevel = analysis.result.accessLevel[obj.objectId];
68
+ if (!accessLevel) issues.push({ message: `Access level could not be determined for object ${obj.objectId}` });
69
+ const ownedObjectsPermission = operation.permissions.ownedObjects?.find((p) => p.objectType === obj.type);
70
+ if (!ownedObjectsPermission) issues.push({ message: `No permission found for object ${obj.objectId}` });
71
+ else if (!compareAccessLevel(ownedObjectsPermission.accessLevel, accessLevel)) issues.push({ message: `Insufficient access level for object ${obj.objectId}: required ${ownedObjectsPermission.accessLevel}, got ${accessLevel}` });
72
+ }
73
+ return issues;
74
+ function compareAccessLevel(required, actual) {
75
+ if (required === "read") return true;
76
+ if (required === "mutate") return actual === "mutate" || actual === "transfer";
77
+ return actual === "transfer";
78
+ }
79
+ }
80
+ #canAutoApprove(analysis) {
81
+ const issues = [];
82
+ if (!this.#state.settings) {
83
+ issues.push({ message: "No auto-approval settings configured" });
84
+ return issues;
85
+ }
86
+ if (analysis.issues) {
87
+ issues.push({ message: "Transaction analysis failed" });
88
+ return issues;
89
+ }
90
+ if (/* @__PURE__ */ new Date() > new Date(this.#state.settings.expiration)) issues.push({ message: "Auto-approval settings have expired" });
91
+ if (this.#state.settings.remainingTransactions !== null && this.#state.settings.remainingTransactions <= 0) issues.push({ message: "No remaining auto-approved transactions" });
92
+ if (!analysis.result.operationType || !this.#state.settings.approvedOperations.includes(analysis.result.operationType)) issues.push({ message: "Operation type not approved for auto-approval" });
93
+ for (const outflow of analysis.result.coinFlows.outflows) {
94
+ if (outflow.amount <= 0n) continue;
95
+ if (this.#state.settings.coinBudgets[outflow.coinType] !== void 0) {
96
+ const coinBudget = this.#state.settings.coinBudgets[outflow.coinType];
97
+ if (coinBudget) {
98
+ if (BigInt(coinBudget) < outflow.amount) issues.push({ message: `Insufficient budget for coin type ${outflow.coinType}` });
99
+ }
100
+ } else {
101
+ const coinAmount = analysis.result.coinValues.coinTypes.find((ct) => ct.coinType === outflow.coinType);
102
+ if (!coinAmount) issues.push({ message: `No budget configured for coin type ${outflow.coinType}` });
103
+ else if ((this.#state.settings.sharedBudget ?? 0) < coinAmount.convertedAmount) issues.push({ message: `Insufficient budget for coin type ${outflow.coinType}` });
104
+ }
105
+ }
106
+ return issues;
107
+ }
108
+ commitTransaction(analysis) {
109
+ if (!this.#state.settings) throw new Error("No auto-approval settings configured");
110
+ if (!analysis.result) throw new Error("Transaction analysis failed");
111
+ if (this.#state.settings.remainingTransactions !== null && this.#state.settings) this.#state.settings.remainingTransactions = Math.max(0, this.#state.settings.remainingTransactions - 1);
112
+ for (const outflow of analysis.result.coinFlows.outflows) if (this.#state.settings.coinBudgets[outflow.coinType] !== void 0) {
113
+ const newBalance = BigInt(this.#state.settings?.coinBudgets[outflow.coinType] ?? "0") - outflow.amount;
114
+ this.#state.settings.coinBudgets[outflow.coinType] = newBalance.toString();
115
+ } else {
116
+ if (this.#state.settings.sharedBudget === null) throw new Error("No budget available for coin type " + outflow.coinType);
117
+ const coinValue = analysis.result.coinValues.coinTypes.find((ct) => ct.coinType === outflow.coinType);
118
+ if (!coinValue) throw new Error("No value available for coin type " + outflow.coinType);
119
+ this.#state.settings.sharedBudget -= coinValue.convertedAmount;
120
+ }
121
+ this.#state.pendingDigests.push(analysis.result.digest);
122
+ }
123
+ revertTransaction(analysis) {
124
+ if (analysis.result?.digest) this.#removePendingDigest(analysis.result?.digest);
125
+ if (this.#state.settings?.remainingTransactions !== null && this.#state.settings) this.#state.settings.remainingTransactions += 1;
126
+ this.#revertCoinFlows(analysis);
127
+ }
128
+ #revertCoinFlows(analysis) {
129
+ if (!this.#state.settings) throw new Error("No auto-approval settings configured");
130
+ if (!analysis.result) throw new Error("Transaction analysis failed");
131
+ for (const outflow of analysis.result.coinFlows.outflows) if (this.#state.settings?.coinBudgets[outflow.coinType] !== void 0) {
132
+ const newBalance = BigInt(this.#state.settings?.coinBudgets[outflow.coinType] ?? "0") + outflow.amount;
133
+ this.#state.settings.coinBudgets[outflow.coinType] = newBalance.toString();
134
+ } else {
135
+ if (this.#state.settings.sharedBudget === null) throw new Error("No budget available for coin type " + outflow.coinType);
136
+ const coinValue = analysis.result.coinValues.coinTypes.find((ct) => ct.coinType === outflow.coinType);
137
+ if (!coinValue) throw new Error("No value available for coin type " + outflow.coinType);
138
+ this.#state.settings.sharedBudget += coinValue.convertedAmount;
139
+ }
140
+ }
141
+ #removePendingDigest(digest) {
142
+ const pendingIndex = this.#state.pendingDigests.indexOf(digest);
143
+ if (pendingIndex >= 0) this.#state.pendingDigests.splice(pendingIndex, 1);
144
+ else throw new Error(`Transaction with digest ${digest} not found in pending digests`);
145
+ }
146
+ applyTransactionEffects(analysis, result) {
147
+ this.#removePendingDigest(result.digest);
148
+ if (!this.#state.settings) throw new Error("No auto-approval settings configured");
149
+ if (!analysis.result) throw new Error("Transaction analysis failed");
150
+ this.#revertCoinFlows(analysis);
151
+ for (const change of result.balanceChanges) if (this.#state.settings.coinBudgets[change.coinType] !== void 0) {
152
+ const newBalance = BigInt(this.#state.settings?.coinBudgets[change.coinType] ?? "0") + BigInt(change.amount);
153
+ if (this.#state.settings) this.#state.settings.coinBudgets[change.coinType] = newBalance.toString();
154
+ } else {
155
+ if (this.#state.settings.sharedBudget === null) throw new Error("No budget available for coin type " + change.coinType);
156
+ const coinValue = analysis.result.coinValues.coinTypes.find((ct) => ct.coinType === change.coinType);
157
+ if (!coinValue) throw new Error("No value available for coin type " + change.coinType);
158
+ const convertedChange = Number(change.amount) / 10 ** coinValue.decimals * coinValue.price;
159
+ this.#state.settings.sharedBudget += convertedChange;
160
+ }
161
+ }
162
+ reset() {
163
+ this.#state = {
164
+ schemaVersion: "1.0.0",
165
+ policy: this.#state.policy,
166
+ settings: null,
167
+ pendingDigests: []
168
+ };
169
+ }
170
+ export() {
171
+ return JSON.stringify(parse(AutoApprovalStateSchema, this.#state));
172
+ }
173
+ getState() {
174
+ return parse(AutoApprovalStateSchema, this.#state);
175
+ }
176
+ getSettings() {
177
+ return this.#state.settings;
178
+ }
179
+ updateSettings(settings) {
180
+ const validatedSettings = parse(AutoApprovalSettingsSchema, settings);
181
+ this.#state.settings = validatedSettings;
182
+ }
183
+ };
184
+ const parsedCoinType = parseStructTag("0x2::coin::Coin");
185
+ function isCoinType(type) {
186
+ const parsedType = parseStructTag(type);
187
+ return parsedType.address === parsedCoinType.address && parsedType.module === parsedCoinType.module && parsedType.name === parsedCoinType.name && parsedType.typeParams.length === 1;
188
+ }
189
+
190
+ //#endregion
191
+ export { AutoApprovalManager };
192
+ //# sourceMappingURL=manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.mjs","names":["#state","#matchesPolicy","#canAutoApprove","#removePendingDigest","#revertCoinFlows"],"sources":["../../src/auto-approvals/manager.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { HaneulClientTypes } from '@haneullabs/haneul/client';\nimport { parse, safeParse } from 'valibot';\nimport type { AutoApprovalState } from './schemas/state.js';\nimport { AutoApprovalStateSchema } from './schemas/state.js';\nimport type { AutoApprovalSettings } from './schemas/policy.js';\nimport { AutoApprovalPolicySchema, AutoApprovalSettingsSchema } from './schemas/policy.js';\nimport { parseStructTag } from '@haneullabs/haneul/utils';\nimport type { AutoApprovalResult } from './analyzer.js';\n\nexport interface AutoApprovalManagerOptions {\n\tpolicy: string;\n\tstate: string | null;\n}\n\nexport interface AutoApprovalIssue {\n\tmessage: string;\n}\n\nexport interface AutoApprovalCheck {\n\tmatchesPolicy: boolean;\n\tcanAutoApprove: boolean;\n\tpolicyIssues: AutoApprovalIssue[];\n\tsettingsIssues: AutoApprovalIssue[];\n\tanalysisIssues: AutoApprovalIssue[];\n}\n\nexport class AutoApprovalManager {\n\t#state: AutoApprovalState;\n\n\tconstructor(options: AutoApprovalManagerOptions) {\n\t\tlet state: AutoApprovalState | null = null;\n\n\t\tif (options.state) {\n\t\t\tconst parseResult = safeParse(AutoApprovalStateSchema, JSON.parse(options.state));\n\t\t\t// TODO: how do we want to handle failures\n\t\t\tif (parseResult.success) {\n\t\t\t\tconst providedPolicy = parse(AutoApprovalPolicySchema, JSON.parse(options.policy));\n\t\t\t\tconst currentPolicy = parseResult.output.policy;\n\n\t\t\t\tif (JSON.stringify(currentPolicy) === JSON.stringify(providedPolicy)) {\n\t\t\t\t\tstate = parseResult.output;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.#state =\n\t\t\tstate ??\n\t\t\tparse(AutoApprovalStateSchema, {\n\t\t\t\tschemaVersion: '1.0.0',\n\t\t\t\tpolicy: parse(AutoApprovalPolicySchema, JSON.parse(options.policy)),\n\t\t\t\tsettings: null,\n\t\t\t\tpendingDigests: [],\n\t\t\t} satisfies AutoApprovalState);\n\t}\n\n\tcheckTransaction(analysis: AutoApprovalResult): AutoApprovalCheck {\n\t\tconst results: AutoApprovalCheck = {\n\t\t\tmatchesPolicy: false,\n\t\t\tcanAutoApprove: false,\n\t\t\tanalysisIssues: [...(analysis.issues ?? [])],\n\t\t\tpolicyIssues: [],\n\t\t\tsettingsIssues: [],\n\t\t};\n\n\t\tif (results.analysisIssues.length > 0) {\n\t\t\treturn results;\n\t\t}\n\n\t\tconst policyIssues = this.#matchesPolicy(analysis);\n\n\t\tif (policyIssues.length > 0) {\n\t\t\tresults.policyIssues = policyIssues;\n\t\t\treturn results;\n\t\t} else {\n\t\t\tresults.matchesPolicy = true;\n\t\t}\n\n\t\tconst settingsIssues = this.#canAutoApprove(analysis);\n\n\t\tif (settingsIssues.length > 0) {\n\t\t\tresults.settingsIssues = settingsIssues;\n\t\t\treturn results;\n\t\t} else {\n\t\t\tresults.canAutoApprove = true;\n\t\t}\n\n\t\treturn results;\n\t}\n\n\t#matchesPolicy(analysis: AutoApprovalResult): AutoApprovalIssue[] {\n\t\tconst issues: AutoApprovalIssue[] = [];\n\n\t\tif (analysis.issues) {\n\t\t\tissues.push({ message: 'Transaction analysis failed' });\n\t\t\treturn issues;\n\t\t}\n\n\t\tif (!analysis.result.operationType) {\n\t\t\tissues.push({ message: 'Operation type not found in Transaction' });\n\n\t\t\treturn issues;\n\t\t}\n\n\t\tconst operation = this.#state.policy.operations.find(\n\t\t\t(op) => op.id === analysis.result.operationType,\n\t\t);\n\n\t\tif (!operation) {\n\t\t\tissues.push({ message: 'Operation not found in policy' });\n\t\t\treturn issues;\n\t\t}\n\n\t\tif (!operation.permissions.anyBalance) {\n\t\t\tfor (const flow of analysis.result.coinFlows.outflows) {\n\t\t\t\tif (!operation.permissions.balances?.find((b) => b.coinType === flow.coinType)) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage: `Operation does not have permission to use coin type ${flow.coinType}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const obj of analysis.result.ownedObjects) {\n\t\t\tif (isCoinType(obj.type)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst accessLevel = analysis.result.accessLevel[obj.objectId];\n\n\t\t\tif (!accessLevel) {\n\t\t\t\tissues.push({ message: `Access level could not be determined for object ${obj.objectId}` });\n\t\t\t}\n\n\t\t\tconst ownedObjectsPermission = operation.permissions.ownedObjects?.find(\n\t\t\t\t(p) => p.objectType === obj.type,\n\t\t\t);\n\n\t\t\tif (!ownedObjectsPermission) {\n\t\t\t\tissues.push({ message: `No permission found for object ${obj.objectId}` });\n\t\t\t} else if (!compareAccessLevel(ownedObjectsPermission.accessLevel, accessLevel)) {\n\t\t\t\tissues.push({\n\t\t\t\t\tmessage: `Insufficient access level for object ${obj.objectId}: required ${ownedObjectsPermission.accessLevel}, got ${accessLevel}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn issues;\n\n\t\tfunction compareAccessLevel(\n\t\t\trequired: 'read' | 'mutate' | 'transfer',\n\t\t\tactual: 'read' | 'mutate' | 'transfer',\n\t\t): boolean {\n\t\t\tif (required === 'read') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (required === 'mutate') {\n\t\t\t\treturn actual === 'mutate' || actual === 'transfer';\n\t\t\t}\n\t\t\treturn actual === 'transfer';\n\t\t}\n\t}\n\n\t#canAutoApprove(analysis: AutoApprovalResult): AutoApprovalIssue[] {\n\t\tconst issues: AutoApprovalIssue[] = [];\n\n\t\tif (!this.#state.settings) {\n\t\t\tissues.push({ message: 'No auto-approval settings configured' });\n\t\t\treturn issues;\n\t\t}\n\n\t\tif (analysis.issues) {\n\t\t\tissues.push({ message: 'Transaction analysis failed' });\n\t\t\treturn issues;\n\t\t}\n\n\t\tif (new Date() > new Date(this.#state.settings.expiration)) {\n\t\t\tissues.push({ message: 'Auto-approval settings have expired' });\n\t\t}\n\n\t\tif (\n\t\t\tthis.#state.settings.remainingTransactions !== null &&\n\t\t\tthis.#state.settings.remainingTransactions <= 0\n\t\t) {\n\t\t\tissues.push({ message: 'No remaining auto-approved transactions' });\n\t\t}\n\n\t\tif (\n\t\t\t!analysis.result.operationType ||\n\t\t\t!this.#state.settings.approvedOperations.includes(analysis.result.operationType)\n\t\t) {\n\t\t\tissues.push({ message: 'Operation type not approved for auto-approval' });\n\t\t}\n\n\t\tfor (const outflow of analysis.result.coinFlows.outflows) {\n\t\t\tif (outflow.amount <= 0n) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (this.#state.settings.coinBudgets[outflow.coinType] !== undefined) {\n\t\t\t\tconst coinBudget = this.#state.settings.coinBudgets[outflow.coinType];\n\n\t\t\t\tif (coinBudget) {\n\t\t\t\t\tif (BigInt(coinBudget) < outflow.amount) {\n\t\t\t\t\t\tissues.push({\n\t\t\t\t\t\t\tmessage: `Insufficient budget for coin type ${outflow.coinType}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst coinAmount = analysis.result.coinValues.coinTypes.find(\n\t\t\t\t\t(ct) => ct.coinType === outflow.coinType,\n\t\t\t\t);\n\n\t\t\t\tif (!coinAmount) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage: `No budget configured for coin type ${outflow.coinType}`,\n\t\t\t\t\t});\n\t\t\t\t} else if ((this.#state.settings.sharedBudget ?? 0) < coinAmount.convertedAmount) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage: `Insufficient budget for coin type ${outflow.coinType}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn issues;\n\t}\n\n\t// TODO: we should ensure that only 1 tx is pending at a time, and pending txs can't increase budgets\n\tcommitTransaction(analysis: AutoApprovalResult): void {\n\t\tif (!this.#state.settings) {\n\t\t\tthrow new Error('No auto-approval settings configured');\n\t\t}\n\n\t\tif (!analysis.result) {\n\t\t\tthrow new Error('Transaction analysis failed');\n\t\t}\n\n\t\tif (this.#state.settings.remainingTransactions !== null && this.#state.settings) {\n\t\t\tthis.#state.settings.remainingTransactions = Math.max(\n\t\t\t\t0,\n\t\t\t\tthis.#state.settings.remainingTransactions - 1,\n\t\t\t);\n\t\t}\n\n\t\tfor (const outflow of analysis.result.coinFlows.outflows) {\n\t\t\tif (this.#state.settings.coinBudgets[outflow.coinType] !== undefined) {\n\t\t\t\tconst currentBudget = BigInt(this.#state.settings?.coinBudgets[outflow.coinType] ?? '0');\n\t\t\t\tconst newBalance = currentBudget - outflow.amount;\n\t\t\t\tthis.#state.settings.coinBudgets[outflow.coinType] = newBalance.toString();\n\t\t\t} else {\n\t\t\t\tif (this.#state.settings.sharedBudget === null) {\n\t\t\t\t\tthrow new Error('No budget available for coin type ' + outflow.coinType);\n\t\t\t\t}\n\n\t\t\t\tconst coinValue = analysis.result.coinValues.coinTypes.find(\n\t\t\t\t\t(ct) => ct.coinType === outflow.coinType,\n\t\t\t\t);\n\n\t\t\t\tif (!coinValue) {\n\t\t\t\t\tthrow new Error('No value available for coin type ' + outflow.coinType);\n\t\t\t\t}\n\n\t\t\t\tthis.#state.settings.sharedBudget -= coinValue.convertedAmount;\n\t\t\t}\n\t\t}\n\n\t\tthis.#state.pendingDigests.push(analysis.result.digest);\n\t}\n\n\trevertTransaction(analysis: AutoApprovalResult): void {\n\t\tif (analysis.result?.digest) {\n\t\t\tthis.#removePendingDigest(analysis.result?.digest);\n\t\t}\n\n\t\tif (this.#state.settings?.remainingTransactions !== null && this.#state.settings) {\n\t\t\tthis.#state.settings.remainingTransactions += 1;\n\t\t}\n\n\t\tthis.#revertCoinFlows(analysis);\n\t}\n\n\t#revertCoinFlows(analysis: AutoApprovalResult): void {\n\t\tif (!this.#state.settings) {\n\t\t\tthrow new Error('No auto-approval settings configured');\n\t\t}\n\n\t\tif (!analysis.result) {\n\t\t\tthrow new Error('Transaction analysis failed');\n\t\t}\n\n\t\tfor (const outflow of analysis.result.coinFlows.outflows) {\n\t\t\tif (this.#state.settings?.coinBudgets[outflow.coinType] !== undefined) {\n\t\t\t\tconst currentBudget = BigInt(this.#state.settings?.coinBudgets[outflow.coinType] ?? '0');\n\t\t\t\tconst newBalance = currentBudget + outflow.amount;\n\t\t\t\tthis.#state.settings.coinBudgets[outflow.coinType] = newBalance.toString();\n\t\t\t} else {\n\t\t\t\tif (this.#state.settings.sharedBudget === null) {\n\t\t\t\t\tthrow new Error('No budget available for coin type ' + outflow.coinType);\n\t\t\t\t}\n\n\t\t\t\tconst coinValue = analysis.result.coinValues.coinTypes.find(\n\t\t\t\t\t(ct) => ct.coinType === outflow.coinType,\n\t\t\t\t);\n\n\t\t\t\tif (!coinValue) {\n\t\t\t\t\tthrow new Error('No value available for coin type ' + outflow.coinType);\n\t\t\t\t}\n\n\t\t\t\tthis.#state.settings.sharedBudget += coinValue.convertedAmount;\n\t\t\t}\n\t\t}\n\t}\n\n\t#removePendingDigest(digest: string): void {\n\t\tconst pendingIndex = this.#state.pendingDigests.indexOf(digest);\n\t\tif (pendingIndex >= 0) {\n\t\t\tthis.#state.pendingDigests.splice(pendingIndex, 1);\n\t\t} else {\n\t\t\tthrow new Error(`Transaction with digest ${digest} not found in pending digests`);\n\t\t}\n\t}\n\n\tapplyTransactionEffects(\n\t\tanalysis: AutoApprovalResult,\n\t\tresult: HaneulClientTypes.Transaction<{ balanceChanges: true }>,\n\t): void {\n\t\tthis.#removePendingDigest(result.digest);\n\n\t\tif (!this.#state.settings) {\n\t\t\tthrow new Error('No auto-approval settings configured');\n\t\t}\n\n\t\tif (!analysis.result) {\n\t\t\tthrow new Error('Transaction analysis failed');\n\t\t}\n\n\t\t// Revert coin flows and use real balance changes instead\n\t\tthis.#revertCoinFlows(analysis);\n\n\t\tfor (const change of result.balanceChanges) {\n\t\t\tif (this.#state.settings.coinBudgets[change.coinType] !== undefined) {\n\t\t\t\tconst currentBudget = BigInt(this.#state.settings?.coinBudgets[change.coinType] ?? '0');\n\t\t\t\tconst newBalance = currentBudget + BigInt(change.amount);\n\t\t\t\tif (this.#state.settings) {\n\t\t\t\t\tthis.#state.settings.coinBudgets[change.coinType] = newBalance.toString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.#state.settings.sharedBudget === null) {\n\t\t\t\t\tthrow new Error('No budget available for coin type ' + change.coinType);\n\t\t\t\t}\n\n\t\t\t\tconst coinValue = analysis.result.coinValues.coinTypes.find(\n\t\t\t\t\t(ct) => ct.coinType === change.coinType,\n\t\t\t\t);\n\n\t\t\t\tif (!coinValue) {\n\t\t\t\t\tthrow new Error('No value available for coin type ' + change.coinType);\n\t\t\t\t}\n\n\t\t\t\tconst convertedChange =\n\t\t\t\t\t(Number(change.amount) / 10 ** coinValue.decimals) * coinValue.price;\n\n\t\t\t\tthis.#state.settings.sharedBudget += convertedChange;\n\t\t\t}\n\t\t}\n\t}\n\n\treset() {\n\t\tthis.#state = {\n\t\t\tschemaVersion: '1.0.0',\n\t\t\tpolicy: this.#state.policy,\n\t\t\tsettings: null,\n\t\t\tpendingDigests: [],\n\t\t};\n\t}\n\n\texport(): string {\n\t\treturn JSON.stringify(parse(AutoApprovalStateSchema, this.#state));\n\t}\n\n\tgetState(): AutoApprovalState {\n\t\treturn parse(AutoApprovalStateSchema, this.#state);\n\t}\n\n\tgetSettings(): AutoApprovalSettings | null {\n\t\treturn this.#state.settings;\n\t}\n\n\tupdateSettings(settings: AutoApprovalSettings): void {\n\t\tconst validatedSettings = parse(AutoApprovalSettingsSchema, settings);\n\t\tthis.#state.settings = validatedSettings;\n\t}\n}\n\nconst parsedCoinType = parseStructTag('0x2::coin::Coin');\n\nfunction isCoinType(type: string): boolean {\n\tconst parsedType = parseStructTag(type);\n\treturn (\n\t\tparsedType.address === parsedCoinType.address &&\n\t\tparsedType.module === parsedCoinType.module &&\n\t\tparsedType.name === parsedCoinType.name &&\n\t\tparsedType.typeParams.length === 1\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { AutoApprovalState, AutoApprovalStateSchema } from "./state.mjs";
2
+ import { AutoApprovalOperation, AutoApprovalPolicy, AutoApprovalPolicySchema, AutoApprovalSettings, AutoApprovalSettingsSchema, PolicyPermission } from "./policy.mjs";