Skip to content

Commit 42cb685

Browse files
committed
Periodically Updates Cookie in Background
1 parent 3e87a4c commit 42cb685

File tree

5 files changed

+58
-3
lines changed

5 files changed

+58
-3
lines changed

src/background.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import {Handle} from './lib/bridge/server';
22
import {InternalResponseBundle} from './lib/bridge/types';
33
import MessageSender = chrome.runtime.MessageSender;
4+
import {ClientSend} from './lib/bridge/client';
5+
import {SendCookies} from './lib/bridge/handlers/send_cookies';
6+
import {setupCookieAlarm} from './lib/utils/alarm';
47

58
function unifiedHandler(request: any, sender: MessageSender, sendResponse: (response?: any) => void) {
69
Handle(request, sender)
@@ -39,3 +42,7 @@ chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) =>
3942
unifiedHandler(request, sender, sendResponse);
4043
return true;
4144
});
45+
46+
chrome.runtime.onInstalled.addListener(async ({reason}) => {
47+
await setupCookieAlarm(true);
48+
});

src/lib/bridge/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export async function ClientSend<Req, Resp>(handler: RequestHandler<Req, Resp>,
2727

2828
// @ts-ignore Bad types
2929
runtimeNamespace().runtime.sendMessage(
30-
window.CSFLOAT_EXTENSION_ID || chrome.runtime.id,
30+
(typeof window !== 'undefined' && window.CSFLOAT_EXTENSION_ID) || chrome.runtime.id,
3131
bundle,
3232
// @ts-ignore Bad types
3333
(resp: InternalResponseBundle) => {

src/lib/bridge/handlers/send_cookies.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {SimpleHandler} from './main';
22
import {RequestType} from './types';
3+
import {setupCookieAlarm} from '../../utils/alarm';
34

45
export interface SendCookiesRequest {}
56

@@ -43,6 +44,9 @@ export const SendCookies = new SimpleHandler<SendCookiesRequest, SendCookiesResp
4344
}),
4445
});
4546

47+
// Check if an alarm is setup
48+
await setupCookieAlarm();
49+
4650
return {} as SendCookiesResponse;
4751
}
4852
);

src/lib/components/trade_offers/auto_track.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import {CustomElement, InjectAfter, InjectionMode} from '../injectors';
44
import {FloatElement} from '../custom';
55
import '../common/ui/steam-button';
66
import {ClientSend} from '../../bridge/client';
7-
import {SendCookies} from '../../bridge/handlers/send_cookies';
87
import {state} from 'lit/decorators.js';
98
import {FetchPendingTrades} from '../../bridge/handlers/fetch_pending_trades';
109
import {HasPermissions} from '../../bridge/handlers/has_permissions';
1110

1211
@CustomElement()
13-
@InjectAfter('.maincontent .profile_leftcol .nonresponsive_hidden', InjectionMode.ONCE)
12+
@InjectAfter(
13+
'.maincontent .profile_leftcol .nonresponsive_hidden:not(.responsive_createtradeoffer)',
14+
InjectionMode.ONCE
15+
)
1416
export class AutoTrackWidget extends FloatElement {
1517
@state()
1618
show = false;

src/lib/utils/alarm.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {SendCookies} from '../bridge/handlers/send_cookies';
2+
3+
const COOKIE_ALARM_NAME = 'send-cookie-alarm';
4+
5+
// MUST be called from the background script
6+
export async function setupCookieAlarm(initial = false) {
7+
// @ts-ignore
8+
const granted = (await chrome.permissions.contains({
9+
permissions: ['alarms', 'cookies'],
10+
})) as boolean;
11+
12+
if (!granted) {
13+
return;
14+
}
15+
16+
const existingAlarm = await chrome.alarms.get(COOKIE_ALARM_NAME);
17+
if (existingAlarm) {
18+
if (initial) {
19+
createAlarmListener();
20+
}
21+
22+
// Already exists, return
23+
return;
24+
}
25+
26+
await chrome.alarms.create(COOKIE_ALARM_NAME, {
27+
delayInMinutes: 1,
28+
periodInMinutes: 60 * 6, // 6 hours
29+
});
30+
31+
createAlarmListener();
32+
}
33+
34+
function createAlarmListener() {
35+
chrome.alarms.onAlarm.addListener(async (alarm) => {
36+
if (alarm.name !== COOKIE_ALARM_NAME) {
37+
return;
38+
}
39+
40+
await SendCookies.handleRequest({}, {});
41+
});
42+
}

0 commit comments

Comments
 (0)