@okrlinkhub/agent-bridge 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.d.ts +89 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +279 -4
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +4 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +103 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/channels.d.ts +83 -0
- package/dist/component/channels.d.ts.map +1 -0
- package/dist/component/channels.js +288 -0
- package/dist/component/channels.js.map +1 -0
- package/dist/component/circuitBreaker.d.ts +73 -0
- package/dist/component/circuitBreaker.d.ts.map +1 -0
- package/dist/component/circuitBreaker.js +216 -0
- package/dist/component/circuitBreaker.js.map +1 -0
- package/dist/component/gateway.d.ts +19 -3
- package/dist/component/gateway.d.ts.map +1 -1
- package/dist/component/gateway.js +82 -2
- package/dist/component/gateway.js.map +1 -1
- package/dist/component/permissions.d.ts +2 -2
- package/dist/component/registry.d.ts +3 -3
- package/dist/component/schema.d.ts +73 -3
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +46 -0
- package/dist/component/schema.js.map +1 -1
- package/package.json +5 -2
- package/src/client/index.ts +411 -4
- package/src/component/_generated/api.ts +4 -0
- package/src/component/_generated/component.ts +142 -1
- package/src/component/channels.ts +374 -0
- package/src/component/circuitBreaker.ts +250 -0
- package/src/component/gateway.ts +98 -2
- package/src/component/schema.ts +49 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@okrlinkhub/agent-bridge",
|
|
3
3
|
"description": "A agent bridge component for Convex.",
|
|
4
|
-
"repository":
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/okrlinkhub/agent-bridge.git"
|
|
7
|
+
},
|
|
5
8
|
"homepage": "https://github.com/okrlinkhub/agent-bridge#readme",
|
|
6
9
|
"bugs": {
|
|
7
10
|
"url": "https://github.com/okrlinkhub/agent-bridge/issues"
|
|
8
11
|
},
|
|
9
|
-
"version": "0.
|
|
12
|
+
"version": "0.2.0",
|
|
10
13
|
"license": "Apache-2.0",
|
|
11
14
|
"keywords": [
|
|
12
15
|
"convex",
|
package/src/client/index.ts
CHANGED
|
@@ -252,6 +252,140 @@ export class AgentBridge {
|
|
|
252
252
|
limit: opts?.limit,
|
|
253
253
|
});
|
|
254
254
|
}
|
|
255
|
+
|
|
256
|
+
// --- Circuit Breaker ---
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Get the current circuit breaker status for an agent on this app.
|
|
260
|
+
* Returns the counter for the current hour window, or null if none exists.
|
|
261
|
+
*/
|
|
262
|
+
async getCircuitBreakerStatus(ctx: QueryCtx, agentId: string) {
|
|
263
|
+
return await ctx.runQuery(this.component.circuitBreaker.getStatus, {
|
|
264
|
+
agentId,
|
|
265
|
+
appName: this.appName,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Admin: manually reset a blocked circuit breaker for an agent.
|
|
271
|
+
*/
|
|
272
|
+
async resetCircuitBreaker(
|
|
273
|
+
ctx: MutationCtx,
|
|
274
|
+
agentId: string,
|
|
275
|
+
): Promise<boolean> {
|
|
276
|
+
return await ctx.runMutation(this.component.circuitBreaker.resetCounter, {
|
|
277
|
+
agentId,
|
|
278
|
+
appName: this.appName,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Admin: list all currently blocked circuit breakers across all agents.
|
|
284
|
+
*/
|
|
285
|
+
async listBlockedAgents(ctx: QueryCtx) {
|
|
286
|
+
return await ctx.runQuery(this.component.circuitBreaker.listBlocked, {});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// --- A2A Channels ---
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Admin: create a channel for this app.
|
|
293
|
+
* Idempotent -- returns existing channel ID if it already exists.
|
|
294
|
+
*/
|
|
295
|
+
async createChannel(
|
|
296
|
+
ctx: MutationCtx,
|
|
297
|
+
channelName: string,
|
|
298
|
+
description?: string,
|
|
299
|
+
): Promise<string> {
|
|
300
|
+
return await ctx.runMutation(this.component.channels.createChannel, {
|
|
301
|
+
appName: this.appName,
|
|
302
|
+
channelName,
|
|
303
|
+
description,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* List active channels for this app.
|
|
309
|
+
*/
|
|
310
|
+
async listChannels(ctx: QueryCtx) {
|
|
311
|
+
return await ctx.runQuery(this.component.channels.listChannels, {
|
|
312
|
+
appName: this.appName,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Admin: deactivate a channel (soft delete).
|
|
318
|
+
*/
|
|
319
|
+
async deactivateChannel(
|
|
320
|
+
ctx: MutationCtx,
|
|
321
|
+
channelName: string,
|
|
322
|
+
): Promise<boolean> {
|
|
323
|
+
return await ctx.runMutation(this.component.channels.deactivateChannel, {
|
|
324
|
+
appName: this.appName,
|
|
325
|
+
channelName,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Post a message to a channel on behalf of an authenticated agent.
|
|
331
|
+
*/
|
|
332
|
+
async postMessage(
|
|
333
|
+
ctx: MutationCtx,
|
|
334
|
+
opts: {
|
|
335
|
+
instanceToken: string;
|
|
336
|
+
channelName: string;
|
|
337
|
+
payload: string;
|
|
338
|
+
priority?: number;
|
|
339
|
+
ttlMinutes?: number;
|
|
340
|
+
},
|
|
341
|
+
) {
|
|
342
|
+
return await ctx.runMutation(this.component.channels.postMessage, {
|
|
343
|
+
instanceToken: opts.instanceToken,
|
|
344
|
+
appName: this.appName,
|
|
345
|
+
channelName: opts.channelName,
|
|
346
|
+
payload: opts.payload,
|
|
347
|
+
priority: opts.priority,
|
|
348
|
+
ttlMinutes: opts.ttlMinutes,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Read messages from a channel on behalf of an authenticated agent.
|
|
354
|
+
*/
|
|
355
|
+
async readMessages(
|
|
356
|
+
ctx: QueryCtx,
|
|
357
|
+
opts: {
|
|
358
|
+
instanceToken: string;
|
|
359
|
+
channelName: string;
|
|
360
|
+
limit?: number;
|
|
361
|
+
after?: number;
|
|
362
|
+
},
|
|
363
|
+
) {
|
|
364
|
+
return await ctx.runQuery(this.component.channels.readMessages, {
|
|
365
|
+
instanceToken: opts.instanceToken,
|
|
366
|
+
appName: this.appName,
|
|
367
|
+
channelName: opts.channelName,
|
|
368
|
+
limit: opts.limit,
|
|
369
|
+
after: opts.after,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Get unread message count for an agent on a channel.
|
|
375
|
+
*/
|
|
376
|
+
async getUnreadCount(
|
|
377
|
+
ctx: QueryCtx,
|
|
378
|
+
opts: {
|
|
379
|
+
instanceToken: string;
|
|
380
|
+
channelName: string;
|
|
381
|
+
},
|
|
382
|
+
) {
|
|
383
|
+
return await ctx.runQuery(this.component.channels.getUnreadCount, {
|
|
384
|
+
instanceToken: opts.instanceToken,
|
|
385
|
+
appName: this.appName,
|
|
386
|
+
channelName: opts.channelName,
|
|
387
|
+
});
|
|
388
|
+
}
|
|
255
389
|
}
|
|
256
390
|
|
|
257
391
|
// --- HTTP Route Registration ---
|
|
@@ -291,6 +425,7 @@ export function registerRoutes(
|
|
|
291
425
|
instanceToken?: string;
|
|
292
426
|
functionName?: string;
|
|
293
427
|
args?: Record<string, unknown>;
|
|
428
|
+
estimatedCost?: number;
|
|
294
429
|
};
|
|
295
430
|
try {
|
|
296
431
|
body = await request.json();
|
|
@@ -298,7 +433,7 @@ export function registerRoutes(
|
|
|
298
433
|
return jsonResponse({ error: "Invalid JSON body" }, 400);
|
|
299
434
|
}
|
|
300
435
|
|
|
301
|
-
const { instanceToken, functionName, args } = body;
|
|
436
|
+
const { instanceToken, functionName, args, estimatedCost } = body;
|
|
302
437
|
|
|
303
438
|
if (!instanceToken || !functionName) {
|
|
304
439
|
return jsonResponse(
|
|
@@ -308,13 +443,14 @@ export function registerRoutes(
|
|
|
308
443
|
}
|
|
309
444
|
|
|
310
445
|
// Step 1: Authorize the request (mutation -- validates token, checks permissions,
|
|
311
|
-
// updates counters, returns function handle)
|
|
446
|
+
// circuit breaker, updates counters, returns function handle)
|
|
312
447
|
const authResult = await ctx.runMutation(
|
|
313
448
|
component.gateway.authorizeRequest,
|
|
314
449
|
{
|
|
315
450
|
instanceToken,
|
|
316
451
|
functionName,
|
|
317
452
|
appName: config.appName,
|
|
453
|
+
estimatedCost,
|
|
318
454
|
},
|
|
319
455
|
);
|
|
320
456
|
|
|
@@ -324,14 +460,28 @@ export function registerRoutes(
|
|
|
324
460
|
? ` (matchedPattern="${authResult.matchedPattern}", permission="${authResult.matchedPermission}")`
|
|
325
461
|
: "";
|
|
326
462
|
// Log the denied access
|
|
463
|
+
const permission =
|
|
464
|
+
authResult.statusCode === 429 ? "rate_limited" : "deny";
|
|
327
465
|
await ctx.runMutation(component.gateway.logAccess, {
|
|
328
466
|
agentId: authResult.agentId ?? "unknown",
|
|
329
467
|
appName: config.appName,
|
|
330
468
|
functionCalled: functionName,
|
|
331
|
-
permission
|
|
469
|
+
permission,
|
|
332
470
|
errorMessage: authResult.error + detailSuffix,
|
|
333
471
|
});
|
|
334
472
|
|
|
473
|
+
// For rate-limited responses, include Retry-After header
|
|
474
|
+
if (
|
|
475
|
+
authResult.statusCode === 429 &&
|
|
476
|
+
authResult.retryAfterSeconds !== undefined
|
|
477
|
+
) {
|
|
478
|
+
return jsonResponseWithHeaders(
|
|
479
|
+
{ error: authResult.error },
|
|
480
|
+
authResult.statusCode,
|
|
481
|
+
{ "Retry-After": String(authResult.retryAfterSeconds) },
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
|
|
335
485
|
return jsonResponse(
|
|
336
486
|
{ error: authResult.error },
|
|
337
487
|
authResult.statusCode,
|
|
@@ -469,9 +619,255 @@ export function registerRoutes(
|
|
|
469
619
|
}
|
|
470
620
|
}),
|
|
471
621
|
});
|
|
622
|
+
|
|
623
|
+
// --- POST /agent-bridge/channels ---
|
|
624
|
+
// Create a new channel (admin operation)
|
|
625
|
+
http.route({
|
|
626
|
+
path: `${prefix}/channels`,
|
|
627
|
+
method: "POST",
|
|
628
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
629
|
+
let body: {
|
|
630
|
+
channelName?: string;
|
|
631
|
+
description?: string;
|
|
632
|
+
};
|
|
633
|
+
try {
|
|
634
|
+
body = await request.json();
|
|
635
|
+
} catch {
|
|
636
|
+
return jsonResponse({ error: "Invalid JSON body" }, 400);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
const { channelName, description } = body;
|
|
640
|
+
|
|
641
|
+
if (!channelName) {
|
|
642
|
+
return jsonResponse(
|
|
643
|
+
{ error: "Missing required field: channelName" },
|
|
644
|
+
400,
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
try {
|
|
649
|
+
const channelId = await ctx.runMutation(
|
|
650
|
+
component.channels.createChannel,
|
|
651
|
+
{
|
|
652
|
+
appName: config.appName,
|
|
653
|
+
channelName,
|
|
654
|
+
description,
|
|
655
|
+
},
|
|
656
|
+
);
|
|
657
|
+
|
|
658
|
+
return jsonResponse({ channelId, channelName }, 200);
|
|
659
|
+
} catch (error: unknown) {
|
|
660
|
+
const errorMessage =
|
|
661
|
+
error instanceof Error ? error.message : "Failed to create channel";
|
|
662
|
+
return jsonResponse({ error: errorMessage }, 500);
|
|
663
|
+
}
|
|
664
|
+
}),
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
// --- GET /agent-bridge/channels ---
|
|
668
|
+
// List active channels for this app
|
|
669
|
+
http.route({
|
|
670
|
+
path: `${prefix}/channels`,
|
|
671
|
+
method: "GET",
|
|
672
|
+
handler: httpActionGeneric(async (ctx) => {
|
|
673
|
+
try {
|
|
674
|
+
const channels = await ctx.runQuery(
|
|
675
|
+
component.channels.listChannels,
|
|
676
|
+
{ appName: config.appName },
|
|
677
|
+
);
|
|
678
|
+
|
|
679
|
+
return jsonResponse({ channels }, 200);
|
|
680
|
+
} catch (error: unknown) {
|
|
681
|
+
const errorMessage =
|
|
682
|
+
error instanceof Error ? error.message : "Failed to list channels";
|
|
683
|
+
return jsonResponse({ error: errorMessage }, 500);
|
|
684
|
+
}
|
|
685
|
+
}),
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
// --- POST /agent-bridge/channels/post ---
|
|
689
|
+
// Post a message to a channel (requires instanceToken)
|
|
690
|
+
http.route({
|
|
691
|
+
path: `${prefix}/channels/post`,
|
|
692
|
+
method: "POST",
|
|
693
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
694
|
+
let body: {
|
|
695
|
+
instanceToken?: string;
|
|
696
|
+
channelName?: string;
|
|
697
|
+
payload?: string;
|
|
698
|
+
priority?: number;
|
|
699
|
+
ttlMinutes?: number;
|
|
700
|
+
};
|
|
701
|
+
try {
|
|
702
|
+
body = await request.json();
|
|
703
|
+
} catch {
|
|
704
|
+
return jsonResponse({ error: "Invalid JSON body" }, 400);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
const { instanceToken, channelName, payload, priority, ttlMinutes } =
|
|
708
|
+
body;
|
|
709
|
+
|
|
710
|
+
if (!instanceToken || !channelName || !payload) {
|
|
711
|
+
return jsonResponse(
|
|
712
|
+
{
|
|
713
|
+
error:
|
|
714
|
+
"Missing required fields: instanceToken, channelName, payload",
|
|
715
|
+
},
|
|
716
|
+
400,
|
|
717
|
+
);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
try {
|
|
721
|
+
const result = await ctx.runMutation(
|
|
722
|
+
component.channels.postMessage,
|
|
723
|
+
{
|
|
724
|
+
instanceToken,
|
|
725
|
+
appName: config.appName,
|
|
726
|
+
channelName,
|
|
727
|
+
payload,
|
|
728
|
+
priority,
|
|
729
|
+
ttlMinutes,
|
|
730
|
+
},
|
|
731
|
+
);
|
|
732
|
+
|
|
733
|
+
return jsonResponse(result, 200);
|
|
734
|
+
} catch (error: unknown) {
|
|
735
|
+
const errorMessage =
|
|
736
|
+
error instanceof Error ? error.message : "Failed to post message";
|
|
737
|
+
// Map authentication errors to appropriate status codes
|
|
738
|
+
if (
|
|
739
|
+
errorMessage.includes("Invalid instance token") ||
|
|
740
|
+
errorMessage.includes("expired")
|
|
741
|
+
) {
|
|
742
|
+
return jsonResponse({ error: errorMessage }, 401);
|
|
743
|
+
}
|
|
744
|
+
if (
|
|
745
|
+
errorMessage.includes("revoked") ||
|
|
746
|
+
errorMessage.includes("does not match")
|
|
747
|
+
) {
|
|
748
|
+
return jsonResponse({ error: errorMessage }, 403);
|
|
749
|
+
}
|
|
750
|
+
return jsonResponse({ error: errorMessage }, 500);
|
|
751
|
+
}
|
|
752
|
+
}),
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
// --- POST /agent-bridge/channels/read ---
|
|
756
|
+
// Read messages from a channel (POST because it has body with filters)
|
|
757
|
+
http.route({
|
|
758
|
+
path: `${prefix}/channels/read`,
|
|
759
|
+
method: "POST",
|
|
760
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
761
|
+
let body: {
|
|
762
|
+
instanceToken?: string;
|
|
763
|
+
channelName?: string;
|
|
764
|
+
limit?: number;
|
|
765
|
+
after?: number;
|
|
766
|
+
};
|
|
767
|
+
try {
|
|
768
|
+
body = await request.json();
|
|
769
|
+
} catch {
|
|
770
|
+
return jsonResponse({ error: "Invalid JSON body" }, 400);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
const { instanceToken, channelName, limit, after } = body;
|
|
774
|
+
|
|
775
|
+
if (!instanceToken || !channelName) {
|
|
776
|
+
return jsonResponse(
|
|
777
|
+
{
|
|
778
|
+
error: "Missing required fields: instanceToken, channelName",
|
|
779
|
+
},
|
|
780
|
+
400,
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
try {
|
|
785
|
+
const messages = await ctx.runQuery(
|
|
786
|
+
component.channels.readMessages,
|
|
787
|
+
{
|
|
788
|
+
instanceToken,
|
|
789
|
+
appName: config.appName,
|
|
790
|
+
channelName,
|
|
791
|
+
limit,
|
|
792
|
+
after,
|
|
793
|
+
},
|
|
794
|
+
);
|
|
795
|
+
|
|
796
|
+
return jsonResponse({ messages }, 200);
|
|
797
|
+
} catch (error: unknown) {
|
|
798
|
+
const errorMessage =
|
|
799
|
+
error instanceof Error ? error.message : "Failed to read messages";
|
|
800
|
+
if (
|
|
801
|
+
errorMessage.includes("Invalid instance token") ||
|
|
802
|
+
errorMessage.includes("expired")
|
|
803
|
+
) {
|
|
804
|
+
return jsonResponse({ error: errorMessage }, 401);
|
|
805
|
+
}
|
|
806
|
+
if (
|
|
807
|
+
errorMessage.includes("revoked") ||
|
|
808
|
+
errorMessage.includes("does not match")
|
|
809
|
+
) {
|
|
810
|
+
return jsonResponse({ error: errorMessage }, 403);
|
|
811
|
+
}
|
|
812
|
+
return jsonResponse({ error: errorMessage }, 500);
|
|
813
|
+
}
|
|
814
|
+
}),
|
|
815
|
+
});
|
|
816
|
+
|
|
817
|
+
// --- POST /agent-bridge/channels/mark-read ---
|
|
818
|
+
// Mark a message as read by an agent
|
|
819
|
+
http.route({
|
|
820
|
+
path: `${prefix}/channels/mark-read`,
|
|
821
|
+
method: "POST",
|
|
822
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
823
|
+
let body: {
|
|
824
|
+
instanceToken?: string;
|
|
825
|
+
messageId?: string;
|
|
826
|
+
};
|
|
827
|
+
try {
|
|
828
|
+
body = await request.json();
|
|
829
|
+
} catch {
|
|
830
|
+
return jsonResponse({ error: "Invalid JSON body" }, 400);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
const { instanceToken, messageId } = body;
|
|
834
|
+
|
|
835
|
+
if (!instanceToken || !messageId) {
|
|
836
|
+
return jsonResponse(
|
|
837
|
+
{
|
|
838
|
+
error: "Missing required fields: instanceToken, messageId",
|
|
839
|
+
},
|
|
840
|
+
400,
|
|
841
|
+
);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
try {
|
|
845
|
+
const success = await ctx.runMutation(
|
|
846
|
+
component.channels.markAsRead,
|
|
847
|
+
{
|
|
848
|
+
instanceToken,
|
|
849
|
+
appName: config.appName,
|
|
850
|
+
messageId,
|
|
851
|
+
},
|
|
852
|
+
);
|
|
853
|
+
|
|
854
|
+
return jsonResponse({ success }, 200);
|
|
855
|
+
} catch (error: unknown) {
|
|
856
|
+
const errorMessage =
|
|
857
|
+
error instanceof Error ? error.message : "Failed to mark as read";
|
|
858
|
+
if (
|
|
859
|
+
errorMessage.includes("Invalid instance token") ||
|
|
860
|
+
errorMessage.includes("expired")
|
|
861
|
+
) {
|
|
862
|
+
return jsonResponse({ error: errorMessage }, 401);
|
|
863
|
+
}
|
|
864
|
+
return jsonResponse({ error: errorMessage }, 500);
|
|
865
|
+
}
|
|
866
|
+
}),
|
|
867
|
+
});
|
|
472
868
|
}
|
|
473
869
|
|
|
474
|
-
// ---
|
|
870
|
+
// --- Helpers ---
|
|
475
871
|
|
|
476
872
|
function jsonResponse(data: unknown, status: number): Response {
|
|
477
873
|
return new Response(JSON.stringify(data), {
|
|
@@ -479,3 +875,14 @@ function jsonResponse(data: unknown, status: number): Response {
|
|
|
479
875
|
headers: { "Content-Type": "application/json" },
|
|
480
876
|
});
|
|
481
877
|
}
|
|
878
|
+
|
|
879
|
+
function jsonResponseWithHeaders(
|
|
880
|
+
data: unknown,
|
|
881
|
+
status: number,
|
|
882
|
+
extraHeaders: Record<string, string>,
|
|
883
|
+
): Response {
|
|
884
|
+
return new Response(JSON.stringify(data), {
|
|
885
|
+
status,
|
|
886
|
+
headers: { "Content-Type": "application/json", ...extraHeaders },
|
|
887
|
+
});
|
|
888
|
+
}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import type * as channels from "../channels.js";
|
|
12
|
+
import type * as circuitBreaker from "../circuitBreaker.js";
|
|
11
13
|
import type * as gateway from "../gateway.js";
|
|
12
14
|
import type * as permissions from "../permissions.js";
|
|
13
15
|
import type * as provisioning from "../provisioning.js";
|
|
@@ -21,6 +23,8 @@ import type {
|
|
|
21
23
|
import { anyApi, componentsGeneric } from "convex/server";
|
|
22
24
|
|
|
23
25
|
const fullApi: ApiFromModules<{
|
|
26
|
+
channels: typeof channels;
|
|
27
|
+
circuitBreaker: typeof circuitBreaker;
|
|
24
28
|
gateway: typeof gateway;
|
|
25
29
|
permissions: typeof permissions;
|
|
26
30
|
provisioning: typeof provisioning;
|
|
@@ -23,11 +23,151 @@ import type { FunctionReference } from "convex/server";
|
|
|
23
23
|
*/
|
|
24
24
|
export type ComponentApi<Name extends string | undefined = string | undefined> =
|
|
25
25
|
{
|
|
26
|
+
channels: {
|
|
27
|
+
createChannel: FunctionReference<
|
|
28
|
+
"mutation",
|
|
29
|
+
"internal",
|
|
30
|
+
{ appName: string; channelName: string; description?: string },
|
|
31
|
+
string,
|
|
32
|
+
Name
|
|
33
|
+
>;
|
|
34
|
+
deactivateChannel: FunctionReference<
|
|
35
|
+
"mutation",
|
|
36
|
+
"internal",
|
|
37
|
+
{ appName: string; channelName: string },
|
|
38
|
+
boolean,
|
|
39
|
+
Name
|
|
40
|
+
>;
|
|
41
|
+
getUnreadCount: FunctionReference<
|
|
42
|
+
"query",
|
|
43
|
+
"internal",
|
|
44
|
+
{ appName: string; channelName: string; instanceToken: string },
|
|
45
|
+
number,
|
|
46
|
+
Name
|
|
47
|
+
>;
|
|
48
|
+
listChannels: FunctionReference<
|
|
49
|
+
"query",
|
|
50
|
+
"internal",
|
|
51
|
+
{ appName: string },
|
|
52
|
+
Array<{
|
|
53
|
+
channelName: string;
|
|
54
|
+
createdAt: number;
|
|
55
|
+
description?: string;
|
|
56
|
+
isActive: boolean;
|
|
57
|
+
}>,
|
|
58
|
+
Name
|
|
59
|
+
>;
|
|
60
|
+
markAsRead: FunctionReference<
|
|
61
|
+
"mutation",
|
|
62
|
+
"internal",
|
|
63
|
+
{ appName: string; instanceToken: string; messageId: string },
|
|
64
|
+
boolean,
|
|
65
|
+
Name
|
|
66
|
+
>;
|
|
67
|
+
postMessage: FunctionReference<
|
|
68
|
+
"mutation",
|
|
69
|
+
"internal",
|
|
70
|
+
{
|
|
71
|
+
appName: string;
|
|
72
|
+
channelName: string;
|
|
73
|
+
instanceToken: string;
|
|
74
|
+
payload: string;
|
|
75
|
+
priority?: number;
|
|
76
|
+
ttlMinutes?: number;
|
|
77
|
+
},
|
|
78
|
+
{ messageId: string; success: boolean },
|
|
79
|
+
Name
|
|
80
|
+
>;
|
|
81
|
+
readMessages: FunctionReference<
|
|
82
|
+
"query",
|
|
83
|
+
"internal",
|
|
84
|
+
{
|
|
85
|
+
after?: number;
|
|
86
|
+
appName: string;
|
|
87
|
+
channelName: string;
|
|
88
|
+
instanceToken: string;
|
|
89
|
+
limit?: number;
|
|
90
|
+
},
|
|
91
|
+
Array<{
|
|
92
|
+
expiresAt: number;
|
|
93
|
+
fromAgentId: string;
|
|
94
|
+
messageId: string;
|
|
95
|
+
metadata: { priority: number; ttl: number };
|
|
96
|
+
payload: string;
|
|
97
|
+
readBy: Array<string>;
|
|
98
|
+
sentAt: number;
|
|
99
|
+
}>,
|
|
100
|
+
Name
|
|
101
|
+
>;
|
|
102
|
+
};
|
|
103
|
+
circuitBreaker: {
|
|
104
|
+
checkAndIncrement: FunctionReference<
|
|
105
|
+
"mutation",
|
|
106
|
+
"internal",
|
|
107
|
+
{
|
|
108
|
+
agentId: string;
|
|
109
|
+
appName: string;
|
|
110
|
+
estimatedCost: number;
|
|
111
|
+
limits: { requestsPerHour: number; tokenBudget: number };
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
allowed: boolean;
|
|
115
|
+
currentCount: number;
|
|
116
|
+
currentTokens: number;
|
|
117
|
+
reason?: string;
|
|
118
|
+
},
|
|
119
|
+
Name
|
|
120
|
+
>;
|
|
121
|
+
getStatus: FunctionReference<
|
|
122
|
+
"query",
|
|
123
|
+
"internal",
|
|
124
|
+
{ agentId: string; appName: string },
|
|
125
|
+
{
|
|
126
|
+
agentId: string;
|
|
127
|
+
appName: string;
|
|
128
|
+
blockedAt?: number;
|
|
129
|
+
blockedReason?: string;
|
|
130
|
+
isBlocked: boolean;
|
|
131
|
+
requestCount: number;
|
|
132
|
+
tokenEstimate: number;
|
|
133
|
+
windowHour: string;
|
|
134
|
+
} | null,
|
|
135
|
+
Name
|
|
136
|
+
>;
|
|
137
|
+
listBlocked: FunctionReference<
|
|
138
|
+
"query",
|
|
139
|
+
"internal",
|
|
140
|
+
{},
|
|
141
|
+
Array<{
|
|
142
|
+
agentId: string;
|
|
143
|
+
appName: string;
|
|
144
|
+
blockedAt?: number;
|
|
145
|
+
blockedReason?: string;
|
|
146
|
+
isBlocked: boolean;
|
|
147
|
+
requestCount: number;
|
|
148
|
+
tokenEstimate: number;
|
|
149
|
+
windowHour: string;
|
|
150
|
+
}>,
|
|
151
|
+
Name
|
|
152
|
+
>;
|
|
153
|
+
resetCounter: FunctionReference<
|
|
154
|
+
"mutation",
|
|
155
|
+
"internal",
|
|
156
|
+
{ agentId: string; appName: string },
|
|
157
|
+
boolean,
|
|
158
|
+
Name
|
|
159
|
+
>;
|
|
160
|
+
};
|
|
26
161
|
gateway: {
|
|
27
162
|
authorizeRequest: FunctionReference<
|
|
28
163
|
"mutation",
|
|
29
164
|
"internal",
|
|
30
|
-
{
|
|
165
|
+
{
|
|
166
|
+
appName: string;
|
|
167
|
+
estimatedCost?: number;
|
|
168
|
+
functionName: string;
|
|
169
|
+
instanceToken: string;
|
|
170
|
+
},
|
|
31
171
|
| {
|
|
32
172
|
agentId: string;
|
|
33
173
|
appName: string;
|
|
@@ -41,6 +181,7 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
|
|
|
41
181
|
error: string;
|
|
42
182
|
matchedPattern?: string;
|
|
43
183
|
matchedPermission?: "allow" | "deny" | "rate_limited";
|
|
184
|
+
retryAfterSeconds?: number;
|
|
44
185
|
statusCode: number;
|
|
45
186
|
},
|
|
46
187
|
Name
|