diff --git a/ts/.yalc/@aztec/eslint-config/index.js b/ts/.yalc/@aztec/eslint-config/index.js index ee45c8912b..a8322969cf 100644 --- a/ts/.yalc/@aztec/eslint-config/index.js +++ b/ts/.yalc/@aztec/eslint-config/index.js @@ -1,45 +1,45 @@ const contexts = [ - 'TSMethodDefinition', - 'MethodDefinition', - 'TSParameterProperty[accessibility=public]', - 'TSPropertyDefinition[accessibility=public]', - 'PropertyDefinition[accessibility=public]', - 'TSPropertySignature', - 'PropertySignature', - 'TSInterfaceDeclaration', - 'InterfaceDeclaration', - 'TSTypeAliasDeclaration', - 'TypeAliasDeclaration', - 'TSTypeDeclaration', - 'TypeDeclaration', - 'TSEnumDeclaration', - 'EnumDeclaration', - 'TSClassDeclaration', - 'ClassDeclaration', - 'TSClassExpression', - 'ClassExpression', - 'TSFunctionExpression', - 'FunctionExpression', - 'TSInterfaceExpression', - 'InterfaceExpression', - 'TSEnumExpression', - 'EnumExpression', + "TSMethodDefinition", + "MethodDefinition", + "TSParameterProperty[accessibility=public]", + "TSPropertyDefinition[accessibility=public]", + "PropertyDefinition[accessibility=public]", + "TSPropertySignature", + "PropertySignature", + "TSInterfaceDeclaration", + "InterfaceDeclaration", + "TSTypeAliasDeclaration", + "TypeAliasDeclaration", + "TSTypeDeclaration", + "TypeDeclaration", + "TSEnumDeclaration", + "EnumDeclaration", + "TSClassDeclaration", + "ClassDeclaration", + "TSClassExpression", + "ClassExpression", + "TSFunctionExpression", + "FunctionExpression", + "TSInterfaceExpression", + "InterfaceExpression", + "TSEnumExpression", + "EnumExpression", ]; module.exports = { extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", ], root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'eslint-plugin-tsdoc', 'jsdoc'], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint", "eslint-plugin-tsdoc", "jsdoc"], overrides: [ { - files: ['*.ts', '*.tsx'], + files: ["*.ts", "*.tsx"], parserOptions: { - project: ['./tsconfig.json'], + project: ["./tsconfig.json"], }, }, ], @@ -47,35 +47,35 @@ module.exports = { node: true, }, rules: { - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/await-thenable': 'error', - '@typescript-eslint/no-floating-promises': 2, - 'require-await': 2, - 'no-constant-condition': 'off', + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-floating-promises": 2, + "require-await": 2, + "no-constant-condition": "off", camelcase: 2, - 'no-restricted-imports': [ - 'warn', + "no-restricted-imports": [ + "warn", { patterns: [ { - group: ['client-dest'], + group: ["client-dest"], message: - 'Fix this absolute garbage import. It's your duty to solve it before it spreads.', + "Fix this absolute garbage import. It's your duty to solve it before it spreads.", }, { - group: ['dest'], + group: ["dest"], message: - 'You should not be importing from a build directory. Did you accidentally do a relative import?', + "You should not be importing from a build directory. Did you accidentally do a relative import?", }, ], }, ], - 'tsdoc/syntax': 'warn', - 'jsdoc/require-jsdoc': [ - 'warn', + "tsdoc/syntax": "warn", + "jsdoc/require-jsdoc": [ + "warn", { contexts, checkConstructors: false, @@ -83,17 +83,17 @@ module.exports = { checkSetters: true, }, ], - 'jsdoc/require-description': ['warn', { contexts }], - 'jsdoc/require-description-complete-sentence': ['warn'], - 'jsdoc/require-hyphen-before-param-description': ['warn'], - 'jsdoc/require-param': ['warn', { contexts, checkDestructured: false }], - 'jsdoc/require-param-description': ['warn', { contexts }], - 'jsdoc/require-param-name': ['warn', { contexts }], - 'jsdoc/require-property': ['warn', { contexts }], - 'jsdoc/require-property-description': ['warn', { contexts }], - 'jsdoc/require-property-name': ['warn', { contexts }], - 'jsdoc/require-returns': ['warn', { contexts }], - 'jsdoc/require-returns-description': ['warn', { contexts }], + "jsdoc/require-description": ["warn", { contexts }], + "jsdoc/require-description-complete-sentence": ["warn"], + "jsdoc/require-hyphen-before-param-description": ["warn"], + "jsdoc/require-param": ["warn", { contexts, checkDestructured: false }], + "jsdoc/require-param-description": ["warn", { contexts }], + "jsdoc/require-param-name": ["warn", { contexts }], + "jsdoc/require-property": ["warn", { contexts }], + "jsdoc/require-property-description": ["warn", { contexts }], + "jsdoc/require-property-name": ["warn", { contexts }], + "jsdoc/require-returns": ["warn", { contexts }], + "jsdoc/require-returns-description": ["warn", { contexts }], }, - ignorePatterns: ['node_modules', 'dest*', 'dist', '*.js', '.eslintrc.cjs'], + ignorePatterns: ["node_modules", "dest*", "dist", "*.js", ".eslintrc.cjs"], }; diff --git a/ts/.yalc/@aztec/log/dest/index.d.ts b/ts/.yalc/@aztec/log/dest/index.d.ts new file mode 100644 index 0000000000..ec158175aa --- /dev/null +++ b/ts/.yalc/@aztec/log/dest/index.d.ts @@ -0,0 +1,11 @@ +/** + * Type for a logger. + */ +export type DebugLogger = (...args: any[]) => void; +/** + * Creates a logger. + * TODO port aztec2 logger over. + * @param moduleName - Name of module for logging or filtering purposes. + */ +export declare function createDebugLogger(moduleName: string): DebugLogger; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/log/dest/index.d.ts.map b/ts/.yalc/@aztec/log/dest/index.d.ts.map new file mode 100644 index 0000000000..95d18c16e9 --- /dev/null +++ b/ts/.yalc/@aztec/log/dest/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AACnD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAEjE"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/log/dest/index.js b/ts/.yalc/@aztec/log/dest/index.js new file mode 100644 index 0000000000..7986ed755b --- /dev/null +++ b/ts/.yalc/@aztec/log/dest/index.js @@ -0,0 +1,9 @@ +/** + * Creates a logger. + * TODO port aztec2 logger over. + * @param moduleName - Name of module for logging or filtering purposes. + */ +export function createDebugLogger(moduleName) { + return (...args) => console.log(moduleName, ...args); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxPQUFPLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/index.d.ts b/ts/.yalc/@aztec/wasm/dest/index.d.ts new file mode 100644 index 0000000000..a363b56ac2 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/index.d.ts @@ -0,0 +1,8 @@ +export { WebDataStore } from './worker/browser/index.js'; +export { NodeDataStore } from './worker/node/index.js'; +export { WasmWorker, WorkerPool } from './worker/index.js'; +export { WasmModule } from './wasm/index.js'; +export { AsyncCallState, AsyncFnState } from './wasm/index.js'; +export { DispatchMsg, WorkerListener, TransportServer, NodeListener } from './transport/index.js'; +export { Transfer, isTransferDescriptor } from './transport/interface/transferable.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/index.d.ts.map new file mode 100644 index 0000000000..a6a4ba6385 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/index.js b/ts/.yalc/@aztec/wasm/dest/index.js new file mode 100644 index 0000000000..6f596b6571 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/index.js @@ -0,0 +1,8 @@ +export { WebDataStore } from './worker/browser/index.js'; +export { NodeDataStore } from './worker/node/index.js'; +export { WorkerPool } from './worker/index.js'; +export { WasmModule } from './wasm/index.js'; +export { AsyncCallState } from './wasm/index.js'; +export { WorkerListener, TransportServer, NodeListener } from './transport/index.js'; +export { Transfer, isTransferDescriptor } from './transport/interface/transferable.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFlLGNBQWMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts b/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts new file mode 100644 index 0000000000..de592d842b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts @@ -0,0 +1,46 @@ +/** + * A simple fifo queue. It can grow unbounded. It can have multiple producers and consumers. + * Putting an item onto the queue always succeeds, unless either end() or cancel() has been called in which case + * the item being pushed is simply discarded. + */ +export declare class MemoryFifo { + private waiting; + private items; + private flushing; + /** + * Length of queue. + * @returns integer. + */ + length(): number; + /** + * Returns next item within the queue, or blocks until and item has been put into the queue. + * If given a timeout, the promise will reject if no item is received after `timeout` seconds. + * If the queue is flushing, `null` is returned. + * @param timeout - In seconds. + * @returns Promise of result. + */ + get(timeout?: number): Promise; + /** + * Put an item onto back of the queue. + * @param item - The item to enqueue. + */ + put(item: T): void; + /** + * Once ended, no further items are added to queue. Consumers will consume remaining items within the queue. + * The queue is not reusable after calling `end()`. + * Any consumers waiting for an item receive null. + */ + end(): void; + /** + * Once cancelled, all items are discarded from the queue, and no further items are added to the queue. + * The queue is not reusable after calling `cancel()`. + * Any consumers waiting for an item receive null. + */ + cancel(): void; + /** + * Helper method that can be used to continously consume and process items on the queue. + * @param handler - The item handler function. + */ + process(handler: (item: T) => Promise): Promise; +} +//# sourceMappingURL=memory_fifo.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts.map b/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts.map new file mode 100644 index 0000000000..9bb1710ce1 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/memory_fifo.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"memory_fifo.d.ts","sourceRoot":"","sources":["../src/memory_fifo.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IACI,MAAM;IAIb;;;;;;OAMG;IACI,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAyB/C;;;OAGG;IACI,GAAG,CAAC,IAAI,EAAE,CAAC;IAUlB;;;;OAIG;IACI,GAAG;IAKV;;;;OAIG;IACI,MAAM;IAMb;;;OAGG;IACU,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CAazD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/memory_fifo.js b/ts/.yalc/@aztec/wasm/dest/memory_fifo.js new file mode 100644 index 0000000000..f742e3a773 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/memory_fifo.js @@ -0,0 +1,101 @@ +// TODO should come from a dependency +/** + * A simple fifo queue. It can grow unbounded. It can have multiple producers and consumers. + * Putting an item onto the queue always succeeds, unless either end() or cancel() has been called in which case + * the item being pushed is simply discarded. + */ +export class MemoryFifo { + constructor() { + this.waiting = []; + this.items = []; + this.flushing = false; + } + /** + * Length of queue. + * @returns integer. + */ + length() { + return this.items.length; + } + /** + * Returns next item within the queue, or blocks until and item has been put into the queue. + * If given a timeout, the promise will reject if no item is received after `timeout` seconds. + * If the queue is flushing, `null` is returned. + * @param timeout - In seconds. + * @returns Promise of result. + */ + get(timeout) { + if (this.items.length) { + return Promise.resolve(this.items.shift()); + } + if (this.items.length === 0 && this.flushing) { + return Promise.resolve(null); + } + return new Promise((resolve, reject) => { + this.waiting.push(resolve); + if (timeout) { + setTimeout(() => { + const index = this.waiting.findIndex(r => r === resolve); + if (index > -1) { + this.waiting.splice(index, 1); + const err = new Error('Timeout getting item from queue.'); + reject(err); + } + }, timeout * 1000); + } + }); + } + /** + * Put an item onto back of the queue. + * @param item - The item to enqueue. + */ + put(item) { + if (this.flushing) { + return; + } + else if (this.waiting.length) { + this.waiting.shift()(item); + } + else { + this.items.push(item); + } + } + /** + * Once ended, no further items are added to queue. Consumers will consume remaining items within the queue. + * The queue is not reusable after calling `end()`. + * Any consumers waiting for an item receive null. + */ + end() { + this.flushing = true; + this.waiting.forEach(resolve => resolve(null)); + } + /** + * Once cancelled, all items are discarded from the queue, and no further items are added to the queue. + * The queue is not reusable after calling `cancel()`. + * Any consumers waiting for an item receive null. + */ + cancel() { + this.flushing = true; + this.items = []; + this.waiting.forEach(resolve => resolve(null)); + } + /** + * Helper method that can be used to continously consume and process items on the queue. + * @param handler - The item handler function. + */ + async process(handler) { + try { + while (true) { + const item = await this.get(); + if (item === null) { + break; + } + await handler(item); + } + } + catch (err) { + console.error('Queue handler exception:', err); + } + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2ZpZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWVtb3J5X2ZpZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUNBQXFDO0FBQ3JDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUF2QjtRQUNVLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBQzNDLFVBQUssR0FBUSxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQThGM0IsQ0FBQztJQTVGQzs7O09BR0c7SUFDSSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFDLE9BQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFHLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUzQixJQUFJLE9BQU8sRUFBRTtnQkFDWCxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO29CQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7d0JBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDYjtnQkFDSCxDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksR0FBRyxDQUFDLElBQU87UUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEdBQUc7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUM7UUFDdEQsSUFBSTtZQUNGLE9BQU8sSUFBSSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM5QixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQ2pCLE1BQU07aUJBQ1A7Z0JBQ0QsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckI7U0FDRjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts new file mode 100644 index 0000000000..9432a480ed --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts @@ -0,0 +1,5 @@ +export * from './worker_connector.js'; +export * from './worker_listener.js'; +export * from './shared_worker_connector.js'; +export * from './shared_worker_listener.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts.map new file mode 100644 index 0000000000..381d5165ff --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/index.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.js new file mode 100644 index 0000000000..d0103503cb --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/index.js @@ -0,0 +1,5 @@ +export * from './worker_connector.js'; +export * from './worker_listener.js'; +export * from './shared_worker_connector.js'; +export * from './shared_worker_listener.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L2Jyb3dzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw2QkFBNkIsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts new file mode 100644 index 0000000000..65fcce26e3 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts @@ -0,0 +1,28 @@ +import { Socket } from '../interface/socket.js'; +/** + * An implementation of a TransportSocket using MessagePorts. + */ +export declare class MessagePortSocket implements Socket { + private port; + /** + * Create a MessagePortSocket. + * @param port - MessagePort object to wrap. + */ + constructor(port: MessagePort); + /** + * Send a message over our message port. + * @param msg - The message. + * @param transfer - Objects to transfer ownership of. + */ + send(msg: any, transfer?: Transferable[]): Promise; + /** + * Add a message handler. + * @param cb - The handler. + */ + registerHandler(cb: (msg: any) => any): void; + /** + * Close this message port. + */ + close(): void; +} +//# sourceMappingURL=message_port_socket.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts.map new file mode 100644 index 0000000000..077d4623f5 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"message_port_socket.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/message_port_socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,MAAM;IAKlC,OAAO,CAAC,IAAI;IAJxB;;;OAGG;gBACiB,IAAI,EAAE,WAAW;IAErC;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAE,YAAY,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI;IAI5C;;OAEG;IACH,KAAK;CAKN"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.js new file mode 100644 index 0000000000..03387a31f8 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/message_port_socket.js @@ -0,0 +1,37 @@ +/** + * An implementation of a TransportSocket using MessagePorts. + */ +export class MessagePortSocket { + /** + * Create a MessagePortSocket. + * @param port - MessagePort object to wrap. + */ + constructor(port) { + this.port = port; + } + /** + * Send a message over our message port. + * @param msg - The message. + * @param transfer - Objects to transfer ownership of. + */ + send(msg, transfer = []) { + this.port.postMessage(msg, transfer); + return Promise.resolve(); + } + /** + * Add a message handler. + * @param cb - The handler. + */ + registerHandler(cb) { + this.port.onmessage = event => cb(event.data); + } + /** + * Close this message port. + */ + close() { + void this.send(undefined); + this.port.onmessage = null; + this.port.close(); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9wb3J0X3NvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvYnJvd3Nlci9tZXNzYWdlX3BvcnRfc29ja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7O09BR0c7SUFDSCxZQUFvQixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO0lBQUcsQ0FBQztJQUV6Qzs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEdBQVEsRUFBRSxXQUEyQixFQUFFO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEVBQXFCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts new file mode 100644 index 0000000000..032f9df12b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts @@ -0,0 +1,19 @@ +import { Connector } from '../interface/connector.js'; +import { MessagePortSocket } from './message_port_socket.js'; +/** + * Connector implementation which wraps a SharedWorker. + */ +export declare class SharedWorkerConnector implements Connector { + private worker; + /** + * Create a SharedWorkerConnector. + * @param worker - A shared worker. + */ + constructor(worker: SharedWorker); + /** + * Create a Socket implementation with our mesage port. + * @returns The socket. + */ + createSocket(): Promise; +} +//# sourceMappingURL=shared_worker_connector.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts.map new file mode 100644 index 0000000000..b745dd62ae --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"shared_worker_connector.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/shared_worker_connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IAKzC,OAAO,CAAC,MAAM;IAJ1B;;;OAGG;gBACiB,MAAM,EAAE,YAAY;IAExC;;;OAGG;IACH,YAAY;CAGb"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.js new file mode 100644 index 0000000000..fa8778b40a --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_connector.js @@ -0,0 +1,21 @@ +import { MessagePortSocket } from './message_port_socket.js'; +/** + * Connector implementation which wraps a SharedWorker. + */ +export class SharedWorkerConnector { + /** + * Create a SharedWorkerConnector. + * @param worker - A shared worker. + */ + constructor(worker) { + this.worker = worker; + } + /** + * Create a Socket implementation with our mesage port. + * @returns The socket. + */ + createSocket() { + return Promise.resolve(new MessagePortSocket(this.worker.port)); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkX3dvcmtlcl9jb25uZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L2Jyb3dzZXIvc2hhcmVkX3dvcmtlcl9jb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDOzs7T0FHRztJQUNILFlBQW9CLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7SUFBRyxDQUFDO0lBRTVDOzs7T0FHRztJQUNILFlBQVk7UUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts new file mode 100644 index 0000000000..e6e93d9b21 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts @@ -0,0 +1,38 @@ +/// +import EventEmitter from 'events'; +import { Listener } from '../interface/listener.js'; +/** + * See https://developer.mozilla.org/en-US/docs/Web/API/SharedWorkerGlobalScope. + */ +declare interface SharedWorkerGlobalScope { + /** + * Fired on shared workers when a new client connects. + */ + onconnect: any; +} +/** + * Listens for connections to a shared worker. + */ +export declare class SharedWorkerListener extends EventEmitter implements Listener { + private worker; + /** + * + * @param worker + */ + constructor(worker: SharedWorkerGlobalScope); + /** + * + */ + open(): void; + /** + * + */ + close(): void; + /** + * + * @param event + */ + private handleMessageEvent; +} +export {}; +//# sourceMappingURL=shared_worker_listener.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts.map new file mode 100644 index 0000000000..72ac8c251e --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"shared_worker_listener.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/shared_worker_listener.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD;;GAEG;AACH,OAAO,WAAW,uBAAuB;IACvC;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAa,YAAW,QAAQ;IAK5D,OAAO,CAAC,MAAM;IAJ1B;;;OAGG;gBACiB,MAAM,EAAE,uBAAuB;IAInD;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,KAAK;IAIL;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAMxB;CACH"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.js new file mode 100644 index 0000000000..e0cec42374 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/shared_worker_listener.js @@ -0,0 +1,39 @@ +import EventEmitter from 'events'; +import { MessagePortSocket } from './message_port_socket.js'; +/** + * Listens for connections to a shared worker. + */ +export class SharedWorkerListener extends EventEmitter { + /** + * + * @param worker + */ + constructor(worker) { + super(); + this.worker = worker; + /** + * + * @param event + */ + this.handleMessageEvent = (event) => { + const [port] = event.ports; + if (!port) { + return; + } + this.emit('new_socket', new MessagePortSocket(port)); + }; + } + /** + * + */ + open() { + this.worker.onconnect = this.handleMessageEvent; + } + /** + * + */ + close() { + this.worker.onconnect = () => { }; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkX3dvcmtlcl9saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvYnJvd3Nlci9zaGFyZWRfd29ya2VyX2xpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVk3RDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxZQUFZO0lBQ3BEOzs7T0FHRztJQUNILFlBQW9CLE1BQStCO1FBQ2pELEtBQUssRUFBRSxDQUFDO1FBRFUsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFrQm5EOzs7V0FHRztRQUNLLHVCQUFrQixHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQztJQTFCRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQWFGIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts new file mode 100644 index 0000000000..a7eba90c1a --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts @@ -0,0 +1,18 @@ +import { Connector } from '../interface/connector.js'; +import { MessagePortSocket } from './message_port_socket.js'; +/** + * + */ +export declare class WorkerConnector implements Connector { + private worker; + /** + * + * @param worker + */ + constructor(worker: Worker); + /** + * + */ + createSocket(): Promise; +} +//# sourceMappingURL=worker_connector.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts.map new file mode 100644 index 0000000000..a0af81a877 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"worker_connector.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/worker_connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAKnC,OAAO,CAAC,MAAM;IAJ1B;;;OAGG;gBACiB,MAAM,EAAE,MAAM;IAElC;;OAEG;IACH,YAAY;CAKb"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.js new file mode 100644 index 0000000000..4faae6403c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_connector.js @@ -0,0 +1,22 @@ +import { MessagePortSocket } from './message_port_socket.js'; +/** + * + */ +export class WorkerConnector { + /** + * + * @param worker + */ + constructor(worker) { + this.worker = worker; + } + /** + * + */ + createSocket() { + const channel = new MessageChannel(); + this.worker.postMessage('', [channel.port2]); + return Promise.resolve(new MessagePortSocket(channel.port1)); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2Nvbm5lY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvYnJvd3Nlci93b3JrZXJfY29ubmVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7OztPQUdHO0lBQ0gsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts new file mode 100644 index 0000000000..135a82ed2c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts @@ -0,0 +1,38 @@ +/// +import EventEmitter from 'events'; +import { Listener } from '../interface/listener.js'; +/** + * + */ +declare interface DedicatedWorkerGlobalScope { + /** + * + */ + onmessage: any; +} +/** + * + */ +export declare class WorkerListener extends EventEmitter implements Listener { + private worker; + /** + * + * @param worker + */ + constructor(worker: DedicatedWorkerGlobalScope); + /** + * + */ + open(): void; + /** + * + */ + close(): void; + /** + * + * @param event + */ + private handleMessageEvent; +} +export {}; +//# sourceMappingURL=worker_listener.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts.map new file mode 100644 index 0000000000..778536fc69 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"worker_listener.d.ts","sourceRoot":"","sources":["../../../src/transport/browser/worker_listener.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD;;GAEG;AACH,OAAO,WAAW,0BAA0B;IAC1C;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAKtD,OAAO,CAAC,MAAM;IAJ1B;;;OAGG;gBACiB,MAAM,EAAE,0BAA0B;IAItD;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,KAAK;IAIL;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAMxB;CACH"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.js b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.js new file mode 100644 index 0000000000..75430d08d9 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/browser/worker_listener.js @@ -0,0 +1,39 @@ +import EventEmitter from 'events'; +import { MessagePortSocket } from './message_port_socket.js'; +/** + * + */ +export class WorkerListener extends EventEmitter { + /** + * + * @param worker + */ + constructor(worker) { + super(); + this.worker = worker; + /** + * + * @param event + */ + this.handleMessageEvent = (event) => { + const [port] = event.ports; + if (!port) { + return; + } + this.emit('new_socket', new MessagePortSocket(port)); + }; + } + /** + * + */ + open() { + this.worker.onmessage = this.handleMessageEvent; + } + /** + * + */ + close() { + this.worker.onmessage = () => { }; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2xpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9icm93c2VyL3dvcmtlcl9saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFZN0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLFlBQVk7SUFDOUM7OztPQUdHO0lBQ0gsWUFBb0IsTUFBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxXQUFNLEdBQU4sTUFBTSxDQUE0QjtRQWtCdEQ7OztXQUdHO1FBQ0ssdUJBQWtCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDO0lBMUJGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBYUYifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts new file mode 100644 index 0000000000..fdb3921fac --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts @@ -0,0 +1,21 @@ +/** + * + */ +export interface DispatchMsg { + /** + * + */ + fn: string; + /** + * + */ + args: any[]; +} +/** + * + */ +export declare function createDispatchFn(targetFn: () => any, debug?: { + (...data: any[]): void; + (message?: any, ...optionalParams: any[]): void; +}): ({ fn, args }: DispatchMsg) => Promise; +//# sourceMappingURL=create_dispatch_fn.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts.map new file mode 100644 index 0000000000..a8e465a9c1 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"create_dispatch_fn.d.ts","sourceRoot":"","sources":["../../../src/transport/dispatch/create_dispatch_fn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,KAAK;;;CAAgB,kBAC7C,WAAW,kBAKxC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.js b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.js new file mode 100644 index 0000000000..09b635703d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_fn.js @@ -0,0 +1,11 @@ +/** + * + */ +export function createDispatchFn(targetFn, debug = console.error) { + return async ({ fn, args }) => { + const target = targetFn(); + debug(`dispatching to ${target}: ${fn}`, args); + return await target[fn](...args); + }; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2Rpc3BhdGNoX2ZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9kaXNwYXRjaC9jcmVhdGVfZGlzcGF0Y2hfZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBbUIsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUs7SUFDekUsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFlLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsa0JBQWtCLE1BQU0sS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxPQUFPLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts new file mode 100644 index 0000000000..27edab62dc --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts @@ -0,0 +1,50 @@ +import { DispatchMsg } from './create_dispatch_fn.js'; +import { TransportClient } from '../transport_client.js'; +import { TransferDescriptor } from '../interface/transferable.js'; +type FilterOutAttributes = { + [Key in keyof Base]: Base[Key] extends (...args: any) => any ? Base[Key] : never; +}; +type PromisifyFunction any> = (...args: Parameters) => Promise>; +type Promisify any; +}> = { + [Key in keyof Base]: ReturnType extends Promise ? Base[Key] : PromisifyFunction; +}; +/** + * Unpack transfer types + */ +type TransferTypes = { + [Index in keyof Tuple]: Tuple[Index] | (Tuple[Index] extends Transferable ? TransferDescriptor : never); +}; +/** + * Annoying: https://github.com/microsoft/TypeScript/issues/29919 + * There's a bug that means we can't map over the tuple or function parameter types to make them transferrable, if + * we use the Parameters builtin, and then try to map. + * So instead we inline the Parameters builtin and apply the TransferTypes to the parameters within the inline. + * Once the above is fixed we could in theory just do: + * + * type MakeFunctionTransferrable any> = ( + * ...args: TransferTypes> + * ) => ReturnType;. + */ +type MakeFunctionTransferrable any> = (...args: TFunction extends (...args: infer P) => any ? TransferTypes

