@mcp-b/transports 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/.tsbuildinfo CHANGED
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/typealiases.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/util.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/index.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/zoderror.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/locales/en.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/errors.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/parseutil.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/enumutil.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/errorutil.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/helpers/partialutil.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/standard-schema.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/types.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/v3/external.d.cts","../../../node_modules/.pnpm/zod@3.25.74/node_modules/zod/index.d.cts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../src/extensionclienttransport.ts","../src/extensionservertransport.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts","../src/nativeclienttransport.ts","../src/nativeservertransport.ts","../src/tabclienttransport.ts","../src/tabservertransport.ts","../src/browser-types.ts","../src/index.ts","../../../node_modules/.pnpm/@types+har-format@1.2.16/node_modules/@types/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/chrome-cast/index.d.ts","../../../node_modules/.pnpm/@types+filewriter@0.0.33/node_modules/@types/filewriter/index.d.ts","../../../node_modules/.pnpm/@types+filesystem@0.0.36/node_modules/@types/filesystem/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/index.d.ts"],"fileIdsList":[[118,161],[96,118,161],[94,95,118,161],[107,118,161],[108,109,111,118,161],[110,118,161],[118,158,161],[118,160,161],[161],[118,161,166,196],[118,161,162,167,173,174,181,193,204],[118,161,162,163,173,181],[113,114,115,118,161],[118,161,164,205],[118,161,165,166,174,182],[118,161,166,193,201],[118,161,167,169,173,181],[118,160,161,168],[118,161,169,170],[118,161,171,173],[118,160,161,173],[118,161,173,174,175,193,204],[118,161,173,174,175,188,193,196],[118,156,161],[118,156,161,169,173,176,181,193,204],[118,161,173,174,176,177,181,193,201,204],[118,161,176,178,193,201,204],[116,117,118,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210],[118,161,173,179],[118,161,180,204],[118,161,169,173,181,193],[118,161,182],[118,161,183],[118,160,161,184],[118,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210],[118,161,186],[118,161,187],[118,161,173,188,189],[118,161,188,190,205,207],[118,161,173,193,194,196],[118,161,195,196],[118,161,193,194],[118,161,196],[118,161,197],[118,158,161,193],[118,161,173,199,200],[118,161,199,200],[118,161,166,181,193,201],[118,161,202],[118,161,181,203],[118,161,176,187,204],[118,161,166,205],[118,161,193,206],[118,161,180,207],[118,161,208],[118,161,173,175,184,193,196,204,207,209],[118,161,193,210],[118,128,132,161,204],[118,128,161,193,204],[118,123,161],[118,125,128,161,201,204],[118,161,181,201],[118,161,211],[118,123,161,211],[118,125,128,161,181,204],[118,120,121,124,127,161,173,193,204],[118,128,135,161],[118,120,126,161],[118,128,149,150,161],[118,124,128,161,196,204,211],[118,149,161,211],[118,122,123,161,211],[118,128,161],[118,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,161],[118,128,143,161],[118,128,135,136,161],[118,126,128,136,137,161],[118,127,161],[118,120,123,128,161],[118,128,132,136,137,161],[118,132,161],[118,126,128,131,161,204],[118,120,125,128,135,161],[118,161,193],[118,123,128,149,161,209,211],[93,118,161],[84,85,118,161],[81,82,84,86,87,92,118,161],[82,84,118,161],[92,118,161],[84,118,161],[81,82,84,87,88,89,90,91,118,161],[81,82,83,118,161],[96,97,118,161],[98,99,103,104,105,118,161],[96,97,100,118,161,185,193]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"4749a5d10b6e3b0bd6c8d90f9ba68a91a97aa0c2c9a340dd83306b2f349d6d34","impliedFormat":99},{"version":"e9cc357cb2906b5a3ebe6fe0411c9fa0116aac999ebe4d60cd72c8775e6fa3c5","impliedFormat":99},{"version":"efdb6c1c0e195ea378a0b7cd0e808f65176bea14396dc8bdccda80551e66d73f","impliedFormat":99},{"version":"0158b82e5ae75a87e818e828687b771bcd6c13a44a451b102dad88322857ecb1","signature":"453956df80e76e848385daa7d13b061da88e93b9d8c14fc67bd7b0fedafea253"},{"version":"12fbcc7861bcb62c942bdd6af51d2fffa8f3d2f60866a1c2299dc9a3a21fbe07","signature":"cd78463ef0bb7f44ede6b5af6e19faf47fd93e30593e464e3df717fb0fea6822"},{"version":"7dab655a35f9e44db19de9d0514bbac5331852f1bc738327783167bc0ce4555b","impliedFormat":99},"e3c3f0850805f0f4975812e2108d6a156b3cd025f88b9c6817b9e3c883f62015","246d1a60ca811630a112cd3332b4c9a902e49ea2a82b705c4b023213f17da2f3","9d5b1b64c931b62aec459c6f80a077fb7491b92e89687a714bfcb4d747e9a121","c0103c5a7ba552963774aa51666b1fe19b4aa496b3593260e87f1ce23030d8af","4134abbff1aaef0da9ff471b33072e9d624a886df8088029d3194daaa9db7fc7","116b9a099c0c64cb0c7be829e87dbd91899596ff5d951fc75dc3461a1ad0af6c",{"version":"5574d520dabc450de6be799f1791d86d71da4fb236f16e6ca21b953788bb5154","impliedFormat":1},{"version":"5f877dfc985d1fd3ac8bf4a75cd77b06c42ca608809b324c44b4151758de7189","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f585cea32567574de0301ed79131a4c3d0bb36bbfea7f66e2f29b5dce1c4293","affectsGlobalScope":true,"impliedFormat":1},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true,"impliedFormat":1},{"version":"16f842a1a38c8bc26dfebd1e3c56a63a2c2a0e1979a4141c8012d2f763c38267","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"206a70e72af3e24688397b81304358526ce70d020e4c2606c4acfd1fa1e81fb2","impliedFormat":1},{"version":"017caf5d2a8ef581cf94f678af6ce7415e06956317946315560f1487b9a56167","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"4c3148420835de895b9218b2cea321a4607008ba5cefa57b2a57e1c1ef85d22f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"199c8269497136f3a0f4da1d1d90ab033f899f070e0dd801946f2a241c8abba2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"6266d94fb9165d42716e45f3a537ca9f59c07b1dfa8394a659acf139134807db","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a7692a54334fd08960cd0c610ff509c2caa93998e0dcefa54021489bcc67c22d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"1e25f8d0a8573cafd5b5a16af22d26ab872068a693b9dbccd3f72846ab373655","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[98,99,[101,106]],"options":{"allowImportingTsExtensions":false,"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":false,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":99,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":false},"referencedMap":[[95,1],[100,2],[97,2],[96,3],[109,1],[108,4],[112,5],[111,6],[110,1],[107,1],[158,7],[159,7],[160,8],[118,9],[161,10],[162,11],[163,12],[113,1],[116,13],[114,1],[115,1],[164,14],[165,15],[166,16],[167,17],[168,18],[169,19],[170,19],[172,1],[171,20],[173,21],[174,22],[175,23],[157,24],[117,1],[176,25],[177,26],[178,27],[211,28],[179,29],[180,30],[181,31],[182,32],[183,33],[184,34],[185,35],[186,36],[187,37],[188,38],[189,38],[190,39],[191,1],[192,1],[193,40],[195,41],[194,42],[196,43],[197,44],[198,45],[199,46],[200,47],[201,48],[202,49],[203,50],[204,51],[205,52],[206,53],[207,54],[208,55],[209,56],[210,57],[119,1],[79,1],[80,1],[13,1],[14,1],[16,1],[15,1],[2,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[23,1],[24,1],[3,1],[25,1],[26,1],[4,1],[27,1],[31,1],[28,1],[29,1],[30,1],[32,1],[33,1],[34,1],[5,1],[35,1],[36,1],[37,1],[38,1],[6,1],[42,1],[39,1],[40,1],[41,1],[43,1],[7,1],[44,1],[49,1],[50,1],[45,1],[46,1],[47,1],[48,1],[8,1],[54,1],[51,1],[52,1],[53,1],[55,1],[9,1],[56,1],[57,1],[58,1],[60,1],[59,1],[61,1],[62,1],[10,1],[63,1],[64,1],[65,1],[11,1],[66,1],[67,1],[68,1],[69,1],[70,1],[1,1],[71,1],[72,1],[12,1],[76,1],[74,1],[78,1],[73,1],[77,1],[75,1],[135,58],[145,59],[134,58],[155,60],[126,61],[125,62],[154,63],[148,64],[153,65],[128,66],[142,67],[127,68],[151,69],[123,70],[122,63],[152,71],[124,72],[129,73],[130,1],[133,73],[120,1],[156,74],[146,75],[137,76],[138,77],[140,78],[136,79],[139,80],[149,63],[131,81],[132,82],[141,83],[121,84],[144,75],[143,73],[147,1],[150,85],[94,86],[86,87],[93,88],[88,1],[89,1],[87,89],[90,90],[81,1],[82,1],[83,86],[85,91],[91,1],[92,92],[84,93],[105,2],[98,94],[99,94],[106,95],[101,96],[102,94],[103,94],[104,94]],"affectedFilesPendingEmit":[[105,51],[98,51],[99,51],[106,51],[101,51],[102,51],[103,51],[104,51]],"version":"5.8.3"}
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/typealiases.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/util.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/zoderror.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/locales/en.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/errors.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/parseutil.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/enumutil.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/errorutil.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/helpers/partialutil.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/types.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/external.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/index.d.ts","../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/index.d.ts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.17.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.17.3/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.17.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../src/extensionclienttransport.ts","../src/extensionservertransport.ts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.17.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts","../src/nativeclienttransport.ts","../src/nativeservertransport.ts","../src/tabclienttransport.ts","../src/tabservertransport.ts","../src/userscriptclienttransport.ts","../src/userscriptservertransport.ts","../src/browser-types.ts","../src/index.ts","../../node_modules/.pnpm/@types+har-format@1.2.16/node_modules/@types/har-format/index.d.ts","../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/har-format/index.d.ts","../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/chrome-cast/index.d.ts","../../node_modules/.pnpm/@types+filewriter@0.0.33/node_modules/@types/filewriter/index.d.ts","../../node_modules/.pnpm/@types+filesystem@0.0.36/node_modules/@types/filesystem/index.d.ts","../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/index.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.17.2/node_modules/@types/node/index.d.ts"],"fileIdsList":[[110,152],[86,110,152],[84,85,110,152],[99,110,152],[100,101,103,110,152],[102,110,152],[110,149,152],[110,151,152],[152],[110,152,157,187],[110,152,153,158,164,172,184,195],[110,152,153,154,164,172],[105,106,107,110,152],[110,152,155,196],[110,152,156,157,165,173],[110,152,157,184,192],[110,152,158,160,164,172],[110,151,152,159],[110,152,160,161],[110,152,162,164],[110,151,152,164],[110,152,164,165,166,184,195],[110,152,164,165,166,179,184,187],[110,147,152],[110,147,152,160,164,167,172,184,195],[110,152,164,165,167,168,172,184,192,195],[110,152,167,169,184,192,195],[108,109,110,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201],[110,152,164,170],[110,152,171,195],[110,152,160,164,172,184],[110,152,173],[110,152,174],[110,151,152,175],[110,149,150,151,152,153,154,155,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201],[110,152,177],[110,152,178],[110,152,164,179,180],[110,152,179,181,196,198],[110,152,164,184,185,187],[110,152,186,187],[110,152,184,185],[110,152,187],[110,152,188],[110,149,152,184,189],[110,152,164,190,191],[110,152,190,191],[110,152,157,172,184,192],[110,152,193],[110,152,172,194],[110,152,167,178,195],[110,152,157,196],[110,152,184,197],[110,152,171,198],[110,152,199],[110,152,164,166,175,184,187,195,197,198,200],[110,152,184,201],[110,119,123,152,195],[110,119,152,184,195],[110,114,152],[110,116,119,152,192,195],[110,152,172,192],[110,152,202],[110,114,152,202],[110,116,119,152,172,195],[110,111,112,115,118,152,164,184,195],[110,119,126,152],[110,111,117,152],[110,119,140,141,152],[110,115,119,152,187,195,202],[110,140,152,202],[110,113,114,152,202],[110,119,152],[110,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,152],[110,119,134,152],[110,119,126,127,152],[110,117,119,127,128,152],[110,118,152],[110,111,114,119,152],[110,119,123,127,128,152],[110,123,152],[110,117,119,122,152,195],[110,111,116,119,126,152],[110,152,184],[110,114,119,140,152,200,202],[83,110,152],[74,75,110,152],[72,73,74,76,77,81,110,152],[73,74,110,152],[82,110,152],[74,110,152],[72,73,74,77,78,79,80,110,152],[72,73,83,110,152],[86,87,110,152],[88,89,93,94,95,96,97,110,152],[86,87,90,110,152,176,184]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"5487b97cfa28b26b4a9ef0770f872bdbebd4c46124858de00f242c3eed7519f4","impliedFormat":1},{"version":"c2869c4f2f79fd2d03278a68ce7c061a5a8f4aed59efb655e25fe502e3e471d5","impliedFormat":1},{"version":"b8fe42dbf4b0efba2eb4dbfb2b95a3712676717ff8469767dc439e75d0c1a3b6","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"83306c97a4643d78420f082547ea0d488a0d134c922c8e65fc0b4f08ef66d92b","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"98a9cc18f661d28e6bd31c436e1984f3980f35e0f0aa9cf795c54f8ccb667ffe","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"dccd26a5c85325a011aff40f401e0892bd0688d44132ba79e803c67e68fffea5","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"4749a5d10b6e3b0bd6c8d90f9ba68a91a97aa0c2c9a340dd83306b2f349d6d34","impliedFormat":99},{"version":"dd1729e568bbd92727b6703f2340096d07476d29085b3ee2f49e78e6f2029d20","impliedFormat":99},{"version":"efdb6c1c0e195ea378a0b7cd0e808f65176bea14396dc8bdccda80551e66d73f","impliedFormat":99},"ee67611e17bf208e45e434a425487259d674d9a75ec107c3a8943903c9690fec","8962e3928b2445f6fe6ccd24000d74005c1a765843e0830cd1b6e723a41f15ef",{"version":"7dab655a35f9e44db19de9d0514bbac5331852f1bc738327783167bc0ce4555b","impliedFormat":99},"e3c3f0850805f0f4975812e2108d6a156b3cd025f88b9c6817b9e3c883f62015","246d1a60ca811630a112cd3332b4c9a902e49ea2a82b705c4b023213f17da2f3","9d5b1b64c931b62aec459c6f80a077fb7491b92e89687a714bfcb4d747e9a121","c0103c5a7ba552963774aa51666b1fe19b4aa496b3593260e87f1ce23030d8af","3196f84c3a2bfa224fe27cc814d7f88cb89d5724c6aa35b695fc57799975b279","b04010a965a6a325132d69518169027d516f60c8dfc63f5f86567ef61e19e429","4134abbff1aaef0da9ff471b33072e9d624a886df8088029d3194daaa9db7fc7","49e920169ced9ac227097b5b93801b8725d6be8686517cc96201fb6aeef16581",{"version":"5574d520dabc450de6be799f1791d86d71da4fb236f16e6ca21b953788bb5154","impliedFormat":1},{"version":"5f877dfc985d1fd3ac8bf4a75cd77b06c42ca608809b324c44b4151758de7189","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f585cea32567574de0301ed79131a4c3d0bb36bbfea7f66e2f29b5dce1c4293","affectsGlobalScope":true,"impliedFormat":1},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true,"impliedFormat":1},{"version":"16f842a1a38c8bc26dfebd1e3c56a63a2c2a0e1979a4141c8012d2f763c38267","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"2b7b4bc0ff201a3f08b5d1e5161998ea655b7a2c840ca646c3adcaf126aa8882","affectsGlobalScope":true,"impliedFormat":1},{"version":"5d603acd3ee29b39c8f1a40f1a5fe7a4176aeb1f69d136c368f9e7faedd5af4e","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"81711af669f63d43ccb4c08e15beda796656dd46673d0def001c7055db53852d","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"bdba81959361810be44bcfdd283f4d601e406ab5ad1d2bdff0ed480cf983c9d7","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b326f4813b90d230ec3950f66bd5b5ce3971aac5fac67cfafc54aa07b39fd07f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6ee692acba8b517b5041c02c5a3369a03f36158b6bb7605d6a98d832e7a13fcc","impliedFormat":1},{"version":"ee07335d073f94f1ec8d7311c4b15abac03a8160e7cdfd4771c47440a7489e1b","impliedFormat":1},{"version":"ec79bdd311bcba9b889af9da0cd88611affdda8c2d491305fa61b7529d5b89ba","impliedFormat":1},{"version":"73cf6cc19f16c0191e4e9d497ab0c11c7b38f1ca3f01ad0f09a3a5a971aac4b8","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"eec1e051df11fb4c7f4df5a9a18022699e596024c06bc085e9b410effe790a9a","impliedFormat":1},{"version":"d83f86427b468176fbacb28ef302f152ad3d2d127664c627216e45cfa06fbf7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a2f3aa60aece790303a62220456ff845a1b980899bdc2e81646b8e33d9d9cc15","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"0be405730b99eee7dbb051d74f6c3c0f1f8661d86184a7122b82c2bfb0991922","impliedFormat":1},{"version":"8302157cd431b3943eed09ad439b4441826c673d9f870dcb0e1f48e891a4211e","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"a5890565ed564c7b29eb1b1038d4e10c03a3f5231b0a8d48fea4b41ab19f4f46","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7172949957e9ae6dd5c046d658cc5f1d00c12d85006554412e1de0dcfea8257e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a654e0d950353614ba4637a8de4f9d367903a0692b748e11fccf8c880c99735","affectsGlobalScope":true,"impliedFormat":1},{"version":"42da246c46ca3fd421b6fd88bb4466cda7137cf33e87ba5ceeded30219c428bd","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"66e4838e0e3e0ea1ee62b57b3984a7f606f73523dfdae6500b6e3258c0aa3c7d","affectsGlobalScope":true,"impliedFormat":1},{"version":"db3d77167a7da6c5ba0c51c5b654820e3464093f21724ccd774c0b9bc3f81bc0","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[88,89,[91,98]],"options":{"declaration":true,"declarationMap":true,"esModuleInterop":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[85,1],[90,2],[87,2],[86,3],[101,1],[100,4],[104,5],[103,6],[102,1],[99,1],[149,7],[150,7],[151,8],[110,9],[152,10],[153,11],[154,12],[105,1],[108,13],[106,1],[107,1],[155,14],[156,15],[157,16],[158,17],[159,18],[160,19],[161,19],[163,1],[162,20],[164,21],[165,22],[166,23],[148,24],[109,1],[167,25],[168,26],[169,27],[202,28],[170,29],[171,30],[172,31],[173,32],[174,33],[175,34],[176,35],[177,36],[178,37],[179,38],[180,38],[181,39],[182,1],[183,1],[184,40],[186,41],[185,42],[187,43],[188,44],[189,45],[190,46],[191,47],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,54],[199,55],[200,56],[201,57],[70,1],[71,1],[12,1],[13,1],[15,1],[14,1],[2,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[23,1],[3,1],[24,1],[25,1],[4,1],[26,1],[30,1],[27,1],[28,1],[29,1],[31,1],[32,1],[33,1],[5,1],[34,1],[35,1],[36,1],[37,1],[6,1],[41,1],[38,1],[39,1],[40,1],[42,1],[7,1],[43,1],[48,1],[49,1],[44,1],[45,1],[46,1],[47,1],[8,1],[53,1],[50,1],[51,1],[52,1],[54,1],[9,1],[55,1],[56,1],[57,1],[59,1],[58,1],[60,1],[61,1],[10,1],[62,1],[63,1],[64,1],[11,1],[65,1],[66,1],[67,1],[68,1],[69,1],[1,1],[126,58],[136,59],[125,58],[146,60],[117,61],[116,62],[145,63],[139,64],[144,65],[119,66],[133,67],[118,68],[142,69],[114,70],[113,63],[143,71],[115,72],[120,73],[121,1],[124,73],[111,1],[147,74],[137,75],[128,76],[129,77],[131,78],[127,79],[130,80],[140,63],[122,81],[123,82],[132,83],[112,84],[135,75],[134,73],[138,1],[141,85],[84,86],[76,87],[82,88],[78,1],[79,1],[77,89],[80,86],[72,1],[73,1],[83,90],[75,91],[81,92],[74,93],[97,2],[88,94],[89,94],[98,95],[91,96],[92,94],[93,94],[94,94],[95,94],[96,94]],"affectedFilesPendingEmit":[[97,51],[88,51],[89,51],[98,51],[91,51],[92,51],[93,51],[94,51],[95,51],[96,51]],"version":"5.9.2"}
package/dist/index.d.ts CHANGED
@@ -355,6 +355,47 @@ declare class ExtensionServerTransport implements Transport {
355
355
  };
356
356
  }
