@azure/communication-react 1.3.3-alpha-202209210019.0 → 1.3.3-alpha-202210060021.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 (113) hide show
  1. package/dist/communication-react.d.ts +131 -13
  2. package/dist/dist-cjs/communication-react/index.js +528 -272
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/identifier.d.ts +5 -0
  5. package/dist/dist-esm/acs-ui-common/src/identifier.js +10 -0
  6. package/dist/dist-esm/acs-ui-common/src/identifier.js.map +1 -1
  7. package/dist/dist-esm/acs-ui-common/src/index.d.ts +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  11. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  12. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.d.ts +5 -8
  13. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js +3 -3
  14. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js.map +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/index.d.ts +0 -1
  16. package/dist/dist-esm/calling-component-bindings/src/index.js.map +1 -1
  17. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js +21 -1
  18. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js.map +1 -1
  19. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +1 -1
  20. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  21. package/dist/dist-esm/communication-react/src/index.d.ts +2 -1
  22. package/dist/dist-esm/communication-react/src/index.js +2 -0
  23. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/CameraButton.js +3 -3
  25. package/dist/dist-esm/react-components/src/components/CameraButton.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.d.ts +53 -0
  27. package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.js +22 -0
  28. package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.js.map +1 -0
  29. package/dist/dist-esm/react-components/src/components/DevicesButton.js +4 -2
  30. package/dist/dist-esm/react-components/src/components/DevicesButton.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/DomainPermissions.js +9 -9
  32. package/dist/dist-esm/react-components/src/components/DomainPermissions.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.d.ts +4 -4
  34. package/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.js +2 -2
  35. package/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/HoldButton.js +3 -3
  37. package/dist/dist-esm/react-components/src/components/HoldButton.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/MessageThread.js +2 -6
  39. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js +3 -3
  41. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js +2 -2
  43. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js +3 -3
  45. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/VideoGallery.js +13 -4
  47. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/index.d.ts +4 -0
  49. package/dist/dist-esm/react-components/src/components/index.js +2 -0
  50. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js +5 -1
  52. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -1
  53. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.d.ts +2 -2
  54. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.js +6 -8
  55. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.js.map +1 -1
  56. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +9 -9
  57. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.d.ts +5 -0
  58. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js +15 -2
  59. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js.map +1 -1
  60. package/dist/dist-esm/react-components/src/theming/icons.d.ts +3 -1
  61. package/dist/dist-esm/react-components/src/theming/icons.js +24 -2
  62. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +27 -0
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +29 -3
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +8 -0
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +3 -3
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +10 -9
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +15 -4
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.d.ts +2 -0
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +27 -17
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js +2 -1
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js.map +1 -1
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.d.ts +13 -0
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.js +46 -0
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.js.map +1 -0
  81. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.d.ts +13 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.js +49 -0
  83. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.js.map +1 -0
  84. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +50 -28
  85. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  86. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js +10 -1
  87. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js.map +1 -1
  88. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +1 -0
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +2 -0
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +13 -2
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +6 -0
  94. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +8 -2
  95. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  96. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js +2 -1
  97. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js.map +1 -1
  98. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +3 -3
  99. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +9 -3
  100. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  101. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +13 -0
  102. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  103. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +3 -3
  104. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +11 -2
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  106. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +4 -4
  107. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.d.ts +2 -5
  109. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js +26 -12
  110. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
  111. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +3 -1
  112. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +2 -0
  113. package/package.json +11 -11
@@ -16,4 +16,9 @@ export declare const toFlatCommunicationIdentifier: (identifier: CommunicationId
16
16
  * @public
17
17
  */
18
18
  export declare const fromFlatCommunicationIdentifier: (id: string) => CommunicationIdentifier;
19
+ /**
20
+ * Returns a CommunicationIdentifier.
21
+ * @internal
22
+ */
23
+ export declare const _toCommunicationIdentifier: (id: string | CommunicationIdentifier) => CommunicationIdentifier;
19
24
  //# sourceMappingURL=identifier.d.ts.map
@@ -66,4 +66,14 @@ export const fromFlatCommunicationIdentifier = (id) => {
66
66
  }
67
67
  return { id };
68
68
  };
69
+ /**
70
+ * Returns a CommunicationIdentifier.
71
+ * @internal
72
+ */
73
+ export const _toCommunicationIdentifier = (id) => {
74
+ if (typeof id === 'string') {
75
+ return fromFlatCommunicationIdentifier(id);
76
+ }
77
+ return id;
78
+ };
69
79
  //# sourceMappingURL=identifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/identifier.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n CommunicationIdentifier,\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier\n} from '@azure/communication-common';\n\nconst COMMUNICATION_USER_PREFIX = '8:acs:';\nconst PHONE_NUMBER_PREFIX = '4:';\nconst TEAMS_DOD_PREFIX = '8:dod:';\nconst TEAMS_GCCH_PREFIX = '8:gcch:';\nconst TEAMS_USER_PREFIX = '8:origid:';\nconst TEAMS_VISITOR_PREFIX = '8:teamsvisitor:';\n\n/**\n * A string representation of a {@link @azure/communication-common#CommunicationIdentifier}.\n *\n * This string representation of CommunicationIdentifier is guaranteed to be stable for\n * a unique Communication user. Thus,\n * - it can be used to persist a user's identity in external databases.\n * - it can be used as keys into a Map to store data for the user.\n *\n * @public\n */\nexport const toFlatCommunicationIdentifier = (identifier: CommunicationIdentifier): string => {\n if (isCommunicationUserIdentifier(identifier)) {\n return identifier.communicationUserId;\n }\n if (isMicrosoftTeamsUserIdentifier(identifier)) {\n if (identifier.isAnonymous) {\n return TEAMS_VISITOR_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'dod') {\n return TEAMS_DOD_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'gcch') {\n return TEAMS_GCCH_PREFIX + identifier.microsoftTeamsUserId;\n }\n return TEAMS_USER_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (isPhoneNumberIdentifier(identifier)) {\n return PHONE_NUMBER_PREFIX + identifier.phoneNumber;\n }\n return identifier.id;\n};\n\n/**\n * Reverse operation of {@link toFlatCommunicationIdentifier}.\n *\n * @public\n */\nexport const fromFlatCommunicationIdentifier = (id: string): CommunicationIdentifier => {\n if (id.startsWith(COMMUNICATION_USER_PREFIX)) {\n // The prefix is preserved for this variant of the identifier.\n return { communicationUserId: id };\n }\n if (id.startsWith(PHONE_NUMBER_PREFIX) || id.startsWith('+')) {\n const isPhoneNumber = id.startsWith(PHONE_NUMBER_PREFIX) ? id.replace(PHONE_NUMBER_PREFIX, '') : id;\n return { phoneNumber: isPhoneNumber };\n }\n if (id.startsWith(TEAMS_USER_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_USER_PREFIX, '') };\n }\n if (id.startsWith(TEAMS_DOD_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_DOD_PREFIX, ''), cloud: 'dod' };\n }\n if (id.startsWith(TEAMS_GCCH_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_GCCH_PREFIX, ''), cloud: 'gcch' };\n }\n if (id.startsWith(TEAMS_VISITOR_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_VISITOR_PREFIX, ''), isAnonymous: true };\n }\n return { id };\n};\n"]}
