@tangram-mover/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 (62) hide show
  1. package/README.md +349 -0
  2. package/dist/src/analyzer/analyzer.d.ts +35 -0
  3. package/dist/src/analyzer/analyzer.d.ts.map +1 -0
  4. package/dist/src/analyzer/analyzer.js +74 -0
  5. package/dist/src/analyzer/analyzer.js.map +1 -0
  6. package/dist/src/analyzer/index.d.ts +7 -0
  7. package/dist/src/analyzer/index.d.ts.map +1 -0
  8. package/dist/src/analyzer/index.js +25 -0
  9. package/dist/src/analyzer/index.js.map +1 -0
  10. package/dist/src/analyzer/invariants.d.ts +25 -0
  11. package/dist/src/analyzer/invariants.d.ts.map +1 -0
  12. package/dist/src/analyzer/invariants.js +159 -0
  13. package/dist/src/analyzer/invariants.js.map +1 -0
  14. package/dist/src/analyzer/types.d.ts +63 -0
  15. package/dist/src/analyzer/types.d.ts.map +1 -0
  16. package/dist/src/analyzer/types.js +21 -0
  17. package/dist/src/analyzer/types.js.map +1 -0
  18. package/dist/src/index.d.ts +14 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +42 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/tangram-mover.d.ts +95 -0
  23. package/dist/src/tangram-mover.d.ts.map +1 -0
  24. package/dist/src/tangram-mover.js +254 -0
  25. package/dist/src/tangram-mover.js.map +1 -0
  26. package/dist/src/tracer/index.d.ts +6 -0
  27. package/dist/src/tracer/index.d.ts.map +1 -0
  28. package/dist/src/tracer/index.js +24 -0
  29. package/dist/src/tracer/index.js.map +1 -0
  30. package/dist/src/tracer/tracer.d.ts +26 -0
  31. package/dist/src/tracer/tracer.d.ts.map +1 -0
  32. package/dist/src/tracer/tracer.js +123 -0
  33. package/dist/src/tracer/tracer.js.map +1 -0
  34. package/dist/src/tracer/types.d.ts +110 -0
  35. package/dist/src/tracer/types.d.ts.map +1 -0
  36. package/dist/src/tracer/types.js +7 -0
  37. package/dist/src/tracer/types.js.map +1 -0
  38. package/dist/src/types/index.d.ts +44 -0
  39. package/dist/src/types/index.d.ts.map +1 -0
  40. package/dist/src/types/index.js +6 -0
  41. package/dist/src/types/index.js.map +1 -0
  42. package/dist/src/utils/parsers.d.ts +10 -0
  43. package/dist/src/utils/parsers.d.ts.map +1 -0
  44. package/dist/src/utils/parsers.js +120 -0
  45. package/dist/src/utils/parsers.js.map +1 -0
  46. package/dist/src/utils/rpc-client.d.ts +32 -0
  47. package/dist/src/utils/rpc-client.d.ts.map +1 -0
  48. package/dist/src/utils/rpc-client.js +92 -0
  49. package/dist/src/utils/rpc-client.js.map +1 -0
  50. package/dist/tests/analyzer.test.d.ts +5 -0
  51. package/dist/tests/analyzer.test.d.ts.map +1 -0
  52. package/dist/tests/analyzer.test.js +128 -0
  53. package/dist/tests/analyzer.test.js.map +1 -0
  54. package/dist/tests/integration.test.d.ts +6 -0
  55. package/dist/tests/integration.test.d.ts.map +1 -0
  56. package/dist/tests/integration.test.js +49 -0
  57. package/dist/tests/integration.test.js.map +1 -0
  58. package/dist/tests/tracer.test.d.ts +5 -0
  59. package/dist/tests/tracer.test.d.ts.map +1 -0
  60. package/dist/tests/tracer.test.js +197 -0
  61. package/dist/tests/tracer.test.js.map +1 -0
  62. package/package.json +44 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * RPC client wrapper for Sui network interactions