357
357
 
358
+ interface TabClientTransportOptions {
359
+ targetOrigin: string;
360
+ channelId?: string;
361
+ }
362
+ declare class TabClientTransport implements Transport {
363
+ private _started;
364
+ private _targetOrigin;
365
+ private _channelId;
366
+ private _messageHandler?;
367
+ readonly serverReadyPromise: Promise<void>;
368
+ private _serverReadyResolve;
369
+ private _serverReadyReject;
370
+ onclose?: () => void;
371
+ onerror?: (error: Error) => void;
372
+ onmessage?: (message: JSONRPCMessage) => void;
373
+ constructor(options: TabClientTransportOptions);
374
+ start(): Promise<void>;
375
+ private sendCheckReady;
376
+ send(message: JSONRPCMessage): Promise<void>;
377
+ close(): Promise<void>;
378
+ }
379
+
380
+ interface TabServerTransportOptions {
381
+ allowedOrigins: string[];
382
+ channelId?: string;
383
+ }
384
+ declare class TabServerTransport implements Transport {
385
+ private _started;
386
+ private _allowedOrigins;
387
+ private _channelId;
388
+ private _messageHandler?;
389
+ private _clientOrigin?;
390
+ onclose?: () => void;
391
+ onerror?: (error: Error) => void;
392
+ onmessage?: (message: JSONRPCMessage) => void;
393
+ constructor(options: TabServerTransportOptions);
394
+ start(): Promise<void>;
395
+ send(message: JSONRPCMessage): Promise<void>;
396
+ close(): Promise<void>;
397
+ }
398
+
358
399
  /**
359
400
  * Configuration options for UserScriptClientTransport
360
401
  */
@@ -527,45 +568,4 @@ declare class UserScriptServerTransport implements Transport {
527
568
  };
528
569
  }
529
570
 
