machinaos 0.0.1
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 -0
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/bin/cli.js +159 -0
- package/client/.dockerignore +45 -0
- package/client/Dockerfile +68 -0
- package/client/eslint.config.js +29 -0
- package/client/index.html +13 -0
- package/client/nginx.conf +66 -0
- package/client/package.json +48 -0
- package/client/src/App.tsx +27 -0
- package/client/src/Dashboard.tsx +1173 -0
- package/client/src/ParameterPanel.tsx +301 -0
- package/client/src/components/AIAgentNode.tsx +321 -0
- package/client/src/components/APIKeyValidator.tsx +118 -0
- package/client/src/components/ClaudeChatModelNode.tsx +18 -0
- package/client/src/components/ConditionalEdge.tsx +189 -0
- package/client/src/components/CredentialsModal.tsx +306 -0
- package/client/src/components/EdgeConditionEditor.tsx +443 -0
- package/client/src/components/GeminiChatModelNode.tsx +18 -0
- package/client/src/components/GenericNode.tsx +357 -0
- package/client/src/components/LocationParameterPanel.tsx +154 -0
- package/client/src/components/ModelNode.tsx +286 -0
- package/client/src/components/OpenAIChatModelNode.tsx +18 -0
- package/client/src/components/OutputPanel.tsx +471 -0
- package/client/src/components/ParameterRenderer.tsx +1874 -0
- package/client/src/components/SkillEditorModal.tsx +417 -0
- package/client/src/components/SquareNode.tsx +797 -0
- package/client/src/components/StartNode.tsx +250 -0
- package/client/src/components/ToolkitNode.tsx +365 -0
- package/client/src/components/TriggerNode.tsx +463 -0
- package/client/src/components/auth/LoginPage.tsx +247 -0
- package/client/src/components/auth/ProtectedRoute.tsx +59 -0
- package/client/src/components/base/BaseChatModelNode.tsx +271 -0
- package/client/src/components/icons/AIProviderIcons.tsx +50 -0
- package/client/src/components/maps/GoogleMapsPicker.tsx +137 -0
- package/client/src/components/maps/MapsPreviewPanel.tsx +110 -0
- package/client/src/components/maps/index.ts +26 -0
- package/client/src/components/parameterPanel/InputSection.tsx +1094 -0
- package/client/src/components/parameterPanel/LocationPanelLayout.tsx +65 -0
- package/client/src/components/parameterPanel/MapsSection.tsx +92 -0
- package/client/src/components/parameterPanel/MiddleSection.tsx +571 -0
- package/client/src/components/parameterPanel/OutputSection.tsx +81 -0
- package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +82 -0
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -0
- package/client/src/components/parameterPanel/index.ts +42 -0
- package/client/src/components/shared/DataPanel.tsx +142 -0
- package/client/src/components/shared/JSONTreeRenderer.tsx +106 -0
- package/client/src/components/ui/AIResultModal.tsx +204 -0
- package/client/src/components/ui/AndroidSettingsPanel.tsx +401 -0
- package/client/src/components/ui/CodeEditor.tsx +81 -0
- package/client/src/components/ui/CollapsibleSection.tsx +88 -0
- package/client/src/components/ui/ComponentItem.tsx +154 -0
- package/client/src/components/ui/ComponentPalette.tsx +321 -0
- package/client/src/components/ui/ConsolePanel.tsx +1074 -0
- package/client/src/components/ui/ErrorBoundary.tsx +196 -0
- package/client/src/components/ui/InputNodesPanel.tsx +204 -0
- package/client/src/components/ui/MapSelector.tsx +314 -0
- package/client/src/components/ui/Modal.tsx +149 -0
- package/client/src/components/ui/NodeContextMenu.tsx +192 -0
- package/client/src/components/ui/NodeOutputPanel.tsx +1150 -0
- package/client/src/components/ui/OutputDisplayPanel.tsx +381 -0
- package/client/src/components/ui/SettingsPanel.tsx +243 -0
- package/client/src/components/ui/TopToolbar.tsx +736 -0
- package/client/src/components/ui/WhatsAppSettingsPanel.tsx +345 -0
- package/client/src/components/ui/WorkflowSidebar.tsx +294 -0
- package/client/src/config/antdTheme.ts +186 -0
- package/client/src/config/api.ts +54 -0
- package/client/src/contexts/AuthContext.tsx +221 -0
- package/client/src/contexts/ThemeContext.tsx +42 -0
- package/client/src/contexts/WebSocketContext.tsx +1971 -0
- package/client/src/factories/baseChatModelFactory.ts +256 -0
- package/client/src/hooks/useAndroidOperations.ts +164 -0
- package/client/src/hooks/useApiKeyValidation.ts +107 -0
- package/client/src/hooks/useApiKeys.ts +238 -0
- package/client/src/hooks/useAppTheme.ts +17 -0
- package/client/src/hooks/useComponentPalette.ts +51 -0
- package/client/src/hooks/useCopyPaste.ts +155 -0
- package/client/src/hooks/useDragAndDrop.ts +124 -0
- package/client/src/hooks/useDragVariable.ts +88 -0
- package/client/src/hooks/useExecution.ts +313 -0
- package/client/src/hooks/useParameterPanel.ts +176 -0
- package/client/src/hooks/useReactFlowNodes.ts +189 -0
- package/client/src/hooks/useToolSchema.ts +209 -0
- package/client/src/hooks/useWhatsApp.ts +196 -0
- package/client/src/hooks/useWorkflowManagement.ts +46 -0
- package/client/src/index.css +315 -0
- package/client/src/main.tsx +19 -0
- package/client/src/nodeDefinitions/aiAgentNodes.ts +336 -0
- package/client/src/nodeDefinitions/aiModelNodes.ts +340 -0
- package/client/src/nodeDefinitions/androidDeviceNodes.ts +140 -0
- package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -0
- package/client/src/nodeDefinitions/chatNodes.ts +135 -0
- package/client/src/nodeDefinitions/codeNodes.ts +54 -0
- package/client/src/nodeDefinitions/documentNodes.ts +379 -0
- package/client/src/nodeDefinitions/index.ts +15 -0
- package/client/src/nodeDefinitions/locationNodes.ts +463 -0
- package/client/src/nodeDefinitions/schedulerNodes.ts +220 -0
- package/client/src/nodeDefinitions/skillNodes.ts +211 -0
- package/client/src/nodeDefinitions/toolNodes.ts +198 -0
- package/client/src/nodeDefinitions/utilityNodes.ts +284 -0
- package/client/src/nodeDefinitions/whatsappNodes.ts +865 -0
- package/client/src/nodeDefinitions/workflowNodes.ts +41 -0
- package/client/src/nodeDefinitions.ts +104 -0
- package/client/src/schemas/workflowSchema.ts +264 -0
- package/client/src/services/dynamicParameterService.ts +96 -0
- package/client/src/services/execution/aiAgentExecutionService.ts +35 -0
- package/client/src/services/executionService.ts +232 -0
- package/client/src/services/workflowApi.ts +91 -0
- package/client/src/store/useAppStore.ts +582 -0
- package/client/src/styles/theme.ts +508 -0
- package/client/src/styles/zIndex.ts +17 -0
- package/client/src/types/ComponentTypes.ts +39 -0
- package/client/src/types/EdgeCondition.ts +231 -0
- package/client/src/types/INodeProperties.ts +288 -0
- package/client/src/types/NodeTypes.ts +28 -0
- package/client/src/utils/formatters.ts +33 -0
- package/client/src/utils/googleMapsLoader.ts +140 -0
- package/client/src/utils/locationUtils.ts +85 -0
- package/client/src/utils/nodeUtils.ts +31 -0
- package/client/src/utils/workflow.ts +30 -0
- package/client/src/utils/workflowExport.ts +120 -0
- package/client/src/vite-env.d.ts +12 -0
- package/client/tailwind.config.js +60 -0
- package/client/tsconfig.json +25 -0
- package/client/tsconfig.node.json +11 -0
- package/client/vite.config.js +35 -0
- package/docker-compose.prod.yml +107 -0
- package/docker-compose.yml +104 -0
- package/docs-MachinaOs/README.md +85 -0
- package/docs-MachinaOs/deployment/docker.mdx +228 -0
- package/docs-MachinaOs/deployment/production.mdx +345 -0
- package/docs-MachinaOs/docs.json +75 -0
- package/docs-MachinaOs/faq.mdx +309 -0
- package/docs-MachinaOs/favicon.svg +5 -0
- package/docs-MachinaOs/installation.mdx +160 -0
- package/docs-MachinaOs/introduction.mdx +114 -0
- package/docs-MachinaOs/logo/dark.svg +6 -0
- package/docs-MachinaOs/logo/light.svg +6 -0
- package/docs-MachinaOs/nodes/ai-agent.mdx +216 -0
- package/docs-MachinaOs/nodes/ai-models.mdx +240 -0
- package/docs-MachinaOs/nodes/android.mdx +411 -0
- package/docs-MachinaOs/nodes/overview.mdx +181 -0
- package/docs-MachinaOs/nodes/schedulers.mdx +316 -0
- package/docs-MachinaOs/nodes/webhooks.mdx +330 -0
- package/docs-MachinaOs/nodes/whatsapp.mdx +305 -0
- package/docs-MachinaOs/quickstart.mdx +119 -0
- package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +177 -0
- package/docs-MachinaOs/tutorials/android-automation.mdx +242 -0
- package/docs-MachinaOs/tutorials/first-workflow.mdx +134 -0
- package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +185 -0
- package/nul +0 -0
- package/package.json +70 -0
- package/scripts/build.js +158 -0
- package/scripts/check-ports.ps1 +33 -0
- package/scripts/clean.js +40 -0
- package/scripts/docker.js +93 -0
- package/scripts/kill-port.ps1 +154 -0
- package/scripts/start.js +210 -0
- package/scripts/stop.js +325 -0
- package/server/.dockerignore +44 -0
- package/server/Dockerfile +45 -0
- package/server/constants.py +249 -0
- package/server/core/__init__.py +1 -0
- package/server/core/cache.py +461 -0
- package/server/core/config.py +128 -0
- package/server/core/container.py +99 -0
- package/server/core/database.py +1211 -0
- package/server/core/logging.py +314 -0
- package/server/main.py +289 -0
- package/server/middleware/__init__.py +5 -0
- package/server/middleware/auth.py +89 -0
- package/server/models/__init__.py +1 -0
- package/server/models/auth.py +52 -0
- package/server/models/cache.py +24 -0
- package/server/models/database.py +211 -0
- package/server/models/nodes.py +455 -0
- package/server/package.json +9 -0
- package/server/pyproject.toml +72 -0
- package/server/requirements.txt +83 -0
- package/server/routers/__init__.py +1 -0
- package/server/routers/android.py +294 -0
- package/server/routers/auth.py +203 -0
- package/server/routers/database.py +151 -0
- package/server/routers/maps.py +142 -0
- package/server/routers/nodejs_compat.py +289 -0
- package/server/routers/webhook.py +90 -0
- package/server/routers/websocket.py +2127 -0
- package/server/routers/whatsapp.py +761 -0
- package/server/routers/workflow.py +200 -0
- package/server/services/__init__.py +1 -0
- package/server/services/ai.py +2415 -0
- package/server/services/android/__init__.py +27 -0
- package/server/services/android/broadcaster.py +114 -0
- package/server/services/android/client.py +608 -0
- package/server/services/android/manager.py +78 -0
- package/server/services/android/protocol.py +165 -0
- package/server/services/android_service.py +588 -0
- package/server/services/auth.py +131 -0
- package/server/services/chat_client.py +160 -0
- package/server/services/deployment/__init__.py +12 -0
- package/server/services/deployment/manager.py +706 -0
- package/server/services/deployment/state.py +47 -0
- package/server/services/deployment/triggers.py +275 -0
- package/server/services/event_waiter.py +785 -0
- package/server/services/execution/__init__.py +77 -0
- package/server/services/execution/cache.py +769 -0
- package/server/services/execution/conditions.py +373 -0
- package/server/services/execution/dlq.py +132 -0
- package/server/services/execution/executor.py +1351 -0
- package/server/services/execution/models.py +531 -0
- package/server/services/execution/recovery.py +235 -0
- package/server/services/handlers/__init__.py +126 -0
- package/server/services/handlers/ai.py +355 -0
- package/server/services/handlers/android.py +260 -0
- package/server/services/handlers/code.py +278 -0
- package/server/services/handlers/document.py +598 -0
- package/server/services/handlers/http.py +193 -0
- package/server/services/handlers/polyglot.py +105 -0
- package/server/services/handlers/tools.py +845 -0
- package/server/services/handlers/triggers.py +107 -0
- package/server/services/handlers/utility.py +822 -0
- package/server/services/handlers/whatsapp.py +476 -0
- package/server/services/maps.py +289 -0
- package/server/services/memory_store.py +103 -0
- package/server/services/node_executor.py +375 -0
- package/server/services/parameter_resolver.py +218 -0
- package/server/services/polyglot_client.py +169 -0
- package/server/services/scheduler.py +155 -0
- package/server/services/skill_loader.py +417 -0
- package/server/services/status_broadcaster.py +826 -0
- package/server/services/temporal/__init__.py +23 -0
- package/server/services/temporal/activities.py +344 -0
- package/server/services/temporal/client.py +76 -0
- package/server/services/temporal/executor.py +147 -0
- package/server/services/temporal/worker.py +251 -0
- package/server/services/temporal/workflow.py +355 -0
- package/server/services/temporal/ws_client.py +236 -0
- package/server/services/text.py +111 -0
- package/server/services/user_auth.py +172 -0
- package/server/services/websocket_client.py +29 -0
- package/server/services/workflow.py +597 -0
- package/server/skills/android-skill/SKILL.md +82 -0
- package/server/skills/assistant-personality/SKILL.md +45 -0
- package/server/skills/code-skill/SKILL.md +140 -0
- package/server/skills/http-skill/SKILL.md +161 -0
- package/server/skills/maps-skill/SKILL.md +170 -0
- package/server/skills/memory-skill/SKILL.md +154 -0
- package/server/skills/scheduler-skill/SKILL.md +84 -0
- package/server/skills/whatsapp-skill/SKILL.md +283 -0
- package/server/uv.lock +2916 -0
- package/server/whatsapp-rpc/.dockerignore +30 -0
- package/server/whatsapp-rpc/Dockerfile +44 -0
- package/server/whatsapp-rpc/Dockerfile.web +17 -0
- package/server/whatsapp-rpc/README.md +139 -0
- package/server/whatsapp-rpc/cli.js +95 -0
- package/server/whatsapp-rpc/configs/config.yaml +7 -0
- package/server/whatsapp-rpc/docker-compose.yml +35 -0
- package/server/whatsapp-rpc/docs/API.md +410 -0
- package/server/whatsapp-rpc/go.mod +67 -0
- package/server/whatsapp-rpc/go.sum +203 -0
- package/server/whatsapp-rpc/package.json +30 -0
- package/server/whatsapp-rpc/schema.json +1294 -0
- package/server/whatsapp-rpc/scripts/clean.cjs +66 -0
- package/server/whatsapp-rpc/scripts/cli.js +162 -0
- package/server/whatsapp-rpc/src/go/cmd/server/main.go +91 -0
- package/server/whatsapp-rpc/src/go/config/config.go +49 -0
- package/server/whatsapp-rpc/src/go/rpc/rpc.go +446 -0
- package/server/whatsapp-rpc/src/go/rpc/server.go +112 -0
- package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -0
- package/server/whatsapp-rpc/src/go/whatsapp/messages.go +390 -0
- package/server/whatsapp-rpc/src/go/whatsapp/service.go +2130 -0
- package/server/whatsapp-rpc/src/go/whatsapp/types.go +261 -0
- package/server/whatsapp-rpc/src/python/pyproject.toml +15 -0
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -0
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -0
- package/server/whatsapp-rpc/web/app.py +609 -0
- package/server/whatsapp-rpc/web/requirements.txt +6 -0
- package/server/whatsapp-rpc/web/rpc_client.py +427 -0
- package/server/whatsapp-rpc/web/static/openapi.yaml +59 -0
- package/server/whatsapp-rpc/web/templates/base.html +150 -0
- package/server/whatsapp-rpc/web/templates/contacts.html +240 -0
- package/server/whatsapp-rpc/web/templates/dashboard.html +320 -0
- package/server/whatsapp-rpc/web/templates/groups.html +328 -0
- package/server/whatsapp-rpc/web/templates/messages.html +465 -0
- package/server/whatsapp-rpc/web/templates/messaging.html +681 -0
- package/server/whatsapp-rpc/web/templates/send.html +259 -0
- package/server/whatsapp-rpc/web/templates/settings.html +459 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
package whatsapp
|
|
2
|
+
|
|
3
|
+
import "time"
|
|
4
|
+
|
|
5
|
+
// Event represents a WhatsApp service event
|
|
6
|
+
type Event struct {
|
|
7
|
+
Type string `json:"type"`
|
|
8
|
+
Data map[string]interface{} `json:"data"`
|
|
9
|
+
Time time.Time `json:"timestamp"`
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// QRCodeData represents QR code information
|
|
13
|
+
type QRCodeData struct {
|
|
14
|
+
Code string `json:"code"`
|
|
15
|
+
Filename string `json:"filename"`
|
|
16
|
+
ImageData string `json:"image_data,omitempty"` // Base64 PNG data
|
|
17
|
+
Time time.Time `json:"timestamp"`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// MessageRequest represents various message types for sending
|
|
21
|
+
type MessageRequest struct {
|
|
22
|
+
Phone string `json:"phone,omitempty"`
|
|
23
|
+
GroupID string `json:"group_id,omitempty"`
|
|
24
|
+
Message string `json:"message,omitempty"`
|
|
25
|
+
Type string `json:"type"` // text, image, document, audio, video, location, sticker, contact
|
|
26
|
+
MediaData *MediaData `json:"media_data,omitempty"`
|
|
27
|
+
Location *LocationData `json:"location,omitempty"`
|
|
28
|
+
Contact *ContactCard `json:"contact,omitempty"`
|
|
29
|
+
Reply *ReplyData `json:"reply,omitempty"`
|
|
30
|
+
Metadata map[string]string `json:"metadata,omitempty"`
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// MediaData represents media content for messages
|
|
34
|
+
type MediaData struct {
|
|
35
|
+
Data string `json:"data"` // base64 encoded data
|
|
36
|
+
MimeType string `json:"mime_type"` // image/jpeg, audio/mp3, etc.
|
|
37
|
+
Filename string `json:"filename"` // optional filename
|
|
38
|
+
Caption string `json:"caption"` // optional caption for media
|
|
39
|
+
Thumbnail string `json:"thumbnail"` // base64 encoded thumbnail (optional)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// LocationData represents location information
|
|
43
|
+
type LocationData struct {
|
|
44
|
+
Latitude float64 `json:"latitude"`
|
|
45
|
+
Longitude float64 `json:"longitude"`
|
|
46
|
+
Name string `json:"name,omitempty"` // optional location name
|
|
47
|
+
Address string `json:"address,omitempty"` // optional address
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ReplyData represents reply context for messages
|
|
51
|
+
type ReplyData struct {
|
|
52
|
+
MessageID string `json:"message_id"`
|
|
53
|
+
Sender string `json:"sender"`
|
|
54
|
+
Content string `json:"content"`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ContactCard represents a contact vCard for sharing
|
|
58
|
+
type ContactCard struct {
|
|
59
|
+
DisplayName string `json:"display_name"`
|
|
60
|
+
VCard string `json:"vcard"` // vCard format string
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ContactInfo represents comprehensive contact information
|
|
64
|
+
type ContactInfo struct {
|
|
65
|
+
JID string `json:"jid"`
|
|
66
|
+
Phone string `json:"phone"`
|
|
67
|
+
Name string `json:"name,omitempty"`
|
|
68
|
+
BusinessName string `json:"business_name,omitempty"`
|
|
69
|
+
PushName string `json:"push_name,omitempty"`
|
|
70
|
+
IsContact bool `json:"is_contact"`
|
|
71
|
+
IsBusiness bool `json:"is_business"`
|
|
72
|
+
LastSeen time.Time `json:"last_seen,omitempty"`
|
|
73
|
+
ProfilePic string `json:"profile_pic,omitempty"` // base64 encoded
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// GroupInfo represents comprehensive group information
|
|
77
|
+
type GroupInfo struct {
|
|
78
|
+
JID string `json:"jid"`
|
|
79
|
+
Name string `json:"name"`
|
|
80
|
+
Topic string `json:"topic,omitempty"`
|
|
81
|
+
Owner string `json:"owner"`
|
|
82
|
+
Participants []GroupParticipant `json:"participants"`
|
|
83
|
+
CreatedAt time.Time `json:"created_at"`
|
|
84
|
+
Size int `json:"size"`
|
|
85
|
+
IsAnnounce bool `json:"is_announce"` // Only admins can send messages
|
|
86
|
+
IsLocked bool `json:"is_locked"` // Only admins can edit group info
|
|
87
|
+
IsCommunity bool `json:"is_community"` // True if this is a community (parent group)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// GroupUpdateRequest represents parameters for updating a group
|
|
91
|
+
type GroupUpdateRequest struct {
|
|
92
|
+
GroupID string `json:"group_id"`
|
|
93
|
+
Name string `json:"name,omitempty"`
|
|
94
|
+
Topic string `json:"topic,omitempty"`
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// GroupParticipant represents a group member
|
|
98
|
+
type GroupParticipant struct {
|
|
99
|
+
JID string `json:"jid"`
|
|
100
|
+
Phone string `json:"phone"`
|
|
101
|
+
Name string `json:"name,omitempty"`
|
|
102
|
+
IsAdmin bool `json:"is_admin"`
|
|
103
|
+
IsSuperAdmin bool `json:"is_super_admin"`
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// MessageInfo represents received message information
|
|
107
|
+
type MessageInfo struct {
|
|
108
|
+
ID string `json:"id"`
|
|
109
|
+
From string `json:"from"`
|
|
110
|
+
To string `json:"to"`
|
|
111
|
+
Type string `json:"type"`
|
|
112
|
+
Content string `json:"content,omitempty"`
|
|
113
|
+
MediaInfo *ReceivedMediaInfo `json:"media_info,omitempty"`
|
|
114
|
+
Location *LocationData `json:"location,omitempty"`
|
|
115
|
+
GroupInfo *GroupMessageInfo `json:"group_info,omitempty"`
|
|
116
|
+
Reply *ReplyData `json:"reply,omitempty"`
|
|
117
|
+
Timestamp time.Time `json:"timestamp"`
|
|
118
|
+
IsFromMe bool `json:"is_from_me"`
|
|
119
|
+
Status string `json:"status"` // sent, delivered, read
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ReceivedMediaInfo represents received media message information
|
|
123
|
+
type ReceivedMediaInfo struct {
|
|
124
|
+
MimeType string `json:"mime_type"`
|
|
125
|
+
Size int64 `json:"size"`
|
|
126
|
+
Filename string `json:"filename,omitempty"`
|
|
127
|
+
Caption string `json:"caption,omitempty"`
|
|
128
|
+
URL string `json:"url"` // download URL
|
|
129
|
+
SHA256 string `json:"sha256"` // file hash
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// GroupMessageInfo represents group message context
|
|
133
|
+
type GroupMessageInfo struct {
|
|
134
|
+
GroupJID string `json:"group_jid"`
|
|
135
|
+
GroupName string `json:"group_name,omitempty"`
|
|
136
|
+
SenderJID string `json:"sender_jid"`
|
|
137
|
+
SenderName string `json:"sender_name,omitempty"`
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// PresenceInfo represents presence information
|
|
141
|
+
type PresenceInfo struct {
|
|
142
|
+
JID string `json:"jid"`
|
|
143
|
+
Status string `json:"status"` // available, unavailable, composing, paused
|
|
144
|
+
LastSeen time.Time `json:"last_seen,omitempty"`
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// WebhookConfig represents webhook configuration
|
|
148
|
+
type WebhookConfig struct {
|
|
149
|
+
URL string `json:"url"`
|
|
150
|
+
Secret string `json:"secret,omitempty"`
|
|
151
|
+
Events []string `json:"events"` // message, status, presence, etc.
|
|
152
|
+
Headers map[string]string `json:"headers"` // custom headers
|
|
153
|
+
Enabled bool `json:"enabled"`
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// MessageStatus represents delivery status
|
|
157
|
+
type MessageStatus struct {
|
|
158
|
+
ID string `json:"id"`
|
|
159
|
+
Status string `json:"status"` // sent, delivered, read
|
|
160
|
+
Timestamp time.Time `json:"timestamp"`
|
|
161
|
+
From string `json:"from"`
|
|
162
|
+
To string `json:"to"`
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ContactCheckResult represents the result of checking if a phone is on WhatsApp
|
|
166
|
+
type ContactCheckResult struct {
|
|
167
|
+
Query string `json:"query"` // Original phone number queried
|
|
168
|
+
JID string `json:"jid,omitempty"` // WhatsApp JID if registered
|
|
169
|
+
IsRegistered bool `json:"is_registered"` // Whether registered on WhatsApp
|
|
170
|
+
IsBusiness bool `json:"is_business"` // Whether it's a business account
|
|
171
|
+
BusinessName string `json:"business_name,omitempty"` // Business verified name
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ProfilePicResult represents profile picture information
|
|
175
|
+
type ProfilePicResult struct {
|
|
176
|
+
URL string `json:"url,omitempty"` // URL to download image
|
|
177
|
+
ID string `json:"id,omitempty"` // Image identifier
|
|
178
|
+
Data string `json:"data,omitempty"` // Base64-encoded image data
|
|
179
|
+
Exists bool `json:"exists"` // Whether profile picture exists
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// GroupParticipantChangeResult represents result for a single participant change
|
|
183
|
+
type GroupParticipantChangeResult struct {
|
|
184
|
+
JID string `json:"jid"`
|
|
185
|
+
Phone string `json:"phone,omitempty"`
|
|
186
|
+
Success bool `json:"success"`
|
|
187
|
+
Error string `json:"error,omitempty"`
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// GroupParticipantsResult represents batch participant change result
|
|
191
|
+
type GroupParticipantsResult struct {
|
|
192
|
+
GroupID string `json:"group_id"`
|
|
193
|
+
Action string `json:"action"` // "add" or "remove"
|
|
194
|
+
Results []GroupParticipantChangeResult `json:"results"`
|
|
195
|
+
Added int `json:"added,omitempty"`
|
|
196
|
+
Removed int `json:"removed,omitempty"`
|
|
197
|
+
Failed int `json:"failed"`
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// GroupInviteLinkResult represents invite link response
|
|
201
|
+
type GroupInviteLinkResult struct {
|
|
202
|
+
GroupID string `json:"group_id"`
|
|
203
|
+
InviteLink string `json:"invite_link"`
|
|
204
|
+
Revoked bool `json:"revoked,omitempty"`
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// RateLimitConfig represents configurable rate limiting settings for anti-ban protection
|
|
208
|
+
type RateLimitConfig struct {
|
|
209
|
+
Enabled bool `json:"enabled"`
|
|
210
|
+
|
|
211
|
+
// Message delays (milliseconds)
|
|
212
|
+
MinDelayMs int `json:"min_delay_ms"` // Minimum delay between messages (default: 3000)
|
|
213
|
+
MaxDelayMs int `json:"max_delay_ms"` // Maximum delay for randomization (default: 8000)
|
|
214
|
+
TypingDelayMs int `json:"typing_delay_ms"` // Typing indicator duration (default: 2000)
|
|
215
|
+
LinkExtraDelayMs int `json:"link_extra_delay_ms"` // Extra delay for messages with links (default: 5000)
|
|
216
|
+
|
|
217
|
+
// Rate limits
|
|
218
|
+
MaxMessagesPerMinute int `json:"max_messages_per_minute"` // Per-minute limit (default: 10)
|
|
219
|
+
MaxMessagesPerHour int `json:"max_messages_per_hour"` // Per-hour limit (default: 60)
|
|
220
|
+
MaxNewContactsPerDay int `json:"max_new_contacts_per_day"` // New contacts limit (default: 20)
|
|
221
|
+
|
|
222
|
+
// Human simulation
|
|
223
|
+
SimulateTyping bool `json:"simulate_typing"` // Send typing indicator before message
|
|
224
|
+
RandomizeDelays bool `json:"randomize_delays"` // Add random variance to delays
|
|
225
|
+
|
|
226
|
+
// Safety
|
|
227
|
+
PauseOnLowResponse bool `json:"pause_on_low_response"` // Pause if response rate < threshold
|
|
228
|
+
ResponseRateThreshold float64 `json:"response_rate_threshold"` // Min response rate (0.3 = 30%)
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// RateLimitStats represents current rate limiting statistics
|
|
232
|
+
type RateLimitStats struct {
|
|
233
|
+
MessagesSentLastMinute int `json:"messages_sent_last_minute"`
|
|
234
|
+
MessagesSentLastHour int `json:"messages_sent_last_hour"`
|
|
235
|
+
MessagesSentToday int `json:"messages_sent_today"`
|
|
236
|
+
NewContactsToday int `json:"new_contacts_today"`
|
|
237
|
+
ResponsesReceived int `json:"responses_received"`
|
|
238
|
+
ResponseRate float64 `json:"response_rate"`
|
|
239
|
+
IsPaused bool `json:"is_paused"`
|
|
240
|
+
PauseReason string `json:"pause_reason,omitempty"`
|
|
241
|
+
LastMessageTime time.Time `json:"last_message_time"`
|
|
242
|
+
NextAllowedTime time.Time `json:"next_allowed_time"`
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// DefaultRateLimitConfig returns conservative defaults for anti-ban protection
|
|
246
|
+
func DefaultRateLimitConfig() *RateLimitConfig {
|
|
247
|
+
return &RateLimitConfig{
|
|
248
|
+
Enabled: true,
|
|
249
|
+
MinDelayMs: 3000, // 3 seconds minimum
|
|
250
|
+
MaxDelayMs: 8000, // Up to 8 seconds with randomization
|
|
251
|
+
TypingDelayMs: 2000, // 2 seconds typing
|
|
252
|
+
LinkExtraDelayMs: 5000, // 5 extra seconds for links
|
|
253
|
+
MaxMessagesPerMinute: 10, // Conservative
|
|
254
|
+
MaxMessagesPerHour: 60, // 1 per minute average
|
|
255
|
+
MaxNewContactsPerDay: 20, // Critical for new accounts
|
|
256
|
+
SimulateTyping: true, // Major anti-detection
|
|
257
|
+
RandomizeDelays: true, // Avoid fixed patterns
|
|
258
|
+
PauseOnLowResponse: false, // Disabled by default
|
|
259
|
+
ResponseRateThreshold: 0.3, // 30% minimum
|
|
260
|
+
}
|
|
261
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "whatsapp-rpc"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Python client for WhatsApp RPC API"
|
|
9
|
+
requires-python = ">=3.8"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"websockets>=12.0",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
[tool.setuptools.packages.find]
|
|
15
|
+
where = ["."]
|