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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cursorrules
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ File and directory structure:

- Maintain a monorepo structure using Yarn workspaces.
- Place package source files under `<package-root>/src/`.
- Co-locate a package's unit tests with their covered source files in the `<package-root>/src/` directory (e.g. `kernel/src/kernel-worker.ts` should be tested in `kernel/src/kernel-worker.test.ts`).
- Co-locate a package's unit tests with their covered source files in the `<package-root>/src/` directory (e.g. `ocap-kernel/src/kernel-worker.ts` should be tested in `ocap-kernel/src/kernel-worker.test.ts`).
- Test utilities used by a single package should be separated into that package's `<package-root>/test/` directory.
- If the utility is small, it can be in-lined in the test file.
- Test utilities used by multiple packages should be relocated into the dedicated `test-utils` package.
Expand Down
18 changes: 18 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Copyright ConsenSys Software Inc. 2025. All rights reserved.

You acknowledge and agree that ConsenSys Software Inc. (“ConsenSys”) (or ConsenSys’s licensors) own all legal right, title and interest in and to the work, software, application, source code, documentation and any other documents in this repository (collectively, the “Program”), including any intellectual property rights which subsist in the Program (whether those rights happen to be registered or not, and wherever in the world those rights may exist), whether in source code or any other form.

Subject to the limited license below, you may not (and you may not permit anyone else to) distribute, publish, copy, modify, merge, combine with another program, create derivative works of, reverse engineer, decompile or otherwise attempt to extract the source code of, the Program or any part thereof, except that you may contribute to this repository.

You are granted a non-exclusive, non-transferable, non-sublicensable license to distribute, publish, copy, modify, merge, combine with another program or create derivative works of the Program (such resulting program, collectively, the “Resulting Program”) solely for Non-Commercial Use as long as you:
1. give prominent notice (“Notice”) with each copy of the Resulting Program that the Program is used in the Resulting Program and that the Program is the copyright of ConsenSys; and
2. subject the Resulting Program and any distribution, publication, copy, modification, merger therewith, combination with another program or derivative works thereof to the same Notice requirement and Non-Commercial Use restriction set forth herein.

“Non-Commercial Use” means each use as described in clauses (1)-(3) below, as reasonably determined by ConsenSys in its sole discretion:
1. personal use for research, personal study, private entertainment, hobby projects or amateur pursuits, in each case without any anticipated commercial application;
2. use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization or government institution; or
3. the number of monthly active users of the Resulting Program across all versions thereof and platforms globally do not exceed 10,000 at any time.

You will not use any trade mark, service mark, trade name, logo of ConsenSys or any other company or organization in a way that is likely or intended to cause confusion about the owner or authorized user of such marks, names or logos.

