@webex/calling 3.12.0-next.60 → 3.12.0-next.62

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 (65) hide show
  1. package/dist/CallRecording/CallRecording.js +158 -0
  2. package/dist/CallRecording/CallRecording.js.map +1 -0
  3. package/dist/CallRecording/CallRecording.test.js +257 -0
  4. package/dist/CallRecording/CallRecording.test.js.map +1 -0
  5. package/dist/CallRecording/WxcCallRecordingConnector.js +576 -0
  6. package/dist/CallRecording/WxcCallRecordingConnector.js.map +1 -0
  7. package/dist/CallRecording/WxcCallRecordingConnector.test.js +651 -0
  8. package/dist/CallRecording/WxcCallRecordingConnector.test.js.map +1 -0
  9. package/dist/CallRecording/callRecordingFixtures.js +235 -0
  10. package/dist/CallRecording/callRecordingFixtures.js.map +1 -0
  11. package/dist/CallRecording/constants.js +49 -0
  12. package/dist/CallRecording/constants.js.map +1 -0
  13. package/dist/CallRecording/types.js +136 -0
  14. package/dist/CallRecording/types.js.map +1 -0
  15. package/dist/CallRecording/utils.js +42 -0
  16. package/dist/CallRecording/utils.js.map +1 -0
  17. package/dist/CallRecording/utils.test.js +97 -0
  18. package/dist/CallRecording/utils.test.js.map +1 -0
  19. package/dist/Events/types.js +28 -1
  20. package/dist/Events/types.js.map +1 -1
  21. package/dist/SDKConnector/types.js.map +1 -1
  22. package/dist/api.js +56 -0
  23. package/dist/api.js.map +1 -1
  24. package/dist/common/testUtil.js +2 -1
  25. package/dist/common/testUtil.js.map +1 -1
  26. package/dist/common/types.js +1 -0
  27. package/dist/common/types.js.map +1 -1
  28. package/dist/index.js +138 -45
  29. package/dist/index.js.map +1 -1
  30. package/dist/module/CallRecording/CallRecording.js +56 -0
  31. package/dist/module/CallRecording/WxcCallRecordingConnector.js +264 -0
  32. package/dist/module/CallRecording/callRecordingFixtures.js +201 -0
  33. package/dist/module/CallRecording/constants.js +27 -0
  34. package/dist/module/CallRecording/types.js +19 -0
  35. package/dist/module/CallRecording/utils.js +14 -0
  36. package/dist/module/Events/types.js +19 -0
  37. package/dist/module/api.js +3 -2
  38. package/dist/module/common/testUtil.js +1 -0
  39. package/dist/module/common/types.js +1 -0
  40. package/dist/module/index.js +4 -1
  41. package/dist/types/CallRecording/CallRecording.d.ts +18 -0
  42. package/dist/types/CallRecording/CallRecording.d.ts.map +1 -0
  43. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts +23 -0
  44. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts.map +1 -0
  45. package/dist/types/CallRecording/callRecordingFixtures.d.ts +61 -0
  46. package/dist/types/CallRecording/callRecordingFixtures.d.ts.map +1 -0
  47. package/dist/types/CallRecording/constants.d.ts +28 -0
  48. package/dist/types/CallRecording/constants.d.ts.map +1 -0
  49. package/dist/types/CallRecording/types.d.ts +176 -0
  50. package/dist/types/CallRecording/types.d.ts.map +1 -0
  51. package/dist/types/CallRecording/utils.d.ts +3 -0
  52. package/dist/types/CallRecording/utils.d.ts.map +1 -0
  53. package/dist/types/Events/types.d.ts +65 -2
  54. package/dist/types/Events/types.d.ts.map +1 -1
  55. package/dist/types/SDKConnector/types.d.ts +2 -0
  56. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  57. package/dist/types/api.d.ts +6 -4
  58. package/dist/types/api.d.ts.map +1 -1
  59. package/dist/types/common/testUtil.d.ts +1 -0
  60. package/dist/types/common/testUtil.d.ts.map +1 -1
  61. package/dist/types/common/types.d.ts +2 -1
  62. package/dist/types/common/types.d.ts.map +1 -1
  63. package/dist/types/index.d.ts +4 -1
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","_testUtil","_types2","_WxcCallRecordingConnector","_types3","_callRecordingFixtures","_types4","_constants","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_constants2","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","webex","getTestUtilsWebex","uploadLogsSpy","serviceErrorCodeHandlerSpy","describe","connector","infoSpy","jest","spyOn","log","mockImplementation","errorSpy","beforeAll","WxcCallRecordingConnector","level","LOGGER","INFO","beforeEach","mockResolvedValue","afterEach","clearAllMocks","loggerContext","file","CALL_RECORDING_FILE","method","METHODS","GET_RECORDINGS","it","_asyncToGenerator2","_regenerator","mark","_callee","_response$data$record","payload","response","wrap","_context","prev","next","MOCK_RECORDING_LIST_BODY","request","getCallRecording","type","RecordingRequestType","LIST","sent","expect","statusCode","toBe","message","data","recordings","toHaveLength","id","RECORDING_ONE","not","toHaveBeenCalled","stop","_callee2","callArgs","_context2","options","from","to","status","RecordingStatus","DELETED","max","serviceType","format","ownerType","storageRegion","locationId","topic","webexUserRequest","mock","calls","length","HTTP_METHODS","GET","service","uri","toContain","headers","toEqual","WebexUserRequest","_callee3","_context3","_callee4","_context4","useFakeTimers","setSystemTime","Date","days","concat","encodeURIComponent","useRealTimers","_callee5","_context5","toBeUndefined","_callee6","_context6","MOCK_EMPTY_RECORDING_LIST_BODY","each","expected","ERROR_DETAILS_400","ERROR_DETAILS_401","ERROR_DETAILS_404","_ref8","_callee7","_ref7","failurePayload","_context7","mockRejectedValue","toStrictEqual","toBeCalledOnceWith","toHaveBeenCalledWith","stringContaining","toHaveBeenCalledTimes","_x","apply","arguments","GET_RECORDING","_callee8","_response$data$record2","_context8","MOCK_RECORDING_BODY","DETAIL","recordingId","recording","METHOD_START_MESSAGE","_callee9","_context9","_callee0","_response$data$record3","_context0","BY_CALL_SESSION","callSessionId","CALL_SESSION_ID","_callee1","_context1","_callee10","_context10","_callee11","_context11","GET_RECORDING_METADATA","_callee12","_response$data$metada","_context12","MOCK_RECORDING_METADATA_BODY","METADATA","metadata","_callee13","_context13","DELETE_RECORDING","_callee14","_context14","deleteRecording","DELETE","body","_callee15","_context15","reason","comment","_callee16","_context16","localConnector","mockOn","findHandler","eventKey","filter","internal","mercury","on","mockClear","registeredKeys","map","RECORDING_MERCURY_KEYS","CREATED","UPDATED","done","COMMON_EVENT_KEYS","CALL_RECORDING_CREATED","event","MOCK_RECORDING_CREATED_EVENT","updatedRoutingData","name","MOCK_RECORDING_TRASH_EVENT","expectedKey","CALL_RECORDING_DELETED","MOCK_RECORDING_PURGE_EVENT","MOCK_RECORDING_RESTORE_EVENT","MOCK_RECORDING_UPDATED_EVENT","CALL_RECORDING_UPDATED","_ref18","spy","fn","MOCK_RECORDING_DELETED_EVENT"],"sources":["WxcCallRecordingConnector.test.ts"],"sourcesContent":["/* eslint-disable dot-notation */\nimport {LOGGER} from '../Logger/types';\nimport {getTestUtilsWebex} from '../common/testUtil';\nimport {HTTP_METHODS, WebexRequestPayload} from '../common/types';\nimport {WxcCallRecordingConnector} from './WxcCallRecordingConnector';\nimport {RecordingRequestType, RecordingStatus} from './types';\nimport {\n CALL_SESSION_ID,\n ERROR_DETAILS_400,\n ERROR_DETAILS_401,\n ERROR_DETAILS_404,\n MOCK_EMPTY_RECORDING_LIST_BODY,\n MOCK_RECORDING_BODY,\n MOCK_RECORDING_CREATED_EVENT,\n MOCK_RECORDING_DELETED_EVENT,\n MOCK_RECORDING_LIST_BODY,\n MOCK_RECORDING_METADATA_BODY,\n MOCK_RECORDING_PURGE_EVENT,\n MOCK_RECORDING_RESTORE_EVENT,\n MOCK_RECORDING_TRASH_EVENT,\n MOCK_RECORDING_UPDATED_EVENT,\n RECORDING_MERCURY_KEYS,\n RECORDING_ONE,\n} from './callRecordingFixtures';\nimport {COMMON_EVENT_KEYS, RecordingEvent} from '../Events/types';\nimport {CALL_RECORDING_FILE, METHODS} from './constants';\nimport * as utils from '../common/Utils';\nimport log from '../Logger';\nimport {METHOD_START_MESSAGE} from '../common/constants';\n\nconst webex = getTestUtilsWebex();\nlet uploadLogsSpy: jest.SpyInstance;\nlet serviceErrorCodeHandlerSpy: jest.SpyInstance;\n\ndescribe('WxcCallRecordingConnector tests', () => {\n let connector: WxcCallRecordingConnector;\n const infoSpy = jest.spyOn(log, 'info').mockImplementation();\n const errorSpy = jest.spyOn(log, 'error').mockImplementation();\n\n beforeAll(() => {\n connector = new WxcCallRecordingConnector(webex, {level: LOGGER.INFO});\n });\n\n beforeEach(() => {\n uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();\n serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('getRecordings', () => {\n const loggerContext = {file: CALL_RECORDING_FILE, method: METHODS.GET_RECORDINGS};\n\n it('successfully fetches the list of recordings', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({type: RecordingRequestType.LIST});\n\n expect(response.statusCode).toBe(200);\n expect(response.message).toBe('SUCCESS');\n expect(response.data.recordings).toHaveLength(2);\n expect(response.data.recordings?.[0].id).toBe(RECORDING_ONE.id);\n expect(errorSpy).not.toHaveBeenCalled();\n expect(uploadLogsSpy).not.toHaveBeenCalled();\n });\n\n it('builds the request URL with the provided filter/pagination query params', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n await connector.getCallRecording({\n type: RecordingRequestType.LIST,\n options: {\n from: '2024-05-01T00:00:00.000Z',\n to: '2024-05-31T00:00:00.000Z',\n status: RecordingStatus.DELETED,\n max: 25,\n serviceType: 'calling',\n format: 'MP3',\n ownerType: 'user',\n storageRegion: 'US',\n locationId: 'location-123',\n topic: 'Call with User7',\n webexUserRequest: true,\n },\n });\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.method).toBe(HTTP_METHODS.GET);\n expect(callArgs.service).toBe('hydraDeveloperApi');\n expect(callArgs.uri).toContain('/convergedRecordings?');\n expect(callArgs.uri).toContain('from=2024-05-01T00%3A00%3A00.000Z');\n expect(callArgs.uri).toContain('to=2024-05-31T00%3A00%3A00.000Z');\n expect(callArgs.uri).toContain('status=deleted');\n expect(callArgs.uri).toContain('max=25');\n expect(callArgs.uri).toContain('serviceType=calling');\n expect(callArgs.uri).toContain('format=MP3');\n expect(callArgs.uri).toContain('ownerType=user');\n expect(callArgs.uri).toContain('storageRegion=US');\n expect(callArgs.uri).toContain('locationId=location-123');\n expect(callArgs.uri).toContain('topic=Call+with+User7');\n expect(callArgs.uri).not.toContain('orderType');\n expect(callArgs.uri).not.toContain('orderBy');\n expect(callArgs.uri).not.toContain('offset');\n expect(callArgs.uri).not.toContain('actorID');\n expect(callArgs.uri).not.toContain('showAccessCount');\n expect(callArgs.headers).toEqual({WebexUserRequest: 'true'});\n });\n\n it('applies the default filter/pagination query params when no options are provided', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n await connector.getCallRecording({type: RecordingRequestType.LIST});\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain('from=');\n expect(callArgs.uri).toContain('to=');\n expect(callArgs.uri).toContain('status=available');\n expect(callArgs.uri).toContain('max=30');\n expect(callArgs.uri).not.toContain('orderType');\n expect(callArgs.uri).not.toContain('orderBy');\n expect(callArgs.uri).not.toContain('offset');\n // Optional pass-through filters are omitted when not provided.\n expect(callArgs.uri).not.toContain('serviceType');\n expect(callArgs.uri).not.toContain('format');\n expect(callArgs.uri).not.toContain('ownerType');\n expect(callArgs.uri).not.toContain('storageRegion');\n expect(callArgs.uri).not.toContain('locationId');\n expect(callArgs.uri).not.toContain('topic');\n });\n\n it('derives the from date from the days lookback and defaults to to now when not provided', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n jest.useFakeTimers().setSystemTime(new Date('2024-06-15T12:00:00.000Z'));\n\n await connector.getCallRecording({type: RecordingRequestType.LIST, options: {days: 7}});\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain(`from=${encodeURIComponent('2024-06-08T12:00:00.000Z')}`);\n expect(callArgs.uri).toContain(`to=${encodeURIComponent('2024-06-15T12:00:00.000Z')}`);\n\n jest.useRealTimers();\n });\n\n it('does not send the WebexUserRequest header by default', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n await connector.getCallRecording({type: RecordingRequestType.LIST});\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.headers).toBeUndefined();\n });\n\n it('returns an empty list when there are no recordings', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_EMPTY_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({type: RecordingRequestType.LIST});\n\n expect(response.statusCode).toBe(200);\n expect(response.data.recordings).toEqual([]);\n });\n\n it.each([\n {statusCode: 400, expected: ERROR_DETAILS_400},\n {statusCode: 401, expected: ERROR_DETAILS_401},\n {statusCode: 404, expected: ERROR_DETAILS_404},\n ])('handles a $statusCode error', async ({statusCode, expected}) => {\n const failurePayload = {statusCode};\n webex.request.mockRejectedValue(<WebexRequestPayload>(<unknown>failurePayload));\n\n const response = await connector.getCallRecording({type: RecordingRequestType.LIST});\n\n expect(response).toStrictEqual(expected);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith({statusCode}, loggerContext);\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Failed to get recordings'),\n loggerContext\n );\n expect(uploadLogsSpy).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('getRecording', () => {\n const loggerContext = {file: CALL_RECORDING_FILE, method: METHODS.GET_RECORDING};\n\n it('successfully fetches a single recording', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.DETAIL,\n recordingId: RECORDING_ONE.id,\n });\n\n expect(response.statusCode).toBe(200);\n expect(response.message).toBe('SUCCESS');\n expect(response.data.recording?.id).toBe(RECORDING_ONE.id);\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain(`/convergedRecordings/${RECORDING_ONE.id}`);\n expect(callArgs.method).toBe(HTTP_METHODS.GET);\n expect(callArgs.service).toBe('hydraDeveloperApi');\n expect(infoSpy).toHaveBeenCalledWith(\n `${METHOD_START_MESSAGE} with recordingId=${RECORDING_ONE.id}`,\n loggerContext\n );\n });\n\n it('handles a 404 error when the recording does not exist', async () => {\n webex.request.mockRejectedValue(<WebexRequestPayload>(<unknown>{statusCode: 404}));\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.DETAIL,\n recordingId: 'missing-id',\n });\n\n expect(response).toStrictEqual(ERROR_DETAILS_404);\n expect(uploadLogsSpy).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('getRecordingsByCallSessionId', () => {\n it('returns only the recordings matching the call session id', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.BY_CALL_SESSION,\n callSessionId: CALL_SESSION_ID,\n });\n\n expect(response.statusCode).toBe(200);\n expect(response.data.recordings).toHaveLength(1);\n expect(response.data.recordings?.[0].id).toBe(RECORDING_ONE.id);\n });\n\n it('returns an empty list when no recording matches', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.BY_CALL_SESSION,\n callSessionId: 'non-existent-session',\n });\n\n expect(response.statusCode).toBe(200);\n expect(response.data.recordings).toEqual([]);\n });\n\n it('propagates the error response from the underlying list call', async () => {\n webex.request.mockRejectedValue(<WebexRequestPayload>(<unknown>{statusCode: 401}));\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.BY_CALL_SESSION,\n callSessionId: CALL_SESSION_ID,\n });\n\n expect(response).toStrictEqual(ERROR_DETAILS_401);\n });\n\n it('forwards list options to the underlying list query to widen the scan', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_LIST_BODY);\n webex.request.mockResolvedValue(payload);\n\n await connector.getCallRecording({\n type: RecordingRequestType.BY_CALL_SESSION,\n callSessionId: CALL_SESSION_ID,\n options: {\n from: '2024-05-01T00:00:00.000Z',\n to: '2024-05-31T00:00:00.000Z',\n status: RecordingStatus.DELETED,\n max: 100,\n },\n });\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain('from=2024-05-01T00%3A00%3A00.000Z');\n expect(callArgs.uri).toContain('to=2024-05-31T00%3A00%3A00.000Z');\n expect(callArgs.uri).toContain('status=deleted');\n expect(callArgs.uri).toContain('max=100');\n });\n });\n\n describe('getRecordingMetadata', () => {\n const loggerContext = {file: CALL_RECORDING_FILE, method: METHODS.GET_RECORDING_METADATA};\n\n it('successfully fetches the recording metadata', async () => {\n const payload = <WebexRequestPayload>(<unknown>MOCK_RECORDING_METADATA_BODY);\n webex.request.mockResolvedValue(payload);\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.METADATA,\n recordingId: RECORDING_ONE.id,\n });\n\n expect(response.statusCode).toBe(200);\n expect(response.message).toBe('SUCCESS');\n expect(response.data.metadata?.callSessionId).toBe(CALL_SESSION_ID);\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain(`/convergedRecordings/${RECORDING_ONE.id}/metadata`);\n expect(callArgs.method).toBe(HTTP_METHODS.GET);\n expect(callArgs.service).toBe('hydraDeveloperApi');\n });\n\n it('handles a 400 error', async () => {\n webex.request.mockRejectedValue(<WebexRequestPayload>(<unknown>{statusCode: 400}));\n\n const response = await connector.getCallRecording({\n type: RecordingRequestType.METADATA,\n recordingId: 'bad-id',\n });\n\n expect(response).toStrictEqual(ERROR_DETAILS_400);\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Failed to get recording metadata'),\n loggerContext\n );\n expect(uploadLogsSpy).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('deleteRecording', () => {\n const loggerContext = {file: CALL_RECORDING_FILE, method: METHODS.DELETE_RECORDING};\n\n it('successfully deletes a recording without a body when no options are provided', async () => {\n webex.request.mockResolvedValue(<WebexRequestPayload>(<unknown>{statusCode: 200}));\n\n const response = await connector.deleteRecording(RECORDING_ONE.id);\n\n expect(response.statusCode).toBe(200);\n expect(response.message).toBe('SUCCESS');\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.uri).toContain(`/convergedRecordings/${RECORDING_ONE.id}`);\n expect(callArgs.uri).not.toContain('/metadata');\n expect(callArgs.method).toBe(HTTP_METHODS.DELETE);\n expect(callArgs.service).toBe('hydraDeveloperApi');\n expect(callArgs.body).toBeUndefined();\n });\n\n it('sends reason and comment in the body when provided (Compliance Officer deletion)', async () => {\n webex.request.mockResolvedValue(<WebexRequestPayload>(<unknown>{statusCode: 200}));\n\n await connector.deleteRecording(RECORDING_ONE.id, {\n reason: 'audit',\n comment: 'Maintain data privacy',\n });\n\n const callArgs = webex.request.mock.calls[webex.request.mock.calls.length - 1][0];\n expect(callArgs.method).toBe(HTTP_METHODS.DELETE);\n expect(callArgs.body).toStrictEqual({reason: 'audit', comment: 'Maintain data privacy'});\n });\n\n it('handles a 400 error', async () => {\n webex.request.mockRejectedValue(<WebexRequestPayload>(<unknown>{statusCode: 400}));\n\n const response = await connector.deleteRecording('bad-id');\n\n expect(response).toStrictEqual(ERROR_DETAILS_400);\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Failed to delete recording'),\n loggerContext\n );\n expect(uploadLogsSpy).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('URL resolution', () => {\n it('resolves the recording base URL from the services catalog (hydraDeveloperApi)', () => {\n const localConnector = new WxcCallRecordingConnector(getTestUtilsWebex(), {\n level: LOGGER.INFO,\n });\n\n expect(localConnector['recordingServiceUrl']).toBe('https://integration.webexapis.com/v1');\n });\n });\n\n describe('Recording Mercury events', () => {\n let mockOn: jest.Mock;\n\n const findHandler = (eventKey: string) => {\n const calls = mockOn.mock.calls.filter((call) => call[0] === eventKey);\n\n return calls[calls.length - 1][1];\n };\n\n beforeEach(() => {\n mockOn = webex.internal.mercury.on as unknown as jest.Mock;\n mockOn.mockClear();\n connector = new WxcCallRecordingConnector(webex, {level: LOGGER.INFO});\n });\n\n it('registers listeners for all three recording mercury events', () => {\n const registeredKeys = mockOn.mock.calls.map((call) => call[0]);\n\n expect(registeredKeys).toContain(RECORDING_MERCURY_KEYS.CREATED);\n expect(registeredKeys).toContain(RECORDING_MERCURY_KEYS.UPDATED);\n expect(registeredKeys).toContain(RECORDING_MERCURY_KEYS.DELETED);\n });\n\n it('emits the recording created event', (done) => {\n connector.on(COMMON_EVENT_KEYS.CALL_RECORDING_CREATED, (event: RecordingEvent) => {\n expect(event).toEqual(MOCK_RECORDING_CREATED_EVENT);\n done();\n });\n\n findHandler(RECORDING_MERCURY_KEYS.CREATED)(MOCK_RECORDING_CREATED_EVENT);\n });\n\n /**\n * The backend delivers the recording lifecycle through `convergedRecordings.updated` events\n * qualified by `eventSubType`. The connector routes them to the intuitive typed event:\n * name: TestCase name\n * event: the raw `updated` Mercury event (with its eventSubType)\n * expectedKey: the typed event the connector should emit\n */\n const updatedRoutingData: {\n name: string;\n event: RecordingEvent;\n expectedKey: COMMON_EVENT_KEYS;\n }[] = [\n {\n name: 'TRASH (soft delete) -> callRecording:deleted',\n event: MOCK_RECORDING_TRASH_EVENT,\n expectedKey: COMMON_EVENT_KEYS.CALL_RECORDING_DELETED,\n },\n {\n name: 'PURGE (permanent delete) -> callRecording:deleted',\n event: MOCK_RECORDING_PURGE_EVENT,\n expectedKey: COMMON_EVENT_KEYS.CALL_RECORDING_DELETED,\n },\n {\n name: 'RESTORE (restored from trash) -> callRecording:created',\n event: MOCK_RECORDING_RESTORE_EVENT,\n expectedKey: COMMON_EVENT_KEYS.CALL_RECORDING_CREATED,\n },\n {\n name: 'SUMMARY_CREATE (summary/transcript ready) -> callRecording:updated',\n event: MOCK_RECORDING_UPDATED_EVENT,\n expectedKey: COMMON_EVENT_KEYS.CALL_RECORDING_UPDATED,\n },\n ];\n\n it.each(updatedRoutingData)(\n 'routes a convergedRecordings.updated event by eventSubType: $name',\n ({event, expectedKey}) => {\n const spy = jest.fn();\n connector.on(expectedKey, spy);\n\n findHandler(RECORDING_MERCURY_KEYS.UPDATED)(event);\n\n expect(spy).toHaveBeenCalledWith(event);\n }\n );\n\n it('emits the recording deleted event', (done) => {\n connector.on(COMMON_EVENT_KEYS.CALL_RECORDING_DELETED, (event: RecordingEvent) => {\n expect(event).toEqual(MOCK_RECORDING_DELETED_EVENT);\n done();\n });\n\n findHandler(RECORDING_MERCURY_KEYS.DELETED)(MOCK_RECORDING_DELETED_EVENT);\n });\n\n it('ignores malformed events without an activity payload', () => {\n const spy = jest.fn();\n connector.on(COMMON_EVENT_KEYS.CALL_RECORDING_CREATED, spy);\n\n findHandler(RECORDING_MERCURY_KEYS.CREATED)({} as RecordingEvent);\n\n expect(spy).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RECORDING_TWO = exports.RECORDING_REMOTE_PARTY_ID = exports.RECORDING_OWNER_ID = exports.RECORDING_ONE = exports.RECORDING_MERCURY_KEYS = exports.MOCK_RECORDING_UPDATED_EVENT = exports.MOCK_RECORDING_TRASH_EVENT = exports.MOCK_RECORDING_RESTORE_EVENT = exports.MOCK_RECORDING_PURGE_EVENT = exports.MOCK_RECORDING_METADATA_BODY = exports.MOCK_RECORDING_METADATA = exports.MOCK_RECORDING_LIST_BODY = exports.MOCK_RECORDING_DELETED_EVENT = exports.MOCK_RECORDING_CREATED_EVENT = exports.MOCK_RECORDING_BODY = exports.MOCK_EMPTY_RECORDING_LIST_BODY = exports.ERROR_DETAILS_404 = exports.ERROR_DETAILS_401 = exports.ERROR_DETAILS_400 = exports.CALL_SESSION_ID = void 0;
8
+ var _types = require("../Events/types");
9
+ var _types2 = require("./types");
10
+ var CALL_SESSION_ID = exports.CALL_SESSION_ID = 'a1b2c3d4-1111-2222-3333-444455556666';
11
+ var RECORDING_ONE = exports.RECORDING_ONE = {
12
+ id: '11111111-aaaa-bbbb-cccc-222222222222',
13
+ topic: 'Call with Alice',
14
+ createTime: '2024-05-01T10:01:05.000Z',
15
+ timeRecorded: '2024-05-01T10:00:00.000Z',
16
+ format: 'MP3',
17
+ serviceType: 'calling',
18
+ durationSeconds: 65,
19
+ sizeBytes: 1048576,
20
+ status: _types2.RecordingStatus.AVAILABLE,
21
+ ownerId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',
22
+ ownerEmail: 'owner@cisco.com',
23
+ ownerType: 'user',
24
+ storageRegion: 'US',
25
+ serviceData: {
26
+ locationId: 'loc-1',
27
+ callSessionId: CALL_SESSION_ID
28
+ }
29
+ };
30
+ var RECORDING_TWO = exports.RECORDING_TWO = {
31
+ id: '33333333-dddd-eeee-ffff-444444444444',
32
+ topic: 'Call with Bob',
33
+ createTime: '2024-05-02T11:02:05.000Z',
34
+ timeRecorded: '2024-05-02T11:00:00.000Z',
35
+ format: 'MP3',
36
+ serviceType: 'calling',
37
+ durationSeconds: 120,
38
+ sizeBytes: 2097152,
39
+ status: _types2.RecordingStatus.AVAILABLE,
40
+ ownerId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',
41
+ ownerEmail: 'owner@cisco.com',
42
+ ownerType: 'user',
43
+ storageRegion: 'US',
44
+ serviceData: {
45
+ locationId: 'loc-1',
46
+ callSessionId: 'ffffffff-9999-8888-7777-666666666666'
47
+ }
48
+ };
49
+ var MOCK_RECORDING_LIST_BODY = exports.MOCK_RECORDING_LIST_BODY = {
50
+ statusCode: 200,
51
+ body: {
52
+ items: [RECORDING_ONE, RECORDING_TWO]
53
+ }
54
+ };
55
+ var MOCK_EMPTY_RECORDING_LIST_BODY = exports.MOCK_EMPTY_RECORDING_LIST_BODY = {
56
+ statusCode: 200,
57
+ body: {
58
+ items: []
59
+ }
60
+ };
61
+ var MOCK_RECORDING_BODY = exports.MOCK_RECORDING_BODY = {
62
+ statusCode: 200,
63
+ body: RECORDING_ONE
64
+ };
65
+ var RECORDING_OWNER_ID = exports.RECORDING_OWNER_ID = '8a67806f-fc4d-446b-a131-31e71ea5b0e9';
66
+ var RECORDING_REMOTE_PARTY_ID = exports.RECORDING_REMOTE_PARTY_ID = '0fea4a63-4e27-46ee-99c3-2472cb12bf68';
67
+ var MOCK_RECORDING_METADATA = exports.MOCK_RECORDING_METADATA = {
68
+ id: RECORDING_ONE.id,
69
+ callSessionId: CALL_SESSION_ID,
70
+ owner: {
71
+ ownerID: RECORDING_OWNER_ID,
72
+ ownerEmail: 'owner@cisco.com',
73
+ ownerName: 'Mark',
74
+ orgID: '1704d30d-a131-4bc7-9449-948487643793'
75
+ },
76
+ participants: [{
77
+ id: RECORDING_OWNER_ID,
78
+ name: 'Mark',
79
+ email: 'owner@cisco.com'
80
+ }, {
81
+ id: RECORDING_REMOTE_PARTY_ID,
82
+ name: 'Alice',
83
+ email: 'alice@cisco.com'
84
+ }],
85
+ mediaStreams: [{
86
+ streamId: 'audio-1',
87
+ type: 'audio',
88
+ codec: 'opus',
89
+ durationMS: 65000
90
+ }],
91
+ extensionData: {
92
+ callData: {
93
+ direction: 'OUTGOING'
94
+ },
95
+ acd: {},
96
+ redirectInfo: {}
97
+ },
98
+ // The owner placed the call (`originator`), so the remote party is `calledParty`.
99
+ serviceData: {
100
+ callRecordingId: RECORDING_ONE.id,
101
+ locationId: 'loc-1',
102
+ callSessionId: CALL_SESSION_ID,
103
+ personality: 'originator',
104
+ callingParty: {
105
+ actor: {
106
+ type: 'USER',
107
+ id: RECORDING_OWNER_ID,
108
+ email: 'owner@cisco.com'
109
+ },
110
+ number: '9902',
111
+ name: 'Mark'
112
+ },
113
+ calledParty: {
114
+ actor: {
115
+ type: 'USER',
116
+ id: RECORDING_REMOTE_PARTY_ID,
117
+ email: 'alice@cisco.com'
118
+ },
119
+ number: '9903',
120
+ name: 'Alice'
121
+ }
122
+ }
123
+ };
124
+ var MOCK_RECORDING_METADATA_BODY = exports.MOCK_RECORDING_METADATA_BODY = {
125
+ statusCode: 200,
126
+ body: MOCK_RECORDING_METADATA
127
+ };
128
+ var ERROR_DETAILS_400 = exports.ERROR_DETAILS_400 = {
129
+ statusCode: 400,
130
+ data: {
131
+ error: '400 Bad request'
132
+ },
133
+ message: 'FAILURE'
134
+ };
135
+ var ERROR_DETAILS_401 = exports.ERROR_DETAILS_401 = {
136
+ statusCode: 401,
137
+ data: {
138
+ error: 'User is unauthorised, possible token expiry'
139
+ },
140
+ message: 'FAILURE'
141
+ };
142
+ var ERROR_DETAILS_404 = exports.ERROR_DETAILS_404 = {
143
+ statusCode: 404,
144
+ data: {
145
+ error: 'User info not found'
146
+ },
147
+ message: 'FAILURE'
148
+ };
149
+ var RECORDING_ACTIVITY = {
150
+ id: 'activity-1',
151
+ objectType: 'activity',
152
+ verb: 'add',
153
+ published: '2024-05-01T10:01:05.000Z',
154
+ actor: {
155
+ id: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',
156
+ objectType: 'person',
157
+ emailAddress: 'owner@cisco.com'
158
+ },
159
+ object: {
160
+ id: RECORDING_ONE.id,
161
+ objectType: 'wxCallingCallRecording',
162
+ callSessionId: CALL_SESSION_ID,
163
+ durationSeconds: 65,
164
+ sizeBytes: 1048576
165
+ }
166
+ };
167
+ var MOCK_RECORDING_CREATED_EVENT = exports.MOCK_RECORDING_CREATED_EVENT = {
168
+ id: 'event-created',
169
+ data: {
170
+ activity: RECORDING_ACTIVITY,
171
+ eventType: _types.RECORDING_EVENT_TYPE.CREATED
172
+ },
173
+ timestamp: 12345,
174
+ trackingId: 'tracking-id'
175
+ };
176
+ var MOCK_RECORDING_UPDATED_EVENT = exports.MOCK_RECORDING_UPDATED_EVENT = {
177
+ id: 'event-updated',
178
+ data: {
179
+ activity: RECORDING_ACTIVITY,
180
+ eventType: _types.RECORDING_EVENT_TYPE.UPDATED,
181
+ eventSubType: _types.RECORDING_EVENT_SUBTYPE.SUMMARY_CREATE
182
+ },
183
+ timestamp: 12346,
184
+ trackingId: 'tracking-id'
185
+ };
186
+ var MOCK_RECORDING_DELETED_EVENT = exports.MOCK_RECORDING_DELETED_EVENT = {
187
+ id: 'event-deleted',
188
+ data: {
189
+ activity: RECORDING_ACTIVITY,
190
+ eventType: _types.RECORDING_EVENT_TYPE.DELETED
191
+ },
192
+ timestamp: 12347,
193
+ trackingId: 'tracking-id'
194
+ };
195
+
196
+ // A delete performed in the Webex client arrives as an `updated` event with a `TRASH` (soft delete)
197
+ // sub-type, not a dedicated `deleted` event. `PURGE` is the permanent variant.
198
+ var MOCK_RECORDING_TRASH_EVENT = exports.MOCK_RECORDING_TRASH_EVENT = {
199
+ id: 'event-trash',
200
+ data: {
201
+ activity: RECORDING_ACTIVITY,
202
+ eventType: _types.RECORDING_EVENT_TYPE.UPDATED,
203
+ eventSubType: _types.RECORDING_EVENT_SUBTYPE.TRASH
204
+ },
205
+ timestamp: 12348,
206
+ trackingId: 'tracking-id'
207
+ };
208
+ var MOCK_RECORDING_PURGE_EVENT = exports.MOCK_RECORDING_PURGE_EVENT = {
209
+ id: 'event-purge',
210
+ data: {
211
+ activity: RECORDING_ACTIVITY,
212
+ eventType: _types.RECORDING_EVENT_TYPE.UPDATED,
213
+ eventSubType: _types.RECORDING_EVENT_SUBTYPE.PURGE
214
+ },
215
+ timestamp: 12349,
216
+ trackingId: 'tracking-id'
217
+ };
218
+
219
+ // A restore from trash re-adds the recording, delivered as an `updated` event with `RESTORE`.
220
+ var MOCK_RECORDING_RESTORE_EVENT = exports.MOCK_RECORDING_RESTORE_EVENT = {
221
+ id: 'event-restore',
222
+ data: {
223
+ activity: RECORDING_ACTIVITY,
224
+ eventType: _types.RECORDING_EVENT_TYPE.UPDATED,
225
+ eventSubType: _types.RECORDING_EVENT_SUBTYPE.RESTORE
226
+ },
227
+ timestamp: 12350,
228
+ trackingId: 'tracking-id'
229
+ };
230
+ var RECORDING_MERCURY_KEYS = exports.RECORDING_MERCURY_KEYS = {
231
+ CREATED: _types.MOBIUS_EVENT_KEYS.RECORDING_EVENT_CREATED,
232
+ UPDATED: _types.MOBIUS_EVENT_KEYS.RECORDING_EVENT_UPDATED,
233
+ DELETED: _types.MOBIUS_EVENT_KEYS.RECORDING_EVENT_DELETED
234
+ };
235
+ //# sourceMappingURL=callRecordingFixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","_types2","CALL_SESSION_ID","exports","RECORDING_ONE","id","topic","createTime","timeRecorded","format","serviceType","durationSeconds","sizeBytes","status","RecordingStatus","AVAILABLE","ownerId","ownerEmail","ownerType","storageRegion","serviceData","locationId","callSessionId","RECORDING_TWO","MOCK_RECORDING_LIST_BODY","statusCode","body","items","MOCK_EMPTY_RECORDING_LIST_BODY","MOCK_RECORDING_BODY","RECORDING_OWNER_ID","RECORDING_REMOTE_PARTY_ID","MOCK_RECORDING_METADATA","owner","ownerID","ownerName","orgID","participants","name","email","mediaStreams","streamId","type","codec","durationMS","extensionData","callData","direction","acd","redirectInfo","callRecordingId","personality","callingParty","actor","number","calledParty","MOCK_RECORDING_METADATA_BODY","ERROR_DETAILS_400","data","error","message","ERROR_DETAILS_401","ERROR_DETAILS_404","RECORDING_ACTIVITY","objectType","verb","published","emailAddress","object","MOCK_RECORDING_CREATED_EVENT","activity","eventType","RECORDING_EVENT_TYPE","CREATED","timestamp","trackingId","MOCK_RECORDING_UPDATED_EVENT","UPDATED","eventSubType","RECORDING_EVENT_SUBTYPE","SUMMARY_CREATE","MOCK_RECORDING_DELETED_EVENT","DELETED","MOCK_RECORDING_TRASH_EVENT","TRASH","MOCK_RECORDING_PURGE_EVENT","PURGE","MOCK_RECORDING_RESTORE_EVENT","RESTORE","RECORDING_MERCURY_KEYS","MOBIUS_EVENT_KEYS","RECORDING_EVENT_CREATED","RECORDING_EVENT_UPDATED","RECORDING_EVENT_DELETED"],"sources":["callRecordingFixtures.ts"],"sourcesContent":["import {\n MOBIUS_EVENT_KEYS,\n RECORDING_EVENT_SUBTYPE,\n RECORDING_EVENT_TYPE,\n RecordingEvent,\n} from '../Events/types';\nimport {Recording, RecordingMetadata, RecordingStatus} from './types';\n\nexport const CALL_SESSION_ID = 'a1b2c3d4-1111-2222-3333-444455556666';\n\nexport const RECORDING_ONE: Recording = {\n id: '11111111-aaaa-bbbb-cccc-222222222222',\n topic: 'Call with Alice',\n createTime: '2024-05-01T10:01:05.000Z',\n timeRecorded: '2024-05-01T10:00:00.000Z',\n format: 'MP3',\n serviceType: 'calling',\n durationSeconds: 65,\n sizeBytes: 1048576,\n status: RecordingStatus.AVAILABLE,\n ownerId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',\n ownerEmail: 'owner@cisco.com',\n ownerType: 'user',\n storageRegion: 'US',\n serviceData: {\n locationId: 'loc-1',\n callSessionId: CALL_SESSION_ID,\n },\n};\n\nexport const RECORDING_TWO: Recording = {\n id: '33333333-dddd-eeee-ffff-444444444444',\n topic: 'Call with Bob',\n createTime: '2024-05-02T11:02:05.000Z',\n timeRecorded: '2024-05-02T11:00:00.000Z',\n format: 'MP3',\n serviceType: 'calling',\n durationSeconds: 120,\n sizeBytes: 2097152,\n status: RecordingStatus.AVAILABLE,\n ownerId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',\n ownerEmail: 'owner@cisco.com',\n ownerType: 'user',\n storageRegion: 'US',\n serviceData: {\n locationId: 'loc-1',\n callSessionId: 'ffffffff-9999-8888-7777-666666666666',\n },\n};\n\nexport const MOCK_RECORDING_LIST_BODY = {\n statusCode: 200,\n body: {\n items: [RECORDING_ONE, RECORDING_TWO],\n },\n};\n\nexport const MOCK_EMPTY_RECORDING_LIST_BODY = {\n statusCode: 200,\n body: {\n items: [],\n },\n};\n\nexport const MOCK_RECORDING_BODY = {\n statusCode: 200,\n body: RECORDING_ONE,\n};\n\nexport const RECORDING_OWNER_ID = '8a67806f-fc4d-446b-a131-31e71ea5b0e9';\nexport const RECORDING_REMOTE_PARTY_ID = '0fea4a63-4e27-46ee-99c3-2472cb12bf68';\n\nexport const MOCK_RECORDING_METADATA: RecordingMetadata = {\n id: RECORDING_ONE.id,\n callSessionId: CALL_SESSION_ID,\n owner: {\n ownerID: RECORDING_OWNER_ID,\n ownerEmail: 'owner@cisco.com',\n ownerName: 'Mark',\n orgID: '1704d30d-a131-4bc7-9449-948487643793',\n },\n participants: [\n {id: RECORDING_OWNER_ID, name: 'Mark', email: 'owner@cisco.com'},\n {id: RECORDING_REMOTE_PARTY_ID, name: 'Alice', email: 'alice@cisco.com'},\n ],\n mediaStreams: [{streamId: 'audio-1', type: 'audio', codec: 'opus', durationMS: 65000}],\n extensionData: {\n callData: {direction: 'OUTGOING'},\n acd: {},\n redirectInfo: {},\n },\n // The owner placed the call (`originator`), so the remote party is `calledParty`.\n serviceData: {\n callRecordingId: RECORDING_ONE.id,\n locationId: 'loc-1',\n callSessionId: CALL_SESSION_ID,\n personality: 'originator',\n callingParty: {\n actor: {type: 'USER', id: RECORDING_OWNER_ID, email: 'owner@cisco.com'},\n number: '9902',\n name: 'Mark',\n },\n calledParty: {\n actor: {type: 'USER', id: RECORDING_REMOTE_PARTY_ID, email: 'alice@cisco.com'},\n number: '9903',\n name: 'Alice',\n },\n },\n};\n\nexport const MOCK_RECORDING_METADATA_BODY = {\n statusCode: 200,\n body: MOCK_RECORDING_METADATA,\n};\n\nexport const ERROR_DETAILS_400 = {\n statusCode: 400,\n data: {\n error: '400 Bad request',\n },\n message: 'FAILURE',\n};\n\nexport const ERROR_DETAILS_401 = {\n statusCode: 401,\n data: {\n error: 'User is unauthorised, possible token expiry',\n },\n message: 'FAILURE',\n};\n\nexport const ERROR_DETAILS_404 = {\n statusCode: 404,\n data: {\n error: 'User info not found',\n },\n message: 'FAILURE',\n};\n\nconst RECORDING_ACTIVITY = {\n id: 'activity-1',\n objectType: 'activity',\n verb: 'add',\n published: '2024-05-01T10:01:05.000Z',\n actor: {\n id: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',\n objectType: 'person',\n emailAddress: 'owner@cisco.com',\n },\n object: {\n id: RECORDING_ONE.id,\n objectType: 'wxCallingCallRecording',\n callSessionId: CALL_SESSION_ID,\n durationSeconds: 65,\n sizeBytes: 1048576,\n },\n};\n\nexport const MOCK_RECORDING_CREATED_EVENT: RecordingEvent = {\n id: 'event-created',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.CREATED,\n },\n timestamp: 12345,\n trackingId: 'tracking-id',\n};\n\nexport const MOCK_RECORDING_UPDATED_EVENT: RecordingEvent = {\n id: 'event-updated',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.UPDATED,\n eventSubType: RECORDING_EVENT_SUBTYPE.SUMMARY_CREATE,\n },\n timestamp: 12346,\n trackingId: 'tracking-id',\n};\n\nexport const MOCK_RECORDING_DELETED_EVENT: RecordingEvent = {\n id: 'event-deleted',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.DELETED,\n },\n timestamp: 12347,\n trackingId: 'tracking-id',\n};\n\n// A delete performed in the Webex client arrives as an `updated` event with a `TRASH` (soft delete)\n// sub-type, not a dedicated `deleted` event. `PURGE` is the permanent variant.\nexport const MOCK_RECORDING_TRASH_EVENT: RecordingEvent = {\n id: 'event-trash',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.UPDATED,\n eventSubType: RECORDING_EVENT_SUBTYPE.TRASH,\n },\n timestamp: 12348,\n trackingId: 'tracking-id',\n};\n\nexport const MOCK_RECORDING_PURGE_EVENT: RecordingEvent = {\n id: 'event-purge',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.UPDATED,\n eventSubType: RECORDING_EVENT_SUBTYPE.PURGE,\n },\n timestamp: 12349,\n trackingId: 'tracking-id',\n};\n\n// A restore from trash re-adds the recording, delivered as an `updated` event with `RESTORE`.\nexport const MOCK_RECORDING_RESTORE_EVENT: RecordingEvent = {\n id: 'event-restore',\n data: {\n activity: RECORDING_ACTIVITY,\n eventType: RECORDING_EVENT_TYPE.UPDATED,\n eventSubType: RECORDING_EVENT_SUBTYPE.RESTORE,\n },\n timestamp: 12350,\n trackingId: 'tracking-id',\n};\n\nexport const RECORDING_MERCURY_KEYS = {\n CREATED: MOBIUS_EVENT_KEYS.RECORDING_EVENT_CREATED,\n UPDATED: MOBIUS_EVENT_KEYS.RECORDING_EVENT_UPDATED,\n DELETED: MOBIUS_EVENT_KEYS.RECORDING_EVENT_DELETED,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.WEBEX_USER_REQUEST_HEADER = exports.TOPIC = exports.TO = exports.STORAGE_REGION = exports.STATUS = exports.SERVICE_TYPE = exports.RECORDING_NOT_FOUND_MESSAGE = exports.OWNER_TYPE = exports.METHODS = exports.METADATA = exports.MAX = exports.LOCATION_ID = exports.FROM = exports.FORMAT = exports.DEFAULT_STATUS = exports.DEFAULT_NUMBER_OF_DAYS = exports.DEFAULT_MAX = exports.CONVERGED_RECORDINGS = exports.CALL_RECORDING_FILE = void 0;
8
+ var CALL_RECORDING_FILE = exports.CALL_RECORDING_FILE = 'CallRecording';
9
+
10
+ // Recording API (hydra developer API) endpoint segments.
11
+ var CONVERGED_RECORDINGS = exports.CONVERGED_RECORDINGS = 'convergedRecordings';
12
+ var METADATA = exports.METADATA = 'metadata';
13
+
14
+ // Query parameter keys for the list request.
15
+ var FROM = exports.FROM = 'from';
16
+ var TO = exports.TO = 'to';
17
+ var STATUS = exports.STATUS = 'status';
18
+ var MAX = exports.MAX = 'max';
19
+ var SERVICE_TYPE = exports.SERVICE_TYPE = 'serviceType';
20
+ var FORMAT = exports.FORMAT = 'format';
21
+ var OWNER_TYPE = exports.OWNER_TYPE = 'ownerType';
22
+ var STORAGE_REGION = exports.STORAGE_REGION = 'storageRegion';
23
+ var LOCATION_ID = exports.LOCATION_ID = 'locationId';
24
+ var TOPIC = exports.TOPIC = 'topic';
25
+
26
+ // Default list query values.
27
+ var DEFAULT_STATUS = exports.DEFAULT_STATUS = 'available';
28
+ var DEFAULT_MAX = exports.DEFAULT_MAX = 30;
29
+
30
+ // Default lookback window (in days) used to derive `from` when the caller does not provide one.
31
+ // The Converged Recordings list API only accepts a `from`/`to` interval of at most 30 days, so the
32
+ // default must stay within that limit; a larger default window would be rejected by the API.
33
+ var DEFAULT_NUMBER_OF_DAYS = exports.DEFAULT_NUMBER_OF_DAYS = 30;
34
+
35
+ // Header used to flag an explicit end-user request (rate-limit bypass). Off by default.
36
+ var WEBEX_USER_REQUEST_HEADER = exports.WEBEX_USER_REQUEST_HEADER = 'WebexUserRequest';
37
+ var RECORDING_NOT_FOUND_MESSAGE = exports.RECORDING_NOT_FOUND_MESSAGE = 'No recordings found for the given call session id.';
38
+
39
+ // Method names (for structured logging).
40
+ var METHODS = exports.METHODS = {
41
+ INITIALIZE_BACKEND_CONNECTOR: 'initializeBackendConnector',
42
+ GET_CALL_RECORDING: 'getCallRecording',
43
+ GET_RECORDINGS: 'getRecordings',
44
+ GET_RECORDING: 'getRecording',
45
+ GET_RECORDINGS_BY_CALL_SESSION_ID: 'getRecordingsByCallSessionId',
46
+ GET_RECORDING_METADATA: 'getRecordingMetadata',
47
+ DELETE_RECORDING: 'deleteRecording'
48
+ };
49
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CALL_RECORDING_FILE","exports","CONVERGED_RECORDINGS","METADATA","FROM","TO","STATUS","MAX","SERVICE_TYPE","FORMAT","OWNER_TYPE","STORAGE_REGION","LOCATION_ID","TOPIC","DEFAULT_STATUS","DEFAULT_MAX","DEFAULT_NUMBER_OF_DAYS","WEBEX_USER_REQUEST_HEADER","RECORDING_NOT_FOUND_MESSAGE","METHODS","INITIALIZE_BACKEND_CONNECTOR","GET_CALL_RECORDING","GET_RECORDINGS","GET_RECORDING","GET_RECORDINGS_BY_CALL_SESSION_ID","GET_RECORDING_METADATA","DELETE_RECORDING"],"sources":["constants.ts"],"sourcesContent":["export const CALL_RECORDING_FILE = 'CallRecording';\n\n// Recording API (hydra developer API) endpoint segments.\nexport const CONVERGED_RECORDINGS = 'convergedRecordings';\nexport const METADATA = 'metadata';\n\n// Query parameter keys for the list request.\nexport const FROM = 'from';\nexport const TO = 'to';\nexport const STATUS = 'status';\nexport const MAX = 'max';\nexport const SERVICE_TYPE = 'serviceType';\nexport const FORMAT = 'format';\nexport const OWNER_TYPE = 'ownerType';\nexport const STORAGE_REGION = 'storageRegion';\nexport const LOCATION_ID = 'locationId';\nexport const TOPIC = 'topic';\n\n// Default list query values.\nexport const DEFAULT_STATUS = 'available';\nexport const DEFAULT_MAX = 30;\n\n// Default lookback window (in days) used to derive `from` when the caller does not provide one.\n// The Converged Recordings list API only accepts a `from`/`to` interval of at most 30 days, so the\n// default must stay within that limit; a larger default window would be rejected by the API.\nexport const DEFAULT_NUMBER_OF_DAYS = 30;\n\n// Header used to flag an explicit end-user request (rate-limit bypass). Off by default.\nexport const WEBEX_USER_REQUEST_HEADER = 'WebexUserRequest';\n\nexport const RECORDING_NOT_FOUND_MESSAGE = 'No recordings found for the given call session id.';\n\n// Method names (for structured logging).\nexport const METHODS = {\n INITIALIZE_BACKEND_CONNECTOR: 'initializeBackendConnector',\n GET_CALL_RECORDING: 'getCallRecording',\n GET_RECORDINGS: 'getRecordings',\n GET_RECORDING: 'getRecording',\n GET_RECORDINGS_BY_CALL_SESSION_ID: 'getRecordingsByCallSessionId',\n GET_RECORDING_METADATA: 'getRecordingMetadata',\n DELETE_RECORDING: 'deleteRecording',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,eAAe;;AAElD;AACO,IAAME,oBAAoB,GAAAD,OAAA,CAAAC,oBAAA,GAAG,qBAAqB;AAClD,IAAMC,QAAQ,GAAAF,OAAA,CAAAE,QAAA,GAAG,UAAU;;AAElC;AACO,IAAMC,IAAI,GAAAH,OAAA,CAAAG,IAAA,GAAG,MAAM;AACnB,IAAMC,EAAE,GAAAJ,OAAA,CAAAI,EAAA,GAAG,IAAI;AACf,IAAMC,MAAM,GAAAL,OAAA,CAAAK,MAAA,GAAG,QAAQ;AACvB,IAAMC,GAAG,GAAAN,OAAA,CAAAM,GAAA,GAAG,KAAK;AACjB,IAAMC,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAG,aAAa;AAClC,IAAMC,MAAM,GAAAR,OAAA,CAAAQ,MAAA,GAAG,QAAQ;AACvB,IAAMC,UAAU,GAAAT,OAAA,CAAAS,UAAA,GAAG,WAAW;AAC9B,IAAMC,cAAc,GAAAV,OAAA,CAAAU,cAAA,GAAG,eAAe;AACtC,IAAMC,WAAW,GAAAX,OAAA,CAAAW,WAAA,GAAG,YAAY;AAChC,IAAMC,KAAK,GAAAZ,OAAA,CAAAY,KAAA,GAAG,OAAO;;AAE5B;AACO,IAAMC,cAAc,GAAAb,OAAA,CAAAa,cAAA,GAAG,WAAW;AAClC,IAAMC,WAAW,GAAAd,OAAA,CAAAc,WAAA,GAAG,EAAE;;AAE7B;AACA;AACA;AACO,IAAMC,sBAAsB,GAAAf,OAAA,CAAAe,sBAAA,GAAG,EAAE;;AAExC;AACO,IAAMC,yBAAyB,GAAAhB,OAAA,CAAAgB,yBAAA,GAAG,kBAAkB;AAEpD,IAAMC,2BAA2B,GAAAjB,OAAA,CAAAiB,2BAAA,GAAG,oDAAoD;;AAE/F;AACO,IAAMC,OAAO,GAAAlB,OAAA,CAAAkB,OAAA,GAAG;EACrBC,4BAA4B,EAAE,4BAA4B;EAC1DC,kBAAkB,EAAE,kBAAkB;EACtCC,cAAc,EAAE,eAAe;EAC/BC,aAAa,EAAE,cAAc;EAC7BC,iCAAiC,EAAE,8BAA8B;EACjEC,sBAAsB,EAAE,sBAAsB;EAC9CC,gBAAgB,EAAE;AACpB,CAAC","ignoreList":[]}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RecordingStatus = exports.RecordingRequestType = exports.AiGenerationStatus = void 0;
8
+ /**
9
+ * Status of a converged recording, used both as the response field and as the list filter.
10
+ *
11
+ * - `available`: the recording is available (default).
12
+ * - `deleted`: the recording has been moved into the recycle bin.
13
+ */
14
+ var RecordingStatus = exports.RecordingStatus = /*#__PURE__*/function (RecordingStatus) {
15
+ RecordingStatus["AVAILABLE"] = "available";
16
+ RecordingStatus["DELETED"] = "deleted";
17
+ return RecordingStatus;
18
+ }({});
19
+ /**
20
+ * Status of an AI-generated artifact (summary / suggested notes / action items).
21
+ */
22
+ var AiGenerationStatus = exports.AiGenerationStatus = /*#__PURE__*/function (AiGenerationStatus) {
23
+ AiGenerationStatus["NOT_STARTED"] = "NOT_STARTED";
24
+ AiGenerationStatus["IN_PROGRESS"] = "IN_PROGRESS";
25
+ AiGenerationStatus["COMPLETED"] = "COMPLETED";
26
+ AiGenerationStatus["FAILED"] = "FAILED";
27
+ return AiGenerationStatus;
28
+ }({});
29
+ /**
30
+ * Which side of the call the recording owner was on, as reported by `serviceData.personality`:
31
+ * - `originator`: the owner placed the call (the remote party is `calledParty`).
32
+ * - `terminator`: the owner received the call (the remote party is `callingParty`).
33
+ *
34
+ * Use {@link getRemoteParty} to resolve the other party without having to branch on this manually.
35
+ */
36
+ /**
37
+ * The acting entity behind a call party. For Webex users `type` is `USER` and `id` is the Webex
38
+ * person UUID — the identifier accepted by the avatar (`@webex/internal-plugin-avatar`) and
39
+ * presence (DSS) services. External/PSTN parties may have only a `number`/`name` on the parent
40
+ * {@link RecordingParty} and no `actor.id`.
41
+ */
42
+ /**
43
+ * A party (calling or called) involved in the recorded call. `actor.id` is the resolvable person
44
+ * UUID when the party is a Webex user; `number`/`name` are the dialable number and display name.
45
+ */
46
+ /**
47
+ * Service-specific data attached to a converged recording. For calling recordings this carries the
48
+ * `locationId` and the `callSessionId` shared with the originating call session.
49
+ *
50
+ * The party details (`personality`, `callingParty`, `calledParty`) identify who the call was with
51
+ * and are returned by the metadata endpoint (`GET /convergedRecordings/{recordingId}/metadata`);
52
+ * the list endpoint only populates `locationId`/`callSessionId`. Resolve the remote participant's
53
+ * person UUID (for avatar/presence) via `getRemoteParty(serviceData)?.actor?.id`.
54
+ */
55
+ /**
56
+ * Temporary, direct download links for a recording's media, returned by
57
+ * `GET /convergedRecordings/{recordingId}`. Only available for authorized users / Compliance
58
+ * Officers and absent when downloading is prevented.
59
+ */
60
+ /**
61
+ * A converged recording as returned by `GET /convergedRecordings` (list `items[]`) and
62
+ * `GET /convergedRecordings/{recordingId}`.
63
+ *
64
+ * Field mapping note (matches the public Webex Converged Recordings API):
65
+ * - `id` is the recording id used by {@link ICallRecording.getRecording}.
66
+ * - `serviceData.callSessionId` is the call session id used by
67
+ * {@link ICallRecording.getRecordingsByCallSessionId}.
68
+ */
69
+ /**
70
+ * Raw list response body returned by `GET /convergedRecordings`.
71
+ */
72
+ /**
73
+ * Metadata returned by `GET /convergedRecordings/{recordingUUID}/metadata`.
74
+ * The structure is preserved as returned by the backend; optional typed fields are provided
75
+ * for the well-known properties.
76
+ */
77
+ /**
78
+ * Options for {@link ICallRecording.getRecordings}. All fields are optional and are passed through
79
+ * to the recording API as query parameters where supported. `webexUserRequest` toggles the
80
+ * `WebexUserRequest` header (ad-hoc rate-limit bypass), defaulting to `false`.
81
+ */
82
+ /**
83
+ * Optional request body for {@link ICallRecording.deleteRecording}. Both fields are only required
84
+ * when a Compliance Officer deletes another user's recording.
85
+ */
86
+ /**
87
+ * Discriminator for {@link GetCallRecordingRequest}. Selects which read operation
88
+ * {@link ICallRecording.getCallRecording} performs based on the request body.
89
+ *
90
+ * - `LIST`: list the current user's recordings.
91
+ * - `DETAIL`: fetch a single recording (with download/playback links).
92
+ * - `METADATA`: fetch a single recording's metadata document.
93
+ * - `BY_CALL_SESSION`: list recordings tied to a call session id (client-side filter).
94
+ */
95
+ var RecordingRequestType = exports.RecordingRequestType = /*#__PURE__*/function (RecordingRequestType) {
96
+ RecordingRequestType["LIST"] = "list";
97
+ RecordingRequestType["DETAIL"] = "detail";
98
+ RecordingRequestType["METADATA"] = "metadata";
99
+ RecordingRequestType["BY_CALL_SESSION"] = "byCallSession";
100
+ return RecordingRequestType;
101
+ }({});
102
+ /**
103
+ * Lists the current user's converged recordings.
104
+ * Maps to `GET /convergedRecordings` with the query params from {@link GetRecordingsOptions}.
105
+ */
106
+ /**
107
+ * Fetches a single converged recording by id.
108
+ * Maps to `GET /convergedRecordings/{recordingId}`.
109
+ */
110
+ /**
111
+ * Fetches the metadata document for a single recording.
112
+ * Maps to `GET /convergedRecordings/{recordingId}/metadata`.
113
+ */
114
+ /**
115
+ * Returns the recordings tied to a call session id (`serviceData.callSessionId`).
116
+ * Fetches a list and filters client-side; `options` widen the scanned set.
117
+ */
118
+ /**
119
+ * Discriminated union of every read request accepted by {@link ICallRecording.getCallRecording}.
120
+ * The `type` field selects the operation and constrains the rest of the body, while
121
+ * {@link RecordingResponseFor} maps each member to its concrete response type so the caller keeps
122
+ * full type inference from a single method.
123
+ */
124
+ /**
125
+ * Maps a {@link GetCallRecordingRequest} member to the response type
126
+ * {@link ICallRecording.getCallRecording} resolves with for that request, preserving per-request
127
+ * return-type inference behind the single method.
128
+ */
129
+ /**
130
+ * Interface for the CallRecording client.
131
+ *
132
+ * Provides read access to Post Call Recordings through a single {@link getCallRecording} method
133
+ * (listing, single fetch, lookup by call session, and metadata — selected by the request `type`),
134
+ * permanent deletion of a recording, and emits recording lifecycle events received over Mercury.
135
+ */
136
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RecordingStatus","exports","AiGenerationStatus","RecordingRequestType"],"sources":["types.ts"],"sourcesContent":["import {Eventing} from '../Events/impl';\nimport {CallRecordingEventTypes} from '../Events/types';\nimport {LOGGER} from '../Logger/types';\n\nexport interface LoggerInterface {\n level: LOGGER;\n}\n\n/**\n * Status of a converged recording, used both as the response field and as the list filter.\n *\n * - `available`: the recording is available (default).\n * - `deleted`: the recording has been moved into the recycle bin.\n */\nexport enum RecordingStatus {\n AVAILABLE = 'available',\n DELETED = 'deleted',\n}\n\n/**\n * Status of an AI-generated artifact (summary / suggested notes / action items).\n */\nexport enum AiGenerationStatus {\n NOT_STARTED = 'NOT_STARTED',\n IN_PROGRESS = 'IN_PROGRESS',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n}\n\n/**\n * Which side of the call the recording owner was on, as reported by `serviceData.personality`:\n * - `originator`: the owner placed the call (the remote party is `calledParty`).\n * - `terminator`: the owner received the call (the remote party is `callingParty`).\n *\n * Use {@link getRemoteParty} to resolve the other party without having to branch on this manually.\n */\nexport type RecordingPersonality = 'originator' | 'terminator';\n\n/**\n * The acting entity behind a call party. For Webex users `type` is `USER` and `id` is the Webex\n * person UUID — the identifier accepted by the avatar (`@webex/internal-plugin-avatar`) and\n * presence (DSS) services. External/PSTN parties may have only a `number`/`name` on the parent\n * {@link RecordingParty} and no `actor.id`.\n */\nexport type RecordingActor = {\n type?: string;\n id?: string;\n email?: string;\n};\n\n/**\n * A party (calling or called) involved in the recorded call. `actor.id` is the resolvable person\n * UUID when the party is a Webex user; `number`/`name` are the dialable number and display name.\n */\nexport type RecordingParty = {\n actor?: RecordingActor;\n number?: string;\n name?: string;\n};\n\n/**\n * Service-specific data attached to a converged recording. For calling recordings this carries the\n * `locationId` and the `callSessionId` shared with the originating call session.\n *\n * The party details (`personality`, `callingParty`, `calledParty`) identify who the call was with\n * and are returned by the metadata endpoint (`GET /convergedRecordings/{recordingId}/metadata`);\n * the list endpoint only populates `locationId`/`callSessionId`. Resolve the remote participant's\n * person UUID (for avatar/presence) via `getRemoteParty(serviceData)?.actor?.id`.\n */\nexport type RecordingServiceData = {\n callRecordingId?: string;\n locationId?: string;\n callSessionId?: string;\n personality?: RecordingPersonality;\n callingParty?: RecordingParty;\n calledParty?: RecordingParty;\n [key: string]: unknown;\n};\n\n/**\n * Temporary, direct download links for a recording's media, returned by\n * `GET /convergedRecordings/{recordingId}`. Only available for authorized users / Compliance\n * Officers and absent when downloading is prevented.\n */\nexport type TemporaryDirectDownloadLinks = {\n audioDownloadLink?: string;\n transcriptDownloadLink?: string;\n expiration?: string;\n};\n\n/**\n * A converged recording as returned by `GET /convergedRecordings` (list `items[]`) and\n * `GET /convergedRecordings/{recordingId}`.\n *\n * Field mapping note (matches the public Webex Converged Recordings API):\n * - `id` is the recording id used by {@link ICallRecording.getRecording}.\n * - `serviceData.callSessionId` is the call session id used by\n * {@link ICallRecording.getRecordingsByCallSessionId}.\n */\nexport type Recording = {\n id: string;\n topic?: string;\n createTime?: string;\n timeRecorded?: string;\n format?: string;\n serviceType?: string;\n durationSeconds?: number;\n sizeBytes?: number;\n status?: RecordingStatus;\n ownerId?: string;\n ownerEmail?: string;\n ownerType?: string;\n storageRegion?: string;\n serviceData?: RecordingServiceData;\n temporaryDirectDownloadLinks?: TemporaryDirectDownloadLinks;\n};\n\n/**\n * Raw list response body returned by `GET /convergedRecordings`.\n */\nexport type RecordingListBody = {\n items?: Recording[];\n};\n\n/**\n * Metadata returned by `GET /convergedRecordings/{recordingUUID}/metadata`.\n * The structure is preserved as returned by the backend; optional typed fields are provided\n * for the well-known properties.\n */\nexport type RecordingMetadataOwner = {\n ownerID?: string;\n ownerEmail?: string;\n ownerName?: string;\n orgID?: string;\n};\n\nexport type RecordingMetadataParticipant = {\n id?: string;\n name?: string;\n email?: string;\n phoneNumber?: string;\n joinTime?: string;\n leaveTime?: string;\n};\n\nexport type RecordingMediaStream = {\n streamId?: string;\n type?: string;\n codec?: string;\n durationMS?: number;\n};\n\nexport type RecordingExtensionData = {\n callData?: Record<string, unknown>;\n acd?: Record<string, unknown>;\n redirectInfo?: Record<string, unknown>;\n};\n\nexport type RecordingMetadata = {\n id?: string;\n callSessionId?: string;\n owner?: RecordingMetadataOwner;\n session?: Record<string, unknown>;\n participants?: RecordingMetadataParticipant[];\n mediaStreams?: RecordingMediaStream[];\n extensionData?: RecordingExtensionData;\n /**\n * Service-specific data, including the call party details (`personality`, `callingParty`,\n * `calledParty`) used to resolve the remote participant for avatar/presence. See\n * {@link getRemoteParty}.\n */\n serviceData?: RecordingServiceData;\n [key: string]: unknown;\n};\n\n/**\n * Options for {@link ICallRecording.getRecordings}. All fields are optional and are passed through\n * to the recording API as query parameters where supported. `webexUserRequest` toggles the\n * `WebexUserRequest` header (ad-hoc rate-limit bypass), defaulting to `false`.\n */\nexport type GetRecordingsOptions = {\n /**\n * ISO-8601 start of the time window (inclusive). When omitted, it is derived from `days`\n * (`now - days`), mirroring CallHistory's mandatory `from` date.\n */\n from?: string;\n /**\n * ISO-8601 end of the time window (inclusive). When omitted, it defaults to the current time\n * (`now`). The API requires both `from` and `to` to return results.\n */\n to?: string;\n /**\n * Lookback window in days used to derive `from` when `from` is not provided. Defaults to `30`.\n * The list API only accepts a `from`/`to` interval of at most 30 days; larger windows are\n * rejected, so callers must keep custom values within that limit.\n * Ignored when an explicit `from` is supplied.\n */\n days?: number;\n /** Filter by recording status. Defaults to `available`. */\n status?: RecordingStatus;\n /** Maximum number of records to return per page. Defaults to `30`. */\n max?: number;\n /**\n * Filter by the service that produced the recording (e.g. `'calling'`). Sent only when provided;\n * when omitted the API applies its own default.\n */\n serviceType?: string;\n /** Filter by recording media format (e.g. `'MP3'`, `'MP4'`). Sent only when provided. */\n format?: string;\n /** Filter by recording owner type (e.g. `'user'`). Sent only when provided. */\n ownerType?: string;\n /** Filter by storage region (e.g. `'US'`). Sent only when provided. */\n storageRegion?: string;\n /** Filter by the location id the recording belongs to. Sent only when provided. */\n locationId?: string;\n /** Filter by recording topic. Sent only when provided. */\n topic?: string;\n /** When true, sends the `WebexUserRequest: true` header. Defaults to false. */\n webexUserRequest?: boolean;\n};\n\nexport type RecordingListResponse = {\n statusCode: number;\n data: {\n recordings?: Recording[];\n error?: string;\n };\n message: string | null;\n};\n\nexport type RecordingResponse = {\n statusCode: number;\n data: {\n recording?: Recording;\n error?: string;\n };\n message: string | null;\n};\n\nexport type RecordingMetadataResponse = {\n statusCode: number;\n data: {\n metadata?: RecordingMetadata;\n error?: string;\n };\n message: string | null;\n};\n\nexport type RecordingDeleteResponse = {\n statusCode: number;\n data: {\n error?: string;\n };\n message: string | null;\n};\n\n/**\n * Optional request body for {@link ICallRecording.deleteRecording}. Both fields are only required\n * when a Compliance Officer deletes another user's recording.\n */\nexport type DeleteRecordingOptions = {\n /** Reason for deleting the recording (e.g. `audit`). */\n reason?: string;\n /** Compliance Officer's explanation for the deletion. Max 255 characters. */\n comment?: string;\n};\n\n/**\n * Discriminator for {@link GetCallRecordingRequest}. Selects which read operation\n * {@link ICallRecording.getCallRecording} performs based on the request body.\n *\n * - `LIST`: list the current user's recordings.\n * - `DETAIL`: fetch a single recording (with download/playback links).\n * - `METADATA`: fetch a single recording's metadata document.\n * - `BY_CALL_SESSION`: list recordings tied to a call session id (client-side filter).\n */\nexport enum RecordingRequestType {\n LIST = 'list',\n DETAIL = 'detail',\n METADATA = 'metadata',\n BY_CALL_SESSION = 'byCallSession',\n}\n\n/**\n * Lists the current user's converged recordings.\n * Maps to `GET /convergedRecordings` with the query params from {@link GetRecordingsOptions}.\n */\nexport type ListRecordingsRequest = {\n type: RecordingRequestType.LIST;\n options?: GetRecordingsOptions;\n};\n\n/**\n * Fetches a single converged recording by id.\n * Maps to `GET /convergedRecordings/{recordingId}`.\n */\nexport type DetailRecordingRequest = {\n type: RecordingRequestType.DETAIL;\n recordingId: string;\n};\n\n/**\n * Fetches the metadata document for a single recording.\n * Maps to `GET /convergedRecordings/{recordingId}/metadata`.\n */\nexport type MetadataRecordingRequest = {\n type: RecordingRequestType.METADATA;\n recordingId: string;\n};\n\n/**\n * Returns the recordings tied to a call session id (`serviceData.callSessionId`).\n * Fetches a list and filters client-side; `options` widen the scanned set.\n */\nexport type CallSessionRecordingsRequest = {\n type: RecordingRequestType.BY_CALL_SESSION;\n callSessionId: string;\n options?: GetRecordingsOptions;\n};\n\n/**\n * Discriminated union of every read request accepted by {@link ICallRecording.getCallRecording}.\n * The `type` field selects the operation and constrains the rest of the body, while\n * {@link RecordingResponseFor} maps each member to its concrete response type so the caller keeps\n * full type inference from a single method.\n */\nexport type GetCallRecordingRequest =\n | ListRecordingsRequest\n | DetailRecordingRequest\n | MetadataRecordingRequest\n | CallSessionRecordingsRequest;\n\n/**\n * Maps a {@link GetCallRecordingRequest} member to the response type\n * {@link ICallRecording.getCallRecording} resolves with for that request, preserving per-request\n * return-type inference behind the single method.\n */\nexport type RecordingResponseFor<T extends GetCallRecordingRequest> =\n T extends DetailRecordingRequest\n ? RecordingResponse\n : T extends MetadataRecordingRequest\n ? RecordingMetadataResponse\n : RecordingListResponse;\n\n/**\n * Interface for the CallRecording client.\n *\n * Provides read access to Post Call Recordings through a single {@link getCallRecording} method\n * (listing, single fetch, lookup by call session, and metadata — selected by the request `type`),\n * permanent deletion of a recording, and emits recording lifecycle events received over Mercury.\n */\nexport interface ICallRecording extends Eventing<CallRecordingEventTypes> {\n /**\n * Reads Post Call Recordings. The {@link GetCallRecordingRequest} `type` selects the operation\n * and constrains the rest of the request body; the resolved response type is inferred per\n * request via {@link RecordingResponseFor}:\n *\n * - `LIST` (`GET /convergedRecordings`) -> {@link RecordingListResponse}. The query params come\n * from {@link GetRecordingsOptions}; both a `from` lower bound (derived from `days` when not\n * provided) and a `to` upper bound (defaults to `now`) are always sent, because the API only\n * returns results when the time window is bounded on both ends.\n * - `DETAIL` (`GET /convergedRecordings/{recordingId}`) -> {@link RecordingResponse}.\n * - `METADATA` (`GET /convergedRecordings/{recordingId}/metadata`) ->\n * {@link RecordingMetadataResponse}.\n * - `BY_CALL_SESSION` -> {@link RecordingListResponse}. The recording API has no confirmed\n * server-side filter for call session id, so this fetches a list and filters client-side on\n * `serviceData.callSessionId`. The scan is bounded by the list query, so pass `options` to\n * widen the time window/status/page when the target session may fall outside the defaults.\n *\n * @param request - The discriminated read request.\n *\n * @example\n * ```javascript\n * const list = await callRecording.getCallRecording({type: RecordingRequestType.LIST, options: {max: 30}});\n * const one = await callRecording.getCallRecording({type: RecordingRequestType.DETAIL, recordingId});\n * const meta = await callRecording.getCallRecording({type: RecordingRequestType.METADATA, recordingId});\n * const bySession = await callRecording.getCallRecording({\n * type: RecordingRequestType.BY_CALL_SESSION,\n * callSessionId,\n * options: {days: 30, max: 100},\n * });\n * ```\n */\n getCallRecording<T extends GetCallRecordingRequest>(request: T): Promise<RecordingResponseFor<T>>;\n\n /**\n * Permanently deletes a single recording.\n *\n * Calls `DELETE /convergedRecordings/{recordingId}`. Per the API, the deleted recording\n * **cannot be recovered**; when a Compliance Officer deletes another user's recording it is\n * purged from Webex and becomes inaccessible to all parties. Requires the\n * `spark-compliance:recordings_write` scope on the access token.\n *\n * `options.reason` / `options.comment` are only required when a Compliance Officer deletes\n * another user's recording and are sent as the request body when provided.\n *\n * @param recordingId - The recording id (`id`) to delete.\n * @param options - Optional `reason`/`comment` (Compliance Officer deletions).\n *\n * @example\n * ```javascript\n * await callRecording.deleteRecording(recordingId);\n * await callRecording.deleteRecording(recordingId, {reason: 'audit', comment: 'Maintain data privacy'});\n * ```\n */\n deleteRecording(\n recordingId: string,\n options?: DeleteRecordingOptions\n ): Promise<RecordingDeleteResponse>;\n}\n"],"mappings":";;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AALA,IAMYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAK3B;AACA;AACA;AAFA,IAGYE,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAO9B;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmBA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AA+CA;AACA;AACA;AACA;AACA;AA6EA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IASYC,oBAAoB,GAAAF,OAAA,CAAAE,oBAAA,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA;AAOhC;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}