Skip to content
Draft
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
2 changes: 2 additions & 0 deletions src/api/client-event-manager-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ export interface ClientEvent {
timestamp?: number;
/** Optional. ID of the associated action configuration. */
configurationId?: string | null;
/** Optional. context label of the event. */
label?: string[] | null;
}

export interface ClientEventManagerApi {
Expand Down
1 change: 1 addition & 0 deletions src/components/activities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ export class ActivityIframePort implements ActivityPortDef {
isFromUserAction: request.getMeta()?.getIsFromUserAction(),
additionalParameters: request.getParams(),
configurationId: request.getMeta()?.getConfigurationId(),
label: request.getContext()?.getLabelList(),
});
});
}
Expand Down
10 changes: 9 additions & 1 deletion src/proto/api_messages-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* Auto generated, do not edit
*/

import {AccountCreationRequest, ActionRequest, ActionType, AlreadySubscribedResponse, AnalyticsContext, AnalyticsEvent, AnalyticsEventMeta, AnalyticsRequest, AudienceActivityClientLogsRequest, CloseWindowRequest, CompleteAudienceActionResponse, Duration, EntitlementJwt, EntitlementResult, EntitlementSource, EntitlementsRequest, EntitlementsResponse, EventOriginator, EventParams, FinishedLoggingResponse, LinkSaveTokenRequest, LinkingInfoResponse, OpenDialogRequest, ReaderSurfaceType, RewardedAdAlternateActionRequest, RewardedAdLoadAdRequest, RewardedAdLoadAdResponse, RewardedAdViewAdRequest, SkuSelectedResponse, SmartBoxMessage, SubscribeResponse, SubscriptionLinkingCompleteResponse, SubscriptionLinkingLinkResult, SubscriptionLinkingResponse, SurveyAnswer, SurveyDataTransferRequest, SurveyDataTransferResponse, SurveyQuestion, Timestamp, ToastCloseRequest, ViewSubscriptionsResponse, deserialize, getLabel} from './api_messages';
import {AccountCreationRequest, ActionRequest, ActionType, AlreadySubscribedResponse, AnalyticsContext, AnalyticsEvent, AnalyticsEventMeta, AnalyticsRequest, AudienceActivityClientLogsRequest, CloseWindowRequest, CompleteAudienceActionResponse, CtaMode, Duration, EntitlementJwt, EntitlementResult, EntitlementSource, EntitlementsRequest, EntitlementsResponse, EventOriginator, EventParams, FinishedLoggingResponse, LinkSaveTokenRequest, LinkingInfoResponse, OpenDialogRequest, ReaderSurfaceType, RewardedAdAlternateActionRequest, RewardedAdLoadAdRequest, RewardedAdLoadAdResponse, RewardedAdViewAdRequest, SkuSelectedResponse, SmartBoxMessage, SubscribeResponse, SubscriptionLinkingCompleteResponse, SubscriptionLinkingLinkResult, SubscriptionLinkingResponse, SurveyAnswer, SurveyDataTransferRequest, SurveyDataTransferResponse, SurveyQuestion, Timestamp, ToastCloseRequest, ViewSubscriptionsResponse, deserialize, getLabel} from './api_messages';

describe('deserialize', () => {
it('throws if deserialization fails', () => {
Expand Down Expand Up @@ -456,6 +456,7 @@
eventparams1.setSubscriptionTimestamp(timestamp4);
eventparams1.setCampaignId('');
eventparams1.setLinkedPublicationsCount(0);
eventparams1.setCtaMode(CtaMode.CTA_MODE_POPUP);
analyticsrequest1.setParams(eventparams1);

let analyticsrequestDeserialized;
Expand Down Expand Up @@ -936,6 +937,7 @@
eventparams1.setSubscriptionTimestamp(timestamp1);
eventparams1.setCampaignId('');
eventparams1.setLinkedPublicationsCount(0);
eventparams1.setCtaMode(CtaMode.CTA_MODE_INLINE);

let eventparamsDeserialized;

Expand Down Expand Up @@ -967,6 +969,8 @@
eventparams1.getCampaignId());
expect(eventparamsDeserialized.getLinkedPublicationsCount()).to.deep.equal(
eventparams1.getLinkedPublicationsCount());
expect(eventparamsDeserialized.getCtaMode()).to.deep.equal(
eventparams1.getCtaMode());

// Verify includeLabel true
// Verify serialized arrays.
Expand Down Expand Up @@ -996,6 +1000,8 @@
eventparams1.getCampaignId());
expect(eventparamsDeserialized.getLinkedPublicationsCount()).to.deep.equal(
eventparams1.getLinkedPublicationsCount());
expect(eventparamsDeserialized.getCtaMode()).to.deep.equal(
eventparams1.getCtaMode());

// Verify includeLabel false
// Verify serialized arrays.
Expand Down Expand Up @@ -1024,6 +1030,8 @@
eventparams1.getCampaignId());
expect(eventparamsDeserialized.getLinkedPublicationsCount()).to.deep.equal(
eventparams1.getLinkedPublicationsCount());
expect(eventparamsDeserialized.getCtaMode()).to.deep.equal(
eventparams1.getCtaMode());
});
});

Expand Down
19 changes: 19 additions & 0 deletions src/proto/api_messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,13 @@ export enum ReaderSurfaceType {
READER_SURFACE_TENOR = 3,
}

