@minicor/mcp-server 3.6.0 → 3.9.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 (100) hide show
  1. package/README.md +66 -1
  2. package/dist/__tests__/builder-discovery.test.d.ts +2 -0
  3. package/dist/__tests__/builder-discovery.test.d.ts.map +1 -0
  4. package/dist/__tests__/builder-discovery.test.js +120 -0
  5. package/dist/__tests__/builder-discovery.test.js.map +1 -0
  6. package/dist/__tests__/codemode.test.js +35 -0
  7. package/dist/__tests__/codemode.test.js.map +1 -1
  8. package/dist/__tests__/config-stores.test.d.ts +2 -0
  9. package/dist/__tests__/config-stores.test.d.ts.map +1 -0
  10. package/dist/__tests__/config-stores.test.js +88 -0
  11. package/dist/__tests__/config-stores.test.js.map +1 -0
  12. package/dist/__tests__/dev-mode-draft.test.d.ts +2 -0
  13. package/dist/__tests__/dev-mode-draft.test.d.ts.map +1 -0
  14. package/dist/__tests__/dev-mode-draft.test.js +260 -0
  15. package/dist/__tests__/dev-mode-draft.test.js.map +1 -0
  16. package/dist/__tests__/disk-token-store.test.d.ts +2 -0
  17. package/dist/__tests__/disk-token-store.test.d.ts.map +1 -0
  18. package/dist/__tests__/disk-token-store.test.js +231 -0
  19. package/dist/__tests__/disk-token-store.test.js.map +1 -0
  20. package/dist/__tests__/laminar-client.test.js +154 -0
  21. package/dist/__tests__/laminar-client.test.js.map +1 -1
  22. package/dist/__tests__/lib-dev-mode.test.d.ts +2 -0
  23. package/dist/__tests__/lib-dev-mode.test.d.ts.map +1 -0
  24. package/dist/__tests__/lib-dev-mode.test.js +48 -0
  25. package/dist/__tests__/lib-dev-mode.test.js.map +1 -0
  26. package/dist/__tests__/paths.test.d.ts +2 -0
  27. package/dist/__tests__/paths.test.d.ts.map +1 -0
  28. package/dist/__tests__/paths.test.js +55 -0
  29. package/dist/__tests__/paths.test.js.map +1 -0
  30. package/dist/__tests__/recording-frames.test.d.ts +2 -0
  31. package/dist/__tests__/recording-frames.test.d.ts.map +1 -0
  32. package/dist/__tests__/recording-frames.test.js +46 -0
  33. package/dist/__tests__/recording-frames.test.js.map +1 -0
  34. package/dist/__tests__/server-profile.test.d.ts +2 -0
  35. package/dist/__tests__/server-profile.test.d.ts.map +1 -0
  36. package/dist/__tests__/server-profile.test.js +311 -0
  37. package/dist/__tests__/server-profile.test.js.map +1 -0
  38. package/dist/builder-index.d.ts +3 -0
  39. package/dist/builder-index.d.ts.map +1 -0
  40. package/dist/builder-index.js +5 -0
  41. package/dist/builder-index.js.map +1 -0
  42. package/dist/cli.js +4 -3
  43. package/dist/cli.js.map +1 -1
  44. package/dist/codemode.d.ts +3 -1
  45. package/dist/codemode.d.ts.map +1 -1
  46. package/dist/codemode.js +20 -6
  47. package/dist/codemode.js.map +1 -1
  48. package/dist/disk-token-store.d.ts +101 -0
  49. package/dist/disk-token-store.d.ts.map +1 -0
  50. package/dist/disk-token-store.js +398 -0
  51. package/dist/disk-token-store.js.map +1 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +98 -111
  54. package/dist/index.js.map +1 -1
  55. package/dist/laminar-client.d.ts +111 -0
  56. package/dist/laminar-client.d.ts.map +1 -1
  57. package/dist/laminar-client.js +47 -1
  58. package/dist/laminar-client.js.map +1 -1
  59. package/dist/lib.d.ts +4 -0
  60. package/dist/lib.d.ts.map +1 -1
  61. package/dist/lib.js +53 -58
  62. package/dist/lib.js.map +1 -1
  63. package/dist/paths.d.ts +4 -0
  64. package/dist/paths.d.ts.map +1 -1
  65. package/dist/paths.js +33 -0
  66. package/dist/paths.js.map +1 -1
  67. package/dist/prompts/debug-execution.d.ts.map +1 -1
  68. package/dist/prompts/debug-execution.js +3 -2
  69. package/dist/prompts/debug-execution.js.map +1 -1
  70. package/dist/recording-frames.d.ts +58 -0
  71. package/dist/recording-frames.d.ts.map +1 -0
  72. package/dist/recording-frames.js +244 -0
  73. package/dist/recording-frames.js.map +1 -0
  74. package/dist/seed-skills.js +3 -2
  75. package/dist/seed-skills.js.map +1 -1
  76. package/dist/server-profile.d.ts +11 -0
  77. package/dist/server-profile.d.ts.map +1 -0
  78. package/dist/server-profile.js +104 -0
  79. package/dist/server-profile.js.map +1 -0
  80. package/dist/setup.d.ts +1 -0
  81. package/dist/setup.d.ts.map +1 -1
  82. package/dist/setup.js +81 -71
  83. package/dist/setup.js.map +1 -1
  84. package/dist/tools/builder-discovery.d.ts +17 -0
  85. package/dist/tools/builder-discovery.d.ts.map +1 -0
  86. package/dist/tools/builder-discovery.js +131 -0
  87. package/dist/tools/builder-discovery.js.map +1 -0
  88. package/dist/tools/core.d.ts.map +1 -1
  89. package/dist/tools/core.js +117 -43
  90. package/dist/tools/core.js.map +1 -1
  91. package/dist/tools/dev-mode-draft.d.ts +3 -0
  92. package/dist/tools/dev-mode-draft.d.ts.map +1 -0
  93. package/dist/tools/dev-mode-draft.js +279 -0
  94. package/dist/tools/dev-mode-draft.js.map +1 -0
  95. package/dist/tools/vm.d.ts.map +1 -1
  96. package/dist/tools/vm.js +3 -35
  97. package/dist/tools/vm.js.map +1 -1
  98. package/dist/types.d.ts +9 -0
  99. package/dist/types.d.ts.map +1 -1
  100. package/package.json +2 -1
