@withbuddi/buddi 0.1.0-pre.43 → 0.1.0-pre.44
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/examples/agents/agent-father/agent.md +12 -5
- package/examples/agents/concierge/agent.md +11 -3
- package/extension/icons/128.png +0 -0
- package/extension/icons/16.png +0 -0
- package/extension/icons/32.png +0 -0
- package/extension/icons/48.png +0 -0
- package/extension/manifest.json +7 -3
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/access-cmd.d.ts +2 -1
- package/node_modules/@buddi/cli/dist/access-cmd.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/access-cmd.js +40 -7
- package/node_modules/@buddi/cli/dist/access-cmd.js.map +1 -1
- package/node_modules/@buddi/cli/dist/args.d.ts +2 -1
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +7 -3
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +3 -2
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/main.js +1 -1
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/server.js +1 -1
- package/node_modules/@buddi/cli/dist/mcp/server.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js +60 -0
- package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/lock.d.ts +15 -1
- package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/lock.js +15 -1
- package/node_modules/@buddi/core/dist/lock.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +75 -0
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +14 -0
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +2 -2
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts +32 -0
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js +22 -0
- package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/core/migrations/077_lock_background_portrait.sql +5 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts +21 -8
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +201 -36
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +5 -0
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.js +48 -0
- package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts +8 -2
- package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.js +74 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/owner-profile-edit.d.ts +160 -0
- package/node_modules/@buddi/gateway/dist/owner-profile-edit.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/owner-profile-edit.js +296 -0
- package/node_modules/@buddi/gateway/dist/owner-profile-edit.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.js +2 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.d.ts +63 -0
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.js +87 -0
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts +39 -4
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js +99 -11
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/index.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/access/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/access/index.js +1 -0
- package/node_modules/@buddi/gateway/dist/web/access/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +18 -2
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.d.ts +9 -0
- package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.js +60 -0
- package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +13 -1
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.js +84 -23
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/places.d.ts +5 -0
- package/node_modules/@buddi/gateway/dist/web/places.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/places.js +11 -4
- package/node_modules/@buddi/gateway/dist/web/places.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +3 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +33 -45
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/cloudflared.d.ts +121 -0
- package/node_modules/@buddi/install/dist/cloudflared.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/cloudflared.js +451 -0
- package/node_modules/@buddi/install/dist/cloudflared.js.map +1 -0
- package/node_modules/@buddi/install/dist/index.d.ts +1 -0
- package/node_modules/@buddi/install/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/index.js +1 -0
- package/node_modules/@buddi/install/dist/index.js.map +1 -1
- package/node_modules/@buddi/install/dist/supervisor.d.ts +6 -1
- package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/supervisor.js +51 -5
- package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/html.d.ts +16 -0
- package/node_modules/@buddi/tool-email/dist/html.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/html.js +273 -0
- package/node_modules/@buddi/tool-email/dist/html.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +7 -0
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +53 -0
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.js +4 -0
- package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +208 -176
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.d.ts +1 -0
- package/node_modules/@buddi/tool-email/dist/pages/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.js +3 -0
- package/node_modules/@buddi/tool-email/dist/pages/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +14 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.js +267 -58
- package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/thread-tools.d.ts +25 -0
- package/node_modules/@buddi/tool-email/dist/pages/thread-tools.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/pages/thread-tools.js +33 -0
- package/node_modules/@buddi/tool-email/dist/pages/thread-tools.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/ports.d.ts +10 -0
- package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/retention.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/retention.js +1 -0
- package/node_modules/@buddi/tool-email/dist/retention.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +4 -2
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
- package/node_modules/@buddi/tool-email/migrations/028_reading.sql +20 -0
- package/node_modules/@buddi/tool-email/package.json +1 -0
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/entities/LICENSE +11 -0
- package/node_modules/entities/decode.d.ts +1 -0
- package/node_modules/entities/decode.js +3 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.js +511 -0
- package/node_modules/entities/dist/commonjs/decode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.js +73 -0
- package/node_modules/entities/dist/commonjs/encode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.js +121 -0
- package/node_modules/entities/dist/commonjs/escape.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/index.d.ts +96 -0
- package/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/index.js +131 -0
- package/node_modules/entities/dist/commonjs/index.js.map +1 -0
- package/node_modules/entities/dist/commonjs/package.json +3 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/esm/decode.d.ts +209 -0
- package/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode.js +497 -0
- package/node_modules/entities/dist/esm/decode.js.map +1 -0
- package/node_modules/entities/dist/esm/encode.d.ts +22 -0
- package/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/encode.js +69 -0
- package/node_modules/entities/dist/esm/encode.js.map +1 -0
- package/node_modules/entities/dist/esm/escape.d.ts +43 -0
- package/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/escape.js +117 -0
- package/node_modules/entities/dist/esm/escape.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/esm/index.d.ts +96 -0
- package/node_modules/entities/dist/esm/index.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/index.js +107 -0
- package/node_modules/entities/dist/esm/index.js.map +1 -0
- package/node_modules/entities/dist/esm/package.json +3 -0
- package/node_modules/entities/escape.d.ts +1 -0
- package/node_modules/entities/escape.js +3 -0
- package/node_modules/entities/package.json +118 -0
- package/node_modules/entities/readme.md +122 -0
- package/node_modules/entities/src/decode-codepoint.ts +81 -0
- package/node_modules/entities/src/decode.spec.ts +320 -0
- package/node_modules/entities/src/decode.ts +620 -0
- package/node_modules/entities/src/encode.spec.ts +78 -0
- package/node_modules/entities/src/encode.ts +77 -0
- package/node_modules/entities/src/escape.spec.ts +14 -0
- package/node_modules/entities/src/escape.ts +148 -0
- package/node_modules/entities/src/generated/.eslintrc.json +10 -0
- package/node_modules/entities/src/generated/decode-data-html.ts +8 -0
- package/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
- package/node_modules/entities/src/generated/encode-html.ts +17 -0
- package/node_modules/entities/src/index.spec.ts +125 -0
- package/node_modules/entities/src/index.ts +188 -0
- package/node_modules/parse5/LICENSE +19 -0
- package/node_modules/parse5/README.md +38 -0
- package/node_modules/parse5/dist/cjs/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/cjs/common/doctype.js +118 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.js +66 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.js +237 -0
- package/node_modules/parse5/dist/cjs/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/cjs/common/html.js +528 -0
- package/node_modules/parse5/dist/cjs/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/common/token.js +24 -0
- package/node_modules/parse5/dist/cjs/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/cjs/common/unicode.js +70 -0
- package/node_modules/parse5/dist/cjs/index.d.ts +71 -0
- package/node_modules/parse5/dist/cjs/index.js +54 -0
- package/node_modules/parse5/dist/cjs/package.json +1 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.js +114 -0
- package/node_modules/parse5/dist/cjs/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/cjs/parser/index.js +3240 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.js +328 -0
- package/node_modules/parse5/dist/cjs/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/cjs/serializer/index.js +172 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.js +2714 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.js +200 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.js +176 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.js +2 -0
- package/node_modules/parse5/dist/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/common/doctype.js +114 -0
- package/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/common/error-codes.js +63 -0
- package/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/common/foreign-content.js +228 -0
- package/node_modules/parse5/dist/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/common/html.js +523 -0
- package/node_modules/parse5/dist/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/common/token.js +20 -0
- package/node_modules/parse5/dist/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/common/unicode.js +62 -0
- package/node_modules/parse5/dist/index.d.ts +71 -0
- package/node_modules/parse5/dist/index.js +42 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
- package/node_modules/parse5/dist/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/parser/index.js +3245 -0
- package/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
- package/node_modules/parse5/dist/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/serializer/index.js +168 -0
- package/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/tokenizer/index.js +2710 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
- package/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/tree-adapters/default.js +173 -0
- package/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
- package/node_modules/parse5/package.json +50 -0
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/access-cmd.d.ts +2 -1
- package/packages/cli/dist/access-cmd.d.ts.map +1 -1
- package/packages/cli/dist/access-cmd.js +40 -7
- package/packages/cli/dist/access-cmd.js.map +1 -1
- package/packages/cli/dist/args.d.ts +2 -1
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +7 -3
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +3 -2
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/main.js +1 -1
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/mcp/server.js +1 -1
- package/packages/cli/dist/mcp/server.js.map +1 -1
- package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
- package/packages/cli/dist/mcp/tools.js +60 -0
- package/packages/cli/dist/mcp/tools.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/lock.d.ts +15 -1
- package/packages/core/dist/lock.d.ts.map +1 -1
- package/packages/core/dist/lock.js +15 -1
- package/packages/core/dist/lock.js.map +1 -1
- package/packages/core/dist/pages.d.ts +75 -0
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +14 -0
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/plugin/index.d.ts +2 -2
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/plugin/version.d.ts +1 -1
- package/packages/core/dist/plugin/version.js +1 -1
- package/packages/core/dist/provider-accounts.d.ts +32 -0
- package/packages/core/dist/provider-accounts.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.js +22 -0
- package/packages/core/dist/provider-accounts.js.map +1 -1
- package/packages/core/migrations/077_lock_background_portrait.sql +5 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/owner-tools.d.ts +21 -8
- package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.js +201 -36
- package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
- package/packages/gateway/dist/evals/golden.d.ts +5 -0
- package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
- package/packages/gateway/dist/evals/golden.js +48 -0
- package/packages/gateway/dist/evals/golden.js.map +1 -1
- package/packages/gateway/dist/mcp/requests.d.ts +8 -2
- package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/packages/gateway/dist/mcp/requests.js +74 -1
- package/packages/gateway/dist/mcp/requests.js.map +1 -1
- package/packages/gateway/dist/owner-profile-edit.d.ts +160 -0
- package/packages/gateway/dist/owner-profile-edit.d.ts.map +1 -0
- package/packages/gateway/dist/owner-profile-edit.js +296 -0
- package/packages/gateway/dist/owner-profile-edit.js.map +1 -0
- package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/packages/gateway/dist/provider-accounts.js +2 -1
- package/packages/gateway/dist/provider-accounts.js.map +1 -1
- package/packages/gateway/dist/web/access/cloudflare-connector.d.ts +63 -0
- package/packages/gateway/dist/web/access/cloudflare-connector.d.ts.map +1 -0
- package/packages/gateway/dist/web/access/cloudflare-connector.js +87 -0
- package/packages/gateway/dist/web/access/cloudflare-connector.js.map +1 -0
- package/packages/gateway/dist/web/access/cloudflare-setup.d.ts +39 -4
- package/packages/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -1
- package/packages/gateway/dist/web/access/cloudflare-setup.js +99 -11
- package/packages/gateway/dist/web/access/cloudflare-setup.js.map +1 -1
- package/packages/gateway/dist/web/access/cloudflare-token.js +1 -1
- package/packages/gateway/dist/web/access/cloudflare-token.js.map +1 -1
- package/packages/gateway/dist/web/access/index.d.ts +1 -0
- package/packages/gateway/dist/web/access/index.d.ts.map +1 -1
- package/packages/gateway/dist/web/access/index.js +1 -0
- package/packages/gateway/dist/web/access/index.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +18 -2
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/lock-backgrounds.d.ts +9 -0
- package/packages/gateway/dist/web/lock-backgrounds.d.ts.map +1 -0
- package/packages/gateway/dist/web/lock-backgrounds.js +60 -0
- package/packages/gateway/dist/web/lock-backgrounds.js.map +1 -0
- package/packages/gateway/dist/web/lock.d.ts +13 -1
- package/packages/gateway/dist/web/lock.d.ts.map +1 -1
- package/packages/gateway/dist/web/lock.js +84 -23
- package/packages/gateway/dist/web/lock.js.map +1 -1
- package/packages/gateway/dist/web/places.d.ts +5 -0
- package/packages/gateway/dist/web/places.d.ts.map +1 -1
- package/packages/gateway/dist/web/places.js +11 -4
- package/packages/gateway/dist/web/places.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts +3 -0
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +33 -45
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/cloudflared.d.ts +121 -0
- package/packages/install/dist/cloudflared.d.ts.map +1 -0
- package/packages/install/dist/cloudflared.js +451 -0
- package/packages/install/dist/cloudflared.js.map +1 -0
- package/packages/install/dist/index.d.ts +1 -0
- package/packages/install/dist/index.d.ts.map +1 -1
- package/packages/install/dist/index.js +1 -0
- package/packages/install/dist/index.js.map +1 -1
- package/packages/install/dist/supervisor.d.ts +6 -1
- package/packages/install/dist/supervisor.d.ts.map +1 -1
- package/packages/install/dist/supervisor.js +51 -5
- package/packages/install/dist/supervisor.js.map +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/html.d.ts +16 -0
- package/packages/tools/email/dist/html.d.ts.map +1 -0
- package/packages/tools/email/dist/html.js +273 -0
- package/packages/tools/email/dist/html.js.map +1 -0
- package/packages/tools/email/dist/imap/imapflow-client.d.ts +7 -0
- package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.js +53 -0
- package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
- package/packages/tools/email/dist/mail.d.ts.map +1 -1
- package/packages/tools/email/dist/mail.js +4 -0
- package/packages/tools/email/dist/mail.js.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.js +208 -176
- package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
- package/packages/tools/email/dist/pages/index.d.ts +1 -0
- package/packages/tools/email/dist/pages/index.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/index.js +3 -0
- package/packages/tools/email/dist/pages/index.js.map +1 -1
- package/packages/tools/email/dist/pages/queries.d.ts +14 -1
- package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/queries.js +267 -58
- package/packages/tools/email/dist/pages/queries.js.map +1 -1
- package/packages/tools/email/dist/pages/thread-tools.d.ts +25 -0
- package/packages/tools/email/dist/pages/thread-tools.d.ts.map +1 -0
- package/packages/tools/email/dist/pages/thread-tools.js +33 -0
- package/packages/tools/email/dist/pages/thread-tools.js.map +1 -0
- package/packages/tools/email/dist/ports.d.ts +10 -0
- package/packages/tools/email/dist/ports.d.ts.map +1 -1
- package/packages/tools/email/dist/ports.js.map +1 -1
- package/packages/tools/email/dist/retention.d.ts.map +1 -1
- package/packages/tools/email/dist/retention.js +1 -0
- package/packages/tools/email/dist/retention.js.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.js +4 -2
- package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
- package/packages/tools/email/migrations/028_reading.sql +20 -0
- package/packages/tools/email/package.json +1 -0
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/apple-touch-icon.png +0 -0
- package/packages/web/dist/assets/index-C1sRt7zd.js +149 -0
- package/packages/web/dist/assets/index-CdZpSJ4_.css +1 -0
- package/packages/web/dist/assets/{lottie_light-CHWAvOde.js → lottie_light-DnYl9yaP.js} +1 -1
- package/packages/web/dist/backgrounds/golden-streak-portrait.jpg +0 -0
- package/packages/web/dist/backgrounds/golden-streak-thumb.jpg +0 -0
- package/packages/web/dist/backgrounds/manifest.json +18 -0
- package/packages/web/dist/backgrounds/peoria-autumn-waterfront-thumb.jpg +0 -0
- package/packages/web/dist/backgrounds/peoria-autumn-waterfront.jpg +0 -0
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/favicon-16.png +0 -0
- package/packages/web/dist/favicon-32.png +0 -0
- package/packages/web/dist/favicon.ico +0 -0
- package/packages/web/dist/icon-192.png +0 -0
- package/packages/web/dist/icon-512.png +0 -0
- package/packages/web/dist/index.html +6 -3
- package/packages/web/dist/manifest.webmanifest +1 -1
- package/packages/web/dist/maskable-512.png +0 -0
- package/packages/web/dist/precache.json +7 -5
- package/packages/web/dist/assets/index-BB52n8Fa.js +0 -146
- package/packages/web/dist/assets/index-CY4cPN4I.css +0 -1
- package/packages/web/dist/favicon.png +0 -0
- package/packages/web/dist/icon-maskable-512.png +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { ChildProcess, SpawnOptions } from 'node:child_process';
|
|
2
|
+
/** The gateway's backoff: 2 s doubling to 30 s. */
|
|
3
|
+
export declare function connectorRestartDelay(failures: number): number;
|
|
4
|
+
/**
|
|
5
|
+
* How long until a failed read of the plan or the token is tried again: 30 s
|
|
6
|
+
* doubling to 10 min. A read that throws is the database or the keychain not
|
|
7
|
+
* answering for now, not a missing setup, so the connector keeps asking.
|
|
8
|
+
*/
|
|
9
|
+
export declare function connectorReadRetryDelay(failures: number): number;
|
|
10
|
+
export type ConnectorState = 'running' | 'starting' | 'stopped' | 'missing-binary' | 'system-daemon';
|
|
11
|
+
/** What `GET /connector` answers, and what the setup step shows. */
|
|
12
|
+
export interface ConnectorStatus {
|
|
13
|
+
state: ConnectorState;
|
|
14
|
+
/** buddi runs its own, or the owner chose the system service. */
|
|
15
|
+
mode: 'buddi' | 'system';
|
|
16
|
+
/** The system service's file, when one is installed. */
|
|
17
|
+
systemDaemon: string | null;
|
|
18
|
+
/** The cloudflared buddi runs, and where it came from. */
|
|
19
|
+
binary: {
|
|
20
|
+
path: string;
|
|
21
|
+
source: 'path' | 'downloaded';
|
|
22
|
+
} | null;
|
|
23
|
+
/** One sentence: why it is missing, stopped or retrying. */
|
|
24
|
+
detail?: string | undefined;
|
|
25
|
+
/** The Homebrew line, on a Mac with brew, when the binary is missing. */
|
|
26
|
+
brew?: string | undefined;
|
|
27
|
+
pid: number | null;
|
|
28
|
+
/** Where cloudflared's own lines go. */
|
|
29
|
+
log: string;
|
|
30
|
+
}
|
|
31
|
+
/** What the database says the connector should be. */
|
|
32
|
+
export interface ConnectorPlan {
|
|
33
|
+
wanted: boolean;
|
|
34
|
+
mode: 'buddi' | 'system';
|
|
35
|
+
/** The tunnel the token belongs to: a change restarts the child. */
|
|
36
|
+
tunnelId: string | null;
|
|
37
|
+
}
|
|
38
|
+
/** The line cloudflared prints once an edge connection is up. */
|
|
39
|
+
export declare const REGISTERED_LINE: RegExp;
|
|
40
|
+
/** The system service `sudo cloudflared service install` leaves behind. */
|
|
41
|
+
export declare function systemDaemonFiles(platform: NodeJS.Platform): string[];
|
|
42
|
+
export declare function findSystemDaemon(platform: NodeJS.Platform, exists?: (file: string) => boolean): string | null;
|
|
43
|
+
/** The line that removes it, said beside the reason. */
|
|
44
|
+
export declare const SYSTEM_DAEMON_UNINSTALL = "sudo cloudflared service uninstall";
|
|
45
|
+
/** Where a downloaded cloudflared lives. buddi writes nothing else there. */
|
|
46
|
+
export declare function downloadedBinary(data: string, platform?: NodeJS.Platform): string;
|
|
47
|
+
/** A program on PATH (and the extra prefixes), or null. */
|
|
48
|
+
export declare function findOnPath(name: string, pathEnv: string | undefined, platform: NodeJS.Platform, exists?: (file: string) => boolean): string | null;
|
|
49
|
+
/** The release asset for this platform, or null when Cloudflare publishes none. */
|
|
50
|
+
export declare function releaseAsset(platform: NodeJS.Platform, arch: string): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* The checksums in a release's notes: Cloudflare ends every release body with
|
|
53
|
+
* a "SHA256 Checksums" block of `<asset>: <hex>` lines.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseChecksums(body: string): Map<string, string>;
|
|
56
|
+
export declare const sha256: (bytes: Uint8Array) => string;
|
|
57
|
+
export declare class VerifyError extends Error {
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The bytes checked against the published checksum, and against GitHub's own
|
|
61
|
+
* digest for the asset when it gives one. Throws unless every published value
|
|
62
|
+
* matches; a release without a checksum for the asset is refused, not trusted.
|
|
63
|
+
*/
|
|
64
|
+
export declare function verifyAsset(bytes: Uint8Array, asset: string, published: Map<string, string>, githubDigest?: string | null): string;
|
|
65
|
+
export declare const RELEASE_URL = "https://api.github.com/repos/cloudflare/cloudflared/releases/latest";
|
|
66
|
+
export type Fetch = (url: string, init?: RequestInit) => Promise<Response>;
|
|
67
|
+
/**
|
|
68
|
+
* Download, verify and install cloudflared into `<data>/bin/`, mode 0700.
|
|
69
|
+
* Returns the path. Nothing touches the final path before the bytes check.
|
|
70
|
+
*/
|
|
71
|
+
export declare function downloadCloudflared(options: {
|
|
72
|
+
data: string;
|
|
73
|
+
platform: NodeJS.Platform;
|
|
74
|
+
arch: string;
|
|
75
|
+
fetch?: Fetch;
|
|
76
|
+
/** Unpack a .tgz into a directory (tests pass their own). */
|
|
77
|
+
untar?: (archive: string, into: string) => Promise<void>;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
path: string;
|
|
80
|
+
version: string;
|
|
81
|
+
sha256: string;
|
|
82
|
+
}>;
|
|
83
|
+
/** Remove what buddi downloaded. Only `<data>/bin/cloudflared` and its note: buddi wrote nothing else. */
|
|
84
|
+
export declare function removeDownloaded(data: string, platform?: NodeJS.Platform): Promise<boolean>;
|
|
85
|
+
/** The environment the child gets: enough to run, nothing of buddi's. */
|
|
86
|
+
export declare function connectorEnv(env: NodeJS.ProcessEnv, token: string): NodeJS.ProcessEnv;
|
|
87
|
+
/** How long a failed download is not tried again: the setup polls every few seconds. */
|
|
88
|
+
export declare const DOWNLOAD_RETRY_MS: number;
|
|
89
|
+
export interface ConnectorDeps {
|
|
90
|
+
data: string;
|
|
91
|
+
platform?: NodeJS.Platform;
|
|
92
|
+
arch?: string;
|
|
93
|
+
env?: NodeJS.ProcessEnv;
|
|
94
|
+
/** What the database says, read at every sync. */
|
|
95
|
+
plan: () => Promise<ConnectorPlan>;
|
|
96
|
+
/** The connector token, from the owner secret store, read at spawn only. */
|
|
97
|
+
token: () => Promise<string | null>;
|
|
98
|
+
exists?: (file: string) => boolean;
|
|
99
|
+
download?: () => Promise<{
|
|
100
|
+
path: string;
|
|
101
|
+
}>;
|
|
102
|
+
spawn?: (command: string, args: string[], options: SpawnOptions) => ChildProcess;
|
|
103
|
+
log?: (line: string) => void;
|
|
104
|
+
now?: () => number;
|
|
105
|
+
restartDelay?: (failures: number) => number;
|
|
106
|
+
/** How long until a failed plan or token read is tried again. */
|
|
107
|
+
readRetryDelay?: (failures: number) => number;
|
|
108
|
+
}
|
|
109
|
+
export interface Connector {
|
|
110
|
+
/** Read the plan and make the child match it. Serialized; never throws. */
|
|
111
|
+
sync(): Promise<ConnectorStatus>;
|
|
112
|
+
status(): ConnectorStatus;
|
|
113
|
+
/** Stop the child and delete the binary when buddi downloaded it. */
|
|
114
|
+
remove(): Promise<ConnectorStatus & {
|
|
115
|
+
removedBinary: boolean;
|
|
116
|
+
}>;
|
|
117
|
+
/** Stop for good: the supervisor is leaving. */
|
|
118
|
+
close(): Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
export declare function createConnector(deps: ConnectorDeps): Connector;
|
|
121
|
+
//# sourceMappingURL=cloudflared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflared.d.ts","sourceRoot":"","sources":["../src/cloudflared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare's connector, run by the supervisor (slate R73vdX4bOO).
|
|
3
|
+
*
|
|
4
|
+
* When Cloudflare Access is on and "Set it up for me" made a tunnel, the
|
|
5
|
+
* supervisor runs `cloudflared tunnel --no-autoupdate run` as a managed child,
|
|
6
|
+
* user-level, like Postgres: restarted with backoff, stopped with buddi. The
|
|
7
|
+
* tunnel's connector token is read from the owner secret store at each spawn
|
|
8
|
+
* and handed to the child in `TUNNEL_TOKEN` — never in argv, where `ps` shows
|
|
9
|
+
* it, and never in a log line.
|
|
10
|
+
*
|
|
11
|
+
* The binary: `cloudflared` on PATH (and Homebrew's prefixes, which a launchd
|
|
12
|
+
* PATH leaves out), else the one buddi downloaded into `<data>/bin/`, else
|
|
13
|
+
* the official release for this platform from GitHub, checked against the
|
|
14
|
+
* SHA-256 Cloudflare publishes with the release before anything runs.
|
|
15
|
+
*
|
|
16
|
+
* A system service installed by `sudo cloudflared service install` (an
|
|
17
|
+
* earlier setup's) is detected and never fought: two connectors for one
|
|
18
|
+
* tunnel take turns dropping each other's connections. The status says
|
|
19
|
+
* `system-daemon`, and buddi starts nothing until it is uninstalled or the
|
|
20
|
+
* owner chose to use it instead.
|
|
21
|
+
*
|
|
22
|
+
* Nothing here imports a `@buddi/*` value: the supervisor hands in what it
|
|
23
|
+
* reads from the database (see the note at the top of supervisor.ts).
|
|
24
|
+
*/
|
|
25
|
+
import { spawn as nodeSpawn, execFile } from 'node:child_process';
|
|
26
|
+
import { createHash } from 'node:crypto';
|
|
27
|
+
import { createWriteStream, existsSync, mkdirSync } from 'node:fs';
|
|
28
|
+
import { chmod, mkdir, mkdtemp, rename, rm, writeFile } from 'node:fs/promises';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import { stopChild } from './environment.js';
|
|
31
|
+
/** The gateway's backoff: 2 s doubling to 30 s. */
|
|
32
|
+
export function connectorRestartDelay(failures) { return Math.min(30_000, 2000 * 2 ** Math.min(failures, 4)); }
|
|
33
|
+
/**
|
|
34
|
+
* How long until a failed read of the plan or the token is tried again: 30 s
|
|
35
|
+
* doubling to 10 min. A read that throws is the database or the keychain not
|
|
36
|
+
* answering for now, not a missing setup, so the connector keeps asking.
|
|
37
|
+
*/
|
|
38
|
+
export function connectorReadRetryDelay(failures) { return Math.min(10 * 60_000, 30_000 * 2 ** Math.min(failures, 5)); }
|
|
39
|
+
/** The line cloudflared prints once an edge connection is up. */
|
|
40
|
+
export const REGISTERED_LINE = /Registered tunnel connection/;
|
|
41
|
+
/** The system service `sudo cloudflared service install` leaves behind. */
|
|
42
|
+
export function systemDaemonFiles(platform) {
|
|
43
|
+
if (platform === 'darwin')
|
|
44
|
+
return ['/Library/LaunchDaemons/com.cloudflare.cloudflared.plist'];
|
|
45
|
+
if (platform === 'linux')
|
|
46
|
+
return ['/etc/systemd/system/cloudflared.service', '/etc/init.d/cloudflared'];
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
export function findSystemDaemon(platform, exists = existsSync) {
|
|
50
|
+
return systemDaemonFiles(platform).find(file => exists(file)) ?? null;
|
|
51
|
+
}
|
|
52
|
+
/** The line that removes it, said beside the reason. */
|
|
53
|
+
export const SYSTEM_DAEMON_UNINSTALL = 'sudo cloudflared service uninstall';
|
|
54
|
+
/** Where a downloaded cloudflared lives. buddi writes nothing else there. */
|
|
55
|
+
export function downloadedBinary(data, platform = process.platform) {
|
|
56
|
+
return path.join(data, 'bin', platform === 'win32' ? 'cloudflared.exe' : 'cloudflared');
|
|
57
|
+
}
|
|
58
|
+
/** Directories a launchd or systemd PATH leaves out but cloudflared is usually in. */
|
|
59
|
+
function extraDirs(platform) {
|
|
60
|
+
if (platform === 'darwin')
|
|
61
|
+
return ['/opt/homebrew/bin', '/usr/local/bin'];
|
|
62
|
+
if (platform === 'linux')
|
|
63
|
+
return ['/usr/local/bin', '/usr/bin'];
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
/** A program on PATH (and the extra prefixes), or null. */
|
|
67
|
+
export function findOnPath(name, pathEnv, platform, exists = existsSync) {
|
|
68
|
+
const dirs = [...(pathEnv ?? '').split(path.delimiter), ...extraDirs(platform)].filter(dir => dir !== '' && path.isAbsolute(dir));
|
|
69
|
+
const file = platform === 'win32' ? `${name}.exe` : name;
|
|
70
|
+
for (const dir of dirs) {
|
|
71
|
+
const candidate = path.join(dir, file);
|
|
72
|
+
if (exists(candidate))
|
|
73
|
+
return candidate;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
/** The release asset for this platform, or null when Cloudflare publishes none. */
|
|
78
|
+
export function releaseAsset(platform, arch) {
|
|
79
|
+
if (platform === 'darwin' && (arch === 'arm64' || arch === 'x64'))
|
|
80
|
+
return `cloudflared-darwin-${arch === 'x64' ? 'amd64' : 'arm64'}.tgz`;
|
|
81
|
+
if (platform === 'linux') {
|
|
82
|
+
const name = { x64: 'amd64', arm64: 'arm64', arm: 'arm', ia32: '386' }[arch];
|
|
83
|
+
return name ? `cloudflared-linux-${name}` : null;
|
|
84
|
+
}
|
|
85
|
+
if (platform === 'win32' && arch === 'x64')
|
|
86
|
+
return 'cloudflared-windows-amd64.exe';
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The checksums in a release's notes: Cloudflare ends every release body with
|
|
91
|
+
* a "SHA256 Checksums" block of `<asset>: <hex>` lines.
|
|
92
|
+
*/
|
|
93
|
+
export function parseChecksums(body) {
|
|
94
|
+
const out = new Map();
|
|
95
|
+
for (const line of body.split(/\r?\n/)) {
|
|
96
|
+
const match = /^\s*([A-Za-z0-9._-]+):\s*([0-9a-fA-F]{64})\s*$/.exec(line);
|
|
97
|
+
if (match)
|
|
98
|
+
out.set(match[1], match[2].toLowerCase());
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
export const sha256 = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
103
|
+
export class VerifyError extends Error {
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The bytes checked against the published checksum, and against GitHub's own
|
|
107
|
+
* digest for the asset when it gives one. Throws unless every published value
|
|
108
|
+
* matches; a release without a checksum for the asset is refused, not trusted.
|
|
109
|
+
*/
|
|
110
|
+
export function verifyAsset(bytes, asset, published, githubDigest) {
|
|
111
|
+
const expected = published.get(asset);
|
|
112
|
+
if (!expected)
|
|
113
|
+
throw new VerifyError(`Cloudflare’s release lists no checksum for ${asset}, so buddi won’t run it.`);
|
|
114
|
+
const actual = sha256(bytes);
|
|
115
|
+
if (actual !== expected)
|
|
116
|
+
throw new VerifyError(`The downloaded ${asset} doesn’t match the checksum Cloudflare published, so buddi deleted it.`);
|
|
117
|
+
if (githubDigest) {
|
|
118
|
+
const digest = githubDigest.replace(/^sha256:/i, '').toLowerCase();
|
|
119
|
+
if (digest !== actual)
|
|
120
|
+
throw new VerifyError(`The downloaded ${asset} doesn’t match GitHub’s digest for it, so buddi deleted it.`);
|
|
121
|
+
}
|
|
122
|
+
return actual;
|
|
123
|
+
}
|
|
124
|
+
export const RELEASE_URL = 'https://api.github.com/repos/cloudflare/cloudflared/releases/latest';
|
|
125
|
+
/**
|
|
126
|
+
* Download, verify and install cloudflared into `<data>/bin/`, mode 0700.
|
|
127
|
+
* Returns the path. Nothing touches the final path before the bytes check.
|
|
128
|
+
*/
|
|
129
|
+
export async function downloadCloudflared(options) {
|
|
130
|
+
const { data, platform, arch } = options;
|
|
131
|
+
const request = options.fetch ?? fetch;
|
|
132
|
+
const asset = releaseAsset(platform, arch);
|
|
133
|
+
if (!asset)
|
|
134
|
+
throw new VerifyError(`Cloudflare publishes no cloudflared for ${platform} on ${arch}.`);
|
|
135
|
+
const headers = { 'User-Agent': 'buddi', Accept: 'application/vnd.github+json' };
|
|
136
|
+
const meta = await request(RELEASE_URL, { headers, signal: AbortSignal.timeout(20_000) });
|
|
137
|
+
if (!meta.ok)
|
|
138
|
+
throw new VerifyError(`GitHub answered ${meta.status} for cloudflared’s latest release.`);
|
|
139
|
+
const release = await meta.json();
|
|
140
|
+
const entry = (release.assets ?? []).find(a => a.name === asset);
|
|
141
|
+
const url = entry?.browser_download_url ?? '';
|
|
142
|
+
if (!entry || !/^https:\/\/github\.com\/cloudflare\/cloudflared\/releases\/download\//.test(url)) {
|
|
143
|
+
throw new VerifyError(`cloudflared’s latest release has no ${asset}.`);
|
|
144
|
+
}
|
|
145
|
+
const published = parseChecksums(release.body ?? '');
|
|
146
|
+
const response = await request(url, { headers: { 'User-Agent': 'buddi' }, signal: AbortSignal.timeout(180_000) });
|
|
147
|
+
if (!response.ok)
|
|
148
|
+
throw new VerifyError(`GitHub answered ${response.status} for ${asset}.`);
|
|
149
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
150
|
+
const digest = verifyAsset(bytes, asset, published, entry.digest ?? null);
|
|
151
|
+
const bin = path.dirname(downloadedBinary(data, platform));
|
|
152
|
+
await mkdir(bin, { recursive: true, mode: 0o700 });
|
|
153
|
+
const staging = await mkdtemp(path.join(bin, '.download-'));
|
|
154
|
+
try {
|
|
155
|
+
let unpacked;
|
|
156
|
+
if (asset.endsWith('.tgz')) {
|
|
157
|
+
const archive = path.join(staging, asset);
|
|
158
|
+
await writeFile(archive, bytes, { mode: 0o600 });
|
|
159
|
+
await (options.untar ?? untar)(archive, staging);
|
|
160
|
+
unpacked = path.join(staging, 'cloudflared');
|
|
161
|
+
if (!existsSync(unpacked))
|
|
162
|
+
throw new VerifyError(`${asset} held no cloudflared.`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
unpacked = path.join(staging, 'cloudflared');
|
|
166
|
+
await writeFile(unpacked, bytes, { mode: 0o700 });
|
|
167
|
+
}
|
|
168
|
+
await chmod(unpacked, 0o700);
|
|
169
|
+
const target = downloadedBinary(data, platform);
|
|
170
|
+
await rename(unpacked, target);
|
|
171
|
+
const version = typeof release.tag_name === 'string' ? release.tag_name : '';
|
|
172
|
+
await writeFile(path.join(bin, 'cloudflared.json'), `${JSON.stringify({ version, asset, sha256: digest, at: new Date().toISOString() }, null, 2)}\n`, { mode: 0o600 });
|
|
173
|
+
return { path: target, version, sha256: digest };
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
await rm(staging, { recursive: true, force: true });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function untar(archive, into) {
|
|
180
|
+
return new Promise((resolve, reject) => {
|
|
181
|
+
execFile('tar', ['-xzf', archive, '-C', into, 'cloudflared'], { timeout: 60_000 }, error => (error ? reject(new VerifyError(`${path.basename(archive)} could not be unpacked.`)) : resolve()));
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/** Remove what buddi downloaded. Only `<data>/bin/cloudflared` and its note: buddi wrote nothing else. */
|
|
185
|
+
export async function removeDownloaded(data, platform = process.platform) {
|
|
186
|
+
const file = downloadedBinary(data, platform);
|
|
187
|
+
const had = existsSync(file);
|
|
188
|
+
await rm(file, { force: true });
|
|
189
|
+
await rm(path.join(path.dirname(file), 'cloudflared.json'), { force: true });
|
|
190
|
+
return had;
|
|
191
|
+
}
|
|
192
|
+
/** The environment the child gets: enough to run, nothing of buddi's. */
|
|
193
|
+
export function connectorEnv(env, token) {
|
|
194
|
+
const keep = ['PATH', 'HOME', 'TMPDIR', 'LANG', 'LC_ALL', 'SYSTEMROOT', 'USERPROFILE', 'HTTPS_PROXY', 'HTTP_PROXY', 'NO_PROXY'];
|
|
195
|
+
const out = {};
|
|
196
|
+
for (const key of keep)
|
|
197
|
+
if (typeof env[key] === 'string')
|
|
198
|
+
out[key] = env[key];
|
|
199
|
+
out.TUNNEL_TOKEN = token;
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
/** How long a failed download is not tried again: the setup polls every few seconds. */
|
|
203
|
+
export const DOWNLOAD_RETRY_MS = 10 * 60_000;
|
|
204
|
+
export function createConnector(deps) {
|
|
205
|
+
const platform = deps.platform ?? process.platform;
|
|
206
|
+
const arch = deps.arch ?? process.arch;
|
|
207
|
+
const env = deps.env ?? process.env;
|
|
208
|
+
const exists = deps.exists ?? existsSync;
|
|
209
|
+
const say = deps.log ?? ((line) => console.error(line));
|
|
210
|
+
const now = deps.now ?? Date.now;
|
|
211
|
+
const delay = deps.restartDelay ?? connectorRestartDelay;
|
|
212
|
+
const readDelay = deps.readRetryDelay ?? connectorReadRetryDelay;
|
|
213
|
+
const spawn = deps.spawn ?? nodeSpawn;
|
|
214
|
+
const logFile = path.join(deps.data, 'logs', 'cloudflared.log');
|
|
215
|
+
const download = deps.download ?? (() => downloadCloudflared({ data: deps.data, platform, arch }));
|
|
216
|
+
let child;
|
|
217
|
+
let state = 'stopped';
|
|
218
|
+
let mode = 'buddi';
|
|
219
|
+
let detail;
|
|
220
|
+
let brew;
|
|
221
|
+
let binary = null;
|
|
222
|
+
let desired = false, closed = false;
|
|
223
|
+
let tunnelId = null;
|
|
224
|
+
let failures = 0, retry, retryPending = false;
|
|
225
|
+
/** Failed plan or token reads in a row, and the sync that tries again. */
|
|
226
|
+
let readFailures = 0, readRetry, readFailedThisPass = false;
|
|
227
|
+
let downloadFailedAt = 0, downloadError;
|
|
228
|
+
let log;
|
|
229
|
+
let chain = Promise.resolve();
|
|
230
|
+
const alive = () => !!child && child.exitCode === null && child.signalCode === null;
|
|
231
|
+
const status = () => ({
|
|
232
|
+
state, mode, systemDaemon: findSystemDaemon(platform, exists), binary,
|
|
233
|
+
...(detail === undefined ? {} : { detail }), ...(brew === undefined ? {} : { brew }),
|
|
234
|
+
pid: alive() ? child.pid ?? null : null, log: logFile,
|
|
235
|
+
});
|
|
236
|
+
const serial = (work) => {
|
|
237
|
+
const run = chain.catch(() => { }).then(work);
|
|
238
|
+
chain = run;
|
|
239
|
+
return run;
|
|
240
|
+
};
|
|
241
|
+
async function stop() {
|
|
242
|
+
desired = false;
|
|
243
|
+
clearTimeout(retry);
|
|
244
|
+
retryPending = false;
|
|
245
|
+
if (alive())
|
|
246
|
+
say(`supervisor: stopping cloudflared (pid ${child.pid}).`);
|
|
247
|
+
await stopChild(child, 'SIGTERM', 10_000);
|
|
248
|
+
child = undefined;
|
|
249
|
+
}
|
|
250
|
+
async function resolveBinary() {
|
|
251
|
+
const onPath = findOnPath('cloudflared', env.PATH, platform, exists);
|
|
252
|
+
if (onPath)
|
|
253
|
+
return { path: onPath, source: 'path' };
|
|
254
|
+
const mine = downloadedBinary(deps.data, platform);
|
|
255
|
+
if (exists(mine))
|
|
256
|
+
return { path: mine, source: 'downloaded' };
|
|
257
|
+
if (downloadFailedAt && now() - downloadFailedAt < DOWNLOAD_RETRY_MS)
|
|
258
|
+
return null;
|
|
259
|
+
state = 'starting';
|
|
260
|
+
detail = 'Downloading cloudflared from Cloudflare’s releases on GitHub.';
|
|
261
|
+
say('supervisor: downloading cloudflared from github.com/cloudflare/cloudflared.');
|
|
262
|
+
try {
|
|
263
|
+
const got = await download();
|
|
264
|
+
downloadFailedAt = 0;
|
|
265
|
+
downloadError = undefined;
|
|
266
|
+
say(`supervisor: cloudflared downloaded and verified (${got.path}).`);
|
|
267
|
+
return { path: got.path, source: 'downloaded' };
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
downloadFailedAt = now();
|
|
271
|
+
downloadError = error instanceof VerifyError ? error.message : 'cloudflared could not be downloaded from GitHub.';
|
|
272
|
+
say(`supervisor: ${downloadError}`);
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function start(bin, token) {
|
|
277
|
+
if (closed || !desired || alive())
|
|
278
|
+
return;
|
|
279
|
+
if (!log) {
|
|
280
|
+
try {
|
|
281
|
+
mkdirSync(path.dirname(logFile), { recursive: true, mode: 0o700 });
|
|
282
|
+
// Created 0700 like every directory buddi makes in its data dir.
|
|
283
|
+
log = createWriteStream(logFile, { flags: 'a', mode: 0o600 });
|
|
284
|
+
log.on('error', () => { log = undefined; });
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
log = undefined;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const started = now();
|
|
291
|
+
state = 'starting';
|
|
292
|
+
detail = undefined;
|
|
293
|
+
const proc = spawn(bin, ['tunnel', '--no-autoupdate', 'run'], { env: connectorEnv(env, token), stdio: ['ignore', 'pipe', 'pipe'] });
|
|
294
|
+
child = proc;
|
|
295
|
+
say(`supervisor: cloudflared started (pid ${proc.pid}).`);
|
|
296
|
+
const watch = (chunk) => {
|
|
297
|
+
log?.write(chunk);
|
|
298
|
+
if (child === proc && state !== 'running' && REGISTERED_LINE.test(chunk.toString('utf8'))) {
|
|
299
|
+
state = 'running';
|
|
300
|
+
say('supervisor: cloudflared connected to Cloudflare.');
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
proc.stdout?.on('data', watch);
|
|
304
|
+
proc.stderr?.on('data', watch);
|
|
305
|
+
proc.once('error', () => {
|
|
306
|
+
if (child !== proc)
|
|
307
|
+
return;
|
|
308
|
+
detail = 'cloudflared could not be started.';
|
|
309
|
+
});
|
|
310
|
+
proc.once('close', (code, signal) => {
|
|
311
|
+
if (child !== proc)
|
|
312
|
+
return;
|
|
313
|
+
child = undefined;
|
|
314
|
+
if (now() - started >= 60_000)
|
|
315
|
+
failures = 0;
|
|
316
|
+
if (!desired || closed) {
|
|
317
|
+
state = 'stopped';
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const wait = delay(failures++);
|
|
321
|
+
state = 'starting';
|
|
322
|
+
detail = `cloudflared stopped (${signal ?? `exit ${code}`}); starting it again in ${Math.round(wait / 1000)} s. Its lines are in logs/cloudflared.log.`;
|
|
323
|
+
say(`supervisor: cloudflared exited (${signal ?? `code ${code}`}); restarting in ${wait} ms.`);
|
|
324
|
+
clearTimeout(retry);
|
|
325
|
+
retryPending = true;
|
|
326
|
+
retry = setTimeout(() => { retryPending = false; void serial(() => spawnWithToken(bin)); }, wait);
|
|
327
|
+
retry.unref?.();
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* A read that threw: say so, and sync again after the read backoff. The
|
|
332
|
+
* state is `starting` — buddi still means to run the connector — never the
|
|
333
|
+
* `stopped` a truly missing token is.
|
|
334
|
+
*/
|
|
335
|
+
function readFailed(what) {
|
|
336
|
+
readFailedThisPass = true;
|
|
337
|
+
const wait = readDelay(readFailures++);
|
|
338
|
+
state = 'starting';
|
|
339
|
+
detail = `buddi could not read ${what}; trying again in ${wait >= 60_000 ? `${Math.round(wait / 60_000)} min` : `${Math.round(wait / 1000)} s`}.`;
|
|
340
|
+
say(`supervisor: could not read ${what}; syncing the connector again in ${wait} ms.`);
|
|
341
|
+
clearTimeout(readRetry);
|
|
342
|
+
readRetry = setTimeout(() => { readRetry = undefined; void serial(reconcile); }, wait);
|
|
343
|
+
readRetry.unref?.();
|
|
344
|
+
}
|
|
345
|
+
async function spawnWithToken(bin) {
|
|
346
|
+
if (closed || !desired || alive())
|
|
347
|
+
return;
|
|
348
|
+
let token;
|
|
349
|
+
try {
|
|
350
|
+
token = await deps.token();
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
readFailed('the connector token');
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
if (!token) {
|
|
357
|
+
// Truly none in the vault: nothing to retry until the owner sets it up.
|
|
358
|
+
state = 'stopped';
|
|
359
|
+
detail = 'buddi has no connector token for the tunnel. Set it up again.';
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
start(bin, token);
|
|
363
|
+
}
|
|
364
|
+
async function reconcile() {
|
|
365
|
+
if (closed)
|
|
366
|
+
return status();
|
|
367
|
+
clearTimeout(readRetry);
|
|
368
|
+
readRetry = undefined;
|
|
369
|
+
readFailedThisPass = false;
|
|
370
|
+
const result = await reconcileOnce();
|
|
371
|
+
// A pass that read everything it needed ends the read backoff.
|
|
372
|
+
if (!readFailedThisPass)
|
|
373
|
+
readFailures = 0;
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
async function reconcileOnce() {
|
|
377
|
+
let plan;
|
|
378
|
+
try {
|
|
379
|
+
plan = await deps.plan();
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
readFailed('its Cloudflare setting');
|
|
383
|
+
return status();
|
|
384
|
+
}
|
|
385
|
+
mode = plan.mode;
|
|
386
|
+
brew = undefined;
|
|
387
|
+
if (!plan.wanted) {
|
|
388
|
+
await stop();
|
|
389
|
+
state = 'stopped';
|
|
390
|
+
detail = undefined;
|
|
391
|
+
tunnelId = null;
|
|
392
|
+
return status();
|
|
393
|
+
}
|
|
394
|
+
const daemon = findSystemDaemon(platform, exists);
|
|
395
|
+
if (plan.mode === 'system' || daemon) {
|
|
396
|
+
await stop();
|
|
397
|
+
state = 'system-daemon';
|
|
398
|
+
detail = plan.mode === 'system'
|
|
399
|
+
? (daemon ? 'Cloudflare’s system service runs the connector; buddi starts none of its own.' : 'You chose Cloudflare’s system service, but none is installed.')
|
|
400
|
+
: 'Cloudflare’s system service is installed. Two connectors for one tunnel fight, so buddi starts none of its own.';
|
|
401
|
+
return status();
|
|
402
|
+
}
|
|
403
|
+
if (alive() && tunnelId === plan.tunnelId)
|
|
404
|
+
return status();
|
|
405
|
+
if (retryPending && tunnelId === plan.tunnelId) {
|
|
406
|
+
desired = true;
|
|
407
|
+
return status();
|
|
408
|
+
}
|
|
409
|
+
if (alive() || retryPending)
|
|
410
|
+
await stop();
|
|
411
|
+
desired = true;
|
|
412
|
+
tunnelId = plan.tunnelId;
|
|
413
|
+
binary = await resolveBinary();
|
|
414
|
+
if (!binary) {
|
|
415
|
+
state = 'missing-binary';
|
|
416
|
+
detail = downloadError ?? 'cloudflared isn’t on this computer.';
|
|
417
|
+
if (platform === 'darwin' && findOnPath('brew', env.PATH, platform, exists))
|
|
418
|
+
brew = 'brew install cloudflared';
|
|
419
|
+
return status();
|
|
420
|
+
}
|
|
421
|
+
failures = 0;
|
|
422
|
+
await spawnWithToken(binary.path);
|
|
423
|
+
return status();
|
|
424
|
+
}
|
|
425
|
+
return {
|
|
426
|
+
sync: () => serial(reconcile),
|
|
427
|
+
status,
|
|
428
|
+
remove: () => serial(async () => {
|
|
429
|
+
await stop();
|
|
430
|
+
state = 'stopped';
|
|
431
|
+
detail = undefined;
|
|
432
|
+
tunnelId = null;
|
|
433
|
+
const removedBinary = await removeDownloaded(deps.data, platform);
|
|
434
|
+
if (binary?.source === 'downloaded')
|
|
435
|
+
binary = null;
|
|
436
|
+
downloadFailedAt = 0;
|
|
437
|
+
downloadError = undefined;
|
|
438
|
+
return { ...status(), removedBinary };
|
|
439
|
+
}),
|
|
440
|
+
close: () => serial(async () => {
|
|
441
|
+
closed = true;
|
|
442
|
+
clearTimeout(readRetry);
|
|
443
|
+
readRetry = undefined;
|
|
444
|
+
await stop();
|
|
445
|
+
state = 'stopped';
|
|
446
|
+
log?.end();
|
|
447
|
+
log = undefined;
|
|
448
|
+
}),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
//# sourceMappingURL=cloudflared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflared.js","sourceRoot":"","sources":["../src/cloudflared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,2DAA2D;AAC3D,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,2DAA2D;AAC3D,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|