@mediarithmics/plugins-nodejs-sdk
Version:
This is the mediarithmics nodejs to help plugin developers bootstrapping their plugin without having to deal with most of the plugin boilerplate
153 lines (123 loc) • 4.13 kB
text/typescript
import { AudienceFeedConnectorBaseInstanceContext } from '../../../plugins/audience-feed-connector/AudienceFeedConnectorBasePlugin';
import { UserDeviceTechnicalIdentifierType } from '../../reference/UserIdentifierInterface';
export interface AssetFilePropertyResource {
original_file_name?: string;
original_name?: string;
asset_id?: string;
file_path?: string;
file?: string;
}
export interface AssetFolderPropertyResource {
original_name?: string;
asset_id?: string;
path?: string;
}
export interface DataFilePropertyResource {
uri?: string;
last_modified?: number;
}
export interface UrlPropertyResource {
url?: string;
}
export interface StringPropertyResource {
value?: string;
}
export interface AdLayoutPropertyResource {
id?: string;
version?: string;
}
export interface StyleSheetPropertyResource {
id?: string;
version?: string;
}
export interface PixelTagPropertyResource {
value?: string;
}
export interface DoublePropertyResource {
value?: number;
}
export interface BooleanPropertyResource {
value?: boolean;
}
export interface IntPropertyResource {
value?: number;
}
export interface RecommenderPropertyResource {
recommender_id?: string;
}
export interface NativeDataPropertyResource {
required_display?: boolean;
type?: number;
value?: string;
}
export interface NativeTitlePropertyResource {
required_display?: boolean;
value?: string;
}
export interface NativeImagePropertyResource {
required_display?: boolean;
width?: number;
height?: number;
type?: number;
original_file_name?: string;
asset_id?: string;
file_path?: string;
}
export type IdentifyingResourceType = 'USER_ACCOUNT' | 'USER_EMAIL' | 'USER_DEVICE_TECHNICAL_ID' | 'USER_PROFILE';
interface AbstractIdentifyingResource {
type: IdentifyingResourceType;
}
export interface IdentifyingAccount extends AbstractIdentifyingResource {
type: 'USER_ACCOUNT';
compartment_id?: string;
}
export interface IdentifyingEmail extends AbstractIdentifyingResource {
type: 'USER_EMAIL';
}
export interface IdentifyingDeviceTechnicalId extends AbstractIdentifyingResource {
type: 'USER_DEVICE_TECHNICAL_ID';
registry_type: UserDeviceTechnicalIdentifierType;
registry_id?: string;
}
export interface IdentifyingProfile extends AbstractIdentifyingResource {
type: 'USER_PROFILE';
compartment_id?: string;
}
export type IdentifyingResourceShape =
| IdentifyingAccount
| IdentifyingEmail
| IdentifyingDeviceTechnicalId
| IdentifyingProfile;
export const isIdentifyingAccount = (resourceShape: IdentifyingResourceShape): resourceShape is IdentifyingAccount => {
return resourceShape.type === 'USER_ACCOUNT';
};
export const isIdentifyingEmail = (resourceShape: IdentifyingResourceShape): resourceShape is IdentifyingEmail => {
return resourceShape.type === 'USER_EMAIL';
};
export const isIdentifyingDeviceTechnicalId = (
resourceShape: IdentifyingResourceShape,
): resourceShape is IdentifyingDeviceTechnicalId => {
return resourceShape.type === 'USER_DEVICE_TECHNICAL_ID';
};
export const isIdentifyingProfile = (resourceShape: IdentifyingResourceShape): resourceShape is IdentifyingProfile => {
return resourceShape.type === 'USER_PROFILE';
};
const getHasIdentifyingSelectedResource = <T extends AudienceFeedConnectorBaseInstanceContext>(
isIdentifyingResourceFunction: (resourceShape: IdentifyingResourceShape) => resourceShape is IdentifyingResourceShape,
) => {
return (baseInstanceContext: T): boolean => {
const selectedIdentifyingResources = baseInstanceContext.feed.selected_identifying_resources;
return (
selectedIdentifyingResources !== undefined &&
selectedIdentifyingResources.filter(isIdentifyingResourceFunction).length !== 0
);
};
};
export const [
hasIdentifyingAccountSelectedResource,
hasIdentifyingEmailSelectedResource,
hasIdentifyingDeviceTechnicalIdSelectedResource,
hasIdentifyingProfileSelectedResource,
] = [isIdentifyingAccount, isIdentifyingEmail, isIdentifyingDeviceTechnicalId, isIdentifyingProfile].map((fn) => {
return getHasIdentifyingSelectedResource(fn);
});