Skip to content

Commit

Permalink
fix: requested changes and unit-test error
Browse files Browse the repository at this point in the history
  • Loading branch information
isk committed Jul 19, 2023
1 parent 68b53a7 commit 3759ef8
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 132 deletions.
2 changes: 1 addition & 1 deletion packages/app/.eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ dist/
node_modules/
coverage/
tmp/
src/background/shared/subworkers.js
src/background/shared/*.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,23 @@ Object.defineProperty(global, "chrome", {
value: {
offscreen: {
closeDocument: jest.fn(),
hasDocument: jest.fn(),
createDocument: jest.fn(),
Reason: jest.fn(() => ({
DOM_SCRAPING: "DOM_SCRAPING",
})),
},
},
});

jest.mock("@cryptkeeperzk/semaphore-proof", (): unknown => ({
generateProof: jest.fn(),
}));

jest.mock("@cryptkeeperzk/zk", (): unknown => ({
getMerkleProof: jest.fn(),
}));

jest.mock("@src/background/controllers/browserUtils", (): unknown => ({
getInstance: jest.fn(() => ({
closePopup: jest.fn(),
Expand Down Expand Up @@ -172,7 +185,7 @@ describe("background/services/injector", () => {
);
});

test("should be able to genearte semaphore proof", async () => {
test("should be able to generate semaphore proof", async () => {
const service = InjectorService.getInstance();

await service.connect({ origin: mockDefaultHost });
Expand Down
8 changes: 4 additions & 4 deletions packages/app/src/background/services/injector/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { RPCAction } from "@cryptkeeperzk/providers";
import { FullProof, generateProof } from "@cryptkeeperzk/semaphore-proof";
import { generateProof } from "@cryptkeeperzk/semaphore-proof";
import { getMerkleProof } from "@cryptkeeperzk/zk";
import browser from "webextension-polyfill";

Expand Down Expand Up @@ -77,7 +77,7 @@ export default class InjectorService {
generateSemaphoreProof = async (
{ merkleStorageAddress, externalNullifier, signal, merkleProofArtifacts }: SemaphoreProofRequest,
meta: IMeta,
): Promise<SemaphoreProof | FullProof> => {
): Promise<SemaphoreProof> => {
const browserPlatform = getBrowserPlatform();
const { isUnlocked } = await this.lockerService.getStatus();

Expand Down Expand Up @@ -149,9 +149,9 @@ export default class InjectorService {
zkeyFilePath: semaphoreRequest.zkeyFilePath,
});

return fullProof;
return { fullProof };
} catch (e) {
throw new Error("Error in generateSemaphoreProof");
throw new Error(`${e as string}`);
} finally {
if (browserPlatform !== BrowserPlatform.Firefox) {
await closeChromeOffscreen();
Expand Down
239 changes: 121 additions & 118 deletions packages/app/src/background/shared/subworkers.js
Original file line number Diff line number Diff line change
@@ -1,136 +1,139 @@
//
// eslint-disable
// A workaround for resolving `Worker is not defined` error with MV3 on Chromium based platforms.
(async function () {
if (global.chrome) {
/* Detect if we're in a worker or not */
let isWorker = false;
try {
document;
} catch (e) {
isWorker = true;
}
if (!global.chrome) {
return;
}

/* Detect if we're in a worker or not */
let isWorker = false;
try {
document;
} catch (e) {
isWorker = true;
}

