django-cfg 1.3.1__py3-none-any.whl → 1.3.5__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.
Files changed (115) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/payments/admin_interface/old/payments/base.html +175 -0
  3. django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html +125 -0
  4. django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html +113 -0
  5. django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html +35 -0
  6. django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html +309 -0
  7. django_cfg/apps/payments/admin_interface/old/payments/payment_form.html +303 -0
  8. django_cfg/apps/payments/admin_interface/old/payments/payment_list.html +382 -0
  9. django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html +518 -0
  10. django_cfg/apps/payments/{static → admin_interface/old/static}/payments/css/components.css +248 -9
  11. django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js +163 -0
  12. django_cfg/apps/payments/admin_interface/serializers/__init__.py +39 -0
  13. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +149 -0
  14. django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +114 -0
  15. django_cfg/apps/payments/admin_interface/templates/payments/base.html +55 -90
  16. django_cfg/apps/payments/admin_interface/templates/payments/components/dialog.html +81 -0
  17. django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_help_dialog.html +112 -0
  18. django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +175 -0
  19. django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +21 -17
  20. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +123 -250
  21. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +170 -269
  22. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +152 -355
  23. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +202 -551
  24. django_cfg/apps/payments/admin_interface/views/__init__.py +25 -14
  25. django_cfg/apps/payments/admin_interface/views/api/__init__.py +20 -0
  26. django_cfg/apps/payments/admin_interface/views/api/payments.py +191 -0
  27. django_cfg/apps/payments/admin_interface/views/api/stats.py +206 -0
  28. django_cfg/apps/payments/admin_interface/views/api/users.py +60 -0
  29. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +257 -0
  30. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +70 -0
  31. django_cfg/apps/payments/admin_interface/views/base.py +114 -0
  32. django_cfg/apps/payments/admin_interface/views/dashboard.py +60 -0
  33. django_cfg/apps/payments/admin_interface/views/forms.py +94 -0
  34. django_cfg/apps/payments/config/helpers.py +2 -2
  35. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +429 -0
  36. django_cfg/apps/payments/management/commands/currency_stats.py +443 -0
  37. django_cfg/apps/payments/management/commands/manage_currencies.py +9 -20
  38. django_cfg/apps/payments/management/commands/manage_providers.py +5 -5
  39. django_cfg/apps/payments/management/commands/process_pending_payments.py +357 -0
  40. django_cfg/apps/payments/management/commands/test_providers.py +434 -0
  41. django_cfg/apps/payments/middleware/api_access.py +35 -34
  42. django_cfg/apps/payments/migrations/0001_initial.py +1 -1
  43. django_cfg/apps/payments/models/balance.py +5 -2
  44. django_cfg/apps/payments/models/managers/api_key_managers.py +6 -2
  45. django_cfg/apps/payments/models/managers/balance_managers.py +3 -3
  46. django_cfg/apps/payments/models/managers/payment_managers.py +5 -0
  47. django_cfg/apps/payments/models/managers/subscription_managers.py +3 -3
  48. django_cfg/apps/payments/models/subscriptions.py +0 -24
  49. django_cfg/apps/payments/services/cache/__init__.py +1 -1
  50. django_cfg/apps/payments/services/cache_service/__init__.py +143 -0
  51. django_cfg/apps/payments/services/cache_service/api_key_cache.py +37 -0
  52. django_cfg/apps/payments/services/cache_service/interfaces.py +32 -0
  53. django_cfg/apps/payments/services/cache_service/keys.py +49 -0
  54. django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +47 -0
  55. django_cfg/apps/payments/services/cache_service/simple_cache.py +101 -0
  56. django_cfg/apps/payments/services/core/balance_service.py +13 -2
  57. django_cfg/apps/payments/services/core/payment_service.py +49 -22
  58. django_cfg/apps/payments/services/integrations/ngrok_service.py +3 -3
  59. django_cfg/apps/payments/services/providers/registry.py +20 -0
  60. django_cfg/apps/payments/signals/api_key_signals.py +2 -2
  61. django_cfg/apps/payments/signals/balance_signals.py +8 -5
  62. django_cfg/apps/payments/static/payments/js/api-client.js +385 -0
  63. django_cfg/apps/payments/static/payments/js/ngrok-status.js +58 -0
  64. django_cfg/apps/payments/static/payments/js/payment-dashboard.js +50 -0
  65. django_cfg/apps/payments/static/payments/js/payment-form.js +175 -0
  66. django_cfg/apps/payments/static/payments/js/payment-list.js +95 -0
  67. django_cfg/apps/payments/static/payments/js/webhook-dashboard.js +154 -0
  68. django_cfg/apps/payments/urls.py +4 -0
  69. django_cfg/apps/payments/urls_admin.py +37 -18
  70. django_cfg/apps/payments/views/api/api_keys.py +14 -0
  71. django_cfg/apps/payments/views/api/base.py +1 -0
  72. django_cfg/apps/payments/views/api/currencies.py +2 -2
  73. django_cfg/apps/payments/views/api/payments.py +11 -5
  74. django_cfg/apps/payments/views/api/subscriptions.py +36 -31
  75. django_cfg/apps/payments/views/overview/__init__.py +40 -0
  76. django_cfg/apps/payments/views/overview/serializers.py +205 -0
  77. django_cfg/apps/payments/views/overview/services.py +439 -0
  78. django_cfg/apps/payments/views/overview/urls.py +27 -0
  79. django_cfg/apps/payments/views/overview/views.py +231 -0
  80. django_cfg/apps/payments/views/serializers/api_keys.py +20 -6
  81. django_cfg/apps/payments/views/serializers/balances.py +5 -8
  82. django_cfg/apps/payments/views/serializers/currencies.py +2 -6
  83. django_cfg/apps/payments/views/serializers/payments.py +37 -32
  84. django_cfg/apps/payments/views/serializers/subscriptions.py +4 -26
  85. django_cfg/apps/urls.py +2 -1
  86. django_cfg/core/config.py +25 -15
  87. django_cfg/core/generation.py +12 -12
  88. django_cfg/core/integration/display/startup.py +1 -1
  89. django_cfg/core/validation.py +4 -4
  90. django_cfg/management/commands/show_config.py +2 -2
  91. django_cfg/management/commands/tree.py +1 -3
  92. django_cfg/middleware/__init__.py +2 -0
  93. django_cfg/middleware/static_nocache.py +55 -0
  94. django_cfg/models/payments.py +13 -15
  95. django_cfg/models/security.py +15 -0
  96. django_cfg/modules/django_ngrok.py +6 -0
  97. django_cfg/modules/django_unfold/dashboard.py +1 -3
  98. django_cfg/utils/smart_defaults.py +51 -5
  99. {django_cfg-1.3.1.dist-info → django_cfg-1.3.5.dist-info}/METADATA +1 -1
  100. {django_cfg-1.3.1.dist-info → django_cfg-1.3.5.dist-info}/RECORD +111 -69
  101. django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +0 -38
  102. django_cfg/apps/payments/admin_interface/views/payment_views.py +0 -259
  103. django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +0 -37
  104. django_cfg/apps/payments/services/cache/cache_service.py +0 -235
  105. /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/loading_spinner.html +0 -0
  106. /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/notification.html +0 -0
  107. /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/provider_card.html +0 -0
  108. /django_cfg/apps/payments/admin_interface/{templates → old}/payments/currency_converter.html +0 -0
  109. /django_cfg/apps/payments/admin_interface/{templates → old}/payments/payment_status.html +0 -0
  110. /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/css/dashboard.css +0 -0
  111. /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/js/components.js +0 -0
  112. /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/js/utils.js +0 -0
  113. {django_cfg-1.3.1.dist-info → django_cfg-1.3.5.dist-info}/WHEEL +0 -0
  114. {django_cfg-1.3.1.dist-info → django_cfg-1.3.5.dist-info}/entry_points.txt +0 -0
  115. {django_cfg-1.3.1.dist-info → django_cfg-1.3.5.dist-info}/licenses/LICENSE +0 -0
@@ -28,25 +28,23 @@ class PaymentsConfig(BaseModel):
28
28
  description="Enable payments middleware"
29
29
  )
30
30
 
