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.
Files changed (288) hide show
  1. package/.env.template +71 -0
  2. package/LICENSE +21 -0
  3. package/README.md +87 -0
  4. package/bin/cli.js +159 -0
  5. package/client/.dockerignore +45 -0
  6. package/client/Dockerfile +68 -0
  7. package/client/eslint.config.js +29 -0
  8. package/client/index.html +13 -0
  9. package/client/nginx.conf +66 -0
  10. package/client/package.json +48 -0
  11. package/client/src/App.tsx +27 -0
  12. package/client/src/Dashboard.tsx +1173 -0
  13. package/client/src/ParameterPanel.tsx +301 -0
  14. package/client/src/components/AIAgentNode.tsx +321 -0
  15. package/client/src/components/APIKeyValidator.tsx +118 -0
  16. package/client/src/components/ClaudeChatModelNode.tsx +18 -0
  17. package/client/src/components/ConditionalEdge.tsx +189 -0
  18. package/client/src/components/CredentialsModal.tsx +306 -0
  19. package/client/src/components/EdgeConditionEditor.tsx +443 -0
  20. package/client/src/components/GeminiChatModelNode.tsx +18 -0
  21. package/client/src/components/GenericNode.tsx +357 -0
  22. package/client/src/components/LocationParameterPanel.tsx +154 -0
  23. package/client/src/components/ModelNode.tsx +286 -0
  24. package/client/src/components/OpenAIChatModelNode.tsx +18 -0
  25. package/client/src/components/OutputPanel.tsx +471 -0
  26. package/client/src/components/ParameterRenderer.tsx +1874 -0
  27. package/client/src/components/SkillEditorModal.tsx +417 -0
  28. package/client/src/components/SquareNode.tsx +797 -0
  29. package/client/src/components/StartNode.tsx +250 -0
  30. package/client/src/components/ToolkitNode.tsx +365 -0
  31. package/client/src/components/TriggerNode.tsx +463 -0
  32. package/client/src/components/auth/LoginPage.tsx +247 -0
  33. package/client/src/components/auth/ProtectedRoute.tsx +59 -0
  34. package/client/src/components/base/BaseChatModelNode.tsx +271 -0
  35. package/client/src/components/icons/AIProviderIcons.tsx +50 -0
  36. package/client/src/components/maps/GoogleMapsPicker.tsx +137 -0
  37. package/client/src/components/maps/MapsPreviewPanel.tsx +110 -0
  38. package/client/src/components/maps/index.ts +26 -0
  39. package/client/src/components/parameterPanel/InputSection.tsx +1094 -0
  40. package/client/src/components/parameterPanel/LocationPanelLayout.tsx +65 -0
  41. package/client/src/components/parameterPanel/MapsSection.tsx +92 -0
  42. package/client/src/components/parameterPanel/MiddleSection.tsx +571 -0
  43. package/client/src/components/parameterPanel/OutputSection.tsx +81 -0
  44. package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +82 -0
  45. package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -0
  46. package/client/src/components/parameterPanel/index.ts +42 -0
  47. package/client/src/components/shared/DataPanel.tsx +142 -0
  48. package/client/src/components/shared/JSONTreeRenderer.tsx +106 -0
  49. package/client/src/components/ui/AIResultModal.tsx +204 -0
  50. package/client/src/components/ui/AndroidSettingsPanel.tsx +401 -0
  51. package/client/src/components/ui/CodeEditor.tsx +81 -0
  52. package/client/src/components/ui/CollapsibleSection.tsx +88 -0
  53. package/client/src/components/ui/ComponentItem.tsx +154 -0
  54. package/client/src/components/ui/ComponentPalette.tsx +321 -0
  55. package/client/src/components/ui/ConsolePanel.tsx +1074 -0
  56. package/client/src/components/ui/ErrorBoundary.tsx +196 -0
  57. package/client/src/components/ui/InputNodesPanel.tsx +204 -0
  58. package/client/src/components/ui/MapSelector.tsx +314 -0
  59. package/client/src/components/ui/Modal.tsx +149 -0
  60. package/client/src/components/ui/NodeContextMenu.tsx +192 -0
  61. package/client/src/components/ui/NodeOutputPanel.tsx +1150 -0
  62. package/client/src/components/ui/OutputDisplayPanel.tsx +381 -0
  63. package/client/src/components/ui/SettingsPanel.tsx +243 -0
  64. package/client/src/components/ui/TopToolbar.tsx +736 -0
  65. package/client/src/components/ui/WhatsAppSettingsPanel.tsx +345 -0
  66. package/client/src/components/ui/WorkflowSidebar.tsx +294 -0
  67. package/client/src/config/antdTheme.ts +186 -0
  68. package/client/src/config/api.ts +54 -0
  69. package/client/src/contexts/AuthContext.tsx +221 -0
  70. package/client/src/contexts/ThemeContext.tsx +42 -0
  71. package/client/src/contexts/WebSocketContext.tsx +1971 -0
  72. package/client/src/factories/baseChatModelFactory.ts +256 -0
  73. package/client/src/hooks/useAndroidOperations.ts +164 -0
  74. package/client/src/hooks/useApiKeyValidation.ts +107 -0
  75. package/client/src/hooks/useApiKeys.ts +238 -0
  76. package/client/src/hooks/useAppTheme.ts +17 -0
  77. package/client/src/hooks/useComponentPalette.ts +51 -0
  78. package/client/src/hooks/useCopyPaste.ts +155 -0
  79. package/client/src/hooks/useDragAndDrop.ts +124 -0
  80. package/client/src/hooks/useDragVariable.ts +88 -0
  81. package/client/src/hooks/useExecution.ts +313 -0
  82. package/client/src/hooks/useParameterPanel.ts +176 -0
  83. package/client/src/hooks/useReactFlowNodes.ts +189 -0
  84. package/client/src/hooks/useToolSchema.ts +209 -0
  85. package/client/src/hooks/useWhatsApp.ts +196 -0
  86. package/client/src/hooks/useWorkflowManagement.ts +46 -0
  87. package/client/src/index.css +315 -0
  88. package/client/src/main.tsx +19 -0
  89. package/client/src/nodeDefinitions/aiAgentNodes.ts +336 -0
  90. package/client/src/nodeDefinitions/aiModelNodes.ts +340 -0
  91. package/client/src/nodeDefinitions/androidDeviceNodes.ts +140 -0
  92. package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -0
  93. package/client/src/nodeDefinitions/chatNodes.ts +135 -0
  94. package/client/src/nodeDefinitions/codeNodes.ts +54 -0
  95. package/client/src/nodeDefinitions/documentNodes.ts +379 -0
  96. package/client/src/nodeDefinitions/index.ts +15 -0
  97. package/client/src/nodeDefinitions/locationNodes.ts +463 -0
  98. package/client/src/nodeDefinitions/schedulerNodes.ts +220 -0
  99. package/client/src/nodeDefinitions/skillNodes.ts +211 -0
  100. package/client/src/nodeDefinitions/toolNodes.ts +198 -0
  101. package/client/src/nodeDefinitions/utilityNodes.ts +284 -0
  102. package/client/src/nodeDefinitions/whatsappNodes.ts +865 -0
  103. package/client/src/nodeDefinitions/workflowNodes.ts +41 -0
  104. package/client/src/nodeDefinitions.ts +104 -0
  105. package/client/src/schemas/workflowSchema.ts +264 -0
  106. package/client/src/services/dynamicParameterService.ts +96 -0
  107. package/client/src/services/execution/aiAgentExecutionService.ts +35 -0
  108. package/client/src/services/executionService.ts +232 -0
  109. package/client/src/services/workflowApi.ts +91 -0
  110. package/client/src/store/useAppStore.ts +582 -0
  111. package/client/src/styles/theme.ts +508 -0
  112. package/client/src/styles/zIndex.ts +17 -0
  113. package/client/src/types/ComponentTypes.ts +39 -0
  114. package/client/src/types/EdgeCondition.ts +231 -0
  115. package/client/src/types/INodeProperties.ts +288 -0
  116. package/client/src/types/NodeTypes.ts +28 -0
  117. package/client/src/utils/formatters.ts +33 -0
  118. package/client/src/utils/googleMapsLoader.ts +140 -0
  119. package/client/src/utils/locationUtils.ts +85 -0
  120. package/client/src/utils/nodeUtils.ts +31 -0
  121. package/client/src/utils/workflow.ts +30 -0
  122. package/client/src/utils/workflowExport.ts +120 -0
  123. package/client/src/vite-env.d.ts +12 -0
  124. package/client/tailwind.config.js +60 -0
  125. package/client/tsconfig.json +25 -0
  126. package/client/tsconfig.node.json +11 -0
  127. package/client/vite.config.js +35 -0
  128. package/docker-compose.prod.yml +107 -0
  129. package/docker-compose.yml +104 -0
  130. package/docs-MachinaOs/README.md +85 -0
  131. package/docs-MachinaOs/deployment/docker.mdx +228 -0
  132. package/docs-MachinaOs/deployment/production.mdx +345 -0
  133. package/docs-MachinaOs/docs.json +75 -0
  134. package/docs-MachinaOs/faq.mdx +309 -0
  135. package/docs-MachinaOs/favicon.svg +5 -0
  136. package/docs-MachinaOs/installation.mdx +160 -0
  137. package/docs-MachinaOs/introduction.mdx +114 -0
  138. package/docs-MachinaOs/logo/dark.svg +6 -0
  139. package/docs-MachinaOs/logo/light.svg +6 -0
  140. package/docs-MachinaOs/nodes/ai-agent.mdx +216 -0
  141. package/docs-MachinaOs/nodes/ai-models.mdx +240 -0
  142. package/docs-MachinaOs/nodes/android.mdx +411 -0
  143. package/docs-MachinaOs/nodes/overview.mdx +181 -0
  144. package/docs-MachinaOs/nodes/schedulers.mdx +316 -0
  145. package/docs-MachinaOs/nodes/webhooks.mdx +330 -0
  146. package/docs-MachinaOs/nodes/whatsapp.mdx +305 -0
  147. package/docs-MachinaOs/quickstart.mdx +119 -0
  148. package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +177 -0
  149. package/docs-MachinaOs/tutorials/android-automation.mdx +242 -0
  150. package/docs-MachinaOs/tutorials/first-workflow.mdx +134 -0
  151. package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +185 -0
  152. package/nul +0 -0
  153. package/package.json +70 -0
  154. package/scripts/build.js +158 -0
  155. package/scripts/check-ports.ps1 +33 -0
  156. package/scripts/clean.js +40 -0
  157. package/scripts/docker.js +93 -0
  158. package/scripts/kill-port.ps1 +154 -0
  159. package/scripts/start.js +210 -0
  160. package/scripts/stop.js +325 -0
  161. package/server/.dockerignore +44 -0
  162. package/server/Dockerfile +45 -0
  163. package/server/constants.py +249 -0
  164. package/server/core/__init__.py +1 -0
  165. package/server/core/cache.py +461 -0
  166. package/server/core/config.py +128 -0
  167. package/server/core/container.py +99 -0
  168. package/server/core/database.py +1211 -0
  169. package/server/core/logging.py +314 -0
  170. package/server/main.py +289 -0
  171. package/server/middleware/__init__.py +5 -0
  172. package/server/middleware/auth.py +89 -0
  173. package/server/models/__init__.py +1 -0
  174. package/server/models/auth.py +52 -0
  175. package/server/models/cache.py +24 -0
  176. package/server/models/database.py +211 -0
  177. package/server/models/nodes.py +455 -0
  178. package/server/package.json +9 -0
  179. package/server/pyproject.toml +72 -0
  180. package/server/requirements.txt +83 -0
  181. package/server/routers/__init__.py +1 -0
  182. package/server/routers/android.py +294 -0
  183. package/server/routers/auth.py +203 -0
  184. package/server/routers/database.py +151 -0
  185. package/server/routers/maps.py +142 -0
  186. package/server/routers/nodejs_compat.py +289 -0
  187. package/server/routers/webhook.py +90 -0
  188. package/server/routers/websocket.py +2127 -0
  189. package/server/routers/whatsapp.py +761 -0
  190. package/server/routers/workflow.py +200 -0
  191. package/server/services/__init__.py +1 -0
  192. package/server/services/ai.py +2415 -0
  193. package/server/services/android/__init__.py +27 -0
  194. package/server/services/android/broadcaster.py +114 -0
  195. package/server/services/android/client.py +608 -0
  196. package/server/services/android/manager.py +78 -0
  197. package/server/services/android/protocol.py +165 -0
  198. package/server/services/android_service.py +588 -0
  199. package/server/services/auth.py +131 -0
  200. package/server/services/chat_client.py +160 -0
  201. package/server/services/deployment/__init__.py +12 -0
  202. package/server/services/deployment/manager.py +706 -0
  203. package/server/services/deployment/state.py +47 -0
  204. package/server/services/deployment/triggers.py +275 -0
  205. package/server/services/event_waiter.py +785 -0
  206. package/server/services/execution/__init__.py +77 -0
  207. package/server/services/execution/cache.py +769 -0
  208. package/server/services/execution/conditions.py +373 -0
  209. package/server/services/execution/dlq.py +132 -0
  210. package/server/services/execution/executor.py +1351 -0
  211. package/server/services/execution/models.py +531 -0
  212. package/server/services/execution/recovery.py +235 -0
  213. package/server/services/handlers/__init__.py +126 -0
  214. package/server/services/handlers/ai.py +355 -0
  215. package/server/services/handlers/android.py +260 -0
  216. package/server/services/handlers/code.py +278 -0
  217. package/server/services/handlers/document.py +598 -0
  218. package/server/services/handlers/http.py +193 -0
  219. package/server/services/handlers/polyglot.py +105 -0
  220. package/server/services/handlers/tools.py +845 -0
  221. package/server/services/handlers/triggers.py +107 -0
  222. package/server/services/handlers/utility.py +822 -0
  223. package/server/services/handlers/whatsapp.py +476 -0
  224. package/server/services/maps.py +289 -0
  225. package/server/services/memory_store.py +103 -0
  226. package/server/services/node_executor.py +375 -0
  227. package/server/services/parameter_resolver.py +218 -0
  228. package/server/services/polyglot_client.py +169 -0
  229. package/server/services/scheduler.py +155 -0
  230. package/server/services/skill_loader.py +417 -0
  231. package/server/services/status_broadcaster.py +826 -0
  232. package/server/services/temporal/__init__.py +23 -0
  233. package/server/services/temporal/activities.py +344 -0
  234. package/server/services/temporal/client.py +76 -0
  235. package/server/services/temporal/executor.py +147 -0
  236. package/server/services/temporal/worker.py +251 -0
  237. package/server/services/temporal/workflow.py +355 -0
  238. package/server/services/temporal/ws_client.py +236 -0
  239. package/server/services/text.py +111 -0
  240. package/server/services/user_auth.py +172 -0
  241. package/server/services/websocket_client.py +29 -0
  242. package/server/services/workflow.py +597 -0
  243. package/server/skills/android-skill/SKILL.md +82 -0
  244. package/server/skills/assistant-personality/SKILL.md +45 -0
  245. package/server/skills/code-skill/SKILL.md +140 -0
  246. package/server/skills/http-skill/SKILL.md +161 -0
  247. package/server/skills/maps-skill/SKILL.md +170 -0
  248. package/server/skills/memory-skill/SKILL.md +154 -0
  249. package/server/skills/scheduler-skill/SKILL.md +84 -0
  250. package/server/skills/whatsapp-skill/SKILL.md +283 -0
  251. package/server/uv.lock +2916 -0
  252. package/server/whatsapp-rpc/.dockerignore +30 -0
  253. package/server/whatsapp-rpc/Dockerfile +44 -0
  254. package/server/whatsapp-rpc/Dockerfile.web +17 -0
  255. package/server/whatsapp-rpc/README.md +139 -0
  256. package/server/whatsapp-rpc/cli.js +95 -0
  257. package/server/whatsapp-rpc/configs/config.yaml +7 -0
  258. package/server/whatsapp-rpc/docker-compose.yml +35 -0
  259. package/server/whatsapp-rpc/docs/API.md +410 -0
  260. package/server/whatsapp-rpc/go.mod +67 -0
  261. package/server/whatsapp-rpc/go.sum +203 -0
  262. package/server/whatsapp-rpc/package.json +30 -0
  263. package/server/whatsapp-rpc/schema.json +1294 -0
  264. package/server/whatsapp-rpc/scripts/clean.cjs +66 -0
  265. package/server/whatsapp-rpc/scripts/cli.js +162 -0
  266. package/server/whatsapp-rpc/src/go/cmd/server/main.go +91 -0
  267. package/server/whatsapp-rpc/src/go/config/config.go +49 -0
  268. package/server/whatsapp-rpc/src/go/rpc/rpc.go +446 -0
  269. package/server/whatsapp-rpc/src/go/rpc/server.go +112 -0
  270. package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -0
  271. package/server/whatsapp-rpc/src/go/whatsapp/messages.go +390 -0
  272. package/server/whatsapp-rpc/src/go/whatsapp/service.go +2130 -0
  273. package/server/whatsapp-rpc/src/go/whatsapp/types.go +261 -0
  274. package/server/whatsapp-rpc/src/python/pyproject.toml +15 -0
  275. package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -0
  276. package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -0
  277. package/server/whatsapp-rpc/web/app.py +609 -0
  278. package/server/whatsapp-rpc/web/requirements.txt +6 -0
  279. package/server/whatsapp-rpc/web/rpc_client.py +427 -0
  280. package/server/whatsapp-rpc/web/static/openapi.yaml +59 -0
  281. package/server/whatsapp-rpc/web/templates/base.html +150 -0
  282. package/server/whatsapp-rpc/web/templates/contacts.html +240 -0
  283. package/server/whatsapp-rpc/web/templates/dashboard.html +320 -0
  284. package/server/whatsapp-rpc/web/templates/groups.html +328 -0
  285. package/server/whatsapp-rpc/web/templates/messages.html +465 -0
  286. package/server/whatsapp-rpc/web/templates/messaging.html +681 -0
  287. package/server/whatsapp-rpc/web/templates/send.html +259 -0
  288. 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 = ["."]
@@ -0,0 +1,4 @@
1
+ from .client import WhatsAppRPCClient
2
+
3
+ __version__ = "1.0.0"
4
+ __all__ = ["WhatsAppRPCClient"]