@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.
Files changed (115) hide show
  1. package/LICENSE +183 -0
  2. package/dist/index.d.ts +33 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +83 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/resolvers/RingCentralTelephonyResolver.d.ts +20 -0
  7. package/dist/resolvers/RingCentralTelephonyResolver.d.ts.map +1 -0
  8. package/dist/resolvers/RingCentralTelephonyResolver.js +83 -0
  9. package/dist/resolvers/RingCentralTelephonyResolver.js.map +1 -0
  10. package/dist/resolvers/TeamsMeetingsResolver.d.ts +21 -0
  11. package/dist/resolvers/TeamsMeetingsResolver.d.ts.map +1 -0
  12. package/dist/resolvers/TeamsMeetingsResolver.js +87 -0
  13. package/dist/resolvers/TeamsMeetingsResolver.js.map +1 -0
  14. package/dist/resolvers/TelephonyResolver.d.ts +20 -0
  15. package/dist/resolvers/TelephonyResolver.d.ts.map +1 -0
  16. package/dist/resolvers/TelephonyResolver.js +83 -0
  17. package/dist/resolvers/TelephonyResolver.js.map +1 -0
  18. package/dist/resolvers/VonageTelephonyResolver.d.ts +20 -0
  19. package/dist/resolvers/VonageTelephonyResolver.d.ts.map +1 -0
  20. package/dist/resolvers/VonageTelephonyResolver.js +83 -0
  21. package/dist/resolvers/VonageTelephonyResolver.js.map +1 -0
  22. package/dist/resolvers/index.d.ts +10 -0
  23. package/dist/resolvers/index.d.ts.map +1 -0
  24. package/dist/resolvers/index.js +10 -0
  25. package/dist/resolvers/index.js.map +1 -0
  26. package/dist/server-extensions/RingCentralTelephonyExtension.d.ts +14 -0
  27. package/dist/server-extensions/RingCentralTelephonyExtension.d.ts.map +1 -0
  28. package/dist/server-extensions/RingCentralTelephonyExtension.js +81 -0
  29. package/dist/server-extensions/RingCentralTelephonyExtension.js.map +1 -0
  30. package/dist/server-extensions/TeamsMeetingsExtension.d.ts +17 -0
  31. package/dist/server-extensions/TeamsMeetingsExtension.d.ts.map +1 -0
  32. package/dist/server-extensions/TeamsMeetingsExtension.js +109 -0
  33. package/dist/server-extensions/TeamsMeetingsExtension.js.map +1 -0
  34. package/dist/server-extensions/TwilioTelephonyExtension.d.ts +14 -0
  35. package/dist/server-extensions/TwilioTelephonyExtension.d.ts.map +1 -0
  36. package/dist/server-extensions/TwilioTelephonyExtension.js +88 -0
  37. package/dist/server-extensions/TwilioTelephonyExtension.js.map +1 -0
  38. package/dist/server-extensions/VonageTelephonyExtension.d.ts +14 -0
  39. package/dist/server-extensions/VonageTelephonyExtension.d.ts.map +1 -0
  40. package/dist/server-extensions/VonageTelephonyExtension.js +89 -0
  41. package/dist/server-extensions/VonageTelephonyExtension.js.map +1 -0
  42. package/dist/sessionManager.d.ts +26 -0
  43. package/dist/sessionManager.d.ts.map +1 -0
  44. package/dist/sessionManager.js +38 -0
  45. package/dist/sessionManager.js.map +1 -0
  46. package/dist/telephony/RingCentralTelephonyService.d.ts +79 -0
  47. package/dist/telephony/RingCentralTelephonyService.d.ts.map +1 -0
  48. package/dist/telephony/RingCentralTelephonyService.js +225 -0
  49. package/dist/telephony/RingCentralTelephonyService.js.map +1 -0
  50. package/dist/telephony/TeamsMeetingsRouter.d.ts +21 -0
  51. package/dist/telephony/TeamsMeetingsRouter.d.ts.map +1 -0
  52. package/dist/telephony/TeamsMeetingsRouter.js +84 -0
  53. package/dist/telephony/TeamsMeetingsRouter.js.map +1 -0
  54. package/dist/telephony/TeamsMeetingsService.d.ts +76 -0
  55. package/dist/telephony/TeamsMeetingsService.d.ts.map +1 -0
  56. package/dist/telephony/TeamsMeetingsService.js +157 -0
  57. package/dist/telephony/TeamsMeetingsService.js.map +1 -0
  58. package/dist/telephony/TwilioTelephonyRouter.d.ts +30 -0
  59. package/dist/telephony/TwilioTelephonyRouter.d.ts.map +1 -0
  60. package/dist/telephony/TwilioTelephonyRouter.js +137 -0
  61. package/dist/telephony/TwilioTelephonyRouter.js.map +1 -0
  62. package/dist/telephony/TwilioTelephonyService.d.ts +91 -0
  63. package/dist/telephony/TwilioTelephonyService.d.ts.map +1 -0
  64. package/dist/telephony/TwilioTelephonyService.js +191 -0
  65. package/dist/telephony/TwilioTelephonyService.js.map +1 -0
  66. package/dist/telephony/VonageTelephonyRouter.d.ts +24 -0
  67. package/dist/telephony/VonageTelephonyRouter.d.ts.map +1 -0
  68. package/dist/telephony/VonageTelephonyRouter.js +175 -0
  69. package/dist/telephony/VonageTelephonyRouter.js.map +1 -0
  70. package/dist/telephony/VonageTelephonyService.d.ts +62 -0
  71. package/dist/telephony/VonageTelephonyService.d.ts.map +1 -0
  72. package/dist/telephony/VonageTelephonyService.js +162 -0
  73. package/dist/telephony/VonageTelephonyService.js.map +1 -0
  74. package/dist/telephony/calendar-scheduler.d.ts +41 -0
  75. package/dist/telephony/calendar-scheduler.d.ts.map +1 -0
  76. package/dist/telephony/calendar-scheduler.js +98 -0
  77. package/dist/telephony/calendar-scheduler.js.map +1 -0
  78. package/dist/telephony/index.d.ts +21 -0
  79. package/dist/telephony/index.d.ts.map +1 -0
  80. package/dist/telephony/index.js +26 -0
  81. package/dist/telephony/index.js.map +1 -0
  82. package/dist/telephony/ringcentral-runtime.d.ts +11 -0
  83. package/dist/telephony/ringcentral-runtime.d.ts.map +1 -0
  84. package/dist/telephony/ringcentral-runtime.js +20 -0
  85. package/dist/telephony/ringcentral-runtime.js.map +1 -0
  86. package/dist/telephony/teams-meetings-runtime.d.ts +11 -0
  87. package/dist/telephony/teams-meetings-runtime.d.ts.map +1 -0
  88. package/dist/telephony/teams-meetings-runtime.js +20 -0
  89. package/dist/telephony/teams-meetings-runtime.js.map +1 -0
  90. package/dist/telephony/teamsAcsMediaRegistry.d.ts +35 -0
  91. package/dist/telephony/teamsAcsMediaRegistry.d.ts.map +1 -0
  92. package/dist/telephony/teamsAcsMediaRegistry.js +86 -0
  93. package/dist/telephony/teamsAcsMediaRegistry.js.map +1 -0
  94. package/dist/telephony/telephony-runtime.d.ts +14 -0
  95. package/dist/telephony/telephony-runtime.d.ts.map +1 -0
  96. package/dist/telephony/telephony-runtime.js +23 -0
  97. package/dist/telephony/telephony-runtime.js.map +1 -0
  98. package/dist/telephony/twilioMediaRegistry.d.ts +60 -0
  99. package/dist/telephony/twilioMediaRegistry.d.ts.map +1 -0
  100. package/dist/telephony/twilioMediaRegistry.js +109 -0
  101. package/dist/telephony/twilioMediaRegistry.js.map +1 -0
  102. package/dist/telephony/vonage-runtime.d.ts +11 -0
  103. package/dist/telephony/vonage-runtime.d.ts.map +1 -0
  104. package/dist/telephony/vonage-runtime.js +20 -0
  105. package/dist/telephony/vonage-runtime.js.map +1 -0
  106. package/dist/telephony/vonageMediaRegistry.d.ts +38 -0
  107. package/dist/telephony/vonageMediaRegistry.d.ts.map +1 -0
  108. package/dist/telephony/vonageMediaRegistry.js +113 -0
  109. package/dist/telephony/vonageMediaRegistry.js.map +1 -0
  110. package/dist/types.d.ts +123 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +27 -0
  113. package/dist/types.js.map +1 -0
  114. package/package.json +48 -8
  115. 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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"}