If you have any questions, comments or interest in pursuing any other use cases, please reach out to us at metamask.license@consensys.net.
5 changes: 2 additions & 3 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ const config = createConfig([

{
files: ['*.tsx', '**/ui/**/*.ts'],
// @ts-expect-error - The createConfig types are wrong
plugins: { react, 'react-hooks': reactHooks },
rules: {
...react.configs.flat?.['jsx-runtime']?.rules,
Expand Down Expand Up @@ -167,7 +166,7 @@ const config = createConfig([
// We have been hoisted by our own petard in the past.
'import-x/no-cycle': ['error', { ignoreExternal: true, maxDepth: 3 }],

// We use unassigned imports for e.g. `import '@ocap/shims/endoify'`.
// We use unassigned imports for e.g. `import '@metamask/kernel-shims/endoify'`.
'import-x/no-unassigned-import': 'off',

'import-x/no-useless-path-segments': [
Expand Down Expand Up @@ -199,7 +198,7 @@ const config = createConfig([
},

{
files: ['packages/shims/**/*'],
files: ['packages/kernel-shims/**/*'],
languageOptions: {
globals: { lockdown: 'readonly' },
},
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"build:clean": "yarn clean && yarn build",
"build:docs": "yarn workspaces foreach --all --exclude @ocap/monorepo --exclude @ocap/extension --parallel --interlaced --verbose run build:docs",
"build:source": "ts-bridge --project tsconfig.build.json --verbose && yarn build:special",
"build:special": "yarn workspace @ocap/shims run build && yarn workspace @ocap/extension run build && yarn workspace @ocap/kernel-test run build:vats",
"build:special": "yarn workspace @metamask/kernel-shims run build && yarn workspace @ocap/extension run build && yarn workspace @ocap/kernel-test run build:vats",
"bundle": "node ./scripts/bundle-vat.js",
"changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update",
"changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate",
Expand Down Expand Up @@ -115,7 +115,7 @@
"vitest>@vitest/browser>webdriverio>@wdio/utils>edgedriver": false,
"vitest>@vitest/browser>webdriverio>@wdio/utils>geckodriver": false,
"vitest>@vitest/mocker>msw": false,
"@ocap/cli>@ocap/logger>@ocap/streams": true,
"@ocap/cli>@metamask/logger>@metamask/streams": true,
"eslint-plugin-import-x>unrs-resolver": false
}
},
Expand Down
2 changes: 1 addition & 1 deletion packages/brow-2-brow/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"types": ["ses", "vitest", "node"],
"noEmit": true
},
"references": [{ "path": "../test-utils" }, { "path": "../utils" }],
"references": [{ "path": "../test-utils" }, { "path": "../kernel-utils" }],
"include": [
"../../vitest.config.ts",
"./src/**/*.ts",
Expand Down
6 changes: 3 additions & 3 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@
"@endo/bundle-source": "^4.0.0",
"@endo/init": "^1.1.6",
"@endo/promise-kit": "^1.1.10",
"@metamask/kernel-shims": "workspace:^",
"@metamask/kernel-utils": "workspace:^",
"@metamask/logger": "workspace:^",
"@metamask/snaps-utils": "^9.1.0",
"@metamask/utils": "^11.4.0",
"@ocap/logger": "workspace:^",
"@ocap/shims": "workspace:^",
"@ocap/utils": "workspace:^",
"@types/node": "^22.13.1",
"chokidar": "^4.0.1",
"glob": "^11.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/app.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '@endo/init';

import { Logger } from '@ocap/logger';
import { Logger } from '@metamask/logger';
import path from 'node:path';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/commands/bundle.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Logger } from '@ocap/logger';
import type { Logger } from '@metamask/logger';
import { readFile, rm } from 'fs/promises';
import { basename } from 'path';
import { describe, it, expect, vi, beforeEach, afterAll } from 'vitest';
Expand Down Expand Up @@ -31,7 +31,7 @@ vi.mock('@endo/bundle-source', () => ({

vi.mock('@endo/init', () => ({}));

vi.mock('@ocap/logger', () => ({
vi.mock('@metamask/logger', () => ({
Logger: mocks.Logger,
}));

Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/commands/bundle.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '@endo/init';
import endoBundleSource from '@endo/bundle-source';
import { Logger } from '@ocap/logger';
import { Logger } from '@metamask/logger';
import { glob } from 'glob';
import { writeFile } from 'node:fs/promises';
import { resolve, join } from 'node:path';
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/commands/serve.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '@ocap/shims/endoify';
import '@metamask/kernel-shims/endoify';

import { makeCounter } from '@ocap/utils';
import { makeCounter } from '@metamask/kernel-utils';
import { createServer } from 'http';
import type { IncomingMessage, Server, ServerResponse } from 'http';
import serveMiddleware from 'serve-handler';
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/commands/watch.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '@ocap/shims/endoify';
import '@metamask/kernel-shims/endoify';

import { Logger } from '@ocap/logger';
import { Logger } from '@metamask/logger';
import { watch } from 'chokidar';
import type { FSWatcher } from 'chokidar';
import type { Stats } from 'fs';
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/commands/watch.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { makePromiseKit } from '@endo/promise-kit';
import { Logger } from '@ocap/logger';
import { Logger } from '@metamask/logger';
import { watch } from 'chokidar';
import type { FSWatcher, MatchFunction } from 'chokidar';
import { unlink } from 'fs/promises';
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/test/integration/serve.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import '@ocap/shims/endoify';
import '@metamask/kernel-shims/endoify';
import type { BundleSourceResult } from '@endo/bundle-source';
import { makeCounter, stringify } from '@metamask/kernel-utils';
import { isObject, hasProperty } from '@metamask/utils';
import { makeCounter, stringify } from '@ocap/utils';
import { createHash } from 'crypto';
import { readFile } from 'fs/promises';
import { join, resolve } from 'path';
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
},
"references": [
{ "path": "../logger/tsconfig.build.json" },
{ "path": "../utils/tsconfig.build.json" },
{ "path": "../shims/tsconfig.build.json" }
{ "path": "../kernel-utils/tsconfig.build.json" },
{ "path": "../kernel-shims/tsconfig.build.json" }
],
"files": [],
"include": ["./src"]
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"references": [
{ "path": "../logger" },
{ "path": "../test-utils" },
{ "path": "../utils" }
{ "path": "../kernel-utils" }
],
"include": [
"../../vitest.config.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-package/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"noEmit": true,
"types": ["node", "vitest"]
},
"references": [{ "path": "../test-utils" }, { "path": "../utils" }],
"references": [{ "path": "../test-utils" }, { "path": "../kernel-utils" }],
"include": ["../../vitest.config.ts", "./src", "./vitest.config.ts"],
"exclude": ["./src/package-template"]
}
16 changes: 8 additions & 8 deletions packages/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,18 @@
"@endo/eventual-send": "^1.3.1",
"@endo/marshal": "^1.6.4",
"@metamask/json-rpc-engine": "^10.0.3",
"@metamask/kernel-errors": "workspace:^",
"@metamask/kernel-rpc-methods": "workspace:^",
"@metamask/kernel-shims": "workspace:^",
"@metamask/kernel-store": "workspace:^",
"@metamask/kernel-utils": "workspace:^",
"@metamask/logger": "workspace:^",
"@metamask/ocap-kernel": "workspace:^",
"@metamask/rpc-errors": "^7.0.2",
"@metamask/snaps-utils": "^9.1.0",
"@metamask/streams": "workspace:^",
"@metamask/superstruct": "^3.2.1",
"@metamask/utils": "^11.4.0",
"@ocap/errors": "workspace:^",
"@ocap/kernel": "workspace:^",
"@ocap/logger": "workspace:^",
"@ocap/rpc-methods": "workspace:^",
"@ocap/shims": "workspace:^",
"@ocap/store": "workspace:^",
"@ocap/streams": "workspace:^",
"@ocap/utils": "workspace:^",
"nanoid": "^5.1.5",
"react": "^18.3.1",
"react-dom": "^18.3.1",
Expand Down
12 changes: 6 additions & 6 deletions packages/extension/src/background.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { RpcClient } from '@metamask/kernel-rpc-methods';
import { delay } from '@metamask/kernel-utils';
import type { JsonRpcCall } from '@metamask/kernel-utils';
import { Logger } from '@metamask/logger';
import { kernelMethodSpecs } from '@metamask/ocap-kernel/rpc';
import { ChromeRuntimeDuplexStream } from '@metamask/streams/browser';
import { isJsonRpcResponse } from '@metamask/utils';
import type { JsonRpcResponse } from '@metamask/utils';
import { kernelMethodSpecs } from '@ocap/kernel/rpc';
import { Logger } from '@ocap/logger';
import { RpcClient } from '@ocap/rpc-methods';
import { ChromeRuntimeDuplexStream } from '@ocap/streams/browser';
import { delay } from '@ocap/utils';
import type { JsonRpcCall } from '@ocap/utils';

const OFFSCREEN_DOCUMENT_PATH = '/offscreen.html';

Expand Down
2 changes: 1 addition & 1 deletion packages/extension/src/env/endoify.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import '@ocap/shims/endoify';
import '@metamask/kernel-shims/endoify';
10 changes: 5 additions & 5 deletions packages/extension/src/iframe.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { VatSupervisor } from '@ocap/kernel';
import { Logger } from '@ocap/logger';
import type { JsonRpcMessage } from '@metamask/kernel-utils';
import { isJsonRpcMessage } from '@metamask/kernel-utils';
import { Logger } from '@metamask/logger';
import { VatSupervisor } from '@metamask/ocap-kernel';
import {
MessagePortDuplexStream,
receiveMessagePort,
} from '@ocap/streams/browser';
import type { JsonRpcMessage } from '@ocap/utils';
import { isJsonRpcMessage } from '@ocap/utils';
} from '@metamask/streams/browser';

const logger = new Logger('iframe');

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { delay, stringify } from '@metamask/kernel-utils';
import { Logger } from '@metamask/logger';
import type { VatId, VatConfig } from '@metamask/ocap-kernel';
import { rpcErrors } from '@metamask/rpc-errors';
import type { PostMessageTarget } from '@metamask/streams/browser';
import type { JsonRpcResponse } from '@metamask/utils';
import type { VatId, VatConfig } from '@ocap/kernel';
import { Logger } from '@ocap/logger';
import type { PostMessageTarget } from '@ocap/streams/browser';
import { TestDuplexStream } from '@ocap/test-utils/streams';
import { delay, stringify } from '@ocap/utils';
import { describe, it, expect, beforeEach, vi } from 'vitest';

import type { VatWorkerClientStream } from './VatWorkerClient.ts';
import { ExtensionVatWorkerClient } from './VatWorkerClient.ts';

vi.mock('@ocap/streams/browser', async (importOriginal) => {
vi.mock('@metamask/streams/browser', async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/no-shadow
const { TestDuplexStream } = await import('@ocap/test-utils/streams');

Expand Down Expand Up @@ -122,7 +122,7 @@ describe('ExtensionVatWorkerClient', () => {
await delay(10);
await stream.receiveInput(makeLaunchReply('m1'));

// @ocap/streams is mocked
// @metamask/streams is mocked
expect(await result).toBeInstanceOf(TestDuplexStream);
});

Expand Down
22 changes: 11 additions & 11 deletions packages/extension/src/kernel-integration/VatWorkerClient.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { isJsonRpcResponse } from '@metamask/utils';
import type { JsonRpcId, JsonRpcResponse } from '@metamask/utils';
import type { VatWorkerManager, VatId, VatConfig } from '@ocap/kernel';
import { vatWorkerServiceMethodSpecs } from '@ocap/kernel/rpc';
import { Logger } from '@ocap/logger';
import { RpcClient } from '@ocap/rpc-methods';
import type { DuplexStream } from '@ocap/streams';
import { RpcClient } from '@metamask/kernel-rpc-methods';
import type { JsonRpcCall, JsonRpcMessage } from '@metamask/kernel-utils';
import { isJsonRpcMessage, stringify } from '@metamask/kernel-utils';
import { Logger } from '@metamask/logger';
import type { VatWorkerManager, VatId, VatConfig } from '@metamask/ocap-kernel';
import { vatWorkerServiceMethodSpecs } from '@metamask/ocap-kernel/rpc';
import type { DuplexStream } from '@metamask/streams';
import {
MessagePortDuplexStream,
PostMessageDuplexStream,
} from '@ocap/streams/browser';
} from '@metamask/streams/browser';
import type {
PostMessageEnvelope,
PostMessageTarget,
} from '@ocap/streams/browser';
import type { JsonRpcCall, JsonRpcMessage } from '@ocap/utils';
import { isJsonRpcMessage, stringify } from '@ocap/utils';
} from '@metamask/streams/browser';
import { isJsonRpcResponse } from '@metamask/utils';
import type { JsonRpcId, JsonRpcResponse } from '@metamask/utils';

// Appears in the docs.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
import {
VatAlreadyExistsError,
VatNotFoundError,
} from '@metamask/kernel-errors';
import { delay } from '@metamask/kernel-utils';
import { Logger } from '@metamask/logger';
import type { VatConfig, VatId } from '@metamask/ocap-kernel';
import { rpcErrors } from '@metamask/rpc-errors';
import type { PostMessageTarget } from '@metamask/streams/browser';
import type { JsonRpcRequest } from '@metamask/utils';
import { VatAlreadyExistsError, VatNotFoundError } from '@ocap/errors';
import type { VatConfig, VatId } from '@ocap/kernel';
import { Logger } from '@ocap/logger';
import type { PostMessageTarget } from '@ocap/streams/browser';
import { TestDuplexStream } from '@ocap/test-utils/streams';
import { delay } from '@ocap/utils';
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
import type { Mock } from 'vitest';

import { ExtensionVatWorkerService } from './VatWorkerServer.ts';
import type { VatWorker, VatWorkerServiceStream } from './VatWorkerServer.ts';

vi.mock('@ocap/kernel', () => ({
vi.mock('@metamask/ocap-kernel', () => ({
VatWorkerServiceCommandMethod: {
launch: 'launch',
terminate: 'terminate',
Expand Down
25 changes: 14 additions & 11 deletions packages/extension/src/kernel-integration/VatWorkerServer.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
import {
VatAlreadyExistsError,
VatNotFoundError,
} from '@metamask/kernel-errors';
import type { ExtractParams } from '@metamask/kernel-rpc-methods';
import { Logger } from '@metamask/logger';
import type { VatId, VatConfig } from '@metamask/ocap-kernel';
import type { VatWorkerServiceMethod } from '@metamask/ocap-kernel/rpc';
import { vatWorkerServiceMethodSpecs } from '@metamask/ocap-kernel/rpc';
import { rpcErrors, serializeError } from '@metamask/rpc-errors';
import { PostMessageDuplexStream } from '@metamask/streams/browser';
import type {
PostMessageEnvelope,
PostMessageTarget,
} from '@metamask/streams/browser';
import { hasProperty, isJsonRpcRequest } from '@metamask/utils';
import type {
JsonRpcId,
JsonRpcParams,
JsonRpcRequest,
JsonRpcResponse,
} from '@metamask/utils';
import { VatAlreadyExistsError, VatNotFoundError } from '@ocap/errors';
import type { VatId, VatConfig } from '@ocap/kernel';
import type { VatWorkerServiceMethod } from '@ocap/kernel/rpc';
import { vatWorkerServiceMethodSpecs } from '@ocap/kernel/rpc';
import { Logger } from '@ocap/logger';
import type { ExtractParams } from '@ocap/rpc-methods';
import { PostMessageDuplexStream } from '@ocap/streams/browser';
import type {
PostMessageEnvelope,
PostMessageTarget,
} from '@ocap/streams/browser';

// Appears in the docs.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Kernel } from '@ocap/kernel';
import type { Kernel } from '@metamask/ocap-kernel';
import { describe, it, expect, vi, beforeEach } from 'vitest';

import { clearStateHandler } from './clear-state.ts';
Expand Down
Loading
Loading