/** CTA rendering mode (e.g. inline, pop-up) */
export enum CtaMode {
CTA_MODE_UNSPECIFIED = 0,
CTA_MODE_POPUP = 1,
CTA_MODE_INLINE = 2,
}

/** */
export class AccountCreationRequest implements Message {
private complete_: boolean | null;
Expand Down Expand Up @@ -1260,6 +1267,7 @@ export class EventParams implements Message {
private subscriptionTimestamp_: Timestamp | null;
private campaignId_: string | null;
private linkedPublicationsCount_: number | null;
private ctaMode_: CtaMode | null;

constructor(data: unknown[] = [], includesLabel = true) {
const base = includesLabel ? 1 : 0;
Expand All @@ -1286,6 +1294,8 @@ export class EventParams implements Message {
this.campaignId_ = data[8 + base] == null ? null : (data[8 + base] as string);

this.linkedPublicationsCount_ = data[9 + base] == null ? null : (data[9 + base] as number);

this.ctaMode_ = data[10 + base] == null ? null : (data[10 + base] as number);
}

getSmartboxMessage(): string | null {
Expand Down Expand Up @@ -1368,6 +1378,14 @@ export class EventParams implements Message {
this.linkedPublicationsCount_ = value;
}

getCtaMode(): CtaMode | null {
return this.ctaMode_;
}

setCtaMode(value: CtaMode): void {
this.ctaMode_ = value;
}

toArray(includeLabel = true): unknown[] {
const arr: unknown[] = [
this.smartboxMessage_, // field 1 - smartbox_message
Expand All @@ -1380,6 +1398,7 @@ export class EventParams implements Message {
this.subscriptionTimestamp_ ? this.subscriptionTimestamp_.toArray(includeLabel) : [], // field 8 - subscription_timestamp
this.campaignId_, // field 9 - campaign_id
this.linkedPublicationsCount_, // field 10 - linked_publications_count
this.ctaMode_, // field 11 - cta_mode
];
if (includeLabel) {
arr.unshift(this.label());
Expand Down
12 changes: 12 additions & 0 deletions src/runtime/analytics-service-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,8 @@ describes.realWin('AnalyticsService', (env) => {
eventOriginator: EventOriginator.UNKNOWN_CLIENT,
isFromUserAction: null,
additionalParameters: null,
configurationId: null,
label: ['label1', 'CTA_MODE_INLINE'],
});

// These wait for analytics server to be ready to send data.
Expand All @@ -240,13 +242,19 @@ describes.realWin('AnalyticsService', (env) => {
);
expect(request1.getMeta().getIsFromUserAction()).to.be.false;
expect(request1.getMeta().getConfigurationId()).to.be.null;
const context1 = request1.getContext();
const labels1 = context1.getLabelList();
expect(labels1.length).to.equal(2);
expect(labels1[0]).to.equal('label1');
expect(labels1[1]).to.equal('CTA_MODE_INLINE');
// This sends another event and waits for it to be sent
eventManagerCallback({
eventType: AnalyticsEvent.IMPRESSION_PAYWALL,
eventOriginator: EventOriginator.SWG_CLIENT,
isFromUserAction: true,
additionalParameters: {droppedData: true},
configurationId: 'configurationId',
label: null,
});
expect(analyticsService.lastAction).to.not.be.null;
await analyticsService.lastAction;
Expand All @@ -260,6 +268,10 @@ describes.realWin('AnalyticsService', (env) => {
expect(meta.getEventOriginator()).to.equal(EventOriginator.SWG_CLIENT);
expect(meta.getIsFromUserAction()).to.be.true;
expect(meta.getConfigurationId()).to.equal('configurationId');
const context2 = request2.getContext();
const labels2 = context2.getLabelList();
expect(labels2.length).to.equal(1);
expect(labels2[0]).to.equal('label1');

// It should have a working logging promise
const p = analyticsService.getLoggingPromise();
Expand Down
8 changes: 8 additions & 0 deletions src/runtime/analytics-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ const MAX_WAIT = 200;
*/
const TIMEOUT_ERROR = 'AnalyticsService timed out waiting for a response';

/** Context label for inline CTA, should be removed when not the case */
const INLINE_CTA_LABEL = 'CTA_MODE_INLINE';

function createErrorResponse(error: string): FinishedLoggingResponse {
const response = new FinishedLoggingResponse();
response.setComplete(false);
Expand Down Expand Up @@ -305,6 +308,11 @@ export class AnalyticsService {
if (!!event.configurationId) {
meta.setConfigurationId(event.configurationId);
}
if (!!event.label) {
this.addLabels(event.label);
} else {
this.removeLabels([INLINE_CTA_LABEL]);
}
// Update the request's timestamp.
this.context_.setClientTimestamp(toTimestamp(event.timestamp!));
const loadEventStartDelay = this.getLoadEventStartDelay_();
Expand Down
8 changes: 8 additions & 0 deletions src/runtime/audience-action-flow-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1043,6 +1043,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand Down Expand Up @@ -1106,6 +1107,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: true,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand All @@ -1128,6 +1130,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand All @@ -1153,6 +1156,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand Down Expand Up @@ -1187,6 +1191,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand All @@ -1207,6 +1212,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand Down Expand Up @@ -1267,6 +1273,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: false,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand Down Expand Up @@ -1323,6 +1330,7 @@ describes.realWin('AudienceActionIframeFlow', (env) => {
isFromUserAction: true,
additionalParameters: null,
configurationId: null,
label: null,
},
undefined,
undefined
Expand Down
Loading
Loading