everything-dev 0.3.2 → 1.3.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 (308) hide show
  1. package/README.md +64 -0
  2. package/cli.js +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/api-contract.cjs +172 -0
  5. package/dist/api-contract.cjs.map +1 -0
  6. package/dist/api-contract.mjs +171 -0
  7. package/dist/api-contract.mjs.map +1 -0
  8. package/dist/api.cjs +124 -0
  9. package/dist/api.cjs.map +1 -0
  10. package/dist/api.d.cts +36 -0
  11. package/dist/api.d.cts.map +1 -0
  12. package/dist/api.d.mts +36 -0
  13. package/dist/api.d.mts.map +1 -0
  14. package/dist/api.mjs +119 -0
  15. package/dist/api.mjs.map +1 -0
  16. package/dist/app.cjs +156 -0
  17. package/dist/app.cjs.map +1 -0
  18. package/dist/app.mjs +153 -0
  19. package/dist/app.mjs.map +1 -0
  20. package/dist/cli/catalog.cjs +30 -0
  21. package/dist/cli/catalog.cjs.map +1 -0
  22. package/dist/cli/catalog.mjs +29 -0
  23. package/dist/cli/catalog.mjs.map +1 -0
  24. package/dist/cli/help.cjs +16 -0
  25. package/dist/cli/help.cjs.map +1 -0
  26. package/dist/cli/help.mjs +16 -0
  27. package/dist/cli/help.mjs.map +1 -0
  28. package/dist/cli/init.cjs +317 -0
  29. package/dist/cli/init.cjs.map +1 -0
  30. package/dist/cli/init.d.cts +36 -0
  31. package/dist/cli/init.d.cts.map +1 -0
  32. package/dist/cli/init.d.mts +36 -0
  33. package/dist/cli/init.d.mts.map +1 -0
  34. package/dist/cli/init.mjs +309 -0
  35. package/dist/cli/init.mjs.map +1 -0
  36. package/dist/cli/parse.cjs +96 -0
  37. package/dist/cli/parse.cjs.map +1 -0
  38. package/dist/cli/parse.mjs +95 -0
  39. package/dist/cli/parse.mjs.map +1 -0
  40. package/dist/cli/prompts.cjs +42 -0
  41. package/dist/cli/prompts.cjs.map +1 -0
  42. package/dist/cli/prompts.mjs +41 -0
  43. package/dist/cli/prompts.mjs.map +1 -0
  44. package/dist/cli.cjs +167 -0
  45. package/dist/cli.cjs.map +1 -0
  46. package/dist/cli.d.cts +1 -0
  47. package/dist/cli.d.mts +1 -0
  48. package/dist/cli.mjs +166 -0
  49. package/dist/cli.mjs.map +1 -0
  50. package/dist/components/dev-view.cjs +307 -0
  51. package/dist/components/dev-view.cjs.map +1 -0
  52. package/dist/components/dev-view.mjs +306 -0
  53. package/dist/components/dev-view.mjs.map +1 -0
  54. package/dist/components/streaming-view.cjs +146 -0
  55. package/dist/components/streaming-view.cjs.map +1 -0
  56. package/dist/components/streaming-view.mjs +144 -0
  57. package/dist/components/streaming-view.mjs.map +1 -0
  58. package/dist/config.cjs +280 -0
  59. package/dist/config.cjs.map +1 -0
  60. package/dist/config.d.cts +35 -0
  61. package/dist/config.d.cts.map +1 -0
  62. package/dist/config.d.mts +35 -0
  63. package/dist/config.d.mts.map +1 -0
  64. package/dist/config.mjs +266 -0
  65. package/dist/config.mjs.map +1 -0
  66. package/dist/contract.cjs +209 -0
  67. package/dist/contract.cjs.map +1 -0
  68. package/dist/contract.d.cts +490 -0
  69. package/dist/contract.d.cts.map +1 -0
  70. package/dist/contract.d.mts +490 -0
  71. package/dist/contract.d.mts.map +1 -0
  72. package/dist/contract.meta.cjs +104 -0
  73. package/dist/contract.meta.cjs.map +1 -0
  74. package/dist/contract.meta.d.cts +141 -0
  75. package/dist/contract.meta.d.cts.map +1 -0
  76. package/dist/contract.meta.d.mts +141 -0
  77. package/dist/contract.meta.d.mts.map +1 -0
  78. package/dist/contract.meta.mjs +102 -0
  79. package/dist/contract.meta.mjs.map +1 -0
  80. package/dist/contract.mjs +186 -0
  81. package/dist/contract.mjs.map +1 -0
  82. package/dist/dev-logs.cjs +53 -0
  83. package/dist/dev-logs.cjs.map +1 -0
  84. package/dist/dev-logs.mjs +51 -0
  85. package/dist/dev-logs.mjs.map +1 -0
  86. package/dist/dev-session.cjs +195 -0
  87. package/dist/dev-session.cjs.map +1 -0
  88. package/dist/dev-session.mjs +194 -0
  89. package/dist/dev-session.mjs.map +1 -0
  90. package/dist/fastkv.cjs +89 -0
  91. package/dist/fastkv.cjs.map +1 -0
  92. package/dist/fastkv.d.cts +11 -0
  93. package/dist/fastkv.d.cts.map +1 -0
  94. package/dist/fastkv.d.mts +11 -0
  95. package/dist/fastkv.d.mts.map +1 -0
  96. package/dist/fastkv.mjs +82 -0
  97. package/dist/fastkv.mjs.map +1 -0
  98. package/dist/federation.server.cjs +27 -0
  99. package/dist/federation.server.cjs.map +1 -0
  100. package/dist/federation.server.mjs +27 -0
  101. package/dist/federation.server.mjs.map +1 -0
  102. package/dist/host.cjs +367 -0
  103. package/dist/host.cjs.map +1 -0
  104. package/dist/host.d.cts +22 -0
  105. package/dist/host.d.cts.map +1 -0
  106. package/dist/host.d.mts +22 -0
  107. package/dist/host.d.mts.map +1 -0
  108. package/dist/host.mjs +364 -0
  109. package/dist/host.mjs.map +1 -0
  110. package/dist/index.cjs +122 -0
  111. package/dist/index.d.cts +7 -0
  112. package/dist/index.d.mts +7 -0
  113. package/dist/index.mjs +9 -0
  114. package/dist/integrity.cjs +39 -0
  115. package/dist/integrity.cjs.map +1 -0
  116. package/dist/integrity.d.cts +7 -0
  117. package/dist/integrity.d.cts.map +1 -0
  118. package/dist/integrity.d.mts +7 -0
  119. package/dist/integrity.d.mts.map +1 -0
  120. package/dist/integrity.mjs +35 -0
  121. package/dist/integrity.mjs.map +1 -0
  122. package/dist/mf.cjs +77 -0
  123. package/dist/mf.cjs.map +1 -0
  124. package/dist/mf.d.cts +19 -0
  125. package/dist/mf.d.cts.map +1 -0
  126. package/dist/mf.d.mts +19 -0
  127. package/dist/mf.d.mts.map +1 -0
  128. package/dist/mf.mjs +71 -0
  129. package/dist/mf.mjs.map +1 -0
  130. package/dist/near-cli.cjs +196 -0
  131. package/dist/near-cli.cjs.map +1 -0
  132. package/dist/near-cli.mjs +193 -0
  133. package/dist/near-cli.mjs.map +1 -0
  134. package/dist/network.cjs +9 -0
  135. package/dist/network.cjs.map +1 -0
  136. package/dist/network.mjs +8 -0
  137. package/dist/network.mjs.map +1 -0
  138. package/dist/orchestrator.cjs +441 -0
  139. package/dist/orchestrator.cjs.map +1 -0
  140. package/dist/orchestrator.d.cts +40 -0
  141. package/dist/orchestrator.d.cts.map +1 -0
  142. package/dist/orchestrator.d.mts +40 -0
  143. package/dist/orchestrator.d.mts.map +1 -0
  144. package/dist/orchestrator.mjs +436 -0
  145. package/dist/orchestrator.mjs.map +1 -0
  146. package/dist/plugin.cjs +825 -0
  147. package/dist/plugin.cjs.map +1 -0
  148. package/dist/plugin.d.cts +347 -0
  149. package/dist/plugin.d.cts.map +1 -0
  150. package/dist/plugin.d.mts +348 -0
  151. package/dist/plugin.d.mts.map +1 -0
  152. package/dist/plugin.mjs +822 -0
  153. package/dist/plugin.mjs.map +1 -0
  154. package/dist/process-registry.cjs +120 -0
  155. package/dist/process-registry.cjs.map +1 -0
  156. package/dist/process-registry.d.cts +25 -0
  157. package/dist/process-registry.d.cts.map +1 -0
  158. package/dist/process-registry.d.mts +25 -0
  159. package/dist/process-registry.d.mts.map +1 -0
  160. package/dist/process-registry.mjs +119 -0
  161. package/dist/process-registry.mjs.map +1 -0
  162. package/dist/sdk.cjs +61 -0
  163. package/dist/sdk.d.cts +5 -0
  164. package/dist/sdk.d.mts +5 -0
  165. package/dist/sdk.mjs +6 -0
  166. package/dist/shared.cjs +143 -0
  167. package/dist/shared.cjs.map +1 -0
  168. package/dist/shared.d.cts +33 -0
  169. package/dist/shared.d.cts.map +1 -0
  170. package/dist/shared.d.mts +33 -0
  171. package/dist/shared.d.mts.map +1 -0
  172. package/dist/shared.mjs +140 -0
  173. package/dist/shared.mjs.map +1 -0
  174. package/dist/types.cjs +160 -0
  175. package/dist/types.cjs.map +1 -0
  176. package/dist/types.d.cts +269 -0
  177. package/dist/types.d.cts.map +1 -0
  178. package/dist/types.d.mts +269 -0
  179. package/dist/types.d.mts.map +1 -0
  180. package/dist/types.mjs +144 -0
  181. package/dist/types.mjs.map +1 -0
  182. package/dist/ui/head.cjs +67 -0
  183. package/dist/ui/head.cjs.map +1 -0
  184. package/dist/ui/head.d.cts +19 -0
  185. package/dist/ui/head.d.cts.map +1 -0
  186. package/dist/ui/head.d.mts +19 -0
  187. package/dist/ui/head.d.mts.map +1 -0
  188. package/dist/ui/head.mjs +61 -0
  189. package/dist/ui/head.mjs.map +1 -0
  190. package/dist/ui/index.cjs +32 -0
  191. package/dist/ui/index.d.cts +7 -0
  192. package/dist/ui/index.d.mts +7 -0
  193. package/dist/ui/index.mjs +6 -0
  194. package/dist/ui/metadata.cjs +106 -0
  195. package/dist/ui/metadata.cjs.map +1 -0
  196. package/dist/ui/metadata.d.cts +35 -0
  197. package/dist/ui/metadata.d.cts.map +1 -0
  198. package/dist/ui/metadata.d.mts +35 -0
  199. package/dist/ui/metadata.d.mts.map +1 -0
  200. package/dist/ui/metadata.mjs +100 -0
  201. package/dist/ui/metadata.mjs.map +1 -0
  202. package/dist/ui/router.cjs +56 -0
  203. package/dist/ui/router.cjs.map +1 -0
  204. package/dist/ui/router.d.cts +11 -0
  205. package/dist/ui/router.d.cts.map +1 -0
  206. package/dist/ui/router.d.mts +11 -0
  207. package/dist/ui/router.d.mts.map +1 -0
  208. package/dist/ui/router.mjs +51 -0
  209. package/dist/ui/router.mjs.map +1 -0
  210. package/dist/ui/runtime.cjs +65 -0
  211. package/dist/ui/runtime.cjs.map +1 -0
  212. package/dist/ui/runtime.d.cts +29 -0
  213. package/dist/ui/runtime.d.cts.map +1 -0
  214. package/dist/ui/runtime.d.mts +29 -0
  215. package/dist/ui/runtime.d.mts.map +1 -0
  216. package/dist/ui/runtime.mjs +53 -0
  217. package/dist/ui/runtime.mjs.map +1 -0
  218. package/dist/ui/types.cjs +0 -0
  219. package/dist/ui/types.d.cts +52 -0
  220. package/dist/ui/types.d.cts.map +1 -0
  221. package/dist/ui/types.d.mts +52 -0
  222. package/dist/ui/types.d.mts.map +1 -0
  223. package/dist/ui/types.mjs +1 -0
  224. package/dist/utils/banner.cjs +24 -0
  225. package/dist/utils/banner.cjs.map +1 -0
  226. package/dist/utils/banner.mjs +23 -0
  227. package/dist/utils/banner.mjs.map +1 -0
  228. package/dist/utils/linkify.cjs +15 -0
  229. package/dist/utils/linkify.cjs.map +1 -0
  230. package/dist/utils/linkify.mjs +14 -0
  231. package/dist/utils/linkify.mjs.map +1 -0
  232. package/dist/utils/run.cjs +40 -0
  233. package/dist/utils/run.cjs.map +1 -0
  234. package/dist/utils/run.mjs +39 -0
  235. package/dist/utils/run.mjs.map +1 -0
  236. package/dist/utils/theme.cjs +44 -0
  237. package/dist/utils/theme.cjs.map +1 -0
  238. package/dist/utils/theme.mjs +37 -0
  239. package/dist/utils/theme.mjs.map +1 -0
  240. package/package.json +269 -80
  241. package/src/api-contract.ts +309 -0
  242. package/src/api.ts +181 -0
  243. package/src/app.ts +346 -0
  244. package/src/cli/catalog.ts +49 -0
  245. package/src/cli/help.ts +13 -0
  246. package/src/cli/init.ts +415 -0
  247. package/src/cli/parse.ts +130 -0
  248. package/src/cli/prompts.ts +64 -0
  249. package/src/cli.ts +203 -1507
  250. package/src/components/dev-view.tsx +104 -41
  251. package/src/components/streaming-view.ts +89 -22
  252. package/src/config.ts +462 -532
  253. package/src/contract.meta.ts +96 -0
  254. package/src/contract.ts +164 -561
  255. package/src/dev-logs.ts +85 -0
  256. package/src/dev-session.ts +318 -0
  257. package/src/fastkv.ts +153 -0
  258. package/src/federation.server.ts +43 -0
  259. package/src/host.ts +526 -0
  260. package/src/index.ts +6 -3
  261. package/src/integrity.ts +54 -0
  262. package/src/mf.ts +105 -0
  263. package/src/near-cli.ts +284 -0
  264. package/src/network.ts +3 -0
  265. package/src/orchestrator.ts +648 -0
  266. package/src/plugin.ts +1116 -2303
  267. package/src/process-registry.ts +154 -0
  268. package/src/scripts/sync-api-contract.ts +24 -0
  269. package/src/sdk.ts +14 -0
  270. package/src/shared.ts +206 -0
  271. package/src/types.ts +152 -206
  272. package/src/ui/head.ts +34 -27
  273. package/src/ui/index.ts +3 -3
  274. package/src/ui/metadata.ts +95 -0
  275. package/src/ui/router.ts +22 -6
  276. package/src/ui/runtime.ts +55 -6
  277. package/src/ui/types.ts +24 -11
  278. package/src/utils/banner.ts +10 -6
  279. package/src/utils/run.ts +26 -27
  280. package/src/utils/theme.ts +3 -66
  281. package/src/components/monitor-view.tsx +0 -475
  282. package/src/components/status-view.tsx +0 -173
  283. package/src/lib/env.ts +0 -109
  284. package/src/lib/near-cli.ts +0 -289
  285. package/src/lib/nova.ts +0 -266
  286. package/src/lib/orchestrator.ts +0 -276
  287. package/src/lib/process-registry.ts +0 -166
  288. package/src/lib/process.ts +0 -549
  289. package/src/lib/resource-monitor/assertions.ts +0 -234
  290. package/src/lib/resource-monitor/command.ts +0 -283
  291. package/src/lib/resource-monitor/diff.ts +0 -157
  292. package/src/lib/resource-monitor/errors.ts +0 -127
  293. package/src/lib/resource-monitor/index.ts +0 -305
  294. package/src/lib/resource-monitor/platform/darwin.ts +0 -306
  295. package/src/lib/resource-monitor/platform/index.ts +0 -35
  296. package/src/lib/resource-monitor/platform/linux.ts +0 -332
  297. package/src/lib/resource-monitor/platform/windows.ts +0 -298
  298. package/src/lib/resource-monitor/snapshot.ts +0 -217
  299. package/src/lib/resource-monitor/types.ts +0 -74
  300. package/src/lib/session-recorder/errors.ts +0 -102
  301. package/src/lib/session-recorder/flows/login.ts +0 -210
  302. package/src/lib/session-recorder/index.ts +0 -361
  303. package/src/lib/session-recorder/playwright.ts +0 -257
  304. package/src/lib/session-recorder/report.ts +0 -353
  305. package/src/lib/session-recorder/server.ts +0 -267
  306. package/src/lib/session-recorder/types.ts +0 -115
  307. package/src/lib/sync.ts +0 -1
  308. package/src/ui/files.ts +0 -134
