Skip to content

Commit

Permalink
WIP: Make API request from service worker
Browse files Browse the repository at this point in the history
  • Loading branch information
hult committed May 9, 2023
1 parent 0ecd277 commit 241eba5
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 33 deletions.
1 change: 1 addition & 0 deletions clients/apps/chrome-extension/extension/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
]
},
{
"run_at": "document_end",
"js": ["auth.js"],
"matches": [
"*://dashboard.polar.sh/dashboard/settings/extension",
Expand Down
2 changes: 1 addition & 1 deletion clients/apps/chrome-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"build": "npm run build:js && npm run build:css",
"build:prod": "API_URL=https://api.polar.sh WEB_URL=https://dashboard.polar.sh npm run build",
"build:css": "tailwindcss -i ./src/index.css -o ./extension/index.css",
"build:js": "webpack --config webpack.config.js && mv dist/content.js ./extension && mv dist/auth.js ./extension",
"build:js": "webpack --config webpack.config.js && mv dist/content.js ./extension && mv dist/auth.js ./extension && mv dist/service-worker.js ./extension",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
Expand Down
3 changes: 3 additions & 0 deletions clients/apps/chrome-extension/src/auth.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
console.log('AUTH CONTENT SCRIPT')
window.addEventListener('load', function () {
const interval = setInterval(async function () {
console.log('LOOKING FOR TOKEN')
const tokenElem = document.getElementById('polar-token')
if (tokenElem && tokenElem.innerText) {
console.log('FOUND IT')
clearInterval(interval)
await chrome.storage.local.set({ token: tokenElem.innerText })
window.close()
Expand Down
42 changes: 10 additions & 32 deletions clients/apps/chrome-extension/src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Platforms } from 'polarkit/api/client'
import React from 'react'
import { createRoot } from 'react-dom/client'
import api, { isAuthenticated } from './api'
import { isAuthenticated } from './api'
import AuthorizationBanner from './components/AuthorizationBanner'
import CachedIssueListItemDecoration from './components/CachedIssueListItemDecoration'
import './index.css'
Expand All @@ -20,34 +19,13 @@ const getIssueNumbers = (issues: NodeListOf<Element>) => {
return issueNumbers
}

const apiRequestDecoration = (issueNumbers: string[]) => {
api.extension
.listIssuesForExtension({
platform: Platforms.GITHUB,
orgName,
repoName,
numbers: issueNumbers.join(','),
})
.then((extensionIssues) => {
// Add all the issues to chrome.storage
const itemsToAdd = {}
extensionIssues.forEach((issue) => {
itemsToAdd[`issues/${orgName}/${repoName}/${issue.number}`] = issue
})
chrome.storage.local.set(itemsToAdd)

// Remove the issues we asked for but didn't get a response for from the cache
const keysToRemove = issueNumbers.filter(
(issueNumber) =>
!extensionIssues.some(
(extensionIssue) =>
extensionIssue.number.toString() === issueNumber,
),
)
chrome.storage.local.remove(
keysToRemove.map((k) => `issues/${orgName}/${repoName}/${k}`),
)
})
const requestDecoration = (issueNumbers: string[]) => {
return chrome.runtime.sendMessage({
type: 'decorate-issues',
orgName,
repoName,
issueNumbers,
})
}

const mountDecoration = (issues: NodeListOf<Element>) => {
Expand Down Expand Up @@ -89,7 +67,7 @@ const decorateIssues = () => {
const issues = findIssueNodes(document)
if (issues.length > 0) {
const issueNumbers = getIssueNumbers(issues)
apiRequestDecoration(issueNumbers)
requestDecoration(issueNumbers)
mountDecoration(issues)
}

Expand All @@ -106,7 +84,7 @@ const decorateIssues = () => {
const issues = findIssueNodes(element)
if (issues.length > 0) {
const issueNumbers = getIssueNumbers(issues)
apiRequestDecoration(issueNumbers)
requestDecoration(issueNumbers)
mountDecoration(issues)
}
}
Expand Down
43 changes: 43 additions & 0 deletions clients/apps/chrome-extension/src/service-worker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { Platforms } from 'polarkit/api/client'
import api from './api'

const apiRequestDecoration = async (
orgName: string,
repoName: string,
issueNumbers: string[],
) => {
const extensionIssues = await api.extension.listIssuesForExtension({
platform: Platforms.GITHUB,
orgName,
repoName,
numbers: issueNumbers.join(','),
})

// Add all the issues to chrome.storage
const itemsToAdd = {}
extensionIssues.forEach((issue) => {
itemsToAdd[`issues/${orgName}/${repoName}/${issue.number}`] = issue
})
chrome.storage.local.set(itemsToAdd)

// Remove the issues we asked for but didn't get a response for from the cache
const keysToRemove = issueNumbers.filter(
(issueNumber) =>
!extensionIssues.some(
(extensionIssue) => extensionIssue.number.toString() === issueNumber,
),
)
chrome.storage.local.remove(
keysToRemove.map((k) => `issues/${orgName}/${repoName}/${k}`),
)
}

chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
const { type, orgName, repoName, issueNumbers } = message
if (type === 'decorate-issues') {
await apiRequestDecoration(orgName, repoName, issueNumbers)
return true
}
})

export {}
1 change: 1 addition & 0 deletions clients/apps/chrome-extension/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module.exports = {
entry: {
content: "./src/index.tsx",
auth: "./src/auth.ts",
"service-worker": "./src/service-worker.ts",
},
mode: "production",
module: {
Expand Down

0 comments on commit 241eba5

Please sign in to comment.