Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -649,12 +649,12 @@ export default class MeetingInfoV2 {
installedOrgID = null,
locusId = null,
extraParams: object = {},
options: {meetingId?: string; sendCAevents?: boolean} = {},
options: {meetingId?: string; sendCAevents?: boolean; correlationId?: string} = {},
registrationId: string = null,
fullSiteUrl: string = null,
classificationId: string = null
) {
const {meetingId, sendCAevents} = options;
const {meetingId, sendCAevents, correlationId} = options;

const destinationType = await MeetingInfoUtil.getDestinationType({
destination,
Expand Down Expand Up @@ -706,6 +706,10 @@ export default class MeetingInfoV2 {
body,
};

if (meetingId && sendCAevents && correlationId) {
requestOptions.headers = {correlationId};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve configured default headers when adding correlationId

When an SDK instance configures defaultRequestOptions.headers, setting a new headers object here prevents all of those configured headers from reaching this request: DefaultOptionsInterceptor.onRequest() only copies a default property when the top-level key is absent (packages/@webex/webex-core/src/interceptors/default-options.js, lines 46-49). Consequently, every meeting-info request with CA events and a correlation ID silently loses application-wide headers that were previously applied; merge the correlation ID with the configured/default headers instead of replacing the entire header set.

Useful? React with 👍 / 👎.

}

const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);

if (fullSiteUrl) {
Expand Down
2 changes: 1 addition & 1 deletion packages/@webex/plugin-meetings/src/meeting/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2090,7 +2090,7 @@ export default class Meeting extends StatelessWebexPlugin {
this.config.installedOrgID,
this.locusId,
extraParams,
{meetingId: this.id, sendCAevents},
{meetingId: this.id, sendCAevents, correlationId: this.correlationId},
registrationId,
null,
classificationId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -900,6 +900,63 @@ describe('plugin-meetings', () => {
}
);

forEach(
[
{
meetingId: 'meeting-id',
sendCAevents: true,
correlationId: 'correlation-id',
shouldSendCorrelationId: true,
condition: 'when CA events are enabled for the meeting',
},
{
sendCAevents: true,
correlationId: 'correlation-id',
shouldSendCorrelationId: false,
condition: 'without a meetingId',
},
{
meetingId: 'meeting-id',
sendCAevents: false,
correlationId: 'correlation-id',
shouldSendCorrelationId: false,
condition: 'when CA events are disabled',
},
{
meetingId: 'meeting-id',
sendCAevents: true,
shouldSendCorrelationId: false,
condition: 'without a correlationId',
},
],
({meetingId, sendCAevents, correlationId, shouldSendCorrelationId, condition}) => {
it(`should ${
shouldSendCorrelationId ? '' : 'not '
}send the correlationId header ${condition}`, async () => {
webex.request.resolves({statusCode: 200, body: {meetingKey: '1234323'}});

await meetingInfo.fetchMeetingInfo(
'1234323',
DESTINATION_TYPE.MEETING_ID,
null,
null,
null,
null,
undefined,
{meetingId, sendCAevents, correlationId}
);

const requestOptions = webex.request.firstCall.args[0];

if (shouldSendCorrelationId) {
assert.deepEqual(requestOptions.headers, {correlationId});
} else {
assert.notProperty(requestOptions, 'headers');
}
});
}
);

it('should send CA metric if meetingId is provided and send CA events is authorized', async () => {
const requestResponse = {
statusCode: 200,
Expand Down
72 changes: 60 additions & 12 deletions packages/@webex/plugin-meetings/test/unit/spec/meeting/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9033,7 +9033,11 @@ describe('plugin-meetings', () => {
beforeEach(() => {
meeting.locusId = 'locus-id';
meeting.id = 'meeting-id';
FAKE_OPTIONS = {meetingId: meeting.id, sendCAevents: true};
FAKE_OPTIONS = {
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
};
});

it('calls meetingInfoProvider with all the right parameters and parses the result', async () => {
Expand Down Expand Up @@ -9118,7 +9122,11 @@ describe('plugin-meetings', () => {
undefined,
meeting.locusId,
{},
{meetingId: meeting.id, sendCAevents: false}
{
meetingId: meeting.id,
sendCAevents: false,
correlationId: meeting.correlationId,
}
);

// parseMeeting info
Expand Down Expand Up @@ -9204,7 +9212,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
Expand Down Expand Up @@ -9240,7 +9252,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
Expand Down Expand Up @@ -9269,7 +9285,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
Expand Down Expand Up @@ -9304,7 +9324,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, {});
Expand Down Expand Up @@ -9350,7 +9374,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, {});
Expand Down Expand Up @@ -9384,7 +9412,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, {
Expand Down Expand Up @@ -9437,7 +9469,11 @@ describe('plugin-meetings', () => {
undefined,
'locus-id',
{},
{meetingId: meeting.id, sendCAevents: true}
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
}
);

assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
Expand Down Expand Up @@ -9726,7 +9762,11 @@ describe('plugin-meetings', () => {
'fake-installed-org-id',
'locus-id',
{extraParam1: 'value1', permissionToken: FAKE_PERMISSION_TOKEN},
{meetingId: meeting.id, sendCAevents: true},
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
},
null,
null,
null
Expand Down Expand Up @@ -9774,7 +9814,11 @@ describe('plugin-meetings', () => {
'fake-installed-org-id',
'locus-id',
{extraParam1: 'value1', permissionToken: FAKE_PERMISSION_TOKEN},
{meetingId: meeting.id, sendCAevents: true},
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
},
null,
null,
null
Expand Down Expand Up @@ -9831,7 +9875,11 @@ describe('plugin-meetings', () => {
extraParam1: 'value1',
permissionToken: FAKE_PERMISSION_TOKEN,
},
{meetingId: meeting.id, sendCAevents: true},
{
meetingId: meeting.id,
sendCAevents: true,
correlationId: meeting.correlationId,
},
null,
null,
null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2680,7 +2680,11 @@ describe('plugin-meetings', () => {
undefined,
undefined,
extraParams,
{meetingId: meeting.id, sendCAevents}
{
meetingId: meeting.id,
sendCAevents,
correlationId: meeting.correlationId,
}
);
}

Expand Down