@@ -0,0 +1,284 @@
1
+ import { spawn } from "node:child_process";
2
+ import { generateKeyPairSync } from "node:crypto";
3
+ import { Effect } from "effect";
4
+
5
+ export interface NearTransactionConfig {
6
+ account: string;
7
+ contract: string;
8
+ method: string;
9
+ argsBase64: string;
10
+ network?: "mainnet" | "testnet";
11
+ privateKey?: string;
12
+ gas?: string;
13
+ deposit?: string;
14
+ }
15
+
16
+ export interface NearTransactionResult {
17
+ success: boolean;
18
+ txHash?: string;
19
+ error?: string;
20
+ }
21
+
22
+ export interface NearKeyPair {
23
+ publicKey: string;
24
+ privateKey: string;
25
+ }
26
+
27
+ export interface FunctionCallAccessKeyConfig {
28
+ account: string;
29
+ contract: string;
30
+ allowance: string;
31
+ functionNames: string[];
32
+ network?: "mainnet" | "testnet";
33
+ }
34
+
35
+ const NEAR_CLI_VERSION = "0.23.5";
36
+ const INSTALLER_URL = `https://github.com/near/near-cli-rs/releases/download/v${NEAR_CLI_VERSION}/near-cli-rs-installer.sh`;
37
+ const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
38
+
39
+ export class NearCliNotFoundError extends Error {
40
+ readonly _tag = "NearCliNotFoundError";
41
+ constructor() {
42
+ super("NEAR CLI not found");
43
+ }
44
+ }
45
+
46
+ export class NearCliInstallError extends Error {
47
+ readonly _tag = "NearCliInstallError";
48
+ constructor(message: string) {
49
+ super(`Failed to install NEAR CLI: ${message}`);
50
+ }
51
+ }
52
+
53
+ export class NearTransactionError extends Error {
54
+ readonly _tag = "NearTransactionError";
55
+ }
56
+
57
+ function base64UrlToBytes(input: string): Uint8Array {
58
+ const normalized = input.replace(/-/g, "+").replace(/_/g, "/");
59
+ return new Uint8Array(Buffer.from(normalized, "base64"));
60
+ }
61
+
62
+ function base58Encode(input: Uint8Array): string {
63
+ if (input.length === 0) return "";
64
+
65
+ const digits: number[] = [0];
66
+ for (const byte of input) {
67
+ let carry = byte;
68
+ for (let i = 0; i < digits.length; i++) {
69
+ carry += digits[i]! << 8;
70
+ digits[i] = carry % 58;
71
+ carry = Math.floor(carry / 58);
72
+ }
73
+ while (carry > 0) {
74
+ digits.push(carry % 58);
75
+ carry = Math.floor(carry / 58);
76
+ }
77
+ }
78
+
79
+ let output = "";
80
+ for (const byte of input) {
81
+ if (byte === 0) output += BASE58_ALPHABET[0];
82
+ else break;
83
+ }
84
+
85
+ for (let i = digits.length - 1; i >= 0; i--) {
86
+ output += BASE58_ALPHABET[digits[i]!]!;
87
+ }
88
+
89
+ return output;
90
+ }
91
+
92
+ export function generateNearKeyPair(): NearKeyPair {
93
+ const { publicKey, privateKey } = generateKeyPairSync("ed25519");
94
+ const publicJwk = publicKey.export({ format: "jwk" }) as JsonWebKey;
95
+ const privateJwk = privateKey.export({ format: "jwk" }) as JsonWebKey;
96
+
97
+ if (!publicJwk.x || !privateJwk.d) {
98
+ throw new Error("Failed to generate NEAR keypair");
99
+ }
100
+
101
+ const publicBytes = base64UrlToBytes(publicJwk.x);
102
+ const privateSeed = base64UrlToBytes(privateJwk.d);
103
+ const secretBytes = new Uint8Array(privateSeed.length + publicBytes.length);
104
+ secretBytes.set(privateSeed, 0);
105
+ secretBytes.set(publicBytes, privateSeed.length);
106
+
107
+ return {
108
+ publicKey: `ed25519:${base58Encode(publicBytes)}`,
109
+ privateKey: `ed25519:${base58Encode(secretBytes)}`,
110
+ };
111
+ }
112
+
113
+ const checkNearCliInstalled = Effect.tryPromise({
114
+ try: async () => {
115
+ return await new Promise<boolean>((resolve) => {
116
+ const proc = spawn("near", ["--version"], { stdio: "pipe" });
117
+ proc.on("close", (code) => resolve(code === 0));
118
+ proc.on("error", () => resolve(false));
119
+ });
120
+ },
121
+ catch: () => new Error("Failed to check NEAR CLI"),
122
+ });
123
+
124
+ const installNearCli = Effect.tryPromise({
125
+ try: async () => {
126
+ return await new Promise<void>((resolve, reject) => {
127
+ const proc = spawn(
128
+ "sh",
129
+ ["-c", `curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`],
130
+ {
131
+ stdio: "inherit",
132
+ },
133
+ );
134
+
135
+ proc.on("close", (code) => {
136
+ if (code === 0) resolve();
137
+ else reject(new NearCliInstallError(`Installer exited with code ${code}`));
138
+ });
139
+ proc.on("error", (err) => reject(new NearCliInstallError(err.message)));
140
+ });
141
+ },
142
+ catch: (error) => error as Error,
143
+ });
144
+
145
+ async function runNearCommand(args: string[]): Promise<void> {
146
+ await new Promise<void>((resolve, reject) => {
147
+ const proc = spawn("near", args, {
148
+ stdio: "inherit",
149
+ });
150
+
151
+ proc.on("close", (code) => {
152
+ if (code === 0) resolve();
153
+ else reject(new Error(`near ${args.join(" ")} failed with exit code ${code}`));
154
+ });
155
+
156
+ proc.on("error", (err) => reject(new Error(err.message)));
157
+ });
158
+ }
159
+
160
+ export const ensureNearCli = Effect.gen(function* () {
161
+ const isInstalled = yield* checkNearCliInstalled;
162
+ if (isInstalled) return;
163
+
164
+ if (process.env.BOS_INSTALL_NEAR_CLI === "true") {
165
+ yield* installNearCli;
166
+ return;
167
+ }
168
+
169
+ console.log();
170
+ console.log(" NEAR CLI not found");
171
+
172
+ console.log();
173
+ console.log(` To install manually: curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`);
174
+ console.log();
175
+ yield* Effect.fail(new NearCliNotFoundError());
176
+ });
177
+
178
+ export const executeTransaction = (
179
+ config: NearTransactionConfig,
180
+ ): Effect.Effect<NearTransactionResult, Error> =>
181
+ Effect.gen(function* () {
182
+ const gas = (config.gas || "300Tgas").replace(/\s+/g, "");
183
+ const deposit = (config.deposit || "0NEAR").replace(/\s+/g, "");
184
+ const network = config.network || (config.account.endsWith(".testnet") ? "testnet" : "mainnet");
185
+
186
+ const args = [
187
+ "contract",
188
+ "call-function",
189
+ "as-transaction",
190
+ config.contract,
191
+ config.method,
192
+ "base64-args",
193
+ config.argsBase64,
194
+ "prepaid-gas",
195
+ gas,
196
+ "attached-deposit",
197
+ deposit,
198
+ "sign-as",
199
+ config.account,
200
+ "network-config",
201
+ network,
202
+ ];
203
+
204
+ if (config.privateKey) {
205
+ args.push("sign-with-plaintext-private-key", config.privateKey, "send");
206
+ } else {
207
+ args.push("sign-with-keychain", "send");
208
+ }
209
+
210
+ const output = yield* Effect.tryPromise({
211
+ try: async () => {
212
+ return await new Promise<string>((resolve, reject) => {
213
+ const proc = spawn("near", args, { stdio: ["inherit", "pipe", "pipe"] });
214
+
215
+ let stdout = "";
216
+ let stderr = "";
217
+
218
+ proc.stdout?.on("data", (data) => {
219
+ const text = data.toString();
220
+ stdout += text;
221
+ process.stdout.write(text);
222
+ });
223
+
224
+ proc.stderr?.on("data", (data) => {
225
+ const text = data.toString();
226
+ stderr += text;
227
+ });
228
+
229
+ proc.on("close", (code) => {
230
+ const combined = `${stdout}\n${stderr}`;
231
+ const txHashMatch =
232
+ combined.match(/Transaction ID:\s*([A-Za-z0-9]+)/i) ||
233
+ combined.match(/([A-HJ-NP-Za-km-z1-9]{43,44})/);
234
+ const softSuccess =
235
+ Boolean(txHashMatch?.[1]) &&
236
+ /CodeDoesNotExist/i.test(combined) &&
237
+ /Transaction failed/i.test(combined);
238
+
239
+ if (code === 0 || softSuccess) resolve(combined);
240
+ else reject(new NearTransactionError(stderr || `Transaction failed with code ${code}`));
241
+ });
242
+
243
+ proc.on("error", (err) => reject(new NearTransactionError(err.message)));
244
+ });
245
+ },
246
+ catch: (error) => error as Error,
247
+ });
248
+
249
+ const txHashMatch =
250
+ output.match(/Transaction ID:\s*([A-Za-z0-9]+)/i) ||
251
+ output.match(/([A-HJ-NP-Za-km-z1-9]{43,44})/);
252
+
253
+ return {
254
+ success: true,
255
+ txHash: txHashMatch?.[1] || "unknown",
256
+ };
257
+ });
258
+
259
+ export async function addFunctionCallAccessKey(
260
+ config: FunctionCallAccessKeyConfig,
261
+ ): Promise<NearKeyPair> {
262
+ const keyPair = generateNearKeyPair();
263
+ const args = [
264
+ "account",
265
+ "add-key",
266
+ config.account,
267
+ "grant-function-call-access",
268
+ "--allowance",
269
+ config.allowance,
270
+ "--contract-account-id",
271
+ config.contract,
272
+ "--function-names",
273
+ config.functionNames.join(", "),
274
+ "use-manually-provided-public-key",
275
+ keyPair.publicKey,
276
+ "network-config",
277
+ config.network || (config.account.endsWith(".testnet") ? "testnet" : "mainnet"),
278
+ "sign-with-keychain",
279
+ "send",
280
+ ];
281
+
282
+ await runNearCommand(args);
283
+ return keyPair;
284
+ }
package/src/network.ts ADDED
@@ -0,0 +1,3 @@
1
+ export function getNetworkIdForAccount(account: string): "mainnet" | "testnet" {
2
+ return account.endsWith(".testnet") ? "testnet" : "mainnet";
3
+ }