@ajna-inc/webrtc 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +143 -17
  3. package/build/index.d.ts +6 -2
  4. package/build/index.js +5 -1
  5. package/build/index.js.map +1 -1
  6. package/build/webrtc/WebRTCApi.d.ts +94 -5
  7. package/build/webrtc/WebRTCApi.js +107 -4
  8. package/build/webrtc/WebRTCApi.js.map +1 -1
  9. package/build/webrtc/WebRTCEvents.d.ts +87 -5
  10. package/build/webrtc/WebRTCEvents.js +8 -0
  11. package/build/webrtc/WebRTCEvents.js.map +1 -1
  12. package/build/webrtc/WebRTCModule.d.ts +50 -0
  13. package/build/webrtc/WebRTCModule.js +17 -2
  14. package/build/webrtc/WebRTCModule.js.map +1 -1
  15. package/build/webrtc/handlers/RenegotiateHandler.d.ts +9 -0
  16. package/build/webrtc/handlers/RenegotiateHandler.js +31 -0
  17. package/build/webrtc/handlers/RenegotiateHandler.js.map +1 -0
  18. package/build/webrtc/handlers/index.d.ts +1 -0
  19. package/build/webrtc/handlers/index.js +1 -0
  20. package/build/webrtc/handlers/index.js.map +1 -1
  21. package/build/webrtc/messages/AnswerMessage.d.ts +9 -0
  22. package/build/webrtc/messages/AnswerMessage.js +11 -1
  23. package/build/webrtc/messages/AnswerMessage.js.map +1 -1
  24. package/build/webrtc/messages/EndMessage.d.ts +1 -0
  25. package/build/webrtc/messages/EndMessage.js +1 -1
  26. package/build/webrtc/messages/EndMessage.js.map +1 -1
  27. package/build/webrtc/messages/IceMessage.d.ts +1 -0
  28. package/build/webrtc/messages/IceMessage.js +1 -1
  29. package/build/webrtc/messages/IceMessage.js.map +1 -1
  30. package/build/webrtc/messages/OfferMessage.d.ts +29 -1
  31. package/build/webrtc/messages/OfferMessage.js +37 -2
  32. package/build/webrtc/messages/OfferMessage.js.map +1 -1
  33. package/build/webrtc/messages/ProposeMessage.d.ts +51 -0
  34. package/build/webrtc/messages/ProposeMessage.js +48 -2
  35. package/build/webrtc/messages/ProposeMessage.js.map +1 -1
  36. package/build/webrtc/messages/RenegotiateMessage.d.ts +52 -0
  37. package/build/webrtc/messages/RenegotiateMessage.js +65 -0
  38. package/build/webrtc/messages/RenegotiateMessage.js.map +1 -0
  39. package/build/webrtc/messages/index.d.ts +1 -0
  40. package/build/webrtc/messages/index.js +1 -0
  41. package/build/webrtc/messages/index.js.map +1 -1
  42. package/build/webrtc/services/WebRTCService.d.ts +66 -5
  43. package/build/webrtc/services/WebRTCService.js +123 -15
  44. package/build/webrtc/services/WebRTCService.js.map +1 -1
  45. package/package.json +6 -7
@@ -15,6 +15,7 @@ const tsyringe_1 = require("tsyringe");
15
15
  const core_2 = require("@credo-ts/core");
16
16
  const WebRTCService_1 = require("./services/WebRTCService");
17
17
  const handlers_1 = require("./handlers");
18
+ const WebRTCModule_1 = require("./WebRTCModule");
18
19
  let WebRTCApi = class WebRTCApi {
19
20
  constructor(connectionService, messageSender, webrtcService, agentContext) {
20
21
  this.connectionService = connectionService;
@@ -27,15 +28,71 @@ let WebRTCApi = class WebRTCApi {
27
28
  new handlers_1.OfferHandler(this.webrtcService),
28
29
  new handlers_1.AnswerHandler(this.webrtcService),
29
30
  new handlers_1.IceHandler(this.webrtcService),
31
+ new handlers_1.RenegotiateHandler(this.webrtcService),
30
32
  new handlers_1.EndHandler(this.webrtcService),
31
33
  new handlers_1.ProposeHandler(this.webrtcService),
32
34
  ]);
33
35
  return true;
34
36
  })();
