machinaos 0.0.1 → 0.0.6
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/.env.template +71 -71
- package/LICENSE +21 -21
- package/README.md +145 -87
- package/bin/cli.js +62 -106
- package/client/.dockerignore +45 -45
- package/client/Dockerfile +68 -68
- package/client/dist/assets/index-DFSC53FP.css +1 -0
- package/client/dist/assets/index-fJ-1gTf5.js +613 -0
- package/client/dist/index.html +14 -0
- package/client/eslint.config.js +34 -16
- package/client/nginx.conf +66 -66
- package/client/package.json +61 -48
- package/client/src/App.tsx +27 -27
- package/client/src/Dashboard.tsx +1200 -1172
- package/client/src/ParameterPanel.tsx +302 -300
- package/client/src/components/AIAgentNode.tsx +315 -321
- package/client/src/components/APIKeyValidator.tsx +117 -117
- package/client/src/components/ClaudeChatModelNode.tsx +17 -17
- package/client/src/components/CredentialsModal.tsx +1200 -306
- package/client/src/components/GeminiChatModelNode.tsx +17 -17
- package/client/src/components/GenericNode.tsx +356 -356
- package/client/src/components/LocationParameterPanel.tsx +153 -153
- package/client/src/components/ModelNode.tsx +285 -285
- package/client/src/components/OpenAIChatModelNode.tsx +17 -17
- package/client/src/components/OutputPanel.tsx +470 -470
- package/client/src/components/ParameterRenderer.tsx +1873 -1873
- package/client/src/components/SkillEditorModal.tsx +3 -3
- package/client/src/components/SquareNode.tsx +812 -796
- package/client/src/components/ToolkitNode.tsx +365 -365
- package/client/src/components/auth/LoginPage.tsx +247 -247
- package/client/src/components/auth/ProtectedRoute.tsx +59 -59
- package/client/src/components/base/BaseChatModelNode.tsx +270 -270
- package/client/src/components/icons/AIProviderIcons.tsx +50 -50
- package/client/src/components/maps/GoogleMapsPicker.tsx +136 -136
- package/client/src/components/maps/MapsPreviewPanel.tsx +109 -109
- package/client/src/components/maps/index.ts +25 -25
- package/client/src/components/parameterPanel/InputSection.tsx +1094 -1094
- package/client/src/components/parameterPanel/LocationPanelLayout.tsx +64 -64
- package/client/src/components/parameterPanel/MapsSection.tsx +91 -91
- package/client/src/components/parameterPanel/MiddleSection.tsx +867 -571
- package/client/src/components/parameterPanel/OutputSection.tsx +80 -80
- package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +81 -81
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -436
- package/client/src/components/parameterPanel/index.ts +41 -41
- package/client/src/components/shared/DataPanel.tsx +142 -142
- package/client/src/components/shared/JSONTreeRenderer.tsx +105 -105
- package/client/src/components/ui/AIResultModal.tsx +203 -203
- package/client/src/components/ui/ApiKeyInput.tsx +93 -0
- package/client/src/components/ui/CodeEditor.tsx +81 -81
- package/client/src/components/ui/CollapsibleSection.tsx +87 -87
- package/client/src/components/ui/ComponentItem.tsx +153 -153
- package/client/src/components/ui/ComponentPalette.tsx +320 -320
- package/client/src/components/ui/ConsolePanel.tsx +151 -43
- package/client/src/components/ui/ErrorBoundary.tsx +195 -195
- package/client/src/components/ui/InputNodesPanel.tsx +203 -203
- package/client/src/components/ui/MapSelector.tsx +313 -313
- package/client/src/components/ui/Modal.tsx +151 -148
- package/client/src/components/ui/NodeOutputPanel.tsx +1150 -1150
- package/client/src/components/ui/OutputDisplayPanel.tsx +381 -381
- package/client/src/components/ui/QRCodeDisplay.tsx +182 -0
- package/client/src/components/ui/TopToolbar.tsx +736 -736
- package/client/src/components/ui/WorkflowSidebar.tsx +293 -293
- package/client/src/config/antdTheme.ts +186 -186
- package/client/src/contexts/AuthContext.tsx +221 -221
- package/client/src/contexts/ThemeContext.tsx +42 -42
- package/client/src/contexts/WebSocketContext.tsx +2144 -1971
- package/client/src/factories/baseChatModelFactory.ts +255 -255
- package/client/src/hooks/useAndroidOperations.ts +118 -164
- package/client/src/hooks/useApiKeyValidation.ts +106 -106
- package/client/src/hooks/useApiKeys.ts +238 -238
- package/client/src/hooks/useAppTheme.ts +17 -17
- package/client/src/hooks/useComponentPalette.ts +50 -50
- package/client/src/hooks/useDragAndDrop.ts +123 -123
- package/client/src/hooks/useDragVariable.ts +88 -88
- package/client/src/hooks/useExecution.ts +319 -313
- package/client/src/hooks/useParameterPanel.ts +176 -176
- package/client/src/hooks/useReactFlowNodes.ts +188 -188
- package/client/src/hooks/useToolSchema.ts +209 -209
- package/client/src/hooks/useWhatsApp.ts +196 -196
- package/client/src/hooks/useWorkflowManagement.ts +45 -45
- package/client/src/index.css +314 -314
- package/client/src/nodeDefinitions/aiAgentNodes.ts +335 -335
- package/client/src/nodeDefinitions/aiModelNodes.ts +340 -340
- package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -383
- package/client/src/nodeDefinitions/chatNodes.ts +135 -135
- package/client/src/nodeDefinitions/codeNodes.ts +54 -54
- package/client/src/nodeDefinitions/index.ts +14 -14
- package/client/src/nodeDefinitions/locationNodes.ts +462 -462
- package/client/src/nodeDefinitions/schedulerNodes.ts +220 -220
- package/client/src/nodeDefinitions/skillNodes.ts +17 -5
- package/client/src/nodeDefinitions/utilityNodes.ts +284 -284
- package/client/src/nodeDefinitions/whatsappNodes.ts +821 -865
- package/client/src/nodeDefinitions.ts +101 -103
- package/client/src/services/dynamicParameterService.ts +95 -95
- package/client/src/services/execution/aiAgentExecutionService.ts +34 -34
- package/client/src/services/executionService.ts +227 -231
- package/client/src/services/workflowApi.ts +91 -91
- package/client/src/store/useAppStore.ts +578 -581
- package/client/src/styles/theme.ts +513 -508
- package/client/src/styles/zIndex.ts +16 -16
- package/client/src/types/ComponentTypes.ts +38 -38
- package/client/src/types/INodeProperties.ts +287 -287
- package/client/src/types/NodeTypes.ts +27 -27
- package/client/src/utils/formatters.ts +32 -32
- package/client/src/utils/googleMapsLoader.ts +139 -139
- package/client/src/utils/locationUtils.ts +84 -84
- package/client/src/utils/nodeUtils.ts +30 -30
- package/client/src/utils/workflow.ts +29 -29
- package/client/src/vite-env.d.ts +12 -12
- package/client/tailwind.config.js +59 -59
- package/client/tsconfig.json +25 -25
- package/client/vite.config.js +35 -35
- package/package.json +78 -70
- package/scripts/build.js +153 -45
- package/scripts/clean.js +40 -40
- package/scripts/start.js +234 -210
- package/scripts/stop.js +301 -325
- package/server/.dockerignore +44 -44
- package/server/Dockerfile +45 -45
- package/server/constants.py +244 -249
- package/server/core/cache.py +460 -460
- package/server/core/config.py +127 -127
- package/server/core/container.py +98 -98
- package/server/core/database.py +1296 -1210
- package/server/core/logging.py +313 -313
- package/server/main.py +288 -288
- package/server/middleware/__init__.py +5 -5
- package/server/middleware/auth.py +89 -89
- package/server/models/auth.py +52 -52
- package/server/models/cache.py +24 -24
- package/server/models/database.py +235 -210
- package/server/models/nodes.py +435 -455
- package/server/pyproject.toml +75 -72
- package/server/requirements.txt +83 -83
- package/server/routers/android.py +294 -294
- package/server/routers/auth.py +203 -203
- package/server/routers/database.py +150 -150
- package/server/routers/maps.py +141 -141
- package/server/routers/nodejs_compat.py +288 -288
- package/server/routers/webhook.py +90 -90
- package/server/routers/websocket.py +2239 -2127
- package/server/routers/whatsapp.py +761 -761
- package/server/routers/workflow.py +199 -199
- package/server/services/ai.py +2444 -2414
- package/server/services/android_service.py +588 -588
- package/server/services/auth.py +130 -130
- package/server/services/chat_client.py +160 -160
- package/server/services/deployment/manager.py +706 -706
- package/server/services/event_waiter.py +675 -785
- package/server/services/execution/executor.py +1351 -1351
- package/server/services/execution/models.py +1 -1
- package/server/services/handlers/__init__.py +122 -126
- package/server/services/handlers/ai.py +390 -355
- package/server/services/handlers/android.py +69 -260
- package/server/services/handlers/code.py +278 -278
- package/server/services/handlers/http.py +193 -193
- package/server/services/handlers/tools.py +146 -32
- package/server/services/handlers/triggers.py +107 -107
- package/server/services/handlers/utility.py +822 -822
- package/server/services/handlers/whatsapp.py +423 -476
- package/server/services/maps.py +288 -288
- package/server/services/memory_store.py +103 -103
- package/server/services/node_executor.py +372 -375
- package/server/services/scheduler.py +155 -155
- package/server/services/skill_loader.py +1 -1
- package/server/services/status_broadcaster.py +834 -826
- package/server/services/temporal/__init__.py +23 -23
- package/server/services/temporal/activities.py +344 -344
- package/server/services/temporal/client.py +76 -76
- package/server/services/temporal/executor.py +147 -147
- package/server/services/temporal/worker.py +251 -251
- package/server/services/temporal/workflow.py +355 -355
- package/server/services/temporal/ws_client.py +236 -236
- package/server/services/text.py +110 -110
- package/server/services/user_auth.py +172 -172
- package/server/services/websocket_client.py +29 -29
- package/server/services/workflow.py +597 -597
- package/server/skills/android-skill/SKILL.md +4 -4
- package/server/skills/code-skill/SKILL.md +123 -89
- package/server/skills/maps-skill/SKILL.md +3 -3
- package/server/skills/memory-skill/SKILL.md +1 -1
- package/server/skills/web-search-skill/SKILL.md +154 -0
- package/server/skills/whatsapp-skill/SKILL.md +3 -3
- package/server/uv.lock +461 -100
- package/server/whatsapp-rpc/.dockerignore +30 -30
- package/server/whatsapp-rpc/Dockerfile +44 -44
- package/server/whatsapp-rpc/Dockerfile.web +17 -17
- package/server/whatsapp-rpc/README.md +139 -139
- package/server/whatsapp-rpc/bin/whatsapp-rpc-server +0 -0
- package/server/whatsapp-rpc/cli.js +95 -95
- package/server/whatsapp-rpc/configs/config.yaml +6 -6
- package/server/whatsapp-rpc/docker-compose.yml +35 -35
- package/server/whatsapp-rpc/docs/API.md +410 -410
- package/server/whatsapp-rpc/node_modules/.package-lock.json +259 -0
- package/server/whatsapp-rpc/node_modules/chalk/license +9 -0
- package/server/whatsapp-rpc/node_modules/chalk/package.json +83 -0
- package/server/whatsapp-rpc/node_modules/chalk/readme.md +297 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/index.d.ts +325 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/index.js +225 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/utilities.js +33 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/server/whatsapp-rpc/node_modules/commander/LICENSE +22 -0
- package/server/whatsapp-rpc/node_modules/commander/Readme.md +1148 -0
- package/server/whatsapp-rpc/node_modules/commander/esm.mjs +16 -0
- package/server/whatsapp-rpc/node_modules/commander/index.js +26 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/argument.js +145 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/command.js +2179 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/error.js +43 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/help.js +462 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/option.js +329 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/suggestSimilar.js +100 -0
- package/server/whatsapp-rpc/node_modules/commander/package-support.json +16 -0
- package/server/whatsapp-rpc/node_modules/commander/package.json +80 -0
- package/server/whatsapp-rpc/node_modules/commander/typings/esm.d.mts +3 -0
- package/server/whatsapp-rpc/node_modules/commander/typings/index.d.ts +884 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/README.md +89 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/index.js +39 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/enoent.js +59 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/parse.js +91 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/escape.js +47 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/package.json +73 -0
- package/server/whatsapp-rpc/node_modules/execa/index.d.ts +955 -0
- package/server/whatsapp-rpc/node_modules/execa/index.js +309 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/command.js +119 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/error.js +87 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/kill.js +102 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/pipe.js +42 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/promise.js +36 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/stdio.js +49 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/stream.js +133 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/verbose.js +19 -0
- package/server/whatsapp-rpc/node_modules/execa/license +9 -0
- package/server/whatsapp-rpc/node_modules/execa/package.json +90 -0
- package/server/whatsapp-rpc/node_modules/execa/readme.md +822 -0
- package/server/whatsapp-rpc/node_modules/get-stream/license +9 -0
- package/server/whatsapp-rpc/node_modules/get-stream/package.json +53 -0
- package/server/whatsapp-rpc/node_modules/get-stream/readme.md +291 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/array-buffer.js +84 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/array.js +32 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/buffer.js +20 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/contents.js +101 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/index.d.ts +119 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/index.js +5 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/string.js +36 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/utils.js +11 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/README.md +95 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/index.js +97 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/package.json +36 -0
- package/server/whatsapp-rpc/node_modules/human-signals/LICENSE +201 -0
- package/server/whatsapp-rpc/node_modules/human-signals/README.md +168 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/core.js +273 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.d.ts +73 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.js +70 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/realtime.js +16 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/signals.js +34 -0
- package/server/whatsapp-rpc/node_modules/human-signals/package.json +61 -0
- package/server/whatsapp-rpc/node_modules/is-stream/index.d.ts +81 -0
- package/server/whatsapp-rpc/node_modules/is-stream/index.js +29 -0
- package/server/whatsapp-rpc/node_modules/is-stream/license +9 -0
- package/server/whatsapp-rpc/node_modules/is-stream/package.json +44 -0
- package/server/whatsapp-rpc/node_modules/is-stream/readme.md +60 -0
- package/server/whatsapp-rpc/node_modules/isexe/LICENSE +15 -0
- package/server/whatsapp-rpc/node_modules/isexe/README.md +51 -0
- package/server/whatsapp-rpc/node_modules/isexe/index.js +57 -0
- package/server/whatsapp-rpc/node_modules/isexe/mode.js +41 -0
- package/server/whatsapp-rpc/node_modules/isexe/package.json +31 -0
- package/server/whatsapp-rpc/node_modules/isexe/test/basic.js +221 -0
- package/server/whatsapp-rpc/node_modules/isexe/windows.js +42 -0
- package/server/whatsapp-rpc/node_modules/kill-port/.editorconfig +12 -0
- package/server/whatsapp-rpc/node_modules/kill-port/.gitattributes +1 -0
- package/server/whatsapp-rpc/node_modules/kill-port/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/kill-port/README.md +140 -0
- package/server/whatsapp-rpc/node_modules/kill-port/cli.js +25 -0
- package/server/whatsapp-rpc/node_modules/kill-port/example.js +21 -0
- package/server/whatsapp-rpc/node_modules/kill-port/index.js +46 -0
- package/server/whatsapp-rpc/node_modules/kill-port/logo.png +0 -0
- package/server/whatsapp-rpc/node_modules/kill-port/package.json +41 -0
- package/server/whatsapp-rpc/node_modules/kill-port/pnpm-lock.yaml +4606 -0
- package/server/whatsapp-rpc/node_modules/kill-port/test.js +16 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/README.md +78 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/index.js +41 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/package.json +19 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/index.d.ts +52 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/index.js +71 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/license +9 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/package.json +45 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/readme.md +90 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/index.d.ts +90 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/index.js +52 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/license +9 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.d.ts +31 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.js +12 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/license +9 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/package.json +41 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/readme.md +57 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/package.json +49 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/readme.md +104 -0
- package/server/whatsapp-rpc/node_modules/onetime/index.d.ts +59 -0
- package/server/whatsapp-rpc/node_modules/onetime/index.js +41 -0
- package/server/whatsapp-rpc/node_modules/onetime/license +9 -0
- package/server/whatsapp-rpc/node_modules/onetime/package.json +45 -0
- package/server/whatsapp-rpc/node_modules/onetime/readme.md +94 -0
- package/server/whatsapp-rpc/node_modules/path-key/index.d.ts +40 -0
- package/server/whatsapp-rpc/node_modules/path-key/index.js +16 -0
- package/server/whatsapp-rpc/node_modules/path-key/license +9 -0
- package/server/whatsapp-rpc/node_modules/path-key/package.json +39 -0
- package/server/whatsapp-rpc/node_modules/path-key/readme.md +61 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/index.js +19 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/license +9 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/package.json +34 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/readme.md +34 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/index.d.ts +22 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/index.js +2 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/license +9 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/package.json +35 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/readme.md +33 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/README.md +60 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/index.js +47 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/package.json +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/LICENSE.txt +16 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/README.md +74 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts +12 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js +10 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts +48 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js +279 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/package.json +3 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js +42 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts +12 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js +4 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts +48 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js +275 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/package.json +3 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js +39 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/package.json +106 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/index.js +14 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/license +9 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/package.json +43 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/readme.md +35 -0
- package/server/whatsapp-rpc/node_modules/which/CHANGELOG.md +166 -0
- package/server/whatsapp-rpc/node_modules/which/LICENSE +15 -0
- package/server/whatsapp-rpc/node_modules/which/README.md +54 -0
- package/server/whatsapp-rpc/node_modules/which/bin/node-which +52 -0
- package/server/whatsapp-rpc/node_modules/which/package.json +43 -0
- package/server/whatsapp-rpc/node_modules/which/which.js +125 -0
- package/server/whatsapp-rpc/package-lock.json +272 -0
- package/server/whatsapp-rpc/package.json +30 -30
- package/server/whatsapp-rpc/schema.json +1294 -1294
- package/server/whatsapp-rpc/scripts/clean.cjs +66 -66
- package/server/whatsapp-rpc/scripts/cli.js +162 -162
- package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -166
- package/server/whatsapp-rpc/src/python/pyproject.toml +15 -15
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -4
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -427
- package/server/whatsapp-rpc/web/app.py +609 -609
- package/server/whatsapp-rpc/web/requirements.txt +6 -6
- package/server/whatsapp-rpc/web/rpc_client.py +427 -427
- package/server/whatsapp-rpc/web/static/openapi.yaml +59 -59
- package/server/whatsapp-rpc/web/templates/base.html +149 -149
- package/server/whatsapp-rpc/web/templates/contacts.html +240 -240
- package/server/whatsapp-rpc/web/templates/dashboard.html +319 -319
- package/server/whatsapp-rpc/web/templates/groups.html +328 -328
- package/server/whatsapp-rpc/web/templates/messages.html +465 -465
- package/server/whatsapp-rpc/web/templates/messaging.html +680 -680
- package/server/whatsapp-rpc/web/templates/send.html +258 -258
- package/server/whatsapp-rpc/web/templates/settings.html +459 -459
- package/client/src/components/ui/AndroidSettingsPanel.tsx +0 -401
- package/client/src/components/ui/WhatsAppSettingsPanel.tsx +0 -345
- package/client/src/nodeDefinitions/androidDeviceNodes.ts +0 -140
- package/docker-compose.prod.yml +0 -107
- package/docker-compose.yml +0 -104
- package/docs-MachinaOs/README.md +0 -85
- package/docs-MachinaOs/deployment/docker.mdx +0 -228
- package/docs-MachinaOs/deployment/production.mdx +0 -345
- package/docs-MachinaOs/docs.json +0 -75
- package/docs-MachinaOs/faq.mdx +0 -309
- package/docs-MachinaOs/favicon.svg +0 -5
- package/docs-MachinaOs/installation.mdx +0 -160
- package/docs-MachinaOs/introduction.mdx +0 -114
- package/docs-MachinaOs/logo/dark.svg +0 -6
- package/docs-MachinaOs/logo/light.svg +0 -6
- package/docs-MachinaOs/nodes/ai-agent.mdx +0 -216
- package/docs-MachinaOs/nodes/ai-models.mdx +0 -240
- package/docs-MachinaOs/nodes/android.mdx +0 -411
- package/docs-MachinaOs/nodes/overview.mdx +0 -181
- package/docs-MachinaOs/nodes/schedulers.mdx +0 -316
- package/docs-MachinaOs/nodes/webhooks.mdx +0 -330
- package/docs-MachinaOs/nodes/whatsapp.mdx +0 -305
- package/docs-MachinaOs/quickstart.mdx +0 -119
- package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +0 -177
- package/docs-MachinaOs/tutorials/android-automation.mdx +0 -242
- package/docs-MachinaOs/tutorials/first-workflow.mdx +0 -134
- package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +0 -185
- package/nul +0 -0
- package/scripts/check-ports.ps1 +0 -33
- package/scripts/kill-port.ps1 +0 -154
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
// Common utility functions for formatting and clipboard operations
|
|
2
|
-
import { message } from 'antd';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Copy text to clipboard with error handling
|
|
6
|
-
*/
|
|
7
|
-
export const copyToClipboard = async (data: any, successMessage?: string): Promise<boolean> => {
|
|
8
|
-
try {
|
|
9
|
-
const text = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
10
|
-
await navigator.clipboard.writeText(text);
|
|
11
|
-
if (successMessage) {
|
|
12
|
-
message.success(successMessage);
|
|
13
|
-
}
|
|
14
|
-
return true;
|
|
15
|
-
} catch (error) {
|
|
16
|
-
console.error('Failed to copy to clipboard:', error);
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Format object as JSON string
|
|
23
|
-
*/
|
|
24
|
-
export const formatJson = (obj: any, compact: boolean = false): string => {
|
|
25
|
-
return JSON.stringify(obj, null, compact ? 0 : 2);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Format timestamp to locale string
|
|
30
|
-
*/
|
|
31
|
-
export const formatTimestamp = (timestamp: string | number | Date): string => {
|
|
32
|
-
return new Date(timestamp).toLocaleString();
|
|
1
|
+
// Common utility functions for formatting and clipboard operations
|
|
2
|
+
import { message } from 'antd';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Copy text to clipboard with error handling
|
|
6
|
+
*/
|
|
7
|
+
export const copyToClipboard = async (data: any, successMessage?: string): Promise<boolean> => {
|
|
8
|
+
try {
|
|
9
|
+
const text = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
10
|
+
await navigator.clipboard.writeText(text);
|
|
11
|
+
if (successMessage) {
|
|
12
|
+
message.success(successMessage);
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.error('Failed to copy to clipboard:', error);
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Format object as JSON string
|
|
23
|
+
*/
|
|
24
|
+
export const formatJson = (obj: any, compact: boolean = false): string => {
|
|
25
|
+
return JSON.stringify(obj, null, compact ? 0 : 2);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Format timestamp to locale string
|
|
30
|
+
*/
|
|
31
|
+
export const formatTimestamp = (timestamp: string | number | Date): string => {
|
|
32
|
+
return new Date(timestamp).toLocaleString();
|
|
33
33
|
};
|
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
// Google Maps API Loader - Singleton pattern to prevent multiple script loads
|
|
2
|
-
// Ensures Google Maps JavaScript API is loaded only once per page
|
|
3
|
-
|
|
4
|
-
interface GoogleMapsLoaderOptions {
|
|
5
|
-
apiKey: string;
|
|
6
|
-
libraries?: string[];
|
|
7
|
-
version?: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
class GoogleMapsLoader {
|
|
11
|
-
private static instance: GoogleMapsLoader;
|
|
12
|
-
private loadPromise: Promise<void> | null = null;
|
|
13
|
-
private isLoaded = false;
|
|
14
|
-
private isLoading = false;
|
|
15
|
-
|
|
16
|
-
private constructor() {}
|
|
17
|
-
|
|
18
|
-
public static getInstance(): GoogleMapsLoader {
|
|
19
|
-
if (!GoogleMapsLoader.instance) {
|
|
20
|
-
GoogleMapsLoader.instance = new GoogleMapsLoader();
|
|
21
|
-
}
|
|
22
|
-
return GoogleMapsLoader.instance;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public async loadGoogleMaps(options: GoogleMapsLoaderOptions): Promise<void> {
|
|
26
|
-
// If already loaded, resolve immediately
|
|
27
|
-
if (this.isLoaded) {
|
|
28
|
-
return Promise.resolve();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// If currently loading, return the existing promise
|
|
32
|
-
if (this.isLoading && this.loadPromise) {
|
|
33
|
-
return this.loadPromise;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Check if Google Maps is already available (loaded externally)
|
|
37
|
-
if (typeof window !== 'undefined' && window.google?.maps) {
|
|
38
|
-
this.isLoaded = true;
|
|
39
|
-
return Promise.resolve();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Start loading
|
|
43
|
-
this.isLoading = true;
|
|
44
|
-
this.loadPromise = this.createLoadPromise(options);
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
await this.loadPromise;
|
|
48
|
-
this.isLoaded = true;
|
|
49
|
-
this.isLoading = false;
|
|
50
|
-
} catch (error) {
|
|
51
|
-
this.isLoading = false;
|
|
52
|
-
this.loadPromise = null;
|
|
53
|
-
throw error;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
private createLoadPromise(options: GoogleMapsLoaderOptions): Promise<void> {
|
|
58
|
-
return new Promise((resolve, reject) => {
|
|
59
|
-
// Check if script already exists
|
|
60
|
-
const existingScript = document.querySelector('script[src*="maps.googleapis.com"]');
|
|
61
|
-
if (existingScript) {
|
|
62
|
-
// Script exists, wait for it to load
|
|
63
|
-
if (window.google?.maps) {
|
|
64
|
-
resolve();
|
|
65
|
-
} else {
|
|
66
|
-
existingScript.addEventListener('load', () => resolve());
|
|
67
|
-
existingScript.addEventListener('error', (error) => reject(error));
|
|
68
|
-
}
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Create new script element
|
|
73
|
-
const script = document.createElement('script');
|
|
74
|
-
script.type = 'text/javascript';
|
|
75
|
-
script.async = true;
|
|
76
|
-
script.defer = true;
|
|
77
|
-
|
|
78
|
-
// Build URL with parameters
|
|
79
|
-
const { apiKey, libraries = ['geometry'], version = 'weekly' } = options;
|
|
80
|
-
const params = new URLSearchParams({
|
|
81
|
-
key: apiKey,
|
|
82
|
-
libraries: libraries.join(','),
|
|
83
|
-
v: version,
|
|
84
|
-
callback: '__googleMapsCallback__'
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
script.src = `https://maps.googleapis.com/maps/api/js?${params.toString()}`;
|
|
88
|
-
|
|
89
|
-
// Set up callback
|
|
90
|
-
(window as any).__googleMapsCallback__ = () => {
|
|
91
|
-
delete (window as any).__googleMapsCallback__;
|
|
92
|
-
resolve();
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
// Handle errors
|
|
96
|
-
script.onerror = (error) => {
|
|
97
|
-
delete (window as any).__googleMapsCallback__;
|
|
98
|
-
reject(new Error(`Failed to load Google Maps API: ${error}`));
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
// Add script to document
|
|
102
|
-
document.head.appendChild(script);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
public isGoogleMapsLoaded(): boolean {
|
|
107
|
-
return this.isLoaded || (typeof window !== 'undefined' && !!window.google?.maps);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public getGoogleMaps(): typeof google.maps | null {
|
|
111
|
-
if (typeof window !== 'undefined' && window.google?.maps) {
|
|
112
|
-
return window.google.maps;
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Export singleton instance and convenience functions
|
|
119
|
-
export const googleMapsLoader = GoogleMapsLoader.getInstance();
|
|
120
|
-
|
|
121
|
-
export const loadGoogleMaps = (options: GoogleMapsLoaderOptions): Promise<void> => {
|
|
122
|
-
return googleMapsLoader.loadGoogleMaps(options);
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export const isGoogleMapsLoaded = (): boolean => {
|
|
126
|
-
return googleMapsLoader.isGoogleMapsLoaded();
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export const getGoogleMaps = (): typeof google.maps | null => {
|
|
130
|
-
return googleMapsLoader.getGoogleMaps();
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
// Type declarations for Google Maps
|
|
134
|
-
declare global {
|
|
135
|
-
interface Window {
|
|
136
|
-
google?: {
|
|
137
|
-
maps: typeof google.maps;
|
|
138
|
-
};
|
|
139
|
-
}
|
|
1
|
+
// Google Maps API Loader - Singleton pattern to prevent multiple script loads
|
|
2
|
+
// Ensures Google Maps JavaScript API is loaded only once per page
|
|
3
|
+
|
|
4
|
+
interface GoogleMapsLoaderOptions {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
libraries?: string[];
|
|
7
|
+
version?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
class GoogleMapsLoader {
|
|
11
|
+
private static instance: GoogleMapsLoader;
|
|
12
|
+
private loadPromise: Promise<void> | null = null;
|
|
13
|
+
private isLoaded = false;
|
|
14
|
+
private isLoading = false;
|
|
15
|
+
|
|
16
|
+
private constructor() {}
|
|
17
|
+
|
|
18
|
+
public static getInstance(): GoogleMapsLoader {
|
|
19
|
+
if (!GoogleMapsLoader.instance) {
|
|
20
|
+
GoogleMapsLoader.instance = new GoogleMapsLoader();
|
|
21
|
+
}
|
|
22
|
+
return GoogleMapsLoader.instance;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public async loadGoogleMaps(options: GoogleMapsLoaderOptions): Promise<void> {
|
|
26
|
+
// If already loaded, resolve immediately
|
|
27
|
+
if (this.isLoaded) {
|
|
28
|
+
return Promise.resolve();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// If currently loading, return the existing promise
|
|
32
|
+
if (this.isLoading && this.loadPromise) {
|
|
33
|
+
return this.loadPromise;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check if Google Maps is already available (loaded externally)
|
|
37
|
+
if (typeof window !== 'undefined' && window.google?.maps) {
|
|
38
|
+
this.isLoaded = true;
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Start loading
|
|
43
|
+
this.isLoading = true;
|
|
44
|
+
this.loadPromise = this.createLoadPromise(options);
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
await this.loadPromise;
|
|
48
|
+
this.isLoaded = true;
|
|
49
|
+
this.isLoading = false;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
this.isLoading = false;
|
|
52
|
+
this.loadPromise = null;
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private createLoadPromise(options: GoogleMapsLoaderOptions): Promise<void> {
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
// Check if script already exists
|
|
60
|
+
const existingScript = document.querySelector('script[src*="maps.googleapis.com"]');
|
|
61
|
+
if (existingScript) {
|
|
62
|
+
// Script exists, wait for it to load
|
|
63
|
+
if (window.google?.maps) {
|
|
64
|
+
resolve();
|
|
65
|
+
} else {
|
|
66
|
+
existingScript.addEventListener('load', () => resolve());
|
|
67
|
+
existingScript.addEventListener('error', (error) => reject(error));
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Create new script element
|
|
73
|
+
const script = document.createElement('script');
|
|
74
|
+
script.type = 'text/javascript';
|
|
75
|
+
script.async = true;
|
|
76
|
+
script.defer = true;
|
|
77
|
+
|
|
78
|
+
// Build URL with parameters
|
|
79
|
+
const { apiKey, libraries = ['geometry'], version = 'weekly' } = options;
|
|
80
|
+
const params = new URLSearchParams({
|
|
81
|
+
key: apiKey,
|
|
82
|
+
libraries: libraries.join(','),
|
|
83
|
+
v: version,
|
|
84
|
+
callback: '__googleMapsCallback__'
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
script.src = `https://maps.googleapis.com/maps/api/js?${params.toString()}`;
|
|
88
|
+
|
|
89
|
+
// Set up callback
|
|
90
|
+
(window as any).__googleMapsCallback__ = () => {
|
|
91
|
+
delete (window as any).__googleMapsCallback__;
|
|
92
|
+
resolve();
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// Handle errors
|
|
96
|
+
script.onerror = (error) => {
|
|
97
|
+
delete (window as any).__googleMapsCallback__;
|
|
98
|
+
reject(new Error(`Failed to load Google Maps API: ${error}`));
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// Add script to document
|
|
102
|
+
document.head.appendChild(script);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public isGoogleMapsLoaded(): boolean {
|
|
107
|
+
return this.isLoaded || (typeof window !== 'undefined' && !!window.google?.maps);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public getGoogleMaps(): typeof google.maps | null {
|
|
111
|
+
if (typeof window !== 'undefined' && window.google?.maps) {
|
|
112
|
+
return window.google.maps;
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Export singleton instance and convenience functions
|
|
119
|
+
export const googleMapsLoader = GoogleMapsLoader.getInstance();
|
|
120
|
+
|
|
121
|
+
export const loadGoogleMaps = (options: GoogleMapsLoaderOptions): Promise<void> => {
|
|
122
|
+
return googleMapsLoader.loadGoogleMaps(options);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export const isGoogleMapsLoaded = (): boolean => {
|
|
126
|
+
return googleMapsLoader.isGoogleMapsLoaded();
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export const getGoogleMaps = (): typeof google.maps | null => {
|
|
130
|
+
return googleMapsLoader.getGoogleMaps();
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// Type declarations for Google Maps
|
|
134
|
+
declare global {
|
|
135
|
+
interface Window {
|
|
136
|
+
google?: {
|
|
137
|
+
maps: typeof google.maps;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
140
|
}
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import { INodeTypeDescription, INodeProperties } from '../types/INodeProperties';
|
|
2
|
-
|
|
3
|
-
// Location parameter utilities
|
|
4
|
-
export interface LocationParams {
|
|
5
|
-
latParam: INodeProperties | null;
|
|
6
|
-
lngParam: INodeProperties | null;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// Find coordinate parameters in node definition
|
|
10
|
-
export const getCoordinateParams = (nodeDefinition: INodeTypeDescription | null): LocationParams => {
|
|
11
|
-
if (!nodeDefinition) return { latParam: null, lngParam: null };
|
|
12
|
-
|
|
13
|
-
const latParam = nodeDefinition.properties?.find((p: any) => {
|
|
14
|
-
const name = p.name.toLowerCase();
|
|
15
|
-
return name.includes('lat') || name === 'latitude';
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
const lngParam = nodeDefinition.properties?.find((p: any) => {
|
|
19
|
-
const name = p.name.toLowerCase();
|
|
20
|
-
return name.includes('lng') || name.includes('lon') || name === 'longitude';
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
return { latParam: latParam || null, lngParam: lngParam || null };
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
// Get current coordinates from parameters
|
|
27
|
-
export const getCurrentCoordinates = (
|
|
28
|
-
parameters: Record<string, any>,
|
|
29
|
-
locationParams: LocationParams
|
|
30
|
-
) => {
|
|
31
|
-
const { latParam, lngParam } = locationParams;
|
|
32
|
-
|
|
33
|
-
const lat = (latParam && parameters[latParam.name]) || latParam?.default || 40.7128;
|
|
34
|
-
const lng = (lngParam && parameters[lngParam.name]) || lngParam?.default || -74.0060;
|
|
35
|
-
|
|
36
|
-
return { lat, lng };
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// Get map display parameters
|
|
40
|
-
export const getMapDisplayParams = (parameters: Record<string, any>) => {
|
|
41
|
-
const zoom = parameters.zoom || 13;
|
|
42
|
-
const mapTypeId = parameters.mapTypeId || 'ROADMAP';
|
|
43
|
-
|
|
44
|
-
return { zoom, mapTypeId };
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// Get Google Maps API key with fallbacks
|
|
48
|
-
export const getGoogleMapsApiKey = (): string | undefined => {
|
|
49
|
-
// Note: For stored API keys, use ApiKeyManagerService.getStoredApiKeyAsync('google_maps')
|
|
50
|
-
// This function now only returns the environment variable fallback
|
|
51
|
-
return (import.meta as any).env?.VITE_GOOGLE_MAPS_API_KEY || undefined;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// Create location update handler
|
|
55
|
-
export const createLocationUpdateHandler = (
|
|
56
|
-
locationParams: LocationParams,
|
|
57
|
-
onParameterChange: (paramName: string, value: any) => void
|
|
58
|
-
) => {
|
|
59
|
-
return (lat: number, lng: number) => {
|
|
60
|
-
const { latParam, lngParam } = locationParams;
|
|
61
|
-
|
|
62
|
-
if (latParam) {
|
|
63
|
-
onParameterChange(latParam.name, lat);
|
|
64
|
-
}
|
|
65
|
-
if (lngParam) {
|
|
66
|
-
onParameterChange(lngParam.name, lng);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
// Check if a node is location-related
|
|
72
|
-
export const isLocationNode = (nodeDefinition: INodeTypeDescription | null): boolean => {
|
|
73
|
-
if (!nodeDefinition) return false;
|
|
74
|
-
|
|
75
|
-
const isCreateMap = nodeDefinition.name === 'createMap';
|
|
76
|
-
const hasLocationGroup = nodeDefinition.group?.includes('location') ?? false;
|
|
77
|
-
const hasCoordinates = getCoordinateParams(nodeDefinition).latParam !== null;
|
|
78
|
-
|
|
79
|
-
return isCreateMap || hasLocationGroup || hasCoordinates;
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
// Check if node should show maps preview
|
|
83
|
-
export const shouldShowMapsPreview = (nodeDefinition: INodeTypeDescription | null): boolean => {
|
|
84
|
-
return nodeDefinition?.name === 'createMap';
|
|
1
|
+
import { INodeTypeDescription, INodeProperties } from '../types/INodeProperties';
|
|
2
|
+
|
|
3
|
+
// Location parameter utilities
|
|
4
|
+
export interface LocationParams {
|
|
5
|
+
latParam: INodeProperties | null;
|
|
6
|
+
lngParam: INodeProperties | null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Find coordinate parameters in node definition
|
|
10
|
+
export const getCoordinateParams = (nodeDefinition: INodeTypeDescription | null): LocationParams => {
|
|
11
|
+
if (!nodeDefinition) return { latParam: null, lngParam: null };
|
|
12
|
+
|
|
13
|
+
const latParam = nodeDefinition.properties?.find((p: any) => {
|
|
14
|
+
const name = p.name.toLowerCase();
|
|
15
|
+
return name.includes('lat') || name === 'latitude';
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const lngParam = nodeDefinition.properties?.find((p: any) => {
|
|
19
|
+
const name = p.name.toLowerCase();
|
|
20
|
+
return name.includes('lng') || name.includes('lon') || name === 'longitude';
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return { latParam: latParam || null, lngParam: lngParam || null };
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Get current coordinates from parameters
|
|
27
|
+
export const getCurrentCoordinates = (
|
|
28
|
+
parameters: Record<string, any>,
|
|
29
|
+
locationParams: LocationParams
|
|
30
|
+
) => {
|
|
31
|
+
const { latParam, lngParam } = locationParams;
|
|
32
|
+
|
|
33
|
+
const lat = (latParam && parameters[latParam.name]) || latParam?.default || 40.7128;
|
|
34
|
+
const lng = (lngParam && parameters[lngParam.name]) || lngParam?.default || -74.0060;
|
|
35
|
+
|
|
36
|
+
return { lat, lng };
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Get map display parameters
|
|
40
|
+
export const getMapDisplayParams = (parameters: Record<string, any>) => {
|
|
41
|
+
const zoom = parameters.zoom || 13;
|
|
42
|
+
const mapTypeId = parameters.mapTypeId || 'ROADMAP';
|
|
43
|
+
|
|
44
|
+
return { zoom, mapTypeId };
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Get Google Maps API key with fallbacks
|
|
48
|
+
export const getGoogleMapsApiKey = (): string | undefined => {
|
|
49
|
+
// Note: For stored API keys, use ApiKeyManagerService.getStoredApiKeyAsync('google_maps')
|
|
50
|
+
// This function now only returns the environment variable fallback
|
|
51
|
+
return (import.meta as any).env?.VITE_GOOGLE_MAPS_API_KEY || undefined;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Create location update handler
|
|
55
|
+
export const createLocationUpdateHandler = (
|
|
56
|
+
locationParams: LocationParams,
|
|
57
|
+
onParameterChange: (paramName: string, value: any) => void
|
|
58
|
+
) => {
|
|
59
|
+
return (lat: number, lng: number) => {
|
|
60
|
+
const { latParam, lngParam } = locationParams;
|
|
61
|
+
|
|
62
|
+
if (latParam) {
|
|
63
|
+
onParameterChange(latParam.name, lat);
|
|
64
|
+
}
|
|
65
|
+
if (lngParam) {
|
|
66
|
+
onParameterChange(lngParam.name, lng);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Check if a node is location-related
|
|
72
|
+
export const isLocationNode = (nodeDefinition: INodeTypeDescription | null): boolean => {
|
|
73
|
+
if (!nodeDefinition) return false;
|
|
74
|
+
|
|
75
|
+
const isCreateMap = nodeDefinition.name === 'createMap';
|
|
76
|
+
const hasLocationGroup = nodeDefinition.group?.includes('location') ?? false;
|
|
77
|
+
const hasCoordinates = getCoordinateParams(nodeDefinition).latParam !== null;
|
|
78
|
+
|
|
79
|
+
return isCreateMap || hasLocationGroup || hasCoordinates;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Check if node should show maps preview
|
|
83
|
+
export const shouldShowMapsPreview = (nodeDefinition: INodeTypeDescription | null): boolean => {
|
|
84
|
+
return nodeDefinition?.name === 'createMap';
|
|
85
85
|
};
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
// Utility functions for node operations
|
|
2
|
-
|
|
3
|
-
// Generate short node name from nodeType for parameter references
|
|
4
|
-
export const getShortNodeName = (nodeType: string): string => {
|
|
5
|
-
const typeMap: { [key: string]: string } = {
|
|
6
|
-
// AI Chat Models
|
|
7
|
-
'openaiChatModel': 'openai',
|
|
8
|
-
'anthropicChatModel': 'claude',
|
|
9
|
-
'geminiChatModel': 'gemini',
|
|
10
|
-
// AI Agents
|
|
11
|
-
'aiAgent': 'ai',
|
|
12
|
-
// Location Services
|
|
13
|
-
'createMap': 'map',
|
|
14
|
-
'addLocations': 'location',
|
|
15
|
-
'showNearbyPlaces': 'places'
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// If we have a specific mapping, use it
|
|
19
|
-
if (typeMap[nodeType]) {
|
|
20
|
-
return typeMap[nodeType];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Otherwise, create a simplified version by removing capitals and common suffixes
|
|
24
|
-
let simplified = nodeType
|
|
25
|
-
.replace(/[A-Z]/g, '') // Remove capital letters
|
|
26
|
-
.replace(/(Get|Set|Stop|Play|Record|Control)$/i, '') // Remove common suffixes
|
|
27
|
-
.toLowerCase();
|
|
28
|
-
|
|
29
|
-
// Return simplified name or fallback to 'node'
|
|
30
|
-
return simplified || 'node';
|
|
1
|
+
// Utility functions for node operations
|
|
2
|
+
|
|
3
|
+
// Generate short node name from nodeType for parameter references
|
|
4
|
+
export const getShortNodeName = (nodeType: string): string => {
|
|
5
|
+
const typeMap: { [key: string]: string } = {
|
|
6
|
+
// AI Chat Models
|
|
7
|
+
'openaiChatModel': 'openai',
|
|
8
|
+
'anthropicChatModel': 'claude',
|
|
9
|
+
'geminiChatModel': 'gemini',
|
|
10
|
+
// AI Agents
|
|
11
|
+
'aiAgent': 'ai',
|
|
12
|
+
// Location Services
|
|
13
|
+
'createMap': 'map',
|
|
14
|
+
'addLocations': 'location',
|
|
15
|
+
'showNearbyPlaces': 'places'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// If we have a specific mapping, use it
|
|
19
|
+
if (typeMap[nodeType]) {
|
|
20
|
+
return typeMap[nodeType];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Otherwise, create a simplified version by removing capitals and common suffixes
|
|
24
|
+
let simplified = nodeType
|
|
25
|
+
.replace(/[A-Z]/g, '') // Remove capital letters
|
|
26
|
+
.replace(/(Get|Set|Stop|Play|Record|Control)$/i, '') // Remove common suffixes
|
|
27
|
+
.toLowerCase();
|
|
28
|
+
|
|
29
|
+
// Return simplified name or fallback to 'node'
|
|
30
|
+
return simplified || 'node';
|
|
31
31
|
};
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { Node, Edge } from 'reactflow';
|
|
2
|
-
|
|
3
|
-
export const generateWorkflowId = (): string =>
|
|
4
|
-
`workflow-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
5
|
-
|
|
6
|
-
export const sanitizeNodesForComparison = (nodes: Node[]): Node[] =>
|
|
7
|
-
nodes.map(n => ({ ...n, selected: undefined, dragging: undefined }));
|
|
8
|
-
|
|
9
|
-
export const sanitizeEdgesForComparison = (edges: Edge[]): Edge[] =>
|
|
10
|
-
edges.map(e => ({ ...e, selected: undefined }));
|
|
11
|
-
|
|
12
|
-
export const serializeDateFields = <T extends { createdAt: Date; lastModified: Date }>(obj: T) => ({
|
|
13
|
-
...obj,
|
|
14
|
-
createdAt: obj.createdAt.toISOString(),
|
|
15
|
-
lastModified: obj.lastModified.toISOString(),
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export const deserializeDateFields = <T extends { createdAt: string; lastModified: string }>(obj: T) => ({
|
|
19
|
-
...obj,
|
|
20
|
-
createdAt: new Date(obj.createdAt),
|
|
21
|
-
lastModified: new Date(obj.lastModified),
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
export const snapToGrid = (position: { x: number; y: number }, gridSize = 20) => ({
|
|
25
|
-
x: Math.round(position.x / gridSize) * gridSize,
|
|
26
|
-
y: Math.round(position.y / gridSize) * gridSize,
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
export const getDefaultNodePosition = (nodeCount: number): { x: number; y: number } =>
|
|
1
|
+
import { Node, Edge } from 'reactflow';
|
|
2
|
+
|
|
3
|
+
export const generateWorkflowId = (): string =>
|
|
4
|
+
`workflow-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
5
|
+
|
|
6
|
+
export const sanitizeNodesForComparison = (nodes: Node[]): Node[] =>
|
|
7
|
+
nodes.map(n => ({ ...n, selected: undefined, dragging: undefined }));
|
|
8
|
+
|
|
9
|
+
export const sanitizeEdgesForComparison = (edges: Edge[]): Edge[] =>
|
|
10
|
+
edges.map(e => ({ ...e, selected: undefined }));
|
|
11
|
+
|
|
12
|
+
export const serializeDateFields = <T extends { createdAt: Date; lastModified: Date }>(obj: T) => ({
|
|
13
|
+
...obj,
|
|
14
|
+
createdAt: obj.createdAt.toISOString(),
|
|
15
|
+
lastModified: obj.lastModified.toISOString(),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const deserializeDateFields = <T extends { createdAt: string; lastModified: string }>(obj: T) => ({
|
|
19
|
+
...obj,
|
|
20
|
+
createdAt: new Date(obj.createdAt),
|
|
21
|
+
lastModified: new Date(obj.lastModified),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const snapToGrid = (position: { x: number; y: number }, gridSize = 20) => ({
|
|
25
|
+
x: Math.round(position.x / gridSize) * gridSize,
|
|
26
|
+
y: Math.round(position.y / gridSize) * gridSize,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const getDefaultNodePosition = (nodeCount: number): { x: number; y: number } =>
|
|
30
30
|
nodeCount === 0 ? { x: 100, y: 200 } : { x: 0, y: 0 };
|
package/client/src/vite-env.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/// <reference types="vite/client" />
|
|
2
|
-
|
|
3
|
-
interface ImportMetaEnv {
|
|
4
|
-
readonly VITE_ANDROID_RELAY_URL: string;
|
|
5
|
-
readonly VITE_AUTH_ENABLED: string;
|
|
6
|
-
readonly VITE_CLIENT_PORT: string;
|
|
7
|
-
readonly VITE_PYTHON_BACKEND_URL: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
interface ImportMeta {
|
|
11
|
-
readonly env: ImportMetaEnv;
|
|
12
|
-
}
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
interface ImportMetaEnv {
|
|
4
|
+
readonly VITE_ANDROID_RELAY_URL: string;
|
|
5
|
+
readonly VITE_AUTH_ENABLED: string;
|
|
6
|
+
readonly VITE_CLIENT_PORT: string;
|
|
7
|
+
readonly VITE_PYTHON_BACKEND_URL: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface ImportMeta {
|
|
11
|
+
readonly env: ImportMetaEnv;
|
|
12
|
+
}
|