@stacks/clarinet-sdk 3.23.2 → 3.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/cjs/common/src/sdkProxy.d.ts +32 -0
  2. package/dist/cjs/common/src/sdkProxy.js +88 -0
  3. package/dist/cjs/common/src/sdkProxy.js.map +1 -0
  4. package/dist/cjs/common/src/sdkProxyHelpers.d.ts +34 -12
  5. package/dist/cjs/common/src/sdkProxyHelpers.js +40 -8
  6. package/dist/cjs/common/src/sdkProxyHelpers.js.map +1 -1
  7. package/dist/cjs/node/src/debugClient.d.ts +78 -0
  8. package/dist/cjs/node/src/debugClient.js +242 -0
  9. package/dist/cjs/node/src/debugClient.js.map +1 -0
  10. package/dist/cjs/node/src/index.d.ts +3 -1
  11. package/dist/cjs/node/src/index.js +21 -1
  12. package/dist/cjs/node/src/index.js.map +1 -1
  13. package/dist/cjs/node/src/sdkProxy.d.ts +3 -10
  14. package/dist/cjs/node/src/sdkProxy.js +7 -98
  15. package/dist/cjs/node/src/sdkProxy.js.map +1 -1
  16. package/dist/cjs/node/src/syncDebugSimnet.d.ts +46 -0
  17. package/dist/cjs/node/src/syncDebugSimnet.js +180 -0
  18. package/dist/cjs/node/src/syncDebugSimnet.js.map +1 -0
  19. package/dist/cjs/node/src/syncDebugSocket.d.ts +12 -0
  20. package/dist/cjs/node/src/syncDebugSocket.js +281 -0
  21. package/dist/cjs/node/src/syncDebugSocket.js.map +1 -0
  22. package/dist/cjs/node/src/vfs.d.ts +2 -2
  23. package/dist/cjs/node/src/vfs.js.map +1 -1
  24. package/dist/cjs/node/tsconfig.cjs.tsbuildinfo +1 -1
  25. package/dist/esm/common/src/sdkProxy.d.ts +32 -0
  26. package/dist/esm/common/src/sdkProxy.js +85 -0
  27. package/dist/esm/common/src/sdkProxy.js.map +1 -0
  28. package/dist/esm/common/src/sdkProxyHelpers.d.ts +34 -12
  29. package/dist/esm/common/src/sdkProxyHelpers.js +40 -9
  30. package/dist/esm/common/src/sdkProxyHelpers.js.map +1 -1
  31. package/dist/esm/node/src/debugClient.d.ts +78 -0
  32. package/dist/esm/node/src/debugClient.js +204 -0
  33. package/dist/esm/node/src/debugClient.js.map +1 -0
  34. package/dist/esm/node/src/index.d.ts +3 -1
  35. package/dist/esm/node/src/index.js +18 -0
  36. package/dist/esm/node/src/index.js.map +1 -1
  37. package/dist/esm/node/src/sdkProxy.d.ts +3 -10
  38. package/dist/esm/node/src/sdkProxy.js +8 -99
  39. package/dist/esm/node/src/sdkProxy.js.map +1 -1
  40. package/dist/esm/node/src/syncDebugSimnet.d.ts +46 -0
  41. package/dist/esm/node/src/syncDebugSimnet.js +177 -0
  42. package/dist/esm/node/src/syncDebugSimnet.js.map +1 -0
  43. package/dist/esm/node/src/syncDebugSocket.d.ts +12 -0
  44. package/dist/esm/node/src/syncDebugSocket.js +276 -0
  45. package/dist/esm/node/src/syncDebugSocket.js.map +1 -0
  46. package/dist/esm/node/src/vfs.d.ts +2 -2
  47. package/dist/esm/node/src/vitest/index.d.ts +20 -20
  48. package/dist/esm/node/src/vitest/index.js.map +1 -1
  49. package/dist/esm/node/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +11 -10