37
+ // Get config from dependency manager, with fallback defaults
38
+ try {
39
+ this.config = this.agentContext.dependencyManager.resolve(WebRTCModule_1.WebRTCModuleConfigToken);
40
+ }
41
+ catch {
42
+ this.config = {
43
+ iceServers: [
44
+ { urls: 'stun:stun.l.google.com:19302' },
45
+ { urls: 'stun:stun1.l.google.com:19302' },
46
+ ],
47
+ defaultPolicy: 'all',
48
+ defaultTrickle: true,
49
+ };
50
+ }
35
51
  }
52
+ /**
53
+ * Get the configured default ICE servers
54
+ */
55
+ getDefaultIceServers() {
56
+ return this.config.iceServers;
57
+ }
58
+ /**
59
+ * Propose a call to a peer (before sending offer)
60
+ * This allows sharing ICE servers and negotiating capabilities before the SDP exchange
61
+ */
62
+ async proposeCall(options) {
63
+ const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
64
+ // Use module defaults for missing options
65
+ const iceServers = options.iceServers ?? this.config.iceServers;
66
+ const policy = options.policy ?? this.config.defaultPolicy;
67
+ const trickle = options.trickle ?? this.config.defaultTrickle;
68
+ const { message } = this.webrtcService.createPropose({
69
+ threadId: options.threadId,
70
+ parentThreadId: options.parentThreadId,
71
+ media: options.media,
72
+ data: options.data,
73
+ topology: options.topology ?? 'mesh',
74
+ trickle,
75
+ policy,
76
+ iceServers,
77
+ reason: options.reason,
78
+ });
79
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
80
+ message,
81
+ connectionRecord: connection,
82
+ });
83
+ await this.messageSender.sendMessage(outbound);
84
+ return { threadId: message.threadId ?? message.id };
85
+ }
86
+ /**
87
+ * Start a call by sending an SDP offer
88
+ */
36
89
  async startCall(options) {
37
90
  const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
38
- const { message, record } = this.webrtcService.createOffer(this.agentContext, connection, options.threadId, options.sdp, options.iceServers);
91
+ // Use module defaults for missing options
92
+ const iceServers = options.iceServers ?? this.config.iceServers;
93
+ const policy = options.policy ?? this.config.defaultPolicy;
94
+ const trickle = options.trickle ?? this.config.defaultTrickle;
95
+ const { message, record } = this.webrtcService.createOffer(this.agentContext, connection, options.threadId, options.parentThreadId, options.sdp, iceServers, policy, trickle);
39
96
  const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
40
97
  message,
41
98
  associatedRecord: record,
@@ -44,27 +101,73 @@ let WebRTCApi = class WebRTCApi {
44
101
  await this.messageSender.sendMessage(outbound);
45
102
  return record;
46
103
  }
104
+ /**
105
+ * Accept a call by sending an SDP answer
106
+ */
47
107
  async acceptCall(options) {
48
108
  const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
49
- const { message } = this.webrtcService.createAnswer(this.agentContext, connection, options.threadId, options.sdp);
109
+ const { message } = this.webrtcService.createAnswer(this.agentContext, connection, options.threadId, options.parentThreadId, options.sdp, options.iceServers);
50
110
  const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
51
111
  message,
52
112
  connectionRecord: connection,
53
113
  });
54
114
  await this.messageSender.sendMessage(outbound);
55
115
  }
116
+ /**
117
+ * Send an ICE candidate
118
+ */
56
119
  async sendIce(options) {
57
120
  const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
58
- const message = this.webrtcService.createIce(options.threadId, options.candidate, options.endOfCandidates);
121
+ const message = this.webrtcService.createIce(options.threadId, options.parentThreadId, options.candidate, options.endOfCandidates);
59
122
  const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
60
123
  message,
61
124
  connectionRecord: connection,
62
125
  });
63
126
  await this.messageSender.sendMessage(outbound);
64
127
  }
