@dharta/cli 0.6.77
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 +21 -0
- package/README.md +167 -0
- package/dist/agent.d.ts +17 -0
- package/dist/agent.js +134 -0
- package/dist/agent.js.map +1 -0
- package/dist/api-error.d.ts +3 -0
- package/dist/api-error.js +80 -0
- package/dist/api-error.js.map +1 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +19 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +1978 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agents.d.ts +131 -0
- package/dist/commands/agents.js +439 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/analytics.d.ts +25 -0
- package/dist/commands/analytics.js +166 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/api.d.ts +19 -0
- package/dist/commands/api.js +278 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/appearance.d.ts +19 -0
- package/dist/commands/appearance.js +63 -0
- package/dist/commands/appearance.js.map +1 -0
- package/dist/commands/artifact.d.ts +33 -0
- package/dist/commands/artifact.js +235 -0
- package/dist/commands/artifact.js.map +1 -0
- package/dist/commands/audit-log.d.ts +32 -0
- package/dist/commands/audit-log.js +102 -0
- package/dist/commands/audit-log.js.map +1 -0
- package/dist/commands/auth.d.ts +47 -0
- package/dist/commands/auth.js +117 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/caps.d.ts +82 -0
- package/dist/commands/caps.js +213 -0
- package/dist/commands/caps.js.map +1 -0
- package/dist/commands/create.d.ts +22 -0
- package/dist/commands/create.js +76 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deploy.d.ts +45 -0
- package/dist/commands/deploy.js +892 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +33 -0
- package/dist/commands/dev.js +655 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/directories.d.ts +60 -0
- package/dist/commands/directories.js +83 -0
- package/dist/commands/directories.js.map +1 -0
- package/dist/commands/doctor.d.ts +13 -0
- package/dist/commands/doctor.js +123 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/embed-keys.d.ts +61 -0
- package/dist/commands/embed-keys.js +165 -0
- package/dist/commands/embed-keys.js.map +1 -0
- package/dist/commands/env.d.ts +59 -0
- package/dist/commands/env.js +300 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/files.d.ts +14 -0
- package/dist/commands/files.js +84 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/git-credential.d.ts +1 -0
- package/dist/commands/git-credential.js +70 -0
- package/dist/commands/git-credential.js.map +1 -0
- package/dist/commands/kartas.d.ts +101 -0
- package/dist/commands/kartas.js +289 -0
- package/dist/commands/kartas.js.map +1 -0
- package/dist/commands/keys.d.ts +33 -0
- package/dist/commands/keys.js +141 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/login.d.ts +22 -0
- package/dist/commands/login.js +78 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +14 -0
- package/dist/commands/logs.js +89 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/members.d.ts +32 -0
- package/dist/commands/members.js +77 -0
- package/dist/commands/members.js.map +1 -0
- package/dist/commands/model-keys.d.ts +22 -0
- package/dist/commands/model-keys.js +222 -0
- package/dist/commands/model-keys.js.map +1 -0
- package/dist/commands/open.d.ts +29 -0
- package/dist/commands/open.js +119 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/parity.d.ts +15 -0
- package/dist/commands/parity.js +73 -0
- package/dist/commands/parity.js.map +1 -0
- package/dist/commands/rollback.d.ts +21 -0
- package/dist/commands/rollback.js +26 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/schedules.d.ts +52 -0
- package/dist/commands/schedules.js +231 -0
- package/dist/commands/schedules.js.map +1 -0
- package/dist/commands/scopes.d.ts +3 -0
- package/dist/commands/scopes.js +21 -0
- package/dist/commands/scopes.js.map +1 -0
- package/dist/commands/sessions.d.ts +53 -0
- package/dist/commands/sessions.js +142 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/setup.d.ts +28 -0
- package/dist/commands/setup.js +949 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +19 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.js +120 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/usage.d.ts +3 -0
- package/dist/commands/usage.js +37 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/webhooks.d.ts +47 -0
- package/dist/commands/webhooks.js +156 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.js +17 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/completions.d.ts +13 -0
- package/dist/completions.js +120 -0
- package/dist/completions.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.js +98 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +14 -0
- package/dist/context.js +38 -0
- package/dist/context.js.map +1 -0
- package/dist/device-flow.d.ts +9 -0
- package/dist/device-flow.js +127 -0
- package/dist/device-flow.js.map +1 -0
- package/dist/harness-preflight.d.ts +24 -0
- package/dist/harness-preflight.js +252 -0
- package/dist/harness-preflight.js.map +1 -0
- package/dist/harnesses.d.ts +11 -0
- package/dist/harnesses.js +112 -0
- package/dist/harnesses.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/login-offer.d.ts +9 -0
- package/dist/login-offer.js +36 -0
- package/dist/login-offer.js.map +1 -0
- package/dist/manifest.d.ts +15 -0
- package/dist/manifest.js +142 -0
- package/dist/manifest.js.map +1 -0
- package/dist/money.d.ts +1 -0
- package/dist/money.js +16 -0
- package/dist/money.js.map +1 -0
- package/dist/output.d.ts +2 -0
- package/dist/output.js +20 -0
- package/dist/output.js.map +1 -0
- package/dist/runtime.d.ts +19 -0
- package/dist/runtime.js +95 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scaffold.d.ts +16 -0
- package/dist/scaffold.js +74 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/setup-scan.d.ts +21 -0
- package/dist/setup-scan.js +127 -0
- package/dist/setup-scan.js.map +1 -0
- package/dist/templates.d.ts +14 -0
- package/dist/templates.js +65 -0
- package/dist/templates.js.map +1 -0
- package/dist/validators.d.ts +10 -0
- package/dist/validators.js +116 -0
- package/dist/validators.js.map +1 -0
- package/dist/version-check.d.ts +25 -0
- package/dist/version-check.js +68 -0
- package/dist/version-check.js.map +1 -0
- package/node_modules/@dharta/sdk/LICENSE +21 -0
- package/node_modules/@dharta/sdk/README.md +87 -0
- package/node_modules/@dharta/sdk/dist/errors.d.ts +20 -0
- package/node_modules/@dharta/sdk/dist/errors.d.ts.map +1 -0
- package/node_modules/@dharta/sdk/dist/errors.js +51 -0
- package/node_modules/@dharta/sdk/dist/errors.js.map +1 -0
- package/node_modules/@dharta/sdk/dist/http.d.ts +26 -0
- package/node_modules/@dharta/sdk/dist/http.d.ts.map +1 -0
- package/node_modules/@dharta/sdk/dist/http.js +136 -0
- package/node_modules/@dharta/sdk/dist/http.js.map +1 -0
- package/node_modules/@dharta/sdk/dist/index.d.ts +15 -0
- package/node_modules/@dharta/sdk/dist/index.d.ts.map +1 -0
- package/node_modules/@dharta/sdk/dist/index.js +21 -0
- package/node_modules/@dharta/sdk/dist/index.js.map +1 -0
- package/node_modules/@dharta/sdk/dist/resources.d.ts +48 -0
- package/node_modules/@dharta/sdk/dist/resources.d.ts.map +1 -0
- package/node_modules/@dharta/sdk/dist/resources.js +150 -0
- package/node_modules/@dharta/sdk/dist/resources.js.map +1 -0
- package/node_modules/@dharta/sdk/dist/types.d.ts +94 -0
- package/node_modules/@dharta/sdk/dist/types.d.ts.map +1 -0
- package/node_modules/@dharta/sdk/dist/types.js +59 -0
- package/node_modules/@dharta/sdk/dist/types.js.map +1 -0
- package/node_modules/@dharta/sdk/package.json +32 -0
- package/node_modules/@dharta/sdk/src/errors.ts +58 -0
- package/node_modules/@dharta/sdk/src/http.ts +166 -0
- package/node_modules/@dharta/sdk/src/index.ts +36 -0
- package/node_modules/@dharta/sdk/src/resources.ts +197 -0
- package/node_modules/@dharta/sdk/src/types.ts +179 -0
- package/package.json +38 -0
- package/src/agent.ts +147 -0
- package/src/api-error.ts +88 -0
- package/src/browser.ts +20 -0
- package/src/cli.ts +2339 -0
- package/src/commands/agents.ts +635 -0
- package/src/commands/analytics.ts +181 -0
- package/src/commands/api.ts +297 -0
- package/src/commands/appearance.ts +79 -0
- package/src/commands/artifact.ts +331 -0
- package/src/commands/audit-log.ts +125 -0
- package/src/commands/auth.ts +186 -0
- package/src/commands/caps.ts +302 -0
- package/src/commands/create.ts +114 -0
- package/src/commands/deploy.ts +1122 -0
- package/src/commands/dev.ts +792 -0
- package/src/commands/directories.ts +136 -0
- package/src/commands/doctor.ts +138 -0
- package/src/commands/embed-keys.ts +237 -0
- package/src/commands/env.ts +369 -0
- package/src/commands/files.ts +124 -0
- package/src/commands/git-credential.ts +78 -0
- package/src/commands/kartas.ts +439 -0
- package/src/commands/keys.ts +206 -0
- package/src/commands/login.ts +115 -0
- package/src/commands/logs.ts +111 -0
- package/src/commands/members.ts +109 -0
- package/src/commands/model-keys.ts +278 -0
- package/src/commands/open.ts +173 -0
- package/src/commands/parity.ts +96 -0
- package/src/commands/rollback.ts +45 -0
- package/src/commands/schedules.ts +290 -0
- package/src/commands/scopes.ts +22 -0
- package/src/commands/sessions.ts +225 -0
- package/src/commands/setup.ts +1176 -0
- package/src/commands/status.ts +94 -0
- package/src/commands/update.ts +157 -0
- package/src/commands/usage.ts +41 -0
- package/src/commands/webhooks.ts +200 -0
- package/src/commands/whoami.ts +24 -0
- package/src/completions.ts +168 -0
- package/src/config.ts +143 -0
- package/src/context.ts +59 -0
- package/src/device-flow.ts +174 -0
- package/src/harness-preflight.ts +293 -0
- package/src/harnesses.ts +117 -0
- package/src/index.ts +3 -0
- package/src/login-offer.ts +49 -0
- package/src/manifest.ts +153 -0
- package/src/money.ts +15 -0
- package/src/output.ts +22 -0
- package/src/runtime.ts +127 -0
- package/src/scaffold.ts +102 -0
- package/src/setup-scan.ts +154 -0
- package/src/templates.ts +85 -0
- package/src/validators.ts +124 -0
- package/src/version-check.ts +75 -0
- package/templates/blank/CLAUDE.md +21 -0
- package/templates/blank/dharta.toml +11 -0
- package/templates/faq-agent/CLAUDE.md +51 -0
- package/templates/faq-agent/dharta.toml +11 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export function validateDateOnly(value, flag) {
|
|
2
|
+
normalizeDateOnly(value, flag);
|
|
3
|
+
}
|
|
4
|
+
export function normalizeDateOnly(value, flag) {
|
|
5
|
+
const normalized = value.trim();
|
|
6
|
+
if (!isDateOnly(normalized)) {
|
|
7
|
+
throw new Error(`${flag} must use YYYY-MM-DD, e.g. 2026-05-18.`);
|
|
8
|
+
}
|
|
9
|
+
return normalized;
|
|
10
|
+
}
|
|
11
|
+
export function validateIsoTimestamp(value, flag) {
|
|
12
|
+
normalizeIsoTimestamp(value, flag);
|
|
13
|
+
}
|
|
14
|
+
export function normalizeIsoTimestamp(value, flag) {
|
|
15
|
+
const normalized = value.trim();
|
|
16
|
+
const match = normalized.match(/^(\d{4}-\d{2}-\d{2})T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/);
|
|
17
|
+
if (!match) {
|
|
18
|
+
throw isoTimestampError(flag);
|
|
19
|
+
}
|
|
20
|
+
if (!isDateOnly(match[1]))
|
|
21
|
+
throw isoTimestampError(flag);
|
|
22
|
+
const date = new Date(normalized);
|
|
23
|
+
if (Number.isNaN(date.getTime()))
|
|
24
|
+
throw isoTimestampError(flag);
|
|
25
|
+
return normalized;
|
|
26
|
+
}
|
|
27
|
+
export function parseReleaseVersion(value, flag) {
|
|
28
|
+
const normalized = value.trim();
|
|
29
|
+
if (!normalized)
|
|
30
|
+
throw new Error(`${flag} cannot be blank.`);
|
|
31
|
+
const stripped = normalized.startsWith("v") ? normalized.slice(1) : normalized;
|
|
32
|
+
if (!/^[1-9]\d*$/.test(stripped)) {
|
|
33
|
+
throw new Error(`${flag} must be a release version like v3 or 3.`);
|
|
34
|
+
}
|
|
35
|
+
const parsed = Number(stripped);
|
|
36
|
+
if (!Number.isSafeInteger(parsed)) {
|
|
37
|
+
throw new Error(`${flag} must be a release version like v3 or 3.`);
|
|
38
|
+
}
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
export function parsePositiveInteger(value, label) {
|
|
42
|
+
const normalized = value.trim();
|
|
43
|
+
if (!/^[1-9]\d*$/.test(normalized)) {
|
|
44
|
+
throw new Error(`${label} must be a positive whole number.`);
|
|
45
|
+
}
|
|
46
|
+
const parsed = Number(normalized);
|
|
47
|
+
if (!Number.isSafeInteger(parsed)) {
|
|
48
|
+
throw new Error(`${label} must be a positive whole number.`);
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
export function normalizeNonBlank(value, label) {
|
|
53
|
+
const normalized = value.trim();
|
|
54
|
+
if (!normalized)
|
|
55
|
+
throw new Error(`${label} cannot be blank.`);
|
|
56
|
+
return normalized;
|
|
57
|
+
}
|
|
58
|
+
export function normalizeHttpUrl(value, flag) {
|
|
59
|
+
const normalized = normalizeNonBlank(value, flag);
|
|
60
|
+
let parsed;
|
|
61
|
+
try {
|
|
62
|
+
parsed = new URL(normalized);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new Error(`${flag} must be an absolute http(s) URL.`);
|
|
66
|
+
}
|
|
67
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
68
|
+
throw new Error(`${flag} must be an absolute http(s) URL.`);
|
|
69
|
+
}
|
|
70
|
+
return normalized;
|
|
71
|
+
}
|
|
72
|
+
export function normalizeTimezone(value, flag) {
|
|
73
|
+
const normalized = normalizeNonBlank(value, flag);
|
|
74
|
+
try {
|
|
75
|
+
Intl.DateTimeFormat("en-US", { timeZone: normalized }).format(new Date());
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
throw new Error(`${flag} must be a valid IANA timezone, e.g. UTC or America/Los_Angeles.`);
|
|
79
|
+
}
|
|
80
|
+
return normalized;
|
|
81
|
+
}
|
|
82
|
+
export function closestChoice(value, allowed) {
|
|
83
|
+
if (value.length === 0)
|
|
84
|
+
return null;
|
|
85
|
+
let best = null;
|
|
86
|
+
for (const choice of allowed) {
|
|
87
|
+
const distance = levenshtein(value, choice);
|
|
88
|
+
if (distance <= 2 && (!best || distance < best.distance)) {
|
|
89
|
+
best = { choice, distance };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return best?.choice ?? null;
|
|
93
|
+
}
|
|
94
|
+
function isDateOnly(value) {
|
|
95
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
96
|
+
return false;
|
|
97
|
+
const date = new Date(`${value}T00:00:00.000Z`);
|
|
98
|
+
return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;
|
|
99
|
+
}
|
|
100
|
+
function isoTimestampError(flag) {
|
|
101
|
+
return new Error(`${flag} must be an ISO timestamp, e.g. 2026-05-18T00:00:00Z.`);
|
|
102
|
+
}
|
|
103
|
+
function levenshtein(a, b) {
|
|
104
|
+
const prev = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
105
|
+
const curr = Array(b.length + 1);
|
|
106
|
+
for (let i = 1; i <= a.length; i += 1) {
|
|
107
|
+
curr[0] = i;
|
|
108
|
+
for (let j = 1; j <= b.length; j += 1) {
|
|
109
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
110
|
+
curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);
|
|
111
|
+
}
|
|
112
|
+
prev.splice(0, prev.length, ...curr);
|
|
113
|
+
}
|
|
114
|
+
return prev[b.length];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const NPM_LATEST_URL = "https://registry.npmjs.org/@dharta.ai%2fcli/latest";
|
|
2
|
+
export interface VersionCheckOptions {
|
|
3
|
+
root: string;
|
|
4
|
+
currentVersion?: string;
|
|
5
|
+
fetchImpl?: typeof fetch;
|
|
6
|
+
latestUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export type VersionCheck = {
|
|
9
|
+
status: "current";
|
|
10
|
+
current: string;
|
|
11
|
+
latest: string;
|
|
12
|
+
} | {
|
|
13
|
+
status: "ahead";
|
|
14
|
+
current: string;
|
|
15
|
+
latest: string;
|
|
16
|
+
} | {
|
|
17
|
+
status: "outdated";
|
|
18
|
+
current: string;
|
|
19
|
+
latest: string;
|
|
20
|
+
} | {
|
|
21
|
+
status: "unknown";
|
|
22
|
+
reason: string;
|
|
23
|
+
current?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function checkNpmLatestVersion(opts: VersionCheckOptions): Promise<VersionCheck>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
export const NPM_LATEST_URL = "https://registry.npmjs.org/@dharta.ai%2fcli/latest";
|
|
4
|
+
export async function checkNpmLatestVersion(opts) {
|
|
5
|
+
const current = opts.currentVersion ?? (await readPackageVersion(opts.root));
|
|
6
|
+
if (!current)
|
|
7
|
+
return { status: "unknown", reason: "could not read package.json" };
|
|
8
|
+
const latest = await fetchLatestVersion(opts);
|
|
9
|
+
if (!latest)
|
|
10
|
+
return { status: "unknown", reason: "npm registry did not return a version", current };
|
|
11
|
+
const comparison = compareVersions(current, latest);
|
|
12
|
+
if (comparison === null)
|
|
13
|
+
return { status: "unknown", reason: `could not compare ${current} with ${latest}`, current };
|
|
14
|
+
if (comparison === 0)
|
|
15
|
+
return { status: "current", current, latest };
|
|
16
|
+
if (comparison > 0)
|
|
17
|
+
return { status: "ahead", current, latest };
|
|
18
|
+
return { status: "outdated", current, latest };
|
|
19
|
+
}
|
|
20
|
+
async function readPackageVersion(root) {
|
|
21
|
+
try {
|
|
22
|
+
const raw = await fs.readFile(path.join(root, "package.json"), "utf8");
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
return typeof parsed.version === "string" ? parsed.version : null;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function fetchLatestVersion(opts) {
|
|
31
|
+
const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
|
|
32
|
+
const url = opts.latestUrl ?? NPM_LATEST_URL;
|
|
33
|
+
const controller = new AbortController();
|
|
34
|
+
const timeout = setTimeout(() => controller.abort(), 1500);
|
|
35
|
+
try {
|
|
36
|
+
const res = await fetchImpl(url, { signal: controller.signal });
|
|
37
|
+
if (!res.ok)
|
|
38
|
+
return null;
|
|
39
|
+
const body = (await res.json());
|
|
40
|
+
return typeof body.version === "string" ? body.version : null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
clearTimeout(timeout);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function compareVersions(a, b) {
|
|
50
|
+
const left = parseVersion(a);
|
|
51
|
+
const right = parseVersion(b);
|
|
52
|
+
if (!left || !right)
|
|
53
|
+
return null;
|
|
54
|
+
for (let i = 0; i < 3; i++) {
|
|
55
|
+
if (left[i] < right[i])
|
|
56
|
+
return -1;
|
|
57
|
+
if (left[i] > right[i])
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
function parseVersion(version) {
|
|
63
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
|
|
64
|
+
if (!match)
|
|
65
|
+
return null;
|
|
66
|
+
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 LifeSage LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# @dharta/sdk
|
|
2
|
+
|
|
3
|
+
Lightweight TypeScript SDK for the Dharta API. No runtime
|
|
4
|
+
dependencies — uses native `fetch` (Node ≥ 18.17 or any modern
|
|
5
|
+
browser). The full machine-readable OpenAPI description is served by
|
|
6
|
+
the Dharta backend at `https://dharta.ai/openapi.json`.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @dharta/sdk
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { Dharta } from "@dharta/sdk";
|
|
18
|
+
|
|
19
|
+
const karta = new Dharta({
|
|
20
|
+
apiKey: process.env.DHARTA_API_KEY!, // "dh_live_…"
|
|
21
|
+
// baseUrl is optional; defaults to https://dharta.ai (the control API)
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// List API keys
|
|
25
|
+
const keys = await dharta.apiKeys.list();
|
|
26
|
+
|
|
27
|
+
// Create one (the plaintext `secret` is returned exactly once)
|
|
28
|
+
const { api_key, secret } = await dharta.apiKeys.create("ci-runner", ["write"]);
|
|
29
|
+
console.log("Store this now, it won't be shown again:", secret);
|
|
30
|
+
|
|
31
|
+
// Store a BYOK provider key (encrypted at rest server-side)
|
|
32
|
+
await dharta.modelKeys.create("anthropic", process.env.ANTHROPIC_API_KEY!, "primary");
|
|
33
|
+
|
|
34
|
+
// Manage webhook endpoints
|
|
35
|
+
const { webhook_endpoint, secret: signingSecret } = await dharta.webhookEndpoints.create({
|
|
36
|
+
url: "https://example.com/karta-webhook",
|
|
37
|
+
event_types: ["subscription.created", "invoice.paid"],
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Usage + billing
|
|
41
|
+
const usage = await dharta.usage.summary();
|
|
42
|
+
const billing = await dharta.billing.status();
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Errors
|
|
46
|
+
|
|
47
|
+
Every 4xx/5xx response throws a typed `KartaError` subclass that
|
|
48
|
+
preserves `status` and the parsed JSON `body`:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { KartaValidationError } from "@dharta/sdk";
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
await dharta.apiKeys.create("");
|
|
55
|
+
} catch (e) {
|
|
56
|
+
if (e instanceof KartaValidationError) {
|
|
57
|
+
console.warn(e.body); // { error: "validation_failed", message: "Name is required" }
|
|
58
|
+
} else {
|
|
59
|
+
throw e;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Subclasses: `KartaAuthError` (401), `KartaForbiddenError` (403),
|
|
65
|
+
`KartaNotFoundError` (404), `KartaValidationError` (422). Anything
|
|
66
|
+
else throws the base `KartaError`.
|
|
67
|
+
|
|
68
|
+
## Development
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install
|
|
72
|
+
npm run build # tsc → ./dist
|
|
73
|
+
npm test # vitest against a stub fetch
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Surface
|
|
77
|
+
|
|
78
|
+
| Resource | Methods |
|
|
79
|
+
| -------------------- | ---------------------------------------------------------------------- |
|
|
80
|
+
| `apiKeys` | `list()`, `create(name, scopes?)`, `revoke(id)` |
|
|
81
|
+
| `modelKeys` | `list()`, `create(provider, plaintext, name?)`, `revoke(id)` |
|
|
82
|
+
| `webhookEndpoints` | `list()`, `create(params)`, `update(id, params)`, `enable(id)`, `delete(id)` |
|
|
83
|
+
| `usage` | `summary()` |
|
|
84
|
+
| `billing` | `status()` |
|
|
85
|
+
|
|
86
|
+
Auth is Bearer-only here. The browser dashboard talks to the same
|
|
87
|
+
endpoints over a Devise session cookie — see the OpenAPI doc.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ErrorBody } from "./types.js";
|
|
2
|
+
export declare class KartaError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly body: ErrorBody | string | null;
|
|
5
|
+
constructor(message: string, status: number, body: ErrorBody | string | null);
|
|
6
|
+
}
|
|
7
|
+
export declare class KartaAuthError extends KartaError {
|
|
8
|
+
constructor(body: ErrorBody | string | null);
|
|
9
|
+
}
|
|
10
|
+
export declare class KartaForbiddenError extends KartaError {
|
|
11
|
+
constructor(body: ErrorBody | string | null);
|
|
12
|
+
}
|
|
13
|
+
export declare class KartaNotFoundError extends KartaError {
|
|
14
|
+
constructor(body: ErrorBody | string | null);
|
|
15
|
+
}
|
|
16
|
+
export declare class KartaValidationError extends KartaError {
|
|
17
|
+
constructor(body: ErrorBody | string | null);
|
|
18
|
+
}
|
|
19
|
+
export declare function errorFor(status: number, body: ErrorBody | string | null): KartaError;
|
|
20
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IAEzC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAK3E;CACF;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,YAAY,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAG1C;CACF;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,YAAY,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAG1C;CACF;AAED,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,YAAY,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAG1C;CACF;AAED,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,YAAY,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAG1C;CACF;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAC9B,UAAU,CAUZ"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Base class so consumers can `catch (e: KartaError)` without
|
|
2
|
+
// switching on status codes manually for the common cases.
|
|
3
|
+
export class KartaError extends Error {
|
|
4
|
+
status;
|
|
5
|
+
body;
|
|
6
|
+
constructor(message, status, body) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "KartaError";
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.body = body;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class KartaAuthError extends KartaError {
|
|
14
|
+
constructor(body) {
|
|
15
|
+
super("Unauthenticated or invalid API key", 401, body);
|
|
16
|
+
this.name = "KartaAuthError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class KartaForbiddenError extends KartaError {
|
|
20
|
+
constructor(body) {
|
|
21
|
+
super("Forbidden — caller lacks required scope", 403, body);
|
|
22
|
+
this.name = "KartaForbiddenError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class KartaNotFoundError extends KartaError {
|
|
26
|
+
constructor(body) {
|
|
27
|
+
super("Resource not found", 404, body);
|
|
28
|
+
this.name = "KartaNotFoundError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class KartaValidationError extends KartaError {
|
|
32
|
+
constructor(body) {
|
|
33
|
+
super("Validation failed", 422, body);
|
|
34
|
+
this.name = "KartaValidationError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function errorFor(status, body) {
|
|
38
|
+
if (status === 401)
|
|
39
|
+
return new KartaAuthError(body);
|
|
40
|
+
if (status === 403)
|
|
41
|
+
return new KartaForbiddenError(body);
|
|
42
|
+
if (status === 404)
|
|
43
|
+
return new KartaNotFoundError(body);
|
|
44
|
+
if (status === 422)
|
|
45
|
+
return new KartaValidationError(body);
|
|
46
|
+
const msg = body && typeof body === "object" && "message" in body && body.message
|
|
47
|
+
? body.message
|
|
48
|
+
: `Dharta API error ${status}`;
|
|
49
|
+
return new KartaError(String(msg), status, body);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,2DAA2D;AAC3D,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,MAAM,CAAS;IACf,IAAI,CAA4B;IAEzC,YAAY,OAAe,EAAE,MAAc,EAAE,IAA+B;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,IAA+B;QACzC,KAAK,CAAC,oCAAoC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IACjD,YAAY,IAA+B;QACzC,KAAK,CAAC,yCAAyC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,IAA+B;QACzC,KAAK,CAAC,oBAAoB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClD,YAAY,IAA+B;QACzC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CACtB,MAAc,EACd,IAA+B;IAE/B,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,GAAG,GACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO;QACnE,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC;IACnC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface KartaOptions {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
fetch?: typeof fetch;
|
|
5
|
+
formatError?: (status: number, body: unknown) => Error;
|
|
6
|
+
formatNetworkError?: (url: string, error: unknown) => Error;
|
|
7
|
+
}
|
|
8
|
+
export interface RequestOptions {
|
|
9
|
+
method?: string;
|
|
10
|
+
path: string;
|
|
11
|
+
query?: Record<string, string | number | boolean | undefined>;
|
|
12
|
+
body?: unknown;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export declare class HttpClient {
|
|
16
|
+
private readonly apiKey;
|
|
17
|
+
private readonly baseUrl;
|
|
18
|
+
private readonly fetchImpl;
|
|
19
|
+
private readonly formatError?;
|
|
20
|
+
private readonly formatNetworkError?;
|
|
21
|
+
constructor(opts: KartaOptions);
|
|
22
|
+
request<T>(opts: RequestOptions): Promise<T>;
|
|
23
|
+
raw(path: string, init?: RequestInit): Promise<Response>;
|
|
24
|
+
private networkError;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAIrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;IAGvD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;CAC7D;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAYD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAyC;IAE7E,YAAY,IAAI,EAAE,YAAY,EAkB7B;IAEK,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAmDjD;IAIK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAc7D;IAED,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { errorFor } from "./errors.js";
|
|
2
|
+
const PROTECTED_HEADER_NAMES = new Set([
|
|
3
|
+
"authorization",
|
|
4
|
+
"host",
|
|
5
|
+
"cookie",
|
|
6
|
+
"content-length",
|
|
7
|
+
"connection",
|
|
8
|
+
"transfer-encoding",
|
|
9
|
+
"proxy-authorization",
|
|
10
|
+
]);
|
|
11
|
+
export class HttpClient {
|
|
12
|
+
apiKey;
|
|
13
|
+
baseUrl;
|
|
14
|
+
fetchImpl;
|
|
15
|
+
formatError;
|
|
16
|
+
formatNetworkError;
|
|
17
|
+
constructor(opts) {
|
|
18
|
+
if (!opts.apiKey) {
|
|
19
|
+
throw new Error("DhartaSDK: `apiKey` is required.");
|
|
20
|
+
}
|
|
21
|
+
this.apiKey = opts.apiKey;
|
|
22
|
+
// dharta.ai, not api.dharta.ai: the SDK speaks to the control API
|
|
23
|
+
// (RFC 0011 HOST-5 note; api.dharta.ai is the data plane).
|
|
24
|
+
this.baseUrl = (opts.baseUrl ?? "https://dharta.ai").replace(/\/+$/, "");
|
|
25
|
+
// Bind so non-window fetch (msw / stub server) keeps its `this`.
|
|
26
|
+
const f = opts.fetch ?? globalThis.fetch;
|
|
27
|
+
if (!f) {
|
|
28
|
+
throw new Error("DhartaSDK: no `fetch` implementation available. Pass one via `fetch` option on Node <18.");
|
|
29
|
+
}
|
|
30
|
+
this.fetchImpl = f.bind(globalThis);
|
|
31
|
+
this.formatError = opts.formatError;
|
|
32
|
+
this.formatNetworkError = opts.formatNetworkError;
|
|
33
|
+
}
|
|
34
|
+
async request(opts) {
|
|
35
|
+
const url = new URL(this.baseUrl + opts.path);
|
|
36
|
+
if (opts.query) {
|
|
37
|
+
for (const [k, v] of Object.entries(opts.query)) {
|
|
38
|
+
if (v !== undefined)
|
|
39
|
+
url.searchParams.set(k, String(v));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const extraHeaders = sanitizeHeaders(opts.headers);
|
|
43
|
+
const headers = {
|
|
44
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
45
|
+
Accept: "application/json",
|
|
46
|
+
...extraHeaders,
|
|
47
|
+
};
|
|
48
|
+
let body;
|
|
49
|
+
if (opts.body !== undefined) {
|
|
50
|
+
headers["Content-Type"] = "application/json";
|
|
51
|
+
body = JSON.stringify(opts.body);
|
|
52
|
+
}
|
|
53
|
+
let res;
|
|
54
|
+
try {
|
|
55
|
+
res = await this.fetchImpl(url.toString(), {
|
|
56
|
+
method: opts.method ?? "GET",
|
|
57
|
+
headers,
|
|
58
|
+
body,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
throw this.networkError(url.toString(), error);
|
|
63
|
+
}
|
|
64
|
+
if (res.status === 204) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const text = await res.text();
|
|
68
|
+
let parsed = null;
|
|
69
|
+
if (text.length > 0) {
|
|
70
|
+
try {
|
|
71
|
+
parsed = JSON.parse(text);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
parsed = text;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
throw this.formatError
|
|
79
|
+
? this.formatError(res.status, parsed)
|
|
80
|
+
: errorFor(res.status, parsed);
|
|
81
|
+
}
|
|
82
|
+
return parsed;
|
|
83
|
+
}
|
|
84
|
+
// Raw fetch with the bearer header injected — for non-JSON flows (SSE
|
|
85
|
+
// streaming, multipart upload) where the caller needs the Response itself.
|
|
86
|
+
async raw(path, init) {
|
|
87
|
+
const extraHeaders = sanitizeHeaders(init?.headers);
|
|
88
|
+
const url = this.baseUrl + path;
|
|
89
|
+
try {
|
|
90
|
+
return await this.fetchImpl(url, {
|
|
91
|
+
...init,
|
|
92
|
+
headers: {
|
|
93
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
94
|
+
...extraHeaders,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw this.networkError(url, error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
networkError(url, error) {
|
|
103
|
+
if (this.formatNetworkError)
|
|
104
|
+
return this.formatNetworkError(url, error);
|
|
105
|
+
return new Error(`DhartaSDK: could not reach ${new URL(url).origin} (${formatCause(error)}).`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function formatCause(error) {
|
|
109
|
+
return error instanceof Error && error.message ? error.message : String(error);
|
|
110
|
+
}
|
|
111
|
+
function sanitizeHeaders(headers) {
|
|
112
|
+
if (!headers)
|
|
113
|
+
return {};
|
|
114
|
+
const entries = [];
|
|
115
|
+
if (headers instanceof Headers) {
|
|
116
|
+
headers.forEach((value, key) => entries.push([key, value]));
|
|
117
|
+
}
|
|
118
|
+
else if (Array.isArray(headers)) {
|
|
119
|
+
for (const [key, value] of headers)
|
|
120
|
+
entries.push([key, value]);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
for (const [key, value] of Object.entries(headers))
|
|
124
|
+
entries.push([key, String(value)]);
|
|
125
|
+
}
|
|
126
|
+
const sanitized = {};
|
|
127
|
+
for (const [key, value] of entries) {
|
|
128
|
+
const normalized = key.toLowerCase();
|
|
129
|
+
if (PROTECTED_HEADER_NAMES.has(normalized) || normalized.startsWith("x-forwarded-")) {
|
|
130
|
+
throw new Error(`DhartaSDK: header '${key}' is managed by the client and cannot be overridden.`);
|
|
131
|
+
}
|
|
132
|
+
sanitized[key] = value;
|
|
133
|
+
}
|
|
134
|
+
return sanitized;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type KartaOptions } from "./http.js";
|
|
2
|
+
import { ApiKeysResource, BillingResource, ModelKeysResource, UsageResource, WebhookEndpointsResource } from "./resources.js";
|
|
3
|
+
export declare class Dharta {
|
|
4
|
+
readonly apiKeys: ApiKeysResource;
|
|
5
|
+
readonly modelKeys: ModelKeysResource;
|
|
6
|
+
readonly webhookEndpoints: WebhookEndpointsResource;
|
|
7
|
+
readonly usage: UsageResource;
|
|
8
|
+
readonly billing: BillingResource;
|
|
9
|
+
constructor(opts: KartaOptions);
|
|
10
|
+
}
|
|
11
|
+
export type { KartaOptions, RequestOptions } from "./http.js";
|
|
12
|
+
export { HttpClient } from "./http.js";
|
|
13
|
+
export * from "./types.js";
|
|
14
|
+
export { KartaError, KartaAuthError, KartaForbiddenError, KartaNotFoundError, KartaValidationError, } from "./errors.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,YAAY,IAAI,EAAE,YAAY,EAO7B;CACF;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HttpClient } from "./http.js";
|
|
2
|
+
import { ApiKeysResource, BillingResource, ModelKeysResource, UsageResource, WebhookEndpointsResource, } from "./resources.js";
|
|
3
|
+
export class Dharta {
|
|
4
|
+
apiKeys;
|
|
5
|
+
modelKeys;
|
|
6
|
+
webhookEndpoints;
|
|
7
|
+
usage;
|
|
8
|
+
billing;
|
|
9
|
+
constructor(opts) {
|
|
10
|
+
const http = new HttpClient(opts);
|
|
11
|
+
this.apiKeys = new ApiKeysResource(http);
|
|
12
|
+
this.modelKeys = new ModelKeysResource(http);
|
|
13
|
+
this.webhookEndpoints = new WebhookEndpointsResource(http);
|
|
14
|
+
this.usage = new UsageResource(http);
|
|
15
|
+
this.billing = new BillingResource(http);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export { HttpClient } from "./http.js";
|
|
19
|
+
export * from "./types.js";
|
|
20
|
+
export { KartaError, KartaAuthError, KartaForbiddenError, KartaNotFoundError, KartaValidationError, } from "./errors.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,WAAW,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,MAAM,OAAO,MAAM;IACR,OAAO,CAAkB;IACzB,SAAS,CAAoB;IAC7B,gBAAgB,CAA2B;IAC3C,KAAK,CAAgB;IACrB,OAAO,CAAkB;IAElC,YAAY,IAAkB;QAC5B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAGD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|