@ajna-inc/webrtc 0.1.1 → 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.
- package/README.md +143 -17
- package/build/index.d.ts +6 -2
- package/build/index.js +5 -1
- package/build/index.js.map +1 -1
- package/build/webrtc/WebRTCApi.d.ts +90 -5
- package/build/webrtc/WebRTCApi.js +105 -2
- package/build/webrtc/WebRTCApi.js.map +1 -1
- package/build/webrtc/WebRTCEvents.d.ts +84 -5
- package/build/webrtc/WebRTCEvents.js +8 -0
- package/build/webrtc/WebRTCEvents.js.map +1 -1
- package/build/webrtc/WebRTCModule.d.ts +50 -0
- package/build/webrtc/WebRTCModule.js +17 -2
- package/build/webrtc/WebRTCModule.js.map +1 -1
- package/build/webrtc/handlers/RenegotiateHandler.d.ts +9 -0
- package/build/webrtc/handlers/RenegotiateHandler.js +31 -0
- package/build/webrtc/handlers/RenegotiateHandler.js.map +1 -0
- package/build/webrtc/handlers/index.d.ts +1 -0
- package/build/webrtc/handlers/index.js +1 -0
- package/build/webrtc/handlers/index.js.map +1 -1
- package/build/webrtc/messages/AnswerMessage.d.ts +8 -0
- package/build/webrtc/messages/AnswerMessage.js +10 -0
- package/build/webrtc/messages/AnswerMessage.js.map +1 -1
- package/build/webrtc/messages/OfferMessage.d.ts +28 -1
- package/build/webrtc/messages/OfferMessage.js +36 -1
- package/build/webrtc/messages/OfferMessage.js.map +1 -1
- package/build/webrtc/messages/ProposeMessage.d.ts +51 -0
- package/build/webrtc/messages/ProposeMessage.js +48 -2
- package/build/webrtc/messages/ProposeMessage.js.map +1 -1
- package/build/webrtc/messages/RenegotiateMessage.d.ts +52 -0
- package/build/webrtc/messages/RenegotiateMessage.js +65 -0
- package/build/webrtc/messages/RenegotiateMessage.js.map +1 -0
- package/build/webrtc/messages/index.d.ts +1 -0
- package/build/webrtc/messages/index.js +1 -0
- package/build/webrtc/messages/index.js.map +1 -1
- package/build/webrtc/services/WebRTCService.d.ts +64 -3
- package/build/webrtc/services/WebRTCService.js +115 -12
- package/build/webrtc/services/WebRTCService.js.map +1 -1
- 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":";;;
|
|
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;
|
|
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"}
|
|
@@ -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,
|
|
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
|
-
|
|
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,30 @@ 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)(),
|
|
20
33
|
(0, class_validator_1.IsString)(),
|
|
21
|
-
__metadata("design:type",
|
|
34
|
+
__metadata("design:type", Object)
|
|
22
35
|
], IceServerConfig.prototype, "urls", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, class_validator_1.IsOptional)(),
|
|
38
|
+
(0, class_validator_1.IsString)(),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], IceServerConfig.prototype, "url", void 0);
|
|
23
41
|
__decorate([
|
|
24
42
|
(0, class_validator_1.IsOptional)(),
|
|
25
43
|
(0, class_validator_1.IsString)(),
|
|
@@ -30,6 +48,11 @@ __decorate([
|
|
|
30
48
|
(0, class_validator_1.IsString)(),
|
|
31
49
|
__metadata("design:type", String)
|
|
32
50
|
], IceServerConfig.prototype, "credential", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, class_validator_1.IsOptional)(),
|
|
53
|
+
(0, class_validator_1.IsString)(),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], IceServerConfig.prototype, "credentialType", void 0);
|
|
33
56
|
class OfferMessage extends core_1.AgentMessage {
|
|
34
57
|
constructor(options) {
|
|
35
58
|
super();
|
|
@@ -38,6 +61,8 @@ class OfferMessage extends core_1.AgentMessage {
|
|
|
38
61
|
this.id = options.id ?? this.generateId();
|
|
39
62
|
this.sdp = options.sdp;
|
|
40
63
|
this.iceServers = options.iceServers;
|
|
64
|
+
this.policy = options.policy;
|
|
65
|
+
this.trickle = options.trickle;
|
|
41
66
|
this.jws = options.jws;
|
|
42
67
|
this.setThread({ threadId: options.threadId, parentThreadId: options.parentThreadId });
|
|
43
68
|
}
|
|
@@ -60,6 +85,16 @@ __decorate([
|
|
|
60
85
|
(0, class_validator_1.IsArray)(),
|
|
61
86
|
__metadata("design:type", Array)
|
|
62
87
|
], OfferMessage.prototype, "iceServers", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, class_validator_1.IsOptional)(),
|
|
90
|
+
(0, class_validator_1.IsString)(),
|
|
91
|
+
__metadata("design:type", String)
|
|
92
|
+
], OfferMessage.prototype, "policy", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, class_validator_1.IsOptional)(),
|
|
95
|
+
(0, class_validator_1.IsBoolean)(),
|
|
96
|
+
__metadata("design:type", Boolean)
|
|
97
|
+
], OfferMessage.prototype, "trickle", void 0);
|
|
63
98
|
__decorate([
|
|
64
99
|
(0, class_validator_1.IsOptional)(),
|
|
65
100
|
(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,
|
|
1
|
+
{"version":3,"file":"OfferMessage.js","sourceRoot":"","sources":["../../../src/webrtc/messages/OfferMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmF;AACnF,qDAAoG;AACpG,yDAAwC;AAUxC,MAAa,eAAe;IAyB1B;;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;AArCD,0CAqCC;AA9BQ;IAFN,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6CACoB;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,
|
|
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"}
|