128
+ /**
129
+ * Request renegotiation (for ICE restart, adding/removing tracks, etc.)
130
+ *
131
+ * Use this when:
132
+ * - ICE connection failed and needs restart
133
+ * - Adding screenshare or switching cameras
134
+ * - Network changed (WiFi to cellular)
135
+ * - Changing codec or bandwidth settings
136
+ */
137
+ async renegotiate(options) {
138
+ const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
139
+ const message = this.webrtcService.createRenegotiate({
140
+ threadId: options.threadId,
141
+ parentThreadId: options.parentThreadId,
142
+ reason: options.reason,
143
+ iceRestart: options.iceRestart,
144
+ iceServers: options.iceServers,
145
+ policy: options.policy,
146
+ });
147
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
148
+ message,
149
+ connectionRecord: connection,
150
+ });
151
+ await this.messageSender.sendMessage(outbound);
152
+ }
153
+ /**
154
+ * Request ICE restart (convenience method for renegotiate with iceRestart=true)
155
+ *
156
+ * Use when the WebRTC connection has failed or disconnected
157
+ */
158
+ async restartIce(options) {
159
+ return this.renegotiate({
160
+ ...options,
161
+ reason: 'ice-restart',
162
+ iceRestart: true,
163
+ });
164
+ }
165
+ /**
166
+ * End a call
167
+ */
65
168
  async endCall(options) {
66
169
  const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
67
- const message = this.webrtcService.createEnd(options.threadId, options.reason);
170
+ const message = this.webrtcService.createEnd(options.threadId, options.parentThreadId, options.reason);
68
171
  const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
69
172
  message,
70
173
  connectionRecord: connection,
@@ -1 +1 @@
1
- {"version":3,"file":"WebRTCApi.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebRTCApi.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCApi.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,110 @@
1
1
  import type { InboundMessageContext } from '@credo-ts/core';
2
+ import type { IcePolicy } from './messages/OfferMessage';
3
+ import type { MediaType } from './messages/ProposeMessage';
4
+ import type { RenegotiateReason } from './messages/RenegotiateMessage';
2
5
  export declare enum WebRTCEvents {
6
+ /** Incoming call proposal (before offer) */
7
+ IncomingPropose = "WebRTCEvents.IncomingPropose",
8
+ /** Incoming SDP offer */
3
9
  IncomingOffer = "WebRTCEvents.IncomingOffer",
10
+ /** Incoming SDP answer */
4
11
  IncomingAnswer = "WebRTCEvents.IncomingAnswer",
12
+ /** Incoming ICE candidate */
5
13
  IncomingIce = "WebRTCEvents.IncomingIce",
14
+ /** Renegotiation requested (track changes, ICE restart) */
15
+ RenegotiateRequested = "WebRTCEvents.RenegotiateRequested",
16
+ /** Call ended */
6
17
  CallEnded = "WebRTCEvents.CallEnded"
7
18
  }
19
+ /**
20
+ * ICE server configuration in events
21
+ */
22
+ export interface IceServerEventConfig {
23
+ urls: string | string[];
24
+ username?: string;
25
+ credential?: string;
26
+ credentialType?: 'password' | 'oauth';
27
+ }
28
+ /**
29
+ * Event emitted when a call proposal is received
30
+ */
31
+ export interface IncomingProposeEvent {
32
+ context: InboundMessageContext;
33
+ thid: string;
34
+ pthid?: string;
35
+ /** Requested media types */
36
+ media?: MediaType[];
37
+ /** Whether data channel is requested */
38
+ data?: boolean;
39
+ /** Topology: 'mesh' or 'sfu' */
40
+ topology?: 'mesh' | 'sfu';
41
+ /** Whether trickle ICE is supported */
42
+ trickle?: boolean;
43
+ /** ICE policy */
44
+ policy?: IcePolicy;
45
+ /** ICE servers for NAT traversal */
46
+ iceServers?: IceServerEventConfig[];
47
+ /** Optional reason/context */
48
+ reason?: string;
49
+ }
50
+ /**
51
+ * Event emitted when an SDP offer is received
52
+ */
8
53
  export interface IncomingOfferEvent {
9
54
  context: InboundMessageContext;
10
55
  thid: string;
56
+ pthid?: string;
11
57
  sdp: string;
12
- iceServers?: Array<{
13
- urls: string | string[];
14
- username?: string;
15
- credential?: string;
16
- }>;
58
+ /** ICE servers for NAT traversal */
59
+ iceServers?: IceServerEventConfig[];
60
+ /** ICE policy */
61
+ policy?: IcePolicy;
62
+ /** Whether trickle ICE is enabled */
63
+ trickle?: boolean;
17
64
  }
65
+ /**
66
+ * Event emitted when an SDP answer is received
67
+ */
18
68
  export interface IncomingAnswerEvent {
19
69
  context: InboundMessageContext;
20
70
  thid: string;
71
+ pthid?: string;
21
72
  sdp: string;
73
+ /** Optional ICE servers from callee */
74
+ iceServers?: IceServerEventConfig[];
22
75
  }
76
+ /**
77
+ * Event emitted when an ICE candidate is received
78
+ */
23
79
  export interface IncomingIceEvent {
24
80
  context: InboundMessageContext;
25
81
  thid: string;
82
+ pthid?: string;
26
83
  candidate: Record<string, unknown>;
27
84
  endOfCandidates?: boolean;
28
85
  }
86
+ /**
87
+ * Event emitted when renegotiation is requested
88
+ */
89
+ export interface RenegotiateRequestedEvent {
90
+ context: InboundMessageContext;
91
+ thid: string;
92
+ pthid?: string;
93
+ /** Reason for renegotiation */
94
+ reason: RenegotiateReason | string;
95
+ /** Whether ICE restart is requested */
96
+ iceRestart?: boolean;
97
+ /** New ICE servers (if changed) */
98
+ iceServers?: IceServerEventConfig[];
99
+ /** Updated ICE policy */
100
+ policy?: IcePolicy;
101
+ }
102
+ /**
103
+ * Event emitted when a call ends
104
+ */
105
+ export interface CallEndedEvent {
106
+ context: InboundMessageContext;
107
+ thid: string;
108
+ pthid?: string;
109
+ reason?: string;
110
+ }
@@ -3,9 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WebRTCEvents = void 0;
4
4
  var WebRTCEvents;
5
5
  (function (WebRTCEvents) {
6
+ /** Incoming call proposal (before offer) */
7
+ WebRTCEvents["IncomingPropose"] = "WebRTCEvents.IncomingPropose";
8
+ /** Incoming SDP offer */
6
9
  WebRTCEvents["IncomingOffer"] = "WebRTCEvents.IncomingOffer";
10
+ /** Incoming SDP answer */
7
11
  WebRTCEvents["IncomingAnswer"] = "WebRTCEvents.IncomingAnswer";
12
+ /** Incoming ICE candidate */
8
13
  WebRTCEvents["IncomingIce"] = "WebRTCEvents.IncomingIce";
14
+ /** Renegotiation requested (track changes, ICE restart) */
15
+ WebRTCEvents["RenegotiateRequested"] = "WebRTCEvents.RenegotiateRequested";
16
+ /** Call ended */
9
17
  WebRTCEvents["CallEnded"] = "WebRTCEvents.CallEnded";
10
18
  })(WebRTCEvents || (exports.WebRTCEvents = WebRTCEvents = {}));
11
19
  //# sourceMappingURL=WebRTCEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebRTCEvents.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCEvents.ts"],"names":[],"mappings":";;;AAEA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,4DAA4C,CAAA;IAC5C,8DAA8C,CAAA;IAC9C,wDAAwC,CAAA;IACxC,oDAAoC,CAAA;AACtC,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB"}
1
+ {"version":3,"file":"WebRTCEvents.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCEvents.ts"],"names":[],"mappings":";;;AAKA,IAAY,YAaX;AAbD,WAAY,YAAY;IACtB,4CAA4C;IAC5C,gEAAgD,CAAA;IAChD,yBAAyB;IACzB,4DAA4C,CAAA;IAC5C,0BAA0B;IAC1B,8DAA8C,CAAA;IAC9C,6BAA6B;IAC7B,wDAAwC,CAAA;IACxC,2DAA2D;IAC3D,0EAA0D,CAAA;IAC1D,iBAAiB;IACjB,oDAAoC,CAAA;AACtC,CAAC,EAbW,YAAY,4BAAZ,YAAY,QAavB"}
@@ -1,6 +1,56 @@
1
1
  import type { DependencyManager, FeatureRegistry, Module } from '@credo-ts/core';
2
2
  import { WebRTCApi } from './WebRTCApi';
3
+ import type { IcePolicy } from './messages/OfferMessage';
4
+ /**
5
+ * ICE server configuration for module-level defaults
6
+ */
7
+ export interface WebRTCIceServerConfig {
8
+ /** STUN/TURN server URL(s) */
9
+ urls: string | string[];
10
+ /** Username for TURN authentication */
11
+ username?: string;
12
+ /** Credential for TURN authentication */
13
+ credential?: string;
14
+ /** Credential type */
15
+ credentialType?: 'password' | 'oauth';
16
+ }
17
+ /**
18
+ * Configuration options for WebRTCModule
19
+ */
20
+ export interface WebRTCModuleConfig {
21
+ /**
22
+ * Default ICE servers (STUN/TURN) to use for all calls
23
+ * These are used when no iceServers are provided in API calls
24
+ *
25
+ * Example:
26
+ * ```ts
27
+ * iceServers: [
28
+ * { urls: 'stun:stun.l.google.com:19302' },
29
+ * { urls: 'turn:turn.example.org:3478', username: 'user', credential: 'pass' }
30
+ * ]
31
+ * ```
32
+ */
33
+ iceServers?: WebRTCIceServerConfig[];
34
+ /**
35
+ * Default ICE policy for NAT traversal
36
+ * - 'all': Use all available candidates (default)
37
+ * - 'relay-preferred': Prefer relay candidates but allow others
38
+ * - 'relay-only': Only use relay (TURN) candidates - best for strict NAT/firewall
39
+ */
40
+ defaultPolicy?: IcePolicy;
41
+ /**
42
+ * Whether to enable trickle ICE by default
43
+ * @default true
44
+ */
45
+ defaultTrickle?: boolean;
46
+ }
47
+ /**
48
+ * Injection token for WebRTC module configuration
49
+ */
50
+ export declare const WebRTCModuleConfigToken: unique symbol;
3
51
  export declare class WebRTCModule implements Module {
4
52
  readonly api: typeof WebRTCApi;
53
+ readonly config: WebRTCModuleConfig;
54
+ constructor(config?: WebRTCModuleConfig);
5
55
  register(dependencyManager: DependencyManager, featureRegistry: FeatureRegistry): void;
6
56
  }
@@ -1,15 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebRTCModule = void 0;
3
+ exports.WebRTCModule = exports.WebRTCModuleConfigToken = void 0;
4
4
  const core_1 = require("@credo-ts/core");
5
5
  const WebRTCApi_1 = require("./WebRTCApi");
6
6
  const WebRTCCallRepository_1 = require("./repository/WebRTCCallRepository");
7
7
  const WebRTCService_1 = require("./services/WebRTCService");
8
+ /**
9
+ * Injection token for WebRTC module configuration
10
+ */
11
+ exports.WebRTCModuleConfigToken = Symbol('WebRTCModuleConfig');
8
12
  class WebRTCModule {
9
- constructor() {
13
+ constructor(config = {}) {
10
14
  this.api = WebRTCApi_1.WebRTCApi;
15
+ this.config = {
16
+ iceServers: config.iceServers ?? [
17
+ // Default public STUN servers
18
+ { urls: 'stun:stun.l.google.com:19302' },
19
+ { urls: 'stun:stun1.l.google.com:19302' },
20
+ ],
21
+ defaultPolicy: config.defaultPolicy ?? 'all',
22
+ defaultTrickle: config.defaultTrickle ?? true,
23
+ };
11
24
  }
12
25
  register(dependencyManager, featureRegistry) {
26
+ // Register config for injection
27
+ dependencyManager.registerInstance(exports.WebRTCModuleConfigToken, this.config);
13
28
  // Services & Repo
14
29
  dependencyManager.registerSingleton(WebRTCService_1.WebRTCService);
15
30
  dependencyManager.registerSingleton(WebRTCCallRepository_1.WebRTCCallRepository);
@@ -1 +1 @@
1
- {"version":3,"file":"WebRTCModule.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCModule.ts"],"names":[],"mappings":";;;AAEA,yCAAyC;AAEzC,2CAAuC;AACvC,4EAAwE;AACxE,4DAAwD;AAGxD,MAAa,YAAY;IAAzB;QACkB,QAAG,GAAG,qBAAS,CAAA;IAiBjC,CAAC;IAfQ,QAAQ,CAAC,iBAAoC,EAAE,eAAgC;QACpF,kBAAkB;QAClB,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,CAAA;QAEzD,2FAA2F;QAE3F,+CAA+C;QAC/C,eAAe,CAAC,QAAQ,CACtB,IAAI,eAAQ,CAAC;YACX,EAAE,EAAE,gCAAgC;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAC5B,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAlBD,oCAkBC"}
1
+ {"version":3,"file":"WebRTCModule.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCModule.ts"],"names":[],"mappings":";;;AAEA,yCAAyC;AAEzC,2CAAuC;AACvC,4EAAwE;AACxE,4DAAwD;AAmDxD;;GAEG;AACU,QAAA,uBAAuB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AAEnE,MAAa,YAAY;IAIvB,YAAmB,SAA6B,EAAE;QAHlC,QAAG,GAAG,qBAAS,CAAA;QAI7B,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI;gBAC/B,8BAA8B;gBAC9B,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBACxC,EAAE,IAAI,EAAE,+BAA+B,EAAE;aAC1C;YACD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;YAC5C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;SAC9C,CAAA;IACH,CAAC;IAEM,QAAQ,CAAC,iBAAoC,EAAE,eAAgC;QACpF,gCAAgC;QAChC,iBAAiB,CAAC,gBAAgB,CAAC,+BAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAExE,kBAAkB;QAClB,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,CAAA;QAEzD,2FAA2F;QAE3F,+CAA+C;QAC/C,eAAe,CAAC,QAAQ,CACtB,IAAI,eAAQ,CAAC;YACX,EAAE,EAAE,gCAAgC;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAC5B,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAlCD,oCAkCC"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { RenegotiateMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class RenegotiateHandler implements MessageHandler {
5
+ supportedMessages: (typeof RenegotiateMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<RenegotiateHandler>): Promise<void>;
9
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RenegotiateHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let RenegotiateHandler = class RenegotiateHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.RenegotiateMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processRenegotiate(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.RenegotiateHandler = RenegotiateHandler;
27
+ exports.RenegotiateHandler = RenegotiateHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], RenegotiateHandler);
31
+ //# sourceMappingURL=RenegotiateHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenegotiateHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/RenegotiateHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAAgD;AAChD,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAI7B,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,6BAAkB,CAAC,CAAA;QAI7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAyD;QAC3E,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAM;IACR,CAAC;CACF,CAAA;AAZY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,kBAAkB,CAY9B"}
@@ -1,5 +1,6 @@
1
1
  export * from './OfferHandler';
2
2
  export * from './AnswerHandler';
3
3
  export * from './IceHandler';
4
+ export * from './RenegotiateHandler';
4
5
  export * from './EndHandler';
5
6
  export * from './ProposeHandler';
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./OfferHandler"), exports);
18
18
  __exportStar(require("./AnswerHandler"), exports);
19
19
  __exportStar(require("./IceHandler"), exports);
20
+ __exportStar(require("./RenegotiateHandler"), exports);
20
21
  __exportStar(require("./EndHandler"), exports);
21
22
  __exportStar(require("./ProposeHandler"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,kDAA+B;AAC/B,+CAA4B;AAC5B,+CAA4B;AAC5B,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,kDAA+B;AAC/B,+CAA4B;AAC5B,uDAAoC;AACpC,+CAA4B;AAC5B,mDAAgC"}
@@ -1,8 +1,12 @@
1
1
  import { AgentMessage } from '@credo-ts/core';
2
+ import { IceServerConfig } from './OfferMessage';
2
3
  export interface AnswerMessageOptions {
3
4
  id?: string;
4
5
  threadId: string;
6
+ parentThreadId?: string;
5
7
  sdp: string;
8
+ /** Optional ICE servers from callee (e.g., if callee has better TURN access) */
9
+ iceServers?: IceServerConfig[];
6
10
  jws?: Record<string, unknown>;
7
11
  }
8
12
  export declare class AnswerMessage extends AgentMessage {
@@ -10,5 +14,10 @@ export declare class AnswerMessage extends AgentMessage {
10
14
  readonly type: string;
11
15
  static readonly type: import("@credo-ts/core").ParsedMessageType;
12
16
  sdp: string;
17
+ /**
18
+ * Optional ICE servers from callee
19
+ * Useful when callee has access to different/better TURN servers
20
+ */
21
+ iceServers?: IceServerConfig[];
13
22
  jws?: Record<string, unknown>;
14
23
  }
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AnswerMessage = void 0;
13
13
  const core_1 = require("@credo-ts/core");
14
14
  const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
16
+ const OfferMessage_1 = require("./OfferMessage");
15
17
  class AnswerMessage extends core_1.AgentMessage {
16
18
  constructor(options) {
17
19
  super();
@@ -19,8 +21,9 @@ class AnswerMessage extends core_1.AgentMessage {
19
21
  if (options) {
20
22
  this.id = options.id ?? this.generateId();
21
23
  this.sdp = options.sdp;
24
+ this.iceServers = options.iceServers;
22
25
  this.jws = options.jws;
23
- this.setThread({ threadId: options.threadId });
26
+ this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
24
27
  }
25
28
  }
26
29
  }
@@ -34,6 +37,13 @@ __decorate([
34
37
  (0, class_validator_1.IsString)(),
35
38
  __metadata("design:type", String)
36
39
  ], AnswerMessage.prototype, "sdp", void 0);
40
+ __decorate([
41
+ (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_1.ValidateNested)({ each: true }),
43
+ (0, class_transformer_1.Type)(() => OfferMessage_1.IceServerConfig),
44
+ (0, class_validator_1.IsArray)(),
45
+ __metadata("design:type", Array)
46
+ ], AnswerMessage.prototype, "iceServers", void 0);
37
47
  __decorate([
38
48
  (0, class_validator_1.IsOptional)(),
39
49
  (0, class_validator_1.IsObject)(),
@@ -1 +1 @@
1
- {"version":3,"file":"AnswerMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/AnswerMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAgE;AAShE,MAAa,aAAc,SAAQ,mBAAY;IAC7C,YAAmB,OAA6B;QAC9C,KAAK,EAAE,CAAA;QAUO,SAAI,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAA;QATtD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACtB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACtB,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;;AATH,sCAqBC;AARwB,kBAAI,GAAG,IAAA,uBAAgB,EAAC,uCAAuC,CAAC,AAA5D,CAA4D;AADvE;IADf,IAAA,yBAAkB,EAAC,aAAa,CAAC,IAAI,CAAC;;2CACiB;AAIjD;IADN,IAAA,0BAAQ,GAAE;;0CACQ;AAIZ;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0CACyB"}
1
+ {"version":3,"file":"AnswerMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/AnswerMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAyF;AACzF,yDAAwC;AAExC,iDAAgD;AAYhD,MAAa,aAAc,SAAQ,mBAAY;IAC7C,YAAmB,OAA6B;QAC9C,KAAK,EAAE,CAAA;QAWO,SAAI,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAA;QAVtD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACtB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;YACpC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACtB,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;;AAVH,sCAgCC;AAlBwB,kBAAI,GAAG,IAAA,uBAAgB,EAAC,uCAAuC,CAAC,AAA5D,CAA4D;AADvE;IADf,IAAA,yBAAkB,EAAC,aAAa,CAAC,IAAI,CAAC;;2CACiB;AAIjD;IADN,IAAA,0BAAQ,GAAE;;0CACQ;AAUZ;IAJN,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,8BAAe,CAAC;IAC3B,IAAA,yBAAO,GAAE;;iDAC2B;AAI9B;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0CACyB"}
@@ -2,6 +2,7 @@ import { AgentMessage } from '@credo-ts/core';
2
2
  export interface EndMessageOptions {
3
3
  id?: string;
4
4
  threadId: string;
5
+ parentThreadId?: string;
5
6
  reason?: string;
6
7
  }
7
8
  export declare class EndMessage extends AgentMessage {
@@ -19,7 +19,7 @@ class EndMessage extends core_1.AgentMessage {
19
19
  if (options) {
20
20
  this.id = options.id ?? this.generateId();
21
21
  this.reason = options.reason;
22
- this.setThread({ threadId: options.threadId });
22
+ this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
23
23
  }
24
24
  }
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EndMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/EndMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAsD;AAQtD,MAAa,UAAW,SAAQ,mBAAY;IAC1C,YAAmB,OAA0B;QAC3C,KAAK,EAAE,CAAA;QASO,SAAI,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAA;QARnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;;AARH,gCAiBC;AALwB,eAAI,GAAG,IAAA,uBAAgB,EAAC,oCAAoC,CAAC,AAAzD,CAAyD;AADpE;IADf,IAAA,yBAAkB,EAAC,UAAU,CAAC,IAAI,CAAC;;wCACiB;AAK9C;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0CACW"}
1
+ {"version":3,"file":"EndMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/EndMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAsD;AAStD,MAAa,UAAW,SAAQ,mBAAY;IAC1C,YAAmB,OAA0B;QAC3C,KAAK,EAAE,CAAA;QASO,SAAI,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAA;QARnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;;AARH,gCAiBC;AALwB,eAAI,GAAG,IAAA,uBAAgB,EAAC,oCAAoC,CAAC,AAAzD,CAAyD;AADpE;IADf,IAAA,yBAAkB,EAAC,UAAU,CAAC,IAAI,CAAC;;wCACiB;AAK9C;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;0CACW"}
@@ -2,6 +2,7 @@ import { AgentMessage } from '@credo-ts/core';
2
2
  export interface IceMessageOptions {
3
3
  id?: string;
4
4
  threadId: string;
5
+ parentThreadId?: string;
5
6
  candidate?: Record<string, unknown>;
6
7
  endOfCandidates?: boolean;
7
8
  }
@@ -20,7 +20,7 @@ class IceMessage extends core_1.AgentMessage {
20
20
  this.id = options.id ?? this.generateId();
21
21
  this.candidate = options.candidate;
22
22
  this.endOfCandidates = options.endOfCandidates;
23
- this.setThread({ threadId: options.threadId });
23
+ this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
24
24
  }
25
25
  }
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IceMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/IceMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAA2E;AAS3E,MAAa,UAAW,SAAQ,mBAAY;IAC1C,YAAmB,OAA0B;QAC3C,KAAK,EAAE,CAAA;QAUO,SAAI,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAA;QATnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YAClC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;YAC9C,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;;AATH,gCAsBC;AATwB,eAAI,GAAG,IAAA,uBAAgB,EAAC,oCAAoC,CAAC,AAAzD,CAAyD;AADpE;IADf,IAAA,yBAAkB,EAAC,UAAU,CAAC,IAAI,CAAC;;wCACiB;AAK9C;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6CAC+B;AAInC;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;mDACoB"}
1
+ {"version":3,"file":"IceMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/IceMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAA2E;AAU3E,MAAa,UAAW,SAAQ,mBAAY;IAC1C,YAAmB,OAA0B;QAC3C,KAAK,EAAE,CAAA;QAUO,SAAI,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAA;QATnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YAClC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;YAC9C,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;;AATH,gCAsBC;AATwB,eAAI,GAAG,IAAA,uBAAgB,EAAC,oCAAoC,CAAC,AAAzD,CAAyD;AADpE;IADf,IAAA,yBAAkB,EAAC,UAAU,CAAC,IAAI,CAAC;;wCACiB;AAK9C;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6CAC+B;AAInC;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;mDACoB"}