31
- api_prefixes: List[str] = Field(
32
- default=['/api/'],
33
- description="API path prefixes that require authentication"
31
+ # Whitelist approach - only these paths require API key
32
+ protected_paths: List[str] = Field(
33
+ default=[
34
+ '/api/admin/', # Admin API endpoints
35
+ '/api/private/', # Private API endpoints
36
+ '/api/secure/', # Secure API endpoints
37
+ ],
38
+ description="Paths that require API key authentication (whitelist approach)"
34
39
  )
35
40
 
36
- exempt_paths: List[str] = Field(
41
+ protected_patterns: List[str] = Field(
37
42
  default=[
38
- '/api/payments/create/',
39
- '/api/payments/status/',
40
- '/api/currencies/rates/',
41
- '/api/currencies/supported/',
42
- '/api/api-keys/create/',
43
- '/api/api-keys/validate/',
44
- '/api/health/',
45
- '/admin/',
46
- '/static/',
47
- '/media/',
43
+ r'^/api/admin/.*$', # All admin API endpoints
44
+ r'^/api/private/.*$', # All private API endpoints
45
+ r'^/api/secure/.*$', # All secure API endpoints
48
46
  ],
49
- description="Paths exempt from API authentication"
47
+ description="Regex patterns for paths that require API key authentication"
50
48
  )
51
49
 
52
50
  # Rate limiting defaults
@@ -22,6 +22,20 @@ class SecurityConfig(BaseConfig):
22
22
  cors_allow_all_origins: bool = Field(default=False, description="Allow all origins (dev only)")
23
23
  cors_allowed_origins: List[str] = Field(default_factory=list, description="Allowed CORS origins")
24
24
  cors_allow_credentials: bool = Field(default=True, description="Allow CORS credentials")
25
+ cors_allow_headers: List[str] = Field(
26
+ default_factory=lambda: [
27
+ "accept",
28
+ "accept-encoding",
29
+ "authorization",
30
+ "content-type",
31
+ "dnt",
32
+ "origin",
33
+ "user-agent",
34
+ "x-csrftoken",
35
+ "x-requested-with",
36
+ ],
37
+ description="CORS allowed headers with common defaults for API usage",
38
+ )
25
39
 
26
40
  # CSRF settings
27
41
  csrf_enabled: bool = Field(default=True, description="Enable CSRF protection")
@@ -85,6 +99,7 @@ class SecurityConfig(BaseConfig):
85
99
  'CORS_ALLOW_ALL_ORIGINS': self.cors_allow_all_origins,
86
100
  'CORS_ALLOWED_ORIGINS': self.cors_allowed_origins,
87
101
  'CORS_ALLOW_CREDENTIALS': self.cors_allow_credentials,
102
+ 'CORS_ALLOW_HEADERS': self.cors_allow_headers,
88
103
  })
89
104
 
90
105
  # Add corsheaders to middleware if not present
@@ -299,6 +299,11 @@ def is_ngrok_available_from_env() -> bool:
299
299
  return get_ngrok_service().is_ngrok_available_from_env()
300
300
 
301
301
 
302
+ def is_tunnel_active() -> bool:
303
+ """Check if ngrok tunnel is actually active."""
304
+ return get_ngrok_service().is_tunnel_active()
305
+
306
+
302
307
  def get_effective_tunnel_url() -> Optional[str]:
303
308
  """Get effective tunnel URL (from manager or environment)."""
304
309
  return get_ngrok_service().get_effective_tunnel_url()
@@ -318,5 +323,6 @@ __all__ = [
318
323
  "get_tunnel_url_from_env",
319
324
  "get_ngrok_host_from_env",
320
325
  "is_ngrok_available_from_env",
326
+ "is_tunnel_active",
321
327
  "get_effective_tunnel_url",
322
328
  ]
@@ -16,9 +16,7 @@ from .models.dashboard import StatCard, StatsCardsWidget
16
16
 
17
17
  class DashboardManager(BaseCfgModule):
18
18
  """
19
- Dashboard configuration manager for Unfold.
20
-
21
- Based on the working configuration from @old/api__old/api/dashboard/unfold_config.py
19
+ Dashboard configuration manager for Unfold.
22
20
  """
23
21
 
24
22
  def __init__(self):
@@ -50,15 +50,21 @@ class SmartDefaults:
50
50
  @staticmethod
51
51
  def get_database_defaults(environment: str = "development", debug: bool = False, engine: str = "sqlite3") -> Dict[str, Any]:
52
52
  """Get database configuration defaults."""
53
- return {
53
+ defaults = {
54
54
  'ENGINE': 'django.db.backends.sqlite3',
55
55
  'NAME': Path('db') / 'db.sqlite3',
56
56
  'ATOMIC_REQUESTS': True,
57
57
  'CONN_MAX_AGE': 60,
58
- 'OPTIONS': {
59
- 'timeout': 20,
60
- }
58
+ 'OPTIONS': {}
61
59
  }
60
+
61
+ # Add engine-specific options
62
+ if engine == "django.db.backends.postgresql":
63
+ defaults['OPTIONS']['connect_timeout'] = 20
64
+ elif engine == "django.db.backends.sqlite3":
65
+ defaults['OPTIONS']['timeout'] = 20 # SQLite uses 'timeout'
66
+
67
+ return defaults
62
68
 
63
69
  @staticmethod
64
70
  def get_cache_defaults() -> Dict[str, Any]:
@@ -83,7 +89,10 @@ class SmartDefaults:
83
89
  cors_allow_headers=None
84
90
  ) -> Dict[str, Any]:
85
91
  """Get security configuration defaults."""