@@ -67,4 +67,158 @@ describe("LaminarClient 401 retry", () => {
67
67
  expect(retryCall["Authorization"]).toBe("Bearer tok-fresh");
68
68
  });
69
69
  });
70
+ describe("LaminarClient recording endpoints", () => {
71
+ it("getExecutionRecording requests the execution recording path and returns the url", async () => {
72
+ const client = new LaminarClient({ type: "bearer", token: "tok" }, "https://api.test.com");
73
+ fetchMock.mockResolvedValueOnce(jsonResponse(200, { url: "https://signed.example/exec.mp4?sig=abc" }));
74
+ const result = await client.getExecutionRecording(1, 2);
75
+ expect(result).toEqual({ url: "https://signed.example/exec.mp4?sig=abc" });
76
+ const [url, init] = fetchMock.mock.calls[0];
77
+ expect(url).toBe("https://api.test.com/workflow/1/executions/2/recording");
78
+ expect(init.method).toBe("GET");
79
+ });
80
+ it("getFlowRunRecording requests the flow run recording path and returns the url", async () => {
81
+ const client = new LaminarClient({ type: "bearer", token: "tok" }, "https://api.test.com");
82
+ fetchMock.mockResolvedValueOnce(jsonResponse(200, { url: "https://signed.example/step.mp4?sig=xyz" }));
83
+ const result = await client.getFlowRunRecording(1, 2, 3);
84
+ expect(result).toEqual({ url: "https://signed.example/step.mp4?sig=xyz" });
85
+ const [url] = fetchMock.mock.calls[0];
86
+ expect(url).toBe("https://api.test.com/workflow/1/executions/2/flows/3/recording");
87
+ });
88
+ it("propagates 404 when no recording exists", async () => {
89
+ const client = new LaminarClient({ type: "bearer", token: "tok" }, "https://api.test.com");
90
+ fetchMock.mockResolvedValueOnce(new Response("Not Found", { status: 404 }));
91
+ await expect(client.getExecutionRecording(1, 2)).rejects.toThrow("failed (404)");
92
+ });
93
+ });
94
+ describe("LaminarClient Dev Mode endpoints", () => {
95
+ const workspaceId = 42;
96
+ const endpointCases = [
97
+ {
98
+ name: "loadDevModeDraft",
99
+ call: (client) => client.loadDevModeDraft(workspaceId, { workflowId: 7 }),
100
+ method: "POST",
101
+ path: "/dev-mode/load",
102
+ body: { workflowId: 7 },
103
+ },
104
+ {
105
+ name: "getDevModeWorkspace",
106
+ call: (client) => client.getDevModeWorkspace(workspaceId),
107
+ method: "GET",
108
+ path: "/dev-mode/workspace",
109
+ },
110
+ {
111
+ name: "listDevModeSteps",
112
+ call: (client) => client.listDevModeSteps(workspaceId),
113
+ method: "GET",
114
+ path: "/dev-mode/steps",
115
+ },
116
+ {
117
+ name: "getDevModeStep",
118
+ call: (client) => client.getDevModeStep(workspaceId, "folder/step 1"),
119
+ method: "GET",
120
+ path: "/dev-mode/steps/folder%2Fstep%201",
121
+ },
122
+ {
123
+ name: "addDevModeStep",
124
+ call: (client) => client.addDevModeStep(workspaceId, {
125
+ name: "New step",
126
+ flowType: "RPA",
127
+ folder: false,
128
+ }),
129
+ method: "POST",
130
+ path: "/dev-mode/steps",
131
+ body: { name: "New step", flowType: "RPA", folder: false },
132
+ },
133
+ {
134
+ name: "editDevModeStep",
135
+ call: (client) => client.editDevModeStep(workspaceId, "step-1", {
136
+ name: "Renamed step",
137
+ program: "return data;",
138
+ }),
139
+ method: "PUT",
140
+ path: "/dev-mode/steps/step-1",
141
+ body: { name: "Renamed step", program: "return data;" },
142
+ },
143
+ {
144
+ name: "removeDevModeStep",
145
+ call: (client) => client.removeDevModeStep(workspaceId, "step-1"),
146
+ method: "DELETE",
147
+ path: "/dev-mode/steps/step-1",
148
+ },
149
+ {
150
+ name: "reorderDevModeSteps",
151
+ call: (client) => client.reorderDevModeSteps(workspaceId, {
152
+ draggedKey: "step-2",
153
+ targetKey: "step-1",
154
+ }),
155
+ method: "POST",
156
+ path: "/dev-mode/reorder",
157
+ body: { draggedKey: "step-2", targetKey: "step-1" },
158
+ },
159
+ {
160
+ name: "runDevModeDraft",
161
+ call: (client) => client.runDevModeDraft(workspaceId, {
162
+ startStep: 1,
163
+ endStep: 3,
164
+ input: { customerId: 123 },
165
+ configurationExternalId: "test-config",
166
+ vmId: 99,
167
+ }),
168
+ method: "POST",
169
+ path: "/dev-mode/run",
170
+ body: {
171
+ startStep: 1,
172
+ endStep: 3,
173
+ input: { customerId: 123 },
174
+ configurationExternalId: "test-config",
175
+ vmId: 99,
176
+ },
177
+ },
178
+ {
179
+ name: "getDevModeRunStatus",
180
+ call: (client) => client.getDevModeRunStatus(workspaceId, 7),
181
+ method: "GET",
182
+ path: "/dev-mode/run/7/status",
183
+ },
184
+ {
185
+ name: "stopDevModeRun",
186
+ call: (client) => client.stopDevModeRun(workspaceId, 7),
187
+ method: "POST",
188
+ path: "/dev-mode/run/7/stop",
189
+ },
190
+ {
191
+ name: "publishDevModeDraft",
192
+ call: (client) => client.publishDevModeDraft(workspaceId),
193
+ method: "POST",
194
+ path: "/dev-mode/publish",
195
+ },
196
+ ];
197
+ for (const endpoint of endpointCases) {
198
+ it(`maps ${endpoint.name} to the backend endpoint`, async () => {
199
+ const client = new LaminarClient({ type: "bearer", token: "tok" }, "https://api.test.com");
200
+ fetchMock.mockResolvedValueOnce(jsonResponse(200, { ok: true }));
201
+ const result = await endpoint.call(client);
202
+ expect(result).toEqual({ ok: true });
203
+ expect(fetchMock).toHaveBeenCalledOnce();
204
+ const [url, init] = fetchMock.mock.calls[0];
205
+ expect(url).toBe(`https://api.test.com${endpoint.path}?workspaceId=${workspaceId}`);
206
+ expect(init.method).toBe(endpoint.method);
207
+ expect(init.headers.Authorization).toBe("Bearer tok");
208
+ expect(init.body).toBe(endpoint.body === undefined ? undefined : JSON.stringify(endpoint.body));
209
+ });
210
+ }
211
+ it("maps deleteDevModeDraft and accepts the backend's empty 204 response", async () => {
212
+ const client = new LaminarClient({ type: "bearer", token: "tok" }, "https://api.test.com");
213
+ fetchMock.mockResolvedValueOnce(new Response(null, { status: 204 }));
214
+ const result = await client.deleteDevModeDraft(workspaceId, 7);
215
+ expect(result).toBeUndefined();
216
+ expect(fetchMock).toHaveBeenCalledOnce();
217
+ const [url, init] = fetchMock.mock.calls[0];
218
+ expect(url).toBe(`https://api.test.com/dev-mode/drafts/7?workspaceId=${workspaceId}`);
219
+ expect(init.method).toBe("DELETE");
220
+ expect(init.headers.Authorization).toBe("Bearer tok");
221
+ expect(init.body).toBeUndefined();
222
+ });
223
+ });
70
224
  //# sourceMappingURL=laminar-client.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"laminar-client.test.js","sourceRoot":"","sources":["../../src/__tests__/laminar-client.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"laminar-client.test.js","sourceRoot":"","sources":["../../src/__tests__/laminar-client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lib-dev-mode.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-dev-mode.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/lib-dev-mode.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
