@ajna-inc/webrtc 0.1.1 → 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.
Files changed (38) hide show
  1. package/README.md +143 -17
  2. package/build/index.d.ts +6 -2
  3. package/build/index.js +5 -1
  4. package/build/index.js.map +1 -1
  5. package/build/webrtc/WebRTCApi.d.ts +90 -5
  6. package/build/webrtc/WebRTCApi.js +105 -2
  7. package/build/webrtc/WebRTCApi.js.map +1 -1
  8. package/build/webrtc/WebRTCEvents.d.ts +84 -5
  9. package/build/webrtc/WebRTCEvents.js +8 -0
  10. package/build/webrtc/WebRTCEvents.js.map +1 -1
  11. package/build/webrtc/WebRTCModule.d.ts +50 -0
  12. package/build/webrtc/WebRTCModule.js +17 -2
  13. package/build/webrtc/WebRTCModule.js.map +1 -1
  14. package/build/webrtc/handlers/RenegotiateHandler.d.ts +9 -0
  15. package/build/webrtc/handlers/RenegotiateHandler.js +31 -0
  16. package/build/webrtc/handlers/RenegotiateHandler.js.map +1 -0
  17. package/build/webrtc/handlers/index.d.ts +1 -0
  18. package/build/webrtc/handlers/index.js +1 -0
  19. package/build/webrtc/handlers/index.js.map +1 -1
  20. package/build/webrtc/messages/AnswerMessage.d.ts +8 -0
  21. package/build/webrtc/messages/AnswerMessage.js +10 -0
  22. package/build/webrtc/messages/AnswerMessage.js.map +1 -1
  23. package/build/webrtc/messages/OfferMessage.d.ts +28 -1
  24. package/build/webrtc/messages/OfferMessage.js +35 -1
  25. package/build/webrtc/messages/OfferMessage.js.map +1 -1
  26. package/build/webrtc/messages/ProposeMessage.d.ts +51 -0
  27. package/build/webrtc/messages/ProposeMessage.js +48 -2
  28. package/build/webrtc/messages/ProposeMessage.js.map +1 -1
  29. package/build/webrtc/messages/RenegotiateMessage.d.ts +52 -0
  30. package/build/webrtc/messages/RenegotiateMessage.js +65 -0
  31. package/build/webrtc/messages/RenegotiateMessage.js.map +1 -0
  32. package/build/webrtc/messages/index.d.ts +1 -0
  33. package/build/webrtc/messages/index.js +1 -0
  34. package/build/webrtc/messages/index.js.map +1 -1
  35. package/build/webrtc/services/WebRTCService.d.ts +64 -3
  36. package/build/webrtc/services/WebRTCService.js +115 -12
  37. package/build/webrtc/services/WebRTCService.js.map +1 -1
  38. package/package.json +1 -1
@@ -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,9 +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;
5
6
  parentThreadId?: string;
6
7
  sdp: string;
8
+ /** Optional ICE servers from callee (e.g., if callee has better TURN access) */
9
+ iceServers?: IceServerConfig[];
7
10
  jws?: Record<string, unknown>;
8
11
  }
