UNPKG

@struktoai/mirage-core

Version:

A Unified Virtual Filesystem For AI Agents

50 lines • 1.97 kB
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import { ConcurrencyLimiter } from "../concurrency/limiter.js"; import { stallTimeout } from "../core/api/client.js"; import { Accessor } from "./base.js"; export class DifyAccessor extends Accessor { config; limiter; constructor(config) { super(); this.config = config; this.limiter = new ConcurrencyLimiter(config.maxConcurrency); } async request(method, endpoint, options = {}) { const release = await this.limiter.acquire(); try { return await this.fetch(method, endpoint, options); } finally { release(); } } fetch(method, endpoint, options) { const url = new URL(this.config.baseUrl + endpoint); for (const [key, value] of Object.entries(options.params ?? {})) { url.searchParams.set(key, String(value)); } const headers = { Authorization: `Bearer ${this.config.apiKey}`, }; const init = { method, headers }; if (options.json !== undefined) { headers['Content-Type'] = 'application/json'; init.body = JSON.stringify(options.json); } return stallTimeout(this.config.timeout)(url, init); } } //# sourceMappingURL=dify.js.map