@@ -1,16 +1,47 @@
1
- import { Cl } from "@stacks/transactions";
1
+ import { Cl, PostConditionMode, postConditionToHex, serializePostConditionWire, } from "@stacks/transactions";
2
+ export function serializePostConditions(options) {
3
+ const conditions = options?.postConditions;
4
+ const mode = options?.postConditionMode;
5
+ // Preserve the distinction between an omitted list and an explicit empty one.
6
+ return {
7
+ ...(conditions !== undefined && {
8
+ postConditions: conditions.map((pc) => {
9
+ if (typeof pc === "string")
10
+ return pc;
11
+ return typeof pc.type === "string"
12
+ ? postConditionToHex(pc)
13
+ : serializePostConditionWire(pc);
14
+ }),
15
+ }),
16
+ ...(mode !== undefined && {
17
+ postConditionMode: mode === PostConditionMode.Allow
18
+ ? "allow"
19
+ : mode === PostConditionMode.Deny
20
+ ? "deny"
21
+ : mode === PostConditionMode.Originator
22
+ ? "originator"
23
+ : mode,
24
+ }),
25
+ };
26
+ }
2
27
  export const tx = {
3
- callPublicFn: (contract, method, args, sender) => ({
4
- callPublicFn: { contract, method, args, sender },
28
+ callPublicFn: (contract, method, args, sender, options) => ({
29
+ callPublicFn: { contract, method, args, sender, ...serializePostConditions(options) },
5
30
  }),
6
- callPrivateFn: (contract, method, args, sender) => ({
7
- callPrivateFn: { contract, method, args, sender },
31
+ callPrivateFn: (contract, method, args, sender, options) => ({
32
+ callPrivateFn: { contract, method, args, sender, ...serializePostConditions(options) },
8
33
  }),
9
- deployContract: (name, content, options, sender) => ({
10
- deployContract: { name, content, options, sender },
34
+ deployContract: (name, content, options, sender, postConditionOptions) => ({
35
+ deployContract: {
36
+ name,
37
+ content,
38
+ options,
39
+ sender,
40
+ ...serializePostConditions(postConditionOptions),
41
+ },
11
42
  }),
12
- transferSTX: (amount, recipient, sender) => ({
13
- transferSTX: { amount, recipient, sender },
43
+ transferSTX: (amount, recipient, sender, options) => ({
44
+ transferSTX: { amount, recipient, sender, ...serializePostConditions(options) },
14
45
  }),
15
46
  };
16
47
  export function parseEvents(events) {
@@ -1 +1 @@
1
- {"version":3,"file":"sdkProxyHelpers.js","sourceRoot":"","sources":["../../../../../common/src/sdkProxyHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAgC,MAAM,sBAAsB,CAAC;AA6FxE,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,YAAY,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAE,IAAoB,EAAE,MAAc,EAAM,EAAE,CAAC,CAAC;QAC7F,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;KACjD,CAAC;IACF,aAAa,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAE,IAAoB,EAAE,MAAc,EAAM,EAAE,CAAC,CAAC;QAC9F,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;KAClD,CAAC;IACF,cAAc,EAAE,CACd,IAAY,EACZ,OAAe,EACf,OAAqC,EACrC,MAAc,EACV,EAAE,CAAC,CAAC;QACR,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;KACnD,CAAC;IACF,WAAW,EAAE,CAAC,MAAc,EAAE,SAAiB,EAAE,MAAc,EAAM,EAAE,CAAC,CAAC;QACvE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;KAC3C,CAAC;CACH,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,CAAC;QACH,6BAA6B;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO;YACL,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,YAAY;YAC1B,KAAK,EAAE;gBACL,WAAW,EAAE,KAAK,CAAC,YAAY;gBAC/B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;YACD,KAAK,EAAE;gBACL,WAAW,EAAE,KAAK,CAAC,YAAY;gBAC/B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sdkProxyHelpers.js","sourceRoot":"","sources":["../../../../../common/src/sdkProxyHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import * as net from "net";
2
+ import { type ChildProcess } from "child_process";
3
+ import { type ClarityValue } from "@stacks/transactions";
4
+ export type DebugCallResult = {
5
+ /** The Clarity return value as a human-readable string, e.g. `"(ok u1)"`. */
6
+ value: string;
7
+ };
8
+ /**
9
+ * A client that connects to a `clarinet dap --dap-port … --sdk-port …` server
10
+ * and evaluates Clarity expressions under DAP debugger control.
11
+ *
12
+ * Breakpoints set in VSCode (or another DAP-capable editor) in `.clar` source
13
+ * files will be hit when the corresponding contract code is reached.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const debugger = await startDebugServer();
18
+ * const result = await debugger.callPublicFn("counter", "increment", [], deployer);
19
+ * expect(result.value).toBe("(ok u1)");
20
+ * await debugger.disconnect();
21
+ * ```
22
+ */
23
+ export declare class DebugClient {
24
+ private readonly socket;
25
+ private nextId;
26
+ private readonly pending;
27
+ private buffer;
28
+ /** Set when this client owns the `clarinet dap` process (via `startDebugServer`). */
29
+ private readonly _process?;
30
+ constructor(socket: net.Socket, process?: ChildProcess);
31
+ private send;
32
+ /**
33
+ * Call a public contract function through the debug server.
34
+ * Breakpoints in the contract source will pause execution.
35
+ */
36
+ callPublicFn(contract: string, method: string, args: ClarityValue[], sender: string): Promise<DebugCallResult>;
37
+ /**
38
+ * Evaluate an arbitrary Clarity snippet in the simnet session under the debugger.
39
+ */
40
+ execute(snippet: string): Promise<DebugCallResult>;
41
+ /** Gracefully disconnect from the debug server. */
42
+ disconnect(): Promise<void>;
43
+ }
44
+ /**
45
+ * Start or connect to a `clarinet dap` debug server and return a
46
+ * {@link DebugClient}.
47
+ *
48
+ * **Auto-spawn mode** (default): when no `port` is provided and
49
+ * `CLARINET_DEBUG_PORT` is not set, `clarinet dap` is spawned automatically.
50
+ * The returned client owns the process and kills it on
51
+ * {@link DebugClient.disconnect}.
52
+ *
53
+ * **Connect mode**: when `port` is provided (or `CLARINET_DEBUG_PORT` is set),
54
+ * the function connects to a server that is already running — for example one
55
+ * started by the VSCode extension's CodeLens button.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * // Zero-config — server is spawned automatically
60
+ * const client = await startDebugServer({ manifest: "./Clarinet.toml" });
61
+ * const result = await client.callPublicFn("counter", "increment", [], deployer);
62
+ * await client.disconnect();
63
+ * ```
64
+ */
65
+ export declare function startDebugServer(options?: {
66
+ /** Path to Clarinet.toml. Defaults to `"./Clarinet.toml"`. */
67
+ manifest?: string;
68
+ /**
69
+ * Connect to this port instead of spawning a new server.
70
+ * Falls back to `CLARINET_DEBUG_PORT` env var, then auto-spawn.
71
+ */
72
+ port?: number;
73
+ /**
74
+ * When auto-spawning, also open a DAP port so a DAP client (e.g. VSCode)
75
+ * can attach and hit breakpoints. Ignored in connect mode.
76
+ */
77
+ dapPort?: number;
78
+ }): Promise<DebugClient>;
@@ -0,0 +1,204 @@
1
+ import * as net from "net";
2
+ import { spawn } from "child_process";
3
+ import { Cl } from "@stacks/transactions";
4
+ /**
5
+ * A client that connects to a `clarinet dap --dap-port … --sdk-port …` server
6
+ * and evaluates Clarity expressions under DAP debugger control.
7
+ *
8
+ * Breakpoints set in VSCode (or another DAP-capable editor) in `.clar` source
9
+ * files will be hit when the corresponding contract code is reached.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const debugger = await startDebugServer();
14
+ * const result = await debugger.callPublicFn("counter", "increment", [], deployer);
15
+ * expect(result.value).toBe("(ok u1)");
16
+ * await debugger.disconnect();
17
+ * ```
18
+ */
19
+ export class DebugClient {
20
+ socket;
21
+ nextId = 1;
22
+ pending = new Map();
23
+ buffer = "";
24
+ /** Set when this client owns the `clarinet dap` process (via `startDebugServer`). */
25
+ _process;
26
+ constructor(socket, process) {
27
+ this.socket = socket;
28
+ this._process = process;
29
+ socket.on("data", (chunk) => {
30
+ this.buffer += chunk.toString("utf8");
31
+ const lines = this.buffer.split("\n");
32
+ // Keep any incomplete line in the buffer
33
+ this.buffer = lines.pop() ?? "";
34
+ for (const line of lines) {
35
+ const trimmed = line.trim();
36
+ if (!trimmed)
37
+ continue;
38
+ try {
39
+ const response = JSON.parse(trimmed);
40
+ const pending = this.pending.get(response.id);
41
+ if (pending) {
42
+ this.pending.delete(response.id);
43
+ pending.resolve(response);
44
+ }
45
+ }
46
+ catch {
47
+ // Ignore malformed lines
48
+ }
49
+ }
50
+ });
51
+ const rejectPending = (err) => {
52
+ for (const { reject } of this.pending.values()) {
53
+ reject(err);
54
+ }
55
+ this.pending.clear();
56
+ };
57
+ socket.on("error", rejectPending);
58
+ socket.on("close", () => {
59
+ rejectPending(new Error("debug server connection closed"));
60
+ });
61
+ }
62
+ send(request) {
63
+ const id = this.nextId++;
64
+ return new Promise((resolve, reject) => {
65
+ this.pending.set(id, { resolve, reject });
66
+ this.socket.write(JSON.stringify({ ...request, id }) + "\n");
67
+ });
68
+ }
69
+ /**
70
+ * Call a public contract function through the debug server.
71
+ * Breakpoints in the contract source will pause execution.
72
+ */
73
+ async callPublicFn(contract, method, args, sender) {
74
+ const argStrings = args.map((a) => Cl.stringify(a));
75
+ const response = await this.send({
76
+ method: "call",
77
+ contract,
78
+ function: method,
79
+ args: argStrings,
80
+ sender,
81
+ });
82
+ if (response.error)
83
+ throw new Error(response.error);
84
+ return { value: Cl.stringify(Cl.deserialize(response.result.result)) };
85
+ }
86
+ /**
87
+ * Evaluate an arbitrary Clarity snippet in the simnet session under the debugger.
88
+ */
89
+ async execute(snippet) {
90
+ const response = await this.send({ method: "eval", snippet });
91
+ if (response.error)
92
+ throw new Error(response.error);
93
+ return { value: Cl.stringify(Cl.deserialize(response.result.result)) };
94
+ }
95
+ /** Gracefully disconnect from the debug server. */
96
+ async disconnect() {
97
+ try {
98
+ await this.send({ method: "disconnect" });
99
+ }
100
+ finally {
101
+ this.socket.destroy();
102
+ try {
103
+ this._process?.kill();
104
+ }
105
+ catch {
106
+ // ignore: process may have already exited
107
+ }
108
+ }
109
+ }
110
+ }
111
+ function openSocket(port) {
112
+ return new Promise((resolve, reject) => {
113
+ const socket = net.createConnection({ port, host: "127.0.0.1" }, () => {
114
+ socket.removeListener("error", reject);
115
+ resolve(socket);
116
+ });
117
+ socket.once("error", reject);
118
+ });
119
+ }
120
+ /**
121
+ * Start or connect to a `clarinet dap` debug server and return a
122
+ * {@link DebugClient}.
123
+ *
124
+ * **Auto-spawn mode** (default): when no `port` is provided and
125
+ * `CLARINET_DEBUG_PORT` is not set, `clarinet dap` is spawned automatically.
126
+ * The returned client owns the process and kills it on
127
+ * {@link DebugClient.disconnect}.
128
+ *
129
+ * **Connect mode**: when `port` is provided (or `CLARINET_DEBUG_PORT` is set),
130
+ * the function connects to a server that is already running — for example one
131
+ * started by the VSCode extension's CodeLens button.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * // Zero-config — server is spawned automatically
136
+ * const client = await startDebugServer({ manifest: "./Clarinet.toml" });
137
+ * const result = await client.callPublicFn("counter", "increment", [], deployer);
138
+ * await client.disconnect();
139
+ * ```
140
+ */
141
+ export async function startDebugServer(options) {
142
+ const envPort = process.env["CLARINET_DEBUG_PORT"]
143
+ ? Number(process.env["CLARINET_DEBUG_PORT"])
144
+ : undefined;
145
+ const connectPort = options?.port ?? envPort;
146
+ // Connect mode: server is already running externally.
147
+ if (connectPort != null) {
148
+ const socket = await openSocket(connectPort);
149
+ return new DebugClient(socket);
150
+ }
151
+ // Auto-spawn mode: launch clarinet dap ourselves. Ask the OS for a free SDK
152
+ // port so parallel test runs don't contend for a fixed port.
153
+ let sdkPort;
154
+ const manifest = options?.manifest ?? "./Clarinet.toml";
155
+ const args = ["dap", "--sdk-port", "0", "--manifest", manifest];
156
+ if (options?.dapPort != null) {
157
+ args.push("--dap-port", String(options.dapPort));
158
+ }
159
+ const child = spawn("clarinet", args, {
160
+ stdio: ["ignore", "ignore", "pipe"],
161
+ });
162
+ // Wait for the ready signal printed to stderr by run_dap_server.
163
+ await new Promise((resolve, reject) => {
164
+ const readyPattern = /CLARINET_DAP_SDK_READY:(\d+)/;
165
+ let stderrBuf = "";
166
+ const timeout = setTimeout(() => reject(new Error("clarinet dap server did not start within 15 s")), 15_000);
167
+ const cleanup = () => {
168
+ clearTimeout(timeout);
169
+ child.stderr.removeListener("data", onStderr);
170
+ child.removeListener("error", onError);
171
+ child.removeListener("exit", onExit);
172
+ };
173
+ const onStderr = (chunk) => {
174
+ stderrBuf += chunk.toString("utf8");
175
+ const match = readyPattern.exec(stderrBuf);
176
+ if (match) {
177
+ sdkPort = Number(match[1]);
178
+ cleanup();
179
+ // Keep draining stderr so the pipe doesn't fill and block the server,
180
+ // and so crash messages appear in the parent process output.
181
+ child.stderr.on("data", (c) => process.stderr.write(c));
182
+ resolve();
183
+ }
184
+ };
185
+ const onError = (err) => {
186
+ cleanup();
187
+ reject(new Error(`failed to spawn clarinet: ${err.message}`));
188
+ };
189
+ const onExit = (code) => {
190
+ cleanup();
191
+ reject(new Error(`clarinet dap exited unexpectedly with code ${code}`));
192
+ };
193
+ child.stderr.on("data", onStderr);
194
+ child.on("error", onError);
195
+ child.on("exit", onExit);
196
+ });
197
+ if (sdkPort == null) {
198
+ child.kill();
199
+ throw new Error("clarinet dap did not report an SDK port");
200
+ }
201
+ const socket = await openSocket(sdkPort);
202
+ return new DebugClient(socket, child);
203
+ }
204
+ //# sourceMappingURL=debugClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debugClient.js","sourceRoot":"","sources":["../../../../src/debugClient.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export { tx, type ClarityEvent, type ParsedTransactionResult, type DeployContractOptions, type Tx, type TransferSTX, } from "../../common/src/sdkProxyHelpers.js";
2
+ import type { SDK } from "@stacks/clarinet-sdk-wasm";
2
3
  import { Simnet } from "./sdkProxy.js";
3
4
  export { type Simnet } from "./sdkProxy.js";
4
5
  type Options = {
@@ -14,4 +15,5 @@ export declare const initSimnet: (manifestPath?: string, noCache?: boolean, opti
14
15
  trackPerformance?: boolean;
15
16
  performanceCostField?: string;
16
17
  apiUrl?: string;
17
- }) => Promise<Simnet>;
18
+ }) => Promise<import("../../common/src/sdkProxy.js").ProxiedSimnet<SDK>>;
19
+ export { startDebugServer, DebugClient, type DebugCallResult, } from "./debugClient.js";
@@ -1,6 +1,8 @@
1
1
  export { tx, } from "../../common/src/sdkProxyHelpers.js";
2
2
  import { vfs } from "./vfs.js";
3
3
  import { getSessionProxy } from "./sdkProxy.js";
4
+ import { connectSyncSocket } from "./syncDebugSocket.js";
5
+ import { createSyncDebugSimnet } from "./syncDebugSimnet.js";
4
6
  const wasmModule = import("@stacks/clarinet-sdk-wasm");
5
7
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json
6
8
  // @ts-ignore
@@ -28,7 +30,22 @@ export async function generateDeployement(manifestPath = "./Clarinet.toml") {
28
30
  // load wasm only once and memoize it
29
31
  function memoizedInit() {
30
32
  let simnet = null;
33
+ // When CLARINET_DEBUG_PORT is set, a single debug proxy is shared across all calls.
34
+ let debugSimnet = null;
31
35
  return async (manifestPath = "./Clarinet.toml", noCache = false, options) => {
36
+ const debugPort = process.env["CLARINET_DEBUG_PORT"]
37
+ ? Number(process.env["CLARINET_DEBUG_PORT"])
38
+ : undefined;
39
+ if (debugPort != null) {
40
+ // Connect to the debug server (no-op if already connected).
41
+ await connectSyncSocket(debugPort);
42
+ if (!debugSimnet || noCache) {
43
+ debugSimnet = createSyncDebugSimnet();
44
+ }
45
+ // Tell the server to reinitialise its session (mirrors initSession semantics).
46
+ await debugSimnet.initSession(process.cwd(), manifestPath, options);
47
+ return debugSimnet;
48
+ }
32
49
  if (noCache || !simnet) {
33
50
  simnet = await getSDK(options);
34
51
  }
@@ -38,4 +55,5 @@ function memoizedInit() {
38
55
  };
39
56
  }
40
57
  export const initSimnet = memoizedInit();
58
+ export { startDebugServer, DebugClient, } from "./debugClient.js";
41
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,GAMH,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAU,eAAe,EAAE,MAAM,eAAe,CAAC;AAIxD,MAAM,UAAU,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAEvD,0GAA0G;AAC1G,aAAa;AACb,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG;IACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC;AAQF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB;IAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;IAChC,IAAI,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,CACpC,CAAC,CAAC,OAAO,EAAE,UAAU,EACrB,CAAC,CAAC,OAAO,EAAE,aAAa,EACxB,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAC5B,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,KAAK,CACtB,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,EAC/B,eAAe,EAAuB,CAClB,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAY,GAAG,iBAAiB;IACxE,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,SAAS,YAAY;IACnB,IAAI,MAAM,GAAkB,IAAI,CAAC;IAEjC,OAAO,KAAK,EACV,YAAY,GAAG,iBAAiB,EAChC,OAAO,GAAG,KAAK,EACf,OAMC,EACD,EAAE;QACF,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,4 @@
1
1
  import { type SDK } from "@stacks/clarinet-sdk-wasm";
2
- import { type CallFn, type DeployContract, type GetDataVar, type GetMapEntry, type MineBlock, type Execute, type TransferSTX } from "../../common/src/sdkProxyHelpers.js";
3
- /** @deprecated use `simnet.execute(command)` instead */
4
- type RunSnippet = SDK["runSnippet"];
5
- export type Simnet = {
6
- [K in keyof SDK]: K extends "callReadOnlyFn" | "callPublicFn" | "callPrivateFn" ? CallFn : K extends "execute" ? Execute : K extends "runSnippet" ? RunSnippet : K extends "deployContract" ? DeployContract : K extends "transferSTX" ? TransferSTX : K extends "mineBlock" ? MineBlock : K extends "getDataVar" ? GetDataVar : K extends "getMapEntry" ? GetMapEntry : SDK[K];
7
- };
8
- export declare function getSessionProxy(): {
9
- get(session: SDK, prop: keyof SDK, receiver: any): string | number | CallFn | DeployContract | TransferSTX | MineBlock | GetMapEntry | ((include_boot_contracts: boolean, boot_contracts_path: string) => import("@stacks/clarinet-sdk-wasm").SessionReport) | ((cost_field: string) => void) | ((cwd: string, manifest_path: string, api_base_url: any) => Promise<void>) | ((count?: number | null) => number) | ((token: string, recipient: string, amount: bigint) => string) | ((recipient: string, amount: bigint) => string) | ((addresses: string[]) => void);
10
- };
11
- export {};
2
+ import { type ProxiedSimnet } from "../../common/src/sdkProxy.js";
3
+ export type Simnet = ProxiedSimnet<SDK>;
4
+ export declare function getSessionProxy(): ProxyHandler<SDK>;
@@ -1,102 +1,11 @@
1
- import { Cl, serializeCVBytes } from "@stacks/transactions";
2
- import { CallFnArgs, DeployContractArgs, TransferSTXArgs, ContractOptions, } from "@stacks/clarinet-sdk-wasm";
3
- import { parseEvents, parseCosts, } from "../../common/src/sdkProxyHelpers.js";
4
- function parseTxResponse(response) {
5
- return {
6
- result: Cl.deserialize(response.result),
7
- events: parseEvents(response.events),
8
- costs: parseCosts(response.costs),
9
- performance: response.performance,
10
- };
11
- }
1
+ import { CallFnArgs, ContractOptions, DeployContractArgs, TransferSTXArgs, } from "@stacks/clarinet-sdk-wasm";
2
+ import { createSessionProxy } from "../../common/src/sdkProxy.js";
12
3
  export function getSessionProxy() {
13
- return {
14
- get(session, prop, receiver) {
15
- // some of the WASM methods are proxied here to:
16
- // - serialize clarity values input argument
17
- // - deserialize output into clarity values
18
- if (prop === "callReadOnlyFn" || prop === "callPublicFn" || prop === "callPrivateFn") {
19
- const callFn = (contract, method, args, sender) => {
20
- const response = session[prop](new CallFnArgs(contract, method, args.map(serializeCVBytes), sender));
21
- return parseTxResponse(response);
22
- };
23
- return callFn;
24
- }
25
- if (prop === "execute") {
26
- const execute = (snippet) => {
27
- const response = session.execute(snippet);
28
- return parseTxResponse(response);
29
- };
30
- return execute;
31
- }
32
- if (prop === "deployContract") {
33
- const callDeployContract = (name, content, options, sender) => {
34
- const rustOptions = options
35
- ? new ContractOptions(options.clarityVersion)
36
- : new ContractOptions();
37
- const response = session.deployContract(new DeployContractArgs(name, content, rustOptions, sender));
38
- return parseTxResponse(response);
39
- };
40
- return callDeployContract;
41
- }
42
- if (prop === "transferSTX") {
43
- const callTransferSTX = (amount, ...args) => {
44
- const response = session.transferSTX(new TransferSTXArgs(BigInt(amount), ...args));
45
- return parseTxResponse(response);
46
- };
47
- return callTransferSTX;
48
- }
49
- if (prop === "mineBlock") {
50
- const callMineBlock = (txs) => {
51
- const serializedTxs = txs.map((tx) => {
52
- if (tx.callPublicFn) {
53
- return {
54
- callPublicFn: {
55
- ...tx.callPublicFn,
56
- args_maps: tx.callPublicFn.args.map(serializeCVBytes),
57
- },
58
- };
59
- }
60
- if (tx.callPrivateFn) {
61
- return {
62
- callPrivateFn: {
63
- ...tx.callPrivateFn,
64
- args_maps: tx.callPrivateFn.args.map(serializeCVBytes),
65
- },
66
- };
67
- }
68
- if (tx.deployContract) {
69
- return {
70
- deployContract: {
71
- ...tx.deployContract,
72
- },
73
- };
74
- }
75
- return tx;
76
- });
77
- const responses = session.mineBlock(serializedTxs);
78
- return responses.map(parseTxResponse);
79
- };
80
- return callMineBlock;
81
- }
82
- if (prop === "getDataVar") {
83
- const getDataVar = (...args) => {
84
- const response = session.getDataVar(...args);
85
- const result = Cl.deserialize(response);
86
- return result;
87
- };
88
- return getDataVar;
89
- }
90
- if (prop === "getMapEntry") {
91
- const getMapEntry = (contract, mapName, mapKey) => {
92
- const response = session.getMapEntry(contract, mapName, serializeCVBytes(mapKey));
93
- const result = Cl.deserialize(response);
94
- return result;
95
- };
96
- return getMapEntry;
97
- }
98
- return Reflect.get(session, prop, receiver);
99
- },
100
- };
4
+ return createSessionProxy({
5
+ CallFnArgs,
6
+ ContractOptions,
7
+ DeployContractArgs,
8
+ TransferSTXArgs,
9
+ });
101
10
  }
102
11
  //# sourceMappingURL=sdkProxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdkProxy.js","sourceRoot":"","sources":["../../../../src/sdkProxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdkProxy.js","sourceRoot":"","sources":["../../../../src/sdkProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,GAEhB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,8BAA8B,CAAC;AAItF,MAAM,UAAU,eAAe;IAC7B,OAAO,kBAAkB,CAAuB;QAC9C,UAAU;QACV,eAAe;QACf,kBAAkB;QAClB,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Synchronous simnet proxy that routes all calls to a `clarinet dap` debug server
3
+ * via a SharedArrayBuffer + Atomics.wait worker (see syncDebugSocket.ts).
4
+ *
5
+ * When CLARINET_DEBUG_PORT is set, initSimnet() returns one of these instead of
6
+ * the WASM simnet. The API surface is identical, so existing tests run unchanged
7
+ * while breakpoints in .clar files fire in VSCode (or any DAP-capable editor).
8
+ */
9
+ import { type ClarityValue } from "@stacks/transactions";
10
+ import { type ParsedTransactionResult, type Tx } from "../../common/src/sdkProxyHelpers.js";
11
+ export type SyncDebugSimnet = {
12
+ readonly deployer: string;
13
+ readonly blockHeight: number;
14
+ readonly burnBlockHeight: number;
15
+ readonly stacksBlockHeight: number;
16
+ getAccounts(): Map<string, string>;
17
+ mineBlock(txs: Tx[]): ParsedTransactionResult[];
18
+ mineEmptyBlock(count?: number): number;
19
+ mineEmptyStacksBlock(): number;
20
+ callPublicFn(contract: string, method: string, args: ClarityValue[], sender: string): ParsedTransactionResult;
21
+ callReadOnlyFn(contract: string, method: string, args: ClarityValue[], sender: string): ParsedTransactionResult;
22
+ callPrivateFn(contract: string, method: string, args: ClarityValue[], sender: string): ParsedTransactionResult;
23
+ execute(snippet: string): ParsedTransactionResult;
24
+ runSnippet(snippet: string): string;
25
+ getAssetsMap(): Map<string, Map<string, bigint>>;
26
+ getLastContractCallTrace(): string | undefined;
27
+ setCurrentTestName(name: string): void;
28
+ collectReport(includeBootContracts: boolean, bootContractsPath: string): {
29
+ coverage: string;
30
+ costs: string;
31
+ };
32
+ initSession(cwd: string, manifestPath: string, options?: {
33
+ trackCosts: boolean;
34
+ trackCoverage: boolean;
35
+ trackPerformance?: boolean;
36
+ performanceCostField?: string;
37
+ apiUrl?: string;
38
+ }): Promise<void>;
39
+ };
40
+ /**
41
+ * Create a synchronous debug simnet proxy connected to the debug server at the
42
+ * given port. The caller must have already called `connectSyncSocket(port)`.
43
+ *
44
+ * `deployer` is fetched immediately (synchronously) from the server.
45
+ */
46
+ export declare function createSyncDebugSimnet(): SyncDebugSimnet;