managed-deepagents 0.6.2-dev.4 → 0.6.2-dev.41
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/README.md +18 -3
- package/dist/agent-auth.d.ts +141 -0
- package/dist/agent-auth.d.ts.map +1 -0
- package/dist/agent-auth.js +426 -0
- package/dist/agent-auth.js.map +1 -0
- package/dist/channels/manifest.d.ts +4 -0
- package/dist/channels/manifest.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +2 -0
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +40 -4
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/trigger/client.d.ts +1 -0
- package/dist/channels/trigger/client.d.ts.map +1 -1
- package/dist/channels/trigger/client.js +19 -8
- package/dist/channels/trigger/client.js.map +1 -1
- package/dist/channels/trigger/http.d.ts +8 -0
- package/dist/channels/trigger/http.d.ts.map +1 -1
- package/dist/channels/trigger/http.js +42 -1
- package/dist/channels/trigger/http.js.map +1 -1
- package/dist/channels/trigger/identity-context.d.ts +47 -0
- package/dist/channels/trigger/identity-context.d.ts.map +1 -0
- package/dist/channels/trigger/identity-context.js +171 -0
- package/dist/channels/trigger/identity-context.js.map +1 -0
- package/dist/channels/trigger/types.d.ts +5 -1
- package/dist/channels/trigger/types.d.ts.map +1 -1
- package/dist/channels/trigger/types.js +5 -0
- package/dist/channels/trigger/types.js.map +1 -1
- package/dist/connections.d.ts +74 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +277 -0
- package/dist/connections.js.map +1 -0
- package/dist/connectors/mcp/index.d.ts +29 -89
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +258 -50
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/connectors/mcp/schema.d.ts +12 -0
- package/dist/connectors/mcp/schema.d.ts.map +1 -0
- package/dist/connectors/mcp/schema.js +57 -0
- package/dist/connectors/mcp/schema.js.map +1 -0
- package/dist/connectors/mcp/types.d.ts +62 -0
- package/dist/connectors/mcp/types.d.ts.map +1 -0
- package/dist/connectors/mcp/types.js +2 -0
- package/dist/connectors/mcp/types.js.map +1 -0
- package/dist/connectors/tool-selection.d.ts +9 -18
- package/dist/connectors/tool-selection.d.ts.map +1 -1
- package/dist/connectors/tool-selection.js +32 -58
- package/dist/connectors/tool-selection.js.map +1 -1
- package/dist/credential-gate.d.ts +40 -0
- package/dist/credential-gate.d.ts.map +1 -0
- package/dist/credential-gate.js +227 -0
- package/dist/credential-gate.js.map +1 -0
- package/dist/identity/index.d.ts +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/types.d.ts +79 -5
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ingress/index.d.ts +10 -2
- package/dist/ingress/index.d.ts.map +1 -1
- package/dist/ingress/index.js +17 -9
- package/dist/ingress/index.js.map +1 -1
- package/dist/runtime/auth.d.ts +49 -5
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +100 -5
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/http.d.ts +1 -1
- package/dist/runtime/http.d.ts.map +1 -1
- package/dist/runtime/http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +65 -5
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +148 -0
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +12 -7
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/managed-middleware.d.ts +2 -2
- package/dist/runtime/managed-middleware.js +6 -6
- package/dist/runtime/managed-tools.d.ts +19 -15
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +14 -13
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/types.d.ts +2 -2
- package/package.json +8 -8
- package/dist/connectors/mcp/load.d.ts +0 -12
- package/dist/connectors/mcp/load.d.ts.map +0 -1
- package/dist/connectors/mcp/load.js +0 -122
- package/dist/connectors/mcp/load.js.map +0 -1
|
@@ -48,6 +48,8 @@ export interface DeliverScheduleResultInput {
|
|
|
48
48
|
threadId?: string;
|
|
49
49
|
}) => Promise<unknown>;
|
|
50
50
|
}
|
|
51
|
+
/** Return the deployment ID supplied by the managed runtime. */
|
|
52
|
+
export declare function getDeploymentId(env?: NodeJS.ProcessEnv): string | undefined;
|
|
51
53
|
/**
|
|
52
54
|
* Post schedule result text to the configured channel. Soft-fails (logs) on
|
|
53
55
|
* missing token / provider errors so cron runs are not marked failed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-delivery.d.ts","sourceRoot":"","sources":["../../src/channels/schedule-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"schedule-delivery.d.ts","sourceRoot":"","sources":["../../src/channels/schedule-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAO1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,uEAAuE;AACvE,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,MAAM;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAC3E,IAAI,CAEN;AAED,uDAAuD;AACvD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EACE;QAAE,IAAI,EAAE,uBAAuB,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,iBAAiB,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAChD,2BAA2B,GAAG,SAAS,CAoDzC;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,2BAA2B,CAAC,IAAI,CAAC,GACpC,cAAc,CAKhB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,2BAA2B,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxB;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAC7B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAoF1C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAChD,OAAO,CAcT;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IACzD,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,qBAAqB,CAAC;CACzC,GAAG,iBAAiB,CAyBpB"}
|
|
@@ -9,11 +9,14 @@
|
|
|
9
9
|
* `configurable.mda_schedule.name`. Ordinary HTTP invokes cannot forge that
|
|
10
10
|
* pair (and `mda_schedule` is a reserved configurable key).
|
|
11
11
|
*/
|
|
12
|
+
import { randomUUID } from "node:crypto";
|
|
12
13
|
import { getConfig } from "@langchain/langgraph";
|
|
13
14
|
import { configurableFromRuntime, resolveAmbientConfigurable, } from "../runtime/identity-runtime.js";
|
|
15
|
+
import { logger } from "../runtime/log.js";
|
|
14
16
|
import { extractAssistantText } from "./assistant-text.js";
|
|
15
17
|
import { SLACK_BOT_TOKEN_ENV } from "./binding.js";
|
|
16
18
|
import { createSlackWebApiTransport } from "./slack/transport.js";
|
|
19
|
+
import { createTriggerClient } from "./trigger/client.js";
|
|
17
20
|
let scheduleMetadataForTests;
|
|
18
21
|
/** Override LangGraph run metadata resolution. @internal Test-only. */
|
|
19
22
|
export function setScheduleMetadataForTests(loader) {
|
|
@@ -81,6 +84,12 @@ export function addressFromDeliverTo(to) {
|
|
|
81
84
|
}
|
|
82
85
|
return { conversationId: to.conversationId };
|
|
83
86
|
}
|
|
87
|
+
/** Return the deployment ID supplied by the managed runtime. */
|
|
88
|
+
export function getDeploymentId(env = process.env) {
|
|
89
|
+
return (env.LANGSMITH_HOST_PROJECT_ID?.trim() ||
|
|
90
|
+
env.LANGGRAPH_CLOUD_ID?.trim() ||
|
|
91
|
+
undefined);
|
|
92
|
+
}
|
|
84
93
|
/**
|
|
85
94
|
* Post schedule result text to the configured channel. Soft-fails (logs) on
|
|
86
95
|
* missing token / provider errors so cron runs are not marked failed.
|
|
@@ -92,7 +101,7 @@ export async function deliverScheduleResult(input) {
|
|
|
92
101
|
}
|
|
93
102
|
// Phase 1: Slack only (channel id is file-derived name, typically "slack").
|
|
94
103
|
if (input.deliverTo.channel !== "slack") {
|
|
95
|
-
|
|
104
|
+
logger.error(`schedule deliverTo channel "${logger.logIdentifier(input.deliverTo.channel)}" is not supported yet`);
|
|
96
105
|
return "failed";
|
|
97
106
|
}
|
|
98
107
|
const address = addressFromDeliverTo(input.deliverTo.to);
|
|
@@ -106,13 +115,40 @@ export async function deliverScheduleResult(input) {
|
|
|
106
115
|
return "posted";
|
|
107
116
|
}
|
|
108
117
|
catch (error) {
|
|
109
|
-
|
|
118
|
+
logger.error(`schedule Slack delivery failed (${logger.safeErrorLabel(error)})`);
|
|
119
|
+
return "failed";
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const deploymentId = getDeploymentId();
|
|
123
|
+
let triggerClient;
|
|
124
|
+
try {
|
|
125
|
+
triggerClient = createTriggerClient();
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
triggerClient = undefined;
|
|
129
|
+
}
|
|
130
|
+
if (triggerClient && deploymentId) {
|
|
131
|
+
const action = {
|
|
132
|
+
type: "post",
|
|
133
|
+
action_id: randomUUID(),
|
|
134
|
+
address: {
|
|
135
|
+
conversation_id: address.conversationId,
|
|
136
|
+
...(address.threadId ? { thread_id: address.threadId } : {}),
|
|
137
|
+
},
|
|
138
|
+
message: { text },
|
|
139
|
+
};
|
|
140
|
+
try {
|
|
141
|
+
await triggerClient.postDeploymentAction(deploymentId, input.deliverTo.channel, action);
|
|
142
|
+
return "posted";
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.error(`schedule Trigger channel delivery failed (${logger.safeErrorLabel(error)})`);
|
|
110
146
|
return "failed";
|
|
111
147
|
}
|
|
112
148
|
}
|
|
113
149
|
const botToken = input.botToken ?? process.env[SLACK_BOT_TOKEN_ENV] ?? "";
|
|
114
150
|
if (!botToken.trim()) {
|
|
115
|
-
|
|
151
|
+
logger.error("schedule deliverTo requires Trigger channel configuration or SLACK_BOT_TOKEN; skipping auto-post");
|
|
116
152
|
return "failed";
|
|
117
153
|
}
|
|
118
154
|
try {
|
|
@@ -125,7 +161,7 @@ export async function deliverScheduleResult(input) {
|
|
|
125
161
|
return "posted";
|
|
126
162
|
}
|
|
127
163
|
catch (error) {
|
|
128
|
-
|
|
164
|
+
logger.error(`schedule Slack delivery failed (${logger.safeErrorLabel(error)})`);
|
|
129
165
|
return "failed";
|
|
130
166
|
}
|
|
131
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-delivery.js","sourceRoot":"","sources":["../../src/channels/schedule-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"schedule-delivery.js","sourceRoot":"","sources":["../../src/channels/schedule-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI1D,IAAI,wBAES,CAAC;AAEd,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CACzC,MAA4E;IAE5E,wBAAwB,GAAG,MAAM,CAAC;AACpC,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAiD;IAEjD,MAAM,QAAQ,GAAG,YAAY,EAAE,YAAY,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,QAAmC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC;IAClD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,GAAG,KAAgC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,cAAc,GAClB,CAAC,OAAO,EAAE,CAAC,cAAc,KAAK,QAAQ,IAAI,EAAE,CAAC,cAAc,CAAC;QAC5D,CAAC,OAAO,EAAE,CAAC,eAAe,KAAK,QAAQ,IAAI,EAAE,CAAC,eAAe,CAAC;QAC9D,EAAE,CAAC;IACL,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAE7C,IAAI,YAA+C,CAAC;IACpD,IAAI,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QACzC,YAAY,GAAG;YACb,IAAI,EAAE,uBAAuB;YAC7B,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE;SACtC,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GACZ,CAAC,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC;YAChD,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,IAAI,EAAE,CAAC,SAAS,CAAC;YAClD,EAAE,CAAC;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC;QACvC,YAAY,GAAG;YACb,IAAI,EAAE,iBAAiB;YACvB,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE;YACrC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;IACxD,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAClC,EAAqC;IAErC,IAAI,EAAE,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAClC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;AAC/C,CAAC;AAeD,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAC7B,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,OAAO,CACL,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE;QACrC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAC9B,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAiC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,4EAA4E;IAC5E,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CACV,+BAA+B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,wBAAwB,CACrG,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC;gBACf,IAAI;gBACJ,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,mCAAmC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CACnE,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,aAAa,CAAC;IAClB,IAAI,CAAC;QACH,aAAa,GAAG,mBAAmB,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IACD,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAgC;YAC1C,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,UAAU,EAAE;YACvB,OAAO,EAAE;gBACP,eAAe,EAAE,OAAO,CAAC,cAAc;gBACvC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,OAAO,EAAE,EAAE,IAAI,EAAE;SAClB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,oBAAoB,CACtC,YAAY,EACZ,KAAK,CAAC,SAAS,CAAC,OAAO,EACvB,MAAM,CACP,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,6CAA6C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAC7E,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CACV,kGAAkG,CACnG,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,IAAI,CAAC;YACnB,IAAI;YACJ,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CACV,mCAAmC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CACnE,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,YAAiD;IAEjD,MAAM,QAAQ,GAAG,YAAY,EAAE,YAAY,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAI,QAAoC,CAAC,IAAI,CAAC;IACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,OAAO,CACL,QAAQ,EAAE,WAAW,KAAK,IAAI,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE,CACxE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAG9B,IAAI,wBAAwB,EAAE,CAAC;QAC7B,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC;QACtC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,OAAO,QAA6D,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gCAAgC,CAAC,OAGhD;IACC,MAAM,OAAO,GAAG,OAAO,EAAE,QAAQ,IAAI,qBAAqB,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CAAC,UAAU,CAAC,KAAc,EAAE,OAA2B;YAC1D,MAAM,YAAY,GAChB,uBAAuB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC;YACnE,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACtD,IAAI,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YAEjC,MAAM,QAAQ,GACZ,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrB,UAAU,IAAI,KAAK;gBACjB,CAAC,CAAE,KAAgC,CAAC,QAAQ;gBAC5C,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -23,6 +23,7 @@ export declare class TriggerClient implements TriggerClientLike {
|
|
|
23
23
|
#private;
|
|
24
24
|
constructor(options?: TriggerClientOptions);
|
|
25
25
|
postAction(channelId: string, body: TriggerChannelActionRequest): Promise<TriggerChannelActionResponse>;
|
|
26
|
+
postDeploymentAction(deploymentId: string, channelName: string, body: TriggerChannelActionRequest): Promise<TriggerChannelActionResponse>;
|
|
26
27
|
postRuntimeEvent(channelId: string, body: TriggerChannelRuntimeEventRequest): Promise<TriggerChannelRuntimeEventResponse>;
|
|
27
28
|
}
|
|
28
29
|
export declare function createTriggerClient(options?: TriggerClientOptions): TriggerClient | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,oCAAoC,qCACb,CAAC;AACrC,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE,KAAK,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACW,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA,EAQzB;CACF;AAED,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,iBAAiB;;IAOrD,YAAY,OAAO,GAAE,oBAAyB,EAW7C;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,oCAAoC,qCACb,CAAC;AACrC,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE,KAAK,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACW,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA,EAQzB;CACF;AAED,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,iBAAiB;;IAOrD,YAAY,OAAO,GAAE,oBAAyB,EAW7C;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAOvC;IAEK,oBAAoB,CACxB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAWvC;IAEK,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAU7C;CAoCF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,GAAG,SAAS,CAM3B"}
|
|
@@ -33,23 +33,28 @@ export class TriggerClient {
|
|
|
33
33
|
this.#timeoutMs = options.timeoutMs ?? TRIGGER_HTTP_TIMEOUT_MS;
|
|
34
34
|
}
|
|
35
35
|
async postAction(channelId, body) {
|
|
36
|
-
const response = await this.#post("actions", channelId
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
const response = await this.#post("actions", `${this.#apiBase}/channels/${encodeURIComponent(channelId)}/actions`, body);
|
|
37
|
+
return parseActionResponse(response);
|
|
38
|
+
}
|
|
39
|
+
async postDeploymentAction(deploymentId, channelName, body) {
|
|
40
|
+
const query = new URLSearchParams({
|
|
41
|
+
deployment_id: deploymentId,
|
|
42
|
+
channel_name: channelName,
|
|
43
|
+
});
|
|
44
|
+
const response = await this.#post("actions", `${this.#apiBase}/channels/actions?${query.toString()}`, body);
|
|
45
|
+
return parseActionResponse(response);
|
|
41
46
|
}
|
|
42
47
|
async postRuntimeEvent(channelId, body) {
|
|
43
|
-
const response = await this.#post("events", channelId
|
|
48
|
+
const response = await this.#post("events", `${this.#apiBase}/channels/${encodeURIComponent(channelId)}/events`, body);
|
|
44
49
|
if (!isRecord(response) || typeof response.status !== "string") {
|
|
45
50
|
throw new TriggerClientError("events");
|
|
46
51
|
}
|
|
47
52
|
return { status: response.status };
|
|
48
53
|
}
|
|
49
|
-
async #post(operation,
|
|
54
|
+
async #post(operation, url, body) {
|
|
50
55
|
let response;
|
|
51
56
|
try {
|
|
52
|
-
response = await fetchWithTimeout(
|
|
57
|
+
response = await fetchWithTimeout(url, {
|
|
53
58
|
method: "POST",
|
|
54
59
|
redirect: "error",
|
|
55
60
|
headers: {
|
|
@@ -115,4 +120,10 @@ function isRecord(value) {
|
|
|
115
120
|
function nonblank(value) {
|
|
116
121
|
return typeof value === "string" && value.trim().length > 0;
|
|
117
122
|
}
|
|
123
|
+
function parseActionResponse(response) {
|
|
124
|
+
if (!isRecord(response) || !nonblank(response.id)) {
|
|
125
|
+
throw new TriggerClientError("actions");
|
|
126
|
+
}
|
|
127
|
+
return { id: response.id };
|
|
128
|
+
}
|
|
118
129
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,oCAAoC,GAC/C,kCAAkC,CAAC;AACrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAsBhE,kEAAkE;AAClE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEhC,SAAS;IACT,MAAM;IAFjB,YACW,SAAiC,EACjC,MAAe;QAExB,KAAK,CACH,WAAW,SAAS,kBAClB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,EACpD,GAAG,CACJ,CAAC;yBAPO,SAAS;sBACT,MAAM;QAOf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,aAAa;IACf,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,MAAM,CAAe;IACrB,UAAU,CAAS;IAE5B,YAAY,OAAO,GAAyB,EAAE;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAuB,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,IAAiC;QAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,oCAAoC,GAC/C,kCAAkC,CAAC;AACrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAsBhE,kEAAkE;AAClE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEhC,SAAS;IACT,MAAM;IAFjB,YACW,SAAiC,EACjC,MAAe;QAExB,KAAK,CACH,WAAW,SAAS,kBAClB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,EACpD,GAAG,CACJ,CAAC;yBAPO,SAAS;sBACT,MAAM;QAOf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,aAAa;IACf,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,MAAM,CAAe;IACrB,UAAU,CAAS;IAE5B,YAAY,OAAO,GAAyB,EAAE;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAuB,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,IAAiC;QAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,SAAS,EACT,GAAG,IAAI,CAAC,QAAQ,aAAa,kBAAkB,CAAC,SAAS,CAAC,UAAU,EACpE,IAAI,CACL,CAAC;QACF,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,YAAoB,EACpB,WAAmB,EACnB,IAAiC;QAEjC,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;YAChC,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,SAAS,EACT,GAAG,IAAI,CAAC,QAAQ,qBAAqB,KAAK,CAAC,QAAQ,EAAE,EAAE,EACvD,IAAI,CACL,CAAC;QACF,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,SAAiB,EACjB,IAAuC;QAEvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,QAAQ,EACR,GAAG,IAAI,CAAC,QAAQ,aAAa,kBAAkB,CAAC,SAAS,CAAC,SAAS,EACnE,IAAI,CACL,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CACT,SAAiC,EACjC,GAAW,EACX,IAAqE;QAErE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,gBAAgB,CAC/B,GAAG,EACH;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,OAAO;oBACzB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAO,GAAyB,EAAE;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,0BAA0B,CACjC,GAAsB;IAEtB,OAAO,GAAG,CAAC,oCAAoC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAuB;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IACE,GAAG,CAAC,QAAQ,KAAK,QAAQ;QACzB,CAAC,GAAG,CAAC,QAAQ;QACb,GAAG,CAAC,QAAQ;QACZ,GAAG,CAAC,QAAQ;QACZ,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5C,GAAG,CAAC,MAAM;QACV,GAAG,CAAC,IAAI,EACR,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ObservedIngressRun, type StartedIngressRun } from "../../ingress/index.js";
|
|
2
2
|
import { type TriggerClientLike } from "./client.js";
|
|
3
|
+
import { type IdentityContextVerifyOptions } from "./identity-context.js";
|
|
3
4
|
import { type TriggerChannelResume } from "./types.js";
|
|
4
5
|
export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
|
|
5
6
|
export declare const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
|
|
@@ -9,10 +10,14 @@ type StartAgent = (input: {
|
|
|
9
10
|
messages: Record<string, unknown>[];
|
|
10
11
|
sourceProvider: string;
|
|
11
12
|
sourceThreadKey: string;
|
|
13
|
+
userId: string;
|
|
12
14
|
}) => Promise<StartedIngressRun>;
|
|
13
15
|
type ObserveAgent = (input: {
|
|
14
16
|
threadId: string;
|
|
15
17
|
runId: string;
|
|
18
|
+
sourceProvider: string;
|
|
19
|
+
sourceThreadKey: string;
|
|
20
|
+
userId: string;
|
|
16
21
|
}) => Promise<ObservedIngressRun>;
|
|
17
22
|
type ResumeAgent = (input: {
|
|
18
23
|
threadId: string;
|
|
@@ -20,6 +25,7 @@ type ResumeAgent = (input: {
|
|
|
20
25
|
resume: TriggerChannelResume;
|
|
21
26
|
sourceProvider: string;
|
|
22
27
|
sourceThreadKey: string;
|
|
28
|
+
userId: string;
|
|
23
29
|
}) => Promise<StartedIngressRun>;
|
|
24
30
|
export interface TriggerChannelHttpOptions {
|
|
25
31
|
sourceProvider: string;
|
|
@@ -30,6 +36,8 @@ export interface TriggerChannelHttpOptions {
|
|
|
30
36
|
resumeAgent?: ResumeAgent;
|
|
31
37
|
observeAgent?: ObserveAgent;
|
|
32
38
|
triggerClient?: TriggerClientLike;
|
|
39
|
+
/** Override identity-context JWKS verify (unit tests). */
|
|
40
|
+
identityContext?: IdentityContextVerifyOptions;
|
|
33
41
|
}
|
|
34
42
|
/** Validate one Trigger message, start its run, and enqueue observation. */
|
|
35
43
|
export declare function handleTriggerChannelEventRequest(request: Request, options: TriggerChannelHttpOptions): Promise<Response>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAKL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElC,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,0DAA0D;IAC1D,eAAe,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAkBD,4EAA4E;AAC5E,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAyInB"}
|
|
@@ -4,14 +4,29 @@ import { extractAssistantText } from "../assistant-text.js";
|
|
|
4
4
|
import { logger } from "../../runtime/log.js";
|
|
5
5
|
import { observeIngressAgent, resumeIngressAgent, scheduleIngressWork, startIngressAgent, } from "../../ingress/index.js";
|
|
6
6
|
import { createTriggerClient, LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV, TriggerClientError, } from "./client.js";
|
|
7
|
+
import { IdentityContextUnavailableError, InvalidIdentityContextError, principalIdFromIdentityContext, } from "./identity-context.js";
|
|
7
8
|
import { parseTriggerChannelEvent, TRIGGER_SERVICE_KEY_HEADER, } from "./types.js";
|
|
8
9
|
export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
|
|
9
10
|
export const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
|
|
11
|
+
class MissingIdentityContextError extends Error {
|
|
12
|
+
name = "MissingIdentityContextError";
|
|
13
|
+
}
|
|
14
|
+
/** Every delivery requires a verified Agent Auth principal. */
|
|
15
|
+
async function resolveEventPrincipal(event, verify) {
|
|
16
|
+
const token = event.identity_context;
|
|
17
|
+
if (token == null || !token.trim()) {
|
|
18
|
+
throw new MissingIdentityContextError();
|
|
19
|
+
}
|
|
20
|
+
return await principalIdFromIdentityContext(token, verify);
|
|
21
|
+
}
|
|
10
22
|
/** Validate one Trigger message, start its run, and enqueue observation. */
|
|
11
23
|
export async function handleTriggerChannelEventRequest(request, options) {
|
|
12
24
|
if (!request.headers.get(TRIGGER_SERVICE_KEY_HEADER)?.trim()) {
|
|
13
25
|
return Response.json({ error: "unauthorized" }, { status: 401 });
|
|
14
26
|
}
|
|
27
|
+
// Trigger signs x-service-key as a platform service JWT; presence-only is
|
|
28
|
+
// still a prototype gate. identity_context below is EdDSA-verified against
|
|
29
|
+
// LangSmith JWKS so forged principals cannot ride a blank/any service key.
|
|
15
30
|
let event;
|
|
16
31
|
try {
|
|
17
32
|
const raw = await requestBody(request, options.rawBody);
|
|
@@ -21,6 +36,25 @@ export async function handleTriggerChannelEventRequest(request, options) {
|
|
|
21
36
|
logger.warn("invalid channel event");
|
|
22
37
|
return Response.json({ error: "invalid channel event" }, { status: 400 });
|
|
23
38
|
}
|
|
39
|
+
let userId;
|
|
40
|
+
try {
|
|
41
|
+
userId = await resolveEventPrincipal(event, options.identityContext);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof MissingIdentityContextError) {
|
|
45
|
+
logger.warn("missing channel identity_context");
|
|
46
|
+
return Response.json({ error: "missing channel identity_context" }, { status: 400 });
|
|
47
|
+
}
|
|
48
|
+
if (error instanceof IdentityContextUnavailableError) {
|
|
49
|
+
logger.error(`channel identity_context unavailable (${logger.safeErrorLabel(error)})`);
|
|
50
|
+
return Response.json({ error: "identity_context verification unavailable" }, { status: 503 });
|
|
51
|
+
}
|
|
52
|
+
if (error instanceof InvalidIdentityContextError) {
|
|
53
|
+
logger.warn(`invalid channel identity_context (${logger.safeErrorLabel(error)})`);
|
|
54
|
+
return Response.json({ error: "invalid channel identity_context" }, { status: 400 });
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
24
58
|
logger.info(`Channel incoming event (type=${event.type}, event_id=${logger.logIdentifier(event.event_id)}, delivery_id=${logger.logIdentifier(event.delivery_id)}, channel_id=${logger.logIdentifier(event.channel_id)})`);
|
|
25
59
|
let client = options.triggerClient;
|
|
26
60
|
if (!client) {
|
|
@@ -52,6 +86,7 @@ export async function handleTriggerChannelEventRequest(request, options) {
|
|
|
52
86
|
assistantId,
|
|
53
87
|
sourceProvider: options.sourceProvider,
|
|
54
88
|
sourceThreadKey: event.source_thread_key,
|
|
89
|
+
userId,
|
|
55
90
|
};
|
|
56
91
|
started =
|
|
57
92
|
event.type === "message"
|
|
@@ -73,6 +108,9 @@ export async function handleTriggerChannelEventRequest(request, options) {
|
|
|
73
108
|
started,
|
|
74
109
|
client,
|
|
75
110
|
observeAgent: options.observeAgent,
|
|
111
|
+
sourceProvider: options.sourceProvider,
|
|
112
|
+
sourceThreadKey: event.source_thread_key,
|
|
113
|
+
userId,
|
|
76
114
|
}), {
|
|
77
115
|
label: "Channel run observation",
|
|
78
116
|
schedule: options.schedule,
|
|
@@ -91,6 +129,9 @@ async function observeAcceptedRun(input) {
|
|
|
91
129
|
observed = await (input.observeAgent ?? observeIngressAgent)({
|
|
92
130
|
threadId: started.threadId,
|
|
93
131
|
runId: started.runId,
|
|
132
|
+
sourceProvider: input.sourceProvider,
|
|
133
|
+
sourceThreadKey: input.sourceThreadKey,
|
|
134
|
+
userId: input.userId,
|
|
94
135
|
});
|
|
95
136
|
}
|
|
96
137
|
catch {
|
|
@@ -113,7 +154,7 @@ async function observeAcceptedRun(input) {
|
|
|
113
154
|
logger.info(`Channel outgoing action (type=post, delivery_id=${logger.logIdentifier(event.delivery_id)}, channel_id=${logger.logIdentifier(event.channel_id)}, run_id=${logger.logIdentifier(started.runId)})`);
|
|
114
155
|
const action = await bestEffort(client.postAction(event.channel_id, {
|
|
115
156
|
type: "post",
|
|
116
|
-
action_id:
|
|
157
|
+
action_id: event.event_id,
|
|
117
158
|
address: event.address,
|
|
118
159
|
source_thread_key: event.source_thread_key,
|
|
119
160
|
message: { text },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,oCAAoC,EACpC,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAM3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Trigger Server `identity_context` JWTs into Agent Auth principal ids.
|
|
3
|
+
*
|
|
4
|
+
* Agent Auth signs these with the LangSmith EdDSA JWKS published at
|
|
5
|
+
* `{LANGSMITH_ENDPOINT}/.well-known/jwks.json`. MDA verifies the signature
|
|
6
|
+
* (and typ/version/aud/iss/exp/principal UUID) before stamping `x-mda-user-id`.
|
|
7
|
+
* Delivery still requires Trigger's `x-service-key` header; signature verify is
|
|
8
|
+
* what stops a forged principal when that gate is weak.
|
|
9
|
+
*/
|
|
10
|
+
import { type JWTVerifyGetKey } from "jose";
|
|
11
|
+
export declare const IDENTITY_CONTEXT_TOKEN_TYP = "identity-context+jwt";
|
|
12
|
+
export declare const IDENTITY_CONTEXT_AUDIENCE = "mda";
|
|
13
|
+
export declare const IDENTITY_CONTEXT_VERSION = "1";
|
|
14
|
+
export declare const IDENTITY_CONTEXT_ALGORITHMS: readonly ["EdDSA"];
|
|
15
|
+
export declare class InvalidIdentityContextError extends Error {
|
|
16
|
+
readonly name = "InvalidIdentityContextError";
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
19
|
+
/** JWKS / network failure while verifying identity_context. Callers should 5xx. */
|
|
20
|
+
export declare class IdentityContextUnavailableError extends Error {
|
|
21
|
+
readonly name = "IdentityContextUnavailableError";
|
|
22
|
+
constructor(message: string);
|
|
23
|
+
}
|
|
24
|
+
export interface IdentityContextVerifyOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Override key resolution (unit tests). When set, skips the remote LangSmith
|
|
27
|
+
* JWKS fetch.
|
|
28
|
+
*/
|
|
29
|
+
getKey?: JWTVerifyGetKey;
|
|
30
|
+
/** Override expected `iss` (defaults to {@link resolveIdentityContextIssuer}). */
|
|
31
|
+
issuer?: string;
|
|
32
|
+
env?: NodeJS.ProcessEnv;
|
|
33
|
+
}
|
|
34
|
+
/** LangSmith API origin used as identity-context `iss` and JWKS host. */
|
|
35
|
+
export declare function resolveIdentityContextIssuer(env?: NodeJS.ProcessEnv): string;
|
|
36
|
+
/** Public JWKS URL for Agent Auth identity-context signatures. */
|
|
37
|
+
export declare function resolveIdentityContextJwksUrl(env?: NodeJS.ProcessEnv): string;
|
|
38
|
+
/**
|
|
39
|
+
* Extract the Agent Auth principal UUID from a Trigger `identity_context` JWT.
|
|
40
|
+
*
|
|
41
|
+
* @throws {InvalidIdentityContextError} when the token is missing, malformed,
|
|
42
|
+
* or fails signature / claim checks.
|
|
43
|
+
*/
|
|
44
|
+
export declare function principalIdFromIdentityContext(token: string, options?: IdentityContextVerifyOptions): Promise<string>;
|
|
45
|
+
/** Resolve a principal id from an optional event field; `undefined` when absent. */
|
|
46
|
+
export declare function optionalPrincipalIdFromIdentityContext(token: string | null | undefined, options?: IdentityContextVerifyOptions): Promise<string | undefined>;
|
|
47
|
+
//# sourceMappingURL=identity-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-context.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/identity-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,MAAM,CAAC;AAKd,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,2BAA2B,YAAI,OAAO,CAAU,CAAC;AAS9D,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,iCAAiC;IAE9C,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED,mFAAmF;AACnF,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,IAAI,qCAAqC;IAElD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,yEAAyE;AACzE,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAMR;AAED,kEAAkE;AAClE,wBAAgB,6BAA6B,CAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,MAAM,CAAC,CA2FjB;AAED,oFAAoF;AACpF,wBAAsB,sCAAsC,CAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Trigger Server `identity_context` JWTs into Agent Auth principal ids.
|
|
3
|
+
*
|
|
4
|
+
* Agent Auth signs these with the LangSmith EdDSA JWKS published at
|
|
5
|
+
* `{LANGSMITH_ENDPOINT}/.well-known/jwks.json`. MDA verifies the signature
|
|
6
|
+
* (and typ/version/aud/iss/exp/principal UUID) before stamping `x-mda-user-id`.
|
|
7
|
+
* Delivery still requires Trigger's `x-service-key` header; signature verify is
|
|
8
|
+
* what stops a forged principal when that gate is weak.
|
|
9
|
+
*/
|
|
10
|
+
import { createRemoteJWKSet, decodeProtectedHeader, jwtVerify, } from "jose";
|
|
11
|
+
import { JWKS_HTTP_TIMEOUT_MS } from "../../runtime/http.js";
|
|
12
|
+
import { normalizeUuid } from "./uuid.js";
|
|
13
|
+
export const IDENTITY_CONTEXT_TOKEN_TYP = "identity-context+jwt";
|
|
14
|
+
export const IDENTITY_CONTEXT_AUDIENCE = "mda";
|
|
15
|
+
export const IDENTITY_CONTEXT_VERSION = "1";
|
|
16
|
+
export const IDENTITY_CONTEXT_ALGORITHMS = ["EdDSA"];
|
|
17
|
+
const DEFAULT_LANGSMITH_ENDPOINT = "https://api.smith.langchain.com";
|
|
18
|
+
/** Remote JWKS key sets, cached per URI for the process lifetime. */
|
|
19
|
+
const jwksCache = new Map();
|
|
20
|
+
export class InvalidIdentityContextError extends Error {
|
|
21
|
+
name = "InvalidIdentityContextError";
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** JWKS / network failure while verifying identity_context. Callers should 5xx. */
|
|
27
|
+
export class IdentityContextUnavailableError extends Error {
|
|
28
|
+
name = "IdentityContextUnavailableError";
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** LangSmith API origin used as identity-context `iss` and JWKS host. */
|
|
34
|
+
export function resolveIdentityContextIssuer(env = process.env) {
|
|
35
|
+
const raw = env.LANGSMITH_ENDPOINT?.trim() ||
|
|
36
|
+
env.LANGCHAIN_ENDPOINT?.trim() ||
|
|
37
|
+
DEFAULT_LANGSMITH_ENDPOINT;
|
|
38
|
+
return raw.replace(/\/+$/, "");
|
|
39
|
+
}
|
|
40
|
+
/** Public JWKS URL for Agent Auth identity-context signatures. */
|
|
41
|
+
export function resolveIdentityContextJwksUrl(env = process.env) {
|
|
42
|
+
return `${resolveIdentityContextIssuer(env)}/.well-known/jwks.json`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract the Agent Auth principal UUID from a Trigger `identity_context` JWT.
|
|
46
|
+
*
|
|
47
|
+
* @throws {InvalidIdentityContextError} when the token is missing, malformed,
|
|
48
|
+
* or fails signature / claim checks.
|
|
49
|
+
*/
|
|
50
|
+
export async function principalIdFromIdentityContext(token, options = {}) {
|
|
51
|
+
const value = token.trim();
|
|
52
|
+
if (!value) {
|
|
53
|
+
throw new InvalidIdentityContextError("identity_context is blank");
|
|
54
|
+
}
|
|
55
|
+
let header;
|
|
56
|
+
try {
|
|
57
|
+
header = decodeProtectedHeader(value);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
throw new InvalidIdentityContextError("identity_context is not a JWT");
|
|
61
|
+
}
|
|
62
|
+
if (header.typ !== IDENTITY_CONTEXT_TOKEN_TYP) {
|
|
63
|
+
throw new InvalidIdentityContextError(`identity_context typ must be ${IDENTITY_CONTEXT_TOKEN_TYP}`);
|
|
64
|
+
}
|
|
65
|
+
if (header.alg !== "EdDSA") {
|
|
66
|
+
throw new InvalidIdentityContextError("identity_context alg must be EdDSA");
|
|
67
|
+
}
|
|
68
|
+
const env = options.env ?? process.env;
|
|
69
|
+
const issuer = options.issuer ?? resolveIdentityContextIssuer(env);
|
|
70
|
+
const getKey = options.getKey ?? remoteJwks(env);
|
|
71
|
+
let claims;
|
|
72
|
+
try {
|
|
73
|
+
const verified = await jwtVerify(value, getKey, {
|
|
74
|
+
issuer,
|
|
75
|
+
audience: IDENTITY_CONTEXT_AUDIENCE,
|
|
76
|
+
algorithms: [...IDENTITY_CONTEXT_ALGORITHMS],
|
|
77
|
+
typ: IDENTITY_CONTEXT_TOKEN_TYP,
|
|
78
|
+
requiredClaims: ["exp"],
|
|
79
|
+
});
|
|
80
|
+
claims = verified.payload;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof InvalidIdentityContextError ||
|
|
84
|
+
error instanceof IdentityContextUnavailableError) {
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
if (isIdentityContextUnavailable(error)) {
|
|
88
|
+
throw new IdentityContextUnavailableError("identity_context JWKS verification is unavailable");
|
|
89
|
+
}
|
|
90
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
91
|
+
const code = error && typeof error === "object" && "code" in error
|
|
92
|
+
? String(error.code)
|
|
93
|
+
: "";
|
|
94
|
+
if (code === "ERR_JWT_EXPIRED" || /expir|"exp"|claim.*exp/i.test(detail)) {
|
|
95
|
+
throw new InvalidIdentityContextError("identity_context is expired");
|
|
96
|
+
}
|
|
97
|
+
if (code === "ERR_JWT_CLAIM_VALIDATION_FAILED" &&
|
|
98
|
+
/required.*exp|"exp"/i.test(detail)) {
|
|
99
|
+
throw new InvalidIdentityContextError("identity_context is missing exp");
|
|
100
|
+
}
|
|
101
|
+
throw new InvalidIdentityContextError("identity_context signature verification failed");
|
|
102
|
+
}
|
|
103
|
+
if (typeof claims.exp !== "number") {
|
|
104
|
+
throw new InvalidIdentityContextError("identity_context is missing exp");
|
|
105
|
+
}
|
|
106
|
+
if (claims.version !== IDENTITY_CONTEXT_VERSION) {
|
|
107
|
+
throw new InvalidIdentityContextError(`identity_context version must be ${IDENTITY_CONTEXT_VERSION}`);
|
|
108
|
+
}
|
|
109
|
+
const fromPrincipal = principalIdClaim(claims.principal);
|
|
110
|
+
const fromSubject = typeof claims.sub === "string" ? normalizeUuid(claims.sub) : undefined;
|
|
111
|
+
if (fromPrincipal && fromSubject && fromPrincipal !== fromSubject) {
|
|
112
|
+
throw new InvalidIdentityContextError("identity_context principal.id and sub disagree");
|
|
113
|
+
}
|
|
114
|
+
const principalId = fromPrincipal ?? fromSubject;
|
|
115
|
+
if (!principalId) {
|
|
116
|
+
throw new InvalidIdentityContextError("identity_context is missing a principal UUID");
|
|
117
|
+
}
|
|
118
|
+
return principalId;
|
|
119
|
+
}
|
|
120
|
+
/** Resolve a principal id from an optional event field; `undefined` when absent. */
|
|
121
|
+
export async function optionalPrincipalIdFromIdentityContext(token, options = {}) {
|
|
122
|
+
if (token == null) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
if (typeof token !== "string") {
|
|
126
|
+
throw new InvalidIdentityContextError("identity_context must be a string");
|
|
127
|
+
}
|
|
128
|
+
if (!token.trim()) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
return await principalIdFromIdentityContext(token, options);
|
|
132
|
+
}
|
|
133
|
+
function isIdentityContextUnavailable(error) {
|
|
134
|
+
if (error instanceof TypeError) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
const code = error && typeof error === "object" && "code" in error
|
|
138
|
+
? String(error.code)
|
|
139
|
+
: "";
|
|
140
|
+
if (code === "ERR_JWKS_TIMEOUT" || code === "ABORT_ERR") {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
const name = error && typeof error === "object" && "name" in error
|
|
144
|
+
? String(error.name)
|
|
145
|
+
: "";
|
|
146
|
+
if (name === "TimeoutError" || name === "JWKSTimeout") {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
if (error instanceof Error) {
|
|
150
|
+
return /fetch failed|ECONNREFUSED|ENOTFOUND|network|timed out/i.test(error.message);
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
function remoteJwks(env) {
|
|
155
|
+
const uri = resolveIdentityContextJwksUrl(env);
|
|
156
|
+
let keySet = jwksCache.get(uri);
|
|
157
|
+
if (!keySet) {
|
|
158
|
+
keySet = createRemoteJWKSet(new URL(uri), {
|
|
159
|
+
timeoutDuration: JWKS_HTTP_TIMEOUT_MS,
|
|
160
|
+
});
|
|
161
|
+
jwksCache.set(uri, keySet);
|
|
162
|
+
}
|
|
163
|
+
return keySet;
|
|
164
|
+
}
|
|
165
|
+
function principalIdClaim(value) {
|
|
166
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
return normalizeUuid(value.id);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=identity-context.js.map
|