From 5a6aa9fb23d0db762bfefdb17f20fcbf0fd26874 Mon Sep 17 00:00:00 2001 From: Step7750 Date: Sun, 7 Apr 2024 13:12:54 -0600 Subject: [PATCH] Revert #201 --- manifest.json | 1 - src/background.ts | 17 ---- src/lib/bridge/client.ts | 29 +++--- src/lib/bridge/handlers/handlers.ts | 8 -- src/lib/bridge/handlers/has_permissions.ts | 24 ----- src/lib/bridge/handlers/send_cookies.ts | 52 ---------- src/lib/bridge/handlers/types.ts | 4 - src/lib/components/trade_offers/auto_track.ts | 98 ------------------- src/lib/page_scripts/trade_offers.ts | 37 ------- src/lib/utils/alarm.ts | 42 -------- 10 files changed, 13 insertions(+), 299 deletions(-) delete mode 100644 src/lib/bridge/handlers/has_permissions.ts delete mode 100644 src/lib/bridge/handlers/send_cookies.ts delete mode 100644 src/lib/components/trade_offers/auto_track.ts delete mode 100644 src/lib/utils/alarm.ts diff --git a/manifest.json b/manifest.json index 4b596196..cbbefbe2 100644 --- a/manifest.json +++ b/manifest.json @@ -44,7 +44,6 @@ "type": "module" }, "permissions": ["storage", "scripting"], - "optional_permissions": ["cookies", "alarms"], "host_permissions": [ "*://*.steamcommunity.com/market/listings/730/*", "*://*.steamcommunity.com/id/*/inventory*", diff --git a/src/background.ts b/src/background.ts index 8f44a312..56d3aeb3 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1,9 +1,6 @@ import {Handle} from './lib/bridge/server'; import {InternalResponseBundle} from './lib/bridge/types'; import MessageSender = chrome.runtime.MessageSender; -import {ClientSend} from './lib/bridge/client'; -import {SendCookies} from './lib/bridge/handlers/send_cookies'; -import {setupCookieAlarm} from './lib/utils/alarm'; function unifiedHandler(request: any, sender: MessageSender, sendResponse: (response?: any) => void) { Handle(request, sender) @@ -23,17 +20,7 @@ function unifiedHandler(request: any, sender: MessageSender, sendResponse: (resp }); } -function requestPermissions(permissions: string[], sendResponse: any) { - chrome.permissions.request({permissions}, (granted) => sendResponse(granted)); - - return true; -} - chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - if (request.message === 'requestPermissions') { - return requestPermissions(request.permissions, sendResponse); - } - unifiedHandler(request, sender, sendResponse); return true; }); @@ -42,7 +29,3 @@ chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) => unifiedHandler(request, sender, sendResponse); return true; }); - -chrome.runtime.onInstalled.addListener(async ({reason}) => { - await setupCookieAlarm(true); -}); diff --git a/src/lib/bridge/client.ts b/src/lib/bridge/client.ts index 1fb644dd..d3287e01 100644 --- a/src/lib/bridge/client.ts +++ b/src/lib/bridge/client.ts @@ -2,7 +2,6 @@ import {InternalRequestBundle, InternalResponseBundle, RequestHandler, Version} import {isFirefox, runtimeNamespace} from '../utils/detect'; import {inPageContext} from '../utils/snips'; import {g_PostMessageBus} from '../bus/post_message_bus'; -import {DeferredPromise} from '../utils/deferred_promise'; function canUseSendMessage() { // Not supported in Firefox Page Context @@ -23,23 +22,21 @@ export async function ClientSend(handler: RequestHandler, }; if (canUseSendMessage()) { - const promise = new DeferredPromise(); - - // @ts-ignore Bad types - runtimeNamespace().runtime.sendMessage( - (typeof window !== 'undefined' && window.CSFLOAT_EXTENSION_ID) || chrome.runtime.id, - bundle, + return new Promise((resolve, reject) => { // @ts-ignore Bad types - (resp: InternalResponseBundle) => { - if (resp?.response) { - promise.resolve(resp.response); - } else { - promise.reject(resp?.error); + runtimeNamespace().runtime.sendMessage( + window.CSFLOAT_EXTENSION_ID || chrome.runtime.id, + bundle, + // @ts-ignore Bad types + (resp: InternalResponseBundle) => { + if (resp?.response) { + resolve(resp.response); + } else { + reject(resp?.error); + } } - } - ); - - return promise.promise(); + ); + }); } else { // Fallback to postmessage bus for browsers that don't implement // specs fully diff --git a/src/lib/bridge/handlers/handlers.ts b/src/lib/bridge/handlers/handlers.ts index 86059dae..5234f5af 100644 --- a/src/lib/bridge/handlers/handlers.ts +++ b/src/lib/bridge/handlers/handlers.ts @@ -12,10 +12,6 @@ import {RequestType} from './types'; import {FetchExtensionFile} from './fetch_extension_file'; import {AnnotateOffer} from './annotate_offer'; import {ExtensionVersion} from './extension_version'; -import {SendCookies} from './send_cookies'; -import {HasPermissions} from './has_permissions'; -import {MetaSettings} from './meta_settings'; -import {ProveTradesToken} from './prove_trades_token'; export const HANDLERS_MAP: {[key in RequestType]: RequestHandler} = { [RequestType.EXECUTE_SCRIPT_ON_PAGE]: ExecuteScriptOnPage, @@ -30,8 +26,4 @@ export const HANDLERS_MAP: {[key in RequestType]: RequestHandler} = { [RequestType.FETCH_EXTENSION_FILE]: FetchExtensionFile, [RequestType.ANNOTATE_OFFER]: AnnotateOffer, [RequestType.EXTENSION_VERSION]: ExtensionVersion, - [RequestType.SEND_COOKIES]: SendCookies, - [RequestType.HAS_PERMISSIONS]: HasPermissions, - [RequestType.META_SETTINGS]: MetaSettings, - [RequestType.PROVE_TRADES_TOKEN]: ProveTradesToken, }; diff --git a/src/lib/bridge/handlers/has_permissions.ts b/src/lib/bridge/handlers/has_permissions.ts deleted file mode 100644 index 31f56949..00000000 --- a/src/lib/bridge/handlers/has_permissions.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {SimpleHandler} from './main'; -import {RequestType} from './types'; - -export interface HasPermissionsRequest { - permissions: string[]; -} - -export interface HasPermissionsResponse { - granted: boolean; -} - -export const HasPermissions = new SimpleHandler( - RequestType.HAS_PERMISSIONS, - async (req) => { - // @ts-ignore - const granted = (await chrome.permissions.contains({ - permissions: req.permissions, - })) as boolean; - - return { - granted, - }; - } -); diff --git a/src/lib/bridge/handlers/send_cookies.ts b/src/lib/bridge/handlers/send_cookies.ts deleted file mode 100644 index 70e7a521..00000000 --- a/src/lib/bridge/handlers/send_cookies.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {SimpleHandler} from './main'; -import {RequestType} from './types'; -import {setupCookieAlarm} from '../../utils/alarm'; - -export interface SendCookiesRequest {} - -export interface SendCookiesResponse {} - -export const SendCookies = new SimpleHandler( - RequestType.SEND_COOKIES, - async (req) => { - const cookies = await chrome.cookies.getAll({ - domain: 'steamcommunity.com', - }); - - // For use in verifying trades on CSFloat, opt-in - const formatted = cookies - .filter((e) => { - return [ - 'timezoneOffset', - 'Steam_Language', - 'browserid', - 'sessionid', - 'steamCountry', - 'steamLoginSecure', - ].includes(e.name); - }) - .map((e) => { - return { - name: e.name, - value: e.value, - expiration: e.expirationDate, - }; - }); - - const resp = await fetch(`https://csfloat.com/api/v1/me/steam-cookies`, { - credentials: 'include', - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - cookies: formatted, - }), - }); - - // Check if an alarm is setup - await setupCookieAlarm(); - - return {} as SendCookiesResponse; - } -); diff --git a/src/lib/bridge/handlers/types.ts b/src/lib/bridge/handlers/types.ts index 0e44554a..a94e6308 100644 --- a/src/lib/bridge/handlers/types.ts +++ b/src/lib/bridge/handlers/types.ts @@ -11,8 +11,4 @@ export enum RequestType { FETCH_EXTENSION_FILE, ANNOTATE_OFFER, EXTENSION_VERSION, - SEND_COOKIES, - HAS_PERMISSIONS, - META_SETTINGS, - PROVE_TRADES_TOKEN, } diff --git a/src/lib/components/trade_offers/auto_track.ts b/src/lib/components/trade_offers/auto_track.ts deleted file mode 100644 index ab1971f6..00000000 --- a/src/lib/components/trade_offers/auto_track.ts +++ /dev/null @@ -1,98 +0,0 @@ -import {css, html} from 'lit'; - -import {CustomElement, InjectAfter, InjectionMode} from '../injectors'; -import {FloatElement} from '../custom'; -import '../common/ui/steam-button'; -import {ClientSend} from '../../bridge/client'; -import {state} from 'lit/decorators.js'; -import {FetchPendingTrades} from '../../bridge/handlers/fetch_pending_trades'; -import {HasPermissions} from '../../bridge/handlers/has_permissions'; -import {MetaSettings} from '../../bridge/handlers/meta_settings'; - -@CustomElement() -@InjectAfter( - '.maincontent .profile_leftcol .nonresponsive_hidden:not(.responsive_createtradeoffer)', - InjectionMode.ONCE -) -export class AutoTrackWidget extends FloatElement { - @state() - show = false; - - static styles = [ - ...FloatElement.styles, - css` - .container { - margin-top: 10px; - margin-bottom: 10px; - padding: 15px; - background-color: rgb(48, 48, 48); - color: white; - display: flex; - justify-content: space-between; - align-items: center; - } - - .container.warning { - background-color: rgb(179, 0, 0); - } - - .float-icon { - float: left; - } - - .item-name { - font-size: 18px; - margin-left: 15px; - line-height: 32px; - } - - .sale-info { - padding-left: 45px; - color: darkgrey; - } - `, - ]; - - async connectedCallback() { - super.connectedCallback(); - - try { - const meta = await ClientSend(MetaSettings, {}); - if (!meta.enable_auto_trade) { - return; - } - - await ClientSend(FetchPendingTrades, {}); - - const hasPermissions = await ClientSend(HasPermissions, {permissions: ['cookies', 'alarms']}); - if (!hasPermissions) { - this.show = true; - } - } catch (e) { - console.info('user is not logged into CSFloat or something went wrong'); - } - } - - render() { - return this.show - ? html` -
-
-
- -
- Automatically Track Offers -
Allow CSFloat Market to automatically track and create offers.
-
- -
- ` - : html``; - } -} diff --git a/src/lib/page_scripts/trade_offers.ts b/src/lib/page_scripts/trade_offers.ts index dec4b4a9..8c1d62e1 100644 --- a/src/lib/page_scripts/trade_offers.ts +++ b/src/lib/page_scripts/trade_offers.ts @@ -1,43 +1,6 @@ import {init} from './utils'; import '../components/trade_offers/offer_id'; -import '../components/trade_offers/auto_track'; -import {inPageContext} from '../utils/snips'; -import {ClientSend} from '../bridge/client'; -import {SendCookies} from '../bridge/handlers/send_cookies'; init('src/lib/page_scripts/trade_offers.js', main); function main() {} - -if (!inPageContext()) { - const refresh = setInterval(() => { - const widget = document.getElementsByTagName('csfloat-auto-track-widget'); - if (!widget || widget.length === 0) { - return; - } - - const btn = widget[0]?.shadowRoot?.getElementById('csfloat-enable-tracking'); - if (!btn) { - return; - } - - btn.addEventListener('click', async () => { - chrome.runtime.sendMessage( - { - message: 'requestPermissions', - permissions: ['cookies', 'alarms'], - }, - (granted) => { - if (granted) { - ClientSend(SendCookies, {}); - widget[0].parentElement?.removeChild(widget[0]); - } else { - alert('Failed to obtain permissions'); - } - } - ); - }); - - clearInterval(refresh); - }, 500); -} diff --git a/src/lib/utils/alarm.ts b/src/lib/utils/alarm.ts deleted file mode 100644 index 2ae26dbb..00000000 --- a/src/lib/utils/alarm.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {SendCookies} from '../bridge/handlers/send_cookies'; - -const COOKIE_ALARM_NAME = 'send-cookie-alarm'; - -// MUST be called from the background script -export async function setupCookieAlarm(initial = false) { - // @ts-ignore - const granted = (await chrome.permissions.contains({ - permissions: ['alarms', 'cookies'], - })) as boolean; - - if (!granted || !chrome.alarms) { - return; - } - - const existingAlarm = await chrome.alarms.get(COOKIE_ALARM_NAME); - if (existingAlarm) { - if (initial) { - createAlarmListener(); - } - - // Already exists, return - return; - } - - await chrome.alarms.create(COOKIE_ALARM_NAME, { - delayInMinutes: 1, - periodInMinutes: 60 * 6, // 6 hours - }); - - createAlarmListener(); -} - -function createAlarmListener() { - chrome.alarms?.onAlarm?.addListener(async (alarm) => { - if (alarm.name !== COOKIE_ALARM_NAME) { - return; - } - - await SendCookies.handleRequest({}, {}); - }); -}