@ajna-inc/webrtc 0.1.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 (59) hide show
  1. package/README.md +96 -0
  2. package/build/index.d.ts +4 -0
  3. package/build/index.js +25 -0
  4. package/build/index.js.map +1 -0
  5. package/build/webrtc/WebRTCApi.d.ts +36 -0
  6. package/build/webrtc/WebRTCApi.js +83 -0
  7. package/build/webrtc/WebRTCApi.js.map +1 -0
  8. package/build/webrtc/WebRTCEvents.d.ts +28 -0
  9. package/build/webrtc/WebRTCEvents.js +11 -0
  10. package/build/webrtc/WebRTCEvents.js.map +1 -0
  11. package/build/webrtc/WebRTCModule.d.ts +6 -0
  12. package/build/webrtc/WebRTCModule.js +25 -0
  13. package/build/webrtc/WebRTCModule.js.map +1 -0
  14. package/build/webrtc/handlers/AnswerHandler.d.ts +9 -0
  15. package/build/webrtc/handlers/AnswerHandler.js +31 -0
  16. package/build/webrtc/handlers/AnswerHandler.js.map +1 -0
  17. package/build/webrtc/handlers/EndHandler.d.ts +9 -0
  18. package/build/webrtc/handlers/EndHandler.js +31 -0
  19. package/build/webrtc/handlers/EndHandler.js.map +1 -0
  20. package/build/webrtc/handlers/IceHandler.d.ts +9 -0
  21. package/build/webrtc/handlers/IceHandler.js +31 -0
  22. package/build/webrtc/handlers/IceHandler.js.map +1 -0
  23. package/build/webrtc/handlers/OfferHandler.d.ts +9 -0
  24. package/build/webrtc/handlers/OfferHandler.js +31 -0
  25. package/build/webrtc/handlers/OfferHandler.js.map +1 -0
  26. package/build/webrtc/handlers/ProposeHandler.d.ts +9 -0
  27. package/build/webrtc/handlers/ProposeHandler.js +31 -0
  28. package/build/webrtc/handlers/ProposeHandler.js.map +1 -0
  29. package/build/webrtc/handlers/index.d.ts +5 -0
  30. package/build/webrtc/handlers/index.js +22 -0
  31. package/build/webrtc/handlers/index.js.map +1 -0
  32. package/build/webrtc/messages/AnswerMessage.d.ts +14 -0
  33. package/build/webrtc/messages/AnswerMessage.js +42 -0
  34. package/build/webrtc/messages/AnswerMessage.js.map +1 -0
  35. package/build/webrtc/messages/EndMessage.d.ts +12 -0
  36. package/build/webrtc/messages/EndMessage.js +37 -0
  37. package/build/webrtc/messages/EndMessage.js.map +1 -0
  38. package/build/webrtc/messages/IceMessage.d.ts +14 -0
  39. package/build/webrtc/messages/IceMessage.js +43 -0
  40. package/build/webrtc/messages/IceMessage.js.map +1 -0
  41. package/build/webrtc/messages/OfferMessage.d.ts +21 -0
  42. package/build/webrtc/messages/OfferMessage.js +68 -0
  43. package/build/webrtc/messages/OfferMessage.js.map +1 -0
  44. package/build/webrtc/messages/ProposeMessage.d.ts +12 -0
  45. package/build/webrtc/messages/ProposeMessage.js +38 -0
  46. package/build/webrtc/messages/ProposeMessage.js.map +1 -0
  47. package/build/webrtc/messages/index.d.ts +5 -0
  48. package/build/webrtc/messages/index.js +22 -0
  49. package/build/webrtc/messages/index.js.map +1 -0
  50. package/build/webrtc/repository/WebRTCCallRecord.d.ts +29 -0
  51. package/build/webrtc/repository/WebRTCCallRecord.js +30 -0
  52. package/build/webrtc/repository/WebRTCCallRecord.js.map +1 -0
  53. package/build/webrtc/repository/WebRTCCallRepository.d.ts +5 -0
  54. package/build/webrtc/repository/WebRTCCallRepository.js +30 -0
  55. package/build/webrtc/repository/WebRTCCallRepository.js.map +1 -0
  56. package/build/webrtc/services/WebRTCService.d.ts +25 -0
  57. package/build/webrtc/services/WebRTCService.js +121 -0
  58. package/build/webrtc/services/WebRTCService.js.map +1 -0
  59. package/package.json +29 -0
