artemys 0.2.0 → 0.2.1
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/CHANGELOG.md +23 -0
- package/README.md +194 -146
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +446 -379
- package/dist/cli/index.js.map +1 -1
- package/dist/coffeeshop/client.d.ts +158 -0
- package/dist/coffeeshop/client.d.ts.map +1 -0
- package/dist/coffeeshop/client.js +293 -0
- package/dist/coffeeshop/client.js.map +1 -0
- package/dist/coffeeshop/index.d.ts +2 -0
- package/dist/coffeeshop/index.d.ts.map +1 -0
- package/dist/coffeeshop/index.js +2 -0
- package/dist/coffeeshop/index.js.map +1 -0
- package/dist/discovery/agent-card.schema.d.ts +37 -109
- package/dist/discovery/agent-card.schema.d.ts.map +1 -1
- package/dist/discovery/discovery-query.schema.d.ts +6 -15
- package/dist/discovery/discovery-query.schema.d.ts.map +1 -1
- package/dist/discovery/index.d.ts +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/intro-decision.schema.d.ts +9 -11
- package/dist/discovery/intro-decision.schema.d.ts.map +1 -1
- package/dist/discovery/intro-request.schema.d.ts +2 -14
- package/dist/discovery/intro-request.schema.d.ts.map +1 -1
- package/dist/discovery/session-bootstrap.schema.d.ts +86 -66
- package/dist/discovery/session-bootstrap.schema.d.ts.map +1 -1
- package/dist/discovery/session-bootstrap.schema.js +84 -8
- package/dist/discovery/session-bootstrap.schema.js.map +1 -1
- package/dist/mcp-server/index.d.ts +4 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +4 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/persistence.d.ts +37 -0
- package/dist/mcp-server/persistence.d.ts.map +1 -0
- package/dist/mcp-server/persistence.js +309 -0
- package/dist/mcp-server/persistence.js.map +1 -0
- package/dist/mcp-server/resources.d.ts +20 -0
- package/dist/mcp-server/resources.d.ts.map +1 -0
- package/dist/mcp-server/resources.js +49 -0
- package/dist/mcp-server/resources.js.map +1 -0
- package/dist/mcp-server/server.d.ts +33 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +220 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/state.d.ts +43 -0
- package/dist/mcp-server/state.d.ts.map +1 -0
- package/dist/mcp-server/state.js +111 -0
- package/dist/mcp-server/state.js.map +1 -0
- package/dist/mcp-server/tools/common.d.ts +225 -0
- package/dist/mcp-server/tools/common.d.ts.map +1 -0
- package/dist/mcp-server/tools/common.js +11 -0
- package/dist/mcp-server/tools/common.js.map +1 -0
- package/dist/mcp-server/tools/discovery.d.ts +3 -0
- package/dist/mcp-server/tools/discovery.d.ts.map +1 -0
- package/dist/mcp-server/tools/discovery.js +48 -0
- package/dist/mcp-server/tools/discovery.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +4 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +13 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/intro.d.ts +3 -0
- package/dist/mcp-server/tools/intro.d.ts.map +1 -0
- package/dist/mcp-server/tools/intro.js +53 -0
- package/dist/mcp-server/tools/intro.js.map +1 -0
- package/dist/mcp-server/tools/protocol.d.ts +3 -0
- package/dist/mcp-server/tools/protocol.d.ts.map +1 -0
- package/dist/mcp-server/tools/protocol.js +73 -0
- package/dist/mcp-server/tools/protocol.js.map +1 -0
- package/dist/mcp-server/tools/talent.d.ts +3 -0
- package/dist/mcp-server/tools/talent.d.ts.map +1 -0
- package/dist/mcp-server/tools/talent.js +226 -0
- package/dist/mcp-server/tools/talent.js.map +1 -0
- package/dist/openclaw/index.d.ts +2 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +2 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/openclaw/skill.d.ts +13 -0
- package/dist/openclaw/skill.d.ts.map +1 -0
- package/dist/openclaw/skill.js +18 -0
- package/dist/openclaw/skill.js.map +1 -0
- package/dist/protocol/consent.schema.d.ts +18 -48
- package/dist/protocol/consent.schema.d.ts.map +1 -1
- package/dist/protocol/consent.schema.js +1 -1
- package/dist/protocol/consent.schema.js.map +1 -1
- package/dist/protocol/dialogue.schema.d.ts +21 -177
- package/dist/protocol/dialogue.schema.d.ts.map +1 -1
- package/dist/protocol/envelope.schema.d.ts +46 -28
- package/dist/protocol/envelope.schema.d.ts.map +1 -1
- package/dist/protocol/errors.d.ts +8 -1
- package/dist/protocol/errors.d.ts.map +1 -1
- package/dist/protocol/handshake.schema.d.ts +130 -385
- package/dist/protocol/handshake.schema.d.ts.map +1 -1
- package/dist/protocol/handshake.schema.js +1 -0
- package/dist/protocol/handshake.schema.js.map +1 -1
- package/dist/protocol/identity.schema.d.ts +44 -94
- package/dist/protocol/identity.schema.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +1 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +1 -0
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/message-types.d.ts +14 -1
- package/dist/protocol/message-types.d.ts.map +1 -1
- package/dist/protocol/message.schema.d.ts +100 -715
- package/dist/protocol/message.schema.d.ts.map +1 -1
- package/dist/protocol/resolution.schema.d.ts +22 -268
- package/dist/protocol/resolution.schema.d.ts.map +1 -1
- package/dist/protocol/resolution.schema.js +1 -1
- package/dist/protocol/resolution.schema.js.map +1 -1
- package/dist/protocol/state-machine.d.ts +10 -1
- package/dist/protocol/state-machine.d.ts.map +1 -1
- package/dist/protocol/talent.schema.d.ts +106 -0
- package/dist/protocol/talent.schema.d.ts.map +1 -0
- package/dist/protocol/talent.schema.js +47 -0
- package/dist/protocol/talent.schema.js.map +1 -0
- package/dist/protocol/transport.schema.d.ts +16 -18
- package/dist/protocol/transport.schema.d.ts.map +1 -1
- package/dist/transport/client.d.ts +32 -0
- package/dist/transport/client.d.ts.map +1 -0
- package/dist/transport/client.js +155 -0
- package/dist/transport/client.js.map +1 -0
- package/dist/transport/dedup.d.ts +9 -0
- package/dist/transport/dedup.d.ts.map +1 -0
- package/dist/transport/dedup.js +36 -0
- package/dist/transport/dedup.js.map +1 -0
- package/dist/transport/handler.d.ts +9 -0
- package/dist/transport/handler.d.ts.map +1 -0
- package/dist/transport/handler.js +105 -0
- package/dist/transport/handler.js.map +1 -0
- package/dist/transport/hmac.d.ts +3 -0
- package/dist/transport/hmac.d.ts.map +1 -0
- package/dist/transport/hmac.js +43 -0
- package/dist/transport/hmac.js.map +1 -0
- package/dist/transport/index.d.ts +6 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +6 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/reference-runner.d.ts +37 -0
- package/dist/transport/reference-runner.d.ts.map +1 -0
- package/dist/transport/reference-runner.js +372 -0
- package/dist/transport/reference-runner.js.map +1 -0
- package/package.json +19 -31
- package/dist/agent/archiver.d.ts +0 -8
- package/dist/agent/archiver.d.ts.map +0 -1
- package/dist/agent/archiver.js +0 -48
- package/dist/agent/archiver.js.map +0 -1
- package/dist/agent/capabilities.d.ts +0 -23
- package/dist/agent/capabilities.d.ts.map +0 -1
- package/dist/agent/capabilities.js +0 -87
- package/dist/agent/capabilities.js.map +0 -1
- package/dist/agent/config.d.ts +0 -60
- package/dist/agent/config.d.ts.map +0 -1
- package/dist/agent/config.js +0 -84
- package/dist/agent/config.js.map +0 -1
- package/dist/agent/context-provider.d.ts +0 -12
- package/dist/agent/context-provider.d.ts.map +0 -1
- package/dist/agent/context-provider.js +0 -34
- package/dist/agent/context-provider.js.map +0 -1
- package/dist/agent/context.d.ts +0 -9
- package/dist/agent/context.d.ts.map +0 -1
- package/dist/agent/context.js +0 -80
- package/dist/agent/context.js.map +0 -1
- package/dist/agent/events.d.ts +0 -62
- package/dist/agent/events.d.ts.map +0 -1
- package/dist/agent/events.js +0 -21
- package/dist/agent/events.js.map +0 -1
- package/dist/agent/index.d.ts +0 -32
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -28
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/mcp.d.ts +0 -16
- package/dist/agent/mcp.d.ts.map +0 -1
- package/dist/agent/mcp.js +0 -69
- package/dist/agent/mcp.js.map +0 -1
- package/dist/agent/notifications/decision-parser.d.ts +0 -10
- package/dist/agent/notifications/decision-parser.d.ts.map +0 -1
- package/dist/agent/notifications/decision-parser.js +0 -21
- package/dist/agent/notifications/decision-parser.js.map +0 -1
- package/dist/agent/notifications/index.d.ts +0 -4
- package/dist/agent/notifications/index.d.ts.map +0 -1
- package/dist/agent/notifications/index.js +0 -3
- package/dist/agent/notifications/index.js.map +0 -1
- package/dist/agent/notifications/opportunity-templates.d.ts +0 -14
- package/dist/agent/notifications/opportunity-templates.d.ts.map +0 -1
- package/dist/agent/notifications/opportunity-templates.js +0 -21
- package/dist/agent/notifications/opportunity-templates.js.map +0 -1
- package/dist/agent/notifications/types.d.ts +0 -16
- package/dist/agent/notifications/types.d.ts.map +0 -1
- package/dist/agent/notifications/types.js +0 -2
- package/dist/agent/notifications/types.js.map +0 -1
- package/dist/agent/providers.d.ts +0 -9
- package/dist/agent/providers.d.ts.map +0 -1
- package/dist/agent/providers.js +0 -29
- package/dist/agent/providers.js.map +0 -1
- package/dist/agent/runtime.d.ts +0 -63
- package/dist/agent/runtime.d.ts.map +0 -1
- package/dist/agent/runtime.js +0 -395
- package/dist/agent/runtime.js.map +0 -1
- package/dist/agent/scanning/index.d.ts +0 -3
- package/dist/agent/scanning/index.d.ts.map +0 -1
- package/dist/agent/scanning/index.js +0 -3
- package/dist/agent/scanning/index.js.map +0 -1
- package/dist/agent/scanning/opportunity-scorer.d.ts +0 -24
- package/dist/agent/scanning/opportunity-scorer.d.ts.map +0 -1
- package/dist/agent/scanning/opportunity-scorer.js +0 -90
- package/dist/agent/scanning/opportunity-scorer.js.map +0 -1
- package/dist/agent/scanning/types.d.ts +0 -65
- package/dist/agent/scanning/types.d.ts.map +0 -1
- package/dist/agent/scanning/types.js +0 -32
- package/dist/agent/scanning/types.js.map +0 -1
- package/dist/agent/scheduler.d.ts +0 -38
- package/dist/agent/scheduler.d.ts.map +0 -1
- package/dist/agent/scheduler.js +0 -125
- package/dist/agent/scheduler.js.map +0 -1
- package/dist/agent/session.d.ts +0 -20
- package/dist/agent/session.d.ts.map +0 -1
- package/dist/agent/session.js +0 -88
- package/dist/agent/session.js.map +0 -1
- package/dist/agent/stores.d.ts +0 -48
- package/dist/agent/stores.d.ts.map +0 -1
- package/dist/agent/stores.js +0 -2
- package/dist/agent/stores.js.map +0 -1
- package/dist/agent/tools/browser/ats-patterns.d.ts +0 -20
- package/dist/agent/tools/browser/ats-patterns.d.ts.map +0 -1
- package/dist/agent/tools/browser/ats-patterns.js +0 -226
- package/dist/agent/tools/browser/ats-patterns.js.map +0 -1
- package/dist/agent/tools/browser/index.d.ts +0 -14
- package/dist/agent/tools/browser/index.d.ts.map +0 -1
- package/dist/agent/tools/browser/index.js +0 -126
- package/dist/agent/tools/browser/index.js.map +0 -1
- package/dist/agent/tools/browser/operator-runtime.d.ts +0 -35
- package/dist/agent/tools/browser/operator-runtime.d.ts.map +0 -1
- package/dist/agent/tools/browser/operator-runtime.js +0 -93
- package/dist/agent/tools/browser/operator-runtime.js.map +0 -1
- package/dist/agent/tools/browser/providers/chrome-mcp.d.ts +0 -3
- package/dist/agent/tools/browser/providers/chrome-mcp.d.ts.map +0 -1
- package/dist/agent/tools/browser/providers/chrome-mcp.js +0 -164
- package/dist/agent/tools/browser/providers/chrome-mcp.js.map +0 -1
- package/dist/agent/tools/browser/providers/playwright.d.ts +0 -7
- package/dist/agent/tools/browser/providers/playwright.d.ts.map +0 -1
- package/dist/agent/tools/browser/providers/playwright.js +0 -619
- package/dist/agent/tools/browser/providers/playwright.js.map +0 -1
- package/dist/agent/tools/browser/types.d.ts +0 -22
- package/dist/agent/tools/browser/types.d.ts.map +0 -1
- package/dist/agent/tools/browser/types.js +0 -15
- package/dist/agent/tools/browser/types.js.map +0 -1
- package/dist/agent/tools/cancel-task.d.ts +0 -4
- package/dist/agent/tools/cancel-task.d.ts.map +0 -1
- package/dist/agent/tools/cancel-task.js +0 -29
- package/dist/agent/tools/cancel-task.js.map +0 -1
- package/dist/agent/tools/career-advice.d.ts +0 -3
- package/dist/agent/tools/career-advice.d.ts.map +0 -1
- package/dist/agent/tools/career-advice.js +0 -49
- package/dist/agent/tools/career-advice.js.map +0 -1
- package/dist/agent/tools/index.d.ts +0 -15
- package/dist/agent/tools/index.d.ts.map +0 -1
- package/dist/agent/tools/index.js +0 -94
- package/dist/agent/tools/index.js.map +0 -1
- package/dist/agent/tools/job-search.d.ts +0 -3
- package/dist/agent/tools/job-search.d.ts.map +0 -1
- package/dist/agent/tools/job-search.js +0 -77
- package/dist/agent/tools/job-search.js.map +0 -1
- package/dist/agent/tools/list-tasks.d.ts +0 -4
- package/dist/agent/tools/list-tasks.d.ts.map +0 -1
- package/dist/agent/tools/list-tasks.js +0 -24
- package/dist/agent/tools/list-tasks.js.map +0 -1
- package/dist/agent/tools/market-data.d.ts +0 -8
- package/dist/agent/tools/market-data.d.ts.map +0 -1
- package/dist/agent/tools/market-data.js +0 -133
- package/dist/agent/tools/market-data.js.map +0 -1
- package/dist/agent/tools/memory-write.d.ts +0 -3
- package/dist/agent/tools/memory-write.d.ts.map +0 -1
- package/dist/agent/tools/memory-write.js +0 -48
- package/dist/agent/tools/memory-write.js.map +0 -1
- package/dist/agent/tools/resume.d.ts +0 -3
- package/dist/agent/tools/resume.d.ts.map +0 -1
- package/dist/agent/tools/resume.js +0 -70
- package/dist/agent/tools/resume.js.map +0 -1
- package/dist/agent/tools/schedule-task.d.ts +0 -4
- package/dist/agent/tools/schedule-task.d.ts.map +0 -1
- package/dist/agent/tools/schedule-task.js +0 -39
- package/dist/agent/tools/schedule-task.js.map +0 -1
- package/dist/agent/tools/shell.d.ts +0 -6
- package/dist/agent/tools/shell.d.ts.map +0 -1
- package/dist/agent/tools/shell.js +0 -66
- package/dist/agent/tools/shell.js.map +0 -1
- package/dist/agent/tools/web-search.d.ts +0 -6
- package/dist/agent/tools/web-search.d.ts.map +0 -1
- package/dist/agent/tools/web-search.js +0 -73
- package/dist/agent/tools/web-search.js.map +0 -1
- package/dist/agent/types.d.ts +0 -103
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -11
- package/dist/agent/types.js.map +0 -1
- package/dist/channels/index.d.ts +0 -10
- package/dist/channels/index.d.ts.map +0 -1
- package/dist/channels/index.js +0 -15
- package/dist/channels/index.js.map +0 -1
- package/dist/channels/telegram.d.ts +0 -21
- package/dist/channels/telegram.d.ts.map +0 -1
- package/dist/channels/telegram.js +0 -255
- package/dist/channels/telegram.js.map +0 -1
- package/dist/channels/types.d.ts +0 -24
- package/dist/channels/types.d.ts.map +0 -1
- package/dist/channels/types.js +0 -2
- package/dist/channels/types.js.map +0 -1
- package/dist/cli/templates/HEARTBEAT.md +0 -6
- package/dist/cli/templates/MEMORY.md +0 -6
- package/dist/cli/templates/PREFERENCES.md +0 -40
- package/dist/cli/templates/PROFILE.md +0 -26
- package/dist/cli/templates/SOUL.md +0 -23
- package/dist/connectors/google-calendar.d.ts +0 -8
- package/dist/connectors/google-calendar.d.ts.map +0 -1
- package/dist/connectors/google-calendar.js +0 -23
- package/dist/connectors/google-calendar.js.map +0 -1
- package/dist/connectors/google-gmail.d.ts +0 -8
- package/dist/connectors/google-gmail.d.ts.map +0 -1
- package/dist/connectors/google-gmail.js +0 -30
- package/dist/connectors/google-gmail.js.map +0 -1
- package/dist/connectors/google-oauth.d.ts +0 -17
- package/dist/connectors/google-oauth.d.ts.map +0 -1
- package/dist/connectors/google-oauth.js +0 -52
- package/dist/connectors/google-oauth.js.map +0 -1
- package/dist/connectors/index.d.ts +0 -5
- package/dist/connectors/index.d.ts.map +0 -1
- package/dist/connectors/index.js +0 -5
- package/dist/connectors/index.js.map +0 -1
- package/dist/connectors/types.d.ts +0 -20
- package/dist/connectors/types.d.ts.map +0 -1
- package/dist/connectors/types.js +0 -5
- package/dist/connectors/types.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ProtocolMessage, type TransportAck, type TransportErrorResponse } from "../protocol/index.js";
|
|
2
|
+
export type TransportResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
ack: TransportAck;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: TransportErrorResponse;
|
|
8
|
+
status: number;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
error: {
|
|
12
|
+
error_code: "network_error";
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export interface TransportClientOptions {
|
|
17
|
+
agentId: string;
|
|
18
|
+
getSharedSecret: (targetAgentId: string) => Promise<string>;
|
|
19
|
+
maxRetries?: number;
|
|
20
|
+
initialDelayMs?: number;
|
|
21
|
+
maxDelayMs?: number;
|
|
22
|
+
resolveTargetAgentId?: (endpoint: string, message: ProtocolMessage) => string;
|
|
23
|
+
}
|
|
24
|
+
export interface TransportSendOptions {
|
|
25
|
+
targetAgentId?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare class ProtocolTransportClient {
|
|
28
|
+
private readonly options;
|
|
29
|
+
constructor(options: TransportClientOptions);
|
|
30
|
+
send(endpoint: string, message: ProtocolMessage, options?: TransportSendOptions): Promise<TransportResult>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/transport/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAA;AAO7B,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAE1E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,KAAK,MAAM,CAAA;CAC9E;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AA8DD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CACqC;gBAEjD,OAAO,EAAE,sBAAsB;IAcrC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;CA2FrH"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { TransportAckSchema, TransportErrorResponseSchema, parseProtocolMessageSafe, } from "../protocol/index.js";
|
|
2
|
+
import { signPayload } from "./hmac.js";
|
|
3
|
+
const DEFAULT_MAX_RETRIES = 5;
|
|
4
|
+
const DEFAULT_INITIAL_DELAY_MS = 5000;
|
|
5
|
+
const DEFAULT_MAX_DELAY_MS = 60000;
|
|
6
|
+
function sanitizeTransportError(status, data) {
|
|
7
|
+
const parsed = TransportErrorResponseSchema.safeParse(data);
|
|
8
|
+
if (parsed.success) {
|
|
9
|
+
return parsed.data;
|
|
10
|
+
}
|
|
11
|
+
if (status === 401) {
|
|
12
|
+
return { error_code: "unauthorized", message: "Unauthorized" };
|
|
13
|
+
}
|
|
14
|
+
if (status === 409) {
|
|
15
|
+
return { error_code: "conflict", message: "Duplicate message" };
|
|
16
|
+
}
|
|
17
|
+
if (status === 429) {
|
|
18
|
+
return { error_code: "rate_limited", message: "Rate limited" };
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
error_code: status >= 500 ? "internal_error" : "bad_request",
|
|
22
|
+
message: status >= 500 ? "Transport server error" : "Transport request failed",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async function parseJson(response) {
|
|
26
|
+
const text = await response.text();
|
|
27
|
+
if (!text) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(text);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function parseRetryAfterMs(response) {
|
|
38
|
+
const header = response.headers.get("retry-after");
|
|
39
|
+
if (!header) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const asSeconds = Number.parseInt(header, 10);
|
|
43
|
+
if (Number.isFinite(asSeconds)) {
|
|
44
|
+
return Math.max(0, asSeconds * 1000);
|
|
45
|
+
}
|
|
46
|
+
const asDate = Date.parse(header);
|
|
47
|
+
if (Number.isNaN(asDate)) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return Math.max(0, asDate - Date.now());
|
|
51
|
+
}
|
|
52
|
+
function sleep(ms) {
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
setTimeout(resolve, ms);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export class ProtocolTransportClient {
|
|
58
|
+
options;
|
|
59
|
+
constructor(options) {
|
|
60
|
+
this.options = {
|
|
61
|
+
...options,
|
|
62
|
+
maxRetries: options.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
63
|
+
initialDelayMs: options.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS,
|
|
64
|
+
maxDelayMs: options.maxDelayMs ?? DEFAULT_MAX_DELAY_MS,
|
|
65
|
+
resolveTargetAgentId: options.resolveTargetAgentId ??
|
|
66
|
+
((endpoint) => {
|
|
67
|
+
return endpoint;
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async send(endpoint, message, options = {}) {
|
|
72
|
+
const parsed = parseProtocolMessageSafe(message);
|
|
73
|
+
if (!parsed.ok) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
status: 400,
|
|
77
|
+
error: {
|
|
78
|
+
error_code: "bad_request",
|
|
79
|
+
message: parsed.error.message,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (parsed.message.sender_agent_id !== this.options.agentId) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
status: 400,
|
|
87
|
+
error: {
|
|
88
|
+
error_code: "bad_request",
|
|
89
|
+
message: "message.sender_agent_id must match client agentId",
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const body = JSON.stringify(parsed.message);
|
|
94
|
+
const timestamp = new Date().toISOString();
|
|
95
|
+
const targetAgentId = options.targetAgentId ?? this.options.resolveTargetAgentId(endpoint, parsed.message);
|
|
96
|
+
const sharedSecret = await this.options.getSharedSecret(targetAgentId);
|
|
97
|
+
const signature = await signPayload(this.options.agentId, timestamp, body, sharedSecret);
|
|
98
|
+
let retries = 0;
|
|
99
|
+
let delayMs = this.options.initialDelayMs;
|
|
100
|
+
while (true) {
|
|
101
|
+
try {
|
|
102
|
+
const response = await fetch(endpoint, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: {
|
|
105
|
+
"content-type": "application/json",
|
|
106
|
+
"x-artemys-message-id": parsed.message.message_id,
|
|
107
|
+
"x-artemys-timestamp": timestamp,
|
|
108
|
+
"x-artemys-sender-agent-id": this.options.agentId,
|
|
109
|
+
"x-artemys-signature": signature,
|
|
110
|
+
},
|
|
111
|
+
body,
|
|
112
|
+
});
|
|
113
|
+
if (response.status === 202) {
|
|
114
|
+
const json = await parseJson(response);
|
|
115
|
+
const ack = TransportAckSchema.parse(json);
|
|
116
|
+
return { ok: true, ack };
|
|
117
|
+
}
|
|
118
|
+
if (response.status === 429 && retries < this.options.maxRetries) {
|
|
119
|
+
const retryAfterMs = parseRetryAfterMs(response);
|
|
120
|
+
await sleep(retryAfterMs ?? delayMs);
|
|
121
|
+
retries += 1;
|
|
122
|
+
delayMs = Math.min(this.options.maxDelayMs, delayMs * 2);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (response.status >= 500 && retries < this.options.maxRetries) {
|
|
126
|
+
await sleep(delayMs);
|
|
127
|
+
retries += 1;
|
|
128
|
+
delayMs = Math.min(this.options.maxDelayMs, delayMs * 2);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const errorJson = await parseJson(response);
|
|
132
|
+
return {
|
|
133
|
+
ok: false,
|
|
134
|
+
status: response.status,
|
|
135
|
+
error: sanitizeTransportError(response.status, errorJson),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (retries >= this.options.maxRetries) {
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
error: {
|
|
143
|
+
error_code: "network_error",
|
|
144
|
+
message: error instanceof Error ? error.message : "Unknown network error",
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
await sleep(delayMs);
|
|
149
|
+
retries += 1;
|
|
150
|
+
delayMs = Math.min(this.options.maxDelayMs, delayMs * 2);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/transport/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,GAIzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAC7B,MAAM,wBAAwB,GAAG,IAAI,CAAA;AACrC,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAoBlC,SAAS,sBAAsB,CAAC,MAAc,EAAE,IAAa;IAC3D,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;IAChE,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAA;IACjE,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;IAChE,CAAC;IAED,OAAO;QACL,UAAU,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa;QAC5D,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B;KAC/E,CAAA;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAkB;IACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,uBAAuB;IACjB,OAAO,CACqC;IAE7D,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,OAAO;YACV,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,mBAAmB;YACrD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,wBAAwB;YAClE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,oBAAoB;YACtD,oBAAoB,EAClB,OAAO,CAAC,oBAAoB;gBAC5B,CAAC,CAAC,QAAgB,EAAU,EAAE;oBAC5B,OAAO,QAAQ,CAAA;gBACjB,CAAC,CAAC;SACL,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAwB,EAAE,UAAgC,EAAE;QACvF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE;oBACL,UAAU,EAAE,aAAa;oBACzB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;iBAC9B;aACF,CAAA;QACH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5D,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE;oBACL,UAAU,EAAE,aAAa;oBACzB,OAAO,EAAE,mDAAmD;iBAC7D;aACF,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1G,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;QAExF,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;QAEzC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;oBACrC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;wBACjD,qBAAqB,EAAE,SAAS;wBAChC,2BAA2B,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;wBACjD,qBAAqB,EAAE,SAAS;qBACjC;oBACD,IAAI;iBACL,CAAC,CAAA;gBAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAA;oBACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;gBAC1B,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACjE,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;oBAChD,MAAM,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,CAAA;oBACpC,OAAO,IAAI,CAAC,CAAA;oBACZ,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;oBACxD,SAAQ;gBACV,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBAChE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;oBACpB,OAAO,IAAI,CAAC,CAAA;oBACZ,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;oBACxD,SAAQ;gBACV,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAA;gBAC3C,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;iBAC1D,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACvC,OAAO;wBACL,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE;4BACL,UAAU,EAAE,eAAe;4BAC3B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;yBAC1E;qBACF,CAAA;gBACH,CAAC;gBAED,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;gBACpB,OAAO,IAAI,CAAC,CAAA;gBACZ,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class MessageDeduplicationCache {
|
|
2
|
+
private readonly ttlMs;
|
|
3
|
+
private readonly entries;
|
|
4
|
+
constructor(ttlMs?: number);
|
|
5
|
+
has(senderAgentId: string, messageId: string): boolean;
|
|
6
|
+
add(senderAgentId: string, messageId: string): void;
|
|
7
|
+
private evictExpired;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dedup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/transport/dedup.ts"],"names":[],"mappings":"AAMA,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,KAAK,SAAiB;IAIlC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAetD,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnD,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const DEFAULT_TTL_MS = 15 * 60 * 1000;
|
|
2
|
+
function makeKey(senderAgentId, messageId) {
|
|
3
|
+
return `${senderAgentId}:${messageId}`;
|
|
4
|
+
}
|
|
5
|
+
export class MessageDeduplicationCache {
|
|
6
|
+
ttlMs;
|
|
7
|
+
entries = new Map();
|
|
8
|
+
constructor(ttlMs = DEFAULT_TTL_MS) {
|
|
9
|
+
this.ttlMs = ttlMs;
|
|
10
|
+
}
|
|
11
|
+
has(senderAgentId, messageId) {
|
|
12
|
+
const key = makeKey(senderAgentId, messageId);
|
|
13
|
+
const expiresAt = this.entries.get(key);
|
|
14
|
+
if (!expiresAt) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (expiresAt <= Date.now()) {
|
|
18
|
+
this.entries.delete(key);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
add(senderAgentId, messageId) {
|
|
24
|
+
this.evictExpired();
|
|
25
|
+
this.entries.set(makeKey(senderAgentId, messageId), Date.now() + this.ttlMs);
|
|
26
|
+
}
|
|
27
|
+
evictExpired() {
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
for (const [key, expiresAt] of this.entries.entries()) {
|
|
30
|
+
if (expiresAt <= now) {
|
|
31
|
+
this.entries.delete(key);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=dedup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/transport/dedup.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAErC,SAAS,OAAO,CAAC,aAAqB,EAAE,SAAiB;IACvD,OAAO,GAAG,aAAa,IAAI,SAAS,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,OAAO,yBAAyB;IACnB,KAAK,CAAQ;IACb,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEpD,YAAY,KAAK,GAAG,cAAc;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,aAAqB,EAAE,SAAiB;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,aAAqB,EAAE,SAAiB;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9E,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ProtocolMessage } from "../protocol/index.js";
|
|
2
|
+
export interface ProtocolHandlerOptions {
|
|
3
|
+
getSharedSecret: (senderAgentId: string) => Promise<string | null>;
|
|
4
|
+
onMessage: (message: ProtocolMessage, senderAgentId: string) => Promise<void>;
|
|
5
|
+
maxBodySize?: number;
|
|
6
|
+
replayWindowMs?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createProtocolHandler(options: ProtocolHandlerOptions): (request: Request) => Promise<Response>;
|
|
9
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/transport/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAA;AAO7B,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClE,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAwCD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmF9G"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { TransportAckSchema, parseProtocolMessageSafe, } from "../protocol/index.js";
|
|
2
|
+
import { MessageDeduplicationCache } from "./dedup.js";
|
|
3
|
+
import { verifyPayload } from "./hmac.js";
|
|
4
|
+
const DEFAULT_MAX_BODY_SIZE = 256 * 1024;
|
|
5
|
+
const DEFAULT_REPLAY_WINDOW_MS = 5 * 60 * 1000;
|
|
6
|
+
function jsonResponse(status, payload) {
|
|
7
|
+
return new Response(JSON.stringify(payload), {
|
|
8
|
+
status,
|
|
9
|
+
headers: { "content-type": "application/json" },
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function errorResponse(status, errorCode, message, details) {
|
|
13
|
+
return jsonResponse(status, {
|
|
14
|
+
error_code: errorCode,
|
|
15
|
+
message,
|
|
16
|
+
...(details ? { details } : {}),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function requireHeader(request, name) {
|
|
20
|
+
const value = request.headers.get(name);
|
|
21
|
+
if (!value) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const trimmed = value.trim();
|
|
25
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
26
|
+
}
|
|
27
|
+
function isTimestampFresh(timestamp, replayWindowMs) {
|
|
28
|
+
const parsed = Date.parse(timestamp);
|
|
29
|
+
if (Number.isNaN(parsed)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return Math.abs(Date.now() - parsed) <= replayWindowMs;
|
|
33
|
+
}
|
|
34
|
+
export function createProtocolHandler(options) {
|
|
35
|
+
const maxBodySize = options.maxBodySize ?? DEFAULT_MAX_BODY_SIZE;
|
|
36
|
+
const replayWindowMs = options.replayWindowMs ?? DEFAULT_REPLAY_WINDOW_MS;
|
|
37
|
+
const dedupCache = new MessageDeduplicationCache();
|
|
38
|
+
return async function protocolHandler(request) {
|
|
39
|
+
if (request.method !== "POST") {
|
|
40
|
+
return new Response("Method Not Allowed", { status: 405 });
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const contentLengthHeader = request.headers.get("content-length");
|
|
44
|
+
if (contentLengthHeader) {
|
|
45
|
+
const contentLength = Number.parseInt(contentLengthHeader, 10);
|
|
46
|
+
if (Number.isFinite(contentLength) && contentLength > maxBodySize) {
|
|
47
|
+
return errorResponse(400, "bad_request", "Request body exceeds maximum allowed size");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const body = await request.text();
|
|
51
|
+
if (new TextEncoder().encode(body).byteLength > maxBodySize) {
|
|
52
|
+
return errorResponse(400, "bad_request", "Request body exceeds maximum allowed size");
|
|
53
|
+
}
|
|
54
|
+
const senderAgentId = requireHeader(request, "X-Artemys-Sender-Agent-Id");
|
|
55
|
+
const timestamp = requireHeader(request, "X-Artemys-Timestamp");
|
|
56
|
+
const signature = requireHeader(request, "X-Artemys-Signature");
|
|
57
|
+
const headerMessageId = requireHeader(request, "X-Artemys-Message-Id");
|
|
58
|
+
if (!senderAgentId || !timestamp || !signature || !headerMessageId) {
|
|
59
|
+
return errorResponse(401, "unauthorized", "Missing required authentication headers");
|
|
60
|
+
}
|
|
61
|
+
if (!isTimestampFresh(timestamp, replayWindowMs)) {
|
|
62
|
+
return errorResponse(401, "unauthorized", "Request timestamp is outside replay window");
|
|
63
|
+
}
|
|
64
|
+
const sharedSecret = await options.getSharedSecret(senderAgentId);
|
|
65
|
+
if (!sharedSecret) {
|
|
66
|
+
return errorResponse(401, "unauthorized", "Unknown sender");
|
|
67
|
+
}
|
|
68
|
+
const isValid = await verifyPayload(senderAgentId, timestamp, body, signature, sharedSecret);
|
|
69
|
+
if (!isValid) {
|
|
70
|
+
return errorResponse(401, "unauthorized", "Invalid signature");
|
|
71
|
+
}
|
|
72
|
+
if (dedupCache.has(senderAgentId, headerMessageId)) {
|
|
73
|
+
return errorResponse(409, "conflict", "Duplicate message_id for sender");
|
|
74
|
+
}
|
|
75
|
+
let rawMessage;
|
|
76
|
+
try {
|
|
77
|
+
rawMessage = JSON.parse(body);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return errorResponse(400, "bad_request", "Body is not valid JSON");
|
|
81
|
+
}
|
|
82
|
+
const parsed = parseProtocolMessageSafe(rawMessage);
|
|
83
|
+
if (!parsed.ok) {
|
|
84
|
+
return errorResponse(400, "bad_request", parsed.error.message);
|
|
85
|
+
}
|
|
86
|
+
if (parsed.message.sender_agent_id !== senderAgentId) {
|
|
87
|
+
return errorResponse(401, "unauthorized", "sender_agent_id does not match header");
|
|
88
|
+
}
|
|
89
|
+
if (parsed.message.message_id !== headerMessageId) {
|
|
90
|
+
return errorResponse(400, "bad_request", "message_id does not match header");
|
|
91
|
+
}
|
|
92
|
+
await options.onMessage(parsed.message, senderAgentId);
|
|
93
|
+
dedupCache.add(senderAgentId, parsed.message.message_id);
|
|
94
|
+
const ack = TransportAckSchema.parse({
|
|
95
|
+
received: true,
|
|
96
|
+
message_id: parsed.message.message_id,
|
|
97
|
+
});
|
|
98
|
+
return jsonResponse(202, ack);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return errorResponse(500, "internal_error", "Internal server error");
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/transport/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function signPayload(senderAgentId: string, timestamp: string, body: string, secret: string): Promise<string>;
|
|
2
|
+
export declare function verifyPayload(senderAgentId: string, timestamp: string, body: string, signature: string, secret: string): Promise<boolean>;
|
|
3
|
+
//# sourceMappingURL=hmac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmac.d.ts","sourceRoot":"","sources":["../../src/transport/hmac.ts"],"names":[],"mappings":"AAuCA,wBAAsB,WAAW,CAC/B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAalB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const encoder = new TextEncoder();
|
|
2
|
+
function getSubtleCrypto() {
|
|
3
|
+
if (!globalThis.crypto?.subtle) {
|
|
4
|
+
throw new Error("Web Crypto API is not available in this runtime");
|
|
5
|
+
}
|
|
6
|
+
return globalThis.crypto.subtle;
|
|
7
|
+
}
|
|
8
|
+
function toHex(buffer) {
|
|
9
|
+
return Array.from(new Uint8Array(buffer), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
10
|
+
}
|
|
11
|
+
function fromHex(hex) {
|
|
12
|
+
if (hex.length % 2 !== 0) {
|
|
13
|
+
throw new Error("Invalid hex string");
|
|
14
|
+
}
|
|
15
|
+
const bytes = new Uint8Array(new ArrayBuffer(hex.length / 2));
|
|
16
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
17
|
+
bytes[i / 2] = Number.parseInt(hex.slice(i, i + 2), 16);
|
|
18
|
+
}
|
|
19
|
+
return bytes;
|
|
20
|
+
}
|
|
21
|
+
async function importHmacKey(secret, usage) {
|
|
22
|
+
return await getSubtleCrypto().importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, [usage]);
|
|
23
|
+
}
|
|
24
|
+
function buildPayload(senderAgentId, timestamp, body) {
|
|
25
|
+
return `${senderAgentId}.${timestamp}.${body}`;
|
|
26
|
+
}
|
|
27
|
+
export async function signPayload(senderAgentId, timestamp, body, secret) {
|
|
28
|
+
const key = await importHmacKey(secret, "sign");
|
|
29
|
+
const payload = buildPayload(senderAgentId, timestamp, body);
|
|
30
|
+
const signature = await getSubtleCrypto().sign("HMAC", key, encoder.encode(payload));
|
|
31
|
+
return toHex(signature);
|
|
32
|
+
}
|
|
33
|
+
export async function verifyPayload(senderAgentId, timestamp, body, signature, secret) {
|
|
34
|
+
try {
|
|
35
|
+
const key = await importHmacKey(secret, "verify");
|
|
36
|
+
const payload = buildPayload(senderAgentId, timestamp, body);
|
|
37
|
+
return await getSubtleCrypto().verify("HMAC", key, fromHex(signature), encoder.encode(payload));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=hmac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmac.js","sourceRoot":"","sources":["../../src/transport/hmac.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { signPayload, verifyPayload } from "./hmac.js";
|
|
2
|
+
export { ProtocolTransportClient, type TransportClientOptions, type TransportResult, type TransportSendOptions, } from "./client.js";
|
|
3
|
+
export { createProtocolHandler, type ProtocolHandlerOptions } from "./handler.js";
|
|
4
|
+
export { MessageDeduplicationCache } from "./dedup.js";
|
|
5
|
+
export { runReferenceConversation, type ReferenceRunnerOptions, type ReferenceRunnerResult, type ReferenceRunnerScenario, } from "./reference-runner.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEtD,OAAO,EACL,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAEjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { signPayload, verifyPayload } from "./hmac.js";
|
|
2
|
+
export { ProtocolTransportClient, } from "./client.js";
|
|
3
|
+
export { createProtocolHandler } from "./handler.js";
|
|
4
|
+
export { MessageDeduplicationCache } from "./dedup.js";
|
|
5
|
+
export { runReferenceConversation, } from "./reference-runner.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEtD,OAAO,EACL,uBAAuB,GAIxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,qBAAqB,EAA+B,MAAM,cAAc,CAAA;AAEjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EACL,wBAAwB,GAIzB,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ConversationTracker } from "../mcp-server/state.js";
|
|
2
|
+
import { type ProtocolMessage } from "../protocol/index.js";
|
|
3
|
+
import { type SessionBootstrap } from "../discovery/index.js";
|
|
4
|
+
export type ReferenceRunnerScenario = "happy_path" | "timeout_deferred";
|
|
5
|
+
export interface ReferenceRunnerOptions {
|
|
6
|
+
scenario?: ReferenceRunnerScenario;
|
|
7
|
+
responseTimeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ReferenceRunnerResult {
|
|
10
|
+
scenario: ReferenceRunnerScenario;
|
|
11
|
+
discovery: {
|
|
12
|
+
requester_agent_id: string;
|
|
13
|
+
discovered_target_agent_id: string;
|
|
14
|
+
};
|
|
15
|
+
intro: {
|
|
16
|
+
intro_id: string;
|
|
17
|
+
bootstrap: SessionBootstrap;
|
|
18
|
+
};
|
|
19
|
+
transport_receipts: Array<{
|
|
20
|
+
message_id: string;
|
|
21
|
+
sender_agent_id: string;
|
|
22
|
+
receiver_endpoint: string;
|
|
23
|
+
status: 202;
|
|
24
|
+
}>;
|
|
25
|
+
semantic_replies: Array<{
|
|
26
|
+
trigger_message_id: string;
|
|
27
|
+
reply_message_id: string;
|
|
28
|
+
}>;
|
|
29
|
+
transcript: ProtocolMessage[];
|
|
30
|
+
final_state: ReturnType<ConversationTracker["getState"]>;
|
|
31
|
+
timeout_policy: {
|
|
32
|
+
response_timeout_ms: number;
|
|
33
|
+
deferred_emitted: boolean;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare function runReferenceConversation(options?: ReferenceRunnerOptions): Promise<ReferenceRunnerResult>;
|
|
37
|
+
//# sourceMappingURL=reference-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-runner.d.ts","sourceRoot":"","sources":["../../src/transport/reference-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACnG,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAIrG,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,kBAAkB,CAAA;AAEvE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,uBAAuB,CAAA;IACjC,SAAS,EAAE;QACT,kBAAkB,EAAE,MAAM,CAAA;QAC1B,0BAA0B,EAAE,MAAM,CAAA;KACnC,CAAA;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,gBAAgB,CAAA;KAC5B,CAAA;IACD,kBAAkB,EAAE,KAAK,CAAC;QACxB,UAAU,EAAE,MAAM,CAAA;QAClB,eAAe,EAAE,MAAM,CAAA;QACvB,iBAAiB,EAAE,MAAM,CAAA;QACzB,MAAM,EAAE,GAAG,CAAA;KACZ,CAAC,CAAA;IACF,gBAAgB,EAAE,KAAK,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAC,CAAA;IACF,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAA;IACxD,cAAc,EAAE;QACd,mBAAmB,EAAE,MAAM,CAAA;QAC3B,gBAAgB,EAAE,OAAO,CAAA;KAC1B,CAAA;CACF;AA6MD,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA0NnH"}
|