@123456btc/123456btc-cli 1.0.1 → 1.0.2

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 (130) hide show
  1. package/dist/api/client.d.ts +4 -0
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +74 -16
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/provider.d.ts +163 -0
  6. package/dist/api/provider.d.ts.map +1 -0
  7. package/dist/api/provider.js +123 -0
  8. package/dist/api/provider.js.map +1 -0
  9. package/dist/api/signal-crypto.d.ts +17 -0
  10. package/dist/api/signal-crypto.d.ts.map +1 -0
  11. package/dist/api/signal-crypto.js +48 -0
  12. package/dist/api/signal-crypto.js.map +1 -0
  13. package/dist/api/signals.d.ts +47 -0
  14. package/dist/api/signals.d.ts.map +1 -0
  15. package/dist/api/signals.js +34 -0
  16. package/dist/api/signals.js.map +1 -0
  17. package/dist/api/strategy-stream.d.ts +59 -0
  18. package/dist/api/strategy-stream.d.ts.map +1 -0
  19. package/dist/api/strategy-stream.js +136 -0
  20. package/dist/api/strategy-stream.js.map +1 -0
  21. package/dist/api/strategy.d.ts +66 -20
  22. package/dist/api/strategy.d.ts.map +1 -1
  23. package/dist/api/strategy.js +15 -18
  24. package/dist/api/strategy.js.map +1 -1
  25. package/dist/api/token-manager.d.ts +37 -0
  26. package/dist/api/token-manager.d.ts.map +1 -0
  27. package/dist/api/token-manager.js +191 -0
  28. package/dist/api/token-manager.js.map +1 -0
  29. package/dist/api/wallet.d.ts +38 -0
  30. package/dist/api/wallet.d.ts.map +1 -0
  31. package/dist/api/wallet.js +23 -0
  32. package/dist/api/wallet.js.map +1 -0
  33. package/dist/cli.js +12 -2
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/auth.d.ts.map +1 -1
  36. package/dist/commands/auth.js +149 -3
  37. package/dist/commands/auth.js.map +1 -1
  38. package/dist/commands/health.d.ts +3 -0
  39. package/dist/commands/health.d.ts.map +1 -0
  40. package/dist/commands/health.js +77 -0
  41. package/dist/commands/health.js.map +1 -0
  42. package/dist/commands/install.d.ts.map +1 -1
  43. package/dist/commands/install.js +127 -24
  44. package/dist/commands/install.js.map +1 -1
  45. package/dist/commands/provider.d.ts +3 -0
  46. package/dist/commands/provider.d.ts.map +1 -0
  47. package/dist/commands/provider.js +371 -0
  48. package/dist/commands/provider.js.map +1 -0
  49. package/dist/commands/signals.d.ts +3 -0
  50. package/dist/commands/signals.d.ts.map +1 -0
  51. package/dist/commands/signals.js +104 -0
  52. package/dist/commands/signals.js.map +1 -0
  53. package/dist/commands/strategy.d.ts.map +1 -1
  54. package/dist/commands/strategy.js +147 -59
  55. package/dist/commands/strategy.js.map +1 -1
  56. package/dist/commands/tier.d.ts +3 -0
  57. package/dist/commands/tier.d.ts.map +1 -0
  58. package/dist/commands/tier.js +105 -0
  59. package/dist/commands/tier.js.map +1 -0
  60. package/dist/commands/vault.d.ts +7 -0
  61. package/dist/commands/vault.d.ts.map +1 -0
  62. package/dist/commands/vault.js +377 -0
  63. package/dist/commands/vault.js.map +1 -0
  64. package/dist/commands/wallet.d.ts +3 -0
  65. package/dist/commands/wallet.d.ts.map +1 -0
  66. package/dist/commands/wallet.js +74 -0
  67. package/dist/commands/wallet.js.map +1 -0
  68. package/dist/config.d.ts +1 -0
  69. package/dist/config.d.ts.map +1 -1
  70. package/dist/config.js +16 -2
  71. package/dist/config.js.map +1 -1
  72. package/dist/index.d.ts +12 -4
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +22 -6
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers/executor.d.ts +55 -20
  77. package/dist/providers/executor.d.ts.map +1 -1
  78. package/dist/providers/executor.js +260 -58
  79. package/dist/providers/executor.js.map +1 -1
  80. package/dist/providers/risk.d.ts +17 -0
  81. package/dist/providers/risk.d.ts.map +1 -0
  82. package/dist/providers/risk.js +67 -0
  83. package/dist/providers/risk.js.map +1 -0
  84. package/dist/providers/state.d.ts +30 -0
  85. package/dist/providers/state.d.ts.map +1 -0
  86. package/dist/providers/state.js +190 -0
  87. package/dist/providers/state.js.map +1 -0
  88. package/dist/types/strategy.d.ts +65 -1
  89. package/dist/types/strategy.d.ts.map +1 -1
  90. package/dist/types/strategy.js +1 -0
  91. package/dist/types/strategy.js.map +1 -1
  92. package/dist/utils/auth.d.ts +1 -0
  93. package/dist/utils/auth.d.ts.map +1 -1
  94. package/dist/utils/device.d.ts +13 -0
  95. package/dist/utils/device.d.ts.map +1 -0
  96. package/dist/utils/device.js +104 -0
  97. package/dist/utils/device.js.map +1 -0
  98. package/dist/vault/backends/file.d.ts +15 -0
  99. package/dist/vault/backends/file.d.ts.map +1 -0
  100. package/dist/vault/backends/file.js +39 -0
  101. package/dist/vault/backends/file.js.map +1 -0
  102. package/dist/vault/backends/os-keychain.d.ts +13 -0
  103. package/dist/vault/backends/os-keychain.d.ts.map +1 -0
  104. package/dist/vault/backends/os-keychain.js +60 -0
  105. package/dist/vault/backends/os-keychain.js.map +1 -0
  106. package/dist/vault/backends/os-secret.d.ts +13 -0
  107. package/dist/vault/backends/os-secret.d.ts.map +1 -0
  108. package/dist/vault/backends/os-secret.js +57 -0
  109. package/dist/vault/backends/os-secret.js.map +1 -0
  110. package/dist/vault/backends/os-win-cred.d.ts +13 -0
  111. package/dist/vault/backends/os-win-cred.d.ts.map +1 -0
  112. package/dist/vault/backends/os-win-cred.js +76 -0
  113. package/dist/vault/backends/os-win-cred.js.map +1 -0
  114. package/dist/vault/crypto.d.ts +49 -0
  115. package/dist/vault/crypto.d.ts.map +1 -0
  116. package/dist/vault/crypto.js +122 -0
  117. package/dist/vault/crypto.js.map +1 -0
  118. package/dist/vault/index.d.ts +88 -0
  119. package/dist/vault/index.d.ts.map +1 -0
  120. package/dist/vault/index.js +276 -0
  121. package/dist/vault/index.js.map +1 -0
  122. package/dist/vault/storage.d.ts +14 -0
  123. package/dist/vault/storage.d.ts.map +1 -0
  124. package/dist/vault/storage.js +68 -0
  125. package/dist/vault/storage.js.map +1 -0
  126. package/dist/vault/types.d.ts +41 -0
  127. package/dist/vault/types.d.ts.map +1 -0
  128. package/dist/vault/types.js +6 -0
  129. package/dist/vault/types.js.map +1 -0
  130. package/package.json +3 -1
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Order State Manager
4
+ * Tracks every strategy through its lifecycle with complete transition log.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OrderStateManager = void 0;
8
+ exports.applyTransition = applyTransition;
9
+ // ─── State Machine ────────────────────────────────────────────────────────
10
+ const TRANSITIONS = {
11
+ pending: { submit: 'pending', ack: 'open', reject: 'rejected', error: 'failed' },
12
+ open: {
13
+ partial_exec: 'partially_filled',
14
+ exec: 'filled',
15
+ cancel_request: 'open',
16
+ cancelled: 'cancelled',
17
+ reject: 'rejected',
18
+ expire: 'expired',
19
+ error: 'failed',
20
+ },
21
+ partially_filled: {
22
+ partial_exec: 'partially_filled',
23
+ exec: 'filled',
24
+ cancel_request: 'partially_filled',
25
+ cancelled: 'cancelled',
26
+ error: 'failed',
27
+ },
28
+ filled: {},
29
+ cancelled: {},
30
+ rejected: {},
31
+ expired: {},
32
+ failed: { submit: 'pending' }, // allow retry
33
+ };
34
+ function applyTransition(current, event) {
35
+ return TRANSITIONS[current]?.[event] ?? null;
36
+ }
37
+ // ─── In-Memory Store ──────────────────────────────────────────────────────
38
+ class OrderStateManager {
39
+ strategies = new Map();
40
+ clientIdMap = new Map();
41
+ register(clientOrderId, strategyId, context) {
42
+ const strategy = {
43
+ dispatchId: context.dispatchId,
44
+ clientOrderId,
45
+ strategyId,
46
+ request: context,
47
+ status: 'pending',
48
+ transitions: [],
49
+ retryCount: 0,
50
+ createdAt: Date.now(),
51
+ updatedAt: Date.now(),
52
+ };
53
+ this.strategies.set(clientOrderId, strategy);
54
+ this.clientIdMap.set(clientOrderId, clientOrderId);
55
+ return strategy;
56
+ }
57
+ bind(clientOrderId, dispatchId) {
58
+ const strategy = this.strategies.get(clientOrderId);
59
+ if (!strategy)
60
+ return null;
61
+ strategy.dispatchId = dispatchId;
62
+ this.strategies.delete(clientOrderId);
63
+ this.strategies.set(dispatchId, strategy);
64
+ this.clientIdMap.set(clientOrderId, dispatchId);
65
+ return strategy;
66
+ }
67
+ transition(id, event, detail) {
68
+ const strategy = this.get(id);
69
+ if (!strategy)
70
+ return null;
71
+ const next = applyTransition(strategy.status, event);
72
+ if (!next) {
73
+ console.warn(`[State] Illegal transition: ${strategy.status} + ${event} (dispatch ${id})`);
74
+ return strategy;
75
+ }
76
+ const transition = {
77
+ from: strategy.status,
78
+ event,
79
+ to: next,
80
+ timestamp: Date.now(),
81
+ detail,
82
+ };
83
+ strategy.transitions.push(transition);
84
+ strategy.status = next;
85
+ strategy.updatedAt = Date.now();
86
+ return strategy;
87
+ }
88
+ applyResult(id, result) {
89
+ const strategy = this.get(id);
90
+ if (!strategy)
91
+ return null;
92
+ strategy.status = result.status;
93
+ if (result.error)
94
+ strategy.error = result.error;
95
+ strategy.updatedAt = Date.now();
96
+ const eventMap = {
97
+ open: 'ack',
98
+ pending: 'ack',
99
+ partially_filled: 'partial_exec',
100
+ filled: 'exec',
101
+ cancelled: 'cancelled',
102
+ rejected: 'reject',
103
+ expired: 'expire',
104
+ failed: 'error',
105
+ };
106
+ const event = eventMap[result.status];
107
+ if (event)
108
+ this.transition(id, event, result.error);
109
+ return strategy;
110
+ }
111
+ markError(id, error) {
112
+ const strategy = this.get(id);
113
+ if (!strategy)
114
+ return null;
115
+ strategy.error = error;
116
+ this.transition(id, 'error', error);
117
+ return strategy;
118
+ }
119
+ setResult(id, result) {
120
+ const strategy = this.get(id);
121
+ if (!strategy)
122
+ return null;
123
+ strategy.result = {
124
+ success: true,
125
+ data: result,
126
+ gasUsed: 0,
127
+ executionTime: Date.now() - strategy.createdAt,
128
+ };
129
+ strategy.updatedAt = Date.now();
130
+ return strategy;
131
+ }
132
+ incrementRetry(id) {
133
+ const strategy = this.get(id);
134
+ if (!strategy)
135
+ return 0;
136
+ strategy.retryCount++;
137
+ strategy.updatedAt = Date.now();
138
+ return strategy.retryCount;
139
+ }
140
+ get(id) {
141
+ return (this.strategies.get(id) ??
142
+ this.strategies.get(this.clientIdMap.get(id) ?? ''));
143
+ }
144
+ getByDispatchId(dispatchId) {
145
+ return this.strategies.get(dispatchId);
146
+ }
147
+ list(filter) {
148
+ const all = Array.from(this.strategies.values());
149
+ if (!filter)
150
+ return all;
151
+ return all.filter((s) => {
152
+ if (filter.status && s.status !== filter.status)
153
+ return false;
154
+ return true;
155
+ });
156
+ }
157
+ remove(id) {
158
+ const strategy = this.get(id);
159
+ if (strategy?.clientOrderId)
160
+ this.clientIdMap.delete(strategy.clientOrderId);
161
+ this.strategies.delete(id);
162
+ }
163
+ /** Purge terminal strategies older than maxAgeMs */
164
+ purge(maxAgeMs = 24 * 60 * 60 * 1000) {
165
+ const terminal = [
166
+ 'filled',
167
+ 'cancelled',
168
+ 'rejected',
169
+ 'expired',
170
+ 'failed',
171
+ ];
172
+ const cutoff = Date.now() - maxAgeMs;
173
+ let count = 0;
174
+ for (const [id, strategy] of this.strategies) {
175
+ if (terminal.includes(strategy.status) &&
176
+ strategy.updatedAt < cutoff) {
177
+ if (strategy.clientOrderId)
178
+ this.clientIdMap.delete(strategy.clientOrderId);
179
+ this.strategies.delete(id);
180
+ count++;
181
+ }
182
+ }
183
+ return count;
184
+ }
185
+ size() {
186
+ return this.strategies.size;
187
+ }
188
+ }
189
+ exports.OrderStateManager = OrderStateManager;
190
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/providers/state.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Strategy Type Definitions
3
+ * Based on institutional order execution pattern from bbt-ai-bot
3
4
  */
