mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-18 12:43:57 +00:00
Initial commit
This commit is contained in:
19
src/interface/Account.ts
Normal file
19
src/interface/Account.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export interface Account {
|
||||
/** Enable/disable this account (if false, account will be skipped during execution) */
|
||||
enabled?: boolean;
|
||||
email: string;
|
||||
password: string;
|
||||
/** Optional TOTP secret in Base32 (e.g., from Microsoft Authenticator setup) */
|
||||
totp?: string;
|
||||
/** Recovery email used during security challenge verification (mandatory) */
|
||||
recoveryEmail: string;
|
||||
proxy: AccountProxy;
|
||||
}
|
||||
|
||||
export interface AccountProxy {
|
||||
proxyAxios: boolean;
|
||||
url: string;
|
||||
port: number;
|
||||
password: string;
|
||||
username: string;
|
||||
}
|
||||
21
src/interface/ActivityHandler.ts
Normal file
21
src/interface/ActivityHandler.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import type { MorePromotion, PromotionalItem } from './DashboardData'
|
||||
import type { Page } from 'playwright'
|
||||
|
||||
/**
|
||||
* Activity handler contract for solving a single dashboard activity.
|
||||
* Implementations should be stateless (or hold only a reference to the bot)
|
||||
* and perform all required steps on the provided page.
|
||||
*/
|
||||
export interface ActivityHandler {
|
||||
/** Optional identifier for diagnostics */
|
||||
id?: string
|
||||
/**
|
||||
* Return true if this handler knows how to process the given activity.
|
||||
*/
|
||||
canHandle(activity: MorePromotion | PromotionalItem): boolean
|
||||
/**
|
||||
* Execute the activity on the provided page. The page is already
|
||||
* navigated to the activity tab/window by the caller.
|
||||
*/
|
||||
run(page: Page, activity: MorePromotion | PromotionalItem): Promise<void>
|
||||
}
|
||||
226
src/interface/AppUserData.ts
Normal file
226
src/interface/AppUserData.ts
Normal file
@@ -0,0 +1,226 @@
|
||||
export interface AppUserData {
|
||||
response: Response;
|
||||
correlationId: string;
|
||||
code: number;
|
||||
}
|
||||
|
||||
export interface Response {
|
||||
profile: Profile;
|
||||
balance: number;
|
||||
counters: null;
|
||||
promotions: Promotion[];
|
||||
catalog: null;
|
||||
goal_item: GoalItem;
|
||||
activities: null;
|
||||
cashback: null;
|
||||
orders: Order[];
|
||||
rebateProfile: null;
|
||||
rebatePayouts: null;
|
||||
giveProfile: GiveProfile;
|
||||
autoRedeemProfile: null;
|
||||
autoRedeemItem: null;
|
||||
thirdPartyProfile: null;
|
||||
notifications: null;
|
||||
waitlist: null;
|
||||
autoOpenFlyout: null;
|
||||
coupons: null;
|
||||
recommendedAffordableCatalog: null;
|
||||
}
|
||||
|
||||
export interface GiveProfile {
|
||||
give_user: string;
|
||||
give_organization: { [key: string]: GiveOrganization | null };
|
||||
first_give_optin: string;
|
||||
last_give_optout: string;
|
||||
give_lifetime_balance: string;
|
||||
give_lifetime_donation_balance: string;
|
||||
give_balance: string;
|
||||
form: null;
|
||||
}
|
||||
|
||||
export interface GiveOrganization {
|
||||
give_organization_donation_points: number;
|
||||
give_organization_donation_point_to_currency_ratio: number;
|
||||
give_organization_donation_currency: number;
|
||||
}
|
||||
|
||||
export interface GoalItem {
|
||||
name: string;
|
||||
provider: string;
|
||||
price: number;
|
||||
attributes: GoalItemAttributes;
|
||||
config: GoalItemConfig;
|
||||
}
|
||||
|
||||
export interface GoalItemAttributes {
|
||||
category: string;
|
||||
CategoryDescription: string;
|
||||
'desc.group_text': string;
|
||||
'desc.legal_text'?: string;
|
||||
'desc.sc_description': string;
|
||||
'desc.sc_title': string;
|
||||
display_order: string;
|
||||
ExtraLargeImage: string;
|
||||
group: string;
|
||||
group_image: string;
|
||||
group_sc_image: string;
|
||||
group_title: string;
|
||||
hidden?: string;
|
||||
large_image: string;
|
||||
large_sc_image: string;
|
||||
medium_image: string;
|
||||
MobileImage: string;
|
||||
original_price: string;
|
||||
Remarks?: string;
|
||||
ShortText?: string;
|
||||
showcase?: string;
|
||||
small_image: string;
|
||||
title: string;
|
||||
cimsid: string;
|
||||
user_defined_goal?: string;
|
||||
disable_bot_redemptions?: string;
|
||||
'desc.large_text'?: string;
|
||||
english_title?: string;
|
||||
etid?: string;
|
||||
sku?: string;
|
||||
coupon_discount?: string;
|
||||
}
|
||||
|
||||
export interface GoalItemConfig {
|
||||
amount: string;
|
||||
currencyCode: string;
|
||||
isHidden: string;
|
||||
PointToCurrencyConversionRatio: string;
|
||||
}
|
||||
|
||||
export interface Order {
|
||||
id: string;
|
||||
t: Date;
|
||||
sku: string;
|
||||
item_snapshot: ItemSnapshot;
|
||||
p: number;
|
||||
s: S;
|
||||
a: A;
|
||||
child_redemption: null;
|
||||
third_party_partner: null;
|
||||
log: Log[];
|
||||
}
|
||||
|
||||
export interface A {
|
||||
form?: string;
|
||||
OrderId: string;
|
||||
CorrelationId: string;
|
||||
Channel: string;
|
||||
Language: string;
|
||||
Country: string;
|
||||
EvaluationId: string;
|
||||
provider?: string;
|
||||
referenceOrderID?: string;
|
||||
externalRefID?: string;
|
||||
denomination?: string;
|
||||
rewardName?: string;
|
||||
sendEmail?: string;
|
||||
status?: string;
|
||||
createdAt?: Date;
|
||||
bal_before_deduct?: string;
|
||||
bal_after_deduct?: string;
|
||||
}
|
||||
|
||||
export interface ItemSnapshot {
|
||||
name: string;
|
||||
provider: string;
|
||||
price: number;
|
||||
attributes: GoalItemAttributes;
|
||||
config: ItemSnapshotConfig;
|
||||
}
|
||||
|
||||
export interface ItemSnapshotConfig {
|
||||
amount: string;
|
||||
countryCode: string;
|
||||
currencyCode: string;
|
||||
sku: string;
|
||||
}
|
||||
|
||||
export interface Log {
|
||||
time: Date;
|
||||
from: From;
|
||||
to: S;
|
||||
reason: string;
|
||||
}
|
||||
|
||||
export enum From {
|
||||
Created = 'Created',
|
||||
RiskApproved = 'RiskApproved',
|
||||
RiskReview = 'RiskReview'
|
||||
}
|
||||
|
||||
export enum S {
|
||||
Cancelled = 'Cancelled',
|
||||
RiskApproved = 'RiskApproved',
|
||||
RiskReview = 'RiskReview',
|
||||
Shipped = 'Shipped'
|
||||
}
|
||||
|
||||
export interface Profile {
|
||||
ruid: string;
|
||||
attributes: ProfileAttributes;
|
||||
offline_attributes: OfflineAttributes;
|
||||
}
|
||||
|
||||
export interface ProfileAttributes {
|
||||
publisher: string;
|
||||
publisher_upd: Date;
|
||||
creative: string;
|
||||
creative_upd: Date;
|
||||
program: string;
|
||||
program_upd: Date;
|
||||
country: string;
|
||||
country_upd: Date;
|
||||
referrerhash: string;
|
||||
referrerhash_upd: Date;
|
||||
optout_upd: Date;
|
||||
language: string;
|
||||
language_upd: Date;
|
||||
target: string;
|
||||
target_upd: Date;
|
||||
created: Date;
|
||||
created_upd: Date;
|
||||
epuid: string;
|
||||
epuid_upd: Date;
|
||||
goal: string;
|
||||
goal_upd: Date;
|
||||
waitlistattributes: string;
|
||||
waitlistattributes_upd: Date;
|
||||
serpbotscore_upd: Date;
|
||||
iscashbackeligible: string;
|
||||
cbedc: string;
|
||||
rlscpct_upd: Date;
|
||||
give_user: string;
|
||||
rebcpc_upd: Date;
|
||||
SerpBotScore_upd: Date;
|
||||
AdsBotScore_upd: Date;
|
||||
dbs_upd: Date;
|
||||
rbs: string;
|
||||
rbs_upd: Date;
|
||||
iris_segmentation: string;
|
||||
iris_segmentation_upd: Date;
|
||||
}
|
||||
|
||||
export interface OfflineAttributes {
|
||||
}
|
||||
|
||||
export interface Promotion {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: { [key: string]: string };
|
||||
tags: Tag[];
|
||||
}
|
||||
|
||||
export enum Tag {
|
||||
AllowTrialUser = 'allow_trial_user',
|
||||
ExcludeGivePcparent = 'exclude_give_pcparent',
|
||||
ExcludeGlobalConfig = 'exclude_global_config',
|
||||
ExcludeHidden = 'exclude_hidden',
|
||||
LOCString = 'locString',
|
||||
NonGlobalConfig = 'non_global_config'
|
||||
}
|
||||
219
src/interface/Config.ts
Normal file
219
src/interface/Config.ts
Normal file
@@ -0,0 +1,219 @@
|
||||
export interface Config {
|
||||
baseURL: string;
|
||||
sessionPath: string;
|
||||
headless: boolean;
|
||||
browser?: ConfigBrowser; // Optional nested browser config
|
||||
fingerprinting?: ConfigFingerprinting; // Optional nested fingerprinting config
|
||||
parallel: boolean;
|
||||
runOnZeroPoints: boolean;
|
||||
clusters: number;
|
||||
saveFingerprint: ConfigSaveFingerprint;
|
||||
workers: ConfigWorkers;
|
||||
searchOnBingLocalQueries: boolean;
|
||||
globalTimeout: number | string;
|
||||
searchSettings: ConfigSearchSettings;
|
||||
humanization?: ConfigHumanization; // Anti-ban humanization controls
|
||||
retryPolicy?: ConfigRetryPolicy; // Global retry/backoff policy
|
||||
jobState?: ConfigJobState; // Persistence of per-activity checkpoints
|
||||
logExcludeFunc: string[];
|
||||
webhookLogExcludeFunc: string[];
|
||||
logging?: ConfigLogging; // Preserve original logging object (for live webhook settings)
|
||||
proxy: ConfigProxy;
|
||||
webhook: ConfigWebhook;
|
||||
conclusionWebhook?: ConfigWebhook; // Optional secondary webhook for final summary
|
||||
ntfy: ConfigNtfy;
|
||||
diagnostics?: ConfigDiagnostics;
|
||||
update?: ConfigUpdate;
|
||||
schedule?: ConfigSchedule;
|
||||
passesPerRun?: number;
|
||||
buyMode?: ConfigBuyMode; // Optional manual spending mode
|
||||
vacation?: ConfigVacation; // Optional monthly contiguous off-days
|
||||
crashRecovery?: ConfigCrashRecovery; // Automatic restart / graceful shutdown
|
||||
riskManagement?: ConfigRiskManagement; // NEW: Risk-aware throttling and ban prediction
|
||||
analytics?: ConfigAnalytics; // NEW: Performance dashboard and metrics tracking
|
||||
dryRun?: boolean; // NEW: Dry-run mode (simulate without executing)
|
||||
queryDiversity?: ConfigQueryDiversity; // NEW: Multi-source query generation
|
||||
}
|
||||
|
||||
export interface ConfigSaveFingerprint {
|
||||
mobile: boolean;
|
||||
desktop: boolean;
|
||||
}
|
||||
|
||||
export interface ConfigBrowser {
|
||||
headless?: boolean;
|
||||
globalTimeout?: number | string;
|
||||
}
|
||||
|
||||
export interface ConfigFingerprinting {
|
||||
saveFingerprint?: ConfigSaveFingerprint;
|
||||
}
|
||||
|
||||
export interface ConfigSearchSettings {
|
||||
useGeoLocaleQueries: boolean;
|
||||
scrollRandomResults: boolean;
|
||||
clickRandomResults: boolean;
|
||||
searchDelay: ConfigSearchDelay;
|
||||
retryMobileSearchAmount: number;
|
||||
localFallbackCount?: number; // Number of local fallback queries to sample when trends fail
|
||||
extraFallbackRetries?: number; // Additional mini-retry loops with fallback terms
|
||||
}
|
||||
|
||||
export interface ConfigSearchDelay {
|
||||
min: number | string;
|
||||
max: number | string;
|
||||
}
|
||||
|
||||
export interface ConfigWebhook {
|
||||
enabled: boolean;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface ConfigNtfy {
|
||||
enabled: boolean;
|
||||
url: string;
|
||||
topic: string;
|
||||
authToken?: string; // Optional authentication token
|
||||
}
|
||||
|
||||
export interface ConfigProxy {
|
||||
proxyGoogleTrends: boolean;
|
||||
proxyBingTerms: boolean;
|
||||
}
|
||||
|
||||
export interface ConfigDiagnostics {
|
||||
enabled?: boolean; // master toggle
|
||||
saveScreenshot?: boolean; // capture .png
|
||||
saveHtml?: boolean; // capture .html
|
||||
maxPerRun?: number; // cap number of captures per run
|
||||
retentionDays?: number; // delete older diagnostic folders
|
||||
}
|
||||
|
||||
export interface ConfigUpdate {
|
||||
git?: boolean; // if true, run git pull + npm ci + npm run build after completion
|
||||
docker?: boolean; // if true, run docker update routine (compose pull/up) after completion
|
||||
scriptPath?: string; // optional custom path to update script relative to repo root
|
||||
autoUpdateConfig?: boolean; // if true, allow auto-update of config.jsonc when remote changes it (default: false to preserve user settings)
|
||||
autoUpdateAccounts?: boolean; // if true, allow auto-update of accounts.json when remote changes it (default: false to preserve credentials)
|
||||
}
|
||||
|
||||
export interface ConfigBuyMode {
|
||||
enabled?: boolean; // if true, force buy mode session
|
||||
maxMinutes?: number; // session duration cap
|
||||
}
|
||||
|
||||
export interface ConfigSchedule {
|
||||
enabled?: boolean;
|
||||
time?: string; // Back-compat: accepts "HH:mm" or "h:mm AM/PM"
|
||||
// New optional explicit times
|
||||
time12?: string; // e.g., "9:00 AM"
|
||||
time24?: string; // e.g., "09:00"
|
||||
timeZone?: string; // IANA TZ e.g., "America/New_York"
|
||||
useAmPm?: boolean; // If true, prefer time12 + AM/PM style; if false, prefer time24. If undefined, back-compat behavior.
|
||||
runImmediatelyOnStart?: boolean; // if true, run once immediately when process starts
|
||||
cron?: string | string[]; // Optional cron expression(s) (standard 5-field or 6-field) for advanced scheduling
|
||||
}
|
||||
|
||||
export interface ConfigVacation {
|
||||
enabled?: boolean; // default false
|
||||
minDays?: number; // default 3
|
||||
maxDays?: number; // default 5
|
||||
}
|
||||
|
||||
export interface ConfigCrashRecovery {
|
||||
autoRestart?: boolean; // Restart the root process after fatal crash
|
||||
maxRestarts?: number; // Max restart attempts (default 2)
|
||||
backoffBaseMs?: number; // Base backoff before restart (default 2000)
|
||||
restartFailedWorker?: boolean; // (future) attempt to respawn crashed worker
|
||||
restartFailedWorkerAttempts?: number; // attempts per worker (default 1)
|
||||
}
|
||||
|
||||
export interface ConfigWorkers {
|
||||
doDailySet: boolean;
|
||||
doMorePromotions: boolean;
|
||||
doPunchCards: boolean;
|
||||
doDesktopSearch: boolean;
|
||||
doMobileSearch: boolean;
|
||||
doDailyCheckIn: boolean;
|
||||
doReadToEarn: boolean;
|
||||
bundleDailySetWithSearch?: boolean; // If true, run desktop search right after Daily Set
|
||||
}
|
||||
|
||||
// Anti-ban humanization
|
||||
export interface ConfigHumanization {
|
||||
// Master toggle for Human Mode. When false, humanization is minimized.
|
||||
enabled?: boolean;
|
||||
// If true, stop processing remaining accounts after a ban is detected
|
||||
stopOnBan?: boolean;
|
||||
// If true, send an immediate webhook/NTFY alert when a ban is detected
|
||||
immediateBanAlert?: boolean;
|
||||
// Additional random waits between actions
|
||||
actionDelay?: { min: number | string; max: number | string };
|
||||
// Probability [0..1] to perform micro mouse moves per step
|
||||
gestureMoveProb?: number;
|
||||
// Probability [0..1] to perform tiny scrolls per step
|
||||
gestureScrollProb?: number;
|
||||
// Allowed execution windows (local time). Each item is "HH:mm-HH:mm".
|
||||
// If provided, runs outside these windows will be delayed until the next allowed window.
|
||||
allowedWindows?: string[];
|
||||
// Randomly skip N days per week to look more human (0-7). Default 1.
|
||||
randomOffDaysPerWeek?: number;
|
||||
}
|
||||
|
||||
// Retry/backoff policy
|
||||
export interface ConfigRetryPolicy {
|
||||
maxAttempts?: number; // default 3
|
||||
baseDelay?: number | string; // default 1000ms
|
||||
maxDelay?: number | string; // default 30s
|
||||
multiplier?: number; // default 2
|
||||
jitter?: number; // 0..1; default 0.2
|
||||
}
|
||||
|
||||
// Job state persistence
|
||||
export interface ConfigJobState {
|
||||
enabled?: boolean; // default true
|
||||
dir?: string; // base directory; defaults to <sessionPath>/job-state
|
||||
skipCompletedAccounts?: boolean; // if true (default), skip accounts already completed for the day
|
||||
}
|
||||
|
||||
// Live logging configuration
|
||||
export interface ConfigLoggingLive {
|
||||
enabled?: boolean; // master switch for live webhook logs
|
||||
redactEmails?: boolean; // if true, redact emails in outbound logs
|
||||
}
|
||||
|
||||
export interface ConfigLogging {
|
||||
excludeFunc?: string[];
|
||||
webhookExcludeFunc?: string[];
|
||||
live?: ConfigLoggingLive;
|
||||
liveWebhookUrl?: string; // legacy/dedicated live webhook override
|
||||
redactEmails?: boolean; // legacy top-level redaction flag
|
||||
// Optional nested live.url support (already handled dynamically in Logger)
|
||||
[key: string]: unknown; // forward compatibility
|
||||
}
|
||||
|
||||
// CommunityHelp removed (privacy-first policy)
|
||||
|
||||
// NEW FEATURES: Risk Management, Analytics, Query Diversity
|
||||
export interface ConfigRiskManagement {
|
||||
enabled?: boolean; // master toggle for risk-aware throttling
|
||||
autoAdjustDelays?: boolean; // automatically increase delays when risk is high
|
||||
stopOnCritical?: boolean; // halt execution if risk reaches critical level
|
||||
banPrediction?: boolean; // enable ML-style ban prediction
|
||||
riskThreshold?: number; // 0-100, pause if risk exceeds this
|
||||
}
|
||||
|
||||
export interface ConfigAnalytics {
|
||||
enabled?: boolean; // track performance metrics
|
||||
retentionDays?: number; // how long to keep analytics data
|
||||
exportMarkdown?: boolean; // generate markdown reports
|
||||
webhookSummary?: boolean; // send analytics via webhook
|
||||
}
|
||||
|
||||
export interface ConfigQueryDiversity {
|
||||
enabled?: boolean; // use multi-source query generation
|
||||
sources?: Array<'google-trends' | 'reddit' | 'news' | 'wikipedia' | 'local-fallback'>; // which sources to use
|
||||
maxQueriesPerSource?: number; // limit per source
|
||||
cacheMinutes?: number; // cache duration
|
||||
}
|
||||
|
||||
701
src/interface/DashboardData.ts
Normal file
701
src/interface/DashboardData.ts
Normal file
@@ -0,0 +1,701 @@
|
||||
export interface DashboardData {
|
||||
userStatus: UserStatus;
|
||||
promotionalItem: PromotionalItem;
|
||||
dailySetPromotions: { [key: string]: PromotionalItem[] };
|
||||
streakPromotion: StreakPromotion;
|
||||
streakBonusPromotions: StreakBonusPromotion[];
|
||||
punchCards: PunchCard[];
|
||||
dashboardFlights: DashboardFlights;
|
||||
morePromotions: MorePromotion[];
|
||||
suggestedRewards: AutoRedeemItem[];
|
||||
coachMarks: CoachMarks;
|
||||
welcomeTour: WelcomeTour;
|
||||
userInterests: UserInterests;
|
||||
isVisualParityTest: boolean;
|
||||
mbingFlight: null;
|
||||
langCountryMismatchPromo: null;
|
||||
machineTranslationPromo: MachineTranslationPromo;
|
||||
autoRedeemItem: AutoRedeemItem;
|
||||
userProfile: UserProfile;
|
||||
}
|
||||
|
||||
export interface AutoRedeemItem {
|
||||
name: null | string;
|
||||
price: number;
|
||||
provider: null | string;
|
||||
disabled: boolean;
|
||||
category: string;
|
||||
title: string;
|
||||
variableGoalSpecificTitle: string;
|
||||
smallImageUrl: string;
|
||||
mediumImageUrl: string;
|
||||
largeImageUrl: string;
|
||||
largeShowcaseImageUrl: string;
|
||||
description: Description;
|
||||
showcase: boolean;
|
||||
showcaseInAllCategory: boolean;
|
||||
originalPrice: number;
|
||||
discountedPrice: number;
|
||||
popular: boolean;
|
||||
isTestOnly: boolean;
|
||||
groupId: string;
|
||||
inGroup: boolean;
|
||||
isDefaultItemInGroup: boolean;
|
||||
groupTitle: string;
|
||||
groupImageUrl: string;
|
||||
groupShowcaseImageUrl: string;
|
||||
instantWinGameId: string;
|
||||
instantWinPlayAgainSku: string;
|
||||
isLowInStock: boolean;
|
||||
isOutOfStock: boolean;
|
||||
getCodeMessage: string;
|
||||
disableEmail: boolean;
|
||||
stockMessage: string;
|
||||
comingSoonFlag: boolean;
|
||||
isGenericDonation: boolean;
|
||||
isVariableRedemptionItem: boolean;
|
||||
variableRedemptionItemCurrencySymbol: null;
|
||||
variableRedemptionItemMin: number;
|
||||
variableRedemptionItemMax: number;
|
||||
variableItemConfigPointsToCurrencyConversionRatio: number;
|
||||
isAutoRedeem: boolean;
|
||||
}
|
||||
|
||||
export interface Description {
|
||||
itemGroupText: string;
|
||||
smallText: string;
|
||||
largeText: string;
|
||||
legalText: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
}
|
||||
|
||||
export interface CoachMarks {
|
||||
streaks: WelcomeTour;
|
||||
}
|
||||
|
||||
export interface WelcomeTour {
|
||||
promotion: DashboardImpression;
|
||||
slides: Slide[];
|
||||
}
|
||||
|
||||
export interface DashboardImpression {
|
||||
name: null | string;
|
||||
priority: number;
|
||||
attributes: { [key: string]: string } | null;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
benefits?: Benefit[];
|
||||
supportedLevelKeys?: string[];
|
||||
supportedLevelTitles?: string[];
|
||||
supportedLevelTitlesMobile?: string[];
|
||||
activeLevel?: string;
|
||||
isCodexAutoJoinUser?: boolean;
|
||||
}
|
||||
|
||||
export interface Benefit {
|
||||
key: string;
|
||||
text: string;
|
||||
url: null | string;
|
||||
helpText: null | string;
|
||||
supportedLevels: SupportedLevels;
|
||||
}
|
||||
|
||||
export interface SupportedLevels {
|
||||
level1?: string;
|
||||
level2: string;
|
||||
level2XBoxGold: string;
|
||||
}
|
||||
|
||||
export interface Slide {
|
||||
slideType: null;
|
||||
slideShowTourId: string;
|
||||
id: number;
|
||||
title: string;
|
||||
subtitle: null;
|
||||
subtitle1: null;
|
||||
description: string;
|
||||
description1: null;
|
||||
imageTitle: null;
|
||||
image2Title: null | string;
|
||||
image3Title: null | string;
|
||||
image4Title: null | string;
|
||||
imageDescription: null;
|
||||
image2Description: null | string;
|
||||
image3Description: null | string;
|
||||
image4Description: null | string;
|
||||
imageUrl: null | string;
|
||||
darkImageUrl: null;
|
||||
image2Url: null | string;
|
||||
image3Url: null | string;
|
||||
image4Url: null | string;
|
||||
layout: null | string;
|
||||
actionButtonText: null | string;
|
||||
actionButtonUrl: null | string;
|
||||
foregroundImageUrl: null;
|
||||
backLink: null;
|
||||
nextLink: CloseLink;
|
||||
closeLink: CloseLink;
|
||||
footnote: null | string;
|
||||
termsText: null;
|
||||
termsUrl: null;
|
||||
privacyText: null;
|
||||
privacyUrl: null;
|
||||
taggedItem: null | string;
|
||||
slideVisited: boolean;
|
||||
aboutPageLinkText: null;
|
||||
aboutPageLink: null;
|
||||
redeemLink: null;
|
||||
rewardsLink: null;
|
||||
quizLinks?: string[];
|
||||
quizCorrectAnswerTitle?: string;
|
||||
quizWrongAnswerTitle?: string;
|
||||
quizAnswerDescription?: string;
|
||||
}
|
||||
|
||||
export interface CloseLink {
|
||||
text: null | string;
|
||||
url: null | string;
|
||||
}
|
||||
|
||||
export interface PromotionalItem {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: PromotionalItemAttributes;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: Type;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export interface PromotionalItemAttributes {
|
||||
animated_icon?: string;
|
||||
bg_image: string;
|
||||
complete: GiveEligible;
|
||||
daily_set_date?: string;
|
||||
description: string;
|
||||
destination: string;
|
||||
icon: string;
|
||||
image: string;
|
||||
link_text: string;
|
||||
max: string;
|
||||
offerid: string;
|
||||
progress: string;
|
||||
sc_bg_image: string;
|
||||
sc_bg_large_image: string;
|
||||
small_image: string;
|
||||
state: State;
|
||||
title: string;
|
||||
type: Type;
|
||||
give_eligible: GiveEligible;
|
||||
activity_max?: string;
|
||||
activity_progress?: string;
|
||||
is_wot?: GiveEligible;
|
||||
offer_counter?: string;
|
||||
promotional?: GiveEligible;
|
||||
parentPunchcards?: string;
|
||||
'classification.DescriptionText'?: string;
|
||||
'classification.PunchcardChildrenCount'?: string;
|
||||
'classification.PunchcardEndDate'?: Date;
|
||||
'classification.Template'?: string;
|
||||
'classification.TitleText'?: string;
|
||||
}
|
||||
|
||||
export enum GiveEligible {
|
||||
False = 'False',
|
||||
True = 'True'
|
||||
}
|
||||
|
||||
export enum State {
|
||||
Default = 'Default'
|
||||
}
|
||||
|
||||
export enum Type {
|
||||
Quiz = 'quiz',
|
||||
Urlreward = 'urlreward',
|
||||
UrlrewardUrlrewardUrlrewardUrlrewardUrlreward = 'urlreward,urlreward,urlreward,urlreward,urlreward'
|
||||
}
|
||||
|
||||
export interface DashboardFlights {
|
||||
dashboardbannernav: string;
|
||||
togglegiveuser: string;
|
||||
spotifyRedirect: string;
|
||||
give_eligible: GiveEligible;
|
||||
destination: string;
|
||||
}
|
||||
|
||||
export interface MachineTranslationPromo {
|
||||
}
|
||||
|
||||
export interface MorePromotion {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: { [key: string]: string };
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
exclusiveLockedFeatureType: string;
|
||||
exclusiveLockedFeatureStatus: string;
|
||||
}
|
||||
|
||||
export interface PunchCard {
|
||||
name: string;
|
||||
parentPromotion?: PromotionalItem;
|
||||
childPromotions: PromotionalItem[];
|
||||
}
|
||||
|
||||
export interface StreakBonusPromotion {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: StreakBonusPromotionAttributes;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export interface StreakBonusPromotionAttributes {
|
||||
hidden: GiveEligible;
|
||||
type: string;
|
||||
title: string;
|
||||
description: string;
|
||||
description_localizedkey: string;
|
||||
image: string;
|
||||
animated_icon: string;
|
||||
activity_progress: string;
|
||||
activity_max: string;
|
||||
bonus_earned: string;
|
||||
break_description: string;
|
||||
give_eligible: GiveEligible;
|
||||
destination: string;
|
||||
}
|
||||
|
||||
export interface StreakPromotion {
|
||||
lastUpdatedDate: Date;
|
||||
breakImageUrl: string;
|
||||
lifetimeMaxValue: number;
|
||||
bonusPointsEarned: number;
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: StreakPromotionAttributes;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export interface StreakPromotionAttributes {
|
||||
hidden: GiveEligible;
|
||||
type: string;
|
||||
title: string;
|
||||
image: string;
|
||||
activity_progress: string;
|
||||
last_updated: Date;
|
||||
break_image: string;
|
||||
lifetime_max: string;
|
||||
bonus_points: string;
|
||||
give_eligible: GiveEligible;
|
||||
destination: string;
|
||||
}
|
||||
|
||||
export interface UserInterests {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: UserInterestsAttributes;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export interface UserInterestsAttributes {
|
||||
hidden: GiveEligible;
|
||||
give_eligible: GiveEligible;
|
||||
destination: string;
|
||||
}
|
||||
|
||||
export interface UserProfile {
|
||||
ruid: string;
|
||||
attributes: UserProfileAttributes;
|
||||
}
|
||||
|
||||
export interface UserProfileAttributes {
|
||||
publisher: string;
|
||||
publisher_upd: Date;
|
||||
creative: string;
|
||||
creative_upd: Date;
|
||||
program: string;
|
||||
program_upd: Date;
|
||||
country: string;
|
||||
country_upd: Date;
|
||||
referrerhash: string;
|
||||
referrerhash_upd: Date;
|
||||
optout_upd: Date;
|
||||
language: string;
|
||||
language_upd: Date;
|
||||
target: string;
|
||||
target_upd: Date;
|
||||
created: Date;
|
||||
created_upd: Date;
|
||||
epuid: string;
|
||||
epuid_upd: Date;
|
||||
waitlistattributes: string;
|
||||
waitlistattributes_upd: Date;
|
||||
cbedc: GiveEligible;
|
||||
iscashbackeligible: GiveEligible;
|
||||
give_user: GiveEligible;
|
||||
}
|
||||
|
||||
export interface UserStatus {
|
||||
levelInfo: LevelInfo;
|
||||
availablePoints: number;
|
||||
lifetimePoints: number;
|
||||
lifetimePointsRedeemed: number;
|
||||
ePuid: string;
|
||||
redeemGoal: AutoRedeemItem;
|
||||
counters: Counters;
|
||||
lastOrder: LastOrder;
|
||||
dashboardImpression: DashboardImpression;
|
||||
referrerProgressInfo: ReferrerProgressInfo;
|
||||
isGiveModeOn: boolean;
|
||||
giveBalance: number;
|
||||
firstTimeGiveModeOptIn: null;
|
||||
giveOrganizationName: string;
|
||||
lifetimeGivingPoints: number;
|
||||
isRewardsUser: boolean;
|
||||
isMuidTrialUser: boolean;
|
||||
}
|
||||
|
||||
export interface Counters {
|
||||
pcSearch: DashboardImpression[];
|
||||
mobileSearch?: DashboardImpression[];
|
||||
shopAndEarn: DashboardImpression[];
|
||||
activityAndQuiz: ActivityAndQuiz[];
|
||||
dailyPoint: DashboardImpression[];
|
||||
}
|
||||
|
||||
export interface ActivityAndQuiz {
|
||||
name: string;
|
||||
priority: number;
|
||||
attributes: ActivityAndQuizAttributes;
|
||||
offerId: string;
|
||||
complete: boolean;
|
||||
counter: number;
|
||||
activityProgress: number;
|
||||
activityProgressMax: number;
|
||||
pointProgressMax: number;
|
||||
pointProgress: number;
|
||||
promotionType: string;
|
||||
promotionSubtype: string;
|
||||
title: string;
|
||||
extBannerTitle: string;
|
||||
titleStyle: string;
|
||||
theme: string;
|
||||
description: string;
|
||||
extBannerDescription: string;
|
||||
descriptionStyle: string;
|
||||
showcaseTitle: string;
|
||||
showcaseDescription: string;
|
||||
imageUrl: string;
|
||||
dynamicImage: string;
|
||||
smallImageUrl: string;
|
||||
backgroundImageUrl: string;
|
||||
showcaseBackgroundImageUrl: string;
|
||||
showcaseBackgroundLargeImageUrl: string;
|
||||
promotionBackgroundLeft: string;
|
||||
promotionBackgroundRight: string;
|
||||
iconUrl: string;
|
||||
animatedIconUrl: string;
|
||||
animatedLargeBackgroundImageUrl: string;
|
||||
destinationUrl: string;
|
||||
linkText: string;
|
||||
hash: string;
|
||||
activityType: string;
|
||||
isRecurring: boolean;
|
||||
isHidden: boolean;
|
||||
isTestOnly: boolean;
|
||||
isGiveEligible: boolean;
|
||||
level: string;
|
||||
slidesCount: number;
|
||||
legalText: string;
|
||||
legalLinkText: string;
|
||||
deviceType: string;
|
||||
}
|
||||
|
||||
export interface ActivityAndQuizAttributes {
|
||||
type: string;
|
||||
title: string;
|
||||
link_text: string;
|
||||
description: string;
|
||||
foreground_color: string;
|
||||
image: string;
|
||||
recurring: string;
|
||||
destination: string;
|
||||
'classification.ShowProgress': GiveEligible;
|
||||
hidden: GiveEligible;
|
||||
give_eligible: GiveEligible;
|
||||
}
|
||||
|
||||
export interface LastOrder {
|
||||
id: null;
|
||||
price: number;
|
||||
status: null;
|
||||
sku: null;
|
||||
timestamp: Date;
|
||||
catalogItem: null;
|
||||
}
|
||||
|
||||
export interface LevelInfo {
|
||||
activeLevel: string;
|
||||
activeLevelName: string;
|
||||
progress: number;
|
||||
progressMax: number;
|
||||
levels: Level[];
|
||||
benefitsPromotion: DashboardImpression;
|
||||
}
|
||||
|
||||
export interface Level {
|
||||
key: string;
|
||||
active: boolean;
|
||||
name: string;
|
||||
tasks: CloseLink[];
|
||||
privileges: CloseLink[];
|
||||
}
|
||||
|
||||
export interface ReferrerProgressInfo {
|
||||
pointsEarned: number;
|
||||
pointsMax: number;
|
||||
isComplete: boolean;
|
||||
promotions: string[];
|
||||
}
|
||||
44
src/interface/GoogleDailyTrends.ts
Normal file
44
src/interface/GoogleDailyTrends.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
export interface GoogleTrends {
|
||||
default: Default;
|
||||
}
|
||||
|
||||
export interface Default {
|
||||
trendingSearchesDays: TrendingSearchesDay[];
|
||||
endDateForNextRequest: string;
|
||||
rssFeedPageUrl: string;
|
||||
}
|
||||
|
||||
export interface TrendingSearchesDay {
|
||||
date: string;
|
||||
formattedDate: string;
|
||||
trendingSearches: TrendingSearch[];
|
||||
}
|
||||
|
||||
export interface TrendingSearch {
|
||||
title: Title;
|
||||
formattedTraffic: string;
|
||||
relatedQueries: Title[];
|
||||
image: Image;
|
||||
articles: Article[];
|
||||
shareUrl: string;
|
||||
}
|
||||
|
||||
export interface Article {
|
||||
title: string;
|
||||
timeAgo: string;
|
||||
source: string;
|
||||
image?: Image;
|
||||
url: string;
|
||||
snippet: string;
|
||||
}
|
||||
|
||||
export interface Image {
|
||||
newsUrl: string;
|
||||
source: string;
|
||||
imageUrl: string;
|
||||
}
|
||||
|
||||
export interface Title {
|
||||
query: string;
|
||||
exploreLink: string;
|
||||
}
|
||||
9
src/interface/OAuth.ts
Normal file
9
src/interface/OAuth.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export interface OAuth {
|
||||
access_token: string;
|
||||
refresh_token: string;
|
||||
scope: string;
|
||||
expires_in: number;
|
||||
ext_expires_in: number;
|
||||
foci: string;
|
||||
token_type: string;
|
||||
}
|
||||
7
src/interface/Points.ts
Normal file
7
src/interface/Points.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface EarnablePoints {
|
||||
desktopSearchPoints: number
|
||||
mobileSearchPoints: number
|
||||
dailySetPoints: number
|
||||
morePromotionsPoints: number
|
||||
totalEarnablePoints: number
|
||||
}
|
||||
50
src/interface/QuizData.ts
Normal file
50
src/interface/QuizData.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
export interface QuizData {
|
||||
offerId: string;
|
||||
quizId: string;
|
||||
quizCategory: string;
|
||||
IsCurrentQuestionCompleted: boolean;
|
||||
quizRenderSummaryPage: boolean;
|
||||
resetQuiz: boolean;
|
||||
userClickedOnHint: boolean;
|
||||
isDemoEnabled: boolean;
|
||||
correctAnswer: string;
|
||||
isMultiChoiceQuizType: boolean;
|
||||
isPutInOrderQuizType: boolean;
|
||||
isListicleQuizType: boolean;
|
||||
isWOTQuizType: boolean;
|
||||
isBugsForRewardsQuizType: boolean;
|
||||
currentQuestionNumber: number;
|
||||
maxQuestions: number;
|
||||
resetTrackingCounters: boolean;
|
||||
showWelcomePanel: boolean;
|
||||
isAjaxCall: boolean;
|
||||
showHint: boolean;
|
||||
numberOfOptions: number;
|
||||
isMobile: boolean;
|
||||
inRewardsMode: boolean;
|
||||
enableDailySetWelcomePane: boolean;
|
||||
enableDailySetNonWelcomePane: boolean;
|
||||
isDailySetUrlOffer: boolean;
|
||||
isDailySetFlightEnabled: boolean;
|
||||
dailySetUrlOfferId: string;
|
||||
earnedCredits: number;
|
||||
maxCredits: number;
|
||||
creditsPerQuestion: number;
|
||||
userAlreadyClickedOptions: number;
|
||||
hasUserClickedOnOption: boolean;
|
||||
recentAnswerChoice: string;
|
||||
sessionTimerSeconds: string;
|
||||
isOverlayMinimized: number;
|
||||
ScreenReaderMsgOnMove: string;
|
||||
ScreenReaderMsgOnDrop: string;
|
||||
IsPartialPointsEnabled: boolean;
|
||||
PrioritizeUrlOverCookies: boolean;
|
||||
UseNewReportActivityAPI: boolean;
|
||||
CorrectlyAnsweredQuestionCount: number;
|
||||
showJoinRewardsPage: boolean;
|
||||
CorrectOptionAnswer_WOT: string;
|
||||
WrongOptionAnswer_WOT: string;
|
||||
enableSlideAnimation: boolean;
|
||||
ariaLoggingEnabled: boolean;
|
||||
UseQuestionIndexInActivityId: boolean;
|
||||
}
|
||||
4
src/interface/Search.ts
Normal file
4
src/interface/Search.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export interface GoogleSearch {
|
||||
topic: string;
|
||||
related: string[];
|
||||
}
|
||||
62
src/interface/UserAgentUtil.ts
Normal file
62
src/interface/UserAgentUtil.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
// Chrome Product Data
|
||||
export interface ChromeVersion {
|
||||
timestamp: Date;
|
||||
channels: Channels;
|
||||
}
|
||||
|
||||
export interface Channels {
|
||||
Stable: Beta;
|
||||
Beta: Beta;
|
||||
Dev: Beta;
|
||||
Canary: Beta;
|
||||
}
|
||||
|
||||
export interface Beta {
|
||||
channel: string;
|
||||
version: string;
|
||||
revision: string;
|
||||
}
|
||||
|
||||
// Edge Product Data
|
||||
export interface EdgeVersion {
|
||||
Product: string;
|
||||
Releases: Release[];
|
||||
}
|
||||
|
||||
export interface Release {
|
||||
ReleaseId: number;
|
||||
Platform: Platform;
|
||||
Architecture: Architecture;
|
||||
CVEs: string[];
|
||||
ProductVersion: string;
|
||||
Artifacts: Artifact[];
|
||||
PublishedTime: Date;
|
||||
ExpectedExpiryDate: Date;
|
||||
}
|
||||
|
||||
export enum Architecture {
|
||||
Arm64 = 'arm64',
|
||||
Universal = 'universal',
|
||||
X64 = 'x64',
|
||||
X86 = 'x86'
|
||||
}
|
||||
|
||||
export interface Artifact {
|
||||
ArtifactName: string;
|
||||
Location: string;
|
||||
Hash: string;
|
||||
HashAlgorithm: HashAlgorithm;
|
||||
SizeInBytes: number;
|
||||
}
|
||||
|
||||
export enum HashAlgorithm {
|
||||
Sha256 = 'SHA256'
|
||||
}
|
||||
|
||||
export enum Platform {
|
||||
Android = 'Android',
|
||||
IOS = 'iOS',
|
||||
Linux = 'Linux',
|
||||
MACOS = 'MacOS',
|
||||
Windows = 'Windows'
|
||||
}
|
||||
Reference in New Issue
Block a user