4
+ * Uses sui-kit's RPC client when available, falls back to direct RPC calls
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RpcClient = void 0;
8
+ /**
9
+ * Wrapper around Sui RPC client
10
+ */
11
+ class RpcClient {
12
+ constructor(suiKit, rateLimitMs = 1000) {
13
+ this.lastRequestTime = 0;
14
+ this.suiKit = suiKit;
15
+ this.rateLimitMs = rateLimitMs;
16
+ }
17
+ /**
18
+ * Get the underlying Sui client from sui-kit
19
+ */
20
+ getClient() {
21
+ // Access the RPC client from sui-kit
22
+ // sui-kit exposes the client through its internal structure
23
+ // Try multiple possible property names
24
+ const kit = this.suiKit;
25
+ return kit.client || kit.rpcClient || kit.suiClient || kit._client;
26
+ }
27
+ /**
28
+ * Rate limit helper
29
+ */
30
+ async rateLimit() {
31
+ const now = Date.now();
32
+ const timeSinceLastRequest = now - this.lastRequestTime;
33
+ if (timeSinceLastRequest < this.rateLimitMs) {
34
+ const waitTime = this.rateLimitMs - timeSinceLastRequest;
35
+ await new Promise(resolve => setTimeout(resolve, waitTime));
36
+ }
37
+ this.lastRequestTime = Date.now();
38
+ }
39
+ /**
40
+ * Fetch transaction with options
41
+ */
42
+ async getTransactionBlock(digest, options) {
43
+ await this.rateLimit();
44
+ const client = this.getClient();
45
+ // Use sui-kit's RPC client to fetch transaction
46
+ if (client && typeof client.getTransactionBlock === 'function') {
47
+ return await client.getTransactionBlock({
48
+ digest,
49
+ options: options || {
50
+ showInput: true,
51
+ showEffects: true,
52
+ showEvents: true,
53
+ showBalanceChanges: true,
54
+ showObjectChanges: true,
55
+ },
56
+ });
57
+ }
58
+ // Fallback: use read_api if available
59
+ if (client && client.read_api) {
60
+ return await client.read_api.getTransactionBlock({
61
+ digest,
62
+ options: options || {
63
+ showInput: true,
64
+ showEffects: true,
65
+ showEvents: true,
66
+ showBalanceChanges: true,
67
+ showObjectChanges: true,
68
+ },
69
+ });
70
+ }
71
+ throw new Error('Unable to access Sui RPC client from sui-kit');
72
+ }
73
+ /**
74
+ * Get multiple transaction blocks
75
+ */
76
+ async getTransactionBlocks(digests, options) {
77
+ const results = [];
78
+ for (const digest of digests) {
79
+ try {
80
+ const result = await this.getTransactionBlock(digest, options);
81
+ results.push(result);
82
+ }
83
+ catch (error) {
84
+ console.error(`Failed to fetch transaction ${digest}:`, error);
85
+ // Continue with other transactions
86
+ }
87
+ }
88
+ return results;
89
+ }
90
+ }
91
+ exports.RpcClient = RpcClient;
92
+ //# sourceMappingURL=rpc-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../../src/utils/rpc-client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;GAEG;AACH,MAAa,SAAS;IAKpB,YAAY,MAAc,EAAE,cAAsB,IAAI;QAF9C,oBAAe,GAAW,CAAC,CAAC;QAGlC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,SAAS;QACf,qCAAqC;QACrC,4DAA4D;QAC5D,uCAAuC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAa,CAAC;QAC/B,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC;IACrE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAExD,IAAI,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC;YACzD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,MAAc,EACd,OAA4C;QAE5C,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,gDAAgD;QAChD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;YAC/D,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC;gBACtC,MAAM;gBACN,OAAO,EAAE,OAAO,IAAI;oBAClB,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,IAAI;oBAChB,kBAAkB,EAAE,IAAI;oBACxB,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,sCAAsC;QACtC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC/C,MAAM;gBACN,OAAO,EAAE,OAAO,IAAI;oBAClB,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,IAAI;oBAChB,kBAAkB,EAAE,IAAI;oBACxB,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,OAAiB,EACjB,OAA4C;QAE5C,MAAM,OAAO,GAAkC,EAAE,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/D,mCAAmC;YACrC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAnGD,8BAmGC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for Analyzer
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=analyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.test.d.ts","sourceRoot":"","sources":["../../tests/analyzer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for Analyzer
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const analyzer_1 = require("../src/analyzer/analyzer");
8
+ const types_1 = require("../src/analyzer/types");
9
+ (0, vitest_1.describe)('Analyzer', () => {
10
+ const analyzer = new analyzer_1.Analyzer();
11
+ const createMockTraceData = (overrides) => ({
12
+ digest: 'test-digest',
13
+ sender: '0x123',
14
+ status: 'success',
15
+ gas_computation: 1000,
16
+ gas_storage: 0,
17
+ gas_storage_rebate: 0,
18
+ events: [],
19
+ balance_changes: [],
20
+ object_changes: [],
21
+ ptb_commands: [],
22
+ num_commands: 0,
23
+ num_events: 0,
24
+ num_balance_changes: 0,
25
+ num_object_changes: 0,
26
+ objects_created: 0,
27
+ objects_mutated: 0,
28
+ objects_deleted: 0,
29
+ has_move_calls: false,
30
+ net_balance_change: 0,
31
+ ...overrides,
32
+ });
33
+ (0, vitest_1.it)('should detect inflation violation', async () => {
34
+ const traceData = createMockTraceData({
35
+ balance_changes: [
36
+ {
37
+ owner: '0x111',
38
+ coinType: '0x2::sui::SUI',
39
+ amount: 1000000, // Positive = inflation
40
+ },
41
+ ],
42
+ });
43
+ const result = await analyzer.analyze(traceData);
44
+ (0, vitest_1.expect)(result.status).toBe('violations_detected');
45
+ const inflationCheck = result.invariants.find(inv => inv.name === 'inflation');
46
+ (0, vitest_1.expect)(inflationCheck?.violated).toBe(true);
47
+ (0, vitest_1.expect)(inflationCheck?.severity).toBe(types_1.InvariantSeverity.CRITICAL);
48
+ });
49
+ (0, vitest_1.it)('should pass inflation check for valid transfers', async () => {
50
+ const traceData = createMockTraceData({
51
+ balance_changes: [
52
+ {
53
+ owner: '0x111',
54
+ coinType: '0x2::sui::SUI',
55
+ amount: -1000000, // Transfer out
56
+ },
57
+ {
58
+ owner: '0x222',
59
+ coinType: '0x2::sui::SUI',
60
+ amount: 1000000, // Transfer in
61
+ },
62
+ ],
63
+ });
64
+ const result = await analyzer.analyze(traceData);
65
+ const inflationCheck = result.invariants.find(inv => inv.name === 'inflation');
66
+ (0, vitest_1.expect)(inflationCheck?.violated).toBe(false);
67
+ });
68
+ (0, vitest_1.it)('should handle multiple coin types', async () => {
69
+ const traceData = createMockTraceData({
70
+ balance_changes: [
71
+ {
72
+ owner: '0x111',
73
+ coinType: '0x2::sui::SUI',
74
+ amount: -500000,
75
+ },
76
+ {
77
+ owner: '0x222',
78
+ coinType: '0x2::sui::SUI',
79
+ amount: 500000,
80
+ },
81
+ {
82
+ owner: '0x333',
83
+ coinType: '0xa::custom_coin::CUSTOM',
84
+ amount: 1000000, // Inflation in custom coin
85
+ },
86
+ ],
87
+ });
88
+ const result = await analyzer.analyze(traceData);
89
+ (0, vitest_1.expect)(result.status).toBe('violations_detected');
90
+ const inflationCheck = result.invariants.find(inv => inv.name === 'inflation');
91
+ (0, vitest_1.expect)(inflationCheck?.violated).toBe(true);
92
+ });
93
+ (0, vitest_1.it)('should return safe status when no violations', async () => {
94
+ const traceData = createMockTraceData({
95
+ balance_changes: [
96
+ {
97
+ owner: '0x111',
98
+ coinType: '0x2::sui::SUI',
99
+ amount: -1000000,
100
+ },
101
+ {
102
+ owner: '0x222',
103
+ coinType: '0x2::sui::SUI',
104
+ amount: 1000000,
105
+ },
106
+ ],
107
+ });
108
+ const result = await analyzer.analyze(traceData);
109
+ (0, vitest_1.expect)(result.status).toBe('safe');
110
+ (0, vitest_1.expect)(result.summary.violations).toBe(0);
111
+ });
112
+ (0, vitest_1.it)('should check individual invariants', () => {
113
+ const traceData = createMockTraceData({
114
+ balance_changes: [
115
+ {
116
+ owner: '0x111',
117
+ coinType: '0x2::sui::SUI',
118
+ amount: 1000000,
119
+ },
120
+ ],
121
+ });
122
+ const inflationResult = analyzer.checkInflationInvariant(traceData);
123
+ (0, vitest_1.expect)(inflationResult.violated).toBe(true);
124
+ const accessControlResult = analyzer.checkAccessControlInvariant(traceData);
125
+ (0, vitest_1.expect)(accessControlResult.violated).toBe(false);
126
+ });
127
+ });
128
+ //# sourceMappingURL=analyzer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.test.js","sourceRoot":"","sources":["../../tests/analyzer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Integration tests for TangramMover SDK
3
+ * These tests may require network access or mocks
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../tests/integration.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * Integration tests for TangramMover SDK
4
+ * These tests may require network access or mocks
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const vitest_1 = require("vitest");
8
+ const tangram_mover_1 = require("../src/tangram-mover");
9
+ (0, vitest_1.describe)('TangramMover Integration', () => {
10
+ (0, vitest_1.it)('should initialize with options', () => {
11
+ const mover = new tangram_mover_1.TangramMover({
12
+ networkType: 'testnet',
13
+ rateLimitMs: 500,
14
+ });
15
+ (0, vitest_1.expect)(mover).toBeInstanceOf(tangram_mover_1.TangramMover);
16
+ (0, vitest_1.expect)(typeof mover.getCurrentAddress()).toBe('string');
17
+ });
18
+ (0, vitest_1.it)('should initialize with mnemonics', () => {
19
+ const mover = new tangram_mover_1.TangramMover({
20
+ mnemonics: 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12',
21
+ networkType: 'devnet',
22
+ });
23
+ (0, vitest_1.expect)(mover).toBeInstanceOf(tangram_mover_1.TangramMover);
24
+ });
25
+ (0, vitest_1.it)('should get address for different account indices', () => {
26
+ const mover = new tangram_mover_1.TangramMover({
27
+ mnemonics: 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12',
28
+ });
29
+ const addr0 = mover.getAddress({ accountIndex: 0 });
30
+ const addr1 = mover.getAddress({ accountIndex: 1 });
31
+ (0, vitest_1.expect)(addr0).toBeTruthy();
32
+ (0, vitest_1.expect)(addr1).toBeTruthy();
33
+ (0, vitest_1.expect)(addr0).not.toBe(addr1);
34
+ });
35
+ // Note: Actual transaction tracing tests would require:
36
+ // 1. A valid Sui RPC endpoint
37
+ // 2. Real transaction digests
38
+ // 3. Network access
39
+ // These are skipped by default but can be enabled for E2E testing
40
+ vitest_1.it.skip('should trace a real transaction', async () => {
41
+ // const mover = new TangramMover({
42
+ // networkType: 'testnet',
43
+ // });
44
+ // This would require a real transaction digest
45
+ // const trace = await mover.traceTransaction('real-digest-here');
46
+ // expect(trace).toBeDefined();
47
+ });
48
+ });
49
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../tests/integration.test.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,mCAA8C;AAC9C,wDAAoD;AAEpD,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAA,WAAE,EAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,4BAAY,CAAC;YAC7B,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,cAAc,CAAC,4BAAY,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,IAAI,4BAAY,CAAC;YAC7B,SAAS,EAAE,4EAA4E;YACvF,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,cAAc,CAAC,4BAAY,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,4BAAY,CAAC;YAC7B,SAAS,EAAE,4EAA4E;SACxF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,8BAA8B;IAC9B,8BAA8B;IAC9B,oBAAoB;IACpB,kEAAkE;IAClE,WAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QACpD,mCAAmC;QACnC,4BAA4B;QAC5B,MAAM;QAEN,+CAA+C;QAC/C,kEAAkE;QAClE,+BAA+B;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for Tracer
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=tracer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.test.d.ts","sourceRoot":"","sources":["../../tests/tracer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for Tracer
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const tracer_1 = require("../src/tracer/tracer");
8
+ (0, vitest_1.describe)('Tracer', () => {
9
+ let mockRpcClient;
10
+ let tracer;
11
+ (0, vitest_1.beforeEach)(() => {
12
+ mockRpcClient = {
13
+ getTransactionBlock: vitest_1.vi.fn(),
14
+ getTransactionBlocks: vitest_1.vi.fn(),
15
+ };
16
+ tracer = new tracer_1.Tracer(mockRpcClient);
17
+ });
18
+ (0, vitest_1.it)('should fetch and parse transaction trace', async () => {
19
+ const mockResponse = {
20
+ digest: 'test-digest-123',
21
+ transaction: {
22
+ data: {
23
+ sender: '0x123',
24
+ gasData: {
25
+ payment: [],
26
+ owner: '0x123',
27
+ price: '1',
28
+ budget: '10000',
29
+ },
30
+ messageVersion: 'v1',
31
+ transaction: {
32
+ kind: 'ProgrammableTransaction',
33
+ inputs: [],
34
+ transactions: [],
35
+ },
36
+ },
37
+ txSignatures: [],
38
+ },
39
+ effects: {
40
+ status: { status: 'success' },
41
+ gasUsed: {
42
+ computationCost: '1000',
43
+ storageCost: '500',
44
+ storageRebate: '200',
45
+ nonRefundableStorageFee: '0',
46
+ },
47
+ created: [],
48
+ mutated: [],
49
+ deleted: [],
50
+ wrapped: [],
51
+ unwrappedThenDeleted: [],
52
+ executedEpoch: '1',
53
+ gasObject: {
54
+ owner: { AddressOwner: '0x123' },
55
+ reference: {
56
+ objectId: '0x123',
57
+ version: '1',
58
+ digest: 'abc123',
59
+ },
60
+ },
61
+ messageVersion: 'v1',
62
+ transactionDigest: 'test-digest-123',
63
+ },
64
+ events: [],
65
+ balanceChanges: [],
66
+ objectChanges: [],
67
+ };
68
+ mockRpcClient.getTransactionBlock.mockResolvedValue(mockResponse);
69
+ const result = await tracer.fetchTrace('test-digest-123');
70
+ (0, vitest_1.expect)(result.digest).toBe('test-digest-123');
71
+ (0, vitest_1.expect)(result.sender).toBe('0x123');
72
+ (0, vitest_1.expect)(result.status).toBe('success');
73
+ (0, vitest_1.expect)(result.gas_computation).toBe(1000);
74
+ (0, vitest_1.expect)(mockRpcClient.getTransactionBlock).toHaveBeenCalledWith('test-digest-123');
75
+ });
76
+ (0, vitest_1.it)('should handle failed transactions', async () => {
77
+ const mockResponse = {
78
+ digest: 'test-digest-456',
79
+ transaction: {
80
+ data: {
81
+ sender: '0x456',
82
+ gasData: {
83
+ payment: [],
84
+ owner: '0x456',
85
+ price: '1',
86
+ budget: '10000',
87
+ },
88
+ messageVersion: 'v1',
89
+ transaction: {
90
+ kind: 'ProgrammableTransaction',
91
+ inputs: [],
92
+ transactions: [],
93
+ },
94
+ },
95
+ txSignatures: [],
96
+ },
97
+ effects: {
98
+ status: { status: 'failure' },
99
+ gasUsed: {
100
+ computationCost: '500',
101
+ storageCost: '0',
102
+ storageRebate: '0',
103
+ nonRefundableStorageFee: '0',
104
+ },
105
+ created: [],
106
+ mutated: [],
107
+ deleted: [],
108
+ wrapped: [],
109
+ unwrappedThenDeleted: [],
110
+ executedEpoch: '1',
111
+ gasObject: {
112
+ owner: { AddressOwner: '0x456' },
113
+ reference: {
114
+ objectId: '0x456',
115
+ version: '1',
116
+ digest: 'def456',
117
+ },
118
+ },
119
+ messageVersion: 'v1',
120
+ transactionDigest: 'test-digest-456',
121
+ },
122
+ events: [],
123
+ balanceChanges: [],
124
+ objectChanges: [],
125
+ };
126
+ mockRpcClient.getTransactionBlock.mockResolvedValue(mockResponse);
127
+ const result = await tracer.fetchTrace('test-digest-456');
128
+ (0, vitest_1.expect)(result.status).toBe('failure');
129
+ });
130
+ (0, vitest_1.it)('should parse balance changes correctly', async () => {
131
+ const mockResponse = {
132
+ digest: 'test-digest-789',
133
+ transaction: {
134
+ data: {
135
+ sender: '0x789',
136
+ gasData: {
137
+ payment: [],
138
+ owner: '0x789',
139
+ price: '1',
140
+ budget: '10000',
141
+ },
142
+ messageVersion: 'v1',
143
+ transaction: {
144
+ kind: 'ProgrammableTransaction',
145
+ inputs: [],
146
+ transactions: [],
147
+ },
148
+ },
149
+ txSignatures: [],
150
+ },
151
+ effects: {
152
+ status: { status: 'success' },
153
+ gasUsed: {
154
+ computationCost: '1000',
155
+ storageCost: '0',
156
+ storageRebate: '0',
157
+ nonRefundableStorageFee: '0',
158
+ },
159
+ created: [],
160
+ mutated: [],
161
+ deleted: [],
162
+ wrapped: [],
163
+ unwrappedThenDeleted: [],
164
+ executedEpoch: '1',
165
+ gasObject: {
166
+ owner: { AddressOwner: '0x789' },
167
+ reference: {
168
+ objectId: '0x789',
169
+ version: '1',
170
+ digest: 'ghi789',
171
+ },
172
+ },
173
+ messageVersion: 'v1',
174
+ transactionDigest: 'test-digest-789',
175
+ },
176
+ events: [],
177
+ balanceChanges: [
178
+ {
179
+ owner: { AddressOwner: '0x111' },
180
+ coinType: '0x2::sui::SUI',
181
+ amount: '1000000',
182
+ },
183
+ {
184
+ owner: { AddressOwner: '0x222' },
185
+ coinType: '0x2::sui::SUI',
186
+ amount: '-1000000',
187
+ },
188
+ ],
189
+ objectChanges: [],
190
+ };
191
+ mockRpcClient.getTransactionBlock.mockResolvedValue(mockResponse);
192
+ const result = await tracer.fetchTrace('test-digest-789');
193
+ (0, vitest_1.expect)(result.balance_changes).toHaveLength(2);
194
+ (0, vitest_1.expect)(result.net_balance_change).toBe(0);
195
+ });
196
+ });
197
+ //# sourceMappingURL=tracer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.test.js","sourceRoot":"","sources":["../../tests/tracer.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@tangram-mover/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for Tangram Mover - Transaction trace analyzer for Sui Move protocols",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "npx --package typescript tsc",
9
+ "test": "vitest",
10
+ "test:watch": "vitest --watch",
11
+ "test:coverage": "vitest --coverage",
12
+ "lint": "eslint src --ext .ts",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "sui",
17
+ "move",
18
+ "blockchain",
19
+ "transaction",
20
+ "tracing",
21
+ "invariant",
22
+ "security"
23
+ ],
24
+ "author": "",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@mysten/sui": "^1.45.2",
28
+ "@scallop-io/sui-kit": "^1.4.3"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.0.0",
32
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
33
+ "@typescript-eslint/parser": "^6.0.0",
34
+ "@vitest/coverage-v8": "^1.0.0",
35
+ "eslint": "^8.0.0",
36
+ "typescript": "^5.9.3",
37
+ "vitest": "^1.0.0"
38
+ },
39
+ "peerDependencies": {},
40
+ "files": [
41
+ "dist",
42
+ "README.md"
43
+ ]
44
+ }