Skip to content

Commit

Permalink
refactor: dynamically register key auto-add scripts (#745)
Browse files Browse the repository at this point in the history
  • Loading branch information
sidvishnoi authored Dec 2, 2024
1 parent a5ff225 commit 7db003c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 28 deletions.
2 changes: 2 additions & 0 deletions src/background/services/background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
isErrorWithKey,
success,
} from '@/shared/helpers';
import { KeyAutoAddService } from './keyAutoAdd';
import { OpenPaymentsClientError } from '@interledger/open-payments/dist/client/error';
import { getTab, OPEN_PAYMENTS_ERRORS } from '@/background/utils';
import { PERMISSION_HOSTS } from '@/shared/defines';
Expand Down Expand Up @@ -65,6 +66,7 @@ export class Background {
this.bindTabHandlers();
this.bindWindowHandlers();
this.sendToPopup.start();
await KeyAutoAddService.registerContentScripts({ browser: this.browser });
}

// TODO: When Firefox 128 is old enough, inject directly via manifest.
Expand Down
52 changes: 37 additions & 15 deletions src/background/services/keyAutoAdd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
withResolvers,
type ErrorWithKeyLike,
} from '@/shared/helpers';
import type { Browser, Runtime, Tabs } from 'webextension-polyfill';
import type { Browser, Runtime, Scripting, Tabs } from 'webextension-polyfill';
import type { WalletAddress } from '@interledger/open-payments';
import type { TabId } from '@/shared/types';
import type { Cradle } from '@/background/container';
Expand Down Expand Up @@ -45,19 +45,19 @@ export class KeyAutoAddService {
}

async addPublicKeyToWallet(walletAddress: WalletAddress) {
const info = walletAddressToProvider(walletAddress);
const keyAddUrl = walletAddressToProvider(walletAddress);
try {
const { publicKey, keyId } = await this.storage.get([
'publicKey',
'keyId',
]);
this.updateConnectState();
await this.process(info.url, {
await this.process(keyAddUrl, {
publicKey,
keyId,
walletAddressUrl: walletAddress.id,
nickName: this.t('appName') + ' - ' + this.browserName,
keyAddUrl: info.url,
keyAddUrl,
});
await this.validate(walletAddress.id, keyId);
} catch (error) {
Expand Down Expand Up @@ -178,25 +178,47 @@ export class KeyAutoAddService {
return false;
}
}

static async registerContentScripts({ browser }: Pick<Cradle, 'browser'>) {
const { scripting } = browser;
const existingScripts = await scripting.getRegisteredContentScripts();
const existingScriptIds = new Set(existingScripts.map((s) => s.id));
const scripts = getContentScripts().filter(
(s) => !existingScriptIds.has(s.id),
);
await scripting.registerContentScripts(scripts);
}
}

function getContentScripts(): Scripting.RegisteredContentScript[] {
return [
{
id: 'keyAutoAdd/testWallet',
matches: [
'https://wallet.interledger-test.dev/*',
'https://wallet.interledger.cards/*',
],
js: ['content/keyAutoAdd/testWallet.js'],
},
{
id: 'keyAutoAdd/fynbos',
matches: ['https://eu1.fynbos.dev/*', 'https://wallet.fynbos.app/*'],
js: ['content/keyAutoAdd/fynbos.js'],
},
];
}

export function walletAddressToProvider(walletAddress: WalletAddress): {
url: string;
} {
function walletAddressToProvider(walletAddress: WalletAddress): string {
const { host } = new URL(walletAddress.id);
switch (host) {
case 'ilp.interledger-test.dev':
return {
url: 'https://wallet.interledger-test.dev/settings/developer-keys',
};
return 'https://wallet.interledger-test.dev/settings/developer-keys';
case 'ilp.interledger.cards':
return {
url: 'https://wallet.interledger.cards/settings/developer-keys',
};
return 'https://wallet.interledger.cards/settings/developer-keys';
case 'eu1.fynbos.me':
return { url: 'https://eu1.fynbos.dev/settings/keys' };
return 'https://eu1.fynbos.dev/settings/keys';
case 'fynbos.me':
return { url: 'https://wallet.fynbos.app/settings/keys' };
return 'https://wallet.fynbos.app/settings/keys';
default:
throw new ErrorWithKey('connectWalletKeyService_error_notImplemented');
}
Expand Down
13 changes: 0 additions & 13 deletions src/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,6 @@
"js": ["content/content.js"],
"run_at": "document_start",
"all_frames": true
},
{
"matches": [
"https://wallet.interledger-test.dev/*",
"https://wallet.interledger.cards/*"
],
"js": ["content/keyAutoAdd/testWallet.js"],
"run_at": "document_end"
},
{
"matches": ["https://eu1.fynbos.dev/*", "https://wallet.fynbos.app/*"],
"js": ["content/keyAutoAdd/fynbos.js"],
"run_at": "document_end"
}
],
"background": {
Expand Down

0 comments on commit 7db003c

Please sign in to comment.