530
- interface TabClientTransportOptions {
531
- targetOrigin: string;
532
- channelId?: string;
533
- }
534
- declare class TabClientTransport implements Transport {
535
- private _started;
536
- private _targetOrigin;
537
- private _channelId;
538
- private _messageHandler?;
539
- readonly serverReadyPromise: Promise<void>;
540
- private _serverReadyResolve;
541
- private _serverReadyReject;
542
- onclose?: () => void;
543
- onerror?: (error: Error) => void;
544
- onmessage?: (message: JSONRPCMessage) => void;
545
- constructor(options: TabClientTransportOptions);
546
- start(): Promise<void>;
547
- private sendCheckReady;
548
- send(message: JSONRPCMessage): Promise<void>;
549
- close(): Promise<void>;
550
- }
551
-
552
- interface TabServerTransportOptions {
553
- allowedOrigins: string[];
554
- channelId?: string;
555
- }
556
- declare class TabServerTransport implements Transport {
557
- private _started;
558
- private _allowedOrigins;
559
- private _channelId;
560
- private _messageHandler?;
561
- private _clientOrigin?;
562
- onclose?: () => void;
563
- onerror?: (error: Error) => void;
564
- onmessage?: (message: JSONRPCMessage) => void;
565
- constructor(options: TabServerTransportOptions);
566
- start(): Promise<void>;
567
- send(message: JSONRPCMessage): Promise<void>;
568
- close(): Promise<void>;
569
- }
570
-
571
571
  export { BACKGROUND_MESSAGE_TYPES, ERROR_MESSAGES, type EventId, ExtensionClientTransport, type ExtensionClientTransportOptions, ExtensionServerTransport, type ExtensionServerTransportOptions, HOST_NAME, type MCPBrowserInterface, type MCPConnectOptions, type MCPEventMessage, type MCPEventStore, type MCPReplayEventMessage, type MCPServerInfo, type MCPServerInfoMessage, type MCPWindow, NATIVE_HOST, NativeMessageType, STORAGE_KEYS, SUCCESS_MESSAGES, type ServerStatus, type StoredEvent, type StreamId, TabClientTransport, type TabClientTransportOptions, TabServerTransport, type TabServerTransportOptions, UserScriptClientTransport, type UserScriptClientTransportOptions, UserScriptServerTransport, type UserScriptServerTransportOptions };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {JSONRPCMessageSchema}from'@modelcontextprotocol/sdk/types.js';var _=(n=>(n.START="start",n.STARTED="started",n.STOP="stop",n.STOPPED="stopped",n.PING="ping",n.PONG="pong",n.ERROR="error",n.LIST_TOOLS="list_tools",n.CALL_TOOL="call_tool",n.TOOL_LIST_UPDATED="tool_list_updated",n.TOOL_LIST_UPDATED_ACK="tool_list_updated_ack",n.PROCESS_DATA="process_data",n.SERVER_STARTED="server_started",n.SERVER_STOPPED="server_stopped",n.ERROR_FROM_NATIVE_HOST="error_from_native_host",n.CONNECT_NATIVE="connectNative",n.PING_NATIVE="ping_native",n.DISCONNECT_NATIVE="disconnect_native",n))(_||{}),m={NAME:"com.chromemcp.nativehost",DEFAULT_PORT:12306},E={NATIVE_CONNECTION_FAILED:"Failed to connect to native host",NATIVE_DISCONNECTED:"Native connection disconnected",SERVER_STATUS_LOAD_FAILED:"Failed to load server status",TOOL_EXECUTION_FAILED:"Tool execution failed",SERVER_STATUS_SAVE_FAILED:"Failed to save server status"},y={TOOL_EXECUTED:"Tool executed successfully",CONNECTION_ESTABLISHED:"Connection established",SERVER_STARTED:"Server started successfully",SERVER_STOPPED:"Server stopped successfully"},w={SERVER_STATUS:"serverStatus"},T={GET_SERVER_STATUS:"get_server_status",REFRESH_SERVER_STATUS:"refresh_server_status",SERVER_STATUS_CHANGED:"server_status_changed"},A=m.NAME;var a=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;_isReconnecting=false;_reconnectAttempts=0;_reconnectTimer;_currentReconnectDelay;_isStarted=false;_isClosed=false;_autoReconnect;_maxReconnectAttempts;_reconnectDelay;_maxReconnectDelay;_reconnectBackoffMultiplier;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp",this._autoReconnect=e.autoReconnect??true,this._maxReconnectAttempts=e.maxReconnectAttempts??10,this._reconnectDelay=e.reconnectDelay??1e3,this._maxReconnectDelay=e.maxReconnectDelay??3e4,this._reconnectBackoffMultiplier=e.reconnectBackoffMultiplier??1.5,this._currentReconnectDelay=this._reconnectDelay;}async start(){if(this._isStarted&&this._port){console.warn("ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.");return}this._isStarted=true,this._isClosed=false,await this._connect();}async _connect(){return new Promise((e,t)=>{if(!chrome?.runtime?.connect){t(new Error("Chrome runtime API not available. This transport must be used in a Chrome extension context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=o=>{try{if(o.type==="keep-alive")return;let s=JSONRPCMessageSchema.parse(o);this.onmessage?.(s);}catch(s){this.onerror?.(new Error(`Failed to parse message: ${s}`));}},this._disconnectHandler=()=>{this._cleanup(),this._isStarted&&!this._isClosed&&this._autoReconnect?this._scheduleReconnect():this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let r=chrome.runtime.lastError;if(r){if(this._cleanup(),this._isReconnecting&&this._isStarted&&!this._isClosed&&this._autoReconnect){t(new Error(`Connection failed: ${r.message}`));return}t(new Error(`Connection failed: ${r.message}`));return}this._reconnectAttempts=0,this._currentReconnectDelay=this._reconnectDelay,this._isReconnecting=!1,e();}catch(r){t(r);}})}async send(e,t){if(!this._isStarted)throw new Error("Transport not started");if(this._isClosed)throw new Error("Transport is closed");if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._isClosed=true,this._isStarted=false,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=void 0),this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}_scheduleReconnect(){if(!(this._isReconnecting||this._isClosed||!this._isStarted)){if(this._isReconnecting=true,this._reconnectAttempts>=this._maxReconnectAttempts){console.error("Maximum reconnection attempts reached"),this._isReconnecting=false,this.onerror?.(new Error("Maximum reconnection attempts reached")),this.onclose?.();return}this._reconnectAttempts++,console.log(`Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`),this._reconnectTimer=setTimeout(()=>{this._attemptReconnect();},this._currentReconnectDelay),this._currentReconnectDelay=Math.min(this._currentReconnectDelay*this._reconnectBackoffMultiplier,this._maxReconnectDelay);}}async _attemptReconnect(){if(!(this._isClosed||!this._isStarted))try{if(chrome?.runtime?.sendMessage)try{await chrome.runtime.sendMessage({type:"ping"});}catch{}await this._connect(),console.log("Reconnection successful"),this._isReconnecting=!1;}catch(e){console.error("Reconnection failed:",e),this._scheduleReconnect();}}};var c=class{_port;_started=false;_messageHandler;_disconnectHandler;_keepAliveTimer;_options;_connectionInfo;onclose;onerror;onmessage;constructor(e,t={}){this._port=e,this._options={keepAlive:t.keepAlive??true,keepAliveInterval:t.keepAliveInterval??1e3},this._connectionInfo={connectedAt:Date.now(),lastMessageAt:Date.now(),messageCount:0};}async start(){if(this._started)throw new Error("ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{if(this._connectionInfo.lastMessageAt=Date.now(),this._connectionInfo.messageCount++,e.type==="ping"){this._port.postMessage({type:"pong"});return}let t=JSONRPCMessageSchema.parse(e);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Failed to parse message: ${t}`));}},this._disconnectHandler=()=>{console.log(`[ExtensionServerTransport] Client disconnected after ${Date.now()-this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`),this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler),this._options.keepAlive&&this._startKeepAlive(),console.log(`[ExtensionServerTransport] Started with client: ${this._port.sender?.id||"unknown"}`);}async send(e,t){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(r){throw chrome.runtime.lastError||!this._port?(this._cleanup(),this.onclose?.(),new Error("Client disconnected")):new Error(`Failed to send message: ${r}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0),this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}_startKeepAlive(){this._keepAliveTimer||(console.log(`[ExtensionServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`),this._keepAliveTimer=setInterval(()=>{if(!this._port){this._stopKeepAlive();return}try{this._port.postMessage({type:"keep-alive",timestamp:Date.now()});}catch(e){console.error("[ExtensionServerTransport] Keep-alive failed:",e),this._stopKeepAlive();}},this._options.keepAliveInterval));}_stopKeepAlive(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0);}getConnectionInfo(){return {...this._connectionInfo,uptime:Date.now()-this._connectionInfo.connectedAt,isConnected:!!this._port&&this._started}}};var l=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;_isReconnecting=false;_reconnectAttempts=0;_reconnectTimer;_currentReconnectDelay;_isStarted=false;_isClosed=false;_autoReconnect;_maxReconnectAttempts;_reconnectDelay;_maxReconnectDelay;_reconnectBackoffMultiplier;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp",this._autoReconnect=e.autoReconnect??true,this._maxReconnectAttempts=e.maxReconnectAttempts??10,this._reconnectDelay=e.reconnectDelay??1e3,this._maxReconnectDelay=e.maxReconnectDelay??3e4,this._reconnectBackoffMultiplier=e.reconnectBackoffMultiplier??1.5,this._currentReconnectDelay=this._reconnectDelay;}async start(){if(this._isStarted&&this._port){console.warn("UserScriptClientTransport already started! If using Client class, note that connect() calls start() automatically.");return}this._isStarted=true,this._isClosed=false,await this._connect();}async _connect(){return new Promise((e,t)=>{if(!chrome?.runtime?.connect){t(new Error("Chrome runtime API not available. This transport must be used in a Chrome MV3 User Script context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=o=>{try{if(o.type==="keep-alive")return;let s=JSONRPCMessageSchema.parse(o);this.onmessage?.(s);}catch(s){this.onerror?.(new Error(`Failed to parse message: ${s}`));}},this._disconnectHandler=()=>{this._cleanup(),this._isStarted&&!this._isClosed&&this._autoReconnect?this._scheduleReconnect():this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let r=chrome.runtime.lastError;if(r){if(this._cleanup(),this._isReconnecting&&this._isStarted&&!this._isClosed&&this._autoReconnect){t(new Error(`Connection failed: ${r.message}`));return}t(new Error(`Connection failed: ${r.message}`));return}this._reconnectAttempts=0,this._currentReconnectDelay=this._reconnectDelay,this._isReconnecting=!1,e();}catch(r){t(r);}})}async send(e,t){if(!this._isStarted)throw new Error("Transport not started");if(this._isClosed)throw new Error("Transport is closed");if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._isClosed=true,this._isStarted=false,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=void 0),this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}_scheduleReconnect(){if(!(this._isReconnecting||this._isClosed||!this._isStarted)){if(this._isReconnecting=true,this._reconnectAttempts>=this._maxReconnectAttempts){console.error("Maximum reconnection attempts reached"),this._isReconnecting=false,this.onerror?.(new Error("Maximum reconnection attempts reached")),this.onclose?.();return}this._reconnectAttempts++,console.log(`Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`),this._reconnectTimer=setTimeout(()=>{this._attemptReconnect();},this._currentReconnectDelay),this._currentReconnectDelay=Math.min(this._currentReconnectDelay*this._reconnectBackoffMultiplier,this._maxReconnectDelay);}}async _attemptReconnect(){if(!(this._isClosed||!this._isStarted))try{if(chrome?.runtime?.sendMessage)try{await chrome.runtime.sendMessage({type:"ping"});}catch{}await this._connect(),console.log("Reconnection successful"),this._isReconnecting=!1;}catch(e){console.error("Reconnection failed:",e),this._scheduleReconnect();}}};var p=class{_port;_started=false;_messageHandler;_disconnectHandler;_keepAliveTimer;_options;_connectionInfo;onclose;onerror;onmessage;constructor(e,t={}){this._port=e,this._options={keepAlive:t.keepAlive??true,keepAliveInterval:t.keepAliveInterval??1e3},this._connectionInfo={connectedAt:Date.now(),lastMessageAt:Date.now(),messageCount:0};}async start(){if(this._started)throw new Error("UserScriptServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{if(this._connectionInfo.lastMessageAt=Date.now(),this._connectionInfo.messageCount++,e.type==="ping"){this._port.postMessage({type:"pong"});return}let t=JSONRPCMessageSchema.parse(e);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Failed to parse message: ${t}`));}},this._disconnectHandler=()=>{console.log(`[UserScriptServerTransport] Client disconnected after ${Date.now()-this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`),this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler),this._options.keepAlive&&this._startKeepAlive(),console.log(`[UserScriptServerTransport] Started with client: ${this._port.sender?.id||"unknown"}`);}async send(e,t){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(r){throw chrome.runtime.lastError||!this._port?(this._cleanup(),this.onclose?.(),new Error("Client disconnected")):new Error(`Failed to send message: ${r}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0),this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}_startKeepAlive(){this._keepAliveTimer||(console.log(`[UserScriptServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`),this._keepAliveTimer=setInterval(()=>{if(!this._port){this._stopKeepAlive();return}try{this._port.postMessage({type:"keep-alive",timestamp:Date.now()});}catch(e){console.error("[UserScriptServerTransport] Keep-alive failed:",e),this._stopKeepAlive();}},this._options.keepAliveInterval));}_stopKeepAlive(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0);}getConnectionInfo(){return {...this._connectionInfo,uptime:Date.now()-this._connectionInfo.connectedAt,isConnected:!!this._port&&this._started}}};var d=class{_started=false;_targetOrigin;_channelId;_messageHandler;serverReadyPromise;_serverReadyResolve;_serverReadyReject;onclose;onerror;onmessage;constructor(e){if(!e.targetOrigin)throw new Error("targetOrigin must be explicitly set for security");this._targetOrigin=e.targetOrigin,this._channelId=e.channelId||"mcp-default";let{promise:t,resolve:r,reject:o}=Promise.withResolvers();this.serverReadyPromise=t,this._serverReadyResolve=()=>{r();},this._serverReadyReject=s=>{o(s);};}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(e.origin!==this._targetOrigin||e.data?.channel!==this._channelId||e.data?.type!=="mcp"||e.data?.direction!=="server-to-client")return;let t=e.data.payload;if(typeof t=="string"&&t==="mcp-server-ready"){this._serverReadyResolve();return}if(typeof t=="string"&&t==="mcp-server-stopped"){console.log("[TabClientTransport] Received mcp-server-stopped event, closing transport"),this.close();return}try{let r=JSONRPCMessageSchema.parse(t);this._serverReadyResolve(),this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r instanceof Error?r.message:String(r)}`));}},window.addEventListener("message",this._messageHandler),this._started=true,this.sendCheckReady();}sendCheckReady(){window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:"mcp-check-ready"},this._targetOrigin);}async send(e){if(!this._started)throw new Error("Transport not started");await this.serverReadyPromise,window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:e},this._targetOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._serverReadyReject(new Error("Transport closed before server ready")),this._started=false,this.onclose?.();}};var h=class{_started=false;_allowedOrigins;_channelId;_messageHandler;_clientOrigin;onclose;onerror;onmessage;constructor(e){if(!e.allowedOrigins||e.allowedOrigins.length===0)throw new Error("At least one allowed origin must be specified");this._allowedOrigins=e.allowedOrigins,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(!this._allowedOrigins.includes(e.origin)&&!this._allowedOrigins.includes("*")||e.data?.channel!==this._channelId||e.data?.type!=="mcp"||e.data?.direction!=="client-to-server")return;this._clientOrigin=e.origin;let t=e.data.payload;if(typeof t=="string"&&t==="mcp-check-ready"){window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-ready"},this._clientOrigin);return}try{let r=JSONRPCMessageSchema.parse(t);this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r instanceof Error?r.message:String(r)}`));}},window.addEventListener("message",this._messageHandler),this._started=true,window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-ready"},"*");}async send(e){if(!this._started)throw new Error("Transport not started");if(!this._clientOrigin)throw new Error("No client connected");window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:e},this._clientOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-stopped"},"*"),this.onclose?.();}};export{T as BACKGROUND_MESSAGE_TYPES,E as ERROR_MESSAGES,a as ExtensionClientTransport,c as ExtensionServerTransport,A as HOST_NAME,m as NATIVE_HOST,_ as NativeMessageType,w as STORAGE_KEYS,y as SUCCESS_MESSAGES,d as TabClientTransport,h as TabServerTransport,l as UserScriptClientTransport,p as UserScriptServerTransport};//# sourceMappingURL=index.js.map
