django-cfg 1.4.62__py3-none-any.whl → 1.4.64__py3-none-any.whl

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.

Potentially problematic release.


This version of django-cfg might be problematic. Click here for more details.

Files changed (181) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/services/otp_service.py +3 -14
  3. django_cfg/apps/centrifugo/__init__.py +57 -0
  4. django_cfg/apps/centrifugo/admin/__init__.py +13 -0
  5. django_cfg/apps/centrifugo/admin/centrifugo_log.py +249 -0
  6. django_cfg/apps/centrifugo/admin/config.py +82 -0
  7. django_cfg/apps/centrifugo/apps.py +31 -0
  8. django_cfg/apps/centrifugo/codegen/IMPLEMENTATION_SUMMARY.md +475 -0
  9. django_cfg/apps/centrifugo/codegen/README.md +242 -0
  10. django_cfg/apps/centrifugo/codegen/USAGE.md +616 -0
  11. django_cfg/apps/centrifugo/codegen/__init__.py +19 -0
  12. django_cfg/apps/centrifugo/codegen/discovery.py +246 -0
  13. django_cfg/apps/centrifugo/codegen/generators/go_thin/__init__.py +5 -0
  14. django_cfg/apps/centrifugo/codegen/generators/go_thin/generator.py +174 -0
  15. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/README.md.j2 +182 -0
  16. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/client.go.j2 +64 -0
  17. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/go.mod.j2 +10 -0
  18. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/rpc_client.go.j2 +300 -0
  19. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/rpc_client.go.j2.old +267 -0
  20. django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/types.go.j2 +16 -0
  21. django_cfg/apps/centrifugo/codegen/generators/python_thin/__init__.py +7 -0
  22. django_cfg/apps/centrifugo/codegen/generators/python_thin/generator.py +241 -0
  23. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/README.md.j2 +128 -0
  24. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/__init__.py.j2 +22 -0
  25. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/client.py.j2 +73 -0
  26. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/models.py.j2 +19 -0
  27. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/requirements.txt.j2 +8 -0
  28. django_cfg/apps/centrifugo/codegen/generators/python_thin/templates/rpc_client.py.j2 +193 -0
  29. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/__init__.py +5 -0
  30. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/generator.py +124 -0
  31. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/README.md.j2 +38 -0
  32. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/client.ts.j2 +25 -0
  33. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/index.ts.j2 +12 -0
  34. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/package.json.j2 +13 -0
  35. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/rpc-client.ts.j2 +137 -0
  36. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/tsconfig.json.j2 +14 -0
  37. django_cfg/apps/centrifugo/codegen/generators/typescript_thin/templates/types.ts.j2 +9 -0
  38. django_cfg/apps/centrifugo/codegen/utils/__init__.py +37 -0
  39. django_cfg/apps/centrifugo/codegen/utils/naming.py +155 -0
  40. django_cfg/apps/centrifugo/codegen/utils/type_converter.py +349 -0
  41. django_cfg/apps/centrifugo/decorators.py +137 -0
  42. django_cfg/apps/centrifugo/management/__init__.py +1 -0
  43. django_cfg/apps/centrifugo/management/commands/__init__.py +1 -0
  44. django_cfg/apps/centrifugo/management/commands/generate_centrifugo_clients.py +254 -0
  45. django_cfg/apps/centrifugo/managers/__init__.py +12 -0
  46. django_cfg/apps/centrifugo/managers/centrifugo_log.py +264 -0
  47. django_cfg/apps/centrifugo/migrations/0001_initial.py +164 -0
  48. django_cfg/apps/centrifugo/migrations/__init__.py +3 -0
  49. django_cfg/apps/centrifugo/models/__init__.py +11 -0
  50. django_cfg/apps/centrifugo/models/centrifugo_log.py +210 -0
  51. django_cfg/apps/centrifugo/registry.py +106 -0
  52. django_cfg/apps/centrifugo/router.py +125 -0
  53. django_cfg/apps/centrifugo/serializers/__init__.py +40 -0
  54. django_cfg/apps/centrifugo/serializers/admin_api.py +264 -0
  55. django_cfg/apps/centrifugo/serializers/channels.py +26 -0
  56. django_cfg/apps/centrifugo/serializers/health.py +17 -0
  57. django_cfg/apps/centrifugo/serializers/publishes.py +16 -0
  58. django_cfg/apps/centrifugo/serializers/stats.py +21 -0
  59. django_cfg/apps/centrifugo/services/__init__.py +12 -0
  60. django_cfg/apps/centrifugo/services/client/__init__.py +29 -0
  61. django_cfg/apps/centrifugo/services/client/client.py +582 -0
  62. django_cfg/apps/centrifugo/services/client/config.py +236 -0
  63. django_cfg/apps/centrifugo/services/client/exceptions.py +212 -0
  64. django_cfg/apps/centrifugo/services/config_helper.py +63 -0
  65. django_cfg/apps/centrifugo/services/dashboard_notifier.py +157 -0
  66. django_cfg/apps/centrifugo/services/logging.py +677 -0
  67. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/css/dashboard.css +260 -0
  68. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_channels.mjs +313 -0
  69. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_testing.mjs +803 -0
  70. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/main.mjs +333 -0
  71. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/overview.mjs +432 -0
  72. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/testing.mjs +33 -0
  73. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/websocket.mjs +210 -0
  74. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/channels_content.html +46 -0
  75. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/live_channels_content.html +123 -0
  76. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/overview_content.html +45 -0
  77. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/publishes_content.html +84 -0
  78. django_cfg/apps/{ipc/templates/django_cfg_ipc → centrifugo/templates/django_cfg_centrifugo}/components/stat_cards.html +23 -20
  79. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/system_status.html +91 -0
  80. django_cfg/apps/{ipc/templates/django_cfg_ipc → centrifugo/templates/django_cfg_centrifugo}/components/tab_navigation.html +15 -15
  81. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/testing_tools.html +415 -0
  82. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/layout/base.html +61 -0
  83. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/pages/dashboard.html +58 -0
  84. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/tags/connection_script.html +48 -0
  85. django_cfg/apps/centrifugo/templatetags/__init__.py +1 -0
  86. django_cfg/apps/centrifugo/templatetags/centrifugo_tags.py +81 -0
  87. django_cfg/apps/centrifugo/urls.py +31 -0
  88. django_cfg/apps/{ipc → centrifugo}/urls_admin.py +4 -4
  89. django_cfg/apps/centrifugo/views/__init__.py +15 -0
  90. django_cfg/apps/centrifugo/views/admin_api.py +380 -0
  91. django_cfg/apps/centrifugo/views/dashboard.py +15 -0
  92. django_cfg/apps/centrifugo/views/monitoring.py +286 -0
  93. django_cfg/apps/centrifugo/views/testing_api.py +422 -0
  94. django_cfg/apps/support/utils/support_email_service.py +5 -18
  95. django_cfg/apps/tasks/templates/tasks/layout/base.html +0 -2
  96. django_cfg/apps/urls.py +5 -5
  97. django_cfg/core/base/config_model.py +4 -44
  98. django_cfg/core/builders/apps_builder.py +2 -2
  99. django_cfg/core/generation/integration_generators/third_party.py +8 -8
  100. django_cfg/core/utils/__init__.py +5 -0
  101. django_cfg/core/utils/url_helpers.py +73 -0
  102. django_cfg/modules/base.py +7 -7
  103. django_cfg/modules/django_client/core/__init__.py +2 -1
  104. django_cfg/modules/django_client/core/config/config.py +8 -0
  105. django_cfg/modules/django_client/core/generator/__init__.py +42 -2
  106. django_cfg/modules/django_client/core/generator/go/__init__.py +14 -0
  107. django_cfg/modules/django_client/core/generator/go/client_generator.py +124 -0
  108. django_cfg/modules/django_client/core/generator/go/files_generator.py +133 -0
  109. django_cfg/modules/django_client/core/generator/go/generator.py +203 -0
  110. django_cfg/modules/django_client/core/generator/go/models_generator.py +304 -0
  111. django_cfg/modules/django_client/core/generator/go/naming.py +193 -0
  112. django_cfg/modules/django_client/core/generator/go/operations_generator.py +134 -0
  113. django_cfg/modules/django_client/core/generator/go/templates/Makefile.j2 +38 -0
  114. django_cfg/modules/django_client/core/generator/go/templates/README.md.j2 +55 -0
  115. django_cfg/modules/django_client/core/generator/go/templates/client.go.j2 +122 -0
  116. django_cfg/modules/django_client/core/generator/go/templates/enums.go.j2 +49 -0
  117. django_cfg/modules/django_client/core/generator/go/templates/errors.go.j2 +182 -0
  118. django_cfg/modules/django_client/core/generator/go/templates/go.mod.j2 +6 -0
  119. django_cfg/modules/django_client/core/generator/go/templates/main_client.go.j2 +60 -0
  120. django_cfg/modules/django_client/core/generator/go/templates/middleware.go.j2 +388 -0
  121. django_cfg/modules/django_client/core/generator/go/templates/models.go.j2 +28 -0
  122. django_cfg/modules/django_client/core/generator/go/templates/operations_client.go.j2 +142 -0
  123. django_cfg/modules/django_client/core/generator/go/templates/validation.go.j2 +217 -0
  124. django_cfg/modules/django_client/core/generator/go/type_mapper.py +380 -0
  125. django_cfg/modules/django_client/management/commands/generate_client.py +53 -3
  126. django_cfg/modules/django_client/system/generate_mjs_clients.py +3 -1
  127. django_cfg/modules/django_client/system/schema_parser.py +5 -1
  128. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +1 -0
  129. django_cfg/modules/django_twilio/sendgrid_service.py +7 -4
  130. django_cfg/modules/django_unfold/dashboard.py +25 -19
  131. django_cfg/pyproject.toml +1 -1
  132. django_cfg/registry/core.py +2 -0
  133. django_cfg/registry/modules.py +2 -2
  134. django_cfg/static/js/api/centrifugo/client.mjs +164 -0
  135. django_cfg/static/js/api/centrifugo/index.mjs +13 -0
  136. django_cfg/static/js/api/index.mjs +5 -5
  137. django_cfg/static/js/api/types.mjs +89 -26
  138. {django_cfg-1.4.62.dist-info → django_cfg-1.4.64.dist-info}/METADATA +1 -1
  139. {django_cfg-1.4.62.dist-info → django_cfg-1.4.64.dist-info}/RECORD +142 -70
  140. django_cfg/apps/ipc/README.md +0 -346
  141. django_cfg/apps/ipc/RPC_LOGGING.md +0 -321
  142. django_cfg/apps/ipc/TESTING.md +0 -539
  143. django_cfg/apps/ipc/__init__.py +0 -60
  144. django_cfg/apps/ipc/admin.py +0 -232
  145. django_cfg/apps/ipc/apps.py +0 -98
  146. django_cfg/apps/ipc/migrations/0001_initial.py +0 -137
  147. django_cfg/apps/ipc/migrations/0002_rpclog_is_event.py +0 -23
  148. django_cfg/apps/ipc/migrations/__init__.py +0 -0
  149. django_cfg/apps/ipc/models.py +0 -229
  150. django_cfg/apps/ipc/serializers/__init__.py +0 -29
  151. django_cfg/apps/ipc/serializers/serializers.py +0 -343
  152. django_cfg/apps/ipc/services/__init__.py +0 -7
  153. django_cfg/apps/ipc/services/client/__init__.py +0 -23
  154. django_cfg/apps/ipc/services/client/client.py +0 -621
  155. django_cfg/apps/ipc/services/client/config.py +0 -214
  156. django_cfg/apps/ipc/services/client/exceptions.py +0 -201
  157. django_cfg/apps/ipc/services/logging.py +0 -239
  158. django_cfg/apps/ipc/services/monitor.py +0 -466
  159. django_cfg/apps/ipc/services/rpc_log_consumer.py +0 -330
  160. django_cfg/apps/ipc/static/django_cfg_ipc/js/dashboard/main.mjs +0 -269
  161. django_cfg/apps/ipc/static/django_cfg_ipc/js/dashboard/overview.mjs +0 -259
  162. django_cfg/apps/ipc/static/django_cfg_ipc/js/dashboard/testing.mjs +0 -375
  163. django_cfg/apps/ipc/static/django_cfg_ipc/js/dashboard.mjs.old +0 -441
  164. django_cfg/apps/ipc/templates/django_cfg_ipc/components/methods_content.html +0 -22
  165. django_cfg/apps/ipc/templates/django_cfg_ipc/components/notifications_content.html +0 -9
  166. django_cfg/apps/ipc/templates/django_cfg_ipc/components/overview_content.html +0 -9
  167. django_cfg/apps/ipc/templates/django_cfg_ipc/components/requests_content.html +0 -23
  168. django_cfg/apps/ipc/templates/django_cfg_ipc/components/system_status.html +0 -47
  169. django_cfg/apps/ipc/templates/django_cfg_ipc/components/testing_tools.html +0 -184
  170. django_cfg/apps/ipc/templates/django_cfg_ipc/layout/base.html +0 -71
  171. django_cfg/apps/ipc/templates/django_cfg_ipc/pages/dashboard.html +0 -56
  172. django_cfg/apps/ipc/urls.py +0 -23
  173. django_cfg/apps/ipc/views/__init__.py +0 -13
  174. django_cfg/apps/ipc/views/dashboard.py +0 -15
  175. django_cfg/apps/ipc/views/monitoring.py +0 -251
  176. django_cfg/apps/ipc/views/testing.py +0 -285
  177. django_cfg/static/js/api/ipc/client.mjs +0 -114
  178. django_cfg/static/js/api/ipc/index.mjs +0 -13
  179. {django_cfg-1.4.62.dist-info → django_cfg-1.4.64.dist-info}/WHEEL +0 -0
  180. {django_cfg-1.4.62.dist-info → django_cfg-1.4.64.dist-info}/entry_points.txt +0 -0
  181. {django_cfg-1.4.62.dist-info → django_cfg-1.4.64.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,164 @@
1
+ import { BaseAPIClient } from '../base.mjs';
2
+
3
+ /**
4
+ * Centrifugo API Client
5
+ * Auto-generated from OpenAPI schema
6
+ * @module centrifugo
7
+ * @extends BaseAPIClient
8
+ */
9
+ export class CentrifugoAPI extends BaseAPIClient {
10
+ /**
11
+ * Initialize centrifugo API client
12
+ * @param {string} [baseURL] - Optional base URL
13
+ */
14
+ constructor(baseURL) {
15
+ super(baseURL);
16
+ }
17
+
18
+ /**
19
+ * Get channel statistics * Returns statistics grouped by channel. * @param {Object} [params={}] - Query parameters * @param {number} [params.hours] - Statistics period in hours (default: 24) * @returns {Promise<ChannelList>} Response data
20
+ */
21
+ async centrifugoAdminApiMonitorChannelsRetrieve(params = {}) {
22
+ const path = `/cfg/centrifugo/admin/api/monitor/channels/`; return this.get(path, params); }
23
+ /**
24
+ * Get Centrifugo health status * Returns the current health status of the Centrifugo client. * @returns {Promise<HealthCheck>} Response data
25
+ */
26
+ async centrifugoAdminApiMonitorHealthRetrieve() {
27
+ const path = `/cfg/centrifugo/admin/api/monitor/health/`; return this.get(path); }
28
+ /**
29
+ * Get overview statistics * Returns overview statistics for Centrifugo publishes. * @param {Object} [params={}] - Query parameters * @param {number} [params.hours] - Statistics period in hours (default: 24) * @returns {Promise<OverviewStats>} Response data
30
+ */
31
+ async centrifugoAdminApiMonitorOverviewRetrieve(params = {}) {
32
+ const path = `/cfg/centrifugo/admin/api/monitor/overview/`; return this.get(path, params); }
33
+ /**
34
+ * Get recent publishes * Returns a list of recent Centrifugo publishes with their details. * @param {Object} [params={}] - Query parameters * @param {string} [params.channel] - Filter by channel name * @param {number} [params.count] - Number of publishes to return (default: 50, max: 200) * @returns {Promise<RecentPublishes>} Response data
35
+ */
36
+ async centrifugoAdminApiMonitorPublishesRetrieve(params = {}) {
37
+ const path = `/cfg/centrifugo/admin/api/monitor/publishes/`; return this.get(path, params); }
38
+ /**
39
+ * Get connection token for dashboard * Returns JWT token and config for WebSocket connection to Centrifugo. * @returns {Promise<Object>} Response data
40
+ */
41
+ async centrifugoAdminApiServerAuthTokenCreate() {
42
+ const path = `/cfg/centrifugo/admin/api/server/auth/token/`; return this.post(path, {}); }
43
+ /**
44
+ * List active channels * Returns list of active channels with optional pattern filter. * @param {CentrifugoChannelsRequestRequest} data - Request body * @returns {Promise<CentrifugoChannelsResponse>} Response data
45
+ */
46
+ async centrifugoAdminApiServerChannelsCreate(data) {
47
+ const path = `/cfg/centrifugo/admin/api/server/channels/`; return this.post(path, data); }
48
+ /**
49
+ * Get channel history * Returns message history for a channel. * @param {CentrifugoHistoryRequestRequest} data - Request body * @returns {Promise<CentrifugoHistoryResponse>} Response data
50
+ */
51
+ async centrifugoAdminApiServerHistoryCreate(data) {
52
+ const path = `/cfg/centrifugo/admin/api/server/history/`; return this.post(path, data); }
53
+ /**
54
+ * Get Centrifugo server info * Returns server information including node count, version, and uptime. * @returns {Promise<CentrifugoInfoResponse>} Response data
55
+ */
56
+ async centrifugoAdminApiServerInfoCreate() {
57
+ const path = `/cfg/centrifugo/admin/api/server/info/`; return this.post(path, {}); }
58
+ /**
59
+ * Get channel presence * Returns list of clients currently subscribed to a channel. * @param {CentrifugoPresenceRequestRequest} data - Request body * @returns {Promise<CentrifugoPresenceResponse>} Response data
60
+ */
61
+ async centrifugoAdminApiServerPresenceCreate(data) {
62
+ const path = `/cfg/centrifugo/admin/api/server/presence/`; return this.post(path, data); }
63
+ /**
64
+ * Get channel presence statistics * Returns quick statistics about channel presence (num_clients, num_users). * @param {CentrifugoPresenceStatsRequestRequest} data - Request body * @returns {Promise<CentrifugoPresenceStatsResponse>} Response data
65
+ */
66
+ async centrifugoAdminApiServerPresenceStatsCreate(data) {
67
+ const path = `/cfg/centrifugo/admin/api/server/presence-stats/`; return this.post(path, data); }
68
+ /**
69
+ * Generate connection token * Generate JWT token for WebSocket connection to Centrifugo. * @param {ConnectionTokenRequestRequest} data - Request body * @returns {Promise<ConnectionTokenResponse>} Response data
70
+ */
71
+ async centrifugoAdminApiTestingConnectionTokenCreate(data) {
72
+ const path = `/cfg/centrifugo/admin/api/testing/connection-token/`; return this.post(path, data); }
73
+ /**
74
+ * Publish test message * Publish test message to Centrifugo via wrapper with optional ACK tracking. * @param {PublishTestRequestRequest} data - Request body * @returns {Promise<PublishTestResponse>} Response data
75
+ */
76
+ async centrifugoAdminApiTestingPublishTestCreate(data) {
77
+ const path = `/cfg/centrifugo/admin/api/testing/publish-test/`; return this.post(path, data); }
78
+ /**
79
+ * Publish with database logging * Publish message using CentrifugoClient with database logging. This will create CentrifugoLog records. * @param {PublishTestRequestRequest} data - Request body * @returns {Promise<PublishTestResponse>} Response data
80
+ */
81
+ async centrifugoAdminApiTestingPublishWithLoggingCreate(data) {
82
+ const path = `/cfg/centrifugo/admin/api/testing/publish-with-logging/`; return this.post(path, data); }
83
+ /**
84
+ * Send manual ACK * Manually send ACK for a message to the wrapper. Pass message_id in request body. * @param {ManualAckRequestRequest} data - Request body * @returns {Promise<ManualAckResponse>} Response data
85
+ */
86
+ async centrifugoAdminApiTestingSendAckCreate(data) {
87
+ const path = `/cfg/centrifugo/admin/api/testing/send-ack/`; return this.post(path, data); }
88
+ /**
89
+ * Get channel statistics * Returns statistics grouped by channel. * @param {Object} [params={}] - Query parameters * @param {number} [params.hours] - Statistics period in hours (default: 24) * @returns {Promise<ChannelList>} Response data
90
+ */
91
+ async centrifugoMonitorChannelsRetrieve(params = {}) {
92
+ const path = `/cfg/centrifugo/monitor/channels/`; return this.get(path, params); }
93
+ /**
94
+ * Get Centrifugo health status * Returns the current health status of the Centrifugo client. * @returns {Promise<HealthCheck>} Response data
95
+ */
96
+ async centrifugoMonitorHealthRetrieve() {
97
+ const path = `/cfg/centrifugo/monitor/health/`; return this.get(path); }
98
+ /**
99
+ * Get overview statistics * Returns overview statistics for Centrifugo publishes. * @param {Object} [params={}] - Query parameters * @param {number} [params.hours] - Statistics period in hours (default: 24) * @returns {Promise<OverviewStats>} Response data
100
+ */
101
+ async centrifugoMonitorOverviewRetrieve(params = {}) {
102
+ const path = `/cfg/centrifugo/monitor/overview/`; return this.get(path, params); }
103
+ /**
104
+ * Get recent publishes * Returns a list of recent Centrifugo publishes with their details. * @param {Object} [params={}] - Query parameters * @param {string} [params.channel] - Filter by channel name * @param {number} [params.count] - Number of publishes to return (default: 50, max: 200) * @returns {Promise<RecentPublishes>} Response data
105
+ */
106
+ async centrifugoMonitorPublishesRetrieve(params = {}) {
107
+ const path = `/cfg/centrifugo/monitor/publishes/`; return this.get(path, params); }
108
+ /**
109
+ * Get connection token for dashboard * Returns JWT token and config for WebSocket connection to Centrifugo. * @returns {Promise<Object>} Response data
110
+ */
111
+ async centrifugoServerAuthTokenCreate() {
112
+ const path = `/cfg/centrifugo/server/auth/token/`; return this.post(path, {}); }
113
+ /**
114
+ * List active channels * Returns list of active channels with optional pattern filter. * @param {CentrifugoChannelsRequestRequest} data - Request body * @returns {Promise<CentrifugoChannelsResponse>} Response data
115
+ */
116
+ async centrifugoServerChannelsCreate(data) {
117
+ const path = `/cfg/centrifugo/server/channels/`; return this.post(path, data); }
118
+ /**
119
+ * Get channel history * Returns message history for a channel. * @param {CentrifugoHistoryRequestRequest} data - Request body * @returns {Promise<CentrifugoHistoryResponse>} Response data
120
+ */
121
+ async centrifugoServerHistoryCreate(data) {
122
+ const path = `/cfg/centrifugo/server/history/`; return this.post(path, data); }
123
+ /**
124
+ * Get Centrifugo server info * Returns server information including node count, version, and uptime. * @returns {Promise<CentrifugoInfoResponse>} Response data
125
+ */
126
+ async centrifugoServerInfoCreate() {
127
+ const path = `/cfg/centrifugo/server/info/`; return this.post(path, {}); }
128
+ /**
129
+ * Get channel presence * Returns list of clients currently subscribed to a channel. * @param {CentrifugoPresenceRequestRequest} data - Request body * @returns {Promise<CentrifugoPresenceResponse>} Response data
130
+ */
131
+ async centrifugoServerPresenceCreate(data) {
132
+ const path = `/cfg/centrifugo/server/presence/`; return this.post(path, data); }
133
+ /**
134
+ * Get channel presence statistics * Returns quick statistics about channel presence (num_clients, num_users). * @param {CentrifugoPresenceStatsRequestRequest} data - Request body * @returns {Promise<CentrifugoPresenceStatsResponse>} Response data
135
+ */
136
+ async centrifugoServerPresenceStatsCreate(data) {
137
+ const path = `/cfg/centrifugo/server/presence-stats/`; return this.post(path, data); }
138
+ /**
139
+ * Generate connection token * Generate JWT token for WebSocket connection to Centrifugo. * @param {ConnectionTokenRequestRequest} data - Request body * @returns {Promise<ConnectionTokenResponse>} Response data
140
+ */
141
+ async centrifugoTestingConnectionTokenCreate(data) {
142
+ const path = `/cfg/centrifugo/testing/connection-token/`; return this.post(path, data); }
143
+ /**
144
+ * Publish test message * Publish test message to Centrifugo via wrapper with optional ACK tracking. * @param {PublishTestRequestRequest} data - Request body * @returns {Promise<PublishTestResponse>} Response data
145
+ */
146
+ async centrifugoTestingPublishTestCreate(data) {
147
+ const path = `/cfg/centrifugo/testing/publish-test/`; return this.post(path, data); }
148
+ /**
149
+ * Publish with database logging * Publish message using CentrifugoClient with database logging. This will create CentrifugoLog records. * @param {PublishTestRequestRequest} data - Request body * @returns {Promise<PublishTestResponse>} Response data
150
+ */
151
+ async centrifugoTestingPublishWithLoggingCreate(data) {
152
+ const path = `/cfg/centrifugo/testing/publish-with-logging/`; return this.post(path, data); }
153
+ /**
154
+ * Send manual ACK * Manually send ACK for a message to the wrapper. Pass message_id in request body. * @param {ManualAckRequestRequest} data - Request body * @returns {Promise<ManualAckResponse>} Response data
155
+ */
156
+ async centrifugoTestingSendAckCreate(data) {
157
+ const path = `/cfg/centrifugo/testing/send-ack/`; return this.post(path, data); }
158
+ }
159
+
160
+ // Default instance for convenience
161
+ export const centrifugoAPI = new CentrifugoAPI();
162
+
163
+ // Default export
164
+ export default CentrifugoAPI;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Centrifugo API Module
3
+ * Re-exports the API client for convenient importing
4
+ * @module centrifugo
5
+ */
6
+
7
+ import { CentrifugoAPI, centrifugoAPI } from './client.mjs';
8
+
9
+ // Re-export the class and instance
10
+ export { CentrifugoAPI, centrifugoAPI };
11
+
12
+ // Default export is the instance for convenience
13
+ export default centrifugoAPI;
@@ -22,7 +22,7 @@
22
22
 
23
23
  import { BaseAPIClient } from './base.mjs';
24
24
  import { AccountsAPI, accountsAPI } from './accounts/index.mjs';
25
- import { IpcAPI, ipcAPI } from './ipc/index.mjs';
25
+ import { CentrifugoAPI, centrifugoAPI } from './centrifugo/index.mjs';
26
26
  import { KnowbaseAPI, knowbaseAPI } from './knowbase/index.mjs';
27
27
  import { LeadsAPI, leadsAPI } from './leads/index.mjs';
28
28
  import { NewsletterAPI, newsletterAPI } from './newsletter/index.mjs';
@@ -37,7 +37,7 @@ import { TasksAPI, tasksAPI } from './tasks/index.mjs';
37
37
  export {
38
38
  BaseAPIClient,
39
39
  AccountsAPI,
40
- IpcAPI,
40
+ CentrifugoAPI,
41
41
  KnowbaseAPI,
42
42
  LeadsAPI,
43
43
  NewsletterAPI,
@@ -53,7 +53,7 @@ export {
53
53
  */
54
54
  export {
55
55
  accountsAPI,
56
- ipcAPI,
56
+ centrifugoAPI,
57
57
  knowbaseAPI,
58
58
  leadsAPI,
59
59
  newsletterAPI,
@@ -69,7 +69,7 @@ export {
69
69
  */
70
70
  export const apis = {
71
71
  accounts: accountsAPI,
72
- ipc: ipcAPI,
72
+ centrifugo: centrifugoAPI,
73
73
  knowbase: knowbaseAPI,
74
74
  leads: leadsAPI,
75
75
  newsletter: newsletterAPI,
@@ -95,7 +95,7 @@ export function getAPI(appName) {
95
95
  */
96
96
  export const availableApps = [
97
97
  'accounts',
98
- 'ipc',
98
+ 'centrifugo',
99
99
  'knowbase',
100
100
  'leads',
101
101
  'newsletter',
@@ -87,6 +87,78 @@
87
87
  /**
88
88
  * @typedef {Object} BulkEmailResponse * @description Response for bulk email sending. * @property {boolean} success * @property {number} sent_count * @property {number} failed_count * @property {number} total_recipients * @property {string} [error] */
89
89
 
90
+ /**
91
+ * @typedef {Object} CentrifugoChannelInfo * @description Information about a single channel. * @property {number} num_clients - Number of connected clients in channel */
92
+
93
+ /**
94
+ * @typedef {Object} CentrifugoChannelsRequestRequest * @description Request to list active channels. * @property {any} [pattern] - Pattern to filter channels (e.g., 'user:*') */
95
+
96
+ /**
97
+ * @typedef {Object} CentrifugoChannelsResponse * @description List of active channels response. * @property {any} [error] - Error if any * @property {any} [result] - Result data */
98
+
99
+ /**
100
+ * @typedef {Object} CentrifugoChannelsResult * @description Channels result wrapper. * @property {Record<string, CentrifugoChannelInfo>} channels - Map of channel names to channel info */
101
+
102
+ /**
103
+ * @typedef {Object} CentrifugoClientInfo * @description Information about connected client. * @property {string} user - User ID * @property {string} client - Client UUID * @property {any} [conn_info] - Connection metadata * @property {any} [chan_info] - Channel-specific metadata */
104
+
105
+ /**
106
+ * @typedef {Object} CentrifugoError * @description Centrifugo API error structure. * @property {number} [code] - Error code (0 = no error) * @property {string} [message] - Error message */
107
+
108
+ /**
109
+ * @typedef {Object} CentrifugoHistoryRequestRequest * @description Request to get channel history. * @property {string} channel - Channel name * @property {any} [limit] - Maximum number of messages to return * @property {any} [since] - Stream position to get messages since * @property {any} [reverse] - Reverse message order (newest first) */
110
+
111
+ /**
112
+ * @typedef {Object} CentrifugoHistoryResponse * @description Channel history response. * @property {any} [error] - Error if any * @property {any} [result] - Result data */
113
+
114
+ /**
115
+ * @typedef {Object} CentrifugoHistoryResult * @description History result wrapper. * @property {CentrifugoPublication[]} publications - List of publications * @property {string} epoch - Current stream epoch * @property {number} offset - Latest stream offset */
116
+
117
+ /**
118
+ * @typedef {Object} CentrifugoInfoResponse * @description Server info response. * @property {any} [error] - Error if any * @property {any} [result] - Result data */
119
+
120
+ /**
121
+ * @typedef {Object} CentrifugoInfoResult * @description Info result wrapper. * @property {CentrifugoNodeInfo[]} nodes - List of Centrifugo nodes */
122
+
123
+ /**
124
+ * @typedef {Object} CentrifugoMetrics * @description Server metrics. * @property {number} interval - Metrics collection interval * @property {Record<string, number>} items - Metric name to value mapping */
125
+
126
+ /**
127
+ * @typedef {Object} CentrifugoNodeInfo * @description Information about a single Centrifugo node. * @property {string} uid - Unique node identifier * @property {string} name - Node name * @property {string} version - Centrifugo version * @property {number} num_clients - Number of connected clients * @property {number} num_users - Number of unique users * @property {number} num_channels - Number of active channels * @property {number} uptime - Node uptime in seconds * @property {number} num_subs - Total number of subscriptions * @property {any} [metrics] - Server metrics * @property {any} [process] - Process information */
128
+
129
+ /**
130
+ * @typedef {Object} CentrifugoPresenceRequestRequest * @description Request to get channel presence. * @property {string} channel - Channel name */
131
+
132
+ /**
133
+ * @typedef {Object} CentrifugoPresenceResponse * @description Channel presence response. * @property {any} [error] - Error if any * @property {any} [result] - Result data */
134
+
135
+ /**
136
+ * @typedef {Object} CentrifugoPresenceResult * @description Presence result wrapper. * @property {Record<string, CentrifugoClientInfo>} presence - Map of client IDs to client info */
137
+
138
+ /**
139
+ * @typedef {Object} CentrifugoPresenceStatsRequestRequest * @description Request to get channel presence statistics. * @property {string} channel - Channel name */
140
+
141
+ /**
142
+ * @typedef {Object} CentrifugoPresenceStatsResponse * @description Channel presence stats response. * @property {any} [error] - Error if any * @property {any} [result] - Result data */
143
+
144
+ /**
145
+ * @typedef {Object} CentrifugoPresenceStatsResult * @description Presence stats result. * @property {number} num_clients - Number of connected clients * @property {number} num_users - Number of unique users */
146
+
147
+ /**
148
+ * @typedef {Object} CentrifugoProcess * @description Process information. * @property {number} cpu - CPU usage percentage * @property {number} rss - Resident set size in bytes */
149
+
150
+ /**
151
+ * @typedef {Object} CentrifugoPublication * @description Single publication (message) in channel history. * @property {Record<string, any>} data - Message payload * @property {any} [info] - Publisher client info * @property {number} offset - Message offset in channel stream * @property {any} [tags] - Optional message tags */
152
+
153
+ /**
154
+ * @typedef {Object} CentrifugoStreamPosition * @description Stream position for pagination. * @property {number} offset - Stream offset * @property {string} epoch - Stream epoch */
155
+
156
+ /**
157
+ * @typedef {Object} ChannelList * @description List of channel statistics. * @property {ChannelStatsSerializer[]} channels - Channel statistics * @property {number} total_channels - Total number of channels */
158
+
159
+ /**
160
+ * @typedef {Object} ChannelStatsSerializer * @description Statistics per channel. * @property {string} channel - Channel name * @property {number} total - Total publishes to this channel * @property {number} successful - Successful publishes * @property {number} failed - Failed publishes * @property {number} avg_duration_ms - Average duration * @property {number} avg_acks - Average ACKs received */
161
+
90
162
  /**
91
163
  * @typedef {Object} ChatHistory * @description Chat history response serializer. * @property {string} session_id * @property {ChatMessage[]} messages * @property {number} total_messages */
92
164
 
@@ -124,6 +196,12 @@
124
196
  /**
125
197
  * @typedef {Object} ChunkRevectorizationRequestRequest * @description Chunk re-vectorization request serializer. * @property {string[]} chunk_ids - List of chunk IDs to re-vectorize * @property {boolean} [force] - Force re-vectorization even if already vectorized */
126
198
 
199
+ /**
200
+ * @typedef {Object} ConnectionTokenRequestRequest * @description Request model for connection token generation. * @property {string} user_id - User ID for the connection * @property {string[]} [channels] - List of channels to authorize */
201
+
202
+ /**
203
+ * @typedef {Object} ConnectionTokenResponse * @description Response model for connection token. * @property {string} token - JWT token for WebSocket connection * @property {string} centrifugo_url - Centrifugo WebSocket URL * @property {string} expires_at - Token expiration time (ISO 8601) */
204
+
127
205
  /**
128
206
  * @typedef {Object} Currency * @description Currency list serializer. * @property {string} code - Currency code from provider (e.g., USDTTRC20, BTC, ETH) * @property {string} name - Full currency name (e.g., USDT (TRC20), Bitcoin) * @property {string} token - Token symbol (e.g., USDT, BTC, ETH) * @property {string} network - Network name (e.g., TRC20, ERC20, Bitcoin) * @property {string} display_name * @property {string} symbol - Currency symbol (e.g., ₮, ₿, Ξ) * @property {number} decimal_places - Number of decimal places for this currency * @property {boolean} is_active - Whether this currency is available for payments * @property {string} min_amount_usd - Minimum payment amount in USD * @property {number} sort_order - Sort order for currency list (lower = higher priority) */
129
207
 
@@ -202,7 +280,7 @@
202
280
  * @typedef {Object} ErrorResponse * @description Generic error response. * @property {boolean} [success] * @property {string} message */
203
281
 
204
282
  /**
205
- * @typedef {Object} HealthCheck * @description Serializer for health check response. * @property {string} status - Overall health status: healthy, degraded, or unhealthy * @property {string} timestamp - Timestamp of the health check * @property {string} service - Service name * @property {string} version - Django-CFG version * @property {Record<string, any>} checks - Detailed health checks for databases, cache, and system * @property {Record<string, any>} environment - Environment information */
283
+ * @typedef {Object} HealthCheck * @description Health check response. * @property {string} status - Health status: healthy or unhealthy * @property {string} wrapper_url - Configured wrapper URL * @property {boolean} has_api_key - Whether API key is configured * @property {string} timestamp - Current timestamp */
206
284
 
207
285
  /**
208
286
  * @typedef {Object} LeadSubmission * @description Serializer for lead form submission from frontend. * @property {string} name * @property {string} email * @property {string} [company] * @property {string} [company_site] * @property {"email" | "whatsapp" | "telegram" | "phone" | "other"} [contact_type] - * `email` - Email
@@ -225,13 +303,10 @@
225
303
  * @typedef {Object} LeadSubmissionResponse * @description Response serializer for successful lead submission. * @property {boolean} success * @property {string} message * @property {number} lead_id */
226
304
 
227
305
  /**
228
- * @typedef {Object} LoadTestRequestRequest * @description Serializer for load test request input. * @property {string} method - RPC method to test * @property {number} total_requests - Total number of requests to send * @property {number} concurrency - Number of concurrent requests * @property {any} [params] - Parameters template for RPC calls */
306
+ * @typedef {Object} ManualAckRequestRequest * @description Request model for manual ACK sending. * @property {string} message_id - Message ID to acknowledge * @property {string} client_id - Client ID sending the ACK */
229
307
 
230
308
  /**
231
- * @typedef {Object} LoadTestResponse * @description Serializer for load test response. * @property {string} test_id - Unique test ID * @property {boolean} started - Whether test was started successfully * @property {string} message - Status message */
232
-
233
- /**
234
- * @typedef {Object} LoadTestStatus * @description Serializer for load test status. * @property {string} test_id - Unique test ID * @property {boolean} running - Whether test is currently running * @property {number} progress - Number of completed requests * @property {number} total - Total number of requests * @property {number} success_count - Number of successful requests * @property {number} failed_count - Number of failed requests * @property {number} avg_duration_ms - Average duration in milliseconds * @property {number} elapsed_time - Total elapsed time in seconds * @property {number} rps - Requests per second */
309
+ * @typedef {Object} ManualAckResponse * @description Response model for manual ACK. * @property {boolean} success - Whether ACK was sent successfully * @property {string} message_id - Message ID that was acknowledged * @property {any} [error] - Error message if failed */
235
310
 
236
311
  /**
237
312
  * @typedef {Object} Message * @property {string} uuid * @property {string} ticket * @property {any} sender * @property {boolean} is_from_author - Check if this message is from the ticket author. * @property {string} text * @property {string} created_at */
@@ -245,12 +320,6 @@
245
320
  /**
246
321
  * @typedef {Object} MessageRequest * @property {string} text */
247
322
 
248
- /**
249
- * @typedef {Object} MethodStat * @description Serializer for individual method statistics. * @property {string} method - RPC method name * @property {number} count - Number of calls * @property {number} percentage - Percentage of total calls * @property {number} [avg_time_ms] - Average execution time in milliseconds * @property {number} [avg_time] - Average execution time (alternative field) * @property {number} [success_rate] - Success rate percentage * @property {string} [last_called] - ISO timestamp of last call */
250
-
251
- /**
252
- * @typedef {Object} MethodStats * @description Serializer for method statistics response. * @property {MethodStat[]} methods - List of method statistics * @property {number} count - Total number of methods * @property {number} total_calls - Total calls across all methods */
253
-
254
323
  /**
255
324
  * @typedef {Object} Newsletter * @description Serializer for Newsletter model. * @property {number} id * @property {string} title * @property {string} [description] * @property {boolean} [is_active] * @property {boolean} [auto_subscribe] - Automatically subscribe new users to this newsletter * @property {string} created_at * @property {string} updated_at * @property {number} subscribers_count */
256
325
 
@@ -266,9 +335,6 @@
266
335
  /**
267
336
  * @typedef {Object} NewsletterSubscription * @description Serializer for NewsletterSubscription model. * @property {number} id * @property {number} newsletter * @property {string} newsletter_title * @property {number} [user] * @property {string} user_email * @property {string} email * @property {boolean} [is_active] * @property {string} subscribed_at * @property {string} unsubscribed_at */
268
337
 
269
- /**
270
- * @typedef {Object} NotificationStats * @description Serializer for notification statistics. * @property {number} total_sent - Total notifications sent * @property {number} delivery_rate - Delivery success rate percentage * @property {Record<string, any>} [by_type] - Breakdown by notification type * @property {any[]} [recent] - Recent notifications * @property {string} [last_sent] - ISO timestamp of last notification * @property {string} [timestamp] - ISO timestamp of the stats * @property {string} [error] - Error message if any */
271
-
272
338
  /**
273
339
  * @typedef {Object} OTPErrorResponse * @description Error response for OTP operations. * @property {string} error - Error message */
274
340
 
@@ -291,7 +357,7 @@
291
357
  * @typedef {Object} OTPVerifyResponse * @description OTP verification response. * @property {string} refresh - JWT refresh token * @property {string} access - JWT access token * @property {any} user - User information */
292
358
 
293
359
  /**
294
- * @typedef {Object} OverviewStats * @description Serializer for overview statistics. * @property {boolean} [redis_connected] - Whether Redis is connected * @property {number} total_requests_today - Total requests processed today * @property {number} [total_requests_hour] - Total requests in the last hour * @property {string[]} active_methods - List of active RPC methods * @property {string} top_method - Most frequently called method * @property {Record<string, any>} [method_counts] - Count of requests per method * @property {number} avg_response_time_ms - Average response time in milliseconds * @property {number} success_rate - Success rate percentage * @property {number} [error_rate] - Error rate percentage * @property {string} [timestamp] - ISO timestamp of the stats * @property {string} [error] - Error message if any */
360
+ * @typedef {Object} OverviewStats * @description Overview statistics for Centrifugo publishes. * @property {number} total - Total publishes in period * @property {number} successful - Successful publishes * @property {number} failed - Failed publishes * @property {number} timeout - Timeout publishes * @property {number} success_rate - Success rate percentage * @property {number} avg_duration_ms - Average duration in milliseconds * @property {number} avg_acks_received - Average ACKs received * @property {number} period_hours - Statistics period in hours */
295
361
 
296
362
  /**
297
363
  * @typedef {Object} PaginatedArchiveItemChunkList * @property {number} count - Total number of items across all pages * @property {number} page - Current page number (1-based) * @property {number} pages - Total number of pages * @property {number} page_size - Number of items per page * @property {boolean} has_next - Whether there is a next page * @property {boolean} has_previous - Whether there is a previous page * @property {number} [next_page] - Next page number (null if no next page) * @property {number} [previous_page] - Previous page number (null if no previous page) * @property {ArchiveItemChunk[]} results - Array of items for current page */
@@ -428,6 +494,12 @@
428
494
  /**
429
495
  * @typedef {Object} PublicDocumentList * @description Public document list serializer - minimal fields for listing. * @property {string} id * @property {string} title - Document title * @property {any} category * @property {string} created_at * @property {string} updated_at */
430
496
 
497
+ /**
498
+ * @typedef {Object} PublishTestRequestRequest * @description Request model for test message publishing. * @property {string} channel - Target channel name * @property {Record<string, any>} data - Message data (any JSON object) * @property {boolean} [wait_for_ack] - Wait for client acknowledgment * @property {number} [ack_timeout] - ACK timeout in seconds */
499
+
500
+ /**
501
+ * @typedef {Object} PublishTestResponse * @description Response model for test message publishing. * @property {boolean} success - Whether publish succeeded * @property {string} message_id - Unique message ID * @property {string} channel - Target channel * @property {number} [acks_received] - Number of ACKs received * @property {boolean} [delivered] - Whether message was delivered * @property {any} [error] - Error message if failed */
502
+
431
503
  /**
432
504
  * @typedef {Object} QueueAction * @description Serializer for queue management actions. * @property {"clear" | "clear_all" | "purge" | "purge_failed" | "flush"} action - Action to perform on queues
433
505
 
@@ -453,10 +525,7 @@
453
525
  * @typedef {Object} QuickHealth * @description Serializer for quick health check response. * @property {string} status - Quick health status: ok or error * @property {string} timestamp - Timestamp of the health check * @property {string} [error] - Error message if health check failed */
454
526
 
455
527
  /**
456
- * @typedef {Object} RPCRequest * @description Serializer for individual RPC request. * @property {string} [id] - Stream entry ID * @property {string} [request_id] - Unique request ID * @property {string} timestamp - ISO timestamp of the request * @property {string} method - RPC method name * @property {Record<string, any>} [params] - Request parameters * @property {string} [correlation_id] - Correlation ID for tracking * @property {string} [source] - Source of the request */
457
-
458
- /**
459
- * @typedef {Object} RecentRequests * @description Serializer for recent requests response. * @property {RPCRequest[]} requests - List of recent RPC requests * @property {number} count - Number of requests returned * @property {number} total_available - Total number of requests available */
528
+ * @typedef {Object} RecentPublishes * @description Recent publishes list. * @property {Record<string, any>[]} publishes - List of recent publishes * @property {number} count - Number of publishes returned * @property {number} total_available - Total publishes available */
460
529
 
461
530
  /**
462
531
  * @typedef {Object} SendCampaignRequest * @description Simple serializer for sending campaign. * @property {number} campaign_id */
@@ -482,12 +551,6 @@
482
551
  /**
483
552
  * @typedef {Object} TestEmailRequest * @description Simple serializer for test email. * @property {string} email * @property {string} [subject] * @property {string} [message] */
484
553
 
485
- /**
486
- * @typedef {Object} TestRPCRequestRequest * @description Serializer for test RPC request input. * @property {string} method - RPC method to call * @property {any} params - Parameters for the RPC call * @property {number} [timeout] - Timeout in seconds */
487
-
488
- /**
489
- * @typedef {Object} TestRPCResponse * @description Serializer for test RPC response. * @property {boolean} success - Whether the call was successful * @property {number} duration_ms - Call duration in milliseconds * @property {any} [response] - Response data from RPC call * @property {string} [error] - Error message if failed * @property {string} correlation_id - Correlation ID for tracking */
490
-
491
554
  /**
492
555
  * @typedef {Object} Ticket * @property {string} uuid * @property {number} user * @property {string} subject * @property {"open" | "waiting_for_user" | "waiting_for_admin" | "resolved" | "closed"} [status] - * `open` - Open
493
556
  * `waiting_for_user` - Waiting for User
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.4.62
3
+ Version: 1.4.64
4
4
  Summary: Django AI framework with built-in agents, type-safe Pydantic v2 configuration, and 8 enterprise apps. Replace settings.py, validate at startup, 90% less code. Production-ready AI workflows for Django.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://djangocfg.com