@inkeep/agents-manage-mcp 0.0.0-dev-20251222215156 → 0.0.0-dev-20251222222417
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/dist/index.js +431 -435
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.json +0 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import "@modelcontextprotocol/sdk/server/zod-compat.js";
|
|
3
|
-
import "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
4
|
-
import "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
import "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
6
2
|
|
|
7
3
|
//#region ../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
8
4
|
var util;
|
|
@@ -3602,418 +3598,6 @@ const coerce = {
|
|
|
3602
3598
|
}))
|
|
3603
3599
|
};
|
|
3604
3600
|
|
|
3605
|
-
//#endregion
|
|
3606
|
-
//#region src/lib/http.ts
|
|
3607
|
-
const DEFAULT_FETCHER = (input, init) => {
|
|
3608
|
-
if (init == null) return fetch(input);
|
|
3609
|
-
else return fetch(input, init);
|
|
3610
|
-
};
|
|
3611
|
-
var HTTPClient = class HTTPClient {
|
|
3612
|
-
fetcher;
|
|
3613
|
-
requestHooks = [];
|
|
3614
|
-
requestErrorHooks = [];
|
|
3615
|
-
responseHooks = [];
|
|
3616
|
-
constructor(options = {}) {
|
|
3617
|
-
this.options = options;
|
|
3618
|
-
this.fetcher = options.fetcher || DEFAULT_FETCHER;
|
|
3619
|
-
}
|
|
3620
|
-
async request(request) {
|
|
3621
|
-
let req = request;
|
|
3622
|
-
for (const hook of this.requestHooks) {
|
|
3623
|
-
const nextRequest = await hook(req);
|
|
3624
|
-
if (nextRequest) req = nextRequest;
|
|
3625
|
-
}
|
|
3626
|
-
try {
|
|
3627
|
-
const res = await this.fetcher(req);
|
|
3628
|
-
for (const hook of this.responseHooks) await hook(res, req);
|
|
3629
|
-
return res;
|
|
3630
|
-
} catch (err) {
|
|
3631
|
-
for (const hook of this.requestErrorHooks) await hook(err, req);
|
|
3632
|
-
throw err;
|
|
3633
|
-
}
|
|
3634
|
-
}
|
|
3635
|
-
addHook(...args$113) {
|
|
3636
|
-
if (args$113[0] === "beforeRequest") this.requestHooks.push(args$113[1]);
|
|
3637
|
-
else if (args$113[0] === "requestError") this.requestErrorHooks.push(args$113[1]);
|
|
3638
|
-
else if (args$113[0] === "response") this.responseHooks.push(args$113[1]);
|
|
3639
|
-
else throw new Error(`Invalid hook type: ${args$113[0]}`);
|
|
3640
|
-
return this;
|
|
3641
|
-
}
|
|
3642
|
-
removeHook(...args$113) {
|
|
3643
|
-
let target;
|
|
3644
|
-
if (args$113[0] === "beforeRequest") target = this.requestHooks;
|
|
3645
|
-
else if (args$113[0] === "requestError") target = this.requestErrorHooks;
|
|
3646
|
-
else if (args$113[0] === "response") target = this.responseHooks;
|
|
3647
|
-
else throw new Error(`Invalid hook type: ${args$113[0]}`);
|
|
3648
|
-
const index = target.findIndex((v) => v === args$113[1]);
|
|
3649
|
-
if (index >= 0) target.splice(index, 1);
|
|
3650
|
-
return this;
|
|
3651
|
-
}
|
|
3652
|
-
clone() {
|
|
3653
|
-
const child = new HTTPClient(this.options);
|
|
3654
|
-
child.requestHooks = this.requestHooks.slice();
|
|
3655
|
-
child.requestErrorHooks = this.requestErrorHooks.slice();
|
|
3656
|
-
child.responseHooks = this.responseHooks.slice();
|
|
3657
|
-
return child;
|
|
3658
|
-
}
|
|
3659
|
-
};
|
|
3660
|
-
const mediaParamSeparator = /\s*;\s*/g;
|
|
3661
|
-
function matchContentType(response, pattern) {
|
|
3662
|
-
if (pattern === "*") return true;
|
|
3663
|
-
let contentType = response.headers.get("content-type")?.trim() || "application/octet-stream";
|
|
3664
|
-
contentType = contentType.toLowerCase();
|
|
3665
|
-
const [wantType = "", ...wantParams] = pattern.toLowerCase().trim().split(mediaParamSeparator);
|
|
3666
|
-
if (wantType.split("/").length !== 2) return false;
|
|
3667
|
-
const [gotType = "", ...gotParams] = contentType.split(mediaParamSeparator);
|
|
3668
|
-
const [type = "", subtype = ""] = gotType.split("/");
|
|
3669
|
-
if (!type || !subtype) return false;
|
|
3670
|
-
if (wantType !== "*/*" && gotType !== wantType && `${type}/*` !== wantType && `*/${subtype}` !== wantType) return false;
|
|
3671
|
-
if (gotParams.length < wantParams.length) return false;
|
|
3672
|
-
const params = new Set(gotParams);
|
|
3673
|
-
for (const wantParam of wantParams) if (!params.has(wantParam)) return false;
|
|
3674
|
-
return true;
|
|
3675
|
-
}
|
|
3676
|
-
const codeRangeRE$1 = new RegExp("^[0-9]xx$", "i");
|
|
3677
|
-
function matchStatusCode(response, codes) {
|
|
3678
|
-
const actual = `${response.status}`;
|
|
3679
|
-
const expectedCodes = Array.isArray(codes) ? codes : [codes];
|
|
3680
|
-
if (!expectedCodes.length) return false;
|
|
3681
|
-
return expectedCodes.some((ec) => {
|
|
3682
|
-
const code = `${ec}`;
|
|
3683
|
-
if (code === "default") return true;
|
|
3684
|
-
if (!codeRangeRE$1.test(`${code}`)) return code === actual;
|
|
3685
|
-
const expectFamily = code.charAt(0);
|
|
3686
|
-
if (!expectFamily) throw new Error("Invalid status code range");
|
|
3687
|
-
const actualFamily = actual.charAt(0);
|
|
3688
|
-
if (!actualFamily) throw new Error(`Invalid response status code: ${actual}`);
|
|
3689
|
-
return actualFamily === expectFamily;
|
|
3690
|
-
});
|
|
3691
|
-
}
|
|
3692
|
-
function matchResponse(response, code, contentTypePattern) {
|
|
3693
|
-
return matchStatusCode(response, code) && matchContentType(response, contentTypePattern);
|
|
3694
|
-
}
|
|
3695
|
-
/**
|
|
3696
|
-
* Uses various heurisitics to determine if an error is a connection error.
|
|
3697
|
-
*/
|
|
3698
|
-
function isConnectionError(err) {
|
|
3699
|
-
if (typeof err !== "object" || err == null) return false;
|
|
3700
|
-
const isBrowserErr = err instanceof TypeError && err.message.toLowerCase().startsWith("failed to fetch");
|
|
3701
|
-
const isNodeErr = err instanceof TypeError && err.message.toLowerCase().startsWith("fetch failed");
|
|
3702
|
-
const isBunErr = "name" in err && err.name === "ConnectionError";
|
|
3703
|
-
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnreset";
|
|
3704
|
-
return isBrowserErr || isNodeErr || isGenericErr || isBunErr;
|
|
3705
|
-
}
|
|
3706
|
-
/**
|
|
3707
|
-
* Uses various heurisitics to determine if an error is a timeout error.
|
|
3708
|
-
*/
|
|
3709
|
-
function isTimeoutError(err) {
|
|
3710
|
-
if (typeof err !== "object" || err == null) return false;
|
|
3711
|
-
const isNative = "name" in err && err.name === "TimeoutError";
|
|
3712
|
-
const isLegacyNative = "code" in err && err.code === 23;
|
|
3713
|
-
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnaborted";
|
|
3714
|
-
return isNative || isLegacyNative || isGenericErr;
|
|
3715
|
-
}
|
|
3716
|
-
/**
|
|
3717
|
-
* Uses various heurisitics to determine if an error is a abort error.
|
|
3718
|
-
*/
|
|
3719
|
-
function isAbortError(err) {
|
|
3720
|
-
if (typeof err !== "object" || err == null) return false;
|
|
3721
|
-
const isNative = "name" in err && err.name === "AbortError";
|
|
3722
|
-
const isLegacyNative = "code" in err && err.code === 20;
|
|
3723
|
-
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnaborted";
|
|
3724
|
-
return isNative || isLegacyNative || isGenericErr;
|
|
3725
|
-
}
|
|
3726
|
-
|
|
3727
|
-
//#endregion
|
|
3728
|
-
//#region src/lib/retries.ts
|
|
3729
|
-
const defaultBackoff = {
|
|
3730
|
-
initialInterval: 500,
|
|
3731
|
-
maxInterval: 6e4,
|
|
3732
|
-
exponent: 1.5,
|
|
3733
|
-
maxElapsedTime: 36e5
|
|
3734
|
-
};
|
|
3735
|
-
/**
|
|
3736
|
-
* PermanentError is an error that is not recoverable. Throwing this error will
|
|
3737
|
-
* cause a retry loop to terminate.
|
|
3738
|
-
*/
|
|
3739
|
-
var PermanentError = class PermanentError extends Error {
|
|
3740
|
-
/** The underlying cause of the error. */
|
|
3741
|
-
cause;
|
|
3742
|
-
constructor(message, options) {
|
|
3743
|
-
let msg = message;
|
|
3744
|
-
if (options?.cause) msg += `: ${options.cause}`;
|
|
3745
|
-
super(msg, options);
|
|
3746
|
-
this.name = "PermanentError";
|
|
3747
|
-
if (typeof this.cause === "undefined") this.cause = options?.cause;
|
|
3748
|
-
Object.setPrototypeOf(this, PermanentError.prototype);
|
|
3749
|
-
}
|
|
3750
|
-
};
|
|
3751
|
-
/**
|
|
3752
|
-
* TemporaryError is an error is used to signal that an HTTP request can be
|
|
3753
|
-
* retried as part of a retry loop. If retry attempts are exhausted and this
|
|
3754
|
-
* error is thrown, the response will be returned to the caller.
|
|
3755
|
-
*/
|
|
3756
|
-
var TemporaryError = class TemporaryError extends Error {
|
|
3757
|
-
response;
|
|
3758
|
-
constructor(message, response) {
|
|
3759
|
-
super(message);
|
|
3760
|
-
this.response = response;
|
|
3761
|
-
this.name = "TemporaryError";
|
|
3762
|
-
Object.setPrototypeOf(this, TemporaryError.prototype);
|
|
3763
|
-
}
|
|
3764
|
-
};
|
|
3765
|
-
async function retry(fetchFn, options) {
|
|
3766
|
-
switch (options.config.strategy) {
|
|
3767
|
-
case "backoff": return retryBackoff(wrapFetcher(fetchFn, {
|
|
3768
|
-
statusCodes: options.statusCodes,
|
|
3769
|
-
retryConnectionErrors: !!options.config.retryConnectionErrors
|
|
3770
|
-
}), options.config.backoff ?? defaultBackoff);
|
|
3771
|
-
default: return await fetchFn();
|
|
3772
|
-
}
|
|
3773
|
-
}
|
|
3774
|
-
function wrapFetcher(fn, options) {
|
|
3775
|
-
return async () => {
|
|
3776
|
-
try {
|
|
3777
|
-
const res = await fn();
|
|
3778
|
-
if (isRetryableResponse(res, options.statusCodes)) throw new TemporaryError("Response failed with retryable status code", res);
|
|
3779
|
-
return res;
|
|
3780
|
-
} catch (err) {
|
|
3781
|
-
if (err instanceof TemporaryError) throw err;
|
|
3782
|
-
if (options.retryConnectionErrors && (isTimeoutError(err) || isConnectionError(err))) throw err;
|
|
3783
|
-
throw new PermanentError("Permanent error", { cause: err });
|
|
3784
|
-
}
|
|
3785
|
-
};
|
|
3786
|
-
}
|
|
3787
|
-
const codeRangeRE = new RegExp("^[0-9]xx$", "i");
|
|
3788
|
-
function isRetryableResponse(res, statusCodes) {
|
|
3789
|
-
const actual = `${res.status}`;
|
|
3790
|
-
return statusCodes.some((code) => {
|
|
3791
|
-
if (!codeRangeRE.test(code)) return code === actual;
|
|
3792
|
-
const expectFamily = code.charAt(0);
|
|
3793
|
-
if (!expectFamily) throw new Error("Invalid status code range");
|
|
3794
|
-
const actualFamily = actual.charAt(0);
|
|
3795
|
-
if (!actualFamily) throw new Error(`Invalid response status code: ${actual}`);
|
|
3796
|
-
return actualFamily === expectFamily;
|
|
3797
|
-
});
|
|
3798
|
-
}
|
|
3799
|
-
async function retryBackoff(fn, strategy) {
|
|
3800
|
-
const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy;
|
|
3801
|
-
const start = Date.now();
|
|
3802
|
-
let x = 0;
|
|
3803
|
-
while (true) try {
|
|
3804
|
-
return await fn();
|
|
3805
|
-
} catch (err) {
|
|
3806
|
-
if (err instanceof PermanentError) throw err.cause;
|
|
3807
|
-
if (Date.now() - start > maxElapsedTime) {
|
|
3808
|
-
if (err instanceof TemporaryError) return err.response;
|
|
3809
|
-
throw err;
|
|
3810
|
-
}
|
|
3811
|
-
let retryInterval = 0;
|
|
3812
|
-
if (err instanceof TemporaryError) retryInterval = retryIntervalFromResponse(err.response);
|
|
3813
|
-
if (retryInterval <= 0) retryInterval = initialInterval * Math.pow(x, exponent) + Math.random() * 1e3;
|
|
3814
|
-
await delay(Math.min(retryInterval, maxInterval));
|
|
3815
|
-
x++;
|
|
3816
|
-
}
|
|
3817
|
-
}
|
|
3818
|
-
function retryIntervalFromResponse(res) {
|
|
3819
|
-
const retryVal = res.headers.get("retry-after") || "";
|
|
3820
|
-
if (!retryVal) return 0;
|
|
3821
|
-
const parsedNumber = Number(retryVal);
|
|
3822
|
-
if (Number.isInteger(parsedNumber)) return parsedNumber * 1e3;
|
|
3823
|
-
const parsedDate = Date.parse(retryVal);
|
|
3824
|
-
if (Number.isInteger(parsedDate)) {
|
|
3825
|
-
const deltaMS = parsedDate - Date.now();
|
|
3826
|
-
return deltaMS > 0 ? Math.ceil(deltaMS) : 0;
|
|
3827
|
-
}
|
|
3828
|
-
return 0;
|
|
3829
|
-
}
|
|
3830
|
-
async function delay(delay$1) {
|
|
3831
|
-
return new Promise((resolve) => setTimeout(resolve, delay$1));
|
|
3832
|
-
}
|
|
3833
|
-
|
|
3834
|
-
//#endregion
|
|
3835
|
-
//#region src/lib/url.ts
|
|
3836
|
-
const hasOwn = Object.prototype.hasOwnProperty;
|
|
3837
|
-
function pathToFunc(pathPattern, options) {
|
|
3838
|
-
const paramRE = /\{([a-zA-Z0-9_]+?)\}/g;
|
|
3839
|
-
return function buildURLPath(params = {}) {
|
|
3840
|
-
return pathPattern.replace(paramRE, function(_, placeholder) {
|
|
3841
|
-
if (!hasOwn.call(params, placeholder)) throw new Error(`Parameter '${placeholder}' is required`);
|
|
3842
|
-
const value = params[placeholder];
|
|
3843
|
-
if (typeof value !== "string" && typeof value !== "number") throw new Error(`Parameter '${placeholder}' must be a string or number`);
|
|
3844
|
-
return options?.charEncoding === "percent" ? encodeURIComponent(`${value}`) : `${value}`;
|
|
3845
|
-
});
|
|
3846
|
-
};
|
|
3847
|
-
}
|
|
3848
|
-
|
|
3849
|
-
//#endregion
|
|
3850
|
-
//#region src/lib/config.ts
|
|
3851
|
-
/**
|
|
3852
|
-
* Contains the list of servers available to the SDK
|
|
3853
|
-
*/
|
|
3854
|
-
const ServerList = ["http://localhost:3002"];
|
|
3855
|
-
function serverURLFromOptions(options) {
|
|
3856
|
-
let serverURL = options.serverURL;
|
|
3857
|
-
const params = {};
|
|
3858
|
-
if (!serverURL) {
|
|
3859
|
-
const serverIdx = options.serverIdx ?? 0;
|
|
3860
|
-
if (serverIdx < 0 || serverIdx >= ServerList.length) throw new Error(`Invalid server index ${serverIdx}`);
|
|
3861
|
-
serverURL = ServerList[serverIdx] || "";
|
|
3862
|
-
}
|
|
3863
|
-
const u = pathToFunc(serverURL)(params);
|
|
3864
|
-
return new URL(u);
|
|
3865
|
-
}
|
|
3866
|
-
const SDK_METADATA = {
|
|
3867
|
-
language: "typescript",
|
|
3868
|
-
openapiDocVersion: "1.0.0",
|
|
3869
|
-
sdkVersion: "0.0.6",
|
|
3870
|
-
genVersion: "2.788.5",
|
|
3871
|
-
userAgent: "speakeasy-sdk/mcp-typescript 0.0.6 2.788.5 1.0.0 @inkeep/agents-manage-mcp"
|
|
3872
|
-
};
|
|
3873
|
-
|
|
3874
|
-
//#endregion
|
|
3875
|
-
//#region src/lib/dlv.ts
|
|
3876
|
-
/**
|
|
3877
|
-
* @param obj The object to walk
|
|
3878
|
-
* @param key The key path to walk the object with
|
|
3879
|
-
* @param def A default value to return if the result is undefined
|
|
3880
|
-
*
|
|
3881
|
-
* @example
|
|
3882
|
-
* dlv(obj, "a.b.c.d")
|
|
3883
|
-
* @example
|
|
3884
|
-
* dlv(object, ["a", "b", "c", "d"])
|
|
3885
|
-
* @example
|
|
3886
|
-
* dlv(object, "foo.bar.baz", "Hello, default value!")
|
|
3887
|
-
*/
|
|
3888
|
-
function dlv(obj, key, def, p, undef) {
|
|
3889
|
-
key = Array.isArray(key) ? key : key.split(".");
|
|
3890
|
-
for (p = 0; p < key.length; p++) {
|
|
3891
|
-
const k = key[p];
|
|
3892
|
-
obj = k != null && obj ? obj[k] : undef;
|
|
3893
|
-
}
|
|
3894
|
-
return obj === undef ? def : obj;
|
|
3895
|
-
}
|
|
3896
|
-
|
|
3897
|
-
//#endregion
|
|
3898
|
-
//#region src/lib/env.ts
|
|
3899
|
-
const envSchema = objectType({
|
|
3900
|
-
INKEEPAGENTSMANAGE_COOKIE_AUTH: stringType().optional(),
|
|
3901
|
-
INKEEPAGENTSMANAGE_BEARER_AUTH: stringType().optional(),
|
|
3902
|
-
INKEEPAGENTSMANAGE_DEBUG: coerce.boolean().optional()
|
|
3903
|
-
});
|
|
3904
|
-
let envMemo = void 0;
|
|
3905
|
-
/**
|
|
3906
|
-
* Reads and validates environment variables.
|
|
3907
|
-
*/
|
|
3908
|
-
function env() {
|
|
3909
|
-
if (envMemo) return envMemo;
|
|
3910
|
-
envMemo = envSchema.parse(dlv(globalThis, "process.env") ?? dlv(globalThis, "Deno.env") ?? {});
|
|
3911
|
-
return envMemo;
|
|
3912
|
-
}
|
|
3913
|
-
|
|
3914
|
-
//#endregion
|
|
3915
|
-
//#region src/lib/security.ts
|
|
3916
|
-
let SecurityErrorCode = /* @__PURE__ */ function(SecurityErrorCode$1) {
|
|
3917
|
-
SecurityErrorCode$1["Incomplete"] = "incomplete";
|
|
3918
|
-
SecurityErrorCode$1["UnrecognisedSecurityType"] = "unrecognized_security_type";
|
|
3919
|
-
return SecurityErrorCode$1;
|
|
3920
|
-
}({});
|
|
3921
|
-
var SecurityError = class SecurityError extends Error {
|
|
3922
|
-
constructor(code, message) {
|
|
3923
|
-
super(message);
|
|
3924
|
-
this.code = code;
|
|
3925
|
-
this.name = "SecurityError";
|
|
3926
|
-
}
|
|
3927
|
-
static incomplete() {
|
|
3928
|
-
return new SecurityError(SecurityErrorCode.Incomplete, "Security requirements not met in order to perform the operation");
|
|
3929
|
-
}
|
|
3930
|
-
static unrecognizedType(type) {
|
|
3931
|
-
return new SecurityError(SecurityErrorCode.UnrecognisedSecurityType, `Unrecognised security type: ${type}`);
|
|
3932
|
-
}
|
|
3933
|
-
};
|
|
3934
|
-
function resolveSecurity(...options) {
|
|
3935
|
-
const state = {
|
|
3936
|
-
basic: {},
|
|
3937
|
-
headers: {},
|
|
3938
|
-
queryParams: {},
|
|
3939
|
-
cookies: {},
|
|
3940
|
-
oauth2: { type: "none" }
|
|
3941
|
-
};
|
|
3942
|
-
const option = options.find((opts) => {
|
|
3943
|
-
return opts.every((o) => {
|
|
3944
|
-
if (o.value == null) return false;
|
|
3945
|
-
else if (o.type === "http:basic") return o.value.username != null || o.value.password != null;
|
|
3946
|
-
else if (o.type === "http:custom") return null;
|
|
3947
|
-
else if (o.type === "oauth2:password") return typeof o.value === "string" && !!o.value;
|
|
3948
|
-
else if (o.type === "oauth2:client_credentials") {
|
|
3949
|
-
if (typeof o.value == "string") return !!o.value;
|
|
3950
|
-
return o.value.clientID != null || o.value.clientSecret != null;
|
|
3951
|
-
} else if (typeof o.value === "string") return !!o.value;
|
|
3952
|
-
else throw new Error(`Unrecognized security type: ${o.type} (value type: ${typeof o.value})`);
|
|
3953
|
-
});
|
|
3954
|
-
});
|
|
3955
|
-
if (option == null) return null;
|
|
3956
|
-
option.forEach((spec) => {
|
|
3957
|
-
if (spec.value == null) return;
|
|
3958
|
-
const { type } = spec;
|
|
3959
|
-
switch (type) {
|
|
3960
|
-
case "apiKey:header":
|
|
3961
|
-
state.headers[spec.fieldName] = spec.value;
|
|
3962
|
-
break;
|
|
3963
|
-
case "apiKey:query":
|
|
3964
|
-
state.queryParams[spec.fieldName] = spec.value;
|
|
3965
|
-
break;
|
|
3966
|
-
case "apiKey:cookie":
|
|
3967
|
-
state.cookies[spec.fieldName] = spec.value;
|
|
3968
|
-
break;
|
|
3969
|
-
case "http:basic":
|
|
3970
|
-
applyBasic(state, spec);
|
|
3971
|
-
break;
|
|
3972
|
-
case "http:custom": break;
|
|
3973
|
-
case "http:bearer":
|
|
3974
|
-
applyBearer(state, spec);
|
|
3975
|
-
break;
|
|
3976
|
-
case "oauth2":
|
|
3977
|
-
applyBearer(state, spec);
|
|
3978
|
-
break;
|
|
3979
|
-
case "oauth2:password":
|
|
3980
|
-
applyBearer(state, spec);
|
|
3981
|
-
break;
|
|
3982
|
-
case "oauth2:client_credentials": break;
|
|
3983
|
-
case "openIdConnect":
|
|
3984
|
-
applyBearer(state, spec);
|
|
3985
|
-
break;
|
|
3986
|
-
default: throw SecurityError.unrecognizedType(type);
|
|
3987
|
-
}
|
|
3988
|
-
});
|
|
3989
|
-
return state;
|
|
3990
|
-
}
|
|
3991
|
-
function applyBasic(state, spec) {
|
|
3992
|
-
if (spec.value == null) return;
|
|
3993
|
-
state.basic = spec.value;
|
|
3994
|
-
}
|
|
3995
|
-
function applyBearer(state, spec) {
|
|
3996
|
-
if (typeof spec.value !== "string" || !spec.value) return;
|
|
3997
|
-
let value = spec.value;
|
|
3998
|
-
if (value.slice(0, 7).toLowerCase() !== "bearer ") value = `Bearer ${value}`;
|
|
3999
|
-
if (spec.fieldName !== void 0) state.headers[spec.fieldName] = value;
|
|
4000
|
-
}
|
|
4001
|
-
function resolveGlobalSecurity(security) {
|
|
4002
|
-
return resolveSecurity([{
|
|
4003
|
-
fieldName: "better-auth.session_token",
|
|
4004
|
-
type: "apiKey:cookie",
|
|
4005
|
-
value: security?.cookieAuth ?? env().INKEEPAGENTSMANAGE_COOKIE_AUTH
|
|
4006
|
-
}, {
|
|
4007
|
-
fieldName: "Authorization",
|
|
4008
|
-
type: "http:bearer",
|
|
4009
|
-
value: security?.bearerAuth ?? env().INKEEPAGENTSMANAGE_BEARER_AUTH
|
|
4010
|
-
}]);
|
|
4011
|
-
}
|
|
4012
|
-
async function extractSecurity(sec) {
|
|
4013
|
-
if (sec == null) return;
|
|
4014
|
-
return typeof sec === "function" ? sec() : sec;
|
|
4015
|
-
}
|
|
4016
|
-
|
|
4017
3601
|
//#endregion
|
|
4018
3602
|
//#region src/hooks/registration.ts
|
|
4019
3603
|
function initHooks(hooks) {}
|
|
@@ -4150,6 +3734,46 @@ function stringToBase64(str) {
|
|
|
4150
3734
|
const zodOutbound = custom((x) => x instanceof Uint8Array).or(stringType().transform(stringToBytes));
|
|
4151
3735
|
const zodInbound = custom((x) => x instanceof Uint8Array).or(stringType().transform(bytesFromBase64));
|
|
4152
3736
|
|
|
3737
|
+
//#endregion
|
|
3738
|
+
//#region src/lib/url.ts
|
|
3739
|
+
const hasOwn = Object.prototype.hasOwnProperty;
|
|
3740
|
+
function pathToFunc(pathPattern, options) {
|
|
3741
|
+
const paramRE = /\{([a-zA-Z0-9_]+?)\}/g;
|
|
3742
|
+
return function buildURLPath(params = {}) {
|
|
3743
|
+
return pathPattern.replace(paramRE, function(_, placeholder) {
|
|
3744
|
+
if (!hasOwn.call(params, placeholder)) throw new Error(`Parameter '${placeholder}' is required`);
|
|
3745
|
+
const value = params[placeholder];
|
|
3746
|
+
if (typeof value !== "string" && typeof value !== "number") throw new Error(`Parameter '${placeholder}' must be a string or number`);
|
|
3747
|
+
return options?.charEncoding === "percent" ? encodeURIComponent(`${value}`) : `${value}`;
|
|
3748
|
+
});
|
|
3749
|
+
};
|
|
3750
|
+
}
|
|
3751
|
+
|
|
3752
|
+
//#endregion
|
|
3753
|
+
//#region src/lib/config.ts
|
|
3754
|
+
/**
|
|
3755
|
+
* Contains the list of servers available to the SDK
|
|
3756
|
+
*/
|
|
3757
|
+
const ServerList = ["http://localhost:3002"];
|
|
3758
|
+
function serverURLFromOptions(options) {
|
|
3759
|
+
let serverURL = options.serverURL;
|
|
3760
|
+
const params = {};
|
|
3761
|
+
if (!serverURL) {
|
|
3762
|
+
const serverIdx = options.serverIdx ?? 0;
|
|
3763
|
+
if (serverIdx < 0 || serverIdx >= ServerList.length) throw new Error(`Invalid server index ${serverIdx}`);
|
|
3764
|
+
serverURL = ServerList[serverIdx] || "";
|
|
3765
|
+
}
|
|
3766
|
+
const u = pathToFunc(serverURL)(params);
|
|
3767
|
+
return new URL(u);
|
|
3768
|
+
}
|
|
3769
|
+
const SDK_METADATA = {
|
|
3770
|
+
language: "typescript",
|
|
3771
|
+
openapiDocVersion: "1.0.0",
|
|
3772
|
+
sdkVersion: "0.0.6",
|
|
3773
|
+
genVersion: "2.788.5",
|
|
3774
|
+
userAgent: "speakeasy-sdk/mcp-typescript 0.0.6 2.788.5 1.0.0 @inkeep/agents-manage-mcp"
|
|
3775
|
+
};
|
|
3776
|
+
|
|
4153
3777
|
//#endregion
|
|
4154
3778
|
//#region src/lib/is-plain-object.ts
|
|
4155
3779
|
function isPlainObject(value) {
|
|
@@ -4293,27 +3917,189 @@ function mapDefinedEntries(inp, mapper) {
|
|
|
4293
3917
|
}
|
|
4294
3918
|
return acc.length ? acc : null;
|
|
4295
3919
|
}
|
|
4296
|
-
function queryJoin(...args$113) {
|
|
4297
|
-
return args$113.filter(Boolean).join("&");
|
|
3920
|
+
function queryJoin(...args$113) {
|
|
3921
|
+
return args$113.filter(Boolean).join("&");
|
|
3922
|
+
}
|
|
3923
|
+
function queryEncoder(f) {
|
|
3924
|
+
const bulkEncode = function(values, options) {
|
|
3925
|
+
const opts = {
|
|
3926
|
+
...options,
|
|
3927
|
+
explode: options?.explode ?? true,
|
|
3928
|
+
charEncoding: options?.charEncoding ?? "percent"
|
|
3929
|
+
};
|
|
3930
|
+
return queryJoin(...Object.entries(values).map(([key, value]) => {
|
|
3931
|
+
return f(key, value, opts);
|
|
3932
|
+
}));
|
|
3933
|
+
};
|
|
3934
|
+
return bulkEncode;
|
|
3935
|
+
}
|
|
3936
|
+
const encodeJSONQuery = queryEncoder(encodeJSON);
|
|
3937
|
+
const encodeFormQuery = queryEncoder(encodeForm);
|
|
3938
|
+
const encodeSpaceDelimitedQuery = queryEncoder(encodeSpaceDelimited);
|
|
3939
|
+
const encodePipeDelimitedQuery = queryEncoder(encodePipeDelimited);
|
|
3940
|
+
const encodeDeepObjectQuery = queryEncoder(encodeDeepObject);
|
|
3941
|
+
|
|
3942
|
+
//#endregion
|
|
3943
|
+
//#region src/lib/dlv.ts
|
|
3944
|
+
/**
|
|
3945
|
+
* @param obj The object to walk
|
|
3946
|
+
* @param key The key path to walk the object with
|
|
3947
|
+
* @param def A default value to return if the result is undefined
|
|
3948
|
+
*
|
|
3949
|
+
* @example
|
|
3950
|
+
* dlv(obj, "a.b.c.d")
|
|
3951
|
+
* @example
|
|
3952
|
+
* dlv(object, ["a", "b", "c", "d"])
|
|
3953
|
+
* @example
|
|
3954
|
+
* dlv(object, "foo.bar.baz", "Hello, default value!")
|
|
3955
|
+
*/
|
|
3956
|
+
function dlv(obj, key, def, p, undef) {
|
|
3957
|
+
key = Array.isArray(key) ? key : key.split(".");
|
|
3958
|
+
for (p = 0; p < key.length; p++) {
|
|
3959
|
+
const k = key[p];
|
|
3960
|
+
obj = k != null && obj ? obj[k] : undef;
|
|
3961
|
+
}
|
|
3962
|
+
return obj === undef ? def : obj;
|
|
3963
|
+
}
|
|
3964
|
+
|
|
3965
|
+
//#endregion
|
|
3966
|
+
//#region src/lib/env.ts
|
|
3967
|
+
const envSchema = objectType({
|
|
3968
|
+
INKEEPAGENTSMANAGE_COOKIE_AUTH: stringType().optional(),
|
|
3969
|
+
INKEEPAGENTSMANAGE_BEARER_AUTH: stringType().optional(),
|
|
3970
|
+
INKEEPAGENTSMANAGE_DEBUG: coerce.boolean().optional()
|
|
3971
|
+
});
|
|
3972
|
+
let envMemo = void 0;
|
|
3973
|
+
/**
|
|
3974
|
+
* Reads and validates environment variables.
|
|
3975
|
+
*/
|
|
3976
|
+
function env() {
|
|
3977
|
+
if (envMemo) return envMemo;
|
|
3978
|
+
envMemo = envSchema.parse(dlv(globalThis, "process.env") ?? dlv(globalThis, "Deno.env") ?? {});
|
|
3979
|
+
return envMemo;
|
|
3980
|
+
}
|
|
3981
|
+
|
|
3982
|
+
//#endregion
|
|
3983
|
+
//#region src/lib/http.ts
|
|
3984
|
+
const DEFAULT_FETCHER = (input, init) => {
|
|
3985
|
+
if (init == null) return fetch(input);
|
|
3986
|
+
else return fetch(input, init);
|
|
3987
|
+
};
|
|
3988
|
+
var HTTPClient = class HTTPClient {
|
|
3989
|
+
fetcher;
|
|
3990
|
+
requestHooks = [];
|
|
3991
|
+
requestErrorHooks = [];
|
|
3992
|
+
responseHooks = [];
|
|
3993
|
+
constructor(options = {}) {
|
|
3994
|
+
this.options = options;
|
|
3995
|
+
this.fetcher = options.fetcher || DEFAULT_FETCHER;
|
|
3996
|
+
}
|
|
3997
|
+
async request(request) {
|
|
3998
|
+
let req = request;
|
|
3999
|
+
for (const hook of this.requestHooks) {
|
|
4000
|
+
const nextRequest = await hook(req);
|
|
4001
|
+
if (nextRequest) req = nextRequest;
|
|
4002
|
+
}
|
|
4003
|
+
try {
|
|
4004
|
+
const res = await this.fetcher(req);
|
|
4005
|
+
for (const hook of this.responseHooks) await hook(res, req);
|
|
4006
|
+
return res;
|
|
4007
|
+
} catch (err) {
|
|
4008
|
+
for (const hook of this.requestErrorHooks) await hook(err, req);
|
|
4009
|
+
throw err;
|
|
4010
|
+
}
|
|
4011
|
+
}
|
|
4012
|
+
addHook(...args$113) {
|
|
4013
|
+
if (args$113[0] === "beforeRequest") this.requestHooks.push(args$113[1]);
|
|
4014
|
+
else if (args$113[0] === "requestError") this.requestErrorHooks.push(args$113[1]);
|
|
4015
|
+
else if (args$113[0] === "response") this.responseHooks.push(args$113[1]);
|
|
4016
|
+
else throw new Error(`Invalid hook type: ${args$113[0]}`);
|
|
4017
|
+
return this;
|
|
4018
|
+
}
|
|
4019
|
+
removeHook(...args$113) {
|
|
4020
|
+
let target;
|
|
4021
|
+
if (args$113[0] === "beforeRequest") target = this.requestHooks;
|
|
4022
|
+
else if (args$113[0] === "requestError") target = this.requestErrorHooks;
|
|
4023
|
+
else if (args$113[0] === "response") target = this.responseHooks;
|
|
4024
|
+
else throw new Error(`Invalid hook type: ${args$113[0]}`);
|
|
4025
|
+
const index = target.findIndex((v) => v === args$113[1]);
|
|
4026
|
+
if (index >= 0) target.splice(index, 1);
|
|
4027
|
+
return this;
|
|
4028
|
+
}
|
|
4029
|
+
clone() {
|
|
4030
|
+
const child = new HTTPClient(this.options);
|
|
4031
|
+
child.requestHooks = this.requestHooks.slice();
|
|
4032
|
+
child.requestErrorHooks = this.requestErrorHooks.slice();
|
|
4033
|
+
child.responseHooks = this.responseHooks.slice();
|
|
4034
|
+
return child;
|
|
4035
|
+
}
|
|
4036
|
+
};
|
|
4037
|
+
const mediaParamSeparator = /\s*;\s*/g;
|
|
4038
|
+
function matchContentType(response, pattern) {
|
|
4039
|
+
if (pattern === "*") return true;
|
|
4040
|
+
let contentType = response.headers.get("content-type")?.trim() || "application/octet-stream";
|
|
4041
|
+
contentType = contentType.toLowerCase();
|
|
4042
|
+
const [wantType = "", ...wantParams] = pattern.toLowerCase().trim().split(mediaParamSeparator);
|
|
4043
|
+
if (wantType.split("/").length !== 2) return false;
|
|
4044
|
+
const [gotType = "", ...gotParams] = contentType.split(mediaParamSeparator);
|
|
4045
|
+
const [type = "", subtype = ""] = gotType.split("/");
|
|
4046
|
+
if (!type || !subtype) return false;
|
|
4047
|
+
if (wantType !== "*/*" && gotType !== wantType && `${type}/*` !== wantType && `*/${subtype}` !== wantType) return false;
|
|
4048
|
+
if (gotParams.length < wantParams.length) return false;
|
|
4049
|
+
const params = new Set(gotParams);
|
|
4050
|
+
for (const wantParam of wantParams) if (!params.has(wantParam)) return false;
|
|
4051
|
+
return true;
|
|
4052
|
+
}
|
|
4053
|
+
const codeRangeRE$1 = new RegExp("^[0-9]xx$", "i");
|
|
4054
|
+
function matchStatusCode(response, codes) {
|
|
4055
|
+
const actual = `${response.status}`;
|
|
4056
|
+
const expectedCodes = Array.isArray(codes) ? codes : [codes];
|
|
4057
|
+
if (!expectedCodes.length) return false;
|
|
4058
|
+
return expectedCodes.some((ec) => {
|
|
4059
|
+
const code = `${ec}`;
|
|
4060
|
+
if (code === "default") return true;
|
|
4061
|
+
if (!codeRangeRE$1.test(`${code}`)) return code === actual;
|
|
4062
|
+
const expectFamily = code.charAt(0);
|
|
4063
|
+
if (!expectFamily) throw new Error("Invalid status code range");
|
|
4064
|
+
const actualFamily = actual.charAt(0);
|
|
4065
|
+
if (!actualFamily) throw new Error(`Invalid response status code: ${actual}`);
|
|
4066
|
+
return actualFamily === expectFamily;
|
|
4067
|
+
});
|
|
4068
|
+
}
|
|
4069
|
+
function matchResponse(response, code, contentTypePattern) {
|
|
4070
|
+
return matchStatusCode(response, code) && matchContentType(response, contentTypePattern);
|
|
4071
|
+
}
|
|
4072
|
+
/**
|
|
4073
|
+
* Uses various heurisitics to determine if an error is a connection error.
|
|
4074
|
+
*/
|
|
4075
|
+
function isConnectionError(err) {
|
|
4076
|
+
if (typeof err !== "object" || err == null) return false;
|
|
4077
|
+
const isBrowserErr = err instanceof TypeError && err.message.toLowerCase().startsWith("failed to fetch");
|
|
4078
|
+
const isNodeErr = err instanceof TypeError && err.message.toLowerCase().startsWith("fetch failed");
|
|
4079
|
+
const isBunErr = "name" in err && err.name === "ConnectionError";
|
|
4080
|
+
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnreset";
|
|
4081
|
+
return isBrowserErr || isNodeErr || isGenericErr || isBunErr;
|
|
4082
|
+
}
|
|
4083
|
+
/**
|
|
4084
|
+
* Uses various heurisitics to determine if an error is a timeout error.
|
|
4085
|
+
*/
|
|
4086
|
+
function isTimeoutError(err) {
|
|
4087
|
+
if (typeof err !== "object" || err == null) return false;
|
|
4088
|
+
const isNative = "name" in err && err.name === "TimeoutError";
|
|
4089
|
+
const isLegacyNative = "code" in err && err.code === 23;
|
|
4090
|
+
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnaborted";
|
|
4091
|
+
return isNative || isLegacyNative || isGenericErr;
|
|
4298
4092
|
}
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
}));
|
|
4309
|
-
};
|
|
4310
|
-
return bulkEncode;
|
|
4093
|
+
/**
|
|
4094
|
+
* Uses various heurisitics to determine if an error is a abort error.
|
|
4095
|
+
*/
|
|
4096
|
+
function isAbortError(err) {
|
|
4097
|
+
if (typeof err !== "object" || err == null) return false;
|
|
4098
|
+
const isNative = "name" in err && err.name === "AbortError";
|
|
4099
|
+
const isLegacyNative = "code" in err && err.code === 20;
|
|
4100
|
+
const isGenericErr = "code" in err && typeof err.code === "string" && err.code.toLowerCase() === "econnaborted";
|
|
4101
|
+
return isNative || isLegacyNative || isGenericErr;
|
|
4311
4102
|
}
|
|
4312
|
-
const encodeJSONQuery = queryEncoder(encodeJSON);
|
|
4313
|
-
const encodeFormQuery = queryEncoder(encodeForm);
|
|
4314
|
-
const encodeSpaceDelimitedQuery = queryEncoder(encodeSpaceDelimited);
|
|
4315
|
-
const encodePipeDelimitedQuery = queryEncoder(encodePipeDelimited);
|
|
4316
|
-
const encodeDeepObjectQuery = queryEncoder(encodeDeepObject);
|
|
4317
4103
|
|
|
4318
4104
|
//#endregion
|
|
4319
4105
|
//#region src/lib/result.ts
|
|
@@ -4330,6 +4116,113 @@ function ERR$1(error) {
|
|
|
4330
4116
|
};
|
|
4331
4117
|
}
|
|
4332
4118
|
|
|
4119
|
+
//#endregion
|
|
4120
|
+
//#region src/lib/retries.ts
|
|
4121
|
+
const defaultBackoff = {
|
|
4122
|
+
initialInterval: 500,
|
|
4123
|
+
maxInterval: 6e4,
|
|
4124
|
+
exponent: 1.5,
|
|
4125
|
+
maxElapsedTime: 36e5
|
|
4126
|
+
};
|
|
4127
|
+
/**
|
|
4128
|
+
* PermanentError is an error that is not recoverable. Throwing this error will
|
|
4129
|
+
* cause a retry loop to terminate.
|
|
4130
|
+
*/
|
|
4131
|
+
var PermanentError = class PermanentError extends Error {
|
|
4132
|
+
/** The underlying cause of the error. */
|
|
4133
|
+
cause;
|
|
4134
|
+
constructor(message, options) {
|
|
4135
|
+
let msg = message;
|
|
4136
|
+
if (options?.cause) msg += `: ${options.cause}`;
|
|
4137
|
+
super(msg, options);
|
|
4138
|
+
this.name = "PermanentError";
|
|
4139
|
+
if (typeof this.cause === "undefined") this.cause = options?.cause;
|
|
4140
|
+
Object.setPrototypeOf(this, PermanentError.prototype);
|
|
4141
|
+
}
|
|
4142
|
+
};
|
|
4143
|
+
/**
|
|
4144
|
+
* TemporaryError is an error is used to signal that an HTTP request can be
|
|
4145
|
+
* retried as part of a retry loop. If retry attempts are exhausted and this
|
|
4146
|
+
* error is thrown, the response will be returned to the caller.
|
|
4147
|
+
*/
|
|
4148
|
+
var TemporaryError = class TemporaryError extends Error {
|
|
4149
|
+
response;
|
|
4150
|
+
constructor(message, response) {
|
|
4151
|
+
super(message);
|
|
4152
|
+
this.response = response;
|
|
4153
|
+
this.name = "TemporaryError";
|
|
4154
|
+
Object.setPrototypeOf(this, TemporaryError.prototype);
|
|
4155
|
+
}
|
|
4156
|
+
};
|
|
4157
|
+
async function retry(fetchFn, options) {
|
|
4158
|
+
switch (options.config.strategy) {
|
|
4159
|
+
case "backoff": return retryBackoff(wrapFetcher(fetchFn, {
|
|
4160
|
+
statusCodes: options.statusCodes,
|
|
4161
|
+
retryConnectionErrors: !!options.config.retryConnectionErrors
|
|
4162
|
+
}), options.config.backoff ?? defaultBackoff);
|
|
4163
|
+
default: return await fetchFn();
|
|
4164
|
+
}
|
|
4165
|
+
}
|
|
4166
|
+
function wrapFetcher(fn, options) {
|
|
4167
|
+
return async () => {
|
|
4168
|
+
try {
|
|
4169
|
+
const res = await fn();
|
|
4170
|
+
if (isRetryableResponse(res, options.statusCodes)) throw new TemporaryError("Response failed with retryable status code", res);
|
|
4171
|
+
return res;
|
|
4172
|
+
} catch (err) {
|
|
4173
|
+
if (err instanceof TemporaryError) throw err;
|
|
4174
|
+
if (options.retryConnectionErrors && (isTimeoutError(err) || isConnectionError(err))) throw err;
|
|
4175
|
+
throw new PermanentError("Permanent error", { cause: err });
|
|
4176
|
+
}
|
|
4177
|
+
};
|
|
4178
|
+
}
|
|
4179
|
+
const codeRangeRE = new RegExp("^[0-9]xx$", "i");
|
|
4180
|
+
function isRetryableResponse(res, statusCodes) {
|
|
4181
|
+
const actual = `${res.status}`;
|
|
4182
|
+
return statusCodes.some((code) => {
|
|
4183
|
+
if (!codeRangeRE.test(code)) return code === actual;
|
|
4184
|
+
const expectFamily = code.charAt(0);
|
|
4185
|
+
if (!expectFamily) throw new Error("Invalid status code range");
|
|
4186
|
+
const actualFamily = actual.charAt(0);
|
|
4187
|
+
if (!actualFamily) throw new Error(`Invalid response status code: ${actual}`);
|
|
4188
|
+
return actualFamily === expectFamily;
|
|
4189
|
+
});
|
|
4190
|
+
}
|
|
4191
|
+
async function retryBackoff(fn, strategy) {
|
|
4192
|
+
const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy;
|
|
4193
|
+
const start = Date.now();
|
|
4194
|
+
let x = 0;
|
|
4195
|
+
while (true) try {
|
|
4196
|
+
return await fn();
|
|
4197
|
+
} catch (err) {
|
|
4198
|
+
if (err instanceof PermanentError) throw err.cause;
|
|
4199
|
+
if (Date.now() - start > maxElapsedTime) {
|
|
4200
|
+
if (err instanceof TemporaryError) return err.response;
|
|
4201
|
+
throw err;
|
|
4202
|
+
}
|
|
4203
|
+
let retryInterval = 0;
|
|
4204
|
+
if (err instanceof TemporaryError) retryInterval = retryIntervalFromResponse(err.response);
|
|
4205
|
+
if (retryInterval <= 0) retryInterval = initialInterval * Math.pow(x, exponent) + Math.random() * 1e3;
|
|
4206
|
+
await delay(Math.min(retryInterval, maxInterval));
|
|
4207
|
+
x++;
|
|
4208
|
+
}
|
|
4209
|
+
}
|
|
4210
|
+
function retryIntervalFromResponse(res) {
|
|
4211
|
+
const retryVal = res.headers.get("retry-after") || "";
|
|
4212
|
+
if (!retryVal) return 0;
|
|
4213
|
+
const parsedNumber = Number(retryVal);
|
|
4214
|
+
if (Number.isInteger(parsedNumber)) return parsedNumber * 1e3;
|
|
4215
|
+
const parsedDate = Date.parse(retryVal);
|
|
4216
|
+
if (Number.isInteger(parsedDate)) {
|
|
4217
|
+
const deltaMS = parsedDate - Date.now();
|
|
4218
|
+
return deltaMS > 0 ? Math.ceil(deltaMS) : 0;
|
|
4219
|
+
}
|
|
4220
|
+
return 0;
|
|
4221
|
+
}
|
|
4222
|
+
async function delay(delay$1) {
|
|
4223
|
+
return new Promise((resolve) => setTimeout(resolve, delay$1));
|
|
4224
|
+
}
|
|
4225
|
+
|
|
4333
4226
|
//#endregion
|
|
4334
4227
|
//#region src/lib/sdks.ts
|
|
4335
4228
|
const gt = typeof globalThis === "undefined" ? null : globalThis;
|
|
@@ -4901,6 +4794,109 @@ function compactMap(values) {
|
|
|
4901
4794
|
return out;
|
|
4902
4795
|
}
|
|
4903
4796
|
|
|
4797
|
+
//#endregion
|
|
4798
|
+
//#region src/lib/security.ts
|
|
4799
|
+
let SecurityErrorCode = /* @__PURE__ */ function(SecurityErrorCode$1) {
|
|
4800
|
+
SecurityErrorCode$1["Incomplete"] = "incomplete";
|
|
4801
|
+
SecurityErrorCode$1["UnrecognisedSecurityType"] = "unrecognized_security_type";
|
|
4802
|
+
return SecurityErrorCode$1;
|
|
4803
|
+
}({});
|
|
4804
|
+
var SecurityError = class SecurityError extends Error {
|
|
4805
|
+
constructor(code, message) {
|
|
4806
|
+
super(message);
|
|
4807
|
+
this.code = code;
|
|
4808
|
+
this.name = "SecurityError";
|
|
4809
|
+
}
|
|
4810
|
+
static incomplete() {
|
|
4811
|
+
return new SecurityError(SecurityErrorCode.Incomplete, "Security requirements not met in order to perform the operation");
|
|
4812
|
+
}
|
|
4813
|
+
static unrecognizedType(type) {
|
|
4814
|
+
return new SecurityError(SecurityErrorCode.UnrecognisedSecurityType, `Unrecognised security type: ${type}`);
|
|
4815
|
+
}
|
|
4816
|
+
};
|
|
4817
|
+
function resolveSecurity(...options) {
|
|
4818
|
+
const state = {
|
|
4819
|
+
basic: {},
|
|
4820
|
+
headers: {},
|
|
4821
|
+
queryParams: {},
|
|
4822
|
+
cookies: {},
|
|
4823
|
+
oauth2: { type: "none" }
|
|
4824
|
+
};
|
|
4825
|
+
const option = options.find((opts) => {
|
|
4826
|
+
return opts.every((o) => {
|
|
4827
|
+
if (o.value == null) return false;
|
|
4828
|
+
else if (o.type === "http:basic") return o.value.username != null || o.value.password != null;
|
|
4829
|
+
else if (o.type === "http:custom") return null;
|
|
4830
|
+
else if (o.type === "oauth2:password") return typeof o.value === "string" && !!o.value;
|
|
4831
|
+
else if (o.type === "oauth2:client_credentials") {
|
|
4832
|
+
if (typeof o.value == "string") return !!o.value;
|
|
4833
|
+
return o.value.clientID != null || o.value.clientSecret != null;
|
|
4834
|
+
} else if (typeof o.value === "string") return !!o.value;
|
|
4835
|
+
else throw new Error(`Unrecognized security type: ${o.type} (value type: ${typeof o.value})`);
|
|
4836
|
+
});
|
|
4837
|
+
});
|
|
4838
|
+
if (option == null) return null;
|
|
4839
|
+
option.forEach((spec) => {
|
|
4840
|
+
if (spec.value == null) return;
|
|
4841
|
+
const { type } = spec;
|
|
4842
|
+
switch (type) {
|
|
4843
|
+
case "apiKey:header":
|
|
4844
|
+
state.headers[spec.fieldName] = spec.value;
|
|
4845
|
+
break;
|
|
4846
|
+
case "apiKey:query":
|
|
4847
|
+
state.queryParams[spec.fieldName] = spec.value;
|
|
4848
|
+
break;
|
|
4849
|
+
case "apiKey:cookie":
|
|
4850
|
+
state.cookies[spec.fieldName] = spec.value;
|
|
4851
|
+
break;
|
|
4852
|
+
case "http:basic":
|
|
4853
|
+
applyBasic(state, spec);
|
|
4854
|
+
break;
|
|
4855
|
+
case "http:custom": break;
|
|
4856
|
+
case "http:bearer":
|
|
4857
|
+
applyBearer(state, spec);
|
|
4858
|
+
break;
|
|
4859
|
+
case "oauth2":
|
|
4860
|
+
applyBearer(state, spec);
|
|
4861
|
+
break;
|
|
4862
|
+
case "oauth2:password":
|
|
4863
|
+
applyBearer(state, spec);
|
|
4864
|
+
break;
|
|
4865
|
+
case "oauth2:client_credentials": break;
|
|
4866
|
+
case "openIdConnect":
|
|
4867
|
+
applyBearer(state, spec);
|
|
4868
|
+
break;
|
|
4869
|
+
default: throw SecurityError.unrecognizedType(type);
|
|
4870
|
+
}
|
|
4871
|
+
});
|
|
4872
|
+
return state;
|
|
4873
|
+
}
|
|
4874
|
+
function applyBasic(state, spec) {
|
|
4875
|
+
if (spec.value == null) return;
|
|
4876
|
+
state.basic = spec.value;
|
|
4877
|
+
}
|
|
4878
|
+
function applyBearer(state, spec) {
|
|
4879
|
+
if (typeof spec.value !== "string" || !spec.value) return;
|
|
4880
|
+
let value = spec.value;
|
|
4881
|
+
if (value.slice(0, 7).toLowerCase() !== "bearer ") value = `Bearer ${value}`;
|
|
4882
|
+
if (spec.fieldName !== void 0) state.headers[spec.fieldName] = value;
|
|
4883
|
+
}
|
|
4884
|
+
function resolveGlobalSecurity(security) {
|
|
4885
|
+
return resolveSecurity([{
|
|
4886
|
+
fieldName: "better-auth.session_token",
|
|
4887
|
+
type: "apiKey:cookie",
|
|
4888
|
+
value: security?.cookieAuth ?? env().INKEEPAGENTSMANAGE_COOKIE_AUTH
|
|
4889
|
+
}, {
|
|
4890
|
+
fieldName: "Authorization",
|
|
4891
|
+
type: "http:bearer",
|
|
4892
|
+
value: security?.bearerAuth ?? env().INKEEPAGENTSMANAGE_BEARER_AUTH
|
|
4893
|
+
}]);
|
|
4894
|
+
}
|
|
4895
|
+
async function extractSecurity(sec) {
|
|
4896
|
+
if (sec == null) return;
|
|
4897
|
+
return typeof sec === "function" ? sec() : sec;
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4904
4900
|
//#endregion
|
|
4905
4901
|
//#region src/models/badrequest.ts
|
|
4906
4902
|
const BadRequestCode1$zodSchema = enumType(["bad_request"]).describe("A short code indicating the error code returned.");
|