1
+ import {JSONRPCMessageSchema}from'@modelcontextprotocol/sdk/types.js';var _=(n=>(n.START="start",n.STARTED="started",n.STOP="stop",n.STOPPED="stopped",n.PING="ping",n.PONG="pong",n.ERROR="error",n.LIST_TOOLS="list_tools",n.CALL_TOOL="call_tool",n.TOOL_LIST_UPDATED="tool_list_updated",n.TOOL_LIST_UPDATED_ACK="tool_list_updated_ack",n.PROCESS_DATA="process_data",n.SERVER_STARTED="server_started",n.SERVER_STOPPED="server_stopped",n.ERROR_FROM_NATIVE_HOST="error_from_native_host",n.CONNECT_NATIVE="connectNative",n.PING_NATIVE="ping_native",n.DISCONNECT_NATIVE="disconnect_native",n))(_||{}),m={NAME:"com.chromemcp.nativehost",DEFAULT_PORT:12306},E={NATIVE_CONNECTION_FAILED:"Failed to connect to native host",NATIVE_DISCONNECTED:"Native connection disconnected",SERVER_STATUS_LOAD_FAILED:"Failed to load server status",TOOL_EXECUTION_FAILED:"Tool execution failed",SERVER_STATUS_SAVE_FAILED:"Failed to save server status"},y={TOOL_EXECUTED:"Tool executed successfully",CONNECTION_ESTABLISHED:"Connection established",SERVER_STARTED:"Server started successfully",SERVER_STOPPED:"Server stopped successfully"},w={SERVER_STATUS:"serverStatus"},T={GET_SERVER_STATUS:"get_server_status",REFRESH_SERVER_STATUS:"refresh_server_status",SERVER_STATUS_CHANGED:"server_status_changed"},A=m.NAME;var a=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;_isReconnecting=false;_reconnectAttempts=0;_reconnectTimer;_currentReconnectDelay;_isStarted=false;_isClosed=false;_autoReconnect;_maxReconnectAttempts;_reconnectDelay;_maxReconnectDelay;_reconnectBackoffMultiplier;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp",this._autoReconnect=e.autoReconnect??true,this._maxReconnectAttempts=e.maxReconnectAttempts??10,this._reconnectDelay=e.reconnectDelay??1e3,this._maxReconnectDelay=e.maxReconnectDelay??3e4,this._reconnectBackoffMultiplier=e.reconnectBackoffMultiplier??1.5,this._currentReconnectDelay=this._reconnectDelay;}async start(){if(this._isStarted&&this._port){console.warn("ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.");return}this._isStarted=true,this._isClosed=false,await this._connect();}async _connect(){return new Promise((e,t)=>{if(!chrome?.runtime?.connect){t(new Error("Chrome runtime API not available. This transport must be used in a Chrome extension context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=o=>{try{if(o.type==="keep-alive")return;let s=JSONRPCMessageSchema.parse(o);this.onmessage?.(s);}catch(s){this.onerror?.(new Error(`Failed to parse message: ${s}`));}},this._disconnectHandler=()=>{this._cleanup(),this._isStarted&&!this._isClosed&&this._autoReconnect?this._scheduleReconnect():this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let r=chrome.runtime.lastError;if(r){if(this._cleanup(),this._isReconnecting&&this._isStarted&&!this._isClosed&&this._autoReconnect){t(new Error(`Connection failed: ${r.message}`));return}t(new Error(`Connection failed: ${r.message}`));return}this._reconnectAttempts=0,this._currentReconnectDelay=this._reconnectDelay,this._isReconnecting=!1,e();}catch(r){t(r);}})}async send(e,t){if(!this._isStarted)throw new Error("Transport not started");if(this._isClosed)throw new Error("Transport is closed");if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._isClosed=true,this._isStarted=false,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=void 0),this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}_scheduleReconnect(){if(!(this._isReconnecting||this._isClosed||!this._isStarted)){if(this._isReconnecting=true,this._reconnectAttempts>=this._maxReconnectAttempts){console.error("Maximum reconnection attempts reached"),this._isReconnecting=false,this.onerror?.(new Error("Maximum reconnection attempts reached")),this.onclose?.();return}this._reconnectAttempts++,console.log(`Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`),this._reconnectTimer=setTimeout(()=>{this._attemptReconnect();},this._currentReconnectDelay),this._currentReconnectDelay=Math.min(this._currentReconnectDelay*this._reconnectBackoffMultiplier,this._maxReconnectDelay);}}async _attemptReconnect(){if(!(this._isClosed||!this._isStarted))try{if(chrome?.runtime?.sendMessage)try{await chrome.runtime.sendMessage({type:"ping"});}catch{}await this._connect(),console.log("Reconnection successful"),this._isReconnecting=!1;}catch(e){console.error("Reconnection failed:",e),this._scheduleReconnect();}}};var c=class{_port;_started=false;_messageHandler;_disconnectHandler;_keepAliveTimer;_options;_connectionInfo;onclose;onerror;onmessage;constructor(e,t={}){this._port=e,this._options={keepAlive:t.keepAlive??true,keepAliveInterval:t.keepAliveInterval??1e3},this._connectionInfo={connectedAt:Date.now(),lastMessageAt:Date.now(),messageCount:0};}async start(){if(this._started)throw new Error("ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{if(this._connectionInfo.lastMessageAt=Date.now(),this._connectionInfo.messageCount++,e.type==="ping"){this._port.postMessage({type:"pong"});return}let t=JSONRPCMessageSchema.parse(e);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Failed to parse message: ${t}`));}},this._disconnectHandler=()=>{console.log(`[ExtensionServerTransport] Client disconnected after ${Date.now()-this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`),this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler),this._options.keepAlive&&this._startKeepAlive(),console.log(`[ExtensionServerTransport] Started with client: ${this._port.sender?.id||"unknown"}`);}async send(e,t){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(r){throw chrome.runtime.lastError||!this._port?(this._cleanup(),this.onclose?.(),new Error("Client disconnected")):new Error(`Failed to send message: ${r}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0),this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}_startKeepAlive(){this._keepAliveTimer||(console.log(`[ExtensionServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`),this._keepAliveTimer=setInterval(()=>{if(!this._port){this._stopKeepAlive();return}try{this._port.postMessage({type:"keep-alive",timestamp:Date.now()});}catch(e){console.error("[ExtensionServerTransport] Keep-alive failed:",e),this._stopKeepAlive();}},this._options.keepAliveInterval));}_stopKeepAlive(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0);}getConnectionInfo(){return {...this._connectionInfo,uptime:Date.now()-this._connectionInfo.connectedAt,isConnected:!!this._port&&this._started}}};var l=class{_started=false;_targetOrigin;_channelId;_messageHandler;serverReadyPromise;_serverReadyResolve;_serverReadyReject;onclose;onerror;onmessage;constructor(e){if(!e.targetOrigin)throw new Error("targetOrigin must be explicitly set for security");this._targetOrigin=e.targetOrigin,this._channelId=e.channelId||"mcp-default";let{promise:t,resolve:r,reject:o}=Promise.withResolvers();this.serverReadyPromise=t,this._serverReadyResolve=()=>{r();},this._serverReadyReject=s=>{o(s);};}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(e.origin!==this._targetOrigin||e.data?.channel!==this._channelId||e.data?.type!=="mcp"||e.data?.direction!=="server-to-client")return;let t=e.data.payload;if(typeof t=="string"&&t==="mcp-server-ready"){this._serverReadyResolve();return}if(typeof t=="string"&&t==="mcp-server-stopped"){console.log("[TabClientTransport] Received mcp-server-stopped event, closing transport"),this.close();return}try{let r=JSONRPCMessageSchema.parse(t);this._serverReadyResolve(),this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r instanceof Error?r.message:String(r)}`));}},window.addEventListener("message",this._messageHandler),this._started=true,this.sendCheckReady();}sendCheckReady(){window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:"mcp-check-ready"},this._targetOrigin);}async send(e){if(!this._started)throw new Error("Transport not started");await this.serverReadyPromise,window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:e},this._targetOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._serverReadyReject(new Error("Transport closed before server ready")),this._started=false,this.onclose?.();}};var p=class{_started=false;_allowedOrigins;_channelId;_messageHandler;_clientOrigin;onclose;onerror;onmessage;constructor(e){if(!e.allowedOrigins||e.allowedOrigins.length===0)throw new Error("At least one allowed origin must be specified");this._allowedOrigins=e.allowedOrigins,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(!this._allowedOrigins.includes(e.origin)&&!this._allowedOrigins.includes("*")||e.data?.channel!==this._channelId||e.data?.type!=="mcp"||e.data?.direction!=="client-to-server")return;this._clientOrigin=e.origin;let t=e.data.payload;if(typeof t=="string"&&t==="mcp-check-ready"){window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-ready"},this._clientOrigin);return}try{let r=JSONRPCMessageSchema.parse(t);this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r instanceof Error?r.message:String(r)}`));}},window.addEventListener("message",this._messageHandler),this._started=true,window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-ready"},"*");}async send(e){if(!this._started)throw new Error("Transport not started");if(!this._clientOrigin)throw new Error("No client connected");window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:e},this._clientOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:"mcp-server-stopped"},"*"),this.onclose?.();}};var d=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;_isReconnecting=false;_reconnectAttempts=0;_reconnectTimer;_currentReconnectDelay;_isStarted=false;_isClosed=false;_autoReconnect;_maxReconnectAttempts;_reconnectDelay;_maxReconnectDelay;_reconnectBackoffMultiplier;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp",this._autoReconnect=e.autoReconnect??true,this._maxReconnectAttempts=e.maxReconnectAttempts??10,this._reconnectDelay=e.reconnectDelay??1e3,this._maxReconnectDelay=e.maxReconnectDelay??3e4,this._reconnectBackoffMultiplier=e.reconnectBackoffMultiplier??1.5,this._currentReconnectDelay=this._reconnectDelay;}async start(){if(this._isStarted&&this._port){console.warn("UserScriptClientTransport already started! If using Client class, note that connect() calls start() automatically.");return}this._isStarted=true,this._isClosed=false,await this._connect();}async _connect(){return new Promise((e,t)=>{if(!chrome?.runtime?.connect){t(new Error("Chrome runtime API not available. This transport must be used in a Chrome MV3 User Script context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=o=>{try{if(o.type==="keep-alive")return;let s=JSONRPCMessageSchema.parse(o);this.onmessage?.(s);}catch(s){this.onerror?.(new Error(`Failed to parse message: ${s}`));}},this._disconnectHandler=()=>{this._cleanup(),this._isStarted&&!this._isClosed&&this._autoReconnect?this._scheduleReconnect():this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let r=chrome.runtime.lastError;if(r){if(this._cleanup(),this._isReconnecting&&this._isStarted&&!this._isClosed&&this._autoReconnect){t(new Error(`Connection failed: ${r.message}`));return}t(new Error(`Connection failed: ${r.message}`));return}this._reconnectAttempts=0,this._currentReconnectDelay=this._reconnectDelay,this._isReconnecting=!1,e();}catch(r){t(r);}})}async send(e,t){if(!this._isStarted)throw new Error("Transport not started");if(this._isClosed)throw new Error("Transport is closed");if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._isClosed=true,this._isStarted=false,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=void 0),this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}_scheduleReconnect(){if(!(this._isReconnecting||this._isClosed||!this._isStarted)){if(this._isReconnecting=true,this._reconnectAttempts>=this._maxReconnectAttempts){console.error("Maximum reconnection attempts reached"),this._isReconnecting=false,this.onerror?.(new Error("Maximum reconnection attempts reached")),this.onclose?.();return}this._reconnectAttempts++,console.log(`Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`),this._reconnectTimer=setTimeout(()=>{this._attemptReconnect();},this._currentReconnectDelay),this._currentReconnectDelay=Math.min(this._currentReconnectDelay*this._reconnectBackoffMultiplier,this._maxReconnectDelay);}}async _attemptReconnect(){if(!(this._isClosed||!this._isStarted))try{if(chrome?.runtime?.sendMessage)try{await chrome.runtime.sendMessage({type:"ping"});}catch{}await this._connect(),console.log("Reconnection successful"),this._isReconnecting=!1;}catch(e){console.error("Reconnection failed:",e),this._scheduleReconnect();}}};var h=class{_port;_started=false;_messageHandler;_disconnectHandler;_keepAliveTimer;_options;_connectionInfo;onclose;onerror;onmessage;constructor(e,t={}){this._port=e,this._options={keepAlive:t.keepAlive??true,keepAliveInterval:t.keepAliveInterval??1e3},this._connectionInfo={connectedAt:Date.now(),lastMessageAt:Date.now(),messageCount:0};}async start(){if(this._started)throw new Error("UserScriptServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{if(this._connectionInfo.lastMessageAt=Date.now(),this._connectionInfo.messageCount++,e.type==="ping"){this._port.postMessage({type:"pong"});return}let t=JSONRPCMessageSchema.parse(e);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Failed to parse message: ${t}`));}},this._disconnectHandler=()=>{console.log(`[UserScriptServerTransport] Client disconnected after ${Date.now()-this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`),this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler),this._options.keepAlive&&this._startKeepAlive(),console.log(`[UserScriptServerTransport] Started with client: ${this._port.sender?.id||"unknown"}`);}async send(e,t){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(r){throw chrome.runtime.lastError||!this._port?(this._cleanup(),this.onclose?.(),new Error("Client disconnected")):new Error(`Failed to send message: ${r}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0),this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}_startKeepAlive(){this._keepAliveTimer||(console.log(`[UserScriptServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`),this._keepAliveTimer=setInterval(()=>{if(!this._port){this._stopKeepAlive();return}try{this._port.postMessage({type:"keep-alive",timestamp:Date.now()});}catch(e){console.error("[UserScriptServerTransport] Keep-alive failed:",e),this._stopKeepAlive();}},this._options.keepAliveInterval));}_stopKeepAlive(){this._keepAliveTimer&&(clearInterval(this._keepAliveTimer),this._keepAliveTimer=void 0);}getConnectionInfo(){return {...this._connectionInfo,uptime:Date.now()-this._connectionInfo.connectedAt,isConnected:!!this._port&&this._started}}};export{T as BACKGROUND_MESSAGE_TYPES,E as ERROR_MESSAGES,a as ExtensionClientTransport,c as ExtensionServerTransport,A as HOST_NAME,m as NATIVE_HOST,_ as NativeMessageType,w as STORAGE_KEYS,y as SUCCESS_MESSAGES,l as TabClientTransport,p as TabServerTransport,d as UserScriptClientTransport,h as UserScriptServerTransport};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser-types.ts","../src/ExtensionClientTransport.ts","../src/ExtensionServerTransport.ts","../src/UserScriptClientTransport.ts","../src/UserScriptServerTransport.ts","../src/TabClientTransport.ts","../src/TabServerTransport.ts"],"names":["NativeMessageType","NATIVE_HOST","ERROR_MESSAGES","SUCCESS_MESSAGES","STORAGE_KEYS","BACKGROUND_MESSAGE_TYPES","HOST_NAME","ExtensionClientTransport","options","resolve","reject","message","mcpMessage","JSONRPCMessageSchema","error","_options","ExtensionServerTransport","port","UserScriptClientTransport","UserScriptServerTransport","TabClientTransport","promise","reason","event","payload","TabServerTransport"],"mappings":"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","file":"index.js","sourcesContent":["import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Unique identifier for an event in the event store\n */\nexport type EventId = string;\n\n/**\n * Unique identifier for a stream of events\n */\nexport type StreamId = string;\n\n/**\n * Options for connecting to an MCP server\n */\nexport interface MCPConnectOptions {\n /**\n * The event ID to resume from if reconnecting\n */\n resumeFrom?: EventId;\n}\n\n/**\n * Information about the MCP server\n */\nexport interface MCPServerInfo {\n /**\n * Unique identifier for this server instance\n */\n instanceId: string;\n /**\n * Whether the server maintains session state\n */\n stateful: boolean;\n /**\n * Whether the server has event storage enabled\n */\n hasEventStore: boolean;\n}\n\n/**\n * Event storage interface for accessing stored events\n */\nexport interface MCPEventStore {\n /**\n * Get stored events, optionally filtered by client and/or after a specific event\n * @param clientId - Optional client ID to filter events\n * @param afterEventId - Optional event ID to get events after\n * @param limit - Maximum number of events to return (default: 100)\n */\n getEvents(clientId?: string, afterEventId?: EventId, limit?: number): StoredEvent[];\n\n /**\n * Get the ID of the last event, optionally for a specific client\n * @param clientId - Optional client ID to filter by\n */\n getLastEventId(clientId?: string): EventId | null;\n\n /**\n * Clear stored events, optionally for a specific client\n * @param clientId - Optional client ID to clear events for\n */\n clearEvents(clientId?: string): void;\n}\n\n/**\n * The MCP interface exposed on window for browser environments\n */\nexport interface MCPBrowserInterface {\n /**\n * Connect a client to the MCP server\n * @param clientId - Unique identifier for the client\n * @param options - Optional connection options\n * @returns MessagePort for communication or null if connection fails\n */\n connect(clientId: string, options?: MCPConnectOptions): MessagePort | null;\n\n /**\n * Disconnect a client from the MCP server\n * @param clientId - The client ID to disconnect\n */\n disconnect(clientId: string): void;\n\n /**\n * Terminate a client's session and clean up all associated resources\n * @param clientId - The client ID to terminate\n */\n terminateSession?(clientId: string): void;\n\n /**\n * Check if the MCP server is available and running\n */\n isServerAvailable(): boolean;\n\n /**\n * Get information about the MCP server\n */\n getServerInfo(): MCPServerInfo;\n\n /**\n * Event storage access (only available in stateful mode with event store)\n */\n events?: MCPEventStore;\n}\n\n/**\n * Extended Window interface with MCP support\n */\nexport interface MCPWindow extends Window {\n mcp?: MCPBrowserInterface;\n}\n\n/**\n * Message types for internal MCP communication\n */\nexport interface MCPServerInfoMessage {\n type: 'mcp-server-info';\n serverInstanceId: string;\n serverSessionId?: string;\n hasEventStore: boolean;\n streamId: StreamId;\n}\n\nexport interface MCPEventMessage {\n type: 'mcp-event';\n eventId: EventId;\n message: JSONRPCMessage;\n}\n\nexport interface MCPReplayEventMessage {\n type: 'mcp-replay-event';\n eventId: EventId;\n message: JSONRPCMessage;\n}\n\n/**\n * Stored event with metadata for event sourcing\n */\nexport interface StoredEvent {\n eventId: EventId;\n streamId: StreamId;\n message: JSONRPCMessage;\n timestamp: number;\n clientId: string;\n}\n\nexport enum NativeMessageType {\n START = 'start',\n STARTED = 'started',\n STOP = 'stop',\n STOPPED = 'stopped',\n PING = 'ping',\n PONG = 'pong',\n ERROR = 'error',\n LIST_TOOLS = 'list_tools',\n CALL_TOOL = 'call_tool',\n TOOL_LIST_UPDATED = 'tool_list_updated',\n TOOL_LIST_UPDATED_ACK = 'tool_list_updated_ack',\n PROCESS_DATA = 'process_data',\n\n // Additional message types used in Chrome extension\n SERVER_STARTED = 'server_started',\n SERVER_STOPPED = 'server_stopped',\n ERROR_FROM_NATIVE_HOST = 'error_from_native_host',\n CONNECT_NATIVE = 'connectNative',\n PING_NATIVE = 'ping_native',\n DISCONNECT_NATIVE = 'disconnect_native',\n}\n\n/**\n * Chrome Extension Constants\n * Centralized configuration values and magic constants\n */\n\n// Native Host Configuration\nexport const NATIVE_HOST = {\n NAME: 'com.chromemcp.nativehost',\n DEFAULT_PORT: 12306,\n} as const;\n\n// Error Messages\nexport const ERROR_MESSAGES = {\n NATIVE_CONNECTION_FAILED: 'Failed to connect to native host',\n NATIVE_DISCONNECTED: 'Native connection disconnected',\n SERVER_STATUS_LOAD_FAILED: 'Failed to load server status',\n TOOL_EXECUTION_FAILED: 'Tool execution failed',\n SERVER_STATUS_SAVE_FAILED: 'Failed to save server status',\n} as const;\n\n// Success Messages\nexport const SUCCESS_MESSAGES = {\n TOOL_EXECUTED: 'Tool executed successfully',\n CONNECTION_ESTABLISHED: 'Connection established',\n SERVER_STARTED: 'Server started successfully',\n SERVER_STOPPED: 'Server stopped successfully',\n} as const;\n\n// Storage Keys\nexport const STORAGE_KEYS = {\n SERVER_STATUS: 'serverStatus',\n} as const;\n\n// Background script message types\nexport const BACKGROUND_MESSAGE_TYPES = {\n GET_SERVER_STATUS: 'get_server_status',\n REFRESH_SERVER_STATUS: 'refresh_server_status',\n SERVER_STATUS_CHANGED: 'server_status_changed',\n} as const;\n\nexport const HOST_NAME = NATIVE_HOST.NAME;\n\n/**\n * Server status management interface\n */\nexport interface ServerStatus {\n isRunning: boolean;\n port?: number;\n lastUpdated: number;\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionClientTransport\n */\nexport interface ExtensionClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n\n /**\n * Enable automatic reconnection on disconnect\n * Default: true\n */\n autoReconnect?: boolean;\n\n /**\n * Maximum number of reconnection attempts\n * Default: 10\n */\n maxReconnectAttempts?: number;\n\n /**\n * Initial reconnection delay in milliseconds\n * Default: 1000\n */\n reconnectDelay?: number;\n\n /**\n * Maximum reconnection delay in milliseconds\n * Default: 30000\n */\n maxReconnectDelay?: number;\n\n /**\n * Reconnection backoff multiplier\n * Default: 1.5\n */\n reconnectBackoffMultiplier?: number;\n}\n\n/**\n * Client transport for Chrome extensions using Port-based messaging.\n * This transport can be used in content scripts, popup scripts, or sidepanel scripts\n * to connect to a server running in the background service worker.\n * \n * Features automatic reconnection to handle background service worker lifecycle.\n */\nexport class ExtensionClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n private _isReconnecting = false;\n private _reconnectAttempts = 0;\n private _reconnectTimer?: number;\n private _currentReconnectDelay: number;\n private _isStarted = false;\n private _isClosed = false;\n\n // Configuration\n private _autoReconnect: boolean;\n private _maxReconnectAttempts: number;\n private _reconnectDelay: number;\n private _maxReconnectDelay: number;\n private _reconnectBackoffMultiplier: number;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: ExtensionClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n this._autoReconnect = options.autoReconnect ?? true;\n this._maxReconnectAttempts = options.maxReconnectAttempts ?? 10;\n this._reconnectDelay = options.reconnectDelay ?? 1000;\n this._maxReconnectDelay = options.maxReconnectDelay ?? 30000;\n this._reconnectBackoffMultiplier = options.reconnectBackoffMultiplier ?? 1.5;\n this._currentReconnectDelay = this._reconnectDelay;\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._isStarted && this._port) {\n console.warn(\n 'ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n return;\n }\n\n this._isStarted = true;\n this._isClosed = false;\n \n await this._connect();\n }\n\n /**\n * Connects to the extension port\n */\n private async _connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome extension context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, { name: this._portName });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Handle keep-alive messages\n if (message.type === 'keep-alive') {\n // Just acknowledge receipt, no need to propagate\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n \n // Only attempt reconnection if we're started and not manually closed\n if (this._isStarted && !this._isClosed && this._autoReconnect) {\n this._scheduleReconnect();\n } else {\n this.onclose?.();\n }\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n \n // If we're reconnecting and hit an error, schedule another attempt\n if (this._isReconnecting && this._isStarted && !this._isClosed && this._autoReconnect) {\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n \n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n // Connection successful\n this._reconnectAttempts = 0;\n this._currentReconnectDelay = this._reconnectDelay;\n this._isReconnecting = false;\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._isStarted) {\n throw new Error('Transport not started');\n }\n\n if (this._isClosed) {\n throw new Error('Transport is closed');\n }\n\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._isClosed = true;\n this._isStarted = false;\n \n // Cancel any pending reconnection\n if (this._reconnectTimer) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = undefined;\n }\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n\n /**\n * Schedules a reconnection attempt\n */\n private _scheduleReconnect(): void {\n if (this._isReconnecting || this._isClosed || !this._isStarted) {\n return;\n }\n\n this._isReconnecting = true;\n\n // Check if we've exceeded max attempts\n if (this._reconnectAttempts >= this._maxReconnectAttempts) {\n console.error('Maximum reconnection attempts reached');\n this._isReconnecting = false;\n this.onerror?.(new Error('Maximum reconnection attempts reached'));\n this.onclose?.();\n return;\n }\n\n this._reconnectAttempts++;\n \n console.log(\n `Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`\n );\n\n this._reconnectTimer = setTimeout(() => {\n this._attemptReconnect();\n }, this._currentReconnectDelay) as unknown as number;\n\n // Apply exponential backoff\n this._currentReconnectDelay = Math.min(\n this._currentReconnectDelay * this._reconnectBackoffMultiplier,\n this._maxReconnectDelay\n );\n }\n\n /**\n * Attempts to reconnect to the extension\n */\n private async _attemptReconnect(): Promise<void> {\n if (this._isClosed || !this._isStarted) {\n return;\n }\n\n try {\n // First, try to wake up the service worker by sending a message\n if (chrome?.runtime?.sendMessage) {\n try {\n await chrome.runtime.sendMessage({ type: 'ping' });\n } catch (error) {\n // Service worker might not be ready yet\n }\n }\n\n // Attempt to connect\n await this._connect();\n \n console.log('Reconnection successful');\n this._isReconnecting = false;\n } catch (error) {\n console.error('Reconnection failed:', error);\n \n // Schedule another attempt\n this._scheduleReconnect();\n }\n }\n\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionServerTransport\n */\nexport type ExtensionServerTransportOptions = {\n /**\n * Enable keep-alive mechanism to prevent service worker shutdown\n * Default: true\n */\n keepAlive?: boolean;\n\n /**\n * Keep-alive interval in milliseconds\n * Default: 25000 (25 seconds, less than Chrome's 30-second timeout)\n */\n keepAliveInterval?: number;\n};\n\n/**\n * Server transport for Chrome extensions using Port-based messaging.\n * This transport handles a single client connection through Chrome's port messaging API.\n * It should be used in the extension's background service worker.\n *\n * Features:\n * - Keep-alive mechanism to prevent service worker shutdown\n * - Graceful connection state management\n */\nexport class ExtensionServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n private _keepAliveTimer?: number;\n private _options: ExtensionServerTransportOptions;\n private _connectionInfo: {\n connectedAt: number;\n lastMessageAt: number;\n messageCount: number;\n };\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port, options: ExtensionServerTransportOptions = {}) {\n this._port = port;\n this._options = {\n keepAlive: options.keepAlive ?? true,\n keepAliveInterval: options.keepAliveInterval ?? 1000,\n };\n this._connectionInfo = {\n connectedAt: Date.now(),\n lastMessageAt: Date.now(),\n messageCount: 0,\n };\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Update connection info\n this._connectionInfo.lastMessageAt = Date.now();\n this._connectionInfo.messageCount++;\n\n // Handle ping messages for keep-alive\n if (message.type === 'ping') {\n this._port.postMessage({ type: 'pong' });\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n console.log(\n `[ExtensionServerTransport] Client disconnected after ${Date.now() - this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`\n );\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Start keep-alive mechanism if enabled\n if (this._options.keepAlive) {\n this._startKeepAlive();\n }\n\n console.log(\n `[ExtensionServerTransport] Started with client: ${this._port.sender?.id || 'unknown'}`\n );\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n // Check if the error is due to disconnection\n if (chrome.runtime.lastError || !this._port) {\n this._cleanup();\n this.onclose?.();\n throw new Error('Client disconnected');\n }\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n // Stop keep-alive timer\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n\n /**\n * Starts the keep-alive mechanism\n */\n private _startKeepAlive(): void {\n if (this._keepAliveTimer) {\n return;\n }\n\n console.log(\n `[ExtensionServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`\n );\n\n this._keepAliveTimer = setInterval(() => {\n if (!this._port) {\n this._stopKeepAlive();\n return;\n }\n\n try {\n // Send a keep-alive ping\n this._port.postMessage({ type: 'keep-alive', timestamp: Date.now() });\n } catch (error) {\n console.error('[ExtensionServerTransport] Keep-alive failed:', error);\n this._stopKeepAlive();\n }\n }, this._options.keepAliveInterval!) as unknown as number;\n }\n\n /**\n * Stops the keep-alive mechanism\n */\n private _stopKeepAlive(): void {\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n }\n\n /**\n * Gets connection information\n */\n getConnectionInfo() {\n return {\n ...this._connectionInfo,\n uptime: Date.now() - this._connectionInfo.connectedAt,\n isConnected: !!this._port && this._started,\n };\n }\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for UserScriptClientTransport\n */\nexport interface UserScriptClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n\n /**\n * Enable automatic reconnection on disconnect\n * Default: true\n */\n autoReconnect?: boolean;\n\n /**\n * Maximum number of reconnection attempts\n * Default: 10\n */\n maxReconnectAttempts?: number;\n\n /**\n * Initial reconnection delay in milliseconds\n * Default: 1000\n */\n reconnectDelay?: number;\n\n /**\n * Maximum reconnection delay in milliseconds\n * Default: 30000\n */\n maxReconnectDelay?: number;\n\n /**\n * Reconnection backoff multiplier\n * Default: 1.5\n */\n reconnectBackoffMultiplier?: number;\n}\n\n/**\n * Client transport for Chrome MV3 User Scripts using Port-based messaging.\n * This transport can be used inside a User Script context to connect to the\n * extension's background service worker. On the extension side, connections\n * are received via chrome.runtime.onUserScriptConnect.\n *\n * Features automatic reconnection to handle background service worker lifecycle.\n */\nexport class UserScriptClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n private _isReconnecting = false;\n private _reconnectAttempts = 0;\n private _reconnectTimer?: number;\n private _currentReconnectDelay: number;\n private _isStarted = false;\n private _isClosed = false;\n\n // Configuration\n private _autoReconnect: boolean;\n private _maxReconnectAttempts: number;\n private _reconnectDelay: number;\n private _maxReconnectDelay: number;\n private _reconnectBackoffMultiplier: number;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: UserScriptClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n this._autoReconnect = options.autoReconnect ?? true;\n this._maxReconnectAttempts = options.maxReconnectAttempts ?? 10;\n this._reconnectDelay = options.reconnectDelay ?? 1000;\n this._maxReconnectDelay = options.maxReconnectDelay ?? 30000;\n this._reconnectBackoffMultiplier = options.reconnectBackoffMultiplier ?? 1.5;\n this._currentReconnectDelay = this._reconnectDelay;\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._isStarted && this._port) {\n console.warn(\n 'UserScriptClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n return;\n }\n\n this._isStarted = true;\n this._isClosed = false;\n\n await this._connect();\n }\n\n /**\n * Connects to the extension port\n */\n private async _connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome MV3 User Script context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension. From a user script, this triggers onUserScriptConnect on the extension side.\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, { name: this._portName });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Handle keep-alive messages\n if ((message as any).type === 'keep-alive') {\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n\n // Only attempt reconnection if we're started and not manually closed\n if (this._isStarted && !this._isClosed && this._autoReconnect) {\n this._scheduleReconnect();\n } else {\n this.onclose?.();\n }\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n\n // If we're reconnecting and hit an error, schedule another attempt\n if (this._isReconnecting && this._isStarted && !this._isClosed && this._autoReconnect) {\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n // Connection successful\n this._reconnectAttempts = 0;\n this._currentReconnectDelay = this._reconnectDelay;\n this._isReconnecting = false;\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._isStarted) {\n throw new Error('Transport not started');\n }\n\n if (this._isClosed) {\n throw new Error('Transport is closed');\n }\n\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._isClosed = true;\n this._isStarted = false;\n\n // Cancel any pending reconnection\n if (this._reconnectTimer) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = undefined;\n }\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n\n /**\n * Schedules a reconnection attempt\n */\n private _scheduleReconnect(): void {\n if (this._isReconnecting || this._isClosed || !this._isStarted) {\n return;\n }\n\n this._isReconnecting = true;\n\n // Check if we've exceeded max attempts\n if (this._reconnectAttempts >= this._maxReconnectAttempts) {\n console.error('Maximum reconnection attempts reached');\n this._isReconnecting = false;\n this.onerror?.(new Error('Maximum reconnection attempts reached'));\n this.onclose?.();\n return;\n }\n\n this._reconnectAttempts++;\n\n console.log(\n `Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`\n );\n\n this._reconnectTimer = setTimeout(() => {\n this._attemptReconnect();\n }, this._currentReconnectDelay) as unknown as number;\n\n // Apply exponential backoff\n this._currentReconnectDelay = Math.min(\n this._currentReconnectDelay * this._reconnectBackoffMultiplier,\n this._maxReconnectDelay\n );\n }\n\n /**\n * Attempts to reconnect to the extension\n */\n private async _attemptReconnect(): Promise<void> {\n if (this._isClosed || !this._isStarted) {\n return;\n }\n\n try {\n // First, try to wake up the service worker by sending a message\n if (chrome?.runtime?.sendMessage) {\n try {\n await chrome.runtime.sendMessage({ type: 'ping' });\n } catch (error) {\n // Service worker might not be ready yet\n }\n }\n\n // Attempt to connect\n await this._connect();\n\n console.log('Reconnection successful');\n this._isReconnecting = false;\n } catch (error) {\n console.error('Reconnection failed:', error);\n\n // Schedule another attempt\n this._scheduleReconnect();\n }\n }\n}\n\n\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for UserScriptServerTransport\n */\nexport type UserScriptServerTransportOptions = {\n /**\n * Enable keep-alive mechanism to prevent service worker shutdown\n * Default: true\n */\n keepAlive?: boolean;\n\n /**\n * Keep-alive interval in milliseconds\n * Default: 25000 (25 seconds, less than Chrome's 30-second timeout)\n */\n keepAliveInterval?: number;\n};\n\n/**\n * Server transport for Chrome MV3 User Scripts using Port-based messaging.\n * This transport handles a single client connection through Chrome's port\n * messaging API. It should be used in the extension's background service\n * worker. Connections are initiated from User Scripts via chrome.runtime.connect\n * and received here via chrome.runtime.onUserScriptConnect.\n *\n * Features:\n * - Keep-alive mechanism to prevent service worker shutdown\n * - Graceful connection state management\n */\nexport class UserScriptServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n private _keepAliveTimer?: number;\n private _options: UserScriptServerTransportOptions;\n private _connectionInfo: {\n connectedAt: number;\n lastMessageAt: number;\n messageCount: number;\n };\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port, options: UserScriptServerTransportOptions = {}) {\n this._port = port;\n this._options = {\n keepAlive: options.keepAlive ?? true,\n keepAliveInterval: options.keepAliveInterval ?? 1000,\n };\n this._connectionInfo = {\n connectedAt: Date.now(),\n lastMessageAt: Date.now(),\n messageCount: 0,\n };\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'UserScriptServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Update connection info\n this._connectionInfo.lastMessageAt = Date.now();\n this._connectionInfo.messageCount++;\n\n // Handle ping messages for keep-alive\n if ((message as any).type === 'ping') {\n this._port.postMessage({ type: 'pong' });\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n console.log(\n `[UserScriptServerTransport] Client disconnected after ${Date.now() - this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`\n );\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Start keep-alive mechanism if enabled\n if (this._options.keepAlive) {\n this._startKeepAlive();\n }\n\n console.log(\n `[UserScriptServerTransport] Started with client: ${this._port.sender?.id || 'unknown'}`\n );\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n // Check if the error is due to disconnection\n if (chrome.runtime.lastError || !this._port) {\n this._cleanup();\n this.onclose?.();\n throw new Error('Client disconnected');\n }\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n // Stop keep-alive timer\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n\n /**\n * Starts the keep-alive mechanism\n */\n private _startKeepAlive(): void {\n if (this._keepAliveTimer) {\n return;\n }\n\n console.log(\n `[UserScriptServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`\n );\n\n this._keepAliveTimer = setInterval(() => {\n if (!this._port) {\n this._stopKeepAlive();\n return;\n }\n\n try {\n // Send a keep-alive ping\n this._port.postMessage({ type: 'keep-alive', timestamp: Date.now() });\n } catch (error) {\n console.error('[UserScriptServerTransport] Keep-alive failed:', error);\n this._stopKeepAlive();\n }\n }, this._options.keepAliveInterval!) as unknown as number;\n }\n\n /**\n * Stops the keep-alive mechanism\n */\n private _stopKeepAlive(): void {\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n }\n\n /**\n * Gets connection information\n */\n getConnectionInfo() {\n return {\n ...this._connectionInfo,\n uptime: Date.now() - this._connectionInfo.connectedAt,\n isConnected: !!this._port && this._started,\n };\n }\n}\n\n\n","// TabClientTransport.ts\n\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabClientTransportOptions {\n targetOrigin: string; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabClientTransport implements Transport {\n private _started = false;\n private _targetOrigin: string;\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n public readonly serverReadyPromise: Promise<void>;\n private _serverReadyResolve: () => void;\n private _serverReadyReject: (reason: any) => void;\n // private _retryInterval?: NodeJS.Timeout;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabClientTransportOptions) {\n if (!options.targetOrigin) {\n throw new Error('targetOrigin must be explicitly set for security');\n }\n this._targetOrigin = options.targetOrigin;\n this._channelId = options.channelId || 'mcp-default';\n\n // Create the server ready promise in constructor so it's available immediately\n const { promise, resolve, reject } = Promise.withResolvers<void>();\n this.serverReadyPromise = promise;\n this._serverReadyResolve = () => {\n resolve();\n };\n this._serverReadyReject = (reason) => {\n reject(reason);\n };\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (event.origin !== this._targetOrigin) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process server-to-client messages to avoid processing own messages\n if (event.data?.direction !== 'server-to-client') {\n return;\n }\n\n const payload = event.data.payload;\n\n // Handle server ready signal\n if (typeof payload === 'string' && payload === 'mcp-server-ready') {\n this._serverReadyResolve();\n return;\n }\n\n // Handle server stopped signal\n if (typeof payload === 'string' && payload === 'mcp-server-stopped') {\n console.log('[TabClientTransport] Received mcp-server-stopped event, closing transport');\n this.close();\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(payload);\n this._serverReadyResolve();\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(\n new Error(`Invalid message: ${error instanceof Error ? error.message : String(error)}`)\n );\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n\n // Send check-ready to prompt server if already started\n this.sendCheckReady();\n }\n\n private sendCheckReady() {\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server',\n payload: 'mcp-check-ready',\n },\n this._targetOrigin\n );\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n // Await server ready before sending any JSON-RPC message\n await this.serverReadyPromise;\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server', // Mark as client-to-server message\n payload: message,\n },\n this._targetOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n\n // Reject the server ready promise if it hasn't been resolved yet\n this._serverReadyReject(new Error('Transport closed before server ready'));\n\n this._started = false;\n this.onclose?.();\n }\n}\n","// TabServerTransport.ts\n\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabServerTransportOptions {\n allowedOrigins: string[]; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabServerTransport implements Transport {\n private _started = false;\n private _allowedOrigins: string[];\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n private _clientOrigin?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabServerTransportOptions) {\n if (!options.allowedOrigins || options.allowedOrigins.length === 0) {\n throw new Error('At least one allowed origin must be specified');\n }\n this._allowedOrigins = options.allowedOrigins;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (!this._allowedOrigins.includes(event.origin) && !this._allowedOrigins.includes('*')) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process client-to-server messages to avoid processing own messages\n if (event.data?.direction !== 'client-to-server') {\n return;\n }\n\n // Store client origin for responses\n this._clientOrigin = event.origin;\n\n const payload = event.data.payload;\n\n if (typeof payload === 'string' && payload === 'mcp-check-ready') {\n // Respond with server ready\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-ready',\n },\n this._clientOrigin\n );\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(\n new Error(`Invalid message: ${error instanceof Error ? error.message : String(error)}`)\n );\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n\n // Broadcast server ready to all allowed origins\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-ready',\n },\n '*'\n );\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._clientOrigin) {\n throw new Error('No client connected');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client', // Mark as server-to-client message\n payload: message,\n },\n this._clientOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n\n // Post message to notify content scripts that the MCP server has stopped\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-stopped',\n },\n '*'\n );\n\n this.onclose?.();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/browser-types.ts","../src/ExtensionClientTransport.ts","../src/ExtensionServerTransport.ts","../src/TabClientTransport.ts","../src/TabServerTransport.ts","../src/UserScriptClientTransport.ts","../src/UserScriptServerTransport.ts"],"names":["NativeMessageType","NATIVE_HOST","ERROR_MESSAGES","SUCCESS_MESSAGES","STORAGE_KEYS","BACKGROUND_MESSAGE_TYPES","HOST_NAME","ExtensionClientTransport","options","resolve","reject","message","mcpMessage","JSONRPCMessageSchema","error","_options","ExtensionServerTransport","port","TabClientTransport","promise","reason","event","payload","TabServerTransport","UserScriptClientTransport","UserScriptServerTransport"],"mappings":"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","file":"index.js","sourcesContent":["import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Unique identifier for an event in the event store\n */\nexport type EventId = string;\n\n/**\n * Unique identifier for a stream of events\n */\nexport type StreamId = string;\n\n/**\n * Options for connecting to an MCP server\n */\nexport interface MCPConnectOptions {\n /**\n * The event ID to resume from if reconnecting\n */\n resumeFrom?: EventId;\n}\n\n/**\n * Information about the MCP server\n */\nexport interface MCPServerInfo {\n /**\n * Unique identifier for this server instance\n */\n instanceId: string;\n /**\n * Whether the server maintains session state\n */\n stateful: boolean;\n /**\n * Whether the server has event storage enabled\n */\n hasEventStore: boolean;\n}\n\n/**\n * Event storage interface for accessing stored events\n */\nexport interface MCPEventStore {\n /**\n * Get stored events, optionally filtered by client and/or after a specific event\n * @param clientId - Optional client ID to filter events\n * @param afterEventId - Optional event ID to get events after\n * @param limit - Maximum number of events to return (default: 100)\n */\n getEvents(clientId?: string, afterEventId?: EventId, limit?: number): StoredEvent[];\n\n /**\n * Get the ID of the last event, optionally for a specific client\n * @param clientId - Optional client ID to filter by\n */\n getLastEventId(clientId?: string): EventId | null;\n\n /**\n * Clear stored events, optionally for a specific client\n * @param clientId - Optional client ID to clear events for\n */\n clearEvents(clientId?: string): void;\n}\n\n/**\n * The MCP interface exposed on window for browser environments\n */\nexport interface MCPBrowserInterface {\n /**\n * Connect a client to the MCP server\n * @param clientId - Unique identifier for the client\n * @param options - Optional connection options\n * @returns MessagePort for communication or null if connection fails\n */\n connect(clientId: string, options?: MCPConnectOptions): MessagePort | null;\n\n /**\n * Disconnect a client from the MCP server\n * @param clientId - The client ID to disconnect\n */\n disconnect(clientId: string): void;\n\n /**\n * Terminate a client's session and clean up all associated resources\n * @param clientId - The client ID to terminate\n */\n terminateSession?(clientId: string): void;\n\n /**\n * Check if the MCP server is available and running\n */\n isServerAvailable(): boolean;\n\n /**\n * Get information about the MCP server\n */\n getServerInfo(): MCPServerInfo;\n\n /**\n * Event storage access (only available in stateful mode with event store)\n */\n events?: MCPEventStore;\n}\n\n/**\n * Extended Window interface with MCP support\n */\nexport interface MCPWindow extends Window {\n mcp?: MCPBrowserInterface;\n}\n\n/**\n * Message types for internal MCP communication\n */\nexport interface MCPServerInfoMessage {\n type: 'mcp-server-info';\n serverInstanceId: string;\n serverSessionId?: string;\n hasEventStore: boolean;\n streamId: StreamId;\n}\n\nexport interface MCPEventMessage {\n type: 'mcp-event';\n eventId: EventId;\n message: JSONRPCMessage;\n}\n\nexport interface MCPReplayEventMessage {\n type: 'mcp-replay-event';\n eventId: EventId;\n message: JSONRPCMessage;\n}\n\n/**\n * Stored event with metadata for event sourcing\n */\nexport interface StoredEvent {\n eventId: EventId;\n streamId: StreamId;\n message: JSONRPCMessage;\n timestamp: number;\n clientId: string;\n}\n\nexport enum NativeMessageType {\n START = 'start',\n STARTED = 'started',\n STOP = 'stop',\n STOPPED = 'stopped',\n PING = 'ping',\n PONG = 'pong',\n ERROR = 'error',\n LIST_TOOLS = 'list_tools',\n CALL_TOOL = 'call_tool',\n TOOL_LIST_UPDATED = 'tool_list_updated',\n TOOL_LIST_UPDATED_ACK = 'tool_list_updated_ack',\n PROCESS_DATA = 'process_data',\n\n // Additional message types used in Chrome extension\n SERVER_STARTED = 'server_started',\n SERVER_STOPPED = 'server_stopped',\n ERROR_FROM_NATIVE_HOST = 'error_from_native_host',\n CONNECT_NATIVE = 'connectNative',\n PING_NATIVE = 'ping_native',\n DISCONNECT_NATIVE = 'disconnect_native',\n}\n\n/**\n * Chrome Extension Constants\n * Centralized configuration values and magic constants\n */\n\n// Native Host Configuration\nexport const NATIVE_HOST = {\n NAME: 'com.chromemcp.nativehost',\n DEFAULT_PORT: 12306,\n} as const;\n\n// Error Messages\nexport const ERROR_MESSAGES = {\n NATIVE_CONNECTION_FAILED: 'Failed to connect to native host',\n NATIVE_DISCONNECTED: 'Native connection disconnected',\n SERVER_STATUS_LOAD_FAILED: 'Failed to load server status',\n TOOL_EXECUTION_FAILED: 'Tool execution failed',\n SERVER_STATUS_SAVE_FAILED: 'Failed to save server status',\n} as const;\n\n// Success Messages\nexport const SUCCESS_MESSAGES = {\n TOOL_EXECUTED: 'Tool executed successfully',\n CONNECTION_ESTABLISHED: 'Connection established',\n SERVER_STARTED: 'Server started successfully',\n SERVER_STOPPED: 'Server stopped successfully',\n} as const;\n\n// Storage Keys\nexport const STORAGE_KEYS = {\n SERVER_STATUS: 'serverStatus',\n} as const;\n\n// Background script message types\nexport const BACKGROUND_MESSAGE_TYPES = {\n GET_SERVER_STATUS: 'get_server_status',\n REFRESH_SERVER_STATUS: 'refresh_server_status',\n SERVER_STATUS_CHANGED: 'server_status_changed',\n} as const;\n\nexport const HOST_NAME = NATIVE_HOST.NAME;\n\n/**\n * Server status management interface\n */\nexport interface ServerStatus {\n isRunning: boolean;\n port?: number;\n lastUpdated: number;\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionClientTransport\n */\nexport interface ExtensionClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n\n /**\n * Enable automatic reconnection on disconnect\n * Default: true\n */\n autoReconnect?: boolean;\n\n /**\n * Maximum number of reconnection attempts\n * Default: 10\n */\n maxReconnectAttempts?: number;\n\n /**\n * Initial reconnection delay in milliseconds\n * Default: 1000\n */\n reconnectDelay?: number;\n\n /**\n * Maximum reconnection delay in milliseconds\n * Default: 30000\n */\n maxReconnectDelay?: number;\n\n /**\n * Reconnection backoff multiplier\n * Default: 1.5\n */\n reconnectBackoffMultiplier?: number;\n}\n\n/**\n * Client transport for Chrome extensions using Port-based messaging.\n * This transport can be used in content scripts, popup scripts, or sidepanel scripts\n * to connect to a server running in the background service worker.\n *\n * Features automatic reconnection to handle background service worker lifecycle.\n */\nexport class ExtensionClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n private _isReconnecting = false;\n private _reconnectAttempts = 0;\n private _reconnectTimer?: number;\n private _currentReconnectDelay: number;\n private _isStarted = false;\n private _isClosed = false;\n\n // Configuration\n private _autoReconnect: boolean;\n private _maxReconnectAttempts: number;\n private _reconnectDelay: number;\n private _maxReconnectDelay: number;\n private _reconnectBackoffMultiplier: number;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: ExtensionClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n this._autoReconnect = options.autoReconnect ?? true;\n this._maxReconnectAttempts = options.maxReconnectAttempts ?? 10;\n this._reconnectDelay = options.reconnectDelay ?? 1000;\n this._maxReconnectDelay = options.maxReconnectDelay ?? 30000;\n this._reconnectBackoffMultiplier = options.reconnectBackoffMultiplier ?? 1.5;\n this._currentReconnectDelay = this._reconnectDelay;\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._isStarted && this._port) {\n console.warn(\n 'ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n return;\n }\n\n this._isStarted = true;\n this._isClosed = false;\n\n await this._connect();\n }\n\n /**\n * Connects to the extension port\n */\n private async _connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome extension context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, {\n name: this._portName,\n });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Handle keep-alive messages\n if (message.type === 'keep-alive') {\n // Just acknowledge receipt, no need to propagate\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n\n // Only attempt reconnection if we're started and not manually closed\n if (this._isStarted && !this._isClosed && this._autoReconnect) {\n this._scheduleReconnect();\n } else {\n this.onclose?.();\n }\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n\n // If we're reconnecting and hit an error, schedule another attempt\n if (this._isReconnecting && this._isStarted && !this._isClosed && this._autoReconnect) {\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n // Connection successful\n this._reconnectAttempts = 0;\n this._currentReconnectDelay = this._reconnectDelay;\n this._isReconnecting = false;\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._isStarted) {\n throw new Error('Transport not started');\n }\n\n if (this._isClosed) {\n throw new Error('Transport is closed');\n }\n\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._isClosed = true;\n this._isStarted = false;\n\n // Cancel any pending reconnection\n if (this._reconnectTimer) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = undefined;\n }\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n\n /**\n * Schedules a reconnection attempt\n */\n private _scheduleReconnect(): void {\n if (this._isReconnecting || this._isClosed || !this._isStarted) {\n return;\n }\n\n this._isReconnecting = true;\n\n // Check if we've exceeded max attempts\n if (this._reconnectAttempts >= this._maxReconnectAttempts) {\n console.error('Maximum reconnection attempts reached');\n this._isReconnecting = false;\n this.onerror?.(new Error('Maximum reconnection attempts reached'));\n this.onclose?.();\n return;\n }\n\n this._reconnectAttempts++;\n\n console.log(\n `Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`\n );\n\n this._reconnectTimer = setTimeout(() => {\n this._attemptReconnect();\n }, this._currentReconnectDelay) as unknown as number;\n\n // Apply exponential backoff\n this._currentReconnectDelay = Math.min(\n this._currentReconnectDelay * this._reconnectBackoffMultiplier,\n this._maxReconnectDelay\n );\n }\n\n /**\n * Attempts to reconnect to the extension\n */\n private async _attemptReconnect(): Promise<void> {\n if (this._isClosed || !this._isStarted) {\n return;\n }\n\n try {\n // First, try to wake up the service worker by sending a message\n if (chrome?.runtime?.sendMessage) {\n try {\n await chrome.runtime.sendMessage({ type: 'ping' });\n } catch (error) {\n // Service worker might not be ready yet\n }\n }\n\n // Attempt to connect\n await this._connect();\n\n console.log('Reconnection successful');\n this._isReconnecting = false;\n } catch (error) {\n console.error('Reconnection failed:', error);\n\n // Schedule another attempt\n this._scheduleReconnect();\n }\n }\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionServerTransport\n */\nexport type ExtensionServerTransportOptions = {\n /**\n * Enable keep-alive mechanism to prevent service worker shutdown\n * Default: true\n */\n keepAlive?: boolean;\n\n /**\n * Keep-alive interval in milliseconds\n * Default: 25000 (25 seconds, less than Chrome's 30-second timeout)\n */\n keepAliveInterval?: number;\n};\n\n/**\n * Server transport for Chrome extensions using Port-based messaging.\n * This transport handles a single client connection through Chrome's port messaging API.\n * It should be used in the extension's background service worker.\n *\n * Features:\n * - Keep-alive mechanism to prevent service worker shutdown\n * - Graceful connection state management\n */\nexport class ExtensionServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n private _keepAliveTimer?: number;\n private _options: ExtensionServerTransportOptions;\n private _connectionInfo: {\n connectedAt: number;\n lastMessageAt: number;\n messageCount: number;\n };\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port, options: ExtensionServerTransportOptions = {}) {\n this._port = port;\n this._options = {\n keepAlive: options.keepAlive ?? true,\n keepAliveInterval: options.keepAliveInterval ?? 1000,\n };\n this._connectionInfo = {\n connectedAt: Date.now(),\n lastMessageAt: Date.now(),\n messageCount: 0,\n };\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Update connection info\n this._connectionInfo.lastMessageAt = Date.now();\n this._connectionInfo.messageCount++;\n\n // Handle ping messages for keep-alive\n if (message.type === 'ping') {\n this._port.postMessage({ type: 'pong' });\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n console.log(\n `[ExtensionServerTransport] Client disconnected after ${Date.now() - this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`\n );\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Start keep-alive mechanism if enabled\n if (this._options.keepAlive) {\n this._startKeepAlive();\n }\n\n console.log(\n `[ExtensionServerTransport] Started with client: ${this._port.sender?.id || 'unknown'}`\n );\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n // Check if the error is due to disconnection\n if (chrome.runtime.lastError || !this._port) {\n this._cleanup();\n this.onclose?.();\n throw new Error('Client disconnected');\n }\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n // Stop keep-alive timer\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n\n /**\n * Starts the keep-alive mechanism\n */\n private _startKeepAlive(): void {\n if (this._keepAliveTimer) {\n return;\n }\n\n console.log(\n `[ExtensionServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`\n );\n\n this._keepAliveTimer = setInterval(() => {\n if (!this._port) {\n this._stopKeepAlive();\n return;\n }\n\n try {\n // Send a keep-alive ping\n this._port.postMessage({ type: 'keep-alive', timestamp: Date.now() });\n } catch (error) {\n console.error('[ExtensionServerTransport] Keep-alive failed:', error);\n this._stopKeepAlive();\n }\n }, this._options.keepAliveInterval!) as unknown as number;\n }\n\n /**\n * Stops the keep-alive mechanism\n */\n private _stopKeepAlive(): void {\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n }\n\n /**\n * Gets connection information\n */\n getConnectionInfo() {\n return {\n ...this._connectionInfo,\n uptime: Date.now() - this._connectionInfo.connectedAt,\n isConnected: !!this._port && this._started,\n };\n }\n}\n","// TabClientTransport.ts\n\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabClientTransportOptions {\n targetOrigin: string; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabClientTransport implements Transport {\n private _started = false;\n private _targetOrigin: string;\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n public readonly serverReadyPromise: Promise<void>;\n private _serverReadyResolve: () => void;\n private _serverReadyReject: (reason: any) => void;\n // private _retryInterval?: NodeJS.Timeout;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabClientTransportOptions) {\n if (!options.targetOrigin) {\n throw new Error('targetOrigin must be explicitly set for security');\n }\n this._targetOrigin = options.targetOrigin;\n this._channelId = options.channelId || 'mcp-default';\n\n // Create the server ready promise in constructor so it's available immediately\n const { promise, resolve, reject } = Promise.withResolvers<void>();\n this.serverReadyPromise = promise;\n this._serverReadyResolve = () => {\n resolve();\n };\n this._serverReadyReject = (reason) => {\n reject(reason);\n };\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (event.origin !== this._targetOrigin) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process server-to-client messages to avoid processing own messages\n if (event.data?.direction !== 'server-to-client') {\n return;\n }\n\n const payload = event.data.payload;\n\n // Handle server ready signal\n if (typeof payload === 'string' && payload === 'mcp-server-ready') {\n this._serverReadyResolve();\n return;\n }\n\n // Handle server stopped signal\n if (typeof payload === 'string' && payload === 'mcp-server-stopped') {\n console.log('[TabClientTransport] Received mcp-server-stopped event, closing transport');\n this.close();\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(payload);\n this._serverReadyResolve();\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(\n new Error(`Invalid message: ${error instanceof Error ? error.message : String(error)}`)\n );\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n\n // Send check-ready to prompt server if already started\n this.sendCheckReady();\n }\n\n private sendCheckReady() {\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server',\n payload: 'mcp-check-ready',\n },\n this._targetOrigin\n );\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n // Await server ready before sending any JSON-RPC message\n await this.serverReadyPromise;\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server', // Mark as client-to-server message\n payload: message,\n },\n this._targetOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n\n // Reject the server ready promise if it hasn't been resolved yet\n this._serverReadyReject(new Error('Transport closed before server ready'));\n\n this._started = false;\n this.onclose?.();\n }\n}\n","// TabServerTransport.ts\n\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabServerTransportOptions {\n allowedOrigins: string[]; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabServerTransport implements Transport {\n private _started = false;\n private _allowedOrigins: string[];\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n private _clientOrigin?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabServerTransportOptions) {\n if (!options.allowedOrigins || options.allowedOrigins.length === 0) {\n throw new Error('At least one allowed origin must be specified');\n }\n this._allowedOrigins = options.allowedOrigins;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (!this._allowedOrigins.includes(event.origin) && !this._allowedOrigins.includes('*')) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process client-to-server messages to avoid processing own messages\n if (event.data?.direction !== 'client-to-server') {\n return;\n }\n\n // Store client origin for responses\n this._clientOrigin = event.origin;\n\n const payload = event.data.payload;\n\n if (typeof payload === 'string' && payload === 'mcp-check-ready') {\n // Respond with server ready\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-ready',\n },\n this._clientOrigin\n );\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(\n new Error(`Invalid message: ${error instanceof Error ? error.message : String(error)}`)\n );\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n\n // Broadcast server ready to all allowed origins\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-ready',\n },\n '*'\n );\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._clientOrigin) {\n throw new Error('No client connected');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client', // Mark as server-to-client message\n payload: message,\n },\n this._clientOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n\n // Post message to notify content scripts that the MCP server has stopped\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client',\n payload: 'mcp-server-stopped',\n },\n '*'\n );\n\n this.onclose?.();\n }\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for UserScriptClientTransport\n */\nexport interface UserScriptClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n\n /**\n * Enable automatic reconnection on disconnect\n * Default: true\n */\n autoReconnect?: boolean;\n\n /**\n * Maximum number of reconnection attempts\n * Default: 10\n */\n maxReconnectAttempts?: number;\n\n /**\n * Initial reconnection delay in milliseconds\n * Default: 1000\n */\n reconnectDelay?: number;\n\n /**\n * Maximum reconnection delay in milliseconds\n * Default: 30000\n */\n maxReconnectDelay?: number;\n\n /**\n * Reconnection backoff multiplier\n * Default: 1.5\n */\n reconnectBackoffMultiplier?: number;\n}\n\n/**\n * Client transport for Chrome MV3 User Scripts using Port-based messaging.\n * This transport can be used inside a User Script context to connect to the\n * extension's background service worker. On the extension side, connections\n * are received via chrome.runtime.onUserScriptConnect.\n *\n * Features automatic reconnection to handle background service worker lifecycle.\n */\nexport class UserScriptClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n private _isReconnecting = false;\n private _reconnectAttempts = 0;\n private _reconnectTimer?: number;\n private _currentReconnectDelay: number;\n private _isStarted = false;\n private _isClosed = false;\n\n // Configuration\n private _autoReconnect: boolean;\n private _maxReconnectAttempts: number;\n private _reconnectDelay: number;\n private _maxReconnectDelay: number;\n private _reconnectBackoffMultiplier: number;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: UserScriptClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n this._autoReconnect = options.autoReconnect ?? true;\n this._maxReconnectAttempts = options.maxReconnectAttempts ?? 10;\n this._reconnectDelay = options.reconnectDelay ?? 1000;\n this._maxReconnectDelay = options.maxReconnectDelay ?? 30000;\n this._reconnectBackoffMultiplier = options.reconnectBackoffMultiplier ?? 1.5;\n this._currentReconnectDelay = this._reconnectDelay;\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._isStarted && this._port) {\n console.warn(\n 'UserScriptClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n return;\n }\n\n this._isStarted = true;\n this._isClosed = false;\n\n await this._connect();\n }\n\n /**\n * Connects to the extension port\n */\n private async _connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome MV3 User Script context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension. From a user script, this triggers onUserScriptConnect on the extension side.\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, {\n name: this._portName,\n });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Handle keep-alive messages\n if ((message as any).type === 'keep-alive') {\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n\n // Only attempt reconnection if we're started and not manually closed\n if (this._isStarted && !this._isClosed && this._autoReconnect) {\n this._scheduleReconnect();\n } else {\n this.onclose?.();\n }\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n\n // If we're reconnecting and hit an error, schedule another attempt\n if (this._isReconnecting && this._isStarted && !this._isClosed && this._autoReconnect) {\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n // Connection successful\n this._reconnectAttempts = 0;\n this._currentReconnectDelay = this._reconnectDelay;\n this._isReconnecting = false;\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._isStarted) {\n throw new Error('Transport not started');\n }\n\n if (this._isClosed) {\n throw new Error('Transport is closed');\n }\n\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._isClosed = true;\n this._isStarted = false;\n\n // Cancel any pending reconnection\n if (this._reconnectTimer) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = undefined;\n }\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n\n /**\n * Schedules a reconnection attempt\n */\n private _scheduleReconnect(): void {\n if (this._isReconnecting || this._isClosed || !this._isStarted) {\n return;\n }\n\n this._isReconnecting = true;\n\n // Check if we've exceeded max attempts\n if (this._reconnectAttempts >= this._maxReconnectAttempts) {\n console.error('Maximum reconnection attempts reached');\n this._isReconnecting = false;\n this.onerror?.(new Error('Maximum reconnection attempts reached'));\n this.onclose?.();\n return;\n }\n\n this._reconnectAttempts++;\n\n console.log(\n `Scheduling reconnection attempt ${this._reconnectAttempts}/${this._maxReconnectAttempts} in ${this._currentReconnectDelay}ms`\n );\n\n this._reconnectTimer = setTimeout(() => {\n this._attemptReconnect();\n }, this._currentReconnectDelay) as unknown as number;\n\n // Apply exponential backoff\n this._currentReconnectDelay = Math.min(\n this._currentReconnectDelay * this._reconnectBackoffMultiplier,\n this._maxReconnectDelay\n );\n }\n\n /**\n * Attempts to reconnect to the extension\n */\n private async _attemptReconnect(): Promise<void> {\n if (this._isClosed || !this._isStarted) {\n return;\n }\n\n try {\n // First, try to wake up the service worker by sending a message\n if (chrome?.runtime?.sendMessage) {\n try {\n await chrome.runtime.sendMessage({ type: 'ping' });\n } catch (error) {\n // Service worker might not be ready yet\n }\n }\n\n // Attempt to connect\n await this._connect();\n\n console.log('Reconnection successful');\n this._isReconnecting = false;\n } catch (error) {\n console.error('Reconnection failed:', error);\n\n // Schedule another attempt\n this._scheduleReconnect();\n }\n }\n}\n","import type {\n Transport,\n TransportSendOptions,\n} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { type JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for UserScriptServerTransport\n */\nexport type UserScriptServerTransportOptions = {\n /**\n * Enable keep-alive mechanism to prevent service worker shutdown\n * Default: true\n */\n keepAlive?: boolean;\n\n /**\n * Keep-alive interval in milliseconds\n * Default: 25000 (25 seconds, less than Chrome's 30-second timeout)\n */\n keepAliveInterval?: number;\n};\n\n/**\n * Server transport for Chrome MV3 User Scripts using Port-based messaging.\n * This transport handles a single client connection through Chrome's port\n * messaging API. It should be used in the extension's background service\n * worker. Connections are initiated from User Scripts via chrome.runtime.connect\n * and received here via chrome.runtime.onUserScriptConnect.\n *\n * Features:\n * - Keep-alive mechanism to prevent service worker shutdown\n * - Graceful connection state management\n */\nexport class UserScriptServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n private _keepAliveTimer?: number;\n private _options: UserScriptServerTransportOptions;\n private _connectionInfo: {\n connectedAt: number;\n lastMessageAt: number;\n messageCount: number;\n };\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port, options: UserScriptServerTransportOptions = {}) {\n this._port = port;\n this._options = {\n keepAlive: options.keepAlive ?? true,\n keepAliveInterval: options.keepAliveInterval ?? 1000,\n };\n this._connectionInfo = {\n connectedAt: Date.now(),\n lastMessageAt: Date.now(),\n messageCount: 0,\n };\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'UserScriptServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n // Update connection info\n this._connectionInfo.lastMessageAt = Date.now();\n this._connectionInfo.messageCount++;\n\n // Handle ping messages for keep-alive\n if ((message as any).type === 'ping') {\n this._port.postMessage({ type: 'pong' });\n return;\n }\n\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n console.log(\n `[UserScriptServerTransport] Client disconnected after ${Date.now() - this._connectionInfo.connectedAt}ms, processed ${this._connectionInfo.messageCount} messages`\n );\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Start keep-alive mechanism if enabled\n if (this._options.keepAlive) {\n this._startKeepAlive();\n }\n\n console.log(\n `[UserScriptServerTransport] Started with client: ${this._port.sender?.id || 'unknown'}`\n );\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n // Check if the error is due to disconnection\n if (chrome.runtime.lastError || !this._port) {\n this._cleanup();\n this.onclose?.();\n throw new Error('Client disconnected');\n }\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n // Stop keep-alive timer\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n\n /**\n * Starts the keep-alive mechanism\n */\n private _startKeepAlive(): void {\n if (this._keepAliveTimer) {\n return;\n }\n\n console.log(\n `[UserScriptServerTransport] Starting keep-alive with ${this._options.keepAliveInterval}ms interval`\n );\n\n this._keepAliveTimer = setInterval(() => {\n if (!this._port) {\n this._stopKeepAlive();\n return;\n }\n\n try {\n // Send a keep-alive ping\n this._port.postMessage({ type: 'keep-alive', timestamp: Date.now() });\n } catch (error) {\n console.error('[UserScriptServerTransport] Keep-alive failed:', error);\n this._stopKeepAlive();\n }\n }, this._options.keepAliveInterval!) as unknown as number;\n }\n\n /**\n * Stops the keep-alive mechanism\n */\n private _stopKeepAlive(): void {\n if (this._keepAliveTimer) {\n clearInterval(this._keepAliveTimer);\n this._keepAliveTimer = undefined;\n }\n }\n\n /**\n * Gets connection information\n */\n getConnectionInfo() {\n return {\n ...this._connectionInfo,\n uptime: Date.now() - this._connectionInfo.connectedAt,\n isConnected: !!this._port && this._started,\n };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,18 +1,7 @@
1
1
  {
2
2
  "name": "@mcp-b/transports",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Transports for the in browser transport protocols",
5
- "license": "MIT",
6
- "author": "Alex Nahas",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/MiguelsPizza/WebMCP.git",
10
- "directory": "packages/transports"
11
- },
12
- "homepage": "https://github.com/MiguelsPizza/WebMCP#readme",
13
- "bugs": {
14
- "url": "https://github.com/MiguelsPizza/WebMCP/issues"
15
- },
16
5
  "keywords": [
17
6
  "mcp",
18
7
  "model-context-protocol",
@@ -22,35 +11,38 @@
22
11
  "tab-transport",
23
12
  "chrome-extension"
24
13
  ],
14
+ "homepage": "https://github.com/MiguelsPizza/WebMCP#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/MiguelsPizza/WebMCP/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/MiguelsPizza/WebMCP.git",
21
+ "directory": "packages/transports"
22
+ },
23
+ "license": "MIT",
24
+ "author": "Alex Nahas",
25
25
  "type": "module",
26
- "main": "./dist/index.js",
27
26
  "exports": {
28
27
  ".": {
29
- "types": "./dist/index.d.ts",
30
- "require": "./dist/index.js",
31
- "import": "./dist/index.js"
28
+ "import": "./dist/index.js",
29
+ "types": "./dist/index.d.ts"
32
30
  }
33
31
  },
32
+ "main": "./dist/index.js",
33
+ "module": "./dist/index.js",
34
+ "types": "./dist/index.d.ts",
34
35
  "files": [
35
36
  "dist"
36
37
  ],
37
- "scripts": {
38
- "build": "tsup",
39
- "typecheck": "tsc --noEmit",
40
- "clean": "rm -rf dist .turbo",
41
- "prepublishOnly": "pnpm run build",
42
- "prepare:publish": "node ../../scripts/replace-workspace-deps.cjs ./package.json",
43
- "publish:npm": "npm publish --access public --no-git-checks",
44
- "publish:dry": "pnpm publish --access public --no-git-checks --dry-run",
45
- "version:patch": "pnpm version patch --no-git-tag-version",
46
- "version:minor": "pnpm version minor --no-git-tag-version",
47
- "version:major": "pnpm version major --no-git-tag-version",
48
- "lint": "biome lint --write .",
49
- "format": "biome format --write .",
50
- "check": "biome check --write ."
51
- },
52
38
  "dependencies": {
53
- "zod": "^3.25.74"
39
+ "zod": "3.24.1"
40
+ },
41
+ "devDependencies": {
42
+ "@types/chrome": "^0.0.326",
43
+ "@types/node": "^22.15.21",
44
+ "tsup": "^8.4.0",
45
+ "typescript": "^5.8.3"
54
46
  },
55
47
  "peerDependencies": {
56
48
  "@modelcontextprotocol/sdk": "^1.15.0"
@@ -60,14 +52,21 @@
60
52
  "optional": false
61
53
  }
62
54
  },
63
- "devDependencies": {
64
- "@types/chrome": "catalog:",
65
- "@types/node": "catalog:",
66
- "tsup": "catalog:",
67
- "typescript": "catalog:"
68
- },
69
55
  "publishConfig": {
70
56
  "access": "public",
71
57
  "registry": "https://registry.npmjs.org/"
58
+ },
59
+ "scripts": {
60
+ "build": "tsup",
61
+ "check": "biome check --write .",
62
+ "clean": "rm -rf dist .turbo",
63
+ "format": "biome format --write .",
64
+ "lint": "biome lint --write .",
65
+ "publish:dry": "pnpm publish --access public --dry-run",
66
+ "publish:npm": "pnpm publish --access public",
67
+ "typecheck": "tsc --noEmit",
68
+ "version:major": "pnpm version major --no-git-tag-version",
69
+ "version:minor": "pnpm version minor --no-git-tag-version",
70
+ "version:patch": "pnpm version patch --no-git-tag-version"
72
71
  }
73
- }
72
+ }