if (isWorker) {
if (!self.Worker) {
self.Worker = function (path) {
const that = this;
this.id = Math.random().toString(36).substr(2, 5);
if (isWorker) {
if (!self.Worker) {
self.Worker = function (path) {
const that = this;
this.id = Math.random().toString(36).substr(2, 5);

this.eventListeners = {
message: [],
};
self.addEventListener("message", (e) => {
if (e.data._from === that.id) {
const newEvent = new MessageEvent("message");
newEvent.initMessageEvent("message", false, false, e.data.message, that, "", null, []);
that.dispatchEvent(newEvent);
if (that.onmessage) {
that.onmessage(newEvent);
}
this.eventListeners = {
message: [],
};
self.addEventListener("message", (e) => {
if (e.data._from === that.id) {
const newEvent = new MessageEvent("message");
newEvent.initMessageEvent("message", false, false, e.data.message, that, "", null, []);
that.dispatchEvent(newEvent);
if (that.onmessage) {
that.onmessage(newEvent);
}
});
}
});

const location = self.location.pathname;
const slashedPath = path.charAt(0) == "/" ? path : `/${path}`;
const absPath = location.substring(0, location.lastIndexOf("/")) + slashedPath;
const location = self.location.pathname;
const slashedPath = path.charAt(0) == "/" ? path : `/${path}`;
const absPath = location.substring(0, location.lastIndexOf("/")) + slashedPath;
self.postMessage({
_subworker: true,
cmd: "newWorker",
id: this.id,
path: absPath,
});
};
Worker.prototype = {
onerror: null,
onmessage: null,
postMessage(message, transfer) {
self.postMessage(
{
_subworker: true,
id: this.id,
cmd: "passMessage",
message,
transfer,
},
transfer,
);
},
terminate() {
self.postMessage({
_subworker: true,
cmd: "newWorker",
cmd: "terminate",
id: this.id,
path: absPath,
});
};
Worker.prototype = {
onerror: null,
onmessage: null,
postMessage(message, transfer) {
self.postMessage(
{
_subworker: true,
id: this.id,
cmd: "passMessage",
message,
transfer,
},
transfer,
);
},
terminate() {
self.postMessage({
_subworker: true,
cmd: "terminate",
id: this.id,
});
},
addEventListener(type, listener, useCapture) {
if (this.eventListeners[type]) {
this.eventListeners[type].push(listener);
}
},
removeEventListener(type, listener, useCapture) {
if (!(type in this.eventListeners)) {
return;
}
const index = this.eventListeners[type].indexOf(listener);
if (index !== -1) {
this.eventListeners[type].splice(index, 1);
}
},
dispatchEvent(event) {
const listeners = this.eventListeners[event.type];
for (let i = 0; i < listeners.length; i++) {
listeners[i](event);
}
},
};
}
},
addEventListener(type, listener, useCapture) {
if (this.eventListeners[type]) {
this.eventListeners[type].push(listener);
}
},
removeEventListener(type, listener, useCapture) {
if (!(type in this.eventListeners)) {
return;
}
const index = this.eventListeners[type].indexOf(listener);
if (index !== -1) {
this.eventListeners[type].splice(index, 1);
}
},
dispatchEvent(event) {
const listeners = this.eventListeners[event.type];
for (let i = 0; i < listeners.length; i++) {
listeners[i](event);
}
},
};
}
}

const allWorkers = {};
const cmds = {
newWorker(event) {
const worker = new Worker(event.data.path);
worker.addEventListener("message", (e) => {
const envelope = {
_from: event.data.id,
message: e.data,
};
event.target.postMessage(envelope);
});
allWorkers[event.data.id] = worker;
},
terminate(event) {
allWorkers[event.data.id].terminate();
},
passMessage(event) {
allWorkers[event.data.id].postMessage(event.data.message, event.data.transfer);
},
};
const messageRecieved = function (event) {
if (event.data._subworker) {
cmds[event.data.cmd](event);
}
};
const allWorkers = {};
const cmds = {
newWorker(event) {
const worker = new Worker(event.data.path);
worker.addEventListener("message", (e) => {
const envelope = {
_from: event.data.id,
message: e.data,
};
event.target.postMessage(envelope);
});
allWorkers[event.data.id] = worker;
},
terminate(event) {
allWorkers[event.data.id].terminate();
},
passMessage(event) {
allWorkers[event.data.id].postMessage(event.data.message, event.data.transfer);
},
};
const messageRecieved = function (event) {
if (event.data._subworker) {
cmds[event.data.cmd](event);
}
};

/* Hijack Worker */
const oldWorker = Worker;
Worker = function (path) {
if (this.constructor !== Worker) {
throw new TypeError(
"Failed to construct 'Worker': Please use the 'new' operator, this DOM object constructor cannot be called as a function.",
);
}
/* Hijack Worker */
const oldWorker = Worker;
Worker = function (path) {
if (this.constructor !== Worker) {
throw new TypeError(
"Failed to construct 'Worker': Please use the 'new' operator, this DOM object constructor cannot be called as a function.",
);
}

const blobIndex = path.indexOf("blob:");
const blobIndex = path.indexOf("blob:");

if (blobIndex !== -1 && blobIndex !== 0) {
path = path.substring(blobIndex);
}
if (blobIndex !== -1 && blobIndex !== 0) {
path = path.substring(blobIndex);
}

const newWorker = new oldWorker(path);
newWorker.addEventListener("message", messageRecieved);
const newWorker = new oldWorker(path);
newWorker.addEventListener("message", messageRecieved);

return newWorker;
};
}
return newWorker;
};
})();
// eslint-enable
10 changes: 2 additions & 8 deletions packages/app/webpack.common.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const envPlugin = new Dotenv({
});

const TARGET = process.env.TARGET || "chrome";
const MANIFEST_VERSION = process.env.MANIFEST_VERSION || "3";

module.exports = {
entry: {
Expand All @@ -39,10 +40,7 @@ module.exports = {
patterns: [
{ from: path.resolve(__dirname, "./src/static/icons"), to: path.resolve(__dirname, "./dist/[name][ext]") },
{
from:
TARGET === "firefox"
? path.resolve(__dirname, `./src/manifest/v2/manifest.${TARGET}.json`)
: path.resolve(__dirname, `./src/manifest/v3/manifest.${TARGET}.json`),
from: path.resolve(__dirname, `./src/manifest/v${MANIFEST_VERSION}/manifest.${TARGET}.json`),
to: path.resolve(__dirname, "./dist/manifest.json"),
},
{
Expand All @@ -54,10 +52,6 @@ module.exports = {
to: path.resolve(__dirname, "./dist/LICENSE"),
},
{ from: path.resolve(__dirname, "../../zkeyFiles"), to: path.resolve(__dirname, "./dist/js/zkeyFiles") },
{
from: path.resolve(__dirname, "./src/background/shared/subworkers.js"),
to: path.resolve(__dirname, "./dist/js/subworkers.js"),
},
],
}),
new HtmlWebpackPlugin({
Expand Down

0 comments on commit 3759ef8

Please sign in to comment.