1
+ {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/identifier.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n CommunicationIdentifier,\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier\n} from '@azure/communication-common';\n\nconst COMMUNICATION_USER_PREFIX = '8:acs:';\nconst PHONE_NUMBER_PREFIX = '4:';\nconst TEAMS_DOD_PREFIX = '8:dod:';\nconst TEAMS_GCCH_PREFIX = '8:gcch:';\nconst TEAMS_USER_PREFIX = '8:origid:';\nconst TEAMS_VISITOR_PREFIX = '8:teamsvisitor:';\n\n/**\n * A string representation of a {@link @azure/communication-common#CommunicationIdentifier}.\n *\n * This string representation of CommunicationIdentifier is guaranteed to be stable for\n * a unique Communication user. Thus,\n * - it can be used to persist a user's identity in external databases.\n * - it can be used as keys into a Map to store data for the user.\n *\n * @public\n */\nexport const toFlatCommunicationIdentifier = (identifier: CommunicationIdentifier): string => {\n if (isCommunicationUserIdentifier(identifier)) {\n return identifier.communicationUserId;\n }\n if (isMicrosoftTeamsUserIdentifier(identifier)) {\n if (identifier.isAnonymous) {\n return TEAMS_VISITOR_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'dod') {\n return TEAMS_DOD_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'gcch') {\n return TEAMS_GCCH_PREFIX + identifier.microsoftTeamsUserId;\n }\n return TEAMS_USER_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (isPhoneNumberIdentifier(identifier)) {\n return PHONE_NUMBER_PREFIX + identifier.phoneNumber;\n }\n return identifier.id;\n};\n\n/**\n * Reverse operation of {@link toFlatCommunicationIdentifier}.\n *\n * @public\n */\nexport const fromFlatCommunicationIdentifier = (id: string): CommunicationIdentifier => {\n if (id.startsWith(COMMUNICATION_USER_PREFIX)) {\n // The prefix is preserved for this variant of the identifier.\n return { communicationUserId: id };\n }\n if (id.startsWith(PHONE_NUMBER_PREFIX) || id.startsWith('+')) {\n const isPhoneNumber = id.startsWith(PHONE_NUMBER_PREFIX) ? id.replace(PHONE_NUMBER_PREFIX, '') : id;\n return { phoneNumber: isPhoneNumber };\n }\n if (id.startsWith(TEAMS_USER_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_USER_PREFIX, '') };\n }\n if (id.startsWith(TEAMS_DOD_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_DOD_PREFIX, ''), cloud: 'dod' };\n }\n if (id.startsWith(TEAMS_GCCH_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_GCCH_PREFIX, ''), cloud: 'gcch' };\n }\n if (id.startsWith(TEAMS_VISITOR_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_VISITOR_PREFIX, ''), isAnonymous: true };\n }\n return { id };\n};\n\n/**\n * Returns a CommunicationIdentifier.\n * @internal\n */\nexport const _toCommunicationIdentifier = (id: string | CommunicationIdentifier): CommunicationIdentifier => {\n if (typeof id === 'string') {\n return fromFlatCommunicationIdentifier(id);\n }\n return id;\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  export { memoizeFnAll } from './memoizeFnAll';
2
- export { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier } from './identifier';
2
+ export { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier, _toCommunicationIdentifier } from './identifier';
3
3
  export { _getApplicationId } from './telemetry';
4
4
  export { _formatString } from './localizationUtils';
5
5
  export { _safeJSONStringify } from './safeStringify';
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  export { memoizeFnAll } from './memoizeFnAll';
4
- export { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier } from './identifier';
4
+ export { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier, _toCommunicationIdentifier } from './identifier';
5
5
  export { _getApplicationId } from './telemetry';
6
6
  export { _formatString } from './localizationUtils';
7
7
  export { _safeJSONStringify } from './safeStringify';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAQnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { memoizeFnAll } from './memoizeFnAll';\nexport { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier } from './identifier';\nexport { _getApplicationId } from './telemetry';\nexport { _formatString } from './localizationUtils';\nexport { _safeJSONStringify } from './safeStringify';\nexport { _convertRemToPx, _preventDismissOnEvent } from './common';\n\nexport type { Common, CommonProperties } from './commonProperties';\nexport type { CallbackType, FunctionWithKey } from './memoizeFnAll';\nexport type { AreEqual, AreParamEqual, AreTypeEqual } from './areEqual';\nexport type { MessageStatus } from './MessageStatus';\nexport type { _IObjectMap } from './localizationUtils';\n\nexport { _MAX_EVENT_LISTENERS } from './constants';\n\nexport { _pxToRem } from './cssUtils';\n\nexport { _logEvent } from './logEvent';\nexport type { TelemetryEvent } from './logEvent';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAQnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { memoizeFnAll } from './memoizeFnAll';\nexport {\n fromFlatCommunicationIdentifier,\n toFlatCommunicationIdentifier,\n _toCommunicationIdentifier\n} from './identifier';\nexport { _getApplicationId } from './telemetry';\nexport { _formatString } from './localizationUtils';\nexport { _safeJSONStringify } from './safeStringify';\nexport { _convertRemToPx, _preventDismissOnEvent } from './common';\n\nexport type { Common, CommonProperties } from './commonProperties';\nexport type { CallbackType, FunctionWithKey } from './memoizeFnAll';\nexport type { AreEqual, AreParamEqual, AreTypeEqual } from './areEqual';\nexport type { MessageStatus } from './MessageStatus';\nexport type { _IObjectMap } from './localizationUtils';\n\nexport { _MAX_EVENT_LISTENERS } from './constants';\n\nexport { _pxToRem } from './cssUtils';\n\nexport { _logEvent } from './logEvent';\nexport type { TelemetryEvent } from './logEvent';\n"]}
@@ -2,5 +2,5 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT license.
4
4
  // GENERATED FILE. DO NOT EDIT MANUALLY.
5
- module.exports = '1.3.3-alpha-202209210019.0';
5
+ module.exports = '1.3.3-alpha-202210060021.0';
6
6
  //# sourceMappingURL=telemetryVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.3.3-alpha-202209210019.0';\n"]}
1
+ {"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.3.3-alpha-202210060021.0';\n"]}
@@ -1,16 +1,11 @@
1
1
  import { AudioDeviceInfo, Call, CallAgent, LocalVideoStream, StartCallOptions, VideoDeviceInfo } from '@azure/communication-calling';
2
2
  import { DtmfTone, AddPhoneNumberOptions } from '@azure/communication-calling';
3
3
  import { CommunicationUserIdentifier, PhoneNumberIdentifier, UnknownIdentifier } from '@azure/communication-common';
4
+ import { CommunicationIdentifier } from '@azure/communication-common';
4
5
  import { Common } from "../../../acs-ui-common/src";
5
6
  import { StatefulCallClient, StatefulDeviceManager } from "../../../calling-stateful-client/src";
6
7
  import { ReactElement } from 'react';
7
8
  import { CreateVideoStreamViewResult, VideoStreamOptions } from "../../../react-components/src";
8
- /**
9
- * handler type for addParticipant
10
- *
11
- * @beta
12
- */
13
- export declare type AddParticipantHandler = ((participant: CommunicationUserIdentifier) => Promise<void>) & ((participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions) => Promise<void>);
14
9
  /**
15
10
  * Object containing all the handlers required for calling components.
16
11
  *
@@ -32,10 +27,12 @@ export declare type CallingHandlers = {
32
27
  onToggleScreenShare: () => Promise<void>;
33
28
  onHangUp: () => Promise<void>;
34
29
  onToggleHold: () => Promise<void>;
35
- onAddParticipant: AddParticipantHandler;
30
+ onAddParticipant(participant: CommunicationUserIdentifier): Promise<void>;
31
+ onAddParticipant(participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions): Promise<void>;
36
32
  onCreateLocalStreamView: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
37
33
  onCreateRemoteStreamView: (userId: string, options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
38
- onRemoveParticipant: (userId: string) => Promise<void>;
34
+ onRemoveParticipant(userId: string): Promise<void>;
35
+ onRemoveParticipant(participant: CommunicationIdentifier): Promise<void>;
39
36
  onDisposeRemoteStreamView: (userId: string) => Promise<void>;
40
37
  onDisposeLocalStreamView: () => Promise<void>;
41
38
  onSendDtmfTone: (dtmfTone: DtmfTone) => Promise<void>;
@@ -12,7 +12,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
12
12
  import { LocalVideoStream } from '@azure/communication-calling';
13
13
  /* @conditional-compile-remove(PSTN-calls) */
14
14
  import { isCommunicationUserIdentifier, isMicrosoftTeamsUserIdentifier, isPhoneNumberIdentifier } from '@azure/communication-common';
15
- import { fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier } from "../../../acs-ui-common/src";
15
+ import { toFlatCommunicationIdentifier, _toCommunicationIdentifier } from "../../../acs-ui-common/src";
16
16
  import memoizeOne from 'memoize-one';
17
17
  import { disposeAllLocalPreviewViews, _isInCall, _isPreviewOn } from '../utils/callUtils';
18
18
  /**
@@ -89,7 +89,6 @@ export const createDefaultCallingHandlers = memoizeOne((callClient, callAgent, d
89
89
  }
90
90
  }
91
91
  });
92
- // FIXME: onStartCall API should use string, not the underlying SDK types.
93
92
  const onStartCall = (participants, options) => {
94
93
  return callAgent ? callAgent.startCall(participants, options) : undefined;
95
94
  };
@@ -218,7 +217,8 @@ export const createDefaultCallingHandlers = memoizeOne((callClient, callAgent, d
218
217
  yield disposeAllLocalPreviewViews(callClient);
219
218
  });
220
219
  const onRemoveParticipant = (userId) => __awaiter(void 0, void 0, void 0, function* () {
221
- yield (call === null || call === void 0 ? void 0 : call.removeParticipant(fromFlatCommunicationIdentifier(userId)));
220
+ const participant = _toCommunicationIdentifier(userId);
221
+ yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
222
222
  });
223
223
  /* @conditional-compile-remove(PSTN-calls) */
224
224
  const onAddParticipant = (participant, options) => __awaiter(void 0, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"createHandlers.js","sourceRoot":"","sources":["../../../../../../calling-component-bindings/src/handlers/createHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AudioDeviceInfo,\n Call,\n CallAgent,\n LocalVideoStream,\n StartCallOptions,\n VideoDeviceInfo\n} from '@azure/communication-calling';\n/* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { DtmfTone, AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { CommunicationUserIdentifier, PhoneNumberIdentifier, UnknownIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport {\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier,\n CommunicationIdentifier\n} from '@azure/communication-common';\nimport { Common, fromFlatCommunicationIdentifier, toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CreateViewResult, StatefulCallClient, StatefulDeviceManager } from '@internal/calling-stateful-client';\nimport memoizeOne from 'memoize-one';\nimport { ReactElement } from 'react';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { disposeAllLocalPreviewViews, _isInCall, _isPreviewOn } from '../utils/callUtils';\n\n/* @conditional-compile-remove(PSTN-calls) */\n/**\n * handler type for addParticipant\n *\n * @beta\n */\nexport type AddParticipantHandler = ((participant: CommunicationUserIdentifier) => Promise<void>) &\n ((participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions) => Promise<void>);\n\n/**\n * Object containing all the handlers required for calling components.\n *\n * Calling related components from this package are able to pick out relevant handlers from this object.\n * See {@link useHandlers} and {@link usePropsFor}.\n *\n * @public\n */\nexport type CallingHandlers = {\n onStartLocalVideo: () => Promise<void>;\n onToggleCamera: (options?: VideoStreamOptions) => Promise<void>;\n onStartCall: (\n participants: (CommunicationUserIdentifier | PhoneNumberIdentifier | UnknownIdentifier)[],\n options?: StartCallOptions\n ) => Call | undefined;\n onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;\n onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;\n onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;\n onToggleMicrophone: () => Promise<void>;\n onStartScreenShare: () => Promise<void>;\n onStopScreenShare: () => Promise<void>;\n onToggleScreenShare: () => Promise<void>;\n onHangUp: () => Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold: () => Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant: AddParticipantHandler;\n onCreateLocalStreamView: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;\n onCreateRemoteStreamView: (\n userId: string,\n options?: VideoStreamOptions\n ) => Promise<void | CreateVideoStreamViewResult>;\n onRemoveParticipant: (userId: string) => Promise<void>;\n onDisposeRemoteStreamView: (userId: string) => Promise<void>;\n onDisposeLocalStreamView: () => Promise<void>;\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\n onSendDtmfTone: (dtmfTone: DtmfTone) => Promise<void>;\n};\n\n/**\n * @private\n */\nexport const areStreamsEqual = (prevStream: LocalVideoStream, newStream: LocalVideoStream): boolean => {\n return !!prevStream && !!newStream && prevStream.source.id === newStream.source.id;\n};\n\n/**\n * Create the default implementation of {@link CallingHandlers}.\n *\n * Useful when implementing a custom component that utilizes the providers\n * exported from this library.\n *\n * @public\n */\nexport const createDefaultCallingHandlers = memoizeOne(\n (\n callClient: StatefulCallClient,\n callAgent: CallAgent | undefined,\n deviceManager: StatefulDeviceManager | undefined,\n call: Call | undefined\n ): CallingHandlers => {\n const onStartLocalVideo = async (): Promise<void> => {\n // Before the call object creates a stream, dispose of any local preview streams.\n // @TODO: is there any way to parent the unparented view to the call object instead\n // of disposing and creating a new stream?\n await disposeAllLocalPreviewViews(callClient);\n\n const callId = call?.id;\n let videoDeviceInfo = callClient.getState().deviceManager.selectedCamera;\n if (!videoDeviceInfo) {\n const cameras = await deviceManager?.getCameras();\n videoDeviceInfo = cameras && cameras.length > 0 ? cameras[0] : undefined;\n videoDeviceInfo && deviceManager?.selectCamera(videoDeviceInfo);\n }\n if (!callId || !videoDeviceInfo) {\n return;\n }\n const stream = new LocalVideoStream(videoDeviceInfo);\n if (call && !call.localVideoStreams.find((s) => areStreamsEqual(s, stream))) {\n await call.startVideo(stream);\n }\n };\n\n const onStopLocalVideo = async (stream: LocalVideoStream): Promise<void> => {\n const callId = call?.id;\n if (!callId) {\n return;\n }\n if (call && call.localVideoStreams.find((s) => areStreamsEqual(s, stream))) {\n await call.stopVideo(stream);\n await callClient.disposeView(callId, undefined, {\n source: stream.source,\n mediaStreamType: stream.mediaStreamType\n });\n }\n };\n\n const onToggleCamera = async (options?: VideoStreamOptions): Promise<void> => {\n if (call && _isInCall(call.state)) {\n const stream = call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');\n if (stream) {\n await onStopLocalVideo(stream);\n } else {\n await onStartLocalVideo();\n }\n } else {\n const selectedCamera = callClient.getState().deviceManager.selectedCamera;\n if (selectedCamera) {\n const previewOn = _isPreviewOn(callClient.getState().deviceManager);\n if (previewOn) {\n await onDisposeLocalStreamView();\n } else {\n await callClient.createView(\n undefined,\n undefined,\n {\n source: selectedCamera,\n mediaStreamType: 'Video'\n },\n options\n );\n }\n }\n }\n };\n\n // FIXME: onStartCall API should use string, not the underlying SDK types.\n const onStartCall = (\n participants: (CommunicationUserIdentifier | PhoneNumberIdentifier | UnknownIdentifier)[],\n options?: StartCallOptions\n ): Call | undefined => {\n return callAgent ? callAgent.startCall(participants, options) : undefined;\n };\n\n const onSelectMicrophone = async (device: AudioDeviceInfo): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n return deviceManager.selectMicrophone(device);\n };\n\n const onSelectSpeaker = async (device: AudioDeviceInfo): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n return deviceManager.selectSpeaker(device);\n };\n\n const onSelectCamera = async (device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n if (call && _isInCall(call.state)) {\n deviceManager.selectCamera(device);\n const stream = call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');\n return stream?.switchSource(device);\n } else {\n const previewOn = _isPreviewOn(callClient.getState().deviceManager);\n\n if (!previewOn) {\n deviceManager.selectCamera(device);\n return;\n }\n\n await onDisposeLocalStreamView();\n\n deviceManager.selectCamera(device);\n await callClient.createView(\n undefined,\n undefined,\n {\n source: device,\n mediaStreamType: 'Video'\n },\n options\n );\n }\n };\n\n const onToggleMicrophone = async (): Promise<void> => {\n if (!call || !_isInCall(call.state)) {\n throw new Error(`Please invoke onToggleMicrophone after call is started`);\n }\n return call.isMuted ? await call.unmute() : await call.mute();\n };\n\n const onStartScreenShare = async (): Promise<void> => await call?.startScreenSharing();\n\n const onStopScreenShare = async (): Promise<void> => await call?.stopScreenSharing();\n\n const onToggleScreenShare = async (): Promise<void> =>\n call?.isScreenSharingOn ? await onStopScreenShare() : await onStartScreenShare();\n\n const onHangUp = async (): Promise<void> => await call?.hangUp();\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onToggleHold = async (): Promise<void> =>\n call?.state === 'LocalHold' ? await call?.resume() : await call?.hold();\n\n const onCreateLocalStreamView = async (\n options = { scalingMode: 'Crop', isMirrored: true } as VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> => {\n if (!call || call.localVideoStreams.length === 0) {\n return;\n }\n\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n return;\n }\n\n const localStream = callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');\n if (!localStream) {\n return;\n }\n\n const { view } = (await callClient.createView(call.id, undefined, localStream, options)) ?? {};\n return view ? { view } : undefined;\n };\n\n const onCreateRemoteStreamView = async (\n userId: string,\n options = { scalingMode: 'Crop' } as VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> => {\n if (!call) {\n return;\n }\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n throw new Error(`Call Not Found: ${call.id}`);\n }\n\n const participant = Object.values(callState.remoteParticipants).find(\n (participant) => toFlatCommunicationIdentifier(participant.identifier) === userId\n );\n\n if (!participant || !participant.videoStreams) {\n return;\n }\n\n const remoteVideoStream = Object.values(participant.videoStreams).find((i) => i.mediaStreamType === 'Video');\n const screenShareStream = Object.values(participant.videoStreams).find(\n (i) => i.mediaStreamType === 'ScreenSharing'\n );\n\n let createViewResult: CreateViewResult | undefined = undefined;\n if (remoteVideoStream && remoteVideoStream.isAvailable && !remoteVideoStream.view) {\n createViewResult = await callClient.createView(call.id, participant.identifier, remoteVideoStream, options);\n }\n\n if (screenShareStream && screenShareStream.isAvailable && !screenShareStream.view) {\n // Hardcoded `scalingMode` since it is highly unlikely that CONTOSO would ever want to use a different scaling mode for screenshare.\n // Using `Crop` would crop the contents of screenshare and `Stretch` would warp it.\n // `Fit` is the only mode that maintains the integrity of the screen being shared.\n createViewResult = await callClient.createView(call.id, participant.identifier, screenShareStream, {\n scalingMode: 'Fit'\n });\n }\n\n return createViewResult?.view ? { view: createViewResult?.view } : undefined;\n };\n\n const onDisposeRemoteStreamView = async (userId: string): Promise<void> => {\n if (!call) {\n return;\n }\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n throw new Error(`Call Not Found: ${call.id}`);\n }\n\n const participant = Object.values(callState.remoteParticipants).find(\n (participant) => toFlatCommunicationIdentifier(participant.identifier) === userId\n );\n\n if (!participant || !participant.videoStreams) {\n return;\n }\n\n const remoteVideoStream = Object.values(participant.videoStreams).find((i) => i.mediaStreamType === 'Video');\n const screenShareStream = Object.values(participant.videoStreams).find(\n (i) => i.mediaStreamType === 'ScreenSharing'\n );\n\n if (remoteVideoStream && remoteVideoStream.view) {\n callClient.disposeView(call.id, participant.identifier, remoteVideoStream);\n }\n\n if (screenShareStream && screenShareStream.view) {\n callClient.disposeView(call.id, participant.identifier, screenShareStream);\n }\n };\n\n const onDisposeLocalStreamView = async (): Promise<void> => {\n // If the user is currently in a call, dispose of the local stream view attached to that call.\n const callState = call && callClient.getState().calls[call.id];\n const localStream = callState?.localVideoStreams.find((item) => item.mediaStreamType === 'Video');\n if (call && callState && localStream) {\n callClient.disposeView(call.id, undefined, localStream);\n }\n\n // If the user is not in a call we currently assume any unparented view is a LocalPreview and stop all\n // since those are only used for LocalPreview currently.\n // TODO: we need to remember which LocalVideoStream was used for LocalPreview and dispose that one.\n await disposeAllLocalPreviewViews(callClient);\n };\n\n const onRemoveParticipant = async (userId: string): Promise<void> => {\n await call?.removeParticipant(fromFlatCommunicationIdentifier(userId));\n };\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onAddParticipant: AddParticipantHandler = async (participant, options?) => {\n const participantType = participantTypeHelper(participant);\n switch (participantType) {\n case 'PSTN':\n await call?.addParticipant(participant as PhoneNumberIdentifier, options);\n break;\n case 'ACS':\n await call?.addParticipant(participant as CommunicationUserIdentifier);\n break;\n }\n };\n\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\n const onSendDtmfTone = async (dtmfTone: DtmfTone): Promise<void> => await call?.sendDtmf(dtmfTone);\n\n return {\n onHangUp,\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold,\n onSelectCamera,\n onSelectMicrophone,\n onSelectSpeaker,\n onStartCall,\n onStartScreenShare,\n onStopScreenShare,\n onToggleCamera,\n onToggleMicrophone,\n onToggleScreenShare,\n onCreateLocalStreamView,\n onCreateRemoteStreamView,\n onRemoveParticipant,\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant,\n onStartLocalVideo,\n onDisposeRemoteStreamView,\n onDisposeLocalStreamView,\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */ onSendDtmfTone\n };\n }\n);\n\n/**\n * Create a set of default handlers for given component. Memoization is applied to the result. Multiple invocations with\n * the same arguments will return the same handler instances. DeclarativeCallAgent, DeclarativeDeviceManager, and\n * DeclarativeCall may be undefined. If undefined, their associated handlers will not be created and returned.\n *\n * @param callClient - StatefulCallClient returned from\n * {@link @azure/communication-react#createStatefulCallClient}.\n * @param callAgent - Instance of {@link @azure/communication-calling#CallClient}.\n * @param deviceManager - Instance of {@link @azure/communication-calling#DeviceManager}.\n * @param call - Instance of {@link @azure/communication-calling#Call}.\n * @param _ - React component that you want to generate handlers for.\n *\n * @public\n */\nexport const createDefaultCallingHandlersForComponent = <Props>(\n callClient: StatefulCallClient,\n callAgent: CallAgent | undefined,\n deviceManager: StatefulDeviceManager | undefined,\n call: Call | undefined,\n _Component: (props: Props) => ReactElement | null\n): Common<CallingHandlers, Props> => {\n return createDefaultCallingHandlers(callClient, callAgent, deviceManager, call);\n};\n\n/* @conditional-compile-remove(PSTN-calls) */\n/**\n * Helper function for determining participant type.\n */\nconst participantTypeHelper = (p: CommunicationIdentifier): string => {\n if (isPhoneNumberIdentifier(p)) {\n return 'PSTN';\n } else if (isCommunicationUserIdentifier(p)) {\n return 'ACS';\n } else if (isMicrosoftTeamsUserIdentifier(p)) {\n return 'Teams';\n } else {\n return 'unknown';\n }\n};\n\"../../../acs-ui-common/src\"\"../../../calling-stateful-client/src\"\"../../../react-components/src\""]}
1
+ {"version":3,"file":"createHandlers.js","sourceRoot":"","sources":["../../../../../../calling-component-bindings/src/handlers/createHandlers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;AAElC,OAAO,EAIL,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAItC,6CAA6C;AAC7C,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAU,6BAA6B,EAAE,0BAA0B,EAAE,mCAAgC;AAE5G,OAAO,UAAU,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA6C1F;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAA4B,EAAE,SAA2B,EAAW,EAAE;IACpG,OAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CACpD,CACE,UAA8B,EAC9B,SAAgC,EAChC,aAAgD,EAChD,IAAsB,EACL,EAAE;IACnB,MAAM,iBAAiB,GAAG,GAAwB,EAAE;QAClD,iFAAiF;QACjF,mFAAmF;QACnF,0CAA0C;QAC1C,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC;QACxB,IAAI,eAAe,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,OAAO,GAAG,MAAM,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,EAAE,CAAA,CAAC;YAClD,eAAe,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,eAAe,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,CAAC,eAAe,CAAC,CAAA,CAAC;SACjE;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE;YAC/B,OAAO;SACR;QACD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;YAC3E,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC/B;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAO,MAAwB,EAAiB,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;YAC1E,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7B,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;gBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC,CAAC;SACJ;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,cAAc,GAAG,CAAO,OAA4B,EAAiB,EAAE;QAC3E,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;YAC3F,IAAI,MAAM,EAAE;gBACV,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;aAChC;iBAAM;gBACL,MAAM,iBAAiB,EAAE,CAAC;aAC3B;SACF;aAAM;YACL,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC;YAC1E,IAAI,cAAc,EAAE;gBAClB,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;gBACpE,IAAI,SAAS,EAAE;oBACb,MAAM,wBAAwB,EAAE,CAAC;iBAClC;qBAAM;oBACL,MAAM,UAAU,CAAC,UAAU,CACzB,SAAS,EACT,SAAS,EACT;wBACE,MAAM,EAAE,cAAc;wBACtB,eAAe,EAAE,OAAO;qBACzB,EACD,OAAO,CACR,CAAC;iBACH;aACF;SACF;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,WAAW,GAAG,CAClB,YAAyF,EACzF,OAA0B,EACR,EAAE;QACpB,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAO,MAAuB,EAAiB,EAAE;QAC1E,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QACD,OAAO,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,CAAO,MAAuB,EAAiB,EAAE;QACvE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QACD,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAA,CAAC;IAEF,MAAM,cAAc,GAAG,CAAO,MAAuB,EAAE,OAA4B,EAAiB,EAAE;QACpG,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QACD,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;YAC3F,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,MAAM,CAAC,CAAC;SACrC;aAAM;YACL,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;YAEpE,IAAI,CAAC,SAAS,EAAE;gBACd,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACnC,OAAO;aACR;YAED,MAAM,wBAAwB,EAAE,CAAC;YAEjC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,UAAU,CAAC,UAAU,CACzB,SAAS,EACT,SAAS,EACT;gBACE,MAAM,EAAE,MAAM;gBACd,eAAe,EAAE,OAAO;aACzB,EACD,OAAO,CACR,CAAC;SACH;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAwB,EAAE;QACnD,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;SAC3E;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC,CAAA,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAwB,EAAE,kDAAC,OAAA,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,EAAE,CAAA,CAAA,GAAA,CAAC;IAEvF,MAAM,iBAAiB,GAAG,GAAwB,EAAE,kDAAC,OAAA,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,EAAE,CAAA,CAAA,GAAA,CAAC;IAErF,MAAM,mBAAmB,GAAG,GAAwB,EAAE,kDACpD,OAAA,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,EAAC,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC,MAAM,kBAAkB,EAAE,CAAA,GAAA,CAAC;IAEnF,MAAM,QAAQ,GAAG,GAAwB,EAAE,kDAAC,OAAA,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAA,CAAA,GAAA,CAAC;IAEjE,6CAA6C;IAC7C,MAAM,YAAY,GAAG,GAAwB,EAAE,kDAC7C,OAAA,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAA,CAAC,CAAC,CAAC,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,EAAE,CAAA,CAAA,GAAA,CAAC;IAE1E,MAAM,uBAAuB,GAAG,CAC9B,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAwB,EAC5B,EAAE;;QAC/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAChD,OAAO;SACR;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;QACjG,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAA,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,mCAAI,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrC,CAAC,CAAA,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAC/B,MAAc,EACd,UAAU,EAAE,WAAW,EAAE,MAAM,EAAwB,EACV,EAAE;QAC/C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/C;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClE,CAAC,WAAW,EAAE,EAAE,CAAC,6BAA6B,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,MAAM,CAClF,CAAC;QAEF,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YAC7C,OAAO;SACR;QAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAC7C,CAAC;QAEF,IAAI,gBAAgB,GAAiC,SAAS,CAAC;QAC/D,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,WAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;YACjF,gBAAgB,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;SAC7G;QAED,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,WAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;YACjF,oIAAoI;YACpI,mFAAmF;YACnF,kFAAkF;YAClF,gBAAgB,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE;gBACjG,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;SACJ;QAED,OAAO,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,EAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC,CAAA,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAO,MAAc,EAAiB,EAAE;QACxE,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/C;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClE,CAAC,WAAW,EAAE,EAAE,CAAC,6BAA6B,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,MAAM,CAClF,CAAC;QAEF,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YAC7C,OAAO;SACR;QAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAC7C,CAAC;QAEF,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE;YAC/C,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;SAC5E;QAED,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE;YAC/C,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;SAC5E;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,wBAAwB,GAAG,GAAwB,EAAE;QACzD,8FAA8F;QAC9F,MAAM,SAAS,GAAG,IAAI,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC;QAClG,IAAI,IAAI,IAAI,SAAS,IAAI,WAAW,EAAE;YACpC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;SACzD;QAED,sGAAsG;QACtG,wDAAwD;QACxD,mGAAmG;QACnG,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAA,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAC1B,MAAsF,EACvE,EAAE;QACjB,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA,CAAC;IAC7C,CAAC,CAAA,CAAC;IAEF,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,CAAO,WAAW,EAAE,OAAQ,EAAiB,EAAE;QACtE,MAAM,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC3D,QAAQ,eAAe,EAAE;YACvB,KAAK,MAAM;gBACT,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,CAAC,WAAoC,EAAE,OAAO,CAAC,CAAA,CAAC;gBAC1E,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,CAAC,WAA0C,CAAC,CAAA,CAAC;gBACvE,MAAM;SACT;IACH,CAAC,CAAA,CAAC;IAEF,0CAA0C,CAAC,6CAA6C;IACxF,MAAM,cAAc,GAAG,CAAO,QAAkB,EAAiB,EAAE,kDAAC,OAAA,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAAA,GAAA,CAAC;IAEnG,OAAO;QACL,QAAQ;QACR,6CAA6C;QAC7C,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,eAAe;QACf,WAAW;QACX,kBAAkB;QAClB,iBAAiB;QACjB,cAAc;QACd,kBAAkB;QAClB,mBAAmB;QACnB,uBAAuB;QACvB,wBAAwB;QACxB,mBAAmB;QACnB,6CAA6C;QAC7C,gBAAgB;QAChB,iBAAiB;QACjB,yBAAyB;QACzB,wBAAwB;QACxB,0CAA0C,CAAC,6CAA6C,CAAC,cAAc;KACxG,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,wCAAwC,GAAG,CACtD,UAA8B,EAC9B,SAAgC,EAChC,aAAgD,EAChD,IAAsB,EACtB,UAAiD,EACjB,EAAE;IAClC,OAAO,4BAA4B,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,6CAA6C;AAC7C;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAA0B,EAAU,EAAE;IACnE,IAAI,uBAAuB,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,6BAA6B,CAAC,CAAC,CAAC,EAAE;QAC3C,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,8BAA8B,CAAC,CAAC,CAAC,EAAE;QAC5C,OAAO,OAAO,CAAC;KAChB;SAAM;QACL,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AudioDeviceInfo,\n Call,\n CallAgent,\n LocalVideoStream,\n StartCallOptions,\n VideoDeviceInfo\n} from '@azure/communication-calling';\n/* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { DtmfTone, AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { CommunicationUserIdentifier, PhoneNumberIdentifier, UnknownIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport {\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier\n} from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { CommunicationIdentifier } from '@azure/communication-common';\nimport { Common, toFlatCommunicationIdentifier, _toCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CreateViewResult, StatefulCallClient, StatefulDeviceManager } from '@internal/calling-stateful-client';\nimport memoizeOne from 'memoize-one';\nimport { ReactElement } from 'react';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { disposeAllLocalPreviewViews, _isInCall, _isPreviewOn } from '../utils/callUtils';\n\n/**\n * Object containing all the handlers required for calling components.\n *\n * Calling related components from this package are able to pick out relevant handlers from this object.\n * See {@link useHandlers} and {@link usePropsFor}.\n *\n * @public\n */\nexport type CallingHandlers = {\n onStartLocalVideo: () => Promise<void>;\n onToggleCamera: (options?: VideoStreamOptions) => Promise<void>;\n onStartCall: (\n participants: (CommunicationUserIdentifier | PhoneNumberIdentifier | UnknownIdentifier)[],\n options?: StartCallOptions\n ) => Call | undefined;\n onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;\n onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;\n onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;\n onToggleMicrophone: () => Promise<void>;\n onStartScreenShare: () => Promise<void>;\n onStopScreenShare: () => Promise<void>;\n onToggleScreenShare: () => Promise<void>;\n onHangUp: () => Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold: () => Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant(participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions): Promise<void>;\n onCreateLocalStreamView: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;\n onCreateRemoteStreamView: (\n userId: string,\n options?: VideoStreamOptions\n ) => Promise<void | CreateVideoStreamViewResult>;\n onRemoveParticipant(userId: string): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n onRemoveParticipant(participant: CommunicationIdentifier): Promise<void>;\n onDisposeRemoteStreamView: (userId: string) => Promise<void>;\n onDisposeLocalStreamView: () => Promise<void>;\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\n onSendDtmfTone: (dtmfTone: DtmfTone) => Promise<void>;\n};\n\n/**\n * @private\n */\nexport const areStreamsEqual = (prevStream: LocalVideoStream, newStream: LocalVideoStream): boolean => {\n return !!prevStream && !!newStream && prevStream.source.id === newStream.source.id;\n};\n\n/**\n * Create the default implementation of {@link CallingHandlers}.\n *\n * Useful when implementing a custom component that utilizes the providers\n * exported from this library.\n *\n * @public\n */\nexport const createDefaultCallingHandlers = memoizeOne(\n (\n callClient: StatefulCallClient,\n callAgent: CallAgent | undefined,\n deviceManager: StatefulDeviceManager | undefined,\n call: Call | undefined\n ): CallingHandlers => {\n const onStartLocalVideo = async (): Promise<void> => {\n // Before the call object creates a stream, dispose of any local preview streams.\n // @TODO: is there any way to parent the unparented view to the call object instead\n // of disposing and creating a new stream?\n await disposeAllLocalPreviewViews(callClient);\n\n const callId = call?.id;\n let videoDeviceInfo = callClient.getState().deviceManager.selectedCamera;\n if (!videoDeviceInfo) {\n const cameras = await deviceManager?.getCameras();\n videoDeviceInfo = cameras && cameras.length > 0 ? cameras[0] : undefined;\n videoDeviceInfo && deviceManager?.selectCamera(videoDeviceInfo);\n }\n if (!callId || !videoDeviceInfo) {\n return;\n }\n const stream = new LocalVideoStream(videoDeviceInfo);\n if (call && !call.localVideoStreams.find((s) => areStreamsEqual(s, stream))) {\n await call.startVideo(stream);\n }\n };\n\n const onStopLocalVideo = async (stream: LocalVideoStream): Promise<void> => {\n const callId = call?.id;\n if (!callId) {\n return;\n }\n if (call && call.localVideoStreams.find((s) => areStreamsEqual(s, stream))) {\n await call.stopVideo(stream);\n await callClient.disposeView(callId, undefined, {\n source: stream.source,\n mediaStreamType: stream.mediaStreamType\n });\n }\n };\n\n const onToggleCamera = async (options?: VideoStreamOptions): Promise<void> => {\n if (call && _isInCall(call.state)) {\n const stream = call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');\n if (stream) {\n await onStopLocalVideo(stream);\n } else {\n await onStartLocalVideo();\n }\n } else {\n const selectedCamera = callClient.getState().deviceManager.selectedCamera;\n if (selectedCamera) {\n const previewOn = _isPreviewOn(callClient.getState().deviceManager);\n if (previewOn) {\n await onDisposeLocalStreamView();\n } else {\n await callClient.createView(\n undefined,\n undefined,\n {\n source: selectedCamera,\n mediaStreamType: 'Video'\n },\n options\n );\n }\n }\n }\n };\n\n const onStartCall = (\n participants: (CommunicationUserIdentifier | PhoneNumberIdentifier | UnknownIdentifier)[],\n options?: StartCallOptions\n ): Call | undefined => {\n return callAgent ? callAgent.startCall(participants, options) : undefined;\n };\n\n const onSelectMicrophone = async (device: AudioDeviceInfo): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n return deviceManager.selectMicrophone(device);\n };\n\n const onSelectSpeaker = async (device: AudioDeviceInfo): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n return deviceManager.selectSpeaker(device);\n };\n\n const onSelectCamera = async (device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> => {\n if (!deviceManager) {\n return;\n }\n if (call && _isInCall(call.state)) {\n deviceManager.selectCamera(device);\n const stream = call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');\n return stream?.switchSource(device);\n } else {\n const previewOn = _isPreviewOn(callClient.getState().deviceManager);\n\n if (!previewOn) {\n deviceManager.selectCamera(device);\n return;\n }\n\n await onDisposeLocalStreamView();\n\n deviceManager.selectCamera(device);\n await callClient.createView(\n undefined,\n undefined,\n {\n source: device,\n mediaStreamType: 'Video'\n },\n options\n );\n }\n };\n\n const onToggleMicrophone = async (): Promise<void> => {\n if (!call || !_isInCall(call.state)) {\n throw new Error(`Please invoke onToggleMicrophone after call is started`);\n }\n return call.isMuted ? await call.unmute() : await call.mute();\n };\n\n const onStartScreenShare = async (): Promise<void> => await call?.startScreenSharing();\n\n const onStopScreenShare = async (): Promise<void> => await call?.stopScreenSharing();\n\n const onToggleScreenShare = async (): Promise<void> =>\n call?.isScreenSharingOn ? await onStopScreenShare() : await onStartScreenShare();\n\n const onHangUp = async (): Promise<void> => await call?.hangUp();\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onToggleHold = async (): Promise<void> =>\n call?.state === 'LocalHold' ? await call?.resume() : await call?.hold();\n\n const onCreateLocalStreamView = async (\n options = { scalingMode: 'Crop', isMirrored: true } as VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> => {\n if (!call || call.localVideoStreams.length === 0) {\n return;\n }\n\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n return;\n }\n\n const localStream = callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');\n if (!localStream) {\n return;\n }\n\n const { view } = (await callClient.createView(call.id, undefined, localStream, options)) ?? {};\n return view ? { view } : undefined;\n };\n\n const onCreateRemoteStreamView = async (\n userId: string,\n options = { scalingMode: 'Crop' } as VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> => {\n if (!call) {\n return;\n }\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n throw new Error(`Call Not Found: ${call.id}`);\n }\n\n const participant = Object.values(callState.remoteParticipants).find(\n (participant) => toFlatCommunicationIdentifier(participant.identifier) === userId\n );\n\n if (!participant || !participant.videoStreams) {\n return;\n }\n\n const remoteVideoStream = Object.values(participant.videoStreams).find((i) => i.mediaStreamType === 'Video');\n const screenShareStream = Object.values(participant.videoStreams).find(\n (i) => i.mediaStreamType === 'ScreenSharing'\n );\n\n let createViewResult: CreateViewResult | undefined = undefined;\n if (remoteVideoStream && remoteVideoStream.isAvailable && !remoteVideoStream.view) {\n createViewResult = await callClient.createView(call.id, participant.identifier, remoteVideoStream, options);\n }\n\n if (screenShareStream && screenShareStream.isAvailable && !screenShareStream.view) {\n // Hardcoded `scalingMode` since it is highly unlikely that CONTOSO would ever want to use a different scaling mode for screenshare.\n // Using `Crop` would crop the contents of screenshare and `Stretch` would warp it.\n // `Fit` is the only mode that maintains the integrity of the screen being shared.\n createViewResult = await callClient.createView(call.id, participant.identifier, screenShareStream, {\n scalingMode: 'Fit'\n });\n }\n\n return createViewResult?.view ? { view: createViewResult?.view } : undefined;\n };\n\n const onDisposeRemoteStreamView = async (userId: string): Promise<void> => {\n if (!call) {\n return;\n }\n const callState = callClient.getState().calls[call.id];\n if (!callState) {\n throw new Error(`Call Not Found: ${call.id}`);\n }\n\n const participant = Object.values(callState.remoteParticipants).find(\n (participant) => toFlatCommunicationIdentifier(participant.identifier) === userId\n );\n\n if (!participant || !participant.videoStreams) {\n return;\n }\n\n const remoteVideoStream = Object.values(participant.videoStreams).find((i) => i.mediaStreamType === 'Video');\n const screenShareStream = Object.values(participant.videoStreams).find(\n (i) => i.mediaStreamType === 'ScreenSharing'\n );\n\n if (remoteVideoStream && remoteVideoStream.view) {\n callClient.disposeView(call.id, participant.identifier, remoteVideoStream);\n }\n\n if (screenShareStream && screenShareStream.view) {\n callClient.disposeView(call.id, participant.identifier, screenShareStream);\n }\n };\n\n const onDisposeLocalStreamView = async (): Promise<void> => {\n // If the user is currently in a call, dispose of the local stream view attached to that call.\n const callState = call && callClient.getState().calls[call.id];\n const localStream = callState?.localVideoStreams.find((item) => item.mediaStreamType === 'Video');\n if (call && callState && localStream) {\n callClient.disposeView(call.id, undefined, localStream);\n }\n\n // If the user is not in a call we currently assume any unparented view is a LocalPreview and stop all\n // since those are only used for LocalPreview currently.\n // TODO: we need to remember which LocalVideoStream was used for LocalPreview and dispose that one.\n await disposeAllLocalPreviewViews(callClient);\n };\n\n const onRemoveParticipant = async (\n userId: string | /* @conditional-compile-remove(PSTN-calls) */ CommunicationIdentifier\n ): Promise<void> => {\n const participant = _toCommunicationIdentifier(userId);\n await call?.removeParticipant(participant);\n };\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onAddParticipant = async (participant, options?): Promise<void> => {\n const participantType = participantTypeHelper(participant);\n switch (participantType) {\n case 'PSTN':\n await call?.addParticipant(participant as PhoneNumberIdentifier, options);\n break;\n case 'ACS':\n await call?.addParticipant(participant as CommunicationUserIdentifier);\n break;\n }\n };\n\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */\n const onSendDtmfTone = async (dtmfTone: DtmfTone): Promise<void> => await call?.sendDtmf(dtmfTone);\n\n return {\n onHangUp,\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold,\n onSelectCamera,\n onSelectMicrophone,\n onSelectSpeaker,\n onStartCall,\n onStartScreenShare,\n onStopScreenShare,\n onToggleCamera,\n onToggleMicrophone,\n onToggleScreenShare,\n onCreateLocalStreamView,\n onCreateRemoteStreamView,\n onRemoveParticipant,\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant,\n onStartLocalVideo,\n onDisposeRemoteStreamView,\n onDisposeLocalStreamView,\n /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */ onSendDtmfTone\n };\n }\n);\n\n/**\n * Create a set of default handlers for given component. Memoization is applied to the result. Multiple invocations with\n * the same arguments will return the same handler instances. DeclarativeCallAgent, DeclarativeDeviceManager, and\n * DeclarativeCall may be undefined. If undefined, their associated handlers will not be created and returned.\n *\n * @param callClient - StatefulCallClient returned from\n * {@link @azure/communication-react#createStatefulCallClient}.\n * @param callAgent - Instance of {@link @azure/communication-calling#CallClient}.\n * @param deviceManager - Instance of {@link @azure/communication-calling#DeviceManager}.\n * @param call - Instance of {@link @azure/communication-calling#Call}.\n * @param _ - React component that you want to generate handlers for.\n *\n * @public\n */\nexport const createDefaultCallingHandlersForComponent = <Props>(\n callClient: StatefulCallClient,\n callAgent: CallAgent | undefined,\n deviceManager: StatefulDeviceManager | undefined,\n call: Call | undefined,\n _Component: (props: Props) => ReactElement | null\n): Common<CallingHandlers, Props> => {\n return createDefaultCallingHandlers(callClient, callAgent, deviceManager, call);\n};\n\n/* @conditional-compile-remove(PSTN-calls) */\n/**\n * Helper function for determining participant type.\n */\nconst participantTypeHelper = (p: CommunicationIdentifier): string => {\n if (isPhoneNumberIdentifier(p)) {\n return 'PSTN';\n } else if (isCommunicationUserIdentifier(p)) {\n return 'ACS';\n } else if (isMicrosoftTeamsUserIdentifier(p)) {\n return 'Teams';\n } else {\n return 'unknown';\n }\n};\n\"../../../acs-ui-common/src\"\"../../../calling-stateful-client/src\"\"../../../react-components/src\""]}
@@ -15,6 +15,5 @@ export { useSelector as useCallingSelector } from './hooks/useSelector';
15
15
  export { useHandlers as useCallingHandlers } from './hooks/useHandlers';
16
16
  export { _isInCall, _isPreviewOn, _isInLobbyOrConnecting } from './utils/callUtils';
17
17
  export { _updateUserDisplayNames } from './utils/callUtils';
18
- export type { AddParticipantHandler } from './handlers/createHandlers';
19
18
  export { _videoGalleryRemoteParticipantsMemo, _dominantSpeakersWithFlatId } from './utils/videoGalleryUtils';
20
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAUzE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG3G,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpF,6CAA6C;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAI5D,OAAO,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport type { CallingBaseSelectorProps } from './baseSelectors';\nexport * from './callControlSelectors';\nexport { createDefaultCallingHandlers } from './handlers/createHandlers';\nexport type { ParticipantListSelector } from './participantListSelector';\nexport type { ParticipantsButtonSelector } from './participantsButtonSelector';\nexport type { VideoGallerySelector } from './videoGallerySelector';\nexport type { ErrorBarSelector } from './errorBarSelector';\n/* @conditional-compile-remove(PSTN-calls) */\nexport type { HoldButtonSelector } from './callControlSelectors';\n\nexport type { CallingHandlers } from './handlers/createHandlers';\n\nexport {\n CallAgentProvider,\n CallClientProvider,\n CallProvider,\n useCall,\n useCallAgent,\n useCallClient,\n useDeviceManager\n} from './providers';\nexport type { CallAgentProviderProps, CallClientProviderProps, CallProviderProps } from './providers';\n\nexport { usePropsFor as useCallingPropsFor, getSelector as getCallingSelector } from './hooks/usePropsFor';\nexport type { GetSelector as GetCallingSelector, EmptySelector } from './hooks/usePropsFor';\n\nexport { useSelector as useCallingSelector } from './hooks/useSelector';\nexport { useHandlers as useCallingHandlers } from './hooks/useHandlers';\n\nexport { _isInCall, _isPreviewOn, _isInLobbyOrConnecting } from './utils/callUtils';\n/* @conditional-compile-remove(PSTN-calls) */\nexport { _updateUserDisplayNames } from './utils/callUtils';\n\n/* @conditional-compile-remove(PSTN-calls) */\nexport type { AddParticipantHandler } from './handlers/createHandlers';\nexport { _videoGalleryRemoteParticipantsMemo, _dominantSpeakersWithFlatId } from './utils/videoGalleryUtils';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAUzE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG3G,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpF,6CAA6C;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport type { CallingBaseSelectorProps } from './baseSelectors';\nexport * from './callControlSelectors';\nexport { createDefaultCallingHandlers } from './handlers/createHandlers';\nexport type { ParticipantListSelector } from './participantListSelector';\nexport type { ParticipantsButtonSelector } from './participantsButtonSelector';\nexport type { VideoGallerySelector } from './videoGallerySelector';\nexport type { ErrorBarSelector } from './errorBarSelector';\n/* @conditional-compile-remove(PSTN-calls) */\nexport type { HoldButtonSelector } from './callControlSelectors';\n\nexport type { CallingHandlers } from './handlers/createHandlers';\n\nexport {\n CallAgentProvider,\n CallClientProvider,\n CallProvider,\n useCall,\n useCallAgent,\n useCallClient,\n useDeviceManager\n} from './providers';\nexport type { CallAgentProviderProps, CallClientProviderProps, CallProviderProps } from './providers';\n\nexport { usePropsFor as useCallingPropsFor, getSelector as getCallingSelector } from './hooks/usePropsFor';\nexport type { GetSelector as GetCallingSelector, EmptySelector } from './hooks/usePropsFor';\n\nexport { useSelector as useCallingSelector } from './hooks/useSelector';\nexport { useHandlers as useCallingHandlers } from './hooks/useHandlers';\n\nexport { _isInCall, _isPreviewOn, _isInLobbyOrConnecting } from './utils/callUtils';\n/* @conditional-compile-remove(PSTN-calls) */\nexport { _updateUserDisplayNames } from './utils/callUtils';\n\nexport { _videoGalleryRemoteParticipantsMemo, _dominantSpeakersWithFlatId } from './utils/videoGalleryUtils';\n"]}
@@ -1,5 +1,14 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
3
12
  import { callDeclaratify } from './CallDeclarative';
4
13
  import { CallSubscriber } from './CallSubscriber';
5
14
  import { convertSdkCallToDeclarativeCall, convertSdkIncomingCallToDeclarativeIncomingCall } from './Converter';
@@ -159,8 +168,19 @@ class ProxyCallAgent {
159
168
  };
160
169
  }
161
170
  case 'dispose': {
171
+ /* @conditional-compile-remove(calling-beta-sdk) */
172
+ return () => {
173
+ target.dispose();
174
+ this.unsubscribe();
175
+ };
176
+ // Wrapping CallAgent.dispose in a callback type (): Promise<void> to accomodate the change of CallAgent.dispose
177
+ // in calling beta version 1.8.0-beta.1 from callback type (): Promise<void> to (): void
178
+ const callAgentDisposeAsyncCallbackWrapper = () => __awaiter(this, void 0, void 0, function* () {
179
+ yield target.dispose();
180
+ return Promise.resolve();
181
+ });
162
182
  return () => {
163
- return target.dispose().then(() => {
183
+ return callAgentDisposeAsyncCallbackWrapper().then(() => {
164
184
  this.unsubscribe();
165
185
  });
166
186
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CallAgentDeclarative.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallAgentDeclarative.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n Call,\n CallAgent,\n CallEndReason,\n CollectionUpdatedEvent,\n IncomingCallEvent\n} from '@azure/communication-calling';\nimport { CallContext } from './CallContext';\nimport { callDeclaratify, DeclarativeCall } from './CallDeclarative';\nimport { CallSubscriber } from './CallSubscriber';\nimport { convertSdkCallToDeclarativeCall, convertSdkIncomingCallToDeclarativeIncomingCall } from './Converter';\nimport { DeclarativeIncomingCall, incomingCallDeclaratify } from './IncomingCallDeclarative';\nimport { IncomingCallSubscriber } from './IncomingCallSubscriber';\nimport { InternalCallContext } from './InternalCallContext';\nimport { disposeAllViews, disposeAllViewsFromCall } from './StreamUtils';\n\n/**\n * @public\n * `DeclarativeCallAgent` extends and proxies the {@link @azure/communication-calling#CallAgent}\n */\nexport type DeclarativeCallAgent = CallAgent & /* @conditional-compile-remove(one-to-n-calling) */ {\n /**\n * @beta\n * A readonly array that returns all the active `incomingCalls`.\n * An active incoming call is a call that has not been answered, declined or disconnected.\n *\n * @Remark This attribute doesn't exist on the {@link @azure/communication-calling#CallAgent} interface.\n * @returns readonly array of {@link DeclarativeIncomingCall}\n */\n incomingCalls: ReadonlyArray<DeclarativeIncomingCall>;\n};\n\n/**\n * ProxyCallAgent proxies CallAgent and saves any returned state in the given context. It will subscribe to all state\n * updates in the CallAgent and in the contained Calls and RemoteParticipants. When dispose is called it will\n * unsubscribe from all state updates.\n */\nclass ProxyCallAgent implements ProxyHandler<DeclarativeCallAgent> {\n private _callAgent: CallAgent;\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n private _callSubscribers: Map<Call, CallSubscriber>;\n private _incomingCallSubscribers: Map<string, IncomingCallSubscriber>;\n private _declarativeIncomingCalls: Map<string, DeclarativeIncomingCall>;\n private _declarativeCalls: Map<Call, DeclarativeCall>;\n private _externalCallsUpdatedListeners: Set<CollectionUpdatedEvent<Call>>;\n\n constructor(callAgent: CallAgent, context: CallContext, internalContext: InternalCallContext) {\n this._callAgent = callAgent;\n this._context = context;\n this._internalContext = internalContext;\n this._callSubscribers = new Map<Call, CallSubscriber>();\n this._incomingCallSubscribers = new Map<string, IncomingCallSubscriber>();\n this._declarativeIncomingCalls = new Map<string, DeclarativeIncomingCall>();\n this._declarativeCalls = new Map<Call, DeclarativeCall>();\n this._externalCallsUpdatedListeners = new Set<CollectionUpdatedEvent<Call>>();\n this.subscribe();\n }\n\n private subscribe = (): void => {\n this._callAgent.on('callsUpdated', this.callsUpdated);\n this._callAgent.on('incomingCall', this.incomingCall);\n\n // There could be scenario that when ProxyCallAgent is created that the given CallAgent already has Calls. In this\n // case we need to make sure to subscribe to those already existing Calls.\n for (const call of this._callAgent.calls) {\n this.addCall(call);\n }\n };\n\n private unsubscribe = (): void => {\n this._callAgent.off('callsUpdated', this.callsUpdated);\n this._callAgent.off('incomingCall', this.incomingCall);\n\n // Unsubscribe is called when CallAgent is disposed. This should mean no more updating of existing call but we don't\n // remove any existing state.\n for (const [_, callSubscriber] of this._callSubscribers.entries()) {\n callSubscriber.unsubscribe();\n }\n this._callSubscribers.clear();\n\n for (const [_, incomingCallSubscriber] of this._incomingCallSubscribers.entries()) {\n incomingCallSubscriber.unsubscribe();\n }\n this._incomingCallSubscribers.clear();\n this._declarativeIncomingCalls.clear();\n\n for (const [_, declarativeCall] of this._declarativeCalls.entries()) {\n declarativeCall.unsubscribe();\n }\n this._declarativeCalls.clear();\n };\n\n private callsUpdated = (event: { added: Call[]; removed: Call[] }): void => {\n const addedStatefulCall: DeclarativeCall[] = [];\n for (const call of event.added) {\n const statefulCall = this.addCall(call);\n addedStatefulCall.push(statefulCall);\n }\n const removedStatefulCall: DeclarativeCall[] = [];\n for (const call of event.removed) {\n disposeAllViewsFromCall(this._context, this._internalContext, call.id);\n const callSubscriber = this._callSubscribers.get(call);\n if (callSubscriber) {\n callSubscriber.unsubscribe();\n this._callSubscribers.delete(call);\n }\n this._context.setCallEnded(call.id, call.callEndReason);\n const declarativeCall = this._declarativeCalls.get(call);\n if (declarativeCall) {\n declarativeCall.unsubscribe();\n removedStatefulCall.push(declarativeCall);\n this._declarativeCalls.delete(call);\n } else {\n removedStatefulCall.push(callDeclaratify(call, this._context));\n }\n }\n\n for (const externalCallsUpdatedListener of this._externalCallsUpdatedListeners) {\n externalCallsUpdatedListener({ added: addedStatefulCall, removed: removedStatefulCall });\n }\n };\n\n private setIncomingCallEnded = (incomingCallId: string, callEndReason: CallEndReason): void => {\n const incomingCallSubscriber = this._incomingCallSubscribers.get(incomingCallId);\n if (incomingCallSubscriber) {\n incomingCallSubscriber.unsubscribe();\n this._incomingCallSubscribers.delete(incomingCallId);\n }\n this._declarativeIncomingCalls.delete(incomingCallId);\n this._context.setIncomingCallEnded(incomingCallId, callEndReason);\n };\n\n private incomingCall: IncomingCallEvent = ({ incomingCall }): void => {\n // Make sure to not subscribe to the incoming call if we are already subscribed to it.\n if (!this._incomingCallSubscribers.has(incomingCall.id)) {\n this._incomingCallSubscribers.set(\n incomingCall.id,\n new IncomingCallSubscriber(incomingCall, this.setIncomingCallEnded)\n );\n }\n this._declarativeIncomingCalls.set(incomingCall.id, incomingCallDeclaratify(incomingCall, this._context));\n this._context.setIncomingCall(convertSdkIncomingCallToDeclarativeIncomingCall(incomingCall));\n };\n\n private addCall = (call: Call): DeclarativeCall => {\n this._callSubscribers.get(call)?.unsubscribe();\n\n // For API extentions we need to have the call in the state when we are subscribing as we may want to update the\n // state during the subscription process in the subscriber so we add the call to state before subscribing.\n this._context.setCall(convertSdkCallToDeclarativeCall(call));\n this._callSubscribers.set(call, new CallSubscriber(call, this._context, this._internalContext));\n return this.getOrCreateDeclarativeCall(call);\n };\n\n private getOrCreateDeclarativeCall = (call: Call): DeclarativeCall => {\n const declarativeCall = this._declarativeCalls.get(call);\n if (declarativeCall) {\n return declarativeCall;\n }\n\n const newDeclarativeCall = callDeclaratify(call, this._context);\n this._declarativeCalls.set(call, newDeclarativeCall as DeclarativeCall);\n return newDeclarativeCall;\n };\n\n public get<P extends keyof CallAgent>(target: CallAgent, prop: P): any {\n switch (prop) {\n case 'startCall': {\n return this._context.withErrorTeedToState((...args: Parameters<CallAgent['startCall']>): Call => {\n const call = target.startCall(...args);\n this.addCall(call);\n return this.getOrCreateDeclarativeCall(call);\n }, 'CallAgent.startCall');\n }\n case 'join': {\n return this._context.withErrorTeedToState((...args: Parameters<CallAgent['join']>): Call => {\n const call = target.join(...args);\n this.addCall(call);\n return this.getOrCreateDeclarativeCall(call);\n }, 'CallAgent.join');\n }\n case 'calls': {\n return Array.from(this._declarativeCalls.values());\n }\n case 'on': {\n return (...args: Parameters<CallAgent['on']>): void => {\n const isCallsUpdated = args[0] === 'callsUpdated';\n if (isCallsUpdated) {\n const listener = args[1];\n this._externalCallsUpdatedListeners.add(listener);\n } else {\n target.on(...args);\n }\n };\n }\n case 'off': {\n return (...args: Parameters<CallAgent['off']>): void => {\n const isCallsUpdated = args[0] === 'callsUpdated';\n if (isCallsUpdated) {\n const listener = args[1];\n this._externalCallsUpdatedListeners.delete(listener);\n } else {\n target.off(...args);\n }\n };\n }\n case 'dispose': {\n return (): Promise<void> => {\n return target.dispose().then(() => {\n this.unsubscribe();\n });\n };\n }\n /**\n * This attribute is a special case and doesn't exist on the CallAgent interface.\n * We need this to be able to return a declarative incoming call object using the call agent.\n * In a standard headless SDK usage, the right way to get an incoming call is to use the `incomingCall` event.\n * However, using the declarative layer, the ideal usage would be to:\n * 1. subscribe to the `onStateChange` event\n * 2. Get the incoming call from the new state and it's ID\n * 3. Use `callAgent.incomingCalls` and filter an incoming call ID to get a declarative incoming call object\n */\n case 'incomingCalls': {\n return Array.from(this._declarativeIncomingCalls.values());\n }\n default:\n return Reflect.get(target, prop);\n }\n }\n}\n\n/**\n * Creates a declarative CallAgent by proxying CallAgent with ProxyCallAgent which will track state updates by updating\n * the given context.\n *\n * @param callAgent - CallAgent from SDK\n * @param context - CallContext from StatefulCallClient\n * @param internalContext- InternalCallContext from StatefulCallClient\n */\nexport const callAgentDeclaratify = (\n callAgent: CallAgent,\n context: CallContext,\n internalContext: InternalCallContext\n): DeclarativeCallAgent => {\n // Make sure there are no existing call data if creating a new CallAgentDeclarative (if creating a new\n // CallAgentDeclarative after disposing of the hold one will mean context have old call state). TODO: should we stop\n // rendering when the previous callAgent is disposed?\n disposeAllViews(context, internalContext);\n\n context.clearCallRelatedState();\n internalContext.clearCallRelatedState();\n return new Proxy(callAgent, new ProxyCallAgent(callAgent, context, internalContext)) as DeclarativeCallAgent;\n};\n"]}
1
+ {"version":3,"file":"CallAgentDeclarative.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallAgentDeclarative.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n Call,\n CallAgent,\n CallEndReason,\n CollectionUpdatedEvent,\n IncomingCallEvent\n} from '@azure/communication-calling';\nimport { CallContext } from './CallContext';\nimport { callDeclaratify, DeclarativeCall } from './CallDeclarative';\nimport { CallSubscriber } from './CallSubscriber';\nimport { convertSdkCallToDeclarativeCall, convertSdkIncomingCallToDeclarativeIncomingCall } from './Converter';\nimport { DeclarativeIncomingCall, incomingCallDeclaratify } from './IncomingCallDeclarative';\nimport { IncomingCallSubscriber } from './IncomingCallSubscriber';\nimport { InternalCallContext } from './InternalCallContext';\nimport { disposeAllViews, disposeAllViewsFromCall } from './StreamUtils';\n\n/**\n * @public\n * `DeclarativeCallAgent` extends and proxies the {@link @azure/communication-calling#CallAgent}\n */\nexport type DeclarativeCallAgent = CallAgent & /* @conditional-compile-remove(one-to-n-calling) */ {\n /**\n * @beta\n * A readonly array that returns all the active `incomingCalls`.\n * An active incoming call is a call that has not been answered, declined or disconnected.\n *\n * @Remark This attribute doesn't exist on the {@link @azure/communication-calling#CallAgent} interface.\n * @returns readonly array of {@link DeclarativeIncomingCall}\n */\n incomingCalls: ReadonlyArray<DeclarativeIncomingCall>;\n};\n\n/**\n * ProxyCallAgent proxies CallAgent and saves any returned state in the given context. It will subscribe to all state\n * updates in the CallAgent and in the contained Calls and RemoteParticipants. When dispose is called it will\n * unsubscribe from all state updates.\n */\nclass ProxyCallAgent implements ProxyHandler<DeclarativeCallAgent> {\n private _callAgent: CallAgent;\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n private _callSubscribers: Map<Call, CallSubscriber>;\n private _incomingCallSubscribers: Map<string, IncomingCallSubscriber>;\n private _declarativeIncomingCalls: Map<string, DeclarativeIncomingCall>;\n private _declarativeCalls: Map<Call, DeclarativeCall>;\n private _externalCallsUpdatedListeners: Set<CollectionUpdatedEvent<Call>>;\n\n constructor(callAgent: CallAgent, context: CallContext, internalContext: InternalCallContext) {\n this._callAgent = callAgent;\n this._context = context;\n this._internalContext = internalContext;\n this._callSubscribers = new Map<Call, CallSubscriber>();\n this._incomingCallSubscribers = new Map<string, IncomingCallSubscriber>();\n this._declarativeIncomingCalls = new Map<string, DeclarativeIncomingCall>();\n this._declarativeCalls = new Map<Call, DeclarativeCall>();\n this._externalCallsUpdatedListeners = new Set<CollectionUpdatedEvent<Call>>();\n this.subscribe();\n }\n\n private subscribe = (): void => {\n this._callAgent.on('callsUpdated', this.callsUpdated);\n this._callAgent.on('incomingCall', this.incomingCall);\n\n // There could be scenario that when ProxyCallAgent is created that the given CallAgent already has Calls. In this\n // case we need to make sure to subscribe to those already existing Calls.\n for (const call of this._callAgent.calls) {\n this.addCall(call);\n }\n };\n\n private unsubscribe = (): void => {\n this._callAgent.off('callsUpdated', this.callsUpdated);\n this._callAgent.off('incomingCall', this.incomingCall);\n\n // Unsubscribe is called when CallAgent is disposed. This should mean no more updating of existing call but we don't\n // remove any existing state.\n for (const [_, callSubscriber] of this._callSubscribers.entries()) {\n callSubscriber.unsubscribe();\n }\n this._callSubscribers.clear();\n\n for (const [_, incomingCallSubscriber] of this._incomingCallSubscribers.entries()) {\n incomingCallSubscriber.unsubscribe();\n }\n this._incomingCallSubscribers.clear();\n this._declarativeIncomingCalls.clear();\n\n for (const [_, declarativeCall] of this._declarativeCalls.entries()) {\n declarativeCall.unsubscribe();\n }\n this._declarativeCalls.clear();\n };\n\n private callsUpdated = (event: { added: Call[]; removed: Call[] }): void => {\n const addedStatefulCall: DeclarativeCall[] = [];\n for (const call of event.added) {\n const statefulCall = this.addCall(call);\n addedStatefulCall.push(statefulCall);\n }\n const removedStatefulCall: DeclarativeCall[] = [];\n for (const call of event.removed) {\n disposeAllViewsFromCall(this._context, this._internalContext, call.id);\n const callSubscriber = this._callSubscribers.get(call);\n if (callSubscriber) {\n callSubscriber.unsubscribe();\n this._callSubscribers.delete(call);\n }\n this._context.setCallEnded(call.id, call.callEndReason);\n const declarativeCall = this._declarativeCalls.get(call);\n if (declarativeCall) {\n declarativeCall.unsubscribe();\n removedStatefulCall.push(declarativeCall);\n this._declarativeCalls.delete(call);\n } else {\n removedStatefulCall.push(callDeclaratify(call, this._context));\n }\n }\n\n for (const externalCallsUpdatedListener of this._externalCallsUpdatedListeners) {\n externalCallsUpdatedListener({ added: addedStatefulCall, removed: removedStatefulCall });\n }\n };\n\n private setIncomingCallEnded = (incomingCallId: string, callEndReason: CallEndReason): void => {\n const incomingCallSubscriber = this._incomingCallSubscribers.get(incomingCallId);\n if (incomingCallSubscriber) {\n incomingCallSubscriber.unsubscribe();\n this._incomingCallSubscribers.delete(incomingCallId);\n }\n this._declarativeIncomingCalls.delete(incomingCallId);\n this._context.setIncomingCallEnded(incomingCallId, callEndReason);\n };\n\n private incomingCall: IncomingCallEvent = ({ incomingCall }): void => {\n // Make sure to not subscribe to the incoming call if we are already subscribed to it.\n if (!this._incomingCallSubscribers.has(incomingCall.id)) {\n this._incomingCallSubscribers.set(\n incomingCall.id,\n new IncomingCallSubscriber(incomingCall, this.setIncomingCallEnded)\n );\n }\n this._declarativeIncomingCalls.set(incomingCall.id, incomingCallDeclaratify(incomingCall, this._context));\n this._context.setIncomingCall(convertSdkIncomingCallToDeclarativeIncomingCall(incomingCall));\n };\n\n private addCall = (call: Call): DeclarativeCall => {\n this._callSubscribers.get(call)?.unsubscribe();\n\n // For API extentions we need to have the call in the state when we are subscribing as we may want to update the\n // state during the subscription process in the subscriber so we add the call to state before subscribing.\n this._context.setCall(convertSdkCallToDeclarativeCall(call));\n this._callSubscribers.set(call, new CallSubscriber(call, this._context, this._internalContext));\n return this.getOrCreateDeclarativeCall(call);\n };\n\n private getOrCreateDeclarativeCall = (call: Call): DeclarativeCall => {\n const declarativeCall = this._declarativeCalls.get(call);\n if (declarativeCall) {\n return declarativeCall;\n }\n\n const newDeclarativeCall = callDeclaratify(call, this._context);\n this._declarativeCalls.set(call, newDeclarativeCall as DeclarativeCall);\n return newDeclarativeCall;\n };\n\n public get<P extends keyof CallAgent>(target: CallAgent, prop: P): any {\n switch (prop) {\n case 'startCall': {\n return this._context.withErrorTeedToState((...args: Parameters<CallAgent['startCall']>): Call => {\n const call = target.startCall(...args);\n this.addCall(call);\n return this.getOrCreateDeclarativeCall(call);\n }, 'CallAgent.startCall');\n }\n case 'join': {\n return this._context.withErrorTeedToState((...args: Parameters<CallAgent['join']>): Call => {\n const call = target.join(...args);\n this.addCall(call);\n return this.getOrCreateDeclarativeCall(call);\n }, 'CallAgent.join');\n }\n case 'calls': {\n return Array.from(this._declarativeCalls.values());\n }\n case 'on': {\n return (...args: Parameters<CallAgent['on']>): void => {\n const isCallsUpdated = args[0] === 'callsUpdated';\n if (isCallsUpdated) {\n const listener = args[1];\n this._externalCallsUpdatedListeners.add(listener);\n } else {\n target.on(...args);\n }\n };\n }\n case 'off': {\n return (...args: Parameters<CallAgent['off']>): void => {\n const isCallsUpdated = args[0] === 'callsUpdated';\n if (isCallsUpdated) {\n const listener = args[1];\n this._externalCallsUpdatedListeners.delete(listener);\n } else {\n target.off(...args);\n }\n };\n }\n case 'dispose': {\n /* @conditional-compile-remove(calling-beta-sdk) */\n return (): void => {\n target.dispose();\n this.unsubscribe();\n };\n // Wrapping CallAgent.dispose in a callback type (): Promise<void> to accomodate the change of CallAgent.dispose\n // in calling beta version 1.8.0-beta.1 from callback type (): Promise<void> to (): void\n const callAgentDisposeAsyncCallbackWrapper = async (): Promise<void> => {\n await target.dispose();\n return Promise.resolve();\n };\n return (): Promise<void> => {\n return callAgentDisposeAsyncCallbackWrapper().then(() => {\n this.unsubscribe();\n });\n };\n }\n /**\n * This attribute is a special case and doesn't exist on the CallAgent interface.\n * We need this to be able to return a declarative incoming call object using the call agent.\n * In a standard headless SDK usage, the right way to get an incoming call is to use the `incomingCall` event.\n * However, using the declarative layer, the ideal usage would be to:\n * 1. subscribe to the `onStateChange` event\n * 2. Get the incoming call from the new state and it's ID\n * 3. Use `callAgent.incomingCalls` and filter an incoming call ID to get a declarative incoming call object\n */\n case 'incomingCalls': {\n return Array.from(this._declarativeIncomingCalls.values());\n }\n default:\n return Reflect.get(target, prop);\n }\n }\n}\n\n/**\n * Creates a declarative CallAgent by proxying CallAgent with ProxyCallAgent which will track state updates by updating\n * the given context.\n *\n * @param callAgent - CallAgent from SDK\n * @param context - CallContext from StatefulCallClient\n * @param internalContext- InternalCallContext from StatefulCallClient\n */\nexport const callAgentDeclaratify = (\n callAgent: CallAgent,\n context: CallContext,\n internalContext: InternalCallContext\n): DeclarativeCallAgent => {\n // Make sure there are no existing call data if creating a new CallAgentDeclarative (if creating a new\n // CallAgentDeclarative after disposing of the hold one will mean context have old call state). TODO: should we stop\n // rendering when the previous callAgent is disposed?\n disposeAllViews(context, internalContext);\n\n context.clearCallRelatedState();\n internalContext.clearCallRelatedState();\n return new Proxy(callAgent, new ProxyCallAgent(callAgent, context, internalContext)) as DeclarativeCallAgent;\n};\n"]}
@@ -437,7 +437,7 @@ export declare class CallError extends Error {
437
437
  *
438
438
  * @public
439
439
  */
440
- export declare type CallErrorTarget = 'Call.addParticipant' | 'Call.feature' | 'Call.hangUp' | 'Call.hold' | 'Call.mute' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.muteIncomingAudio' | 'Call.off' | 'Call.on' | 'Call.removeParticipant' | 'Call.resume' | 'Call.sendDtmf' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.startAudio' | 'Call.startScreenSharing' | 'Call.startVideo' | 'Call.stopScreenSharing' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.stopAudio' | 'Call.stopVideo' | 'Call.unmute' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.unmuteIncomingAudio' | 'CallAgent.dispose' | 'CallAgent.feature' | 'CallAgent.join' | 'CallAgent.off' | 'CallAgent.on' | 'CallAgent.startCall' | 'CallClient.createCallAgent' | 'CallClient.feature' | 'CallClient.getDeviceManager' | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.getEnvironmentInfo' | 'DeviceManager.askDevicePermission' | 'DeviceManager.getCameras' | 'DeviceManager.getMicrophones' | 'DeviceManager.getSpeakers' | 'DeviceManager.off' | 'DeviceManager.on' | 'DeviceManager.selectMicrophone' | 'DeviceManager.selectSpeaker' | 'IncomingCall.accept' | 'IncomingCall.reject';
440
+ export declare type CallErrorTarget = 'Call.addParticipant' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.dispose' | 'Call.feature' | 'Call.hangUp' | 'Call.hold' | 'Call.mute' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.muteIncomingAudio' | 'Call.off' | 'Call.on' | 'Call.removeParticipant' | 'Call.resume' | 'Call.sendDtmf' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.startAudio' | 'Call.startScreenSharing' | 'Call.startVideo' | 'Call.stopScreenSharing' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.stopAudio' | 'Call.stopVideo' | 'Call.unmute' | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.unmuteIncomingAudio' | 'CallAgent.dispose' | 'CallAgent.feature' | 'CallAgent.join' | 'CallAgent.off' | 'CallAgent.on' | 'CallAgent.startCall' | 'CallClient.createCallAgent' | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.createTeamsCallAgent' | 'CallClient.feature' | 'CallClient.getDeviceManager' | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.getEnvironmentInfo' | 'DeviceManager.askDevicePermission' | 'DeviceManager.getCameras' | 'DeviceManager.getMicrophones' | 'DeviceManager.getSpeakers' | 'DeviceManager.off' | 'DeviceManager.on' | 'DeviceManager.selectMicrophone' | 'DeviceManager.selectSpeaker' | 'IncomingCall.accept' | 'IncomingCall.reject';
441
441
  /**
442
442
  * State only proxy for {@link @azure/communication-calling#DiagnosticsCallFeature}.
443
443
  *
@@ -1 +1 @@
1
- {"version":3,"file":"CallClientState.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallClientState.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAsblC;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAclC,YAAY,MAAuB,EAAE,UAAiB,EAAE,SAAgB;QACtE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,8EAA8E;QAC9E,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AudioDeviceInfo,\n CallDirection,\n CallEndReason,\n CallerInfo,\n CallState as CallStatus,\n DeviceAccess,\n DominantSpeakersInfo,\n LatestMediaDiagnostics,\n LatestNetworkDiagnostics,\n MediaStreamType,\n RemoteParticipantState as RemoteParticipantStatus,\n ScalingMode,\n VideoDeviceInfo\n} from '@azure/communication-calling';\nimport {\n CommunicationUserKind,\n MicrosoftTeamsUserKind,\n PhoneNumberKind,\n UnknownIdentifierKind,\n CommunicationIdentifierKind\n} from '@azure/communication-common';\n\n/**\n * State only version of {@link @azure/communication-calling#CallAgent} except calls is moved to be a child directly of\n * {@link CallClientState} and not included here. The reason to have CallAgent's state proxied is to provide access to\n * displayName. We don't flatten CallAgent.displayName and put it in CallClientState because it would be ambiguious that\n * displayName is actually reliant on the creation/existence of CallAgent to be available.\n *\n * @public\n */\nexport interface CallAgentState {\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent.displayName}.\n */\n displayName?: string;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#TranscriptionCallFeature}. {@link StatefulCallClient} will\n * automatically listen for transcription state of the call and update the state exposed by {@link StatefulCallClient}\n * accordingly.\n *\n * @public\n */\nexport interface TranscriptionCallFeatureState {\n /**\n * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature.isTranscriptionActive}.\n */\n isTranscriptionActive: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RecordingCallFeature}. {@link StatefulCallClient} will\n * automatically listen for recording state of the call and update the state exposed by {@link StatefulCallClient} accordingly.\n *\n * @public\n */\nexport interface RecordingCallFeatureState {\n /**\n * Proxy of {@link @azure/communication-calling#RecordingCallFeature.isRecordingActive}.\n */\n isRecordingActive: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#LocalVideoStream}.\n *\n * @public\n */\nexport interface LocalVideoStreamState {\n /**\n * Proxy of {@link @azure/communication-calling#LocalVideoStream.source}.\n */\n source: VideoDeviceInfo;\n /**\n * Proxy of {@link @azure/communication-calling#LocalVideoStream.mediaStreamType}.\n */\n mediaStreamType: MediaStreamType;\n /**\n * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}\n * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.\n */\n view?: VideoStreamRendererViewState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RemoteVideoStream}.\n *\n * @public\n */\nexport interface RemoteVideoStreamState {\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.id}.\n */\n id: number;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.mediaStreamType}.\n */\n mediaStreamType: MediaStreamType;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isAvailable}.\n */\n isAvailable: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isReceiving}.\n * @beta\n */\n /* @conditional-compile-remove(video-stream-is-receiving-flag) */\n isReceiving: boolean;\n /**\n * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}\n * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.\n */\n view?: VideoStreamRendererViewState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#VideoStreamRendererView}. This property is added to the state exposed\n * by {@link StatefulCallClient} by {@link StatefulCallClient.createView} and removed by {@link StatefulCallClient.disposeView}.\n *\n * @public\n */\nexport interface VideoStreamRendererViewState {\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.scalingMode}.\n */\n scalingMode: ScalingMode;\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.isMirrored}.\n */\n isMirrored: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.target}.\n */\n target: HTMLElement;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RemoteParticipant}. {@link StatefulCallClient} will\n * automatically retrieve RemoteParticipants and add their state to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface RemoteParticipantState {\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.identifier}.\n */\n identifier: CommunicationUserKind | PhoneNumberKind | MicrosoftTeamsUserKind | UnknownIdentifierKind;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.displayName}.\n */\n displayName?: string;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.state}.\n */\n state: RemoteParticipantStatus;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.callEndReason}.\n */\n callEndReason?: CallEndReason;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.videoStreams} as an object with\n * {@link RemoteVideoStream} fields keyed by {@link @azure/communication-calling#RemoteVideoStream.id}.\n */\n videoStreams: { [key: number]: RemoteVideoStreamState };\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.isMuted}.\n */\n isMuted: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.isSpeaking}.\n */\n isSpeaking: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#Call}. {@link StatefulCallClient} will automatically\n * retrieve Call's state and add it to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface CallState {\n /**\n * Proxy of {@link @azure/communication-calling#Call.id}.\n */\n id: string;\n /**\n * Proxy of {@link @azure/communication-calling#Call.callerInfo}.\n */\n callerInfo: CallerInfo;\n /**\n * Proxy of {@link @azure/communication-calling#Call.state}.\n */\n state: CallStatus;\n /**\n * Proxy of {@link @azure/communication-calling#Call.callEndReason}.\n */\n callEndReason?: CallEndReason;\n /**\n * Proxy of {@link @azure/communication-calling#Call.direction}.\n */\n direction: CallDirection;\n /**\n * Proxy of {@link @azure/communication-calling#Call.isMuted}.\n */\n isMuted: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#Call.isScreenSharingOn}.\n */\n isScreenSharingOn: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#DominantSpeakersInfo }.\n */\n dominantSpeakers?: DominantSpeakersInfo;\n /**\n * Proxy of {@link @azure/communication-calling#Call.localVideoStreams}.\n */\n localVideoStreams: LocalVideoStreamState[];\n /**\n * Proxy of {@link @azure/communication-calling#Call.remoteParticipants}.\n * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.\n * To obtain a flattened {@link RemoteParticipantState.identifier}, use\n * {@link @azure/communication-react#toFlatCommunicationIdentifier}.\n */\n remoteParticipants: { [keys: string]: RemoteParticipantState };\n /**\n * Stores remote participants that have left the call so that the callEndReason could be retrieved.\n * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.\n * To obtain a flattened {@link RemoteParticipantState.identifier}, use\n * {@link @azure/communication-react#toFlatCommunicationIdentifier}.\n */\n remoteParticipantsEnded: { [keys: string]: RemoteParticipantState };\n /**\n * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature}.\n */\n transcription: TranscriptionCallFeatureState;\n /**\n * Proxy of {@link @azure/communication-calling#RecordingCallFeature}.\n */\n recording: RecordingCallFeatureState;\n /**\n * Stores the currently active screenshare participant's key. If there is no screenshare active, then this will be\n * undefined. You can use this key to access the remoteParticipant data in {@link CallState.remoteParticipants} object.\n *\n * Note this only applies to ScreenShare in RemoteParticipant. A local ScreenShare being active will not affect this\n * property.\n *\n * This property is added by the stateful layer and is not a proxy of SDK state\n */\n screenShareRemoteParticipant?: string;\n /**\n * Stores the local date when the call started on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n startTime: Date;\n /**\n * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n endTime: Date | undefined;\n\n /**\n * Stores the latest call diagnostics.\n */\n diagnostics: DiagnosticsCallFeatureState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#IncomingCall}. {@link StatefulCallClient} will\n * automatically detect incoming calls and add their state to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface IncomingCallState {\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall.id}.\n */\n id: string;\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall.callerInfo}.\n */\n callerInfo: CallerInfo;\n /**\n * Set to the state returned by 'callEnded' event on {@link @azure/communication-calling#IncomingCall} when received.\n * This property is added by the stateful layer and is not a proxy of SDK state.\n */\n callEndReason?: CallEndReason;\n /**\n * Stores the local date when the call started on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n startTime: Date;\n /**\n * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not a\n * proxy of SDK state. It is undefined if the call is not ended yet.\n */\n endTime?: Date;\n}\n\n/**\n * This type is meant to encapsulate all the state inside {@link @azure/communication-calling#DeviceManager}. For\n * optional parameters they may not be available until permission is granted by the user. The cameras, microphones,\n * speakers, and deviceAccess states will be empty until the corresponding\n * {@link @azure/communication-calling#DeviceManager}'s getCameras, getMicrophones, getSpeakers, and askDevicePermission\n * APIs are called and completed.\n *\n * @public\n */\nexport type DeviceManagerState = {\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.isSpeakerSelectionAvailable}.\n */\n isSpeakerSelectionAvailable: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.selectedMicrophone}.\n */\n selectedMicrophone?: AudioDeviceInfo;\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.selectedSpeaker}.\n */\n selectedSpeaker?: AudioDeviceInfo;\n /**\n * Stores the selected camera device info. This is added by the stateful layer and does not exist in the Calling SDK.\n * It is meant as a convenience to the developer. It must be explicitly set before it has any value and does not\n * persist across instances of the {@link StatefulCallClient}. The developer controls entirely what this value holds\n * at any time.\n */\n selectedCamera?: VideoDeviceInfo;\n /**\n * Stores any cameras data returned from {@link @azure/communication-calling#DeviceManager.getCameras}.\n */\n cameras: VideoDeviceInfo[];\n /**\n * Stores any microphones data returned from {@link @azure/communication-calling#DeviceManager.getMicrophones}.\n */\n microphones: AudioDeviceInfo[];\n /**\n * Stores any speakers data returned from {@link @azure/communication-calling#DeviceManager.getSpeakers}.\n */\n speakers: AudioDeviceInfo[];\n /**\n * Stores deviceAccess data returned from {@link @azure/communication-calling#DeviceManager.askDevicePermission}.\n */\n deviceAccess?: DeviceAccess;\n /**\n * Stores created views that are not associated with any CallState (when {@link StatefulCallClient.createView} is\n * called with undefined callId, undefined participantId, and defined LocalVideoStream).\n *\n * The values in this array are generated internally when {@link StatefulCallClient.createView} is called and are\n * considered immutable.\n */\n unparentedViews: LocalVideoStreamState[];\n};\n\n/**\n * Container for all of the state data proxied by {@link StatefulCallClient}. The calls, callsEnded, incomingCalls, and\n * incomingCallsEnded states will be automatically provided if a callAgent has been created. The deviceManager will be\n * empty initially until populated see {@link DeviceManagerState}. The userId state is provided as a convenience for the\n * developer and is completely controled and set by the developer.\n *\n * @public\n */\nexport interface CallClientState {\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent.calls} as an object with CallState {@link CallState} fields.\n * It is keyed by {@link @azure/communication-calling#Call.id}. Please note that\n * {@link @azure/communication-calling#Call.id} could change. You should not cache the id itself but the entire\n * {@link @azure/communication-calling#Call} and then use the id contained to look up data in this map.\n */\n calls: { [key: string]: CallState };\n /**\n * Calls that have ended are stored here so the callEndReason could be checked.\n * It is an object with {@link @azure/communication-calling#Call.id} keys and {@link CallState} values.\n *\n * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.\n */\n callsEnded: { [key: string]: CallState };\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall} as an object with {@link IncomingCall} fields.\n * It is keyed by {@link @azure/communication-calling#IncomingCall.id}.\n */\n incomingCalls: { [key: string]: IncomingCallState };\n /**\n * Incoming Calls that have ended are stored here so the callEndReason could be checked.\n * It is an as an object with {@link @azure/communication-calling#Call.id} keys and {@link IncomingCall} values.\n *\n * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.\n */\n incomingCallsEnded: { [key: string]: IncomingCallState };\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager}. Please review {@link DeviceManagerState}.\n */\n deviceManager: DeviceManagerState;\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent}. Please review {@link CallAgentState}.\n */\n callAgent?: CallAgentState;\n /**\n * Stores a userId. This is not used by the {@link StatefulCallClient} and is provided here as a convenience for the\n * developer for easier access to userId. Must be passed in at initialization of the {@link StatefulCallClient}.\n * Completely controlled by the developer.\n */\n userId: CommunicationIdentifierKind;\n /**\n * Stores the latest error for each API method.\n *\n * See documentation of {@Link CallErrors} for details.\n */\n latestErrors: CallErrors;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * A phone number in E.164 format that will be used to represent callers identity.\n * For example, using the alternateCallerId to add a participant using PSTN, this number will\n * be used as the caller id in the PSTN call.\n */\n alternateCallerId?: string;\n}\n\n/**\n * Errors teed from API calls to the Calling SDK.\n *\n * Each property in the object stores the latest error for a particular SDK API method.\n *\n * Errors from this object can be cleared using the {@link newClearCallErrorsModifier}.\n * Additionally, errors are automatically cleared when:\n * - The state is cleared.\n * - Subsequent calls to related API methods succeed.\n * See documentation of individual stateful client methods for details on when errors may be automatically cleared.\n *\n * @public\n */\nexport type CallErrors = {\n [target in CallErrorTarget]: CallError;\n};\n\n/**\n * Error thrown from failed stateful API methods.\n *\n * @public\n */\nexport class CallError extends Error {\n /**\n * The API method target that failed.\n */\n public target: CallErrorTarget;\n /**\n * Error thrown by the failed SDK method.\n */\n public innerError: Error;\n /**\n * Timestamp added to the error by the stateful layer.\n */\n public timestamp: Date;\n\n constructor(target: CallErrorTarget, innerError: Error, timestamp?: Date) {\n super();\n this.target = target;\n this.innerError = innerError;\n // Testing note: It is easier to mock Date::now() than the Date() constructor.\n this.timestamp = timestamp ?? new Date(Date.now());\n this.name = 'CallError';\n this.message = `${this.target}: ${this.innerError.message}`;\n }\n}\n\n/**\n * String literal type for all permissible keys in {@Link CallErrors}.\n *\n * @public\n */\nexport type CallErrorTarget =\n | 'Call.addParticipant'\n | 'Call.feature'\n | 'Call.hangUp'\n | 'Call.hold'\n | 'Call.mute'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.muteIncomingAudio'\n | 'Call.off'\n | 'Call.on'\n | 'Call.removeParticipant'\n | 'Call.resume'\n | 'Call.sendDtmf'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.startAudio'\n | 'Call.startScreenSharing'\n | 'Call.startVideo'\n | 'Call.stopScreenSharing'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.stopAudio'\n | 'Call.stopVideo'\n | 'Call.unmute'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.unmuteIncomingAudio'\n | 'CallAgent.dispose'\n | 'CallAgent.feature'\n | 'CallAgent.join'\n | 'CallAgent.off'\n | 'CallAgent.on'\n | 'CallAgent.startCall'\n | 'CallClient.createCallAgent'\n | 'CallClient.feature'\n | 'CallClient.getDeviceManager'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.getEnvironmentInfo'\n | 'DeviceManager.askDevicePermission'\n | 'DeviceManager.getCameras'\n | 'DeviceManager.getMicrophones'\n | 'DeviceManager.getSpeakers'\n | 'DeviceManager.off'\n | 'DeviceManager.on'\n | 'DeviceManager.selectMicrophone'\n | 'DeviceManager.selectSpeaker'\n | 'IncomingCall.accept'\n | 'IncomingCall.reject';\n\n/**\n * State only proxy for {@link @azure/communication-calling#DiagnosticsCallFeature}.\n *\n * @public\n */\nexport interface DiagnosticsCallFeatureState {\n /**\n * Stores diagnostics related to network conditions.\n */\n network: NetworkDiagnosticsState;\n\n /**\n * Stores diagnostics related to media quality.\n */\n media: MediaDiagnosticsState;\n}\n\n/**\n * State only proxy for {@link @azure/communication-calling#NetworkDiagnostics}.\n *\n * @public\n */\nexport interface NetworkDiagnosticsState {\n latest: LatestNetworkDiagnostics;\n}\n\n/**\n * State only proxy for {@link @azure/communication-calling#MediaDiagnostics}.\n *\n * @public\n */\nexport interface MediaDiagnosticsState {\n latest: LatestMediaDiagnostics;\n}\n"]}
1
+ {"version":3,"file":"CallClientState.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallClientState.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAsblC;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAclC,YAAY,MAAuB,EAAE,UAAiB,EAAE,SAAgB;QACtE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,8EAA8E;QAC9E,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AudioDeviceInfo,\n CallDirection,\n CallEndReason,\n CallerInfo,\n CallState as CallStatus,\n DeviceAccess,\n DominantSpeakersInfo,\n LatestMediaDiagnostics,\n LatestNetworkDiagnostics,\n MediaStreamType,\n RemoteParticipantState as RemoteParticipantStatus,\n ScalingMode,\n VideoDeviceInfo\n} from '@azure/communication-calling';\nimport {\n CommunicationUserKind,\n MicrosoftTeamsUserKind,\n PhoneNumberKind,\n UnknownIdentifierKind,\n CommunicationIdentifierKind\n} from '@azure/communication-common';\n\n/**\n * State only version of {@link @azure/communication-calling#CallAgent} except calls is moved to be a child directly of\n * {@link CallClientState} and not included here. The reason to have CallAgent's state proxied is to provide access to\n * displayName. We don't flatten CallAgent.displayName and put it in CallClientState because it would be ambiguious that\n * displayName is actually reliant on the creation/existence of CallAgent to be available.\n *\n * @public\n */\nexport interface CallAgentState {\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent.displayName}.\n */\n displayName?: string;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#TranscriptionCallFeature}. {@link StatefulCallClient} will\n * automatically listen for transcription state of the call and update the state exposed by {@link StatefulCallClient}\n * accordingly.\n *\n * @public\n */\nexport interface TranscriptionCallFeatureState {\n /**\n * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature.isTranscriptionActive}.\n */\n isTranscriptionActive: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RecordingCallFeature}. {@link StatefulCallClient} will\n * automatically listen for recording state of the call and update the state exposed by {@link StatefulCallClient} accordingly.\n *\n * @public\n */\nexport interface RecordingCallFeatureState {\n /**\n * Proxy of {@link @azure/communication-calling#RecordingCallFeature.isRecordingActive}.\n */\n isRecordingActive: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#LocalVideoStream}.\n *\n * @public\n */\nexport interface LocalVideoStreamState {\n /**\n * Proxy of {@link @azure/communication-calling#LocalVideoStream.source}.\n */\n source: VideoDeviceInfo;\n /**\n * Proxy of {@link @azure/communication-calling#LocalVideoStream.mediaStreamType}.\n */\n mediaStreamType: MediaStreamType;\n /**\n * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}\n * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.\n */\n view?: VideoStreamRendererViewState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RemoteVideoStream}.\n *\n * @public\n */\nexport interface RemoteVideoStreamState {\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.id}.\n */\n id: number;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.mediaStreamType}.\n */\n mediaStreamType: MediaStreamType;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isAvailable}.\n */\n isAvailable: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isReceiving}.\n * @beta\n */\n /* @conditional-compile-remove(video-stream-is-receiving-flag) */\n isReceiving: boolean;\n /**\n * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}\n * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.\n */\n view?: VideoStreamRendererViewState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#VideoStreamRendererView}. This property is added to the state exposed\n * by {@link StatefulCallClient} by {@link StatefulCallClient.createView} and removed by {@link StatefulCallClient.disposeView}.\n *\n * @public\n */\nexport interface VideoStreamRendererViewState {\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.scalingMode}.\n */\n scalingMode: ScalingMode;\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.isMirrored}.\n */\n isMirrored: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.target}.\n */\n target: HTMLElement;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#RemoteParticipant}. {@link StatefulCallClient} will\n * automatically retrieve RemoteParticipants and add their state to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface RemoteParticipantState {\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.identifier}.\n */\n identifier: CommunicationUserKind | PhoneNumberKind | MicrosoftTeamsUserKind | UnknownIdentifierKind;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.displayName}.\n */\n displayName?: string;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.state}.\n */\n state: RemoteParticipantStatus;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.callEndReason}.\n */\n callEndReason?: CallEndReason;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.videoStreams} as an object with\n * {@link RemoteVideoStream} fields keyed by {@link @azure/communication-calling#RemoteVideoStream.id}.\n */\n videoStreams: { [key: number]: RemoteVideoStreamState };\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.isMuted}.\n */\n isMuted: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#RemoteParticipant.isSpeaking}.\n */\n isSpeaking: boolean;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#Call}. {@link StatefulCallClient} will automatically\n * retrieve Call's state and add it to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface CallState {\n /**\n * Proxy of {@link @azure/communication-calling#Call.id}.\n */\n id: string;\n /**\n * Proxy of {@link @azure/communication-calling#Call.callerInfo}.\n */\n callerInfo: CallerInfo;\n /**\n * Proxy of {@link @azure/communication-calling#Call.state}.\n */\n state: CallStatus;\n /**\n * Proxy of {@link @azure/communication-calling#Call.callEndReason}.\n */\n callEndReason?: CallEndReason;\n /**\n * Proxy of {@link @azure/communication-calling#Call.direction}.\n */\n direction: CallDirection;\n /**\n * Proxy of {@link @azure/communication-calling#Call.isMuted}.\n */\n isMuted: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#Call.isScreenSharingOn}.\n */\n isScreenSharingOn: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#DominantSpeakersInfo }.\n */\n dominantSpeakers?: DominantSpeakersInfo;\n /**\n * Proxy of {@link @azure/communication-calling#Call.localVideoStreams}.\n */\n localVideoStreams: LocalVideoStreamState[];\n /**\n * Proxy of {@link @azure/communication-calling#Call.remoteParticipants}.\n * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.\n * To obtain a flattened {@link RemoteParticipantState.identifier}, use\n * {@link @azure/communication-react#toFlatCommunicationIdentifier}.\n */\n remoteParticipants: { [keys: string]: RemoteParticipantState };\n /**\n * Stores remote participants that have left the call so that the callEndReason could be retrieved.\n * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.\n * To obtain a flattened {@link RemoteParticipantState.identifier}, use\n * {@link @azure/communication-react#toFlatCommunicationIdentifier}.\n */\n remoteParticipantsEnded: { [keys: string]: RemoteParticipantState };\n /**\n * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature}.\n */\n transcription: TranscriptionCallFeatureState;\n /**\n * Proxy of {@link @azure/communication-calling#RecordingCallFeature}.\n */\n recording: RecordingCallFeatureState;\n /**\n * Stores the currently active screenshare participant's key. If there is no screenshare active, then this will be\n * undefined. You can use this key to access the remoteParticipant data in {@link CallState.remoteParticipants} object.\n *\n * Note this only applies to ScreenShare in RemoteParticipant. A local ScreenShare being active will not affect this\n * property.\n *\n * This property is added by the stateful layer and is not a proxy of SDK state\n */\n screenShareRemoteParticipant?: string;\n /**\n * Stores the local date when the call started on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n startTime: Date;\n /**\n * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n endTime: Date | undefined;\n\n /**\n * Stores the latest call diagnostics.\n */\n diagnostics: DiagnosticsCallFeatureState;\n}\n\n/**\n * State only version of {@link @azure/communication-calling#IncomingCall}. {@link StatefulCallClient} will\n * automatically detect incoming calls and add their state to the state exposed by {@link StatefulCallClient}.\n *\n * @public\n */\nexport interface IncomingCallState {\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall.id}.\n */\n id: string;\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall.callerInfo}.\n */\n callerInfo: CallerInfo;\n /**\n * Set to the state returned by 'callEnded' event on {@link @azure/communication-calling#IncomingCall} when received.\n * This property is added by the stateful layer and is not a proxy of SDK state.\n */\n callEndReason?: CallEndReason;\n /**\n * Stores the local date when the call started on the client. This property is added by the stateful layer and is not\n * a proxy of SDK state.\n */\n startTime: Date;\n /**\n * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not a\n * proxy of SDK state. It is undefined if the call is not ended yet.\n */\n endTime?: Date;\n}\n\n/**\n * This type is meant to encapsulate all the state inside {@link @azure/communication-calling#DeviceManager}. For\n * optional parameters they may not be available until permission is granted by the user. The cameras, microphones,\n * speakers, and deviceAccess states will be empty until the corresponding\n * {@link @azure/communication-calling#DeviceManager}'s getCameras, getMicrophones, getSpeakers, and askDevicePermission\n * APIs are called and completed.\n *\n * @public\n */\nexport type DeviceManagerState = {\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.isSpeakerSelectionAvailable}.\n */\n isSpeakerSelectionAvailable: boolean;\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.selectedMicrophone}.\n */\n selectedMicrophone?: AudioDeviceInfo;\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager.selectedSpeaker}.\n */\n selectedSpeaker?: AudioDeviceInfo;\n /**\n * Stores the selected camera device info. This is added by the stateful layer and does not exist in the Calling SDK.\n * It is meant as a convenience to the developer. It must be explicitly set before it has any value and does not\n * persist across instances of the {@link StatefulCallClient}. The developer controls entirely what this value holds\n * at any time.\n */\n selectedCamera?: VideoDeviceInfo;\n /**\n * Stores any cameras data returned from {@link @azure/communication-calling#DeviceManager.getCameras}.\n */\n cameras: VideoDeviceInfo[];\n /**\n * Stores any microphones data returned from {@link @azure/communication-calling#DeviceManager.getMicrophones}.\n */\n microphones: AudioDeviceInfo[];\n /**\n * Stores any speakers data returned from {@link @azure/communication-calling#DeviceManager.getSpeakers}.\n */\n speakers: AudioDeviceInfo[];\n /**\n * Stores deviceAccess data returned from {@link @azure/communication-calling#DeviceManager.askDevicePermission}.\n */\n deviceAccess?: DeviceAccess;\n /**\n * Stores created views that are not associated with any CallState (when {@link StatefulCallClient.createView} is\n * called with undefined callId, undefined participantId, and defined LocalVideoStream).\n *\n * The values in this array are generated internally when {@link StatefulCallClient.createView} is called and are\n * considered immutable.\n */\n unparentedViews: LocalVideoStreamState[];\n};\n\n/**\n * Container for all of the state data proxied by {@link StatefulCallClient}. The calls, callsEnded, incomingCalls, and\n * incomingCallsEnded states will be automatically provided if a callAgent has been created. The deviceManager will be\n * empty initially until populated see {@link DeviceManagerState}. The userId state is provided as a convenience for the\n * developer and is completely controled and set by the developer.\n *\n * @public\n */\nexport interface CallClientState {\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent.calls} as an object with CallState {@link CallState} fields.\n * It is keyed by {@link @azure/communication-calling#Call.id}. Please note that\n * {@link @azure/communication-calling#Call.id} could change. You should not cache the id itself but the entire\n * {@link @azure/communication-calling#Call} and then use the id contained to look up data in this map.\n */\n calls: { [key: string]: CallState };\n /**\n * Calls that have ended are stored here so the callEndReason could be checked.\n * It is an object with {@link @azure/communication-calling#Call.id} keys and {@link CallState} values.\n *\n * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.\n */\n callsEnded: { [key: string]: CallState };\n /**\n * Proxy of {@link @azure/communication-calling#IncomingCall} as an object with {@link IncomingCall} fields.\n * It is keyed by {@link @azure/communication-calling#IncomingCall.id}.\n */\n incomingCalls: { [key: string]: IncomingCallState };\n /**\n * Incoming Calls that have ended are stored here so the callEndReason could be checked.\n * It is an as an object with {@link @azure/communication-calling#Call.id} keys and {@link IncomingCall} values.\n *\n * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.\n */\n incomingCallsEnded: { [key: string]: IncomingCallState };\n /**\n * Proxy of {@link @azure/communication-calling#DeviceManager}. Please review {@link DeviceManagerState}.\n */\n deviceManager: DeviceManagerState;\n /**\n * Proxy of {@link @azure/communication-calling#CallAgent}. Please review {@link CallAgentState}.\n */\n callAgent?: CallAgentState;\n /**\n * Stores a userId. This is not used by the {@link StatefulCallClient} and is provided here as a convenience for the\n * developer for easier access to userId. Must be passed in at initialization of the {@link StatefulCallClient}.\n * Completely controlled by the developer.\n */\n userId: CommunicationIdentifierKind;\n /**\n * Stores the latest error for each API method.\n *\n * See documentation of {@Link CallErrors} for details.\n */\n latestErrors: CallErrors;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * A phone number in E.164 format that will be used to represent callers identity.\n * For example, using the alternateCallerId to add a participant using PSTN, this number will\n * be used as the caller id in the PSTN call.\n */\n alternateCallerId?: string;\n}\n\n/**\n * Errors teed from API calls to the Calling SDK.\n *\n * Each property in the object stores the latest error for a particular SDK API method.\n *\n * Errors from this object can be cleared using the {@link newClearCallErrorsModifier}.\n * Additionally, errors are automatically cleared when:\n * - The state is cleared.\n * - Subsequent calls to related API methods succeed.\n * See documentation of individual stateful client methods for details on when errors may be automatically cleared.\n *\n * @public\n */\nexport type CallErrors = {\n [target in CallErrorTarget]: CallError;\n};\n\n/**\n * Error thrown from failed stateful API methods.\n *\n * @public\n */\nexport class CallError extends Error {\n /**\n * The API method target that failed.\n */\n public target: CallErrorTarget;\n /**\n * Error thrown by the failed SDK method.\n */\n public innerError: Error;\n /**\n * Timestamp added to the error by the stateful layer.\n */\n public timestamp: Date;\n\n constructor(target: CallErrorTarget, innerError: Error, timestamp?: Date) {\n super();\n this.target = target;\n this.innerError = innerError;\n // Testing note: It is easier to mock Date::now() than the Date() constructor.\n this.timestamp = timestamp ?? new Date(Date.now());\n this.name = 'CallError';\n this.message = `${this.target}: ${this.innerError.message}`;\n }\n}\n\n/**\n * String literal type for all permissible keys in {@Link CallErrors}.\n *\n * @public\n */\nexport type CallErrorTarget =\n | 'Call.addParticipant'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.dispose'\n | 'Call.feature'\n | 'Call.hangUp'\n | 'Call.hold'\n | 'Call.mute'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.muteIncomingAudio'\n | 'Call.off'\n | 'Call.on'\n | 'Call.removeParticipant'\n | 'Call.resume'\n | 'Call.sendDtmf'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.startAudio'\n | 'Call.startScreenSharing'\n | 'Call.startVideo'\n | 'Call.stopScreenSharing'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.stopAudio'\n | 'Call.stopVideo'\n | 'Call.unmute'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'Call.unmuteIncomingAudio'\n | 'CallAgent.dispose'\n | 'CallAgent.feature'\n | 'CallAgent.join'\n | 'CallAgent.off'\n | 'CallAgent.on'\n | 'CallAgent.startCall'\n | 'CallClient.createCallAgent'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.createTeamsCallAgent'\n | 'CallClient.feature'\n | 'CallClient.getDeviceManager'\n | /* @conditional-compile-remove(calling-beta-sdk) */ 'CallClient.getEnvironmentInfo'\n | 'DeviceManager.askDevicePermission'\n | 'DeviceManager.getCameras'\n | 'DeviceManager.getMicrophones'\n | 'DeviceManager.getSpeakers'\n | 'DeviceManager.off'\n | 'DeviceManager.on'\n | 'DeviceManager.selectMicrophone'\n | 'DeviceManager.selectSpeaker'\n | 'IncomingCall.accept'\n | 'IncomingCall.reject';\n\n/**\n * State only proxy for {@link @azure/communication-calling#DiagnosticsCallFeature}.\n *\n * @public\n */\nexport interface DiagnosticsCallFeatureState {\n /**\n * Stores diagnostics related to network conditions.\n */\n network: NetworkDiagnosticsState;\n\n /**\n * Stores diagnostics related to media quality.\n */\n media: MediaDiagnosticsState;\n}\n\n/**\n * State only proxy for {@link @azure/communication-calling#NetworkDiagnostics}.\n *\n * @public\n */\nexport interface NetworkDiagnosticsState {\n latest: LatestNetworkDiagnostics;\n}\n\n/**\n * State only proxy for {@link @azure/communication-calling#MediaDiagnostics}.\n *\n * @public\n */\nexport interface MediaDiagnosticsState {\n latest: LatestMediaDiagnostics;\n}\n"]}
@@ -35,7 +35,6 @@ export type { HoldButtonProps, HoldButtonStrings, VideoTileStrings } from '../..
35
35
  export type { DomainPermissionsStrings, DomainPermissionsProps } from '../../react-components/src';
36
36
  export * from '../../react-components/src/localization/locales';
37
37
  export * from '../../react-components/src/theming';
38
- export type { AddParticipantHandler } from '../../calling-component-bindings/src';
39
38
  export * from '../../calling-stateful-client/src';
40
39
  export type { DeclarativeCallAgent } from '../../calling-stateful-client/src';
41
40
  export { createStatefulChatClient } from '../../chat-stateful-client/src';
@@ -44,4 +43,6 @@ export * from '../../react-composites/src/index-public';
44
43
  export * from './mergedHooks';
45
44
  export { UnsupportedBrowser } from '../../react-components/src';
46
45
  export type { UnsupportedBrowserStrings, UnsupportedBrowserProps } from '../../react-components/src';
46
+ export { _DevicePermissionDropdown } from '../../react-components/src';
47
+ export type { _DevicePermissionDropdownStrings, _DevicePermissionDropdownProps } from '../../react-components/src';
47
48
  //# sourceMappingURL=index.d.ts.map
@@ -34,4 +34,6 @@ export * from '../../react-composites/src/index-public';
34
34
  export * from './mergedHooks';
35
35
  /* @conditional-compile-remove(unsupported-browser) */
36
36
  export { UnsupportedBrowser } from '../../react-components/src';
37
+ /* @conditional-compile-remove(call-readiness) */
38
+ export { _DevicePermissionDropdown } from '../../react-components/src';
37
39
  //# sourceMappingURL=index.js.map