5
+ export type StrategyState = 'pending' | 'fetching' | 'installing' | 'validating' | 'running' | 'partially_executed' | 'completed' | 'cancelled' | 'failed' | 'rejected';
6
+ export type OrderEvent = 'submit' | 'ack' | 'partial_exec' | 'exec' | 'cancel_request' | 'cancelled' | 'reject' | 'expire' | 'error';
4
7
  export interface StrategyConfig {
5
8
  name: string;
6
9
  version: string;
@@ -12,6 +15,12 @@ export interface StrategyResult {
12
15
  error?: string;
13
16
  gasUsed?: number;
14
17
  executionTime?: number;
18
+ slices?: StrategySlice[];
19
+ }
20
+ export interface StrategySlice {
21
+ sliceIndex: number;
22
+ status: OrderStatus;
23
+ executedAt: number;
15
24
  }
16
25
  export interface ExecutorContext {
17
26
  strategyId: string;
@@ -19,8 +28,63 @@ export interface ExecutorContext {
19
28
  config: StrategyConfig;
20
29
  apiKey: string;
21
30
  gasBudget?: number;
31
+ sessionId?: string;
32
+ }
33
+ export interface OrderStateTransition {
34
+ from: OrderStatus;
35
+ event: OrderEvent;
36
+ to: OrderStatus;
37
+ timestamp: number;
38
+ detail?: string;
39
+ }
40
+ export type OrderStatus = 'pending' | 'open' | 'partially_filled' | 'filled' | 'cancelled' | 'rejected' | 'expired' | 'failed';
41
+ export interface TrackedStrategy {
42
+ dispatchId: string;
43
+ clientOrderId: string;
44
+ strategyId: string;
45
+ request: ExecutorContext;
46
+ status: OrderStatus;
47
+ transitions: OrderStateTransition[];
48
+ retryCount: number;
49
+ createdAt: number;
50
+ updatedAt: number;
51
+ error?: string;
52
+ result?: StrategyResult;
53
+ }
54
+ export interface RiskLimits {
55
+ maxGasBudget?: number;
56
+ maxDailyStrategies?: number;
57
+ usedToday?: number;
58
+ allowedStrategies?: string[];
59
+ blockedStrategies?: string[];
60
+ }
61
+ export interface RiskCheckResult {
62
+ passed: boolean;
63
+ message?: string;
64
+ adjustedContext?: ExecutorContext;
65
+ }
66
+ export interface TwapParams {
67
+ totalQuantity: number;
68
+ durationMs: number;
69
+ intervals: number;
70
+ symbol: string;
71
+ side: 'buy' | 'sell';
72
+ }
73
+ export interface VwapParams {
74
+ totalQuantity: number;
75
+ durationMs: number;
76
+ participationRate: number;
77
+ symbol: string;
78
+ side: 'buy' | 'sell';
79
+ }
80
+ export interface IcebergParams {
81
+ totalQuantity: number;
82
+ visibleQuantity: number;
83
+ price?: number;
84
+ intervalMs?: number;
85
+ symbol: string;
86
+ side: 'buy' | 'sell';
22
87
  }
23
- export type StrategyState = 'idle' | 'fetching' | 'installing' | 'validating' | 'running' | 'completed' | 'failed';
24
88
  export interface StrategyStateInfo {
25
89
  state: StrategyState;
26
90
  progress?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAGD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Strategy Type Definitions
4
+ * Based on institutional order execution pattern from bbt-ai-bot
4
5
  */
5
6
  Object.defineProperty(exports, "__esModule", { value: true });
6
7
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -5,5 +5,6 @@
5
5
  export declare function checkAuth(): {
6
6
  apiKey: string;
7
7
  baseUrl: string;
8
+ jwt?: string;
8
9
  } | null;
9
10
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,SAAS,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAetE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,SAAS,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAepF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Device fingerprint generator
3
+ * Creates a stable device hash for dispatch token binding
4
+ */
5
+ /**
6
+ * Get or create device fingerprint
7
+ */
8
+ export declare function getDeviceHash(): string;
9
+ /**
10
+ * Reset device fingerprint (e.g. after hardware change)
11
+ */
12
+ export declare function resetDeviceHash(): string;
13
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkCH;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA2BtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CASxC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * Device fingerprint generator
4
+ * Creates a stable device hash for dispatch token binding
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.getDeviceHash = getDeviceHash;
41
+ exports.resetDeviceHash = resetDeviceHash;
42
+ const os = __importStar(require("os"));
43
+ const crypto_1 = require("crypto");
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const DEVICE_FILE = path.join(process.env.HOME || process.env.USERPROFILE || '.', '.123456btc-cli', 'device.json');
47
+ /**
48
+ * Generate a stable device fingerprint
49
+ * Combines hostname, username, platform, and CPU arch
50
+ */
51
+ function generateDeviceHash() {
52
+ const components = [
53
+ os.hostname(),
54
+ os.userInfo().username,
55
+ os.platform(),
56
+ os.arch(),
57
+ os.cpus()[0]?.model || 'unknown',
58
+ ];
59
+ const raw = components.join('::');
60
+ return (0, crypto_1.createHash)('sha256').update(raw).digest('hex').slice(0, 32);
61
+ }
62
+ /**
63
+ * Get or create device fingerprint
64
+ */
65
+ function getDeviceHash() {
66
+ try {
67
+ if (fs.existsSync(DEVICE_FILE)) {
68
+ const data = JSON.parse(fs.readFileSync(DEVICE_FILE, 'utf-8'));
69
+ if (data.hash && data.hash.length === 32) {
70
+ return data.hash;
71
+ }
72
+ }
73
+ }
74
+ catch {
75
+ // fall through to generate
76
+ }
77
+ const hash = generateDeviceHash();
78
+ try {
79
+ const dir = path.dirname(DEVICE_FILE);
80
+ if (!fs.existsSync(dir)) {
81
+ fs.mkdirSync(dir, { recursive: true });
82
+ }
83
+ fs.writeFileSync(DEVICE_FILE, JSON.stringify({ hash, createdAt: new Date().toISOString() }, null, 2), { mode: 0o600 });
84
+ }
85
+ catch {
86
+ // ignore write errors
87
+ }
88
+ return hash;
89
+ }
90
+ /**
91
+ * Reset device fingerprint (e.g. after hardware change)
92
+ */
93
+ function resetDeviceHash() {
94
+ try {
95
+ if (fs.existsSync(DEVICE_FILE)) {
96
+ fs.unlinkSync(DEVICE_FILE);
97
+ }
98
+ }
99
+ catch {
100
+ // ignore
101
+ }
102
+ return getDeviceHash();
103
+ }
104
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCH,sCA2BC;AAKD,0CASC;AA5ED,uCAAyB;AACzB,mCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAClD,gBAAgB,EAChB,aAAa,CACd,CAAC;AAOF;;;GAGG;AACH,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,QAAQ,EAAE;QACb,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;QACtB,EAAE,CAAC,QAAQ,EAAE;QACb,EAAE,CAAC,IAAI,EAAE;QACT,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;KACjC,CAAC;IACF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAe,CAAC;YAC7E,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,EAAE,CAAC,aAAa,CACd,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACtE,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * File-based encrypted storage backend (fallback)
3
+ * Stores ciphertext in a file with 0600 permissions
4
+ */
5
+ import type { IStorageBackend } from '../types';
6
+ export declare class FileBackend implements IStorageBackend {
7
+ private filepath;
8
+ readonly name = "Encrypted File";
9
+ constructor(filepath: string);
10
+ isAvailable(): Promise<boolean>;
11
+ read(): Promise<Buffer | null>;
12
+ write(data: Buffer): Promise<void>;
13
+ delete(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/vault/backends/file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,qBAAa,WAAY,YAAW,eAAe;IAGrC,OAAO,CAAC,QAAQ;IAF5B,QAAQ,CAAC,IAAI,oBAAoB;gBAEb,QAAQ,EAAE,MAAM;IAE9B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * File-based encrypted storage backend (fallback)
4
+ * Stores ciphertext in a file with 0600 permissions
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.FileBackend = void 0;
8
+ const fs_1 = require("fs");
9
+ const path_1 = require("path");
10
+ class FileBackend {
11
+ filepath;
12
+ name = 'Encrypted File';
13
+ constructor(filepath) {
14
+ this.filepath = filepath;
15
+ }
16
+ async isAvailable() {
17
+ return true; // Always available
18
+ }
19
+ async read() {
20
+ if (!(0, fs_1.existsSync)(this.filepath))
21
+ return null;
22
+ return (0, fs_1.readFileSync)(this.filepath);
23
+ }
24
+ async write(data) {
25
+ const dir = (0, path_1.dirname)(this.filepath);
26
+ if (!(0, fs_1.existsSync)(dir)) {
27
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
28
+ }
29
+ (0, fs_1.writeFileSync)(this.filepath, data);
30
+ (0, fs_1.chmodSync)(this.filepath, 0o600); // user read/write only
31
+ }
32
+ async delete() {
33
+ if ((0, fs_1.existsSync)(this.filepath)) {
34
+ (0, fs_1.unlinkSync)(this.filepath);
35
+ }
36
+ }
37
+ }
38
+ exports.FileBackend = FileBackend;
39
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/vault/backends/file.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2BAA+F;AAC/F,+BAA+B;AAG/B,MAAa,WAAW;IAGF;IAFX,IAAI,GAAG,gBAAgB,CAAC;IAEjC,YAAoB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAExC,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,IAAA,iBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE,CAAC;YACrB,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAA,kBAAa,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAA,cAAS,EAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,uBAAuB;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAA,eAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AA5BD,kCA4BC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * macOS Keychain storage backend
3
+ * Uses the `security` command-line tool (built-in on macOS)
4
+ */
5
+ import type { IStorageBackend } from '../types';
6
+ export declare class MacOSKeychainBackend implements IStorageBackend {
7
+ readonly name = "macOS Keychain";
8
+ isAvailable(): Promise<boolean>;
9
+ read(): Promise<Buffer | null>;
10
+ write(data: Buffer): Promise<void>;
11
+ delete(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=os-keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os-keychain.d.ts","sourceRoot":"","sources":["../../../src/vault/backends/os-keychain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,QAAQ,CAAC,IAAI,oBAAoB;IAE3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiB9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAU9B"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * macOS Keychain storage backend
4
+ * Uses the `security` command-line tool (built-in on macOS)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MacOSKeychainBackend = void 0;
8
+ const child_process_1 = require("child_process");
9
+ const SERVICE_NAME = '123456btc-cli-vault';
10
+ const ACCOUNT_NAME = 'vault-master';
11
+ class MacOSKeychainBackend {
12
+ name = 'macOS Keychain';
13
+ async isAvailable() {
14
+ if (process.platform !== 'darwin')
15
+ return false;
16
+ try {
17
+ (0, child_process_1.execSync)('which security', { stdio: 'ignore' });
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ async read() {
25
+ try {
26
+ const result = (0, child_process_1.execSync)(`security find-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}" -w`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
27
+ // security -w outputs base64-like, but actually the raw password string
28
+ // We store base64-encoded data in the password field
29
+ return Buffer.from(result.trim(), 'base64');
30
+ }
31
+ catch (err) {
32
+ if (err.stderr?.toString().includes('The specified item could not be found')) {
33
+ return null;
34
+ }
35
+ throw err;
36
+ }
37
+ }
38
+ async write(data) {
39
+ const b64 = data.toString('base64');
40
+ // Delete existing first (ignore errors)
41
+ try {
42
+ (0, child_process_1.execSync)(`security delete-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}"`, { stdio: 'ignore' });
43
+ }
44
+ catch {
45
+ // ignore
46
+ }
47
+ // Add new
48
+ (0, child_process_1.execSync)(`security add-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}" -w "${b64}" -U`, { stdio: 'ignore' });
49
+ }
50
+ async delete() {
51
+ try {
52
+ (0, child_process_1.execSync)(`security delete-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}"`, { stdio: 'ignore' });
53
+ }
54
+ catch {
55
+ // ignore
56
+ }
57
+ }
58
+ }
59
+ exports.MacOSKeychainBackend = MacOSKeychainBackend;
60
+ //# sourceMappingURL=os-keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os-keychain.js","sourceRoot":"","sources":["../../../src/vault/backends/os-keychain.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iDAAyC;AAGzC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAa,oBAAoB;IACtB,IAAI,GAAG,gBAAgB,CAAC;IAEjC,KAAK,CAAC,WAAW;QACf,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,sCAAsC,YAAY,SAAS,YAAY,MAAM,EAC7E,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACtD,CAAC;YACF,wEAAwE;YACxE,qDAAqD;YACrD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;gBAC7E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,wCAAwC;QACxC,IAAI,CAAC;YACH,IAAA,wBAAQ,EACN,wCAAwC,YAAY,SAAS,YAAY,GAAG,EAC5E,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,UAAU;QACV,IAAA,wBAAQ,EACN,qCAAqC,YAAY,SAAS,YAAY,SAAS,GAAG,MAAM,EACxF,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,IAAA,wBAAQ,EACN,wCAAwC,YAAY,SAAS,YAAY,GAAG,EAC5E,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;CACF;AA1DD,oDA0DC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Linux libsecret storage backend
3
+ * Uses `secret-tool` command-line utility (package: libsecret-tools)
4
+ */
5
+ import type { IStorageBackend } from '../types';
6
+ export declare class LinuxSecretBackend implements IStorageBackend {
7
+ readonly name = "Linux libsecret";
8
+ isAvailable(): Promise<boolean>;
9
+ read(): Promise<Buffer | null>;
10
+ write(data: Buffer): Promise<void>;
11
+ delete(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=os-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os-secret.d.ts","sourceRoot":"","sources":["../../../src/vault/backends/os-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,qBAAa,kBAAmB,YAAW,eAAe;IACxD,QAAQ,CAAC,IAAI,qBAAqB;IAE5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAU9B"}