retoolrpc 0.1.0
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/.prettierignore +2 -0
- package/.prettierrc +6 -0
- package/.yarn/cache/@babel-code-frame-npm-7.12.13-fb5ba5a992-d0491bb59f.zip +0 -0
- package/.yarn/cache/@babel-compat-data-npm-7.14.4-2d95ac42cf-38f6388bb5.zip +0 -0
- package/.yarn/cache/@babel-core-npm-7.14.3-9181aae4d9-b91ed6adc7.zip +0 -0
- package/.yarn/cache/@babel-generator-npm-7.14.3-3bb0a82750-2c104bbe53.zip +0 -0
- package/.yarn/cache/@babel-helper-compilation-targets-npm-7.14.4-cf321ee7be-0a6a3215d6.zip +0 -0
- package/.yarn/cache/@babel-helper-function-name-npm-7.14.2-52642340ac-70365d36ad.zip +0 -0
- package/.yarn/cache/@babel-helper-get-function-arity-npm-7.12.13-7d8bcf34b7-847ef9f4d4.zip +0 -0
- package/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.13.12-0092ecd45c-76a5ad6ae6.zip +0 -0
- package/.yarn/cache/@babel-helper-module-imports-npm-7.13.12-6f45f76073-9abb5e3acb.zip +0 -0
- package/.yarn/cache/@babel-helper-module-transforms-npm-7.14.2-81e49440fe-cb6930cb45.zip +0 -0
- package/.yarn/cache/@babel-helper-optimise-call-expression-npm-7.12.13-52e64fc268-9925679d67.zip +0 -0
- package/.yarn/cache/@babel-helper-plugin-utils-npm-7.13.0-5266a343c1-24f7a44e94.zip +0 -0
- package/.yarn/cache/@babel-helper-replace-supers-npm-7.14.4-cc29bf55f9-017dc1af59.zip +0 -0
- package/.yarn/cache/@babel-helper-simple-access-npm-7.13.12-038331126e-afd0a8d1c7.zip +0 -0
- package/.yarn/cache/@babel-helper-split-export-declaration-npm-7.12.13-bb30c88575-adc8954a0b.zip +0 -0
- package/.yarn/cache/@babel-helper-string-parser-npm-7.19.4-0db110dc3a-b2f8a3920b.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.14.0-88c0d4b395-6276d57677.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.19.1-d84f19e1dc-0eca5e86a7.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-option-npm-7.12.17-098722d989-940e7b78dc.zip +0 -0
- package/.yarn/cache/@babel-helpers-npm-7.14.0-37cb1e5143-276716f77c.zip +0 -0
- package/.yarn/cache/@babel-highlight-npm-7.14.0-54986133d5-5aae226c0d.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.14.4-c39adeee10-b96ba7f3e9.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-7ed1c1d9b9.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-24f34b196d.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-166ac1125d.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-bf5aea1f31.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-87aca49189.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-01ec5547bd.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-fddcf581a5.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-910d90e72b.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-eef94d53a1.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-top-level-await-npm-7.12.13-6ac12f7c33-74cf8c8b87.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-typescript-npm-7.12.13-17e8d888d4-3bd08315a8.zip +0 -0
- package/.yarn/cache/@babel-template-npm-7.12.13-069e9c8875-e037731631.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.14.2-5dffae5dce-054d5e4442.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.14.4-e879643fd2-52ae21c824.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.21.4-ee756f419d-587bc55a91.zip +0 -0
- package/.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-850f930553.zip +0 -0
- package/.yarn/cache/@gar-promisify-npm-1.1.3-ac1a325862-4059f790e2.zip +0 -0
- package/.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-d578da5e2e.zip +0 -0
- package/.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-5282759d96.zip +0 -0
- package/.yarn/cache/@jest-console-npm-27.0.2-3f0dc49490-71b812a49c.zip +0 -0
- package/.yarn/cache/@jest-core-npm-27.0.4-ffa396ed48-5b550925c0.zip +0 -0
- package/.yarn/cache/@jest-environment-npm-27.0.3-02985c658c-53914eb4b0.zip +0 -0
- package/.yarn/cache/@jest-fake-timers-npm-27.0.3-5d90fdb420-8994639f84.zip +0 -0
- package/.yarn/cache/@jest-globals-npm-27.0.3-cac79a361c-d1aa1e3b74.zip +0 -0
- package/.yarn/cache/@jest-reporters-npm-27.0.4-13f50d68df-2ffa36ae5a.zip +0 -0
- package/.yarn/cache/@jest-source-map-npm-27.0.1-b1fbee8f81-32a83be9c8.zip +0 -0
- package/.yarn/cache/@jest-test-result-npm-27.0.2-4add172036-2522808ff4.zip +0 -0
- package/.yarn/cache/@jest-test-sequencer-npm-27.0.4-438adff1f0-f1f1296158.zip +0 -0
- package/.yarn/cache/@jest-transform-npm-27.0.2-6839550ac0-a232fcaa16.zip +0 -0
- package/.yarn/cache/@jest-types-npm-27.0.2-11212898dc-22cbc02d5d.zip +0 -0
- package/.yarn/cache/@npmcli-fs-npm-2.1.2-08d434e77b-405074965e.zip +0 -0
- package/.yarn/cache/@npmcli-move-file-npm-2.0.1-b593d8f741-52dc02259d.zip +0 -0
- package/.yarn/cache/@rollup-plugin-typescript-npm-8.2.0-33c0b5170f-d50240a9b3.zip +0 -0
- package/.yarn/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-8be16e2786.zip +0 -0
- package/.yarn/cache/@sinonjs-commons-npm-1.8.3-30cf78d93f-6159726db5.zip +0 -0
- package/.yarn/cache/@sinonjs-fake-timers-npm-7.1.2-2a6b119ac7-c84773d797.zip +0 -0
- package/.yarn/cache/@tootallnate-once-npm-1.1.2-0517220057-e1fb1bbbc1.zip +0 -0
- package/.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip +0 -0
- package/.yarn/cache/@tsconfig-node10-npm-1.0.7-06be8de131-54c3d90a93.zip +0 -0
- package/.yarn/cache/@tsconfig-node12-npm-1.0.7-3bbdd844d7-e58704bf51.zip +0 -0
- package/.yarn/cache/@tsconfig-node14-npm-1.0.0-cf320499dc-a6e564b91e.zip +0 -0
- package/.yarn/cache/@tsconfig-node16-npm-1.0.1-0fb4cd7d44-5fdfd91e48.zip +0 -0
- package/.yarn/cache/@types-babel__core-npm-7.1.14-a93ee22530-de4a1a4905.zip +0 -0
- package/.yarn/cache/@types-babel__generator-npm-7.6.2-13c77730f7-b7764309e5.zip +0 -0
- package/.yarn/cache/@types-babel__template-npm-7.4.0-e906ff43dc-5262dc75e6.zip +0 -0
- package/.yarn/cache/@types-babel__traverse-npm-7.11.1-b9c64a2aa7-7bcf7fd0c8.zip +0 -0
- package/.yarn/cache/@types-body-parser-npm-1.19.2-f845b7b538-e17840c7d7.zip +0 -0
- package/.yarn/cache/@types-connect-npm-3.4.35-7337eee0a3-fe81351470.zip +0 -0
- package/.yarn/cache/@types-cors-npm-2.8.13-4b8ac1068f-7ef197ea19.zip +0 -0
- package/.yarn/cache/@types-estree-npm-0.0.39-f898500e96-412fb5b986.zip +0 -0
- package/.yarn/cache/@types-express-npm-4.17.17-46fe8173db-0196dacc27.zip +0 -0
- package/.yarn/cache/@types-express-serve-static-core-npm-4.17.33-0366bd5654-dce580d16b.zip +0 -0
- package/.yarn/cache/@types-graceful-fs-npm-4.1.5-91d62e1050-d076bb61f4.zip +0 -0
- package/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.3-67a37eb00a-0650cba4be.zip +0 -0
- package/.yarn/cache/@types-istanbul-lib-report-npm-3.0.0-50de3e6b3b-656398b62d.zip +0 -0
- package/.yarn/cache/@types-istanbul-reports-npm-3.0.1-770e825002-f1ad54bc68.zip +0 -0
- package/.yarn/cache/@types-mime-npm-3.0.1-dec03536dc-4040fac73f.zip +0 -0
- package/.yarn/cache/@types-node-npm-15.12.1-149da5b459-a8eb7b5bbd.zip +0 -0
- package/.yarn/cache/@types-prettier-npm-2.2.3-6036e6d94a-78f1d731f9.zip +0 -0
- package/.yarn/cache/@types-qs-npm-6.9.7-4a3e6ca0d0-7fd6f9c250.zip +0 -0
- package/.yarn/cache/@types-range-parser-npm-1.2.4-23d797fbde-b7c0dfd508.zip +0 -0
- package/.yarn/cache/@types-serve-static-npm-1.15.1-27b3deb72c-2e078bdc1e.zip +0 -0
- package/.yarn/cache/@types-stack-utils-npm-2.0.0-8ded8461bc-b3fbae25b0.zip +0 -0
- package/.yarn/cache/@types-yargs-npm-16.0.3-b6f52df1c2-0968b06d2f.zip +0 -0
- package/.yarn/cache/@types-yargs-parser-npm-20.2.0-4ca5b35c4e-54cf3f8d2c.zip +0 -0
- package/.yarn/cache/abab-npm-2.0.5-ae8d5b629e-0ec951b46d.zip +0 -0
- package/.yarn/cache/abbrev-npm-1.1.1-3659247eab-a4a97ec07d.zip +0 -0
- package/.yarn/cache/accepts-npm-1.3.8-9a812371c9-50c43d32e7.zip +0 -0
- package/.yarn/cache/acorn-globals-npm-6.0.0-acbec28ad5-72d95e5b5e.zip +0 -0
- package/.yarn/cache/acorn-npm-7.4.1-f450b4646c-1860f23c21.zip +0 -0
- package/.yarn/cache/acorn-npm-8.3.0-cf97a23822-9217542382.zip +0 -0
- package/.yarn/cache/acorn-walk-npm-7.2.0-5f8b515308-9252158a79.zip +0 -0
- package/.yarn/cache/agent-base-npm-6.0.2-428f325a93-f52b6872cc.zip +0 -0
- package/.yarn/cache/agentkeepalive-npm-4.3.0-ac3d8e6807-982453aa44.zip +0 -0
- package/.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip +0 -0
- package/.yarn/cache/ansi-escapes-npm-4.3.2-3ad173702f-93111c4218.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-5.0.0-9c076068d9-b1bb4e992a.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip +0 -0
- package/.yarn/cache/anymatch-npm-3.1.2-1d5471acfa-985163db22.zip +0 -0
- package/.yarn/cache/aproba-npm-2.0.0-8716bcfde6-5615cadcfb.zip +0 -0
- package/.yarn/cache/are-we-there-yet-npm-3.0.1-3395b1512f-52590c2486.zip +0 -0
- package/.yarn/cache/arg-npm-4.1.3-1748b966a8-544af8dd3f.zip +0 -0
- package/.yarn/cache/argparse-npm-1.0.10-528934e59d-7ca6e45583.zip +0 -0
- package/.yarn/cache/array-flatten-npm-1.1.1-9d94ad5f1d-a9925bf351.zip +0 -0
- package/.yarn/cache/asynckit-npm-0.4.0-c718858525-7b78c451df.zip +0 -0
- package/.yarn/cache/babel-jest-npm-27.0.2-760775130b-ff2bd3c6bf.zip +0 -0
- package/.yarn/cache/babel-plugin-istanbul-npm-6.0.0-2c177ffcc3-bc586cf088.zip +0 -0
- package/.yarn/cache/babel-plugin-jest-hoist-npm-27.0.1-a04d3c5add-488905f748.zip +0 -0
- package/.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-d118c27424.zip +0 -0
- package/.yarn/cache/babel-preset-jest-npm-27.0.1-9446ad2444-141c11dce5.zip +0 -0
- package/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip +0 -0
- package/.yarn/cache/body-parser-npm-1.20.1-759fd14db9-f1050dbac3.zip +0 -0
- package/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip +0 -0
- package/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip +0 -0
- package/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip +0 -0
- package/.yarn/cache/browser-process-hrtime-npm-1.0.0-db700805c2-e30f868cdb.zip +0 -0
- package/.yarn/cache/browserslist-npm-4.16.6-a20cef1ca7-3dffc86892.zip +0 -0
- package/.yarn/cache/bs-logger-npm-0.2.6-7670f88b66-d34bdaf68c.zip +0 -0
- package/.yarn/cache/bser-npm-2.1.1-cc902055ce-9ba4dc58ce.zip +0 -0
- package/.yarn/cache/buffer-from-npm-1.1.1-22917b8ed8-ccc53b6973.zip +0 -0
- package/.yarn/cache/bytes-npm-3.1.2-28b8643004-e4bcd3948d.zip +0 -0
- package/.yarn/cache/cacache-npm-16.1.3-4e2088ed0d-d91409e6e5.zip +0 -0
- package/.yarn/cache/call-bind-npm-1.0.2-c957124861-f8e31de9d1.zip +0 -0
- package/.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip +0 -0
- package/.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip +0 -0
- package/.yarn/cache/camelcase-npm-6.2.0-69f8c130ac-8335cfd0ec.zip +0 -0
- package/.yarn/cache/caniuse-lite-npm-1.0.30001235-56c9d2c91e-4703293ada.zip +0 -0
- package/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip +0 -0
- package/.yarn/cache/chalk-npm-4.1.1-f1ce6bae57-036e973e66.zip +0 -0
- package/.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-b563e4b603.zip +0 -0
- package/.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip +0 -0
- package/.yarn/cache/ci-info-npm-3.2.0-90f4cf0660-c68995a94e.zip +0 -0
- package/.yarn/cache/cjs-module-lexer-npm-1.2.1-11eb01eaf4-9e9905e3f5.zip +0 -0
- package/.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip +0 -0
- package/.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip +0 -0
- package/.yarn/cache/co-npm-4.6.0-03f2d1feb6-5210d92230.zip +0 -0
- package/.yarn/cache/collect-v8-coverage-npm-1.0.1-39dec86bad-4efe0a1fcc.zip +0 -0
- package/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip +0 -0
- package/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip +0 -0
- package/.yarn/cache/color-support-npm-1.1.3-3be5c53455-9b73568176.zip +0 -0
- package/.yarn/cache/colorette-npm-1.2.2-da75bd0b32-69fec14dda.zip +0 -0
- package/.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-49fa4aeb49.zip +0 -0
- package/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip +0 -0
- package/.yarn/cache/console-control-strings-npm-1.1.0-e3160e5275-8755d76787.zip +0 -0
- package/.yarn/cache/content-disposition-npm-0.5.4-2d93678616-afb9d545e2.zip +0 -0
- package/.yarn/cache/content-type-npm-1.0.4-3b1a5ca16b-3d93585fda.zip +0 -0
- package/.yarn/cache/convert-source-map-npm-1.7.0-f9727424f7-bcd2e3ea7d.zip +0 -0
- package/.yarn/cache/cookie-npm-0.5.0-e2d58a161a-1f4bd2ca57.zip +0 -0
- package/.yarn/cache/cookie-signature-npm-1.0.6-93f325f7f0-f4e1b0a98a.zip +0 -0
- package/.yarn/cache/cors-npm-2.8.5-c9935a2d12-ced838404c.zip +0 -0
- package/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip +0 -0
- package/.yarn/cache/cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip +0 -0
- package/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip +0 -0
- package/.yarn/cache/cssom-npm-0.3.8-a9291d36ff-24beb3087c.zip +0 -0
- package/.yarn/cache/cssom-npm-0.4.4-818f01a6e3-e3bc1076e7.zip +0 -0
- package/.yarn/cache/cssstyle-npm-2.3.0-b5d112c450-5f05e6fd2e.zip +0 -0
- package/.yarn/cache/data-urls-npm-2.0.0-2b80c32b82-97caf828aa.zip +0 -0
- package/.yarn/cache/debug-npm-2.6.9-7d4cb597dc-d2f51589ca.zip +0 -0
- package/.yarn/cache/debug-npm-4.3.1-22e08d605e-2c3352e37d.zip +0 -0
- package/.yarn/cache/debug-npm-4.3.4-4513954577-3dbad3f94e.zip +0 -0
- package/.yarn/cache/decimal.js-npm-10.2.1-6eff4c0574-d2421adf20.zip +0 -0
- package/.yarn/cache/dedent-npm-0.7.0-2dbb45a4c5-87de191050.zip +0 -0
- package/.yarn/cache/deep-is-npm-0.1.3-0941784645-c15b04c384.zip +0 -0
- package/.yarn/cache/deepmerge-npm-4.2.2-112165ced2-a8c43a1ed8.zip +0 -0
- package/.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip +0 -0
- package/.yarn/cache/delegates-npm-1.0.0-9b1942d75f-a51744d9b5.zip +0 -0
- package/.yarn/cache/depd-npm-2.0.0-b6c51a4b43-abbe19c768.zip +0 -0
- package/.yarn/cache/destroy-npm-1.2.0-6a511802e2-0acb300b74.zip +0 -0
- package/.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip +0 -0
- package/.yarn/cache/diff-npm-4.0.2-73133c7102-f2c09b0ce4.zip +0 -0
- package/.yarn/cache/diff-sequences-npm-27.0.1-65556e2cb7-013d0f5461.zip +0 -0
- package/.yarn/cache/domexception-npm-2.0.1-81b20626ae-d638e9cb05.zip +0 -0
- package/.yarn/cache/ee-first-npm-1.1.1-33f8535b39-1b4cac778d.zip +0 -0
- package/.yarn/cache/electron-to-chromium-npm-1.3.749-321060d087-f15c327e86.zip +0 -0
- package/.yarn/cache/emittery-npm-0.8.1-9771f0f260-2457e8c7b0.zip +0 -0
- package/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip +0 -0
- package/.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-e50e3d508c.zip +0 -0
- package/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip +0 -0
- package/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip +0 -0
- package/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip +0 -0
- package/.yarn/cache/escalade-npm-3.1.1-e02da076aa-a3e2a99f07.zip +0 -0
- package/.yarn/cache/escape-html-npm-1.0.3-376c22ee74-6213ca9ae0.zip +0 -0
- package/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip +0 -0
- package/.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip +0 -0
- package/.yarn/cache/escodegen-npm-2.0.0-6450b02925-5aa6b2966f.zip +0 -0
- package/.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip +0 -0
- package/.yarn/cache/estraverse-npm-5.2.0-b2e8e36350-ec11b70d94.zip +0 -0
- package/.yarn/cache/estree-walker-npm-1.0.1-e916593b23-7e70da5396.zip +0 -0
- package/.yarn/cache/esutils-npm-2.0.3-f865beafd5-22b5b08f74.zip +0 -0
- package/.yarn/cache/etag-npm-1.8.1-54a3b989d9-571aeb3dbe.zip +0 -0
- package/.yarn/cache/execa-npm-5.1.1-191347acf5-fba9022c8c.zip +0 -0
- package/.yarn/cache/exit-npm-0.1.2-ef3761a67d-abc407f07a.zip +0 -0
- package/.yarn/cache/expect-npm-27.0.2-d2be5f87e0-50fa15906d.zip +0 -0
- package/.yarn/cache/express-npm-4.18.2-bb15ff679a-3c4b9b0768.zip +0 -0
- package/.yarn/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-b191531e36.zip +0 -0
- package/.yarn/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-92cfec0a8d.zip +0 -0
- package/.yarn/cache/fb-watchman-npm-2.0.1-30005d50fe-8510230778.zip +0 -0
- package/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip +0 -0
- package/.yarn/cache/finalhandler-npm-1.2.0-593d001463-92effbfd32.zip +0 -0
- package/.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip +0 -0
- package/.yarn/cache/form-data-npm-3.0.1-d080d436e0-b019e8d35c.zip +0 -0
- package/.yarn/cache/forwarded-npm-0.2.0-6473dabe35-fd27e2394d.zip +0 -0
- package/.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-13ea8b08f9.zip +0 -0
- package/.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip +0 -0
- package/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip +0 -0
- package/.yarn/cache/fsevents-npm-2.3.2-a881d6ac9f-97ade64e75.zip +0 -0
- package/.yarn/cache/fsevents-patch-3340e2eb10-8.zip +0 -0
- package/.yarn/cache/function-bind-npm-1.1.1-b56b322ae9-b32fbaebb3.zip +0 -0
- package/.yarn/cache/gauge-npm-4.0.4-8f878385e9-788b6bfe52.zip +0 -0
- package/.yarn/cache/gensync-npm-1.0.0-beta.2-224666d72f-a7437e58c6.zip +0 -0
- package/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip +0 -0
- package/.yarn/cache/get-intrinsic-npm-1.2.0-eb08ea9b1d-78fc0487b7.zip +0 -0
- package/.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip +0 -0
- package/.yarn/cache/get-stream-npm-6.0.1-83e51a4642-e04ecece32.zip +0 -0
- package/.yarn/cache/glob-npm-7.1.7-5698ad9c48-b61f48973b.zip +0 -0
- package/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip +0 -0
- package/.yarn/cache/globals-npm-11.12.0-1fa7f41a6c-67051a45ec.zip +0 -0
- package/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip +0 -0
- package/.yarn/cache/graceful-fs-npm-4.2.6-535b2234f1-792e64aafd.zip +0 -0
- package/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip +0 -0
- package/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip +0 -0
- package/.yarn/cache/has-npm-1.0.3-b7f00631c1-b9ad53d53b.zip +0 -0
- package/.yarn/cache/has-symbols-npm-1.0.3-1986bff2c4-a054c40c63.zip +0 -0
- package/.yarn/cache/has-unicode-npm-2.0.1-893adb4747-1eab07a743.zip +0 -0
- package/.yarn/cache/html-encoding-sniffer-npm-2.0.1-381bf15a76-bf30cce461.zip +0 -0
- package/.yarn/cache/html-escaper-npm-2.0.2-38e51ef294-d2df2da3ad.zip +0 -0
- package/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip +0 -0
- package/.yarn/cache/http-errors-npm-2.0.0-3f1c503428-9b0a378266.zip +0 -0
- package/.yarn/cache/http-proxy-agent-npm-4.0.1-ce9ef61788-c6a5da5a19.zip +0 -0
- package/.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-e2ee1ff165.zip +0 -0
- package/.yarn/cache/https-proxy-agent-npm-5.0.0-bb777903c3-165bfb090b.zip +0 -0
- package/.yarn/cache/human-signals-npm-2.1.0-f75815481d-b87fd89fce.zip +0 -0
- package/.yarn/cache/humanize-ms-npm-1.2.1-e942bd7329-9c7a74a282.zip +0 -0
- package/.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-bd9f120f5a.zip +0 -0
- package/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip +0 -0
- package/.yarn/cache/import-local-npm-3.0.2-c8afc1fd5f-c74d9f9484.zip +0 -0
- package/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip +0 -0
- package/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip +0 -0
- package/.yarn/cache/infer-owner-npm-1.0.4-685ac3d2af-181e732764.zip +0 -0
- package/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip +0 -0
- package/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip +0 -0
- package/.yarn/cache/ip-npm-2.0.0-204facb3cc-cfcfac6b87.zip +0 -0
- package/.yarn/cache/ipaddr.js-npm-1.9.1-19ae7878b4-f88d382598.zip +0 -0
- package/.yarn/cache/is-ci-npm-3.0.0-8cc50ac1f6-4b45aef32d.zip +0 -0
- package/.yarn/cache/is-core-module-npm-2.2.0-497065e3b0-61e2aff4a7.zip +0 -0
- package/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip +0 -0
- package/.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip +0 -0
- package/.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip +0 -0
- package/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip +0 -0
- package/.yarn/cache/is-potential-custom-element-name-npm-1.0.1-f352f606f8-ced7bbbb64.zip +0 -0
- package/.yarn/cache/is-stream-npm-2.0.0-1401f82ad7-4dc47738e2.zip +0 -0
- package/.yarn/cache/is-typedarray-npm-1.0.0-bbd99de5b6-3508c6cd0a.zip +0 -0
- package/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip +0 -0
- package/.yarn/cache/istanbul-lib-coverage-npm-3.0.0-654bb0146d-ea57c24288.zip +0 -0
- package/.yarn/cache/istanbul-lib-instrument-npm-4.0.3-4d4c2263f8-fa1171d302.zip +0 -0
- package/.yarn/cache/istanbul-lib-report-npm-3.0.0-660f97340a-3f29eb3f53.zip +0 -0
- package/.yarn/cache/istanbul-lib-source-maps-npm-4.0.0-def3895674-292bfb4083.zip +0 -0
- package/.yarn/cache/istanbul-reports-npm-3.0.2-6ccd67e17e-c5da63f1f4.zip +0 -0
- package/.yarn/cache/jest-changed-files-npm-27.0.2-d43bfae442-75f12ee648.zip +0 -0
- package/.yarn/cache/jest-circus-npm-27.0.4-c2a1fe4bb5-db445e01e9.zip +0 -0
- package/.yarn/cache/jest-cli-npm-27.0.4-1c40df1857-37099bf9fc.zip +0 -0
- package/.yarn/cache/jest-config-npm-27.0.4-a3cf5198bf-f71584a091.zip +0 -0
- package/.yarn/cache/jest-diff-npm-27.0.2-10b7ae1f33-0b423e480d.zip +0 -0
- package/.yarn/cache/jest-docblock-npm-27.0.1-20d82eae71-e1d3d85b03.zip +0 -0
- package/.yarn/cache/jest-each-npm-27.0.2-e44fb469a9-e6acc2f015.zip +0 -0
- package/.yarn/cache/jest-environment-jsdom-npm-27.0.3-cf9425c76e-964c020cf7.zip +0 -0
- package/.yarn/cache/jest-environment-node-npm-27.0.3-1f3bf742d9-8cb316ef03.zip +0 -0
- package/.yarn/cache/jest-get-type-npm-27.0.1-aa40b7f8ce-22c5e04700.zip +0 -0
- package/.yarn/cache/jest-haste-map-npm-27.0.2-d6810375d3-bdb251147a.zip +0 -0
- package/.yarn/cache/jest-jasmine2-npm-27.0.4-2ee7daa2ae-a1c1b1380d.zip +0 -0
- package/.yarn/cache/jest-leak-detector-npm-27.0.2-d26b012860-22a9bd22b5.zip +0 -0
- package/.yarn/cache/jest-matcher-utils-npm-27.0.2-e0586ec40a-7c12409e42.zip +0 -0
- package/.yarn/cache/jest-message-util-npm-27.0.2-b37b426cca-b3c3733ec5.zip +0 -0
- package/.yarn/cache/jest-mock-npm-27.0.3-e7f02fb624-d783d3b3f6.zip +0 -0
- package/.yarn/cache/jest-npm-27.0.4-f6f5ed6be6-2d7800777d.zip +0 -0
- package/.yarn/cache/jest-pnp-resolver-npm-1.2.2-da20f8bdfe-bd85dcc0e7.zip +0 -0
- package/.yarn/cache/jest-regex-util-npm-27.0.1-d1632ee0e1-b9a73d4dc0.zip +0 -0
- package/.yarn/cache/jest-resolve-dependencies-npm-27.0.4-aa41296e81-974025f2ce.zip +0 -0
- package/.yarn/cache/jest-resolve-npm-27.0.4-1909eb3211-9d6698a824.zip +0 -0
- package/.yarn/cache/jest-runner-npm-27.0.4-2961cd612d-118084ce36.zip +0 -0
- package/.yarn/cache/jest-runtime-npm-27.0.4-614e4abe4f-d56ceea4a2.zip +0 -0
- package/.yarn/cache/jest-serializer-npm-27.0.1-aa547af7bf-de16a8e3a3.zip +0 -0
- package/.yarn/cache/jest-snapshot-npm-27.0.4-41adfef6e7-1a51fb78ac.zip +0 -0
- package/.yarn/cache/jest-util-npm-27.0.2-543ecb60f0-8751d6d97f.zip +0 -0
- package/.yarn/cache/jest-validate-npm-27.0.2-11208a2a7c-1ae6d0bc16.zip +0 -0
- package/.yarn/cache/jest-watcher-npm-27.0.2-55e546b64d-4d3ee72f74.zip +0 -0
- package/.yarn/cache/jest-worker-npm-27.0.2-256c4c36d7-ea1b72afc9.zip +0 -0
- package/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip +0 -0
- package/.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip +0 -0
- package/.yarn/cache/jsdom-npm-16.6.0-f5f949a44e-4abf126bba.zip +0 -0
- package/.yarn/cache/jsesc-npm-2.5.2-c5acb78804-4dc1907711.zip +0 -0
- package/.yarn/cache/json5-npm-2.2.0-da49dc7cb5-e88fc5274b.zip +0 -0
- package/.yarn/cache/kleur-npm-3.0.3-f6f53649a4-df82cd1e17.zip +0 -0
- package/.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip +0 -0
- package/.yarn/cache/levn-npm-0.3.0-48d774b1c2-0d084a5242.zip +0 -0
- package/.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip +0 -0
- package/.yarn/cache/lodash-npm-4.17.21-6382451519-eb835a2e51.zip +0 -0
- package/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip +0 -0
- package/.yarn/cache/lru-cache-npm-7.18.3-e68be5b11c-e550d77238.zip +0 -0
- package/.yarn/cache/make-dir-npm-3.1.0-d1d7505142-484200020a.zip +0 -0
- package/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip +0 -0
- package/.yarn/cache/make-fetch-happen-npm-10.2.1-f1cc7cd2df-2332eb9a8e.zip +0 -0
- package/.yarn/cache/makeerror-npm-1.0.11-f7d070b73c-9a62ec2d96.zip +0 -0
- package/.yarn/cache/media-typer-npm-0.3.0-8674f8f0f5-af1b38516c.zip +0 -0
- package/.yarn/cache/merge-descriptors-npm-1.0.1-615287aaa8-5abc259d2a.zip +0 -0
- package/.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip +0 -0
- package/.yarn/cache/methods-npm-1.1.2-92f6fdb39b-0917ff4041.zip +0 -0
- package/.yarn/cache/micromatch-npm-4.0.4-9fdcbb7a0e-ef3d1c88e7.zip +0 -0
- package/.yarn/cache/mime-db-npm-1.48.0-d896dd3151-d778392e47.zip +0 -0
- package/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip +0 -0
- package/.yarn/cache/mime-npm-1.6.0-60ae95038a-fef25e3926.zip +0 -0
- package/.yarn/cache/mime-types-npm-2.1.31-fbe9a57bbf-eb1612aa96.zip +0 -0
- package/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip +0 -0
- package/.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip +0 -0
- package/.yarn/cache/minimatch-npm-3.0.4-6e76f51c23-66ac295f8a.zip +0 -0
- package/.yarn/cache/minimatch-npm-5.1.6-1e71429f4c-7564208ef8.zip +0 -0
- package/.yarn/cache/minimist-npm-1.2.5-ced0e1f617-86706ce5b3.zip +0 -0
- package/.yarn/cache/minipass-collect-npm-1.0.2-3b4676eab5-14df761028.zip +0 -0
- package/.yarn/cache/minipass-fetch-npm-2.1.2-9b21a5c930-3f216be791.zip +0 -0
- package/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip +0 -0
- package/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip +0 -0
- package/.yarn/cache/minipass-npm-4.2.5-25860eb433-4f9c19af23.zip +0 -0
- package/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip +0 -0
- package/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip +0 -0
- package/.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip +0 -0
- package/.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip +0 -0
- package/.yarn/cache/ms-npm-2.0.0-9e1101a471-0e6a22b8b7.zip +0 -0
- package/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip +0 -0
- package/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip +0 -0
- package/.yarn/cache/natural-compare-npm-1.4.0-97b75b362d-23ad088b08.zip +0 -0
- package/.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip +0 -0
- package/.yarn/cache/node-gyp-npm-9.3.1-43540bab9c-b860e9976f.zip +0 -0
- package/.yarn/cache/node-int64-npm-0.4.0-0dc04ec3b2-d0b30b1ee6.zip +0 -0
- package/.yarn/cache/node-modules-regexp-npm-1.0.0-2f5f5ba9c6-9954190353.zip +0 -0
- package/.yarn/cache/node-releases-npm-1.1.72-662e905d8e-84dacd44e6.zip +0 -0
- package/.yarn/cache/nopt-npm-6.0.0-5ea8050815-82149371f8.zip +0 -0
- package/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip +0 -0
- package/.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip +0 -0
- package/.yarn/cache/npmlog-npm-6.0.2-e0e69455c7-ae238cd264.zip +0 -0
- package/.yarn/cache/nwsapi-npm-2.2.0-8f05590043-5ef4a9bc0c.zip +0 -0
- package/.yarn/cache/object-assign-npm-4.1.1-1004ad6dec-fcc6e4ea8c.zip +0 -0
- package/.yarn/cache/object-inspect-npm-1.12.3-1e7d20f5ff-dabfd824d9.zip +0 -0
- package/.yarn/cache/on-finished-npm-2.4.1-907af70f88-d20929a25e.zip +0 -0
- package/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip +0 -0
- package/.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip +0 -0
- package/.yarn/cache/optionator-npm-0.8.3-bc555bc5b7-b8695ddf3d.zip +0 -0
- package/.yarn/cache/p-each-series-npm-2.2.0-b9907a1ae6-5fbe2f1f19.zip +0 -0
- package/.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip +0 -0
- package/.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip +0 -0
- package/.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip +0 -0
- package/.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip +0 -0
- package/.yarn/cache/parse5-npm-6.0.1-70a35a494a-7d569a176c.zip +0 -0
- package/.yarn/cache/parseurl-npm-1.3.3-1542397e00-407cee8e0a.zip +0 -0
- package/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip +0 -0
- package/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip +0 -0
- package/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip +0 -0
- package/.yarn/cache/path-parse-npm-1.0.6-4a4c90546c-962a85dd38.zip +0 -0
- package/.yarn/cache/path-to-regexp-npm-0.1.7-2605347373-69a14ea24d.zip +0 -0
- package/.yarn/cache/picomatch-npm-2.3.0-5e60e6c82d-16818720ea.zip +0 -0
- package/.yarn/cache/pirates-npm-4.0.1-377058e8fc-091e232aac.zip +0 -0
- package/.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip +0 -0
- package/.yarn/cache/prelude-ls-npm-1.1.2-a0daac0886-c4867c8748.zip +0 -0
- package/.yarn/cache/prettier-npm-2.3.1-f8593fac45-3b37731ff7.zip +0 -0
- package/.yarn/cache/pretty-format-npm-27.0.2-d193adf249-26a454f1da.zip +0 -0
- package/.yarn/cache/promise-inflight-npm-1.0.1-5bb925afac-2274948309.zip +0 -0
- package/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip +0 -0
- package/.yarn/cache/prompts-npm-2.4.1-dd3df3be17-05bf486587.zip +0 -0
- package/.yarn/cache/proxy-addr-npm-2.0.7-dae6552872-29c6990ce9.zip +0 -0
- package/.yarn/cache/psl-npm-1.8.0-226099d70e-6150048ed2.zip +0 -0
- package/.yarn/cache/punycode-npm-2.1.1-26eb3e15cf-823bf443c6.zip +0 -0
- package/.yarn/cache/qs-npm-6.11.0-caf1bc9dea-6e1f29dd53.zip +0 -0
- package/.yarn/cache/range-parser-npm-1.2.1-1a470fa390-0a268d4fea.zip +0 -0
- package/.yarn/cache/raw-body-npm-2.5.1-9dd1d9fff9-5362adff15.zip +0 -0
- package/.yarn/cache/react-is-npm-17.0.2-091bbb8db6-9d6d111d89.zip +0 -0
- package/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-bdcbe6c22e.zip +0 -0
- package/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip +0 -0
- package/.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip +0 -0
- package/.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-4ceeb9113e.zip +0 -0
- package/.yarn/cache/resolve-npm-1.20.0-1bc5878aa9-40cf70b2cd.zip +0 -0
- package/.yarn/cache/resolve-patch-b4a69197d3-a0dd7d16a8.zip +0 -0
- package/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip +0 -0
- package/.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-87f4164e39.zip +0 -0
- package/.yarn/cache/rollup-npm-2.39.0-d94e133c08-62f136bffc.zip +0 -0
- package/.yarn/cache/safe-buffer-npm-5.1.2-c27fedf6c4-f2f1f7943c.zip +0 -0
- package/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip +0 -0
- package/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip +0 -0
- package/.yarn/cache/saxes-npm-5.0.1-57abf031ae-5636b55cf1.zip +0 -0
- package/.yarn/cache/semver-npm-6.3.0-b3eace8bfd-1b26ecf6db.zip +0 -0
- package/.yarn/cache/semver-npm-7.3.5-618cf5db6a-5eafe6102b.zip +0 -0
- package/.yarn/cache/semver-npm-7.3.8-25a996cb4f-ba9c7cbbf2.zip +0 -0
- package/.yarn/cache/send-npm-0.18.0-faadf6353f-74fc07ebb5.zip +0 -0
- package/.yarn/cache/serve-static-npm-1.15.0-86c81879f5-af57fc13be.zip +0 -0
- package/.yarn/cache/set-blocking-npm-2.0.0-49e2cffa24-6e65a05f7c.zip +0 -0
- package/.yarn/cache/setprototypeof-npm-1.2.0-0fedbdcd3a-be18cbbf70.zip +0 -0
- package/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip +0 -0
- package/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip +0 -0
- package/.yarn/cache/side-channel-npm-1.0.4-e1f38b9e06-351e41b947.zip +0 -0
- package/.yarn/cache/signal-exit-npm-3.0.3-5a2d797648-f0169d3f12.zip +0 -0
- package/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip +0 -0
- package/.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip +0 -0
- package/.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip +0 -0
- package/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip +0 -0
- package/.yarn/cache/socks-npm-2.7.1-17f2b53052-259d9e3e8e.zip +0 -0
- package/.yarn/cache/socks-proxy-agent-npm-7.0.0-7aacf32ea0-7205543701.zip +0 -0
- package/.yarn/cache/source-map-npm-0.5.7-7c3f035429-5dc2043b93.zip +0 -0
- package/.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip +0 -0
- package/.yarn/cache/source-map-npm-0.7.3-e3b4f7982a-cd24efb3b8.zip +0 -0
- package/.yarn/cache/source-map-support-npm-0.5.19-65b33ae61e-c72802fdba.zip +0 -0
- package/.yarn/cache/sprintf-js-npm-1.0.3-73f0a322fa-19d79aec21.zip +0 -0
- package/.yarn/cache/ssri-npm-9.0.1-33ce27f4f8-fb58f5e46b.zip +0 -0
- package/.yarn/cache/stack-utils-npm-2.0.3-e255395afd-c86ac08f58.zip +0 -0
- package/.yarn/cache/statuses-npm-2.0.1-81d2b97fee-18c7623fdb.zip +0 -0
- package/.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip +0 -0
- package/.yarn/cache/string-width-npm-4.2.2-aa12d6b759-343e089b0e.zip +0 -0
- package/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip +0 -0
- package/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-6.0.0-904613e9eb-04c3239ede.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip +0 -0
- package/.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip +0 -0
- package/.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip +0 -0
- package/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip +0 -0
- package/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip +0 -0
- package/.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip +0 -0
- package/.yarn/cache/supports-hyperlinks-npm-2.2.0-9b22a6271b-aef04fb41f.zip +0 -0
- package/.yarn/cache/symbol-tree-npm-3.2.4-fe70cdb75b-6e8fc7e148.zip +0 -0
- package/.yarn/cache/tar-npm-6.1.13-3234e72781-8a278bed12.zip +0 -0
- package/.yarn/cache/terminal-link-npm-2.1.1-de80341758-ce3d2cd3a4.zip +0 -0
- package/.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-3b34a3d771.zip +0 -0
- package/.yarn/cache/throat-npm-6.0.1-1308a37a10-782d4171ee.zip +0 -0
- package/.yarn/cache/tmpl-npm-1.0.4-35b37c2875-72c9333504.zip +0 -0
- package/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip +0 -0
- package/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip +0 -0
- package/.yarn/cache/toidentifier-npm-1.0.1-f759712599-952c29e2a8.zip +0 -0
- package/.yarn/cache/tough-cookie-npm-4.0.0-7c5f3086af-0891b37eb7.zip +0 -0
- package/.yarn/cache/tr46-npm-2.1.0-00af583f4f-ffe6049b9d.zip +0 -0
- package/.yarn/cache/ts-jest-npm-27.0.2-a85e2f76a4-dbc3fb1e61.zip +0 -0
- package/.yarn/cache/ts-node-npm-10.0.0-9c3d77d0a0-96d633774e.zip +0 -0
- package/.yarn/cache/tslib-npm-2.1.0-81c9ac9b82-aa189c8179.zip +0 -0
- package/.yarn/cache/type-check-npm-0.3.2-a4a38bb0b6-dd3b149564.zip +0 -0
- package/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip +0 -0
- package/.yarn/cache/type-fest-npm-0.21.3-5ff2a9c6fd-e6b32a3b38.zip +0 -0
- package/.yarn/cache/type-is-npm-1.6.18-6dee4d4961-2c8e47675d.zip +0 -0
- package/.yarn/cache/typedarray-to-buffer-npm-3.1.5-aadc11995e-99c11aaa8f.zip +0 -0
- package/.yarn/cache/typescript-npm-5.0.3-84e500d967-3cce0576d2.zip +0 -0
- package/.yarn/cache/typescript-patch-f563c275ac-9ec0a8eed3.zip +0 -0
- package/.yarn/cache/unique-filename-npm-2.0.1-183c6c7c2b-807acf3381.zip +0 -0
- package/.yarn/cache/unique-slug-npm-3.0.0-0b82e51577-49f8d915ba.zip +0 -0
- package/.yarn/cache/universalify-npm-0.1.2-9b22d31d2d-40cdc60f6e.zip +0 -0
- package/.yarn/cache/unpipe-npm-1.0.0-2ed2a3c2bf-4fa18d8d8d.zip +0 -0
- package/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip +0 -0
- package/.yarn/cache/utils-merge-npm-1.0.1-363bbdfbca-c810954932.zip +0 -0
- package/.yarn/cache/v8-to-istanbul-npm-7.1.2-f29c35e9aa-e52b48764f.zip +0 -0
- package/.yarn/cache/vary-npm-1.1.2-b49f70ae63-ae0123222c.zip +0 -0
- package/.yarn/cache/w3c-hr-time-npm-1.0.2-87f88e51d9-ec3c2dacbf.zip +0 -0
- package/.yarn/cache/w3c-xmlserializer-npm-2.0.0-f8f7bc8b42-ae25c51cf7.zip +0 -0
- package/.yarn/cache/walker-npm-1.0.7-a97443bd99-4038fcf92f.zip +0 -0
- package/.yarn/cache/webidl-conversions-npm-5.0.0-9649787484-ccf1ec2ca7.zip +0 -0
- package/.yarn/cache/webidl-conversions-npm-6.1.0-0594fd577c-1f526507aa.zip +0 -0
- package/.yarn/cache/whatwg-encoding-npm-1.0.5-85e0fb7d7d-5be4efe111.zip +0 -0
- package/.yarn/cache/whatwg-mimetype-npm-2.3.0-52eaa1d941-23eb885940.zip +0 -0
- package/.yarn/cache/whatwg-url-npm-8.5.0-10be05312c-3bda9bfd98.zip +0 -0
- package/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip +0 -0
- package/.yarn/cache/wide-align-npm-1.1.5-889d77e592-d5fc37cd56.zip +0 -0
- package/.yarn/cache/word-wrap-npm-1.2.3-7fb15ab002-30b48f91fc.zip +0 -0
- package/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip +0 -0
- package/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip +0 -0
- package/.yarn/cache/write-file-atomic-npm-3.0.3-d948a237da-c55b24617c.zip +0 -0
- package/.yarn/cache/ws-npm-7.4.6-9c9a725604-3a990b32ed.zip +0 -0
- package/.yarn/cache/xml-name-validator-npm-3.0.0-10e74a38ea-b3ac459afe.zip +0 -0
- package/.yarn/cache/xmlchars-npm-2.2.0-8b78f0f5e4-8c70ac9407.zip +0 -0
- package/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip +0 -0
- package/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip +0 -0
- package/.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip +0 -0
- package/.yarn/cache/yargs-parser-npm-20.2.7-5ab0b83136-ec0ea9e1b5.zip +0 -0
- package/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip +0 -0
- package/.yarn/install-state.gz +0 -0
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/cjs/example.js +124 -0
- package/dist/cjs/index.js +134 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/rpc-044798c3.js +526 -0
- package/dist/cjs/rpc-0efa90dd.js +526 -0
- package/dist/cjs/rpc-25d007b6.js +537 -0
- package/dist/cjs/rpc-2ed27fc8.js +538 -0
- package/dist/cjs/rpc-39814774.js +537 -0
- package/dist/cjs/rpc-43646121.js +539 -0
- package/dist/cjs/rpc-5117881b.js +526 -0
- package/dist/cjs/rpc-5504b82e.js +514 -0
- package/dist/cjs/rpc-5628288a.js +538 -0
- package/dist/cjs/rpc-5bfe852e.js +528 -0
- package/dist/cjs/rpc-5d397af6.js +528 -0
- package/dist/cjs/rpc-ce896005.js +517 -0
- package/dist/cjs/sdk-46322c77.js +535 -0
- package/dist/cjs/sdk-a6de67bc.js +515 -0
- package/dist/cjs/sdk-c55b3e15.js +515 -0
- package/dist/cjs/sdk.js +468 -0
- package/dist/example.d.ts +1 -0
- package/dist/example.js +118 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +129 -0
- package/dist/package.json +57 -0
- package/dist/rpc-5467a71f.js +519 -0
- package/dist/rpc-6ad4d5ed.js +521 -0
- package/dist/rpc-6d9f35c6.js +510 -0
- package/dist/rpc-9139c966.js +531 -0
- package/dist/rpc-99282f71.js +519 -0
- package/dist/rpc-a007c277.js +521 -0
- package/dist/rpc-a877a316.js +529 -0
- package/dist/rpc-b3bf4c41.js +529 -0
- package/dist/rpc-d24089bc.js +532 -0
- package/dist/rpc-ddc52117.js +508 -0
- package/dist/rpc-e138a275.js +519 -0
- package/dist/rpc-fb0623fd.js +531 -0
- package/dist/scripts/bumpVersion.d.ts +1 -0
- package/dist/sdk-939066ea.js +509 -0
- package/dist/sdk-9804f7c5.js +509 -0
- package/dist/sdk-db908f37.js +510 -0
- package/dist/sdk.js +440 -0
- package/dist/src/addons/sequelize.d.ts +13 -0
- package/dist/src/example.d.ts +1 -0
- package/dist/src/rpc.d.ts +56 -0
- package/dist/src/rpc.spec.d.ts +1 -0
- package/dist/src/sdk.d.ts +57 -0
- package/dist/src/sdk.spec.d.ts +1 -0
- package/dist/src/types.d.ts +93 -0
- package/dist/src/utils/api.d.ts +43 -0
- package/dist/src/utils/errors.d.ts +8 -0
- package/dist/src/utils/helpers.d.ts +6 -0
- package/dist/src/utils/logger.d.ts +15 -0
- package/dist/src/utils/polling.d.ts +3 -0
- package/dist/src/utils/schema.d.ts +2 -0
- package/dist/src/version.d.ts +1 -0
- package/example.ts +134 -0
- package/index.ts +3 -0
- package/package.json +57 -0
- package/rollup.config.js +34 -0
- package/scripts/bumpVersion.ts +22 -0
- package/src/addons/README.md +5 -0
- package/src/addons/sequelize.ts +152 -0
- package/src/rpc.spec.ts +752 -0
- package/src/rpc.ts +262 -0
- package/src/types.ts +114 -0
- package/src/utils/api.ts +105 -0
- package/src/utils/errors.ts +53 -0
- package/src/utils/helpers.ts +41 -0
- package/src/utils/logger.ts +49 -0
- package/src/utils/polling.ts +43 -0
- package/src/utils/schema.ts +166 -0
- package/src/version.ts +1 -0
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +23 -0
package/src/rpc.ts
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
RetoolRPCConfig,
|
|
5
|
+
Arguments,
|
|
6
|
+
RetoolContext,
|
|
7
|
+
AgentServerError,
|
|
8
|
+
RegisterFunctionSpec,
|
|
9
|
+
AgentServerStatus,
|
|
10
|
+
} from './types'
|
|
11
|
+
|
|
12
|
+
import { createAgentServerError, FunctionNotFoundError } from './utils/errors'
|
|
13
|
+
import { parseFunctionArguments } from './utils/schema'
|
|
14
|
+
import { isClientError } from './utils/helpers'
|
|
15
|
+
import { loopWithBackoff } from './utils/polling'
|
|
16
|
+
import { Logger } from './utils/logger'
|
|
17
|
+
import { RetoolAPI } from './utils/api'
|
|
18
|
+
import { RetoolRPCVersion } from './version'
|
|
19
|
+
|
|
20
|
+
const MINIMUM_POLLING_INTERVAL_MS = 100
|
|
21
|
+
const DEFAULT_POLLING_INTERVAL_MS = 1000
|
|
22
|
+
const DEFAULT_ENVIRONMENT_NAME = 'production'
|
|
23
|
+
const DEFAULT_VERSION = '0.0.1'
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Represents the Retool RPC for interacting with Retool functions and contexts.
|
|
27
|
+
*/
|
|
28
|
+
export class RetoolRPC {
|
|
29
|
+
private _apiKey: string
|
|
30
|
+
private _hostUrl: string
|
|
31
|
+
private _resourceId: string
|
|
32
|
+
private _environmentName: string
|
|
33
|
+
private _pollingIntervalMs: number
|
|
34
|
+
private _version: string
|
|
35
|
+
private _agentUuid: string
|
|
36
|
+
private _versionHash: string | undefined
|
|
37
|
+
private _functions: Record<string, Omit<RegisterFunctionSpec<any>, 'name'>> = {}
|
|
38
|
+
private _retoolApi: RetoolAPI
|
|
39
|
+
private _logger: Logger
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Creates an instance of the RetoolRPC class.
|
|
43
|
+
*/
|
|
44
|
+
constructor(config: RetoolRPCConfig) {
|
|
45
|
+
this._apiKey = config.apiToken
|
|
46
|
+
this._hostUrl = config.host.replace(/\/$/, '') // Remove trailing / from host
|
|
47
|
+
this._resourceId = config.resourceId
|
|
48
|
+
this._environmentName = config.environmentName || DEFAULT_ENVIRONMENT_NAME
|
|
49
|
+
this._pollingIntervalMs = config.pollingIntervalMs
|
|
50
|
+
? Math.max(config.pollingIntervalMs, MINIMUM_POLLING_INTERVAL_MS)
|
|
51
|
+
: DEFAULT_POLLING_INTERVAL_MS
|
|
52
|
+
this._version = config.version || DEFAULT_VERSION
|
|
53
|
+
this._agentUuid = config.agentUuid || uuidv4()
|
|
54
|
+
|
|
55
|
+
this._retoolApi = new RetoolAPI({ hostUrl: this._hostUrl, apiKey: this._apiKey })
|
|
56
|
+
this._logger = new Logger({ logLevel: config.logLevel })
|
|
57
|
+
|
|
58
|
+
this._logger.debug('Retool RPC Configuration', {
|
|
59
|
+
apiKey: this._apiKey,
|
|
60
|
+
hostUrl: this._hostUrl,
|
|
61
|
+
resourceId: this._resourceId,
|
|
62
|
+
environmentName: this._environmentName,
|
|
63
|
+
agentUuid: this._agentUuid,
|
|
64
|
+
version: this._version,
|
|
65
|
+
pollingIntervalMs: this._pollingIntervalMs,
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Asynchronously starts listening for incoming Retool function invocations.
|
|
71
|
+
*/
|
|
72
|
+
async listen(): Promise<void> {
|
|
73
|
+
this._logger.info('Starting RPC agent')
|
|
74
|
+
const registerResult = await loopWithBackoff(this._pollingIntervalMs, this._logger, () => this.registerAgent())
|
|
75
|
+
if (registerResult === 'done') {
|
|
76
|
+
this._logger.info('Agent registered')
|
|
77
|
+
this._logger.info('Starting processing query')
|
|
78
|
+
loopWithBackoff(this._pollingIntervalMs, this._logger, () => this.fetchQueryAndExecute())
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Registers a Retool function with the specified function definition.
|
|
84
|
+
*/
|
|
85
|
+
register<TArgs extends Arguments>(spec: RegisterFunctionSpec<TArgs>): void {
|
|
86
|
+
this._functions[spec.name] = {
|
|
87
|
+
arguments: spec.arguments,
|
|
88
|
+
permissions: spec.permissions,
|
|
89
|
+
implementation: spec.implementation,
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Executes a Retool function with the specified arguments and context.
|
|
95
|
+
*/
|
|
96
|
+
async executeFunction(
|
|
97
|
+
functionName: string,
|
|
98
|
+
functionArguments: unknown,
|
|
99
|
+
context: RetoolContext,
|
|
100
|
+
): Promise<{ result: any; arguments: Record<string, unknown> }> {
|
|
101
|
+
this._logger.info(`Executing function: ${functionName}, context: ${context}`)
|
|
102
|
+
if (functionName === '__testConnection__') {
|
|
103
|
+
return { result: this.testConnection(context), arguments: {} }
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const fnSpec = this._functions[functionName]
|
|
107
|
+
if (!fnSpec) {
|
|
108
|
+
throw new FunctionNotFoundError(functionName)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const parsedArguments = parseFunctionArguments(functionArguments, fnSpec.arguments)
|
|
112
|
+
this._logger.debug('Parsed arguments: ', parsedArguments)
|
|
113
|
+
|
|
114
|
+
const result = await fnSpec.implementation(parsedArguments, context)
|
|
115
|
+
|
|
116
|
+
// Consider truncating large arguments
|
|
117
|
+
return { result, arguments: parsedArguments }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Tests the current connection to the Retool server.
|
|
122
|
+
*/
|
|
123
|
+
private testConnection(context: RetoolContext): {
|
|
124
|
+
success: true
|
|
125
|
+
version: string
|
|
126
|
+
agentUuid: string
|
|
127
|
+
context: RetoolContext
|
|
128
|
+
} {
|
|
129
|
+
return {
|
|
130
|
+
success: true,
|
|
131
|
+
version: this._version,
|
|
132
|
+
agentUuid: this._agentUuid,
|
|
133
|
+
context,
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Registers the agent with the Retool server.
|
|
139
|
+
*/
|
|
140
|
+
private async registerAgent(): Promise<AgentServerStatus> {
|
|
141
|
+
const functionsMetadata: Record<string, Pick<RegisterFunctionSpec<any>, 'arguments' | 'permissions'>> = {}
|
|
142
|
+
for (const functionName in this._functions) {
|
|
143
|
+
functionsMetadata[functionName] = {
|
|
144
|
+
arguments: this._functions[functionName].arguments,
|
|
145
|
+
permissions: this._functions[functionName].permissions,
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const registerAgentResponse = await this._retoolApi.registerAgent({
|
|
150
|
+
resourceId: this._resourceId,
|
|
151
|
+
environmentName: this._environmentName,
|
|
152
|
+
version: this._version,
|
|
153
|
+
agentUuid: this._agentUuid,
|
|
154
|
+
operations: functionsMetadata,
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
if (!registerAgentResponse.ok) {
|
|
158
|
+
if (isClientError(registerAgentResponse.status)) {
|
|
159
|
+
this._logger.error(
|
|
160
|
+
`Error registering agent: ${registerAgentResponse.status} ${await registerAgentResponse.text()}}`,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
// client error, stop the client
|
|
164
|
+
return 'stop'
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
throw new Error(
|
|
168
|
+
`Error connecting to retool server: ${registerAgentResponse.status} ${await registerAgentResponse.text()}}`,
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const { versionHash } = await registerAgentResponse.json()
|
|
173
|
+
this._versionHash = versionHash
|
|
174
|
+
this._logger.info(`Agent registered with versionHash: ${versionHash}`)
|
|
175
|
+
|
|
176
|
+
return 'done'
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Fetches a query from the Retool server and executes it.
|
|
181
|
+
*/
|
|
182
|
+
private async fetchQueryAndExecute(): Promise<AgentServerStatus> {
|
|
183
|
+
const pendingQueryFetch = await this._retoolApi.popQuery({
|
|
184
|
+
resourceId: this._resourceId,
|
|
185
|
+
environmentName: this._environmentName,
|
|
186
|
+
agentUuid: this._agentUuid,
|
|
187
|
+
versionHash: this._versionHash,
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
if (!pendingQueryFetch.ok) {
|
|
191
|
+
if (isClientError(pendingQueryFetch.status)) {
|
|
192
|
+
this._logger.error(`Error fetching query (${pendingQueryFetch.status}): ${await pendingQueryFetch.text()}`)
|
|
193
|
+
return 'stop'
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
throw new Error(`Server error when fetching query: ${pendingQueryFetch.status}. Retrying...`)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const { query } = await pendingQueryFetch.json()
|
|
200
|
+
if (query) {
|
|
201
|
+
this._logger.debug('Executing query', query) // This might contain sensitive information
|
|
202
|
+
|
|
203
|
+
const agentReceivedQueryAt = new Date().toISOString()
|
|
204
|
+
|
|
205
|
+
const queryUuid: string = query.queryUuid
|
|
206
|
+
const { method, parameters, context } = query.queryInfo
|
|
207
|
+
|
|
208
|
+
let status: 'success' | 'error'
|
|
209
|
+
let executionResponse: unknown = undefined
|
|
210
|
+
let executionArguments: Record<string, unknown> | undefined = undefined
|
|
211
|
+
let agentError: AgentServerError | undefined = undefined
|
|
212
|
+
|
|
213
|
+
try {
|
|
214
|
+
const executionResult = await this.executeFunction(method, parameters, context)
|
|
215
|
+
executionResponse = executionResult.result
|
|
216
|
+
executionArguments = executionResult.arguments
|
|
217
|
+
status = 'success'
|
|
218
|
+
} catch (err: unknown) {
|
|
219
|
+
agentError = createAgentServerError(err)
|
|
220
|
+
status = 'error'
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const agentFinishedQueryAt = new Date().toISOString()
|
|
224
|
+
|
|
225
|
+
const updateQueryResponse = await this._retoolApi.postQueryResponse({
|
|
226
|
+
resourceId: this._resourceId,
|
|
227
|
+
environmentName: this._environmentName,
|
|
228
|
+
versionHash: this._versionHash,
|
|
229
|
+
agentUuid: this._agentUuid,
|
|
230
|
+
queryUuid,
|
|
231
|
+
status,
|
|
232
|
+
data: executionResponse,
|
|
233
|
+
metadata: {
|
|
234
|
+
packageLanguage: 'javascript',
|
|
235
|
+
packageVersion: RetoolRPCVersion,
|
|
236
|
+
agentReceivedQueryAt,
|
|
237
|
+
agentFinishedQueryAt,
|
|
238
|
+
parameters: executionArguments,
|
|
239
|
+
},
|
|
240
|
+
error: agentError,
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
this._logger.debug('Update query response status: ', updateQueryResponse.status, await updateQueryResponse.text())
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return 'continue'
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Export registerAgent as a protected method for testing purpose only. Lookup TestRetoolRPC for usage.
|
|
251
|
+
*/
|
|
252
|
+
protected async protectedRegisterAgent() {
|
|
253
|
+
return this.registerAgent()
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Export fetchQueryAndExecute as a protected method for testing purpose only. Lookup TestRetoolRPC for usage.
|
|
258
|
+
*/
|
|
259
|
+
protected async protectedFetchQueryAndExecute() {
|
|
260
|
+
return this.fetchQueryAndExecute()
|
|
261
|
+
}
|
|
262
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration options for the Retool RPC.
|
|
3
|
+
*/
|
|
4
|
+
export type RetoolRPCConfig = {
|
|
5
|
+
/** The host URL of the Retool instance. */
|
|
6
|
+
host: string
|
|
7
|
+
/** The API token for authenticating with the Retool instance. */
|
|
8
|
+
apiToken: string
|
|
9
|
+
/** The ID of the resource in Retool (UUID format). */
|
|
10
|
+
resourceId: string
|
|
11
|
+
/** The optional environment identifier. Defaults to `production` */
|
|
12
|
+
environmentName?: string
|
|
13
|
+
/**
|
|
14
|
+
* The version of the schema being used. If the resource enforce explicit versioning,
|
|
15
|
+
* this property must be set, and must be updated with each schema change.
|
|
16
|
+
* */
|
|
17
|
+
version?: string
|
|
18
|
+
/** The optional polling interval in milliseconds. Defaults to 1000. Minimum is 100. */
|
|
19
|
+
pollingIntervalMs?: number
|
|
20
|
+
/** The optional UUID of the agent. Will be automatically generated by default */
|
|
21
|
+
agentUuid?: string
|
|
22
|
+
/** The optional log level. */
|
|
23
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Represents the type of the argument. Right now we are supporting only string, boolean, number, dict, and json. */
|
|
27
|
+
export type ArgumentType = 'string' | 'boolean' | 'number' | 'dict' | 'json'
|
|
28
|
+
|
|
29
|
+
/** Represents an argument definition for a Retool function. */
|
|
30
|
+
export type Argument = {
|
|
31
|
+
/** The type of the argument. */
|
|
32
|
+
type: ArgumentType
|
|
33
|
+
/** Specifies whether the argument is expected to be an array. */
|
|
34
|
+
array?: boolean
|
|
35
|
+
/** The description of the argument. */
|
|
36
|
+
description?: string
|
|
37
|
+
/** Specifies whether the argument is required. */
|
|
38
|
+
required?: boolean
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Recursive JSON type */
|
|
42
|
+
export type Json = string | number | boolean | null | Json[] | { [property: string]: Json }
|
|
43
|
+
|
|
44
|
+
/** Represents a map of argument name to argument type. */
|
|
45
|
+
export type ArgumentTypeMap<T extends Argument> = T['type'] extends 'string'
|
|
46
|
+
? string
|
|
47
|
+
: T['type'] extends 'number'
|
|
48
|
+
? number
|
|
49
|
+
: T['type'] extends 'boolean'
|
|
50
|
+
? boolean
|
|
51
|
+
: T['type'] extends 'dict'
|
|
52
|
+
? Record<string, any>
|
|
53
|
+
: T['type'] extends 'json'
|
|
54
|
+
? Json
|
|
55
|
+
: never
|
|
56
|
+
|
|
57
|
+
/** Represents a map of argument names to argument definitions. */
|
|
58
|
+
export type Arguments = Record<string, Argument>
|
|
59
|
+
|
|
60
|
+
/** Represents a map of argument name to argument type. */
|
|
61
|
+
export type TransformedArgument<TArg extends Argument> = TArg['array'] extends true
|
|
62
|
+
? Array<ArgumentTypeMap<TArg>>
|
|
63
|
+
: ArgumentTypeMap<TArg>
|
|
64
|
+
|
|
65
|
+
/** Represents a map of argument names to argument types. */
|
|
66
|
+
export type TransformedArguments<TArgs extends Arguments> = {
|
|
67
|
+
[TArg in keyof TArgs]: TransformedArgument<TArgs[TArg]>
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Represents the specification for registering a Retool function. */
|
|
71
|
+
export type RegisterFunctionSpec<TArgs extends Arguments> = {
|
|
72
|
+
/** The name of the function. */
|
|
73
|
+
name: string
|
|
74
|
+
/** The arguments of the function. */
|
|
75
|
+
arguments: Pick<TArgs, keyof TArgs>
|
|
76
|
+
/** The implementation of the function. */
|
|
77
|
+
implementation: (args: TransformedArguments<TArgs>, context: RetoolContext) => Promise<any>
|
|
78
|
+
/** The permissions configuration for the function. */
|
|
79
|
+
permissions?: {
|
|
80
|
+
/** The list of group names that have permission to execute the function. */
|
|
81
|
+
groupNames?: string[]
|
|
82
|
+
/** The list of user emails that have permission to execute the function. */
|
|
83
|
+
userEmails?: string[]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Additional context information that is passed to the Retool function. */
|
|
88
|
+
export type RetoolContext = {
|
|
89
|
+
/** Name of the user who is executing the function. */
|
|
90
|
+
userName?: string
|
|
91
|
+
/** Email address of the user who is executing the function. */
|
|
92
|
+
userEmail?: string
|
|
93
|
+
/** A list of group names of the user who is executing the function. */
|
|
94
|
+
userGroups?: string[]
|
|
95
|
+
/** The organization name of the user who is executing the function. */
|
|
96
|
+
organizationName?: string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Agent server error that is thrown by Retool RPC. */
|
|
100
|
+
export type AgentServerError = {
|
|
101
|
+
/** The error name. */
|
|
102
|
+
name: string
|
|
103
|
+
/** The error message. */
|
|
104
|
+
message: string
|
|
105
|
+
/** The error stack track. */
|
|
106
|
+
stack?: string
|
|
107
|
+
/** The error status code. */
|
|
108
|
+
code?: number
|
|
109
|
+
/** The error additional details. */
|
|
110
|
+
details?: unknown
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Represents the current status of a function execution. */
|
|
114
|
+
export type AgentServerStatus = 'continue' | 'stop' | 'done'
|
package/src/utils/api.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import fetch, { RequestInit } from 'node-fetch'
|
|
2
|
+
|
|
3
|
+
import AbortControllerFallback from 'abort-controller'
|
|
4
|
+
|
|
5
|
+
// AbortController was added in node v14.17.0 globally, but we need to polyfill it for older versions
|
|
6
|
+
const AbortController = globalThis.AbortController || AbortControllerFallback
|
|
7
|
+
|
|
8
|
+
import { AgentServerError } from '../types'
|
|
9
|
+
import { RetoolRPCVersion } from '../version'
|
|
10
|
+
|
|
11
|
+
const POLLING_TIMEOUT_MS = 5 * 1000 // 5 seconds
|
|
12
|
+
|
|
13
|
+
type PopQueryRequest = {
|
|
14
|
+
resourceId: string
|
|
15
|
+
environmentName: string
|
|
16
|
+
agentUuid: string
|
|
17
|
+
versionHash: string | undefined
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type RegisterAgentRequest = {
|
|
21
|
+
resourceId: string
|
|
22
|
+
environmentName: string
|
|
23
|
+
version: string
|
|
24
|
+
agentUuid: string
|
|
25
|
+
operations: Record<string, unknown>
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
type PostQueryResponseRequest = {
|
|
29
|
+
resourceId: string
|
|
30
|
+
environmentName: string
|
|
31
|
+
versionHash: string | undefined
|
|
32
|
+
agentUuid: string
|
|
33
|
+
queryUuid: string
|
|
34
|
+
metadata: {
|
|
35
|
+
packageVersion: string
|
|
36
|
+
packageLanguage: 'python' | 'javascript'
|
|
37
|
+
agentReceivedQueryAt: string
|
|
38
|
+
agentFinishedQueryAt: string
|
|
39
|
+
parameters: Record<string, unknown> | undefined
|
|
40
|
+
}
|
|
41
|
+
status: 'success' | 'error' // Should be a discriminated union instead
|
|
42
|
+
data: unknown
|
|
43
|
+
error: AgentServerError | undefined
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export class RetoolAPI {
|
|
47
|
+
private _hostUrl: string
|
|
48
|
+
private _apiKey: string
|
|
49
|
+
|
|
50
|
+
constructor({ hostUrl, apiKey }: { hostUrl: string; apiKey: string }) {
|
|
51
|
+
this._hostUrl = hostUrl
|
|
52
|
+
this._apiKey = apiKey
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async popQuery(options: PopQueryRequest) {
|
|
56
|
+
const abortController = new AbortController()
|
|
57
|
+
setTimeout(() => {
|
|
58
|
+
abortController.abort()
|
|
59
|
+
}, POLLING_TIMEOUT_MS)
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
return await fetch(`${this._hostUrl}/api/v1/retoolrpc/popQuery`, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
Authorization: `Bearer ${this._apiKey}`,
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
'User-Agent': `RetoolRPC/${RetoolRPCVersion} (Javascript)`,
|
|
68
|
+
},
|
|
69
|
+
body: JSON.stringify(options),
|
|
70
|
+
// Had to cast to RequestInit['signal'] because of a bug in the types
|
|
71
|
+
// https://github.com/jasonkuhrt/graphql-request/issues/481
|
|
72
|
+
signal: abortController.signal as RequestInit['signal'],
|
|
73
|
+
})
|
|
74
|
+
} catch (error: any) {
|
|
75
|
+
if (abortController.signal.aborted) {
|
|
76
|
+
throw new Error(`Polling timeout after ${POLLING_TIMEOUT_MS}ms`)
|
|
77
|
+
}
|
|
78
|
+
throw error
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async registerAgent(options: RegisterAgentRequest) {
|
|
83
|
+
return fetch(`${this._hostUrl}/api/v1/retoolrpc/registerAgent`, {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: {
|
|
86
|
+
Authorization: `Bearer ${this._apiKey}`,
|
|
87
|
+
'Content-Type': 'application/json',
|
|
88
|
+
'User-Agent': `RetoolRPC/${RetoolRPCVersion} (Javascript)`,
|
|
89
|
+
},
|
|
90
|
+
body: JSON.stringify(options),
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async postQueryResponse(options: PostQueryResponseRequest) {
|
|
95
|
+
return fetch(`${this._hostUrl}/api/v1/retoolrpc/postQueryResponse`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: {
|
|
98
|
+
Authorization: `Bearer ${this._apiKey}`,
|
|
99
|
+
'Content-Type': 'application/json',
|
|
100
|
+
'User-Agent': `RetoolRPC/${RetoolRPCVersion} (Javascript)`,
|
|
101
|
+
},
|
|
102
|
+
body: JSON.stringify(options),
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AgentServerError } from '../types'
|
|
2
|
+
|
|
3
|
+
const AGENT_SERVER_ERROR = 'AgentServerError'
|
|
4
|
+
|
|
5
|
+
export function createAgentServerError(error: unknown): AgentServerError {
|
|
6
|
+
if (error instanceof Error) {
|
|
7
|
+
const agentError: AgentServerError = {
|
|
8
|
+
name: error.name,
|
|
9
|
+
message: error.message,
|
|
10
|
+
stack: error.stack,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if ('code' in error) {
|
|
14
|
+
if (typeof error.code === 'number') {
|
|
15
|
+
agentError.code = error.code
|
|
16
|
+
} else if (error.code === 'string') {
|
|
17
|
+
agentError.code = parseInt(error.code, 10)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if ('details' in error) {
|
|
22
|
+
agentError.details = error.details
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return agentError
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (typeof error === 'string') {
|
|
29
|
+
return {
|
|
30
|
+
name: AGENT_SERVER_ERROR,
|
|
31
|
+
message: error,
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
name: AGENT_SERVER_ERROR,
|
|
37
|
+
message: 'Unknown agent server error',
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class FunctionNotFoundError extends Error {
|
|
42
|
+
constructor(functionName: string) {
|
|
43
|
+
super(`Function "${functionName}" not found on remote agent server.`)
|
|
44
|
+
this.name = 'FunctionNotFoundError'
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export class InvalidArgumentsError extends Error {
|
|
49
|
+
constructor(message: string) {
|
|
50
|
+
super(message)
|
|
51
|
+
this.name = 'InvalidArgumentsError'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
|
|
2
|
+
const result: Partial<T> = {}
|
|
3
|
+
|
|
4
|
+
for (const key of keys) {
|
|
5
|
+
if (key in obj) {
|
|
6
|
+
result[key] = obj[key]
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return result as Pick<T, K>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isRecord(value: unknown): value is Record<string, unknown> {
|
|
14
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function isFalsyArgumentValue(value: unknown): boolean {
|
|
18
|
+
return value === null || value === undefined || value === ''
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function isBooleanString(value: unknown): value is string {
|
|
22
|
+
if (typeof value === 'string') {
|
|
23
|
+
const lowercaseValue = value.toLowerCase()
|
|
24
|
+
return lowercaseValue === 'true' || lowercaseValue === 'false'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return false
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isNumberString(value: unknown): value is string {
|
|
31
|
+
if (typeof value === 'string') {
|
|
32
|
+
// Use a regular expression to check if the string is a valid number
|
|
33
|
+
return /^-?\d+(\.\d+)?$/.test(value)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function isClientError(status: number): boolean {
|
|
40
|
+
return status >= 400 && status < 500
|
|
41
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const LOG_LEVELS = ['debug', 'info', 'warn', 'error'] as const
|
|
2
|
+
type LogLevel = typeof LOG_LEVELS[number]
|
|
3
|
+
|
|
4
|
+
const LOG_LEVEL_RANKINGS: Record<LogLevel, number> = {
|
|
5
|
+
debug: 0,
|
|
6
|
+
info: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
error: 3,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type LoggerOptions = {
|
|
12
|
+
logLevel?: LogLevel
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class Logger {
|
|
16
|
+
private currentLogLevel: LogLevel
|
|
17
|
+
|
|
18
|
+
constructor(options: LoggerOptions) {
|
|
19
|
+
this.currentLogLevel = options.logLevel || 'info' // Default to 'info' if logLevel is not specified
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private shouldLog(level: LogLevel) {
|
|
23
|
+
return LOG_LEVEL_RANKINGS[level] >= LOG_LEVEL_RANKINGS[this.currentLogLevel] && process.env.NODE_ENV !== 'test'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
debug(...messages: any[]) {
|
|
27
|
+
if (this.shouldLog('debug')) {
|
|
28
|
+
console.log(...messages)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
info(...messages: any[]) {
|
|
33
|
+
if (this.shouldLog('info')) {
|
|
34
|
+
console.log(...messages)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
warn(...messages: any[]) {
|
|
39
|
+
if (this.shouldLog('warn')) {
|
|
40
|
+
console.log(...messages)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
error(...messages: any[]) {
|
|
45
|
+
if (this.shouldLog('error')) {
|
|
46
|
+
console.log(...messages)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AgentServerStatus } from '../types'
|
|
2
|
+
import { Logger } from './logger'
|
|
3
|
+
|
|
4
|
+
const CONNECTION_ERROR_INITIAL_TIMEOUT_MS = 50
|
|
5
|
+
const CONNECTION_ERROR_RETRY_MAX_MS = 1000 * 60 * 10 // 10 minutes
|
|
6
|
+
|
|
7
|
+
function sleep(ms: number): Promise<void> {
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
setTimeout(resolve, ms)
|
|
10
|
+
})
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function loopWithBackoff(
|
|
14
|
+
pollingIntervalMs: number,
|
|
15
|
+
logger: Logger,
|
|
16
|
+
callback: () => Promise<AgentServerStatus>,
|
|
17
|
+
): Promise<AgentServerStatus> {
|
|
18
|
+
let delayTimeMs = CONNECTION_ERROR_INITIAL_TIMEOUT_MS
|
|
19
|
+
let lastLoopTimestamp = Date.now()
|
|
20
|
+
|
|
21
|
+
while (true) {
|
|
22
|
+
try {
|
|
23
|
+
const result = await callback()
|
|
24
|
+
|
|
25
|
+
const currentTimestamp = Date.now()
|
|
26
|
+
const loopDurationMs = currentTimestamp - lastLoopTimestamp
|
|
27
|
+
lastLoopTimestamp = currentTimestamp
|
|
28
|
+
logger.debug(
|
|
29
|
+
`Loop time: ${loopDurationMs}ms, delay time: ${delayTimeMs}ms, polling interval: ${pollingIntervalMs}ms`,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
if (result !== 'continue') {
|
|
33
|
+
return result
|
|
34
|
+
}
|
|
35
|
+
await sleep(pollingIntervalMs)
|
|
36
|
+
delayTimeMs = Math.max(delayTimeMs / 2, CONNECTION_ERROR_INITIAL_TIMEOUT_MS)
|
|
37
|
+
} catch (err: unknown) {
|
|
38
|
+
logger.error('Error running RPC agent', err)
|
|
39
|
+
await sleep(delayTimeMs)
|
|
40
|
+
delayTimeMs = Math.min(delayTimeMs * 2, CONNECTION_ERROR_RETRY_MAX_MS)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|