@hasna/economy 0.3.10 → 0.3.15
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 +52 -2
- package/dist/cli/index.js +267 -560
- package/dist/db/cloud.d.ts +1 -3
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/pg-migrations.d.ts +1 -1
- package/dist/index.js +2 -429
- package/dist/lib/cloud-ingest.d.ts +57 -0
- package/dist/lib/cloud-ingest.d.ts.map +1 -0
- package/dist/lib/cloud-storage.d.ts +5 -5
- package/dist/lib/cloud-storage.d.ts.map +1 -1
- package/dist/lib/contracts-client/index.d.ts.map +1 -1
- package/dist/lib/contracts-client/storage.d.ts +2 -82
- package/dist/lib/contracts-client/storage.d.ts.map +1 -1
- package/dist/lib/contracts-client/transport.d.ts +1 -147
- package/dist/lib/contracts-client/transport.d.ts.map +1 -1
- package/dist/lib/open-projects.d.ts.map +1 -1
- package/dist/lib/sync-maintenance.d.ts +15 -0
- package/dist/lib/sync-maintenance.d.ts.map +1 -0
- package/dist/mcp/index.js +194 -471
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/server/index.js +42 -13
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/docs/cli.md +3 -3
- package/docs/mcp.md +1 -1
- package/package.json +6 -6
- package/dist/lib/contracts-client/mode.d.ts +0 -20
- package/dist/lib/contracts-client/mode.d.ts.map +0 -1
package/dist/db/cloud.d.ts
CHANGED
|
@@ -16,9 +16,7 @@ export declare function getCloudDatabaseUrl(env?: Env): string | undefined;
|
|
|
16
16
|
* (CONTRACT.md section 2), so a half-migrated deployment fails loudly at startup
|
|
17
17
|
* instead of quietly serving the wrong store.
|
|
18
18
|
*
|
|
19
|
-
* The rejection
|
|
20
|
-
* identical to the one the `server_backend_configuration` conformance gate emits.
|
|
21
|
-
* DSN resolution stays local because economy also honours the bare `DATABASE_URL`
|
|
19
|
+
* The rejection stays local because economy also honours the bare `DATABASE_URL`
|
|
22
20
|
* alias, which the contract's own resolver does not read — deferring to it
|
|
23
21
|
* wholesale would silently downgrade such a deployment to sqlite.
|
|
24
22
|
*/
|
package/dist/db/cloud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/db/cloud.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/db/cloud.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAK/E,wDAAwD;AACxD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAqB7C,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,SAAS,CAO9E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,GAAiB,GAAG,iBAAiB,CAGrF;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,qBAAwB,GAAG,QAAQ,CASvE;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,qBAAwB,GAAG,EAAE,CAAC,IAAI,CAWpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,eAAe,CAcjE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,YAAY,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2971,442 +2971,15 @@ function queryModelEfficiency(db) {
|
|
|
2971
2971
|
FROM requests GROUP BY model ORDER BY cost DESC`).all();
|
|
2972
2972
|
}
|
|
2973
2973
|
|
|
2974
|
-
// src/lib/contracts-client/mode.ts
|
|
2975
|
-
var DEPRECATED_STORAGE_MODE_ALIASES = ["remote", "hybrid", "self_hosted"];
|
|
2976
|
-
function normalizeStorageMode(value) {
|
|
2977
|
-
const normalized = value.trim().toLowerCase().replace(/-/g, "_");
|
|
2978
|
-
if (normalized === "local")
|
|
2979
|
-
return { mode: "local", deprecatedAlias: null };
|
|
2980
|
-
if (normalized === "cloud")
|
|
2981
|
-
return { mode: "cloud", deprecatedAlias: null };
|
|
2982
|
-
if (DEPRECATED_STORAGE_MODE_ALIASES.includes(normalized)) {
|
|
2983
|
-
return { mode: "cloud", deprecatedAlias: normalized };
|
|
2984
|
-
}
|
|
2985
|
-
throw new Error(`Unknown storage mode: ${value}. Use local or cloud.`);
|
|
2986
|
-
}
|
|
2987
|
-
function envToken(name) {
|
|
2988
|
-
return name.toUpperCase().replace(/-/g, "_");
|
|
2989
|
-
}
|
|
2990
|
-
|
|
2991
|
-
// src/lib/contracts-client/transport.ts
|
|
2992
|
-
function defaultCloudBaseUrl(name) {
|
|
2993
|
-
return `https://${name}.hasna.xyz`;
|
|
2994
|
-
}
|
|
2995
|
-
function clientTransportEnvKeys(name) {
|
|
2996
|
-
const token = envToken(name);
|
|
2997
|
-
return {
|
|
2998
|
-
modeKeys: [
|
|
2999
|
-
`HASNA_${token}_STORAGE_MODE`,
|
|
3000
|
-
`HASNA_${token}_MODE`,
|
|
3001
|
-
`${token}_STORAGE_MODE`,
|
|
3002
|
-
`${token}_MODE`
|
|
3003
|
-
],
|
|
3004
|
-
apiUrlKeys: [`HASNA_${token}_API_URL`, `${token}_API_URL`],
|
|
3005
|
-
apiKeyKeys: [`HASNA_${token}_API_KEY`, `${token}_API_KEY`]
|
|
3006
|
-
};
|
|
3007
|
-
}
|
|
3008
|
-
function firstEnv(env, keys) {
|
|
3009
|
-
for (const key of keys) {
|
|
3010
|
-
const value = env[key]?.trim();
|
|
3011
|
-
if (value)
|
|
3012
|
-
return { key, value };
|
|
3013
|
-
}
|
|
3014
|
-
return null;
|
|
3015
|
-
}
|
|
3016
|
-
function toV1BaseUrl(apiUrl) {
|
|
3017
|
-
const url = new URL(apiUrl);
|
|
3018
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
3019
|
-
throw new Error("API URL must use http or https.");
|
|
3020
|
-
}
|
|
3021
|
-
let path = url.pathname.replace(/\/+$/, "");
|
|
3022
|
-
if (path.endsWith("/v1"))
|
|
3023
|
-
path = path.slice(0, -"/v1".length);
|
|
3024
|
-
url.pathname = `${path}/v1`;
|
|
3025
|
-
url.search = "";
|
|
3026
|
-
url.hash = "";
|
|
3027
|
-
return url.toString().replace(/\/+$/, "");
|
|
3028
|
-
}
|
|
3029
|
-
function resolveClientTransport(name, env = process.env) {
|
|
3030
|
-
const keys = clientTransportEnvKeys(name);
|
|
3031
|
-
const modeHit = firstEnv(env, keys.modeKeys);
|
|
3032
|
-
const urlHit = firstEnv(env, keys.apiUrlKeys);
|
|
3033
|
-
const keyHit = firstEnv(env, keys.apiKeyKeys);
|
|
3034
|
-
let mode = "local";
|
|
3035
|
-
let deprecatedAlias = null;
|
|
3036
|
-
let modeSource = "default";
|
|
3037
|
-
const warnings = [];
|
|
3038
|
-
if (modeHit) {
|
|
3039
|
-
const normalized = normalizeStorageMode(modeHit.value);
|
|
3040
|
-
mode = normalized.mode;
|
|
3041
|
-
deprecatedAlias = normalized.deprecatedAlias;
|
|
3042
|
-
modeSource = modeHit.key;
|
|
3043
|
-
if (deprecatedAlias) {
|
|
3044
|
-
warnings.push(`Deprecated mode '${deprecatedAlias}' from ${modeHit.key} is treated as 'cloud'. Prefer ${keys.modeKeys[0]}=cloud.`);
|
|
3045
|
-
}
|
|
3046
|
-
} else if (urlHit && keyHit) {
|
|
3047
|
-
mode = "cloud";
|
|
3048
|
-
modeSource = `${urlHit.key}+${keyHit.key}`;
|
|
3049
|
-
} else if (urlHit) {
|
|
3050
|
-
warnings.push(`${urlHit.key} is set but no API key is present (${keys.apiKeyKeys[0]}). ` + `Refusing to fall back to the local store, which would silently serve a different dataset. ` + `Set ${keys.apiKeyKeys[0]} to enable the cloud client, or set ${keys.modeKeys[0]}=local ` + `to use the local store deliberately.`);
|
|
3051
|
-
return {
|
|
3052
|
-
transport: "local",
|
|
3053
|
-
mode: "local",
|
|
3054
|
-
deprecatedAlias,
|
|
3055
|
-
modeSource: urlHit.key,
|
|
3056
|
-
baseUrl: null,
|
|
3057
|
-
apiUrlSource: null,
|
|
3058
|
-
apiKeyPresent: false,
|
|
3059
|
-
apiKeySource: null,
|
|
3060
|
-
misconfigured: true,
|
|
3061
|
-
warning: warnings.join(" ")
|
|
3062
|
-
};
|
|
3063
|
-
}
|
|
3064
|
-
if (mode === "local") {
|
|
3065
|
-
return {
|
|
3066
|
-
transport: "local",
|
|
3067
|
-
mode,
|
|
3068
|
-
deprecatedAlias,
|
|
3069
|
-
modeSource,
|
|
3070
|
-
baseUrl: null,
|
|
3071
|
-
apiUrlSource: null,
|
|
3072
|
-
apiKeyPresent: Boolean(keyHit),
|
|
3073
|
-
apiKeySource: keyHit ? keyHit.key : null,
|
|
3074
|
-
misconfigured: false,
|
|
3075
|
-
warning: warnings.length > 0 ? warnings.join(" ") : null
|
|
3076
|
-
};
|
|
3077
|
-
}
|
|
3078
|
-
if (!keyHit) {
|
|
3079
|
-
warnings.push(`${modeSource}=cloud but no API key is set (${keys.apiKeyKeys[0]}). Refusing to route to cloud; using local store. Set ${keys.apiKeyKeys[0]} to enable the cloud client.`);
|
|
3080
|
-
return {
|
|
3081
|
-
transport: "local",
|
|
3082
|
-
mode,
|
|
3083
|
-
deprecatedAlias,
|
|
3084
|
-
modeSource,
|
|
3085
|
-
baseUrl: null,
|
|
3086
|
-
apiUrlSource: null,
|
|
3087
|
-
apiKeyPresent: false,
|
|
3088
|
-
apiKeySource: null,
|
|
3089
|
-
misconfigured: true,
|
|
3090
|
-
warning: warnings.join(" ")
|
|
3091
|
-
};
|
|
3092
|
-
}
|
|
3093
|
-
const rawUrl = urlHit?.value ?? defaultCloudBaseUrl(name);
|
|
3094
|
-
const apiUrlSource = urlHit ? urlHit.key : "default";
|
|
3095
|
-
let baseUrl;
|
|
3096
|
-
try {
|
|
3097
|
-
baseUrl = toV1BaseUrl(rawUrl);
|
|
3098
|
-
} catch (error) {
|
|
3099
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
3100
|
-
warnings.push(`Invalid API URL from ${apiUrlSource}: ${message}. Using local store.`);
|
|
3101
|
-
return {
|
|
3102
|
-
transport: "local",
|
|
3103
|
-
mode,
|
|
3104
|
-
deprecatedAlias,
|
|
3105
|
-
modeSource,
|
|
3106
|
-
baseUrl: null,
|
|
3107
|
-
apiUrlSource: null,
|
|
3108
|
-
apiKeyPresent: true,
|
|
3109
|
-
apiKeySource: keyHit.key,
|
|
3110
|
-
misconfigured: true,
|
|
3111
|
-
warning: warnings.join(" ")
|
|
3112
|
-
};
|
|
3113
|
-
}
|
|
3114
|
-
return {
|
|
3115
|
-
transport: "cloud-http",
|
|
3116
|
-
mode,
|
|
3117
|
-
deprecatedAlias,
|
|
3118
|
-
modeSource,
|
|
3119
|
-
baseUrl,
|
|
3120
|
-
apiUrlSource,
|
|
3121
|
-
apiKeyPresent: true,
|
|
3122
|
-
apiKeySource: keyHit.key,
|
|
3123
|
-
misconfigured: false,
|
|
3124
|
-
warning: warnings.length > 0 ? warnings.join(" ") : null
|
|
3125
|
-
};
|
|
3126
|
-
}
|
|
3127
|
-
|
|
3128
|
-
class HasnaHttpError extends Error {
|
|
3129
|
-
status;
|
|
3130
|
-
method;
|
|
3131
|
-
path;
|
|
3132
|
-
body;
|
|
3133
|
-
constructor(method, path, status, body) {
|
|
3134
|
-
super(`Hasna cloud request failed: ${method} ${path} -> ${status}`);
|
|
3135
|
-
this.name = "HasnaHttpError";
|
|
3136
|
-
this.status = status;
|
|
3137
|
-
this.method = method;
|
|
3138
|
-
this.path = path;
|
|
3139
|
-
this.body = body;
|
|
3140
|
-
}
|
|
3141
|
-
}
|
|
3142
|
-
var DEFAULT_RETRY_STATUSES = [408, 425, 429, 500, 502, 503, 504];
|
|
3143
|
-
var IDEMPOTENT_METHODS = new Set(["GET", "HEAD", "PUT", "DELETE", "OPTIONS"]);
|
|
3144
|
-
function appendQuery(path, query) {
|
|
3145
|
-
if (!query)
|
|
3146
|
-
return path;
|
|
3147
|
-
const params = query instanceof URLSearchParams ? query : new URLSearchParams;
|
|
3148
|
-
if (!(query instanceof URLSearchParams)) {
|
|
3149
|
-
for (const [key, value] of Object.entries(query)) {
|
|
3150
|
-
if (value === null || value === undefined)
|
|
3151
|
-
continue;
|
|
3152
|
-
if (Array.isArray(value)) {
|
|
3153
|
-
for (const v of value)
|
|
3154
|
-
params.append(key, String(v));
|
|
3155
|
-
} else {
|
|
3156
|
-
params.append(key, String(value));
|
|
3157
|
-
}
|
|
3158
|
-
}
|
|
3159
|
-
}
|
|
3160
|
-
const qs = params.toString();
|
|
3161
|
-
if (!qs)
|
|
3162
|
-
return path;
|
|
3163
|
-
return `${path}${path.includes("?") ? "&" : "?"}${qs}`;
|
|
3164
|
-
}
|
|
3165
|
-
var defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
3166
|
-
function createHasnaHttpTransport(options) {
|
|
3167
|
-
const fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));
|
|
3168
|
-
const base = options.baseUrl.replace(/\/+$/, "");
|
|
3169
|
-
const timeoutMs = options.timeoutMs ?? 30000;
|
|
3170
|
-
const sleep = options.sleepImpl ?? defaultSleep;
|
|
3171
|
-
const defaultRetry = options.retry;
|
|
3172
|
-
function resolveRetry(callRetry) {
|
|
3173
|
-
const chosen = callRetry !== undefined ? callRetry : defaultRetry;
|
|
3174
|
-
if (chosen === false)
|
|
3175
|
-
return null;
|
|
3176
|
-
const r = chosen ?? {};
|
|
3177
|
-
return {
|
|
3178
|
-
retries: r.retries ?? 2,
|
|
3179
|
-
baseDelayMs: r.baseDelayMs ?? 200,
|
|
3180
|
-
maxDelayMs: r.maxDelayMs ?? 2000,
|
|
3181
|
-
retryStatuses: r.retryStatuses ?? [...DEFAULT_RETRY_STATUSES]
|
|
3182
|
-
};
|
|
3183
|
-
}
|
|
3184
|
-
async function once(method, rel, url, body, opts) {
|
|
3185
|
-
const headers = {
|
|
3186
|
-
"x-api-key": options.apiKey,
|
|
3187
|
-
Authorization: `Bearer ${options.apiKey}`,
|
|
3188
|
-
Accept: "application/json",
|
|
3189
|
-
...options.headers ?? {},
|
|
3190
|
-
...opts.headers ?? {}
|
|
3191
|
-
};
|
|
3192
|
-
if (opts.idempotencyKey)
|
|
3193
|
-
headers["Idempotency-Key"] = opts.idempotencyKey;
|
|
3194
|
-
const init = { method, headers };
|
|
3195
|
-
if (body !== undefined) {
|
|
3196
|
-
headers["Content-Type"] = "application/json";
|
|
3197
|
-
init.body = JSON.stringify(body);
|
|
3198
|
-
}
|
|
3199
|
-
const controller = new AbortController;
|
|
3200
|
-
const onAbort = () => controller.abort();
|
|
3201
|
-
if (opts.signal) {
|
|
3202
|
-
if (opts.signal.aborted)
|
|
3203
|
-
controller.abort();
|
|
3204
|
-
else
|
|
3205
|
-
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
3206
|
-
}
|
|
3207
|
-
const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? timeoutMs);
|
|
3208
|
-
init.signal = controller.signal;
|
|
3209
|
-
let response;
|
|
3210
|
-
try {
|
|
3211
|
-
response = await fetchImpl(url, init);
|
|
3212
|
-
} catch (error) {
|
|
3213
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
3214
|
-
if (opts.signal?.aborted)
|
|
3215
|
-
return { ok: false, retryable: false, error: err };
|
|
3216
|
-
return { ok: false, retryable: true, error: err };
|
|
3217
|
-
} finally {
|
|
3218
|
-
clearTimeout(timer);
|
|
3219
|
-
if (opts.signal)
|
|
3220
|
-
opts.signal.removeEventListener("abort", onAbort);
|
|
3221
|
-
}
|
|
3222
|
-
const text = await response.text();
|
|
3223
|
-
let parsed = undefined;
|
|
3224
|
-
if (text.length > 0) {
|
|
3225
|
-
try {
|
|
3226
|
-
parsed = JSON.parse(text);
|
|
3227
|
-
} catch {
|
|
3228
|
-
parsed = text;
|
|
3229
|
-
}
|
|
3230
|
-
}
|
|
3231
|
-
if (!response.ok) {
|
|
3232
|
-
const retry = resolveRetry(opts.retry);
|
|
3233
|
-
const retryable = retry ? retry.retryStatuses.includes(response.status) : false;
|
|
3234
|
-
return { ok: false, retryable, error: new HasnaHttpError(method, rel, response.status, parsed) };
|
|
3235
|
-
}
|
|
3236
|
-
return { ok: true, value: parsed };
|
|
3237
|
-
}
|
|
3238
|
-
async function request(method, path, body, opts = {}) {
|
|
3239
|
-
const upper = method.toUpperCase();
|
|
3240
|
-
const rel = appendQuery(path.startsWith("/") ? path : `/${path}`, opts.query);
|
|
3241
|
-
const url = `${base}${rel}`;
|
|
3242
|
-
const retry = resolveRetry(opts.retry);
|
|
3243
|
-
const methodRetryable = IDEMPOTENT_METHODS.has(upper) || Boolean(opts.idempotencyKey);
|
|
3244
|
-
const maxAttempts = retry && methodRetryable ? retry.retries + 1 : 1;
|
|
3245
|
-
let last = null;
|
|
3246
|
-
for (let attempt = 1;attempt <= maxAttempts; attempt++) {
|
|
3247
|
-
const result = await once(upper, rel, url, body, opts);
|
|
3248
|
-
if (result.ok)
|
|
3249
|
-
return result.value;
|
|
3250
|
-
last = result;
|
|
3251
|
-
const canRetry = retry !== null && methodRetryable && result.retryable && attempt < maxAttempts;
|
|
3252
|
-
if (!canRetry)
|
|
3253
|
-
break;
|
|
3254
|
-
const backoff = Math.min(retry.maxDelayMs, retry.baseDelayMs * 2 ** (attempt - 1));
|
|
3255
|
-
const jitter = Math.floor(Math.random() * (backoff / 2 + 1));
|
|
3256
|
-
await sleep(backoff + jitter);
|
|
3257
|
-
}
|
|
3258
|
-
throw last.error;
|
|
3259
|
-
}
|
|
3260
|
-
return {
|
|
3261
|
-
baseUrl: base,
|
|
3262
|
-
request,
|
|
3263
|
-
get: (path, opts) => request("GET", path, undefined, opts),
|
|
3264
|
-
post: (path, body, opts) => request("POST", path, body, opts),
|
|
3265
|
-
put: (path, body, opts) => request("PUT", path, body, opts),
|
|
3266
|
-
patch: (path, body, opts) => request("PATCH", path, body, opts),
|
|
3267
|
-
del: (path, body, opts) => request("DELETE", path, body, opts)
|
|
3268
|
-
};
|
|
3269
|
-
}
|
|
3270
|
-
function createClientTransport(name, env = process.env, overrides) {
|
|
3271
|
-
const resolution = resolveClientTransport(name, env);
|
|
3272
|
-
if (resolution.misconfigured) {
|
|
3273
|
-
throw new Error(resolution.warning ?? `Client for '${name}' is misconfigured for cloud mode.`);
|
|
3274
|
-
}
|
|
3275
|
-
if (resolution.transport === "local" || !resolution.baseUrl) {
|
|
3276
|
-
return { transport: "local", client: null, resolution };
|
|
3277
|
-
}
|
|
3278
|
-
const keys = clientTransportEnvKeys(name);
|
|
3279
|
-
const apiKey = firstEnv(env, keys.apiKeyKeys)?.value;
|
|
3280
|
-
if (!apiKey) {
|
|
3281
|
-
throw new Error(`Client for '${name}' resolved to cloud-http without an API key.`);
|
|
3282
|
-
}
|
|
3283
|
-
return {
|
|
3284
|
-
transport: "cloud-http",
|
|
3285
|
-
client: createHasnaHttpTransport({
|
|
3286
|
-
name,
|
|
3287
|
-
baseUrl: resolution.baseUrl,
|
|
3288
|
-
apiKey,
|
|
3289
|
-
...overrides?.fetchImpl ? { fetchImpl: overrides.fetchImpl } : {},
|
|
3290
|
-
...overrides?.headers ? { headers: overrides.headers } : {},
|
|
3291
|
-
...overrides?.timeoutMs ? { timeoutMs: overrides.timeoutMs } : {},
|
|
3292
|
-
...overrides?.retry !== undefined ? { retry: overrides.retry } : {},
|
|
3293
|
-
...overrides?.sleepImpl ? { sleepImpl: overrides.sleepImpl } : {}
|
|
3294
|
-
}),
|
|
3295
|
-
resolution
|
|
3296
|
-
};
|
|
3297
|
-
}
|
|
3298
|
-
|
|
3299
2974
|
// src/lib/contracts-client/storage.ts
|
|
3300
|
-
|
|
3301
|
-
const trimmed = resource.replace(/^\/+|\/+$/g, "");
|
|
3302
|
-
if (!trimmed)
|
|
3303
|
-
throw new Error("resource must be a non-empty path segment");
|
|
3304
|
-
return `/${trimmed}`;
|
|
3305
|
-
}
|
|
3306
|
-
function entityPath(resource, id) {
|
|
3307
|
-
if (id === undefined || id === null || `${id}`.length === 0) {
|
|
3308
|
-
throw new Error("id must be a non-empty string");
|
|
3309
|
-
}
|
|
3310
|
-
return `${resourcePath(resource)}/${encodeURIComponent(String(id))}`;
|
|
3311
|
-
}
|
|
3312
|
-
function newIdempotencyKey() {
|
|
3313
|
-
const g = globalThis;
|
|
3314
|
-
if (g.crypto?.randomUUID)
|
|
3315
|
-
return g.crypto.randomUUID();
|
|
3316
|
-
return `idmp_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 12)}`;
|
|
3317
|
-
}
|
|
3318
|
-
function extractItems(raw) {
|
|
3319
|
-
if (Array.isArray(raw))
|
|
3320
|
-
return raw;
|
|
3321
|
-
if (raw && typeof raw === "object") {
|
|
3322
|
-
const obj = raw;
|
|
3323
|
-
for (const key of ["items", "data", "results", "rows", "records"]) {
|
|
3324
|
-
if (Array.isArray(obj[key]))
|
|
3325
|
-
return obj[key];
|
|
3326
|
-
}
|
|
3327
|
-
}
|
|
3328
|
-
return [];
|
|
3329
|
-
}
|
|
3330
|
-
function extractTotal(raw) {
|
|
3331
|
-
if (raw && typeof raw === "object") {
|
|
3332
|
-
const obj = raw;
|
|
3333
|
-
for (const key of ["total", "count", "totalCount", "total_count"]) {
|
|
3334
|
-
if (typeof obj[key] === "number")
|
|
3335
|
-
return obj[key];
|
|
3336
|
-
}
|
|
3337
|
-
}
|
|
3338
|
-
return null;
|
|
3339
|
-
}
|
|
3340
|
-
function extractCursor(raw) {
|
|
3341
|
-
if (raw && typeof raw === "object") {
|
|
3342
|
-
const obj = raw;
|
|
3343
|
-
for (const key of ["cursor", "nextCursor", "next_cursor", "next"]) {
|
|
3344
|
-
if (typeof obj[key] === "string")
|
|
3345
|
-
return obj[key];
|
|
3346
|
-
}
|
|
3347
|
-
}
|
|
3348
|
-
return null;
|
|
3349
|
-
}
|
|
3350
|
-
function createHasnaStorageClient(name, transport) {
|
|
3351
|
-
return {
|
|
3352
|
-
name,
|
|
3353
|
-
baseUrl: transport.baseUrl,
|
|
3354
|
-
transport,
|
|
3355
|
-
async list(resource, options = {}) {
|
|
3356
|
-
const raw = await transport.get(resourcePath(resource), options);
|
|
3357
|
-
return {
|
|
3358
|
-
items: extractItems(raw),
|
|
3359
|
-
total: extractTotal(raw),
|
|
3360
|
-
cursor: extractCursor(raw),
|
|
3361
|
-
raw
|
|
3362
|
-
};
|
|
3363
|
-
},
|
|
3364
|
-
async get(resource, id, options = {}) {
|
|
3365
|
-
try {
|
|
3366
|
-
return await transport.get(entityPath(resource, id), options);
|
|
3367
|
-
} catch (error) {
|
|
3368
|
-
if (error instanceof HasnaHttpError && error.status === 404)
|
|
3369
|
-
return null;
|
|
3370
|
-
throw error;
|
|
3371
|
-
}
|
|
3372
|
-
},
|
|
3373
|
-
async create(resource, body, options = {}) {
|
|
3374
|
-
const { idempotencyKey, ...rest } = options;
|
|
3375
|
-
return transport.post(resourcePath(resource), body, {
|
|
3376
|
-
...rest,
|
|
3377
|
-
idempotencyKey: idempotencyKey ?? newIdempotencyKey()
|
|
3378
|
-
});
|
|
3379
|
-
},
|
|
3380
|
-
async update(resource, id, patch, options = {}) {
|
|
3381
|
-
const { method = "PATCH", idempotencyKey, ...rest } = options;
|
|
3382
|
-
const call = method === "PUT" ? transport.put : transport.patch;
|
|
3383
|
-
return call(entityPath(resource, id), patch, { ...rest, ...idempotencyKey ? { idempotencyKey } : {} });
|
|
3384
|
-
},
|
|
3385
|
-
async delete(resource, id, options = {}) {
|
|
3386
|
-
try {
|
|
3387
|
-
await transport.del(entityPath(resource, id), undefined, options);
|
|
3388
|
-
} catch (error) {
|
|
3389
|
-
if (error instanceof HasnaHttpError && error.status === 404)
|
|
3390
|
-
return;
|
|
3391
|
-
throw error;
|
|
3392
|
-
}
|
|
3393
|
-
}
|
|
3394
|
-
};
|
|
3395
|
-
}
|
|
3396
|
-
function resolveStorageClient(name, env = process.env, overrides) {
|
|
3397
|
-
const wired = createClientTransport(name, env, overrides);
|
|
3398
|
-
if (wired.transport === "cloud-http") {
|
|
3399
|
-
return { transport: "cloud-http", client: createHasnaStorageClient(name, wired.client) };
|
|
3400
|
-
}
|
|
3401
|
-
return { transport: "local", client: null };
|
|
3402
|
-
}
|
|
2975
|
+
import { resolveStorageClient } from "@hasna/contracts/client/storage";
|
|
3403
2976
|
|
|
3404
2977
|
// src/lib/cloud-storage.ts
|
|
3405
2978
|
var ECONOMY_APP = "economy";
|
|
3406
2979
|
var cache;
|
|
3407
2980
|
function resolveEconomyCloudStorage(env = process.env, overrides) {
|
|
3408
2981
|
const resolved = resolveStorageClient(ECONOMY_APP, env, overrides);
|
|
3409
|
-
return resolved.transport === "
|
|
2982
|
+
return resolved.transport === "http" ? { active: true, client: resolved.client } : { active: false, client: null };
|
|
3410
2983
|
}
|
|
3411
2984
|
function economyCloudStorage(env = process.env) {
|
|
3412
2985
|
if (cache === undefined)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SyncAllResult } from './sync-all.js';
|
|
2
|
+
import type { ActiveEconomyCloudStorage } from './cloud-storage.js';
|
|
3
|
+
import type { SyncOptions } from '../types/index.js';
|
|
4
|
+
/** Machine-local mtime cache path (override for tests via HASNA_ECONOMY_INGEST_CACHE). */
|
|
5
|
+
export declare function getIngestCachePath(): string;
|
|
6
|
+
export interface CloudSyncOptions extends SyncOptions {
|
|
7
|
+
/** Claude/Takumi JSONL root override (tests). */
|
|
8
|
+
projectsDir?: string;
|
|
9
|
+
/** Ingest-state cache path override (tests). Defaults to getIngestCachePath(). */
|
|
10
|
+
cachePath?: string;
|
|
11
|
+
/** Re-process every file (ignore the mtime cache). */
|
|
12
|
+
force?: boolean;
|
|
13
|
+
/** Tag this run's rows with the current machine id. */
|
|
14
|
+
backfillMachine?: boolean;
|
|
15
|
+
/** Recalculate zero-cost requests from pricing before pushing. */
|
|
16
|
+
recalculate?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CloudSyncResult extends SyncAllResult {
|
|
19
|
+
/** True when at least one row was pushed to the shared API in this run. */
|
|
20
|
+
posted: boolean;
|
|
21
|
+
/** Per-table row counts accepted by /v1/ingest (absent when nothing posted). */
|
|
22
|
+
ingested?: Record<string, number>;
|
|
23
|
+
/** Total rows accepted by /v1/ingest (absent when nothing posted). */
|
|
24
|
+
total?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Cloud-client equivalent of `economy sync`: read this machine's on-box
|
|
28
|
+
* provider files, ingest them through the existing readers, and push the
|
|
29
|
+
* produced rows to the shared API. Returns the same per-source result shape as
|
|
30
|
+
* the local syncAll, plus what the server accepted.
|
|
31
|
+
*/
|
|
32
|
+
export declare function syncAllToCloud(cloud: ActiveEconomyCloudStorage, opts?: CloudSyncOptions): Promise<CloudSyncResult>;
|
|
33
|
+
export interface CloudBillingSyncOptions {
|
|
34
|
+
days?: number;
|
|
35
|
+
anthropic?: boolean;
|
|
36
|
+
openai?: boolean;
|
|
37
|
+
gemini?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface CloudBillingSyncResult {
|
|
40
|
+
/** Per-provider outcome; a provider failure does not stop the others. */
|
|
41
|
+
providers: Record<string, {
|
|
42
|
+
ok: boolean;
|
|
43
|
+
days?: number;
|
|
44
|
+
totalUsd?: number;
|
|
45
|
+
error?: string;
|
|
46
|
+
}>;
|
|
47
|
+
totalUsd: number;
|
|
48
|
+
posted: boolean;
|
|
49
|
+
ingested?: Record<string, number>;
|
|
50
|
+
total?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Cloud-client equivalent of `economy billing sync`: fetch provider billing
|
|
54
|
+
* from the provider APIs and push the billing_daily rows to the shared API.
|
|
55
|
+
*/
|
|
56
|
+
export declare function billingSyncToCloud(cloud: ActiveEconomyCloudStorage, opts?: CloudBillingSyncOptions): Promise<CloudBillingSyncResult>;
|
|
57
|
+
//# sourceMappingURL=cloud-ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ingest.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-ingest.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKpD,0FAA0F;AAC1F,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AA6CD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uDAAuD;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAA;IACf,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,yBAAyB,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyB5H;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5F,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,IAAI,GAAE,uBAA4B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA+B9I"}
|
|
@@ -15,10 +15,10 @@ export type EconomyCloudStorage = {
|
|
|
15
15
|
/**
|
|
16
16
|
* Resolve the economy client storage transport for the current environment.
|
|
17
17
|
*
|
|
18
|
-
* Returns `{ active: true, client }` only when
|
|
19
|
-
* HASNA_ECONOMY_API_URL + HASNA_ECONOMY_API_KEY
|
|
20
|
-
* `{ active: false }` (local store). Throws
|
|
21
|
-
* misconfigured.
|
|
18
|
+
* Returns `{ active: true, client }` only when the contracts seam resolves to
|
|
19
|
+
* the http transport (HASNA_ECONOMY_API_URL + HASNA_ECONOMY_API_KEY set).
|
|
20
|
+
* Otherwise `{ active: false }` (local store). Throws when an API URL is set
|
|
21
|
+
* without a key (the seam reports the resolution as misconfigured).
|
|
22
22
|
*/
|
|
23
23
|
export declare function resolveEconomyCloudStorage(env?: NodeJS.ProcessEnv, overrides?: StorageClientOverrides): EconomyCloudStorage;
|
|
24
24
|
/** Memoized {@link resolveEconomyCloudStorage} for the process lifetime. */
|
|
@@ -35,7 +35,7 @@ export type CloudQuery = Record<string, string | number | boolean | null | undef
|
|
|
35
35
|
* Read a collection resource from the cloud API and return the extracted array
|
|
36
36
|
* (the serve envelope's `data`/`items`). Used by the read commands (sessions,
|
|
37
37
|
* top, breakdown, accounts) so they render cloud data — never the local store —
|
|
38
|
-
* when the client is
|
|
38
|
+
* when the client is on the http transport.
|
|
39
39
|
*/
|
|
40
40
|
export declare function cloudListItems<T = unknown>(storage: ActiveEconomyCloudStorage, resource: string, query?: CloudQuery): Promise<T[]>;
|
|
41
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-storage.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-storage.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-storage.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE9F,gFAAgF;AAChF,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzE,mEAAmE;AACnE,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,MAAM,MAAM,mBAAmB,GAC3B;IACE,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;CACvB,CAAC;AAIN;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,CAAC,EAAE,sBAAsB,GACjC,mBAAmB,CAKrB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,mBAAmB,CAG7F;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,+DAA+D;AAC/D,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAEvF,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAYtF;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC,CAId;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,OAAO,EAAE,yBAAyB,EAClC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts-client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts-client/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
|