3
+ import { describe, expect, it } from "vitest";
4
+ import { createMinicorServer } from "../lib.js";
5
+ describe("embedded MCP Dev Mode registration", () => {
6
+ it("exposes Dev Mode tools from the package entry point", async () => {
7
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
8
+ const embedded = await createMinicorServer(serverTransport, {
9
+ credentials: {
10
+ access_token: "test-token",
11
+ refresh_token: "test-refresh-token",
12
+ expires_at: Date.now() + 3_600_000,
13
+ },
14
+ baseUrl: "https://api.test.com",
15
+ codeMode: false,
16
+ });
17
+ const client = new Client({ name: "test-client", version: "1.0.0" });
18
+ try {
19
+ await client.connect(clientTransport);
20
+ const result = await client.listTools();
21
+ const names = result.tools.map((tool) => tool.name);
22
+ const run = result.tools.find((tool) => tool.name === "dev_mode_run");
23
+ const publish = result.tools.find((tool) => tool.name === "dev_mode_publish");
24
+ const deleteDraft = result.tools.find((tool) => tool.name === "dev_mode_delete_draft");
25
+ expect(names).toContain("dev_mode_load");
26
+ expect(names).toContain("dev_mode_run");
27
+ expect(names).toContain("dev_mode_get_run_status");
28
+ expect(names).toContain("dev_mode_stop_run");
29
+ expect(names).toContain("dev_mode_delete_draft");
30
+ expect(names).toContain("dev_mode_publish");
31
+ expect(names).toContain("run_job");
32
+ expect(names).toContain("session_start");
33
+ expect(names).toContain("vm_connect");
34
+ expect(names).not.toContain("dev_mode_current_draft");
35
+ expect(run?.inputSchema.required).toEqual(expect.arrayContaining(["workspaceId", "vmId"]));
36
+ expect(run?.inputSchema.properties).not.toHaveProperty("vmUrl");
37
+ expect(run?.inputSchema.properties).not.toHaveProperty("vmApiKey");
38
+ expect(run?.inputSchema.properties).not.toHaveProperty("vmServiceId");
39
+ expect(publish?.inputSchema.required).toEqual(expect.arrayContaining(["workspaceId", "confirm"]));
40
+ expect(deleteDraft?.inputSchema.required).toEqual(expect.arrayContaining(["workspaceId", "workflowId", "confirm"]));
41
+ }
42
+ finally {
43
+ await client.close();
44
+ await embedded.close();
45
+ }
46
+ });
47
+ });
48
+ //# sourceMappingURL=lib-dev-mode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-dev-mode.test.js","sourceRoot":"","sources":["../../src/__tests__/lib-dev-mode.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=paths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/paths.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
+ import { normalizeBaseUrl, regionToApiBase, resolveApiBase, resolveDefaultApiBase, validateApiBaseUrl, } from "../paths.js";
3
+ const ENV_KEYS = [
4
+ "MINICOR_API_BASE_URL",
5
+ "MINICOR_API_BASE_URL_US",
6
+ "MINICOR_API_BASE_URL_CA",
7
+ ];
8
+ const originalEnv = new Map(ENV_KEYS.map((key) => [key, process.env[key]]));
9
+ beforeEach(() => {
10
+ for (const key of ENV_KEYS)
11
+ delete process.env[key];
12
+ });
13
+ afterEach(() => {
14
+ for (const key of ENV_KEYS) {
15
+ const value = originalEnv.get(key);
16
+ if (value === undefined)
17
+ delete process.env[key];
18
+ else
19
+ process.env[key] = value;
20
+ }
21
+ });
22
+ describe("API base resolution", () => {
23
+ it("keeps the public region defaults", () => {
24
+ expect(regionToApiBase("us")).toBe("https://api.laminar.run");
25
+ expect(regionToApiBase("ca")).toBe("https://ca.api.laminar.run");
26
+ });
27
+ it("normalizes trailing slashes", () => {
28
+ expect(normalizeBaseUrl(" https://onprem.example.com/// ")).toBe("https://onprem.example.com");
29
+ });
30
+ it("validates HTTP(S) API base URLs", () => {
31
+ expect(validateApiBaseUrl(" https://api.example.com/// ")).toBe("https://api.example.com");
32
+ expect(() => validateApiBaseUrl("not a url")).toThrow("valid URL");
33
+ expect(() => validateApiBaseUrl("ftp://api.example.com")).toThrow("http:// or https://");
34
+ });
35
+ it("uses a stored API base before the public default", () => {
36
+ expect(resolveApiBase("us", "https://onprem.example.com/api/")).toBe("https://onprem.example.com/api");
37
+ });
38
+ it("resolves setup defaults without stored API bases", () => {
39
+ expect(resolveDefaultApiBase("us")).toBe("https://api.laminar.run");
40
+ process.env.MINICOR_API_BASE_URL = "https://env.example.com/";
41
+ expect(resolveDefaultApiBase("us")).toBe("https://env.example.com");
42
+ });
43
+ it("uses a generic environment override before a stored API base", () => {
44
+ process.env.MINICOR_API_BASE_URL = "https://env.example.com/";
45
+ expect(resolveApiBase("us", "https://stored.example.com")).toBe("https://env.example.com");
46
+ expect(resolveApiBase("ca", "https://stored-ca.example.com")).toBe("https://env.example.com");
47
+ });
48
+ it("uses region-specific environment overrides before the generic override", () => {
49
+ process.env.MINICOR_API_BASE_URL = "https://env.example.com";
50
+ process.env.MINICOR_API_BASE_URL_CA = "https://ca-env.example.com/";
51
+ expect(resolveApiBase("us")).toBe("https://env.example.com");
52
+ expect(resolveApiBase("ca")).toBe("https://ca-env.example.com");
53
+ });
54
+ });
55
+ //# sourceMappingURL=paths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../src/__tests__/paths.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recording-frames.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-frames.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/recording-frames.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { computeSampleTimestamps, buildScaleFilter, runCommand, } from "../recording-frames.js";
3
+ describe("computeSampleTimestamps", () => {
4
+ it("returns evenly-spaced, centered timestamps within the duration", () => {
5
+ expect(computeSampleTimestamps(10, 4)).toEqual([1.25, 3.75, 6.25, 8.75]);
6
+ });
7
+ it("centers a single sample in the middle", () => {
8
+ expect(computeSampleTimestamps(10, 1)).toEqual([5]);
9
+ });
10
+ it("keeps every timestamp strictly inside the duration", () => {
11
+ const ts = computeSampleTimestamps(3, 6);
12
+ expect(ts).toHaveLength(6);
13
+ for (const t of ts) {
14
+ expect(t).toBeGreaterThan(0);
15
+ expect(t).toBeLessThan(3);
16
+ }
17
+ });
18
+ it("returns empty for invalid duration or count", () => {
19
+ expect(computeSampleTimestamps(0, 4)).toEqual([]);
20
+ expect(computeSampleTimestamps(-5, 4)).toEqual([]);
21
+ expect(computeSampleTimestamps(10, 0)).toEqual([]);
22
+ expect(computeSampleTimestamps(Number.NaN, 4)).toEqual([]);
23
+ });
24
+ });
25
+ describe("runCommand", () => {
26
+ it("resolves on a zero exit code", async () => {
27
+ const result = await runCommand(process.execPath, ["-e", "process.stdout.write('hi')"], 10_000);
28
+ expect(result.code).toBe(0);
29
+ expect(result.stdout).toBe("hi");
30
+ });
31
+ it("rejects on a non-zero exit code and includes stderr", async () => {
32
+ await expect(runCommand(process.execPath, ["-e", "console.error('boom'); process.exit(2)"], 10_000)).rejects.toThrow(/exited with code 2.*boom/s);
33
+ });
34
+ });
35
+ describe("buildScaleFilter", () => {
36
+ it("caps width while preserving aspect ratio when a max width is given", () => {
37
+ expect(buildScaleFilter(1024)).toBe("scale='min(1024,iw)':-2");
38
+ });
39
+ it("returns null to preserve original resolution when no cap is given", () => {
40
+ expect(buildScaleFilter()).toBeNull();
41
+ expect(buildScaleFilter(0)).toBeNull();
42
+ expect(buildScaleFilter(-100)).toBeNull();
43
+ expect(buildScaleFilter(Number.NaN)).toBeNull();
44
+ });
45
+ });
46
+ //# sourceMappingURL=recording-frames.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-frames.test.js","sourceRoot":"","sources":["../../src/__tests__/recording-frames.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server-profile.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-profile.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/server-profile.test.ts"],"names":[],"mappings":""}