@haneullabs/wallet-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +1 -0
  3. package/dist/cjs/auto-approvals/analyzer.d.ts +71 -0
  4. package/dist/cjs/auto-approvals/analyzer.js +70 -0
  5. package/dist/cjs/auto-approvals/analyzer.js.map +7 -0
  6. package/dist/cjs/auto-approvals/index.d.ts +6 -0
  7. package/dist/cjs/auto-approvals/index.js +33 -0
  8. package/dist/cjs/auto-approvals/index.js.map +7 -0
  9. package/dist/cjs/auto-approvals/intent.d.ts +5 -0
  10. package/dist/cjs/auto-approvals/intent.js +65 -0
  11. package/dist/cjs/auto-approvals/intent.js.map +7 -0
  12. package/dist/cjs/auto-approvals/manager.d.ts +31 -0
  13. package/dist/cjs/auto-approvals/manager.js +328 -0
  14. package/dist/cjs/auto-approvals/manager.js.map +7 -0
  15. package/dist/cjs/auto-approvals/schemas/index.d.ts +4 -0
  16. package/dist/cjs/auto-approvals/schemas/index.js +28 -0
  17. package/dist/cjs/auto-approvals/schemas/index.js.map +7 -0
  18. package/dist/cjs/auto-approvals/schemas/policy.d.ts +145 -0
  19. package/dist/cjs/auto-approvals/schemas/policy.js +79 -0
  20. package/dist/cjs/auto-approvals/schemas/policy.js.map +7 -0
  21. package/dist/cjs/auto-approvals/schemas/state.d.ts +115 -0
  22. package/dist/cjs/auto-approvals/schemas/state.js +49 -0
  23. package/dist/cjs/auto-approvals/schemas/state.js.map +7 -0
  24. package/dist/cjs/index.d.ts +2 -0
  25. package/dist/cjs/index.js +20 -0
  26. package/dist/cjs/index.js.map +7 -0
  27. package/dist/cjs/package.json +5 -0
  28. package/dist/cjs/transaction-analyzer/analyzer.d.ts +34 -0
  29. package/dist/cjs/transaction-analyzer/analyzer.js +94 -0
  30. package/dist/cjs/transaction-analyzer/analyzer.js.map +7 -0
  31. package/dist/cjs/transaction-analyzer/index.d.ts +9 -0
  32. package/dist/cjs/transaction-analyzer/index.js +28 -0
  33. package/dist/cjs/transaction-analyzer/index.js.map +7 -0
  34. package/dist/cjs/transaction-analyzer/rules/accessLevel.d.ts +29 -0
  35. package/dist/cjs/transaction-analyzer/rules/accessLevel.js +106 -0
  36. package/dist/cjs/transaction-analyzer/rules/accessLevel.js.map +7 -0
  37. package/dist/cjs/transaction-analyzer/rules/coin-flows.d.ts +313 -0
  38. package/dist/cjs/transaction-analyzer/rules/coin-flows.js +179 -0
  39. package/dist/cjs/transaction-analyzer/rules/coin-flows.js.map +7 -0
  40. package/dist/cjs/transaction-analyzer/rules/coin-value.d.ts +42 -0
  41. package/dist/cjs/transaction-analyzer/rules/coin-value.js +60 -0
  42. package/dist/cjs/transaction-analyzer/rules/coin-value.js.map +7 -0
  43. package/dist/cjs/transaction-analyzer/rules/coins.d.ts +337 -0
  44. package/dist/cjs/transaction-analyzer/rules/coins.js +78 -0
  45. package/dist/cjs/transaction-analyzer/rules/coins.js.map +7 -0
  46. package/dist/cjs/transaction-analyzer/rules/commands.d.ts +366 -0
  47. package/dist/cjs/transaction-analyzer/rules/commands.js +148 -0
  48. package/dist/cjs/transaction-analyzer/rules/commands.js.map +7 -0
  49. package/dist/cjs/transaction-analyzer/rules/core.d.ts +314 -0
  50. package/dist/cjs/transaction-analyzer/rules/core.js +73 -0
  51. package/dist/cjs/transaction-analyzer/rules/core.js.map +7 -0
  52. package/dist/cjs/transaction-analyzer/rules/functions.d.ts +292 -0
  53. package/dist/cjs/transaction-analyzer/rules/functions.js +58 -0
  54. package/dist/cjs/transaction-analyzer/rules/functions.js.map +7 -0
  55. package/dist/cjs/transaction-analyzer/rules/index.d.ts +2244 -0
  56. package/dist/cjs/transaction-analyzer/rules/index.js +52 -0
  57. package/dist/cjs/transaction-analyzer/rules/index.js.map +7 -0
  58. package/dist/cjs/transaction-analyzer/rules/inputs.d.ts +313 -0
  59. package/dist/cjs/transaction-analyzer/rules/inputs.js +49 -0
  60. package/dist/cjs/transaction-analyzer/rules/inputs.js.map +7 -0
  61. package/dist/cjs/transaction-analyzer/rules/objects.d.ts +359 -0
  62. package/dist/cjs/transaction-analyzer/rules/objects.js +124 -0
  63. package/dist/cjs/transaction-analyzer/rules/objects.js.map +7 -0
  64. package/dist/cjs/util.d.ts +5 -0
  65. package/dist/cjs/util.js +17 -0
  66. package/dist/cjs/util.js.map +7 -0
  67. package/dist/esm/auto-approvals/analyzer.d.ts +71 -0
  68. package/dist/esm/auto-approvals/analyzer.js +50 -0
  69. package/dist/esm/auto-approvals/analyzer.js.map +7 -0
  70. package/dist/esm/auto-approvals/index.d.ts +6 -0
  71. package/dist/esm/auto-approvals/index.js +12 -0
  72. package/dist/esm/auto-approvals/index.js.map +7 -0
  73. package/dist/esm/auto-approvals/intent.d.ts +5 -0
  74. package/dist/esm/auto-approvals/intent.js +45 -0
  75. package/dist/esm/auto-approvals/intent.js.map +7 -0
  76. package/dist/esm/auto-approvals/manager.d.ts +31 -0
  77. package/dist/esm/auto-approvals/manager.js +308 -0
  78. package/dist/esm/auto-approvals/manager.js.map +7 -0
  79. package/dist/esm/auto-approvals/schemas/index.d.ts +4 -0
  80. package/dist/esm/auto-approvals/schemas/index.js +8 -0
  81. package/dist/esm/auto-approvals/schemas/index.js.map +7 -0
  82. package/dist/esm/auto-approvals/schemas/policy.d.ts +145 -0
  83. package/dist/esm/auto-approvals/schemas/policy.js +49 -0
  84. package/dist/esm/auto-approvals/schemas/policy.js.map +7 -0
  85. package/dist/esm/auto-approvals/schemas/state.d.ts +115 -0
  86. package/dist/esm/auto-approvals/schemas/state.js +19 -0
  87. package/dist/esm/auto-approvals/schemas/state.js.map +7 -0
  88. package/dist/esm/index.d.ts +2 -0
  89. package/dist/esm/index.js +3 -0
  90. package/dist/esm/index.js.map +7 -0
  91. package/dist/esm/package.json +5 -0
  92. package/dist/esm/transaction-analyzer/analyzer.d.ts +34 -0
  93. package/dist/esm/transaction-analyzer/analyzer.js +74 -0
  94. package/dist/esm/transaction-analyzer/analyzer.js.map +7 -0
  95. package/dist/esm/transaction-analyzer/index.d.ts +9 -0
  96. package/dist/esm/transaction-analyzer/index.js +8 -0
  97. package/dist/esm/transaction-analyzer/index.js.map +7 -0
  98. package/dist/esm/transaction-analyzer/rules/accessLevel.d.ts +29 -0
  99. package/dist/esm/transaction-analyzer/rules/accessLevel.js +86 -0
  100. package/dist/esm/transaction-analyzer/rules/accessLevel.js.map +7 -0
  101. package/dist/esm/transaction-analyzer/rules/coin-flows.d.ts +313 -0
  102. package/dist/esm/transaction-analyzer/rules/coin-flows.js +159 -0
  103. package/dist/esm/transaction-analyzer/rules/coin-flows.js.map +7 -0
  104. package/dist/esm/transaction-analyzer/rules/coin-value.d.ts +42 -0
  105. package/dist/esm/transaction-analyzer/rules/coin-value.js +40 -0
  106. package/dist/esm/transaction-analyzer/rules/coin-value.js.map +7 -0
  107. package/dist/esm/transaction-analyzer/rules/coins.d.ts +337 -0
  108. package/dist/esm/transaction-analyzer/rules/coins.js +58 -0
  109. package/dist/esm/transaction-analyzer/rules/coins.js.map +7 -0
  110. package/dist/esm/transaction-analyzer/rules/commands.d.ts +366 -0
  111. package/dist/esm/transaction-analyzer/rules/commands.js +128 -0
  112. package/dist/esm/transaction-analyzer/rules/commands.js.map +7 -0
  113. package/dist/esm/transaction-analyzer/rules/core.d.ts +314 -0
  114. package/dist/esm/transaction-analyzer/rules/core.js +53 -0
  115. package/dist/esm/transaction-analyzer/rules/core.js.map +7 -0
  116. package/dist/esm/transaction-analyzer/rules/functions.d.ts +292 -0
  117. package/dist/esm/transaction-analyzer/rules/functions.js +38 -0
  118. package/dist/esm/transaction-analyzer/rules/functions.js.map +7 -0
  119. package/dist/esm/transaction-analyzer/rules/index.d.ts +2244 -0
  120. package/dist/esm/transaction-analyzer/rules/index.js +32 -0
  121. package/dist/esm/transaction-analyzer/rules/index.js.map +7 -0
  122. package/dist/esm/transaction-analyzer/rules/inputs.d.ts +313 -0
  123. package/dist/esm/transaction-analyzer/rules/inputs.js +29 -0
  124. package/dist/esm/transaction-analyzer/rules/inputs.js.map +7 -0
  125. package/dist/esm/transaction-analyzer/rules/objects.d.ts +359 -0
  126. package/dist/esm/transaction-analyzer/rules/objects.js +104 -0
  127. package/dist/esm/transaction-analyzer/rules/objects.js.map +7 -0
  128. package/dist/esm/util.d.ts +5 -0
  129. package/dist/esm/util.js +1 -0
  130. package/dist/esm/util.js.map +7 -0
  131. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  132. package/dist/tsconfig.tsbuildinfo +1 -0
  133. package/package.json +59 -0
