@xopcai/xopc 0.0.197 → 0.0.200
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/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-BwmdJ5pv.js → activity-store-DYVN1hRp.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-C5st7lt5.js → agent-avatar-dicebear-eMarz29u.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DeLW-454.js +68 -0
- package/dist/gateway/static/root/assets/{api-BM1hNzjw.js → api-B8mzbAle.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-yfb68wq9.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-B8SPknFM.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-Bmor22Ny.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-qL07mwnY.js → archive-plugin-DmYRiOP3.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CqSobpdi.js → attachment-load-D66JvcPi.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-Q4e8m11h.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DBRPyLYE.js → binary-plugins-ChIsZArT.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-6wG1LU7t.js → block-editor-Ck-k_d0Z.js} +4 -4
- package/dist/gateway/static/root/assets/browser-settings-page--uVL73Sb.js +8 -0
- package/dist/gateway/static/root/assets/browser-workflow-inputs-_ndaecsf.js +1 -0
- package/dist/gateway/static/root/assets/{browser-workflows-page-BEu3E0et.js → browser-workflows-page-BC5jm1zL.js} +2 -2
- package/dist/gateway/static/root/assets/button-CSEbl4zT.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DXpf3QYN.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-BoOzFotX.js → capability-presets-api-Dy1jZJKs.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-NAjCsrTi.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-_8IiTxRB.js → channel-recipient-api-D-9qiuio.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CiWUo7jW.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B4Rbh3bM.js +1 -0
- package/dist/gateway/static/root/assets/connectors-api-5xiCRVUS.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-DOwlMseU.js +2 -0
- package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +1 -0
- package/dist/gateway/static/root/assets/cron-expression-B3PebXKZ.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-C1Vke7Xn.js +1 -0
- package/dist/gateway/static/root/assets/dependency-picker-FrQ0tsBC.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-CsLR4pWB.js → desktop-pet-CPBAzNJi.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-D6s3glDP.js +1 -0
- package/dist/gateway/static/root/assets/directory-picker-path-field-CbNQ7QQS.js +1 -0
- package/dist/gateway/static/root/assets/dist-BPoKqzeH.js +1 -0
- package/dist/gateway/static/root/assets/dist-DY4Af0fY.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-CD73euAM.js → extension-debug-page-dTK14hUv.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DAKjpNwd.js → extension-page-Cpdj1Kip.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-iNHUZGd5.js +1 -0
- package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +1 -0
- package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-SvMvWqMM.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-swr-jB0hAhWO.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-BilR3dGZ.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry--2njcDpC.js → gateway-startup-retry-C-fRlHCL.js} +1 -1
- package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-zK40dcQ5.js +1 -0
- package/dist/gateway/static/root/assets/home-page-NyXy5MLr.js +3 -0
- package/dist/gateway/static/root/assets/index-Bp8I_eX4.css +1 -0
- package/dist/gateway/static/root/assets/index-CCK8zdlS.js +152 -0
- package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-HMhxgOuD.js → keyboard-shortcuts-settings-nKzsroud.js} +1 -1
- package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-Ds3sPXTh.js +2 -0
- package/dist/gateway/static/root/assets/local-apps-page-DV1s_FYh.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-Bjvw7jtg.js → locale-store-xULEcFVs.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Biz4eA02.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-D7KjYgHu.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-split-DvVBewS4.js → markdown-split-CTYbpkrd.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-YVj7NVzD.js → media-plugins-BXYnaiZ6.js} +1 -1
- package/dist/gateway/static/root/assets/messages-3qRsLZuX.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-BDzuL2I9.js → notes-page-CWWVXpw5.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-DnBkQihH.js +4 -0
- package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +1 -0
- package/dist/gateway/static/root/assets/popover-select-BzdnTy3h.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-pimQAkeI.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-Bwx_CQht.js → product-open-page-BoYSS_YR.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-ZO7t1UkB.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-By-vq41g.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-C0C_Y9d0.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Fe05Nus6.js → runtime-tools-settings-panel-DT8flaX1.js} +4 -4
- package/dist/gateway/static/root/assets/schema-form-DabEP-UI.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-BNlVwUzV.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CxYBQDaM.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-DCsfZAtC.js +1 -0
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BRE_-7Da.js → settings-loading-skeleton-Dac6Yd0T.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C1zxCpqB.js → settings-page-BDoYoEar.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-layout-BRQNel6r.js +1 -0
- package/dist/gateway/static/root/assets/settings-shell-dialog-layer-BU3UuiJr.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-DWijJ1rw.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-ie9I2_7h.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-DU9VrJLf.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-C5RaIvoE.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-N0YhaR5S.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-CYwFWTso.js → skills-page.utils-C639DLXr.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-CpshpQtC.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-DsTocYkK.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-DtxpMC5S.js → theme-store-CHQRiuCF.js} +1 -1
- package/dist/gateway/static/root/assets/tool-activity-R8V9l6nk.js +1 -0
- package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +1 -0
- package/dist/gateway/static/root/assets/use-autosave-ms6rDy59.js +1 -0
- package/dist/gateway/static/root/assets/user-context-page-BUxIemwy.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-CObrQWh2.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-overlay-BBxrnEFt.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-DN3l-HW3.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DqIb1oBB.js → workflow-run-setup-panel-BxXhe3IV.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BCHkjd1i.js +5 -0
- package/dist/gateway/static/root/assets/working-directory-picker-modal-D-IgcHPp.js +1 -0
- package/dist/gateway/static/root/index.html +23 -8
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/tasks.js +103 -9
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -0
- package/dist/src/agent/context/execution-scope.js +3 -1
- package/dist/src/agent/service.js +1 -0
- package/dist/src/agent/service.types.d.ts +1 -0
- package/dist/src/agent/tasks/task-judge-service.d.ts +1 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -2
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +2 -1
- package/dist/src/agent/tools/xopc-use-tool.d.ts +1 -0
- package/dist/src/agent/tools/xopc-use-tool.js +69 -9
- package/dist/src/automations/domain/validation.d.ts +40 -12
- package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/config/rules.js +2 -2
- package/dist/src/gateway/hono/app.d.ts +2 -0
- package/dist/src/gateway/hono/app.js +10 -3
- package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
- package/dist/src/gateway/hono/routes/agent-stream.js +2 -74
- package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -1
- package/dist/src/gateway/hono/routes/config.js +9 -0
- package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
- package/dist/src/gateway/hono/routes/projects.js +55 -0
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +62 -0
- package/dist/src/gateway/hono/routes/session-input-handler.js +82 -0
- package/dist/src/gateway/hono/routes/tasks.js +272 -20
- package/dist/src/gateway/host.d.ts +9 -1
- package/dist/src/gateway/host.js +22 -5
- package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
- package/dist/src/gateway/rate-limit/buckets.js +12 -0
- package/dist/src/gateway/runtime-config.js +6 -5
- package/dist/src/gateway/security/audit.js +0 -7
- package/dist/src/gateway/server.js +4 -1
- package/dist/src/gateway/service/task-conversation-query-service.d.ts +58 -0
- package/dist/src/gateway/service/task-conversation-query-service.js +84 -0
- package/dist/src/gateway/service.d.ts +11 -0
- package/dist/src/gateway/service.js +75 -38
- package/dist/src/proactive/actions/service.d.ts +2 -0
- package/dist/src/proactive/actions/service.js +80 -0
- package/dist/src/proactive/execution/insight.js +20 -0
- package/dist/src/proactive/execution/repository.js +8 -2
- package/dist/src/proactive/execution/types.d.ts +14 -0
- package/dist/src/proactive/inbox/repository.js +59 -9
- package/dist/src/proactive/inbox/service.d.ts +2 -2
- package/dist/src/proactive/inbox/service.js +7 -2
- package/dist/src/proactive/inbox/types.d.ts +14 -0
- package/dist/src/proactive/inbox/worker.js +2 -0
- package/dist/src/proactive/scenarios/prompt-composer.js +2 -2
- package/dist/src/projects/project-agent.js +1 -1
- package/dist/src/storage/sqlite/migrations/118_task_board_rank.sql +6 -0
- package/dist/src/storage/sqlite/migrations/119_proactive_disposition.sql +13 -0
- package/dist/src/storage/sqlite/migrations/120_task_conversation.sql +112 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/execution-context.js +8 -4
- package/dist/src/tasks/home-query-service.d.ts +5 -0
- package/dist/src/tasks/home-query-service.js +7 -2
- package/dist/src/tasks/index.d.ts +3 -0
- package/dist/src/tasks/index.js +6 -3
- package/dist/src/tasks/project-monitoring-service.d.ts +9 -0
- package/dist/src/tasks/project-monitoring-service.js +41 -3
- package/dist/src/tasks/project-operating-view-service.d.ts +1 -2
- package/dist/src/tasks/project-operating-view-service.js +26 -23
- package/dist/src/tasks/task-application-service.js +107 -21
- package/dist/src/tasks/task-change-events.d.ts +13 -0
- package/dist/src/tasks/task-change-events.js +29 -0
- package/dist/src/tasks/task-context-assembler.js +9 -4
- package/dist/src/tasks/task-context-repository.d.ts +0 -6
- package/dist/src/tasks/task-context-repository.js +0 -4
- package/dist/src/tasks/task-conversation-repository.d.ts +71 -0
- package/dist/src/tasks/task-conversation-repository.js +194 -0
- package/dist/src/tasks/task-handoff-service.d.ts +31 -0
- package/dist/src/tasks/task-handoff-service.js +143 -0
- package/dist/src/tasks/task-read-model-projector.js +3 -6
- package/dist/src/tasks/task-repository.d.ts +7 -2
- package/dist/src/tasks/task-repository.js +31 -15
- package/dist/src/tasks/task-run-coordinator.js +3 -1
- package/dist/src/tunnel/enable-lan-pairing.js +15 -26
- package/dist/src/tunnel/pair-context.js +1 -1
- package/dist/src/tunnel/pair-url.js +1 -1
- package/dist/src/tunnel/tunnel-qr.d.ts +0 -7
- package/dist/src/tunnel/tunnel-qr.js +2 -19
- package/dist/src/workflows/service/workflow-run-service.js +4 -2
- package/package.json +5 -3
- package/dist/gateway/static/root/assets/agents-Baxfj44y.js +0 -68
- package/dist/gateway/static/root/assets/app-management-settings-panel-S8LhoD6G.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-D8Cd5vDP.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-0uCxKyE5.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-XyDat125.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CrYNMR4w.js +0 -8
- package/dist/gateway/static/root/assets/browser-workflow-inputs-Abil4puY.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CvMcDhGf.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CHJDY-Ih.js +0 -3
- package/dist/gateway/static/root/assets/channels-settings-Ds9BJbcY.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DPaJSYX_.js +0 -1
- package/dist/gateway/static/root/assets/connectors-api-CgWjgPSI.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-NUs-Zf7F.js +0 -2
- package/dist/gateway/static/root/assets/cron-expression-ZdDBAoqA.js +0 -2
- package/dist/gateway/static/root/assets/dependency-picker-BGeB1jpn.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CCjT1bdo.js +0 -1
- package/dist/gateway/static/root/assets/directory-picker-path-field-C-Te1QN3.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BLSNdlgd.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-CQrf0k3D.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CvgH8IJI.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-SPpnqbjl.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BFoD6047.js +0 -3
- package/dist/gateway/static/root/assets/index-84ys9u-K.js +0 -152
- package/dist/gateway/static/root/assets/index-D-srnucP.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-D5uL2_Fd.js +0 -2
- package/dist/gateway/static/root/assets/local-apps-page-DIWkFa3g.js +0 -1
- package/dist/gateway/static/root/assets/logs-page--6v8qq6y.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-DtEuS-kR.js +0 -1
- package/dist/gateway/static/root/assets/messages-DQ5X6cXp.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-IdjuNXvH.js +0 -4
- package/dist/gateway/static/root/assets/page-tabs-7bSEWfSX.js +0 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-tgLbHgcV.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-DnJXSuM4.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DckZKlBI.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CfbUHBUH.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-CFfyC4CB.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BCfCh4My.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-Cbi4FvzO.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-gEnEYT_3.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-layout-CRpXF_05.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BcHdpmFf.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-DU8L68A5.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-kjTqH9yY.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-QAGpwzIM.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-lE1-YRdK.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-CVDsiPKn.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-DsM13-cy.js +0 -1
- package/dist/gateway/static/root/assets/typed-models-lib-DelyYgoc.js +0 -1
- package/dist/gateway/static/root/assets/use-autosave-C50Mq5yQ.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-D-VEOt2A.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DYfgTe3Y.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-overlay-DPbujsp3.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-D77opady.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-B9-PLmlX.js +0 -5
- package/dist/src/gateway/ensure-network-cors.d.ts +0 -3
- package/dist/src/gateway/ensure-network-cors.js +0 -23
|
@@ -10,7 +10,7 @@ import { buildGatewayConsoleCspHeader } from "../security/csp.js";
|
|
|
10
10
|
import { checkBrowserOrigin } from "../security/origin-check.js";
|
|
11
11
|
import { auth } from "./middleware/auth.js";
|
|
12
12
|
import { operatorScopes } from "./middleware/scopes.js";
|
|
13
|
-
import { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
|
|
13
|
+
import { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createTaskRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
|
|
14
14
|
import { logContextMiddleware } from "./middleware/log-context.js";
|
|
15
15
|
import { logger } from "./middleware/logger.js";
|
|
16
16
|
import { routeErrorMiddleware } from "./middleware/route-errors.js";
|
|
@@ -42,10 +42,11 @@ function createHonoApp(config) {
|
|
|
42
42
|
const { service } = config;
|
|
43
43
|
const app = new Hono();
|
|
44
44
|
const gatewayPort = resolveGatewayServiceListenPort(service);
|
|
45
|
+
const gatewayBindHost = config.listenHost ?? resolveGatewayEffectiveHost(service.currentConfig);
|
|
45
46
|
const resolveBrowserOrigins = () => resolveAllowedBrowserOrigins({
|
|
46
47
|
configuredOrigins: service.currentConfig.gateway.corsOrigins,
|
|
47
48
|
port: gatewayPort,
|
|
48
|
-
bindHost:
|
|
49
|
+
bindHost: gatewayBindHost,
|
|
49
50
|
tunnelPublicUrl: loadTunnelState()?.publicUrl,
|
|
50
51
|
reverseProxyPublicUrl: resolveReverseProxyPublicUrl(service.currentConfig)
|
|
51
52
|
});
|
|
@@ -153,6 +154,7 @@ function createHonoApp(config) {
|
|
|
153
154
|
if (/^\/api\/notes\/[^/]+\/media$/.test(path)) return true;
|
|
154
155
|
return path === "/api/notes" && contentType?.includes("multipart/form-data") === true;
|
|
155
156
|
};
|
|
157
|
+
const isProjectFileUploadRequest = (path, method, contentType) => method === "POST" && /^\/api\/projects\/[^/]+\/files\/upload$/.test(path) && contentType?.includes("multipart/form-data") === true;
|
|
156
158
|
const discussionUploadBodyMax = (path, method, contentType) => {
|
|
157
159
|
if (method !== "PUT" || contentType?.includes("multipart/form-data") !== true) return void 0;
|
|
158
160
|
if (/^\/api\/discussions\/[^/]+\/recording$/.test(path)) return NOTE_MEDIA_BODY_MAX;
|
|
@@ -173,7 +175,7 @@ function createHonoApp(config) {
|
|
|
173
175
|
}));
|
|
174
176
|
app.use("/api/*", async (c, next) => {
|
|
175
177
|
const contentType = c.req.header("content-type");
|
|
176
|
-
const maxSize = c.req.method === "POST" && c.req.path === "/api/tasks" || c.req.method === "POST" && /^\/api\/sessions\/[^/]+\/inputs$/.test(c.req.path) || c.req.method === "PATCH" && /^\/api\/sessions\/[^/]+\/inputs\/[^/]+$/.test(c.req.path) ? SESSION_INPUT_BODY_MAX : c.req.path === "/api/skills/upload" ? SKILL_UPLOAD_BODY_MAX : c.req.path === "/api/voice/transcribe" || c.req.path === "/api/voice/transcriptions" ? VOICE_TRANSCRIBE_BODY_MAX : isNoteMediaUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : discussionUploadBodyMax(c.req.path, c.req.method, contentType) ?? DEFAULT_API_BODY_MAX;
|
|
178
|
+
const maxSize = c.req.method === "POST" && c.req.path === "/api/tasks" || c.req.method === "POST" && /^\/api\/sessions\/[^/]+\/inputs$/.test(c.req.path) || c.req.method === "POST" && /^\/api\/tasks\/[^/]+\/inputs$/.test(c.req.path) || c.req.method === "PATCH" && /^\/api\/sessions\/[^/]+\/inputs\/[^/]+$/.test(c.req.path) ? SESSION_INPUT_BODY_MAX : c.req.path === "/api/skills/upload" ? SKILL_UPLOAD_BODY_MAX : c.req.path === "/api/voice/transcribe" || c.req.path === "/api/voice/transcriptions" ? VOICE_TRANSCRIBE_BODY_MAX : isNoteMediaUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : isProjectFileUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : discussionUploadBodyMax(c.req.path, c.req.method, contentType) ?? DEFAULT_API_BODY_MAX;
|
|
177
179
|
const maxSizeMb = Math.ceil(maxSize / (1024 * 1024));
|
|
178
180
|
return bodyLimit({
|
|
179
181
|
maxSize,
|
|
@@ -211,6 +213,10 @@ function createHonoApp(config) {
|
|
|
211
213
|
trustedProxies: service.currentConfig.gateway?.trustedProxies,
|
|
212
214
|
allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
|
|
213
215
|
}) });
|
|
216
|
+
const taskRateLimitMiddleware = createTaskRateLimitMiddleware({ getTrustedProxyContext: () => ({
|
|
217
|
+
trustedProxies: service.currentConfig.gateway?.trustedProxies,
|
|
218
|
+
allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
|
|
219
|
+
}) });
|
|
214
220
|
const channelRateLimitMiddleware = createChannelRateLimitMiddleware({ getTrustedProxyContext: () => ({
|
|
215
221
|
trustedProxies: service.currentConfig.gateway?.trustedProxies,
|
|
216
222
|
allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
|
|
@@ -219,6 +225,7 @@ function createHonoApp(config) {
|
|
|
219
225
|
service,
|
|
220
226
|
strictRateLimitMiddleware,
|
|
221
227
|
chatRateLimitMiddleware,
|
|
228
|
+
taskRateLimitMiddleware,
|
|
222
229
|
xopcCloudPollRateLimitMiddleware: createXopcCloudPollRateLimitMiddleware({ getTrustedProxyContext: () => ({
|
|
223
230
|
trustedProxies: service.currentConfig.gateway?.trustedProxies,
|
|
224
231
|
allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
|
|
@@ -16,6 +16,10 @@ export declare function createChatRateLimitMiddleware(deps: StrictRateLimitDeps)
|
|
|
16
16
|
error: string;
|
|
17
17
|
code: string;
|
|
18
18
|
}, 429, "json">>;
|
|
19
|
+
export declare function createTaskRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
|
|
20
|
+
error: string;
|
|
21
|
+
code: string;
|
|
22
|
+
}, 429, "json">>;
|
|
19
23
|
export declare function createXopcCloudPollRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
|
|
20
24
|
error: string;
|
|
21
25
|
code: string;
|
|
@@ -70,6 +70,13 @@ function createChatRateLimitMiddleware(deps) {
|
|
|
70
70
|
reason: "chat_rate_limit_exceeded"
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
|
+
function createTaskRateLimitMiddleware(deps) {
|
|
74
|
+
return createClientRateLimitMiddleware(deps, {
|
|
75
|
+
limiter: () => buckets.taskApi(),
|
|
76
|
+
exceededMessage: "Task API rate limit exceeded",
|
|
77
|
+
reason: "task_rate_limit_exceeded"
|
|
78
|
+
});
|
|
79
|
+
}
|
|
73
80
|
function createXopcCloudPollRateLimitMiddleware(deps) {
|
|
74
81
|
return createClientRateLimitMiddleware(deps, {
|
|
75
82
|
limiter: () => buckets.xopcCloudPoll(),
|
|
@@ -85,4 +92,4 @@ function createChannelRateLimitMiddleware(deps) {
|
|
|
85
92
|
});
|
|
86
93
|
}
|
|
87
94
|
//#endregion
|
|
88
|
-
export { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware };
|
|
95
|
+
export { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createTaskRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { endpointTurnClaimSchema } from "../../../../packages/endpoint-tools-protocol/src/index.js";
|
|
2
1
|
import { validateWebchatAttachments, validateWebchatContent } from "../../chat-limits.js";
|
|
2
|
+
import { submitSessionInput } from "./session-input-handler.js";
|
|
3
3
|
//#region src/gateway/hono/routes/agent-stream.ts
|
|
4
4
|
function registerAgentStreamRoutes(authenticated, deps) {
|
|
5
5
|
const { service, chatRateLimitMiddleware } = deps;
|
|
@@ -34,79 +34,7 @@ function registerAgentStreamRoutes(authenticated, deps) {
|
|
|
34
34
|
});
|
|
35
35
|
});
|
|
36
36
|
authenticated.post("/api/sessions/:sessionKey/inputs", chatRateLimitMiddleware, async (c) => {
|
|
37
|
-
|
|
38
|
-
const body = await c.req.json().catch(() => null);
|
|
39
|
-
if (!body || !sessionKey) return c.json({
|
|
40
|
-
ok: false,
|
|
41
|
-
error: {
|
|
42
|
-
code: "BAD_REQUEST",
|
|
43
|
-
message: "Invalid request"
|
|
44
|
-
}
|
|
45
|
-
}, 400);
|
|
46
|
-
const attachments = Array.isArray(body.attachments) ? body.attachments : void 0;
|
|
47
|
-
const content = typeof body.content === "string" ? body.content : "";
|
|
48
|
-
const contentError = validateWebchatContent(content);
|
|
49
|
-
if (contentError) return c.json({
|
|
50
|
-
ok: false,
|
|
51
|
-
error: {
|
|
52
|
-
code: "BAD_REQUEST",
|
|
53
|
-
message: contentError
|
|
54
|
-
}
|
|
55
|
-
}, 400);
|
|
56
|
-
const attachmentError = validateWebchatAttachments(attachments);
|
|
57
|
-
if (attachmentError) return c.json({
|
|
58
|
-
ok: false,
|
|
59
|
-
error: {
|
|
60
|
-
code: "BAD_REQUEST",
|
|
61
|
-
message: attachmentError
|
|
62
|
-
}
|
|
63
|
-
}, 400);
|
|
64
|
-
const delivery = body.delivery === "next" || body.delivery === "steer" ? body.delivery : null;
|
|
65
|
-
if (!delivery) return c.json({
|
|
66
|
-
ok: false,
|
|
67
|
-
error: {
|
|
68
|
-
code: "BAD_REQUEST",
|
|
69
|
-
message: "Missing delivery"
|
|
70
|
-
}
|
|
71
|
-
}, 400);
|
|
72
|
-
const origin = endpointTurnClaimSchema.safeParse(body.origin);
|
|
73
|
-
if (!origin.success) return c.json({
|
|
74
|
-
ok: false,
|
|
75
|
-
error: {
|
|
76
|
-
code: "BAD_REQUEST",
|
|
77
|
-
message: "Invalid endpoint origin"
|
|
78
|
-
}
|
|
79
|
-
}, 400);
|
|
80
|
-
if (!service.endpointTools.registry.verifyTurnClaim(origin.data.endpointId, origin.data.token)) return c.json({
|
|
81
|
-
ok: false,
|
|
82
|
-
error: {
|
|
83
|
-
code: "INVALID_ENDPOINT",
|
|
84
|
-
message: "Endpoint connection is not active"
|
|
85
|
-
}
|
|
86
|
-
}, 401);
|
|
87
|
-
const result = await service.submitSessionInput({
|
|
88
|
-
sessionKey,
|
|
89
|
-
clientMessageId: typeof body.clientMessageId === "string" ? body.clientMessageId : "",
|
|
90
|
-
delivery,
|
|
91
|
-
content,
|
|
92
|
-
attachments,
|
|
93
|
-
thinking: typeof body.thinking === "string" ? body.thinking : void 0,
|
|
94
|
-
origin: {
|
|
95
|
-
type: "endpoint",
|
|
96
|
-
endpointId: origin.data.endpointId
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
if (result.ok === false) return c.json({
|
|
100
|
-
ok: false,
|
|
101
|
-
error: {
|
|
102
|
-
code: result.code,
|
|
103
|
-
message: "Input was not accepted"
|
|
104
|
-
}
|
|
105
|
-
}, result.code === "QUEUE_FULL" ? 409 : 400);
|
|
106
|
-
return c.json({
|
|
107
|
-
ok: true,
|
|
108
|
-
payload: result
|
|
109
|
-
}, 202);
|
|
37
|
+
return submitSessionInput(c, deps, (c.req.param("sessionKey") ?? "").trim());
|
|
110
38
|
});
|
|
111
39
|
authenticated.patch("/api/sessions/:sessionKey/inputs/:inputId", chatRateLimitMiddleware, async (c) => {
|
|
112
40
|
const sessionKey = (c.req.param("sessionKey") ?? "").trim();
|
|
@@ -176,12 +176,13 @@ async function applyMiscPatch(config, body) {
|
|
|
176
176
|
function validateGatewayAfterPatch(config, body) {
|
|
177
177
|
if (body.gateway === void 0) return PATCH_OK;
|
|
178
178
|
try {
|
|
179
|
+
const port = config.gateway?.port ?? 18790;
|
|
179
180
|
const auth = resolveGatewayAuth({ authConfig: config.gateway?.auth });
|
|
180
181
|
assertGatewayAuthConfigured(auth);
|
|
181
182
|
assertGatewayRuntimeConfig({
|
|
182
183
|
cfg: config,
|
|
183
184
|
auth,
|
|
184
|
-
port
|
|
185
|
+
port
|
|
185
186
|
});
|
|
186
187
|
} catch (err) {
|
|
187
188
|
return patchError(err instanceof Error ? err.message : String(err));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { enumerateLanGatewayCandidates } from "../../host.js";
|
|
1
2
|
import { buildSafeWebConfigPayload } from "../lib/config-payload.js";
|
|
2
3
|
import { applyAgentsPatch } from "./config-patch/agents.js";
|
|
3
4
|
import { applyChannelsPatch } from "./config-patch/channels.js";
|
|
@@ -39,6 +40,14 @@ function registerConfigRoutes(authenticated, deps) {
|
|
|
39
40
|
payload: { config: safeConfig }
|
|
40
41
|
});
|
|
41
42
|
});
|
|
43
|
+
authenticated.get("/api/gateway/cors-origin-candidates", (c) => {
|
|
44
|
+
const requestedPort = Number(c.req.query("port"));
|
|
45
|
+
const port = Number.isInteger(requestedPort) && requestedPort >= 1 && requestedPort <= 65535 ? requestedPort : service.currentConfig.gateway?.port ?? 18790;
|
|
46
|
+
return c.json({
|
|
47
|
+
ok: true,
|
|
48
|
+
payload: { candidates: enumerateLanGatewayCandidates(port) }
|
|
49
|
+
});
|
|
50
|
+
});
|
|
42
51
|
authenticated.patch("/api/config", strictRateLimitMiddleware, async (c) => {
|
|
43
52
|
const body = await c.req.json();
|
|
44
53
|
const config = service.currentConfig;
|
|
@@ -4,6 +4,7 @@ export interface AuthenticatedRouteDeps {
|
|
|
4
4
|
service: GatewayService;
|
|
5
5
|
strictRateLimitMiddleware: MiddlewareHandler;
|
|
6
6
|
chatRateLimitMiddleware: MiddlewareHandler;
|
|
7
|
+
taskRateLimitMiddleware?: MiddlewareHandler;
|
|
7
8
|
xopcCloudPollRateLimitMiddleware: MiddlewareHandler;
|
|
8
9
|
channelRateLimitMiddleware?: MiddlewareHandler;
|
|
9
10
|
}
|
|
@@ -1128,6 +1128,61 @@ function registerProjectsRoutes(authenticated, deps) {
|
|
|
1128
1128
|
}, 500);
|
|
1129
1129
|
}
|
|
1130
1130
|
});
|
|
1131
|
+
authenticated.post("/api/projects/:id/files/upload", async (c) => {
|
|
1132
|
+
let body;
|
|
1133
|
+
try {
|
|
1134
|
+
body = await c.req.parseBody();
|
|
1135
|
+
} catch {
|
|
1136
|
+
return c.json({
|
|
1137
|
+
ok: false,
|
|
1138
|
+
error: { message: "Invalid multipart body" }
|
|
1139
|
+
}, 400);
|
|
1140
|
+
}
|
|
1141
|
+
const file = body.file;
|
|
1142
|
+
if (!(file instanceof File)) return c.json({
|
|
1143
|
+
ok: false,
|
|
1144
|
+
error: { message: "Missing file" }
|
|
1145
|
+
}, 400);
|
|
1146
|
+
const requestedPath = typeof body.path === "string" ? body.path.trim() : "";
|
|
1147
|
+
if (!requestedPath) return c.json({
|
|
1148
|
+
ok: false,
|
|
1149
|
+
error: { message: "Missing path" }
|
|
1150
|
+
}, 400);
|
|
1151
|
+
const resolved = await resolveProjectWorkspaceWritePath(service, c.req.param("id"), requestedPath);
|
|
1152
|
+
if (resolved.ok === false) return c.json({
|
|
1153
|
+
ok: false,
|
|
1154
|
+
error: { message: resolved.error }
|
|
1155
|
+
}, resolved.status);
|
|
1156
|
+
if (resolved.existingStat) return c.json({
|
|
1157
|
+
ok: false,
|
|
1158
|
+
error: { message: "File already exists" }
|
|
1159
|
+
}, 409);
|
|
1160
|
+
try {
|
|
1161
|
+
await writeFile(resolved.absolutePath, Buffer.from(await file.arrayBuffer()), { flag: "wx" });
|
|
1162
|
+
const entryStat = await stat(resolved.absolutePath);
|
|
1163
|
+
return c.json({
|
|
1164
|
+
ok: true,
|
|
1165
|
+
entry: {
|
|
1166
|
+
name: path$1.basename(resolved.relativePath),
|
|
1167
|
+
path: resolved.relativePath,
|
|
1168
|
+
absolutePath: resolved.absolutePath,
|
|
1169
|
+
type: "file",
|
|
1170
|
+
size: entryStat.size,
|
|
1171
|
+
updatedAt: entryStat.mtime.toISOString()
|
|
1172
|
+
}
|
|
1173
|
+
}, 201);
|
|
1174
|
+
} catch (err) {
|
|
1175
|
+
log.error({
|
|
1176
|
+
err,
|
|
1177
|
+
projectId: resolved.projectId,
|
|
1178
|
+
path: resolved.absolutePath
|
|
1179
|
+
}, "project file upload failed");
|
|
1180
|
+
return c.json({
|
|
1181
|
+
ok: false,
|
|
1182
|
+
error: { message: "Upload failed" }
|
|
1183
|
+
}, 500);
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1131
1186
|
authenticated.post("/api/projects/:id/sessions/:sessionKey", async (c) => {
|
|
1132
1187
|
try {
|
|
1133
1188
|
service.projects.attachSession(c.req.param("sessionKey"), c.req.param("id"));
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { AuthenticatedRouteDeps } from './deps.js';
|
|
3
|
+
export declare function submitSessionInput(c: Context, deps: AuthenticatedRouteDeps, sessionKey: string): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
+
ok: false;
|
|
5
|
+
error: {
|
|
6
|
+
code: string;
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
10
|
+
ok: false;
|
|
11
|
+
error: {
|
|
12
|
+
code: string;
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
}, 401, "json">) | (Response & import("hono").TypedResponse<{
|
|
16
|
+
ok: false;
|
|
17
|
+
error: {
|
|
18
|
+
code: "BAD_REQUEST" | "QUEUE_FULL";
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
}, 400 | 409, "json">) | (Response & import("hono").TypedResponse<{
|
|
22
|
+
ok: true;
|
|
23
|
+
payload: {
|
|
24
|
+
sessionKey: string;
|
|
25
|
+
ok: true;
|
|
26
|
+
effectiveDelivery: import("../../../storage/sqlite/session-input-repository.js").SessionInputDelivery;
|
|
27
|
+
state: {
|
|
28
|
+
sessionKey: string;
|
|
29
|
+
revision: number;
|
|
30
|
+
activeRunId?: string;
|
|
31
|
+
activeInputId?: string;
|
|
32
|
+
inputs: {
|
|
33
|
+
id: string;
|
|
34
|
+
sessionKey: string;
|
|
35
|
+
clientMessageId: string;
|
|
36
|
+
requestedDelivery: import("../../../storage/sqlite/session-input-repository.js").SessionInputDelivery;
|
|
37
|
+
effectiveDelivery: import("../../../storage/sqlite/session-input-repository.js").SessionInputDelivery;
|
|
38
|
+
status: import("../../../storage/sqlite/session-input-repository.js").SessionInputStatus;
|
|
39
|
+
content: string;
|
|
40
|
+
attachments?: import("hono/dist/types/utils/types.js").JSONValue[];
|
|
41
|
+
thinking?: string;
|
|
42
|
+
origin: {
|
|
43
|
+
type: "endpoint";
|
|
44
|
+
endpointId: string;
|
|
45
|
+
} | {
|
|
46
|
+
type: "channel";
|
|
47
|
+
channel: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: "system";
|
|
50
|
+
source: "cli" | "workflow" | "automation" | "heartbeat" | "internal";
|
|
51
|
+
};
|
|
52
|
+
position: number;
|
|
53
|
+
targetRunId?: string;
|
|
54
|
+
runId?: string;
|
|
55
|
+
version: number;
|
|
56
|
+
error?: string;
|
|
57
|
+
createdAtMs: number;
|
|
58
|
+
updatedAtMs: number;
|
|
59
|
+
}[];
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
}, 202, "json">)>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { endpointTurnClaimSchema } from "../../../../packages/endpoint-tools-protocol/src/index.js";
|
|
2
|
+
import { validateWebchatAttachments, validateWebchatContent } from "../../chat-limits.js";
|
|
3
|
+
//#region src/gateway/hono/routes/session-input-handler.ts
|
|
4
|
+
async function submitSessionInput(c, deps, sessionKey) {
|
|
5
|
+
const body = await c.req.json().catch(() => null);
|
|
6
|
+
if (!body || !sessionKey) return c.json({
|
|
7
|
+
ok: false,
|
|
8
|
+
error: {
|
|
9
|
+
code: "BAD_REQUEST",
|
|
10
|
+
message: "Invalid request"
|
|
11
|
+
}
|
|
12
|
+
}, 400);
|
|
13
|
+
const attachments = Array.isArray(body.attachments) ? body.attachments : void 0;
|
|
14
|
+
const content = typeof body.content === "string" ? body.content : "";
|
|
15
|
+
const contentError = validateWebchatContent(content);
|
|
16
|
+
if (contentError) return c.json({
|
|
17
|
+
ok: false,
|
|
18
|
+
error: {
|
|
19
|
+
code: "BAD_REQUEST",
|
|
20
|
+
message: contentError
|
|
21
|
+
}
|
|
22
|
+
}, 400);
|
|
23
|
+
const attachmentError = validateWebchatAttachments(attachments);
|
|
24
|
+
if (attachmentError) return c.json({
|
|
25
|
+
ok: false,
|
|
26
|
+
error: {
|
|
27
|
+
code: "BAD_REQUEST",
|
|
28
|
+
message: attachmentError
|
|
29
|
+
}
|
|
30
|
+
}, 400);
|
|
31
|
+
const delivery = body.delivery === "next" || body.delivery === "steer" ? body.delivery : null;
|
|
32
|
+
if (!delivery) return c.json({
|
|
33
|
+
ok: false,
|
|
34
|
+
error: {
|
|
35
|
+
code: "BAD_REQUEST",
|
|
36
|
+
message: "Missing delivery"
|
|
37
|
+
}
|
|
38
|
+
}, 400);
|
|
39
|
+
const origin = endpointTurnClaimSchema.safeParse(body.origin);
|
|
40
|
+
if (!origin.success) return c.json({
|
|
41
|
+
ok: false,
|
|
42
|
+
error: {
|
|
43
|
+
code: "BAD_REQUEST",
|
|
44
|
+
message: "Invalid endpoint origin"
|
|
45
|
+
}
|
|
46
|
+
}, 400);
|
|
47
|
+
if (!deps.service.endpointTools.registry.verifyTurnClaim(origin.data.endpointId, origin.data.token)) return c.json({
|
|
48
|
+
ok: false,
|
|
49
|
+
error: {
|
|
50
|
+
code: "INVALID_ENDPOINT",
|
|
51
|
+
message: "Endpoint connection is not active"
|
|
52
|
+
}
|
|
53
|
+
}, 401);
|
|
54
|
+
const result = await deps.service.submitSessionInput({
|
|
55
|
+
sessionKey,
|
|
56
|
+
clientMessageId: typeof body.clientMessageId === "string" ? body.clientMessageId : "",
|
|
57
|
+
delivery,
|
|
58
|
+
content,
|
|
59
|
+
attachments,
|
|
60
|
+
thinking: typeof body.thinking === "string" ? body.thinking : void 0,
|
|
61
|
+
origin: {
|
|
62
|
+
type: "endpoint",
|
|
63
|
+
endpointId: origin.data.endpointId
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (result.ok === false) return c.json({
|
|
67
|
+
ok: false,
|
|
68
|
+
error: {
|
|
69
|
+
code: result.code,
|
|
70
|
+
message: "Input was not accepted"
|
|
71
|
+
}
|
|
72
|
+
}, result.code === "QUEUE_FULL" ? 409 : 400);
|
|
73
|
+
return c.json({
|
|
74
|
+
ok: true,
|
|
75
|
+
payload: {
|
|
76
|
+
...result,
|
|
77
|
+
sessionKey
|
|
78
|
+
}
|
|
79
|
+
}, 202);
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
export { submitSessionInput };
|