@sovara/sdk 0.0.0-stage → 0.9.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.
- package/LICENSE +202 -0
- package/README.md +36 -2
- package/dist/apiTypes.d.ts +5 -0
- package/dist/apiTypes.d.ts.map +1 -0
- package/dist/apiTypes.js +5 -0
- package/dist/apiTypes.js.map +1 -0
- package/dist/capture/requestEnvelope.d.ts +10 -0
- package/dist/capture/requestEnvelope.d.ts.map +1 -0
- package/dist/capture/requestEnvelope.js +79 -0
- package/dist/capture/requestEnvelope.js.map +1 -0
- package/dist/capture/responseEnvelope.d.ts +17 -0
- package/dist/capture/responseEnvelope.d.ts.map +1 -0
- package/dist/capture/responseEnvelope.js +72 -0
- package/dist/capture/responseEnvelope.js.map +1 -0
- package/dist/capture/sensitiveHeaders.d.ts +7 -0
- package/dist/capture/sensitiveHeaders.d.ts.map +1 -0
- package/dist/capture/sensitiveHeaders.js +41 -0
- package/dist/capture/sensitiveHeaders.js.map +1 -0
- package/dist/capture/sseUtils.d.ts +3 -0
- package/dist/capture/sseUtils.d.ts.map +1 -0
- package/dist/capture/sseUtils.js +69 -0
- package/dist/capture/sseUtils.js.map +1 -0
- package/dist/capture/streamCapture.d.ts +5 -0
- package/dist/capture/streamCapture.d.ts.map +1 -0
- package/dist/capture/streamCapture.js +19 -0
- package/dist/capture/streamCapture.js.map +1 -0
- package/dist/client.d.ts +52 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +66 -0
- package/dist/client.js.map +1 -0
- package/dist/codeVersion.d.ts +17 -0
- package/dist/codeVersion.d.ts.map +1 -0
- package/dist/codeVersion.js +107 -0
- package/dist/codeVersion.js.map +1 -0
- package/dist/compatibility.d.ts +26 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +130 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +37 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +380 -0
- package/dist/context.js.map +1 -0
- package/dist/endpointPatterns.json +90 -0
- package/dist/endpointWhitelist.d.ts +2 -0
- package/dist/endpointWhitelist.d.ts.map +1 -0
- package/dist/endpointWhitelist.js +11 -0
- package/dist/endpointWhitelist.js.map +1 -0
- package/dist/env.d.ts +7 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +11 -0
- package/dist/env.js.map +1 -0
- package/dist/failsafe.d.ts +5 -0
- package/dist/failsafe.d.ts.map +1 -0
- package/dist/failsafe.js +25 -0
- package/dist/failsafe.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/mcpPatch.d.ts +2 -0
- package/dist/mcpPatch.d.ts.map +1 -0
- package/dist/mcpPatch.js +202 -0
- package/dist/mcpPatch.js.map +1 -0
- package/dist/openaiAgentsPatch.d.ts +2 -0
- package/dist/openaiAgentsPatch.d.ts.map +1 -0
- package/dist/openaiAgentsPatch.js +112 -0
- package/dist/openaiAgentsPatch.js.map +1 -0
- package/dist/payload/editIoExcludePatterns.json +322 -0
- package/dist/payload/filterDict.d.ts +3 -0
- package/dist/payload/filterDict.d.ts.map +1 -0
- package/dist/payload/filterDict.js +26 -0
- package/dist/payload/filterDict.js.map +1 -0
- package/dist/payload/flatten.d.ts +6 -0
- package/dist/payload/flatten.d.ts.map +1 -0
- package/dist/payload/flatten.js +79 -0
- package/dist/payload/flatten.js.map +1 -0
- package/dist/payload/wrap.d.ts +10 -0
- package/dist/payload/wrap.d.ts.map +1 -0
- package/dist/payload/wrap.js +82 -0
- package/dist/payload/wrap.js.map +1 -0
- package/dist/platformSession.d.ts +3 -0
- package/dist/platformSession.d.ts.map +1 -0
- package/dist/platformSession.js +21 -0
- package/dist/platformSession.js.map +1 -0
- package/dist/runtimeClient.d.ts +117 -0
- package/dist/runtimeClient.d.ts.map +1 -0
- package/dist/runtimeClient.js +287 -0
- package/dist/runtimeClient.js.map +1 -0
- package/dist/serverLifecycle.d.ts +12 -0
- package/dist/serverLifecycle.d.ts.map +1 -0
- package/dist/serverLifecycle.js +77 -0
- package/dist/serverLifecycle.js.map +1 -0
- package/dist/toolTraceUtils.d.ts +38 -0
- package/dist/toolTraceUtils.d.ts.map +1 -0
- package/dist/toolTraceUtils.js +189 -0
- package/dist/toolTraceUtils.js.map +1 -0
- package/dist/trace.d.ts +13 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +133 -0
- package/dist/trace.js.map +1 -0
- package/dist/traceLogCapture.d.ts +18 -0
- package/dist/traceLogCapture.d.ts.map +1 -0
- package/dist/traceLogCapture.js +125 -0
- package/dist/traceLogCapture.js.map +1 -0
- package/dist/transport/awsSdkHttp2Patch.d.ts +2 -0
- package/dist/transport/awsSdkHttp2Patch.d.ts.map +1 -0
- package/dist/transport/awsSdkHttp2Patch.js +442 -0
- package/dist/transport/awsSdkHttp2Patch.js.map +1 -0
- package/dist/transport/fetchPatch.d.ts +3 -0
- package/dist/transport/fetchPatch.d.ts.map +1 -0
- package/dist/transport/fetchPatch.js +257 -0
- package/dist/transport/fetchPatch.js.map +1 -0
- package/dist/transport/nodeHttpPatch.d.ts +3 -0
- package/dist/transport/nodeHttpPatch.d.ts.map +1 -0
- package/dist/transport/nodeHttpPatch.js +532 -0
- package/dist/transport/nodeHttpPatch.js.map +1 -0
- package/dist/util/logger.d.ts +2 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +9 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/stableJson.d.ts +2 -0
- package/dist/util/stableJson.d.ts.map +1 -0
- package/dist/util/stableJson.js +22 -0
- package/dist/util/stableJson.js.map +1 -0
- package/dist/util/stackTrace.d.ts +2 -0
- package/dist/util/stackTrace.d.ts.map +1 -0
- package/dist/util/stackTrace.js +11 -0
- package/dist/util/stackTrace.js.map +1 -0
- package/package.json +70 -4
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type LessonScopeInput } from "./context.js";
|
|
2
|
+
import type { MetricValue } from "./runtimeClient.js";
|
|
3
|
+
export type SovaraClientOptions = {
|
|
4
|
+
projectName: string;
|
|
5
|
+
url?: string;
|
|
6
|
+
agentToken?: string;
|
|
7
|
+
fetch?: typeof globalThis.fetch;
|
|
8
|
+
};
|
|
9
|
+
export type SovaraTraceOptions = {
|
|
10
|
+
/** Your stable identifier or a `sovara-` id; `getTraceId()` returns the canonical id. */
|
|
11
|
+
traceId?: string;
|
|
12
|
+
evalRunId?: string;
|
|
13
|
+
captureLogs?: boolean;
|
|
14
|
+
lessonScope?: LessonScopeInput;
|
|
15
|
+
};
|
|
16
|
+
export type SovaraSubtraceOptions = {
|
|
17
|
+
lessonScope?: LessonScopeInput;
|
|
18
|
+
};
|
|
19
|
+
/** @deprecated Use SovaraTraceOptions with traceId. */
|
|
20
|
+
export type SovaraRunOptions = Omit<SovaraTraceOptions, "traceId"> & {
|
|
21
|
+
runId?: string;
|
|
22
|
+
};
|
|
23
|
+
/** @deprecated Use SovaraSubtraceOptions. */
|
|
24
|
+
export type SovaraSubrunOptions = SovaraSubtraceOptions;
|
|
25
|
+
export type SovaraTurnOptions = {
|
|
26
|
+
turnInput?: string;
|
|
27
|
+
};
|
|
28
|
+
type TraceFunction<T> = () => Promise<T> | T;
|
|
29
|
+
export declare class SovaraClient {
|
|
30
|
+
readonly projectName: string;
|
|
31
|
+
private readonly url;
|
|
32
|
+
private readonly fetch?;
|
|
33
|
+
private readonly owner;
|
|
34
|
+
private readonly runtimeClient;
|
|
35
|
+
constructor(options: SovaraClientOptions);
|
|
36
|
+
trace<T>(name: string, fn: TraceFunction<T>, options?: SovaraTraceOptions): Promise<T>;
|
|
37
|
+
subtrace<T>(name: string, fn: TraceFunction<T>, options?: SovaraSubtraceOptions): Promise<T>;
|
|
38
|
+
/** @deprecated Use trace() with traceId. */
|
|
39
|
+
run<T>(name: string, fn: TraceFunction<T>, options?: SovaraRunOptions): Promise<T>;
|
|
40
|
+
/** @deprecated Use subtrace(). */
|
|
41
|
+
subrun<T>(name: string, fn: TraceFunction<T>, options?: SovaraSubrunOptions): Promise<T>;
|
|
42
|
+
lessonScope<T>(scope: LessonScopeInput, fn: TraceFunction<T>): Promise<T>;
|
|
43
|
+
turn<T>(options: SovaraTurnOptions, fn: TraceFunction<T>): Promise<T>;
|
|
44
|
+
logInput(input: unknown): Promise<void>;
|
|
45
|
+
logOutput(output: unknown): Promise<void>;
|
|
46
|
+
logMetrics(metrics: Record<string, MetricValue>): Promise<void>;
|
|
47
|
+
getTraceId(): string | undefined;
|
|
48
|
+
/** @deprecated Use getTraceId(). */
|
|
49
|
+
getRunId(): string | undefined;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getTraceId, logInput, logMetrics, logOutput, normalizeProjectName, withLessonScope, withSovaraTrace, withSovaraSubtrace, withSovaraTurn, } from "./context.js";
|
|
2
|
+
import { RuntimeClient } from "./runtimeClient.js";
|
|
3
|
+
import { readRunnerConfig } from "./env.js";
|
|
4
|
+
export class SovaraClient {
|
|
5
|
+
projectName;
|
|
6
|
+
url;
|
|
7
|
+
fetch;
|
|
8
|
+
owner = Object.freeze({});
|
|
9
|
+
runtimeClient;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
if (!options || typeof options !== "object") {
|
|
12
|
+
throw new TypeError("SovaraClient requires an options object with projectName.");
|
|
13
|
+
}
|
|
14
|
+
this.projectName = normalizeProjectName(options.projectName);
|
|
15
|
+
this.url = options.url ?? readRunnerConfig().url;
|
|
16
|
+
this.fetch = options.fetch;
|
|
17
|
+
this.runtimeClient = new RuntimeClient(this.url, options.fetch, options.agentToken);
|
|
18
|
+
}
|
|
19
|
+
trace(name, fn, options = {}) {
|
|
20
|
+
return withSovaraTrace({
|
|
21
|
+
...options,
|
|
22
|
+
name,
|
|
23
|
+
projectName: this.projectName,
|
|
24
|
+
url: this.url,
|
|
25
|
+
fetch: this.fetch,
|
|
26
|
+
}, fn, { client: this.runtimeClient, owner: this.owner });
|
|
27
|
+
}
|
|
28
|
+
subtrace(name, fn, options = {}) {
|
|
29
|
+
return withSovaraSubtrace({
|
|
30
|
+
name,
|
|
31
|
+
...options,
|
|
32
|
+
}, fn, { client: this.runtimeClient, owner: this.owner });
|
|
33
|
+
}
|
|
34
|
+
/** @deprecated Use trace() with traceId. */
|
|
35
|
+
run(name, fn, options = {}) {
|
|
36
|
+
const { runId, ...rest } = options;
|
|
37
|
+
return this.trace(name, fn, { ...rest, traceId: runId });
|
|
38
|
+
}
|
|
39
|
+
/** @deprecated Use subtrace(). */
|
|
40
|
+
subrun(name, fn, options = {}) {
|
|
41
|
+
return this.subtrace(name, fn, options);
|
|
42
|
+
}
|
|
43
|
+
lessonScope(scope, fn) {
|
|
44
|
+
return withLessonScope(scope, fn, this.owner);
|
|
45
|
+
}
|
|
46
|
+
turn(options, fn) {
|
|
47
|
+
return withSovaraTurn(options, fn, this.owner);
|
|
48
|
+
}
|
|
49
|
+
logInput(input) {
|
|
50
|
+
return logInput(input, this.owner);
|
|
51
|
+
}
|
|
52
|
+
logOutput(output) {
|
|
53
|
+
return logOutput(output, this.owner);
|
|
54
|
+
}
|
|
55
|
+
logMetrics(metrics) {
|
|
56
|
+
return logMetrics(metrics, this.owner);
|
|
57
|
+
}
|
|
58
|
+
getTraceId() {
|
|
59
|
+
return getTraceId(this.owner);
|
|
60
|
+
}
|
|
61
|
+
/** @deprecated Use getTraceId(). */
|
|
62
|
+
getRunId() {
|
|
63
|
+
return this.getTraceId();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type CodeVersion = {
|
|
2
|
+
type: "git";
|
|
3
|
+
available: boolean;
|
|
4
|
+
status: "clean" | "dirty" | "missing_project_root" | "missing_project_config" | "git_unavailable" | "not_git_repo" | "no_commit";
|
|
5
|
+
repo_root: string | null;
|
|
6
|
+
commit_sha: string | null;
|
|
7
|
+
short_commit_sha: string | null;
|
|
8
|
+
branch: string | null;
|
|
9
|
+
dirty: boolean | null;
|
|
10
|
+
remote_url: string | null;
|
|
11
|
+
web_url: string | null;
|
|
12
|
+
commit_url: string | null;
|
|
13
|
+
};
|
|
14
|
+
export declare function normalizeGitRemoteURL(remoteURL: string | null | undefined): string | null;
|
|
15
|
+
export declare function buildCommitURL(webURL: string | null, commitSHA: string | null): string | null;
|
|
16
|
+
export declare function collectCodeVersion(projectRoot: string | null | undefined): CodeVersion;
|
|
17
|
+
//# sourceMappingURL=codeVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeVersion.d.ts","sourceRoot":"","sources":["../src/codeVersion.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EACF,OAAO,GACP,OAAO,GACP,sBAAsB,GACtB,wBAAwB,GACxB,iBAAiB,GACjB,cAAc,GACd,WAAW,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AA4BF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CA6BzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAiB7F;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAqCtF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
const GIT_TIMEOUT_MS = 2000;
|
|
3
|
+
const emptyCodeVersion = (status) => ({
|
|
4
|
+
type: "git",
|
|
5
|
+
available: false,
|
|
6
|
+
status,
|
|
7
|
+
repo_root: null,
|
|
8
|
+
commit_sha: null,
|
|
9
|
+
short_commit_sha: null,
|
|
10
|
+
branch: null,
|
|
11
|
+
dirty: null,
|
|
12
|
+
remote_url: null,
|
|
13
|
+
web_url: null,
|
|
14
|
+
commit_url: null,
|
|
15
|
+
});
|
|
16
|
+
function runGit(cwd, args) {
|
|
17
|
+
const result = spawnSync("git", ["-C", cwd, ...args], {
|
|
18
|
+
encoding: "utf8",
|
|
19
|
+
timeout: GIT_TIMEOUT_MS,
|
|
20
|
+
});
|
|
21
|
+
if (result.error || result.status !== 0) {
|
|
22
|
+
return { ok: false, stdout: "" };
|
|
23
|
+
}
|
|
24
|
+
return { ok: true, stdout: result.stdout.trim() };
|
|
25
|
+
}
|
|
26
|
+
export function normalizeGitRemoteURL(remoteURL) {
|
|
27
|
+
const remote = remoteURL?.trim();
|
|
28
|
+
if (!remote) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const ssh = /^(?:ssh:\/\/)?git@([^/:]+)(?::|\/)(.+)$/.exec(remote);
|
|
32
|
+
if (ssh) {
|
|
33
|
+
const host = ssh[1];
|
|
34
|
+
const path = ssh[2].replace(/\/+$/, "").replace(/\.git$/, "");
|
|
35
|
+
return path ? `https://${host}/${path}` : null;
|
|
36
|
+
}
|
|
37
|
+
let parsed;
|
|
38
|
+
try {
|
|
39
|
+
parsed = new URL(remote);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const path = parsed.pathname.replace(/\/+$/, "").replace(/\.git$/, "");
|
|
48
|
+
if (!parsed.hostname || !path || path === "/") {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const port = parsed.port ? `:${parsed.port}` : "";
|
|
52
|
+
return `https://${parsed.hostname}${port}${path}`;
|
|
53
|
+
}
|
|
54
|
+
export function buildCommitURL(webURL, commitSHA) {
|
|
55
|
+
if (!webURL || !commitSHA) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
let hostname = "";
|
|
59
|
+
try {
|
|
60
|
+
hostname = new URL(webURL).hostname;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
if (hostname === "github.com" || hostname.endsWith(".github.com")) {
|
|
66
|
+
return `${webURL}/commit/${commitSHA}`;
|
|
67
|
+
}
|
|
68
|
+
if (hostname === "gitlab.com" || hostname.endsWith(".gitlab.com")) {
|
|
69
|
+
return `${webURL}/-/commit/${commitSHA}`;
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
export function collectCodeVersion(projectRoot) {
|
|
74
|
+
if (!projectRoot) {
|
|
75
|
+
return emptyCodeVersion("missing_project_root");
|
|
76
|
+
}
|
|
77
|
+
const repo = runGit(projectRoot, ["rev-parse", "--show-toplevel"]);
|
|
78
|
+
if (!repo.ok || !repo.stdout) {
|
|
79
|
+
return emptyCodeVersion("not_git_repo");
|
|
80
|
+
}
|
|
81
|
+
const commit = runGit(repo.stdout, ["rev-parse", "HEAD"]);
|
|
82
|
+
if (!commit.ok || !commit.stdout) {
|
|
83
|
+
return {
|
|
84
|
+
...emptyCodeVersion("no_commit"),
|
|
85
|
+
repo_root: repo.stdout,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const branch = runGit(repo.stdout, ["branch", "--show-current"]);
|
|
89
|
+
const status = runGit(repo.stdout, ["status", "--porcelain", "--untracked-files=all"]);
|
|
90
|
+
const remote = runGit(repo.stdout, ["remote", "get-url", "origin"]);
|
|
91
|
+
const dirty = status.ok ? status.stdout.length > 0 : null;
|
|
92
|
+
const webURL = normalizeGitRemoteURL(remote.ok ? remote.stdout : null);
|
|
93
|
+
return {
|
|
94
|
+
type: "git",
|
|
95
|
+
available: true,
|
|
96
|
+
status: dirty ? "dirty" : "clean",
|
|
97
|
+
repo_root: repo.stdout,
|
|
98
|
+
commit_sha: commit.stdout,
|
|
99
|
+
short_commit_sha: commit.stdout.slice(0, 7),
|
|
100
|
+
branch: branch.ok && branch.stdout ? branch.stdout : null,
|
|
101
|
+
dirty,
|
|
102
|
+
remote_url: webURL,
|
|
103
|
+
web_url: webURL,
|
|
104
|
+
commit_url: buildCommitURL(webURL, commit.stdout),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=codeVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeVersion.js","sourceRoot":"","sources":["../src/codeVersion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type CompatibilityResult = {
|
|
2
|
+
status: "compatible" | "incompatible";
|
|
3
|
+
contract: string;
|
|
4
|
+
selected_version: number | null;
|
|
5
|
+
client_versions?: number[];
|
|
6
|
+
server_versions?: number[];
|
|
7
|
+
server?: {
|
|
8
|
+
component: string;
|
|
9
|
+
product_version: string | null;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare class CompatibilityError extends Error {
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly result?: CompatibilityResult | undefined;
|
|
15
|
+
constructor(code: string, message: string, result?: CompatibilityResult | undefined);
|
|
16
|
+
}
|
|
17
|
+
export declare const RUNNER_API_VERSIONS: number[];
|
|
18
|
+
export declare function negotiate(health: unknown, contract: string, supported: number[], expectedComponent: string): CompatibilityResult;
|
|
19
|
+
export declare function clientHeaders(result: CompatibilityResult): Record<string, string>;
|
|
20
|
+
export declare function raiseForCompatibilityResponse(status: number, payload: unknown): void;
|
|
21
|
+
export declare function forgetCompatibility(url: string): void;
|
|
22
|
+
/** Whether the destination's last compatible health response advertised a feature. */
|
|
23
|
+
export declare function hasFeature(url: string, name: string): boolean;
|
|
24
|
+
export declare function compatibilityHeaders(url: string): Record<string, string>;
|
|
25
|
+
export declare function checkCompatibility(url: string, health: unknown): void;
|
|
26
|
+
//# sourceMappingURL=compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAChE,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB;gBAF5B,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,mBAAmB,YAAA;CAKxC;AAED,eAAO,MAAM,mBAAmB,UAAM,CAAC;AA+CvC,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,iBAAiB,EAAE,MAAM,GACxB,mBAAmB,CA4CrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAcpF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAMrE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
export class CompatibilityError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
result;
|
|
5
|
+
constructor(code, message, result) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.result = result;
|
|
9
|
+
this.name = "CompatibilityError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const RUNNER_API_VERSIONS = [5];
|
|
13
|
+
const headersByUrl = new Map();
|
|
14
|
+
const featuresByUrl = new Map();
|
|
15
|
+
const key = (url) => url.replace(/\/+$/, "");
|
|
16
|
+
function record(value) {
|
|
17
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function versions(value) {
|
|
20
|
+
if (!Array.isArray(value) || !value.length || value.length > 64
|
|
21
|
+
|| value.some((item) => !Number.isInteger(item) || item < 1 || item > 2147483647)
|
|
22
|
+
|| new Set(value).size !== value.length) {
|
|
23
|
+
throw new CompatibilityError("invalid_compatibility_metadata", "Invalid contract versions.");
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function productVersion() {
|
|
28
|
+
try {
|
|
29
|
+
const value = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
30
|
+
return typeof value === "string" ? value : null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function latestVersion(value) {
|
|
37
|
+
if (!Array.isArray(value) || value.length > 64
|
|
38
|
+
|| value.some((item) => !Number.isInteger(item) || item < 1 || item > 2147483647)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return Math.max(0, ...value);
|
|
42
|
+
}
|
|
43
|
+
function outdatedMessage(result, clientName = "TypeScript SDK") {
|
|
44
|
+
const client = latestVersion(result?.client_versions)
|
|
45
|
+
?? (result?.selected_version === null ? 0 : latestVersion([result?.selected_version]));
|
|
46
|
+
const server = latestVersion(result?.server_versions);
|
|
47
|
+
const component = client !== undefined && server !== undefined && client !== server
|
|
48
|
+
? (client > server ? "server" : clientName)
|
|
49
|
+
: `${clientName} or server`;
|
|
50
|
+
return `Your ${component} is outdated. Please update.`;
|
|
51
|
+
}
|
|
52
|
+
export function negotiate(health, contract, supported, expectedComponent) {
|
|
53
|
+
versions(supported);
|
|
54
|
+
if (!record(health)) {
|
|
55
|
+
throw new CompatibilityError("invalid_compatibility_metadata", "Invalid server health response.");
|
|
56
|
+
}
|
|
57
|
+
if (!("compatibility" in health)) {
|
|
58
|
+
throw new CompatibilityError("incompatible_contract", "Your server is outdated. Please update.", { status: "incompatible", contract, selected_version: null,
|
|
59
|
+
client_versions: supported, server_versions: [] });
|
|
60
|
+
}
|
|
61
|
+
const metadata = health.compatibility;
|
|
62
|
+
if (!record(metadata)) {
|
|
63
|
+
throw new CompatibilityError("invalid_compatibility_metadata", "Invalid server compatibility metadata.");
|
|
64
|
+
}
|
|
65
|
+
if (metadata.component !== expectedComponent) {
|
|
66
|
+
throw new CompatibilityError("unexpected_service", "The destination is a different Sovara component.");
|
|
67
|
+
}
|
|
68
|
+
const release = metadata.product_version ?? null;
|
|
69
|
+
if (release !== null && (typeof release !== "string" || release !== release.trim()
|
|
70
|
+
|| !/^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/.test(release))) {
|
|
71
|
+
throw new CompatibilityError("invalid_compatibility_metadata", "Invalid server product version.");
|
|
72
|
+
}
|
|
73
|
+
if (!record(metadata.contracts) || !(contract in metadata.contracts)) {
|
|
74
|
+
throw new CompatibilityError("invalid_compatibility_metadata", "The server omitted its contract declaration.");
|
|
75
|
+
}
|
|
76
|
+
const serverVersions = versions(metadata.contracts[contract]);
|
|
77
|
+
const common = supported.filter((value) => serverVersions.includes(value));
|
|
78
|
+
const result = {
|
|
79
|
+
status: common.length ? "compatible" : "incompatible",
|
|
80
|
+
contract,
|
|
81
|
+
selected_version: common.length ? Math.max(...common) : null,
|
|
82
|
+
client_versions: supported,
|
|
83
|
+
server_versions: serverVersions,
|
|
84
|
+
server: { component: expectedComponent, product_version: release },
|
|
85
|
+
};
|
|
86
|
+
if (!common.length) {
|
|
87
|
+
throw new CompatibilityError("incompatible_contract", outdatedMessage(result), result);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
export function clientHeaders(result) {
|
|
92
|
+
if (result.status !== "compatible")
|
|
93
|
+
return {};
|
|
94
|
+
return {
|
|
95
|
+
"x-sovara-component": "typescript-runner",
|
|
96
|
+
"x-sovara-version": productVersion() || "unknown",
|
|
97
|
+
"x-sovara-contract": result.contract,
|
|
98
|
+
"x-sovara-contract-version": String(result.selected_version),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export function raiseForCompatibilityResponse(status, payload) {
|
|
102
|
+
if ((status === 400 || status === 409) && record(payload)
|
|
103
|
+
&& (payload.error === "incompatible_contract"
|
|
104
|
+
|| payload.error === "invalid_compatibility_metadata")) {
|
|
105
|
+
const result = record(payload.compatibility_result)
|
|
106
|
+
? payload.compatibility_result : undefined;
|
|
107
|
+
throw new CompatibilityError(payload.error, payload.error === "incompatible_contract"
|
|
108
|
+
? outdatedMessage(result)
|
|
109
|
+
: "Could not connect to the server. Please retry.", result);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function forgetCompatibility(url) {
|
|
113
|
+
headersByUrl.delete(key(url));
|
|
114
|
+
featuresByUrl.delete(key(url));
|
|
115
|
+
}
|
|
116
|
+
/** Whether the destination's last compatible health response advertised a feature. */
|
|
117
|
+
export function hasFeature(url, name) {
|
|
118
|
+
return featuresByUrl.get(key(url))?.[name] === true;
|
|
119
|
+
}
|
|
120
|
+
export function compatibilityHeaders(url) {
|
|
121
|
+
return { ...headersByUrl.get(key(url)) };
|
|
122
|
+
}
|
|
123
|
+
export function checkCompatibility(url, health) {
|
|
124
|
+
forgetCompatibility(url);
|
|
125
|
+
const result = negotiate(health, "runner-api", RUNNER_API_VERSIONS, "exec-server");
|
|
126
|
+
headersByUrl.set(key(url), clientHeaders(result));
|
|
127
|
+
const features = health.features;
|
|
128
|
+
featuresByUrl.set(key(url), record(features) ? features : {});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function readPositiveIntegerEnv(name: string, defaultValue: number, options?: {
|
|
2
|
+
maximum?: number;
|
|
3
|
+
}): number;
|
|
4
|
+
export declare function readHttpUrlEnv(name: string, defaultValue: string): string;
|
|
5
|
+
export declare const PORT: number;
|
|
6
|
+
export declare const DEFAULT_SERVER_URL: string;
|
|
7
|
+
export declare const SERVER_BOOT_TIMEOUT_MS = 15000;
|
|
8
|
+
export declare const SERVER_BOOT_POLL_INTERVAL_MS = 500;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,MAAM,CAoBR;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAczE;AAED,eAAO,MAAM,IAAI,QAIhB,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAG9B,CAAC;AACF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,eAAO,MAAM,4BAA4B,MAAM,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function readPositiveIntegerEnv(name, defaultValue, options = {}) {
|
|
2
|
+
const raw = process.env[name];
|
|
3
|
+
if (raw === undefined) {
|
|
4
|
+
return defaultValue;
|
|
5
|
+
}
|
|
6
|
+
const valueText = raw.trim();
|
|
7
|
+
const value = /^[+]?\d+$/.test(valueText) ? Number(valueText) : Number.NaN;
|
|
8
|
+
const { maximum } = options;
|
|
9
|
+
if (!Number.isSafeInteger(value)
|
|
10
|
+
|| value <= 0
|
|
11
|
+
|| (maximum !== undefined && value > maximum)) {
|
|
12
|
+
const constraint = maximum === undefined
|
|
13
|
+
? "a positive integer"
|
|
14
|
+
: `a positive integer no greater than ${maximum}`;
|
|
15
|
+
throw new Error(`${name} must be ${constraint}; got ${JSON.stringify(raw)}.`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
export function readHttpUrlEnv(name, defaultValue) {
|
|
20
|
+
const raw = process.env[name];
|
|
21
|
+
const value = (raw ?? defaultValue).trim();
|
|
22
|
+
try {
|
|
23
|
+
const parsed = new URL(value);
|
|
24
|
+
if (!["http:", "https:"].includes(parsed.protocol) || !parsed.hostname) {
|
|
25
|
+
throw new Error("unsupported URL");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new Error(`${name} must be an absolute HTTP(S) URL.`);
|
|
30
|
+
}
|
|
31
|
+
return value.replace(/\/+$/, "");
|
|
32
|
+
}
|
|
33
|
+
export const PORT = readPositiveIntegerEnv("SOVARA_EXEC_SERVER_PORT", 5960, { maximum: 65_535 });
|
|
34
|
+
export const DEFAULT_SERVER_URL = readHttpUrlEnv("SOVARA_EXEC_SERVER_URL", `http://127.0.0.1:${PORT}`);
|
|
35
|
+
export const SERVER_BOOT_TIMEOUT_MS = 15_000;
|
|
36
|
+
export const SERVER_BOOT_POLL_INTERVAL_MS = 500;
|
|
37
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,YAAoB,EACpB,UAAgC,EAAE;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;WACzB,KAAK,IAAI,CAAC;WACV,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,OAAO,CAAC,EAC7C,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS;YACtC,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,sCAAsC,OAAO,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,YAAY,UAAU,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,YAAoB;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mCAAmC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CACxC,yBAAyB,EACzB,IAAI,EACJ,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAC9C,wBAAwB,EACxB,oBAAoB,IAAI,EAAE,CAC3B,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type TraceLogCaptureHandle } from "./traceLogCapture.js";
|
|
2
|
+
import { RuntimeClient, type MetricValue, type TraceWriteCredentials } from "./runtimeClient.js";
|
|
3
|
+
export type WithSovaraTraceOptions = {
|
|
4
|
+
name?: string;
|
|
5
|
+
traceId?: string;
|
|
6
|
+
evalRunId?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
agentToken?: string;
|
|
9
|
+
fetch?: typeof globalThis.fetch;
|
|
10
|
+
captureLogs?: boolean;
|
|
11
|
+
projectName: string;
|
|
12
|
+
lessonScope?: LessonScopeInput;
|
|
13
|
+
__testing?: {
|
|
14
|
+
client?: TraceScopeClient;
|
|
15
|
+
skipLifecycle?: boolean;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
type CoreTraceScopeClientMethods = "declareTurn" | "registerSubtrace" | "deregisterTrace" | "updateTraceLog" | "registerTrace" | "prepareCall" | "recordOutput" | "recordException";
|
|
19
|
+
type TraceHelperClientMethods = "logMetrics" | "logInput" | "logOutput";
|
|
20
|
+
export type TraceScopeClient = Pick<RuntimeClient, CoreTraceScopeClientMethods> & Partial<Pick<RuntimeClient, TraceHelperClientMethods>>;
|
|
21
|
+
type TraceClientBinding = {
|
|
22
|
+
readonly client: TraceScopeClient;
|
|
23
|
+
readonly owner: object;
|
|
24
|
+
};
|
|
25
|
+
export type TraceScope = {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly client: TraceScopeClient;
|
|
28
|
+
readonly owner: object;
|
|
29
|
+
readonly credentials: TraceWriteCredentials;
|
|
30
|
+
readonly turnId: string | null;
|
|
31
|
+
readonly lessonScopePaths: readonly string[] | null;
|
|
32
|
+
readonly logCaptureId?: symbol;
|
|
33
|
+
readonly logCapture?: TraceLogCaptureHandle<TraceScope>;
|
|
34
|
+
};
|
|
35
|
+
export type WithSovaraSubtraceOptions = {
|
|
36
|
+
name: string;
|
|
37
|
+
lessonScope?: LessonScopeInput;
|
|
38
|
+
};
|
|
39
|
+
export type LessonScopeInput = string | string[] | null | undefined;
|
|
40
|
+
export declare function normalizeProjectName(projectName: unknown): string;
|
|
41
|
+
export declare function normalizeLessonScope(scope: LessonScopeInput): string[] | null;
|
|
42
|
+
export declare function getCurrentTraceScope(): TraceScope | undefined;
|
|
43
|
+
export type TurnOptions = {
|
|
44
|
+
turnInput?: string;
|
|
45
|
+
};
|
|
46
|
+
export declare function withSovaraTurn<T>(options: TurnOptions, fn: () => Promise<T> | T, owner: object): Promise<T>;
|
|
47
|
+
export declare function getTraceId(owner?: object): string | undefined;
|
|
48
|
+
export declare function logMetrics(metrics: Record<string, MetricValue>, owner?: object): Promise<void>;
|
|
49
|
+
export declare function logInput(input: unknown, owner?: object): Promise<void>;
|
|
50
|
+
export declare function logOutput(output: unknown, owner?: object): Promise<void>;
|
|
51
|
+
export declare function withSovaraTrace<T>(input: WithSovaraTraceOptions, fn: () => Promise<T> | T, binding?: TraceClientBinding): Promise<T>;
|
|
52
|
+
export declare function withSovaraSubtrace<T>(input: string | WithSovaraSubtraceOptions, fn: () => Promise<T> | T, binding?: TraceClientBinding): Promise<T>;
|
|
53
|
+
export declare function withLessonScope<T>(lessonScope: LessonScopeInput, fn: () => Promise<T> | T, owner?: object): Promise<T>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|