86
- return {
92
+ from ..models.security import SecurityConfig
93
+
94
+ # Base security settings
95
+ base_settings = {
87
96
  'USE_TZ': True,
88
97
  'USE_I18N': True,
89
98
  'USE_L10N': True,
@@ -94,6 +103,43 @@ class SmartDefaults:
94
103
  'SECURE_HSTS_INCLUDE_SUBDOMAINS': not debug,
95
104
  'SECURE_HSTS_PRELOAD': not debug,
96
105
  }
106
+
107
+ # Add CORS settings if security domains are configured
108
+ if security_domains:
109
+ # Combine default CORS headers with custom ones
110
+ default_headers = SecurityConfig().cors_allow_headers
111
+ if cors_allow_headers:
112
+ # Combine and deduplicate headers
113
+ all_headers = default_headers + cors_allow_headers
114
+ seen = set()
115
+ unique_headers = []
116
+ for header in all_headers:
117
+ if header.lower() not in seen:
118
+ seen.add(header.lower())
119
+ unique_headers.append(header)
120
+ final_headers = unique_headers
121
+ else:
122
+ final_headers = default_headers
123
+
124
+ # Create SecurityConfig with appropriate settings
125
+ security_config = SecurityConfig(
126
+ cors_enabled=True,
127
+ cors_allow_all_origins=debug or environment == "development",
128
+ cors_allowed_origins=security_domains if not (debug or environment == "development") else [],
129
+ cors_allow_credentials=True,
130
+ cors_allow_headers=final_headers,
131
+ ssl_redirect=ssl_redirect or False,
132
+ )
133
+
134
+ # Configure for development if needed
135
+ if debug or environment == "development":
136
+ security_config.configure_for_development()
137
+
138
+ # Get Django settings from SecurityConfig
139
+ cors_settings = security_config.to_django_settings()
140
+ base_settings.update(cors_settings)
141
+
142
+ return base_settings
97
143
 
98
144
  @classmethod
99
145
  def get_logging_defaults(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.3.1
3
+ Version: 1.3.5
4
4
  Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://docs.djangocfg.com
@@ -1,9 +1,9 @@
1
1
  django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- django_cfg/__init__.py,sha256=Kh_1ZiiR3P_VYqAdl9_rNfN0CYQh9ue3pRtboDq2UWU,1630
2
+ django_cfg/__init__.py,sha256=uM881Xrrg-5kgQiCLl-l58cqZChTaf1A8THAVW68CkM,1630
3
3
  django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
4
4
  django_cfg/config.py,sha256=cbrtZxfXbI5p-qfdK5eR86OGxIbm4827zYdGIr6LmNg,1399
5
5
  django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
6
- django_cfg/apps/urls.py,sha256=0Cd6v736fhXYDbwTNTCMJdMTdfnp99TRpu2bwabbkqE,2567
6
+ django_cfg/apps/urls.py,sha256=SZZcic097cUbx32NNPtQNoHWCXZO7IGwwjHaEo6Gbbk,2586
7
7
  django_cfg/apps/accounts/README.md,sha256=YkUYJ3iKMYTmm9ALK2PDnX75SDqZxgnkzNLCD5efxRs,8227
8
8
  django_cfg/apps/accounts/__init__.py,sha256=osecEQhMJVP8ejhZzElNsAqA1fX-GPD3K5_yNwDk6IE,100
9
9
  django_cfg/apps/accounts/__models.py,sha256=65AomWYd78ptQ60drPbodxf0Ue310vmJQpQOPHL6V3E,10161
@@ -263,8 +263,8 @@ django_cfg/apps/newsletter/views/subscriptions.py,sha256=marHLbRT6a6e8tMjKVtKG_0
263
263
  django_cfg/apps/newsletter/views/tracking.py,sha256=EJlAltpASzc_0nslVPJt-6mnIqI_QCEmz3MQEGPKzmU,2481
264
264
  django_cfg/apps/payments/README.md,sha256=FlyMSGyFnHkUudn99RvQwT0Y77Y-WJgd025wdi5ZB1Y,8290
265
265
  django_cfg/apps/payments/apps.py,sha256=K0y6dYj9VAm-AovX6_3RHt1Iti7ZrgAqB_zui_2_wKU,1736
266
- django_cfg/apps/payments/urls.py,sha256=p_GcCsid8oVIpW1yKPnrrLKnbVTQgMQL4OYZtf7pY_I,3803
267
- django_cfg/apps/payments/urls_admin.py,sha256=qufCSHPX0g8HcAsGcB3icFcImwokGIN5Wd60MeH6ZsM,1815
266
+ django_cfg/apps/payments/urls.py,sha256=9ld9UlKr32_dGkkl-r6N04uYF7TeK3Sf2f1s2yXaumc,3940
267
+ django_cfg/apps/payments/urls_admin.py,sha256=TexZtNHwaCjTKd_AvjbwlCvv0P3ayXujnJ9LCG0VwmU,2653
268
268
  django_cfg/apps/payments/admin/__init__.py,sha256=GYeKIzUR2ibzOq_Zl0_rjILkkLt5Jz3gRY9Pps-oN28,887
269
269
  django_cfg/apps/payments/admin/api_keys_admin.py,sha256=p10fESfcGRuwDht_ptB9_siWSVADneEhe5lHppsBHnc,22201
270
270
  django_cfg/apps/payments/admin/balance_admin.py,sha256=EdlngRKYHNEZ-Wa3eM5GGSBnUgtuKh5NK7LDup92Jsg,26354
@@ -273,99 +273,140 @@ django_cfg/apps/payments/admin/filters.py,sha256=lH9FYafujLDtAqfpyytwsHxVhRJLo_C
273
273
  django_cfg/apps/payments/admin/payments_admin.py,sha256=orSha0A1h3u8gM6mlVLP15k4DlY9sAhc_oic_kh-g9c,19271
274
274
  django_cfg/apps/payments/admin/subscriptions_admin.py,sha256=JH3yk9G--78G3ddRFOuL2-krLeKV8huIiNqla1OgO5c,23255
275
275
  django_cfg/apps/payments/admin_interface/__init__.py,sha256=PNJRbl02SeAOVgqSVNLXa5TcldpG7FvyuVvv-5MmFns,533
276
- django_cfg/apps/payments/admin_interface/templates/payments/base.html,sha256=UkcPMaN4hc6V9oRdJ123Ty4Y6OlI3OVbNZ9g6y8g7xY,7190
277
- django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html,sha256=3uZMFnoGTh-dGsk6WTLpRFABi0Vilj1La-cna1CvUZI,18428
278
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html,sha256=x2LG6cNy10ait8VwObsOGnjLMqm06YJBjUsazSJr5zM,16413
279
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html,sha256=HeqFmb_yZ3Uan-eYvPpMcW8cB-5eE1qkpe8Qf9J21u0,14558
280
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html,sha256=OyxXX_AYTAbVNnce_lbABPfP9LmyfXmI7bJnwbFqprc,19401
281
- django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html,sha256=wJkL-dw_GVF9ttsYwuoSt5wdm0_zq_VINdC5EPZPuJM,22781
282
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html,sha256=a9uaytK4Wm07Xq58PHdkJHjsVgdo3n8SvqeHT9E6g54,27775
283
- django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html,sha256=X6m6geItXB0gK5W5V56p6zstVWEAo2HGHCTLTXXYLwY,1483
284
- django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html,sha256=PYBzMBdNMfoQDwC-4pLiygS4aXn_DiImv7FsDP8NLjk,704
285
- django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html,sha256=Vq3oIgknbvnyD0V6fy8d1FcQG5n01rASeF6lUXp1hEU,912
286
- django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html,sha256=dIlOuWdknSVH5zimBsIWiammeKtqmMMN69_ECm-EFoU,4297
287
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html,sha256=4tTNDDLn-6nkfzYoY_0cTEVeV9CMX3oxC1l_Q43b_ZE,1843
288
- django_cfg/apps/payments/admin_interface/views/__init__.py,sha256=rs5gxExi0PuTwSlnLJEPF07FP5S_1aKexK4oFbBHIpU,499
289
- django_cfg/apps/payments/admin_interface/views/payment_views.py,sha256=Z3HUpHdkzbF0JhkHoPZzgEsi8ThinqkRzYxUUfPkWH0,9341
290
- django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py,sha256=A1VHW5Aqra6TN1y7SuaE62FfBB5jfaJBST-qKqtrYZc,1121
276
+ django_cfg/apps/payments/admin_interface/old/payments/base.html,sha256=qOecB7B9wA4htviUTqzCHeeiKNz1rJOwYzNcvdO8bes,8142
277
+ django_cfg/apps/payments/admin_interface/old/payments/currency_converter.html,sha256=3uZMFnoGTh-dGsk6WTLpRFABi0Vilj1La-cna1CvUZI,18428
278
+ django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html,sha256=IPg9aJWihrmPA95OBGJz_z36-hfL54yLq1a7xo-upfg,16738
279
+ django_cfg/apps/payments/admin_interface/old/payments/payment_form.html,sha256=HeqFmb_yZ3Uan-eYvPpMcW8cB-5eE1qkpe8Qf9J21u0,14558
280
+ django_cfg/apps/payments/admin_interface/old/payments/payment_list.html,sha256=OyxXX_AYTAbVNnce_lbABPfP9LmyfXmI7bJnwbFqprc,19401
281
+ django_cfg/apps/payments/admin_interface/old/payments/payment_status.html,sha256=wJkL-dw_GVF9ttsYwuoSt5wdm0_zq_VINdC5EPZPuJM,22781
282
+ django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html,sha256=Dp7sIdKfIIO6gsCARZ-d4Q5igIVdXAvDpN4Jvxc5gLY,23177
283
+ django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html,sha256=N7xLp6ztsr4DgkhBlnhEth0K0Risg7ZfcGObn_8f0v0,6637
284
+ django_cfg/apps/payments/admin_interface/old/payments/components/loading_spinner.html,sha256=PYBzMBdNMfoQDwC-4pLiygS4aXn_DiImv7FsDP8NLjk,704
285
+ django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html,sha256=DK5V_DydX359F6rr_I6amnQrJJwwzf1rl72WT_YYk4g,5463
286
+ django_cfg/apps/payments/admin_interface/old/payments/components/notification.html,sha256=Vq3oIgknbvnyD0V6fy8d1FcQG5n01rASeF6lUXp1hEU,912
287
+ django_cfg/apps/payments/admin_interface/old/payments/components/provider_card.html,sha256=dIlOuWdknSVH5zimBsIWiammeKtqmMMN69_ECm-EFoU,4297
288
+ django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html,sha256=d3xtdOP8qlK-zSYB3g8QGG_FXCPGX1J-blSQJNKtqgw,1411
289
+ django_cfg/apps/payments/admin_interface/old/static/payments/css/components.css,sha256=EpFf6s_6_QoOj7gxaKHfuiFtZ14Isve9u-q8VvydoGo,12248
290
+ django_cfg/apps/payments/admin_interface/old/static/payments/css/dashboard.css,sha256=s1Uupb_ixnIFQKljetlcBP-r7_HkeanbNMul_zdrWOo,4539
291
+ django_cfg/apps/payments/admin_interface/old/static/payments/js/components.js,sha256=3z85iEdT1ZQt9tf4_yJzf20gLaBHvieQ-5f_0di4lGY,19320
292
+ django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js,sha256=QuIb8CGS9MN6dQlPYzq_hran-Wzub-o3nPtPr6hfzrs,5834
293
+ django_cfg/apps/payments/admin_interface/old/static/payments/js/utils.js,sha256=NgHkyU9mS5GW7CWBDIKmIUjilkD8KdnzaWWC-GtUzss,13256
294
+ django_cfg/apps/payments/admin_interface/serializers/__init__.py,sha256=NvP8MeCqXvsR7ghQehtjXlIS5hOpTI9aMhBMk8ab3lA,981
295
+ django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py,sha256=_Q1lrqBjuF09Dpo5Jy-jrB-cYFEYwl54b1jVdeqiAMo,5089
296
+ django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py,sha256=3jF9TP873oe0J1GS7udeD5B7GQ6LlhXXMaxBSIV50U0,3727
297
+ django_cfg/apps/payments/admin_interface/templates/payments/base.html,sha256=xNU-E1D6FFgK2v6T8GY0oFD0gPjdCCIj2HeinjQaSVU,5799
298
+ django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html,sha256=-cntOiZIQA_mXssk5gSoR5q-GbX1FnhyhlQg0o9lslY,9902
299
+ django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html,sha256=fDH1tCRBQXWDGYuGFJA-j31p6qXsIKi3ZhWcnsfvtbo,12414
300
+ django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html,sha256=b6-QEyQSaUz1Il7nHnNFydYdi3qfqKlMgvy1Wy7LO_E,10962
301
+ django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html,sha256=xNzRsh_3SWGt6haziAFABDbkhEPngqIsTLXqlkprWuY,15143
302
+ django_cfg/apps/payments/admin_interface/templates/payments/components/dialog.html,sha256=wM7LBdDGBNSH9-Cz4l6rKzZ3h-Auwt2cv5prK2V9RsU,3641
303
+ django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_help_dialog.html,sha256=_jCmEupz-tsz6_8tmg0SlYJpRPW0HuUdO7IQfIr7RGc,5828
304
+ django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html,sha256=ZQlWm6jUUEsIBih0GWmA-H0NHkohK4AgpTkEAvOdkNg,7535
305
+ django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html,sha256=vQlDjsA72HmrewkELUABGL72eWtvs4PAM4T5-wo58PQ,2006
306
+ django_cfg/apps/payments/admin_interface/views/__init__.py,sha256=Wv8wDjbSXi3Jv2qHa680hZvv4Qm6DAx1aIQ7fDcjoos,784
307
+ django_cfg/apps/payments/admin_interface/views/base.py,sha256=sMkoPf9m2GIttb2Y9KIgHM4HJxj1VI-44gin7KGEtCA,3495
308
+ django_cfg/apps/payments/admin_interface/views/dashboard.py,sha256=VMgjHvA83o1WXJH99ZJOXI92cYWHmXJ7bnQj6FNHcwE,1830
309
+ django_cfg/apps/payments/admin_interface/views/forms.py,sha256=1kMIRd3BoKFFJe1ssfWWsi1e-bdFeRSmdCrm90rFfWg,2976
310
+ django_cfg/apps/payments/admin_interface/views/api/__init__.py,sha256=0lwYw-BO_jHZrlwWZbJAVQUCkIMzSDg7KkBxjo1bu8c,506
311
+ django_cfg/apps/payments/admin_interface/views/api/payments.py,sha256=PYzAryU00MI5VPCtoX77D7E4MzIeuIVOfSuwaJYI86A,7141
312
+ django_cfg/apps/payments/admin_interface/views/api/stats.py,sha256=0kUT2GrfDiZ4DF6tSpRSDnb7pAsvk40psE_xdna0Hsg,8019
313
+ django_cfg/apps/payments/admin_interface/views/api/users.py,sha256=QW3lO5EfmecCh6sVxHGuH_v6VHOh-jGcpny6JaJvEio,2244
314
+ django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py,sha256=j-iLPP76EH_7-54MNLS_Z0TVY_Tt5xzFTRLSkZhr8YU,10295
315
+ django_cfg/apps/payments/admin_interface/views/api/webhook_public.py,sha256=w-_62BHPetd5C93b9VnPpojBJNEufdBgw1_0IYjReYw,2466
291
316
  django_cfg/apps/payments/config/__init__.py,sha256=4soiOM2ELb72zzGAR4C0eC5kkJ5KX2y6N5Ezf-aqqSA,946
292
317
  django_cfg/apps/payments/config/django_cfg_integration.py,sha256=Hg5N4Wbu6XoqTABysLmfqhH1ekKP6Zy3wpI8yEiP9Ys,6553
293
- django_cfg/apps/payments/config/helpers.py,sha256=CI-GD5RIONUiXULah_k88BDFdf_61QaZiJCtdxmPPPg,4796
318
+ django_cfg/apps/payments/config/helpers.py,sha256=vA9AcdtwUhtdb-4Gtc6H8c5iuqgvKjkuBocllTilBEI,4814
294
319
  django_cfg/apps/payments/config/constance/__init__.py,sha256=CPDUPosm_gLetrr6uAVFl_ofOF7ILVPje0MKKAd0RS4,658
295
320
  django_cfg/apps/payments/config/constance/config_service.py,sha256=utfq4ifNRxRuuZHLVtTkGj9bqKvyDDeWvvGsgyacu-k,4139
296
321
  django_cfg/apps/payments/config/constance/fields.py,sha256=v45-3ulrrxUesj9r3WEuXbAZIu4uZE0N4Tn-0VaoGfY,2473
297
322
  django_cfg/apps/payments/config/constance/settings.py,sha256=PTzAPwbTV9FX8LwYY0OYkuvbWcIVU47XEeDqTbbbwv0,6854
298
323
  django_cfg/apps/payments/management/__init__.py,sha256=1qi5wv2KVLIKoGVzItrB78D8xrbf3ruwO3_kGZ7bLh4,30
299
324
  django_cfg/apps/payments/management/commands/__init__.py,sha256=1pri3qN5PLFIRSwxLkZJ7Bc4W4UyiKBZCcJjqy1IUr0,22
300
- django_cfg/apps/payments/management/commands/manage_currencies.py,sha256=yQjOl25wT3UUmA8uLKI-p4PE0adpxMAhy81TVid7ZDs,15339
301
- django_cfg/apps/payments/management/commands/manage_providers.py,sha256=ojSvGOtjSLnZ8M0-WziC6qNd-sDrXnIzgm7YId7OnuU,15745
325
+ django_cfg/apps/payments/management/commands/cleanup_expired_data.py,sha256=BLk7n5yKXo13lpOyqFH6ZqYTyvmXV7Z4Bg-Kr2oP8Dk,15566
326
+ django_cfg/apps/payments/management/commands/currency_stats.py,sha256=Z2TAtT3r22VRzqI5VnVg0b-B7HVE-hfQ0iAd56YrWl0,17852
327
+ django_cfg/apps/payments/management/commands/manage_currencies.py,sha256=1s9z5PIWuVDcqixyD4gtmfo0CshqlO8FDPS3QLBgcr4,14725
328
+ django_cfg/apps/payments/management/commands/manage_providers.py,sha256=67NDKE2yI5oOvXbHpWuJmRPwAkMqZf1bV2zjZ-kfqQ0,15724
329
+ django_cfg/apps/payments/management/commands/process_pending_payments.py,sha256=yfmO9sRulGfZQi-tIdf2qWniCU1HhqtGxBY-j_N4UkM,13308
330
+ django_cfg/apps/payments/management/commands/test_providers.py,sha256=qpXTiKoErZBIXz2KtiWqa4IwWbK8c5WuABE2tDR_eGY,18475
302
331
  django_cfg/apps/payments/middleware/__init__.py,sha256=eL5TmlCKmpW53Ift5rtwS8ss1wUqp4j2gzjGhcAQUQY,380
303
- django_cfg/apps/payments/middleware/api_access.py,sha256=0UEHUNKjNKsewBNDMMNtOdywrj0w84fh0wbw-jjrvn4,15312
332
+ django_cfg/apps/payments/middleware/api_access.py,sha256=bXKKJwxp_mh9HjGrqNeYJKGOuAGYYq7VmgM7f1UA8sc,15513
304
333
  django_cfg/apps/payments/middleware/rate_limiting.py,sha256=U6mEyonU3JAK0LZjZqp-q4KgHnXdWpUJT4LJ1jCeQRQ,14813
305
334
  django_cfg/apps/payments/middleware/usage_tracking.py,sha256=ZDoftaOlV8OfUs05HkQZiE_WWAYeTzDbsiuWKI9pfAg,11814
306
- django_cfg/apps/payments/migrations/0001_initial.py,sha256=DYi5gAC-4U7Mijrj_wKGuAMp9F6nsz1Ov9WyjaXHzK4,48741
335
+ django_cfg/apps/payments/migrations/0001_initial.py,sha256=sjSu5JCT9P3bVB3YrYmAMIUnYVTE7Avyl_t9jhk843g,48741
307
336
  django_cfg/apps/payments/migrations/__init__.py,sha256=OHlzxEGDJYKZz82orZXnh77xy-Okv6FcG3EKMfg9LzU,21
308
337
  django_cfg/apps/payments/models/__init__.py,sha256=7x38zrZjYxH3tV079SthGZeIjuyNB5hbqirT03-ZxuE,1443
309
338
  django_cfg/apps/payments/models/api_keys.py,sha256=dAS9XSOwAOBK40qnjrElz04Up9sqNGNg_0k13pnUjbs,5344
310
- django_cfg/apps/payments/models/balance.py,sha256=utryquLyGrxYnKrBlXRtFWXrJafvwZCK3fiiLgNCpMo,7857
339
+ django_cfg/apps/payments/models/balance.py,sha256=esjkt-VIdWBu09eqxTwP5WmcGdI4aCbXSfjoTHwYZec,8084
311
340
  django_cfg/apps/payments/models/base.py,sha256=XXMxqHe7OYmzVBW7g8nXgE41wJMigkRtgkPYGTx53oA,2212
312
341
  django_cfg/apps/payments/models/currencies.py,sha256=6ONWpBoZUOFVIHGzj_j1LZsI0yRRhk1x9sNn6kINAA8,8458
313
342
  django_cfg/apps/payments/models/payments.py,sha256=qvSBAl5YSqttZCAgaYCIyP23KiCJafzt0HZEJoAkNpg,11321
314
- django_cfg/apps/payments/models/subscriptions.py,sha256=w2zUrybgsKGfQ2QO0QbWHPp5ZZshVrf013CyfKoxdVA,11037
343
+ django_cfg/apps/payments/models/subscriptions.py,sha256=o3C3CIupcz3lyvg_hszvHQaiWR7RJQ-pP1eebIDJfBE,10332
315
344
  django_cfg/apps/payments/models/tariffs.py,sha256=b2iDC7hBdZR8TX8aEskM5nTEa5_f0H6-j6wZdcbHdyk,6471
316
345
  django_cfg/apps/payments/models/managers/__init__.py,sha256=56kdXtRJOLHhtnY4arYi15fEAmWWrWJP0F8kn8okpzU,1090
317
- django_cfg/apps/payments/models/managers/api_key_managers.py,sha256=zL3NPUPDuNepypu02UxoQD-e5RgXGC0HNEpL0IMWGNA,10420
318
- django_cfg/apps/payments/models/managers/balance_managers.py,sha256=1uMINGsCk6qzgx3vi8OLRtVbKuIU3Y5VpmF9JPjukc0,20299
346
+ django_cfg/apps/payments/models/managers/api_key_managers.py,sha256=TuJqB6zaHnR1Um6l-tZfUtc9Wit3iB7aaDUEF4vnCbY,10547
347
+ django_cfg/apps/payments/models/managers/balance_managers.py,sha256=84iV5cfSWiETyfLXoSK_s6A1lRv_dsOxu_n6V57gbEY,20298
319
348
  django_cfg/apps/payments/models/managers/currency_managers.py,sha256=ybLPx24rdnXo8jhCybq_3p5_si9BAhOSwIYib3tey-g,13061
320
- django_cfg/apps/payments/models/managers/payment_managers.py,sha256=Hrkpk6N2bm8uxqNKFy7MTXg8W6-GVw5KMVNj4WYJ-9k,17547
321
- django_cfg/apps/payments/models/managers/subscription_managers.py,sha256=52t5JfOXq_fTLGbEB1daFZLnRx5X5lkqLO7obkCoH68,21686
349
+ django_cfg/apps/payments/models/managers/payment_managers.py,sha256=Bb782Z9MCNlawitUdAa_97WXBfqQtqHzl9pG1l7-fCc,17691
350
+ django_cfg/apps/payments/models/managers/subscription_managers.py,sha256=_hDmneMMTtvo2htNDDZOxuoYyxNKP46JC0MrXLwv5f8,21688
322
351
  django_cfg/apps/payments/services/__init__.py,sha256=QUFVfTwliUvQWtaw0JqDss_LDamgNZwaej8fzL6Qzco,6147
323
- django_cfg/apps/payments/services/cache/__init__.py,sha256=xIeDSSelNoS2eiWlIn-qsK9tYDizPJtVmBH1Ghc7wxk,353
324
- django_cfg/apps/payments/services/cache/cache_service.py,sha256=oPbRnjDmSf6nPpP5jbA4QfWC5G1yVeVC0rdOByDPpUw,7705
352
+ django_cfg/apps/payments/services/cache/__init__.py,sha256=eUUtnNU1gPyJOAHaUeaDD5WOnPb0aSI7klvTGbgccOE,354
353
+ django_cfg/apps/payments/services/cache_service/__init__.py,sha256=Lp29sQUzuW7tKfrT6JBQYZgQ_ko4hqm2XozQ0XkC5Gc,4291
354
+ django_cfg/apps/payments/services/cache_service/api_key_cache.py,sha256=kVLUC5WbRpxXNGiKfcgnR7j4kBH861KpMTuGZJo8ADY,1292
355
+ django_cfg/apps/payments/services/cache_service/interfaces.py,sha256=7sqTRBSX4BPZ_Oxw6RJTyoLLHTLB5__adyNFZeAzjBI,758
356
+ django_cfg/apps/payments/services/cache_service/keys.py,sha256=U37Dwkboxn0E_B5MpfcY0RobIzhC5SQklE-jfkBMcOg,1700
357
+ django_cfg/apps/payments/services/cache_service/rate_limit_cache.py,sha256=MjFn5q23WjupNI2wZ9KpUJZR5TxX1zkYp6Cu1okZIfQ,1785
358
+ django_cfg/apps/payments/services/cache_service/simple_cache.py,sha256=aoAVHLfDUpAF0DP7UQYywGKjg8KzPjzu5xxMqRmN8zU,3258
325
359
  django_cfg/apps/payments/services/core/__init__.py,sha256=CY2M4ID3rqcdpbokQSdO_fxtdCfHjsGgBsTznyGPw3k,526
326
- django_cfg/apps/payments/services/core/balance_service.py,sha256=vNYJfRS_nsAzxq8aGmwp96Tj5UUgXBoNlMRwP45n9Jc,18212
360
+ django_cfg/apps/payments/services/core/balance_service.py,sha256=WjXYfTGlSSiX047IZSoeHvagSnID9qpSrjVueQUabIA,18636
327
361
  django_cfg/apps/payments/services/core/base.py,sha256=BBOUWPx3dS7u7Ix7KaAyuacCTfXM9jympUuaRSGP4-M,5448
328
362
  django_cfg/apps/payments/services/core/currency_service.py,sha256=1E6uX9rhJyycfktxunkHPD3nhCLWLchXZoVXiwjGiOM,18174
329
- django_cfg/apps/payments/services/core/payment_service.py,sha256=KoSSk_t68h645Cz4mG0lG4DN6GSIrJ1_tt6MkPtylvg,17424
363
+ django_cfg/apps/payments/services/core/payment_service.py,sha256=X8-yXpBFnvfSVEidMrj42RRvQRZFSKu0cTTrRTtCU0s,18727
330
364
  django_cfg/apps/payments/services/core/subscription_service.py,sha256=1kfxaW-BybIwQkbEpizxNJG_Egz6aF1qCVF2mX4v7Q4,21125
331
365
  django_cfg/apps/payments/services/core/webhook_service.py,sha256=5Ly44QDUQJYm7V5xkOoKaPzobwf5MkLjFI6uamrpTY0,16222
332
366
  django_cfg/apps/payments/services/integrations/__init__.py,sha256=sD48dDem1rqR8jALgrShBfm0-VMhvbK32q4_ufGElq8,663
333
- django_cfg/apps/payments/services/integrations/ngrok_service.py,sha256=QK7aCgm6tVvEZML3LVrfNvXD225pFB5jQD2qLajt42o,1312
367
+ django_cfg/apps/payments/services/integrations/ngrok_service.py,sha256=dxK6dwC2IPknwu6-RlX9v8KK-D6WK922LtVxHtxxxik,1310
334
368
  django_cfg/apps/payments/services/integrations/providers_config.py,sha256=Uuzg8RQAs28csjiDKuk_dnx5ThyB71BJYZmy4ZNCnKs,3264
335
369
  django_cfg/apps/payments/services/providers/__init__.py,sha256=KyBHEiYmIXgWDMDmODSI0dqLBY4Sl3bsBH0Hebx8I4U,443
336
370
  django_cfg/apps/payments/services/providers/base.py,sha256=LT1ypvXQgvDZNZYkPav5QxkeOsdtz2NzWUj-Pae1Fi0,9929
337
371
  django_cfg/apps/payments/services/providers/nowpayments.py,sha256=bfOZZN0HRb3WiwWqm6Aq2ImAqkDnwvhKlKCxsvawWmA,17525
338
- django_cfg/apps/payments/services/providers/registry.py,sha256=futGBBI7KB25eyJ_iszu4l6QMXipKaNWBMBKsI3qSYQ,15849
372
+ django_cfg/apps/payments/services/providers/registry.py,sha256=K0v7chazH3MHDNpVPyWayq8EBgO7yTiV5Upfw1W9gVU,16573
339
373
  django_cfg/apps/payments/services/types/__init__.py,sha256=TCx_laKqtUbe2o3Eu_v73TMkbL7fIJ__VYvE_U3xrvw,1634
340
374
  django_cfg/apps/payments/services/types/data.py,sha256=rjXSsjBqDMVQyx5vRynIbCWWO7A37A7G0iVgohpj4qs,9582
341
375
  django_cfg/apps/payments/services/types/requests.py,sha256=0s-5kPdtInnXJE_0lVUlIIGHDM1Ua4bLoG84qxze_i4,6786
342
376
  django_cfg/apps/payments/services/types/responses.py,sha256=3FdyNOGQEoI8uZNjBPhhw1XtXqs-2lo02qZ5TQg-CqY,7947
343
377
  django_cfg/apps/payments/services/types/webhooks.py,sha256=y7R1CoAZBRn71y9Mc8k6VVj5rjpbQ1ZHJkNHD1ZyK3M,10095
344
378
  django_cfg/apps/payments/signals/__init__.py,sha256=rSso5kyUszEtlbYiw6A72XU2mK1gmB7O9n2lQb2GPWQ,933
345
- django_cfg/apps/payments/signals/api_key_signals.py,sha256=u_YhN-V8dTBSrLCsc4RwqbIYVMybMPylG61umK9TInA,8579
346
- django_cfg/apps/payments/signals/balance_signals.py,sha256=hrnjs7f4-KZQYN9-y258rFuH8RW610ddDsYQW3-R8nA,5998
379
+ django_cfg/apps/payments/signals/api_key_signals.py,sha256=fR61t2mOAORD-ugWl4u6ZSP5nuykahnyIqh1uWjRnbY,8587
380
+ django_cfg/apps/payments/signals/balance_signals.py,sha256=yoWCse6vZfaPkfQVnOIag2aGB23IAb91pzqe29IuFyI,6257
347
381
  django_cfg/apps/payments/signals/payment_signals.py,sha256=uV5v1HlHKxP4A_bpIC1TkTHkj28nEsP3gbRJx3ca0iI,5449
348
382
  django_cfg/apps/payments/signals/subscription_signals.py,sha256=erzd3UczXGKamUecq2r2DeLm-0ycpFANy0nO948qmwg,9061
349
- django_cfg/apps/payments/static/payments/css/components.css,sha256=CE9HL-pqlq1gvmluNIXh5-GvRvHLSYHRm-MVxURZO-I,8395
350
- django_cfg/apps/payments/static/payments/css/dashboard.css,sha256=s1Uupb_ixnIFQKljetlcBP-r7_HkeanbNMul_zdrWOo,4539
351
- django_cfg/apps/payments/static/payments/js/components.js,sha256=3z85iEdT1ZQt9tf4_yJzf20gLaBHvieQ-5f_0di4lGY,19320
352
- django_cfg/apps/payments/static/payments/js/utils.js,sha256=NgHkyU9mS5GW7CWBDIKmIUjilkD8KdnzaWWC-GtUzss,13256
383
+ django_cfg/apps/payments/static/payments/js/api-client.js,sha256=p4No-Fl86ww8XepNMGAa0MaPbGknAoDqqiJILVszc1Y,14059
384
+ django_cfg/apps/payments/static/payments/js/ngrok-status.js,sha256=icSv2FB_zFgOFGNZftklgWO_oH9Ryw7bXs-hyqXyThY,1531
385
+ django_cfg/apps/payments/static/payments/js/payment-dashboard.js,sha256=4KDzaU1mTBgk7Xj5Pxy6FUG4HnLWa9G6PeUvUv9jnqs,1601
386
+ django_cfg/apps/payments/static/payments/js/payment-form.js,sha256=Q8mm4Uj3Q9ctjZYQ44cuPdfAaiRdTyaWLMIsQQafYsE,6649
387
+ django_cfg/apps/payments/static/payments/js/payment-list.js,sha256=Dz_2Bn0JQ9N7biv_Sd92vXIU-IZHKn1_lFA8AFm_amc,3269
388
+ django_cfg/apps/payments/static/payments/js/webhook-dashboard.js,sha256=kpmoks7t_Lf0jIEHtnRoWBLX4rU5OL8e1AFBDlxwlUU,5271
353
389
  django_cfg/apps/payments/templatetags/__init__.py,sha256=K8PcAAZu-q6LgCbrH29BSxwsWH0GQx-PhT7J-hBATMM,24
354
390
  django_cfg/apps/payments/templatetags/payment_tags.py,sha256=hSeWW8Q8ASHrAd6eISxa1LsusVN6Z4IH-sGAhFwd3lo,11902
355
391
  django_cfg/apps/payments/views/api/__init__.py,sha256=gKd8dE4i-ebCxjquFHI6UaW6KKgV0RE3RlH22c8O4pU,2005
356
- django_cfg/apps/payments/views/api/api_keys.py,sha256=b0VH_HNXRl6W7nED23qcxXS9w7NvbyNLfChxlFwMKQg,13219
392
+ django_cfg/apps/payments/views/api/api_keys.py,sha256=yN7DljcQZKNvKzk7MwjJHM6LnmRHwBXfr2KEShC2RYA,13835
357
393
  django_cfg/apps/payments/views/api/balances.py,sha256=a9FsmNjopy8702xXu1gFjWNc6XHkqIoc62HfTG65IdI,13089
358
- django_cfg/apps/payments/views/api/base.py,sha256=HfrOS7n672frW_noseIb5leF5lIXLpDuNfAWAnxC3mQ,10321
359
- django_cfg/apps/payments/views/api/currencies.py,sha256=GrP3FIyxeaiKPjl5uhpw-xv-Gq9tYM75uGDqSSd_vLU,13765
360
- django_cfg/apps/payments/views/api/payments.py,sha256=YybntwsLCxNeTobcQeHRcbr0Ah6IXUVW-1FKoPuznUg,14411
361
- django_cfg/apps/payments/views/api/subscriptions.py,sha256=9SKZIGMOVy4cqawZfBWIGflYKhI4Ahh3yqOuCJyBfpE,16719
394
+ django_cfg/apps/payments/views/api/base.py,sha256=XarvJUnifIB40-gxpLWhQt8WS50EISj6ZNtbw4j_1u0,10388
395
+ django_cfg/apps/payments/views/api/currencies.py,sha256=so7QiFNw5ixtfZc4PsKXteXW7WwwANTs50hTXlRaU2I,13790
396
+ django_cfg/apps/payments/views/api/payments.py,sha256=_CvDbmGDR7vwn0BrkVJ_KIjItSMVmTLdfVEeOwQn__o,14624
397
+ django_cfg/apps/payments/views/api/subscriptions.py,sha256=-0l80BH-csD482EFjgrXREJMZ6ongOiJQevjnBuiV48,16642
362
398
  django_cfg/apps/payments/views/api/webhooks.py,sha256=FrSYuz07r2M0HE9QcG71T8WlqDMX9gKT_XqRXLd71DE,17288
399
+ django_cfg/apps/payments/views/overview/__init__.py,sha256=2SbWIJzExZFsOiBWnaIMURUhXnJDJ8mBcueuKFkBhJw,987
400
+ django_cfg/apps/payments/views/overview/serializers.py,sha256=uxDlzMIrn7hhS0aNExuR2YHZ5Tl1LgeFBfwZwLEu4lo,9654
401
+ django_cfg/apps/payments/views/overview/services.py,sha256=w2SO1UBmNZlXERjJZYIRteGPTwj8AiwUQCBWsTpCAcY,16173
402
+ django_cfg/apps/payments/views/overview/urls.py,sha256=6Ldh8-hrkUakZDkZ7eMXpcYrdAnR8xs2UpmyDUOk4z8,1212
403
+ django_cfg/apps/payments/views/overview/views.py,sha256=F1chPhhQYeey1Wpg7z7fKvlzqT5Nxr2dKIc5PioLc-U,7991
363
404
  django_cfg/apps/payments/views/serializers/__init__.py,sha256=mPY55D6bhRLyPHw6ORrEqtIdgyU2Uezg00EhgD5HK40,2310
364
- django_cfg/apps/payments/views/serializers/api_keys.py,sha256=KDN5g6uRcOaK4ZiFSGMwtoQR3ha09WbLd9udGP_06DM,14272
365
- django_cfg/apps/payments/views/serializers/balances.py,sha256=BncXogOYVpngJfa6qiu07q3X1CbVsr4FXEMIdsInzvU,9747
366
- django_cfg/apps/payments/views/serializers/currencies.py,sha256=EmpJeA94z29_N75nfpC9EvOhQi9aMhMrmvXVuAsMBdM,10784
367
- django_cfg/apps/payments/views/serializers/payments.py,sha256=rX30I6PQxUh0BpNCaWEp1Vq9lktPwx1jJoqAJcLlHM0,12713
368
- django_cfg/apps/payments/views/serializers/subscriptions.py,sha256=iFd8NKsnIYcrAU7imDp6dikV79JuKYuzakljk4PMFc0,14742
405
+ django_cfg/apps/payments/views/serializers/api_keys.py,sha256=PjJJJPMX6b1PD2ppJ6vWSPLLGbEhE1_e3E8Rx5U0bJ0,14873
406
+ django_cfg/apps/payments/views/serializers/balances.py,sha256=-8TnPFH-Am2xYclvK19kZenXTp7AjaE6tetyDaSREW0,9414
407
+ django_cfg/apps/payments/views/serializers/currencies.py,sha256=OzPU8BipZGG7I8PLm1IQOAuPwe9WZDMGNFpM784-YWc,10539
408
+ django_cfg/apps/payments/views/serializers/payments.py,sha256=WvFlTyjIG-HIecYD4320AMKhkCp4J_eQ8erQdL3kIqQ,12542
409
+ django_cfg/apps/payments/views/serializers/subscriptions.py,sha256=b5hrFUjqKOxnpWd8nrOzNCwQkBxNyZPNw9gGxVpTbFc,13620
369
410
  django_cfg/apps/payments/views/serializers/webhooks.py,sha256=u6YUQoCiTXYWlPkaov7fNwJMopG5uGc7QAE6OQLP3zc,6000
370
411
  django_cfg/apps/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
371
412
  django_cfg/apps/support/admin.py,sha256=-fcegtqoCcwPiBXwyNLMftcYCTTbTRRBpWItyeNNkDY,8827
@@ -425,11 +466,11 @@ django_cfg/cli/commands/__init__.py,sha256=EKLXDAx-QttnGmdjsmVANAfhxWplxl2V_2I0S
425
466
  django_cfg/cli/commands/create_project.py,sha256=8Jg4rfnGCINTd6ebBqx-WXG57AIB5C2yY5D3JQAtpyI,21029
426
467
  django_cfg/cli/commands/info.py,sha256=AaLbFFOjHwqiIzZChPxfD3ASZZs1IAD-0RJQaLo2PC0,4925
427
468
  django_cfg/core/__init__.py,sha256=eVK57qFOok9kTeHoNEMQ1BplkUOaQ7NB9kP9eQK1vg0,358
428
- django_cfg/core/config.py,sha256=juDmGqxWl5TTHoueFtCvcja3DGRCzd1ccYDWJQ_edKI,31368
469
+ django_cfg/core/config.py,sha256=u1g6mdUb4hHdUo8lkj3Z102E15lef3q87q2jWv4HdbE,31743
429
470
  django_cfg/core/environment.py,sha256=MAoEPqIPsLVhSANT2Bz4nnus2wmbMW0RCOQxhQfDrDc,9106
430
471
  django_cfg/core/exceptions.py,sha256=RTQEoU3PfR8lqqNNv5ayd_HY2yJLs3eioqUy8VM6AG4,10378
431
- django_cfg/core/generation.py,sha256=s4-vLCfVqa0LjtGLCFTtTqgjs383JLzhNNDAwkb6FjA,26416
432
- django_cfg/core/validation.py,sha256=PhwDBTs24nuM3xqfIT3hXmN88VrhMT-Bk8Yb8FxjmPk,6590
472
+ django_cfg/core/generation.py,sha256=TVRm_s9NaajekkfmIbk2sTlN2je39OALzzqePBxniyA,26427
473
+ django_cfg/core/validation.py,sha256=QeM1k6jjlFp4Sc9FAfK3SS_3jyP6orXRqA7XBt24Q6w,6574
433
474
  django_cfg/core/integration/README.md,sha256=3V27xNWoGQkauixJGW8TAE8p0FB8iCdt6zI4G4Nnssw,10699
434
475
  django_cfg/core/integration/__init__.py,sha256=Il-UZ1dR2cn1Ev_CBMUVfoOxFTCoi__0Z3kmhkx_Na8,1505
435
476
  django_cfg/core/integration/commands_collector.py,sha256=-9ppg2jYSrTC35Ijm5vAHUcNZM6AkayuPkfw715Ca2Q,8325
@@ -438,7 +479,7 @@ django_cfg/core/integration/version_checker.py,sha256=NrrbyTAtIkZdNPQHO2PMQjrp8D
438
479
  django_cfg/core/integration/display/__init__.py,sha256=YwU9nmXOcDJL3q0wW5Q_59gLh_BXPsOfDlT3sZqHWZU,315
439
480
  django_cfg/core/integration/display/base.py,sha256=67ABqa1WErBcFTROFy8fBzwvYYmHiloBk7-Hpexd2rE,5720
440
481
  django_cfg/core/integration/display/ngrok.py,sha256=QdsIGTA6S_3shIYaxMRtcUibb5L4nMUrFMFg7q9OWA0,6242
441
- django_cfg/core/integration/display/startup.py,sha256=ZDxTGuGt4CMdQ0aOu8NuDulrObwiVgfRUBU1kIhKzGc,34589
482
+ django_cfg/core/integration/display/startup.py,sha256=E0xs0aR8g1eraptverRS8k6BoErWZcbZeJESr6PG5uI,34585
442
483
  django_cfg/management/__init__.py,sha256=NrLAhiS59hqjy-bipOC1abNuRiNm5BpKXmjN05VzKbM,28
443
484
  django_cfg/management/commands/__init__.py,sha256=wc5DFEklUo-wB-6VAAmsV5UTbo5s3t936Lu61z4lojs,29
444
485
  django_cfg/management/commands/auto_generate.py,sha256=wjqS2dq8B5fuftHjtsXTc-vk3CkOYVGUESMSw4MCWHw,14343
@@ -452,7 +493,7 @@ django_cfg/management/commands/migrator.py,sha256=Etdhl1EKSMWSxyQ70dX48bhYeQiIib
452
493
  django_cfg/management/commands/rundramatiq.py,sha256=zYKg6U8PRx09NsW0tK0po9fYkmvNiEzGzwYtramH_gc,9126
453
494
  django_cfg/management/commands/runserver_ngrok.py,sha256=8S711fS0pMasp8F8yigraDJLNnyfqFnrUnDzH2s8Gpk,6560
454
495
  django_cfg/management/commands/script.py,sha256=aXyum1mdoPPOh-4YySRhianjbuAfe19Dyry72E6IQU4,17110
455
- django_cfg/management/commands/show_config.py,sha256=BKr3-1chQday-74xuwtWglh3eHt8uDPmgqZm_TkcDWQ,8902
496
+ django_cfg/management/commands/show_config.py,sha256=6Yf-hAnN4rl_fbaidqzDhhH1kVYwfKKcaf_KtrAE4hY,8894
456
497
  django_cfg/management/commands/show_urls.py,sha256=dqqJg2wwSoKTWGsyacXsFotaI9KahZVfYDGRIJa2riw,12342
457
498
  django_cfg/management/commands/superuser.py,sha256=EpcaOkGMHoBRz2wuy4tAHi7YgEdUMGlTZMRIGXbUhcg,11194
458
499
  django_cfg/management/commands/task_clear.py,sha256=4frvB97yKbGQMiFfYPPlxI4RudFogQOGzTRXbTeDXXY,8018
@@ -460,12 +501,13 @@ django_cfg/management/commands/task_status.py,sha256=hhZ0LyiOLoG9luT0hOEA12mpJxr
460
501
  django_cfg/management/commands/test_email.py,sha256=nBaQLQz-yQx0xgwRJKuxAdChpotLILJm4FKqNOR3qes,3263
461
502
  django_cfg/management/commands/test_telegram.py,sha256=M7wEhOgtAGnhn6y7NlbPsGw1uvVW0PcZWaGdTffaZ-k,2139
462
503
  django_cfg/management/commands/test_twilio.py,sha256=ukSecCOohO98suVk5Qt5Fd7DlefVkx9sT_U2JykQZA4,4226
463
- django_cfg/management/commands/tree.py,sha256=PAJCv8GFU3kwTox-B5kKwznhsOkuNNnLBvgP-pDaQFs,13372
504
+ django_cfg/management/commands/tree.py,sha256=Gu9H6YJogX7Z9vnGWDY4jCh7GOr381P5qzHKmALzJUY,13253
464
505
  django_cfg/management/commands/validate_config.py,sha256=KNW1hGGGmNNdpMxwLfsTRIcko-HhfTp06qq8JazJvxk,7475
465
506
  django_cfg/middleware/README.md,sha256=7XukH2HREqEnNJ9KDXhAcSw6lfpZ3gvKKAqGYvSivo4,3886
466
- django_cfg/middleware/__init__.py,sha256=IdcooCQLd8rNt-_8PXa2qXLMBnhsvkfdfuhI9CmgABA,195
507
+ django_cfg/middleware/__init__.py,sha256=FxYcAAVh8z-WM-MkipWAwfOwQx2b1rSPyi3Mt9xTUP0,278
467
508
  django_cfg/middleware/pagination.py,sha256=RfLka1DbmLD-zznSAqayGD08x95ikcnkzp9LT5Jj5Bs,8655
468
509
  django_cfg/middleware/public_endpoints.py,sha256=EHJKzlYwakeU3hSPBJ53FZn8Ub-jwENCVSfFDJt3kAk,6915
510
+ django_cfg/middleware/static_nocache.py,sha256=drpwoKN8zGH1-p4ltMZozL5fUyByzumqLJ7MkJBENnA,1888
469
511
  django_cfg/middleware/user_activity.py,sha256=7XVSnnIVfz-Hucx-YWRODcXd3qDH8Y8E__-6zYWLxqI,6153
470
512
  django_cfg/models/__init__.py,sha256=du24ZdqKdvc3VNXjgufEz_6B6gxdHtlqVHG4PJWaOQM,419
471
513
  django_cfg/models/api.py,sha256=bCsQR3CVsAUs78m1Q1aFpPTNbvGtr1cq-fuxdCK2-JI,4596
@@ -482,9 +524,9 @@ django_cfg/models/jwt.py,sha256=3R_dpLmVZIcH4zdtwA4qKnuCB8RZQACrgsbbgWY2q4c,9025
482
524
  django_cfg/models/limits.py,sha256=nUfvyPykwKR38ZOlIFqlNGRmfV8RO5hiUrhDH6FCHJw,7449
483
525
  django_cfg/models/logging.py,sha256=4vZF-G9rPmXMxxtUx_ad7Esvgbe8a_5Dl692Yg0fL4A,10636
484
526
  django_cfg/models/ngrok.py,sha256=MVgcKWx0DRSW0QcwhiSx2vVwTSG49vbVrzPkZqDK-zw,3575
485
- django_cfg/models/payments.py,sha256=PcDVHVoqLYxE2fXInr8_cx29o28Bx29Q4NckChOtx6I,7089
527
+ django_cfg/models/payments.py,sha256=i4E1dGygp6mE8_yCPJPp-GsQm3D7qmTHKn91LdBCDx8,7214
486
528
  django_cfg/models/revolution.py,sha256=16fQ09iovrmlepNcTr2J0hZ-ShdMnMSQ2rTXa60yrus,8134
487
- django_cfg/models/security.py,sha256=Xv19ZVOIenB_-f0wB6fm-Ap4j9kA43bSFaT2XenpSqc,4685
529
+ django_cfg/models/security.py,sha256=pJSgxKTINEY5vZR9IbaXhxkW2hh2lk8-E1tqMJNGqWM,5158
488
530
  django_cfg/models/services.py,sha256=fj9JjrJFrlL4DMnMbx_D8JiiZpz4E5uBqmhquAxau7c,13159
489
531
  django_cfg/models/tasks.py,sha256=zFvQaikXi-W-iN7eqR6ZGNiKJnPgOL3yl9RRis-5qZs,17160
490
532
  django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
@@ -492,7 +534,7 @@ django_cfg/modules/base.py,sha256=A7fAp3eEBbs9zxVq96k9FotWnqHqZA5b-kH9-hOJ1zo,59
492
534
  django_cfg/modules/django_email.py,sha256=Kk2B1Y73xlbpNKCDkU2uBT01iVANjKpmVlKbRScVCs4,18059
493
535
  django_cfg/modules/django_health.py,sha256=7QzuQ6WyjWYj6lecd4auwRvEyrMUL7N6hiAp-tLyoY4,8923
494
536
  django_cfg/modules/django_logger.py,sha256=ulODtdRnjCTM6OaF4QR-GUzXouHdQCrqDMjPwRUUuX8,8910
495
- django_cfg/modules/django_ngrok.py,sha256=LjlAIJprbFhFYwDG93acas8XaB6iFQGu4fWvZiDNhyQ,10482
537
+ django_cfg/modules/django_ngrok.py,sha256=IHR4MsmHGA1s7VaTkcBKhkfA7mcIUBr1gWxO5NQGhYc,10642
496
538
  django_cfg/modules/django_tasks.py,sha256=SBas2juL6RfDL7ttm4xAxJ7bvS052WmUzixNHPlzJVo,17328
497
539
  django_cfg/modules/django_telegram.py,sha256=qz3EOJnCR_YTJVIu2-Iq8--cla6mU-WPohquQ26eHDQ,16367
498
540
  django_cfg/modules/dramatiq_setup.py,sha256=Jke4aO_L1t6F3OAc4pl12zppKzL0gb1p6ilfQ3zUIZ8,454
@@ -538,7 +580,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
538
580
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
539
581
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
540
582
  django_cfg/modules/django_unfold/__init__.py,sha256=Z91x1iGmkzlRbEb2L9OCFmYDKNAV9C4G3i15j5S0esc,1898
541
- django_cfg/modules/django_unfold/dashboard.py,sha256=x2rlTWihTPEjBX83nIqzY-YhlAvY5blLnAKW63jAOvY,17606
583
+ django_cfg/modules/django_unfold/dashboard.py,sha256=OBeU7X47ssZxhX7r9MBf-nXzVSBLLUGk04U47n6zqrE,17516
542
584
  django_cfg/modules/django_unfold/models.py,sha256=bY6QSSaH_-r9vOTkSQjxeIkl5RaED7XkxXkT8-W5stk,4014
543
585
  django_cfg/modules/django_unfold/system_monitor.py,sha256=cznZqldRJqiSLSJbs4U7R2rX8ClzoIpqdfXdXqI2iQw,6955
544
586
  django_cfg/modules/django_unfold/tailwind.py,sha256=X9o1K3QL0VwUISgJ26sLb6zkdK-00qiDuekqTw-fydc,10846
@@ -619,11 +661,11 @@ django_cfg/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
619
661
  django_cfg/templatetags/django_cfg.py,sha256=11_3YX0jAVuOd_fVcDixAxyDMG4V7A98SPqv8Lbfpxc,1308
620
662
  django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
621
663
  django_cfg/utils/path_resolution.py,sha256=C9As6p4Q9l3VeoVkFDRPQWGrzAWf8O8UxLVkaI3ToVM,13899
622
- django_cfg/utils/smart_defaults.py,sha256=Wola023crqB0zMzqMCN2Ne3Q5KcQ7x0-AgpaGhZ0m84,8938
664
+ django_cfg/utils/smart_defaults.py,sha256=M7KEqGfBiwXV-Hk-kS5YGZK8kEc8K2EGqli0hvjBwCQ,10972
623
665
  django_cfg/utils/toolkit.py,sha256=MfnjfGl2_VZo2o5aWIJaOYz2w45HQfOjO6X6nm5BJ8k,25312
624
666
  django_cfg/utils/version_check.py,sha256=jI4v3YMdQriUEeb_TvRl511sDghy6I75iKRDUaNpucs,4800
625
- django_cfg-1.3.1.dist-info/METADATA,sha256=oy1GCbPlrwEsSyAvAZtbfgXYJ-NYPckUwVYGlMKF4ms,38740
626
- django_cfg-1.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
627
- django_cfg-1.3.1.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
628
- django_cfg-1.3.1.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
629
- django_cfg-1.3.1.dist-info/RECORD,,
667
+ django_cfg-1.3.5.dist-info/METADATA,sha256=7SY2HNBQfadRnPyt3Q5l5aMvjnyDReZHuFYRzKfWIL8,38740
668
+ django_cfg-1.3.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
669
+ django_cfg-1.3.5.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
670
+ django_cfg-1.3.5.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
671
+ django_cfg-1.3.5.dist-info/RECORD,,
@@ -1,38 +0,0 @@
1
- {% comment %}
2
- Development Tool Card Component
3
-
4
- Usage:
5
- {% include 'payments/components/dev_tool_card.html' with title="Ngrok Tunnel" status="Active" status_color="text-green-600" details=details_dict button_text="Check Status" button_class="bg-gray-100" %}
6
-
7
- Expected details structure:
8
- {
9
- 'Status': 'Active',
10
- 'URL': 'https://abc123.ngrok.io'
11
- }
12
- {% endcomment %}
13
-
14
- <div class="p-4 border border-gray-200 dark:border-gray-700 rounded-lg">
15
- <h4 class="font-medium text-gray-900 dark:text-white mb-2">{{ title }}</h4>
16
-
17
- <div class="space-y-2 text-sm">
18
- {% for label, value in details.items %}
19
- <div class="flex justify-between">
20
- <span class="text-gray-600 dark:text-gray-400">{{ label }}:</span>
21
- {% if label == 'Status' %}
22
- <span class="{{ status_color|default:'text-gray-600' }}" >{{ value }}</span>
23
- {% elif label == 'URL' and value %}
24
- <code class="text-xs break-all">{{ value }}</code>
25
- {% else %}
26
- <span class="text-xs">{{ value|default:'N/A' }}</span>
27
- {% endif %}
28
- </div>
29
- {% endfor %}
30
- </div>
31
-
32
- {% if button_text %}
33
- <button onclick="{{ button_onclick|default:'' }}"
34
- class="mt-3 w-full px-3 py-1 text-sm {{ button_class|default:'bg-gray-100 dark:bg-gray-700' }} text-gray-700 dark:text-gray-300 rounded hover:bg-gray-200 dark:hover:bg-gray-600">
35
- {{ button_text }}
36
- </button>
37
- {% endif %}
38
- </div>