@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
@@ -0,0 +1,149 @@
1
+ import * as v from "valibot";
2
+
3
+ //#region src/auto-approvals/schemas/policy.d.ts
4
+ declare const ObjectTypePermissionSchema: v.ObjectSchema<{
5
+ readonly $kind: v.LiteralSchema<"ObjectType", undefined>;
6
+ readonly objectType: v.StringSchema<undefined>;
7
+ readonly accessLevel: v.UnionSchema<[v.LiteralSchema<"read", undefined>, v.LiteralSchema<"mutate", undefined>, v.LiteralSchema<"transfer", undefined>], undefined>;
8
+ readonly description: v.StringSchema<undefined>;
9
+ }, undefined>;
10
+ declare const CoinBalancePermissionSchema: v.ObjectSchema<{
11
+ readonly $kind: v.LiteralSchema<"CoinBalance", undefined>;
12
+ readonly coinType: v.StringSchema<undefined>;
13
+ readonly description: v.StringSchema<undefined>;
14
+ }, undefined>;
15
+ declare const AnyBalancesPermissionSchema: v.ObjectSchema<{
16
+ readonly $kind: v.LiteralSchema<"AnyBalance", undefined>;
17
+ readonly description: v.StringSchema<undefined>;
18
+ }, undefined>;
19
+ type PolicyPermission = v.InferOutput<typeof CoinBalancePermissionSchema | typeof AnyBalancesPermissionSchema | typeof ObjectTypePermissionSchema>;
20
+ declare const AutoApprovalOperationSchema: v.ObjectSchema<{
21
+ readonly id: v.StringSchema<undefined>;
22
+ readonly description: v.StringSchema<undefined>;
23
+ readonly permissions: v.ObjectSchema<{
24
+ readonly ownedObjects: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
25
+ readonly $kind: v.LiteralSchema<"ObjectType", undefined>;
26
+ readonly objectType: v.StringSchema<undefined>;
27
+ readonly accessLevel: v.UnionSchema<[v.LiteralSchema<"read", undefined>, v.LiteralSchema<"mutate", undefined>, v.LiteralSchema<"transfer", undefined>], undefined>;
28
+ readonly description: v.StringSchema<undefined>;
29
+ }, undefined>, undefined>, undefined>;
30
+ readonly balances: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
31
+ readonly $kind: v.LiteralSchema<"CoinBalance", undefined>;
32
+ readonly coinType: v.StringSchema<undefined>;
33
+ readonly description: v.StringSchema<undefined>;
34
+ }, undefined>, undefined>, undefined>;
35
+ readonly anyBalance: v.OptionalSchema<v.ObjectSchema<{
36
+ readonly $kind: v.LiteralSchema<"AnyBalance", undefined>;
37
+ readonly description: v.StringSchema<undefined>;
38
+ }, undefined>, undefined>;
39
+ }, undefined>;
40
+ }, undefined>;
41
+ declare const AutoApprovalSettingsSchema: v.LooseObjectSchema<{
42
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
43
+ readonly expiration: v.NumberSchema<undefined>;
44
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
45
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
46
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
47
+ }, undefined>;
48
+ declare const AutoApprovalPolicySchema: v.ObjectSchema<{
49
+ readonly schemaVersion: v.LiteralSchema<"1.0.0", undefined>;
50
+ readonly operations: v.ArraySchema<v.ObjectSchema<{
51
+ readonly id: v.StringSchema<undefined>;
52
+ readonly description: v.StringSchema<undefined>;
53
+ readonly permissions: v.ObjectSchema<{
54
+ readonly ownedObjects: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
55
+ readonly $kind: v.LiteralSchema<"ObjectType", undefined>;
56
+ readonly objectType: v.StringSchema<undefined>;
57
+ readonly accessLevel: v.UnionSchema<[v.LiteralSchema<"read", undefined>, v.LiteralSchema<"mutate", undefined>, v.LiteralSchema<"transfer", undefined>], undefined>;
58
+ readonly description: v.StringSchema<undefined>;
59
+ }, undefined>, undefined>, undefined>;
60
+ readonly balances: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
61
+ readonly $kind: v.LiteralSchema<"CoinBalance", undefined>;
62
+ readonly coinType: v.StringSchema<undefined>;
63
+ readonly description: v.StringSchema<undefined>;
64
+ }, undefined>, undefined>, undefined>;
65
+ readonly anyBalance: v.OptionalSchema<v.ObjectSchema<{
66
+ readonly $kind: v.LiteralSchema<"AnyBalance", undefined>;
67
+ readonly description: v.StringSchema<undefined>;
68
+ }, undefined>, undefined>;
69
+ }, undefined>;
70
+ }, undefined>, undefined>;
71
+ readonly suggestedSettings: v.OptionalSchema<Omit<v.LooseObjectSchema<{
72
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
73
+ readonly expiration: v.NumberSchema<undefined>;
74
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
75
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
76
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
77
+ }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
78
+ readonly entries: {
79
+ readonly approvedOperations: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
80
+ readonly expiration: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
81
+ readonly remainingTransactions: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
82
+ readonly sharedBudget: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
83
+ readonly coinBudgets: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
84
+ };
85
+ readonly "~standard": v.StandardProps<{
86
+ approvedOperations?: string[] | undefined;
87
+ expiration?: number | undefined;
88
+ remainingTransactions?: number | null | undefined;
89
+ sharedBudget?: number | null | undefined;
90
+ coinBudgets?: {
91
+ [x: string]: string;
92
+ } | undefined;
93
+ } & {
94
+ [key: string]: unknown;
95
+ }, {
96
+ approvedOperations?: string[] | undefined;
97
+ expiration?: number | undefined;
98
+ remainingTransactions?: number | null | undefined;
99
+ sharedBudget?: number | null | undefined;
100
+ coinBudgets?: {
101
+ [x: string]: string;
102
+ } | undefined;
103
+ } & {
104
+ [key: string]: unknown;
105
+ }>;
106
+ readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
107
+ approvedOperations?: string[] | undefined;
108
+ expiration?: number | undefined;
109
+ remainingTransactions?: number | null | undefined;
110
+ sharedBudget?: number | null | undefined;
111
+ coinBudgets?: {
112
+ [x: string]: string;
113
+ } | undefined;
114
+ } & {
115
+ [key: string]: unknown;
116
+ }, v.StringIssue | v.ArrayIssue | v.LooseObjectIssue | v.NumberIssue | v.RecordIssue>;
117
+ readonly "~types"?: {
118
+ readonly input: {
119
+ approvedOperations?: string[] | undefined;
120
+ expiration?: number | undefined;
121
+ remainingTransactions?: number | null | undefined;
122
+ sharedBudget?: number | null | undefined;
123
+ coinBudgets?: {
124
+ [x: string]: string;
125
+ } | undefined;
126
+ } & {
127
+ [key: string]: unknown;
128
+ };
129
+ readonly output: {
130
+ approvedOperations?: string[] | undefined;
131
+ expiration?: number | undefined;
132
+ remainingTransactions?: number | null | undefined;
133
+ sharedBudget?: number | null | undefined;
134
+ coinBudgets?: {
135
+ [x: string]: string;
136
+ } | undefined;
137
+ } & {
138
+ [key: string]: unknown;
139
+ };
140
+ readonly issue: v.StringIssue | v.ArrayIssue | v.LooseObjectIssue | v.NumberIssue | v.RecordIssue;
141
+ } | undefined;
142
+ }, undefined>;
143
+ }, undefined>;
144
+ type AutoApprovalSettings = v.InferOutput<typeof AutoApprovalSettingsSchema>;
145
+ type AutoApprovalPolicy = v.InferOutput<typeof AutoApprovalPolicySchema>;
146
+ type AutoApprovalOperation = v.InferOutput<typeof AutoApprovalOperationSchema>;
147
+ //#endregion
148
+ export { AutoApprovalOperation, AutoApprovalPolicy, AutoApprovalPolicySchema, AutoApprovalSettings, AutoApprovalSettingsSchema, PolicyPermission };
149
+ //# sourceMappingURL=policy.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.mts","names":[],"sources":["../../../src/auto-approvals/schemas/policy.ts"],"sourcesContent":[],"mappings":";;;cAWM,4BAA0B,CAAA,CAAA;;EAA1B,SAAA,UAAA,gBAKJ,CAAA,SAAA,CAAA;;;;cAEI,6BAA2B,CAAA,CAAA;;;;CAPD,EAAA,SAAA,CAAA;cAa1B,2BAb0B,EAaC,CAAA,CAAA,YAbD,CAAA;EAO1B,SAAA,KAAA,iBAIJ,CAAA,YAAA,EAAA,SAAA,CAAA;;;KAOU,gBAAA,GAAmB,CAAA,CAAE,mBACvB,qCACA,qCACA;cAGJ,2BAjB2B,EAiBA,CAAA,CAAA,YAjBA,CAAA;EAAA,SAAA,EAAA,gBAAA,CAAA,SAAA,CAAA;EAM3B,SAAA,WAAA,gBAGJ,CAAA,SAAA,CAAA;;;MAH+B,SAAA,KAAA,iBAAA,CAAA,YAAA,EAAA,SAAA,CAAA;MAAA,SAAA,UAAA,gBAAA,CAAA,SAAA,CAAA;MAKrB,SAAA,WAAgB,eAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,SAAA,CAAA,iBAAA,CAAA,QAAA,EAAA,SAAA,CAAA,iBAAA,CAAA,UAAA,EAAA,SAAA,CAAA,CAAA,EAAA,SAAA,CAAA;MAClB,SAAA,WAAA,gBAAA,CAAA,SAAA,CAAA;IACA,CAAA,EAAA,SAAA,CAAA,EAAA,SAAA,CAAA,EAAA,SAAA,CAAA;IACA,SAAA,QAAA,kBAAA,cAAA,eAAA,CAAA;MAHuB,SAAA,KAAA,iBAAA,CAAA,aAAA,EAAA,SAAA,CAAA;MAAW,SAAA,QAAA,gBAAA,CAAA,SAAA,CAAA;MAMtC,SAAA,WAAA,gBAQJ,CAAA,SAAA,CAAA;;;;;;;;cAGW,4BAA0B,CAAA,CAAA;;;;;;;cAU1B,0BAAwB,CAAA,CAAA;;;;;;;;;QArBJ,SAAA,WAAA,eAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,SAAA,CAAA,iBAAA,CAAA,QAAA,EAAA,SAAA,CAAA,iBAAA,CAAA,UAAA,EAAA,SAAA,CAAA,CAAA,EAAA,SAAA,CAAA;QAAA,SAAA,WAAA,gBAAA,CAAA,SAAA,CAAA;MAWpB,CAAA,EAAA,SAAA,CAAA,EAAA,SAQX,CAAA,EAAA,SAAA,CAAA;;;;;;;;;;;EARqC,CAAA,EAAA,SAAA,CAAA,EAAA,SAAA,CAAA;EAAA,SAAA,iBAAA,kBAAA,KAAA,oBAAA,CAAA;IAU1B,SAAA,kBAKX,eAAA,eAAA,CAAA,SAAA,CAAA,EAAA,SAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EALmC,CAAA,EAAA,SAAA,CAAA;CAAA,EAAA,SAAA,CAAA;AAOzB,KAAA,oBAAA,GAAuB,CAAA,CAAE,WAAmB,CAAA,OAAA,0BAAR,CAAA;AACpC,KAAA,kBAAA,GAAqB,CAAA,CAAE,WAAmB,CAAA,OAAA,wBAAR,CAAA;AAClC,KAAA,qBAAA,GAAwB,CAAA,CAAE,WAAmB,CAAA,OAAA,2BAAR,CAAA"}
@@ -0,0 +1,49 @@
1
+ import * as v from "valibot";
2
+
3
+ //#region src/auto-approvals/schemas/policy.ts
4
+ const AccessLevelSchema = v.union([
5
+ v.literal("read"),
6
+ v.literal("mutate"),
7
+ v.literal("transfer")
8
+ ]);
9
+ const BasePermissionSchema = v.object({ description: v.string() });
10
+ const ObjectTypePermissionSchema = v.object({
11
+ ...BasePermissionSchema.entries,
12
+ $kind: v.literal("ObjectType"),
13
+ objectType: v.string(),
14
+ accessLevel: AccessLevelSchema
15
+ });
16
+ const CoinBalancePermissionSchema = v.object({
17
+ ...BasePermissionSchema.entries,
18
+ $kind: v.literal("CoinBalance"),
19
+ coinType: v.string()
20
+ });
21
+ const AnyBalancesPermissionSchema = v.object({
22
+ ...BasePermissionSchema.entries,
23
+ $kind: v.literal("AnyBalance")
24
+ });
25
+ const AutoApprovalOperationSchema = v.object({
26
+ id: v.string(),
27
+ description: v.string(),
28
+ permissions: v.object({
29
+ ownedObjects: v.optional(v.array(ObjectTypePermissionSchema)),
30
+ balances: v.optional(v.array(CoinBalancePermissionSchema)),
31
+ anyBalance: v.optional(AnyBalancesPermissionSchema)
32
+ })
33
+ });
34
+ const AutoApprovalSettingsSchema = v.looseObject({
35
+ approvedOperations: v.array(v.string()),
36
+ expiration: v.number(),
37
+ remainingTransactions: v.nullable(v.number()),
38
+ sharedBudget: v.nullable(v.number()),
39
+ coinBudgets: v.record(v.string(), v.string())
40
+ });
41
+ const AutoApprovalPolicySchema = v.object({
42
+ schemaVersion: v.literal("1.0.0"),
43
+ operations: v.array(AutoApprovalOperationSchema),
44
+ suggestedSettings: v.optional(v.partial(AutoApprovalSettingsSchema))
45
+ });
46
+
47
+ //#endregion
48
+ export { AutoApprovalPolicySchema, AutoApprovalSettingsSchema };
49
+ //# sourceMappingURL=policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.mjs","names":[],"sources":["../../../src/auto-approvals/schemas/policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as v from 'valibot';\n\nconst AccessLevelSchema = v.union([v.literal('read'), v.literal('mutate'), v.literal('transfer')]);\n\nconst BasePermissionSchema = v.object({\n\tdescription: v.string(),\n});\n\nconst ObjectTypePermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('ObjectType'),\n\tobjectType: v.string(),\n\taccessLevel: AccessLevelSchema,\n});\n\nconst CoinBalancePermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('CoinBalance'),\n\tcoinType: v.string(),\n});\n\nconst AnyBalancesPermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('AnyBalance'),\n});\n\nexport type PolicyPermission = v.InferOutput<\n\t| typeof CoinBalancePermissionSchema\n\t| typeof AnyBalancesPermissionSchema\n\t| typeof ObjectTypePermissionSchema\n>;\n\nconst AutoApprovalOperationSchema = v.object({\n\tid: v.string(),\n\tdescription: v.string(),\n\tpermissions: v.object({\n\t\townedObjects: v.optional(v.array(ObjectTypePermissionSchema)),\n\t\tbalances: v.optional(v.array(CoinBalancePermissionSchema)),\n\t\tanyBalance: v.optional(AnyBalancesPermissionSchema),\n\t}),\n});\n\n// TODO: do we want to support custom settings\nexport const AutoApprovalSettingsSchema = v.looseObject({\n\tapprovedOperations: v.array(v.string()),\n\texpiration: v.number(),\n\t// TODO: figure out a better name\n\tremainingTransactions: v.nullable(v.number()),\n\tsharedBudget: v.nullable(v.number()),\n\t// TODO: normalize coin types\n\tcoinBudgets: v.record(v.string(), v.string()),\n});\n\nexport const AutoApprovalPolicySchema = v.object({\n\tschemaVersion: v.literal('1.0.0'),\n\toperations: v.array(AutoApprovalOperationSchema),\n\t// TODO: do we want to split suggested settings into a different type (not everything makes sense as a suggestion)\n\tsuggestedSettings: v.optional(v.partial(AutoApprovalSettingsSchema)),\n});\n\nexport type AutoApprovalSettings = v.InferOutput<typeof AutoApprovalSettingsSchema>;\nexport type AutoApprovalPolicy = v.InferOutput<typeof AutoApprovalPolicySchema>;\nexport type AutoApprovalOperation = v.InferOutput<typeof AutoApprovalOperationSchema>;\n"],"mappings":";;;AAKA,MAAM,oBAAoB,EAAE,MAAM;CAAC,EAAE,QAAQ,OAAO;CAAE,EAAE,QAAQ,SAAS;CAAE,EAAE,QAAQ,WAAW;CAAC,CAAC;AAElG,MAAM,uBAAuB,EAAE,OAAO,EACrC,aAAa,EAAE,QAAQ,EACvB,CAAC;AAEF,MAAM,6BAA6B,EAAE,OAAO;CAC3C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,aAAa;CAC9B,YAAY,EAAE,QAAQ;CACtB,aAAa;CACb,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,cAAc;CAC/B,UAAU,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,aAAa;CAC9B,CAAC;AAQF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,IAAI,EAAE,QAAQ;CACd,aAAa,EAAE,QAAQ;CACvB,aAAa,EAAE,OAAO;EACrB,cAAc,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;EAC7D,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;EAC1D,YAAY,EAAE,SAAS,4BAA4B;EACnD,CAAC;CACF,CAAC;AAGF,MAAa,6BAA6B,EAAE,YAAY;CACvD,oBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC;CACvC,YAAY,EAAE,QAAQ;CAEtB,uBAAuB,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC7C,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;CAEpC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC;CAC7C,CAAC;AAEF,MAAa,2BAA2B,EAAE,OAAO;CAChD,eAAe,EAAE,QAAQ,QAAQ;CACjC,YAAY,EAAE,MAAM,4BAA4B;CAEhD,mBAAmB,EAAE,SAAS,EAAE,QAAQ,2BAA2B,CAAC;CACpE,CAAC"}
@@ -0,0 +1,115 @@
1
+ import * as v from "valibot";
2
+
3
+ //#region src/auto-approvals/schemas/state.d.ts
4
+
5
+ declare const AutoApprovalStateSchema: v.ObjectSchema<{
6
+ readonly schemaVersion: v.LiteralSchema<"1.0.0", undefined>;
7
+ readonly policy: v.ObjectSchema<{
8
+ readonly schemaVersion: v.LiteralSchema<"1.0.0", undefined>;
9
+ readonly operations: v.ArraySchema<v.ObjectSchema<{
10
+ readonly id: v.StringSchema<undefined>;
11
+ readonly description: v.StringSchema<undefined>;
12
+ readonly permissions: v.ObjectSchema<{
13
+ readonly ownedObjects: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
14
+ readonly $kind: v.LiteralSchema<"ObjectType", undefined>;
15
+ readonly objectType: v.StringSchema<undefined>;
16
+ readonly accessLevel: v.UnionSchema<[v.LiteralSchema<"read", undefined>, v.LiteralSchema<"mutate", undefined>, v.LiteralSchema<"transfer", undefined>], undefined>;
17
+ readonly description: v.StringSchema<undefined>;
18
+ }, undefined>, undefined>, undefined>;
19
+ readonly balances: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
20
+ readonly $kind: v.LiteralSchema<"CoinBalance", undefined>;
21
+ readonly coinType: v.StringSchema<undefined>;
22
+ readonly description: v.StringSchema<undefined>;
23
+ }, undefined>, undefined>, undefined>;
24
+ readonly anyBalance: v.OptionalSchema<v.ObjectSchema<{
25
+ readonly $kind: v.LiteralSchema<"AnyBalance", undefined>;
26
+ readonly description: v.StringSchema<undefined>;
27
+ }, undefined>, undefined>;
28
+ }, undefined>;
29
+ }, undefined>, undefined>;
30
+ readonly suggestedSettings: v.OptionalSchema<Omit<v.LooseObjectSchema<{
31
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
32
+ readonly expiration: v.NumberSchema<undefined>;
33
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
34
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
35
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
36
+ }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
37
+ readonly entries: {
38
+ readonly approvedOperations: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
39
+ readonly expiration: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
40
+ readonly remainingTransactions: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
41
+ readonly sharedBudget: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
42
+ readonly coinBudgets: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
43
+ };
44
+ readonly "~standard": v.StandardProps<{
45
+ approvedOperations?: string[] | undefined;
46
+ expiration?: number | undefined;
47
+ remainingTransactions?: number | null | undefined;
48
+ sharedBudget?: number | null | undefined;
49
+ coinBudgets?: {
50
+ [x: string]: string;
51
+ } | undefined;
52
+ } & {
53
+ [key: string]: unknown;
54
+ }, {
55
+ approvedOperations?: string[] | undefined;
56
+ expiration?: number | undefined;
57
+ remainingTransactions?: number | null | undefined;
58
+ sharedBudget?: number | null | undefined;
59
+ coinBudgets?: {
60
+ [x: string]: string;
61
+ } | undefined;
62
+ } & {
63
+ [key: string]: unknown;
64
+ }>;
65
+ readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
66
+ approvedOperations?: string[] | undefined;
67
+ expiration?: number | undefined;
68
+ remainingTransactions?: number | null | undefined;
69
+ sharedBudget?: number | null | undefined;
70
+ coinBudgets?: {
71
+ [x: string]: string;
72
+ } | undefined;
73
+ } & {
74
+ [key: string]: unknown;
75
+ }, v.StringIssue | v.ArrayIssue | v.LooseObjectIssue | v.NumberIssue | v.RecordIssue>;
76
+ readonly "~types"?: {
77
+ readonly input: {
78
+ approvedOperations?: string[] | undefined;
79
+ expiration?: number | undefined;
80
+ remainingTransactions?: number | null | undefined;
81
+ sharedBudget?: number | null | undefined;
82
+ coinBudgets?: {
83
+ [x: string]: string;
84
+ } | undefined;
85
+ } & {
86
+ [key: string]: unknown;
87
+ };
88
+ readonly output: {
89
+ approvedOperations?: string[] | undefined;
90
+ expiration?: number | undefined;
91
+ remainingTransactions?: number | null | undefined;
92
+ sharedBudget?: number | null | undefined;
93
+ coinBudgets?: {
94
+ [x: string]: string;
95
+ } | undefined;
96
+ } & {
97
+ [key: string]: unknown;
98
+ };
99
+ readonly issue: v.StringIssue | v.ArrayIssue | v.LooseObjectIssue | v.NumberIssue | v.RecordIssue;
100
+ } | undefined;
101
+ }, undefined>;
102
+ }, undefined>;
103
+ readonly settings: v.NullableSchema<v.LooseObjectSchema<{
104
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
105
+ readonly expiration: v.NumberSchema<undefined>;
106
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
107
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
108
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
109
+ }, undefined>, undefined>;
110
+ readonly pendingDigests: v.ArraySchema<v.StringSchema<undefined>, undefined>;
111
+ }, undefined>;
112
+ type AutoApprovalState = v.InferOutput<typeof AutoApprovalStateSchema>;
113
+ //#endregion
114
+ export { AutoApprovalState, AutoApprovalStateSchema };
115
+ //# sourceMappingURL=state.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.mts","names":[],"sources":["../../../src/auto-approvals/schemas/state.ts"],"sourcesContent":[],"mappings":";;;;cAaa,yBAAuB,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAA,CAAA;QAAA,SAAA,MAAA,EAAA;UAOxB,kBAAyC,CAAA,EAAA,MAAA,EAAA,GAAA,SAArB;;;;;;;;;;;;;;;;;;;;;;;KAApB,iBAAA,GAAoB,CAAA,CAAE,mBAAmB"}
@@ -0,0 +1,20 @@
1
+ import { AutoApprovalPolicySchema, AutoApprovalSettingsSchema } from "./policy.mjs";
2
+ import * as v from "valibot";
3
+
4
+ //#region src/auto-approvals/schemas/state.ts
5
+ const CreatedObjectSchema = v.object({
6
+ objectId: v.string(),
7
+ version: v.string(),
8
+ digest: v.string(),
9
+ objectType: v.string()
10
+ });
11
+ const AutoApprovalStateSchema = v.object({
12
+ schemaVersion: v.literal("1.0.0"),
13
+ policy: AutoApprovalPolicySchema,
14
+ settings: v.nullable(AutoApprovalSettingsSchema),
15
+ pendingDigests: v.array(v.string())
16
+ });
17
+
18
+ //#endregion
19
+ export { AutoApprovalStateSchema };
20
+ //# sourceMappingURL=state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.mjs","names":[],"sources":["../../../src/auto-approvals/schemas/state.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as v from 'valibot';\nimport { AutoApprovalPolicySchema, AutoApprovalSettingsSchema } from './policy.js';\n\nexport const CreatedObjectSchema = v.object({\n\tobjectId: v.string(),\n\tversion: v.string(),\n\tdigest: v.string(),\n\tobjectType: v.string(),\n});\n\nexport const AutoApprovalStateSchema = v.object({\n\tschemaVersion: v.literal('1.0.0'),\n\tpolicy: AutoApprovalPolicySchema,\n\tsettings: v.nullable(AutoApprovalSettingsSchema),\n\tpendingDigests: v.array(v.string()),\n});\n\nexport type AutoApprovalState = v.InferOutput<typeof AutoApprovalStateSchema>;\n"],"mappings":";;;;AAMA,MAAa,sBAAsB,EAAE,OAAO;CAC3C,UAAU,EAAE,QAAQ;CACpB,SAAS,EAAE,QAAQ;CACnB,QAAQ,EAAE,QAAQ;CAClB,YAAY,EAAE,QAAQ;CACtB,CAAC;AAEF,MAAa,0BAA0B,EAAE,OAAO;CAC/C,eAAe,EAAE,QAAQ,QAAQ;CACjC,QAAQ;CACR,UAAU,EAAE,SAAS,2BAA2B;CAChD,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC;CACnC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { AnalyzerResult, TransactionAnalysisIssue, analyze, createAnalyzer } from "./transaction-analyzer/analyzer.mjs";
2
+ import { AnalyzedObject } from "./transaction-analyzer/rules/objects.mjs";
3
+ import { AnalyzedCoin } from "./transaction-analyzer/rules/coins.mjs";
4
+ import { AnalyzedCommandInput } from "./transaction-analyzer/rules/inputs.mjs";
5
+ import { AnalyzedCommand, AnalyzedCommandArgument } from "./transaction-analyzer/rules/commands.mjs";
6
+ import { CoinFlow } from "./transaction-analyzer/rules/coin-flows.mjs";
7
+ import { CoinValueAnalysis, CoinValueAnalyzerOptions } from "./transaction-analyzer/rules/coin-value.mjs";
8
+ import { analyzers } from "./transaction-analyzer/rules/index.mjs";
9
+ import "./transaction-analyzer/index.mjs";
10
+ import { OPERATION_INTENT, extractOperationType, operationType } from "./auto-approvals/intent.mjs";
11
+ import { AutoApprovalAnalysis, AutoApprovalResult, autoApprovalAnalyzer } from "./auto-approvals/analyzer.mjs";
12
+ import { AutoApprovalState, AutoApprovalStateSchema } from "./auto-approvals/schemas/state.mjs";
13
+ import { AutoApprovalOperation, AutoApprovalPolicy, AutoApprovalPolicySchema, AutoApprovalSettings, AutoApprovalSettingsSchema, PolicyPermission } from "./auto-approvals/schemas/policy.mjs";
14
+ import { AutoApprovalCheck, AutoApprovalIssue, AutoApprovalManager } from "./auto-approvals/manager.mjs";
15
+ import "./auto-approvals/index.mjs";
16
+ export { AnalyzedCoin, AnalyzedCommand, AnalyzedCommandArgument, AnalyzedCommandInput, AnalyzedObject, AnalyzerResult, AutoApprovalAnalysis, AutoApprovalCheck, AutoApprovalIssue, AutoApprovalManager, AutoApprovalOperation, AutoApprovalPolicy, AutoApprovalPolicySchema, AutoApprovalResult, AutoApprovalSettings, AutoApprovalSettingsSchema, AutoApprovalState, AutoApprovalStateSchema, CoinFlow, CoinValueAnalysis, CoinValueAnalyzerOptions, OPERATION_INTENT, PolicyPermission, TransactionAnalysisIssue, analyze, analyzers, autoApprovalAnalyzer, createAnalyzer, extractOperationType, operationType };
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import { analyze, createAnalyzer } from "./transaction-analyzer/analyzer.mjs";
2
+ import { analyzers } from "./transaction-analyzer/rules/index.mjs";
3
+ import { OPERATION_INTENT, extractOperationType, operationType } from "./auto-approvals/intent.mjs";
4
+ import { autoApprovalAnalyzer } from "./auto-approvals/analyzer.mjs";
5
+ import { AutoApprovalPolicySchema, AutoApprovalSettingsSchema } from "./auto-approvals/schemas/policy.mjs";
6
+ import { AutoApprovalStateSchema } from "./auto-approvals/schemas/state.mjs";
7
+ import { AutoApprovalManager } from "./auto-approvals/manager.mjs";
8
+
9
+ export { AutoApprovalManager, AutoApprovalPolicySchema, AutoApprovalSettingsSchema, AutoApprovalStateSchema, OPERATION_INTENT, analyze, analyzers, autoApprovalAnalyzer, createAnalyzer, extractOperationType, operationType };
@@ -0,0 +1,39 @@
1
+ import { Defined, Simplify, UnionToIntersection } from "../util.mjs";
2
+ import { Transaction } from "@haneullabs/haneul/transactions";
3
+
4
+ //#region src/transaction-analyzer/analyzer.d.ts
5
+ declare function createAnalyzer<T extends Defined, Deps extends Record<string, Analyzer<Defined, any, any>> = {}, Options = object>({
6
+ cacheKey,
7
+ dependencies,
8
+ analyze
9
+ }: {
10
+ cacheKey?: unknown;
11
+ dependencies?: Deps;
12
+ analyze: (options: Options, transaction: Transaction) => (analysis: { [k in keyof Deps]: Deps[k] extends Analyzer<infer R, any, any> ? R : never }) => Promise<AnalyzerResult<T>> | AnalyzerResult<T>;
13
+ }): Analyzer<T, Simplify<UnionToIntersection<Options | { [k in keyof Deps]: Deps[k] extends Analyzer<any, infer O, any> ? O : never }[keyof Deps]>>, { [k in keyof Deps]: Deps[k] extends Analyzer<infer R, any, any> ? R : never }>;
14
+ type OptionsFromAnalyzers<T extends Record<string, Analyzer<Defined, any, any>>> = Simplify<{ [K in keyof T]: T[K] extends Analyzer<Defined, infer O, any> ? O : never }[keyof T] & {
15
+ transaction: string | Uint8Array;
16
+ }>;
17
+ declare function analyze<T extends Record<string, Analyzer<Defined, any, any>>>(analyzers: T, {
18
+ transaction,
19
+ ...options
20
+ }: OptionsFromAnalyzers<T>): Promise<{ [k in keyof T]: T[k] extends Analyzer<infer R extends Defined, any, any> ? AnalyzerResult<R> : never }>;
21
+ type Analyzer<T extends Defined, Options = object, Analysis extends Record<string, Defined> = {}> = {
22
+ cacheKey?: unknown;
23
+ dependencies: { [k in keyof Analysis]: Analyzer<Analysis[k], Options> };
24
+ analyze: (options: Options, transaction: Transaction) => (analysis: Analysis) => AnalyzerResult<T> | Promise<AnalyzerResult<T>>;
25
+ };
26
+ type AnalyzerResult<T extends Defined = Defined> = {
27
+ result: T;
28
+ issues?: never;
29
+ } | {
30
+ issues: TransactionAnalysisIssue[];
31
+ result?: never;
32
+ };
33
+ interface TransactionAnalysisIssue {
34
+ message: string;
35
+ error?: Error;
36
+ }
37
+ //#endregion
38
+ export { Analyzer, AnalyzerResult, TransactionAnalysisIssue, analyze, createAnalyzer };
39
+ //# sourceMappingURL=analyzer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.mts","names":[],"sources":["../../src/transaction-analyzer/analyzer.ts"],"sourcesContent":[],"mappings":";;;;iBAMgB,yBACL,sBACG,eAAe,SAAS;;;;;;EAFtB,YAAA,CAAA,EAUA,IAVc;EACnB,OAAA,EAAA,CAAA,OAAA,EAWA,OAXA,EAAA,WAAA,EAYI,WAZJ,EAAA,GAAA,CAAA,QAAA,EAAA,QAC2B,MAaxB,IAbwB,GAajB,IAbiB,CAaZ,CAbY,CAAA,SAaD,QAbC,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAAA,CAAA,GAAA,KAAA,EAAT,EAAA,GActB,OAdsB,CAcd,cAdc,CAcC,CAdD,CAAA,CAAA,GAcO,cAdP,CAcsB,CAdtB,CAAA;CAAf,CAAA,EAoBR,QApBQ,CAqBZ,CArBY,EAsBZ,QAtBY,CAuBX,mBAvBW,CAwBR,OAxBQ,GAAA,QAAA,MA0BI,IA1BJ,GA0BW,IA1BX,CA0BgB,CA1BhB,CAAA,SA0B2B,QA1B3B,CAAA,GAAA,EAAA,KAAA,EAAA,EAAA,GAAA,CAAA,GAAA,CAAA,GAAA,KAAA,EAAA,CAAA,MA2BA,IA3BA,CAAA,CAAA,CAAA,EAAA,QAAA,MA+BC,IA/BD,GA+BQ,IA/BR,CA+Ba,CA/Bb,CAAA,SA+BwB,QA/BxB,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAAA,CAAA,GAAA,KAAA,EAAA,CAAA;KAoCT,oBAjCJ,CAAA,UAiCmC,MAjCnC,CAAA,MAAA,EAiCkD,QAjClD,CAiC2D,OAjC3D,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,CAAA,GAiCkF,QAjClF,CAAA,QACA,MAkCa,CAlCb,GAkCiB,CAlCjB,CAkCmB,CAlCnB,CAAA,SAkC8B,QAlC9B,CAkCuC,OAlCvC,EAAA,KAAA,EAAA,EAAA,GAAA,CAAA,GAAA,CAAA,GAAA,KAAA,EACA,CAAA,MAkCQ,CAlCR,CAAA,GAAA;EAGe,WAAA,EAAA,MAAA,GAgCQ,UAhCR;CAEL,CAAA;AACI,iBAiCO,OAjCP,CAAA,UAiCyB,MAjCzB,CAAA,MAAA,EAiCwC,QAjCxC,CAiCiD,OAjCjD,EAAA,GAAA,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA,SAAA,EAkCH,CAlCG,EAAA;EAAA,WAAA;EAAA,GAAA;AAAA,CAAA,EAmCe,oBAnCf,CAmCoC,CAnCpC,CAAA,CAAA,EAmCsC,OAnCtC,CAAA,QAAA,MA+GX,CA/GW,GA+GX,CA/GW,CA+GX,CA/GW,CAAA,SA+GX,QA/GW,CAAA,KAAA,WA+GgC,OA/GhC,EAAA,GAAA,EAAA,GAAA,CAAA,GA+GgC,cA/GhC,CA+GgC,CA/GhC,CAAA,GAAA,KAAA,EAAA,CAAA;AAED,KAiHF,QAjHE,CAAA,UAkHH,OAlHG,EAAA,UAAA,MAAA,EAAA,iBAoHI,MApHJ,CAAA,MAAA,EAoHmB,OApHnB,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA;EAAO,QAAA,CAAA,EAAA,OAAA;EAAK,YAAA,EAAA,QAAW,MAwHvB,QAxHuB,GAwHZ,QAxHY,CAwHH,QAxHG,CAwHM,CAxHN,CAAA,EAwHU,OAxHV,CAAA,EACP;EAAf,OAAA,EAAA,CAAA,OAAA,EA0HJ,OA1HI,EAAA,WAAA,EA2HA,WA3HA,EAAA,GAAA,CAAA,QAAA,EA4HE,QA5HF,EAAA,GA4He,cA5Hf,CA4H8B,CA5H9B,CAAA,GA4HmC,OA5HnC,CA4H2C,cA5H3C,CA4H0D,CA5H1D,CAAA,CAAA;CAAR;AAA4C,KA+HvC,cA/HuC,CAAA,UA+Hd,OA/Hc,GA+HJ,OA/HI,CAAA,GAAA;EAAf,MAAA,EAiIzB,CAjIyB;EAOlC,MAAA,CAAA,EAAA,KAAA;CAGI,GAAA;EAEY,MAAA,EAyHP,wBAzHO,EAAA;EAAO,MAAA,CAAA,EAAA,KAAA;CAAK;AAAW,UA6HxB,wBAAA,CA7HwB;EAC3B,OAAA,EAAA,MAAA;EAJX,KAAA,CAAA,EAkIM,KAlIN"}
@@ -0,0 +1,46 @@
1
+ import { Transaction } from "@haneullabs/haneul/transactions";
2
+
3
+ //#region src/transaction-analyzer/analyzer.ts
4
+ function createAnalyzer({ cacheKey, dependencies, analyze: analyze$1 }) {
5
+ return {
6
+ cacheKey,
7
+ dependencies,
8
+ analyze: analyze$1
9
+ };
10
+ }
11
+ async function analyze(analyzers, { transaction, ...options }) {
12
+ const tx = Transaction.from(transaction);
13
+ const analyzerMap = /* @__PURE__ */ new Map();
14
+ function initializeAnalyzer(analyzer) {
15
+ const cacheKey = analyzer.cacheKey ?? analyzer;
16
+ if (!analyzerMap.has(cacheKey)) {
17
+ const deps = analyzer.dependencies || {};
18
+ analyzerMap.set(cacheKey, analyzer.analyze(options, tx));
19
+ Object.values(deps).forEach((dep) => initializeAnalyzer(dep));
20
+ }
21
+ return analyzerMap.get(cacheKey);
22
+ }
23
+ Object.values(analyzers).forEach((analyzer) => initializeAnalyzer(analyzer));
24
+ const analysisMap = /* @__PURE__ */ new Map();
25
+ async function runAnalyzer(analyzer) {
26
+ const deps = Object.fromEntries(await Promise.all(Object.entries(analyzer.dependencies || {}).map(async ([key, dep]) => [key, await getAnalysis(dep)])));
27
+ const issues = /* @__PURE__ */ new Set();
28
+ for (const dep of Object.values(deps)) if (dep.issues) dep.issues.forEach((issue) => issues.add(issue));
29
+ if (issues.size) return { issues: [...issues] };
30
+ try {
31
+ return await analyzerMap.get(analyzer.cacheKey ?? analyzer)(Object.fromEntries(Object.entries(deps).map(([key, dep]) => [key, dep.result])));
32
+ } catch (error) {
33
+ return { issues: [{ message: `Unexpected error while analyzing transaction: ${error.message}` }] };
34
+ }
35
+ }
36
+ function getAnalysis(analyzer) {
37
+ const cacheKey = analyzer.cacheKey ?? analyzer;
38
+ if (!analysisMap.has(cacheKey)) analysisMap.set(cacheKey, runAnalyzer(analyzer));
39
+ return analysisMap.get(cacheKey);
40
+ }
41
+ return Object.fromEntries(await Promise.all(Object.entries(analyzers).map(async ([key, analyzer]) => [key, await getAnalysis(analyzer)])));
42
+ }
43
+
44
+ //#endregion
45
+ export { analyze, createAnalyzer };
46
+ //# sourceMappingURL=analyzer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.mjs","names":["analyze"],"sources":["../../src/transaction-analyzer/analyzer.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@haneullabs/haneul/transactions';\nimport type { Defined, Simplify, UnionToIntersection } from '../util.js';\n\nexport function createAnalyzer<\n\tT extends Defined,\n\tDeps extends Record<string, Analyzer<Defined, any, any>> = {},\n\tOptions = object,\n>({\n\tcacheKey,\n\tdependencies,\n\tanalyze,\n}: {\n\tcacheKey?: unknown;\n\tdependencies?: Deps;\n\tanalyze: (\n\t\toptions: Options,\n\t\ttransaction: Transaction,\n\t) => (analysis: {\n\t\t[k in keyof Deps]: Deps[k] extends Analyzer<infer R, any, any> ? R : never;\n\t}) => Promise<AnalyzerResult<T>> | AnalyzerResult<T>;\n}) {\n\treturn {\n\t\tcacheKey,\n\t\tdependencies,\n\t\tanalyze: analyze,\n\t} as Analyzer<\n\t\tT,\n\t\tSimplify<\n\t\t\tUnionToIntersection<\n\t\t\t\t| Options\n\t\t\t\t| {\n\t\t\t\t\t\t[k in keyof Deps]: Deps[k] extends Analyzer<any, infer O, any> ? O : never;\n\t\t\t\t }[keyof Deps]\n\t\t\t>\n\t\t>,\n\t\t{\n\t\t\t[k in keyof Deps]: Deps[k] extends Analyzer<infer R, any, any> ? R : never;\n\t\t}\n\t>;\n}\n\ntype OptionsFromAnalyzers<T extends Record<string, Analyzer<Defined, any, any>>> = Simplify<\n\t{\n\t\t[K in keyof T]: T[K] extends Analyzer<Defined, infer O, any> ? O : never;\n\t}[keyof T] & {\n\t\ttransaction: string | Uint8Array;\n\t}\n>;\n\nexport async function analyze<T extends Record<string, Analyzer<Defined, any, any>>>(\n\tanalyzers: T,\n\t{ transaction, ...options }: OptionsFromAnalyzers<T>,\n) {\n\tconst tx = Transaction.from(transaction);\n\tconst analyzerMap = new Map<\n\t\tunknown,\n\t\t(analysis: object) => AnalyzerResult | Promise<AnalyzerResult>\n\t>();\n\n\tfunction initializeAnalyzer(analyzer: Analyzer<Defined>) {\n\t\tconst cacheKey = analyzer.cacheKey ?? analyzer;\n\n\t\tif (!analyzerMap.has(cacheKey)) {\n\t\t\tconst deps: Record<string, Analyzer<Defined>> = analyzer.dependencies || {};\n\t\t\tanalyzerMap.set(cacheKey, analyzer.analyze(options, tx));\n\n\t\t\tObject.values(deps).forEach((dep) => initializeAnalyzer(dep));\n\t\t}\n\n\t\treturn analyzerMap.get(cacheKey)!;\n\t}\n\n\tObject.values(analyzers).forEach((analyzer) => initializeAnalyzer(analyzer));\n\n\tconst analysisMap = new Map<unknown, Promise<AnalyzerResult>>();\n\n\tasync function runAnalyzer(analyzer: Analyzer<Defined>): Promise<AnalyzerResult> {\n\t\tconst deps: Record<string, AnalyzerResult> = Object.fromEntries(\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries((analyzer.dependencies || {}) as Record<string, Analyzer<Defined>>).map(\n\t\t\t\t\tasync ([key, dep]) => [key, await getAnalysis(dep)],\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\t\tconst issues = new Set<TransactionAnalysisIssue>();\n\n\t\tfor (const dep of Object.values(deps)) {\n\t\t\tif (dep.issues) {\n\t\t\t\tdep.issues.forEach((issue) => issues.add(issue));\n\t\t\t}\n\t\t}\n\n\t\tif (issues.size) {\n\t\t\treturn { issues: [...issues] };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await analyzerMap.get(analyzer.cacheKey ?? analyzer)!(\n\t\t\t\tObject.fromEntries(Object.entries(deps).map(([key, dep]) => [key, dep.result])),\n\t\t\t);\n\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tissues: [\n\t\t\t\t\t{ message: `Unexpected error while analyzing transaction: ${(error as Error).message}` },\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction getAnalysis(analyzer: Analyzer<Defined>): Promise<AnalyzerResult> {\n\t\tconst cacheKey = analyzer.cacheKey ?? analyzer;\n\n\t\tif (!analysisMap.has(cacheKey)) {\n\t\t\tanalysisMap.set(cacheKey, runAnalyzer(analyzer));\n\t\t}\n\n\t\treturn analysisMap.get(cacheKey)!;\n\t}\n\n\treturn Object.fromEntries(\n\t\tawait Promise.all(\n\t\t\tObject.entries(analyzers).map(async ([key, analyzer]) => [key, await getAnalysis(analyzer)]),\n\t\t),\n\t) as {\n\t\t[k in keyof T]: T[k] extends Analyzer<infer R, any, any> ? AnalyzerResult<R> : never;\n\t};\n}\n\nexport type Analyzer<\n\tT extends Defined,\n\tOptions = object,\n\tAnalysis extends Record<string, Defined> = {},\n> = {\n\tcacheKey?: unknown;\n\tdependencies: {\n\t\t[k in keyof Analysis]: Analyzer<Analysis[k], Options>;\n\t};\n\tanalyze: (\n\t\toptions: Options,\n\t\ttransaction: Transaction,\n\t) => (analysis: Analysis) => AnalyzerResult<T> | Promise<AnalyzerResult<T>>;\n};\n\nexport type AnalyzerResult<T extends Defined = Defined> =\n\t| {\n\t\t\tresult: T;\n\t\t\tissues?: never;\n\t }\n\t| {\n\t\t\tissues: TransactionAnalysisIssue[];\n\t\t\tresult?: never;\n\t };\n\nexport interface TransactionAnalysisIssue {\n\tmessage: string;\n\terror?: Error;\n}\n"],"mappings":";;;AAMA,SAAgB,eAId,EACD,UACA,cACA,sBAUE;AACF,QAAO;EACN;EACA;EACA,SAASA;EACT;;AAwBF,eAAsB,QACrB,WACA,EAAE,aAAa,GAAG,WACjB;CACD,MAAM,KAAK,YAAY,KAAK,YAAY;CACxC,MAAM,8BAAc,IAAI,KAGrB;CAEH,SAAS,mBAAmB,UAA6B;EACxD,MAAM,WAAW,SAAS,YAAY;AAEtC,MAAI,CAAC,YAAY,IAAI,SAAS,EAAE;GAC/B,MAAM,OAA0C,SAAS,gBAAgB,EAAE;AAC3E,eAAY,IAAI,UAAU,SAAS,QAAQ,SAAS,GAAG,CAAC;AAExD,UAAO,OAAO,KAAK,CAAC,SAAS,QAAQ,mBAAmB,IAAI,CAAC;;AAG9D,SAAO,YAAY,IAAI,SAAS;;AAGjC,QAAO,OAAO,UAAU,CAAC,SAAS,aAAa,mBAAmB,SAAS,CAAC;CAE5E,MAAM,8BAAc,IAAI,KAAuC;CAE/D,eAAe,YAAY,UAAsD;EAChF,MAAM,OAAuC,OAAO,YACnD,MAAM,QAAQ,IACb,OAAO,QAAS,SAAS,gBAAgB,EAAE,CAAuC,CAAC,IAClF,OAAO,CAAC,KAAK,SAAS,CAAC,KAAK,MAAM,YAAY,IAAI,CAAC,CACnD,CACD,CACD;EAED,MAAM,yBAAS,IAAI,KAA+B;AAElD,OAAK,MAAM,OAAO,OAAO,OAAO,KAAK,CACpC,KAAI,IAAI,OACP,KAAI,OAAO,SAAS,UAAU,OAAO,IAAI,MAAM,CAAC;AAIlD,MAAI,OAAO,KACV,QAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,EAAE;AAG/B,MAAI;AAKH,UAJe,MAAM,YAAY,IAAI,SAAS,YAAY,SAAS,CAClE,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAC/E;WAGO,OAAO;AACf,UAAO,EACN,QAAQ,CACP,EAAE,SAAS,iDAAkD,MAAgB,WAAW,CACxF,EACD;;;CAIH,SAAS,YAAY,UAAsD;EAC1E,MAAM,WAAW,SAAS,YAAY;AAEtC,MAAI,CAAC,YAAY,IAAI,SAAS,CAC7B,aAAY,IAAI,UAAU,YAAY,SAAS,CAAC;AAGjD,SAAO,YAAY,IAAI,SAAS;;AAGjC,QAAO,OAAO,YACb,MAAM,QAAQ,IACb,OAAO,QAAQ,UAAU,CAAC,IAAI,OAAO,CAAC,KAAK,cAAc,CAAC,KAAK,MAAM,YAAY,SAAS,CAAC,CAAC,CAC5F,CACD"}
@@ -0,0 +1,8 @@
1
+ import { AnalyzerResult, TransactionAnalysisIssue, analyze, createAnalyzer } from "./analyzer.mjs";
2
+ import { AnalyzedObject } from "./rules/objects.mjs";
3
+ import { AnalyzedCoin } from "./rules/coins.mjs";
4
+ import { AnalyzedCommandInput } from "./rules/inputs.mjs";
5
+ import { AnalyzedCommand, AnalyzedCommandArgument } from "./rules/commands.mjs";
6
+ import { CoinFlow } from "./rules/coin-flows.mjs";
7
+ import { CoinValueAnalysis, CoinValueAnalyzerOptions } from "./rules/coin-value.mjs";
8
+ import { analyzers } from "./rules/index.mjs";
@@ -0,0 +1,65 @@
1
+ import { createAnalyzer } from "../analyzer.mjs";
2
+ import { objects } from "./objects.mjs";
3
+ import { gasCoins } from "./coins.mjs";
4
+ import { commands } from "./commands.mjs";
5
+
6
+ //#region src/transaction-analyzer/rules/accessLevel.ts
7
+ const accessLevel = createAnalyzer({
8
+ dependencies: {
9
+ commands,
10
+ objects,
11
+ gasCoins
12
+ },
13
+ analyze: () => async ({ commands: commands$1, objects: objects$1, gasCoins: gasCoins$1 }) => {
14
+ const issues = [];
15
+ const gasCoinIds = new Set(gasCoins$1.map((g) => g.objectId));
16
+ const accessLevels = Object.fromEntries(objects$1.map((obj) => [obj.objectId, "read"]));
17
+ for (const id of gasCoinIds) accessLevels[id] = "mutate";
18
+ for (const command of commands$1) switch (command.$kind) {
19
+ case "TransferObjects":
20
+ for (const obj of command.objects) updateFromArgument(obj);
21
+ break;
22
+ case "MoveCall":
23
+ for (const arg of command.arguments) updateFromArgument(arg);
24
+ break;
25
+ case "SplitCoins":
26
+ updateFromArgument(command.coin);
27
+ break;
28
+ case "MergeCoins":
29
+ updateFromArgument(command.destination);
30
+ for (const src of command.sources) updateFromArgument(src);
31
+ break;
32
+ case "MakeMoveVec":
33
+ for (const el of command.elements) updateFromArgument(el);
34
+ break;
35
+ case "Upgrade":
36
+ updateFromArgument(command.ticket);
37
+ break;
38
+ case "Publish": break;
39
+ default: issues.push({ message: `Unknown command type: ${JSON.stringify(command)}` });
40
+ }
41
+ if (issues.length) return { issues };
42
+ return { result: accessLevels };
43
+ function updateFromArgument(arg) {
44
+ switch (arg.$kind) {
45
+ case "GasCoin":
46
+ for (const id of gasCoinIds) updateAccessLevel(id, arg.accessLevel);
47
+ break;
48
+ case "Object":
49
+ updateAccessLevel(arg.object.objectId, arg.accessLevel);
50
+ break;
51
+ }
52
+ }
53
+ function updateAccessLevel(id, level) {
54
+ const current = accessLevels[id];
55
+ if (current === "transfer") return;
56
+ else if (current === "mutate") {
57
+ if (level === "transfer") accessLevels[id] = "transfer";
58
+ } else accessLevels[id] = level;
59
+ }
60
+ }
61
+ });
62
+
63
+ //#endregion
64
+ export { accessLevel };
65
+ //# sourceMappingURL=accessLevel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessLevel.mjs","names":["gasCoins","objects","commands"],"sources":["../../../src/transaction-analyzer/rules/accessLevel.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionAnalysisIssue } from '../analyzer.js';\nimport { createAnalyzer } from '../analyzer.js';\nimport { gasCoins } from './coins.js';\nimport type { AnalyzedCommandArgument } from './commands.js';\nimport { commands } from './commands.js';\nimport { objects } from './objects.js';\n\nexport const accessLevel = createAnalyzer({\n\tdependencies: { commands, objects, gasCoins },\n\tanalyze:\n\t\t() =>\n\t\tasync ({ commands, objects, gasCoins }) => {\n\t\t\tconst issues: TransactionAnalysisIssue[] = [];\n\n\t\t\tconst gasCoinIds = new Set(gasCoins.map((g) => g.objectId));\n\n\t\t\tconst accessLevels: Record<string, 'read' | 'mutate' | 'transfer'> = Object.fromEntries(\n\t\t\t\tobjects.map((obj) => [obj.objectId, 'read' as const]),\n\t\t\t);\n\n\t\t\tfor (const id of gasCoinIds) {\n\t\t\t\taccessLevels[id] = 'mutate';\n\t\t\t}\n\n\t\t\tfor (const command of commands) {\n\t\t\t\tswitch (command.$kind) {\n\t\t\t\t\tcase 'TransferObjects':\n\t\t\t\t\t\tfor (const obj of command.objects) {\n\t\t\t\t\t\t\tupdateFromArgument(obj);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'MoveCall':\n\t\t\t\t\t\tfor (const arg of command.arguments) {\n\t\t\t\t\t\t\tupdateFromArgument(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'SplitCoins':\n\t\t\t\t\t\tupdateFromArgument(command.coin);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'MergeCoins':\n\t\t\t\t\t\tupdateFromArgument(command.destination);\n\t\t\t\t\t\tfor (const src of command.sources) {\n\t\t\t\t\t\t\tupdateFromArgument(src);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'MakeMoveVec':\n\t\t\t\t\t\tfor (const el of command.elements) {\n\t\t\t\t\t\t\tupdateFromArgument(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Upgrade':\n\t\t\t\t\t\tupdateFromArgument(command.ticket);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Publish':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tissues.push({ message: `Unknown command type: ${JSON.stringify(command)}` });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (issues.length) {\n\t\t\t\treturn { issues };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tresult: accessLevels,\n\t\t\t};\n\n\t\t\tfunction updateFromArgument(arg: AnalyzedCommandArgument) {\n\t\t\t\tswitch (arg.$kind) {\n\t\t\t\t\tcase 'GasCoin':\n\t\t\t\t\t\tfor (const id of gasCoinIds) {\n\t\t\t\t\t\t\tupdateAccessLevel(id, arg.accessLevel);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tupdateAccessLevel(arg.object.objectId, arg.accessLevel);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction updateAccessLevel(id: string, level: 'read' | 'mutate' | 'transfer') {\n\t\t\t\tconst current = accessLevels[id];\n\t\t\t\tif (current === 'transfer') {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (current === 'mutate') {\n\t\t\t\t\tif (level === 'transfer') {\n\t\t\t\t\t\taccessLevels[id] = 'transfer';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\taccessLevels[id] = level;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n});\n"],"mappings":";;;;;;AAUA,MAAa,cAAc,eAAe;CACzC,cAAc;EAAE;EAAU;EAAS;EAAU;CAC7C,eAEC,OAAO,EAAE,sBAAU,oBAAS,2BAAe;EAC1C,MAAM,SAAqC,EAAE;EAE7C,MAAM,aAAa,IAAI,IAAIA,WAAS,KAAK,MAAM,EAAE,SAAS,CAAC;EAE3D,MAAM,eAA+D,OAAO,YAC3EC,UAAQ,KAAK,QAAQ,CAAC,IAAI,UAAU,OAAgB,CAAC,CACrD;AAED,OAAK,MAAM,MAAM,WAChB,cAAa,MAAM;AAGpB,OAAK,MAAM,WAAWC,WACrB,SAAQ,QAAQ,OAAhB;GACC,KAAK;AACJ,SAAK,MAAM,OAAO,QAAQ,QACzB,oBAAmB,IAAI;AAExB;GACD,KAAK;AACJ,SAAK,MAAM,OAAO,QAAQ,UACzB,oBAAmB,IAAI;AAExB;GACD,KAAK;AACJ,uBAAmB,QAAQ,KAAK;AAChC;GACD,KAAK;AACJ,uBAAmB,QAAQ,YAAY;AACvC,SAAK,MAAM,OAAO,QAAQ,QACzB,oBAAmB,IAAI;AAExB;GACD,KAAK;AACJ,SAAK,MAAM,MAAM,QAAQ,SACxB,oBAAmB,GAAG;AAEvB;GACD,KAAK;AACJ,uBAAmB,QAAQ,OAAO;AAClC;GACD,KAAK,UACJ;GACD,QACC,QAAO,KAAK,EAAE,SAAS,yBAAyB,KAAK,UAAU,QAAQ,IAAI,CAAC;;AAI/E,MAAI,OAAO,OACV,QAAO,EAAE,QAAQ;AAGlB,SAAO,EACN,QAAQ,cACR;EAED,SAAS,mBAAmB,KAA8B;AACzD,WAAQ,IAAI,OAAZ;IACC,KAAK;AACJ,UAAK,MAAM,MAAM,WAChB,mBAAkB,IAAI,IAAI,YAAY;AAEvC;IACD,KAAK;AACJ,uBAAkB,IAAI,OAAO,UAAU,IAAI,YAAY;AACvD;;;EAIH,SAAS,kBAAkB,IAAY,OAAuC;GAC7E,MAAM,UAAU,aAAa;AAC7B,OAAI,YAAY,WACf;YACU,YAAY,UACtB;QAAI,UAAU,WACb,cAAa,MAAM;SAGpB,cAAa,MAAM;;;CAIvB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import "../analyzer.mjs";
2
+ import "./inputs.mjs";
3
+ import "./commands.mjs";
4
+
5
+ //#region src/transaction-analyzer/rules/coin-flows.d.ts
6
+ interface CoinFlow {
7
+ coinType: string;
8
+ amount: bigint;
9
+ }
10
+ //#endregion
11
+ export { CoinFlow };
12
+ //# sourceMappingURL=coin-flows.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coin-flows.d.mts","names":[],"sources":["../../../src/transaction-analyzer/rules/coin-flows.ts"],"sourcesContent":[],"mappings":";;;;;UAaiB,QAAA"}