@memberjunction/telephony-adapters 0.0.0 → 6.1.0-edge.7
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/LICENSE +183 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/resolvers/RingCentralTelephonyResolver.d.ts +20 -0
- package/dist/resolvers/RingCentralTelephonyResolver.d.ts.map +1 -0
- package/dist/resolvers/RingCentralTelephonyResolver.js +83 -0
- package/dist/resolvers/RingCentralTelephonyResolver.js.map +1 -0
- package/dist/resolvers/TeamsMeetingsResolver.d.ts +21 -0
- package/dist/resolvers/TeamsMeetingsResolver.d.ts.map +1 -0
- package/dist/resolvers/TeamsMeetingsResolver.js +87 -0
- package/dist/resolvers/TeamsMeetingsResolver.js.map +1 -0
- package/dist/resolvers/TelephonyResolver.d.ts +20 -0
- package/dist/resolvers/TelephonyResolver.d.ts.map +1 -0
- package/dist/resolvers/TelephonyResolver.js +83 -0
- package/dist/resolvers/TelephonyResolver.js.map +1 -0
- package/dist/resolvers/VonageTelephonyResolver.d.ts +20 -0
- package/dist/resolvers/VonageTelephonyResolver.d.ts.map +1 -0
- package/dist/resolvers/VonageTelephonyResolver.js +83 -0
- package/dist/resolvers/VonageTelephonyResolver.js.map +1 -0
- package/dist/resolvers/index.d.ts +10 -0
- package/dist/resolvers/index.d.ts.map +1 -0
- package/dist/resolvers/index.js +10 -0
- package/dist/resolvers/index.js.map +1 -0
- package/dist/server-extensions/RingCentralTelephonyExtension.d.ts +14 -0
- package/dist/server-extensions/RingCentralTelephonyExtension.d.ts.map +1 -0
- package/dist/server-extensions/RingCentralTelephonyExtension.js +81 -0
- package/dist/server-extensions/RingCentralTelephonyExtension.js.map +1 -0
- package/dist/server-extensions/TeamsMeetingsExtension.d.ts +17 -0
- package/dist/server-extensions/TeamsMeetingsExtension.d.ts.map +1 -0
- package/dist/server-extensions/TeamsMeetingsExtension.js +109 -0
- package/dist/server-extensions/TeamsMeetingsExtension.js.map +1 -0
- package/dist/server-extensions/TwilioTelephonyExtension.d.ts +14 -0
- package/dist/server-extensions/TwilioTelephonyExtension.d.ts.map +1 -0
- package/dist/server-extensions/TwilioTelephonyExtension.js +88 -0
- package/dist/server-extensions/TwilioTelephonyExtension.js.map +1 -0
- package/dist/server-extensions/VonageTelephonyExtension.d.ts +14 -0
- package/dist/server-extensions/VonageTelephonyExtension.d.ts.map +1 -0
- package/dist/server-extensions/VonageTelephonyExtension.js +89 -0
- package/dist/server-extensions/VonageTelephonyExtension.js.map +1 -0
- package/dist/sessionManager.d.ts +26 -0
- package/dist/sessionManager.d.ts.map +1 -0
- package/dist/sessionManager.js +38 -0
- package/dist/sessionManager.js.map +1 -0
- package/dist/telephony/RingCentralTelephonyService.d.ts +79 -0
- package/dist/telephony/RingCentralTelephonyService.d.ts.map +1 -0
- package/dist/telephony/RingCentralTelephonyService.js +225 -0
- package/dist/telephony/RingCentralTelephonyService.js.map +1 -0
- package/dist/telephony/TeamsMeetingsRouter.d.ts +21 -0
- package/dist/telephony/TeamsMeetingsRouter.d.ts.map +1 -0
- package/dist/telephony/TeamsMeetingsRouter.js +84 -0
- package/dist/telephony/TeamsMeetingsRouter.js.map +1 -0
- package/dist/telephony/TeamsMeetingsService.d.ts +76 -0
- package/dist/telephony/TeamsMeetingsService.d.ts.map +1 -0
- package/dist/telephony/TeamsMeetingsService.js +157 -0
- package/dist/telephony/TeamsMeetingsService.js.map +1 -0
- package/dist/telephony/TwilioTelephonyRouter.d.ts +30 -0
- package/dist/telephony/TwilioTelephonyRouter.d.ts.map +1 -0
- package/dist/telephony/TwilioTelephonyRouter.js +137 -0
- package/dist/telephony/TwilioTelephonyRouter.js.map +1 -0
- package/dist/telephony/TwilioTelephonyService.d.ts +91 -0
- package/dist/telephony/TwilioTelephonyService.d.ts.map +1 -0
- package/dist/telephony/TwilioTelephonyService.js +191 -0
- package/dist/telephony/TwilioTelephonyService.js.map +1 -0
- package/dist/telephony/VonageTelephonyRouter.d.ts +24 -0
- package/dist/telephony/VonageTelephonyRouter.d.ts.map +1 -0
- package/dist/telephony/VonageTelephonyRouter.js +175 -0
- package/dist/telephony/VonageTelephonyRouter.js.map +1 -0
- package/dist/telephony/VonageTelephonyService.d.ts +62 -0
- package/dist/telephony/VonageTelephonyService.d.ts.map +1 -0
- package/dist/telephony/VonageTelephonyService.js +162 -0
- package/dist/telephony/VonageTelephonyService.js.map +1 -0
- package/dist/telephony/calendar-scheduler.d.ts +41 -0
- package/dist/telephony/calendar-scheduler.d.ts.map +1 -0
- package/dist/telephony/calendar-scheduler.js +98 -0
- package/dist/telephony/calendar-scheduler.js.map +1 -0
- package/dist/telephony/index.d.ts +21 -0
- package/dist/telephony/index.d.ts.map +1 -0
- package/dist/telephony/index.js +26 -0
- package/dist/telephony/index.js.map +1 -0
- package/dist/telephony/ringcentral-runtime.d.ts +11 -0
- package/dist/telephony/ringcentral-runtime.d.ts.map +1 -0
- package/dist/telephony/ringcentral-runtime.js +20 -0
- package/dist/telephony/ringcentral-runtime.js.map +1 -0
- package/dist/telephony/teams-meetings-runtime.d.ts +11 -0
- package/dist/telephony/teams-meetings-runtime.d.ts.map +1 -0
- package/dist/telephony/teams-meetings-runtime.js +20 -0
- package/dist/telephony/teams-meetings-runtime.js.map +1 -0
- package/dist/telephony/teamsAcsMediaRegistry.d.ts +35 -0
- package/dist/telephony/teamsAcsMediaRegistry.d.ts.map +1 -0
- package/dist/telephony/teamsAcsMediaRegistry.js +86 -0
- package/dist/telephony/teamsAcsMediaRegistry.js.map +1 -0
- package/dist/telephony/telephony-runtime.d.ts +14 -0
- package/dist/telephony/telephony-runtime.d.ts.map +1 -0
- package/dist/telephony/telephony-runtime.js +23 -0
- package/dist/telephony/telephony-runtime.js.map +1 -0
- package/dist/telephony/twilioMediaRegistry.d.ts +60 -0
- package/dist/telephony/twilioMediaRegistry.d.ts.map +1 -0
- package/dist/telephony/twilioMediaRegistry.js +109 -0
- package/dist/telephony/twilioMediaRegistry.js.map +1 -0
- package/dist/telephony/vonage-runtime.d.ts +11 -0
- package/dist/telephony/vonage-runtime.d.ts.map +1 -0
- package/dist/telephony/vonage-runtime.js +20 -0
- package/dist/telephony/vonage-runtime.js.map +1 -0
- package/dist/telephony/vonageMediaRegistry.d.ts +38 -0
- package/dist/telephony/vonageMediaRegistry.d.ts.map +1 -0
- package/dist/telephony/vonageMediaRegistry.js +113 -0
- package/dist/telephony/vonageMediaRegistry.js.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +27 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -8
- package/README.md +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelephonyResolver.js","sourceRoot":"","sources":["../../src/resolvers/TelephonyResolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAA4B,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,gDAAgD;AAEzC,IAAM,eAAe,GAArB,MAAM,eAAe;CAU3B,CAAA;AARG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;;gDACH;AAGlB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAClB;AAItB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;gDACH;AATR,eAAe;IAD3B,UAAU,EAAE;GACA,eAAe,CAU3B;;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC1B;;OAEG;IAEG,AAAN,KAAK,CAAC,eAAe,CACqB,eAAuB,EAC9B,QAAgB,EACxC,UAAoC,EAAE;QAE7C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACvG,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,OAAO,CAAC,mCAAmC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,OAAO,GAAG,yBAAyB,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,QAAQ,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;CACJ,CAAA;AA3BS;IADL,QAAQ,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;IAE3B,WAAA,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IACpC,WAAA,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC7B,WAAA,GAAG,EAAE,CAAA;;;;wDAuBT;AA/BQ,iBAAiB;IAD7B,QAAQ,EAAE;GACE,iBAAiB,CAgC7B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview GraphQL surface for OUTBOUND Vonage telephony: `PlaceVonageCall`.
|
|
3
|
+
*
|
|
4
|
+
* @module @memberjunction/telephony-adapters
|
|
5
|
+
*/
|
|
6
|
+
import { TelephonyResolverContext } from '../types.js';
|
|
7
|
+
/** Result of an outbound place-call attempt. */
|
|
8
|
+
export declare class PlaceVonageCallResult {
|
|
9
|
+
Success: boolean;
|
|
10
|
+
ErrorMessage?: string;
|
|
11
|
+
/** The placed Vonage call UUID. */
|
|
12
|
+
CallId: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class VonageTelephonyResolver {
|
|
15
|
+
/**
|
|
16
|
+
* Places an outbound call from the given agent identity to a destination number.
|
|
17
|
+
*/
|
|
18
|
+
PlaceVonageCall(agentIdentityId: string, toNumber: string, context?: TelephonyResolverContext): Promise<PlaceVonageCallResult>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=VonageTelephonyResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VonageTelephonyResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/VonageTelephonyResolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,wBAAwB,EAA4C,MAAM,aAAa,CAAC;AAGjG,gDAAgD;AAChD,qBACa,qBAAqB;IAE9B,OAAO,EAAG,OAAO,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IAEnC,MAAM,EAAG,MAAM,CAAC;CACnB;AAED,qBACa,uBAAuB;IAChC;;OAEG;IAEG,eAAe,CACqB,eAAe,EAAE,MAAM,EAC9B,QAAQ,EAAE,MAAM,EACxC,OAAO,GAAE,wBAA6B,GAC9C,OAAO,CAAC,qBAAqB,CAAC;CAuBpC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview GraphQL surface for OUTBOUND Vonage telephony: `PlaceVonageCall`.
|
|
3
|
+
*
|
|
4
|
+
* @module @memberjunction/telephony-adapters
|
|
5
|
+
*/
|
|
6
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
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;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14
|
+
};
|
|
15
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
16
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
17
|
+
};
|
|
18
|
+
import { Resolver, Mutation, Arg, Ctx, ObjectType, Field } from 'type-graphql';
|
|
19
|
+
import { LogError } from '@memberjunction/core';
|
|
20
|
+
import { getUserFromPayload, getReadWriteProvider } from '../types.js';
|
|
21
|
+
import { GetVonageTelephonyService } from '../telephony/vonage-runtime.js';
|
|
22
|
+
/** Result of an outbound place-call attempt. */
|
|
23
|
+
let PlaceVonageCallResult = class PlaceVonageCallResult {
|
|
24
|
+
};
|
|
25
|
+
__decorate([
|
|
26
|
+
Field(() => Boolean),
|
|
27
|
+
__metadata("design:type", Boolean)
|
|
28
|
+
], PlaceVonageCallResult.prototype, "Success", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Field(() => String, { nullable: true }),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], PlaceVonageCallResult.prototype, "ErrorMessage", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
Field(() => String),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], PlaceVonageCallResult.prototype, "CallId", void 0);
|
|
37
|
+
PlaceVonageCallResult = __decorate([
|
|
38
|
+
ObjectType()
|
|
39
|
+
], PlaceVonageCallResult);
|
|
40
|
+
export { PlaceVonageCallResult };
|
|
41
|
+
let VonageTelephonyResolver = class VonageTelephonyResolver {
|
|
42
|
+
/**
|
|
43
|
+
* Places an outbound call from the given agent identity to a destination number.
|
|
44
|
+
*/
|
|
45
|
+
async PlaceVonageCall(agentIdentityId, toNumber, context = {}) {
|
|
46
|
+
const failure = (msg) => ({ Success: false, ErrorMessage: msg, CallId: '' });
|
|
47
|
+
try {
|
|
48
|
+
const user = getUserFromPayload(context.userPayload);
|
|
49
|
+
if (!user) {
|
|
50
|
+
return failure('Unable to determine current user.');
|
|
51
|
+
}
|
|
52
|
+
const service = GetVonageTelephonyService();
|
|
53
|
+
if (!service) {
|
|
54
|
+
return failure('Vonage telephony is not configured on this server.');
|
|
55
|
+
}
|
|
56
|
+
const provider = getReadWriteProvider(context.providers);
|
|
57
|
+
if (!provider) {
|
|
58
|
+
return failure('Database provider is not available.');
|
|
59
|
+
}
|
|
60
|
+
const callId = await service.PlaceOutboundCall(agentIdentityId, toNumber, user, provider);
|
|
61
|
+
return { Success: true, CallId: callId };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
65
|
+
LogError(`PlaceVonageCall failed: ${msg}`);
|
|
66
|
+
return failure(msg);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
__decorate([
|
|
71
|
+
Mutation(() => PlaceVonageCallResult),
|
|
72
|
+
__param(0, Arg('agentIdentityId', () => String)),
|
|
73
|
+
__param(1, Arg('toNumber', () => String)),
|
|
74
|
+
__param(2, Ctx()),
|
|
75
|
+
__metadata("design:type", Function),
|
|
76
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
77
|
+
__metadata("design:returntype", Promise)
|
|
78
|
+
], VonageTelephonyResolver.prototype, "PlaceVonageCall", null);
|
|
79
|
+
VonageTelephonyResolver = __decorate([
|
|
80
|
+
Resolver()
|
|
81
|
+
], VonageTelephonyResolver);
|
|
82
|
+
export { VonageTelephonyResolver };
|
|
83
|
+
//# sourceMappingURL=VonageTelephonyResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VonageTelephonyResolver.js","sourceRoot":"","sources":["../../src/resolvers/VonageTelephonyResolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAA4B,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,gDAAgD;AAEzC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAUjC,CAAA;AARG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;;sDACH;AAGlB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DAClB;AAItB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;qDACJ;AATP,qBAAqB;IADjC,UAAU,EAAE;GACA,qBAAqB,CAUjC;;AAGM,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAChC;;OAEG;IAEG,AAAN,KAAK,CAAC,eAAe,CACqB,eAAuB,EAC9B,QAAgB,EACxC,UAAoC,EAAE;QAE7C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAyB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,OAAO,CAAC,mCAAmC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,OAAO,GAAG,yBAAyB,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,QAAQ,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;CACJ,CAAA;AA3BS;IADL,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;IAEjC,WAAA,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IACpC,WAAA,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC7B,WAAA,GAAG,EAAE,CAAA;;;;8DAuBT;AA/BQ,uBAAuB;IADnC,QAAQ,EAAE;GACE,uBAAuB,CAgCnC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Resolvers exports for @memberjunction/telephony-adapters.
|
|
3
|
+
*
|
|
4
|
+
* @module @memberjunction/telephony-adapters
|
|
5
|
+
*/
|
|
6
|
+
export { TelephonyResolver, PlaceCallResult } from './TelephonyResolver.js';
|
|
7
|
+
export { VonageTelephonyResolver, PlaceVonageCallResult } from './VonageTelephonyResolver.js';
|
|
8
|
+
export { RingCentralTelephonyResolver, PlaceRingCentralCallResult } from './RingCentralTelephonyResolver.js';
|
|
9
|
+
export { TeamsMeetingsResolver, StartTeamsMeetingResult } from './TeamsMeetingsResolver.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC7G,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Resolvers exports for @memberjunction/telephony-adapters.
|
|
3
|
+
*
|
|
4
|
+
* @module @memberjunction/telephony-adapters
|
|
5
|
+
*/
|
|
6
|
+
export { TelephonyResolver, PlaceCallResult } from './TelephonyResolver.js';
|
|
7
|
+
export { VonageTelephonyResolver, PlaceVonageCallResult } from './VonageTelephonyResolver.js';
|
|
8
|
+
export { RingCentralTelephonyResolver, PlaceRingCentralCallResult } from './RingCentralTelephonyResolver.js';
|
|
9
|
+
export { TeamsMeetingsResolver, StartTeamsMeetingResult } from './TeamsMeetingsResolver.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC7G,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description RingCentral Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseServerExtension, ServerExtensionConfig, ServerExtensionPhase, ServerExtensionInitContext, ExtensionInitResult, ExtensionHealthResult } from '@memberjunction/server-extensions-core';
|
|
6
|
+
export declare class RingCentralTelephonyExtension extends BaseServerExtension {
|
|
7
|
+
get DefaultPhase(): ServerExtensionPhase;
|
|
8
|
+
private service;
|
|
9
|
+
private config;
|
|
10
|
+
Initialize(contextOrApp: ServerExtensionInitContext, _config?: ServerExtensionConfig): Promise<ExtensionInitResult>;
|
|
11
|
+
Shutdown(): Promise<void>;
|
|
12
|
+
HealthCheck(): Promise<ExtensionHealthResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=RingCentralTelephonyExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RingCentralTelephonyExtension.d.ts","sourceRoot":"","sources":["../../src/server-extensions/RingCentralTelephonyExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAOhD,qBACa,6BAA8B,SAAQ,mBAAmB;IAClE,IAAoB,YAAY,IAAI,oBAAoB,CAEvD;IAED,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,MAAM,CAA2C;IAE5C,UAAU,CACnB,YAAY,EAAE,0BAA0B,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,mBAAmB,CAAC;IA6ClB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAU7D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description RingCentral Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
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;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { LogStatus } from '@memberjunction/core';
|
|
13
|
+
import { BaseServerExtension, } from '@memberjunction/server-extensions-core';
|
|
14
|
+
import { RingCentralTelephonyService, SetRingCentralTelephonyService, } from '../telephony/index.js';
|
|
15
|
+
let RingCentralTelephonyExtension = class RingCentralTelephonyExtension extends BaseServerExtension {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.service = null;
|
|
19
|
+
this.config = null;
|
|
20
|
+
}
|
|
21
|
+
get DefaultPhase() {
|
|
22
|
+
return 'pre-auth';
|
|
23
|
+
}
|
|
24
|
+
async Initialize(contextOrApp, _config) {
|
|
25
|
+
const context = contextOrApp;
|
|
26
|
+
const rawSettings = context.config.Settings;
|
|
27
|
+
if (!rawSettings?.sipUsername || !rawSettings?.sipPassword) {
|
|
28
|
+
return {
|
|
29
|
+
Success: false,
|
|
30
|
+
Skipped: true,
|
|
31
|
+
Message: 'RingCentral telephony is not configured (missing sipUsername or sipPassword)',
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const config = {
|
|
35
|
+
sipDomain: rawSettings.sipDomain ?? '',
|
|
36
|
+
sipOutboundProxy: rawSettings.sipOutboundProxy ?? '',
|
|
37
|
+
sipUsername: rawSettings.sipUsername,
|
|
38
|
+
sipPassword: rawSettings.sipPassword,
|
|
39
|
+
sipAuthorizationId: rawSettings.sipAuthorizationId ?? '',
|
|
40
|
+
codec: rawSettings.codec,
|
|
41
|
+
ignoreTlsCertErrors: rawSettings.ignoreTlsCertErrors,
|
|
42
|
+
};
|
|
43
|
+
this.config = config;
|
|
44
|
+
const service = new RingCentralTelephonyService(config);
|
|
45
|
+
this.service = service;
|
|
46
|
+
// Bind runtime holder for GraphQL resolvers
|
|
47
|
+
SetRingCentralTelephonyService(service);
|
|
48
|
+
// Start SIP softphone registration (fire-and-forget)
|
|
49
|
+
void service.start();
|
|
50
|
+
LogStatus(`[Telephony] RingCentral SIP softphone starting (codec ${config.codec ?? 'OPUS/16000'})`);
|
|
51
|
+
return {
|
|
52
|
+
Success: true,
|
|
53
|
+
Message: 'RingCentral SIP softphone started',
|
|
54
|
+
RegisteredRoutes: [],
|
|
55
|
+
Service: {
|
|
56
|
+
key: 'RingCentralTelephonyService',
|
|
57
|
+
instance: service,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async Shutdown() {
|
|
62
|
+
this.service?.dispose();
|
|
63
|
+
SetRingCentralTelephonyService(undefined);
|
|
64
|
+
this.service = null;
|
|
65
|
+
}
|
|
66
|
+
async HealthCheck() {
|
|
67
|
+
return {
|
|
68
|
+
Name: 'RingCentralTelephonyExtension',
|
|
69
|
+
Healthy: !!this.service,
|
|
70
|
+
Details: {
|
|
71
|
+
configured: !!this.config,
|
|
72
|
+
sipUsername: this.config?.sipUsername,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
RingCentralTelephonyExtension = __decorate([
|
|
78
|
+
RegisterClass(BaseServerExtension, 'RingCentralTelephonyExtension')
|
|
79
|
+
], RingCentralTelephonyExtension);
|
|
80
|
+
export { RingCentralTelephonyExtension };
|
|
81
|
+
//# sourceMappingURL=RingCentralTelephonyExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RingCentralTelephonyExtension.js","sourceRoot":"","sources":["../../src/server-extensions/RingCentralTelephonyExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACH,mBAAmB,GAMtB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACH,2BAA2B,EAC3B,8BAA8B,GACjC,MAAM,uBAAuB,CAAC;AAGxB,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,mBAAmB;IAA/D;;QAKK,YAAO,GAAuC,IAAI,CAAC;QACnD,WAAM,GAAsC,IAAI,CAAC;IAkE7D,CAAC;IAvEG,IAAoB,YAAY;QAC5B,OAAO,UAAU,CAAC;IACtB,CAAC;IAKM,KAAK,CAAC,UAAU,CACnB,YAAwC,EACxC,OAA+B;QAE/B,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,QAA0D,CAAC;QAE9F,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;YACzD,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,8EAA8E;aAC1F,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAA+B;YACvC,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,EAAE;YACtC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,IAAI,EAAE;YACpD,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,IAAI,EAAE;YACxD,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;SACvD,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,4CAA4C;QAC5C,8BAA8B,CAAC,OAAO,CAAC,CAAC;QAExC,qDAAqD;QACrD,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,SAAS,CAAC,yDAAyD,MAAM,CAAC,KAAK,IAAI,YAAY,GAAG,CAAC,CAAC;QAEpG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mCAAmC;YAC5C,gBAAgB,EAAE,EAAE;YACpB,OAAO,EAAE;gBACL,GAAG,EAAE,6BAA6B;gBAClC,QAAQ,EAAE,OAAO;aACpB;SACJ,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACxB,8BAA8B,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,WAAW;QACpB,OAAO;YACH,IAAI,EAAE,+BAA+B;YACrC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;YACvB,OAAO,EAAE;gBACL,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;gBACzB,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW;aACxC;SACJ,CAAC;IACN,CAAC;CACJ,CAAA;AAxEY,6BAA6B;IADzC,aAAa,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;GACvD,6BAA6B,CAwEzC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Teams Meetings Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseServerExtension, ServerExtensionConfig, ServerExtensionPhase, ServerExtensionInitContext, ExtensionInitResult, ExtensionHealthResult } from '@memberjunction/server-extensions-core';
|
|
6
|
+
export declare class TeamsMeetingsExtension extends BaseServerExtension {
|
|
7
|
+
get DefaultPhase(): ServerExtensionPhase;
|
|
8
|
+
private service;
|
|
9
|
+
private registry;
|
|
10
|
+
private config;
|
|
11
|
+
private schedulerHandle;
|
|
12
|
+
Initialize(contextOrApp: ServerExtensionInitContext, _config?: ServerExtensionConfig): Promise<ExtensionInitResult>;
|
|
13
|
+
OnAllExtensionsMounted(_context: ServerExtensionInitContext): Promise<void>;
|
|
14
|
+
Shutdown(): Promise<void>;
|
|
15
|
+
HealthCheck(): Promise<ExtensionHealthResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TeamsMeetingsExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamsMeetingsExtension.d.ts","sourceRoot":"","sources":["../../src/server-extensions/TeamsMeetingsExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAYhD,qBACa,sBAAuB,SAAQ,mBAAmB;IAC3D,IAAoB,YAAY,IAAI,oBAAoB,CAEvD;IAED,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,eAAe,CAAwC;IAElD,UAAU,CACnB,YAAY,EAAE,0BAA0B,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,mBAAmB,CAAC;IAkDT,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAU7D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Teams Meetings Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
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;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { LogStatus, Metadata } from '@memberjunction/core';
|
|
13
|
+
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
14
|
+
import cors from 'cors';
|
|
15
|
+
import { BaseServerExtension, } from '@memberjunction/server-extensions-core';
|
|
16
|
+
import { createTeamsMeetingsHandler, TEAMS_MEETINGS_MOUNT_PATH, SetTeamsMeetingsService, StartCalendarScheduler, } from '../telephony/index.js';
|
|
17
|
+
let TeamsMeetingsExtension = class TeamsMeetingsExtension extends BaseServerExtension {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.service = null;
|
|
21
|
+
this.registry = null;
|
|
22
|
+
this.config = null;
|
|
23
|
+
this.schedulerHandle = null;
|
|
24
|
+
}
|
|
25
|
+
get DefaultPhase() {
|
|
26
|
+
return 'pre-auth';
|
|
27
|
+
}
|
|
28
|
+
async Initialize(contextOrApp, _config) {
|
|
29
|
+
const context = contextOrApp;
|
|
30
|
+
const rawSettings = context.config.Settings;
|
|
31
|
+
if (rawSettings?.enabled === false || !rawSettings?.appId) {
|
|
32
|
+
return {
|
|
33
|
+
Success: false,
|
|
34
|
+
Skipped: true,
|
|
35
|
+
Message: 'Teams meetings not configured or disabled',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const config = {
|
|
39
|
+
enabled: true,
|
|
40
|
+
appId: rawSettings.appId,
|
|
41
|
+
tenantId: rawSettings.tenantId,
|
|
42
|
+
botAccessToken: rawSettings.botAccessToken,
|
|
43
|
+
notificationClientState: rawSettings.notificationClientState,
|
|
44
|
+
acsSampleRate: rawSettings.acsSampleRate,
|
|
45
|
+
modelSampleRate: rawSettings.modelSampleRate,
|
|
46
|
+
};
|
|
47
|
+
this.config = config;
|
|
48
|
+
const rootPath = context.config.RootPath || TEAMS_MEETINGS_MOUNT_PATH;
|
|
49
|
+
const handler = createTeamsMeetingsHandler(config);
|
|
50
|
+
this.service = handler.service;
|
|
51
|
+
this.registry = handler.registry;
|
|
52
|
+
// Mount public webhook router
|
|
53
|
+
context.app.use(rootPath, cors(), handler.publicRouter);
|
|
54
|
+
// Bind runtime holder for GraphQL resolvers
|
|
55
|
+
SetTeamsMeetingsService(handler.service);
|
|
56
|
+
LogStatus(`[Meetings] Teams routes registered at ${rootPath}/notifications`);
|
|
57
|
+
return {
|
|
58
|
+
Success: true,
|
|
59
|
+
Message: `Teams meetings routes registered at ${rootPath}/notifications`,
|
|
60
|
+
RegisteredRoutes: [
|
|
61
|
+
`POST ${rootPath}/notifications`,
|
|
62
|
+
],
|
|
63
|
+
Service: {
|
|
64
|
+
key: 'TeamsMeetingsService',
|
|
65
|
+
instance: handler.service,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async OnAllExtensionsMounted(_context) {
|
|
70
|
+
if (!this.service || !this.config) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const systemUser = UserCache.Instance.GetSystemUser();
|
|
74
|
+
const provider = Metadata.Provider; // global-provider-ok: server extension lifecycle runs in server-global provider context
|
|
75
|
+
if (systemUser && provider) {
|
|
76
|
+
this.schedulerHandle = StartCalendarScheduler({
|
|
77
|
+
Provider: provider,
|
|
78
|
+
ContextUser: systemUser,
|
|
79
|
+
TeamsService: this.service,
|
|
80
|
+
TeamsConfig: this.config,
|
|
81
|
+
});
|
|
82
|
+
LogStatus('[Meetings] Teams calendar scheduler started');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async Shutdown() {
|
|
86
|
+
if (this.schedulerHandle) {
|
|
87
|
+
this.schedulerHandle.Stop();
|
|
88
|
+
this.schedulerHandle = null;
|
|
89
|
+
}
|
|
90
|
+
SetTeamsMeetingsService(undefined);
|
|
91
|
+
this.service = null;
|
|
92
|
+
this.registry = null;
|
|
93
|
+
}
|
|
94
|
+
async HealthCheck() {
|
|
95
|
+
return {
|
|
96
|
+
Name: 'TeamsMeetingsExtension',
|
|
97
|
+
Healthy: !!this.service,
|
|
98
|
+
Details: {
|
|
99
|
+
configured: !!this.config,
|
|
100
|
+
appId: this.config?.appId,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
TeamsMeetingsExtension = __decorate([
|
|
106
|
+
RegisterClass(BaseServerExtension, 'TeamsMeetingsExtension')
|
|
107
|
+
], TeamsMeetingsExtension);
|
|
108
|
+
export { TeamsMeetingsExtension };
|
|
109
|
+
//# sourceMappingURL=TeamsMeetingsExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamsMeetingsExtension.js","sourceRoot":"","sources":["../../src/server-extensions/TeamsMeetingsExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Twilio Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseServerExtension, ServerExtensionConfig, ServerExtensionPhase, ServerExtensionInitContext, ExtensionInitResult, ExtensionHealthResult } from '@memberjunction/server-extensions-core';
|
|
6
|
+
export declare class TwilioTelephonyExtension extends BaseServerExtension {
|
|
7
|
+
get DefaultPhase(): ServerExtensionPhase;
|
|
8
|
+
private service;
|
|
9
|
+
private config;
|
|
10
|
+
Initialize(contextOrApp: ServerExtensionInitContext, _config?: ServerExtensionConfig): Promise<ExtensionInitResult>;
|
|
11
|
+
Shutdown(): Promise<void>;
|
|
12
|
+
HealthCheck(): Promise<ExtensionHealthResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=TwilioTelephonyExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TwilioTelephonyExtension.d.ts","sourceRoot":"","sources":["../../src/server-extensions/TwilioTelephonyExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAUhD,qBACa,wBAAyB,SAAQ,mBAAmB;IAC7D,IAAoB,YAAY,IAAI,oBAAoB,CAEvD;IAED,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAAsC;IAEvC,UAAU,CACnB,YAAY,EAAE,0BAA0B,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,mBAAmB,CAAC;IAsDlB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAU7D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Twilio Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
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;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { LogStatus } from '@memberjunction/core';
|
|
13
|
+
import cors from 'cors';
|
|
14
|
+
import { BaseServerExtension, } from '@memberjunction/server-extensions-core';
|
|
15
|
+
import { createTwilioTelephonyHandler, TWILIO_TELEPHONY_MOUNT_PATH, TWILIO_MEDIA_WSS_PATH, SetTwilioTelephonyService, } from '../telephony/index.js';
|
|
16
|
+
let TwilioTelephonyExtension = class TwilioTelephonyExtension extends BaseServerExtension {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.service = null;
|
|
20
|
+
this.config = null;
|
|
21
|
+
}
|
|
22
|
+
get DefaultPhase() {
|
|
23
|
+
return 'pre-auth';
|
|
24
|
+
}
|
|
25
|
+
async Initialize(contextOrApp, _config) {
|
|
26
|
+
const context = contextOrApp;
|
|
27
|
+
const rawSettings = context.config.Settings;
|
|
28
|
+
if (!rawSettings?.accountSid || !rawSettings?.streamPublicUrl) {
|
|
29
|
+
return {
|
|
30
|
+
Success: false,
|
|
31
|
+
Skipped: true,
|
|
32
|
+
Message: 'Twilio telephony is not configured (missing accountSid or streamPublicUrl)',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const config = {
|
|
36
|
+
accountSid: rawSettings.accountSid,
|
|
37
|
+
authToken: rawSettings.authToken,
|
|
38
|
+
apiKeySid: rawSettings.apiKeySid,
|
|
39
|
+
apiKeySecret: rawSettings.apiKeySecret,
|
|
40
|
+
streamPublicUrl: rawSettings.streamPublicUrl,
|
|
41
|
+
webhookSigningSecret: rawSettings.webhookSigningSecret,
|
|
42
|
+
statusCallbackUrl: rawSettings.statusCallbackUrl,
|
|
43
|
+
};
|
|
44
|
+
this.config = config;
|
|
45
|
+
const rootPath = context.config.RootPath || TWILIO_TELEPHONY_MOUNT_PATH;
|
|
46
|
+
const publicUrl = context.publicUrl || 'http://localhost:4000';
|
|
47
|
+
const handler = createTwilioTelephonyHandler(publicUrl, config);
|
|
48
|
+
this.service = handler.service;
|
|
49
|
+
// Mount public webhook router
|
|
50
|
+
context.app.use(rootPath, cors(), handler.publicRouter);
|
|
51
|
+
// Attach media stream WebSocket server
|
|
52
|
+
handler.attachMediaStreamServer();
|
|
53
|
+
// Bind runtime holder for GraphQL resolvers
|
|
54
|
+
SetTwilioTelephonyService(handler.service);
|
|
55
|
+
LogStatus(`[Telephony] Twilio routes registered at ${rootPath}/voice + Media-Streams WSS at ${TWILIO_MEDIA_WSS_PATH}`);
|
|
56
|
+
return {
|
|
57
|
+
Success: true,
|
|
58
|
+
Message: `Twilio telephony routes registered at ${rootPath}/voice`,
|
|
59
|
+
RegisteredRoutes: [
|
|
60
|
+
`POST ${rootPath}/voice`,
|
|
61
|
+
`WSS ${TWILIO_MEDIA_WSS_PATH}`,
|
|
62
|
+
],
|
|
63
|
+
Service: {
|
|
64
|
+
key: 'TwilioTelephonyService',
|
|
65
|
+
instance: handler.service,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async Shutdown() {
|
|
70
|
+
SetTwilioTelephonyService(undefined);
|
|
71
|
+
this.service = null;
|
|
72
|
+
}
|
|
73
|
+
async HealthCheck() {
|
|
74
|
+
return {
|
|
75
|
+
Name: 'TwilioTelephonyExtension',
|
|
76
|
+
Healthy: !!this.service,
|
|
77
|
+
Details: {
|
|
78
|
+
configured: !!this.config,
|
|
79
|
+
accountSid: this.config?.accountSid ? `${this.config.accountSid.slice(0, 4)}...` : undefined,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
TwilioTelephonyExtension = __decorate([
|
|
85
|
+
RegisterClass(BaseServerExtension, 'TwilioTelephonyExtension')
|
|
86
|
+
], TwilioTelephonyExtension);
|
|
87
|
+
export { TwilioTelephonyExtension };
|
|
88
|
+
//# sourceMappingURL=TwilioTelephonyExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TwilioTelephonyExtension.js","sourceRoot":"","sources":["../../src/server-extensions/TwilioTelephonyExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Vonage Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseServerExtension, ServerExtensionConfig, ServerExtensionPhase, ServerExtensionInitContext, ExtensionInitResult, ExtensionHealthResult } from '@memberjunction/server-extensions-core';
|
|
6
|
+
export declare class VonageTelephonyExtension extends BaseServerExtension {
|
|
7
|
+
get DefaultPhase(): ServerExtensionPhase;
|
|
8
|
+
private service;
|
|
9
|
+
private config;
|
|
10
|
+
Initialize(contextOrApp: ServerExtensionInitContext, _config?: ServerExtensionConfig): Promise<ExtensionInitResult>;
|
|
11
|
+
Shutdown(): Promise<void>;
|
|
12
|
+
HealthCheck(): Promise<ExtensionHealthResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=VonageTelephonyExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VonageTelephonyExtension.d.ts","sourceRoot":"","sources":["../../src/server-extensions/VonageTelephonyExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAUhD,qBACa,wBAAyB,SAAQ,mBAAmB;IAC7D,IAAoB,YAAY,IAAI,oBAAoB,CAEvD;IAED,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAAsC;IAEvC,UAAU,CACnB,YAAY,EAAE,0BAA0B,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,mBAAmB,CAAC;IAuDlB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAU7D"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @memberjunction/telephony-adapters
|
|
3
|
+
* @description Vonage Telephony Server Extension.
|
|
4
|
+
*/
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
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;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { LogStatus } from '@memberjunction/core';
|
|
13
|
+
import cors from 'cors';
|
|
14
|
+
import { BaseServerExtension, } from '@memberjunction/server-extensions-core';
|
|
15
|
+
import { createVonageTelephonyHandler, VONAGE_TELEPHONY_MOUNT_PATH, VONAGE_MEDIA_WSS_PATH, SetVonageTelephonyService, } from '../telephony/index.js';
|
|
16
|
+
let VonageTelephonyExtension = class VonageTelephonyExtension extends BaseServerExtension {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.service = null;
|
|
20
|
+
this.config = null;
|
|
21
|
+
}
|
|
22
|
+
get DefaultPhase() {
|
|
23
|
+
return 'pre-auth';
|
|
24
|
+
}
|
|
25
|
+
async Initialize(contextOrApp, _config) {
|
|
26
|
+
const context = contextOrApp;
|
|
27
|
+
const rawSettings = context.config.Settings;
|
|
28
|
+
if (!rawSettings?.mediaPublicUrl) {
|
|
29
|
+
return {
|
|
30
|
+
Success: false,
|
|
31
|
+
Skipped: true,
|
|
32
|
+
Message: 'Vonage telephony is not configured (missing mediaPublicUrl)',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const config = {
|
|
36
|
+
applicationId: rawSettings.applicationId,
|
|
37
|
+
privateKey: rawSettings.privateKey,
|
|
38
|
+
apiKey: rawSettings.apiKey,
|
|
39
|
+
apiSecret: rawSettings.apiSecret,
|
|
40
|
+
mediaPublicUrl: rawSettings.mediaPublicUrl,
|
|
41
|
+
signatureSecret: rawSettings.signatureSecret,
|
|
42
|
+
eventUrl: rawSettings.eventUrl,
|
|
43
|
+
};
|
|
44
|
+
this.config = config;
|
|
45
|
+
const rootPath = context.config.RootPath || VONAGE_TELEPHONY_MOUNT_PATH;
|
|
46
|
+
const publicUrl = context.publicUrl || 'http://localhost:4000';
|
|
47
|
+
const handler = createVonageTelephonyHandler(publicUrl, config);
|
|
48
|
+
this.service = handler.service;
|
|
49
|
+
// Mount public webhook router
|
|
50
|
+
context.app.use(rootPath, cors(), handler.publicRouter);
|
|
51
|
+
// Attach media stream WebSocket server
|
|
52
|
+
handler.attachMediaStreamServer();
|
|
53
|
+
// Bind runtime holder for GraphQL resolvers
|
|
54
|
+
SetVonageTelephonyService(handler.service);
|
|
55
|
+
LogStatus(`[Telephony] Vonage routes registered at ${rootPath}/answer + /event + media WSS at ${VONAGE_MEDIA_WSS_PATH}`);
|
|
56
|
+
return {
|
|
57
|
+
Success: true,
|
|
58
|
+
Message: `Vonage telephony routes registered at ${rootPath}/answer + /event`,
|
|
59
|
+
RegisteredRoutes: [
|
|
60
|
+
`POST ${rootPath}/answer`,
|
|
61
|
+
`POST ${rootPath}/event`,
|
|
62
|
+
`WSS ${VONAGE_MEDIA_WSS_PATH}`,
|
|
63
|
+
],
|
|
64
|
+
Service: {
|
|
65
|
+
key: 'VonageTelephonyService',
|
|
66
|
+
instance: handler.service,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async Shutdown() {
|
|
71
|
+
SetVonageTelephonyService(undefined);
|
|
72
|
+
this.service = null;
|
|
73
|
+
}
|
|
74
|
+
async HealthCheck() {
|
|
75
|
+
return {
|
|
76
|
+
Name: 'VonageTelephonyExtension',
|
|
77
|
+
Healthy: !!this.service,
|
|
78
|
+
Details: {
|
|
79
|
+
configured: !!this.config,
|
|
80
|
+
applicationId: this.config?.applicationId,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
VonageTelephonyExtension = __decorate([
|
|
86
|
+
RegisterClass(BaseServerExtension, 'VonageTelephonyExtension')
|
|
87
|
+
], VonageTelephonyExtension);
|
|
88
|
+
export { VonageTelephonyExtension };
|
|
89
|
+
//# sourceMappingURL=VonageTelephonyExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VonageTelephonyExtension.js","sourceRoot":"","sources":["../../src/server-extensions/VonageTelephonyExtension.ts"],"names":[],"mappings":"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"}
|