@@ -0,0 +1,115 @@
1
+ import * as v from 'valibot';
2
+ export declare const CreatedObjectSchema: v.ObjectSchema<{
3
+ readonly objectId: v.StringSchema<undefined>;
4
+ readonly version: v.StringSchema<undefined>;
5
+ readonly digest: v.StringSchema<undefined>;
6
+ readonly objectType: v.StringSchema<undefined>;
7
+ }, undefined>;
8
+ export declare const AutoApprovalStateSchema: v.ObjectSchema<{
9
+ readonly schemaVersion: v.LiteralSchema<"1.0.0", undefined>;
10
+ readonly policy: v.ObjectSchema<{
11
+ readonly schemaVersion: v.LiteralSchema<"1.0.0", undefined>;
12
+ readonly operations: v.ArraySchema<v.ObjectSchema<{
13
+ readonly id: v.StringSchema<undefined>;
14
+ readonly description: v.StringSchema<undefined>;
15
+ readonly permissions: v.ObjectSchema<{
16
+ readonly ownedObjects: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
17
+ readonly $kind: v.LiteralSchema<"ObjectType", undefined>;
18
+ readonly objectType: v.StringSchema<undefined>;
19
+ readonly accessLevel: v.UnionSchema<[v.LiteralSchema<"read", undefined>, v.LiteralSchema<"mutate", undefined>, v.LiteralSchema<"transfer", undefined>], undefined>;
20
+ readonly description: v.StringSchema<undefined>;
21
+ }, undefined>, undefined>, undefined>;
22
+ readonly balances: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
23
+ readonly $kind: v.LiteralSchema<"CoinBalance", undefined>;
24
+ readonly coinType: v.StringSchema<undefined>;
25
+ readonly description: v.StringSchema<undefined>;
26
+ }, undefined>, undefined>, undefined>;
27
+ readonly anyBalance: v.OptionalSchema<v.ObjectSchema<{
28
+ readonly $kind: v.LiteralSchema<"AnyBalance", undefined>;
29
+ readonly description: v.StringSchema<undefined>;
30
+ }, undefined>, undefined>;
31
+ }, undefined>;
32
+ }, undefined>, undefined>;
33
+ readonly suggestedSettings: v.OptionalSchema<Omit<v.LooseObjectSchema<{
34
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
35
+ readonly expiration: v.NumberSchema<undefined>;
36
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
37
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
38
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
39
+ }, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
40
+ readonly entries: {
41
+ readonly approvedOperations: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
42
+ readonly expiration: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
43
+ readonly remainingTransactions: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
44
+ readonly sharedBudget: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
45
+ readonly coinBudgets: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>;
46
+ };
47
+ readonly "~standard": v.StandardProps<{
48
+ approvedOperations?: string[] | undefined;
49
+ expiration?: number | undefined;
50
+ remainingTransactions?: number | null | undefined;
51
+ sharedBudget?: number | null | undefined;
52
+ coinBudgets?: {
53
+ [x: string]: string;
54
+ } | undefined;
55
+ } & {
56
+ [key: string]: unknown;
57
+ }, {
58
+ approvedOperations?: string[] | undefined;
59
+ expiration?: number | undefined;
60
+ remainingTransactions?: number | null | undefined;
61
+ sharedBudget?: number | null | undefined;
62
+ coinBudgets?: {
63
+ [x: string]: string;
64
+ } | undefined;
65
+ } & {
66
+ [key: string]: unknown;
67
+ }>;
68
+ readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
69
+ approvedOperations?: string[] | undefined;
70
+ expiration?: number | undefined;
71
+ remainingTransactions?: number | null | undefined;
72
+ sharedBudget?: number | null | undefined;
73
+ coinBudgets?: {
74
+ [x: string]: string;
75
+ } | undefined;
76
+ } & {
77
+ [key: string]: unknown;
78
+ }, v.StringIssue | v.ArrayIssue | v.NumberIssue | v.RecordIssue | v.LooseObjectIssue>;
79
+ readonly "~types"?: {
80
+ readonly input: {
81
+ approvedOperations?: string[] | undefined;
82
+ expiration?: number | undefined;
83
+ remainingTransactions?: number | null | undefined;
84
+ sharedBudget?: number | null | undefined;
85
+ coinBudgets?: {
86
+ [x: string]: string;
87
+ } | undefined;
88
+ } & {
89
+ [key: string]: unknown;
90
+ };
91
+ readonly output: {
92
+ approvedOperations?: string[] | undefined;
93
+ expiration?: number | undefined;
94
+ remainingTransactions?: number | null | undefined;
95
+ sharedBudget?: number | null | undefined;
96
+ coinBudgets?: {
97
+ [x: string]: string;
98
+ } | undefined;
99
+ } & {
100
+ [key: string]: unknown;
101
+ };
102
+ readonly issue: v.StringIssue | v.ArrayIssue | v.NumberIssue | v.RecordIssue | v.LooseObjectIssue;
103
+ } | undefined;
104
+ }, undefined>;
105
+ }, undefined>;
106
+ readonly settings: v.NullableSchema<v.LooseObjectSchema<{
107
+ readonly approvedOperations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
108
+ readonly expiration: v.NumberSchema<undefined>;
109
+ readonly remainingTransactions: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
110
+ readonly sharedBudget: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
111
+ readonly coinBudgets: v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>;
112
+ }, undefined>, undefined>;
113
+ readonly pendingDigests: v.ArraySchema<v.StringSchema<undefined>, undefined>;
114
+ }, undefined>;
115
+ export type AutoApprovalState = v.InferOutput<typeof AutoApprovalStateSchema>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var state_exports = {};
30
+ __export(state_exports, {
31
+ AutoApprovalStateSchema: () => AutoApprovalStateSchema,
32
+ CreatedObjectSchema: () => CreatedObjectSchema
33
+ });
34
+ module.exports = __toCommonJS(state_exports);
35
+ var v = __toESM(require("valibot"));
36
+ var import_policy = require("./policy.js");
37
+ const CreatedObjectSchema = v.object({
38
+ objectId: v.string(),
39
+ version: v.string(),
40
+ digest: v.string(),
41
+ objectType: v.string()
42
+ });
43
+ const AutoApprovalStateSchema = v.object({
44
+ schemaVersion: v.literal("1.0.0"),
45
+ policy: import_policy.AutoApprovalPolicySchema,
46
+ settings: v.nullable(import_policy.AutoApprovalSettingsSchema),
47
+ pendingDigests: v.array(v.string())
48
+ });
49
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/auto-approvals/schemas/state.ts"],
4
+ "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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,QAAmB;AACnB,oBAAqE;AAE9D,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC3C,UAAU,EAAE,OAAO;AAAA,EACnB,SAAS,EAAE,OAAO;AAAA,EAClB,QAAQ,EAAE,OAAO;AAAA,EACjB,YAAY,EAAE,OAAO;AACtB,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC/C,eAAe,EAAE,QAAQ,OAAO;AAAA,EAChC,QAAQ;AAAA,EACR,UAAU,EAAE,SAAS,wCAA0B;AAAA,EAC/C,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AACnC,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from './transaction-analyzer/index.js';
2
+ export * from './auto-approvals/index.js';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var index_exports = {};
17
+ module.exports = __toCommonJS(index_exports);
18
+ __reExport(index_exports, require("./transaction-analyzer/index.js"), module.exports);
19
+ __reExport(index_exports, require("./auto-approvals/index.js"), module.exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './transaction-analyzer/index.js';\nexport * from './auto-approvals/index.js';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAGA,0BAAc,4CAHd;AAIA,0BAAc,sCAJd;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "private": true,
3
+ "type": "commonjs",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,34 @@
1
+ import { Transaction } from '@haneullabs/haneul/transactions';
2
+ import type { Defined, Simplify, UnionToIntersection } from '../util.js';
3
+ export declare function createAnalyzer<T extends Defined, Deps extends Record<string, Analyzer<Defined, any, any>> = {}, Options = object>({ cacheKey, dependencies, analyze, }: {
4
+ cacheKey?: unknown;
5
+ dependencies?: Deps;
6
+ analyze: (options: Options, transaction: Transaction) => (analysis: {
7
+ [k in keyof Deps]: Deps[k] extends Analyzer<infer R, any, any> ? R : never;
8
+ }) => Promise<AnalyzerResult<T>> | AnalyzerResult<T>;
9
+ }): 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; }>;
10
+ type OptionsFromAnalyzers<T extends Record<string, Analyzer<Defined, any, any>>> = Simplify<{
11
+ [K in keyof T]: T[K] extends Analyzer<Defined, infer O, any> ? O : never;
12
+ }[keyof T] & {
13
+ transaction: string | Uint8Array;
14
+ }>;
15
+ export declare function analyze<T extends Record<string, Analyzer<Defined, any, any>>>(analyzers: T, { transaction, ...options }: OptionsFromAnalyzers<T>): Promise<{ [k in keyof T]: T[k] extends Analyzer<infer R extends Defined, any, any> ? AnalyzerResult<R> : never; }>;
16
+ export type Analyzer<T extends Defined, Options = object, Analysis extends Record<string, Defined> = {}> = {
17
+ cacheKey?: unknown;
18
+ dependencies: {
19
+ [k in keyof Analysis]: Analyzer<Analysis[k], Options>;
20
+ };
21
+ analyze: (options: Options, transaction: Transaction) => (analysis: Analysis) => AnalyzerResult<T> | Promise<AnalyzerResult<T>>;
22
+ };
23
+ export type AnalyzerResult<T extends Defined = Defined> = {
24
+ result: T;
25
+ issues?: never;
26
+ } | {
27
+ issues: TransactionAnalysisIssue[];
28
+ result?: never;
29
+ };
30
+ export interface TransactionAnalysisIssue {
31
+ message: string;
32
+ error?: Error;
33
+ }
34
+ export {};
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var analyzer_exports = {};
20
+ __export(analyzer_exports, {
21
+ analyze: () => analyze,
22
+ createAnalyzer: () => createAnalyzer
23
+ });
24
+ module.exports = __toCommonJS(analyzer_exports);
25
+ var import_transactions = require("@haneullabs/haneul/transactions");
26
+ function createAnalyzer({
27
+ cacheKey,
28
+ dependencies,
29
+ analyze: analyze2
30
+ }) {
31
+ return {
32
+ cacheKey,
33
+ dependencies,
34
+ analyze: analyze2
35
+ };
36
+ }
37
+ async function analyze(analyzers, { transaction, ...options }) {
38
+ const tx = import_transactions.Transaction.from(transaction);
39
+ const analyzerMap = /* @__PURE__ */ new Map();
40
+ function initializeAnalyzer(analyzer) {
41
+ const cacheKey = analyzer.cacheKey ?? analyzer;
42
+ if (!analyzerMap.has(cacheKey)) {
43
+ const deps = analyzer.dependencies || {};
44
+ analyzerMap.set(cacheKey, analyzer.analyze(options, tx));
45
+ Object.values(deps).forEach((dep) => initializeAnalyzer(dep));
46
+ }
47
+ return analyzerMap.get(cacheKey);
48
+ }
49
+ Object.values(analyzers).forEach((analyzer) => initializeAnalyzer(analyzer));
50
+ const analysisMap = /* @__PURE__ */ new Map();
51
+ async function runAnalyzer(analyzer) {
52
+ const deps = Object.fromEntries(
53
+ await Promise.all(
54
+ Object.entries(analyzer.dependencies || {}).map(
55
+ async ([key, dep]) => [key, await getAnalysis(dep)]
56
+ )
57
+ )
58
+ );
59
+ const issues = /* @__PURE__ */ new Set();
60
+ for (const dep of Object.values(deps)) {
61
+ if (dep.issues) {
62
+ dep.issues.forEach((issue) => issues.add(issue));
63
+ }
64
+ }
65
+ if (issues.size) {
66
+ return { issues: [...issues] };
67
+ }
68
+ try {
69
+ const result = await analyzerMap.get(analyzer.cacheKey ?? analyzer)(
70
+ Object.fromEntries(Object.entries(deps).map(([key, dep]) => [key, dep.result]))
71
+ );
72
+ return result;
73
+ } catch (error) {
74
+ return {
75
+ issues: [
76
+ { message: `Unexpected error while analyzing transaction: ${error.message}` }
77
+ ]
78
+ };
79
+ }
80
+ }
81
+ function getAnalysis(analyzer) {
82
+ const cacheKey = analyzer.cacheKey ?? analyzer;
83
+ if (!analysisMap.has(cacheKey)) {
84
+ analysisMap.set(cacheKey, runAnalyzer(analyzer));
85
+ }
86
+ return analysisMap.get(cacheKey);
87
+ }
88
+ return Object.fromEntries(
89
+ await Promise.all(
90
+ Object.entries(analyzers).map(async ([key, analyzer]) => [key, await getAnalysis(analyzer)])
91
+ )
92
+ );
93
+ }
94
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transaction-analyzer/analyzer.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n/* eslint-disable @typescript-eslint/ban-types */\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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,0BAA4B;AAGrB,SAAS,eAId;AAAA,EACD;AAAA,EACA;AAAA,EACA,SAAAA;AACD,GASG;AACF,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,SAASA;AAAA,EACV;AAcD;AAUA,eAAsB,QACrB,WACA,EAAE,aAAa,GAAG,QAAQ,GACzB;AACD,QAAM,KAAK,gCAAY,KAAK,WAAW;AACvC,QAAM,cAAc,oBAAI,IAGtB;AAEF,WAAS,mBAAmB,UAA6B;AACxD,UAAM,WAAW,SAAS,YAAY;AAEtC,QAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC/B,YAAM,OAA0C,SAAS,gBAAgB,CAAC;AAC1E,kBAAY,IAAI,UAAU,SAAS,QAAQ,SAAS,EAAE,CAAC;AAEvD,aAAO,OAAO,IAAI,EAAE,QAAQ,CAAC,QAAQ,mBAAmB,GAAG,CAAC;AAAA,IAC7D;AAEA,WAAO,YAAY,IAAI,QAAQ;AAAA,EAChC;AAEA,SAAO,OAAO,SAAS,EAAE,QAAQ,CAAC,aAAa,mBAAmB,QAAQ,CAAC;AAE3E,QAAM,cAAc,oBAAI,IAAsC;AAE9D,iBAAe,YAAY,UAAsD;AAChF,UAAM,OAAuC,OAAO;AAAA,MACnD,MAAM,QAAQ;AAAA,QACb,OAAO,QAAS,SAAS,gBAAgB,CAAC,CAAuC,EAAE;AAAA,UAClF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,QACnD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,SAAS,oBAAI,IAA8B;AAEjD,eAAW,OAAO,OAAO,OAAO,IAAI,GAAG;AACtC,UAAI,IAAI,QAAQ;AACf,YAAI,OAAO,QAAQ,CAAC,UAAU,OAAO,IAAI,KAAK,CAAC;AAAA,MAChD;AAAA,IACD;AAEA,QAAI,OAAO,MAAM;AAChB,aAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,EAAE;AAAA,IAC9B;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,IAAI,SAAS,YAAY,QAAQ;AAAA,QACjE,OAAO,YAAY,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;AAAA,MAC/E;AAEA,aAAO;AAAA,IACR,SAAS,OAAO;AACf,aAAO;AAAA,QACN,QAAQ;AAAA,UACP,EAAE,SAAS,iDAAkD,MAAgB,OAAO,GAAG;AAAA,QACxF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,WAAS,YAAY,UAAsD;AAC1E,UAAM,WAAW,SAAS,YAAY;AAEtC,QAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC/B,kBAAY,IAAI,UAAU,YAAY,QAAQ,CAAC;AAAA,IAChD;AAEA,WAAO,YAAY,IAAI,QAAQ;AAAA,EAChC;AAEA,SAAO,OAAO;AAAA,IACb,MAAM,QAAQ;AAAA,MACb,OAAO,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,MAAM,CAAC,KAAK,MAAM,YAAY,QAAQ,CAAC,CAAC;AAAA,IAC5F;AAAA,EACD;AAGD;",
6
+ "names": ["analyze"]
7
+ }
@@ -0,0 +1,9 @@
1
+ export { analyze, createAnalyzer } from './analyzer.js';
2
+ export type { AnalyzerResult, TransactionAnalysisIssue } from './analyzer.js';
3
+ export type { AnalyzedCoin } from './rules/coins.js';
4
+ export type { AnalyzedCommandArgument, AnalyzedCommand } from './rules/commands.js';
5
+ export type { AnalyzedObject } from './rules/objects.js';
6
+ export type { CoinFlow } from './rules/coin-flows.js';
7
+ export type { CoinValueAnalyzerOptions, CoinValueAnalysis } from './rules/coin-value.js';
8
+ export type { AnalyzedCommandInput } from './rules/inputs.js';
9
+ export { analyzers } from './rules/index.js';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var transaction_analyzer_exports = {};
20
+ __export(transaction_analyzer_exports, {
21
+ analyze: () => import_analyzer.analyze,
22
+ analyzers: () => import_rules.analyzers,
23
+ createAnalyzer: () => import_analyzer.createAnalyzer
24
+ });
25
+ module.exports = __toCommonJS(transaction_analyzer_exports);
26
+ var import_analyzer = require("./analyzer.js");
27
+ var import_rules = require("./rules/index.js");
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transaction-analyzer/index.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport { analyze, createAnalyzer } from './analyzer.js';\nexport type { AnalyzerResult, TransactionAnalysisIssue } from './analyzer.js';\n\nexport type { AnalyzedCoin } from './rules/coins.js';\nexport type { AnalyzedCommandArgument, AnalyzedCommand } from './rules/commands.js';\nexport type { AnalyzedObject } from './rules/objects.js';\nexport type { CoinFlow } from './rules/coin-flows.js';\nexport type { CoinValueAnalyzerOptions, CoinValueAnalysis } from './rules/coin-value.js';\nexport type { AnalyzedCommandInput } from './rules/inputs.js';\n\nexport { analyzers } from './rules/index.js';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,sBAAwC;AAUxC,mBAA0B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ export declare const accessLevel: import("../analyzer.js").Analyzer<Record<string, "read" | "mutate" | "transfer">, {
2
+ client: import("@haneullabs/haneul/dist/cjs/experimental/client.js").Experimental_BaseClient & {
3
+ core: import("@haneullabs/haneul/dist/cjs/experimental/core.js").Experimental_CoreClient;
4
+ };
5
+ }, {
6
+ commands: import("./commands.js").AnalyzedCommand[];
7
+ objects: {
8
+ ownerAddress: string | null;
9
+ id: string;
10
+ version: string;
11
+ digest: string;
12
+ owner: import("@haneullabs/haneul/dist/cjs/experimental/types.js").Experimental_HaneulClientTypes.ObjectOwner;
13
+ type: string;
14
+ content: PromiseLike<Uint8Array>;
15
+ previousTransaction: string | null;
16
+ }[];
17
+ gasCoins: {
18
+ coinType: string;
19
+ balance: bigint;
20
+ ownerAddress: string | null;
21
+ id: string;
22
+ version: string;
23
+ digest: string;
24
+ owner: import("@haneullabs/haneul/dist/cjs/experimental/types.js").Experimental_HaneulClientTypes.ObjectOwner;
25
+ type: string;
26
+ content: PromiseLike<Uint8Array>;
27
+ previousTransaction: string | null;
28
+ }[];
29
+ }>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var accessLevel_exports = {};
20
+ __export(accessLevel_exports, {
21
+ accessLevel: () => accessLevel
22
+ });
23
+ module.exports = __toCommonJS(accessLevel_exports);
24
+ var import_analyzer = require("../analyzer.js");
25
+ var import_coins = require("./coins.js");
26
+ var import_commands = require("./commands.js");
27
+ var import_objects = require("./objects.js");
28
+ const accessLevel = (0, import_analyzer.createAnalyzer)({
29
+ dependencies: { commands: import_commands.commands, objects: import_objects.objects, gasCoins: import_coins.gasCoins },
30
+ analyze: () => async ({ commands: commands2, objects: objects2, gasCoins: gasCoins2 }) => {
31
+ const issues = [];
32
+ const gasCoinIds = new Set(gasCoins2.map((g) => g.id));
33
+ const accessLevels = Object.fromEntries(
34
+ objects2.map((obj) => [obj.id, "read"])
35
+ );
36
+ for (const id of gasCoinIds) {
37
+ accessLevels[id] = "mutate";
38
+ }
39
+ for (const command of commands2) {
40
+ switch (command.$kind) {
41
+ case "TransferObjects":
42
+ for (const obj of command.objects) {
43
+ updateFromArgument(obj);
44
+ }
45
+ break;
46
+ case "MoveCall":
47
+ for (const arg of command.arguments) {
48
+ updateFromArgument(arg);
49
+ }
50
+ break;
51
+ case "SplitCoins":
52
+ updateFromArgument(command.coin);
53
+ break;
54
+ case "MergeCoins":
55
+ updateFromArgument(command.destination);
56
+ for (const src of command.sources) {
57
+ updateFromArgument(src);
58
+ }
59
+ break;
60
+ case "MakeMoveVec":
61
+ for (const el of command.elements) {
62
+ updateFromArgument(el);
63
+ }
64
+ break;
65
+ case "Upgrade":
66
+ updateFromArgument(command.ticket);
67
+ break;
68
+ case "Publish":
69
+ break;
70
+ default:
71
+ issues.push({ message: `Unknown command type: ${JSON.stringify(command)}` });
72
+ }
73
+ }
74
+ if (issues.length) {
75
+ return { issues };
76
+ }
77
+ return {
78
+ result: accessLevels
79
+ };
80
+ function updateFromArgument(arg) {
81
+ switch (arg.$kind) {
82
+ case "GasCoin":
83
+ for (const id of gasCoinIds) {
84
+ updateAccessLevel(id, arg.accessLevel);
85
+ }
86
+ break;
87
+ case "Object":
88
+ updateAccessLevel(arg.object.id, arg.accessLevel);
89
+ break;
90
+ }
91
+ }
92
+ function updateAccessLevel(id, level) {
93
+ const current = accessLevels[id];
94
+ if (current === "transfer") {
95
+ return;
96
+ } else if (current === "mutate") {
97
+ if (level === "transfer") {
98
+ accessLevels[id] = "transfer";
99
+ }
100
+ } else {
101
+ accessLevels[id] = level;
102
+ }
103
+ }
104
+ }
105
+ });
106
+ //# sourceMappingURL=accessLevel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/transaction-analyzer/rules/accessLevel.ts"],
4
+ "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.id));\n\n\t\t\tconst accessLevels: Record<string, 'read' | 'mutate' | 'transfer'> = Object.fromEntries(\n\t\t\t\tobjects.map((obj) => [obj.id, '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.id, 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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,sBAA+B;AAC/B,mBAAyB;AAEzB,sBAAyB;AACzB,qBAAwB;AAEjB,MAAM,kBAAc,gCAAe;AAAA,EACzC,cAAc,EAAE,oCAAU,iCAAS,gCAAS;AAAA,EAC5C,SACC,MACA,OAAO,EAAE,UAAAA,WAAU,SAAAC,UAAS,UAAAC,UAAS,MAAM;AAC1C,UAAM,SAAqC,CAAC;AAE5C,UAAM,aAAa,IAAI,IAAIA,UAAS,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAEpD,UAAM,eAA+D,OAAO;AAAA,MAC3ED,SAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAe,CAAC;AAAA,IAC/C;AAEA,eAAW,MAAM,YAAY;AAC5B,mBAAa,EAAE,IAAI;AAAA,IACpB;AAEA,eAAW,WAAWD,WAAU;AAC/B,cAAQ,QAAQ,OAAO;AAAA,QACtB,KAAK;AACJ,qBAAW,OAAO,QAAQ,SAAS;AAClC,+BAAmB,GAAG;AAAA,UACvB;AACA;AAAA,QACD,KAAK;AACJ,qBAAW,OAAO,QAAQ,WAAW;AACpC,+BAAmB,GAAG;AAAA,UACvB;AACA;AAAA,QACD,KAAK;AACJ,6BAAmB,QAAQ,IAAI;AAC/B;AAAA,QACD,KAAK;AACJ,6BAAmB,QAAQ,WAAW;AACtC,qBAAW,OAAO,QAAQ,SAAS;AAClC,+BAAmB,GAAG;AAAA,UACvB;AACA;AAAA,QACD,KAAK;AACJ,qBAAW,MAAM,QAAQ,UAAU;AAClC,+BAAmB,EAAE;AAAA,UACtB;AACA;AAAA,QACD,KAAK;AACJ,6BAAmB,QAAQ,MAAM;AACjC;AAAA,QACD,KAAK;AACJ;AAAA,QACD;AACC,iBAAO,KAAK,EAAE,SAAS,yBAAyB,KAAK,UAAU,OAAO,CAAC,GAAG,CAAC;AAAA,MAC7E;AAAA,IACD;AAEA,QAAI,OAAO,QAAQ;AAClB,aAAO,EAAE,OAAO;AAAA,IACjB;AAEA,WAAO;AAAA,MACN,QAAQ;AAAA,IACT;AAEA,aAAS,mBAAmB,KAA8B;AACzD,cAAQ,IAAI,OAAO;AAAA,QAClB,KAAK;AACJ,qBAAW,MAAM,YAAY;AAC5B,8BAAkB,IAAI,IAAI,WAAW;AAAA,UACtC;AACA;AAAA,QACD,KAAK;AACJ,4BAAkB,IAAI,OAAO,IAAI,IAAI,WAAW;AAChD;AAAA,MACF;AAAA,IACD;AAEA,aAAS,kBAAkB,IAAY,OAAuC;AAC7E,YAAM,UAAU,aAAa,EAAE;AAC/B,UAAI,YAAY,YAAY;AAC3B;AAAA,MACD,WAAW,YAAY,UAAU;AAChC,YAAI,UAAU,YAAY;AACzB,uBAAa,EAAE,IAAI;AAAA,QACpB;AAAA,MACD,OAAO;AACN,qBAAa,EAAE,IAAI;AAAA,MACpB;AAAA,IACD;AAAA,EACD;AACF,CAAC;",
6
+ "names": ["commands", "objects", "gasCoins"]
7
+ }