systemoneprompts 0.1.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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +214 -0
- package/dist/answers.d.ts +21 -0
- package/dist/answers.d.ts.map +1 -0
- package/dist/answers.js +104 -0
- package/dist/answers.js.map +1 -0
- package/dist/cli/cache.d.ts +2 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +26 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +28 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/env.d.ts +2 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +29 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/eval.d.ts +18 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +314 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/generate.d.ts +5 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +93 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +76 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +28 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +88 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/run.d.ts +7 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +63 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/client.d.ts +65 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +301 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare.d.ts +29 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +159 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/definition/check.d.ts +9 -0
- package/dist/definition/check.d.ts.map +1 -0
- package/dist/definition/check.js +26 -0
- package/dist/definition/check.js.map +1 -0
- package/dist/definition/diagnostics.d.ts +29 -0
- package/dist/definition/diagnostics.d.ts.map +1 -0
- package/dist/definition/diagnostics.js +74 -0
- package/dist/definition/diagnostics.js.map +1 -0
- package/dist/definition/locate.d.ts +23 -0
- package/dist/definition/locate.d.ts.map +1 -0
- package/dist/definition/locate.js +211 -0
- package/dist/definition/locate.js.map +1 -0
- package/dist/definition/parse.d.ts +15 -0
- package/dist/definition/parse.d.ts.map +1 -0
- package/dist/definition/parse.js +170 -0
- package/dist/definition/parse.js.map +1 -0
- package/dist/definition/schema.d.ts +39 -0
- package/dist/definition/schema.d.ts.map +1 -0
- package/dist/definition/schema.js +11 -0
- package/dist/definition/schema.js.map +1 -0
- package/dist/dev/cache.d.ts +58 -0
- package/dist/dev/cache.d.ts.map +1 -0
- package/dist/dev/cache.js +287 -0
- package/dist/dev/cache.js.map +1 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +3 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/factors/evaluate.d.ts +21 -0
- package/dist/factors/evaluate.d.ts.map +1 -0
- package/dist/factors/evaluate.js +199 -0
- package/dist/factors/evaluate.js.map +1 -0
- package/dist/factors/graph.d.ts +7 -0
- package/dist/factors/graph.d.ts.map +1 -0
- package/dist/factors/graph.js +39 -0
- package/dist/factors/graph.js.map +1 -0
- package/dist/factors/schema.d.ts +54 -0
- package/dist/factors/schema.d.ts.map +1 -0
- package/dist/factors/schema.js +235 -0
- package/dist/factors/schema.js.map +1 -0
- package/dist/generate/generate.d.ts +16 -0
- package/dist/generate/generate.d.ts.map +1 -0
- package/dist/generate/generate.js +100 -0
- package/dist/generate/generate.js.map +1 -0
- package/dist/generate/types.d.ts +10 -0
- package/dist/generate/types.d.ts.map +1 -0
- package/dist/generate/types.js +126 -0
- package/dist/generate/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +6 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +52 -0
- package/dist/json.js.map +1 -0
- package/dist/model.d.ts +9 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +22 -0
- package/dist/model.js.map +1 -0
- package/dist/native.d.ts +97 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +2 -0
- package/dist/native.js.map +1 -0
- package/dist/patterns/index.d.ts +3 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +3 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/options.d.ts +2 -0
- package/dist/patterns/options.d.ts.map +1 -0
- package/dist/patterns/options.js +7 -0
- package/dist/patterns/options.js.map +1 -0
- package/dist/patterns/run-many.d.ts +41 -0
- package/dist/patterns/run-many.d.ts.map +1 -0
- package/dist/patterns/run-many.js +51 -0
- package/dist/patterns/run-many.js.map +1 -0
- package/dist/patterns/walk-taxonomy.d.ts +37 -0
- package/dist/patterns/walk-taxonomy.d.ts.map +1 -0
- package/dist/patterns/walk-taxonomy.js +81 -0
- package/dist/patterns/walk-taxonomy.js.map +1 -0
- package/dist/questions/references.d.ts +12 -0
- package/dist/questions/references.d.ts.map +1 -0
- package/dist/questions/references.js +76 -0
- package/dist/questions/references.js.map +1 -0
- package/dist/questions/schema.d.ts +18 -0
- package/dist/questions/schema.d.ts.map +1 -0
- package/dist/questions/schema.js +169 -0
- package/dist/questions/schema.js.map +1 -0
- package/dist/state/paths.d.ts +13 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +70 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/requirements.d.ts +25 -0
- package/dist/state/requirements.d.ts.map +1 -0
- package/dist/state/requirements.js +189 -0
- package/dist/state/requirements.js.map +1 -0
- package/docs/SPEC.html +57 -0
- package/docs/skills/systemoneprompts/SKILL.md +239 -0
- package/docs/skills/systemoneprompts/references/application-data.md +79 -0
- package/package.json +94 -0
package/dist/cli/io.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { TypeSafeClient } from "../client.js";
|
|
3
|
+
import { createCloudflareFetch } from "../cloudflare.js";
|
|
4
|
+
import { checkDefinition } from "../definition/check.js";
|
|
5
|
+
import { formatDiagnostic, hasErrors } from "../definition/diagnostics.js";
|
|
6
|
+
import { parseDefinition } from "../definition/parse.js";
|
|
7
|
+
import { createCachingFetch } from "../dev/cache.js";
|
|
8
|
+
import { readEnvModel, resolveModel } from "../model.js";
|
|
9
|
+
import { loadDotEnv } from "./env.js";
|
|
10
|
+
export async function readStdin() {
|
|
11
|
+
const chunks = [];
|
|
12
|
+
for await (const chunk of process.stdin) {
|
|
13
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
14
|
+
}
|
|
15
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
16
|
+
}
|
|
17
|
+
export async function readText(path) {
|
|
18
|
+
return readFile(path, "utf8");
|
|
19
|
+
}
|
|
20
|
+
/** Parse JSON with a message that names the source instead of a bare "Unexpected token". */
|
|
21
|
+
export function parseJson(text, what) {
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(text);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
fail(`${what}: ${error instanceof Error ? error.message : String(error)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Parse and check a definition file; print diagnostics and exit on errors. */
|
|
30
|
+
export async function loadChecked(file) {
|
|
31
|
+
const source = await readText(file);
|
|
32
|
+
const def = parseDefinition(source, { filename: file });
|
|
33
|
+
const diagnostics = checkDefinition(def);
|
|
34
|
+
printDiagnostics(diagnostics);
|
|
35
|
+
if (hasErrors(diagnostics)) {
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
return def;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build the TypeSafe client for a live CLI call. Model precedence, later wins:
|
|
42
|
+
* default → `TYPESAFE_DEFAULT_MODEL` / `TYPESAFE_MODEL` → TOML `model` → `--model`.
|
|
43
|
+
*
|
|
44
|
+
* Cloudflare mode (`CLOUDFLARE_ACCOUNT_ID`) uses `CLOUDFLARE_API_TOKEN` and is
|
|
45
|
+
* mutually exclusive with `TYPESAFE_BASE_URL`.
|
|
46
|
+
*/
|
|
47
|
+
export function createClient(def, options) {
|
|
48
|
+
loadDotEnv();
|
|
49
|
+
const model = resolveModel(readEnvModel(), def.model, options.model);
|
|
50
|
+
const cloudflareAccountId = process.env.CLOUDFLARE_ACCOUNT_ID?.trim() || undefined;
|
|
51
|
+
try {
|
|
52
|
+
const cache = options.cache
|
|
53
|
+
? createCachingFetch(cloudflareAccountId
|
|
54
|
+
? { fetch: createCloudflareFetch({ accountId: cloudflareAccountId }) }
|
|
55
|
+
: {})
|
|
56
|
+
: undefined;
|
|
57
|
+
const client = new TypeSafeClient({
|
|
58
|
+
...(cache ? { fetch: cache } : {}),
|
|
59
|
+
...(cloudflareAccountId ? { cloudflareAccountId } : {}),
|
|
60
|
+
defaultModel: model,
|
|
61
|
+
});
|
|
62
|
+
return { client, model, cache };
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
fail(error instanceof Error ? error.message : String(error));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function printDiagnostics(diagnostics, strict = false) {
|
|
69
|
+
let errors = 0;
|
|
70
|
+
let warnings = 0;
|
|
71
|
+
for (const d of diagnostics) {
|
|
72
|
+
const severity = strict && d.severity === "warning" ? "error" : d.severity;
|
|
73
|
+
if (severity === "error")
|
|
74
|
+
errors += 1;
|
|
75
|
+
else
|
|
76
|
+
warnings += 1;
|
|
77
|
+
console.error(`${severity}: ${formatDiagnostic({ ...d, severity })}`);
|
|
78
|
+
}
|
|
79
|
+
if (diagnostics.length > 0) {
|
|
80
|
+
console.error(`${errors} error(s), ${warnings} warning(s)`);
|
|
81
|
+
}
|
|
82
|
+
return errors;
|
|
83
|
+
}
|
|
84
|
+
export function fail(message, code = 1) {
|
|
85
|
+
console.error(message);
|
|
86
|
+
process.exit(code);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/cli/io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,OAAO,CAAC,IAAI,CAAC,CAuDf"}
|
package/dist/cli/run.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createFactorEvaluator } from "../factors/evaluate.js";
|
|
2
|
+
import { createStateAssert } from "../state/requirements.js";
|
|
3
|
+
import { createClient, fail, loadChecked, parseJson, readStdin, readText } from "./io.js";
|
|
4
|
+
export async function runRun(file, options) {
|
|
5
|
+
if (!file) {
|
|
6
|
+
fail("systemoneprompts run <file> --state s.json | <stdin> [--cache] [--json] [--model name]");
|
|
7
|
+
}
|
|
8
|
+
const def = await loadChecked(file);
|
|
9
|
+
const stateText = options.state ? await readText(options.state) : await readStdin();
|
|
10
|
+
const state = parseJson(stateText, options.state ?? "<stdin>");
|
|
11
|
+
const assertState = createStateAssert(def.requires);
|
|
12
|
+
assertState(state);
|
|
13
|
+
const { client, model, cache } = createClient(def, options);
|
|
14
|
+
const response = await client.systemOne({
|
|
15
|
+
state,
|
|
16
|
+
questions: def.questions,
|
|
17
|
+
model,
|
|
18
|
+
});
|
|
19
|
+
const factors = createFactorEvaluator(def.factorDefinitions)(response.answers);
|
|
20
|
+
const cacheStats = cache?.stats();
|
|
21
|
+
if (options.json) {
|
|
22
|
+
console.log(JSON.stringify({
|
|
23
|
+
model: response.model,
|
|
24
|
+
answers: response.answers,
|
|
25
|
+
factors,
|
|
26
|
+
usage: response.usage,
|
|
27
|
+
cache: cacheStats,
|
|
28
|
+
}, null, 2));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.log(`model ${response.model}`);
|
|
32
|
+
if (def.meta.title)
|
|
33
|
+
console.log(`title ${def.meta.title}`);
|
|
34
|
+
console.log("");
|
|
35
|
+
console.log("answers");
|
|
36
|
+
for (const [id, answer] of Object.entries(response.answers)) {
|
|
37
|
+
console.log(` ${id}`);
|
|
38
|
+
console.log(` ${formatAnswer(answer)}`);
|
|
39
|
+
}
|
|
40
|
+
console.log("");
|
|
41
|
+
console.log("factors");
|
|
42
|
+
for (const [id, value] of Object.entries(factors)) {
|
|
43
|
+
console.log(` ${id} ${value}`);
|
|
44
|
+
}
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log(`usage in=${response.usage.input_tokens} out=${response.usage.output_tokens}`);
|
|
47
|
+
if (cacheStats) {
|
|
48
|
+
console.log(`cache hits=${cacheStats.hits} misses=${cacheStats.misses}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function formatAnswer(answer) {
|
|
52
|
+
if (!answer || typeof answer !== "object")
|
|
53
|
+
return String(answer);
|
|
54
|
+
const a = answer;
|
|
55
|
+
if (a.type === "noul")
|
|
56
|
+
return `noul=${a.noul}`;
|
|
57
|
+
if (a.type === "choice")
|
|
58
|
+
return `choice=${a.choice} confidence=${a.confidence}`;
|
|
59
|
+
if (a.type === "score")
|
|
60
|
+
return `score=${a.score} confidence=${a.confidence}`;
|
|
61
|
+
return JSON.stringify(a);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAoB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1F,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAwB,EACxB,OAA4E;IAE5E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,wFAAwF,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC;IACpF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAgB,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,WAAW,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;QACtC,KAAK;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK;KACN,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO;YACP,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,UAAU;SAClB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,KAAK,CAAC,YAAY,SAAS,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7F,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,IAAI,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;IACjF,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Fetch, Questions, SystemOneRequest, SystemOneResult } from "./native.js";
|
|
2
|
+
export declare const DEFAULT_BASE_URL = "https://api.typesafe.ai";
|
|
3
|
+
export declare const DEFAULT_TIMEOUT_MS = 10000;
|
|
4
|
+
export declare class TypeSafeClientError extends Error {
|
|
5
|
+
constructor(message: string, options?: ErrorOptions);
|
|
6
|
+
}
|
|
7
|
+
export declare class TypeSafeHttpError extends TypeSafeClientError {
|
|
8
|
+
readonly status: number;
|
|
9
|
+
readonly body: unknown;
|
|
10
|
+
readonly requestId: string | undefined;
|
|
11
|
+
readonly retryAfter: number | undefined;
|
|
12
|
+
constructor(status: number, body: unknown, requestId: string | undefined, message?: string, retryAfter?: number);
|
|
13
|
+
}
|
|
14
|
+
export declare class TypeSafeRateLimitError extends TypeSafeHttpError {
|
|
15
|
+
constructor(status: number, body: unknown, requestId: string | undefined, message?: string, retryAfter?: number);
|
|
16
|
+
}
|
|
17
|
+
export declare class TypeSafeTimeoutError extends TypeSafeClientError {
|
|
18
|
+
readonly timeoutMs: number;
|
|
19
|
+
constructor(timeoutMs: number, options?: ErrorOptions);
|
|
20
|
+
}
|
|
21
|
+
export interface TypeSafeClientOptions {
|
|
22
|
+
/** Falls back to `CLOUDFLARE_API_TOKEN` in Cloudflare mode, otherwise `TYPESAFE_API_KEY`. */
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
/** Falls back to `TYPESAFE_BASE_URL`, then `https://api.typesafe.ai`. Incompatible with Cloudflare mode. */
|
|
25
|
+
baseURL?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Cloudflare account id. Falls back to `CLOUDFLARE_ACCOUNT_ID`.
|
|
28
|
+
* When set, requests go to Workers AI `/client/v4/accounts/{id}/ai/run` and `apiKey` is a Cloudflare token.
|
|
29
|
+
*/
|
|
30
|
+
cloudflareAccountId?: string;
|
|
31
|
+
/** Falls back to `TYPESAFE_DEFAULT_MODEL`, then `jev-latest`. */
|
|
32
|
+
defaultModel?: string;
|
|
33
|
+
/** Inject fetch for tests, cache, or a wrapper with its own timeouts. */
|
|
34
|
+
fetch?: Fetch;
|
|
35
|
+
/** Per-attempt timeout in milliseconds. Default 10000. */
|
|
36
|
+
timeout?: number;
|
|
37
|
+
/** Extra headers merged onto every request. */
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
/** Retries after the first attempt. Default 2. Set 0 to disable. */
|
|
40
|
+
maxRetries?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface SystemOneCallOptions {
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
timeout?: number;
|
|
45
|
+
headers?: Record<string, string>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Native HTTP client for TypeSafe System One / JEV.
|
|
49
|
+
*
|
|
50
|
+
* Pass `fetch` (or `timeout`) when you need different transport behaviour. Patterns
|
|
51
|
+
* accept any object with a compatible `systemOne`.
|
|
52
|
+
*/
|
|
53
|
+
export declare class TypeSafeClient {
|
|
54
|
+
#private;
|
|
55
|
+
readonly baseURL: string;
|
|
56
|
+
readonly defaultModel: string;
|
|
57
|
+
readonly timeout: number;
|
|
58
|
+
readonly fetch: Fetch;
|
|
59
|
+
readonly maxRetries: number;
|
|
60
|
+
readonly defaultHeaders: Readonly<Record<string, string>>;
|
|
61
|
+
readonly cloudflareAccountId: string | undefined;
|
|
62
|
+
constructor(options?: TypeSafeClientOptions);
|
|
63
|
+
systemOne<const Q extends Questions>(request: SystemOneRequest<Q>, options?: SystemOneCallOptions): Promise<SystemOneResult<Q>>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvF,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAC1D,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAQzC,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,qBAAa,iBAAkB,SAAQ,mBAAmB;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM;CAStB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;gBAEzD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM;CAKtB;AAED,qBAAa,oBAAqB,SAAQ,mBAAmB;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKtD;AAED,MAAM,WAAW,qBAAqB;IACpC,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,cAAc;;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGrC,OAAO,GAAE,qBAA0B;IA6CzC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EACvC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CA0H/B"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { cloudflareErrorMessage, createCloudflareFetch, isCachingFetch, isCloudflareFetch, } from "./cloudflare.js";
|
|
2
|
+
import { DEFAULT_MODEL } from "./model.js";
|
|
3
|
+
export const DEFAULT_BASE_URL = "https://api.typesafe.ai";
|
|
4
|
+
export const DEFAULT_TIMEOUT_MS = 10_000;
|
|
5
|
+
const SYSTEM_ONE_PATH = "/v1/systemone";
|
|
6
|
+
const CLIENT_VERSION = "0.1.0";
|
|
7
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
8
|
+
function isRetryStatus(status) {
|
|
9
|
+
return status === 408 || status === 429 || (status >= 500 && status < 600);
|
|
10
|
+
}
|
|
11
|
+
export class TypeSafeClientError extends Error {
|
|
12
|
+
constructor(message, options) {
|
|
13
|
+
super(message, options);
|
|
14
|
+
this.name = "TypeSafeClientError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class TypeSafeHttpError extends TypeSafeClientError {
|
|
18
|
+
status;
|
|
19
|
+
body;
|
|
20
|
+
requestId;
|
|
21
|
+
retryAfter;
|
|
22
|
+
constructor(status, body, requestId, message, retryAfter) {
|
|
23
|
+
super(message ?? `TypeSafe API error ${status}`, { cause: body });
|
|
24
|
+
this.name = "TypeSafeHttpError";
|
|
25
|
+
this.status = status;
|
|
26
|
+
this.body = body;
|
|
27
|
+
this.requestId = requestId;
|
|
28
|
+
this.retryAfter = retryAfter;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class TypeSafeRateLimitError extends TypeSafeHttpError {
|
|
32
|
+
constructor(status, body, requestId, message, retryAfter) {
|
|
33
|
+
super(status, body, requestId, message, retryAfter);
|
|
34
|
+
this.name = "TypeSafeRateLimitError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class TypeSafeTimeoutError extends TypeSafeClientError {
|
|
38
|
+
timeoutMs;
|
|
39
|
+
constructor(timeoutMs, options) {
|
|
40
|
+
super(`TypeSafe API timed out after ${timeoutMs}ms`, options);
|
|
41
|
+
this.name = "TypeSafeTimeoutError";
|
|
42
|
+
this.timeoutMs = timeoutMs;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Native HTTP client for TypeSafe System One / JEV.
|
|
47
|
+
*
|
|
48
|
+
* Pass `fetch` (or `timeout`) when you need different transport behaviour. Patterns
|
|
49
|
+
* accept any object with a compatible `systemOne`.
|
|
50
|
+
*/
|
|
51
|
+
export class TypeSafeClient {
|
|
52
|
+
baseURL;
|
|
53
|
+
defaultModel;
|
|
54
|
+
timeout;
|
|
55
|
+
fetch;
|
|
56
|
+
maxRetries;
|
|
57
|
+
defaultHeaders;
|
|
58
|
+
cloudflareAccountId;
|
|
59
|
+
#apiKey;
|
|
60
|
+
constructor(options = {}) {
|
|
61
|
+
const cloudflareAccountId = trimEnv(options.cloudflareAccountId) ?? trimEnv(process.env.CLOUDFLARE_ACCOUNT_ID);
|
|
62
|
+
const envBaseURL = trimEnv(process.env.TYPESAFE_BASE_URL);
|
|
63
|
+
const optionBaseURL = trimEnv(options.baseURL);
|
|
64
|
+
if (cloudflareAccountId && (optionBaseURL !== undefined || envBaseURL !== undefined)) {
|
|
65
|
+
throw new TypeSafeClientError("cloudflareAccountId cannot be combined with baseURL or TYPESAFE_BASE_URL.");
|
|
66
|
+
}
|
|
67
|
+
this.cloudflareAccountId = cloudflareAccountId;
|
|
68
|
+
this.#apiKey =
|
|
69
|
+
trimEnv(options.apiKey) ??
|
|
70
|
+
(cloudflareAccountId
|
|
71
|
+
? trimEnv(process.env.CLOUDFLARE_API_TOKEN)
|
|
72
|
+
: trimEnv(process.env.TYPESAFE_API_KEY)) ??
|
|
73
|
+
"";
|
|
74
|
+
if (!this.#apiKey) {
|
|
75
|
+
throw new TypeSafeClientError(cloudflareAccountId
|
|
76
|
+
? "CLOUDFLARE_API_TOKEN is not set. Pass apiKey or export CLOUDFLARE_API_TOKEN."
|
|
77
|
+
: "TYPESAFE_API_KEY is not set. Pass apiKey or export TYPESAFE_API_KEY.");
|
|
78
|
+
}
|
|
79
|
+
this.baseURL = stripSlash(optionBaseURL ?? envBaseURL ?? DEFAULT_BASE_URL);
|
|
80
|
+
this.defaultModel =
|
|
81
|
+
trimEnv(options.defaultModel) ?? trimEnv(process.env.TYPESAFE_DEFAULT_MODEL) ?? DEFAULT_MODEL;
|
|
82
|
+
this.timeout = positiveMs("timeout", options.timeout ?? DEFAULT_TIMEOUT_MS);
|
|
83
|
+
this.maxRetries = nonNegativeInt("maxRetries", options.maxRetries ?? DEFAULT_MAX_RETRIES);
|
|
84
|
+
const inner = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
85
|
+
if (cloudflareAccountId && isCachingFetch(inner) && !isCloudflareFetch(inner)) {
|
|
86
|
+
throw new TypeSafeClientError("cloudflareAccountId with a caching fetch requires wrapping Cloudflare inside the cache: createCachingFetch({ fetch: createCloudflareFetch({ accountId }) }).");
|
|
87
|
+
}
|
|
88
|
+
this.fetch =
|
|
89
|
+
cloudflareAccountId && !isCloudflareFetch(inner)
|
|
90
|
+
? createCloudflareFetch({ accountId: cloudflareAccountId, fetch: inner })
|
|
91
|
+
: inner;
|
|
92
|
+
if (typeof this.fetch !== "function") {
|
|
93
|
+
throw new TypeSafeClientError("No fetch is available. Pass fetch to TypeSafeClient.");
|
|
94
|
+
}
|
|
95
|
+
this.defaultHeaders = { ...(options.headers ?? {}) };
|
|
96
|
+
}
|
|
97
|
+
async systemOne(request, options = {}) {
|
|
98
|
+
const questions = request.questions;
|
|
99
|
+
if (questions == null || Object.keys(questions).length === 0) {
|
|
100
|
+
throw new TypeSafeClientError("systemOne requires at least one question");
|
|
101
|
+
}
|
|
102
|
+
const body = {
|
|
103
|
+
state: request.state,
|
|
104
|
+
questions,
|
|
105
|
+
model: request.model ?? this.defaultModel,
|
|
106
|
+
};
|
|
107
|
+
const parsed = await this.#postJson(SYSTEM_ONE_PATH, body, options);
|
|
108
|
+
return parsed;
|
|
109
|
+
}
|
|
110
|
+
async #postJson(path, body, options) {
|
|
111
|
+
const timeout = options.timeout === undefined ? this.timeout : positiveMs("timeout", options.timeout);
|
|
112
|
+
const url = `${this.baseURL}${path}`;
|
|
113
|
+
const owned = {
|
|
114
|
+
Authorization: `Bearer ${this.#apiKey}`,
|
|
115
|
+
Accept: "application/json",
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
"User-Agent": `systemoneprompts/${CLIENT_VERSION}`,
|
|
118
|
+
};
|
|
119
|
+
// Header names are case-insensitive; a caller `authorization` must not merge with ours.
|
|
120
|
+
const ownedNames = new Set(Object.keys(owned).map((name) => name.toLowerCase()));
|
|
121
|
+
const headers = {};
|
|
122
|
+
for (const [name, value] of Object.entries({ ...this.defaultHeaders, ...options.headers })) {
|
|
123
|
+
if (!ownedNames.has(name.toLowerCase()))
|
|
124
|
+
headers[name] = value;
|
|
125
|
+
}
|
|
126
|
+
Object.assign(headers, owned);
|
|
127
|
+
const payload = JSON.stringify(body);
|
|
128
|
+
let lastError;
|
|
129
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
130
|
+
try {
|
|
131
|
+
const { response, parsed } = await this.#attempt(url, headers, payload, timeout, options.signal);
|
|
132
|
+
const requestId = response.headers.get("x-typesafe-request-id") ?? undefined;
|
|
133
|
+
if (response.ok)
|
|
134
|
+
return parsed;
|
|
135
|
+
const ErrorType = response.status === 429 ? TypeSafeRateLimitError : TypeSafeHttpError;
|
|
136
|
+
const error = new ErrorType(response.status, parsed, requestId, describeHttpError(response.status, parsed, requestId), retryAfterSeconds(response.headers));
|
|
137
|
+
if (attempt >= this.maxRetries || !isRetryStatus(response.status))
|
|
138
|
+
throw error;
|
|
139
|
+
lastError = error;
|
|
140
|
+
await sleep(retryDelayMs(attempt, response.headers), options.signal);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (error instanceof TypeSafeHttpError)
|
|
144
|
+
throw error;
|
|
145
|
+
if (error instanceof TypeSafeTimeoutError) {
|
|
146
|
+
if (attempt >= this.maxRetries)
|
|
147
|
+
throw error;
|
|
148
|
+
lastError = error;
|
|
149
|
+
await sleep(retryDelayMs(attempt), options.signal);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (options.signal?.aborted) {
|
|
153
|
+
throw new TypeSafeClientError("TypeSafe API request was aborted", { cause: error });
|
|
154
|
+
}
|
|
155
|
+
// A fetch wrapper (e.g. the dev cache's `CacheMissError`) already produced a client
|
|
156
|
+
// error; surface it unchanged instead of wrapping and retrying it as a network failure.
|
|
157
|
+
if (error instanceof TypeSafeClientError)
|
|
158
|
+
throw error;
|
|
159
|
+
if (attempt >= this.maxRetries) {
|
|
160
|
+
throw new TypeSafeClientError(error instanceof Error
|
|
161
|
+
? `TypeSafe API connection error: ${error.message}`
|
|
162
|
+
: "TypeSafe API connection error", { cause: error });
|
|
163
|
+
}
|
|
164
|
+
lastError = error;
|
|
165
|
+
await sleep(retryDelayMs(attempt), options.signal);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
throw lastError instanceof Error
|
|
169
|
+
? lastError
|
|
170
|
+
: new TypeSafeClientError("TypeSafe API request failed");
|
|
171
|
+
}
|
|
172
|
+
async #attempt(url, headers, body, timeout, signal) {
|
|
173
|
+
const controller = new AbortController();
|
|
174
|
+
const abortFromCaller = () => controller.abort(signal?.reason);
|
|
175
|
+
if (signal?.aborted)
|
|
176
|
+
abortFromCaller();
|
|
177
|
+
signal?.addEventListener("abort", abortFromCaller, { once: true });
|
|
178
|
+
let timedOut = false;
|
|
179
|
+
const timer = setTimeout(() => {
|
|
180
|
+
timedOut = true;
|
|
181
|
+
controller.abort();
|
|
182
|
+
}, timeout);
|
|
183
|
+
try {
|
|
184
|
+
const response = await this.fetch(url, {
|
|
185
|
+
method: "POST",
|
|
186
|
+
headers,
|
|
187
|
+
body,
|
|
188
|
+
signal: controller.signal,
|
|
189
|
+
});
|
|
190
|
+
const parsed = await parseBody(response);
|
|
191
|
+
if (timedOut)
|
|
192
|
+
throw new TypeSafeTimeoutError(timeout);
|
|
193
|
+
return { response, parsed };
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (signal?.aborted)
|
|
197
|
+
throw error;
|
|
198
|
+
if (timedOut)
|
|
199
|
+
throw new TypeSafeTimeoutError(timeout, { cause: error });
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
clearTimeout(timer);
|
|
204
|
+
signal?.removeEventListener("abort", abortFromCaller);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function trimEnv(value) {
|
|
209
|
+
if (typeof value !== "string")
|
|
210
|
+
return undefined;
|
|
211
|
+
const trimmed = value.trim();
|
|
212
|
+
return trimmed === "" ? undefined : trimmed;
|
|
213
|
+
}
|
|
214
|
+
function stripSlash(value) {
|
|
215
|
+
return value.replace(/\/+$/, "");
|
|
216
|
+
}
|
|
217
|
+
function positiveMs(name, value) {
|
|
218
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
219
|
+
throw new TypeSafeClientError(`${name} must be a positive number of milliseconds`);
|
|
220
|
+
}
|
|
221
|
+
return value;
|
|
222
|
+
}
|
|
223
|
+
function nonNegativeInt(name, value) {
|
|
224
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
225
|
+
throw new TypeSafeClientError(`${name} must be a non-negative integer`);
|
|
226
|
+
}
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
function retryAfterSeconds(headers) {
|
|
230
|
+
const ms = Number(headers.get("retry-after-ms"));
|
|
231
|
+
if (headers.has("retry-after-ms") && Number.isFinite(ms) && ms >= 0 && ms <= 60_000) {
|
|
232
|
+
return ms / 1000;
|
|
233
|
+
}
|
|
234
|
+
const raw = headers.get("retry-after");
|
|
235
|
+
if (raw === null)
|
|
236
|
+
return undefined;
|
|
237
|
+
const seconds = Number(raw);
|
|
238
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
239
|
+
return Math.min(seconds, 60);
|
|
240
|
+
const date = Date.parse(raw);
|
|
241
|
+
if (Number.isFinite(date)) {
|
|
242
|
+
const delay = date - Date.now();
|
|
243
|
+
if (delay <= 0)
|
|
244
|
+
return 0;
|
|
245
|
+
return Math.min(delay, 60_000) / 1000;
|
|
246
|
+
}
|
|
247
|
+
return undefined;
|
|
248
|
+
}
|
|
249
|
+
function retryDelayMs(attempt, headers) {
|
|
250
|
+
if (headers) {
|
|
251
|
+
const seconds = retryAfterSeconds(headers);
|
|
252
|
+
if (seconds !== undefined)
|
|
253
|
+
return Math.min(seconds * 1000, 60_000);
|
|
254
|
+
}
|
|
255
|
+
const exponential = Math.min(500 * 2 ** attempt, 5000);
|
|
256
|
+
return Math.round(exponential * (1 - Math.random() * 0.25));
|
|
257
|
+
}
|
|
258
|
+
function sleep(ms, signal) {
|
|
259
|
+
return new Promise((resolve, reject) => {
|
|
260
|
+
if (signal?.aborted) {
|
|
261
|
+
reject(signal.reason);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const timer = setTimeout(resolve, ms);
|
|
265
|
+
signal?.addEventListener("abort", () => {
|
|
266
|
+
clearTimeout(timer);
|
|
267
|
+
reject(signal.reason);
|
|
268
|
+
}, { once: true });
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
async function parseBody(response) {
|
|
272
|
+
const text = await response.text();
|
|
273
|
+
if (text.length === 0)
|
|
274
|
+
return undefined;
|
|
275
|
+
try {
|
|
276
|
+
return JSON.parse(text);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return text;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function describeHttpError(status, body, requestId) {
|
|
283
|
+
const id = requestId ? ` (request ${requestId})` : "";
|
|
284
|
+
if (typeof body === "string" && body.trim())
|
|
285
|
+
return `TypeSafe API error ${status}${id}: ${body.trim()}`;
|
|
286
|
+
if (body && typeof body === "object") {
|
|
287
|
+
const record = body;
|
|
288
|
+
const cloudflare = cloudflareErrorMessage(body);
|
|
289
|
+
const message = cloudflare ||
|
|
290
|
+
(typeof record.error === "string" && record.error) ||
|
|
291
|
+
(typeof record.message === "string" && record.message) ||
|
|
292
|
+
(record.error &&
|
|
293
|
+
typeof record.error === "object" &&
|
|
294
|
+
typeof record.error.message === "string" &&
|
|
295
|
+
record.error.message);
|
|
296
|
+
if (message)
|
|
297
|
+
return `TypeSafe API error ${status}${id}: ${message}`;
|
|
298
|
+
}
|
|
299
|
+
return `TypeSafe API error ${status}${id}`;
|
|
300
|
+
}
|
|
301
|
+
//# 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,29 @@
|
|
|
1
|
+
import type { Fetch } from "./native.js";
|
|
2
|
+
export declare const CLOUDFLARE_MODEL = "typesafe/jev";
|
|
3
|
+
export declare const CLOUDFLARE_API_ORIGIN = "https://api.cloudflare.com";
|
|
4
|
+
export declare function cloudflareRunUrl(accountId: string): string;
|
|
5
|
+
export declare function wrapCloudflareRequest(payload: {
|
|
6
|
+
state: unknown;
|
|
7
|
+
questions: unknown;
|
|
8
|
+
}): {
|
|
9
|
+
model: string;
|
|
10
|
+
input: {
|
|
11
|
+
state: unknown;
|
|
12
|
+
questions: unknown;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/** True when `fetch` is `createCachingFetch()` so Cloudflare wrapping stays innermost. */
|
|
16
|
+
export declare function isCachingFetch(fetch: Fetch): boolean;
|
|
17
|
+
export declare function markCloudflareFetch<T extends Fetch>(fetch: T): T;
|
|
18
|
+
export declare function isCloudflareFetch(fetch: Fetch): boolean;
|
|
19
|
+
export declare function cloudflareErrorMessage(body: unknown): string | undefined;
|
|
20
|
+
export declare function cloudflareFailureStatus(body: unknown, httpStatus?: number): number | undefined;
|
|
21
|
+
/** Pull `{ model, answers, usage }` out of a Cloudflare Workers AI envelope.
|
|
22
|
+
* Already-native System One objects are returned unchanged.
|
|
23
|
+
*/
|
|
24
|
+
export declare function unwrapCloudflareResult(parsed: unknown): Record<string, unknown> | undefined;
|
|
25
|
+
export declare function createCloudflareFetch(options: {
|
|
26
|
+
accountId: string;
|
|
27
|
+
fetch?: Fetch;
|
|
28
|
+
}): Fetch;
|
|
29
|
+
//# sourceMappingURL=cloudflare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAGlE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C,CAKA;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAKpD;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAGhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAcxE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB9F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAS3F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,KAAK,CAyC1F"}
|