: never) => ReturnType; +type Transferrable any; +}> = { + [Key in keyof Base]: MakeFunctionTransferrable; +}; +export type Proxify = Promisify>>; +export declare function createDispatchProxyFromFn(class_: { + new (...args: any[]): T; +}, requestFn: (fn: string) => (...args: any[]) => Promise): Proxify; +/** + * Create a proxy object of our class T that uses transportClient + * @param class_ - Our class T. + * @param transportClient - The transport infrastructure. + * @returns A proxy over T. + */ +export declare function createDispatchProxy(class_: { + new (...args: any[]): T; +}, transportClient: TransportClient): Proxify; +export {}; +//# sourceMappingURL=create_dispatch_proxy.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts.map new file mode 100644 index 0000000000..8e5e12339b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"create_dispatch_proxy.d.ts","sourceRoot":"","sources":["../../../src/transport/dispatch/create_dispatch_proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAwB,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAExF,KAAK,mBAAmB,CAAC,IAAI,IAAI;KAC9B,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;CACjF,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7G,KAAK,SAAS,CAAC,IAAI,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAA;CAAE,IAAI;KACrE,GAAG,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC3G,CAAC;AAEF;;GAEG;AACH,KAAK,aAAa,CAAC,KAAK,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI;KAChD,KAAK,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;CACtH,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,yBAAyB,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CACxE,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,KAC5E,UAAU,CAAC,SAAS,CAAC,CAAC;AAE3B,KAAK,aAAa,CAAC,IAAI,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,IAAI;KAC3E,GAAG,IAAI,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,MAAM,EAAE;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,EACnC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC1D,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,EACnC,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,GAC5C,OAAO,CAAC,CAAC,CAAC,CAqBZ"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.js b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.js new file mode 100644 index 0000000000..49833dfc74 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/create_dispatch_proxy.js @@ -0,0 +1,38 @@ +import { EventEmitter } from 'events'; +import { isTransferDescriptor } from '../interface/transferable.js'; +export function createDispatchProxyFromFn(class_, requestFn) { + const proxy = class_.prototype instanceof EventEmitter ? new EventEmitter() : {}; + for (const fn of Object.getOwnPropertyNames(class_.prototype)) { + if (fn === 'constructor') { + continue; + } + proxy[fn] = requestFn(fn); + } + return proxy; +} +/** + * Create a proxy object of our class T that uses transportClient + * @param class_ - Our class T. + * @param transportClient - The transport infrastructure. + * @returns A proxy over T. + */ +export function createDispatchProxy(class_, transportClient) { + // Create a proxy of class_ that passes along methods over our transportClient + const proxy = createDispatchProxyFromFn(class_, (fn) => (...args) => { + // Pass our proxied function name and arguments over our transport client + const transfer = args.reduce((acc, a) => (isTransferDescriptor(a) ? [...acc, ...a.transferables] : acc), []); + args = args.map(a => (isTransferDescriptor(a) ? a.send : a)); + return transportClient.request({ fn, args }, transfer); + }); + if (proxy instanceof EventEmitter) { + // Handle proxied 'emit' calls if our proxy object is an EventEmitter + transportClient.on('event_msg', ({ fn, args }) => { + if (fn === 'emit') { + const [eventName, ...restArgs] = args; + proxy.emit(eventName, ...restArgs); + } + }); + } + return proxy; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2Rpc3BhdGNoX3Byb3h5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9kaXNwYXRjaC9jcmVhdGVfZGlzcGF0Y2hfcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQXNCLE1BQU0sOEJBQThCLENBQUM7QUF3Q3hGLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsTUFBbUMsRUFDbkMsU0FBMkQ7SUFFM0QsTUFBTSxLQUFLLEdBQVEsTUFBTSxDQUFDLFNBQVMsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0RixLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDN0QsSUFBSSxFQUFFLEtBQUssYUFBYSxFQUFFO1lBQ3hCLFNBQVM7U0FDVjtRQUNELEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBbUMsRUFDbkMsZUFBNkM7SUFFN0MsOEVBQThFO0lBQzlFLE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1FBQ2pGLHlFQUF5RTtRQUN6RSxNQUFNLFFBQVEsR0FBbUIsSUFBSSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDMUUsRUFBb0IsQ0FDckIsQ0FBQztRQUNGLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUU7UUFDakMscUVBQXFFO1FBQ3JFLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7YUFDcEM7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts new file mode 100644 index 0000000000..c8e36c087a --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts @@ -0,0 +1,45 @@ +/** + * Represents a transport bus request. + */ +export interface RequestMessage { + /** + * The message ID. + */ + msgId: number; + /** + * The data. + */ + payload: Payload; +} +/** + * Represents a transport bus response. + */ +export interface ResponseMessage { + /** + * The message ID. + */ + msgId: number; + /** + * The data. + */ + payload?: Payload; + /** + * The error, if any. + */ + error?: string; +} +/** + * A message stemming from an event. + */ +export interface EventMessage { + /** + * The event data. + */ + payload: Payload; +} +/** + * Is this an event message? + * @returns If the msgId was blank. + */ +export declare function isEventMessage(msg: ResponseMessage | EventMessage): msg is EventMessage; +//# sourceMappingURL=messages.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts.map new file mode 100644 index 0000000000..115e820679 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/transport/dispatch/messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO;IACtC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO;IACnC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EACpC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GACpD,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAE9B"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.js b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.js new file mode 100644 index 0000000000..b5d7659523 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/dispatch/messages.js @@ -0,0 +1,8 @@ +/** + * Is this an event message? + * @returns If the msgId was blank. + */ +export function isEventMessage(msg) { + return msg.msgId === undefined; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L2Rpc3BhdGNoL21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBDQTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFxRDtJQUVyRCxPQUFRLEdBQWdDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvRCxDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts new file mode 100644 index 0000000000..0989a811a3 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts @@ -0,0 +1,12 @@ +export * from './dispatch/create_dispatch_fn.js'; +export * from './dispatch/create_dispatch_proxy.js'; +export * from './dispatch/messages.js'; +export * from './interface/connector.js'; +export * from './interface/listener.js'; +export * from './interface/socket.js'; +export * from './interface/transferable.js'; +export * from './transport_client.js'; +export * from './transport_server.js'; +export * from './browser/index.js'; +export * from './node/index.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts.map new file mode 100644 index 0000000000..d5bded64e1 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/index.js b/ts/.yalc/@aztec/wasm/dest/transport/index.js new file mode 100644 index 0000000000..70b1b56c44 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/index.js @@ -0,0 +1,12 @@ +export * from './dispatch/create_dispatch_fn.js'; +export * from './dispatch/create_dispatch_proxy.js'; +export * from './dispatch/messages.js'; +export * from './interface/connector.js'; +export * from './interface/listener.js'; +export * from './interface/socket.js'; +export * from './interface/transferable.js'; +export * from './transport_client.js'; +export * from './transport_server.js'; +export * from './browser/index.js'; +export * from './node/index.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNwb3J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts new file mode 100644 index 0000000000..828e9aab7b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts @@ -0,0 +1,8 @@ +import { Socket } from './socket.js'; +/** + * Opens a socket with corresponding TransportListener. + */ +export interface Connector { + createSocket(): Promise; +} +//# sourceMappingURL=connector.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts.map new file mode 100644 index 0000000000..62006c17ce --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/transport/interface/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.js b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.js new file mode 100644 index 0000000000..7d5ac106da --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/connector.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9pbnRlcmZhY2UvY29ubmVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts new file mode 100644 index 0000000000..4d0baa4357 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts @@ -0,0 +1,13 @@ +/// +import EventEmitter from 'events'; +import { Socket } from './socket.js'; +/** + * Once opened, an implementation of a TransportListener will emit `new_socket` events as new clients connect. + * Possible implementations could include MessageChannels or WebSockets. + */ +export interface Listener extends EventEmitter { + open(): void; + close(): void; + on(name: 'new_socket', cb: (client: Socket) => void): this; +} +//# sourceMappingURL=listener.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts.map new file mode 100644 index 0000000000..a326bd6b21 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/transport/interface/listener.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,IAAI,IAAI,IAAI,CAAC;IAEb,KAAK,IAAI,IAAI,CAAC;IAEd,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CAC5D"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.js b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.js new file mode 100644 index 0000000000..196998386c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/listener.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L2ludGVyZmFjZS9saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts new file mode 100644 index 0000000000..39e6a4e4a6 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts @@ -0,0 +1,13 @@ +/** + * Represents one end of a socket connection. + * A message sent via `send` will be handled by the corresponding Socket's handler function at the other end. + * Implementations could use e.g. MessagePorts for communication between browser workers, + * or WebSockets for communication between processes. + * If `registerHandler` callback receives `undefined` that signals the other end closed. + */ +export interface Socket { + send(msg: any, transfer?: Transferable[]): Promise; + registerHandler(cb: (msg: any) => any): void; + close(): void; +} +//# sourceMappingURL=socket.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts.map new file mode 100644 index 0000000000..a7714e3a53 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/transport/interface/socket.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC;CACf"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.js b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.js new file mode 100644 index 0000000000..5a28a6f054 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/socket.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9pbnRlcmZhY2Uvc29ja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts new file mode 100644 index 0000000000..f8ef5f290e --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts @@ -0,0 +1,60 @@ +declare const $transferable: unique symbol; +/** + * A descriptor representing a payload with transferable components. + * These components will have ownership transfered when published on an event bus. + */ +export interface TransferDescriptor { + /** + * Marked as transferable. + */ + [$transferable]: true; + /** + * The payload with the transferable objects. + */ + send: T; + /** + * The objects to transfer. + */ + transferables: Transferable[]; +} +/** + * + */ +export declare function isTransferDescriptor(thing: any): thing is TransferDescriptor; +/** + * Mark a transferable object as such, so it will no be serialized and + * deserialized on messaging with the main thread, but to transfer + * ownership of it to the receiving thread. + * + * Only works with array buffers, message ports and few more special + * types of objects, but it's much faster than serializing and + * deserializing them. + * + * Note: + * The transferable object cannot be accessed by this thread again + * unless the receiving thread transfers it back again! + * + * @param transferable - Array buffer, message port or similar. + * @see https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast + */ +export declare function Transfer(transferable: Transferable): TransferDescriptor; +/** + * Mark transferable objects within an arbitrary object or array as + * being a transferable object. They will then not be serialized + * and deserialized on messaging with the main thread, but ownership + * of them will be tranferred to the receiving thread. + * + * Only array buffers, message ports and few more special types of + * objects can be transferred, but it's much faster than serializing and + * deserializing them. + * + * Note: + * The transferable object cannot be accessed by this thread again + * unless the receiving thread transfers it back again! + * + * @param transferable - Array buffer, message port or similar. + * @see https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast + */ +export declare function Transfer(payload: T, transferables: Transferable[]): TransferDescriptor; +export {}; +//# sourceMappingURL=transferable.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts.map new file mode 100644 index 0000000000..5126c83a73 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../../../src/transport/interface/transferable.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,eAAgC,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC;;OAEG;IACH,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC;IACR;;OAEG;IACH,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAWD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,kBAAkB,CAE5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.js b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.js new file mode 100644 index 0000000000..e815bbc833 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/interface/transferable.js @@ -0,0 +1,35 @@ +const $transferable = Symbol('thread.transferable'); +/** + * + */ +function isTransferable(thing) { + if (!thing || typeof thing !== 'object') + return false; + // Don't check too thoroughly, since the list of transferable things in JS might grow over time + return true; +} +/** + * + */ +export function isTransferDescriptor(thing) { + return thing && typeof thing === 'object' && thing[$transferable]; +} +/** + * Create a transfer descriptor, marking these as transferable. + * @param payload - The payload. + * @param transferables - The transferable objects. + * @returns The descriptor. + */ +export function Transfer(payload, transferables) { + if (!transferables) { + if (!isTransferable(payload)) + throw Error(); + transferables = [payload]; + } + return { + [$transferable]: true, + send: payload, + transferables, + }; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9pbnRlcmZhY2UvdHJhbnNmZXJhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBcUJwRDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQVU7SUFDaEMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsK0ZBQStGO0lBQy9GLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQVU7SUFDN0MsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBdUNEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBSSxPQUFVLEVBQUUsYUFBOEI7SUFDcEUsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztZQUFFLE1BQU0sS0FBSyxFQUFFLENBQUM7UUFDNUMsYUFBYSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJO1FBQ3JCLElBQUksRUFBRSxPQUFPO1FBQ2IsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts new file mode 100644 index 0000000000..a39c08a0d4 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts @@ -0,0 +1,3 @@ +export * from './node_connector.js'; +export * from './node_listener.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts.map new file mode 100644 index 0000000000..1ea4d29d0e --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/index.js b/ts/.yalc/@aztec/wasm/dest/transport/node/index.js new file mode 100644 index 0000000000..07a86060aa --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/index.js @@ -0,0 +1,3 @@ +export * from './node_connector.js'; +export * from './node_listener.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts new file mode 100644 index 0000000000..b1d8890543 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts @@ -0,0 +1,17 @@ +/// +import { Worker } from 'worker_threads'; +import { Connector } from '../interface/connector.js'; +import { NodeConnectorSocket } from './node_connector_socket.js'; +/** + * Creates sockets backed by a Node worker. + */ +export declare class NodeConnector implements Connector { + private worker; + constructor(worker: Worker); + /** + * Creates a socket backed by a node worker. + * @returns The socket. + */ + createSocket(): Promise; +} +//# sourceMappingURL=node_connector.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts.map new file mode 100644 index 0000000000..57ef4337f7 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_connector.d.ts","sourceRoot":"","sources":["../../../src/transport/node/node_connector.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;GAEG;AACH,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;OAGG;IACH,YAAY;CAGb"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.js b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.js new file mode 100644 index 0000000000..2525dc3809 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector.js @@ -0,0 +1,17 @@ +import { NodeConnectorSocket } from './node_connector_socket.js'; +/** + * Creates sockets backed by a Node worker. + */ +export class NodeConnector { + constructor(worker) { + this.worker = worker; + } + /** + * Creates a socket backed by a node worker. + * @returns The socket. + */ + createSocket() { + return Promise.resolve(new NodeConnectorSocket(this.worker)); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9jb25uZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L25vZGUvbm9kZV9jb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFdEM7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts new file mode 100644 index 0000000000..a87192030c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts @@ -0,0 +1,27 @@ +/// +import { Worker } from 'worker_threads'; +import { Socket } from '../interface/socket.js'; +/** + * A socket implementation using a Node worker. + */ +export declare class NodeConnectorSocket implements Socket { + private worker; + constructor(worker: Worker); + /** + * Send a message. + * @param msg - The message. + * @param transfer - Objects to transfer ownership of. + * @returns A void promise. + */ + send(msg: any, transfer?: Transferable[]): Promise; + /** + * Register a message handler. + * @param cb - The handler function. + */ + registerHandler(cb: (msg: any) => any): void; + /** + * Remove all listeners from our worker. + */ + close(): void; +} +//# sourceMappingURL=node_connector_socket.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts.map new file mode 100644 index 0000000000..a7bbda3ff5 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_connector_socket.d.ts","sourceRoot":"","sources":["../../../src/transport/node/node_connector_socket.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,MAAM;IACpC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAE,YAAY,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI;IAI5C;;OAEG;IACH,KAAK;CAIN"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.js b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.js new file mode 100644 index 0000000000..25eb2f34e2 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_connector_socket.js @@ -0,0 +1,33 @@ +/** + * A socket implementation using a Node worker. + */ +export class NodeConnectorSocket { + constructor(worker) { + this.worker = worker; + } + /** + * Send a message. + * @param msg - The message. + * @param transfer - Objects to transfer ownership of. + * @returns A void promise. + */ + send(msg, transfer = []) { + this.worker.postMessage(msg, transfer); + return Promise.resolve(); + } + /** + * Register a message handler. + * @param cb - The handler function. + */ + registerHandler(cb) { + this.worker.on('message', cb); + } + /** + * Remove all listeners from our worker. + */ + close() { + void this.send(undefined); + this.worker.removeAllListeners(); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9jb25uZWN0b3Jfc29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9ub2RlL25vZGVfY29ubmVjdG9yX3NvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLEdBQVEsRUFBRSxXQUEyQixFQUFFO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUE4QixDQUFDLENBQUM7UUFDN0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFxQjtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts new file mode 100644 index 0000000000..e9bf26a20c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts @@ -0,0 +1,18 @@ +/// +import EventEmitter from 'events'; +import { Listener } from '../interface/listener.js'; +/** + * A socket listener that works with Node. + */ +export declare class NodeListener extends EventEmitter implements Listener { + constructor(); + /** + * Open the listener. + */ + open(): void; + /** + * Close the listener. + */ + close(): void; +} +//# sourceMappingURL=node_listener.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts.map new file mode 100644 index 0000000000..e15acee10b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_listener.d.ts","sourceRoot":"","sources":["../../../src/transport/node/node_listener.ts"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAa,YAAW,QAAQ;;IAKhE;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,KAAK;CACN"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.js b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.js new file mode 100644 index 0000000000..318369699a --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener.js @@ -0,0 +1,22 @@ +import { parentPort } from 'worker_threads'; +import EventEmitter from 'events'; +import { NodeListenerSocket } from './node_listener_socket.js'; +/** + * A socket listener that works with Node. + */ +export class NodeListener extends EventEmitter { + constructor() { + super(); + } + /** + * Open the listener. + */ + open() { + this.emit('new_socket', new NodeListenerSocket(parentPort)); + } + /** + * Close the listener. + */ + close() { } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvbm9kZS9ub2RlX2xpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLFlBQVksTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFDNUM7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGtCQUFrQixDQUFDLFVBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssS0FBSSxDQUFDO0NBQ1gifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts new file mode 100644 index 0000000000..ee114126de --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts @@ -0,0 +1,27 @@ +/// +import { MessagePort } from 'worker_threads'; +import { Socket } from '../interface/socket.js'; +/** + * An implementation of a TransportSocket using MessagePorts. + */ +export declare class NodeListenerSocket implements Socket { + private port; + constructor(port: MessagePort); + /** + * Send a message over this port. + * @param msg - The message. + * @param transfer - Transferable objects. + * @returns A void promise. + */ + send(msg: any, transfer?: Transferable[]): Promise; + /** + * Add a handler to this port. + * @param cb - The handler function. + */ + registerHandler(cb: (msg: any) => any): void; + /** + * Close this socket. + */ + close(): void; +} +//# sourceMappingURL=node_listener_socket.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts.map new file mode 100644 index 0000000000..31986e0cd0 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_listener_socket.d.ts","sourceRoot":"","sources":["../../../src/transport/node/node_listener_socket.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,MAAM;IACnC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,WAAW;IAErC;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAE,YAAY,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI;IAI5C;;OAEG;IACH,KAAK;CAKN"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.js b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.js new file mode 100644 index 0000000000..483c51bc0f --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/node/node_listener_socket.js @@ -0,0 +1,34 @@ +/** + * An implementation of a TransportSocket using MessagePorts. + */ +export class NodeListenerSocket { + constructor(port) { + this.port = port; + } + /** + * Send a message over this port. + * @param msg - The message. + * @param transfer - Transferable objects. + * @returns A void promise. + */ + send(msg, transfer = []) { + this.port.postMessage(msg, transfer); + return Promise.resolve(); + } + /** + * Add a handler to this port. + * @param cb - The handler function. + */ + registerHandler(cb) { + this.port.on('message', cb); + } + /** + * Close this socket. + */ + close() { + void this.send(undefined); + this.port.removeAllListeners(); + this.port.close(); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9saXN0ZW5lcl9zb2NrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwb3J0L25vZGUvbm9kZV9saXN0ZW5lcl9zb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW9CLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7SUFBRyxDQUFDO0lBRXpDOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLEdBQVEsRUFBRSxXQUEyQixFQUFFO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUE4QixDQUFDLENBQUM7UUFDM0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFxQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts new file mode 100644 index 0000000000..a70ae9fea5 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts @@ -0,0 +1,44 @@ +/// +import EventEmitter from 'events'; +import { Connector } from './interface/connector.js'; +/** + * Augments the TransportClient class with more precise EventEmitter types. + */ +export interface TransportClient extends EventEmitter { + on(name: 'event_msg', handler: (payload: Payload) => void): this; + emit(name: 'event_msg', payload: Payload): boolean; +} +/** + * A TransportClient provides a request/response and event api to a corresponding TransportServer. + * If `broadcast` is called on TransportServer, TransportClients will emit an `event_msg`. + * The `request` method will block until a response is returned from the TransportServer's dispatch function. + * Request multiplexing is supported. + */ +export declare class TransportClient extends EventEmitter { + private transportConnect; + private msgId; + private pendingRequests; + private socket?; + constructor(transportConnect: Connector); + /** + * Create and register our socket using our Connector. + */ + open(): Promise; + /** + * Close this and stop listening for messages. + */ + close(): void; + /** + * Queue a request. + * @param payload - The request payload. + * @param transfer - Objects to transfer ownership of. + * @returns A promise of the query result. + */ + request(payload: Payload, transfer?: Transferable[]): Promise; + /** + * Handle an incoming socket message. + * @param msg - The message. + */ + private handleSocketMessage; +} +//# sourceMappingURL=transport_client.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts.map new file mode 100644 index 0000000000..9d6db62d26 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transport_client.d.ts","sourceRoot":"","sources":["../../src/transport/transport_client.ts"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAiBrD;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO,CAAE,SAAQ,YAAY;IAC5D,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CACpD;AAED;;;;;GAKG;AACH,qBAAa,eAAe,CAAC,OAAO,CAAE,SAAQ,YAAY;IAK5C,OAAO,CAAC,gBAAgB;IAJpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEJ,gBAAgB,EAAE,SAAS;IAI/C;;OAEG;IACG,IAAI;IAKV;;OAEG;IACH,KAAK;IAML;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE;IAanD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAsB5B"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_client.js b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.js new file mode 100644 index 0000000000..ee8579704b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_client.js @@ -0,0 +1,79 @@ +import { createDebugLogger } from '@aztec/log'; +import EventEmitter from 'events'; +import { isEventMessage } from './dispatch/messages.js'; +const debug = createDebugLogger('aztec:transport_client'); +/** + * A TransportClient provides a request/response and event api to a corresponding TransportServer. + * If `broadcast` is called on TransportServer, TransportClients will emit an `event_msg`. + * The `request` method will block until a response is returned from the TransportServer's dispatch function. + * Request multiplexing is supported. + */ +export class TransportClient extends EventEmitter { + constructor(transportConnect) { + super(); + this.transportConnect = transportConnect; + this.msgId = 0; + this.pendingRequests = []; + } + /** + * Create and register our socket using our Connector. + */ + async open() { + this.socket = await this.transportConnect.createSocket(); + this.socket.registerHandler(msg => this.handleSocketMessage(msg)); + } + /** + * Close this and stop listening for messages. + */ + close() { + this.socket?.close(); + this.socket = undefined; + this.removeAllListeners(); + } + /** + * Queue a request. + * @param payload - The request payload. + * @param transfer - Objects to transfer ownership of. + * @returns A promise of the query result. + */ + request(payload, transfer) { + if (!this.socket) { + throw new Error('Socket not open.'); + } + const msgId = this.msgId++; + const msg = { msgId, payload }; + debug(`->`, msg); + return new Promise((resolve, reject) => { + this.pendingRequests.push({ resolve, reject, msgId }); + this.socket.send(msg, transfer).catch(reject); + }); + } + /** + * Handle an incoming socket message. + * @param msg - The message. + */ + handleSocketMessage(msg) { + if (msg === undefined) { + // The remote socket closed. + this.close(); + return; + } + debug(`<-`, msg); + if (isEventMessage(msg)) { + this.emit('event_msg', msg.payload); + return; + } + const reqIndex = this.pendingRequests.findIndex(r => r.msgId === msg.msgId); + if (reqIndex === -1) { + return; + } + const [pending] = this.pendingRequests.splice(reqIndex, 1); + if (msg.error) { + pending.reject(new Error(msg.error)); + } + else { + pending.resolve(msg.payload); + } + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0X2NsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnQvdHJhbnNwb3J0X2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDL0MsT0FBTyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBZ0IsY0FBYyxFQUFtQixNQUFNLHdCQUF3QixDQUFDO0FBSXZGLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFzQjFEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGVBQXlCLFNBQVEsWUFBWTtJQUt4RCxZQUFvQixnQkFBMkI7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFEVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVc7UUFKdkMsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztJQUsvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsT0FBZ0IsRUFBRSxRQUF5QjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDckM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQixPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssbUJBQW1CLENBQUMsR0FBaUU7UUFDM0YsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPO1NBQ1I7UUFDRCxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0wsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0NBQ0YifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts new file mode 100644 index 0000000000..109e9210f8 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts @@ -0,0 +1,44 @@ +import { Listener } from './interface/listener.js'; +/** + * Keeps track of clients, providing a broadcast, and request/response api with multiplexing. + */ +export declare class TransportServer { + private listener; + private msgHandlerFn; + private sockets; + constructor(listener: Listener, msgHandlerFn: (msg: Payload) => Promise); + /** + * Start accepting new connections. + */ + start(): void; + /** + * Stops accepting new connections. It doesn't close existing sockets. + * It's expected the clients will gracefully complete by closing their end, sending an `undefined` message. + */ + stop(): void; + /** + * Broadcast a message. + * @param msg - The message. + */ + broadcast(msg: Payload): Promise; + /** + * New socket registration. + * @param socket - The socket to register. + */ + private handleNewSocket; + /** + * Detect the 'transferables' argument to our socket from our message + * handler return type. + * @param data - The return object. + * @returns - The data and the. + */ + private getPayloadAndTransfers; + /** + * Handles a socket message from a listener. + * @param socket - The socket. + * @param requestMessage - The message to handle. + * @returns The socket response. + */ + private handleSocketMessage; +} +//# sourceMappingURL=transport_server.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts.map b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts.map new file mode 100644 index 0000000000..103804f980 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transport_server.d.ts","sourceRoot":"","sources":["../../src/transport/transport_server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD;;GAEG;AACH,qBAAa,eAAe,CAAC,OAAO;IAGtB,OAAO,CAAC,QAAQ;IAAY,OAAO,CAAC,YAAY;IAF5D,OAAO,CAAC,OAAO,CAAgB;gBAEX,QAAQ,EAAE,QAAQ,EAAU,YAAY,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC;IAE5F;;OAEG;IACH,KAAK;IAKL;;;OAGG;IACH,IAAI;IAIJ;;;OAGG;IACG,SAAS,CAAC,GAAG,EAAE,OAAO;IAI5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;;;;OAKG;YACW,mBAAmB;CAalC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/transport/transport_server.js b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.js new file mode 100644 index 0000000000..b1865345fc --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/transport/transport_server.js @@ -0,0 +1,89 @@ +import { isTransferDescriptor } from './interface/transferable.js'; +/** + * Keeps track of clients, providing a broadcast, and request/response api with multiplexing. + */ +export class TransportServer { + constructor(listener, msgHandlerFn) { + this.listener = listener; + this.msgHandlerFn = msgHandlerFn; + this.sockets = []; + } + /** + * Start accepting new connections. + */ + start() { + this.listener.on('new_socket', client => this.handleNewSocket(client)); + this.listener.open(); + } + /** + * Stops accepting new connections. It doesn't close existing sockets. + * It's expected the clients will gracefully complete by closing their end, sending an `undefined` message. + */ + stop() { + this.listener.close(); + } + /** + * Broadcast a message. + * @param msg - The message. + */ + async broadcast(msg) { + await Promise.all(this.sockets.map(s => s.send({ payload: msg }))); + } + /** + * New socket registration. + * @param socket - The socket to register. + */ + handleNewSocket(socket) { + socket.registerHandler(async (msg) => { + if (msg === undefined) { + // Client socket has closed. Remove it from the list of sockets. Call close on it for any cleanup. + const socketIndex = this.sockets.findIndex(s => s === socket); + const [closingSocket] = this.sockets.splice(socketIndex, 1); + closingSocket.close(); + return; + } + return await this.handleSocketMessage(socket, msg); + }); + this.sockets.push(socket); + } + /** + * Detect the 'transferables' argument to our socket from our message + * handler return type. + * @param data - The return object. + * @returns - The data and the. + */ + getPayloadAndTransfers(data) { + if (isTransferDescriptor(data)) { + // We treat PayloadWithTransfers specially so that we're able to + // attach transferables while keeping a simple return-type based usage + return [data.send, data.transferables]; + } + if (data instanceof Uint8Array) { + // We may want to devise a better solution to this. We maybe given a view over a non cloneable/transferrable + // ArrayBuffer (such as a view over wasm memory). In this case we want to take a copy, and then transfer it. + const respPayload = data instanceof Uint8Array && ArrayBuffer.isView(data) ? new Uint8Array(data) : data; + const transferables = data instanceof Uint8Array ? [respPayload.buffer] : []; + return [respPayload, transferables]; + } + return [data, []]; + } + /** + * Handles a socket message from a listener. + * @param socket - The socket. + * @param requestMessage - The message to handle. + * @returns The socket response. + */ + async handleSocketMessage(socket, { msgId, payload }) { + try { + const data = await this.msgHandlerFn(payload); + const [respPayload, transferables] = this.getPayloadAndTransfers(data); + const rep = { msgId, payload: respPayload }; + await socket.send(rep, transferables); + } + catch (err) { + const rep = { msgId, error: err.stack }; + await socket.send(rep); + } + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0X3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnQvdHJhbnNwb3J0X3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQW9CLFFBQWtCLEVBQVUsWUFBNEM7UUFBeEUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFnQztRQUZwRixZQUFPLEdBQWEsRUFBRSxDQUFDO0lBRWdFLENBQUM7SUFFaEc7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVk7UUFDMUIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE1BQWM7UUFDcEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUU7WUFDakMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO2dCQUNyQixrR0FBa0c7Z0JBQ2xHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU87YUFDUjtZQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssc0JBQXNCLENBQUMsSUFBUztRQUN0QyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLGdFQUFnRTtZQUNoRSxzRUFBc0U7WUFDdEUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFO1lBQzlCLDRHQUE0RztZQUM1Ryw0R0FBNEc7WUFDNUcsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFZLFVBQVUsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pHLE1BQU0sYUFBYSxHQUFHLElBQUksWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQTJCO1FBQzNGLElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFOUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsTUFBTSxHQUFHLEdBQTZCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUV0RSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQUMsT0FBTyxHQUFRLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQTZCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztDQUNGIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts new file mode 100644 index 0000000000..9c987278c7 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts @@ -0,0 +1,72 @@ +import { WasmModule } from './wasm_module.js'; +/** + * The state of an asynchronous WASM function. + */ +export interface AsyncFnState { + /** + * Is this a contination? + */ + continuation: boolean; + /** + * A result, if one exists. + */ + result?: any; +} +/** + * To enable asynchronous callbacks from wasm to js, we leverage asyncify. + * Https://kripken.github.io/blog/wasm/2019/07/16/asyncify.html. + * + * This class holds state and logic specific to handling async calls from wasm to js. + * A single instance of this class is instantiated as part of BarretenbergWasm. + * It allocates some memory for the asyncify stack data and initialises it. + * + * To make an async call into the wasm, just call `call` the same as in BarretenbergWasm, only it returns a promise. + * + * To make an async import that will be called from the wasm, wrap a function with the signature: + * my_func(state: AsyncFnState, ...args) + * with a call to `wrapImportFn`. + * The arguments are whatever the original call arguments were. The addition of AsyncFnState as the first argument + * allows for the detection of wether the function is continuing after the the async call has completed. + * If `state.continuation` is false, the function should start its async operation and return the promise. + * If `state.continuation` is true, the function can get the result from `state.result` perform any finalisation, + * and return an (optional) value to the wasm. + */ +export declare class AsyncCallState { + private ASYNCIFY_DATA_SIZE; + private asyncifyDataAddr; + private asyncPromise?; + private wasm; + private state?; + private callExport; + /** + * Initialize the call hooks with a WasmModule. + * @param wasm - The module. + */ + init(wasm: WasmModule): void; + /** + * Log a message. + * @param args - The message arguments. + */ + private debug; + /** + * Free the data associated with async call states. + */ + destroy(): void; + /** + * We call the wasm function, that will in turn call back into js via callImport and set this.asyncPromise and + * enable the instrumented "record stack unwinding" code path. + * Once the stack has unwound out of the wasm call, we enter into a loop of resolving the promise set in the call + * to callImport, and calling back into the wasm to rewind the stack and continue execution. + * @param name - The function name. + * @param args - The function args. + * @returns The function result. + */ + call(name: string, ...args: any): Promise; + /** + * Wrap a WASM import function. + * @param fn - The function. + * @returns A wrapped version with asyncify calls. + */ + wrapImportFn(fn: (state: AsyncFnState, ...args: any[]) => any): (...args: any[]) => any; +} +//# sourceMappingURL=async_call_state.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts.map b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts.map new file mode 100644 index 0000000000..ae4697ced4 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"async_call_state.d.ts","sourceRoot":"","sources":["../../src/wasm/async_call_state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA8B;IAEhD;;;OAGG;IACI,IAAI,CAAC,IAAI,EAAE,UAAU;IAY5B;;;OAGG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACI,OAAO;IAKd;;;;;;;;OAQG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG;IA2B5C;;;;OAIG;IACI,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,aACjD,GAAG,EAAE;CAkBzB"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.js b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.js new file mode 100644 index 0000000000..b24bb8432f --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/async_call_state.js @@ -0,0 +1,111 @@ +/** + * To enable asynchronous callbacks from wasm to js, we leverage asyncify. + * Https://kripken.github.io/blog/wasm/2019/07/16/asyncify.html. + * + * This class holds state and logic specific to handling async calls from wasm to js. + * A single instance of this class is instantiated as part of BarretenbergWasm. + * It allocates some memory for the asyncify stack data and initialises it. + * + * To make an async call into the wasm, just call `call` the same as in BarretenbergWasm, only it returns a promise. + * + * To make an async import that will be called from the wasm, wrap a function with the signature: + * my_func(state: AsyncFnState, ...args) + * with a call to `wrapImportFn`. + * The arguments are whatever the original call arguments were. The addition of AsyncFnState as the first argument + * allows for the detection of wether the function is continuing after the the async call has completed. + * If `state.continuation` is false, the function should start its async operation and return the promise. + * If `state.continuation` is true, the function can get the result from `state.result` perform any finalisation, + * and return an (optional) value to the wasm. + */ +export class AsyncCallState { + constructor() { + this.ASYNCIFY_DATA_SIZE = 16 * 1024; + } + /** + * Initialize the call hooks with a WasmModule. + * @param wasm - The module. + */ + init(wasm) { + this.wasm = wasm; + this.callExport = (name, ...args) => wasm.call(name, ...args); + // Allocate memory for asyncify stack data. + this.asyncifyDataAddr = this.callExport('bbmalloc', this.ASYNCIFY_DATA_SIZE); + // TODO: is this view construction problematic like in WasmModule? + const view = new Uint32Array(wasm.getRawMemory().buffer); + // First two integers of asyncify data, are the start and end of the stack region. + view[this.asyncifyDataAddr >> 2] = this.asyncifyDataAddr + 8; + view[(this.asyncifyDataAddr + 4) >> 2] = this.asyncifyDataAddr + this.ASYNCIFY_DATA_SIZE; + } + /** + * Log a message. + * @param args - The message arguments. + */ + debug(...args) { + this.wasm.getLogger()(...args); + } + /** + * Free the data associated with async call states. + */ + destroy() { + // Free call stack data. + this.callExport('bbfree', this.asyncifyDataAddr); + } + /** + * We call the wasm function, that will in turn call back into js via callImport and set this.asyncPromise and + * enable the instrumented "record stack unwinding" code path. + * Once the stack has unwound out of the wasm call, we enter into a loop of resolving the promise set in the call + * to callImport, and calling back into the wasm to rewind the stack and continue execution. + * @param name - The function name. + * @param args - The function args. + * @returns The function result. + */ + async call(name, ...args) { + if (this.state) { + throw new Error(`Can only handle one async call at a time: ${name}(${args})`); + } + this.state = { continuation: false }; + let result = this.callExport(name, ...args); + while (this.asyncPromise) { + // Disable the instrumented "record stack unwinding" code path. + this.callExport('asyncify_stop_unwind'); + this.debug('stack unwound.'); + // Wait for the async work to complete. + this.state.result = await this.asyncPromise; + this.state.continuation = true; + this.debug('result set starting rewind.'); + // Enable "stack rewinding" code path. + this.callExport('asyncify_start_rewind', this.asyncifyDataAddr); + // Call function again to rebuild the stack, and continue where we left off. + result = this.callExport(name, ...args); + } + // Cleanup + this.state = undefined; + return result; + } + /** + * Wrap a WASM import function. + * @param fn - The function. + * @returns A wrapped version with asyncify calls. + */ + wrapImportFn(fn) { + return (...args) => { + if (!this.asyncPromise) { + // We are in the normal code path. Start the async fetch of data. + this.asyncPromise = fn(this.state, ...args); + // Enable "record stack unwinding" code path and return. + this.callExport('asyncify_start_unwind', this.asyncifyDataAddr); + } + else { + // We are in the stack rewind code path, called once the promise is resolved. + // Save the result data back to the wasm, disable stack rewind code paths, and return. + this.callExport('asyncify_stop_rewind'); + const result = fn(this.state, ...args); + // Cleanup. + this.asyncPromise = undefined; + this.state = { continuation: false }; + return result; + } + }; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmNfY2FsbF9zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YXNtL2FzeW5jX2NhbGxfc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNVLHVCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFtR3pDLENBQUM7SUE1RkM7OztPQUdHO0lBQ0ksSUFBSSxDQUFDLElBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0UsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3RSxrRUFBa0U7UUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELGtGQUFrRjtRQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDM0YsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxHQUFHLElBQVc7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFZLEVBQUUsR0FBRyxJQUFTO1FBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN4QiwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3Qix1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDMUMsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsNEVBQTRFO1lBQzVFLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsVUFBVTtRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBRXZCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLEVBQWdEO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0QixpRUFBaUU7Z0JBQ2pFLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDN0Msd0RBQXdEO2dCQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLDZFQUE2RTtnQkFDN0Usc0ZBQXNGO2dCQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLFdBQVc7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0YifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts new file mode 100644 index 0000000000..3ba72aaa18 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts @@ -0,0 +1,24 @@ +/** + * Dummy implementation of a necessary part of the wasi api: + * https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md + * We don't use these functions, but the environment expects them. + * TODO find a way to update off of wasi 12. + */ +export declare const getEmptyWasiSdk: (debug?: import("@aztec/log").DebugLogger) => { + clock_time_get(): void; + environ_get(): void; + environ_sizes_get(): void; + fd_close(): void; + fd_read(): void; + fd_write(): void; + fd_seek(): void; + fd_fdstat_get(): void; + fd_fdstat_set_flags(): void; + fd_prestat_get(): number; + fd_prestat_dir_name(): number; + path_open(): void; + path_filestat_get(): void; + proc_exit(): number; + random_get(): number; +}; +//# sourceMappingURL=empty_wasi_sdk.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts.map b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts.map new file mode 100644 index 0000000000..961a206c39 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"empty_wasi_sdk.d.ts","sourceRoot":"","sources":["../../src/wasm/empty_wasi_sdk.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;CAkD1B,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.js b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.js new file mode 100644 index 0000000000..e40bba9f45 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/empty_wasi_sdk.js @@ -0,0 +1,61 @@ +import { createDebugLogger } from '@aztec/log'; +/** + * Dummy implementation of a necessary part of the wasi api: + * https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md + * We don't use these functions, but the environment expects them. + * TODO find a way to update off of wasi 12. + */ +/* eslint-disable camelcase */ +/* eslint-disable jsdoc/require-jsdoc */ +export const getEmptyWasiSdk = (debug = createDebugLogger('wasm:empty_wasi_sdk')) => ({ + clock_time_get() { + debug('clock_time_get'); + }, + environ_get() { + debug('environ_get'); + }, + environ_sizes_get() { + debug('environ_sizes_get'); + }, + fd_close() { + debug('fd_close'); + }, + fd_read() { + debug('fd_read'); + }, + fd_write() { + debug('fd_write'); + }, + fd_seek() { + debug('fd_seek'); + }, + fd_fdstat_get() { + debug('fd_fdstat_get'); + }, + fd_fdstat_set_flags() { + debug('fd_fdstat_set_flags'); + }, + fd_prestat_get() { + debug('fd_prestat_get'); + return 8; + }, + fd_prestat_dir_name() { + debug('fd_prestat_dir_name'); + return 28; + }, + path_open() { + debug('path_open'); + }, + path_filestat_get() { + debug('path_filestat_get'); + }, + proc_exit() { + debug('proc_exit'); + return 52; + }, + random_get() { + debug('random_get'); + return 1; + }, +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHlfd2FzaV9zZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbS9lbXB0eV93YXNpX3Nkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7Ozs7O0dBS0c7QUFDSCw4QkFBOEI7QUFDOUIsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLGNBQWM7UUFDWixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsV0FBVztRQUNULEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELFFBQVE7UUFDTixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELFFBQVE7UUFDTixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELGFBQWE7UUFDWCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELG1CQUFtQjtRQUNqQixLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsY0FBYztRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELG1CQUFtQjtRQUNqQixLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxTQUFTO1FBQ1AsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUI7UUFDZixLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsU0FBUztRQUNQLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxVQUFVO1FBQ1IsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts b/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts new file mode 100644 index 0000000000..1247c35483 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts @@ -0,0 +1,3 @@ +export { AsyncCallState, AsyncFnState } from './async_call_state.js'; +export { WasmModule } from './wasm_module.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts.map new file mode 100644 index 0000000000..e4a88cedea --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/index.js b/ts/.yalc/@aztec/wasm/dest/wasm/index.js new file mode 100644 index 0000000000..8c9ce83055 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/index.js @@ -0,0 +1,3 @@ +export { AsyncCallState } from './async_call_state.js'; +export { WasmModule } from './wasm_module.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts new file mode 100644 index 0000000000..a9634b4a9c --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts @@ -0,0 +1,107 @@ +/// +import { DebugLogger } from '@aztec/log'; +import { Buffer } from 'buffer'; +/** + * WasmModule: + * Helper over a webassembly module. + * Assumes a few quirks. + * 1) the module expects wasi_snapshot_preview1 with the methods from getEmptyWasiSdk + * 2) of which the webassembly + * we instantiate only uses random_get (update this if more WASI sdk methods are needed). + */ +export declare class WasmModule { + private module; + private importFn; + private memory; + private heap; + private instance?; + private mutexQ; + private debug; + /** + * Create a wasm module. Should be followed by await init();. + * @param module - The module as a WebAssembly.Module or a Buffer. + * @param importFn - Imports expected by the WASM. + * @param loggerName - Optional, for debug logging. + */ + constructor(module: WebAssembly.Module | Buffer, importFn: (module: WasmModule) => any, loggerName?: string); + /** + * Return the wasm source. + * @returns The source. + */ + getModule(): WebAssembly.Module | Buffer; + /** + * Initialize this wasm module. + * @param wasmImportEnv - Linked to a module called "env". Functions implementations referenced from e.g. C++. + * @param initial - 20 pages by default. 20*2**16 \> 1mb stack size plus other overheads. + * @param maximum - 8192 maximum by default. 512mb. + */ + init(initial?: number, maximum?: number): Promise; + /** + * The methods or objects exported by the WASM module. + * @returns An indexable object. + */ + exports(): any; + /** + * Get the current logger. + * @returns Logging function. + */ + getLogger(): DebugLogger; + /** + * Add a logger. + * @param logger - Function to call when logging. + */ + addLogger(logger: DebugLogger): void; + /** + * Calls into the WebAssembly. + * @param name - The method name. + * @param args - The arguments to the method. + * @returns The numeric method result. + */ + call(name: string, ...args: any): number; + /** + * Get the memory used by the WASM module. + * @returns A WebAssembly memory object. + */ + getRawMemory(): WebAssembly.Memory; + /** + * Get the memory used by the WASM module, as a byte array. + * @returns A Uint8Array view of the WASM module memory. + */ + getMemory(): Uint8Array; + /** + * The memory size in bytes. + * @returns Number of bytes. + */ + memSize(): number; + /** + * Get a slice of memory between two addresses. + * @param start - The start address. + * @param end - The end address. + * @returns A Uint8Array view of memory. + */ + getMemorySlice(start: number, end: number): Uint8Array; + /** + * Write data into the heap. + * @param offset - The address to write data at. + * @param arr - The data to write. + */ + writeMemory(offset: number, arr: Uint8Array): void; + /** + * Read WASM memory as a JS string. + * @param addr - The memory address. + * @returns A JS string. + */ + getMemoryAsString(addr: number): string; + /** + * When calling the wasm, sometimes a caller will require exclusive access over a series of calls. + * E.g. When a result is written to address 0, one cannot have another caller writing to the same address via + * writeMemory before the result is read via sliceMemory. + * Acquire() gets a single token from a fifo. The caller must call release() to add the token back. + */ + acquire(): Promise; + /** + * Release the mutex, letting another promise call acquire(). + */ + release(): void; +} +//# sourceMappingURL=wasm_module.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts.map b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts.map new file mode 100644 index 0000000000..2b5649b9d5 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"wasm_module.d.ts","sourceRoot":"","sources":["../../src/wasm/wasm_module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC;;;;;;;GAOG;AACH,qBAAa,UAAU;IAcnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAdlB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAuB;IACxC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAAc;IAE3B;;;;;OAKG;gBAEO,MAAM,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,EACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG,EAC7C,UAAU,SAAS;IAMrB;;;OAGG;IACI,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM;IAG/C;;;;;OAKG;IACU,IAAI,CAAC,OAAO,SAAK,EAAE,OAAO,SAAO;IAwC9C;;;OAGG;IACI,OAAO,IAAI,GAAG;IAOrB;;;OAGG;IACI,SAAS;IAIhB;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,WAAW;IAQpC;;;;;OAKG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM;IAe/C;;;OAGG;IACI,YAAY,IAAI,WAAW,CAAC,MAAM;IAGzC;;;OAGG;IACI,SAAS,IAAI,UAAU;IAQ9B;;;OAGG;IACI,OAAO,IAAI,MAAM;IAIxB;;;;;OAKG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIhD;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAOlD;;;;OAIG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAQrC;;;;;OAKG;IACU,OAAO;IAIpB;;OAEG;IACI,OAAO;CAMf"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.js b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.js new file mode 100644 index 0000000000..99fb9fe47b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/wasm/wasm_module.js @@ -0,0 +1,202 @@ +import { createDebugLogger } from '@aztec/log'; +import { Buffer } from 'buffer'; +import { MemoryFifo } from '../memory_fifo.js'; +import { getEmptyWasiSdk } from './empty_wasi_sdk.js'; +import { randomBytes } from 'crypto'; +/** + * WasmModule: + * Helper over a webassembly module. + * Assumes a few quirks. + * 1) the module expects wasi_snapshot_preview1 with the methods from getEmptyWasiSdk + * 2) of which the webassembly + * we instantiate only uses random_get (update this if more WASI sdk methods are needed). + */ +export class WasmModule { + /** + * Create a wasm module. Should be followed by await init();. + * @param module - The module as a WebAssembly.Module or a Buffer. + * @param importFn - Imports expected by the WASM. + * @param loggerName - Optional, for debug logging. + */ + constructor(module, importFn, loggerName = 'wasm') { + this.module = module; + this.importFn = importFn; + this.mutexQ = new MemoryFifo(); + this.debug = createDebugLogger(loggerName); + this.mutexQ.put(true); + } + /** + * Return the wasm source. + * @returns The source. + */ + getModule() { + return this.module; + } + /** + * Initialize this wasm module. + * @param wasmImportEnv - Linked to a module called "env". Functions implementations referenced from e.g. C++. + * @param initial - 20 pages by default. 20*2**16 \> 1mb stack size plus other overheads. + * @param maximum - 8192 maximum by default. 512mb. + */ + async init(initial = 20, maximum = 8192) { + this.debug(`initial mem: ${initial} pages, ${(initial * 2 ** 16) / (1024 * 1024)}mb. max mem: ${maximum} pages, ${(maximum * 2 ** 16) / (1024 * 1024)}mb`); + this.memory = new WebAssembly.Memory({ initial, maximum }); + // Create a view over the memory buffer. + // We do this once here, as webkit *seems* bugged out and actually shows this as new memory, + // thus displaying double. It's only worse if we create views on demand. I haven't established yet if + // the bug is also exasperating the termination on mobile due to "excessive memory usage". It could be + // that the OS is actually getting an incorrect reading in the same way the memory profiler does... + // The view will have to be recreated if the memory is grown. See getMemory(). + this.heap = new Uint8Array(this.memory.buffer); + // We support the wasi 12 SDK, but only implement random_get + /* eslint-disable camelcase */ + const importObj = { + wasi_snapshot_preview1: { + ...getEmptyWasiSdk(this.debug), + random_get: (arr, length) => { + arr = arr >>> 0; + const heap = this.getMemory(); + const randomData = randomBytes(length); + for (let i = arr; i < arr + length; ++i) { + heap[i] = randomData[i - arr]; + } + }, + }, + env: this.importFn(this), + }; + if (this.module instanceof WebAssembly.Module) { + this.instance = await WebAssembly.instantiate(this.module, importObj); + } + else { + const { instance } = await WebAssembly.instantiate(this.module, importObj); + this.instance = instance; + } + } + /** + * The methods or objects exported by the WASM module. + * @returns An indexable object. + */ + exports() { + if (!this.instance) { + throw new Error('WasmModule: not initialized!'); + } + return this.instance.exports; + } + /** + * Get the current logger. + * @returns Logging function. + */ + getLogger() { + return this.debug; + } + /** + * Add a logger. + * @param logger - Function to call when logging. + */ + addLogger(logger) { + const oldDebug = this.debug; + this.debug = (...args) => { + logger(...args); + oldDebug(...args); + }; + } + /** + * Calls into the WebAssembly. + * @param name - The method name. + * @param args - The arguments to the method. + * @returns The numeric method result. + */ + call(name, ...args) { + if (!this.exports()[name]) { + throw new Error(`WASM function ${name} not found.`); + } + try { + // When returning values from the WASM, use >>> operator to convert + // signed representation to unsigned representation. + return this.exports()[name](...args) >>> 0; + } + catch (err) { + const message = `WASM function ${name} aborted, error: ${err}`; + this.debug(message); + this.debug(err.stack); + throw new Error(message); + } + } + /** + * Get the memory used by the WASM module. + * @returns A WebAssembly memory object. + */ + getRawMemory() { + return this.memory; + } + /** + * Get the memory used by the WASM module, as a byte array. + * @returns A Uint8Array view of the WASM module memory. + */ + getMemory() { + // If the memory is grown, our view over it will be lost. Recreate the view. + if (this.heap.length === 0) { + this.heap = new Uint8Array(this.memory.buffer); + } + return this.heap; + } + /** + * The memory size in bytes. + * @returns Number of bytes. + */ + memSize() { + return this.getMemory().length; + } + /** + * Get a slice of memory between two addresses. + * @param start - The start address. + * @param end - The end address. + * @returns A Uint8Array view of memory. + */ + getMemorySlice(start, end) { + return this.getMemory().slice(start, end); + } + /** + * Write data into the heap. + * @param offset - The address to write data at. + * @param arr - The data to write. + */ + writeMemory(offset, arr) { + const mem = this.getMemory(); + for (let i = 0; i < arr.length; i++) { + mem[i + offset] = arr[i]; + } + } + /** + * Read WASM memory as a JS string. + * @param addr - The memory address. + * @returns A JS string. + */ + getMemoryAsString(addr) { + addr = addr >>> 0; + const m = this.getMemory(); + let i = addr; + for (; m[i] !== 0; ++i) + ; + return Buffer.from(m.slice(addr, i)).toString('ascii'); + } + /** + * When calling the wasm, sometimes a caller will require exclusive access over a series of calls. + * E.g. When a result is written to address 0, one cannot have another caller writing to the same address via + * writeMemory before the result is read via sliceMemory. + * Acquire() gets a single token from a fifo. The caller must call release() to add the token back. + */ + async acquire() { + await this.mutexQ.get(); + } + /** + * Release the mutex, letting another promise call acquire(). + */ + release() { + if (this.mutexQ.length() !== 0) { + throw new Error('Release called but not acquired.'); + } + this.mutexQ.put(true); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbV9tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbS93YXNtX21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBT3JCOzs7OztPQUtHO0lBQ0gsWUFDVSxNQUFtQyxFQUNuQyxRQUFxQyxFQUM3QyxVQUFVLEdBQUcsTUFBTTtRQUZYLFdBQU0sR0FBTixNQUFNLENBQTZCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQTZCO1FBWHZDLFdBQU0sR0FBRyxJQUFJLFVBQVUsRUFBVyxDQUFDO1FBY3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQ1IsZ0JBQWdCLE9BQU8sV0FBVyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixPQUFPLFdBQzFGLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQ3BDLElBQUksQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRCx3Q0FBd0M7UUFDeEMsNEZBQTRGO1FBQzVGLHFHQUFxRztRQUNyRyxzR0FBc0c7UUFDdEcsbUdBQW1HO1FBQ25HLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsNERBQTREO1FBQzVELDhCQUE4QjtRQUM5QixNQUFNLFNBQVMsR0FBRztZQUNoQixzQkFBc0IsRUFBRTtnQkFDdEIsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDOUIsVUFBVSxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxFQUFFO29CQUMxQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM5QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO3dCQUN2QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztxQkFDL0I7Z0JBQ0gsQ0FBQzthQUNGO1lBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3pCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDTCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxNQUFtQjtRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLElBQUksQ0FBQyxJQUFZLEVBQUUsR0FBRyxJQUFTO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxhQUFhLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUk7WUFDRixtRUFBbUU7WUFDbkUsb0RBQW9EO1lBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQUMsT0FBTyxHQUFRLEVBQUU7WUFDakIsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFDRDs7O09BR0c7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksU0FBUztRQUNkLDRFQUE0RTtRQUM1RSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsTUFBYyxFQUFFLEdBQWU7UUFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQUMsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts new file mode 100644 index 0000000000..5d25ae688b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts @@ -0,0 +1,3 @@ +export * from './web_worker.js'; +export * from './web_data_store.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts.map new file mode 100644 index 0000000000..c27488b261 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/worker/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/index.js b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.js new file mode 100644 index 0000000000..769c36e8a1 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/index.js @@ -0,0 +1,3 @@ +export * from './web_worker.js'; +export * from './web_data_store.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ya2VyL2Jyb3dzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts new file mode 100644 index 0000000000..64305a4926 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts @@ -0,0 +1,7 @@ +import { WasmModule } from '../../wasm/wasm_module.js'; +/** + * Start the transport server corresponding to this module. + * @param module - The WasmModule to host. + */ +export declare function startWebModule(module: WasmModule): void; +//# sourceMappingURL=start_web_module.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts.map new file mode 100644 index 0000000000..236d51eb89 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"start_web_module.d.ts","sourceRoot":"","sources":["../../../src/worker/browser/start_web_module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,QAehD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.js b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.js new file mode 100644 index 0000000000..107b51c351 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/start_web_module.js @@ -0,0 +1,22 @@ +import { TransportServer, WorkerListener } from '../../transport/index.js'; +/** + * Start the transport server corresponding to this module. + * @param module - The WasmModule to host. + */ +export function startWebModule(module) { + const dispatch = async ({ fn, args }) => { + if (fn === '__destroyWorker__') { + transportServer.stop(); + return; + } + if (!module[fn]) { + throw new Error(`dispatch error, function not found: ${fn}`); + } + return await module[fn](...args); + }; + const transportListener = new WorkerListener(self); + const transportServer = new TransportServer(transportListener, dispatch); + module.addLogger((...args) => transportServer.broadcast({ fn: 'emit', args: ['log', ...args] })); + transportServer.start(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfd2ViX21vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93b3JrZXIvYnJvd3Nlci9zdGFydF93ZWJfbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFrQjtJQUMvQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFlLEVBQUUsRUFBRTtRQUNuRCxJQUFJLEVBQUUsS0FBSyxtQkFBbUIsRUFBRTtZQUM5QixlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFFLE1BQWMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxNQUFPLE1BQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQWMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts new file mode 100644 index 0000000000..9b5ab4853d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts @@ -0,0 +1,23 @@ +/// +import { DataStore } from '../data_store.js'; +/** + * Cache for data used by wasm module. + * Stores in a LevelUp database. + */ +export declare class WebDataStore implements DataStore { + private db; + constructor(); + /** + * Lookup a key. + * @param key - Key to lookup. + * @returns The buffer. + */ + get(key: string): Promise; + /** + * Alter a key. + * @param key - Key to alter. + * @param value - Buffer to store. + */ + set(key: string, value: Buffer): Promise; +} +//# sourceMappingURL=web_data_store.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts.map new file mode 100644 index 0000000000..b786d90236 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"web_data_store.d.ts","sourceRoot":"","sources":["../../../src/worker/browser/web_data_store.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI7C;;;GAGG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,OAAO,CAAC,EAAE,CAAU;;IAUpB;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAInD;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.js b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.js new file mode 100644 index 0000000000..49f7cd1417 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_data_store.js @@ -0,0 +1,32 @@ +import levelup from 'levelup'; +import memdown from 'memdown'; +/** + * Cache for data used by wasm module. + * Stores in a LevelUp database. + */ +export class WebDataStore { + constructor() { + // TODO: The whole point of this is to reduce memory load in the browser. + // Replace with leveljs so the data is stored in indexeddb and not in memory. + // Hack: Cast as any to work around package "broken" with node16 resolution + // See https://github.com/microsoft/TypeScript/issues/49160 + this.db = levelup(memdown()); + } + /** + * Lookup a key. + * @param key - Key to lookup. + * @returns The buffer. + */ + async get(key) { + return await this.db.get(key).catch(() => { }); + } + /** + * Alter a key. + * @param key - Key to alter. + * @param value - Buffer to store. + */ + async set(key, value) { + await this.db.put(key, value); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViX2RhdGFfc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ya2VyL2Jyb3dzZXIvd2ViX2RhdGFfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxPQUFvQixNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFFOUI7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFHdkI7UUFDRSx5RUFBeUU7UUFDekUsNkVBQTZFO1FBQzdFLDJFQUEyRTtRQUMzRSwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUUsT0FBZSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNuQixPQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNsQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0YifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts new file mode 100644 index 0000000000..45cdef0a24 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts @@ -0,0 +1,10 @@ +import { WasmWorker } from '../wasm_worker.js'; +/** + * Instantiate a web worker. + * @param url - The URL. + * @param initialMem - Initial memory pages. + * @param maxMem - Maximum memory pages. + * @returns The worker. + */ +export declare function createWebWorker(url: string, initialMem?: number, maxMem?: number): Promise; +//# sourceMappingURL=web_worker.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts.map new file mode 100644 index 0000000000..2756cc7c5d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"web_worker.d.ts","sourceRoot":"","sources":["../../../src/worker/browser/web_worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAY5G"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.js b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.js new file mode 100644 index 0000000000..71a0e1b145 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/browser/web_worker.js @@ -0,0 +1,23 @@ +import { WasmModule } from '../../wasm/wasm_module.js'; +import { createDispatchProxy, TransportClient, WorkerConnector } from '../../transport/index.js'; +/** + * Instantiate a web worker. + * @param url - The URL. + * @param initialMem - Initial memory pages. + * @param maxMem - Maximum memory pages. + * @returns The worker. + */ +export async function createWebWorker(url, initialMem, maxMem) { + const worker = new Worker(url); + const transportConnect = new WorkerConnector(worker); + const transportClient = new TransportClient(transportConnect); + await transportClient.open(); + const remoteModule = createDispatchProxy(WasmModule, transportClient); + remoteModule.destroyWorker = async () => { + await transportClient.request({ fn: '__destroyWorker__', args: [] }); + transportClient.close(); + }; + await remoteModule.init(initialMem, maxMem); + return remoteModule; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViX3dvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93b3JrZXIvYnJvd3Nlci93ZWJfd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQWUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlHOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEdBQVcsRUFBRSxVQUFtQixFQUFFLE1BQWU7SUFDckYsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBYyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxlQUFlLENBQWUsQ0FBQztJQUNwRixZQUFZLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3RDLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts new file mode 100644 index 0000000000..0c9bd408c2 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts @@ -0,0 +1,9 @@ +/// +/** + * Simple read/write interface for wasm modules. + */ +export interface DataStore { + get(key: string): Promise; + set(key: string, value: Buffer): Promise; +} +//# sourceMappingURL=data_store.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts.map new file mode 100644 index 0000000000..4b0f53fd9d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/data_store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/worker/data_store.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/data_store.js b/ts/.yalc/@aztec/wasm/dest/worker/data_store.js new file mode 100644 index 0000000000..fd170823f1 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/data_store.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZXIvZGF0YV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts new file mode 100644 index 0000000000..07a3754129 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts @@ -0,0 +1,3 @@ +export { WorkerPool } from './worker_pool.js'; +export { WasmWorker } from './wasm_worker.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts.map new file mode 100644 index 0000000000..0960823e41 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/index.js b/ts/.yalc/@aztec/wasm/dest/worker/index.js new file mode 100644 index 0000000000..c36435a7a3 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/index.js @@ -0,0 +1,2 @@ +export { WorkerPool } from './worker_pool.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts new file mode 100644 index 0000000000..be9811545d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts @@ -0,0 +1,3 @@ +export * from './node_worker.js'; +export * from './node_data_store.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts.map new file mode 100644 index 0000000000..a406ecf876 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/worker/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/index.js b/ts/.yalc/@aztec/wasm/dest/worker/node/index.js new file mode 100644 index 0000000000..cf7a081945 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/index.js @@ -0,0 +1,3 @@ +export * from './node_worker.js'; +export * from './node_data_store.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ya2VyL25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHNCQUFzQixDQUFDIn0= \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts new file mode 100644 index 0000000000..5908d6599b --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts @@ -0,0 +1,22 @@ +/// +import { DataStore } from '../data_store.js'; +/** + * Cache for data used by wasm module. + */ +export declare class NodeDataStore implements DataStore { + private db; + constructor(path?: string); + /** + * Get a value from our DB. + * @param key - The key to look up. + * @returns The value. + */ + get(key: string): Promise; + /** + * Set a value in our DB. + * @param key - The key to update. + * @param value - The value to set. + */ + set(key: string, value: Buffer): Promise; +} +//# sourceMappingURL=node_data_store.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts.map new file mode 100644 index 0000000000..496c69d509 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_data_store.d.ts","sourceRoot":"","sources":["../../../src/worker/node/node_data_store.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C;;GAEG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,EAAE,CAAU;gBAGR,IAAI,CAAC,EAAE,MAAM;IAMzB;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAInD;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.js b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.js new file mode 100644 index 0000000000..57be391030 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_data_store.js @@ -0,0 +1,31 @@ +import levelup from 'levelup'; +import leveldown from 'leveldown'; +import memdown from 'memdown'; +/** + * Cache for data used by wasm module. + */ +export class NodeDataStore { + // eslint-disable-next-line + constructor(path) { + // Hack: Cast as any to work around packages "broken" with node16 resolution + // See https://github.com/microsoft/TypeScript/issues/49160 + this.db = levelup(path ? leveldown(path) : memdown()); + } + /** + * Get a value from our DB. + * @param key - The key to look up. + * @returns The value. + */ + async get(key) { + return await this.db.get(key).catch(() => { }); + } + /** + * Set a value in our DB. + * @param key - The key to update. + * @param value - The value to set. + */ + async set(key, value) { + await this.db.put(key, value); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9kYXRhX3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dvcmtlci9ub2RlL25vZGVfZGF0YV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE9BQW9CLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFFOUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUd4QiwyQkFBMkI7SUFDM0IsWUFBWSxJQUFhO1FBQ3ZCLDRFQUE0RTtRQUM1RSwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxTQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxPQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhO1FBQ2xDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts new file mode 100644 index 0000000000..5da7e01049 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts @@ -0,0 +1,6 @@ +import { WasmWorker } from '../wasm_worker.js'; +/** + * + */ +export declare function createNodeWorker(filepath: string, initialMem?: number, maxMem?: number): Promise; +//# sourceMappingURL=node_worker.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts.map new file mode 100644 index 0000000000..26908ec619 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node_worker.d.ts","sourceRoot":"","sources":["../../../src/worker/node/node_worker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAYlH"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.js b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.js new file mode 100644 index 0000000000..155e31ba16 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/node_worker.js @@ -0,0 +1,21 @@ +import { Worker } from 'worker_threads'; +import { createDispatchProxy, TransportClient } from '../../transport/index.js'; +import { NodeConnector } from '../../transport/index.js'; +import { WasmModule } from '../../wasm/wasm_module.js'; +/** + * + */ +export async function createNodeWorker(filepath, initialMem, maxMem) { + const worker = new Worker(filepath); + const transportConnect = new NodeConnector(worker); + const transportClient = new TransportClient(transportConnect); + await transportClient.open(); + const remoteModule = createDispatchProxy(WasmModule, transportClient); + remoteModule.destroyWorker = async () => { + await transportClient.request({ fn: '__destroyWorker__', args: [] }); + transportClient.close(); + }; + await remoteModule.init(initialMem, maxMem); + return remoteModule; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV93b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ya2VyL25vZGUvbm9kZV93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLFVBQW1CLEVBQUUsTUFBZTtJQUMzRixNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFjLGdCQUFnQixDQUFDLENBQUM7SUFDM0UsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBZSxDQUFDO0lBQ3BGLFlBQVksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDdEMsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFDRixNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts new file mode 100644 index 0000000000..c118c248f4 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts @@ -0,0 +1,7 @@ +import { WasmModule } from '../../wasm/wasm_module.js'; +/** + * Start the transport server corresponding to this module. + * @param module - The WasmModule to host. + */ +export declare function startNodeModule(module: WasmModule): void; +//# sourceMappingURL=start_node_module.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts.map new file mode 100644 index 0000000000..f006976f41 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"start_node_module.d.ts","sourceRoot":"","sources":["../../../src/worker/node/start_node_module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAMvD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,QAejD"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.js b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.js new file mode 100644 index 0000000000..8d4aee385d --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/node/start_node_module.js @@ -0,0 +1,26 @@ +import { parentPort } from 'worker_threads'; +import { NodeListener, TransportServer } from '../../transport/index.js'; +if (!parentPort) { + throw new Error('InvalidWorker'); +} +/** + * Start the transport server corresponding to this module. + * @param module - The WasmModule to host. + */ +export function startNodeModule(module) { + const dispatch = async ({ fn, args }) => { + if (fn === '__destroyWorker__') { + transportServer.stop(); + return; + } + if (!module[fn]) { + throw new Error(`dispatch error, function not found: ${fn}`); + } + return await module[fn](...args); + }; + const transportListener = new NodeListener(); + const transportServer = new TransportServer(transportListener, dispatch); + module.addLogger((...args) => transportServer.broadcast({ fn: 'emit', args: ['log', ...args] })); + transportServer.start(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfbm9kZV9tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd29ya2VyL25vZGUvc3RhcnRfbm9kZV9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQWUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdEYsSUFBSSxDQUFDLFVBQVUsRUFBRTtJQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7Q0FDbEM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWtCO0lBQ2hELE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQWUsRUFBRSxFQUFFO1FBQ25ELElBQUksRUFBRSxLQUFLLG1CQUFtQixFQUFFO1lBQzlCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUUsTUFBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLE1BQU8sTUFBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzdDLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFjLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEcsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLENBQUMifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts new file mode 100644 index 0000000000..5796d84ec9 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts @@ -0,0 +1,9 @@ +import { Proxify } from '../transport/index.js'; +import { WasmModule } from '../wasm/wasm_module.js'; +/** + * Represents either a WASM web worker, or node.js worker. + */ +export type WasmWorker = Proxify & { + destroyWorker(): void; +}; +//# sourceMappingURL=wasm_worker.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts.map new file mode 100644 index 0000000000..111acb92bb --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"wasm_worker.d.ts","sourceRoot":"","sources":["../../src/worker/wasm_worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG;IAAE,aAAa,IAAI,IAAI,CAAA;CAAE,CAAC"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.js b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.js new file mode 100644 index 0000000000..a886d8ce72 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/wasm_worker.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbV93b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2VyL3dhc21fd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts new file mode 100644 index 0000000000..62f2d87987 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts @@ -0,0 +1,40 @@ +import { WasmWorker } from './wasm_worker.js'; +/** + * Type of a worker factory. + * Used to customize WorkerPool worker construction. + */ +export type CreateWorker = (name: string, minMem: number, maxMem: number) => WasmWorker; +/** + * Allocates a pool of WasmWorker's. + * Worker 0 is allocated MAX_PAGES memory pages. This is because worker 0 will need to hold the proving key + * (i.e. Has state), whereas the others are pure compute (they hold a little crs state). + */ +export declare class WorkerPool { + /** + * The maximum number of memory pages to be used by the webassembly. + */ + static MAX_PAGES: number; + /** + * The workers in the pool. + */ + private workers; + /** + * Create an instance and initialize the workers. + * @param createWorker - Worker factory. + * @param poolSize - Pool size. + * @returns An initialized WorkerPool. + */ + static new(createWorker: CreateWorker, poolSize: number): Promise; + /** + * Initialize the workers. + * @param createWorker - Worker factory(). + * @param poolSize - Pool size. + * @param maxMem - Max memory pages. + */ + init(createWorker: CreateWorker, poolSize: number, maxMem?: number): Promise; + /** + * Tell all workers in the pool to stop processing. + */ + destroy(): Promise; +} +//# sourceMappingURL=worker_pool.d.ts.map \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts.map b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts.map new file mode 100644 index 0000000000..118733d8c5 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"worker_pool.d.ts","sourceRoot":"","sources":["../../src/worker/worker_pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC;AACxF;;;;GAIG;AACH,qBAAa,UAAU;IAYrB;;OAEG;IACH,OAAc,SAAS,SAAQ;IAC/B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAoB;IAEnC;;;;;OAKG;WACU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM;IAM7D;;;;;OAKG;IACU,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAuB;IAY7F;;OAEG;IACU,OAAO;CAGrB"} \ No newline at end of file diff --git a/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.js b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.js new file mode 100644 index 0000000000..bddeb77620 --- /dev/null +++ b/ts/.yalc/@aztec/wasm/dest/worker/worker_pool.js @@ -0,0 +1,62 @@ +import { createDebugLogger } from '@aztec/log'; +const debug = createDebugLogger('bb:worker_pool'); +/** + * Allocates a pool of WasmWorker's. + * Worker 0 is allocated MAX_PAGES memory pages. This is because worker 0 will need to hold the proving key + * (i.e. Has state), whereas the others are pure compute (they hold a little crs state). + */ +export class WorkerPool { + constructor() { + /** + * The workers in the pool. + */ + this.workers = []; + } + /** + * Create an instance and initialize the workers. + * @param createWorker - Worker factory. + * @param poolSize - Pool size. + * @returns An initialized WorkerPool. + */ + static async new(createWorker, poolSize) { + const pool = new WorkerPool(); + await pool.init(createWorker, poolSize); + return pool; + } + /** + * Initialize the workers. + * @param createWorker - Worker factory(). + * @param poolSize - Pool size. + * @param maxMem - Max memory pages. + */ + async init(createWorker, poolSize, maxMem = WorkerPool.MAX_PAGES) { + debug(`creating ${poolSize} workers...`); + const start = new Date().getTime(); + this.workers = await Promise.all(Array(poolSize) + .fill(0) + .map((_, i) => createWorker(`${i}`, i === 0 ? Math.min(WorkerPool.MAX_PAGES, maxMem) : 768, maxMem))); + debug(`created workers: ${new Date().getTime() - start}ms`); + } + /** + * Tell all workers in the pool to stop processing. + */ + async destroy() { + await Promise.all(this.workers.map(w => w.destroyWorker())); + } +} +// TODO(AD): Revisit what this means in aztec 3 context +// -- +// Introduction of low mem prover work (polynomial cache) may actually increase mem usage when the backing store isn't +// enabled. We were seeing intermittent failings related to memory in production for some users when limiting to +// 6660 (416MB). It would be nice to understand why this is (the non determinism and/or the increased mem usage). +// For now, increasing mem usage to 512MB. This maybe preferable to backing out the low mem work, but +// ironically may break the chance of us using it in mobile. +// We *could* enable the low memory backing store, but this needs a little bit of work to actually +// read/write from indexeddb, performance testing, and actual further memory load testing. +// At this point it's hard to know what our memory savings would be relative to just fully reverting the LMP. +// public static MAX_PAGES = 6660; +/** + * The maximum number of memory pages to be used by the webassembly. + */ +WorkerPool.MAX_PAGES = 8192; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2VyL3dvcmtlcl9wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUcvQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBT2xEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUF2QjtRQWdCRTs7V0FFRztRQUNLLFlBQU8sR0FBaUIsRUFBRSxDQUFDO0lBc0NyQyxDQUFDO0lBcENDOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBMEIsRUFBRSxRQUFnQjtRQUMzRCxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQTBCLEVBQUUsUUFBZ0IsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVM7UUFDM0YsS0FBSyxDQUFDLFlBQVksUUFBUSxhQUFhLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM5QixLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3ZHLENBQUM7UUFFRixLQUFLLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBdkRELHVEQUF1RDtBQUN2RCxLQUFLO0FBQ0wsc0hBQXNIO0FBQ3RILGdIQUFnSDtBQUNoSCxpSEFBaUg7QUFDakgscUdBQXFHO0FBQ3JHLDREQUE0RDtBQUM1RCxrR0FBa0c7QUFDbEcsMEZBQTBGO0FBQzFGLDZHQUE2RztBQUM3RyxrQ0FBa0M7QUFDbEM7O0dBRUc7QUFDVyxvQkFBUyxHQUFHLElBQUksQ0FBQyJ9 \ No newline at end of file diff --git a/ts/package.json b/ts/package.json index 70d2ebf882..7096743381 100644 --- a/ts/package.json +++ b/ts/package.json @@ -14,7 +14,7 @@ "clean": "rm -rf ./dest .tsbuildinfo", "bundle-deps": "yalc add @aztec/wasm @aztec/log && yalc add -D @aztec/eslint-config", "dev-deps": "rm -r node_modules/@aztec/wasm ; yarn link ../../../yarn-project/wasm ; cd ../../../yarn-project/wasm ; yarn build:dev", - "formatting": "run -T prettier --check ./src && run -T eslint --max-warnings 0 ./src", + "formatting": "prettier --check ./src && eslint --max-warnings 0 ./src", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --passWithNoTests", "test-debug": "NODE_NO_WARNINGS=1 node --inspect-brk --experimental-vm-modules $(yarn bin jest) --no-cache --passWithNoTests --runInBand" }, diff --git a/ts/src/crs/index.ts b/ts/src/crs/index.ts index 2c0993fa32..ace56750d6 100644 --- a/ts/src/crs/index.ts +++ b/ts/src/crs/index.ts @@ -76,7 +76,7 @@ export class NetCrs { } /** - * G2 points data for verification key + * G2 points data for verification key. * @returns The points data. */ getG2Data(): Uint8Array { @@ -125,7 +125,7 @@ export class FileCrs { } /** - * G2 points data for verification key + * G2 points data for verification key. * @returns The points data. */ getG2Data(): Uint8Array { @@ -166,7 +166,7 @@ export class Crs { } /** - * G2 points data for verification key + * G2 points data for verification key. * @returns The points data. */ getG2Data(): Uint8Array {