9
12
  export declare class AnswerMessage extends AgentMessage {
@@ -11,5 +14,10 @@ export declare class AnswerMessage extends AgentMessage {
11
14
  readonly type: string;
12
15
  static readonly type: import("@credo-ts/core").ParsedMessageType;
13
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[];
14
22
  jws?: Record<string, unknown>;
15
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,6 +21,7 @@ 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
26
  this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
24
27
  }
@@ -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;AAUhE,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,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;QACxF,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"}
@@ -1,8 +1,25 @@
1
1
  import { AgentMessage } from '@credo-ts/core';
2
+ /**
3
+ * ICE policy for NAT traversal
4
+ * - 'all': Use all available candidates (host, srflx, relay)
5
+ * - 'relay-preferred': Prefer relay candidates but allow others
6
+ * - 'relay-only': Only use relay (TURN) candidates - best for strict NAT/firewall
7
+ */
8
+ export type IcePolicy = 'all' | 'relay-preferred' | 'relay-only';
2
9
  export declare class IceServerConfig {
3
- urls: string;
10
+ /**
11
+ * STUN/TURN server URL(s). Can be a single URL or array of URLs.
12
+ * Examples: 'stun:stun.example.org:3478', ['turn:turn.example.org:3478', 'turns:turn.example.org:5349']
13
+ */
14
+ urls?: string | string[];
15
+ url?: string;
4
16
  username?: string;
5
17
  credential?: string;
18
+ credentialType?: 'password' | 'oauth';
19
+ /**
20
+ * Get URLs as array (handles both urls and legacy url field)
21
+ */
22
+ getUrls(): string[];
6
23
  }
7
24
  export interface OfferMessageOptions {
8
25
  id?: string;
@@ -10,6 +27,8 @@ export interface OfferMessageOptions {
10
27
  parentThreadId?: string;
11
28
  sdp: string;
12
29
  iceServers?: IceServerConfig[];
30
+ policy?: IcePolicy;
31
+ trickle?: boolean;
13
32
  jws?: Record<string, unknown>;
14
33
  }
15
34
  export declare class OfferMessage extends AgentMessage {
@@ -18,5 +37,13 @@ export declare class OfferMessage extends AgentMessage {
18
37
  static readonly type: import("@credo-ts/core").ParsedMessageType;
19
38
  sdp: string;
20
39
  iceServers?: IceServerConfig[];
40
+ /**
41
+ * ICE policy for NAT traversal
42
+ */
43
+ policy?: IcePolicy;
44
+ /**
45
+ * Whether trickle ICE is supported/requested
46
+ */
47
+ trickle?: boolean;
21
48
  jws?: Record<string, unknown>;
22
49
  }
@@ -14,12 +14,29 @@ const core_1 = require("@credo-ts/core");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const class_transformer_1 = require("class-transformer");
16
16
  class IceServerConfig {
17
+ /**
18
+ * Get URLs as array (handles both urls and legacy url field)
19
+ */
20
+ getUrls() {
21
+ if (this.urls) {
22
+ return Array.isArray(this.urls) ? this.urls : [this.urls];
23
+ }
24
+ if (this.url) {
25
+ return [this.url];
26
+ }
27
+ return [];
28
+ }
17
29
  }
18
30
  exports.IceServerConfig = IceServerConfig;
19
31
  __decorate([
32
+ (0, class_validator_1.IsOptional)(),
33
+ __metadata("design:type", Object)
34
+ ], IceServerConfig.prototype, "urls", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsOptional)(),
20
37
  (0, class_validator_1.IsString)(),
21
38
  __metadata("design:type", String)
22
- ], IceServerConfig.prototype, "urls", void 0);
39
+ ], IceServerConfig.prototype, "url", void 0);
23
40
  __decorate([
24
41
  (0, class_validator_1.IsOptional)(),
25
42
  (0, class_validator_1.IsString)(),
@@ -30,6 +47,11 @@ __decorate([
30
47
  (0, class_validator_1.IsString)(),
31
48
  __metadata("design:type", String)
32
49
  ], IceServerConfig.prototype, "credential", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.IsString)(),
53
+ __metadata("design:type", String)
54
+ ], IceServerConfig.prototype, "credentialType", void 0);
33
55
  class OfferMessage extends core_1.AgentMessage {
34
56
  constructor(options) {
35
57
  super();
@@ -38,6 +60,8 @@ class OfferMessage extends core_1.AgentMessage {
38
60
  this.id = options.id ?? this.generateId();
39
61
  this.sdp = options.sdp;
40
62
  this.iceServers = options.iceServers;
63
+ this.policy = options.policy;
64
+ this.trickle = options.trickle;
41
65
  this.jws = options.jws;
42
66
  this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
43
67
  }
@@ -60,6 +84,16 @@ __decorate([
60
84
  (0, class_validator_1.IsArray)(),
61
85
  __metadata("design:type", Array)
62
86
  ], OfferMessage.prototype, "iceServers", void 0);
87
+ __decorate([
88
+ (0, class_validator_1.IsOptional)(),
89
+ (0, class_validator_1.IsString)(),
90
+ __metadata("design:type", String)
91
+ ], OfferMessage.prototype, "policy", void 0);
92
+ __decorate([
93
+ (0, class_validator_1.IsOptional)(),
94
+ (0, class_validator_1.IsBoolean)(),
95
+ __metadata("design:type", Boolean)
96
+ ], OfferMessage.prototype, "trickle", void 0);
63
97
  __decorate([
64
98
  (0, class_validator_1.IsOptional)(),
65
99
  (0, class_validator_1.IsObject)(),
@@ -1 +1 @@
1
- {"version":3,"file":"OfferMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/OfferMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAyF;AACzF,yDAAwC;AAExC,MAAa,eAAe;CAW3B;AAXD,0CAWC;AATQ;IADN,IAAA,0BAAQ,GAAE;;6CACS;AAIb;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iDACa;AAIjB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;mDACe;AAY5B,MAAa,YAAa,SAAQ,mBAAY;IAC5C,YAAmB,OAA4B;QAC7C,KAAK,EAAE,CAAA;QAWO,SAAI,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAA;QAVrD,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,oCA4BC;AAdwB,iBAAI,GAAG,IAAA,uBAAgB,EAAC,sCAAsC,CAAC,AAA3D,CAA2D;AADtE;IADf,IAAA,yBAAkB,EAAC,YAAY,CAAC,IAAI,CAAC;;0CACiB;AAIhD;IADN,IAAA,0BAAQ,GAAE;;yCACQ;AAMZ;IAJN,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,eAAe,CAAC;IAC3B,IAAA,yBAAO,GAAE;;gDAC2B;AAI9B;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yCACyB"}
1
+ {"version":3,"file":"OfferMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/OfferMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAoG;AACpG,yDAAwC;AAUxC,MAAa,eAAe;IAwB1B;;OAEG;IACI,OAAO;QACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AApCD,0CAoCC;AA9BQ;IADN,IAAA,4BAAU,GAAE;;6CACkB;AAIxB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4CACQ;AAIZ;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iDACa;AAIjB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;mDACe;AAInB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;uDACiC;AA2B9C,MAAa,YAAa,SAAQ,mBAAY;IAC5C,YAAmB,OAA4B;QAC7C,KAAK,EAAE,CAAA;QAaO,SAAI,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAA;QAZrD,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,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;YAC9B,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;;AAZH,oCA4CC;AA5BwB,iBAAI,GAAG,IAAA,uBAAgB,EAAC,sCAAsC,CAAC,AAA3D,CAA2D;AADtE;IADf,IAAA,yBAAkB,EAAC,YAAY,CAAC,IAAI,CAAC;;0CACiB;AAIhD;IADN,IAAA,0BAAQ,GAAE;;yCACQ;AAMZ;IAJN,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,eAAe,CAAC;IAC3B,IAAA,yBAAO,GAAE;;gDAC2B;AAO9B;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4CACc;AAOlB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;6CACY;AAIjB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yCACyB"}
@@ -1,12 +1,63 @@
1
1
  import { AgentMessage } from '@credo-ts/core';
2
+ import { IceServerConfig, IcePolicy } from './OfferMessage';
3
+ /**
4
+ * Media types that can be requested in a call
5
+ */
6
+ export type MediaType = 'audio' | 'video';
2
7
  export interface ProposeMessageOptions {
3
8
  id?: string;
4
9
  threadId?: string;
10
+ parentThreadId?: string;
11
+ /** Requested media types */
12
+ media?: MediaType[];
13
+ /** Whether data channel is requested */
14
+ data?: boolean;
15
+ /** Topology hint: 'mesh' for P2P */
16
+ topology?: 'mesh' | 'sfu';
17
+ /** Whether trickle ICE is supported */
18
+ trickle?: boolean;
19
+ /** ICE policy for NAT traversal */
20
+ policy?: IcePolicy;
21
+ /** ICE servers (STUN/TURN) for NAT traversal */
22
+ iceServers?: IceServerConfig[];
23
+ /** Optional reason/context for the call */
5
24
  reason?: string;
6
25
  }
26
+ /**
27
+ * ProposeMessage - Caller initiates a WebRTC session request
28
+ * This message is sent before the offer to negotiate capabilities and share ICE servers
29
+ */
7
30
  export declare class ProposeMessage extends AgentMessage {
8
31
  constructor(options: ProposeMessageOptions);
9
32
  readonly type: string;
10
33
  static readonly type: import("@credo-ts/core").ParsedMessageType;
34
+ /**
35
+ * Requested media types: ['audio'], ['video'], or ['audio', 'video']
36
+ */
37
+ media?: MediaType[];
38
+ /**
39
+ * Whether a data channel is requested
40
+ */
41
+ data?: boolean;
42
+ /**
43
+ * Topology: 'mesh' for P2P, 'sfu' for server-mediated
44
+ */
45
+ topology?: 'mesh' | 'sfu';
46
+ /**
47
+ * Whether trickle ICE is supported
48
+ */
49
+ trickle?: boolean;
50
+ /**
51
+ * ICE policy for NAT traversal
52
+ */
53
+ policy?: IcePolicy;
54
+ /**
55
+ * ICE servers (STUN/TURN) for NAT traversal
56
+ * Shared early so callee can configure RTCPeerConnection before receiving offer
57
+ */
58
+ iceServers?: IceServerConfig[];
59
+ /**
60
+ * Optional reason/context for the call
61
+ */
11
62
  reason?: string;
12
63
  }
@@ -12,15 +12,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ProposeMessage = 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");
17
+ /**
18
+ * ProposeMessage - Caller initiates a WebRTC session request
19
+ * This message is sent before the offer to negotiate capabilities and share ICE servers
20
+ */
15
21
  class ProposeMessage extends core_1.AgentMessage {
16
22
  constructor(options) {
17
23
  super();
18
24
  this.type = ProposeMessage.type.messageTypeUri;
19
25
  if (options) {
20
26
  this.id = options.id ?? this.generateId();
27
+ this.media = options.media;
28
+ this.data = options.data;
29
+ this.topology = options.topology ?? 'mesh';
30
+ this.trickle = options.trickle ?? true;
31
+ this.policy = options.policy;
32
+ this.iceServers = options.iceServers;
21
33
  this.reason = options.reason;
22
- if (options.threadId)
23
- this.setThread({ threadId: options.threadId });
34
+ if (options.threadId) {
35
+ this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
36
+ }
24
37
  }
25
38
  }
26
39
  }
@@ -30,6 +43,39 @@ __decorate([
30
43
  (0, core_1.IsValidMessageType)(ProposeMessage.type),
31
44
  __metadata("design:type", Object)
32
45
  ], ProposeMessage.prototype, "type", void 0);
46
+ __decorate([
47
+ (0, class_validator_1.IsOptional)(),
48
+ (0, class_validator_1.IsArray)(),
49
+ (0, class_validator_1.IsString)({ each: true }),
50
+ __metadata("design:type", Array)
51
+ ], ProposeMessage.prototype, "media", void 0);
52
+ __decorate([
53
+ (0, class_validator_1.IsOptional)(),
54
+ (0, class_validator_1.IsBoolean)(),
55
+ __metadata("design:type", Boolean)
56
+ ], ProposeMessage.prototype, "data", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsString)(),
60
+ __metadata("design:type", String)
61
+ ], ProposeMessage.prototype, "topology", void 0);
62
+ __decorate([
63
+ (0, class_validator_1.IsOptional)(),
64
+ (0, class_validator_1.IsBoolean)(),
65
+ __metadata("design:type", Boolean)
66
+ ], ProposeMessage.prototype, "trickle", void 0);
67
+ __decorate([
68
+ (0, class_validator_1.IsOptional)(),
69
+ (0, class_validator_1.IsString)(),
70
+ __metadata("design:type", String)
71
+ ], ProposeMessage.prototype, "policy", void 0);
72
+ __decorate([
73
+ (0, class_validator_1.IsOptional)(),
74
+ (0, class_validator_1.ValidateNested)({ each: true }),
75
+ (0, class_transformer_1.Type)(() => OfferMessage_1.IceServerConfig),
76
+ (0, class_validator_1.IsArray)(),
77
+ __metadata("design:type", Array)
78
+ ], ProposeMessage.prototype, "iceServers", void 0);
33
79
  __decorate([
34
80
  (0, class_validator_1.IsOptional)(),
35
81
  (0, class_validator_1.IsString)(),
@@ -1 +1 @@
1
- {"version":3,"file":"ProposeMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/ProposeMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAsD;AAQtD,MAAa,cAAe,SAAQ,mBAAY;IAC9C,YAAmB,OAA8B;QAC/C,KAAK,EAAE,CAAA;QASO,SAAI,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAA;QARvD,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,OAAO,CAAC,QAAQ;gBAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;;AARH,wCAiBC;AALwB,mBAAI,GAAG,IAAA,uBAAgB,EAAC,wCAAwC,CAAC,AAA7D,CAA6D;AADxE;IADf,IAAA,yBAAkB,EAAC,cAAc,CAAC,IAAI,CAAC;;4CACiB;AAKlD;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACW"}
1
+ {"version":3,"file":"ProposeMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/ProposeMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAA0F;AAC1F,yDAAwC;AAExC,iDAA2D;AA2B3D;;;GAGG;AACH,MAAa,cAAe,SAAQ,mBAAY;IAC9C,YAAmB,OAA8B;QAC/C,KAAK,EAAE,CAAA;QAiBO,SAAI,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAA;QAhBvD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;YAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;YAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAA;YACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;YACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;YACxF,CAAC;QACH,CAAC;IACH,CAAC;;AAhBH,wCA0EC;AAtDwB,mBAAI,GAAG,IAAA,uBAAgB,EAAC,wCAAwC,CAAC,AAA7D,CAA6D;AADxE;IADf,IAAA,yBAAkB,EAAC,cAAc,CAAC,IAAI,CAAC;;4CACiB;AASlD;IAHN,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;6CACC;AAOnB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;4CACS;AAOd;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;gDACqB;AAOzB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;+CACY;AAOjB;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACc;AAUlB;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;;kDAC2B;AAO9B;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACW"}
@@ -0,0 +1,52 @@
1
+ import { AgentMessage } from '@credo-ts/core';
2
+ import { IceServerConfig, IcePolicy } from './OfferMessage';
3
+ /**
4
+ * Reasons for renegotiation
5
+ */
6
+ export type RenegotiateReason = 'add-track' | 'remove-track' | 'add-screenshare' | 'remove-screenshare' | 'ice-restart' | 'codec-change' | 'bandwidth-change' | 'other';
7
+ export interface RenegotiateMessageOptions {
8
+ id?: string;
9
+ threadId: string;
10
+ parentThreadId?: string;
11
+ /** Reason for renegotiation */
12
+ reason: RenegotiateReason | string;
13
+ /** Whether to perform an ICE restart (required for recovering failed connections) */
14
+ iceRestart?: boolean;
15
+ /** New ICE servers to use (useful when switching networks) */
16
+ iceServers?: IceServerConfig[];
17
+ /** Updated ICE policy */
18
+ policy?: IcePolicy;
19
+ }
20
+ /**
21
+ * RenegotiateMessage - Request to renegotiate the WebRTC session
22
+ * Used for:
23
+ * - Adding/removing media tracks (screenshare, camera switch)
24
+ * - ICE restart when connection fails (critical for NAT/firewall recovery)
25
+ * - Changing codecs or bandwidth constraints
26
+ */
27
+ export declare class RenegotiateMessage extends AgentMessage {
28
+ constructor(options: RenegotiateMessageOptions);
29
+ readonly type: string;
30
+ static readonly type: import("@credo-ts/core").ParsedMessageType;
31
+ /**
32
+ * Reason for renegotiation
33
+ */
34
+ reason: RenegotiateReason | string;
35
+ /**
36
+ * Whether to perform an ICE restart
37
+ * Set to true when:
38
+ * - ICE connection state is 'failed' or 'disconnected'
39
+ * - Network change detected (WiFi to cellular, etc.)
40
+ * - NAT binding expired
41
+ */
42
+ iceRestart?: boolean;
43
+ /**
44
+ * New ICE servers to use
45
+ * Useful when switching networks or when original servers are unreachable
46
+ */
47
+ iceServers?: IceServerConfig[];
48
+ /**
49
+ * Updated ICE policy
50
+ */
51
+ policy?: IcePolicy;
52
+ }
@@ -0,0 +1,65 @@
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.RenegotiateMessage = void 0;
13
+ const core_1 = require("@credo-ts/core");
14
+ const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
16
+ const OfferMessage_1 = require("./OfferMessage");
17
+ /**
18
+ * RenegotiateMessage - Request to renegotiate the WebRTC session
19
+ * Used for:
20
+ * - Adding/removing media tracks (screenshare, camera switch)
21
+ * - ICE restart when connection fails (critical for NAT/firewall recovery)
22
+ * - Changing codecs or bandwidth constraints
23
+ */
24
+ class RenegotiateMessage extends core_1.AgentMessage {
25
+ constructor(options) {
26
+ super();
27
+ this.type = RenegotiateMessage.type.messageTypeUri;
28
+ if (options) {
29
+ this.id = options.id ?? this.generateId();
30
+ this.reason = options.reason;
31
+ this.iceRestart = options.iceRestart ?? false;
32
+ this.iceServers = options.iceServers;
33
+ this.policy = options.policy;
34
+ this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
35
+ }
36
+ }
37
+ }
38
+ exports.RenegotiateMessage = RenegotiateMessage;
39
+ RenegotiateMessage.type = (0, core_1.parseMessageType)('https://didcomm.org/webrtc/1.0/renegotiate');
40
+ __decorate([
41
+ (0, core_1.IsValidMessageType)(RenegotiateMessage.type),
42
+ __metadata("design:type", Object)
43
+ ], RenegotiateMessage.prototype, "type", void 0);
44
+ __decorate([
45
+ (0, class_validator_1.IsString)(),
46
+ __metadata("design:type", String)
47
+ ], RenegotiateMessage.prototype, "reason", void 0);
48
+ __decorate([
49
+ (0, class_validator_1.IsOptional)(),
50
+ (0, class_validator_1.IsBoolean)(),
51
+ __metadata("design:type", Boolean)
52
+ ], RenegotiateMessage.prototype, "iceRestart", void 0);
53
+ __decorate([
54
+ (0, class_validator_1.IsOptional)(),
55
+ (0, class_validator_1.ValidateNested)({ each: true }),
56
+ (0, class_transformer_1.Type)(() => OfferMessage_1.IceServerConfig),
57
+ (0, class_validator_1.IsArray)(),
58
+ __metadata("design:type", Array)
59
+ ], RenegotiateMessage.prototype, "iceServers", void 0);
60
+ __decorate([
61
+ (0, class_validator_1.IsOptional)(),
62
+ (0, class_validator_1.IsString)(),
63
+ __metadata("design:type", String)
64
+ ], RenegotiateMessage.prototype, "policy", void 0);
65
+ //# sourceMappingURL=RenegotiateMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenegotiateMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/RenegotiateMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAA0F;AAC1F,yDAAwC;AAExC,iDAA2D;AA6B3D;;;;;;GAMG;AACH,MAAa,kBAAmB,SAAQ,mBAAY;IAClD,YAAmB,OAAkC;QACnD,KAAK,EAAE,CAAA;QAYO,SAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAA;QAX3D,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,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAA;YAC7C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;YACpC,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;;AAXH,gDAkDC;AAnCwB,uBAAI,GAAG,IAAA,uBAAgB,EAAC,4CAA4C,CAAC,AAAjE,CAAiE;AAD5E;IADf,IAAA,yBAAkB,EAAC,kBAAkB,CAAC,IAAI,CAAC;;gDACiB;AAOtD;IADN,IAAA,0BAAQ,GAAE;;kDAC+B;AAWnC;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;sDACe;AAUpB;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;;sDAC2B;AAO9B;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;kDACc"}