Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion @shared/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"@blockaid/client": "0.31.0",
"@stellar/js-xdr": "4.0.0",
"bignumber.js": "9.3.0",
"prettier": "3.5.3",
"prettier": "3.8.4",
"stellar-sdk": "npm:@stellar/stellar-sdk@16.0.0-rc.1",
"stellar-sdk-next": "npm:@stellar/stellar-sdk@16.0.0-rc.1",
"typescript": "5.8.3",
Expand Down
2 changes: 1 addition & 1 deletion @stellar/freighter-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"types": "build/@stellar/freighter-api/src/index.d.ts",
"dependencies": {
"buffer": "6.0.3",
"semver": "7.7.1"
"semver": "7.8.4"
},
"devDependencies": {
"@lavamoat/allow-scripts": "3.3.2"
Expand Down
12 changes: 6 additions & 6 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
]
},
"dependencies": {
"@docusaurus/core": "3.6.3",
"@docusaurus/preset-classic": "3.6.3",
"@docusaurus/core": "3.10.1",
"@docusaurus/preset-classic": "3.10.1",
"@stellar/freighter-api": "latest",
"clsx": "2.1.1",
"react": "19.0.3",
"react-dom": "19.0.3",
"react-is": "19.0.3",
"styled-components": "6.1.14"
"react": "19.2.7",
"react-dom": "19.2.7",
"react-is": "19.2.7",
"styled-components": "6.4.2"
},
"devDependencies": {
"@lavamoat/allow-scripts": "3.3.2"
Expand Down
78 changes: 39 additions & 39 deletions extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,105 +17,105 @@
"dependencies": {
"@amplitude/analytics-browser": "^2.37.0",
"@amplitude/experiment-js-client": "^1.20.3",
"@ledgerhq/hw-app-str": "7.2.0",
"@ledgerhq/hw-transport-webhid": "6.30.6",
"@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-popover": "1.1.15",
"@reduxjs/toolkit": "2.5.0",
"@ledgerhq/hw-app-str": "7.7.4",
"@ledgerhq/hw-transport-webhid": "6.35.4",
"@radix-ui/react-dialog": "1.1.16",
"@radix-ui/react-popover": "1.1.16",
"@reduxjs/toolkit": "2.12.0",
"@sentry/browser": "9.13.0",
"@shared/api": "1.0.0",
"@shared/constants": "1.0.0",
"@shared/helpers": "1.0.0",
"@stellar/design-system": "3.2.7",
"@stellar/design-system": "3.2.8",
"@stellar/typescript-wallet-sdk-km": "1.9.0",
"@tailwindcss/postcss": "4.1.18",
"@testing-library/react": "16.3.0",
"@tailwindcss/postcss": "4.3.1",
"@testing-library/react": "16.3.2",
"@testing-library/user-event": "14.6.1",
"@types/chrome": "0.0.287",
"@types/chrome": "0.1.43",
"@types/jsdom": "21.1.7",
"@types/lodash": "4.17.16",
"@types/lodash": "4.17.24",
"@types/node": "22.14.1",
"@types/qrcode.react": "3.0.0",
"@types/react": "19.0.12",
"@types/react": "19.2.17",
"@types/react-copy-to-clipboard": "5.0.7",
"@types/react-dom": "19.1.2",
"@types/react-dom": "19.2.3",
"@types/react-redux": "7.1.34",
"@types/react-router-dom": "5.3.3",
"@types/redux": "3.6.31",
"@types/webextension-polyfill": "0.12.0",
"@types/webextension-polyfill": "0.12.5",
"@types/yup": "0.32.0",
"bignumber.js": "9.3.0",
"buffer": "6.0.3",
"classnames": "2.5.1",
"concurrently": "9.1.2",
"copy-webpack-plugin": "13.0.0",
"css-loader": "7.1.2",
"css-loader": "7.1.4",
"dotenv-webpack": "8.1.0",
"fetch": "1.1.0",
"formik": "2.4.6",
"formik": "2.4.9",
"html-loader": "5.1.0",
"html-webpack-plugin": "5.6.3",
"html-webpack-plugin": "5.6.7",
"i18next": "25.0.1",
"i18next-browser-languagedetector": "8.0.5",
"i18next-browser-languagedetector": "8.2.1",
"i18next-resources-to-backend": "1.2.1",
"i18next-scanner-webpack": "0.9.1",
"jest-canvas-mock": "2.5.2",
"jest-environment-jsdom": "29.7.0",
"js-yaml": "4.1.1",
"js-yaml": "4.2.0",
"jsonschema": "1.5.0",
"lodash": "4.17.21",
"mini-css-extract-plugin": "2.9.2",
"prettier": "3.5.3",
"pretty-quick": "4.1.1",
"lodash": "4.18.1",
"mini-css-extract-plugin": "2.10.2",
"prettier": "3.8.4",
"pretty-quick": "4.2.2",
"prop-types": "15.8.1",
"punycode": "2.3.1",
"qrcode.react": "4.2.0",
"react": "19.0.3",
"react-copy-to-clipboard": "5.1.0",
"react-dom": "19.0.3",
"react": "19.2.7",
"react-copy-to-clipboard": "5.1.1",
"react-dom": "19.2.7",
"react-json-pretty": "2.2.0",
"react-redux": "9.2.0",
"react-router-dom": "7.5.1",
"react-redux": "9.3.0",
"react-router-dom": "7.17.0",
"redux": "5.0.1",
"sass": "1.86.3",
"sass": "1.101.0",
"sass-loader": "16.0.5",
"semver": "7.7.1",
"semver": "7.8.4",
"ses": "1.12.0",
"sonner": "2.0.7",
"soroswap-router-sdk": "1.4.6",
"stellar-hd-wallet": "1.0.2",
"stellar-sdk": "npm:@stellar/stellar-sdk@16.0.0-rc.1",
"stellar-sdk-next": "npm:@stellar/stellar-sdk@16.0.0-rc.1",
"svg-url-loader": "8.0.0",
"tailwindcss": "4.1.18",
"svg-url-loader": "8.1.0",
"tailwindcss": "4.3.1",
"tsconfig-paths-webpack-plugin": "4.2.0",
"tslib": "2.8.1",
"tw-animate-css": "1.4.0",
"webextension-polyfill": "0.12.0",
"yup": "1.6.1"
"yup": "1.7.1"
},
"devDependencies": {
"@lavamoat/allow-scripts": "3.3.2",
"@playwright/test": "1.57.0",
"@playwright/test": "1.61.0",
"@sentry/webpack-plugin": "3.3.1",
"@svgr/webpack": "8.1.0",
"@types/js-yaml": "4.0.9",
"@types/semver": "7.5.8",
"@types/semver": "7.7.1",
"fork-ts-checker-webpack-plugin": "9.1.0",
"https-browserify": "1.0.0",
"os-browserify": "0.3.0",
"path-browserify": "1.0.1",
"postcss": "8.5.6",
"postcss-loader": "8.2.0",
"postcss": "8.5.15",
"postcss-loader": "8.2.1",
"process": "0.11.10",
"shadcn": "3.8.4",
"speed-measure-webpack-plugin": "1.5.0",
"speed-measure-webpack-plugin": "1.6.0",
"stream-browserify": "3.0.0",
"stream-http": "3.2.0",
"style-loader": "4.0.0",
"terser-webpack-plugin": "5.3.14",
"terser-webpack-plugin": "5.6.1",
"thread-loader": "4.0.4",
"url": "0.11.1",
"url": "0.11.4",
"util": "0.12.5"
},
"lavamoat": {
Expand Down
82 changes: 42 additions & 40 deletions extension/src/background/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import { BrowserStorageConfigParams } from "@stellar/typescript-wallet-sdk-km/li
const sessionTimer = new SessionTimer(dataStorageAccess(browserLocalStorage));

export const initContentScriptMessageListener = () => {
browser?.runtime?.onMessage?.addListener((message) => {
browser?.runtime?.onMessage?.addListener((message: unknown) => {
if (message === "runContentScript") {
browser.tabs.executeScript({
file: "contentScript.min.js",
Expand Down Expand Up @@ -145,46 +145,48 @@ export const initSidebarConnectionListener = () => {
};

export const initExtensionMessageListener = () => {
browser?.runtime?.onMessage?.addListener(async (request, sender) => {
const sessionStore = await buildStore();
const localStore = dataStorageAccess(browserLocalStorage);
const localKeyStore = new BrowserStorageKeyStore();
localKeyStore.configure({
storage: browserLocalStorage as BrowserStorageConfigParams["storage"],
});
const keyManager = new KeyManager({
keyStore: localKeyStore,
});
keyManager.registerEncrypter(ScryptEncrypter);
// todo this is kinda ugly
const req = request as ExternalRequest | Response;
let res;

if (Object.values(SERVICE_TYPES).includes(req.type as SERVICE_TYPES)) {
res = await popupMessageListener(
req as ServiceMessageRequest,
sessionStore,
localStore,
keyManager,
sessionTimer,
sender,
);
}
if (
Object.values(EXTERNAL_SERVICE_TYPES).includes(
req.type as EXTERNAL_SERVICE_TYPES,
)
) {
res = await freighterApiMessageListener(
req as ExternalRequest,
sender,
sessionStore,
localStore,
);
}
browser?.runtime?.onMessage?.addListener(
async (request: unknown, sender: browser.Runtime.MessageSender) => {
const sessionStore = await buildStore();
const localStore = dataStorageAccess(browserLocalStorage);
const localKeyStore = new BrowserStorageKeyStore();
localKeyStore.configure({
storage: browserLocalStorage as BrowserStorageConfigParams["storage"],
});
const keyManager = new KeyManager({
keyStore: localKeyStore,
});
keyManager.registerEncrypter(ScryptEncrypter);
// todo this is kinda ugly
const req = request as ExternalRequest | Response;
let res;

if (Object.values(SERVICE_TYPES).includes(req.type as SERVICE_TYPES)) {
res = await popupMessageListener(
req as ServiceMessageRequest,
sessionStore,
localStore,
keyManager,
sessionTimer,
sender,
);
}
if (
Object.values(EXTERNAL_SERVICE_TYPES).includes(
req.type as EXTERNAL_SERVICE_TYPES,
)
) {
res = await freighterApiMessageListener(
req as ExternalRequest,
sender,
sessionStore,
localStore,
);
}

return res;
});
return res;
},
);
};

export const initInstalledListener = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ const mockStorageApi = {
}
}),

getBytesInUse: jest.fn(async () => 0),

getKeys: jest.fn(async () => Object.keys(mockStore)),

// Just enough to satisfy the type
onChanged: {
addListener: jest.fn(),
Expand Down
12 changes: 9 additions & 3 deletions extension/src/popup/helpers/useSetupSigningFlow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,15 @@ import { METRIC_NAMES } from "popup/constants/metricsNames";

type AppThunk<Arg = void> = AsyncThunk<void, Arg, { state: AppState }>;

export function useSetupSigningFlow<Arg = void>(
// The only payload shape this hook ever dispatches to signFn.
interface SigningPayload {
uuid: string;
apiVersion?: string;
}

export function useSetupSigningFlow(
reject: typeof rejectTransaction,
signFn: AppThunk<Arg>,
signFn: AppThunk<SigningPayload>,
transactionXdr: string,
uuid: string,
apiVersion?: string,
Expand Down Expand Up @@ -54,7 +60,7 @@ export function useSetupSigningFlow<Arg = void>(
);
setStartedHwSign(true);
} else {
await dispatch(signFn({ apiVersion, uuid } as Arg));
await dispatch(signFn({ apiVersion, uuid }));
await emitMetric(METRIC_NAMES.approveSign);
window.close();
}
Expand Down
Loading
Loading