package/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # @credo-ts/webrtc
2
+
3
+ DIDComm v2 signaling protocol for WebRTC P2P calls.
4
+
5
+ - PIURI: `https://didcomm.org/webrtc/1.0`
6
+ - Messages: `propose`, `offer`, `answer`, `ice`, `end`
7
+ - Advertises support via Discover Features; works with mediators and message pickup.
8
+
9
+ ## Install
10
+
11
+ This package is part of the monorepo. Add the module to your Agent options:
12
+
13
+ ```ts
14
+ import { WebRTCModule } from '@credo-ts/webrtc'
15
+
16
+ const agent = new Agent({
17
+ config: { /* ... */ },
18
+ dependencies: agentDependencies,
19
+ modules: {
20
+ webrtc: new WebRTCModule(),
21
+ },
22
+ })
23
+ ```
24
+
25
+ ## Frontend usage (browser)
26
+
27
+ Below is a minimal setup for P2P WebRTC using Credo TS for signaling.
28
+
29
+ ```ts
30
+ // Subscribe to inbound signaling
31
+ agent.events.on('WebRTCEvents.IncomingOffer', async ({ payload }) => {
32
+ const { thid, sdp, context } = payload
33
+ const pc = ensurePeer(thid)
34
+ await pc.setRemoteDescription({ type: 'offer', sdp })
35
+
36
+ const answer = await pc.createAnswer()
37
+ await pc.setLocalDescription(answer)
38
+
39
+ await agent.modules.webrtc.acceptCall({
40
+ connectionId: context.connection!.id,
41
+ threadId: thid,
42
+ sdp: answer.sdp!,
43
+ })
44
+ })
45
+
46
+ agent.events.on('WebRTCEvents.IncomingAnswer', async ({ payload }) => {
47
+ const { thid, sdp } = payload
48
+ const pc = ensurePeer(thid)
49
+ await pc.setRemoteDescription({ type: 'answer', sdp })
50
+ })
51
+
52
+ agent.events.on('WebRTCEvents.IncomingIce', async ({ payload }) => {
53
+ const { thid, candidate, endOfCandidates } = payload
54
+ const pc = peers.get(thid)
55
+ if (!pc) return
56
+ if (endOfCandidates) await pc.addIceCandidate(null)
57
+ else await pc.addIceCandidate(candidate as RTCIceCandidateInit)
58
+ })
59
+
60
+ // Start call (caller)
61
+ async function startCall(connectionId: string, localStream: MediaStream) {
62
+ const thid = crypto.randomUUID()
63
+ const pc = new RTCPeerConnection({
64
+ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],
65
+ })
66
+ peers.set(thid, pc)
67
+
68
+ // Render remote stream
69
+ pc.ontrack = e => (remoteVideo.srcObject = e.streams[0])
70
+ // Send ICE via DIDComm
71
+ pc.onicecandidate = e => agent.modules.webrtc.sendIce({
72
+ connectionId,
73
+ threadId: thid,
74
+ candidate: e.candidate ?? undefined,
75
+ endOfCandidates: e.candidate == null,
76
+ })
77
+ // Add local tracks
78
+ for (const track of localStream.getTracks()) pc.addTrack(track, localStream)
79
+
80
+ const offer = await pc.createOffer({ offerToReceiveVideo: true, offerToReceiveAudio: true })
81
+ await pc.setLocalDescription(offer)
82
+
83
+ await agent.modules.webrtc.startCall({
84
+ connectionId,
85
+ threadId: thid,
86
+ sdp: offer.sdp!,
87
+ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],
88
+ })
89
+ }
90
+ ```
91
+
92
+ Notes:
93
+ - This module moves only signaling over DIDComm; media flows via WebRTC/DTLS-SRTP.
94
+ - For NAT traversal, pass TURN servers in `iceServers` in `offer` if needed.
95
+ - Works with mediators and message pickup (offline delivery), as with any DIDComm message.
96
+
@@ -0,0 +1,4 @@
1
+ export { WebRTCModule } from './webrtc/WebRTCModule';
2
+ export { WebRTCApi } from './webrtc/WebRTCApi';
3
+ export { WebRTCEvents, type IncomingOfferEvent, type IncomingIceEvent } from './webrtc/WebRTCEvents';
4
+ export * from './webrtc/messages';
package/build/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.WebRTCEvents = exports.WebRTCApi = exports.WebRTCModule = void 0;
18
+ var WebRTCModule_1 = require("./webrtc/WebRTCModule");
19
+ Object.defineProperty(exports, "WebRTCModule", { enumerable: true, get: function () { return WebRTCModule_1.WebRTCModule; } });
20
+ var WebRTCApi_1 = require("./webrtc/WebRTCApi");
21
+ Object.defineProperty(exports, "WebRTCApi", { enumerable: true, get: function () { return WebRTCApi_1.WebRTCApi; } });
22
+ var WebRTCEvents_1 = require("./webrtc/WebRTCEvents");
23
+ Object.defineProperty(exports, "WebRTCEvents", { enumerable: true, get: function () { return WebRTCEvents_1.WebRTCEvents; } });
24
+ __exportStar(require("./webrtc/messages"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAAoD;AAA3C,4GAAA,YAAY,OAAA;AACrB,gDAA8C;AAArC,sGAAA,SAAS,OAAA;AAClB,sDAAoG;AAA3F,4GAAA,YAAY,OAAA;AACrB,oDAAiC"}
@@ -0,0 +1,36 @@
1
+ import { ConnectionService, MessageSender, AgentContext } from '@credo-ts/core';
2
+ import { WebRTCService } from './services/WebRTCService';
3
+ export declare class WebRTCApi {
4
+ private connectionService;
5
+ private messageSender;
6
+ private webrtcService;
7
+ private agentContext;
8
+ constructor(connectionService: ConnectionService, messageSender: MessageSender, webrtcService: WebRTCService, agentContext: AgentContext);
9
+ onAgentReady: boolean;
10
+ startCall(options: {
11
+ connectionId: string;
12
+ threadId: string;
13
+ sdp: string;
14
+ iceServers?: {
15
+ urls: string;
16
+ username?: string;
17
+ credential?: string;
18
+ }[];
19
+ }): Promise<import("./repository/WebRTCCallRecord").WebRTCCallRecord>;
20
+ acceptCall(options: {
21
+ connectionId: string;
22
+ threadId: string;
23
+ sdp: string;
24
+ }): Promise<void>;
25
+ sendIce(options: {
26
+ connectionId: string;
27
+ threadId: string;
28
+ candidate?: Record<string, unknown>;
29
+ endOfCandidates?: boolean;
30
+ }): Promise<void>;
31
+ endCall(options: {
32
+ connectionId: string;
33
+ threadId: string;
34
+ reason?: string;
35
+ }): Promise<void>;
36
+ }
@@ -0,0 +1,83 @@
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.WebRTCApi = void 0;
13
+ const core_1 = require("@credo-ts/core");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const core_2 = require("@credo-ts/core");
16
+ const WebRTCService_1 = require("./services/WebRTCService");
17
+ const handlers_1 = require("./handlers");
18
+ let WebRTCApi = class WebRTCApi {
19
+ constructor(connectionService, messageSender, webrtcService, agentContext) {
20
+ this.connectionService = connectionService;
21
+ this.messageSender = messageSender;
22
+ this.webrtcService = webrtcService;
23
+ this.agentContext = agentContext;
24
+ // Register handlers at API construction time to ensure DI is ready
25
+ this.onAgentReady = (() => {
26
+ this.agentContext.dependencyManager.registerMessageHandlers([
27
+ new handlers_1.OfferHandler(this.webrtcService),
28
+ new handlers_1.AnswerHandler(this.webrtcService),
29
+ new handlers_1.IceHandler(this.webrtcService),
30
+ new handlers_1.EndHandler(this.webrtcService),
31
+ new handlers_1.ProposeHandler(this.webrtcService),
32
+ ]);
33
+ return true;
34
+ })();
35
+ }
36
+ async startCall(options) {
37
+ 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);
39
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
40
+ message,
41
+ associatedRecord: record,
42
+ connectionRecord: connection,
43
+ });
44
+ await this.messageSender.sendMessage(outbound);
45
+ return record;
46
+ }
47
+ async acceptCall(options) {
48
+ const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
49
+ const { message } = this.webrtcService.createAnswer(this.agentContext, connection, options.threadId, options.sdp);
50
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
51
+ message,
52
+ connectionRecord: connection,
53
+ });
54
+ await this.messageSender.sendMessage(outbound);
55
+ }
56
+ async sendIce(options) {
57
+ const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
58
+ const message = this.webrtcService.createIce(options.threadId, options.candidate, options.endOfCandidates);
59
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
60
+ message,
61
+ connectionRecord: connection,
62
+ });
63
+ await this.messageSender.sendMessage(outbound);
64
+ }
65
+ async endCall(options) {
66
+ const connection = await this.connectionService.getById(this.agentContext, options.connectionId);
67
+ const message = this.webrtcService.createEnd(options.threadId, options.reason);
68
+ const outbound = await (0, core_2.getOutboundMessageContext)(this.agentContext, {
69
+ message,
70
+ connectionRecord: connection,
71
+ });
72
+ await this.messageSender.sendMessage(outbound);
73
+ }
74
+ };
75
+ exports.WebRTCApi = WebRTCApi;
76
+ exports.WebRTCApi = WebRTCApi = __decorate([
77
+ (0, tsyringe_1.injectable)(),
78
+ __metadata("design:paramtypes", [core_1.ConnectionService,
79
+ core_1.MessageSender,
80
+ WebRTCService_1.WebRTCService,
81
+ core_1.AgentContext])
82
+ ], WebRTCApi);
83
+ //# sourceMappingURL=WebRTCApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebRTCApi.js","sourceRoot":"","sources":["../../src/webrtc/WebRTCApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { InboundMessageContext } from '@credo-ts/core';
2
+ export declare enum WebRTCEvents {
3
+ IncomingOffer = "WebRTCEvents.IncomingOffer",
4
+ IncomingAnswer = "WebRTCEvents.IncomingAnswer",
5
+ IncomingIce = "WebRTCEvents.IncomingIce",
6
+ CallEnded = "WebRTCEvents.CallEnded"
7
+ }
8
+ export interface IncomingOfferEvent {
9
+ context: InboundMessageContext;
10
+ thid: string;
11
+ sdp: string;
12
+ iceServers?: Array<{
13
+ urls: string | string[];
14
+ username?: string;
15
+ credential?: string;
16
+ }>;
17
+ }
18
+ export interface IncomingAnswerEvent {
19
+ context: InboundMessageContext;
20
+ thid: string;
21
+ sdp: string;
22
+ }
23
+ export interface IncomingIceEvent {
24
+ context: InboundMessageContext;
25
+ thid: string;
26
+ candidate: Record<string, unknown>;
27
+ endOfCandidates?: boolean;
28
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebRTCEvents = void 0;
4
+ var WebRTCEvents;
5
+ (function (WebRTCEvents) {
6
+ WebRTCEvents["IncomingOffer"] = "WebRTCEvents.IncomingOffer";
7
+ WebRTCEvents["IncomingAnswer"] = "WebRTCEvents.IncomingAnswer";
8
+ WebRTCEvents["IncomingIce"] = "WebRTCEvents.IncomingIce";
9
+ WebRTCEvents["CallEnded"] = "WebRTCEvents.CallEnded";
10
+ })(WebRTCEvents || (exports.WebRTCEvents = WebRTCEvents = {}));
11
+ //# sourceMappingURL=WebRTCEvents.js.map
@@ -0,0 +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"}
@@ -0,0 +1,6 @@
1
+ import type { DependencyManager, FeatureRegistry, Module } from '@credo-ts/core';
2
+ import { WebRTCApi } from './WebRTCApi';
3
+ export declare class WebRTCModule implements Module {
4
+ readonly api: typeof WebRTCApi;
5
+ register(dependencyManager: DependencyManager, featureRegistry: FeatureRegistry): void;
6
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebRTCModule = void 0;
4
+ const core_1 = require("@credo-ts/core");
5
+ const WebRTCApi_1 = require("./WebRTCApi");
6
+ const WebRTCCallRepository_1 = require("./repository/WebRTCCallRepository");
7
+ const WebRTCService_1 = require("./services/WebRTCService");
8
+ class WebRTCModule {
9
+ constructor() {
10
+ this.api = WebRTCApi_1.WebRTCApi;
11
+ }
12
+ register(dependencyManager, featureRegistry) {
13
+ // Services & Repo
14
+ dependencyManager.registerSingleton(WebRTCService_1.WebRTCService);
15
+ dependencyManager.registerSingleton(WebRTCCallRepository_1.WebRTCCallRepository);
16
+ // Handlers are registered by the API constructor (after agent init), similar to ActionMenu
17
+ // Feature Registry: advertise DIDComm protocol
18
+ featureRegistry.register(new core_1.Protocol({
19
+ id: 'https://didcomm.org/webrtc/1.0',
20
+ roles: ['caller', 'callee'],
21
+ }));
22
+ }
23
+ }
24
+ exports.WebRTCModule = WebRTCModule;
25
+ //# sourceMappingURL=WebRTCModule.js.map
@@ -0,0 +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"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { AnswerMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class AnswerHandler implements MessageHandler {
5
+ supportedMessages: (typeof AnswerMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<AnswerHandler>): 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.AnswerHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let AnswerHandler = class AnswerHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.AnswerMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processAnswer(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.AnswerHandler = AnswerHandler;
27
+ exports.AnswerHandler = AnswerHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], AnswerHandler);
31
+ //# sourceMappingURL=AnswerHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnswerHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/AnswerHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAA2C;AAC3C,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAIxB,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,wBAAa,CAAC,CAAA;QAIxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAoD;QACtE,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACzC,OAAM;IACR,CAAC;CACF,CAAA;AAZY,sCAAa;wBAAb,aAAa;IADzB,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,aAAa,CAYzB"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { EndMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class EndHandler implements MessageHandler {
5
+ supportedMessages: (typeof EndMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<EndHandler>): 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.EndHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let EndHandler = class EndHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.EndMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processEnd(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.EndHandler = EndHandler;
27
+ exports.EndHandler = EndHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], EndHandler);
31
+ //# sourceMappingURL=EndHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/EndHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAAwC;AACxC,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,UAAU,GAAhB,MAAM,UAAU;IAIrB,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,qBAAU,CAAC,CAAA;QAIrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAiD;QACnE,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACtC,OAAM;IACR,CAAC;CACF,CAAA;AAZY,gCAAU;qBAAV,UAAU;IADtB,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,UAAU,CAYtB"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { IceMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class IceHandler implements MessageHandler {
5
+ supportedMessages: (typeof IceMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<IceHandler>): 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.IceHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let IceHandler = class IceHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.IceMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processIce(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.IceHandler = IceHandler;
27
+ exports.IceHandler = IceHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], IceHandler);
31
+ //# sourceMappingURL=IceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IceHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/IceHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAAwC;AACxC,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,UAAU,GAAhB,MAAM,UAAU;IAIrB,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,qBAAU,CAAC,CAAA;QAIrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAiD;QACnE,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACtC,OAAM;IACR,CAAC;CACF,CAAA;AAZY,gCAAU;qBAAV,UAAU;IADtB,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,UAAU,CAYtB"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { OfferMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class OfferHandler implements MessageHandler {
5
+ supportedMessages: (typeof OfferMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<OfferHandler>): 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.OfferHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let OfferHandler = class OfferHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.OfferMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processOffer(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.OfferHandler = OfferHandler;
27
+ exports.OfferHandler = OfferHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], OfferHandler);
31
+ //# sourceMappingURL=OfferHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OfferHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/OfferHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAA0C;AAC1C,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,YAAY,GAAlB,MAAM,YAAY;IAIvB,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,uBAAY,CAAC,CAAA;QAIvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAmD;QACrE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACxC,OAAM;IACR,CAAC;CACF,CAAA;AAZY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,YAAY,CAYxB"}
@@ -0,0 +1,9 @@
1
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
2
+ import { ProposeMessage } from '../messages';
3
+ import { WebRTCService } from '../services/WebRTCService';
4
+ export declare class ProposeHandler implements MessageHandler {
5
+ supportedMessages: (typeof ProposeMessage)[];
6
+ private service;
7
+ constructor(service: WebRTCService);
8
+ handle(inbound: MessageHandlerInboundMessage<ProposeHandler>): 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.ProposeHandler = void 0;
13
+ const messages_1 = require("../messages");
14
+ const tsyringe_1 = require("tsyringe");
15
+ const WebRTCService_1 = require("../services/WebRTCService");
16
+ let ProposeHandler = class ProposeHandler {
17
+ constructor(service) {
18
+ this.supportedMessages = [messages_1.ProposeMessage];
19
+ this.service = service;
20
+ }
21
+ async handle(inbound) {
22
+ await this.service.processPropose(inbound);
23
+ return;
24
+ }
25
+ };
26
+ exports.ProposeHandler = ProposeHandler;
27
+ exports.ProposeHandler = ProposeHandler = __decorate([
28
+ (0, tsyringe_1.injectable)(),
29
+ __metadata("design:paramtypes", [WebRTCService_1.WebRTCService])
30
+ ], ProposeHandler);
31
+ //# sourceMappingURL=ProposeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposeHandler.js","sourceRoot":"","sources":["../../../src/webrtc/handlers/ProposeHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,0CAA4C;AAC5C,uCAAqC;AACrC,6DAAyD;AAGlD,IAAM,cAAc,GAApB,MAAM,cAAc;IAIzB,YAAmB,OAAsB;QAHlC,sBAAiB,GAAG,CAAC,yBAAc,CAAC,CAAA;QAIzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAqD;QACvE,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;CACF,CAAA;AAZY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,qBAAU,GAAE;qCAKiB,6BAAa;GAJ9B,cAAc,CAY1B"}
@@ -0,0 +1,5 @@
1
+ export * from './OfferHandler';
2
+ export * from './AnswerHandler';
3
+ export * from './IceHandler';
4
+ export * from './EndHandler';
5
+ export * from './ProposeHandler';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./OfferHandler"), exports);
18
+ __exportStar(require("./AnswerHandler"), exports);
19
+ __exportStar(require("./IceHandler"), exports);
20
+ __exportStar(require("./EndHandler"), exports);
21
+ __exportStar(require("./ProposeHandler"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,14 @@
1
+ import { AgentMessage } from '@credo-ts/core';
2
+ export interface AnswerMessageOptions {
3
+ id?: string;
4
+ threadId: string;
5
+ sdp: string;
6
+ jws?: Record<string, unknown>;
7
+ }
8
+ export declare class AnswerMessage extends AgentMessage {
9
+ constructor(options: AnswerMessageOptions);
10
+ readonly type: string;
11
+ static readonly type: import("@credo-ts/core").ParsedMessageType;
12
+ sdp: string;
13
+ jws?: Record<string, unknown>;
14
+ }